豆勤勤
力控組態軟件是對現場生產進行監控和數據采集的一種軟件,可以與現場總線模塊、智能模塊等多種輸入輸出I/O設備進行通信,本文采用的力控組態軟件對于采用不同協議通信的I/O設備,提供具有針對性的I/O驅動程序.實時數據庫就借助于I/O驅動程序對I/O設備執行數據的采集與回送,與I/O驅動程序構成服務器與客戶端的結構模式[1].
該項目是基于某大型鋼廠鋼坯標識碼的讀碼監控系統.由于項目中采用的是國外的某款掃碼槍設備,在力控組態軟件中并沒有提供其通訊驅動程序,而開發驅動程序工作量較大,因此需要采取其他方法實現與上位機的通信.對于力控不提供驅動程序的I/O設備,本項目采用的是借助于VB應用程序軟件,利用力控向控制層和管理層提供的軟、硬件全部接口實現間接控制的方法.
VB中提供有WinSock控件[2],此控件能夠通過TCP協議連接到遠程的機器并進行數據交換.而力控組態軟件和VB之間又可以通過DDE協議來實現通信.整個工程項目實現過程如圖1所示.

圖1
VB是一個可視化的窗口開發環境,可以方便的應用到很多控制系統中.在使用WinSock控件時,可以使用的協議包括TCP和UDP.兩種協議之間的重要區別在于它們的連接狀態.TCP協議是一種基于連接的協議,可以將它同電話系統相比.在開始數據輸出之前,用戶必須先建立連接.UDP協議是一種無連接協議,兩臺計算機之間的傳輸類似于傳遞郵件,消息從一臺計算機發送到另一臺計算機,但是兩者之間沒有明確的連接.在應用程序使用TCP協議,首先必須決定應用程序是服務器還是客戶端.如果要創建一個服務器端,那么應用程序需要“監聽”指定的端口.當客戶端提出連接請求時,服務器端能夠接受請求并建立連接.在連接建立之后,客戶端與服務器端可以自由地互相通訊.本項目中VB是作為客戶端,與掃碼設備進行數據通訊.
在VB中,由于WinSock通信控件不是內置控件,在使用時,需要將其添加到工具箱中.選擇工程-部件-控件,選中Microsoft WinSock Control復選框,點擊確定,就添加成功了.此時選擇WinSock控件,添加到窗體上,利用此控件編程就可實現VB和設備通信.使用控件時,先對WinSock控件設置相應的屬性和事件.首先必須知道服務器計算機名或IP地址及服務器進行偵聽的端口,然后調用Connect方法.
WinSock控件的參數設置如下:
Private Sub Command1_Click()
Dim StartTime
Winsock1.RemoteHost="169.254.6.244"
Winsock1.RemotePort=23
Winsock1.Connect
StartTime=Timer
Do While ((Timer<StartTime+2)And(Winsock1.State<> 7))
DoEvents
Loop
If(Winsock1.State = 7)Then
Text5.Text= "Connected"
Text7.Text= "1"
Text5.BackColor= &HFF00&
Command1.Enabled = False
Else
Text5.Text="Can't connect to"+Text1.Text
Text5.BackColor= &HFF
Text7.Text= "0"
End If
End Sub
接收數據程序如下:
Private Sub Command4_Click()
If(Winsock1.State=7)Then
StartLow=Val(Text2.Text)Mod 256
StartHigh=Val(Text2.Text)256
LengthLow=Val(Text3.Text)Mod 256
LengthHigh=Val(Text3.Text)256
MbusWriteQuery=Chr(0)+Chr(0)+Chr(0)+Chr(0)+Chr(0)+Chr(7+2*Val(Text3.Text))+Chr(1)+Chr(16)+Chr(StartHigh)+Chr(Start-Low)+Chr(0)+Chr(Val(Text3.Text))
For i=0 To Val(Text3.Text)-1
ByteLow=Val(Text4(i).Text)Mod 256
ByteHigh=Val(Text4(i).Text)256
MbusWriteQuery=MbusWriteQuery+Chr(ByteHigh)+Chr(ByteLow)
Next i
MbusRead=False
MbusWrite=True
Winsock1.SendData MbusWriteQuery
ModbusWait=True
ModbusTimeOut=0
Timer1.Enabled=True
Else
MsgBox("Device not connected via TCP/IP")
End If
End Sub
VB與力控進行通信數據傳輸可以通過動態數據交換DDE來進行.
動態數據交換(DDE)[3,4]是微軟的一種數據通信形式,它使用共享的內存在應用程序之間進行數據交換,能夠及時更新數據,在兩個應用程序之間信息是自動更新的,無須用戶參與.兩個同時運行的程序間通過DDE方式交換數據時他們之間是客戶端/服務器關系;數據通信時,接收信息的應用程序稱作客戶端,提供信息的應用程序稱作服務器.一個應用程序可以是DDE客戶端或是DDE服務器,也可以兩者都是.一旦客戶端和服務器建立起來連接關系,則當服務器中的數據發生變化后就會馬上通知客戶端.通過DDE方式建立的數據連接通道是雙向的,即客戶端不但能夠讀取服務器中的數據,而且可以對其進行修改.
DDE有兩種數據交換方式,即冷連接和熱連接.冷連接(Cool Link)指數據交換是一次性數據傳輸,與剪貼板相同.當服務器中的數據發生變化后不通知客戶端,但客戶端可以隨時從服務器讀寫數據.熱連接(Hot Link)指當服務器中的數據發生變化后馬上通知客戶端,同時將變化的數據直接送給客戶.
VB與力控組態軟件進行DDE對話是通過機器名、應用程序名、主題名和項目名進行約定的.
在VB中新建一個工程,將窗體命名為“DDEServer”;其中,LinkMode 設為“1-Source(表示此程序作為服務端)”;LinkTopic為窗體的名字(即DDEServer).建立窗體如圖2所示.VB應用程序中采用文本框控件和力控進行DDE通訊.
在力控組態軟件中定義一個I/O設備DDE.服務名稱設定為VB應用程序名,“工程1”,主題名稱指定為VB應用程序窗體名稱“DDESERVE”.鏈接模式為熱連接,如圖3和圖4所示.

圖2

圖3

圖4
在數據庫中創建三個數據庫點:A1,A2和A3,這幾個數據點的數據連接項中的DDE分別指定為VB窗體中的文本框的名字,如圖5所示.
先啟動VB程序,然后啟動力控運行程序,就可以實現VB與力控組態軟件之間的DDE數據交換.整個系統運行如圖6所示.

圖5

圖6
本文采用VB中WinSock控件和DDE通訊技術很好的實現了力控組態軟件與下位機掃碼設備之間的通信,較好地解決了對于力控組態程序沒有驅動程序支持的設備之間數據的通信問題.采用力控組態軟件編寫了上位機監控界面,人機交互直觀、方便.在實際項目中得到了很好地應用,實用價值很高.