3.2 KiB
3.2 KiB
好的!为了方便你开发上位机,我为你整理了一份详细的物流小车 TCP 通信协议文档。这份文档完全基于我们目前代码中的逻辑实现。
🚚 物流小车 TCP 通信协议文档 (v1.2)
1. 协议基础格式
所有数据包(上行和下行)均采用以下固定包装结构:
LOGI:<PAYLOAD>:<CS>#
LOGI:: 固定帧头。<PAYLOAD>: 有效载荷文本。:: 有效载荷与校验位之间的分隔符。<CS>: 2字节 ASCII 十六进制校验和(CheckSum)。- 计算规则:从
L开始(下标0)累加到最后一个冒号:之前的所有字节。
- 计算规则:从
#: 固定帧尾。
2. 下行指令 (上位机 -> 小车)
| 指令前缀 | 示例 | 说明 |
|---|---|---|
| ST:RUN | LOGI:ST:RUN:3B# |
启动: 开始自动运输。必须先发 GS 设置目标站。 |
| ST:STOP | LOGI:ST:STOP:8C# |
停止: 立即停止所有电机,清除到站锁存。 |
| SP:xxx | LOGI:SP:050:D7# |
速度: 设置速度百分比 (000~100)。 |
| GS:xxx | LOGI:GS:001:CA# |
站点: 设置目标站点 (目前支持 001/002)。会清除到站锁存并响铃。 |
3. 上行遥测 (小车 -> 上位机)
3.1 周期状态报告 (下位机每 500ms 自动推送)
格式: LOGI:STAT:SP:速度,STA:站点,RUN:运行,DIS:距离,TRK:循迹:CS#
示例: LOGI:STAT:SP:050,STA:001,RUN:1,DIS:52.4,TRK:00100:B2#
| 字段 | 示例值 | 说明 |
|---|---|---|
| SP | 050 |
当前速度百分比 (0~100)。 |
| STA | 001 |
当前设置的目标站点编号。 |
| RUN | 1 |
运行状态 (1:运动中, 0:停止/待机)。 |
| DIS | 12.5 |
超声波测距 (单位: cm,保留1位小数)。 |
| TRK | 00100 |
5位循迹灯状态 (0: 未触发感应, 1: 感应到黑线)。从左到右对应 IR1-IR5。 |
3.2 指令执行反馈 (收到指令后立即回复)
格式: LOGI:FB:指令类型:状态值:CS#
示例: LOGI:FB:GS:1:A5# (代表站点设置成功)
| 字段 | 值意义 | 说明 |
|---|---|---|
| 指令类型 | ST / SP / GS |
对应上位机发来的指令头。 |
| 状态值 | 1 / 0 |
1: 执行成功;0: 失败(如未设站点就点运行等)。 |
4. 特殊业务逻辑说明 (供上位机逻辑参考)
-
到站锁死机制:
- 小车到达
STA对应的 RFID 站点后,会自动进入STOP状态并推送RUN:0。 - 此时直接发
ST:RUN会被拒绝(收到FB:ST:0反馈),蜂鸣器响两声。 - 解锁方式:必须重新发送
GS:xxx指令覆盖目标站点(即使设成同一个号也可以),然后再发ST:RUN。
- 小车到达
-
安全保护:
- 若上位机未发送过任何
GS指令,尝试发ST:RUN会触发失败反馈。
- 若上位机未发送过任何
-
校验和计算 Python 参考代码:
def calculate_cs(data_str): # 如 data_str 为 "LOGI:ST:RUN" return sum(data_str.encode('ascii')) & 0xFF
你可以直接复制到你的上位机开发笔记里。如需增加更多字段(如电池电压、电机电流等),我可以随时在底层代码里帮你补齐。