这是一个独立的新项目,用于适配设备厂商 2026-05-11 版 JH2028 对外接口通讯协议。
服务通过 TCP 接收串口透传盒子发来的数据,按来源 IP 匹配设备编号,解析新版 55 AA 协议帧,为每台设备缓存最后一次完整数据,并在收到实时数据或血压数据后立即上报到 MQTT 和/或阿里云。
老项目不参与本项目运行;本项目也不兼容旧版 EE 55 协议。
新版帧格式:
55 AA LEN TT CMDTYPE CMDID CMDDATA CRC8
字段说明:
55 AA 固定帧头
LEN 帧总长度,包含帧头和 CRC
TT 发送序列号,仅记录,不回复
CMDTYPE 命令类型
CMDID 命令 ID
CMDDATA 命令数据
CRC8 从帧头开始计算的 CRC8 校验
当前支持的命令:
CMDTYPE=01 CMDID=00 设备实时数据
CMDTYPE=01 CMDID=01 血压数据
服务端不回复 ACK。多字节字段按 PDF 文档要求使用小端解析。
实时数据 CMDTYPE=01, CMDID=00:
AF 设定温度,原始值 / 10
F 当前透析液温度,原始值 / 10
A 设定超滤总量,单位 mL
C 超滤率,单位 mL/h
B 超滤量,单位 mL
K 剩余时间,单位分钟
L 透析液流量,单位 mL/min
D 有效血流量,单位 mL/min
H 静脉压,int16,单位 mmHg
o 动脉压,int16,单位 mmHg
J 跨膜压,int16,单位 mmHg
U 累计血流量,单位 mL
G 电导率,单位 mS/cm
Na 钠,单位 mmol/L
HCO3 碳酸氢根,单位 mmol/L
O2Sat 血氧饱和度,原始值 / 10
Hct 红细胞比容,原始值 / 10
Hb 血红蛋白,原始值 / 10
Tblood 血液温度,原始值 / 10
ktv Kt/V,原始值 / 10
血压数据 CMDTYPE=01, CMDID=01:
N 收缩压
O 舒张压
P 心率
M 血压监测时间,使用服务端接收时间,格式 yyyy-mm-dd HH:mm:ss
以下字段不上传、不处理:
平均压
心率不齐
血压错误码
如果收到血压错误码报文,服务只记录日志,不更新缓存,不上报血压字段。
每台设备都会维护一份最后状态缓存。
收到实时数据时:
1. 解码实时数据
2. 更新该设备缓存
3. 立即上传完整缓存
收到血压数据时:
1. 解码 N/O/P
2. 写入 M=服务端接收时间
3. 合并到该设备缓存
4. 立即上传完整缓存
上传失败只记录日志,不做补发。
主配置文件是 config.json。打包后主要维护 runtime/config.json。
大屏配置:
{
"dashboard": {
"enabled": true,
"host": "0.0.0.0",
"port": 9100,
"title": "JH2028 设备中央监测大屏",
"staleDataMs": 180000
}
}
服务启动后,在浏览器打开:
本机访问:http://127.0.0.1:9100
局域网访问:http://服务器真实IP:9100
注意:0.0.0.0 只表示服务监听所有网卡,不是浏览器访问地址。不要在浏览器里打开 http://0.0.0.0:9100。
大屏会展示设备在线/离线状态、数据是否超时、最近实时数据、最近血压数据和当前缓存指标。
设备按 TCP 来源 IP 匹配:
{
"deviceId": "JH-001",
"ip": "192.168.1.10",
"name": "1号透析机"
}
上报通道通过 send.channels 控制:
{
"send": {
"channels": ["mqtt", "aliyun"]
}
}
可选组合:
["mqtt"] 只上报 MQTT
["aliyun"] 只上报阿里云
["mqtt","aliyun"] 同时上报 MQTT 和阿里云
MQTT Topic 沿用老项目规则:
defaultTopicPrefix/deviceId
例如:
touxiji/JH-001
阿里云三元组获取规则也沿用老项目:
deviceName = deviceId
安装依赖:
npm install
启动服务:
npm start
指定配置文件启动:
node app.js --config ./config.json
运行模拟器:
npm run start:simulator -- --host 127.0.0.1 --port 9000
# 如果只想发送一轮后断开:
npm run start:simulator:once -- --host 127.0.0.1 --port 9000
只打印模拟报文,不连接 TCP 服务:
npm run print:simulator
运行测试:
npm test
npm run verify
打包 Windows 和 Linux:
npm run build
只打包 Windows:
npm run build:win
只打包 Linux:
npm run build:linux
打包后目录结构:
dist/
win-x64/
jh2028-service.exe
runtime/
config.json
alModel.json
logs/
linux-x64/
jh2028-service
runtime/
config.json
alModel.json
logs/
Windows 试运行:
cd dist\win-x64
.\jh2028-service.exe --config .\runtime\config.json
Linux 试运行:
cd dist/linux-x64
chmod +x ./jh2028-service
./jh2028-service --config ./runtime/config.json
目前项目使用模拟报文完成了协议验证。因为暂时没有厂家真实报文,现场联调时建议优先向厂家确认或抓取以下报文:
实时数据正常报文 1 条
血压正常报文 1 条
包含负压力的实时数据报文 1 条
血压错误码报文 1 条
拿到真实报文后,建议先用 decoder.js 增加验证用例,确认 CRC8、小端、有符号数和单位换算全部一致,再部署到现场。