From 5b7d565d75c70e0613f12ff76cbce52ea7352d59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=B0=E6=9D=B0=E7=9A=84=E7=AC=94=E8=AE=B0=E6=9C=AC=5C?= =?UTF-8?q?=E6=9D=B0=E6=9D=B0?= <851192198@qq.com> Date: Tue, 4 Aug 2026 21:44:45 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B00x43=E5=A5=87?= =?UTF-8?q?=E6=95=B0=E5=9C=B0=E5=9D=80=E8=AF=BB=E5=8F=96=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-retention-and-private-functions-design.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/superpowers/specs/2026-08-02-modbus-retention-and-private-functions-design.md b/docs/superpowers/specs/2026-08-02-modbus-retention-and-private-functions-design.md index 4079f8a..72c6006 100644 --- a/docs/superpowers/specs/2026-08-02-modbus-retention-and-private-functions-design.md +++ b/docs/superpowers/specs/2026-08-02-modbus-retention-and-private-functions-design.md @@ -5,7 +5,7 @@ 保留并完善以下附加功能: - 固定寄存器 `0x00010000` 的读取、写入与掉电保持验证。 -- 奇数数量的连续保持寄存器批量读取。 +- 从起始基准地址向上取第一个奇数地址,再按地址 `+2` 批量读取保持寄存器;读取数量允许奇数或偶数。 - TouchWin 读取结果的本地清除。 通信历史功能及其界面展示不再保留。 @@ -19,7 +19,7 @@ | --- | --- | --- | --- | | `0x41` | 读取 `0x00010000` | `41 00 01 00 00 00 01` | `41 02 ` | | `0x42` | 写入 `0x00010000` | `42 00 01 00 00 ` | 回显请求 PDU | -| `0x43` | 读取奇数数量的连续保持寄存器 | `43 ` | `43 ` | +| `0x43` | 批量读取奇数地址保持寄存器 | `43 ` | `43 ` | 请求和响应帧均以前置从站地址、后置 Modbus CRC16(低字节在前)。 @@ -37,13 +37,13 @@ - 每次 `0x42` 写入成功后,由主程序调用 RTC 备份保存;重启时恢复该值。 - `0x42` 不使用数量字段,帧长度固定为 10 字节(含 CRC)。 -### `0x43` 奇数数量读取规则 +### `0x43` 奇数地址读取规则 - 起始地址范围为 `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` | 所有私有功能共用。 | | `0x41` 读取结果 | `PSW350` | 清除按钮仅清除此显示值。 | | `0x42` 写入值 | `PSW351` | 供写入按钮读取。 | -| `0x43` 起始地址 / 数量 | `PSW370` / `PSW371` | 数量限制为 `1..123` 的奇数。 | +| `0x43` 起始地址 / 数量 | `PSW370` / `PSW371` | 数量限制为 `1..123`,奇数和偶数均可。 | | `0x43` 结果 | `PSW372..PSW494` | 共 `494 - 372 + 1 = 123` 个 WORD。 | 若画面要显示全部批量读取结果,需要 123 个数值显示组件,每个组件依次绑定 @@ -81,11 +81,11 @@ TouchWin 的“清除”只将本地显示用 `PSW350` 写为 `0`: 和 `ModbusRecordHistory()` 公共接口。 - 删除主程序中历史结果码转换和所有记录调用。 - 删除 `PSW500..PSW509`、通信历史按钮及画面说明。 -- 旧的 `0x42` 奇数数量读取改为 `0x43`;原 `0x43` 历史请求不再受支持。 +- 旧的批量读取扩展改为 `0x43`;原 `0x43` 历史请求不再受支持。 ## 验证 - `0x41` 读取固定地址的值、非法地址和非法数量。 - `0x42` 写入后回显,非法扩展地址拒绝,写入成功触发备份保存。 -- `0x43` 覆盖最小值 `1`、最大值 `123`、偶数数量、越界地址和错误 CRC。 +- `0x43` 覆盖最小值 `1`、最大值 `123`、合法偶数数量、非法数量 `0`、越界地址和错误 CRC。 - 清除仅写 `PSW350`,不产生 Modbus 请求;写入、清除、断电恢复、读取后数值一致。