多站远程无线控制信号系统通信软件的开发
由于在通讯中,RTS电平可置高或置低,如果用事件驱动,计算机就会进入中断,资源就没有有效利用,所以在程序中添加了一个接收函数。为了保证程序的可靠性和灵活性,可以运用设置身份码等方法来保证各个子站互不干扰,具体实现过程的主程序流程图如图2所示。
除以上处理外,还可以使用以下方法来增加系统的可靠性、灵活性和效率。
(1)设置身份码和目的地址
每个数传模块均有表示其唯一身份的身份码,身份码长为两个字节共十六位。第一字节表示组码,第二字节表示组内识别码,身份码可用D7H?F5H?XXH?YYH设置,可设置于模块内的EEROM中,掉电后不丢失。在数据传送前,应设置目的地址,以便确定由哪个来接收数据。采用此方法可以有效地防止干扰。
(2)使用动态数组
接收字节数据时,必须使用动态数组。一个动态数组被声明后,可以利用Input属性将串行端口输入缓冲区内的数据指定到该动态数组中。被接收到的数据的实际大小必须利用Lbound及Ubound才能取得最大及最小索引值,同时也只有这样,才能利用程序将内部的值一一显示出来。另外,利用最大和最小索引值还可以判断是否为一次成功接收。
(3)最优化TimeDelay
在每次传输指令后,一定要等待一段时间才可能从串行端口的输入缓冲区中取得信号源传回的数据,这个时间有多久是项目的关键,太长了效率太低,太短了,数据有可能接收不全,所以有必要进行最佳化测试。具体代码如下:
Public Declare Function GetTickCount Lib ″ker-nel32″ ()?As Long
Dim Buf$
Dim T1&?T2&
Comm1.Output=Trim(Ucase(txtsend..Text)) & vbcr
T1=GetTickCount?()
Do
Buf=Buf & Comm1.Input
Loop Unitl Instr(1,Buf,vbCr)>0
T2=GetTickCount()
LblTime.Caption=CStr(T2-T1) & “ms”
该程序中使用GetTickCount来取得系统自开机后每千分之一秒更新的Tick值,在接收的前后加上取Tick值的叙述,自然就可以得到传输的时间了。从测试的结果来看,传输单个数据的时间为100ms,10个群组的时间约为500ms。
(4) 增加程序的效率
利用下面的程序可在无线通讯受到干扰或对方设备电源没有打开等原因造成对方数据不能上传时,避免程序一直在等待。如果在规定时间内还没等到规定的字节数时就跳出循环,并出现一个重新发送对话框。此时如果还是不对,就弹出一个对话框“请检查系统!"。具体程序如下:
Public Sub ReceiveData()
′On Error Resume Next
Dim start, dend As Integer
Dim byin() As Byte
《多站远程无线控制信号系统通信软件的开发(第2页)》