2015-11-09 2 views
0

Я читаю данные от Satec PMEH130 Plus. Когда я разбираю ответы modbus, каждое число является правильным, за исключением отрицательных, оно должно возвращать что-то вроде -997, но оно возвращает 655xx .. Есть ли исправление для разбора отрицательных чисел?Ошибка деления на шине Modbus

Вот мой код:

Я посылаю этот запрос на устройство:

} 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

Хорошо, понял. Вы должны вычесть значение 65536.

PFL1 = parseInt (значения [6], 16) - 65536;

Смежные вопросы