社区导航

 

搜索
查看: 115|回复: 0
打印 上一主题 下一主题

[原创] PC串口连续数据帧接收方法

[复制链接]

543

TA的帖子

21

TA的资源

版主

Rank: 6Rank: 6

跳转到指定楼层
楼主
发表于 2019-11-30 22:15 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
本帖最后由 lb8820265 于 2019-11-30 22:15 编辑

本次分享内容比较硬核,只有在使用串口做高速数据通信时候才会遇到。

串口可以说是目前最常用通信方式,双方约定好波特率,只需要一根线就能够传输数据,极大的简化了接线。串口传输的方式为一个字节一个字节的发送,完整版的串口有流控引脚,可以用来判断是否发送完成。但是简版的串口只有一根接收线或者发送线,也就没有无法知道串口是否发送一帧完成。

之前我用写过两篇通信协议的文章,采用自己定制的通信协议进行数据的传输。

串口示波器教程(5。1)串口传输协议制定(ASCII字符方式传输)

串口示波器教程(5。2)串口传输协议制定(RTU整数与浮点方式传输)

帖子里面介绍使用自己定义的协议,长时间间隔的传输一帧数据,例如每隔500ms发送一次数据,这样可以有效保障接收的数据为一帧或小于一帧,因为电脑有足够的时间来处理串口数据。但是如果想要一秒内传输更多的数据帧,就要减少一帧数据的间隔时间,那么就会面临许多问题,在PC中串口的数据的接收中断并不是理想的一个字节一个中断,而且就算设置了接收数量触发中断,也是不可靠的,这也许和Windows操作系统是非实时有关。

举个例子,一帧数据为100个字节,下位机连续或者短间隔连续发送,在PC上位机上无论设置为什么触发条件,每次触发接收都会有以下的几种情况出现。

  1. 接收到一帧数据(接到100字节,一帧数据)
  2. 接收到多帧数据(例如接到200字节,两帧数据)
  3. 接收到不到一帧数据(例如接收到50字节,半帧数据)
  4. 接收到一帧多数据(例如接收到150字节,一帧半数据)

每次接收到的数据字节数不定,这个就非常糟心了。但也不是没有办法,使用列队的知识再加上一些策略可以解决这个问题。一帧的协议有很多,比如通用的MavLink和Modbus,他们都有很多支持,方便扩展,这里自定义一帧的格式如下:

帧头

数据个数(指令+数据内容)

指令

数据内容(可无)

帧尾13 10

0xFE(254)

1~255

0~255

0~254个字节

0x0D 0x0A

  1. 帧头(一个字节),帧头的作用是方便从一大堆数据中找到有用数据帧的开始,一般是一个出现较少的数这里选择0xFE(254),
  2. 数据个数(一个字节),数据个数的作用是告诉接收方,我接下来会发送这么多有效数据,由于一个字节能表示的最大的数是255,所以该部分的取值范围是1~255。
  3. 指令(一个字节),指令的作用是告诉接收方我接下来的数据是什么内容或者一些控制信息,可以取的范围是0~255.
  4. 数据内容(0到254字节),该部分是实际的数据内容,根据前面“字节个数”该部分可以有0~254个字节
  5. 帧尾(两个字节),帧尾的作用是告诉接收方,一帧的数据传输完毕,同时也可以用于校验,帧头到帧尾的数据个数要等于“数据个数”中的值,否者是无效数据。

    为了更好的描述该方法,这里用图示介绍,如下图。

图中左边的是有用数据接收的列队,表示一帧数据,用RX_Data_Final来表示,右边是接收回调函数中的接受列队,用RX_Data来表示。P_1表示指针在有用列队的位置,End_1表示该有用列队应该的结束位置,通常通信协议里面的数据个数可以推出End_1的大小。P_2表示指针指在接收列队的位置,End_2表示接收列队的结束的位置,通常接收的数据个数就是等于End_2。

大体思路就是,首先搜帧头,搜到后一边复制数据到有用列队一边搜索帧尾,搜索到帧尾后判断个数是否满足。如果满足就将说明一帧数据接收完毕,进行数据处理,然后接着搜索帧头,在MATLAB的APP Designer中的代码如下。

    该代码可以完美的解决前面所说的四种情况,当然也不排除,一堆乱码中也会出现符合协议的情况看,不过这个概率非常小,帧头,帧尾,和数据个数,一共4个字节都要满足,每个字节都有256中可能性,也就是出现这种情况的概率为256的4次方分之一,可以忽略不计了。

有关APP Designer制作串口的教程,请参考我的帖子:MATLAB APP Designer串口调试工具编写

此内容由EEWORLD论坛网友lb8820265原创,如需转载或用于商业用途需征得作者同意并注明出处

QQ:252669569


您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /7 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( )

GMT+8, 2019-12-1 21:52 , Processed in 0。079275 second(s), 17 queries , Gzip On, MemCache On。

快速回复 返回顶部 返回列表
博乐彩票计划群 快乐赛车免费计划软件 快乐飞艇如何看走势选号 快乐赛车是哪个国家的 快乐赛车app下载 河北快3基本走势 PC蛋蛋机器人 快乐赛车怎么看走势图 贵州快3 快乐赛车直播开奖视频