# 下位机和上位机通信协议 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一致