看看下面的例子吧:窗体各控件初始化程序 设置通信串口工作参数,设置periodic定时器的在断间隔为ls, nonperiodic定时器的中断间隔为0.5s。 sub form-load () mscomm1.commport=2 ’选用com2串行口 mscomm1.settings="9600,n8,1" ’波特率9600,无奇偶校验位,8位数据位1位停止位 mscomm1.inputlen=0 ’input将读取接收缓冲区的全部内容 mscomm1.inbuffersize=1024 ’设置接收缓冲区的字节长度 mscomm1.portopen=true ’打开通信口 mscomm1.inbuffercount=0 ’清除发送缓冲区数据 mscomm1.outbuffercount=0 ’清除接收缓冲区数据 periodic.inteval=100 ’设置ls定时间隔,使遥测命令每隔ls发送1次 nonperiodic.inteval=500 ’设置0.5s定时间隔,查询命令按钮是否处于激活状态以确定是否发送周期性命令 command-pressed=false ’命令按钮为未激活状态 during- periodic=false ’周期性命令数据传输尚未开始 during- nonperiodic=false ’非周期性命令数据传输尚未开始 end sub 2.2 非周期性命令发送程序 根据命令按钮状态及周期性命令数据传输状态,在nonperiodic定时器的中断程序中发送非周期性命令。 sub nonperiodic-command-click () command-pressed=true ’命令按钮激活 end sub sub nonperiodic-timer () if during- periodic=true or command-pressed=false then exit sub ’若周期性命令数据传输尚未结束或命令按钮处于激活状态,则退出发送非周期性命令程序。 command-pressed=false ’命令按钮恢复为未激活状态 call senddata (nonperiodic-command) ’发送非周期性命令 mscomm1.rthreshold=r-nonperiodic-byte ’发送非周期性命令后,设置rthreshold属性,使主站接收所设定的字节数后引发oncomm事件 end sub 2.3 periodic定时器程序 在periodic定时器的中断程序中发送周期性命令: sub periodic-timer () if during- nonperiodic=true then exit sub ’若非周期性命令数据传输尚未结束,则退出发送非周期性命令程序。 during-periodic=true ’设置周期性命令数据传输状态为正在进行中 call senddata (periodic-command) ’发送周期性命令 mscomm1.rthreshold=r-periodic-byte ’发送周期性命令后,主站接收r-remot- edata-byte个字节,可引发oncomm 事件 end sub
oncomm事件程序 根据rthreshold属性设置值,当接收缓存区内接收到相应字节的字符时,引发oncomm事件,在中断程序中接收数据。 sub mscomm1-oncomm () select case mscomm1.commevent ’在此可插入处理各种不同错误或事件的代码 case mscomm-ev-receive receivestring$=mscomm1.input select case mscomm1.rthreshold case r-periodic-byte ’周期性命令的应答数据 call disposedata(periodic-command) ’处理接收数据 during periodic=false ’设置周期性命令数据传输状态为结束 case r-nonperiodic-byte ’非周期性命令的应答数据 call disposedata(nonperiodic-command) ’处理接收数据 during-nonperiodic=false ’设置非周期性命令数据传输状态为结束 end select end select end sub
sub nonperiodic-command-click () command-pressed=true ’命令按钮激活 end sub sub nonperiodic-timer () if during- periodic=true or command-pressed=false
then exit sub ’若周期性命令数据传输尚未结束或命令按钮处于激活状态,则退出发送非周期性命令程序。 command-pressed=false ’命令按钮恢复为未激活状态 call senddata (nonperiodic-command) ’发送非周期性命令 mscomm1.rthreshold=r-nonperiodic-byte ’发送非周期性命令后,设置rthreshold属性,使主站接收所设定的字节数后引发oncomm事件 end sub
2.3 periodic定时器程序 在periodic定时器的中断程序中发送周期性命令:
sub periodic-timer () if during- nonperiodic=true then exit sub ’若非周期性命令数据传输尚未结束,则退出发送非周期性命令程序。 during-periodic=true ’设置周期性命令数据传输状态为正在进行中 call senddata (periodic-command) ’发送周期性命令 mscomm1.rthreshold=r-periodic-byte ’发送周期性命令后,主站接收r-remot- edata-byte个字节,可引发oncomm 事件
end sub
oncomm事件程序 根据rthreshold属性设置值,当接收缓存区内接收到相应字节的字符时,引发oncomm事件,在中断程序中接收数据。 sub mscomm1-oncomm () select case mscomm1.commevent ’在此可插入处理各种不同错误或事件的代码 case mscomm-ev-receive receivestring$=mscomm1.input select case mscomm1.rthreshold case r-periodic-byte ’周期性命令的应答数据 call disposedata(periodic-command) ’处理接收数据 during periodic=false ’设置周期性命令数据传输状态为结束 case r-nonperiodic-byte ’非周期性命令的应答数据 call disposedata(nonperiodic-command) ’处理接收数据 during-nonperiodic=false ’设置非周期性命令数据传输状态为结束 end select end select end sub