Files
AMI/docs/通讯交接文档.md
T

193 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AMI 仪表通讯交接文档
协议版本 1.1(debug 数字状态版) | 2026-09-30
适用工程:AMI.HMI;屏幕 TJC4827X543_011,480 × 272;编辑器 USART HMI 1.68.1.3037。本文以随附的精简指令版工程为准。
## 1. 接手先看这三点
主控 → 屏幕:发送文本指令,末尾必须追加三个实际字节 FF FF FF。屏幕 → 主控:用户确认任务后发送固定 6 字节帧 AA 55 01 NN 0D 0A。这两种帧的结束方式不同。
debug 状态只发送 d0~d15 的数值;0=未知,1=正常,2=故障。屏幕自动处理中文和颜色,不再要求主控发送 txt/pco。
任务帧表示用户选择请求。仪表没有实现主控执行确认、运行完成回传或安全互锁裁决,主控必须自行判断能否执行。
## 2. 串口与发送规则
| 项目 | 当前约定 |
| --- | --- |
| 波特率 | 9600(Program.s 中 baud=9600) |
| 串口格式 | 联调使用 8N1;实物 UART 参数及电平按该型号规格书确认 |
| 接收模式 | recmod=0,使用屏幕原生文本指令协议 |
| 指令编码 | dN=状态 等指令为 ASCII;发送中文时使用 GB2312 |
| 指令结束 | 每条指令后加 FF FF FF;不需要 CR/LF,不发送字符串“FF FF FF” |
| 接线 | 主控 TX → 屏 RX,屏 TX → 主控 RX,共地;本交接未核实连接器针脚和电平 |
## 3. 最小可用示例
以下三条依次设置配电箱正常、左急停/行程/惯性故障,再进入 debug 页面。仅发送指令本身,每条追加结束符。
```text
d0=1
d1=2
page debug
```
发送 d0=1 的完整字节:64 30 3D 31 FF FF FF(7 字节)。连续发送多条时,每条都要独立追加结束符,串口队列不得让不同任务的字节交错。
---
# 4. Debug 状态编号
主控发送 dN=V;N 为下表编号,V 只能取 0、1、2。默认全部为 0。下表顺序是工程中的接口映射,不是电气线束针脚顺序。
| 变量 | 原始信号名 | 检测内容 |
| --- | --- | --- |
| d0 | Safe_DBBox_OUT | 配电箱安全回路 |
| d1 | Safe_L&BOTS&IW | 左急停、超行程和惯性开关 |
| d2 | Safe_Ba_BOX | 电池箱安全回路 |
| d3 | Safe_RSTOP | 右急停和驾驶舱急停 |
| d4 | Safe_LAST | 安全回路末端 |
| d5 | Safe_S | 左右后悬安全回路 |
| d6 | Safe_RES1 | RES 安全回路 |
| d7 | Safe_Control | 主控盒安全回路 |
| d8 | EBS_BE | 制动舵机电源 |
| d9 | EBS_12V | 电磁阀电源 |
| d10 | EBS_AIR | 气压传感器电源 |
| d11 | EBS_Oil | 油压传感器电源 |
| d12 | Driverless_INS | 惯导电源 |
| d13 | Driverless_WSS | 轮速传感器电源 |
| d14 | Driverless_Camera | 摄像头电源 |
| d15 | 12V_Control | 主控盒供电 |
## 显示与生命周期
0 → 灰色“未知”(33840);1 → 绿色“正常”(2016);2 → 红色“故障”(63488)。其他数值显示未知,但主控应限制为 0~2。颜色由工程脚本处理。
d1 同时更新左急停及行程/惯性两个位置;一次发送即可同步。后悬、RES、主控盒在原图中未标出接入点,独立显示;连线表示原图的示意顺序,不能据此推断具体断点。
d0~d15 为全局变量,任何页面均可更新,切页保留,断电重置。debug 后初始化立即绘制状态,tm0 每 250 ms 刷新;离开 debug 后定时器停止,但全局变量仍可接收更新。
通讯断线不会自动恢复未知。主控或通讯管理层应在数据超时后将相应 dN 清为 0;建议仅发送变化项,并按项目周期补发完整状态。旧的 debug.tN.txt/pco 赋值会被定时器覆盖,接手代码应改为 dN=V。
---
# 5. 任务选择回传
方向:屏幕 → 主控。用户点击主页面左侧按钮后进入 CONFIRM,显示所选任务。点击“确认发送”输出下表帧并返回 dash;点击“取消返回”不输出任务帧。
| 编号 NN | 任务 | 完整帧(十六进制) |
| --- | --- | --- |
| 01 | 八字绕环 | AA 55 01 01 0D 0A |
| 02 | 直线加速 | AA 55 01 02 0D 0A |
| 03 | 高速循迹 | AA 55 01 03 0D 0A |
| 04 | 车检测试 | AA 55 01 04 0D 0A |
| 05 | EBS 测试 | AA 55 01 05 0D 0A |
| 06 | 手动驾驶 | AA 55 01 06 0D 0A |
| 偏移 | 字节 | 含义 |
| --- | --- | --- |
| 0~1 | AA 55 | 帧头 |
| 2 | 01 | 任务选择消息类型 |
| 3 | 01~06 | 任务编号,单字节二进制 |
| 4~5 | 0D 0A | 固定帧尾 |
## 主控接收与处理
按连续字节流解析,不能假定一次 UART/DMA 回调正好收到一帧。维护接收缓冲,搜索 AA 55,等待至少 6 字节,检查类型=01、编号=1~6、帧尾=0D 0A。合法则交给任务状态机并消费 6 字节;非法则丢弃首字节重新搜索。
当前帧没有长度字段、序列号、校验和或 CRC;屏幕也没有 ACK 等待、自动重发机制。主控自行决定忙碌时如何处理新任务和重复请求。确认发送后,仪表仅把“当前任务”更新为用户选择,不证明主控已接受或车辆正在执行。
## 上电与其他返回帧
Program.s 上电通过 printh 发出 00 00 00 FF FF FF 88 FF FF FF。该启动数据不是任务指令。屏幕还可能输出官方错误、查询结果等返回数据,接收层要与任务帧区分。
联调可发送 bkcmd=3(同样加 FF FF FF)打开成功/失败反馈。官方执行成功码为 01 FF FF FF,变量名称无效为 1A FF FF FF。反馈是屏幕执行文本指令的结果,不是任务执行 ACK。当前工程未主动设置 bkcmd,不应以“没有成功返回”判断命令失败。
---
# 6. 主页面与页面切换
主页面数字控件已设为全局,可通过带页面名的属性指令跨页更新。它们是整数显示控件,没有约定浮点缩放。不要直接发送小数值。
| 显示项 | 赋值命令示例 | 说明 |
| --- | --- | --- |
| 当前车速 | dash.speed.val=30 | 界面标注 km/h;示例显示 30 |
| 高压电压 | dash.ts.val=300 | 示例为显示值;电气单位需与主控统一 |
| 扭矩千分 | dash.mct.val=500 | 保留界面“扭矩千分”定义 |
| 高压电流 | dash.dl.val=20 | 示例为显示值 |
| 电机温度 | dash.djwd.val=45 | 示例为显示值 |
| MCU 温度 | dash.mcuwd.val=40 | 示例为显示值 |
| 最高单体 | dash.dtwd.val=50 | 含义/单位待主控确认,不能仅按控件名猜测 |
数值 val 按有符号 32 位整数使用。电压、电流、温度及“最高单体”的单位、有效范围、无效值和缩放未形成主控协议;本版只确认控件名及整数赋值方式。联调前应由接手者补齐这些定义。
## 页面指令
```text
page dash
page debug
```
每条后加 FF FF FF。页面 ID:dash=0、debug=1、CONFIRM=2。优先用页面名,不依赖页面顺序。CONFIRM 应由六个任务按钮进入,避免未设置 pending_task 时直接进入。
隐藏入口:dash 右上角 x=440,y=0,w=40,h=25;debug 右上角“返回”切回 dash。调试页状态是显示功能,不输出 ECU/继电器动作指令。
## 其他文本与安全动作
dash 的 sd(锁定显示)、EBS 文本为私有控件;只在 dash 当前显示时用 sd.txt="已锁定" 或 EBS.txt="EBS 正常" 更新,中文需 GB2312。切页后会恢复设计初值。debug 的 d8 不会自动驱动主页面 EBS 文本。
按用户提供的状态表:EBS 舵机、电磁阀、气压、油压检测故障时的 VCU 通知、EBS 灯供地及 ECUBACK 断开,由主控实现;无人驾驶 INS/WSS/Camera 故障的 VCU 通知与 ECUBACK 断开也由主控实现,其 EBS 灯逻辑与前四项不同。屏幕工程不包含这些安全输出,也不把检测电平自动解释为正常/故障。
---
# 7. 主控发送参考与验收
以下 C 示例一次提交整条消息,防止命令与结束符被交错。UART_SendBytes 是待接入的驱动接口;必须在返回前完成发送或复制数据,异步 DMA 不能继续引用函数栈缓冲。
```text
#include <stdint.h>
#include <stddef.h>
#include <stdio.h>
extern void UART_SendBytes(const uint8_t *data, size_t len);
int ami_set_debug(unsigned id, unsigned state)
{
uint8_t buf[24];
if (id > 15 || state > 2) return -1;
int n = snprintf((char *)buf, sizeof buf,
"d%u=%u", id, state);
if (n < 0 || (size_t)n > sizeof buf - 4) return -1;
buf[n++] = 0xFF;
buf[n++] = 0xFF;
buf[n++] = 0xFF;
UART_SendBytes(buf, (size_t)n);
return 0;
}
```
## 联调验收顺序
① 下载配套 AMI.HMI 编译生成的屏幕资源;将 UART 参数、电平和接线与实际型号核对。② 在 dash 页面发送 d0=1、d1=2,打开隐藏入口,应见配电箱绿正常、左急停和行程/惯性同时红故障。③ debug 内发送 d0=2、d1=1,应在约 250 ms 刷新周期内变色;发送 d0=0 应恢复灰未知。
④ 离开再进入 debug,状态应保留;断电重启应全为未知。⑤ 六个任务逐项确认并记录实际收到的 6 字节帧;逐项取消应无新增任务帧。⑥ 主控接收测试覆盖拆帧、粘帧、启动数据及非法编号。⑦ 单独验证安全逻辑,不能以仪表显示替代主控/执行器测试。
## 已完成与待验证
已完成:USART HMI 编译 0 错误、0 警告;模拟器验证跨页数值更新、正常/故障/未知转换,以及 d1 双位置同步。六个任务回传此前已做模拟检查。待完成:实际屏幕下载、UART 收发、触摸行为、数据时序和车辆安全动作。C 示例仅为驱动接入参考,本次未在目标主控工程中编译。
## 8. 工程版本与资料
配套 AMI.HMI 的 SHA-256:
4b7986154d6f0a7a4226ee4591373f39f9ed70af5a6c81ee9380c6e9f72c0ada
旧版工程不能与本版 dN 接口混用。配套文件包括 AMI.HMI、PDF、通讯交接文档.md 和 ami_debug_send.c;其中 Markdown 为可编辑文字源,C 文件为参考发送函数。仓库中的实际位置见 README。
官方协议依据:wiki.tjc1688.com/commands/index.html;wiki.tjc1688.com/return/index.html;wiki.tjc1688.com/variables/bkcmd.html。项目自定义任务帧和 dN 编号以本文及配套工程为准。