gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:26:22 24 4
gpt4 key购买 nike

我正在尝试easyModbus TCP ,读取 ADAM 6017 模拟单元的保持寄存器。我正在使用example client code熟悉这个库。我似乎遇到的问题是我需要将寄存器的值读取为无符号,但它给了我带符号的值。我的设备连接了 3.3548 伏电压,刻度设置为 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){
}
}
}

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

最佳答案

如果我没有记错的话,您设备的手册:

https://www.i-components.fi/pdf/76-ADAM-6066-CE.pdf

表示(第 268 页)您的 channel 0 模拟值应位于寄存器 40001 中。

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

有时,在忙于编写代码之前检查您的设备很有用。为此,您可以使用 modpoll ( https://www.modbusdriver.com/modpoll.html ) 或 QModMaster ( https://sourceforge.net/projects/qmodmaster/ ) 之类的东西。

关于java - 使用 EasyModbusTCP Java,如何将寄存器读取为无符号值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56228896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com