function Decode(fPort, bytes) {
var jsonobj;
var result = 0;
// 当前时间
var myDate = new Date();
var current_time = myDate.toLocaleString();
// 16进制报文
var hexBytes = new Array();
// 原始报文字符串
var rawData = "";
for(var i = 0; i < bytes.length; i++) {
rawData += bytes[i] + " ";
}
// 采集数据为19个字节
if (bytes.length = 19) {
jsonobj = {
"Flag": 1,
"SensorType": 43,
"SensorNumberThird": 0,
"Temperature": parseTemperature(bytes),
"Value": parseValue(bytes),
"Timestamp": current_time,
"rawData": rawData,
"length": bytes.length
};
} else {
jsonobj = {
"Flag": -1,
"SensorType": 43,
"SensorNumberThird": 0,
"Timestamp": current_time,
"rawData": rawData,
"length": bytes.length
};
}
return jsonobj;
}
// 计算温度值 12-13为温度*16
function parseTemperature(bytes) {
var tempBinVal = intToBinary(bytes[11], 8) + intToBinary(bytes[12], 8);
// console.info("temperature binaryValue", tempBinVal);
// 最高位为0为正式,1则为负数
if (tempBinVal.substring(0, 1) == '0') {
return parseInt(tempBinVal, 2) / 16;
} else { //负数
return binToComplement(tempBinVal, 16) * -1 / 16;
}
}
// 计算测量值 14~17
function parseValue(bytes) {
var xBinVal = intToBinary(bytes[13], 8) + intToBinary(bytes[14], 8)
+ intToBinary(bytes[15], 8)
+ intToBinary(bytes[16], 8);
// 最高位为0为正式,1则为负数
if (xBinVal.substring(0, 1) == '0') {
return parseInt(xBinVal, 2);
} else { //负数用补码表示,绝对值需要求原码
return binToComplement(xBinVal, 16) * -1;
}
}
// 10进制转2进制
function intToBinary(value, length) {
var number = value.toString(2);
return (Array(length).join("0") + number).slice(-length);//高位补0
}
// 2进制的补码,结果为十进制绝对值
function binToComplement(value, length) {
// 二进制高位补0
var binVal = (Array(length).join("0") + value).slice(-length);
// 正数的补码是原码本身
if (binVal.substring(0, 1) == '0') {
return parseInt(binVal, 2);
}else {
// 负数的补码为原码取反+1
var array = binVal.substring(1, length).replace('-',0).split('');
for(var i=0; i<array.length; i++) {
array[i] = array[i] == '0' ? '1' : '0';
}
return parseInt(array.join(''), 2) + 1;
// return parseInt(binVal.substring(1, length).replace('-',0).split('').map(bit=>bit=='0'?'1':'0').join(''), 2)+1;
}
}
console