基于Modbus TCP的OPC服務器設計[圖]

由于目前廣泛應用的DCS、FCS、SCADA 等傳統(tǒng)計算機測控系統(tǒng)使用的智能儀表設備、分布式I/O模塊、PLC 等設備來自于不同的生產(chǎn)商,而各生產(chǎn)商為了各自的商業(yè)利益,沒有遵循統(tǒng)一的接口規(guī)范,造成了設備之間的通信異常復雜,難以實現(xiàn)現(xiàn)場設備與上層控制軟件間的信息交互和各現(xiàn)場設備間的直接互聯(lián)與互操作,因此限制了計算機測控系統(tǒng)開放性、通用性的提高。

OPC(OLE for Process Control,用于過程控制的對象鏈接和嵌入)技術(shù)為解決工業(yè)客戶機與各種設備間通訊而產(chǎn)生的一項工業(yè)技術(shù)規(guī)范和標準。OPC 技術(shù)規(guī)范是OPC 基金會制定的,它提供了統(tǒng)一的數(shù)據(jù)訪問軟硬件接口,將現(xiàn)場信號按照統(tǒng)一的標準與SCADA(監(jiān)控與數(shù)據(jù)采集系統(tǒng)),HMI(人機接口)等軟件無縫連接起來,同時將硬件和應用軟件有效地分離開。只要硬件開發(fā)商提供帶有OPC接口的服務器,任何支持OPC接口的客戶程序均可采用統(tǒng)一的方式對不同硬件廠商的設備進行存取,無須重復開發(fā)驅(qū)動程序,因此大大提高了控制系統(tǒng)的互操作性和適應性。

OPC技術(shù)

1.OPC核心基礎(chǔ)

COM主要是為了實現(xiàn)軟件復用和互操作,并且為基于Windows的應用程序提供統(tǒng)一的、可擴展的、面向?qū)ο蟮耐ㄓ崢藴,DCOM是COM技術(shù)在分布式計算領(lǐng)域的擴展,支持在局域網(wǎng)、廣域網(wǎng)甚至因特網(wǎng)上不同計算機的對象之間的通訊。

OPC技術(shù)是COM在工業(yè)領(lǐng)域的一種特殊應用,實質(zhì)上,OPC規(guī)范就是定義了一些用于數(shù)據(jù)訪問、事件報警處理、歷史數(shù)據(jù)訪問等的COM對象和接口。

2.OPC DA規(guī)范

OPC DA規(guī)范是整個OPC協(xié)議族中的核心和基礎(chǔ),所有的其他OPC規(guī)范都以OPC DA規(guī)范為基礎(chǔ)進行擴展而來。對于高敏感度的實時數(shù)據(jù),將其從實時數(shù)據(jù)中分離,提出報警/事件的概念,制定了專門的OPC報警事件(OPC Alarm and Events)接口規(guī)范;對于面向趨勢顯示、歷史分析、報表的數(shù)據(jù),OPC制定了歷史數(shù)據(jù)訪問(OPC HiSTorical Data Access)接口規(guī)范。其他的OPC規(guī)范還包括OPC安全處理(OPC Security)接口規(guī)范、OPC批處理(OPC Batch)接口規(guī)范,OPC XML數(shù)據(jù)訪問(OPC XMLDA)規(guī)范,OPC數(shù)據(jù)交換(OPC Data Exchange)規(guī)范等。

在過程控制系統(tǒng)的架構(gòu)中,整個系統(tǒng)以OPC DA服務器為中心,OPC AE服務器從OPC DA服務器上得到實時數(shù)據(jù),并根據(jù)客戶的設置進行邏輯分析,產(chǎn)生相應的事件和報警信息發(fā)送到客戶端;OPC HAD服務器將從OPC DA服務器上獲得的實時數(shù)據(jù)按照客戶要求進行保存,便于客戶端進行查詢和分析數(shù)據(jù)的變化情況;OPC DX服務器將多個OPC DA服務器的數(shù)據(jù)組織起來,根據(jù)需要進行各個OPC DA服務器之間的數(shù)據(jù)交換:XML DA服務器將OPC DA服務器上的數(shù)據(jù)轉(zhuǎn)換成XML文本,并發(fā)布到互聯(lián)網(wǎng)上,實現(xiàn)數(shù)據(jù)更大范圍內(nèi)的共享;OPC Security服務器則對整個數(shù)據(jù)層的數(shù)據(jù)加上了一層安全保護。

