在用VB6编写一个软件,这个软件调用了VB中的Mscomm控件,通过此控件不断接收到从单片机或者PLC等下位机串口传输过来的字符串信息。
这些信息格式为字符串形式,如“A1245ZA1243ZA1242ZA1241ZA1242Z……A0001Z”,其实就是每组有用的数据为4位,这个4位的数字用“A”和“Z”包裹起来,因为接收串口的数据是用无线传输的方式进行的,往往会产生数据的丢失,所以,这里就需要一个方法,怎么能让用VB编的这个程序实现这个功能:判断接收到的4位数字的前面有一个“A”,后面还有一个“Z”,那么这就是一个有效的数据,否则这个数据就是无效的,需要丢弃?
另外,Mscomm控件是用实时响应接收好还是调用Timer控件做定时的串口数据查询接收好呢?我试过了Mscomm的实时响应接收,在数据快速传送时,CPU占有率会达到100%!
希望大家的帮忙,谢谢~
如果每接收一个字符触发一次事件,那么以9600bps接收的话,每秒钟需要处理960个事件~怎么能让程序能够及时判断有“A”的到来,有“Z”的结束,这时就需要触发一个事件~否则就什么都不要干。如果“接收的字符是否为6个,不是则丢弃”这种判断字符多少的方法也好像不妥,假如我先只接到了“45ZA12”,而后面是一组“34ZA13”,那么这两组数据虽然单独判断都是错误数据,但是其实这两组数据组合,里面包含了一个正确的数组,就是“A1234Z”,怎样可以把它提出来?另外,无线传输目前采用的是只为单向传输的,即单工通信,一边只能收,一边只能发。 仪器也只有一套,上位机是负责接收和数据整理记录功能的。如果有好的思路或办法,请用代码的形式回答,如
Private Sub Timer1_Timer()
End Sub
如果以思路的办法来回答的话,估计你很难理解其中的困难的,因为我已经做了很多尝试,谢谢~
zdingyun的程序我试过了,还是不太好用呀,还有我忘了,接收的数据是如“A1245ZA1243ZA1242ZA1241ZA1242Z……A125Z……A1Z”的,即发送的数减小,位数也跟着减小。还有,真的别让我再用MSComm1_OnComm() 来触发啦,连续快速接收的时候真的会程序假死的! 附数据接收情况如: