【工控老马】OPC通讯协议解析-OPC七问
1 通訊步驟
1.1 第一問(wèn)
OPC Client和OPC Server之間通訊誰(shuí)是主動(dòng)的?
答:當(dāng)然是OPC Client。
1.2 第二問(wèn)
OPC Client第一次動(dòng)作做了什么?
答:從大多數(shù)OPC Client行為來(lái)看,一是自動(dòng)遍歷本機(jī)已注冊(cè)的OPC Server列表名稱,二是等待用戶定義預(yù)訪問(wèn)的OPC Server的信息。
1.3 第三問(wèn)
OPC Client第二次動(dòng)作做了什么?
答:OPC Client的第一步動(dòng)作會(huì)產(chǎn)生分支,訪問(wèn)本地OPC Server的這個(gè)分支就不再說(shuō)了。要分析的是網(wǎng)絡(luò)方式訪問(wèn)OPC Server這個(gè)分支。
第二個(gè)動(dòng)作是根據(jù)用戶指定的IP地址或計(jì)算機(jī)名去查詢遠(yuǎn)程計(jì)算機(jī)上已注冊(cè)的OPC Server列表名稱。從這步開(kāi)始就比較復(fù)雜了。
1.4 第四問(wèn)
OPC Client是用什么協(xié)議去和遠(yuǎn)程計(jì)算機(jī)交流的?
答:用的是TCP/IP這個(gè)協(xié)議。OPC Client用TCP/IP 135端口去打開(kāi)遠(yuǎn)程計(jì)算機(jī)的那一扇門。
簡(jiǎn)單解釋下:在Windows操作系統(tǒng)中,135端口主要用于使用PRC協(xié)議并提供DCOM(分布式組件對(duì)象模型)服務(wù),通過(guò)RPC可以保證在一臺(tái)計(jì)算機(jī)上運(yùn)行的程序可以順利地執(zhí)行遠(yuǎn)程計(jì)算機(jī)上的代碼。使用DCOM可以通過(guò)網(wǎng)絡(luò)直接進(jìn)行通信,能夠跨包括HTTP協(xié)議在內(nèi)的多種網(wǎng)絡(luò)傳輸。多年來(lái),135端口一直被人利用。
1.5 第五問(wèn)
OPC Client去訪問(wèn)遠(yuǎn)程計(jì)算機(jī)的TCP135這扇門時(shí),第一道關(guān)卡是誰(shuí)?
答:網(wǎng)絡(luò)安全防火墻是第一關(guān)卡,網(wǎng)絡(luò)安全放火墻中,如果不允許遠(yuǎn)程計(jì)算機(jī)的TCP 135端口,那么連接就被掐斷了。后續(xù)的通訊就無(wú)法進(jìn)行。要想能向下進(jìn)行,網(wǎng)絡(luò)安全防火墻必須允許對(duì)TCP 135這扇門的訪問(wèn)。這里需要在防火墻中將135端口例外操作。
1.6 第六問(wèn)
各系統(tǒng)的安全策略有什么不同?
答:
(一)Windows 2000的安全策略:支持來(lái)訪者以自己的身份進(jìn)行驗(yàn)證,且不拒絕來(lái)賓用戶從網(wǎng)絡(luò)中訪問(wèn),來(lái)賓用戶默認(rèn)啟用。
(二)Windows XP和Windows 2003的安全策略:支持來(lái)訪者以自己的身份進(jìn)行驗(yàn)證或?qū)⑺衼?lái)訪者都看成是來(lái)賓訪問(wèn),默認(rèn)將所有來(lái)訪者都看成來(lái)賓訪問(wèn)。且默認(rèn)拒絕Guest用戶從網(wǎng)絡(luò)訪問(wèn)本機(jī)。來(lái)賓用戶默認(rèn)禁用。
(三)Windows 7的安全策略:支持來(lái)訪者以自己的身份進(jìn)行驗(yàn)證或?qū)⑺衼?lái)訪者都看成是來(lái)賓訪問(wèn)(經(jīng)典-對(duì)本地用戶進(jìn)行身份驗(yàn)證,不改變其本來(lái)身份),默認(rèn)支持來(lái)訪者以自己的身份進(jìn)行驗(yàn)證。且默認(rèn)拒絕Guest用戶從網(wǎng)絡(luò)訪問(wèn)本機(jī)(拒絕從網(wǎng)絡(luò)訪問(wèn)這臺(tái)計(jì)算機(jī))。來(lái)賓用戶默認(rèn)禁用。
(四)Windows 2008的安全策略:支持來(lái)訪者以自己的身份進(jìn)行驗(yàn)證或?qū)⑺衼?lái)訪者都看成是來(lái)賓訪問(wèn),默認(rèn)支持來(lái)訪者以自己的身份進(jìn)行驗(yàn)證。來(lái)賓用戶默認(rèn)禁用。
配置OPC Client和OPC Server之間的網(wǎng)絡(luò)通訊,先得看看對(duì)應(yīng)的操作系統(tǒng)。選好安全審核機(jī)制再說(shuō)。
舉例說(shuō)明:
例1:OPC Client和OPC Server都在Windows 2000操作系統(tǒng)上來(lái)舉個(gè)例子:由于操行系統(tǒng)都是Windows 2000,那么安全策略都是來(lái)訪者以自己的身份進(jìn)行驗(yàn)證(自己指OPC Server)。這里的以來(lái)訪者以自己的身份進(jìn)行驗(yàn)證是什么意思?
就是指OPC Client去敲OPC Server的135這扇門時(shí),會(huì)告知OPC Client的登錄用戶名是誰(shuí),我的登錄密碼是多少。OPC Server所在的操作系統(tǒng)通過(guò)來(lái)訪者告知的用戶名和密碼去自己的用戶列表中去查找是否也存在這個(gè)用戶,密碼是否正確。如果用戶名和密碼正確,則進(jìn)入下一步工作。
例2: OPC Client和OPC Server都在Windows XP操作系統(tǒng)上來(lái)舉個(gè)例子:由于操行系統(tǒng)都是Windows XP,那么默認(rèn)的安全策略都是將所有來(lái)訪者都看成是來(lái)賓訪問(wèn)。(對(duì)本地用戶進(jìn)行身份驗(yàn)證,其身份為來(lái)賓。)且默認(rèn)拒絕Guest用戶從網(wǎng)絡(luò)訪問(wèn)本機(jī)。這里的將所有來(lái)訪者都看成是來(lái)賓訪問(wèn)是什么意思?就是指OPC Client去敲OPC Server的135這扇門時(shí),會(huì)告知,我的登錄用戶名是誰(shuí),我的登錄密碼是多少。OPC Server所在的操作系統(tǒng)卻不管你是誰(shuí),所有來(lái)訪者一視同仁,都是來(lái)賓,而且按照規(guī)定,來(lái)賓都拒絕掉。這下可好,后面二者之間的通訊也不用繼續(xù)了。
上面的(一)這種情況工作還能繼續(xù)往下做,(二)這種情況就完全不行了,啥都不管了。因此(二)這種情況是需要修改安全策略的,一種是將安全策略修改為來(lái)訪者以自己的身份進(jìn)行驗(yàn)證;另外一種是將“拒絕從網(wǎng)絡(luò)中訪問(wèn)此計(jì)算機(jī)”規(guī)則中的來(lái)賓用戶給去掉,從用戶管理中將來(lái)賓用戶啟用,且密碼為空。(僅來(lái)賓-對(duì)本地用戶進(jìn)行身份驗(yàn)證,其身份為來(lái)賓)
1.7 第七問(wèn)
網(wǎng)絡(luò)防火墻允許進(jìn)入,操作系統(tǒng)的安全審核也通過(guò)了,終于可以訪問(wèn)OPC Server了吧?
答:還得問(wèn)一問(wèn)DCOM的安全配置同不同意。運(yùn)行“組件服務(wù)”檢查一下。
DCOM的“訪問(wèn)權(quán)限”默認(rèn)只有Sell和System,需要添加指定用戶或者允許所有人,需要注意的是,“本地訪問(wèn)”與“遠(yuǎn)程訪問(wèn)”都需要選擇“允許”。
DCOM的“啟動(dòng)和激活權(quán)限”默認(rèn)只有“Administrator”和“System”,需要添加指定用戶或者允許所有人,需要注意的是,“本地訪問(wèn)”與“遠(yuǎn)程訪問(wèn)”,“本地激活”和“遠(yuǎn)程激活”都需要選擇“允許”。
1.8 總結(jié)
1.8.1 小結(jié)1
經(jīng)過(guò)上面的一些處理過(guò)程,我們?cè)谶@里可以總結(jié)一下都做了些什么?
(一)配置防火墻,允許訪問(wèn)OPC Server所在計(jì)算機(jī)的TCP 135端口。
(二)配置操作系統(tǒng)的安全策略,使得可以接受遠(yuǎn)程計(jì)算機(jī)的rpc請(qǐng)求,可配置為按照來(lái)訪者身份驗(yàn)證模式或來(lái)賓模式。(直接選擇以本地身份驗(yàn)證)
(三)配置操作系統(tǒng)的用戶管理。來(lái)訪者身份驗(yàn)證模式需在OPC Server所在計(jì)算機(jī)中添加來(lái)訪者的用戶名和密碼;來(lái)賓模式需要啟用Guest用戶。
(四)配置計(jì)算機(jī)全局的DCOM安全配置,使之允許遠(yuǎn)程訪問(wèn),已經(jīng)遠(yuǎn)程啟動(dòng)和激活。
以上4步基本已將OPC Server這端的訪問(wèn)權(quán)限配置得差不多。但在實(shí)際操作過(guò)程中,還需要檢查如下一些內(nèi)容:
(一)OPC庫(kù)文件是否安裝注冊(cè)?OPC庫(kù)文件沒(méi)有正確的安裝注冊(cè),OPC Server是無(wú)法工作的。而現(xiàn)在的不少OPC Server安裝時(shí)并不會(huì)自動(dòng)安裝OPC庫(kù)文件。
(二)OPC server是否注冊(cè)?OPC Server未注冊(cè),是無(wú)法訪問(wèn)的,OPC Server必須正確注冊(cè)。而現(xiàn)在的不少OPC Server安裝后也不會(huì)自動(dòng)注冊(cè),需要手動(dòng)在程序界面上提供的功能按鈕進(jìn)行注冊(cè)。
(三)OPC server的主程序是否存在?有的時(shí)候OPC Server注冊(cè)了,但主程序可能被誤刪除或改名了,這個(gè)操作系統(tǒng)可不會(huì)告訴你。只能自己檢查一下或重新注冊(cè)一遍。
(四)OPC Server的主程序與其他程序是否有依賴關(guān)系?因?yàn)镺PC Server只是軟件對(duì)外提供數(shù)據(jù)的一種標(biāo)準(zhǔn)接口,它本身也是通過(guò)從其他的軟件獲取數(shù)據(jù),常見(jiàn)的如組態(tài)軟件,實(shí)時(shí)數(shù)據(jù)庫(kù)等,而現(xiàn)在的一些OPC Server啟動(dòng)時(shí)會(huì)檢查依賴的程序是否啟動(dòng),如未啟動(dòng),要么退出,要么啥都提供不了,也不會(huì)告訴OPC Client出了啥問(wèn)題。
(五)OPC Server在DCOM環(huán)境中自己的配置信息,OPC Server在DCOM的環(huán)境中的配置信息如下圖。如OPC Server是NT服務(wù)方式啟動(dòng),那么“標(biāo)識(shí)”這一欄就為系統(tǒng)帳戶,不推薦使用“下列用戶”。如OPC Server是COM方式注冊(cè),那么“標(biāo)識(shí)”這一欄默認(rèn)為“交互式用戶”或“啟動(dòng)用戶”(各家OPC Server注冊(cè)時(shí)處理方法不太一樣),最好都使用。“交互式用戶”,不推薦使用“啟動(dòng)用戶”和“下列用戶”。具體原因后期再說(shuō)。
(OPC Server是NT服務(wù)方式啟動(dòng),標(biāo)識(shí)這欄為“系統(tǒng)賬戶(僅用于服務(wù))”)
(OPC Server是COM方式注冊(cè),標(biāo)識(shí)這欄為“交互式用戶”)
1.8.2 小結(jié)2
到了這一步,可能絕大部分人都會(huì)覺(jué)得這完成沒(méi)有問(wèn)題了。OPC Server都連接上了,增加個(gè)OPC組還不是輕而易舉的事情嗎?而實(shí)際上,OPC的組是一個(gè)大有深意的設(shè)計(jì)。
OPC的組是用來(lái)給OPC Client靈活定義數(shù)據(jù)采集方式的一個(gè)方法,如希望對(duì)OPC Server
中測(cè)點(diǎn),一些測(cè)點(diǎn)的采樣頻率是1秒,一些測(cè)點(diǎn)的采樣頻率是5秒,一些測(cè)點(diǎn)數(shù)據(jù)變化即采集,一些測(cè)點(diǎn)數(shù)據(jù)變化超過(guò)量程多少才采集等等。而且還定義了數(shù)據(jù)采集的兩種模式,Synchronous I/O(同步)和Asynchronous I/O(異步)。對(duì)同步和異步進(jìn)行一個(gè)簡(jiǎn)單的說(shuō)明:
同步模式:OPC Client向OPC Server要5000個(gè)測(cè)點(diǎn)的數(shù)據(jù),必須等到OPC
Server將5000個(gè)測(cè)點(diǎn)的數(shù)據(jù)都返回后才做后面的事情。
異步模式:OPC Client向OPC Server要5000個(gè)測(cè)點(diǎn)的數(shù)據(jù),OPC Client告訴OPCServer:
“我為你留了一個(gè)通道,我要的這5000個(gè)點(diǎn),只要任何點(diǎn)有變化,你就立馬按照預(yù)定
的周期告訴我”,于是OPC Server就按照預(yù)定的周期將數(shù)據(jù)發(fā)生變化的測(cè)點(diǎn)通過(guò)OPC Client預(yù)留的通道告知OPC Client。異步模式中,就會(huì)發(fā)生OPC Server反向連接OPC
Client的情況,那么就會(huì)再次發(fā)生前面9個(gè)問(wèn)題的所有事情。這也是很多時(shí)候OPC Server配置完成了,但OPC的通訊還是不正常的緣故。因?yàn)楝F(xiàn)在的絕大多數(shù)OPC Client默認(rèn)都是采用異步方式與OPC Server進(jìn)行通訊,這就要求OPC Client所在計(jì)算機(jī)的網(wǎng)絡(luò)防火墻、
操作系統(tǒng)的安全策略,DCOM的全局安全配置也需要配置正確。某OPC Client客戶端添加OPC組時(shí)的屬性配置。此處給各位留下一個(gè)問(wèn)題:既然異步方式增加了對(duì)OPC Client
端的配置要求,那為何大家默認(rèn)不使用同步模式呢?
1.8.3 小結(jié)3
到了這一步,還問(wèn)這樣的問(wèn)題,估計(jì)有人會(huì)很憤怒了,“這種弱爆了的問(wèn)題還要問(wèn)嗎?”,其實(shí)不然,在很多實(shí)際的案例中,就遇到了OPC的通訊配置問(wèn)題解決了。但卻看不到測(cè)點(diǎn),一般會(huì)有如下幾種原因:
(一)OPC Server真的沒(méi)有測(cè)點(diǎn)。
(二)仔細(xì)閱讀第10問(wèn)中的檢測(cè)要點(diǎn)的第4條。OPC Server中的測(cè)點(diǎn)來(lái)自于組態(tài)軟件或?qū)崟r(shí)數(shù)據(jù)庫(kù),當(dāng)組態(tài)軟件和實(shí)時(shí)數(shù)據(jù)庫(kù)未啟動(dòng)或OPC Server啟動(dòng)在組態(tài)軟件和實(shí)時(shí)數(shù)據(jù)庫(kù)之前時(shí),OPC Server中很可能就沒(méi)有測(cè)點(diǎn)。如何解決?重啟一下就好了嘛。
2 OPC Client/OPC Server
2.1 問(wèn)題現(xiàn)象
目前市場(chǎng)上的OPC Client與OPC Server軟件在Windows上的運(yùn)行方式有Windows桌面程序和Windows NT服務(wù)。本來(lái)也沒(méi)啥。但由于OPC Client 是一個(gè)廠家的軟件,而OPC Server是另一家的軟件,正因?yàn)檐浖亩鄻有?#xff0c;也就導(dǎo)致了如下一些現(xiàn)像:
1:OPC Client 連接目標(biāo)OPC Server,發(fā)現(xiàn)無(wú)法連接,但在OPC Serve計(jì)算機(jī)上明明看見(jiàn)OPC Serve進(jìn)程已經(jīng)啟動(dòng)。
2:OPC Client連接目標(biāo)OPC Server,能連接,也能看見(jiàn)測(cè)試點(diǎn),但無(wú)法獲取到數(shù)據(jù)。
經(jīng)過(guò)多次現(xiàn)場(chǎng)的積累后,發(fā)現(xiàn)此類問(wèn)題多出現(xiàn)在OPC Client和OPC Server軟件在Windows上運(yùn)行方式不同導(dǎo)致的。也就是說(shuō),OPC Client和OPC Server軟件的運(yùn)行方式不一樣。譬如:OPC Client是Windows桌面程序方式,OPC Server是Windows NT服務(wù)時(shí),發(fā)現(xiàn)上面的現(xiàn)象基本不出現(xiàn)。這是為什么呢?
2.2 問(wèn)題解決
原因如下:
OPC Client和OPC Server都是基于DCOM的應(yīng)用,DCOM的特點(diǎn)是OPC Server無(wú)需先運(yùn)行或啟動(dòng),等待OPC Client請(qǐng)求時(shí),由操作系統(tǒng)在將OPC Server拽起來(lái)。這種機(jī)制的好處就是隨用隨啟。但這種機(jī)制如果處理不好吧,就會(huì)導(dǎo)致一些問(wèn)題。當(dāng)OPC Client是Windows NT服務(wù)時(shí),OPC Server被拽起來(lái)后,是運(yùn)行在System這個(gè)系統(tǒng)帳戶下面的。相對(duì)于Windows的桌面用戶來(lái)說(shuō),是另外一個(gè)隔離開(kāi)的空間。因此當(dāng)桌面運(yùn)行類型的OPC Server被Windows NT服務(wù)方式的OPC Client拽起來(lái)后,被運(yùn)行在System這個(gè)系統(tǒng)帳戶的空間。而如果這個(gè)OPC Server程序又做了全局唯一進(jìn)程運(yùn)行的限制或與數(shù)據(jù)庫(kù)只允許一個(gè)TCP連接時(shí),上述的兩種現(xiàn)象基本就會(huì)出現(xiàn)。這就是這段時(shí)間好幾個(gè)朋友遇到的OPC通訊故障現(xiàn)象。
如何讓自己開(kāi)發(fā)的OPC程序兼容性更好的?
1:當(dāng)開(kāi)發(fā)OPC Client程序時(shí),最好使用Windows桌面程序方式,這種方式可兼容OPC Server程序運(yùn)行在Windows桌面程序方式和Windows NT服務(wù)方式。
2:當(dāng)開(kāi)發(fā)OPC Server程序時(shí),最好使用Windows NT服務(wù)方式,這種方式可兼容OPC Client程序運(yùn)行在Windows桌面程序方式和Windows NT服務(wù)方式。
如果很不幸遇到了Windows NT服務(wù)的OPC Client去采集Windows桌面程序的OPC Server(加上OPC Server本身的全局唯一限制),那么你可以去Windows NT服務(wù)的管理器中將Windows NT服務(wù)。
總結(jié)
以上是生活随笔為你收集整理的【工控老马】OPC通讯协议解析-OPC七问的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 注释//TODO的作用
- 下一篇: 腾讯历届笔试题(1)