本發明涉及工業安全技術領域,尤其涉及一種實現工控設(she)備間opc通信的(de)方法。
背景技術:
opc協議(yi)(yi)(oleforprocesscontrol)是基于微軟(ruan)的(de)(de)ole/com機制在應用層協議(yi)(yi)dce/rpc(distributedcomputingenvironment/remoteprocedurecalls)之上傳(chuan)輸數(shu)據(ju)的(de)(de)通訊標(biao)準,以c/s(客戶端(duan)和服(fu)務器)架構實現,主(zhu)要用于工業生(sheng)產過程中(zhong)的(de)(de)數(shu)據(ju)采集和邏(luo)輯控(kong)制。工業環境中(zhong)各(ge)(ge)種(zhong)設(she)(she)備(bei)種(zhong)類(lei)繁多(duo),各(ge)(ge)大廠商的(de)(de)設(she)(she)備(bei)和軟(ruan)件之間需要一種(zhong)通用的(de)(de)數(shu)據(ju)交換方式(shi),opc協議(yi)(yi)定義了(le)一套標(biao)準的(de)(de)接口和方法(fa),各(ge)(ge)大設(she)(she)備(bei)和軟(ruan)件廠商也(ye)都基于微軟(ruan)的(de)(de)ole/com技術提供了(le)對opc協議(yi)(yi)的(de)(de)支持。
但是(shi),隨(sui)著全(quan)球化發(fa)展的(de)(de)(de)(de)(de)進(jin)(jin)(jin)一(yi)步(bu)加(jia)快(kuai),工業(ye)發(fa)展的(de)(de)(de)(de)(de)過程中,工業(ye)現場使用(yong)(yong)(yong)(yong)的(de)(de)(de)(de)(de)設備(bei)和軟(ruan)件(jian)來自(zi)于(yu)世界各(ge)個國(guo)家(jia),這其中極有可能出現通過設備(bei)或軟(ruan)件(jian)來竊取國(guo)家(jia)工業(ye)生產信(xin)息的(de)(de)(de)(de)(de)行(xing)(xing)為,所(suo)以在一(yi)些(xie)關鍵(jian)的(de)(de)(de)(de)(de)、關系(xi)(xi)(xi)(xi)(xi)國(guo)家(jia)安全(quan)的(de)(de)(de)(de)(de)工業(ye)領域,會禁止使用(yong)(yong)(yong)(yong)某些(xie)軟(ruan)件(jian)或系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong),例如(ru)(ru),國(guo)家(jia)的(de)(de)(de)(de)(de)某些(xie)電力生產系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong)中就禁止使用(yong)(yong)(yong)(yong)windows系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong)。工業(ye)生產中需(xu)要采集各(ge)種設備(bei)的(de)(de)(de)(de)(de)數據(ju)信(xin)息進(jin)(jin)(jin)行(xing)(xing)集中展現,例如(ru)(ru),公司的(de)(de)(de)(de)(de)erp(enterpriseresourceplanning)系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong)要集中展現生產環境的(de)(de)(de)(de)(de)數據(ju),這種情(qing)況就需(xu)要erp系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong)對(dui)各(ge)種設備(bei)進(jin)(jin)(jin)行(xing)(xing)直(zhi)接(jie)的(de)(de)(de)(de)(de)數據(ju)訪問,如(ru)(ru)果需(xu)要對(dui)僅(jin)支(zhi)(zhi)(zhi)持(chi)opc協議(yi)(yi)(yi)的(de)(de)(de)(de)(de)設備(bei)進(jin)(jin)(jin)行(xing)(xing)數據(ju)通訊,就要erp系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong)所(suo)部(bu)署的(de)(de)(de)(de)(de)操(cao)作系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong)支(zhi)(zhi)(zhi)持(chi)opc協議(yi)(yi)(yi),就目(mu)前而(er)言只有微軟(ruan)的(de)(de)(de)(de)(de)windows操(cao)作系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong)支(zhi)(zhi)(zhi)持(chi)了opc協議(yi)(yi)(yi),linux操(cao)作系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong)不(bu)支(zhi)(zhi)(zhi)持(chi)opc協議(yi)(yi)(yi)。因此,對(dui)于(yu)不(bu)允許使用(yong)(yong)(yong)(yong)windows系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong)或僅(jin)使用(yong)(yong)(yong)(yong)了linux操(cao)作系(xi)(xi)(xi)(xi)(xi)統(tong)(tong)(tong)的(de)(de)(de)(de)(de)環境中,無(wu)法與(yu)支(zhi)(zhi)(zhi)持(chi)opc協議(yi)(yi)(yi)的(de)(de)(de)(de)(de)設備(bei)進(jin)(jin)(jin)行(xing)(xing)數據(ju)通訊,限制了設備(bei)的(de)(de)(de)(de)(de)使用(yong)(yong)(yong)(yong)。
技術實現要素:
本(ben)發明實施例提供一種(zhong)實現工控設備(bei)間(jian)opc通信的方法(fa),用于至少解決上述技術問題之一。
第一(yi)方(fang)(fang)(fang)面(mian),本發明實施例(li)提供一(yi)種實現工(gong)控(kong)設備間opc通信的(de)方(fang)(fang)(fang)法,所(suo)述工(gong)控(kong)設備包(bao)括(kuo)服務端(duan)工(gong)控(kong)設備和客戶端(duan)工(gong)控(kong)設備,所(suo)述工(gong)控(kong)設備搭載(zai)有(you)不兼容opc協議的(de)操作系統(tong),所(suo)述方(fang)(fang)(fang)法包(bao)括(kuo):
服務端(duan)工控(kong)(kong)設備根據通(tong)過135端(duan)口接收到(dao)自客(ke)戶(hu)端(duan)工控(kong)(kong)設備的(de)連接請求時(shi),建立與所(suo)述客(ke)戶(hu)端(duan)工控(kong)(kong)設備之間的(de)第(di)一通(tong)信連接;
當所(suo)述(shu)(shu)服(fu)務(wu)端(duan)工(gong)控設備通過所(suo)述(shu)(shu)第一通信連接接收自所(suo)述(shu)(shu)客戶端(duan)工(gong)控設備的dce/rpc數(shu)據(ju)包不屬(shu)于第一預(yu)設數(shu)據(ju)包時,生成響應數(shu)據(ju)并反饋(kui)至(zhi)所(suo)述(shu)(shu)服(fu)務(wu)端(duan)工(gong)控設備。
第二方面,本發明實(shi)施例提供一(yi)(yi)種(zhong)計算機(ji)可讀存(cun)儲介質,所(suo)述(shu)存(cun)儲介質中存(cun)儲有一(yi)(yi)個或(huo)多個包(bao)括執(zhi)(zhi)行指令的程序,所(suo)述(shu)執(zhi)(zhi)行指令能夠被電子設(she)備(包(bao)括但不限于計算機(ji),服(fu)務器,或(huo)者網絡設(she)備等(deng))讀取(qu)并執(zhi)(zhi)行,以(yi)用(yong)于執(zhi)(zhi)行本發明上述(shu)任一(yi)(yi)項實(shi)現工控設(she)備間opc通信(xin)的方法。
第四方面(mian),提(ti)供(gong)一種電子設備,其(qi)包括:至(zhi)少(shao)(shao)一個處(chu)理器(qi),以及與所述(shu)(shu)(shu)至(zhi)少(shao)(shao)一個處(chu)理器(qi)通(tong)信連接的(de)存(cun)儲器(qi),其(qi)中,所述(shu)(shu)(shu)存(cun)儲器(qi)存(cun)儲有可(ke)被(bei)所述(shu)(shu)(shu)至(zhi)少(shao)(shao)一個處(chu)理器(qi)執(zhi)行(xing)的(de)指(zhi)(zhi)令,所述(shu)(shu)(shu)指(zhi)(zhi)令被(bei)所述(shu)(shu)(shu)至(zhi)少(shao)(shao)一個處(chu)理器(qi)執(zhi)行(xing),以使所述(shu)(shu)(shu)至(zhi)少(shao)(shao)一個處(chu)理器(qi)能夠執(zhi)行(xing)本發明(ming)上述(shu)(shu)(shu)任一項實現工控設備間opc通(tong)信的(de)方法。
第(di)五方(fang)面,本發明(ming)實施例還提供一(yi)種計算(suan)(suan)機(ji)(ji)程(cheng)序(xu)(xu)產(chan)品,所述計算(suan)(suan)機(ji)(ji)程(cheng)序(xu)(xu)產(chan)品包括存儲在(zai)計算(suan)(suan)機(ji)(ji)可讀存儲介質上的計算(suan)(suan)機(ji)(ji)程(cheng)序(xu)(xu),所述計算(suan)(suan)機(ji)(ji)程(cheng)序(xu)(xu)包括程(cheng)序(xu)(xu)指令(ling),當所述程(cheng)序(xu)(xu)指令(ling)被計算(suan)(suan)機(ji)(ji)執(zhi)(zhi)行時,使所述計算(suan)(suan)機(ji)(ji)執(zhi)(zhi)行上述任一(yi)項(xiang)實現工(gong)控設(she)備間opc通信的方(fang)法。
本(ben)發明(ming)(ming)實施例(li)(li)中,實現了(le)服務端工控設(she)備與客戶端工控設(she)備之間的(de)opc通(tong)信。從而(er)通(tong)過采(cai)用本(ben)發明(ming)(ming)實施例(li)(li)的(de)方法避免了(le)某(mou)些特殊領域采(cai)用windows系統而(er)可能存在的(de)安全隱患,同時(shi)還能夠保證與支持(chi)opc協議的(de)設(she)備之間的(de)兼容性。
附圖說明
為了更(geng)清楚地(di)說明(ming)本(ben)(ben)發明(ming)實(shi)施(shi)例(li)(li)的(de)技術(shu)方案,下(xia)面將對(dui)實(shi)施(shi)例(li)(li)描述中所需要使用的(de)附(fu)(fu)圖(tu)(tu)作一(yi)簡單地(di)介紹,顯(xian)而易見地(di),下(xia)面描述中的(de)附(fu)(fu)圖(tu)(tu)是本(ben)(ben)發明(ming)的(de)一(yi)些實(shi)施(shi)例(li)(li),對(dui)于(yu)本(ben)(ben)領(ling)域普通技術(shu)人員來講,在不付出創造性勞(lao)動的(de)前提下(xia),還可以根據這些附(fu)(fu)圖(tu)(tu)獲得其他的(de)附(fu)(fu)圖(tu)(tu)。
圖1為本(ben)發明的實現工控設備(bei)間(jian)opc通信(xin)的方法一實施(shi)方式的流(liu)程圖;
圖2為本(ben)發明(ming)的實現(xian)工控設備間opc通信的方(fang)(fang)法的另(ling)一(yi)實施(shi)方(fang)(fang)式的流程圖;
圖3為本發明的(de)實現(xian)工控(kong)設備間opc通信的(de)方法的(de)又一實施(shi)方式的(de)流(liu)程圖;
圖(tu)4為本發明的(de)實(shi)現工控設(she)備間opc通信的(de)方(fang)法(fa)的(de)又一實(shi)施方(fang)式的(de)流程圖(tu);
圖5為本發明的(de)實(shi)現工控設(she)備間opc通信的(de)方(fang)法(fa)的(de)又一實(shi)施方(fang)式的(de)流程圖;
圖6為(wei)本發明的實(shi)現工(gong)控設備間opc通信的方法的又一實(shi)施(shi)方式的流程圖;
圖7為本發明實施例中的數據(ju)存儲解析模型的結構示意圖;
圖8為本(ben)發(fa)明的電子(zi)設備的一(yi)實施(shi)例的結構(gou)示意圖。
具體實施方式
為(wei)使本發(fa)(fa)明(ming)實(shi)施(shi)(shi)例(li)(li)(li)(li)的(de)(de)(de)(de)目的(de)(de)(de)(de)、技術(shu)方(fang)案和優點更(geng)加清楚(chu)(chu),下(xia)面將結合本發(fa)(fa)明(ming)實(shi)施(shi)(shi)例(li)(li)(li)(li)中(zhong)的(de)(de)(de)(de)附圖,對本發(fa)(fa)明(ming)實(shi)施(shi)(shi)例(li)(li)(li)(li)中(zhong)的(de)(de)(de)(de)技術(shu)方(fang)案進行(xing)清楚(chu)(chu)、完整地描(miao)述,顯然(ran),所描(miao)述的(de)(de)(de)(de)實(shi)施(shi)(shi)例(li)(li)(li)(li)是本發(fa)(fa)明(ming)一部分實(shi)施(shi)(shi)例(li)(li)(li)(li),而不是全部的(de)(de)(de)(de)實(shi)施(shi)(shi)例(li)(li)(li)(li)。基于本發(fa)(fa)明(ming)中(zhong)的(de)(de)(de)(de)實(shi)施(shi)(shi)例(li)(li)(li)(li),本領域普通技術(shu)人(ren)員在沒有(you)作出創造(zao)性(xing)勞動前(qian)提下(xia)所獲得的(de)(de)(de)(de)所有(you)其他實(shi)施(shi)(shi)例(li)(li)(li)(li),都屬(shu)于本發(fa)(fa)明(ming)保(bao)護的(de)(de)(de)(de)范圍。需要說明(ming)的(de)(de)(de)(de)是,在不沖突(tu)的(de)(de)(de)(de)情況下(xia),本申(shen)請中(zhong)的(de)(de)(de)(de)實(shi)施(shi)(shi)例(li)(li)(li)(li)及實(shi)施(shi)(shi)例(li)(li)(li)(li)中(zhong)的(de)(de)(de)(de)特(te)征可以相互(hu)組合。
本發明可(ke)以在由(you)(you)計算(suan)機(ji)執行的(de)計算(suan)機(ji)可(ke)執行指令的(de)一般上(shang)下文中描述,例(li)如程(cheng)序(xu)模塊(kuai)(kuai)。一般地,程(cheng)序(xu)模塊(kuai)(kuai)包括執行特定任務或(huo)實(shi)現(xian)特定抽象數據類型的(de)例(li)程(cheng)、程(cheng)序(xu)、對象、元件、數據結構等等。也可(ke)以在分布式(shi)(shi)計算(suan)環境中實(shi)踐本發明,在這些(xie)分布式(shi)(shi)計算(suan)環境中,由(you)(you)通(tong)(tong)過通(tong)(tong)信網絡而(er)被連接的(de)遠(yuan)程(cheng)處(chu)理設備來執行任務。在分布式(shi)(shi)計算(suan)環境中,程(cheng)序(xu)模塊(kuai)(kuai)可(ke)以位于包括存儲設備在內的(de)本地和遠(yuan)程(cheng)計算(suan)機(ji)存儲介質中。
在(zai)本(ben)(ben)(ben)發明(ming)中(zhong),運行(xing)于服務器(qi)上(shang)的(de)應用(yong)程(cheng)(cheng)序或(huo)(huo)(huo)腳本(ben)(ben)(ben)程(cheng)(cheng)序、服務器(qi)都可(ke)以(yi)(yi)是元件(jian)。一(yi)(yi)個(ge)或(huo)(huo)(huo)多個(ge)元件(jian)可(ke)在(zai)執行(xing)的(de)過程(cheng)(cheng)和(he)/或(huo)(huo)(huo)線(xian)程(cheng)(cheng)中(zhong),并且元件(jian)可(ke)以(yi)(yi)在(zai)一(yi)(yi)臺(tai)(tai)計(ji)算機(ji)上(shang)本(ben)(ben)(ben)地化和(he)/或(huo)(huo)(huo)分(fen)布在(zai)兩臺(tai)(tai)或(huo)(huo)(huo)多臺(tai)(tai)計(ji)算機(ji)之間,并可(ke)以(yi)(yi)由各種計(ji)算機(ji)可(ke)讀介(jie)質(zhi)運行(xing)。元件(jian)還(huan)可(ke)以(yi)(yi)根(gen)據(ju)具有一(yi)(yi)個(ge)或(huo)(huo)(huo)多個(ge)數(shu)據(ju)包的(de)信(xin)號(hao),例如,來(lai)(lai)自一(yi)(yi)個(ge)與(yu)本(ben)(ben)(ben)地系(xi)統(tong)、分(fen)布式系(xi)統(tong)中(zhong)另(ling)一(yi)(yi)元件(jian)交(jiao)互的(de),和(he)/或(huo)(huo)(huo)在(zai)因特網的(de)網絡通(tong)過信(xin)號(hao)與(yu)其它系(xi)統(tong)交(jiao)互的(de)數(shu)據(ju)的(de)信(xin)號(hao)通(tong)過本(ben)(ben)(ben)地和(he)/或(huo)(huo)(huo)遠程(cheng)(cheng)過程(cheng)(cheng)來(lai)(lai)進行(xing)通(tong)信(xin)。
最后(hou),還(huan)需(xu)要(yao)說(shuo)明(ming)的(de)是,在(zai)本文中(zhong),諸如(ru)第一(yi)和(he)第二(er)等之(zhi)類的(de)關(guan)系術(shu)語(yu)僅僅用來將一(yi)個實(shi)體或(huo)(huo)者(zhe)(zhe)操(cao)作(zuo)與另一(yi)個實(shi)體或(huo)(huo)操(cao)作(zuo)區(qu)分開來,而不一(yi)定要(yao)求或(huo)(huo)者(zhe)(zhe)暗示這些實(shi)體或(huo)(huo)操(cao)作(zuo)之(zhi)間存(cun)在(zai)任何這種(zhong)實(shi)際(ji)的(de)關(guan)系或(huo)(huo)者(zhe)(zhe)順序。而且(qie),術(shu)語(yu)“包(bao)括(kuo)”、“包(bao)含”,不僅包(bao)括(kuo)那些要(yao)素(su),而且(qie)還(huan)包(bao)括(kuo)沒有(you)(you)明(ming)確列出的(de)其他要(yao)素(su),或(huo)(huo)者(zhe)(zhe)是還(huan)包(bao)括(kuo)為這種(zhong)過(guo)程、方(fang)法、物品(pin)或(huo)(huo)者(zhe)(zhe)設(she)備(bei)所固有(you)(you)的(de)要(yao)素(su)。在(zai)沒有(you)(you)更(geng)多限制的(de)情況下,由語(yu)句“包(bao)括(kuo)……”限定的(de)要(yao)素(su),并(bing)不排除在(zai)包(bao)括(kuo)所述要(yao)素(su)的(de)過(guo)程、方(fang)法、物品(pin)或(huo)(huo)者(zhe)(zhe)設(she)備(bei)中(zhong)還(huan)存(cun)在(zai)另外的(de)相同要(yao)素(su)。
如(ru)圖1所(suo)示,本發明(ming)的(de)(de)一實(shi)施例(li)的(de)(de)實(shi)現工(gong)控(kong)設(she)備間(jian)opc通信(xin)的(de)(de)方法,所(suo)述(shu)工(gong)控(kong)設(she)備搭載有不兼容opc協議的(de)(de)操作系統,所(suo)述(shu)工(gong)控(kong)設(she)備包括服(fu)務端(duan)工(gong)控(kong)設(she)備和客戶端(duan)工(gong)控(kong)設(she)備,所(suo)述(shu)方法包括:
s11、服務端(duan)工控設(she)備根據通過(guo)135端(duan)口接(jie)收(shou)到自(zi)客戶端(duan)工控設(she)備的連(lian)接(jie)請求時(shi),建立與所述(shu)客戶端(duan)工控設(she)備之間的第一通信連(lian)接(jie);
s12、當所述(shu)(shu)服務(wu)端工控(kong)設備(bei)通過所述(shu)(shu)第一通信連接(jie)接(jie)收(shou)自所述(shu)(shu)客戶(hu)端工控(kong)設備(bei)的dce/rpc數(shu)據包不屬(shu)于第一預(yu)設數(shu)據包時,生成(cheng)響(xiang)應數(shu)據并反饋(kui)至所述(shu)(shu)服務(wu)端工控(kong)設備(bei)。
本發明實施例中(zhong),本實施例中(zhong)的(de)(de)(de)工(gong)控系(xi)統所(suo)搭載的(de)(de)(de)操作(zuo)(zuo)系(xi)統可(ke)以是(shi)linux操作(zuo)(zuo)系(xi)統或者是(shi)unix操作(zuo)(zuo)系(xi)統。實現了(le)服務端工(gong)控設(she)備(bei)(bei)與客戶端工(gong)控設(she)備(bei)(bei)之間(jian)的(de)(de)(de)通(tong)信。從而通(tong)過采用(yong)本發明實施例的(de)(de)(de)方(fang)法避免(mian)了(le)某些(xie)特殊(shu)領(ling)域(yu)采用(yong)windows系(xi)統而可(ke)能存在(zai)的(de)(de)(de)安全隱患,同時還能夠保證與支持(chi)opc協議的(de)(de)(de)設(she)備(bei)(bei)之間(jian)的(de)(de)(de)兼容性(xing)。執行本發明上述實施例的(de)(de)(de)執行主體可(ke)以為工(gong)控設(she)備(bei)(bei),并且所(suo)述工(gong)控設(she)備(bei)(bei)可(ke)以是(shi)單個(ge)設(she)備(bei)(bei)也可(ke)以是(shi)設(she)備(bei)(bei)群組。
如圖2所(suo)示,在本(ben)發明(ming)實(shi)現工控(kong)設備間(jian)opc通信的方法的一些實(shi)施例中,還(huan)包(bao)括:
s21、當接收的(de)所(suo)述(shu)dce/rpc數據(ju)包屬于所(suo)述(shu)第一預設數據(ju)包時,獲(huo)取服務端(duan)(duan)動態端(duan)(duan)口;
s22、所述(shu)服務(wu)端(duan)(duan)工控設備(bei)基于所述(shu)服務(wu)端(duan)(duan)動(dong)態端(duan)(duan)口(kou)創建tcp服務(wu),并(bing)將(jiang)所述(shu)服務(wu)端(duan)(duan)動(dong)態端(duan)(duan)口(kou)號發送至所述(shu)客戶(hu)端(duan)(duan)工控設備(bei);
s23、當(dang)所述(shu)服務端(duan)工(gong)(gong)控(kong)設備接收到自所述(shu)客戶端(duan)工(gong)(gong)控(kong)設備發(fa)送的與所述(shu)服務端(duan)動態端(duan)口建(jian)立連接的tcp連接請(qing)求時,建(jian)立與所述(shu)客戶端(duan)工(gong)(gong)控(kong)設備之間的第二通信連接;
s24、所述(shu)服務端工控設備通(tong)過所述(shu)第二通(tong)信連接(jie)接(jie)收自所述(shu)客戶端工控設備的(de)opc通(tong)訊數據包;
s25、當(dang)接(jie)收的所(suo)述opc通訊(xun)數(shu)據(ju)(ju)包不屬于第二(er)預設數(shu)據(ju)(ju)包時,解析所(suo)述opc數(shu)據(ju)(ju)包,并向所(suo)述客戶端(duan)工控設備(bei)返回響應數(shu)據(ju)(ju)。
如圖3所(suo)示(shi),在本發明實現工控(kong)設備間opc通信的(de)方法的(de)一些實施例中,還包括:
s31、當接(jie)收的(de)(de)所(suo)述(shu)opc通(tong)訊數據包屬于所(suo)述(shu)第(di)二預(yu)設(she)數據包時,所(suo)述(shu)服(fu)務端(duan)工控設(she)備通(tong)過所(suo)述(shu)客(ke)戶端(duan)工控設(she)備的(de)(de)135端(duan)口,建立與所(suo)述(shu)客(ke)戶端(duan)工控設(she)備之間的(de)(de)第(di)三通(tong)信(xin)連接(jie);
s32、所述服務端工控設(she)(she)備通過所述第三通信連接向所述客戶端工控設(she)(she)備發(fa)送dce/rpc數據包;
s33、所述服務端工(gong)控設備(bei)接收自所述客戶端工(gong)控設備(bei)針對所述dce/rpc數(shu)據包的響應數(shu)據包;
s34、當所(suo)述(shu)響應數據包包含客(ke)戶端動(dong)(dong)態(tai)端口(kou)信(xin)(xin)息時,所(suo)述(shu)服務端工控(kong)設(she)(she)備基于所(suo)述(shu)客(ke)戶端動(dong)(dong)態(tai)端口(kou)信(xin)(xin)息建立與所(suo)述(shu)客(ke)戶端工控(kong)設(she)(she)備之間的第(di)四通信(xin)(xin)連接;
s35、所(suo)述服(fu)務端工控設(she)備通過(guo)所(suo)述第四通信連接向所(suo)述客戶端工控設(she)備發(fa)送opc通訊(xun)數(shu)據包。
在本發明實(shi)現工(gong)控設(she)備(bei)(bei)間opc通信(xin)(xin)的(de)(de)方法(fa)的(de)(de)一些實(shi)施例中,還包括:當所述(shu)(shu)(shu)服(fu)務(wu)端(duan)工(gong)控設(she)備(bei)(bei)與(yu)所述(shu)(shu)(shu)客戶(hu)端(duan)工(gong)控設(she)備(bei)(bei)之間的(de)(de)通信(xin)(xin)結束之后,斷開(kai)所述(shu)(shu)(shu)第(di)一通信(xin)(xin)連(lian)接至第(di)四通信(xin)(xin)連(lian)接,以(yi)釋放所述(shu)(shu)(shu)服(fu)務(wu)端(duan)工(gong)控設(she)備(bei)(bei)的(de)(de)135端(duan)口(kou)、所述(shu)(shu)(shu)客戶(hu)端(duan)工(gong)控設(she)備(bei)(bei)的(de)(de)135端(duan)口(kou)、所述(shu)(shu)(shu)服(fu)務(wu)端(duan)動態端(duan)口(kou)和所述(shu)(shu)(shu)客戶(hu)端(duan)動態端(duan)口(kou)。
如圖(tu)4所示,在一些(xie)實施例(li)中,在所述生(sheng)成響應數(shu)據并反饋至所述服(fu)務端(duan)工控設備之(zhi)前還(huan)包括:
s41、當通過所(suo)述(shu)dce/rpc數據包(bao)屬于bind類型(xing)(xing)時(shi),確定所(suo)述(shu)bind類型(xing)(xing)的(de)(de)數據包(bao)所(suo)對(dui)應的(de)(de)接口的(de)(de)bind全局唯一標識符;
s42、查(cha)詢預先建立(li)的(de)接口管理字(zi)典,以確定是否包括所(suo)述bind全局唯一標識符;
s43、如果是,則組bind_ack包以生(sheng)成響應報文(wen),并在(zai)所(suo)述響應報文(wen)的是否支持接口字段(duan)填(tian)是;
s44、如果否(fou),則組bind_ack包以(yi)生成(cheng)響(xiang)應(ying)報文(wen),并在所(suo)述(shu)響(xiang)應(ying)報文(wen)的是否(fou)支持(chi)接口字段填否(fou)。
本(ben)實施例中實現了(le)對(dui)bind類型數(shu)(shu)(shu)據(ju)(ju)包(bao)(bao)(bao)(bao)的(de)響(xiang)應,能夠在(zai)判定接收到的(de)數(shu)(shu)(shu)據(ju)(ju)包(bao)(bao)(bao)(bao)為bind類型時根(gen)據(ju)(ju)獲取(qu)的(de)bind類型數(shu)(shu)(shu)據(ju)(ju)包(bao)(bao)(bao)(bao)的(de)全局(ju)唯一標識符,并通過查詢(xun)預先建立(li)的(de)接口管理字(zi)典來確定是否(fou)(fou)(fou)支持opc設(she)備所(suo)發(fa)送的(de)bind類型的(de)數(shu)(shu)(shu)據(ju)(ju)包(bao)(bao)(bao)(bao)的(de)請求,如(ru)果是則組包(bao)(bao)(bao)(bao)為bind_ack包(bao)(bao)(bao)(bao),并在(zai)數(shu)(shu)(shu)據(ju)(ju)包(bao)(bao)(bao)(bao)的(de)是否(fou)(fou)(fou)支持字(zi)段填寫“是”,如(ru)果否(fou)(fou)(fou)則組包(bao)(bao)(bao)(bao)為bind_ack包(bao)(bao)(bao)(bao),并在(zai)數(shu)(shu)(shu)據(ju)(ju)包(bao)(bao)(bao)(bao)的(de)是否(fou)(fou)(fou)支持字(zi)段填寫“否(fou)(fou)(fou)”。
本實施例(li)中的(de)(de),接(jie)口(kou)管理(li)字(zi)典存儲接(jie)口(kou)信(xin)息(xi),所述接(jie)口(kou)信(xin)息(xi)至(zhi)少包(bao)括(kuo):接(jie)口(kou)的(de)(de)全局唯(wei)(wei)一(yi)標(biao)(biao)識(shi)符(fu)(fu)值、接(jie)口(kou)的(de)(de)類型、接(jie)口(kou)的(de)(de)引(yin)用計數、全局唯(wei)(wei)一(yi)標(biao)(biao)識(shi)符(fu)(fu)常(chang)量(liang)標(biao)(biao)志(zhi)、接(jie)口(kou)對(dui)應opc版本、接(jie)口(kou)是否支持(chi)標(biao)(biao)志(zhi)、關聯的(de)(de)對(dui)象標(biao)(biao)識(shi)符(fu)(fu)、擁有者(zhe)的(de)(de)全局唯(wei)(wei)一(yi)標(biao)(biao)識(shi)符(fu)(fu)、擁有者(zhe)的(de)(de)全局唯(wei)(wei)一(yi)標(biao)(biao)識(shi)符(fu)(fu)類型、關聯的(de)(de)全局唯(wei)(wei)一(yi)標(biao)(biao)識(shi)符(fu)(fu)和關聯的(de)(de)全局唯(wei)(wei)一(yi)標(biao)(biao)識(shi)符(fu)(fu)類型中的(de)(de)一(yi)種或者(zhe)多種。
接口(kou)(kou)管理字(zi)典是全(quan)局唯(wei)一的(de)(de)單根類,在(zai)提(ti)供opc客戶端和(he)opc服務(wu)器中都(dou)(dou)有且(qie)僅有一個,用于(yu)存儲全(quan)部的(de)(de)以全(quan)局唯(wei)一標(biao)識(shi)(shi)符(fu)guid(globallyuniqueidentifier)為區分(fen)(fen)標(biao)志的(de)(de)接口(kou)(kou)信(xin)息。opc協(xie)議通(tong)過一系列接口(kou)(kou)提(ti)供服務(wu),接口(kou)(kou)通(tong)過128位(wei)的(de)(de)全(quan)局唯(wei)一標(biao)識(shi)(shi)符(fu)guid進行(xing)區分(fen)(fen),是一種(zhong)由算法生成的(de)(de)二進制長(chang)度(du)為128位(wei)的(de)(de)數字(zi)標(biao)識(shi)(shi)符(fu),在(zai)以dce/rpc協(xie)議為基礎的(de)(de)opc協(xie)議中,ipid、uuid同(tong)(tong)(tong)guid都(dou)(dou)是同(tong)(tong)(tong)樣的(de)(de)數據、僅是語(yu)言表(biao)達定義不(bu)同(tong)(tong)(tong)。
為(wei)了識別和存儲接(jie)口(kou)(kou)信(xin)息(xi),建立一(yi)個(ge)(ge)接(jie)口(kou)(kou)管理(li)字(zi)(zi)典(dian),接(jie)口(kou)(kou)管理(li)字(zi)(zi)典(dian)中(zhong)用一(yi)個(ge)(ge)map結構(在該數據結構中(zhong),key唯一(yi)不(bu)重復)存儲接(jie)口(kou)(kou)信(xin)息(xi),每一(yi)個(ge)(ge)接(jie)口(kou)(kou)信(xin)息(xi)包括:接(jie)口(kou)(kou)的(de)(de)(de)guid值(zhi)、接(jie)口(kou)(kou)的(de)(de)(de)類型、接(jie)口(kou)(kou)的(de)(de)(de)引用計數、guid常(chang)量標(biao)志、接(jie)口(kou)(kou)對應opc版本(ben)、接(jie)口(kou)(kou)是否(fou)支持標(biao)志、關(guan)(guan)聯的(de)(de)(de)oid、關(guan)(guan)聯的(de)(de)(de)oxid、擁(yong)有(you)者的(de)(de)(de)guid、擁(yong)有(you)者的(de)(de)(de)guid類型、關(guan)(guan)聯的(de)(de)(de)guid、關(guan)(guan)聯的(de)(de)(de)guid類型。
接口(kou)管理字(zi)典的功能包括:
存儲dce/rpc及opcda規范中定義的,涉及opc協議(yi)通訊接口(kou)的guid值,以便在進行(xing)opc協議(yi)通訊過程中識(shi)別(bie)接口(kou)類型(xing)。例如,在收(shou)到bind類型(xing)數據幀的時候,根據數據幀中abstractsyntax結構的guid,去接口(kou)管(guan)理字典中查詢接口(kou)類型(xing),確定該(gai)接口(kou)的支持狀態。
記錄在程序運行過程中動(dong)態生成的(de)(de)(de)接(jie)(jie)口(kou)信(xin)息。例如,iremunknown2接(jie)(jie)口(kou)會在opc協(xie)議通訊(xun)的(de)(de)(de)過程中被用來申請和(he)釋(shi)放接(jie)(jie)口(kou)。iremunknown2接(jie)(jie)口(kou)的(de)(de)(de)remqueryinterface方法(fa)用來申請接(jie)(jie)口(kou),調用此方法(fa)時,需(xu)向(xiang)接(jie)(jie)口(kou)管(guan)理字(zi)典中添加一(yi)個ipid對應(ying)的(de)(de)(de)接(jie)(jie)口(kou)信(xin)息。iremunknown2接(jie)(jie)口(kou)的(de)(de)(de)remrelease方法(fa)用來釋(shi)放接(jie)(jie)口(kou),當調用此方法(fa)時,需(xu)要(yao)從(cong)本字(zi)典中刪(shan)除報文中要(yao)刪(shan)除ipid對應(ying)的(de)(de)(de)接(jie)(jie)口(kou)信(xin)息。
在(zai)request數(shu)據(ju)(ju)幀(zhen)的packetflags的object位(wei)為1的情況下(xia),根據(ju)(ju)數(shu)據(ju)(ju)中objectuuid字(zi)段在(zai)接口(kou)管理(li)字(zi)典(dian)中查詢對(dui)應的接口(kou)類型(xing),為處理(li)opc數(shu)據(ju)(ju)確定接口(kou)信(xin)息(xi)。
如圖5所示,在一些實施例中,在所述生成響應(ying)數據并反饋(kui)至所述服務端工控設(she)備之前還包括:
s51、當(dang)通過(guo)所(suo)(suo)述dce/rpc數據包屬于alter類型(xing)時,確定所(suo)(suo)述alter類型(xing)的數據包所(suo)(suo)對應的接口的alter全(quan)局唯一標識符;
s52、查詢預先(xian)建立的接口管理字典(dian),以確(que)定是否包括所述alter全局(ju)唯一標識符;
s53、如果是,則組alter_ack包(bao)以生成響(xiang)應報(bao)文(wen),并在所述響(xiang)應報(bao)文(wen)的是否支持(chi)接(jie)口字段填是;
s54、如果否(fou),則組alter_ack包以生成響應(ying)報文,并(bing)在所述響應(ying)報文的是(shi)否(fou)支持接口(kou)字(zi)段填(tian)否(fou)。
本實施(shi)例中實現了對alter類型數據(ju)(ju)(ju)(ju)包(bao)(bao)的(de)(de)響應,能夠在(zai)判(pan)定接收到的(de)(de)數據(ju)(ju)(ju)(ju)包(bao)(bao)為alter類型時根據(ju)(ju)(ju)(ju)獲取的(de)(de)alter類型數據(ju)(ju)(ju)(ju)包(bao)(bao)的(de)(de)全局唯一標識符,并(bing)(bing)通(tong)過(guo)查詢預先建立的(de)(de)接口管理字典來確定是(shi)(shi)(shi)否支(zhi)(zhi)持opc設備所發送的(de)(de)alter類型的(de)(de)數據(ju)(ju)(ju)(ju)包(bao)(bao)的(de)(de)請求,如果(guo)是(shi)(shi)(shi)則組(zu)包(bao)(bao)為alter_ack包(bao)(bao),并(bing)(bing)在(zai)數據(ju)(ju)(ju)(ju)包(bao)(bao)的(de)(de)是(shi)(shi)(shi)否支(zhi)(zhi)持字段填(tian)寫“是(shi)(shi)(shi)”,如果(guo)否則組(zu)包(bao)(bao)為alter_ack包(bao)(bao),并(bing)(bing)在(zai)數據(ju)(ju)(ju)(ju)包(bao)(bao)的(de)(de)是(shi)(shi)(shi)否支(zhi)(zhi)持字段填(tian)寫“否”。
如(ru)圖6所示(shi),在一些實施例(li)中,在所述生成響應數(shu)據并反饋至所述服務端工控設備(bei)之前還(huan)包括:
s61、當(dang)所述dce/rpc數(shu)據包屬于(yu)request類(lei)型時,解析所述dce/rpc數(shu)據包的(de)標(biao)志位信息以確(que)定所述標(biao)志位信息的(de)最高位是否為1;
s62、當確定(ding)所述標志位信息的最高位為1時,確定(ding)所述dce/rpc數據(ju)包的報文頭(tou)所包含的全局唯一標識符;
s63、查詢預先(xian)建立的接口(kou)管理字典以確定對應于所述(shu)全局(ju)唯一標識符的接口(kou)類(lei)型;
s64、根據確(que)定的所述(shu)(shu)接口類(lei)型(xing)所對應的方法類(lei)型(xing)處(chu)理(li)所述(shu)(shu)數(shu)據包(bao)所包(bao)含的數(shu)據部分以(yi)生成(cheng)響應報文(wen)。
本實施(shi)例(li)中,當(dang)接收(shou)到(dao)的數(shu)據包(bao)為request類型時,進(jin)一(yi)步判斷該數(shu)據包(bao)是否對(dui)應于(yu)isystemactivator接口的remotecreateinstance方法(當(dang)服務器訪問客戶端時,數(shu)據包(bao)對(dui)應于(yu)ioxidresolver接口的resolveoxid2方法),如(ru)果(guo)是,則獲取動態端口。
在一些實施例中,實現工(gong)控設(she)備間opc通(tong)信的方法還包(bao)括(kuo):在所述服務端(duan)工(gong)控設(she)備與所述客戶端(duan)工(gong)控設(she)備之(zhi)間通(tong)信之(zhi)前建立數據存(cun)儲解析模(mo)(mo)型(xing),所述數據存(cun)儲解析模(mo)(mo)型(xing)包(bao)括(kuo)第一級存(cun)儲解析模(mo)(mo)型(xing)(standardopcserver)、第二級存(cun)儲解析模(mo)(mo)型(xing)(standardopcgroup)和第三(san)級存(cun)儲解析模(mo)(mo)型(xing)(standardopcitem)。
如圖7所示為數據存儲解析模型的結構示意圖。
所述第一(yi)級存儲解析模型存儲有opc協(xie)議(yi)處理(li)的(de)(de)相(xiang)關接(jie)口對象,以及(ji)對所述第二級存儲解析模型的(de)(de)增加、刪除、修改、查(cha)詢(xun)的(de)(de)方法;
所述(shu)第(di)二級存(cun)(cun)儲解(jie)析模(mo)(mo)型存(cun)(cun)儲有opc協議處理(li)的(de)相關接口對象,以(yi)及對所述(shu)第(di)三級存(cun)(cun)儲解(jie)析模(mo)(mo)型的(de)增加、刪除(chu)、修改(gai)、查詢的(de)方法;
所述(shu)第三級存儲解(jie)析模型為opc協議中讀寫數據的最小單位。
在本(ben)實(shi)施例中第二級存儲解析(xi)模(mo)型(standardopcgroup)擁有的屬性主(zhu)要包括(kuo):字(zi)符串名稱、激活標(biao)致、客戶(hu)端定義的最快(kuai)的刷新(xin)頻率(單位為毫秒)、客戶(hu)端句柄、服務端句柄、死區(qu)參數、語言標(biao)記(ji)、時區(qu)數據。
standardopcitem作為opc協(xie)議讀寫數據的(de)最小單(dan)位,擁有(you)的(de)屬(shu)性為:字符串名稱、值、時間戳、數據類型、數據質量、激活標(biao)志、客(ke)戶端句柄、服務端句柄、訪問權限(xian)、字符串id。
根(gen)據opc協議通(tong)(tong)訊,在對(dui)象standardopcserver、standardopcgroup中分別創建相關接口的(de)同(tong)名接口對(dui)象,為(wei)數(shu)(shu)(shu)據解析(xi)使用,這些(xie)接口對(dui)象在opcda中給予了接口、輸入參數(shu)(shu)(shu)、輸出參數(shu)(shu)(shu)定義說明。在非windows系(xi)統環境下,根(gen)據報文(wen)一問一答的(de)形式(客戶(hu)端和服務端通(tong)(tong)訊的(de)一般(ban)形式),分別實(shi)現了他們(men)的(de)方(fang)(fang)法(fa),一個(ge)方(fang)(fang)法(fa)對(dui)應(ying)(ying)四(si)個(ge)函(han)數(shu)(shu)(shu)。例如(ru),iopcserver的(de)addgroup方(fang)(fang)法(fa),為(wei)了提供客戶(hu)端的(de)功(gong)能,build+方(fang)(fang)法(fa)+request的(de)函(han)數(shu)(shu)(shu)為(wei)組織請求報文(wen)的(de)函(han)數(shu)(shu)(shu),process+方(fang)(fang)法(fa)名+response為(wei)解析(xi)收到響應(ying)(ying)數(shu)(shu)(shu)據的(de)函(han)數(shu)(shu)(shu)。為(wei)了提供服務端的(de)功(gong)能,process+方(fang)(fang)法(fa)+request的(de)函(han)數(shu)(shu)(shu)為(wei)解析(xi)請求報文(wen)的(de)函(han)數(shu)(shu)(shu),build+方(fang)(fang)法(fa)名+response為(wei)根(gen)據請求生(sheng)成響應(ying)(ying)數(shu)(shu)(shu)據的(de)函(han)數(shu)(shu)(shu)。
在一些實施(shi)例中,所述opc服(fu)務器中包括(kuo)(kuo)地(di)址空間(jian)(jian)(jian)對(dui)象(xiang)模(mo)型(xing),所述地(di)址空間(jian)(jian)(jian)對(dui)象(xiang)模(mo)型(xing)包括(kuo)(kuo)層次(ci)化地(di)址空間(jian)(jian)(jian)模(mo)型(xing)和扁平(ping)化地(di)址空間(jian)(jian)(jian)模(mo)型(xing)。
opc服務(wu)器(qi)中(zhong)存(cun)儲有一個standardopcitem(簡稱item)列表,該(gai)item列表包含服務(wu)器(qi)的(de)全部item,服務(wu)器(qi)需要構造一個地址空(kong)間,以支持客(ke)戶端通過標準的(de)iopcbrowseserveraddressspace接口進行瀏覽查詢所有的(de)item。
地址(zhi)空間的(de)(de)構(gou)(gou)建(jian)可以分為(wei)兩種(zhong)類(lei)型(xing)(xing)(xing)(xing):層(ceng)次化地址(zhi)空間和(he)扁平化地址(zhi)空間。地址(zhi)空間對(dui)(dui)象模型(xing)(xing)(xing)(xing)結構(gou)(gou)主要(yao)(yao)實現了把(ba)item的(de)(de)字(zi)(zi)符串(chuan)id(例如,a.b.c、peoplecount)和(he)item數(shu)(shu)據(ju)類(lei)型(xing)(xing)(xing)(xing)(opc傳輸支持的(de)(de)一些數(shu)(shu)據(ju)類(lei)型(xing)(xing)(xing)(xing))添加到地址(zhi)空間對(dui)(dui)象模型(xing)(xing)(xing)(xing)中(zhong),地址(zhi)空間對(dui)(dui)象模型(xing)(xing)(xing)(xing)中(zhong)包含(han)一個(ge)map和(he)一個(ge)list存(cun)儲結構(gou)(gou)(map中(zhong)存(cun)儲key-value鍵值(zhi)對(dui)(dui),key不(bu)允(yun)許(xu)重復;list中(zhong)為(wei)value序列(lie)化數(shu)(shu)據(ju),可重復)。map中(zhong)的(de)(de)key為(wei)字(zi)(zi)符串(chuan),元(yuan)素(su)為(wei)子地址(zhi)空間對(dui)(dui)象模型(xing)(xing)(xing)(xing)的(de)(de)指針,主要(yao)(yao)用(yong)在(zai)構(gou)(gou)建(jian)層(ceng)次化地址(zhi)空間。list結構(gou)(gou)在(zai)兩種(zhong)地址(zhi)空間模型(xing)(xing)(xing)(xing)中(zhong)都(dou)要(yao)(yao)使用(yong)。
層次化地(di)(di)址空間構造的(de)(de)(de)(de)(de)(de)(de)原(yuan)型(xing)(xing)是(shi)(shi)樹(shu)(shu),整個(ge)地(di)(di)址空間為(wei)(wei)(wei)一(yi)(yi)顆倒著的(de)(de)(de)(de)(de)(de)(de)樹(shu)(shu),每一(yi)(yi)個(ge)item的(de)(de)(de)(de)(de)(de)(de)字(zi)(zi)(zi)符串(chuan)(chuan)(chuan)id,為(wei)(wei)(wei)一(yi)(yi)個(ge)包(bao)(bao)含(han)或(huo)不(bu)包(bao)(bao)含(han)“.”的(de)(de)(de)(de)(de)(de)(de)字(zi)(zi)(zi)符串(chuan)(chuan)(chuan),如(ru)果(guo)字(zi)(zi)(zi)符串(chuan)(chuan)(chuan)不(bu)包(bao)(bao)含(han)“.”,則(ze)該item信息作(zuo)為(wei)(wei)(wei)根的(de)(de)(de)(de)(de)(de)(de)葉(xie)子,否則(ze),該字(zi)(zi)(zi)符串(chuan)(chuan)(chuan)中(zhong)包(bao)(bao)含(han)樹(shu)(shu)干(gan)。例如(ru),item的(de)(de)(de)(de)(de)(de)(de)字(zi)(zi)(zi)符串(chuan)(chuan)(chuan)id為(wei)(wei)(wei)a.b,則(ze)a為(wei)(wei)(wei)根上的(de)(de)(de)(de)(de)(de)(de)樹(shu)(shu)干(gan),b為(wei)(wei)(wei)a樹(shu)(shu)干(gan)上的(de)(de)(de)(de)(de)(de)(de)葉(xie)子。樹(shu)(shu)干(gan)是(shi)(shi)以一(yi)(yi)個(ge)子地(di)(di)址空間的(de)(de)(de)(de)(de)(de)(de)形(xing)式(shi)展現(xian)的(de)(de)(de)(de)(de)(de)(de),可以再包(bao)(bao)含(han)樹(shu)(shu)干(gan)或(huo)葉(xie)子,但是(shi)(shi)一(yi)(yi)個(ge)樹(shu)(shu)干(gan)不(bu)能(neng)既沒有樹(shu)(shu)干(gan)也沒有葉(xie)子。因此,利用循環遞歸的(de)(de)(de)(de)(de)(de)(de)概念,當item的(de)(de)(de)(de)(de)(de)(de)字(zi)(zi)(zi)符串(chuan)(chuan)(chuan)id包(bao)(bao)含(han)“.”,以“.”作(zuo)為(wei)(wei)(wei)分隔(ge)符,以第一(yi)(yi)個(ge)“.”前的(de)(de)(de)(de)(de)(de)(de)字(zi)(zi)(zi)符串(chuan)(chuan)(chuan)為(wei)(wei)(wei)key,創建(jian)子地(di)(di)址空間對象(xiang)模(mo)(mo)型(xing)(xing),添加到上一(yi)(yi)級地(di)(di)址空間對象(xiang)模(mo)(mo)型(xing)(xing)的(de)(de)(de)(de)(de)(de)(de)map中(zhong),并將“.”后的(de)(de)(de)(de)(de)(de)(de)子字(zi)(zi)(zi)符串(chuan)(chuan)(chuan)作(zuo)為(wei)(wei)(wei)輸入,由剛才創建(jian)的(de)(de)(de)(de)(de)(de)(de)子地(di)(di)址空間模(mo)(mo)型(xing)(xing)對象(xiang)調用,重復檢(jian)測剩(sheng)下(xia)的(de)(de)(de)(de)(de)(de)(de)字(zi)(zi)(zi)符串(chuan)(chuan)(chuan)中(zhong)是(shi)(shi)否包(bao)(bao)含(han)點,如(ru)果(guo)包(bao)(bao)含(han)點,重復上述的(de)(de)(de)(de)(de)(de)(de)流程,如(ru)果(guo)不(bu)包(bao)(bao)含(han)點,創建(jian)子字(zi)(zi)(zi)符串(chuan)(chuan)(chuan)和數據類型(xing)(xing)組(zu)成的(de)(de)(de)(de)(de)(de)(de)iteminfostruct,并添加到該地(di)(di)址空間對象(xiang)模(mo)(mo)型(xing)(xing)的(de)(de)(de)(de)(de)(de)(de)list列表中(zhong)。
扁平化地(di)址空間(jian),直(zhi)接將item的id作(zuo)為(wei)key,和(he)item的數據(ju)類(lei)型一起組(zu)成iteminfostruct,并(bing)添加到根地(di)址空間(jian)對象模(mo)型的list列表(biao)中。
在(zai)一(yi)些實施例中,實現工控設備(bei)間opc通信的方法(fa)還包(bao)括:
在所(suo)述(shu)服務端工控設(she)(she)備與所(suo)述(shu)客(ke)(ke)戶端工控設(she)(she)備之間通信過程中(zhong),客(ke)(ke)戶端工控設(she)(she)備按(an)照(zhao)預設(she)(she)周期ping所(suo)述(shu)請(qing)求端;
當所述(shu)(shu)客戶端(duan)工控(kong)設(she)(she)備(bei)連(lian)續三次未接收到所述(shu)(shu)服(fu)務端(duan)工控(kong)設(she)(she)備(bei)對(dui)ping消息(xi)的(de)響(xiang)應(ying)時(shi),釋放(fang)所述(shu)(shu)客戶端(duan)工控(kong)設(she)(she)備(bei)與(yu)所述(shu)(shu)服(fu)務端(duan)工控(kong)設(she)(she)備(bei)之間的(de)連(lian)接所占(zhan)用的(de)資源。
本實施例中(zhong),opc通(tong)訊(xun)時,服務端(duan)(duan)工(gong)控設備和(he)(he)客戶(hu)端(duan)(duan)工(gong)控設備必須周期性(xing)地“ping”對方,以(yi)便(bian)保(bao)證客戶(hu)與對象一(yi)直處于連接(jie)狀態(tai),達到心跳(tiao)(tiao)的(de)(de)效果。根(gen)(gen)據(ju)ping機(ji)制和(he)(he)ping集合(he)的(de)(de)概念,ping處理(li)器創建對應(ying)的(de)(de)ping處理(li)線程,通(tong)過ioxidresolver接(jie)口的(de)(de)complexping和(he)(he)simpleping方法(fa),進行(xing)連接(jie)狀態(tai)的(de)(de)監測。根(gen)(gen)據(ju)ioxidresolver接(jie)口的(de)(de)complexping進行(xing)ping集合(he)的(de)(de)創建(oid添(tian)加)和(he)(he)刪除(oid刪除),simpleping方法(fa)根(gen)(gen)據(ju)complexping添(tian)加返(fan)回(hui)的(de)(de)ping集合(he)的(de)(de)id,進行(xing)每2分鐘一(yi)次(ci)的(de)(de)數(shu)據(ju)通(tong)訊(xun)心跳(tiao)(tiao)檢測工(gong)作(發送ping報文,解析響(xiang)應(ying)報文),如果連續3次(ci)ping不(bu)成功(不(bu)能連接(jie)、ping沒有(you)響(xiang)應(ying)或ping的(de)(de)返(fan)回(hui)結果錯誤),則釋放相關(guan)(guan)連接(jie)上的(de)(de)資源,包(bao)括釋放standardopcserver、standardopcgroup、standardopcitem模(mo)型,刪除結構(gou)管理(li)字典(dian)中(zhong)相關(guan)(guan)接(jie)口信息,及停止(zhi)相關(guan)(guan)數(shu)據(ju)通(tong)訊(xun)和(he)(he)ping線程。
需要說明(ming)的(de)是(shi)(shi),對于(yu)前述(shu)的(de)各方法實(shi)(shi)施(shi)例,為了簡單描述(shu),故(gu)將其(qi)都(dou)表述(shu)為一系列(lie)的(de)動(dong)作合并,但是(shi)(shi)本領域技(ji)術(shu)人(ren)員(yuan)(yuan)應該知(zhi)(zhi)悉(xi),本發明(ming)并不(bu)受所(suo)(suo)描述(shu)的(de)動(dong)作順(shun)(shun)序的(de)限制,因為依(yi)據本發明(ming),某些(xie)步(bu)驟(zou)可以采用(yong)其(qi)他順(shun)(shun)序或者同時(shi)進行(xing)。其(qi)次,本領域技(ji)術(shu)人(ren)員(yuan)(yuan)也應該知(zhi)(zhi)悉(xi),說明(ming)書中所(suo)(suo)描述(shu)的(de)實(shi)(shi)施(shi)例均屬于(yu)優選實(shi)(shi)施(shi)例,所(suo)(suo)涉及的(de)動(dong)作和(he)模塊并不(bu)一定是(shi)(shi)本發明(ming)所(suo)(suo)必須的(de)。
在上述(shu)實施(shi)例(li)中,對各(ge)個(ge)(ge)實施(shi)例(li)的(de)描述(shu)都各(ge)有側重,某個(ge)(ge)實施(shi)例(li)中沒有詳述(shu)的(de)部分(fen),可以參見其他實施(shi)例(li)的(de)相(xiang)關描述(shu)。
另(ling)一方面(mian),本發明實施(shi)例提(ti)供(gong)一種計算機可讀(du)存儲(chu)介(jie)質,所述存儲(chu)介(jie)質中存儲(chu)有(you)一個(ge)或多(duo)個(ge)包括(kuo)執(zhi)(zhi)(zhi)行指令的(de)程序(xu),所述執(zhi)(zhi)(zhi)行指令能夠(gou)被(bei)電子設(she)備(包括(kuo)但不限于(yu)計算機,服務器,或者網絡設(she)備等(deng))讀(du)取并執(zhi)(zhi)(zhi)行,以用(yong)于(yu)執(zhi)(zhi)(zhi)行上述方法實施(shi)例中的(de)相關(guan)步(bu)驟,例如:
服務端工控(kong)設(she)備根(gen)據通過(guo)135端口(kou)接收到自客戶(hu)端工控(kong)設(she)備的連接請求時(shi),建立(li)與所述客戶(hu)端工控(kong)設(she)備之間的第一(yi)通信連接;
當所(suo)述(shu)服務(wu)端工控(kong)設(she)備(bei)通過所(suo)述(shu)第一通信連接接收(shou)自(zi)所(suo)述(shu)客戶端工控(kong)設(she)備(bei)的dce/rpc數(shu)據(ju)(ju)包(bao)不屬于(yu)第一預設(she)數(shu)據(ju)(ju)包(bao)時,生成響應數(shu)據(ju)(ju)并反饋至(zhi)所(suo)述(shu)服務(wu)端工控(kong)設(she)備(bei)。
另一方(fang)面,本(ben)發(fa)明實(shi)施例還公開一種電(dian)子(zi)設備,其包括:
至少一個處理器,以及
與所(suo)(suo)述(shu)(shu)至少(shao)一(yi)(yi)個處(chu)理(li)器(qi)(qi)通(tong)信連接的存儲(chu)器(qi)(qi),其中,所(suo)(suo)述(shu)(shu)存儲(chu)器(qi)(qi)存儲(chu)有可被所(suo)(suo)述(shu)(shu)至少(shao)一(yi)(yi)個處(chu)理(li)器(qi)(qi)執(zhi)行(xing)的指令,所(suo)(suo)述(shu)(shu)指令被所(suo)(suo)述(shu)(shu)至少(shao)一(yi)(yi)個處(chu)理(li)器(qi)(qi)執(zhi)行(xing),以使所(suo)(suo)述(shu)(shu)至少(shao)一(yi)(yi)個處(chu)理(li)器(qi)(qi)能(neng)夠執(zhi)行(xing):
服務端工控(kong)(kong)設備(bei)根據通過(guo)135端口接(jie)(jie)收到自客戶(hu)(hu)端工控(kong)(kong)設備(bei)的(de)(de)連接(jie)(jie)請(qing)求時,建立(li)與所(suo)述客戶(hu)(hu)端工控(kong)(kong)設備(bei)之(zhi)間的(de)(de)第一通信連接(jie)(jie);
當所述服務端工(gong)控設(she)備通(tong)過所述第一(yi)通(tong)信(xin)連(lian)接接收(shou)自(zi)所述客戶端工(gong)控設(she)備的dce/rpc數(shu)據包不屬于第一(yi)預(yu)設(she)數(shu)據包時,生成響(xiang)應數(shu)據并反饋至所述服務端工(gong)控設(she)備。
圖8是本申請(qing)另一實施例提(ti)供(gong)的(de)執行實現工控設(she)備間(jian)opc通(tong)信的(de)方法的(de)電子設(she)備的(de)硬件結構示意(yi)圖,如圖8所示,該設(she)備包括:
一個或多(duo)個處(chu)理器810以及存儲器820,圖8中(zhong)以一個處(chu)理器810為例。
執行實現(xian)工控(kong)設備間opc通信的(de)方法(fa)的(de)設備還(huan)可以包括:輸入(ru)裝置(zhi)830和輸出裝置(zhi)840。
處理器810、存儲(chu)器820、輸入(ru)裝置830和輸出裝置840可以(yi)通(tong)過總線(xian)或者其他(ta)方式連接,圖8中以(yi)通(tong)過總線(xian)連接為例。
存(cun)(cun)(cun)儲器820作為(wei)一種非(fei)易失性計算機可(ke)讀存(cun)(cun)(cun)儲介(jie)質(zhi),可(ke)用于存(cun)(cun)(cun)儲非(fei)易失性軟(ruan)件程(cheng)序(xu)、非(fei)易失性計算機可(ke)執行(xing)程(cheng)序(xu)以及(ji)模(mo)塊,如本申請(qing)實(shi)施(shi)例(li)中的(de)實(shi)現工控設(she)備(bei)間opc通信的(de)方法對應的(de)程(cheng)序(xu)指(zhi)(zhi)令/模(mo)塊。處理器810通過運行(xing)存(cun)(cun)(cun)儲在存(cun)(cun)(cun)儲器820中的(de)非(fei)易失性軟(ruan)件程(cheng)序(xu)、指(zhi)(zhi)令以及(ji)模(mo)塊,從而執行(xing)服(fu)務器的(de)各種功能應用以及(ji)數據處理,即實(shi)現上述方法實(shi)施(shi)例(li)實(shi)現工控設(she)備(bei)間opc通信的(de)方法。
存(cun)(cun)(cun)(cun)(cun)儲(chu)器(qi)(qi)(qi)820可(ke)以(yi)包括(kuo)存(cun)(cun)(cun)(cun)(cun)儲(chu)程(cheng)序(xu)區(qu)和存(cun)(cun)(cun)(cun)(cun)儲(chu)數(shu)據(ju)區(qu),其(qi)中,存(cun)(cun)(cun)(cun)(cun)儲(chu)程(cheng)序(xu)區(qu)可(ke)存(cun)(cun)(cun)(cun)(cun)儲(chu)操作系(xi)統、至少一(yi)個功能所(suo)需(xu)要的(de)應用程(cheng)序(xu);存(cun)(cun)(cun)(cun)(cun)儲(chu)數(shu)據(ju)區(qu)可(ke)存(cun)(cun)(cun)(cun)(cun)儲(chu)根(gen)據(ju)實(shi)現工控(kong)設(she)備間opc通(tong)(tong)信(xin)的(de)裝(zhuang)置的(de)使用所(suo)創建的(de)數(shu)據(ju)等。此外,存(cun)(cun)(cun)(cun)(cun)儲(chu)器(qi)(qi)(qi)820可(ke)以(yi)包括(kuo)高速隨機存(cun)(cun)(cun)(cun)(cun)取存(cun)(cun)(cun)(cun)(cun)儲(chu)器(qi)(qi)(qi),還可(ke)以(yi)包括(kuo)非易失(shi)性存(cun)(cun)(cun)(cun)(cun)儲(chu)器(qi)(qi)(qi),例(li)如至少一(yi)個磁盤存(cun)(cun)(cun)(cun)(cun)儲(chu)器(qi)(qi)(qi)件(jian)、閃(shan)存(cun)(cun)(cun)(cun)(cun)器(qi)(qi)(qi)件(jian)、或其(qi)他非易失(shi)性固(gu)態存(cun)(cun)(cun)(cun)(cun)儲(chu)器(qi)(qi)(qi)件(jian)。在一(yi)些實(shi)施例(li)中,存(cun)(cun)(cun)(cun)(cun)儲(chu)器(qi)(qi)(qi)820可(ke)選包括(kuo)相對于處理器(qi)(qi)(qi)810遠程(cheng)設(she)置的(de)存(cun)(cun)(cun)(cun)(cun)儲(chu)器(qi)(qi)(qi),這些遠程(cheng)存(cun)(cun)(cun)(cun)(cun)儲(chu)器(qi)(qi)(qi)可(ke)以(yi)通(tong)(tong)過(guo)網(wang)絡(luo)連接至實(shi)現工控(kong)設(she)備間opc通(tong)(tong)信(xin)的(de)裝(zhuang)置。上(shang)述網(wang)絡(luo)的(de)實(shi)例(li)包括(kuo)但不(bu)限于互聯網(wang)、企業內部網(wang)、局域網(wang)、移動通(tong)(tong)信(xin)網(wang)及其(qi)組合。
輸(shu)(shu)入裝置(zhi)830可(ke)接收輸(shu)(shu)入的(de)數字或字符信(xin)息(xi),以(yi)及產生與(yu)實現工控(kong)設備間opc通信(xin)的(de)裝置(zhi)的(de)用戶(hu)設置(zhi)以(yi)及功能(neng)控(kong)制(zhi)有關的(de)信(xin)號。輸(shu)(shu)出裝置(zhi)840可(ke)包(bao)括顯示(shi)屏等顯示(shi)設備。
所(suo)述一個或(huo)者多個模(mo)塊(kuai)存儲在(zai)所(suo)述存儲器(qi)820中,當被所(suo)述一個或(huo)者多個處(chu)理器(qi)810執行時,執行上述任(ren)意方法實施例中的實現工控(kong)設(she)備間opc通信的方法。
上述產品可執(zhi)行本(ben)申請實施例(li)(li)所提(ti)供的(de)方(fang)法(fa),具備執(zhi)行方(fang)法(fa)相(xiang)應(ying)的(de)功能(neng)模(mo)塊和(he)有益效果(guo)。未在本(ben)實施例(li)(li)中詳(xiang)盡描述的(de)技術(shu)細節(jie),可參見(jian)本(ben)申請實施例(li)(li)所提(ti)供的(de)方(fang)法(fa)。
以(yi)(yi)上(shang)所描述(shu)的(de)(de)(de)裝(zhuang)置實(shi)施例(li)僅(jin)僅(jin)是(shi)(shi)示(shi)(shi)意性的(de)(de)(de),其中所述(shu)作(zuo)為分(fen)離部件說明的(de)(de)(de)單(dan)(dan)元(yuan)(yuan)可(ke)以(yi)(yi)是(shi)(shi)或(huo)者也(ye)可(ke)以(yi)(yi)不是(shi)(shi)物理上(shang)分(fen)開的(de)(de)(de),作(zuo)為單(dan)(dan)元(yuan)(yuan)顯(xian)示(shi)(shi)的(de)(de)(de)部件可(ke)以(yi)(yi)是(shi)(shi)或(huo)者也(ye)可(ke)以(yi)(yi)不是(shi)(shi)物理單(dan)(dan)元(yuan)(yuan),即可(ke)以(yi)(yi)位于一個地方,或(huo)者也(ye)可(ke)以(yi)(yi)分(fen)布到(dao)多個網絡單(dan)(dan)元(yuan)(yuan)上(shang)。可(ke)以(yi)(yi)根(gen)據實(shi)際(ji)的(de)(de)(de)需(xu)要選(xuan)擇其中的(de)(de)(de)部分(fen)或(huo)者全(quan)部模塊(kuai)來實(shi)現本實(shi)施例(li)方案的(de)(de)(de)目的(de)(de)(de)。
通(tong)過(guo)以上的(de)實施(shi)方式(shi)的(de)描述(shu),本(ben)領域的(de)技術(shu)人員可以清(qing)楚地了解(jie)到各實施(shi)方式(shi)可借(jie)助軟(ruan)件加通(tong)用硬件平臺的(de)方式(shi)來(lai)實現,當然也可以通(tong)過(guo)硬件。基于這樣(yang)的(de)理解(jie),上述(shu)技術(shu)方案本(ben)質(zhi)上或(huo)者(zhe)說對相關技術(shu)做出貢獻的(de)部分(fen)可以以軟(ruan)件產品(pin)(pin)的(de)形式(shi)體現出來(lai),該計(ji)算機(ji)軟(ruan)件產品(pin)(pin)可以存儲(chu)在計(ji)算機(ji)可讀存儲(chu)介質(zhi)中,如(ru)rom/ram、磁碟、光盤等,包括(kuo)若(ruo)干指令用以使得一(yi)臺計(ji)算機(ji)設備(可以是個(ge)(ge)人計(ji)算機(ji),服(fu)務器,或(huo)者(zhe)網絡設備等)執(zhi)行各個(ge)(ge)實施(shi)例或(huo)者(zhe)實施(shi)例的(de)某(mou)些部分(fen)所述(shu)的(de)方法。
最后(hou)應說明(ming)(ming)的(de)(de)(de)是:以(yi)(yi)上實施例(li)僅用以(yi)(yi)說明(ming)(ming)本(ben)(ben)(ben)申(shen)請(qing)的(de)(de)(de)技術(shu)(shu)方案,而非對(dui)其(qi)限制;盡管(guan)參(can)照前述(shu)實施例(li)對(dui)本(ben)(ben)(ben)申(shen)請(qing)進行(xing)(xing)了(le)詳細的(de)(de)(de)說明(ming)(ming),本(ben)(ben)(ben)領域(yu)的(de)(de)(de)普通技術(shu)(shu)人員應當理(li)解(jie):其(qi)依然可以(yi)(yi)對(dui)前述(shu)各實施例(li)所(suo)記載(zai)的(de)(de)(de)技術(shu)(shu)方案進行(xing)(xing)修(xiu)改,或(huo)者(zhe)對(dui)其(qi)中部分技術(shu)(shu)特征進行(xing)(xing)等(deng)同替換(huan);而這些修(xiu)改或(huo)者(zhe)替換(huan),并不(bu)使相應技術(shu)(shu)方案的(de)(de)(de)本(ben)(ben)(ben)質脫(tuo)離本(ben)(ben)(ben)申(shen)請(qing)各實施例(li)技術(shu)(shu)方案的(de)(de)(de)精(jing)神和范(fan)圍。