docs(产品需求): 补串口屏板通道——显示信息不只走网络
参考是"一份显存、两个出口":串口屏板通道为主(LCD_LED_Update 变化驱动 + WriteScreenByByte 500 ms 兜底),TCP 7003 为镜像。上行同理:getRs485Key 物理键号 1~10 为主,g_tRemoteKey 为镜像,两者在 Key_Read 汇合且本地优先。 v1.4 把串口写成"随 RS-485 簇冻结",等于降级成可选,是错的。 - §5.16 标题改为「屏板链路:串口主通道 + 网络镜像」并重写开篇 - §5.16.1 重写:显存基址 0xC1F00000,三条下行 / 两条上行路径对照表 - 新增 §5.16.2 本产品串口通道:V0.1 端口盘点,默认 USART3(PB10/PB11) - 新增 §5.16.3 屏板侧接口一览 + 列出源码推不出的四项(波特率/帧格式/ 方向控制/是否分片),在拿到实测前不得声称"按参考协议实现" - §5.16.9 差异表 10 → 14 行:新增串口通道整条缺失、双出口并发缺失等 - §5.16.10 判据 7 → 12 条:新增串口侧键号注入/500ms 出帧/并发不串帧/拔插恢复 - §9.13 任务 10 → 13 条:原 RS-485 屏板一条拆为物理层定版、下行显存、 上行按键、并发回归四条;第三批改为独立立项,不随 §5.10 冻结 - §5.16.8 / §2.5.2 / §9.1.2 / §9.12 / §10.3 / §6.2 同步
This commit is contained in:
+124
-36
@@ -7,7 +7,7 @@
|
||||
> 待实现项与路线图、验收判据。
|
||||
> **事实来源**:本文所有数值与结论均取自仓库内**受管事实源**(代码、`.ioc`、`.map`、网表分析报告与
|
||||
> 各模块设计文档),凡与其它文档冲突处,以本文标注的权威来源为准。
|
||||
> **版本**:v1.4 **日期**:2026-10-28 **状态**:现状基线(含已实现项 + 待实现项)
|
||||
> **版本**:v1.5 **日期**:2026-10-28 **状态**:现状基线(含已实现项 + 待实现项)
|
||||
> **阅读前提**:建议先读 [`docs/README.md`](../../docs/README.md)(文档索引)与
|
||||
> [`docs/架构设计/项目架构总览.md`](../../docs/架构设计/项目架构总览.md)(全景架构)。
|
||||
> **范围口径:1:1 复刻**——本产品是参考产品 **CLS100**(`Scatter_P_HV03.01_SV01.01`,OMAP-L138
|
||||
@@ -224,7 +224,7 @@ flowchart LR
|
||||
| 17 | 上行规约 | `Comm/Pub/`、`Comm/Mon/` | **12 种** | 1 种(104) | 🔶 |
|
||||
| 18 | 加密算法 | `Comm/Ecc/` | SM2 / SM3 / ECDSA | 0 | ⬜ |
|
||||
| 19 | 双核分工 | `CLS100_Arm/`、`CLS100_Dsp/` | ARM + DSP | 单核(X1) | — |
|
||||
| 20 | 远端屏与按键链路 | `HMI/RemoeDisp/RemoDispBus.c`、`HMI/Dsp/Key.c`、`HMI/Dsp/Disp_Pub.c` | 7003 四命令 + RS-485 屏板通道 | 7003 四命令已通;INIT 应答 8 B(参考 29 B)、无断点续传、无链路监视、缺 F1/F2 | 🔶 |
|
||||
| 20 | 远端屏与按键链路 | `HMI/RemoeDisp/RemoDispBus.c`、`HMI/Dsp/Key.c`、`HMI/Dsp/Disp_Pub.c` | **串口屏板通道**(显存 3200 B + LED 4 B 下行 / 键号 1~10 上行)+ **TCP 7003 镜像** | 7003 四命令已通;**串口屏板通道整条缺失**;INIT 应答 8 B(参考 29 B)、无断点续传、无链路监视、缺 F1/F2 | 🔶 |
|
||||
|
||||
> **读法**:🔶 / ⬜ 行**全部是待办**,逐条对应 §9.1;`—` 只出现在 X1~X5 不可移植项上。
|
||||
> 本表是范围判定的唯一出处,§9 不再重复解释"为什么缺"。
|
||||
@@ -960,7 +960,7 @@ sequenceDiagram
|
||||
| 固有参数 `8001H~800AH` | 字符串类无法短浮点上送 | 规模型 |
|
||||
| 主站 IP 白名单 | 单 socket 上"拒绝"= 断链重听,可被扫描打成 SPI 风暴且易锁死真主站 | 不适用 |
|
||||
|
||||
### 5.16 远端屏与按键链路(FR-HMI)🔶
|
||||
### 5.16 屏板链路:串口主通道 + 网络镜像(FR-HMI)🔶
|
||||
|
||||
> **口径更正(2026-10-28)**:参考产品的屏与键**不在主机板上**。主机侧源码里 5 个"碰硬件"的函数
|
||||
> `KeyGet()` / `WriteScreenByByte()` / `LCD_LED_Update()` / `getRs485Key()` / `anyNewKey()`
|
||||
@@ -968,25 +968,83 @@ sequenceDiagram
|
||||
> (注释"轮询从485传来的按键值");屏板插槽号 `CN_SLOT_DISP = 0`(注释"显示板插槽号固定为0")。
|
||||
> 结论:**屏和键都在一块独立的屏板板件上,主机只负责"送帧 + 收键"**。本产品与参考同构,
|
||||
> 唯一落在范围外的是那块**屏板硬件本身**(§2.4.1 X3)。
|
||||
>
|
||||
> **两条通道,串口为主、网络为镜像**:参考把**同一份显存**同时喂给两个出口——**串口屏板通道**
|
||||
> (`LCD_LED_Update` 变化驱动 + `WriteScreenByByte` 500 ms 兜底)和**网络显示总线**(TCP 7003)。
|
||||
> 也就是说"显示信息不只走网络,还走串口"。**本产品目前只有网络这一路**,串口屏板通道整条缺失
|
||||
> (§5.16.9 第 11 条),这是本项复刻的最大缺口——没有它,产品无法脱离 PC 独立带屏运行。
|
||||
|
||||
#### 5.16.1 参考实现的两条链路
|
||||
#### 5.16.1 一份显存、两个出口(串口为主,网络为镜像)
|
||||
|
||||
| 链路 | 参考源码 | 承载 | 对端 | 本产品 |
|
||||
参考的 HMI 只有**一份显存**(`g_tVsr[0].pwbyLCDMemory`,物理基址 `CN_VIDEO_ADDRESS_BASE = 0xC1F00000`,
|
||||
非 cache 区,3200 B),但有**两个互不影响的出口**——**串口屏板通道是主通道,网络总线是镜像**:
|
||||
|
||||
| 出口 | 归属任务 | 调用 | 下行载荷 | 节拍 |
|
||||
|---|---|---|---|---|
|
||||
| A 屏板串行通道 | `HMI/Dsp/Key.c`、`HMI/Dsp/Disp_Pub.c` | RS-485(`getRs485Key()` 收键 / `LCD_LED_Update()` 送屏) | 专用屏板(插槽 0) | ⬜ 随 §5.10 RS-485 簇冻结 |
|
||||
| B 远程显示总线 | `HMI/RemoeDisp/RemoDispBus.c`(796 行) | TCP **7003**(`0xAA` / `0xBB`) | 屏板或调试软件(客户端) | 🔶 骨架已通,报文口径待对齐 |
|
||||
| **串口屏板通道**(主) | `tDisp`(`Dsp_Main`) | `LCD_LED_Update(ptr, 3200, ledbuf, 4)` | 显存 3200 B + 面板 LED **4 B** | **变化驱动**(`anyNewKey() \|\| LCD_UPDATE_FLAG`) |
|
||||
| **串口屏板通道**(周期兜底) | `tRemoDisp`(`RDisp_Main`) | `WriteScreenByByte(byLcdMemory)` | 显存 3200 B | **500 ms**(`tTimerLCD`) |
|
||||
| 网络显示总线(镜像) | `tRemoDisp`(`RDisp_Main`) | `RDisp_Proc` / `RDisp_Send` | `0xAA`/`0xBB` 帧(INIT/KEY/LCDMEM) | 客户端召唤驱动 |
|
||||
|
||||
链路 A 的数据面(源码实测,供将来解冻 RS-485 时照抄):
|
||||
上行(按键)同样是两条,最后在 `Key_Read()` 汇合:
|
||||
|
||||
| 上行通道 | 采集方式 | 载荷 | 与另一路的关系 |
|
||||
|---|---|---|---|
|
||||
| **串口屏板通道**(主) | `getRs485Key()` 轮询 + `anyNewKey()` / `ClearNewKeyEvent()` 事件 | 物理键号 `1~10` | 映射为逻辑键值写入 `g_tKey` |
|
||||
| 网络显示总线(镜像) | `RDisp_Proc_SaveKey` → `g_tRemoteKey` | 键值位掩码 1 B | 写入 `g_tRemoteKey` |
|
||||
| 汇合点 | `Key_Read()`(`Key.c:199`) | — | **先取远程、再被本地覆盖**——两键同时挂起时**本地(串口)优先** |
|
||||
|
||||
**串口通道的物理层与协议,交付源码里看不到**——屏板侧的 5 个入口全是**未实现的外部符号**
|
||||
(`KeyGet` / `WriteScreenByByte` / `LCD_LED_Update` / `getRs485Key` / `anyNewKey`),
|
||||
`Release/` 下的 `.o` 与 `.out` 由更完整的树编译而来。能确定的只有**调用契约**:
|
||||
|
||||
| 契约项 | 已确定的内容 | 依据 |
|
||||
|---|---|---|
|
||||
| 下行粒度 | 3200 B 整帧 + 4 B LED,**一次调用一帧**(无分片参数) | `LCD_LED_Update(ptr,len,ledbuf,ledbuflen)` 签名 |
|
||||
| 下行长度 | `len = 3200` 为实参,非推导 | `Disp_Pub.c:8295-8298` |
|
||||
| 上行粒度 | 单字节物理键号,`0` 表示无键 | `getRs485Key()` 返回 `uint8_t`,`Key.c:176` 判 `key == 0` 即返回 |
|
||||
| 事件语义 | 有"新键事件"与"清除事件"两个动作 | `anyNewKey()` / `ClearNewKeyEvent()` |
|
||||
| 屏板地址 | 板件槽号 **0**(`CN_SLOT_DISP`) | `Key.c:8` 注释"显示板插槽号固定为0" |
|
||||
| 按键消息 TAG | `0xC22C`(`CN_MBUS_TAG_KEY`,注释"与开入 TAG 相同") | `Key.c:9`(该宏在本文件内**未被引用**,属备用/历史路径) |
|
||||
| 面板指示灯 | `WritePanelLED(pbyLedFlag)` 已在 BSP 中实现(`SR1200_peri.c:362`) | 与屏板同一块面板 |
|
||||
| 背光 / 对比度 | `Lcd_BackLight()`(`Lcd_BKOn/Lcd_BKOff` 走 GPIO)、`Lcd_SetContrast(值, 亮)` | `omapl138_lcd.c:240-247`、`Disp_Interface.c:3281` |
|
||||
| 屏板初始化 | `Lcd_init_display(0xC1F00000)` 由 `LocalDisp_StartTask()` 调用,**不经过任何 UART 打开动作** | `Disp_Main.c:56` |
|
||||
|
||||
> ⚠ **不能从源码推出的四项**(实施前必须实测或取得屏板固件):① 波特率与数据格式;
|
||||
> ② 帧头 / 长度 / 校验(是否有 CRC、哪种);③ 半双工方向控制方式(硬件自动 / 软件 DE);
|
||||
> ④ 3200 B 一帧是否需要分片与应答。**在拿到这些之前,任何"按参考协议实现"的说法都是猜的。**
|
||||
|
||||
#### 5.16.2 本产品的串口通道(待建)
|
||||
|
||||
**要求**:与参考同构——一份显存、两个出口。串口通道负责**直连屏板**,网络通道负责**远程/调试镜像**,
|
||||
两者并发、互不阻塞。端口资源在 V0.1 上是充足的:
|
||||
|
||||
| 串口 | 引脚 | 当前用途 | 能否给屏板 |
|
||||
|---|---|---|---|
|
||||
| USART1 | PA9 / PA10 | 调试日志(115200,单写者) | ❌ 占用 |
|
||||
| UART4 | PC10 / PC11 / PA15(DE) | RS-485(对下采集簇,**冻结**) | ⚠ 硬件最合适(自带 DE),但与冻结簇争用 |
|
||||
| UART5 | PC12 / PD2 | 初始化但**未接** | ✅ 空闲 |
|
||||
| USART2 | PD5 / PD6 | 初始化但**未接** | ✅ 空闲 |
|
||||
| USART3 | PB10 / PB11 | 初始化但**未接** | ✅ 空闲 |
|
||||
|
||||
**默认选型**:USART3(PB10/PB11)——不与调试口、不与 RS-485 争用,且外设实例独立。
|
||||
若屏板实物是 RS-485 半双工,则改 UART4 并**先解冻该簇**(两者不能同时占用 PC10/PC11)。
|
||||
|
||||
> 交付源码里 `Key_Rs485_Process()` 的名字说明参考的屏板是 **RS-485** 半双工;
|
||||
> 但 `getRs485Key()` 无实现,"485" 也可能只是历史命名。**选型前先确认屏板实物接口电平**。
|
||||
|
||||
#### 5.16.3 参考实现的屏板侧接口一览
|
||||
|
||||
| 项 | 参考行为 |
|
||||
|---|---|
|
||||
| 送屏 | `LCD_LED_Update(显存 3200 B, LED 4 B)`——一次推 160×160 1bpp 显存 + 4 字节 LED 状态;**非周期**,仅当 `anyNewKey() \|\| LCD_UPDATE_FLAG` 时触发 |
|
||||
| 送屏(变化驱动) | `LCD_LED_Update(显存 3200 B, LED 4 B)`——一次推 160×160 1bpp 显存 + 4 字节面板 LED;**非周期**,仅当 `anyNewKey() \|\| LCD_UPDATE_FLAG` 时触发 |
|
||||
| 送屏(周期兜底) | `WriteScreenByByte(byLcdMemory)`——**按字节**写屏,500 ms 一次;函数名暗示逐字节串行传输,而非内存映射 |
|
||||
| 收键 | `getRs485Key()` 轮询返回物理键号 `1~10`,映射到逻辑键值:`1`=ENT `2`=U `3`=D `4`=ESC `5`=ADD `6`=SUB `7`=L `8`=R `9`=F1 `10`=F1\|ENT |
|
||||
| 去抖 | `CN_KEY_TIMES_ONE=2`(单击)/ `CN_KEY_TIMES_TWO=12`(连击);状态机 `EN_KEY_FLAG_NULL → SAM → NEW` |
|
||||
| 背光 | 有键 `MenuProc_Have_Key()` 点亮;空闲 **120 s** `MenuProc_TurnOff_Light()` 熄灭 |
|
||||
| 背光 | 有键 `MenuProc_Have_Key()` 点亮;空闲 **120 s** `MenuProc_TurnOff_Light()` 熄灭;上电先 `Lcd_BackLight(FALSE)` 再 `TRUE` |
|
||||
| 面板 LED | `WritePanelLED(pbyLedFlag)`(`SR1200_peri.c:362` 已实现)+ `LedOutput595()`(74HC595 移位输出) |
|
||||
| 任务 | `tKey`(prio 109 / 栈 0x400,只跑 `Key_Rs485_Process` 轮询);`tDisp`(prio 110 / 栈 0x9000,界面 + 推屏) |
|
||||
|
||||
#### 5.16.2 链路 B 帧格式(逐字节)
|
||||
#### 5.16.4 链路 B 帧格式(逐字节)
|
||||
|
||||
| 项 | 规格 |
|
||||
|---|---|
|
||||
@@ -1002,16 +1060,16 @@ sequenceDiagram
|
||||
|
||||
> **接收侧不校验 CRC**:`RDisp_MsgRecv` 只做定界;CRC 只在 `RDisp_Proc_LcdMem` /
|
||||
> `RDisp_Proc_SaveKey` 内比对,且 **INIT / KEEPLIVE 帧根本不校验**。这是参考的既有行为,
|
||||
> 本产品在全帧校验上更严(见 §5.16.7 第 10 行),不作退让。
|
||||
> 本产品在全帧校验上更严(见 §5.16.9 第 10 行),不作退让。
|
||||
|
||||
#### 5.16.3 命令集与数据段布局
|
||||
#### 5.16.5 命令集与数据段布局
|
||||
|
||||
| CMD | 名称 | 客户端请求 | 设备应答 | 备注 |
|
||||
|---|---|---|---|---|
|
||||
| 0 | `KEEPLIVE` | 空 | **不应答** | 源码 `return`,注释"无 keep alive 报文";仅重置 1 分钟通信计时 |
|
||||
| 1 | `INIT` | 空 | **29 B**(见下表) | 工具召唤屏幕参数 |
|
||||
| 2 | `KEY` | `[键值 1B]` | 空(LEN=0) | 键值写入 `g_tRemoteKey`,`byKeyValid = EN_KEY_FLAG_NEW` |
|
||||
| 3 | `LCDMEM` | `[起始偏移 4B 大端]` | `[起始偏移 4B][显存 nB]` | 支持断点续传;拒绝语义见 §5.16.4 |
|
||||
| 3 | `LCDMEM` | `[起始偏移 4B 大端]` | `[起始偏移 4B][显存 nB]` | 支持断点续传;拒绝语义见 §5.16.6 |
|
||||
| 4 | `ACK` | — | — | 参考 `RDisp_Send` 中为空分支,未使用 |
|
||||
| 5 | `NCK` | — | — | 同上,未使用 |
|
||||
| `0xFF` | `IDLE` | — | — | 内部空闲码,不上线 |
|
||||
@@ -1032,7 +1090,7 @@ sequenceDiagram
|
||||
**键值是位掩码,不是枚举**——可组合下发:`CN_KEY_F1|CN_KEY_ENT = 0x24`(`Key.c` 物理键号 `10` 即此值)。
|
||||
`CN_KEY_ADD=0x82`、`CN_KEY_SUB=0x84` 只在 RS-485 通道使用,不进 7003 键值表。
|
||||
|
||||
#### 5.16.4 显存上送的续传与拒绝语义
|
||||
#### 5.16.6 显存上送的续传与拒绝语义
|
||||
|
||||
`RDisp_Form_LcdMem` / `RDisp_Proc_LcdMem` 的完整规则:
|
||||
|
||||
@@ -1050,9 +1108,9 @@ sequenceDiagram
|
||||
|
||||
> **为什么必须有 `bNeedFlash` 握手**:显存由显示任务异步改写,若允许客户端随时按偏移拉取,
|
||||
> 跨两次刷新的位图会在客户端拼成**撕裂帧**。参考用"整帧一次性 + 拒绝重拉"消除这个窗口,
|
||||
> 本产品当前无此保护(§5.16.7 第 4 行)。
|
||||
> 本产品当前无此保护(§5.16.9 第 4 行)。
|
||||
|
||||
#### 5.16.5 按键注入与状态机
|
||||
#### 5.16.7 按键注入与状态机
|
||||
|
||||
| 项 | 规格 |
|
||||
|---|---|
|
||||
@@ -1064,11 +1122,11 @@ sequenceDiagram
|
||||
| 连接联动 | TCP 连上 → `bUseRkey = TRUE`;断开 → `FALSE` + `wSendCode = IDLE` + `dwSendBase = 0` |
|
||||
| 背光 | `Key_HaveNewKey()` 每次调用都执行 `MenuProc_Have_Key()`(无新键也点背光),再返回是否有新键 |
|
||||
|
||||
#### 5.16.6 时序、超时与重试
|
||||
#### 5.16.8 时序、超时与重试
|
||||
|
||||
| 定时器 | 周期 | 作用 |
|
||||
|---|---|---|
|
||||
| `tTimerLCD` | **500 ms** | 本地屏刷新节拍(`WriteScreenByByte`);本产品无屏板,此路不实现 |
|
||||
| `tTimerLCD` | **500 ms** | **串口屏板通道**的周期兜底节拍(`WriteScreenByByte`);本产品待建(§5.16.2) |
|
||||
| `tTimerComBrk` | **1 分钟** | 通信中断判定;**每收到任一帧、每次发送成功**都重置 |
|
||||
| `tTimerAbandon` | **200 ms** | 发送未完成时的放弃窗口 |
|
||||
|
||||
@@ -1087,7 +1145,7 @@ sequenceDiagram
|
||||
——prio **111**、栈 **0x35000**(212 KB,VxWorks 字节语义)、主循环 `taskDelay(1)`,
|
||||
每轮 `DogTask_InfoUpdate(EN_TASK_DSP, ...)` 喂狗,退出时 `DogTask_InfoError` 报异常。
|
||||
|
||||
#### 5.16.7 与参考的差异(本产品当前实现)
|
||||
#### 5.16.9 与参考的差异(本产品当前实现)
|
||||
|
||||
| # | 项 | 参考 | 本产品 | 处置 |
|
||||
|---|---|---|---|---|
|
||||
@@ -1101,11 +1159,17 @@ sequenceDiagram
|
||||
| 8 | 键值集 | 8 键(含 F1 / F2) | 6 键(无 F1 / F2) | 补 F1 / F2 |
|
||||
| 9 | 任务模型 | 独立任务 prio 111 / 栈 212 KB | `uiTask` 10 ms 轮询(prio BelowNormal / 16 KB) | **形态差异,不追平**(X1 / X2) |
|
||||
| 10 | 接收侧 CRC | 仅 LCDMEM / KEY 校验 | 全帧校验 | **本产品更严,保留** |
|
||||
| 11 | **串口屏板通道** | **有**:显存 3200 B + 面板 LED 4 B 下行、物理键号 1~10 上行,变化驱动 + 500 ms 兜底 | **无**(只有 7003 网络通道) | **新建**,见 §9.13 第 10~13 条 |
|
||||
| 12 | 双出口并发 | 同一份显存同时喂串口与网络,互不阻塞 | 只有网络一个出口 | 随第 11 条一并实现 |
|
||||
| 13 | 面板指示灯 | 屏板上的指示灯组(`WritePanelLED` / `ledbuf 4 B`) | 主板 6 路 GPIO LED(`LED1~6`) | **语义不同**:本产品无屏板指示灯,主板 LED 保留 |
|
||||
| 14 | 背光 / 对比度 | `Lcd_BackLight` + `Lcd_SetContrast` + 空闲 120 s 熄灭 | 无(远端渲染,无背光概念) | 随串口通道一并决定(屏板自管则不做) |
|
||||
|
||||
> 第 1 / 3 / 4 / 5 / 8 条是**客户端可见的报文口径差异**——现有 `DTU-RemoteLCD` 按 8 B INIT 实现,
|
||||
> 补 29 B 后**客户端必须同步改**,否则会错位解析。这是本项复刻唯一的跨端风险点。
|
||||
>
|
||||
> 第 11 / 12 条是**整条链路缺失**,不是报文细节差异——它决定了本产品能否脱离 PC 独立带屏运行。
|
||||
|
||||
#### 5.16.8 复刻完成判据
|
||||
#### 5.16.10 复刻完成判据
|
||||
|
||||
1. 任意 TCP 客户端连 7003 → 发 `INIT` → 收到 **29 B**,字段值与上表逐字节一致。
|
||||
2. 发 `LCDMEM(0)` → 收到 `3204 B`;**再次**发 `LCDMEM(0)`(新图未就绪)→ **无应答**(对应参考 `-1`)。
|
||||
@@ -1116,6 +1180,15 @@ sequenceDiagram
|
||||
6. 断开 TCP 60 s 以上 → 设备侧可观测到"通信中断"(日志 / 状态位),重连后自动恢复推流。
|
||||
7. 8 键逐个下发 → 界面动作与按键表一致;组合键 `F1|ENT` 生效。
|
||||
|
||||
**串口屏板通道(与上面 7 条并列,待建后验收)**:
|
||||
|
||||
8. 串口侧注入物理键号 `1~10` → 界面动作与映射表一致;`0` 表示无键、不产生事件。
|
||||
9. UI 刷新 → 串口侧在 ≤ 500 ms 内收到一帧完整显存(3200 B)+ LED 4 B;内容与 `g_ui_fbuf` 逐字节一致。
|
||||
10. **双通道并发**:同一时刻 7003 客户端在拉帧、串口屏板在收帧,两侧画面一致,且**互不丢帧、不串帧**;
|
||||
串口侧阻塞不得导致 7003 侧超时(反之亦然)。
|
||||
11. 拔掉串口屏板 → 7003 侧不受影响;插回后自动恢复,无需复位。
|
||||
12. 背光/对比度(若屏板自管则跳过):空闲 120 s 熄灭,任意键点亮。
|
||||
|
||||
---
|
||||
|
||||
## 6. 接口规范
|
||||
@@ -1136,7 +1209,10 @@ sequenceDiagram
|
||||

|
||||
|
||||
> **口径**:本节按**参考源码**(`HMI/RemoeDisp/RemoDispBus.c`)给线上格式;本产品当前实现与该口径的
|
||||
> 逐项差异、以及为什么会有差异,见 §5.16.7。**以参考为准**,差异项按 §9.13 排期收敛。
|
||||
> 逐项差异、以及为什么会有差异,见 §5.16.9。**以参考为准**,差异项按 §9.13 排期收敛。
|
||||
>
|
||||
> 本节只讲**网络**通道。**串口屏板通道不走本协议**——它由 `LCD_LED_Update` / `WriteScreenByByte` /
|
||||
> `getRs485Key` 承担,帧格式在交付源码中不可见,见 §5.16.1 与 §5.16.2。
|
||||
|
||||
| 项目 | 内容 |
|
||||
|---|---|
|
||||
@@ -1159,7 +1235,7 @@ sequenceDiagram
|
||||
| 2 | KEY | `[按键码u8]` | 无(空帧确认,LEN=0) |
|
||||
| 3 | LCDMEM | `[起始偏移u32]` | `[偏移u32][1bpp位图 3200B]`(3204 B);偏移非 0 时续传,`bNeedFlash` 期间不应答 |
|
||||
|
||||
**INIT 字段明细与按键码表**:见 §5.16.3(含 29 B 逐字段偏移)。
|
||||
**INIT 字段明细与按键码表**:见 §5.16.5(含 29 B 逐字段偏移)。
|
||||
|
||||
**按键码**:`F1=0x04` / `F2=0x80` / `UP=0x02` / `DOWN=0x40` / `LEFT=0x10` / `RIGHT=0x08` /
|
||||
`ENTER=0x20` / `ESC=0x01`;**位掩码可组合**(如 `F1|ENTER = 0x24`)。
|
||||
@@ -1573,7 +1649,7 @@ pre-commit run --all-files
|
||||
| **SNTP 对时** | 17 | 参考对时走 SNTP | 私有 TCP 8888 + 104 `C_CS` | SNTP 客户端 |
|
||||
| **固有参数** | 1 | `8001H~800AH` 字符串类参数 | 未实现(无法短浮点上送) | 随送检点表设计 |
|
||||
| **遥测增强** | 4、5 | k=1~9 谐波方和根 + 4 点平均 | 仅基波轨 | 谐波 / 等周波调频 / 零序自产外接切换 三条算法轨 |
|
||||
| **屏板链路对齐** | 20 | 7003 四命令(INIT 29 B)+ 显存续传 / 拒绝握手 / 链路监视 / F1·F2 + RS-485 屏板通道 | 7003 四命令已通(INIT **8 B**);无续传、无 `bNeedFlash` 拒绝、无 1 分钟监视、键值 6 个 | 报文口径 6 项 + RS-485 通道 1 路(明细见 §9.13) |
|
||||
| **屏板链路对齐** | 20 | **串口屏板通道**(显存 3200 B + LED 4 B 下行 / 键号 1~10 上行,变化驱动 + 500 ms)+ **7003 四命令**(INIT 29 B)+ 续传 / 拒绝握手 / 链路监视 / F1·F2 | 只有 7003 四命令(INIT **8 B**);**串口通道 0**;无续传、无 `bNeedFlash` 拒绝、无 1 分钟监视、键值 6 个 | 串口通道整条 + 7003 报文口径 6 项(明细见 §9.13) |
|
||||
|
||||
> **一句话**:**「标定闭锁」是唯一"再排期也没用"的缺口**(等标准源);「出口与开入」「三相与同期」
|
||||
> 「电度计量」等 V0.2 硬件;「对下采集」等用户决策;其余规模型条目**全部可在现有硬件上推进**,
|
||||
@@ -2147,7 +2223,7 @@ pre-commit run --all-files
|
||||
| 软压板 | 9 面全部可投退且行为可观测(投退后对应功能确实停走/恢复) |
|
||||
| 出口与开入 | 保护动作 → 出口继电器动作 → 开入回读确认,全链路 ≤ 120 ms |
|
||||
| 标定解卡 | 8 通道两点标定后 `ADC_CAL_F_VALID` 全置位;注入标准源,保护动作值与定值误差 ≤ 3 % |
|
||||
| 屏板链路 | INIT 应答 29 B 逐字段一致;`LCDMEM` 偏移 0 得 3204 B、重复召唤无应答、偏移 ≥3200 无应答;`KEEPLIVE` 无应答且 1 分钟不掉链;8 键(含 `F1\|ENT` 组合)界面动作正确(§5.16.8) |
|
||||
| 屏板链路 | **串口通道**:注入键号 `1~10` 界面动作正确、UI 刷新 ≤500 ms 内串口发出 3200 B + LED 4 B、双通道并发不丢帧不串帧、拔插屏板自动恢复;**网络通道**:INIT 应答 29 B 逐字段一致、`LCDMEM` 偏移 0 得 3204 B、重复召唤无应答、偏移 ≥3200 无应答、`KEEPLIVE` 无应答且 1 分钟不掉链、8 键(含 `F1\|ENT` 组合)动作正确(§5.16.10) |
|
||||
|
||||
---
|
||||
|
||||
@@ -2155,8 +2231,12 @@ pre-commit run --all-files
|
||||
|
||||
> **口径**:条目一律用**语义短语**(编号规范 P-8),执行序即表序。
|
||||
> 改动范围只含本产品固件与 `DTU-RemoteLCD` 客户端;**屏板固件不在本仓库**,
|
||||
> 其行为以 §5.16 为契约做黑盒验收。若现场屏板经**串口服务器(串口透传)**接入,
|
||||
> 7003 即该透传通道的网络侧承载,帧格式与判据不变。
|
||||
> 其行为以 §5.16 为契约做黑盒验收。
|
||||
>
|
||||
> **两种部署形态,两条通道都要**:① **串口直连屏板**(参考的形态,第 10~13 条)——屏板直接挂在设备
|
||||
> 串口上,无需任何网络设备;② **串口服务器透传 / 网络镜像**(第 2~9 条)——屏板或调试软件经以太网连 7003。
|
||||
> 现场用串口服务器把屏板接到网上时,两种形态等价,但**固件侧不能只实现后者**:
|
||||
> 只有 7003 时,设备离开网络就没有任何本地显示,与参考产品不等价。
|
||||
|
||||
| 序 | 任务 | 改动点 | 判据 | 跨端 |
|
||||
|---|---|---|---|---|
|
||||
@@ -2164,12 +2244,15 @@ pre-commit run --all-files
|
||||
| 2 | **INIT 应答补足 29 字节** | `ui_net_sink.c` 的 `remo_send_init()` 组帧由 8 B 扩到 29 B:补颜色位、显存大小、RGB 三色、8 键值表 | 29 B 逐字节比对通过 | **是** |
|
||||
| 3 | **键值表补 F1 / F2** | `ui_net_sink.h` 键值宏补 `0x04` / `0x80`;`ui_net_sink_inject_key()` 映射;UI 键处理接受组合键 | 下发 `0x04` / `0x80` / `0x24` 界面响应正确 | 否 |
|
||||
| 4 | **显存断点续传** | `CMD_LCDMEM` 分支去掉"仅偏移 0"限制:按偏移取 `g_ui_fbuf + off`,长度 `min(9800, 3200 − off)` | `off=1600` 得 `4+1600` B,内容与整帧尾部逐字节一致 | 否 |
|
||||
| 5 | **召唤拒绝握手** | 新增"帧代次 + 已上送"等价状态:新图未就绪时重复召唤**不应答**;偏移 ≥3200 不应答 | §5.16.8 第 2、3 条通过 | **是** |
|
||||
| 5 | **召唤拒绝握手** | 新增"帧代次 + 已上送"等价状态:新图未就绪时重复召唤**不应答**;偏移 ≥3200 不应答 | §5.16.10 第 2、3 条通过 | **是** |
|
||||
| 6 | **链路监视** | 1 分钟通信中断计时(收到帧 / 发送成功即重置);超时置状态位并落一行日志 | 断链 60 s 有明确日志与状态;重连后自动恢复推流 | 否 |
|
||||
| 7 | **KEEPLIVE 静默** | 去掉空帧回显,改为仅重置计时 | §5.16.8 第 4 条通过 | **是** |
|
||||
| 8 | **发送重试评估** | 对比参考"BUSY + 200 ms 放弃"与现有 `net_send` 阻塞模型,出结论并回填 §5.16.7 第 7 行 | 结论有实测数据支撑(实现 / 明确不实现) | 否 |
|
||||
| 9 | **客户端一致性回归** | `DTU-RemoteLCD` 按 29 B 解析;把 §5.16.8 七条做成自动化用例 | 七条判据全 PASS | **是** |
|
||||
| 10 | **RS-485 屏板通道** | `rs485` 收键(物理键号 `1~10` → 逻辑键值)+ `LCD_LED_Update(3200, 4)` 送屏;去抖 `2/12`;背光 120 s | 与 7003 通道同屏同键、互不干扰 | 否 |
|
||||
| 7 | **KEEPLIVE 静默** | 去掉空帧回显,改为仅重置计时 | §5.16.10 第 4 条通过 | **是** |
|
||||
| 8 | **发送重试评估** | 对比参考"BUSY + 200 ms 放弃"与现有 `net_send` 阻塞模型,出结论并回填 §5.16.9 第 7 行 | 结论有实测数据支撑(实现 / 明确不实现) | 否 |
|
||||
| 9 | **客户端一致性回归** | `DTU-RemoteLCD` 按 29 B 解析;把 §5.16.10 第 1~7 条做成自动化用例 | 七条判据全 PASS | **是** |
|
||||
| 10 | **串口通道物理层定版** | 确认屏板接口电平(RS-485 / TTL)、波特率、帧格式、校验与方向控制;端口默认 **USART3(PB10/PB11)**,若为 RS-485 半双工则改 **UART4** 并先解冻该簇 | 一份定版说明(含实测抓包),回填 §5.16.2 | 否 |
|
||||
| 11 | **串口下行显存** | 新增屏板通道模块:`屏板送帧(显存 3200 B, LED 4 B)`;变化驱动 + 500 ms 兜底;**独立发送缓冲**,不与 7003 共用 | 串口侧收到完整帧,内容与 `g_ui_fbuf` 逐字节一致 | 否 |
|
||||
| 12 | **串口上行按键** | 收键(中断或轮询)→ 物理键号 `1~10` → 逻辑键值 → 与 7003 注入**同一入口**合并;去抖 `2/12` | §5.16.10 第 8 条通过 | 否 |
|
||||
| 13 | **双通道并发回归** | 两出口各自独立发送上下文;串口阻塞不拖 7003、7003 阻塞不拖串口;拔插屏板自动恢复 | §5.16.10 第 10、11 条通过 | 否 |
|
||||
|
||||
**批次划分**:
|
||||
|
||||
@@ -2177,14 +2260,18 @@ pre-commit run --all-files
|
||||
|---|---|---|
|
||||
| 第一批(无跨端风险,可独立发版) | 3、6、8 | 只动本端,旧客户端不受影响 |
|
||||
| 第二批(跨端,须与客户端同步发版) | 2、4、5、7、9 | 报文口径变更,两端必须同版本 |
|
||||
| 第三批(随 RS-485 簇解冻) | 10 | 依赖 §5.10 的 RS-485 整簇解冻 |
|
||||
| 第三批(**独立立项**,不随 RS-485 冻结) | 10、11、12、13 | 屏板串口通道是**独立需求**,与 §5.10 冻结的"对下采集簇"不是一回事;但若屏板是 RS-485 半双工,会与 UART4 争用 → 先做第 10 条定版 |
|
||||
|
||||
> ⚠ **唯一破坏性变更**:第 2 条把 INIT 应答从 8 B 改成 29 B。**旧客户端会把 29 B 的前 8 B 当全部、
|
||||
> 把后 21 B 当作下一帧的 TAG 去找**,解析状态机会被这 21 B 拖住直到超时——表现为"连上了但不出图"。
|
||||
> 因此第 2、5、7、9 条必须**同批发布**,且发版说明中明确"客户端需升级"。
|
||||
>
|
||||
> **屏板固件边界**:本表不覆盖屏板侧固件(帧解析 / 显存写入 / 按键扫描)。屏板可用任意实现,
|
||||
> 只要满足 §5.16.8 的七条黑盒判据即为兼容。
|
||||
> 只要满足 §5.16.10 的九条黑盒判据即为兼容。
|
||||
>
|
||||
> **第三批的前置阻塞**:第 11~13 条需要**屏板实物**才能验收(无实物只能做到"帧发出去了")。
|
||||
> 第 10 条的定版若拿不到屏板固件或抓包,则**不得按猜测定协议**——先用自定义帧跑通,
|
||||
> 但必须在文档里标注"待与屏板核对",避免把猜测固化成契约。
|
||||
|
||||
---
|
||||
|
||||
@@ -2231,7 +2318,7 @@ pre-commit run --all-files
|
||||
| 10 | 104 遥控与定值 | `YK12` 软压板投退、`C_SE` 写定值 | 两段式正答、压板行为可观测、定值跨复位保持 |
|
||||
| 11 | 保护闭锁态 | 未标定状态下观察 `YX31` 与日志 | 判据停走且**明确可见**(不得静默不动作) |
|
||||
| 12 | 记录可追溯 | FTP 下载 `/log/soe.log`、`/log/run.log`、`/log/selftest.log` | 记录连续、时标正确、解码校验通过 |
|
||||
| 13 | 屏板链路一致性 | 任意 TCP 客户端连 7003 按 §5.16.8 七条逐项验证 | INIT 29 B 字段一致、重复召唤/越界无应答、KEEPLIVE 静默、8 键(含组合)动作正确 |
|
||||
| 13 | 屏板链路一致性 | 串口屏板 + TCP 客户端同时接入,按 §5.16.10 九条逐项验证 | 串口侧 3200 B + LED 4 B 一致、键号 1~10 动作正确、双通道并发不丢帧;网络侧 INIT 29 B、重复召唤/越界无应答、KEEPLIVE 静默、8 键(含组合)动作正确 |
|
||||
|
||||
### 10.4 台架验收(已闭环)
|
||||
|
||||
@@ -2301,4 +2388,5 @@ pre-commit run --all-files
|
||||
| 2026-10-27 | **v1.1 全面刷新(以参考产品 CLS100 为横向基准)** | ① 新增 §2.5「与参考产品 CLS100 的能力对照」(12 个能力域逐域给出参考实现 / 本产品现状 / 结论),并据此重写 §2.1 现状口径与 §2.4 产品范围(分"已验收 / 已实现但受制约 / 非本期"三档);② 新增 §4.6「V0.1 硬件能力边界」(H1 双转换器无共同采样触发 / H2 无中点偏置 / H3 无出口开入 / H4 无本地屏 / H5 无 SDIO)作为范围裁剪的硬依据;③ 任务模型由 6 任务更正为 **9 任务**(补 `adcTask` / `iec104Task` / `protectTask`,栈配置改为 words/B 双列),事件位补至 bit8,启动时序补配置段注册与 `adc1_disable` 铁律,线程间通信补双区快照 / SPSC 环 / 脏位;④ **功能需求新增五节**:§5.9 ADC 采集与标定(FR-ADC,含标定折算与前端物理口径)、§5.11 遥测与相量(FR-MEAS)、§5.12 保护功能(FR-PROT,9 元件 + 四源闭锁)、§5.13 定值与运行参数(FR-SET)、§5.14 SOE 与动作记录(FR-SOE)、§5.15 IEC 104 上行(FR-IEC104,含点表推荐响应时间);⑤ 新增 §6.8 104 点表摘要,§6.7 对外 API 补 10 个模块;⑥ §7.2 补采样/相量/遥测/保护/上送七项实时指标,§7.3 内存与栈预算全部换为 2026-10-24 受管快照与 2026-10-22 栈快照,§7.4 门禁改为按族描述,§7.6 补 104 与配置面安全边界;⑦ §8 菜单绑定现状(22/33/42)与内容页分组重写;⑧ §9 改为「缺口总表(G1~G10)+ 推进顺序 + 未接线开关」,删除已闭环的 ADC/104 缺口;⑨ §10 验收补栈/体积门禁、采集与 104 锚点、六条现场项与五项台架闭环用例。**本次只改本文件** |
|
||||
| 2026-10-27 | **v1.2 改为 1:1 复刻口径(以参考工程源码为唯一清单)** | ① **范围口径反转**:产品范围由「按硬件裁剪」改为「参考源码能力全集」,差异只允许来自 5 项物理不可移植项(X1 双核分工 / X2 VxWorks / X3 本地屏 / X4 一次设备接口 / X5 计量通道,§2.4.1);② §2.5 由「12 域能力对照 + 取舍依据」重写为 **「1:1 复刻基线」**,判定依据从参考项目的分析文档改为 **参考工程源码的常量表与模块文件**(§2.5.1 三要素:点表即契约 / 地址即接口 / 模块即元件);③ 新增 **§2.5.2 19 项能力清单**(源码实测):定值 **249 项 / 23 单元**(`g_tSetModelTab`)、104 定值映射 **107 项 `0x8820~0x8891`**(`g_tCommSetParaTab`)、遥测 **31**、遥测模型 35、电度 **8**、开入 **138**、开出 **31**、动作事件 **33**、录波通道 **65**、软压板 **9**、保护元件 **45 模块**、记录队列 **13 类**、自检 3 类型、录波 3 类型 / 6 段、规约 **12 种**、加密 SM2/SM3/ECDSA;④ 新增 **§2.5.3 104 地址空间 8 段表**并 **更正段基址笔误**——参考 `Rly_IEC104.h` 为 1 起编,遥测 `0x4001`、遥控 `0x6001`(v1.1 及更早写 `4000H+` / `6000H+`),§5.15 与 §6.8 同步更正;⑤ 新增 **§2.5.4 定值 23 单元分布表**(WatchDog 63 / SYS3 45 / VolTimeRecv 17 / AutoReCls 16 …,并说明枚举 28 个中 4 个表内无项的原因)与 **§2.5.5 45 元件九类归集表**(含 `PRS_OverCurrent.c` 判据结构对照);⑥ 新增 **§2.5.6 规约全集 13 行表**(对上 9 种 / 对下 3 类 / 加密)与 **§2.5.7 差异归因表**,结论改为「差距全部是进度而非范围」;⑦ **§9 重写为「复刻进度与路线图」**:删除全部「不做」表述,缺口分 **阻塞型**(标定闭锁 / 出口与开入 / 三相与同期 / 电度计量 / 对下采集 / 第三方送检)与 **规模型**(定值 40→249、映射 40→107、元件 9→45、录波子系统、规约 1→12、国密等)两表,条目一律用**语义短语**命名以免与其它文档的 `S`/`A`/`P` 编号族撞名(编号规范 P-8),推进顺序补「点表铺开必须晚于标定」铁律;⑧ §2.1 产品定位补 1:1 复刻目标与三项差距量化(定值 40 vs 249 / 遥测 9 vs 31 / 开入开出 0 vs 138·31);⑨ §6.8 点表摘要逐段补「与参考的差额」说明(遥测缺第二回线与线电压、遥信缺 138 点开入、定值缺整单元)。**本次只改本文件** |
|
||||
| 2026-10-28 | **v1.3 缺口逐项细化(新增 §9.4~§9.12)** | ① **定值**:给出 40 项去向对账(覆盖参考 35 + 本地扩展 5),差额由「+209」更正为 **+214 项**;新增 23 单元逐单元差额表、已覆盖 35 项逐项对照(过流三段每段缺方向 / 低压 / 告警 / 低压定值 4 项;零序过流三段 18 项全缺,注意 `PS_3U0_*` 是零序**过压**不是过流;三级负荷只做一级;频率缺「跳闸投退」;电压缺 4 项跳闸 / 告警投退;PT·CT 缺 6 项)、完全未覆盖 163 项逐项清单(`SYS3` 45 / `VolTimeRecv` 17 / `AutoReCls` 16 / `SYN` 13 / `WAVESTART` 12 / `MeaLimit` 10 / `OverCurSpeed` 8 / `OverCurI0` 13 / 小单元 29);② **遥测**:31 点逐点对照,缺 22 点按依赖分三批(线电压与功率 13 / 第二回线 7 / 直流 2),指出「三相电压全落 TPAFE」可一次解锁 6 个线电压点;③ **开入开出**:138 = 软遥信 104 + 硬件 27 + 双点 6 + 多态 1,澄清「104 点 ≠ 104 个端子」;31 开出 = 出口 11 + 信号 20;④ **动作事件**:33 条(421~453)逐条对照,覆盖 9 条;记录参考源码 428/429 **同名**需按事件码区分;⑤ **保护元件**:口径改为模块级 45 → 8,37 个缺失模块逐个给出「缺它的后果 + 依赖」,差额由「+35」更正为 **+37**,指出 `MusterRecov` 总复归是唯一无硬件依赖、可立即开工的元件;⑥ **录波**:14 项硬指标(80 点/周波 = 4000 Hz、6 段、前 5 后 10 返回 2 手动 6 周波、9000 ms、RAM 16、COMTRADE 64/64/16、65 通道)与复刻所需四件东西;⑦ **记录体系**:13 类队列容量表,覆盖 8 类,缺越限 / 闭锁 / COS / 顺控 / 顺控执行;指出「闭锁记录」性价比最高(四源闭锁已全实现却无留痕);⑧ **规约栈**:12 种逐种链路 / 用途 / 工作量特征 + 四层排期,指出对上与对下是两套角色;⑨ 新增 **§9.12 复刻完成判据**(12 条可验证判据)。**本次只改本文件** |
|
||||
| 2026-10-28 | **v1.4 屏板链路口径更正 + 逐字节复刻规格(新增 §5.16、§9.13)** | ① **口径更正**:v1.3 及更早把参考写成"**板载** LCD + 按键"、把本产品远端推流说成"等价替代",**两处都错**。参考源码中主机侧 5 个碰硬件的函数(`KeyGet` / `WriteScreenByByte` / `LCD_LED_Update` / `getRs485Key` / `anyNewKey`)**全树只有声明没有实现**,按键轮询函数名为 `Key_Rs485_Process()`(注释"轮询从485传来的按键值"),屏板插槽号 `CN_SLOT_DISP = 0`(注释"显示板插槽号固定为0")——**参考的屏和键同样在独立板件上、同样靠链路传输**,本产品与之**同构而非替代**;§2.4.1 X3 由「本地人机」改为「**就地屏板(板件本体)**」,并补口径更正说明段;② **§2.5.2 补第 20 项「远端屏与按键链路」**(状态 🔶),能力计数 19 → **20 项**、🔶 9 → **10 项**,§2.5.7 差异归因同步(X3 不再计为"已用等价方案替代");③ **新增 §5.16 远端屏与按键链路(FR-HMI)**:两条链路对照(RS-485 屏板通道 / TCP 7003 总线)、帧格式逐字节、CRC 覆盖范围、接收定界算法、**INIT 应答 29 B 逐字段偏移表**、键值位掩码语义、`bNeedFlash` 续传与拒绝语义(`-1` / `-2`)、按键状态机与合并优先级、三个定时器(500 ms / 1 分钟 / 200 ms)、发送状态机、`0x55`/`0xaa` 刷新互斥、任务参数(prio 111 / 栈 0x35000);④ **§5.16.7 给出 10 项与参考的差异**,其中 5 项为客户端可见的报文口径差(INIT **8 B vs 29 B** 为最大一条);⑤ **§6.2 按参考源码重写**:更正 INIT 应答长度(原写 8 B)、KEEPLIVE 改为**不应答**(原写"原样回显")、补最长帧 9800 B / 收发缓冲 10240 B / 按键码补 `F1`·`F2` 与位掩码可组合说明;⑥ **新增 §9.13 屏板链路复刻任务规划**:10 条语义短语任务 + 三批划分 + 唯一破坏性变更警示(INIT 长度变更必须与客户端同批发版);⑦ §9.1.2 补「屏板链路对齐」行、§9.12 补完成判据、§10.3 补现场验收第 13 项。**本次只改本文件** |
|
||||
| 2026-10-28 | **v1.4 屏板链路口径更正 + 逐字节复刻规格(新增 §5.16、§9.13)** | ① **口径更正**:v1.3 及更早把参考写成"**板载** LCD + 按键"、把本产品远端推流说成"等价替代",**两处都错**。参考源码中主机侧 5 个碰硬件的函数(`KeyGet` / `WriteScreenByByte` / `LCD_LED_Update` / `getRs485Key` / `anyNewKey`)**全树只有声明没有实现**,按键轮询函数名为 `Key_Rs485_Process()`(注释"轮询从485传来的按键值"),屏板插槽号 `CN_SLOT_DISP = 0`(注释"显示板插槽号固定为0")——**参考的屏和键同样在独立板件上、同样靠链路传输**,本产品与之**同构而非替代**;§2.4.1 X3 由「本地人机」改为「**就地屏板(板件本体)**」,并补口径更正说明段;② **§2.5.2 补第 20 项「远端屏与按键链路」**(状态 🔶),能力计数 19 → **20 项**、🔶 9 → **10 项**,§2.5.7 差异归因同步(X3 不再计为"已用等价方案替代");③ **新增 §5.16 远端屏与按键链路(FR-HMI)**:两条链路对照(RS-485 屏板通道 / TCP 7003 总线)、帧格式逐字节、CRC 覆盖范围、接收定界算法、**INIT 应答 29 B 逐字段偏移表**、键值位掩码语义、`bNeedFlash` 续传与拒绝语义(`-1` / `-2`)、按键状态机与合并优先级、三个定时器(500 ms / 1 分钟 / 200 ms)、发送状态机、`0x55`/`0xaa` 刷新互斥、任务参数(prio 111 / 栈 0x35000);④ **§5.16.9 给出 10 项与参考的差异**,其中 5 项为客户端可见的报文口径差(INIT **8 B vs 29 B** 为最大一条);⑤ **§6.2 按参考源码重写**:更正 INIT 应答长度(原写 8 B)、KEEPLIVE 改为**不应答**(原写"原样回显")、补最长帧 9800 B / 收发缓冲 10240 B / 按键码补 `F1`·`F2` 与位掩码可组合说明;⑥ **新增 §9.13 屏板链路复刻任务规划**:10 条语义短语任务 + 三批划分 + 唯一破坏性变更警示(INIT 长度变更必须与客户端同批发版);⑦ §9.1.2 补「屏板链路对齐」行、§9.12 补完成判据、§10.3 补现场验收第 13 项。**本次只改本文件** |
|
||||
| 2026-10-28 | **v1.5 补串口屏板通道(显示信息不只走网络)** | ① **口径再更正**:v1.4 把串口通道写成"链路 A,随 RS-485 簇冻结",等于把它降级成可选——**错**。参考的架构是**一份显存、两个出口**:**串口屏板通道是主通道**(`LCD_LED_Update(显存 3200 B, LED 4 B)` 变化驱动 + `WriteScreenByByte` 500 ms 兜底),**TCP 7003 是镜像**;上行同理(`getRs485Key()` 物理键号 1~10 为主,`g_tRemoteKey` 为镜像,两者在 `Key_Read()` 汇合且**本地优先**)。§5.16 标题改为「**屏板链路:串口主通道 + 网络镜像**」并重写开篇;② **§5.16.1 重写为「一份显存、两个出口」**:显存物理基址 `CN_VIDEO_ADDRESS_BASE = 0xC1F00000`(非 cache 区)、三条下行路径与两条上行路径的归属任务 / 调用 / 载荷 / 节拍对照表;③ 新增 **§5.16.2「本产品的串口通道(待建)」**:V0.1 串口资源盘点(USART1 调试占用 / UART4 被冻结 RS-485 占用 / **UART5、USART2、USART3 空闲**),默认选 **USART3(PB10/PB11)**,若屏板为 RS-485 半双工则改 UART4 并先解冻该簇;④ 新增 **§5.16.3「参考实现的屏板侧接口一览」**,并**明确列出交付源码推不出的四项**(波特率与数据格式 / 帧头与校验 / 半双工方向控制 / 3200 B 是否分片与应答)——在拿到实测前不得声称"按参考协议实现";⑤ **§5.16.9 差异表由 10 行扩到 14 行**,新增「串口屏板通道整条缺失」「双出口并发缺失」「面板指示灯语义不同」「背光对比度」四项,并注明第 11/12 条是**整条链路缺失**而非报文细节;⑥ **§5.16.10 判据由 7 条扩到 12 条**,新增串口侧 5 条(键号注入 / 500 ms 内出帧 / 双通道并发不丢帧不串帧 / 拔插恢复 / 背光);⑦ **§9.13 任务由 10 条扩到 13 条**:原「RS-485 屏板通道」一条拆为「串口通道物理层定版 / 串口下行显存 / 串口上行按键 / 双通道并发回归」四条,批次表第三批改为**独立立项、不随 §5.10 冻结**,并补前置阻塞(需屏板实物验收;拿不到固件或抓包时不得把猜测定成契约);⑧ §5.16.8 `tTimerLCD` 行由"此路不实现"改为"串口通道周期兜底节拍(待建)",§2.5.2 第 20 项、§9.1.2、§9.12、§10.3 同步。**本次只改本文件** |
|
||||
|
||||
Reference in New Issue
Block a user