Modbus解析负数

时间:2015-11-09 09:34:18

标签: parsing modbus

我正在从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中。感谢。

1 个答案:

答案 0 :(得分:0)

好的,想通了。您必须使用65536减去该值。

  

PFL1 = parseInt(values [6],16) - 65536;