新聞中心

EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 基于Modbus TCP的OPC服務(wù)器設(shè)計(jì)

基于Modbus TCP的OPC服務(wù)器設(shè)計(jì)

作者: 時(shí)間:2017-06-12 來源:網(wǎng)絡(luò) 收藏

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

本文引用地址:http://2s4d.com/article/201706/352942.htm

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


OPC技術(shù)


1.OPC核心基礎(chǔ)


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


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


2.OPC DA規(guī)范


OPC DA規(guī)范是整個(gè)OPC協(xié)議族中的核心和基礎(chǔ),所有的其他OPC規(guī)范都以O(shè)PC DA規(guī)范為基礎(chǔ)進(jìn)行擴(kuò)展而來。對(duì)于高敏感度的實(shí)時(shí)數(shù)據(jù),將其從實(shí)時(shí)數(shù)據(jù)中分離,提出報(bào)警/事件的概念,制定了專門的OPC報(bào)警事件(OPC Alarm and Events)接口規(guī)范;對(duì)于面向趨勢(shì)顯示、歷史分析、報(bào)表的數(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)中,整個(gè)系統(tǒng)以O(shè)PC DA服務(wù)器為中心,OPC AE服務(wù)器從OPC DA服務(wù)器上得到實(shí)時(shí)數(shù)據(jù),并根據(jù)客戶的設(shè)置進(jìn)行邏輯分析,產(chǎn)生相應(yīng)的事件和報(bào)警信息發(fā)送到客戶端;OPC HAD服務(wù)器將從OPC DA服務(wù)器上獲得的實(shí)時(shí)數(shù)據(jù)按照客戶要求進(jìn)行保存,便于客戶端進(jìn)行查詢和分析數(shù)據(jù)的變化情況;OPC DX服務(wù)器將多個(gè)OPC DA服務(wù)器的數(shù)據(jù)組織起來,根據(jù)需要進(jìn)行各個(gè)OPC DA服務(wù)器之間的數(shù)據(jù)交換:XML DA服務(wù)器將OPC DA服務(wù)器上的數(shù)據(jù)轉(zhuǎn)換成XML文本,并發(fā)布到互聯(lián)網(wǎng)上,實(shí)現(xiàn)數(shù)據(jù)更大范圍內(nèi)的共享;OPC Security服務(wù)器則對(duì)整個(gè)數(shù)據(jù)層的數(shù)據(jù)加上了一層安全保護(hù)。


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


Modbus TCP OPC服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)


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


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


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


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


2. OPC接口模塊


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

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


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


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


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


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


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

/// 從設(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è)備寫數(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分別對(duì)上述3個(gè)回調(diào)函數(shù)使能,完成回調(diào)函數(shù)設(shè)置。

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


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


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

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


圖3:基于ModbusTCP協(xié)議的請(qǐng)求和應(yīng)答格式。


MBAP(Modbus Application Protocol)協(xié)議頭的主要功能時(shí)對(duì)Modbus應(yīng)用數(shù)據(jù)單元ADU的標(biāo)識(shí)。其詳細(xì)內(nèi)容見表1。


表1:MBAP協(xié)議頭。


功能碼主要功能是標(biāo)識(shí)請(qǐng)求什么類型數(shù)據(jù),本通訊驅(qū)動(dòng)模塊主要使用6種標(biāo)準(zhǔn)的Modbus功能碼,其詳細(xì)內(nèi)容見表2。


表2:Modbus功能碼。


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


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


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


4. 用戶界面


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


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


圖5:用戶界面。


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


圖6:設(shè)備屬性設(shè)置對(duì)話框。


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


圖7:組屬性設(shè)置對(duì)話框。


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


圖8:Modbus設(shè)備數(shù)據(jù)標(biāo)簽屬性設(shè)置對(duì)話框。


根據(jù)實(shí)際需要重復(fù)“添加設(shè)備-添加組-添加數(shù)據(jù)標(biāo)簽”流程,配置好所需要存取的設(shè)備數(shù)據(jù)點(diǎn)。


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


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


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


本文小結(jié)


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


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



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