在对组态王和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 结束语
评论
查看更多