新型交互式射擊游藝控制系統(tǒng)設(shè)計與實現(xiàn)
創(chuàng)建服務(wù)器應(yīng)用程序時,就應(yīng)相應(yīng)設(shè)置一個偵聽端口(LocalPort屬性)并調(diào)用Listen方法。當(dāng)客戶機(jī)需要連接時(connect),就會發(fā)生ConnectionRequest事件。由于系統(tǒng)有多個客戶端,因此要動態(tài)管理客戶端的各個連接請求,參考如下程序設(shè)計:
Private sub sckserver_connectrequest(Index as Integer,Byval requestid as long)
dim sip as string
dim I as integer
sip=sckserver(0).RemoteHostIP '獲得登錄者的IP地址
I=1
Do while I<=sckserver.ubound '檢查是否已經(jīng)有該地址的記錄
If sckserver(I).RemoteHostIP=sip then '如有,不必加載新的控件
Sckserver(I).Accept requestid
Exit sub
End if
I=I+1
Loop
Load sckserver(I) '否則,加載新的控件
Scksrver(I).accept requestID
End sub
為了完成連接,在ConnectionRequest事件中調(diào)用Accept方法。建立連接后,任何一方計算機(jī)都可以發(fā)送、接收對方數(shù)據(jù)。發(fā)送數(shù)據(jù)時,需調(diào)用SendData方法。當(dāng)接收到數(shù)據(jù)時,會發(fā)生DataArrival事件,調(diào)用DataArrival事件中的GetData方法就可以獲得對方傳送的數(shù)據(jù)。
基于MSComm的串口通信程序設(shè)計
MSComm通信控件提供了一系列標(biāo)準(zhǔn)通信命令的接口,它允許建立串口連接,可以連接到其他通信設(shè)備、還可以發(fā)送命令、進(jìn)行數(shù)據(jù)交換以及監(jiān)視和響應(yīng)在通信過程中可能發(fā)生的各種錯誤和事件,從而可以用它創(chuàng)建全雙工的、事件驅(qū)動的、高效實用的通信程序。
在程序加載過程中,由于可能存在無線和CAN兩種通信方式,所以在Form_Load事件中要進(jìn)行初始化處理,參考以下程序:
‘CAN總線主控制器初始化程序
For i = 0 To Comm_Port_Num - 1
If CommSetups(i).commType = "CAN" Then
MSComm1.CommPort =CInt(Mid(Trim(CommSetups(i).commID), 4))
If MSComm1.PortOpen Then MSComm1.PortOpen = False
MSComm1.Settings = Trim(CommSetups(i).commSetting)
MSComm1.PortOpen = True '打開串行口
Text1.Text = "CAN通信端口初始化成功" & vbCrLf
Exit For
End If
Next i
‘nRF905射頻主控制器初始化程序
For i = 0 To Comm_Port_Num - 1
If CommSetups(i).commType = "COM" Then
MSComm1.CommPort =CInt(Mid(Trim(CommSetups(i).commID), 4))
If MSComm1.PortOpen Then MSComm1.PortOpen = False
MSComm1.Settings = Trim(CommSetups(i).commSetting)
MSComm1.PortOpen = True '打開串行口
Text1.Text = "nRF905端口初始化成功" & vbCrLf
Exit For
End If
Next i
在數(shù)據(jù)接收過程中,MSComm提供了兩種處理通信問題的方法,一是事件驅(qū)動方法,一是查詢法。本系統(tǒng)采用事件驅(qū)動方法,當(dāng)有新字符到達(dá)或端口狀態(tài)改變,或發(fā)生錯誤時,MSComm控件將觸發(fā)OnComm事件,而應(yīng)用程序在捕獲該事件后,通過檢查MSComm控件的CommEvent屬性可以獲知所發(fā)生的事件或錯誤,從而采取相應(yīng)的操作。
評論