lowermachine/protocol/下位机和上位机通信协议.md
Miaow fe7b3308bc refactor(pro): 升级了上位机和下位机的通信协议
1. 长度字段增加到4个字节表示
2. 去除了涉及喷阀等的无关描述和未使用的命令
3. 修改了设置相机触发对应的脉冲数的命令,使得能够适应更多的相机数量
4. 添加了下位机工作流程与通信有关的描述

BREAKING CHANGE: 需要修改上位机以及下位机的应用程序,否则不能通信
2023-05-05 17:01:58 +08:00

3.5 KiB
Raw Permalink Blame History

下位机和上位机通信协议 V1.4

工作在OSI5~7层单播TCP/IP。下位机控制阀为客户端上位机负责识别为服务端

  • 灵活利用类型字段实际值区分数据和指令
  • 安全高效的长度定义应对TCP/IP分粘包特性
  • 字符序列形式简洁直观,方便抓包调试

流程

下位机上电后40s完成启动初始处于停止状态。

要开始分选,下位机应处于停止状态,上位机先设置各个相机触发周期对应的编码器脉冲数,然后发送开始分选指令

收到开始分选指令后,下位机进入正在分选状态,依据编码器脉冲和设定,触发相机拍摄

上位机发送停止分选指令时,下位机应处于正在分选状态,下位机收到后停止读入编码器脉冲和触发相机,并进入停止状态。停止状态下下位机忽略收到的喷阀数据

格式

一包数据由8'haa打头8'hbb结束共6个字段

起始 长度1 长度2 长度3 长度4 类型1 类型2 数据1 数据2 ... 数据i 校验1 校验2 结束
8'haa 8'hzz 8'hzz 8'hzz 8'hzz 8'hzz 8'hzz 8'hzz 8'hzz ... 8'hzz 8'hff 8'hff 8'hbb

起始&结束

起始为1字节8'haa结束为1字节8'hbb

校验&长度

校验为2字节校验1为8'hff校验2为8'hff

长度为一个32位无符号数length长度 = 数据字节数i + 2
长度1指length[31:24]长度2指length[23:16]长度3指length[15:8]长度4指length[7:0]

类型&数据

类型为ASCII字符序列比如类型1为's'类型2为't'代表开始分选命令
数据为ASCII字符序列或原始数据

开始分选指令
类型1为's'类型2为't'length为3数据1固定为8'hff具体如下

起始 长度1 长度2 长度3 长度4 类型1 类型2 数据1 校验1 校验2 结束
8'haa 8'd0 8'd0 8'd0 8'd3 's' 't' 8'hff 8'hff 8'hff 8'hbb

停止分选指令
类型1为's'类型2为'p'length为3数据固定为8'hff具体如下

起始 长度1 长度2 长度3 长度4 类型1 类型2 数据1 校验1 校验2 结束
8'haa 8'd0 8'd0 8'd0 8'd3 's' 'p' 8'hff 8'hff 8'hff 8'hbb

设置相机触发周期对应的编码器脉冲数
对于相机a类型1为'p'类型2为'a'length为10数据为十进制的ASCII字符序列不足补'0',比如'0''0''0''0''0''2''3''1'表示每231个编码器脉冲触发一次相机

起始 长度1 长度2 长度3 长度4 类型1 类型2 数据1 ... 数据7 数据8 校验1 校验2 结束
8'haa 8'd0 8'd0 8'd0 8'd10 'p' 'a' '0' ... '3' '1' 8'hff 8'hff 8'hbb

对于相机b类型1为'p'类型2为'b'其余字节含义和用法与相机a一致

对于相机c类型1为'p'类型2为'c'其余字节含义和用法与相机a一致

对于相机d类型1为'p'类型2为'd'其余字节含义和用法与相机a一致