const hexString = 'aa bb aa 02 8f 00 2e 00 90 01 e8 03 96 00 98 00 81 00 05 00 47 00 84 00 26 02 7c 01 32 00 07 00 05 00 25 00 02 00 25 00 02 00 81 00 4c 00 47 00 01 07 87 00 00 00 b2 83 93 03 60 00 56 00 22 00';
|
const buffer = Buffer.from(hexString.replace(/\s/g, ''), 'hex');
|
/**
|
*
|
* @param {*} buffer
|
* @returns 解析数据包
|
*/
|
function parseDataPacket(buffer) {
|
const parsedData = {};
|
|
// 跳过前两个字节(0xAA和0xBB)
|
let offset = 2;
|
|
// CRC16
|
parsedData.CRC16 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
// 其他字段
|
parsedData.治疗剩余时间 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.当前已超滤量 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.超滤率 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.超滤目标 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.设定血流量 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.实际血流量 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.静脉压 = buffer.readInt16LE(offset);
|
offset += 2;
|
|
parsedData.动脉压 = buffer.readInt16LE(offset);
|
offset += 2;
|
|
parsedData.跨膜压 = buffer.readInt16LE(offset);
|
offset += 2;
|
|
parsedData.电导度 = buffer.readUInt16LE(offset) / 10;
|
offset += 2;
|
|
parsedData.透析液实际流量 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.透析液实际温度 = buffer.readUInt16LE(offset) / 10;
|
offset += 2;
|
|
parsedData.肝素速率 = buffer.readUInt16LE(offset) / 10;
|
offset += 2;
|
|
parsedData.肝素停止时间 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.追加量 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.前补液总量 = buffer.readUInt16LE(offset) / 10;
|
offset += 2;
|
|
parsedData.前已补液量 = buffer.readUInt16LE(offset) / 10;
|
offset += 2;
|
|
parsedData.后补液总量 = buffer.readUInt16LE(offset) / 10;
|
offset += 2;
|
|
parsedData.后已补液量 = buffer.readUInt16LE(offset) / 10;
|
offset += 2;
|
|
parsedData.血压计收缩血压 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.血压计舒张血压 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.血压计脉搏 = buffer.readUInt16LE(offset);
|
offset += 1;
|
console.log(offset);
|
parsedData.模式 = buffer.readUInt8(offset+1);
|
|
console.log('模式:', parsedData.模式,offset);
|
offset +=1;
|
|
parsedData.KtV = buffer.readUInt8(offset+1);
|
offset += 2;
|
console.log('KtV:', parsedData.KtV,offset);
|
parsedData.清除率 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.相对血容量 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.设备编号前16位 = buffer.readUInt32LE(offset);
|
offset += 2;
|
|
parsedData.设备编号后16位 = buffer.readUInt32LE(offset);
|
offset += 2;
|
|
parsedData.血压计平均血压 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.血氧参数Spo2值 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
parsedData.血氧参数脉率 = buffer.readUInt16LE(offset);
|
offset += 2;
|
|
return parsedData;
|
}
|
|
|
// 解析数据包
|
const parsedData = parseDataPacket(buffer);
|
|
// 打印解析后的数据
|
console.log('Parsed Data:', parsedData);
|