保留并完善以下附加功能:
0x00010000 的读取、写入与掉电保持验证。通信历史功能及其界面展示不再保留。
下列功能码仅用于本训练项目的 TouchWin 与 STM32 Modbus RTU 从站,
不是 Modbus 国标功能码。
| 功能码 | 功能 | 请求 PDU(CRC 前) | 正常响应 PDU(CRC 前) |
|---|---|---|---|
0x41 |
读取 0x00010000 |
41 00 01 00 00 00 01 |
41 02 <value_hi> <value_lo> |
0x42 |
写入 0x00010000 |
42 00 01 00 00 <value_hi> <value_lo> |
回显请求 PDU |
0x43 |
读取奇数数量的连续保持寄存器 | 43 <start_hi> <start_lo> <count_hi> <count_lo> |
43 <byte_count> <data...> |
请求和响应帧均以前置从站地址、后置 Modbus CRC16(低字节在前)。
0x41 读取规则0x00010000,数量必须为 1。0x02;数量错误返回异常码 0x03。0x42 写入规则0x00010000。0x42 写入成功后,由主程序调用 RTC 备份保存;重启时恢复该值。0x42 不使用数量字段,帧长度固定为 10 字节(含 CRC)。0x43 奇数数量读取规则0x0000..0x270F。1..123,且必须是奇数。0、数量 1230..122。123 返回异常码 0x03;读取越过 0x270F 返回异常码 0x02。MCU 的 RTC 备份寄存器保存保持寄存器 0..31、线圈 0..15 和
固定寄存器 0x00010000。保存发生在标准写功能码和私有写功能码
0x42 成功后;上电启动时 CRC 校验通过才恢复。该功能依赖硬件 VBAT
已接入,不能声明为完整 10000 个寄存器掉电保持。
TouchWin 的“清除”只将本地显示用 PSW350 写为 0:
0x00010000。因此操作顺序为:写入一个值、清除 PSW350、PLC 断电再上电、读取;
读回相同值即验证掉电保持。
| 用途 | PSW | 说明 |
|---|---|---|
| 状态码 / 实际接收长度 | PSW319 / PSW320 |
所有私有功能共用。 |
0x41 读取结果 |
PSW350 |
清除按钮仅清除此显示值。 |
0x42 写入值 |
PSW351 |
供写入按钮读取。 |
0x43 起始地址 / 数量 |
PSW370 / PSW371 |
数量限制为 1..123 的奇数。 |
0x43 结果 |
PSW372..PSW494 |
共 494 - 372 + 1 = 123 个 WORD。 |
若画面要显示全部批量读取结果,需要 123 个数值显示组件,每个组件依次绑定
PSW372 至 PSW494。也可以只显示前 8 或前 16 个组件用于演示,响应仍会完整
写入 123 个 PSW,未显示的 WORD 可在监控页查看。
0x43 通信历史的协议常量、历史记录结构体、从站状态字段、响应构造函数ModbusRecordHistory() 公共接口。PSW500..PSW509、通信历史按钮及画面说明。0x42 奇数数量读取改为 0x43;原 0x43 历史请求不再受支持。0x41 读取固定地址的值、非法地址和非法数量。0x42 写入后回显,非法扩展地址拒绝,写入成功触发备份保存。0x43 覆盖最小值 1、最大值 123、偶数数量、越界地址和错误 CRC。PSW350,不产生 Modbus 请求;写入、清除、断电恢复、读取后数值一致。