實際應用中也主要是以OPC DA規(guī)范、OPC AE規(guī)范和OPC HDA規(guī)范應用最為廣泛,尤其是OPC DA規(guī)范。因此通常提到的OPC服務器和客戶端都是指OPC DA服務器和OPC DA客戶端。

  Modbus TCP OPC服務器的設計與實現(xiàn)

1. 總體結(jié)構(gòu)

本文實現(xiàn)的OPC數(shù)據(jù)訪問服務器要完成對Modbus設備的數(shù)據(jù)采集功能,提供OPC數(shù)據(jù)存取規(guī)定的定制接口,同時通過數(shù)據(jù)存取區(qū)將設備數(shù)據(jù)與OPC接口聯(lián)系來。如圖1所示的OPC數(shù)據(jù)存取服務器總體結(jié)構(gòu),各個功能模塊相對獨立又相互協(xié)作,形成了一個有機整體。

圖1:OPC數(shù)據(jù)存取服務器總體結(jié)構(gòu)

本文設計的OPC數(shù)據(jù)存取服務器擁有獨立的進程空間,與客戶進行數(shù)據(jù)交換時穩(wěn)定性高,同時提供了用戶友好的人機界面,便于用戶的自定義組態(tài)操作;硬件設備通訊模塊實現(xiàn)了標準的MdbusTCP通訊協(xié)議,可以實現(xiàn)與標準的ModbusTCP設備無縫互聯(lián)通信,簡單方便地獲取硬件設備的過程數(shù)據(jù)。

2. OPC接口模塊

OPC接口模塊包括OPC對象部分和數(shù)據(jù)存儲區(qū)部分,基于組件化的設計思想,可以設計成將COM和OPC技術(shù)細節(jié)隱藏,使得用戶將開發(fā)OPC數(shù)據(jù)采集服務器的工作集中在特定的數(shù)據(jù)采集任務上。

本文采用了OPCMaster的OM_OPCSvr.dll OPC接口動態(tài)庫工具來實現(xiàn)OPC接口模塊部分,OM_OPCSvr.dll完全支持OPC數(shù)據(jù)存取規(guī)范的所有版本,包括最新的DA 3.0版,它通過提供API函數(shù)完成OPC接口模塊的任務。其結(jié)構(gòu)如圖2紅色虛線所示。

圖2:OPCMaster OPC接口動態(tài)庫工具結(jié)構(gòu)

OPC服務器初始化管理:通過調(diào)用InitOPCSvr(byte *pSvrCLSID,bool bExeSvr,DWord dwCoInit)來對的OPC服務器的CLSID、程序應用模型和初始化COM庫的線程模式進行初始化設置。通過調(diào)用SetServerRate(DWord dwServerRate)設置OPC服務器端向客戶端最快回調(diào)速率。通過調(diào)用SetVendorInfo(LPCWSTR lpVendorInfo, WORD wMajorVersion, WORD wMinorVersion, WORD wBuildNumber)設置Vendor及OPC服務器版本信息。

通過調(diào)用SetServerDelimiter(WCHAR cDelimiter)設置服務器標簽ID的分隔符,在這里我們設置cDelimiter為".". 通過調(diào)用SetCaseSensiTIvity(BOOL bOnOff = FALSE)設置OPC服務器端地址空間是否區(qū)分大小寫,在這里我們設置bOnOff=True,即區(qū)分地址空間大小寫。

OPC回調(diào)數(shù)據(jù)通信管理:在這里主要設置三個回調(diào)函數(shù),分別是讀設備數(shù)據(jù)回調(diào)函數(shù)、寫設備數(shù)據(jù)回調(diào)函數(shù)和客戶端連接或斷開回調(diào)函數(shù)。

回調(diào)函數(shù)聲明分別如下:

/// 從設備讀數(shù)據(jù)tag回調(diào)函數(shù)

void ReadNotificationHandler(IntPtr hTag, out object Value, out UInt16 Quality, out System.Runtime.InteropServices.ComTypes.FILETIME Timestamp, out Int32 DeviceError)

