在對組態王和VB的初始設置完成后,結合VB編寫的與智能儀表的通信程序,分別按照服務器和顧客運行應用程序,即可實現組態王與VB 的自動數據交換。
2. 2 VB與智能儀表的通信
本系統采用VB專業版的MSComm控件與VB模塊化編程相結合,實現了VB與智能儀表間的通信,主要程序模塊及部分程序如下:
① 程序初始化模塊。主要完成串口的選擇、波特率、幀結構設置、打開串口等串口的設置工作。
② 發送數據模塊。由手動發送控制命令字和自動發送控制命令字兩種方式,實現手動采集數據和自動采集數據。其中,自動發送數據方式包括一個定時器發送程序和一個定時器時間響應程序;定時器發送程序用來控制控制命令字的發送周期,定時器響應程序用來完成現場各智能化儀表地址的循環賦值及控制命令字的發送。
上述模塊中定時器響應程序的部分程序如下:
Private Sub Timer1 Timer
Timer1. Enabled = False
Text_SEND. Text = "" ∥清空發送文本框
MSComm. OutBufferCount = 0 ∥清除發送緩沖區數據
Dim OutByte (1 To 3) AsByte
IfNotMSComm. PortOpen Then ∥保證串口打開
MSComm. PortOpen = True
End If
'24臺積算儀循環數據采集
If k = 1 Then
OutByte (1) = &HCA
OutByte (2) = 0
OutByte (3) = 1
End If
If k = 2 Then
OutByte (1) = &HCA
OutByte (2) = 0
OutByte (3) = 2
End If
??
k = k + 1
If k > 24 Then
k = 1
End If
MSComm. InBufferCount = 0 ∥清除接收緩沖區數據
MSComm. OutBufferCount = 0 ∥清除發送緩沖區數據
MSComm. Output = OutByte
For j = 1 To 3
OutByte again ( j) = OutByte ( j)
Next
For i = 1 To 50000000
'延時Next
End Sub
③ 接收數據模塊。通過事件響應的方式來完成現場數據的接收。如果串口收到現場數據,并且使得數據緩沖區中的內容超過一個字節時,就會引發com2EvReceive事件。OnComm 函數用來負責捕捉com2EvReceive事件,并且將發送緩沖區中的現場內容寫入VB的文本框進行顯示,同時與組態王進行DDE數據交換。
該模塊中的OnComm 函數響應程序如下:
Private Sub Timer1 Timer
Timer1. Enabled = False
Text_SEND. Text = "" ∥清空發送文本框
MSComm. OutBufferCount = 0 ∥清除發送緩沖區數據
Dim OutByte (1 To 3) AsByte
IfNotMSComm. PortOpen Then ∥保證串口打開
MSComm. PortOpen = True
End If
'24臺積算儀循環數據采集
If k = 1 Then
OutByte (1) = &HCA
OutByte (2) = 0
OutByte (3) = 1
End If
If k = 2 Then
OutByte (1) = &HCA
OutByte (2) = 0
OutByte (3) = 2
End If
k = k + 1
If k > 24 Then
k = 1
End If
MSComm. InBufferCount = 0 ∥清除接收緩沖區數據
MSComm. OutBufferCount = 0 ∥清除發送緩沖區數據
MSComm. Output = OutByte
For j = 1 To 3
OutByte again ( j) = OutByte ( j)
Next
For i = 1 To 50000000
'延時Next
End Sub
Private Sub Timer1 Timer
Timer1. Enabled = False
Text_SEND. Text = "" ∥清空發送文本框
MSComm. OutBufferCount = 0 ∥清除發送緩沖區數據
Dim OutByte (1 To 3) AsByte
IfNotMSComm. PortOpen Then ∥保證串口打開
MSComm. PortOpen = True
End If
'24臺積算儀循環數據采集
If k = 1 Then
OutByte (1) = &HCA
OutByte (2) = 0
OutByte (3) = 1
End If
If k = 2 Then
OutByte (1) = &HCA
OutByte (2) = 0
OutByte (3) = 2
End If
??
k = k + 1
If k > 24 Then
k = 1
End If
MSComm. InBufferCount = 0 ∥清除接收緩沖區數據
MSComm. OutBufferCount = 0 ∥清除發送緩沖區數據
MSComm. Output = OutByte
For j = 1 To 3
OutByte again ( j) = OutByte ( j)
Next
For i = 1 To 50000000
'延時Next
End Sub
④ 容錯模塊。通過增加數據采集容錯模塊,保證數據采集的實時性、準確性,提高系統工作可靠性。
⑤ 數據庫模塊。主要利用Access數據庫,實現對計算機采集數據存儲、管理、分析及歷史數據的查詢等。
⑥ 其他程序模塊。主要完成發送、接收文本框的清空工作等。
通過上述幾個模塊的協調工作,就可以較好地實現VB與智能儀表間的串行通信、數據分析及歷史數據查詢等。
3 結束語
評論