最近項目需要對SCADA系統的下位機采集實時數據,常見做法是兩種,一種采用ModBus RTU/TCP協議直接通過支持ModBus的下位機通信,一種是通過OPC規范,使用廠商提供的OPC Server進行中轉讀取下位機數據。
這里的坑就是在開發連接OPC Server的客戶端工具時遇到的。
使用.Net開發,最關鍵的是使用OPCDAAuto.dll,而且幾乎只需要它即可實現最基本的數據訪問功能。但是這里遇到個坑,配置OPC Server的同事告訴我PC Access SMART 配置到跨PC(倆PC應該通過TCP協議能夠互訪, 即同局域網或vpn等形式)可訪問,說是防火牆等等需要配置,win7似乎比XP麻煩所以需要我直接在OPC Server運行的機器上開發調試。這里開發沒問題,dll順利的引用了。之后准備測試跨pc訪問的時候,把代碼工程搬到我的機器上了,結果發現這個OPCDAAuto的引用死活添加不上,提示檢查是否有訪問權限或者是否為.Net類庫或已注冊的COM。
說實話第一次遇到這種問題,非常懵逼。同事看了也說沒遇到過,只好自己研究。顯然regsvr注冊也不成功。一度我懷疑是不是因為vs版本或者win10不支持這個dll。。
最后是運氣好,決定看看搜索條目最多的關於這個dll注冊的事情,才發現原來這個COM是個32位的,64位系統直接注冊無效。
【解決方案】
首先將這個dll拷貝到C:\windows\SysWow64 下,再使用regsvr32 進行注冊。
這樣之后vs里就可以正常引用了,當然需要在添加引用時選擇COM組件里找到這個類庫。
【經驗總結】
排錯時應該加上對系統位數的考慮,因為忽略32位和64位的區別造成一度開發停滯也是醉了。。
【最后是吐槽】
西門子的工業技術支持網站做的真挫啊。。。。。
還有那親愛的OPC 基金會的官網,好多bug連資源頁面都進不去。。。
不知道工業自控這個領域是太封閉了導致網上幾乎沒什么資料還是什么原因,感覺獲取靠譜信息太難了。