/// 向設備寫數(shù)據(jù)Tag回調(diào)函數(shù)

void WriteNotificationHandler(IntPtr hTag, ref object Value, ref UInt16 Quality, ref System.Runtime.InteropServices.ComTypes.FILETIME Timestamp, out Int32 DeviceError)

/// 客戶端連接或斷開回調(diào)函數(shù)

void ClientConnNotificationHandler(UInt32 Num, bool bConnect)

聲明完回調(diào)函數(shù)后,需要調(diào)用使能回調(diào)函數(shù)EnableDeviceRead、EnableDeviceWrite和EnableClientConnNotify分別對上述3個回調(diào)函數(shù)使能,完成回調(diào)函數(shù)設置。

OPC服務器注冊管理:通過調(diào)用int RegisterOPCServer(byte[] pSvrCLSID, string lpProgID, string lpDescription, string lpVendor, string lpFilePath)完成對OPC服務器的注冊,以便OPC客戶端通過注冊表搜索到本機或本網(wǎng)絡內(nèi)的OPC服務器。

通過調(diào)用int UnregisterOPCServer(byte[] pSvrCLSID, string lpProgID)完成OPC服務器的注銷功能。

3. 通信驅(qū)動模塊

ModbusTCP是Modbus協(xié)議的網(wǎng)絡協(xié)議,TCP端口號為502.ModbusTCP由協(xié)議頭MBAP、功能碼和數(shù)據(jù)域組成,協(xié)議格式如圖3所示。

圖3:基于ModbusTCP協(xié)議的請求和應答格式

MBAP(Modbus Application Protocol)協(xié)議頭的主要功能時對Modbus應用數(shù)據(jù)單元ADU的標識。其詳細內(nèi)容見表1.

表1:MBAP協(xié)議頭

功能碼主要功能是標識請求什么類型數(shù)據(jù),本通訊驅(qū)動模塊主要使用6種標準的Modbus功能碼,其詳細內(nèi)容見表2.

表2:Modbus功能碼

Modbus TCP消息幀通過TCP網(wǎng)絡協(xié)議進行傳輸,因此借助Dot Net 4.0平臺的Socket類定義封裝了一個TcpSocket TCP通信類,通過此類可以完成TCP連接斷開、發(fā)送接收數(shù)據(jù)和發(fā)現(xiàn)斷開自動重連功能。

本Modbus TCP協(xié)議通信驅(qū)動模塊屬于Modbus Slave,需要對設備返回的Modbus TCP消息幀進行MBAP驗證、請求數(shù)據(jù)獲取。圖4是對設備進行讀取數(shù)據(jù)的流程。

圖4:設備通信驅(qū)動模塊讀取設備數(shù)據(jù)流程。

4. 用戶界面

OPC服務器的用戶界面將數(shù)據(jù)項用樹形結(jié)構(gòu)標識,然后設計數(shù)據(jù)項和硬件設備的數(shù)據(jù)綁定設置的界面以及實時顯示數(shù)據(jù)項列表界面,并將數(shù)據(jù)存儲區(qū)與硬件通信接口聯(lián)系起來,實現(xiàn)用戶自定義組態(tài)功能。在OPC服務器程序關(guān)閉時需要將數(shù)據(jù)項的屬性以及硬件設備設置參數(shù)作為組態(tài)配置文件保存起來,便于下次OPC服務器運行時能自動調(diào)入組態(tài)配置文件,自動完成初始設置。

主窗口:主窗口是OPC服務器程序的起始點,主要完成OPC服務器的初始化。主窗口是所有界面元素的組織容器,主要包括菜單欄、工具欄 、設備樹形列表 、標簽列表、信息列表和狀態(tài)欄,如圖5所示。

圖5:用戶界面

添加設備:此處的設備是實際物理設備的一個邏輯引用,通過此邏輯設備設置與實際設備的通信參數(shù)及相關(guān)屬性。點擊菜單"添加?添加設備",則打開設備屬性設置對話框,如圖6所示。用戶可以設置相關(guān)參數(shù)。

圖6:設備屬性設置對話框

