多站远程无线控制信号系统通信软件的开发
(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
Dim byindata(11) As Byte
Dim I% buf$
′根据事件分发处理
Do While frmMSCommDemo.MSComm1.CommEvent = 2
Exit Do
Loop
Timedelay 850 ′适当延时
byin = frmMSCommDemo.MSComm1.Input
′接收串行端口内的数据至动态数组中
dend = UBound(byin) ′得到最大值
start = LBound(byin) ′得到最小值
If dend < 5 Then
MsgBox RadarNoOut & “信号源出现系统
故障,请求检修!” vbOKOnly
Exit Sub
End If
′接收串行端口内的数据至动态数组中
′ReDim Preserve byin(11) As Byte
If byindata(0) = &H55 And byindata(1) = &HAA
Then ′包头正确,接收到包头进行数据处理
.
.
.
End sub
′延时程序
Sub Timedelay(TT As Long)
Dim t As Long ′声明一个长整数,记录计数值
t = GetTickCount() ′取得系统计数值
Do ′开始循环
DoEvents
If GetTickCount - t < 0 Then t = GetTick-Count ′归零
Loop Until GetTickCount - t >= TT ′计算延迟是否到达
End Sub
4 结论
根据本系统的研制经验,利用MSCOMM控件开发无线通信要把握好以下三条:
(1) 收发之间应延时适当,这需要在测试中不断地调试,以达到最佳效果。
(2) 选用好的且必须具有纠错功能的无线数传模块,否则将达不到理想的效果。
(3) 设定一个合理的通信协议,使中心站与子站有良好的沟通。实际测验证明,本系统在WIN98中运行稳定,在实验过程中取得了良好的效果。