首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB串口一次接收多帧数据有关问题

2012-02-09 
VB串口一次接收多帧数据问题上位机软件用VB编写,与下位机(单片机)通信,现在的问题是我想读取下位机所存的

VB串口一次接收多帧数据问题
上位机软件用VB编写,与下位机(单片机)通信,现在的问题是我想读取下位机所存的全部故障信息,先发一帧命令帧给下位机,下位机接受到该命令帧后,将其所存的全部故障信息逐帧逐帧发给PC,一帧数据表示一条故障,帧数据每一字节所表示的意义由通信协议规定,每两帧数据之间有一特定的时间间隔(1-2ms),我用的是mscomm控件,现在先请教:对接收过程怎么进行处理,我在接收完一帧数据后怎么编写代码等待接收下一帧数据,怎么保证接收全部数据(比如我判断超过两秒的时间串口都无数据可以认为数据接收完全),请大侠们给点思路,最好给出关键代码,谢谢帮忙!

[解决办法]
定长数据设置RTh值,可以在指定数量的字符到达时出发事件,在事件里将串口缓冲区里的数据再缓存起来。等到数据全部发送完毕,再对全部的数据进行处理。

非定长数据,将RTH设置为0,定时读取,将取得的全部数据保存进缓冲区,接受完后再行处理。

但是无论哪种方式,你下位机这么做是不合理的。应该提供读取单条记录的指令。因为只有这样才能在每条数据到达时,对数据进行处理和判断数据的合法性。否则每次发读取指令都是传输全部记录将很麻烦,有一种可能就是你永远也无法得到所有的正确数据,总是在中间的某个数据上出现问题。指令重发是很必要的,我在项目里就遇到过在工控机房里,由于数据线抗干扰不行导致数据错误的问题。
[解决办法]
首先你需确定通信协议,如果故障信息是需实时获取,那故障地址及故障内容可在上位机侧的数据库或其它文件保存.下位机可将故障状态确定为有故障为1,无故障为0.
假如16点位置故障与否,可组成2字节(BYTE数据类型).
即16进制表示为00 00到FF FF.
下位机返回整个故障状态组成的数据,最好返回数据为固定字节长度,这样有利于上位机的数据处理.且返回数据需有引导符和结束符及数据校验等.
上位机数据处理需对00 00到FF FF逐一解码对应相关故障点作出故障与否的判断和数据记录.

热点排行