欢迎光临散文网 会员登陆 & 注册

关于PID闭环控制中上位机与下位机通讯代码的解析分享(三)

2023-07-06 13:42 作者:老-_-白  | 我要投稿


 

现在我们来看看一个用于解析下位机数据帧的函数代码

protocol_frame_parse 是一个静态函数,用于解析下位机数据帧的类型(命令)。

*data 是一个指向帧数据的指针,data_len 是帧数据的大小。

frame_type 用于存储帧类型的变量。

need_to_parse_len 是待解析的数据长度。

header_oft 存储帧头的偏移量。

checksum 用于计算校验和的变量。

在函数的开头,通过调用recvbuf_get_len_to_parse函数获取待解析的数据长度,如果长度小于9(无法同时找到帧头和帧长度),则直接返回frame_type

如果还未找到帧头,则需要进行查找。调用recvbuf_find_header函数来查找帧头的偏移量header_oft。如果找到帧头,则将parser.found_frame_head置为1,更新parser.r_oft的值为帧头偏移量,然后再次根据新的起始位置调用recvbuf_get_len_to_parse函数来确认是否可以计算帧长。如果不能计算帧长,则直接返回frame_type。如果在未解析的数据中仍未找到帧头,则丢弃已解析过的数据,更新parser.r_oft的值。

计算帧长,并确定是否可以进行数据解析。如果parser.frame_len为0,则调用get_frame_len函数计算帧长。如果待解析的数据长度小于帧长,则直接返回frame_type

计算帧长,并确定是否可以进行数据解析。如果parser.frame_len为0,则调用get_frame_len函数计算帧长。如果待解析的数据长度小于帧长,则直接返回frame_type

在帧头位置确认且未解析的数据超过帧长时,可以计算校验和。如果数据被分为两部分,即一部分在缓冲区尾部,一部分在缓冲区头部,则需要分别计算两部分的校验和。如果数据帧可以一次性取完,则直接计算校验和。

以下是相对应的上位机C#数据编码程序



关于PID闭环控制中上位机与下位机通讯代码的解析分享(三)的评论 (共 条)

分享到微博请遵守国家法律