近段時間,遇到不少人都被opcclient與opcserver之間的通訊搞得頭大,通過幾次遠(yuǎn)程協(xié)助后,總結(jié)了opcclient和opcserver在windows上運(yùn)行方式的恩怨,希望對各位有用。
目前市場上的opcclient和opcserver軟件在windows上的運(yùn)行方式有windows 桌面程序和windows nt服務(wù)。本來也沒啥。但由于opcclient是一個廠家的軟件,而opcserver是另外一個廠家的軟件,由于軟件的多樣性,也就導(dǎo)致了如下一些現(xiàn)象:
1. opcclient連接目標(biāo)opcserver,發(fā)現(xiàn)無法連接,但在opcserver計算機(jī)上明明看見opcserver進(jìn)程已經(jīng)啟動。
2. opcclient連接目標(biāo)opcserver,能連接,也能看見測點(diǎn),但無法獲取到數(shù)據(jù)。
經(jīng)過多次現(xiàn)場的積累后,發(fā)現(xiàn)此類問題多出現(xiàn)在opcclient和opcserver軟件在windows上的運(yùn)行方式不同導(dǎo)致的。也就是說,opcclient和opcserver軟件的運(yùn)行方式不一樣。譬如,opcclient是windows nt服務(wù)方式,而opcserver是桌面程序方式(多是組態(tài)軟件的opcserver都是桌面程序方式吧?。。?。而當(dāng)opcclient是windows 桌面程序方式,opcserver時windows nt服務(wù)時,發(fā)現(xiàn)上面的現(xiàn)象基本不出現(xiàn)。這是為什么呢?
原因如下:
opcclient和opcserver都是基于dcom的應(yīng)用,dcom的特點(diǎn)是opcserver無需先運(yùn)行或啟動,等待opcclient請求時,由操作系統(tǒng)在將opcserver拽起來。這種機(jī)制的好處就是隨用隨啟。但這種機(jī)制如果處理不好吧,就會導(dǎo)致一些問題。當(dāng)opcclient是windows nt服務(wù)時,opcserver被拽起來后,是運(yùn)行在system這個系統(tǒng)賬戶下面的。相對于windows的桌面用戶來說,是另外一個隔離開的空間。因此當(dāng)桌面運(yùn)行類型的opcserver被windows nt服務(wù)方式的opcclient拽起來后,被運(yùn)行在system這個系統(tǒng)賬戶的空間。而如果這個opcserver程序又做了全局唯一進(jìn)程運(yùn)行的限制或與數(shù)據(jù)庫只允許一個tcp連接時,上述的兩種現(xiàn)象基本就會出現(xiàn)。這就是這段時間好幾個朋友遇到的opc通訊故障現(xiàn)象。
如果讓自己開發(fā)的opc程序兼容性更好呢?
1. 當(dāng)開發(fā)opcclient程序時,最好使用windows桌面程序方式,這種方式可兼容opcserver程序運(yùn)行在windows桌面程序方式和windows nt服務(wù)方式。
2. 當(dāng)開發(fā)opcserver程序時,最好使用windows nt服務(wù)方式,這種方式可兼容opcclient程序運(yùn)行在windows桌面程序方式和windows nt服務(wù)方式。
如果很不幸遇到了windows nt服務(wù)的opcclient去采集windows 桌面程序的opcserver(加上opcserver本身的全局唯一限制),那么你可以去windows nt服務(wù)的管理器中將windows nt服務(wù)的opcclient更改為指定的系統(tǒng)用戶運(yùn)行,大多數(shù)情況下可以解決問題。