LabVIEW串口通信中的数据提取
时间:10-02
整理:3721RD
点击:
首先说一句,此贴主要针对DIY下位机,并使用串口传输数据的应用,当然,使用其他通信方式的也可以参考。
在DIY各种小玩意儿的时候,通常情况下会考虑将数据传输进电脑进行处理(eg:智能小车采集到的跑道信息、各种分布式传感器的状态信息等)。但是MCU的串口传输的数据通常情况下都是十六进制字符串格式,上位机接收到之后需要将各种信息分离提取之后才能根据数据进行相应的操作。在数据比较单一,并且传输速率较慢的时候,可以不考虑串口通信数据错位及丢包的问题,直接将接收到的数据进行处理即可,但是当数据量比较大,并且传输速率较高的时候,串口传输的丢包现象就比较明显导致的结果就是数据错位,无法正确获得想要的信息。
例如:发送的数据为“A1E5 6E03 80A1 E56E 0780”(这组数据时前几天一网友给的这里借用一下^_^),可能出现下图所示的情况。
这时后续提取数据时就会出现由于数据位不对而产生的各种问题。一种简单有效的方法是给要传输的数据加上校验用的头和尾,如“AABB A1E5 6E03 80A1 E56E 0780 CCDD”,其中AABB CCDD就是主动加进去的头和尾,其本身并不包含任何意义,只是用来提取数据位,上位机接收到之后,直接匹配AABB和CCDD,二者之间的数据就是有效数据,另外为了防止出现数据丢包,可以强制校验二者之间的间隔,当二者之间的数据长度与设定传输的数据长度一致时才认为数据有效。
下图所示,这里现将字符串转换成了字节数组,图中AA对应170,BB对应187,CC对应204,DD对应221,按照上面的方法,匹配数组中的170、187、204、221之后,校验187及204之间的数组长度确定为10才认为数据有效,并进而将对应数组元素做相应处理。
在DIY各种小玩意儿的时候,通常情况下会考虑将数据传输进电脑进行处理(eg:智能小车采集到的跑道信息、各种分布式传感器的状态信息等)。但是MCU的串口传输的数据通常情况下都是十六进制字符串格式,上位机接收到之后需要将各种信息分离提取之后才能根据数据进行相应的操作。在数据比较单一,并且传输速率较慢的时候,可以不考虑串口通信数据错位及丢包的问题,直接将接收到的数据进行处理即可,但是当数据量比较大,并且传输速率较高的时候,串口传输的丢包现象就比较明显导致的结果就是数据错位,无法正确获得想要的信息。
例如:发送的数据为“A1E5 6E03 80A1 E56E 0780”(这组数据时前几天一网友给的这里借用一下^_^),可能出现下图所示的情况。
这时后续提取数据时就会出现由于数据位不对而产生的各种问题。一种简单有效的方法是给要传输的数据加上校验用的头和尾,如“AABB A1E5 6E03 80A1 E56E 0780 CCDD”,其中AABB CCDD就是主动加进去的头和尾,其本身并不包含任何意义,只是用来提取数据位,上位机接收到之后,直接匹配AABB和CCDD,二者之间的数据就是有效数据,另外为了防止出现数据丢包,可以强制校验二者之间的间隔,当二者之间的数据长度与设定传输的数据长度一致时才认为数据有效。
下图所示,这里现将字符串转换成了字节数组,图中AA对应170,BB对应187,CC对应204,DD对应221,按照上面的方法,匹配数组中的170、187、204、221之后,校验187及204之间的数组长度确定为10才认为数据有效,并进而将对应数组元素做相应处理。
支持原创,感谢分享
希望有用,谢谢分享!
这主要是对新手写的,好多人在使用串口的时候并不注意,有时候出了错还不知道哪里错了^_^
留个名,以后来看,感谢小编的努力!
真是个好办法,过几天就会用到。多谢小编,
很好的经验,学习了。谢谢小编分享。
谢谢小编分享。
学习一下
很好的经验,学习一下,谢谢分享
谢谢小编分享啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
谢谢提供.学习!
希望小编能进一步讲解,处理好接收数据,怎么根据接收数据发送数据
希望小编能进一步讲解,处理好接收数据,怎么根据接收数据发送数据
在数据的前后位加入检验码,值得借鉴
希望有用
谢谢分享!
免费共享了嘛,大家交流学习下啊
谢谢小编分享啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
谢谢分享,再做数据接收时,很多时候会忽略丢包
谢谢分享
谢谢分享
可以把LABVIEW的程序发上来看下吗?
学习一下,虽然暂时用不到