鸿信自动化 ST/C 语言模块 指令讲堂 资料下载 第 9 课
C 语言模块 · 第 9 课 大拿

通讯数据打包 / 解包

6 段 · 共 1:18 · 数字人讲师示范 · 完全免费

串口、总线通讯要把数据打包成帧、收到再解包。本课用 C 实现一组打包 / 解包函数,处理校验与字节序。

正在加载数字人讲师…
讲师模型较大(约 87MB),首次打开需要等待。加载完后数字人会自动开始讲解,这段时间可以先往下读讲稿。
已等待 0 秒
等待中… 在仿真器里打开

本课讲稿

1/6通讯要打包0:13

跟别的设备通讯,不能把数一甩就发,得按对方的格式打包成一帧。地址、功能码、数据各就各位,再加个校验。这活儿用位运算最顺手,C 写比梯形图清楚。

2/6三样原料0:13

先备齐三样:从站地址、功能码、要发的数据。C 里就是三个寄存器,HD0 放地址、HD1 放功能码、HD2 放数据。每拍都就绪,等通讯指令来取。

3/6拼报文头:移位和或0:13

报文头就是地址和功能码拼一块:地址挪到高八位,功能码占低八位。C 里地址左移八位,再按位或上功能码,一个十六位就出来了。移位加按位或,就是干这个的。

4/6校验和:相加取低十六位0:14

校验和最简单:地址加功能码,数据再分高低字节各加一遍,最后取低十六位。接收方照算一遍,对不上就知道传错了。这里是加法校验,换成 CRC 也一个套路。

5/6打包好交给通讯指令0:12

头和数据拼好、校验算好,就置个 rdy 位告诉外界:这帧能发了。真正的发送交给通讯指令,C 只管把料备齐。算和发分开,各司其职,互不越界。

6/6小结:打包四步0:13

打包就四步:地址功能码拼头,高低字节算校验,结果写回寄存器,置 rdy 位等发。核心是移位和加减——位运算加算术,C 写最省心。解包就是反过来。