有些有包头及包尾,如modbus ascii,冒号表示包头,回车(0xd)表示包尾,
某些没有包头及包尾,如modbus rtu,如果时间超过3.5个字符,表示新的一桢数据包。
数据包还真不好用c语言举例。
这样说吧,比如一桢数据包可以这样定义:
第一字节:从站地址+第二字节:指令类型(读还是写,bool,short还是float)+第三第四字节:地址+第五第六字节:crc校验。
可以有一个结构体昌态与之对应:
typedef struct _protocol
{
char cStationAddr
char cInst
short sAddr
short sCRC
}PRO
发送协议需要将结构体打包成串,接受到串后需要解包。
就这个例子而言,解包就比较容易了,如接收缓冲区为
char cBuff[MAX_BUF_LEN]
PRO thePro
那么,thePro.cStationAddr=cBuff[0]
同理,thePro.sAddr=(cBuff[2]<<8)|cBuff[3]//这句就不解释了哈,相信你能看懂。
当然,通讯协议可以自己定义,符合某通讯协议(如tcp/ip)可以直接跟其他机器通讯返迅档。
打个比方,通讯协议就是中文,英文,德文。。。,数据包就是某种语言的一句话,语种相同的人,互相说话,就是在传递数据包,你可以传“你好”或“hello”数据包漏乱。
所以建议楼主学习一下通讯协议,如modbus,你就明白了,但你要做好克服困难的心理准备先。
全手工录入,满意请采纳。谢谢。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)