切换深色模式
DTU-D2 · 数据上报与解析
DTU-D2 · 本机适用范围
设备类型 17(HEX),采集接口 RS485,8 条用户独立脚本,每条最多 40 字节。
仅使用 RS485 与脚本 1~8,不套用 RS232 接线。电源等待编辑项隐藏;合并任务数量仍以读取到的能力为准。
平台需要先按 FPort 和采集方式 判断数据类型,再使用与该台设备当前配置一致的解析规则。心跳逐字节格式、重启原因和启动包详见上报协议详表,下发参数见远程参数配置。
AWTools 配套的本机解析脚本单独展示完整代码,支持一键复制;DTU 脚本不代替采集数据解析。合并采集解析函数应按本章步骤在上位机生成,不使用固定通用文件。
1. 区分数据端口
下表端口号均为十进制:
| FPort | 系列数据用途 | 怎样处理 |
|---|---|---|
| 1~8 | 本机独立脚本采集结果 | 按脚本对应仪表协议解析原始回复;识别 collection failed |
| 33 | 合并采集报告 | 按四字节头和当前上报选择重组、解析 |
| 40 | 心跳 | 查看设备运行信息及脚本状态,不按仪表寄存器解释 |
| 51 | 内部 UART1 透明通道,不据此推断存在外部 RS232 端子 | 保留原始字节,按本机接口资料和项目约定处理 |
| 52 | 本机 RS485 主动数据透明上传 | 按项目约定的串口数据协议处理 |
配置回复、测试或其他系统消息不属于上述常规采集数据。平台出现未知端口时,应先确认消息用途,而不是强行套用业务解析器。
2. 心跳能说明什么
心跳包含心跳周期、内部温度、电源相关读数,以及脚本启用和执行状态等信息。心跳开关、周期独立于采集设置。
心跳电源字段为 芯片内部供电电压,原始值 ÷ 100 得 V,不代表外部输入电压。详见本机心跳字段换算。
内部温度也不等于外接温度仪表的读数。平台收到心跳,只能确认这条消息到达;还需查看业务数据判断仪表采集是否有结果。
3. 独立采集的数据
正常结果保留仪表回复的原始字节,包括仪表协议自身的包头、数据和校验内容。根据该脚本定义核对地址、长度、异常码及物理量换算。
收到 collection failed 表示该脚本本次未收集到回复,不能按正常数值解析。独立采集过长回复可能分段上传,但不携带下述合并采集头,不能使用合并采集解析函数拼接。
4. 合并报告的四字节头
每个 FPort 33 分包都包含相同结构:
| 字节位置(从 1 开始) | 内容 | 含义 |
|---|---|---|
| 第 1 字节 | 设备类型 | 本机为 17(十六进制) |
| 第 2 字节 | 分包信息 | 高四位为本轮总包数,低四位为当前包索引;索引从 0 开始 |
| 第 3~4 字节 | 失败任务位图 | 两字节大端,bit0 对应任务列表第 1 条,依次到 bit15 |
| 第 5 字节起 | 数据 | 当前分包承载的选中数据 |
分包信息 10 表示共 1 包、索引 0;20、21 表示共 2 包、索引分别为 0 和 1。包头中的数值按十六进制展示。
失败位图按照任务在列表里的顺序对应,不按任务 ID 数值直接移位。 位为 1 表示该任务重试后最终失败;未配置位置为 0。每个分包携带本轮同一份失败位图,包括没有选中上报字段的失败任务。
正常值与失败占位
以本机的一个任务、选择两个寄存器为例,类型字节使用 17:
text
正常:17 10 00 00 12 34 56 78
失败:17 10 00 01 00 00 00 00失败时数据仍占原来的四字节位置。占位零不代表实际测得零;正常报告中的零则可能是有效值。应先判断任务是否失败,再解释数值。
5. 数据排列与换算
- 任务按列表顺序排列,同一任务的数据按选取偏移递增排列。
- 功能码 01/02:每个选中状态展开成一个字节,
00为关、01为开。 - 功能码 03/04:每个选中寄存器保留两个字节,高字节在前。
- 报告不包含完整 Modbus 回复包头和 CRC,也不携带仪表寄存器名称、倍率或单位。
例如原始寄存器 02 4C 作为无符号 16 位值是十进制 588。只有仪表资料明确规定倍率为 0.1 时,才换算为 58.8;不能仅凭数值推断它是温度。
32 位整数、浮点数和有符号量应按仪表资料组合、解释。不要改变设备字节顺序去迁就一个尚未核对的解析模板。
6. 无线分包
设备根据发送时协议栈允许的应用载荷动态分包,每包先保留四字节头。状态项保持一字节,寄存器保持两字节完整,不会将单个寄存器拆到两个包里。
- 一份报告最多分为 15 个物理包。
- 当前载荷不能容纳完整数据项,或整份报告需要超过 15 包时,该轮可能无法上报。
- 无线参数、MAC 命令和发送排队会影响实际包数与到达时间;界面模拟载荷不等于实时可用载荷。
平台按设备隔离接收窗口,收齐同一轮所有索引后,检查各包类型、包数和失败位图一致,再按索引连接数据区。缺包时不能当作完整报告。
当前包头 没有轮次编号和配置版本号。平台需要处理超时、重复、冲突和旧残包;设备重启或配置变更后清理未完成报告。仅靠包序号不能绝对排除相邻轮次混包。
7. 使用上位机生成解析函数
- 在 AWTools 中读取或编辑合并采集方案,确认上报选择。
- 在预览区打开 解析函数,可先查看当前编辑方案的代码和模拟结果;此时不要求写入设备,与操作视频一致。
- 正式接入平台前,先保存设备方案并确认生效,再从同一方案复制对应代码。生成函数需要传入同一设备、同一轮的分包数组,还需按平台接口完成接入。
- 核对示例解析结果,投运后再用平台实际收到的数据检查。
- 改变任务顺序、起始地址、数量或上报选择后,同步更新解析函数,并清空平台旧分包缓存。
生成函数的调用形式如下。这里沿用本手册“一个任务、两个寄存器”的假设布局,实际代码必须由同一份已保存配置生成:
js
decodeUplinkPackets([
{ fPort: 33, bytes: '17 10 00 00 12 34 56 78' }
])每个数组元素都是一个对象,包含 fPort 和 bytes;bytes 可为 HEX 字符串或字节数组。不要直接传平台日志中的 Base64 字符串,也不要只传一个 HEX 字符串数组。
当前生成函数按无符号 16 位解释寄存器。失败字段返回 null,failedTasks 列出失败任务;complete 为 false 时,应等待或处理 missing 中的缺失包索引。