我使用NModbus4.dll与modbus设备通信。 我读了这个寄存器:
注册:0257-0288
寄存器数量:32
变量名称:监视缓冲区
数据类型:BCD
描述:可读
使用此代码:
byte slaveId = byte.Parse ("1");
ushort startAddress = 257;
ushort[] readValue = _serialMaster.ReadHoldingRegisters(slaveId, startAddress, 32);
byte[] asciiValue = Modbus.Utility.ModbusUtility.GetAsciiBytes(readValue);
string result = System.Text.Encoding.UTF8.GetString(asciiValue);
我使用this converter从十六进制转换为文本,我得到了这个:
epo tureD aiemet r 7 646.58 mm 4
该寄存器用于读取设备lcd内容,此内容为:
管道外围 2345.78毫米
我无法获得正确的lcd内容。
答案 0 :(得分:0)
根据source code,GetAsciiBytes
方法将对话应用于UTF8
;
string result = Encoding.UTF8.GetString(asciiValue);
答案 1 :(得分:0)
我解决了问题。代码没有问题,设备响应不好。