作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试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/
我是一名优秀的程序员,十分优秀!