一.背景
使用.NET3.5+OPCAutomation開發一OPC客戶端,軟件流程非常簡單就是OPC環境配置沒有做過,網上找了一個OPC一鍵DCOM配置工具,第一次安裝很方便,運行工具后安裝軟件一切正常。一星期后聯系我說客戶電腦抱走干別的了,又找了台新電腦。再次配置安裝后報錯“對COM 組件的調用返回了錯誤HRESULT E_FAIL”。問題最后也沒明白,處理過程也挺撓頭,記下來省的下次再亂翻。
錯誤環境
客戶端:Win7 64位 專業版 .NET3.5,雙網卡,一個網卡連接公網,一個網卡連接內網OPC服務器。
二.E_FAIL是個什么錯誤
我想知道E_FAIL是個什么,看起來應該是COM+編程的,之前沒有做個這個,也不曉得去哪找,百度“COM+ E_FAIL”出來的都是那幾個,試過都不行。去OPC Automation 2.0手冊看了下,包含E_FAIL的就這么一句:
A vendor specific fatal error has occurred within the server. The server is no longer functioning. The recovery procedure from this situation is vendor specific. An error code of E_FAIL should generally be returned from any other server method.
去國內編程論壇找的就是百度出來那幾個,國外的也沒找到,吐槽下工控論壇,別說問了沒人回,資料都捂的死死的。到現在解決了也不知道它是什么。發出來祈求那天那個大俠看到給我發個鏈接看看。
三.解決過程
先試了百度出來的結果:
1.OPC Server客戶端連接太多了
重啟了OPC Server。
嘗試結果:沒有解決。
2.客戶端開啟Distributed Transaction Coordinator服務
命令行:dcomcnfg打開“組件服務”。選擇“組件服務”-“計算機”-“我的電腦”-“Distributed Transaction Coordinator”。
這里只有一個“本地 DTC”,右鍵選擇“屬性”-“安全”,選中“網絡DTC訪問”,事務管理器通信選則“允許入棧”、“允許出棧”、“不要求進行驗證”。
嘗試結果:沒有解決。
3.檢查環境配置。具體檢查什么沒有詳細。。。
四.檢查OPC環境
1.網絡環境
a.確保OPC客戶端與服務器在同一個網段。
檢查結果:正常。
b.客戶端程序內OPC連接服務器使用了服務器hostName (手冊內表示也可使用ip:Node is optional. The use of a node name makes use of DCOM to access another computer. Acceptable node names are UNC names (“Server”), or DNS names (“server.com”, “www.vendor.com”, or “180.151.19.75”)),檢查發下客戶端“網絡”-"計算機"列表沒有服務器。將服務器、客戶端配置在同一工作組。
處理結果:未解決。
c.OPC使用135端口,在防火牆--高級設置--出入棧規則內配置開啟135端口。
處理結果:未解決。
d.關閉防火牆。
處理結果:未解決。
e.客戶抱走的電腦軟件沒有卸載,打開軟件也是報“對COM 組件的調用返回了錯誤HRESULT E_FAIL”,而抱走的電腦和Opc服務器沒有網絡連接。
反饋結果:網絡連接不通也報這個錯誤。但現在網絡連接正常。
2.測試OPC客戶端COM環境
a.客戶端安裝注冊OPC調試服務器,右鍵OpcEnum--屬性,配置OPCEnum.exe為交互用戶。
配置過程發現交互用戶不可選,命令行下卸載、重新注冊OpcEnum后可選:
OpcEnum /unregserver
OpcEnum /regserver
當提示OpcEnum不存在時檢查OpcEnum安裝,保證OpcEnum.exe已安裝在“%WinDir%\system32”,64位“%WinDir%\SySWow64”。
測試結果:可以正常獲取本地Opc測試服務器。但是連接獲取采集項時發生錯誤。
3.檢查OPC客戶端COM環境
a.檢查已安裝的opc組件,64位系統確保“%WinDir%\SySWow64”下opc組件已安裝、注冊(32位系統為“%WinDir%\system32”)。
自己修改下腳本,把所有opc組件重新安裝注冊了一下。
b.檢查COM配置
"組件服務”-“計算機”-"我的電腦",右鍵選則“屬性”:
配置“默認屬性”如下:確保箭頭所指選項配置如同。
配置"COM安全",確保箭頭所指默認值內如下用戶:everyone,SYSTEM,NETWORK,INTERACTIVE,ANONYMOUS LOGON,具有所有權限。
配置完成后重啟OPC客戶端電腦。此時發現安裝了360管家等,告知客戶暫時關閉下,客戶直接全部卸載相關軟件。
處理結果:重啟后打開軟件,故障解決。可以正常獲取遠程Opc服務列表。可以正常獲取數據。
五.后續
客戶卸載了所有第三方安全軟件,防火牆再關掉太危險了,於是重新打開防火牆,然后數據無法獲取了...
檢查防火牆允許程序,將Opc客戶端應用程序添加到防火牆白名單。處理結果:仍然無法正常獲取數據。
打開防火牆--高級設置--入棧規則,發現Opc客戶端應用程序入棧規則只是作用在專用網絡,於是配置為所有網絡:
處理結果:可以正常獲取數據。原因:Opc客戶端為雙網卡,與Opc服務器連接的網卡網絡類型為公用網絡。
六.處理過程遇到的其他問題
腳本工具 OPC一鍵DCOM配置 使用 “netsh interface ip set address” 命令配置的Opc客戶端網絡環境,雙網卡下,腳本執行時第一台電腦設置的內網網卡,第二台電腦工具設置的外網網卡,由於是遠程配置的,所以遠程直接斷在了這里...后來直接注釋掉 OPC一鍵DCOM配置工具內該命令,手動檢查設置了一下。