| @@ -5,7 +5,7 @@ | |||||
| 保留并完善以下附加功能: | 保留并完善以下附加功能: | ||||
| - 固定寄存器 `0x00010000` 的读取、写入与掉电保持验证。 | - 固定寄存器 `0x00010000` 的读取、写入与掉电保持验证。 | ||||
| - 奇数数量的连续保持寄存器批量读取。 | |||||
| - 从起始基准地址向上取第一个奇数地址,再按地址 `+2` 批量读取保持寄存器;读取数量允许奇数或偶数。 | |||||
| - TouchWin 读取结果的本地清除。 | - TouchWin 读取结果的本地清除。 | ||||
| 通信历史功能及其界面展示不再保留。 | 通信历史功能及其界面展示不再保留。 | ||||
| @@ -19,7 +19,7 @@ | |||||
| | --- | --- | --- | --- | | | --- | --- | --- | --- | | ||||
| | `0x41` | 读取 `0x00010000` | `41 00 01 00 00 00 01` | `41 02 <value_hi> <value_lo>` | | | `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 | | | `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...>` | | |||||
| | `0x43` | 批量读取奇数地址保持寄存器 | `43 <start_hi> <start_lo> <count_hi> <count_lo>` | `43 <byte_count> <data...>` | | |||||
| 请求和响应帧均以前置从站地址、后置 Modbus CRC16(低字节在前)。 | 请求和响应帧均以前置从站地址、后置 Modbus CRC16(低字节在前)。 | ||||
| @@ -37,13 +37,13 @@ | |||||
| - 每次 `0x42` 写入成功后,由主程序调用 RTC 备份保存;重启时恢复该值。 | - 每次 `0x42` 写入成功后,由主程序调用 RTC 备份保存;重启时恢复该值。 | ||||
| - `0x42` 不使用数量字段,帧长度固定为 10 字节(含 CRC)。 | - `0x42` 不使用数量字段,帧长度固定为 10 字节(含 CRC)。 | ||||
| ### `0x43` 奇数数量读取规则 | |||||
| ### `0x43` 奇数地址读取规则 | |||||
| - 起始地址范围为 `0x0000..0x270F`。 | - 起始地址范围为 `0x0000..0x270F`。 | ||||
| - 数量范围为 `1..123`,且必须是奇数。 | |||||
| - 读取地址是连续地址,不是隔一个地址读取;例如起始 `0`、数量 `123` | |||||
| 返回地址 `0..122`。 | |||||
| - 数量为偶数或大于 `123` 返回异常码 `0x03`;读取越过 `0x270F` 返回异常码 `0x02`。 | |||||
| - 若起始基准地址为偶数,先加 `1` 移到下一个奇数地址;若本身为奇数,则直接使用。 | |||||
| - 后续读取地址每次增加 `2`。例如起始地址 `0`、数量 `4` 时读取地址 `1、3、5、7`。 | |||||
| - 数量范围为 `1..123`,奇数和偶数均合法;数量为 `0` 或大于 `123` 返回异常码 `0x03`。 | |||||
| - 最后一个待读取的奇数地址越过 `0x270F` 时返回异常码 `0x02`,不返回部分数据。 | |||||
| ## 数据保持与清除 | ## 数据保持与清除 | ||||
| @@ -68,7 +68,7 @@ TouchWin 的“清除”只将本地显示用 `PSW350` 写为 `0`: | |||||
| | 状态码 / 实际接收长度 | `PSW319` / `PSW320` | 所有私有功能共用。 | | | 状态码 / 实际接收长度 | `PSW319` / `PSW320` | 所有私有功能共用。 | | ||||
| | `0x41` 读取结果 | `PSW350` | 清除按钮仅清除此显示值。 | | | `0x41` 读取结果 | `PSW350` | 清除按钮仅清除此显示值。 | | ||||
| | `0x42` 写入值 | `PSW351` | 供写入按钮读取。 | | | `0x42` 写入值 | `PSW351` | 供写入按钮读取。 | | ||||
| | `0x43` 起始地址 / 数量 | `PSW370` / `PSW371` | 数量限制为 `1..123` 的奇数。 | | |||||
| | `0x43` 起始地址 / 数量 | `PSW370` / `PSW371` | 数量限制为 `1..123`,奇数和偶数均可。 | | |||||
| | `0x43` 结果 | `PSW372..PSW494` | 共 `494 - 372 + 1 = 123` 个 WORD。 | | | `0x43` 结果 | `PSW372..PSW494` | 共 `494 - 372 + 1 = 123` 个 WORD。 | | ||||
| 若画面要显示全部批量读取结果,需要 123 个数值显示组件,每个组件依次绑定 | 若画面要显示全部批量读取结果,需要 123 个数值显示组件,每个组件依次绑定 | ||||
| @@ -81,11 +81,11 @@ TouchWin 的“清除”只将本地显示用 `PSW350` 写为 `0`: | |||||
| 和 `ModbusRecordHistory()` 公共接口。 | 和 `ModbusRecordHistory()` 公共接口。 | ||||
| - 删除主程序中历史结果码转换和所有记录调用。 | - 删除主程序中历史结果码转换和所有记录调用。 | ||||
| - 删除 `PSW500..PSW509`、通信历史按钮及画面说明。 | - 删除 `PSW500..PSW509`、通信历史按钮及画面说明。 | ||||
| - 旧的 `0x42` 奇数数量读取改为 `0x43`;原 `0x43` 历史请求不再受支持。 | |||||
| - 旧的批量读取扩展改为 `0x43`;原 `0x43` 历史请求不再受支持。 | |||||
| ## 验证 | ## 验证 | ||||
| - `0x41` 读取固定地址的值、非法地址和非法数量。 | - `0x41` 读取固定地址的值、非法地址和非法数量。 | ||||
| - `0x42` 写入后回显,非法扩展地址拒绝,写入成功触发备份保存。 | - `0x42` 写入后回显,非法扩展地址拒绝,写入成功触发备份保存。 | ||||
| - `0x43` 覆盖最小值 `1`、最大值 `123`、偶数数量、越界地址和错误 CRC。 | |||||
| - `0x43` 覆盖最小值 `1`、最大值 `123`、合法偶数数量、非法数量 `0`、越界地址和错误 CRC。 | |||||
| - 清除仅写 `PSW350`,不产生 Modbus 请求;写入、清除、断电恢复、读取后数值一致。 | - 清除仅写 `PSW350`,不产生 Modbus 请求;写入、清除、断电恢复、读取后数值一致。 | ||||