Explorar el Código

docs: 更新0x43奇数地址读取规则

undefined
杰杰的笔记本\杰杰 hace 15 horas
padre
commit
5b7d565d75
Se han modificado 1 ficheros con 10 adiciones y 10 borrados
  1. +10
    -10
      docs/superpowers/specs/2026-08-02-modbus-retention-and-private-functions-design.md

+ 10
- 10
docs/superpowers/specs/2026-08-02-modbus-retention-and-private-functions-design.md Ver fichero

@@ -5,7 +5,7 @@
保留并完善以下附加功能:

- 固定寄存器 `0x00010000` 的读取、写入与掉电保持验证。
- 奇数数量的连续保持寄存器批量读取
- 从起始基准地址向上取第一个奇数地址,再按地址 `+2` 批量读取保持寄存器;读取数量允许奇数或偶数
- TouchWin 读取结果的本地清除。

通信历史功能及其界面展示不再保留。
@@ -19,7 +19,7 @@
| --- | --- | --- | --- |
| `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...>` |
| `0x43` | 批量读取奇数地址保持寄存器 | `43 <start_hi> <start_lo> <count_hi> <count_lo>` | `43 <byte_count> <data...>` |

请求和响应帧均以前置从站地址、后置 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 请求;写入、清除、断电恢复、读取后数值一致。

Cargando…
Cancelar
Guardar