本發明涉及工業安全技術領域,尤其涉及一種實現工控設備間opc通信的方法。
背景技術:
opc協議(oleforprocesscontrol)是基于微軟的ole/com機制在應用層協議dce/rpc(distributedcomputingenvironment/remoteprocedurecalls)之上傳輸數據的通訊標準,以c/s(客戶端和服務器)架構實現,主要用于工業生產過程中的數據采集和邏輯控制。工業環境中各種設備種類繁多,各大廠商的設備和軟件之間需要一種通用的數據交換方式,opc協議定義了一套標準的接口和方法,各大設備和軟件廠商也都基于微軟的ole/com技術提供了對opc協議的支持。
但是,隨著全球化發展的進一步加快,工業發展的過程中,工業現場使用的設備和軟件來自于世界各個國家,這其中極有可能出現通過設備或軟件來竊取國家工業生產信息的行為,所以在一些關鍵的、關系國家安全的工業領域,會禁止使用某些軟件或系統,例如,國家的某些電力生產系統中就禁止使用windows系統。工業生產中需要采集各種設備的數據信息進行集中展現,例如,公司的erp(enterpriseresourceplanning)系統要集中展現生產環境的數據,這種情況就需要erp系統對各種設備進行直接的數據訪問,如果需要對僅支持opc協議的設備進行數據通訊,就要erp系統所部署的操作系統支持opc協議,就目前而言只有微軟的windows操作系統支持了opc協議,linux操作系統不支持opc協議。因此,對于不允許使用windows系統或僅使用了linux操作系統的環境中,無法與支持opc協議的設備進行數據通訊,限制了設備的使用。
技術實現要素:
本發明實施例提供一種實現工控設備間opc通信的方法,用于至少解決上述技術問題之一。
第一方面,本發明實施例提供一種實現工控設備間opc通信的方法,所述工控設備包括服務端工控設備和客戶端工控設備,所述工控設備搭載有不兼容opc協議的操作系統,所述方法包括:
服務端工控設備根據通過135端口接收到自客戶端工控設備的連接請求時,建立與所述客戶端工控設備之間的第一通信連接;
當所述服務端工控設備通過所述第一通信連接接收自所述客戶端工控設備的dce/rpc數據包不屬于第一預設數據包時,生成響應數據并反饋至所述服務端工控設備。
第二方面,本發明實施例提供一種計算機可讀存儲介質,所述存儲介質中存儲有一個或多個包括執行指令的程序,所述執行指令能夠被電子設備(包括但不限于計算機,服務器,或者網絡設備等)讀取并執行,以用于執行本發明上述任一項實現工控設備間opc通信的方法。
第四方面,提供一種電子設備,其包括:至少一個處理器,以及與所述至少一個處理器通信連接的存儲器,其中,所述存儲器存儲有可被所述至少一個處理器執行的指令,所述指令被所述至少一個處理器執行,以使所述至少一個處理器能夠執行本發明上述任一項實現工控設備間opc通信的方法。
第五方面,本發明實施例還提供一種計算機程序產品,所述計算機程序產品包括存儲在計算機可讀存儲介質上的計算機程序,所述計算機程序包括程序指令,當所述程序指令被計算機執行時,使所述計算機執行上述任一項實現工控設備間opc通信的方法。
本發明實施例中,實現了服務端工控設備與客戶端工控設備之間的opc通信。從而通過采用本發明實施例的方法避免了某些特殊領域采用windows系統而可能存在的安全隱患,同時還能夠保證與支持opc協議的設備之間的兼容性。
附圖說明
為了更清楚地說明本發明實施例的技術方案,下面將對實施例描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明的實現工控設備間opc通信的方法一實施方式的流程圖;
圖2為本發明的實現工控設備間opc通信的方法的另一實施方式的流程圖;
圖3為本發明的實現工控設備間opc通信的方法的又一實施方式的流程圖;
圖4為本發明的實現工控設備間opc通信的方法的又一實施方式的流程圖;
圖5為本發明的實現工控設備間opc通信的方法的又一實施方式的流程圖;
圖6為本發明的實現工控設備間opc通信的方法的又一實施方式的流程圖;
圖7為本發明實施例中的數據存儲解析模型的結構示意圖;
圖8為本發明的電子設備的一實施例的結構示意圖。
具體實施方式
為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
本發明可以在由計算機執行的計算機可執行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執行特定任務或實現特定抽象數據類型的例程、程序、對象、元件、數據結構等等。也可以在分布式計算環境中實踐本發明,在這些分布式計算環境中,由通過通信網絡而被連接的遠程處理設備來執行任務。在分布式計算環境中,程序模塊可以位于包括存儲設備在內的本地和遠程計算機存儲介質中。
在本發明中,運行于服務器上的應用程序或腳本程序、服務器都可以是元件。一個或多個元件可在執行的過程和/或線程中,并且元件可以在一臺計算機上本地化和/或分布在兩臺或多臺計算機之間,并可以由各種計算機可讀介質運行。元件還可以根據具有一個或多個數據包的信號,例如,來自一個與本地系統、分布式系統中另一元件交互的,和/或在因特網的網絡通過信號與其它系統交互的數據的信號通過本地和/或遠程過程來進行通信。
最后,還需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”,不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
如圖1所示,本發明的一實施例的實現工控設備間opc通信的方法,所述工控設備搭載有不兼容opc協議的操作系統,所述工控設備包括服務端工控設備和客戶端工控設備,所述方法包括:
s11、服務端工控設備根據通過135端口接收到自客戶端工控設備的連接請求時,建立與所述客戶端工控設備之間的第一通信連接;
s12、當所述服務端工控設備通過所述第一通信連接接收自所述客戶端工控設備的dce/rpc數據包不屬于第一預設數據包時,生成響應數據并反饋至所述服務端工控設備。
本發明實施例中,本實施例中的工控系統所搭載的操作系統可以是linux操作系統或者是unix操作系統。實現了服務端工控設備與客戶端工控設備之間的通信。從而通過采用本發明實施例的方法避免了某些特殊領域采用windows系統而可能存在的安全隱患,同時還能夠保證與支持opc協議的設備之間的兼容性。執行本發明上述實施例的執行主體可以為工控設備,并且所述工控設備可以是單個設備也可以是設備群組。
如圖2所示,在本發明實現工控設備間opc通信的方法的一些實施例中,還包括:
s21、當接收的所述dce/rpc數據包屬于所述第一預設數據包時,獲取服務端動態端口;
s22、所述服務端工控設備基于所述服務端動態端口創建tcp服務,并將所述服務端動態端口號發送至所述客戶端工控設備;
s23、當所述服務端工控設備接收到自所述客戶端工控設備發送的與所述服務端動態端口建立連接的tcp連接請求時,建立與所述客戶端工控設備之間的第二通信連接;
s24、所述服務端工控設備通過所述第二通信連接接收自所述客戶端工控設備的opc通訊數據包;
s25、當接收的所述opc通訊數據包不屬于第二預設數據包時,解析所述opc數據包,并向所述客戶端工控設備返回響應數據。
如圖3所示,在本發明實現工控設備間opc通信的方法的一些實施例中,還包括:
s31、當接收的所述opc通訊數據包屬于所述第二預設數據包時,所述服務端工控設備通過所述客戶端工控設備的135端口,建立與所述客戶端工控設備之間的第三通信連接;
s32、所述服務端工控設備通過所述第三通信連接向所述客戶端工控設備發送dce/rpc數據包;
s33、所述服務端工控設備接收自所述客戶端工控設備針對所述dce/rpc數據包的響應數據包;
s34、當所述響應數據包包含客戶端動態端口信息時,所述服務端工控設備基于所述客戶端動態端口信息建立與所述客戶端工控設備之間的第四通信連接;
s35、所述服務端工控設備通過所述第四通信連接向所述客戶端工控設備發送opc通訊數據包。
在本發明實現工控設備間opc通信的方法的一些實施例中,還包括:當所述服務端工控設備與所述客戶端工控設備之間的通信結束之后,斷開所述第一通信連接至第四通信連接,以釋放所述服務端工控設備的135端口、所述客戶端工控設備的135端口、所述服務端動態端口和所述客戶端動態端口。
如圖4所示,在一些實施例中,在所述生成響應數據并反饋至所述服務端工控設備之前還包括:
s41、當通過所述dce/rpc數據包屬于bind類型時,確定所述bind類型的數據包所對應的接口的bind全局唯一標識符;
s42、查詢預先建立的接口管理字典,以確定是否包括所述bind全局唯一標識符;
s43、如果是,則組bind_ack包以生成響應報文,并在所述響應報文的是否支持接口字段填是;
s44、如果否,則組bind_ack包以生成響應報文,并在所述響應報文的是否支持接口字段填否。
本實施例中實現了對bind類型數據包的響應,能夠在判定接收到的數據包為bind類型時根據獲取的bind類型數據包的全局唯一標識符,并通過查詢預先建立的接口管理字典來確定是否支持opc設備所發送的bind類型的數據包的請求,如果是則組包為bind_ack包,并在數據包的是否支持字段填寫“是”,如果否則組包為bind_ack包,并在數據包的是否支持字段填寫“否”。
本實施例中的,接口管理字典存儲接口信息,所述接口信息至少包括:接口的全局唯一標識符值、接口的類型、接口的引用計數、全局唯一標識符常量標志、接口對應opc版本、接口是否支持標志、關聯的對象標識符、擁有者的全局唯一標識符、擁有者的全局唯一標識符類型、關聯的全局唯一標識符和關聯的全局唯一標識符類型中的一種或者多種。
接口管理字典是全局唯一的單根類,在提供opc客戶端和opc服務器中都有且僅有一個,用于存儲全部的以全局唯一標識符guid(globallyuniqueidentifier)為區分標志的接口信息。opc協議通過一系列接口提供服務,接口通過128位的全局唯一標識符guid進行區分,是一種由算法生成的二進制長度為128位的數字標識符,在以dce/rpc協議為基礎的opc協議中,ipid、uuid同guid都是同樣的數據、僅是語言表達定義不同。
為了識別和存儲接口信息,建立一個接口管理字典,接口管理字典中用一個map結構(在該數據結構中,key唯一不重復)存儲接口信息,每一個接口信息包括:接口的guid值、接口的類型、接口的引用計數、guid常量標志、接口對應opc版本、接口是否支持標志、關聯的oid、關聯的oxid、擁有者的guid、擁有者的guid類型、關聯的guid、關聯的guid類型。
接口管理字典的功能包括:
存儲dce/rpc及opcda規范中定義的,涉及opc協議通訊接口的guid值,以便在進行opc協議通訊過程中識別接口類型。例如,在收到bind類型數據幀的時候,根據數據幀中abstractsyntax結構的guid,去接口管理字典中查詢接口類型,確定該接口的支持狀態。
記錄在程序運行過程中動態生成的接口信息。例如,iremunknown2接口會在opc協議通訊的過程中被用來申請和釋放接口。iremunknown2接口的remqueryinterface方法用來申請接口,調用此方法時,需向接口管理字典中添加一個ipid對應的接口信息。iremunknown2接口的remrelease方法用來釋放接口,當調用此方法時,需要從本字典中刪除報文中要刪除ipid對應的接口信息。
在request數據幀的packetflags的object位為1的情況下,根據數據中objectuuid字段在接口管理字典中查詢對應的接口類型,為處理opc數據確定接口信息。
如圖5所示,在一些實施例中,在所述生成響應數據并反饋至所述服務端工控設備之前還包括:
s51、當通過所述dce/rpc數據包屬于alter類型時,確定所述alter類型的數據包所對應的接口的alter全局唯一標識符;
s52、查詢預先建立的接口管理字典,以確定是否包括所述alter全局唯一標識符;
s53、如果是,則組alter_ack包以生成響應報文,并在所述響應報文的是否支持接口字段填是;
s54、如果否,則組alter_ack包以生成響應報文,并在所述響應報文的是否支持接口字段填否。
本實施例中實現了對alter類型數據包的響應,能夠在判定接收到的數據包為alter類型時根據獲取的alter類型數據包的全局唯一標識符,并通過查詢預先建立的接口管理字典來確定是否支持opc設備所發送的alter類型的數據包的請求,如果是則組包為alter_ack包,并在數據包的是否支持字段填寫“是”,如果否則組包為alter_ack包,并在數據包的是否支持字段填寫“否”。
如圖6所示,在一些實施例中,在所述生成響應數據并反饋至所述服務端工控設備之前還包括:
s61、當所述dce/rpc數據包屬于request類型時,解析所述dce/rpc數據包的標志位信息以確定所述標志位信息的最高位是否為1;
s62、當確定所述標志位信息的最高位為1時,確定所述dce/rpc數據包的報文頭所包含的全局唯一標識符;
s63、查詢預先建立的接口管理字典以確定對應于所述全局唯一標識符的接口類型;
s64、根據確定的所述接口類型所對應的方法類型處理所述數據包所包含的數據部分以生成響應報文。
本實施例中,當接收到的數據包為request類型時,進一步判斷該數據包是否對應于isystemactivator接口的remotecreateinstance方法(當服務器訪問客戶端時,數據包對應于ioxidresolver接口的resolveoxid2方法),如果是,則獲取動態端口。
在一些實施例中,實現工控設備間opc通信的方法還包括:在所述服務端工控設備與所述客戶端工控設備之間通信之前建立數據存儲解析模型,所述數據存儲解析模型包括第一級存儲解析模型(standardopcserver)、第二級存儲解析模型(standardopcgroup)和第三級存儲解析模型(standardopcitem)。
如圖7所示為數據存儲解析模型的結構示意圖。
所述第一級存儲解析模型存儲有opc協議處理的相關接口對象,以及對所述第二級存儲解析模型的增加、刪除、修改、查詢的方法;
所述第二級存儲解析模型存儲有opc協議處理的相關接口對象,以及對所述第三級存儲解析模型的增加、刪除、修改、查詢的方法;
所述第三級存儲解析模型為opc協議中讀寫數據的最小單位。
在本實施例中第二級存儲解析模型(standardopcgroup)擁有的屬性主要包括:字符串名稱、激活標致、客戶端定義的最快的刷新頻率(單位為毫秒)、客戶端句柄、服務端句柄、死區參數、語言標記、時區數據。
standardopcitem作為opc協議讀寫數據的最小單位,擁有的屬性為:字符串名稱、值、時間戳、數據類型、數據質量、激活標志、客戶端句柄、服務端句柄、訪問權限、字符串id。
根據opc協議通訊,在對象standardopcserver、standardopcgroup中分別創建相關接口的同名接口對象,為數據解析使用,這些接口對象在opcda中給予了接口、輸入參數、輸出參數定義說明。在非windows系統環境下,根據報文一問一答的形式(客戶端和服務端通訊的一般形式),分別實現了他們的方法,一個方法對應四個函數。例如,iopcserver的addgroup方法,為了提供客戶端的功能,build+方法+request的函數為組織請求報文的函數,process+方法名+response為解析收到響應數據的函數。為了提供服務端的功能,process+方法+request的函數為解析請求報文的函數,build+方法名+response為根據請求生成響應數據的函數。
在一些實施例中,所述opc服務器中包括地址空間對象模型,所述地址空間對象模型包括層次化地址空間模型和扁平化地址空間模型。
opc服務器中存儲有一個standardopcitem(簡稱item)列表,該item列表包含服務器的全部item,服務器需要構造一個地址空間,以支持客戶端通過標準的iopcbrowseserveraddressspace接口進行瀏覽查詢所有的item。
地址空間的構建可以分為兩種類型:層次化地址空間和扁平化地址空間。地址空間對象模型結構主要實現了把item的字符串id(例如,a.b.c、peoplecount)和item數據類型(opc傳輸支持的一些數據類型)添加到地址空間對象模型中,地址空間對象模型中包含一個map和一個list存儲結構(map中存儲key-value鍵值對,key不允許重復;list中為value序列化數據,可重復)。map中的key為字符串,元素為子地址空間對象模型的指針,主要用在構建層次化地址空間。list結構在兩種地址空間模型中都要使用。
層次化地址空間構造的原型是樹,整個地址空間為一顆倒著的樹,每一個item的字符串id,為一個包含或不包含“.”的字符串,如果字符串不包含“.”,則該item信息作為根的葉子,否則,該字符串中包含樹干。例如,item的字符串id為a.b,則a為根上的樹干,b為a樹干上的葉子。樹干是以一個子地址空間的形式展現的,可以再包含樹干或葉子,但是一個樹干不能既沒有樹干也沒有葉子。因此,利用循環遞歸的概念,當item的字符串id包含“.”,以“.”作為分隔符,以第一個“.”前的字符串為key,創建子地址空間對象模型,添加到上一級地址空間對象模型的map中,并將“.”后的子字符串作為輸入,由剛才創建的子地址空間模型對象調用,重復檢測剩下的字符串中是否包含點,如果包含點,重復上述的流程,如果不包含點,創建子字符串和數據類型組成的iteminfostruct,并添加到該地址空間對象模型的list列表中。
扁平化地址空間,直接將item的id作為key,和item的數據類型一起組成iteminfostruct,并添加到根地址空間對象模型的list列表中。
在一些實施例中,實現工控設備間opc通信的方法還包括:
在所述服務端工控設備與所述客戶端工控設備之間通信過程中,客戶端工控設備按照預設周期ping所述請求端;
當所述客戶端工控設備連續三次未接收到所述服務端工控設備對ping消息的響應時,釋放所述客戶端工控設備與所述服務端工控設備之間的連接所占用的資源。
本實施例中,opc通訊時,服務端工控設備和客戶端工控設備必須周期性地“ping”對方,以便保證客戶與對象一直處于連接狀態,達到心跳的效果。根據ping機制和ping集合的概念,ping處理器創建對應的ping處理線程,通過ioxidresolver接口的complexping和simpleping方法,進行連接狀態的監測。根據ioxidresolver接口的complexping進行ping集合的創建(oid添加)和刪除(oid刪除),simpleping方法根據complexping添加返回的ping集合的id,進行每2分鐘一次的數據通訊心跳檢測工作(發送ping報文,解析響應報文),如果連續3次ping不成功(不能連接、ping沒有響應或ping的返回結果錯誤),則釋放相關連接上的資源,包括釋放standardopcserver、standardopcgroup、standardopcitem模型,刪除結構管理字典中相關接口信息,及停止相關數據通訊和ping線程。
需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作合并,但是本領域技術人員應該知悉,本發明并不受所描述的動作順序的限制,因為依據本發明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優選實施例,所涉及的動作和模塊并不一定是本發明所必須的。
在上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
另一方面,本發明實施例提供一種計算機可讀存儲介質,所述存儲介質中存儲有一個或多個包括執行指令的程序,所述執行指令能夠被電子設備(包括但不限于計算機,服務器,或者網絡設備等)讀取并執行,以用于執行上述方法實施例中的相關步驟,例如:
服務端工控設備根據通過135端口接收到自客戶端工控設備的連接請求時,建立與所述客戶端工控設備之間的第一通信連接;
當所述服務端工控設備通過所述第一通信連接接收自所述客戶端工控設備的dce/rpc數據包不屬于第一預設數據包時,生成響應數據并反饋至所述服務端工控設備。
另一方面,本發明實施例還公開一種電子設備,其包括:
至少一個處理器,以及
與所述至少一個處理器通信連接的存儲器,其中,所述存儲器存儲有可被所述至少一個處理器執行的指令,所述指令被所述至少一個處理器執行,以使所述至少一個處理器能夠執行:
服務端工控設備根據通過135端口接收到自客戶端工控設備的連接請求時,建立與所述客戶端工控設備之間的第一通信連接;
當所述服務端工控設備通過所述第一通信連接接收自所述客戶端工控設備的dce/rpc數據包不屬于第一預設數據包時,生成響應數據并反饋至所述服務端工控設備。
圖8是本申請另一實施例提供的執行實現工控設備間opc通信的方法的電子設備的硬件結構示意圖,如圖8所示,該設備包括:
一個或多個處理器810以及存儲器820,圖8中以一個處理器810為例。
執行實現工控設備間opc通信的方法的設備還可以包括:輸入裝置830和輸出裝置840。
處理器810、存儲器820、輸入裝置830和輸出裝置840可以通過總線或者其他方式連接,圖8中以通過總線連接為例。
存儲器820作為一種非易失性計算機可讀存儲介質,可用于存儲非易失性軟件程序、非易失性計算機可執行程序以及模塊,如本申請實施例中的實現工控設備間opc通信的方法對應的程序指令/模塊。處理器810通過運行存儲在存儲器820中的非易失性軟件程序、指令以及模塊,從而執行服務器的各種功能應用以及數據處理,即實現上述方法實施例實現工控設備間opc通信的方法。
存儲器820可以包括存儲程序區和存儲數據區,其中,存儲程序區可存儲操作系統、至少一個功能所需要的應用程序;存儲數據區可存儲根據實現工控設備間opc通信的裝置的使用所創建的數據等。此外,存儲器820可以包括高速隨機存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他非易失性固態存儲器件。在一些實施例中,存儲器820可選包括相對于處理器810遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至實現工控設備間opc通信的裝置。上述網絡的實例包括但不限于互聯網、企業內部網、局域網、移動通信網及其組合。
輸入裝置830可接收輸入的數字或字符信息,以及產生與實現工控設備間opc通信的裝置的用戶設置以及功能控制有關的信號。輸出裝置840可包括顯示屏等顯示設備。
所述一個或者多個模塊存儲在所述存儲器820中,當被所述一個或者多個處理器810執行時,執行上述任意方法實施例中的實現工控設備間opc通信的方法。
上述產品可執行本申請實施例所提供的方法,具備執行方法相應的功能模塊和有益效果。未在本實施例中詳盡描述的技術細節,可參見本申請實施例所提供的方法。
以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部模塊來實現本實施例方案的目的。
通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到各實施方式可借助軟件加通用硬件平臺的方式來實現,當然也可以通過硬件。基于這樣的理解,上述技術方案本質上或者說對相關技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品可以存儲在計算機可讀存儲介質中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行各個實施例或者實施例的某些部分所述的方法。
最后應說明的是:以上實施例僅用以說明本申請的技術方案,而非對其限制;盡管參照前述實施例對本申請進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本申請各實施例技術方案的精神和范圍。