无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

關(guān)于PID閉環(huán)控制中上位機(jī)與下位機(jī)通訊代碼的解析分享(三)

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


?

現(xiàn)在我們來看看一個用于解析下位機(jī)數(shù)據(jù)幀的函數(shù)代碼

protocol_frame_parse?是一個靜態(tài)函數(shù),用于解析下位機(jī)數(shù)據(jù)幀的類型(命令)。

*data?是一個指向幀數(shù)據(jù)的指針,data_len?是幀數(shù)據(jù)的大小。

frame_type?用于存儲幀類型的變量。

need_to_parse_len?是待解析的數(shù)據(jù)長度。

header_oft?存儲幀頭的偏移量。

checksum?用于計算校驗和的變量。

在函數(shù)的開頭,通過調(diào)用recvbuf_get_len_to_parse函數(shù)獲取待解析的數(shù)據(jù)長度,如果長度小于9(無法同時找到幀頭和幀長度),則直接返回frame_type。

如果還未找到幀頭,則需要進(jìn)行查找。調(diào)用recvbuf_find_header函數(shù)來查找?guī)^的偏移量header_oft。如果找到幀頭,則將parser.found_frame_head置為1,更新parser.r_oft的值為幀頭偏移量,然后再次根據(jù)新的起始位置調(diào)用recvbuf_get_len_to_parse函數(shù)來確認(rèn)是否可以計算幀長。如果不能計算幀長,則直接返回frame_type。如果在未解析的數(shù)據(jù)中仍未找到幀頭,則丟棄已解析過的數(shù)據(jù),更新parser.r_oft的值。

計算幀長,并確定是否可以進(jìn)行數(shù)據(jù)解析。如果parser.frame_len為0,則調(diào)用get_frame_len函數(shù)計算幀長。如果待解析的數(shù)據(jù)長度小于幀長,則直接返回frame_type。

計算幀長,并確定是否可以進(jìn)行數(shù)據(jù)解析。如果parser.frame_len為0,則調(diào)用get_frame_len函數(shù)計算幀長。如果待解析的數(shù)據(jù)長度小于幀長,則直接返回frame_type

在幀頭位置確認(rèn)且未解析的數(shù)據(jù)超過幀長時,可以計算校驗和。如果數(shù)據(jù)被分為兩部分,即一部分在緩沖區(qū)尾部,一部分在緩沖區(qū)頭部,則需要分別計算兩部分的校驗和。如果數(shù)據(jù)幀可以一次性取完,則直接計算校驗和。

以下是相對應(yīng)的上位機(jī)C#數(shù)據(jù)編碼程序



關(guān)于PID閉環(huán)控制中上位機(jī)與下位機(jī)通訊代碼的解析分享(三)的評論 (共 條)

分享到微博請遵守國家法律
伊吾县| 江阴市| 武定县| 上饶县| 鲁甸县| 阿克陶县| 浑源县| 新丰县| 万山特区| 扶风县| 昂仁县| 尼木县| 弥勒县| 德兴市| 县级市| 云阳县| 灵台县| 浪卡子县| 彭水| 神木县| 平山县| 科尔| 丽江市| 乌鲁木齐市| 浑源县| 盐城市| 涞源县| 镇巴县| 玛沁县| 潼南县| 琼中| 乌鲁木齐县| 凯里市| 攀枝花市| 桐柏县| 本溪市| 旬邑县| 巫山县| 昌乐县| 平安县| 蒙山县|