添加組:組是包容設備中一組同類型數(shù)據(jù)的容器,只需要設置其名稱即可。點擊"添加?添加組",則打開設置組屬性對話框,如圖7所示。用戶可以設置組名稱。

圖7:組屬性設置對話框

添加數(shù)據(jù)標簽:數(shù)據(jù)標簽是實際物理設備中數(shù)據(jù)的邏輯抽象,且進行了OPC數(shù)據(jù)封裝。點擊菜單"添加?添加標簽",打開Modbus TCP設備數(shù)據(jù)標簽屬性設置對話框,用戶根據(jù)實際設備情況,設置數(shù)據(jù)點名稱、地址、數(shù)據(jù)類型、寄存器類型等屬性,如圖8所示。

圖8:Modbus設備數(shù)據(jù)標簽屬性設置對話框

根據(jù)實際需要重復"添加設備-添加組-添加數(shù)據(jù)標簽"流程,配置好所需要存取的設備數(shù)據(jù)點。

組態(tài)配置文件:在OPC服務器程序關(guān)閉時需要將數(shù)據(jù)項的屬性以及硬件設備設置參數(shù)作為組態(tài)配置文件保存起來,便于下次OPC服務器運行時能自動調(diào)入組態(tài)配置文件,自動完成初始設置。本文利用DotNet 4.0的序列化和反序列化技術(shù),可以將數(shù)據(jù)對象序列化到文件中和將文件反序列化到數(shù)據(jù)對象。

輪詢設備線程:經(jīng)過組態(tài)配置好數(shù)據(jù)點后,運行OPC服務器,開始輪詢設備并將實時獲取的數(shù)據(jù)更新到數(shù)據(jù)緩沖區(qū)內(nèi),如圖9所示。

圖9:更新數(shù)據(jù)詳細流程

本文小結(jié)

鑒于Windows在工控領(lǐng)域的成熟度和穩(wěn)定性,以及Dot Net FrameWork的跨平臺性,本文基于Dot Net4.0平臺封裝了OPC接口,編程實現(xiàn)了ModbusTCP通信協(xié)議以及良好的人機交互界面,通過了功能測試和性能測試,500ms輪詢周期可穩(wěn)定高效地讀寫千點設備數(shù)據(jù),目前國內(nèi)外SCADA系統(tǒng)中的OPC客戶端接口可以利用本OPC輕松實現(xiàn)與北京世紀聯(lián)信公司MultiBus-RTU等產(chǎn)品的互聯(lián)通信。

本OPC數(shù)據(jù)存取服務器目前實現(xiàn)的主要功能和特點包括:支持OPC 數(shù)據(jù)存取規(guī)范1.0、2.0和3.0;友好的人機交互界面;自定義組態(tài)及保存組態(tài)配置;支持標準的ModbusTCP通信協(xié)議;基于Dot Net4.0平臺,可以跨平臺運行;易與主流的SCADA軟件平臺互連通信。

作者:Andrew Morrison 來源:電子系統(tǒng)設計網(wǎng)


微信掃描分享本文到朋友圈
掃碼關(guān)注5G通信官方公眾號,免費領(lǐng)取以下5G精品資料
  • 1、回復“YD5GAI”免費領(lǐng)取《中國移動:5G網(wǎng)絡AI應用典型場景技術(shù)解決方案白皮書
  • 2、回復“5G6G”免費領(lǐng)取《5G_6G毫米波測試技術(shù)白皮書-2022_03-21
  • 3、回復“YD6G”免費領(lǐng)取《中國移動:6G至簡無線接入網(wǎng)白皮書
  • 4、回復“LTBPS”免費領(lǐng)取《《中國聯(lián)通5G終端白皮書》
  • 5、回復“ZGDX”免費領(lǐng)取《中國電信5GNTN技術(shù)白皮書
  • 6、回復“TXSB”免費領(lǐng)取《通信設備安裝工程施工工藝圖解
  • 7、回復“YDSL”免費領(lǐng)取《中國移動算力并網(wǎng)白皮書
  • 8、回復“5GX3”免費領(lǐng)取《R1623501-g605G的系統(tǒng)架構(gòu)1
  • 本周熱點本月熱點

     

      最熱通信招聘

      最新招聘信息