Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用EasyModbusTCP Java,如何将寄存器读取为无符号值?_Java_Modbus_Modbus Tcp - Fatal编程技术网

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

使用EasyModbusTCP Java,如何将寄存器读取为无符号值?,java,modbus,modbus-tcp,Java,Modbus,Modbus Tcp,我正在尝试,读入ADAM 6017模拟单元的保持寄存器。我正在使用来熟悉这个图书馆。我似乎遇到的问题是,我需要将寄存器的值读取为无符号,但它会返回有符号的值。我有3.3548伏连接到该单位,规模设置为0-5v,它输出-10781从ADC。以下是我写的: package modbus.logger; import de.re.easymodbus.modbusclient.*; import java.lang.*; /** * * @author Michael Haire * SJVAP

我正在尝试,读入ADAM 6017模拟单元的保持寄存器。我正在使用来熟悉这个图书馆。我似乎遇到的问题是,我需要将寄存器的值读取为无符号,但它会返回有符号的值。我有3.3548伏连接到该单位,规模设置为0-5v,它输出-10781从ADC。以下是我写的:

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){        
        }   
        }
   }

我应该如何获得无符号值?

如果我没有弄错您的设备手册:

说明(第268页)通道0模拟值应在寄存器40001中

这意味着您应该使用
modbusClient.ReadHoldingRegisters
而不是输入寄存器


有时,在您忙于编写代码之前检查设备是很有用的。为此,您可以使用modpoll()或类似QModMaster()的工具。

如果我没有弄错您的设备手册:

说明(第268页)通道0模拟值应在寄存器40001中

这意味着您应该使用
modbusClient.ReadHoldingRegisters
而不是输入寄存器


有时,在您忙于编写代码之前检查设备是很有用的。为此,您可以使用modpoll()或类似QModMaster()的东西。

我使用[Simply Modbus](www.simplymodbus.ca)作为程序外的接口。我之前已经尝试过保持寄存器行,它给了我一个有符号的值,一旦超过2.7V,输出就变成负数。我知道Adam 6017手册,因为我经常使用这些装置。有符号的值是32767,我的输出是正的,但超过这个值,它就会变成负的。我需要和unsigned的值,因为使用unsigned可以得到完整的65565输出范围,我明白你的意思了。我不是Java专家,但显然,所有东西都是用Java签名的。我想你可以换成无签名的。看看这里:Java可能是有符号的,但是Modbus单元的输出应该是无符号的。但是您是否尝试过使用Byte.toUnsignedInt()进行转换;一旦您读取了寄存器?我将使用[Simply Modbus](www.simplymodbus.ca)作为程序外的接口。我之前已经尝试过保持寄存器行,它给了我一个有符号的值,一旦超过2.7V,输出就变成负数。我知道Adam 6017手册,因为我经常使用这些装置。有符号的值是32767,我的输出是正的,但超过这个值,它就会变成负的。我需要和unsigned的值,因为使用unsigned可以得到完整的65565输出范围,我明白你的意思了。我不是Java专家,但显然,所有东西都是用Java签名的。我想你可以换成无签名的。看看这里:Java可能是有符号的,但是Modbus单元的输出应该是无符号的。但是您是否尝试过使用Byte.toUnsignedInt()进行转换;一旦你读了注册表?