我正在尝试easyModbus TCP,以读取ADAM 6017模拟单元的保持寄存器。我正在使用example client code来熟悉这个库。我似乎遇到的问题是我需要将寄存器的值读取为无符号,但它会带给我带符号的值。我将3.3548 V电压连接到该装置,并且刻度设置为0-5v,并且它从ADC输出-10781。这是我写的:
package modbus.logger;
import de.re.easymodbus.modbusclient.*;
import java.lang.*;
/**
*
* @author Michael Haire
* SJVAPCD
*/
public class ModbusLogger {
public static void main(String[] args)
{
float volt;
int Input;
int x = 1;
float input;
ModbusClient modbusClient = new ModbusClient("192.168.1.201",502);
try
{ while(x>0){
modbusClient.Connect();
System.out.print("Raw ADC Value: ");System.out.println(modbusClient.ReadHoldingRegisters(0, 1)[0]);
Input = modbusClient.ReadHoldingRegisters(0, 1)[0];
System.out.print("Input: ");System.out.println(Input);
input = (float) Input;
volt = (float) ((input / 65536)*5.0);
System.out.print("Voltage: ");System.out.printf("%f%n" , volt);System.out.println("");
}}
catch (Exception e){
}
}
}
我应该怎么做才能获得无符号值?
答案 0 :(得分:0)
如果我没记错您设备的手册,
https://www.i-components.fi/pdf/76-ADAM-6066-CE.pdf
说(第268页),您的通道0模拟值应位于寄存器40001 中。
这意味着您应该使用modbusClient.ReadHoldingRegisters
代替输入寄存器。
有时候在忙于编写代码之前检查设备很有用。为此,您可以使用modpoll(https://www.modbusdriver.com/modpoll.html)或类似QModMaster(https://sourceforge.net/projects/qmodmaster/)的东西。