摘要:在系統集成過程中,經常用到組態軟件之間的通信問題,廣泛應用的OPC通信技術雖然操作簡單,只需配置軟件系統,不用寫專門的代碼就可實現服務器與客戶端的通信,但其對計算機硬件配置較高,占用內存資源多,通信速度慢,在許多場合WINSOCK通信技術對這些問題可迎刃而解,本文闡述了WINSOCK技術概況以及具體的使用方法。
關鍵詞:iFIX;MCGS;WINSOCK;通信
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)12-2pppp-0c
Application of Communications in Coal Mine Based on WINSOCK
WANG Ying
(Anhui Hengyuan Coal Industry and Electricity Power Co.Ltd,huaibei 235156,China)
Abstract:In the systems integration process, communications is frequently used between the software configuration, OPC Although simple operation, configuration software system only, not to write special code to be available to the server and client communications, but its Computer hardware configuration higher and occupancy memory resources, communication is slow; on many occasions, these problems can be resolved by WINSOCK communications technology, this paper describes WINSOCK technical and specific use.
Key words:iFIX;MCGS;WINSOCK;communications
iFIX是美國Intellution公司開發的運行于NT/2000/2003的新一代大型組態軟件。它以iCORE為核心,完全基于開放組件技術的自動化軟件。iFIX是當今世界工業控制領域最為流行的上位機控制軟件之一,其功能強大、運行穩定,在煤炭系統得到了廣泛應用。
MCGS是一款國內開發的組態軟件,該軟件簡單易學、成本低廉在煤礦控制監測系統中的應用也非常廣泛。
現有一套以MCGS組態軟件設計的井下皮帶集中控制系統,在調度室我們用iFIX將該系統集成到一個綜合自動化平臺下,實現井下皮帶集中控制系統的遠程實時監測。在系統集成過程中,根據現場條件我們采用了基于WINSOCK的網絡通信,從而實現iFIX作為客戶端訪問MCGS的服務器端的通信問題。
1 問題的提出
在工業控制領域,現在被廣泛接受的是采用OPC技術來實現信息系統的集成,OPC(OLE for Process Control-用于過程控制的OLE)規范是世界領先的自動化廠商與美國微軟公司合作制定的一項工業標準,它定義了客戶機程序與服務器程序進行實時數據交換的方法,這使得系統硬件開發商只要提供帶有OPC接口的服務器,任何支持OPC接口的客戶程序都可以對該設備進行存取,而無須重新開發驅動程序。iFIX和MCGS軟件都支持OPC接口,而且支持遠程OPC訪問,即iFIX與MCGS通過OPC接口實現通信。在具體應用中,我們以MCGS端為OPC SERVER,以iFIX為OPC CLIENT,實現了iFIX通過OPC遠程訪問MCGS服務器,但由于MCGS控制系統設計較早,工控機本身配置低,裝入OPC SERVER后通過遠程訪問時頻頻造成計算機死機重起,嚴重影響了皮帶控制系統的使用,在此我們提出了用基于WINSOCK的網絡技術來代替兩者之間的OPC通信。
2 WINSOCK技術
Winsock提供了訪問 TCP 和 UDP 網絡服務的方便途徑。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的開發人員都可使用它。為編寫客戶或服務器應用程序,不必了解 TCP 的細節或調用低級的 Winsock APIs。通過設置控件的屬性并調用其方法就可輕易連接到一臺遠程機器上去,并且還可雙向交換數據。在本系統中我們采用了Visual Basic作為通信的開發平臺,用VB的Winsock控件來實現網絡通信。
2.1 TCP 基礎
數據傳輸協議允許創建和維護與遠程計算機的連接。連接兩臺計算機就可彼此進行數據傳輸。
如果創建客戶應用程序,就必須知道服務器計算機名或者 IP 地址(RemoteHost 屬性),還要知道進行“偵聽”的端口(RemotePort 屬性),然后調用 Connect 方法。
如果創建服務器應用程序,就應設置一個收聽端口(LocalPort 屬性)并調用 Listen 方法。當客戶計算機需要連接時就會發生 ConnectionRequest 事件。為了完成連接,可調用 ConnectionRequest 事件內的 Accept 方法。
建立連接后,任何一方計算機都可以收發數據。為了發送數據,可調用 SendData 方法。當接收數據時會發生 DataArrival 事件。調用 DataArrival 事件內的 GetData 方法就可獲取數據。
2.2 UDP 基礎
用戶數據文報協議 (UDP) 是一個無連接協議。跟 TCP 的操作不同,計算機并不建立連接。另外UDP應用程序可以是客戶機,也可以是服務器。
為了傳輸數據,首先要設置客戶計算機的 LocalPort 屬性。然后,服務器計算機只需將 RemoteHost 設置為客戶計算機的 Internet 地址,并將 RemotePort 屬性設置為跟客戶計算機的 LocalPort 屬性相同的端口,并調用 SendData 方法來著手發送信息。于是,客戶計算機使用 DataArrival 事件內的 GetData 方法來獲取已發送的信息。
2.2 通信協議的選擇
在使用 WinSock 控件時,首先需要考慮使用什么協議。可以使用的協議包括 TCP 和 UDP。兩種協議之間的重要區別在于它們的連接狀態:
TCP 協議控件是基于連接的協議,可以將它同電話系統相比。在開始數據傳輸之前,用戶必須先建立連接。
UDP 協議是一種無連接協議,兩臺計算機之間的傳輸類似于傳遞郵件:消息從一臺計算機發送到另一臺計算機,但是兩者之間沒有明確的連接。另外,單次傳輸的最大數據量取決于具體的網絡。
在收發數據時,MCGS服務器端每隔5S向iFIX客戶端發送一次數據,在收發數據前不需要客戶端確認,因服務器端計算機性能較差,為避免耗費計算機過多資源,我們采用UDP通信協議。
2.3 協議的設置
在設計時,可以按如下方式設置應用程序使用的協議:在“屬性”窗口中單擊“協議”,然后選擇 sckUDPProtocol。也可以使用程序代碼來設置 Protocol 屬性,如下所示:
Winsock1.Protocol = sckUDPProtocol

