<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 基于Modbus TCP的OPC服務(wù)器設計

基于Modbus TCP的OPC服務(wù)器設計

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

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

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

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


OPC技術(shù)


1.OPC核心基礎


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


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


2.OPC DA規范


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


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


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


Modbus TCP OPC服務(wù)器的設計與實(shí)現


1. 總體結構


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


圖1:OPC數據存取服務(wù)器總體結構。


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


2. OPC接口模塊


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

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


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


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


通過(guò)調用SetServerDelimiter(WCHAR cDelimiter)設置服務(wù)器標簽ID的分隔符,在這里我們設置cDelimiter為”.”。 通過(guò)調用SetCaseSensitivity(BOOL bOnOff = FALSE)設置OPC服務(wù)器端地址空間是否區分大小寫(xiě),在這里我們設置bOnOff=True,即區分地址空間大小寫(xiě)。


OPC回調數據通信管理:在這里主要設置三個(gè)回調函數,分別是讀設備數據回調函數、寫(xiě)設備數據回調函數和客戶(hù)端連接或斷開(kāi)回調函數。


回調函數聲明分別如下:

/// 從設備讀數據tag回調函數

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

/// 向設備寫(xiě)數據Tag回調函數

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

/// 客戶(hù)端連接或斷開(kāi)回調函數

void ClientConnNotificationHandler(UInt32 Num, bool bConnect)


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

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


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


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

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


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


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


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


功能碼主要功能是標識請求什么類(lèi)型數據,本通訊驅動(dòng)模塊主要使用6種標準的Modbus功能碼,其詳細內容見(jiàn)表2。


表2:Modbus功能碼。


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


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


圖4:設備通信驅動(dòng)模塊讀取設備數據流程。


4. 用戶(hù)界面


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


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


圖5:用戶(hù)界面。


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


圖6:設備屬性設置對話(huà)框。


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


圖7:組屬性設置對話(huà)框。


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


圖8:Modbus設備數據標簽屬性設置對話(huà)框。


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


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


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


圖9:更新數據詳細流程。


本文小結


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


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



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>