摘要:在系統(tǒng)集成過程中,經(jīng)常用到組態(tài)軟件之間的通信問題,廣泛應(yīng)用的OPC通信技術(shù)雖然操作簡單,只需配置軟件系統(tǒng),不用寫專門的代碼就可實(shí)現(xiàn)服務(wù)器與客戶端的通信,但其對計(jì)算機(jī)硬件配置較高,占用內(nèi)存資源多,通信速度慢,在許多場合WINSOCK通信技術(shù)對這些問題可迎刃而解,本文闡述了WINSOCK技術(shù)概況以及具體的使用方法。
關(guān)鍵詞:iFIX;MCGS;WINSOCK;通信
中圖分類號:TP393文獻(xiàn)標(biāo)識碼: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公司開發(fā)的運(yùn)行于NT/2000/2003的新一代大型組態(tài)軟件。它以iCORE為核心,完全基于開放組件技術(shù)的自動化軟件。iFIX是當(dāng)今世界工業(yè)控制領(lǐng)域最為流行的上位機(jī)控制軟件之一,其功能強(qiáng)大、運(yùn)行穩(wěn)定,在煤炭系統(tǒng)得到了廣泛應(yīng)用。
MCGS是一款國內(nèi)開發(fā)的組態(tài)軟件,該軟件簡單易學(xué)、成本低廉在煤礦控制監(jiān)測系統(tǒng)中的應(yīng)用也非常廣泛。
現(xiàn)有一套以MCGS組態(tài)軟件設(shè)計(jì)的井下皮帶集中控制系統(tǒng),在調(diào)度室我們用iFIX將該系統(tǒng)集成到一個綜合自動化平臺下,實(shí)現(xiàn)井下皮帶集中控制系統(tǒng)的遠(yuǎn)程實(shí)時監(jiān)測。在系統(tǒng)集成過程中,根據(jù)現(xiàn)場條件我們采用了基于WINSOCK的網(wǎng)絡(luò)通信,從而實(shí)現(xiàn)iFIX作為客戶端訪問MCGS的服務(wù)器端的通信問題。
1 問題的提出
在工業(yè)控制領(lǐng)域,現(xiàn)在被廣泛接受的是采用OPC技術(shù)來實(shí)現(xiàn)信息系統(tǒng)的集成,OPC(OLE for Process Control-用于過程控制的OLE)規(guī)范是世界領(lǐng)先的自動化廠商與美國微軟公司合作制定的一項(xiàng)工業(yè)標(biāo)準(zhǔn),它定義了客戶機(jī)程序與服務(wù)器程序進(jìn)行實(shí)時數(shù)據(jù)交換的方法,這使得系統(tǒng)硬件開發(fā)商只要提供帶有OPC接口的服務(wù)器,任何支持OPC接口的客戶程序都可以對該設(shè)備進(jìn)行存取,而無須重新開發(fā)驅(qū)動程序。iFIX和MCGS軟件都支持OPC接口,而且支持遠(yuǎn)程OPC訪問,即iFIX與MCGS通過OPC接口實(shí)現(xiàn)通信。在具體應(yīng)用中,我們以MCGS端為OPC SERVER,以iFIX為OPC CLIENT,實(shí)現(xiàn)了iFIX通過OPC遠(yuǎn)程訪問MCGS服務(wù)器,但由于MCGS控制系統(tǒng)設(shè)計(jì)較早,工控機(jī)本身配置低,裝入OPC SERVER后通過遠(yuǎn)程訪問時頻頻造成計(jì)算機(jī)死機(jī)重起,嚴(yán)重影響了皮帶控制系統(tǒng)的使用,在此我們提出了用基于WINSOCK的網(wǎng)絡(luò)技術(shù)來代替兩者之間的OPC通信。
2 WINSOCK技術(shù)
Winsock提供了訪問 TCP 和 UDP 網(wǎng)絡(luò)服務(wù)的方便途徑。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的開發(fā)人員都可使用它。為編寫客戶或服務(wù)器應(yīng)用程序,不必了解 TCP 的細(xì)節(jié)或調(diào)用低級的 Winsock APIs。通過設(shè)置控件的屬性并調(diào)用其方法就可輕易連接到一臺遠(yuǎn)程機(jī)器上去,并且還可雙向交換數(shù)據(jù)。在本系統(tǒng)中我們采用了Visual Basic作為通信的開發(fā)平臺,用VB的Winsock控件來實(shí)現(xiàn)網(wǎng)絡(luò)通信。
2.1 TCP 基礎(chǔ)
數(shù)據(jù)傳輸協(xié)議允許創(chuàng)建和維護(hù)與遠(yuǎn)程計(jì)算機(jī)的連接。連接兩臺計(jì)算機(jī)就可彼此進(jìn)行數(shù)據(jù)傳輸。
如果創(chuàng)建客戶應(yīng)用程序,就必須知道服務(wù)器計(jì)算機(jī)名或者 IP 地址(RemoteHost 屬性),還要知道進(jìn)行“偵聽”的端口(RemotePort 屬性),然后調(diào)用 Connect 方法。
如果創(chuàng)建服務(wù)器應(yīng)用程序,就應(yīng)設(shè)置一個收聽端口(LocalPort 屬性)并調(diào)用 Listen 方法。當(dāng)客戶計(jì)算機(jī)需要連接時就會發(fā)生 ConnectionRequest 事件。為了完成連接,可調(diào)用 ConnectionRequest 事件內(nèi)的 Accept 方法。
建立連接后,任何一方計(jì)算機(jī)都可以收發(fā)數(shù)據(jù)。為了發(fā)送數(shù)據(jù),可調(diào)用 SendData 方法。當(dāng)接收數(shù)據(jù)時會發(fā)生 DataArrival 事件。調(diào)用 DataArrival 事件內(nèi)的 GetData 方法就可獲取數(shù)據(jù)。
2.2 UDP 基礎(chǔ)
用戶數(shù)據(jù)文報協(xié)議 (UDP) 是一個無連接協(xié)議。跟 TCP 的操作不同,計(jì)算機(jī)并不建立連接。另外UDP應(yīng)用程序可以是客戶機(jī),也可以是服務(wù)器。
為了傳輸數(shù)據(jù),首先要設(shè)置客戶計(jì)算機(jī)的 LocalPort 屬性。然后,服務(wù)器計(jì)算機(jī)只需將 RemoteHost 設(shè)置為客戶計(jì)算機(jī)的 Internet 地址,并將 RemotePort 屬性設(shè)置為跟客戶計(jì)算機(jī)的 LocalPort 屬性相同的端口,并調(diào)用 SendData 方法來著手發(fā)送信息。于是,客戶計(jì)算機(jī)使用 DataArrival 事件內(nèi)的 GetData 方法來獲取已發(fā)送的信息。
2.2 通信協(xié)議的選擇
在使用 WinSock 控件時,首先需要考慮使用什么協(xié)議??梢允褂玫膮f(xié)議包括 TCP 和 UDP。兩種協(xié)議之間的重要區(qū)別在于它們的連接狀態(tài):
TCP 協(xié)議控件是基于連接的協(xié)議,可以將它同電話系統(tǒng)相比。在開始數(shù)據(jù)傳輸之前,用戶必須先建立連接。
UDP 協(xié)議是一種無連接協(xié)議,兩臺計(jì)算機(jī)之間的傳輸類似于傳遞郵件:消息從一臺計(jì)算機(jī)發(fā)送到另一臺計(jì)算機(jī),但是兩者之間沒有明確的連接。另外,單次傳輸?shù)淖畲髷?shù)據(jù)量取決于具體的網(wǎng)絡(luò)。
在收發(fā)數(shù)據(jù)時,MCGS服務(wù)器端每隔5S向iFIX客戶端發(fā)送一次數(shù)據(jù),在收發(fā)數(shù)據(jù)前不需要客戶端確認(rèn),因服務(wù)器端計(jì)算機(jī)性能較差,為避免耗費(fèi)計(jì)算機(jī)過多資源,我們采用UDP通信協(xié)議。
2.3 協(xié)議的設(shè)置
在設(shè)計(jì)時,可以按如下方式設(shè)置應(yīng)用程序使用的協(xié)議:在“屬性”窗口中單擊“協(xié)議”,然后選擇 sckUDPProtocol。也可以使用程序代碼來設(shè)置 Protocol 屬性,如下所示:
Winsock1.Protocol = sckUDPProtocol
2.4 確定遠(yuǎn)程計(jì)算機(jī)的IP
在與遠(yuǎn)程計(jì)算機(jī)相連接的時候,需要知道它的 IP 地址或者計(jì)算機(jī)名稱。IP 地址是一串?dāng)?shù)字,每三個數(shù)字為一組,中間用點(diǎn)隔開(形如 xxx.xxx.xxx.xxx)。
2.5 系統(tǒng)設(shè)計(jì)流程圖
本系統(tǒng)中MCGS為服務(wù)器端,iFIX為客戶端,服務(wù)器和客戶端分別借助于Winsock通
過以太網(wǎng)實(shí)現(xiàn)通信,流程圖如圖2
3 MCGS服務(wù)器端設(shè)計(jì)
用VB編寫程序每隔5秒讀取一次MCGS實(shí)時數(shù)據(jù)庫的數(shù)據(jù),通過Winsock向客戶端發(fā)送數(shù)據(jù);首先初始化通信端口,設(shè)定遠(yuǎn)程客戶端計(jì)算機(jī)的IP地址和端口、本機(jī)開放的端口。代碼如下:
With Winsock1
.RemoteHost = \"192.168.0.10\" '將RemoteHost的值修改為計(jì)算機(jī)的名字或IP
.RemotePort = 4004'連接的端口號
.Bind 4005
End With
本設(shè)計(jì)中服務(wù)器端只負(fù)責(zé)向外發(fā)送數(shù)據(jù),并不接收客戶端的返回數(shù)據(jù),故只需要調(diào)用Winsock控件的SendData 方法向外發(fā)送實(shí)時數(shù)據(jù),代碼如下:
For Ri=1 To objRe.RecordCount
DatObj.GetValueFromName Trim(McgsName(Ri)), RValue(Ri)
strData = RValue(Ri)
Winsock1.SendData strData
Next Ri
4 iFIX客戶端設(shè)計(jì)
在iFIX客戶端,同樣需要初始化通信端口,設(shè)定服務(wù)器計(jì)算機(jī)的IP和端口、本機(jī)開放的端口,代碼如下:
With Winsock2
.RemoteHost = \"192.168.0.11\" .RemotePort = 4005.Bind 4004
End With
用Winsock的DataArrival事件接收服務(wù)器發(fā)來的數(shù)據(jù),本系統(tǒng)客戶端只接收服務(wù)器發(fā)來的數(shù)據(jù),并不向服務(wù)器發(fā)送數(shù)據(jù),接收數(shù)據(jù)的同時將數(shù)據(jù)寫入iFIX的實(shí)時數(shù)據(jù)庫,代碼如下:
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 結(jié)論
用VB編寫的基于WISOCK技術(shù)的網(wǎng)絡(luò)通信程序,占用內(nèi)存資源較少,大大減輕了服務(wù)器端計(jì)算機(jī)的負(fù)擔(dān),讀取、發(fā)送數(shù)度快,具有很強(qiáng)的實(shí)時性,對數(shù)據(jù)采集準(zhǔn)確無誤,而且計(jì)算機(jī)運(yùn)行穩(wěn)定可靠,達(dá)到了礦方要求,WISOCK技術(shù)使用簡單,相對OPC通信而言,無需配置計(jì)算機(jī)系統(tǒng),操作簡單,該技術(shù)在系統(tǒng)集成方面已經(jīng)得到了應(yīng)用廣泛。
參考文獻(xiàn):
[1]張艷. Visual Basic程序設(shè)計(jì)教程.徐州:中國礦業(yè)大學(xué)出版社,2003.
[2]張鈞良.Visual Basic6.0程序設(shè)計(jì)教程.南京:東南大學(xué)出版社,2000.
[3]iFIX4.0用戶手冊.Intellution.2001.
[4]MCGS工控組態(tài)軟件參考指南[M].北京:北京昆侖通態(tài)自動化軟件科技有限公司.
收稿日期:2008-01-30
作者簡介:王瑛(1964-),女,1985年7月畢業(yè)于淮南礦業(yè)學(xué)院礦機(jī)專業(yè),1985年至今一直從事煤礦機(jī)電工作。