串口数据解析

串口数据解析,第1张

想山寨还是想逆向啊,呵呵。串口数据分析,一般的数据帧:帧头,芹御带帧长度,数据体,校验(可嫌芦能不存在),帧尾(可能不存在)。帧头很多是0x02,或ASCII中的“:”,帧尾很多是0x03或0x0d0x0a(回车换行),校验方式一般有数据域累加拆顷,异或,计算CRC等,数据体就千奇百怪了,如果能看懂就看看,如果是加过密的,那你还是放弃吧

通俗的说就是符合某通讯协议的一组二进制串或字符串。

有些有包头及包尾,如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,你就明白了,但你要做好克服困难的心理准备先。

全手工录入,满意请采纳。谢谢。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12547882.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存