2.4 確定遠程計算機的IP
在與遠程計算機相連接的時候,需要知道它的 IP 地址或者計算機名稱。IP 地址是一串數字,每三個數字為一組,中間用點隔開(形如 xxx.xxx.xxx.xxx)。
2.5 系統設計流程圖
本系統中MCGS為服務器端,iFIX為客戶端,服務器和客戶端分別借助于Winsock通
過以太網實現通信,流程圖如圖2

3 MCGS服務器端設計
用VB編寫程序每隔5秒讀取一次MCGS實時數據庫的數據,通過Winsock向客戶端發送數據;首先初始化通信端口,設定遠程客戶端計算機的IP地址和端口、本機開放的端口。代碼如下:
With Winsock1
.RemoteHost = \"192.168.0.10\" '將RemoteHost的值修改為計算機的名字或IP
.RemotePort = 4004'連接的端口號
.Bind 4005
End With
本設計中服務器端只負責向外發送數據,并不接收客戶端的返回數據,故只需要調用Winsock控件的SendData 方法向外發送實時數據,代碼如下:
For Ri=1 To objRe.RecordCount
DatObj.GetValueFromName Trim(McgsName(Ri)), RValue(Ri)
strData = RValue(Ri)
Winsock1.SendData strData
Next Ri
4 iFIX客戶端設計
在iFIX客戶端,同樣需要初始化通信端口,設定服務器計算機的IP和端口、本機開放的端口,代碼如下:
With Winsock2
.RemoteHost = \"192.168.0.11\" .RemotePort = 4005.Bind 4004
End With
用Winsock的DataArrival事件接收服務器發來的數據,本系統客戶端只接收服務器發來的數據,并不向服務器發送數據,接收數據的同時將數據寫入iFIX的實時數據庫,代碼如下:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData
RValue(r) = strData
If r >= objRe.RecordCount Then
For Ri = 1 To objRe.RecordCount
Set TargetVar = WrkSpcApp.System.FindObject(\"Fix32.SERVER.\" Trim(IFixName(Ri)) \".F_CV\")
Next Ri
End If
End Sub
5 結論
用VB編寫的基于WISOCK技術的網絡通信程序,占用內存資源較少,大大減輕了服務器端計算機的負擔,讀取、發送數度快,具有很強的實時性,對數據采集準確無誤,而且計算機運行穩定可靠,達到了礦方要求,WISOCK技術使用簡單,相對OPC通信而言,無需配置計算機系統,操作簡單,該技術在系統集成方面已經得到了應用廣泛。
參考文獻:
[1]張艷. Visual Basic程序設計教程.徐州:中國礦業大學出版社,2003.
[2]張鈞良.Visual Basic6.0程序設計教程.南京:東南大學出版社,2000.
[3]iFIX4.0用戶手冊.Intellution.2001.
[4]MCGS工控組態軟件參考指南[M].北京:北京昆侖通態自動化軟件科技有限公司.
收稿日期:2008-01-30
作者簡介:王瑛(1964-),女,1985年7月畢業于淮南礦業學院礦機專業,1985年至今一直從事煤礦機電工作。