OPCAutomation客戶端調用服務器返回HRESULT E_FAIL錯誤處理


一.背景

  使用.NET3.5+OPCAutomation開發一OPC客戶端,軟件流程非常簡單就是OPC環境配置沒有做過,網上找了一個OPC一鍵DCOM配置工具,第一次安裝很方便,運行工具后安裝軟件一切正常。一星期后聯系我說客戶電腦抱走干別的了,又找了台新電腦。再次配置安裝后報錯“對COM 組件的調用返回了錯誤HRESULT E_FAIL”。問題最后也沒明白,處理過程也挺撓頭,記下來省的下次再亂翻。

       錯誤環境

       客戶端:Win7 64位 專業版 .NET3.5,雙網卡,一個網卡連接公網,一個網卡連接內網OPC服務器。

       服務器:Win10  KEPServer

二.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配置工具內該命令,手動檢查設置了一下。

 

             

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM