使用EasyModbusTCP Java,如何将我的寄存器读取为无符号值?

时间:2019-05-20 22:22:50

标签: java modbus modbus-tcp

我正在尝试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){        
        }   
        }
   }

我应该怎么做才能获得无符号值?

1 个答案:

答案 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/)的东西。