摘要:本文主要在介紹Modbus協(xié)議規(guī)范和OPC服務器工作原理以及組成框架的基礎上,進行服務器設計,通過設計,將服務器應用到DSC組態(tài)軟件中,具有一定的現(xiàn)實意義。
關鍵詞:Modbus;OPC;組態(tài)
中圖分類號:TP393.09 文獻標識碼:A 文章編號:1007-9599 (2012) 18-0000-02
1 Modbus總線規(guī)范
目前,Modbus協(xié)議規(guī)范主要應用在自動控制領域,目的是實現(xiàn)工業(yè)生產中控制器之間的數(shù)據(jù)通信。同時,還能夠通過網(wǎng)絡協(xié)議實現(xiàn)控制器和其他硬件設備的通信,因此,通過該協(xié)議能夠讓不同廠家的設備構成控制網(wǎng)絡,進行集中監(jiān)控。因此,Modbus協(xié)議已經成為了一種通用工業(yè)標準。Modbus協(xié)議在控制過程中,已經定義了控制器能夠識別了消息結構,所以,當控制器發(fā)出控制指令后,接收設備就能夠回應指令請求,同時偵測指令是否正確,這樣,就能夠實現(xiàn)不同網(wǎng)絡之間的控制。
Modbus協(xié)議在通信過程中,在總線上只能有一臺主設備,每次通信指令都由主設備發(fā)出,在其余的從設備都分配指定地址后,就能夠接受主設備的指令。在主設備和從設備進行通信時,如果主設備只和其中一臺從設備通信,從設備則返回一個消息回應,如果主設備需要和所有從設備通信,從設備則不能作出回應。Modbus通信有兩種模式:ASII和RTU模式。并且,這兩種模式不能同時使用,只能選擇其中一種模式進行通信。
2 OPC服務器的設計
2.1 服務器對象與接口模塊
OPC服務器對象的名稱通常為XXX(代表硬件名稱)Server,其主要功能就是在啟動服務器后獲取服務器,得到服務器對象的起始地址,再返回OPC對象。XXXServer派生自IUnknown類,實現(xiàn)了OPC自定義接口,其中最關鍵的兩個接口是IOPC-Server和IOPCBrowseServerAddressSpace。其中,IOPCServer接口類首先派生出IXXXServer類,然后通過指針變量指向IXXXServer類,同時,將接口指針返回客戶,客戶收到接口指針命令后,可以通過調用相關函數(shù)完成相應操作,比如,能夠實現(xiàn)對組對象的管理、瀏覽、創(chuàng)建、刪除等操作。并且,還可以通過操作服務器接口了解服務器相關信息。IOPCBrowseServerAddressSpace接口提供瀏覽服務器地址空間和獲取項對象的屬性。
OPC Server組對象名稱通常為XXXGroup,主要完成存儲項對象的信息,通過OPC服務器組對象接口,以OPC組為單位,采用同步和異步方式進行傳輸,以實現(xiàn)組對象功能。XXXGroup中IXXXSIO接口實現(xiàn)同步傳輸,程序可以按照規(guī)定調用接口進行數(shù)據(jù)同步存取。如果采用異步方式傳輸,則通過IOPCAsyncIO與IDadaObject接口派生出IXXXSIO和IXXXDO接口。然后,程序則通過IXXXASIO進行數(shù)據(jù)異步存取操作。
OPC Server中有一個OPC項XXXItem,由于沒有自帶接口,所以,不是真正的COM對象,只是表示數(shù)據(jù)連接。因此,項對象能夠對于實際數(shù)據(jù)項,即服務器中的唯一標識,客戶通過數(shù)據(jù)項建立與數(shù)據(jù)源的連接。其中,標識包括值、品質、時間戳三個屬性。
2.2 數(shù)據(jù)存儲區(qū)模塊
數(shù)據(jù)存儲區(qū)模塊就是服務器上包含的可供客戶訪問的資源的集合,它描述了服務器中含有哪些項,以及這些項是按照什么形式進行組織的,我們可以采用鏈表結構來實現(xiàn),在鏈表結構中,通過一個含有自身結構的指針,實現(xiàn)OPC數(shù)據(jù)項的遍歷。這樣。OPC客戶就可以通過服務器對象的
IOPCServerBrowseServerAddressSpace接口來瀏覽數(shù)據(jù)區(qū)的數(shù)據(jù)項,然后通過OPC組對象創(chuàng)建OPC項。并將OPC項與相應的數(shù)據(jù)項聯(lián)系起來。
2.3 Modbus設備驅動模塊
Modbus設備驅動模塊的實現(xiàn)關鍵是需要建立符合Modbus協(xié)議的數(shù)據(jù)幀。在本程序中,采用的是RTU模式。無奇偶校驗,有2個停止位。
具體步驟,第一步,打開串口,并設置串口參數(shù),比如,波特率、緩沖區(qū)等的設置。第二步,將數(shù)據(jù)量、起始地址、功能碼、冗余校驗等參數(shù)依次填入內存中的緩沖區(qū),建立一幀Modbus。第三步,打開新接收線程,用于監(jiān)視串口工作狀態(tài),當串口收到數(shù)據(jù)時,線程則會通知客戶程序,并將Modbus數(shù)據(jù)幀發(fā)送給設備。如果設備收到數(shù)據(jù),則會馬上應答,同時發(fā)送回應答包文。在回應答過程中,需要判斷通信是否超時,串口接收的數(shù)據(jù)是否符合Modbus協(xié)議標準,串口是否能夠繼續(xù)使用。如果通信不超時,串口則繼續(xù)使用,并且,串口數(shù)據(jù)符合協(xié)議標準,那么就可以在內存中建立接收緩沖區(qū),接收Modbus數(shù)據(jù),當整個發(fā)送和接收過程結束后,系統(tǒng)將關閉串口資源。
2.4 OPC服務器的注冊
由于OPC服務器組件都是自注冊組件,相對應的,COM為它們定義了一種“Self-Registration”機制和“Unregistration”機制,將服務器注冊過程封裝在DLL或EXE程序中,由于本OPC服務器采用DLL組件形式,可以采用Windows系統(tǒng)提供的RegSvr31.exe命令來注冊,將該dll文件拷貝到操作系統(tǒng)目錄下,運行RegSvr32<路徑>/OPC_Svr.dll。同樣,要從OPC基金會網(wǎng)站下載opc_aeps.dll,opc-comn_ps.dll,opcproxy.dll組件,將其放在操作系統(tǒng)目錄下進行注冊。保證當組件程序從文件系統(tǒng)刪除時會刪除其他自身的注冊途徑。
3 該服務器配合力控組態(tài)軟件的應用
業(yè)界著稱的工業(yè)組態(tài)軟件力控就可以支持OPC標準,作為客戶端訪問OPC服務器程序時,是將OPC服務器程序當作一個I/O設備。數(shù)據(jù)庫中的點參數(shù)通過I/O數(shù)據(jù)庫連接與OPC服務器程序進行數(shù)據(jù)交換。
3.1 在組態(tài)軟件中定義OPC設備
在力控導航器窗口中選擇“I/O設備驅動”項中的“OPC”設備并展開,雙擊“OPC Client”,在出現(xiàn)對話框后,定義基于Modbus協(xié)議的OPC邏輯設備的名稱,起名為“OPC_MODB”,單擊“下一步”,配置OPC服務器,然后,單擊“完成”,則成功添加一個OPC設備,并且在力控的導航窗口中看到該設備。
3.2 對OPC數(shù)據(jù)項進行數(shù)據(jù)連接
第一步,雙擊“實時數(shù)據(jù)庫/數(shù)據(jù)庫組態(tài)”,第二步,選擇“模擬I/O點”,第三步,雙擊任一空點參數(shù)單元格,選擇“數(shù)據(jù)連接”頁,第四步,在“連接I/O設備”的“設備”下拉框中選擇預定義的OPC設備“OPC_MODB”,選擇后,在“連接項”右側單擊“增加”按鈕,單擊“確定”按鈕,便生成了一個數(shù)據(jù)項的數(shù)據(jù)連接。
3.3 進行數(shù)據(jù)通訊
通過上面的設置,就可以在力控組態(tài)軟件中像接收其他I/O設備的數(shù)據(jù)一樣接收該OPC設備:OPC_MODB的數(shù)據(jù)。
通過基于Modbus的OPC接口,可以實時接收從底層傳過來的數(shù)據(jù),并及時的把數(shù)據(jù)傳送到客戶端,對于客戶端發(fā)送的數(shù)據(jù)請求,能夠立即響應,迅速把數(shù)據(jù)轉發(fā)到底層設備。數(shù)據(jù)既可以在不同的控制系統(tǒng)中進行傳遞,也可以傳遞到各種符合COM規(guī)范的應用軟件中。在工業(yè)自動化系統(tǒng)中采用OPC規(guī)范的產品,能夠實現(xiàn)各軟件之間的相互操作和集成,同時,也能夠與現(xiàn)場設備通過協(xié)議進行即時通信,完成數(shù)據(jù)傳輸。隨著OPC協(xié)議規(guī)范的逐步完善和功能增強,OPC將成為控制系統(tǒng)中不可缺少的一部分。
參考文獻:
[1]李正軍.現(xiàn)場總線及其應用技術[M].北京:機械工業(yè)出版社,2005.
[2]OPC基金會.OPC協(xié)議規(guī)范[S].http://www.opcchina.com.cn.