我正在从Satec PMEH130 Plus读取数据。当我解析modbus响应时,每个数字都是正确的,除了负数之外,它应该返回类似-997的东西,但是它返回655xx ..是否修复了解析负数?
这是我的代码:
我将此请求发送到设备:
} else if ( testCount == 2 ) {
buffer[0] = 0x01;
buffer[1] = 0x03;
buffer[2] = 0x34;
buffer[3] = 0x18;
buffer[4] = 0x00;
buffer[5] = 0x0c;
buffer[6] = 0xcb;
buffer[7] = 0xf8;
lab = 'KVAL1, KVAL2, KVAL3, PFL1, PFL2, PFL3';
设备返回modbus字符串:
010318000000000000000000000000fc1dfffffc20fffffc1bffff4fa1
这是我的modbus解析功能:
function parseModbus(hexString, type)
{
var LVAL = hexString.substr(4,2);
LVAL = parseInt(LVAL, 16);
var values = hexString.substr(6, (LVAL*2)).match(/.{1,4}/g);
switch(type)
{
case 2:
if(values) {
//console.log(values.length);
kVAL1 = parseInt(values[0], 16);
kVAL2 = parseInt(values[2], 16);
kVAL3 = parseInt(values[4], 16);
PFL1 = parseInt(values[6], 16);
PFL2 = parseInt(values[8], 16);
PFL3 = parseInt(values[10], 16);
}
break;
}
错误的值在PFL1,PFL2和PFL3中。感谢。
答案 0 :(得分:0)
好的,想通了。您必须使用65536减去该值。
PFL1 = parseInt(values [6],16) - 65536;