C# OPC UA服務器


C# OPC UA服務器 OPC UA網關 三菱 西門子 歐姆龍 Modbus轉OPC UA 服務器 可配置的OPC UA服務器網關 HslSharp軟件文檔

前言


 本文將使用一個基於開源項目HslCommunication創建的OPC UA網關,方便通過配置創建一個OPC UA的網關中心。具體的操作及支持的設備信息項目參照下面:

 開源項目HslCommunication的github地址:https://github.com/dathlin/HslCommunication 如果喜歡可以star或是fork,還可以打賞支持。此項目在工業界非常的流行,用來采集設備的數據以及在多個軟件之間進行數據傳送,以及一些簡單的控件顯示。

 聯系作者及加群方式(激活碼在群里發放):http://www.hslcommunication.cn/Cooperation

 在Visual Studio 中的NuGet管理器中可以下載安裝,也可以直接在NuGet控制台輸入下面的指令安裝:

1
Install-Package HslCommunication

  

NuGet安裝教程  http://www.cnblogs.com/dathlin/p/7705014.html

 

 

 

Demo軟件下載

HSLSharp.zip

版本將會隨着更新功能會有所變化,相應的本博客也會有更新,如下也會做一些更新日志的聲明:

 

v0.0.1 

2018年5月1日 13:47:22

預發行版,初步的測試。

 

特性支持


  •  支持空設備節點,創建單純的節點以供設備讀寫
  •  支持三菱PLC的設備節點,針對的MC協議的二進制和ASCII的機制
  •  支持西門子設備節點,支持S7協議,Fetch/Write
  •  支持歐姆龍設備節點,支持FINS/TCP節點
  •  支持Modbus-Tcp設備節點
  •  支持異形Modbus-Tcp設備節點
  •  支持NetSimplify客戶端節點,這個協議可以在多個電腦之前傳送數據。

 

使用說明


 本軟件的OPC UA的節點配置需要要節點配置器和解析規則配置器組成,節點配置器來配置OPC UA的節點分類規則,節點描述等信息,但是具體的數據標簽由解析規則配置器組成。

 以下就具體說明下程序大致的配置步驟:

  1.  配置客戶端分類信息,新增想要的設備,新增設備時需要選擇相應的設備類型。
  2.  新建完設備類型之后,需要配置數據請求,指定讀取的地址,讀取的長度,然后配置解析規則代碼。
  3.  如果沒有解析規則代碼,那就需要先配置規則解析,本系統支持可視化的規則配置,具體的配置方法本文下文會深度講解。

 

主界面的簡單介紹


 打開軟件的主界面,如下,在初次使用軟件的時候,系統默認了三個固定的根節點

  1.  Devices      設備類的根節點
  2.  ModbusServer Modbus服務器的節點,目前不支持
  3.  ModbusAlien 異形ModbusTcp設備對象

 

如果沒有配置軟件節點信息,那就需要先點擊 系統配置節點配置 菜單了。主界面如下

 

 節點配置的界面如下,此處有個細節,點擊節點名稱,即可以在右側的數據列表里顯示出來當前選擇的節點的詳細信息,做左側節點的操作,通過鼠標右鍵的菜單來操作:

 

 

 

添加節點分類操作


 此處簡單的演示添加一個簡單的分類操作信息。鼠標在Devices上右鍵即可操作

然后就會彈出一個編輯框,這樣我們就實現了一個類別節點的添加,注意:類別節點是可以相互嵌套的,可以形成復雜的分類

 

復雜類型節點舉例:

 

 然后點擊 保存文件 菜單,然后關掉當前窗口,回到主界面,點擊 啟動引擎,點擊 測試客戶端 菜單,啟動一個通用的OPC UA客戶端來瀏覽服務器上有什么數據信息

 

 

 可以看到OPC UA的服務器已經按照我們設想創建好了數據節點信息。然后重啟軟件,我們重新進入 節點配置器 節點進行操作。

 

編輯和刪除節點操作


 想要對哪個節點進行操作,就選擇哪個節點,然后右鍵,發現就2個額外的操作選擇,編輯節點 刪除節點注意,這里的編輯和刪除適用於所有分類節點和設備節點,准確的說,除了3個根節點外不能修改外,其他節點都是可修改的。

刪除節點的時候需要注意有個細節:如果當前刪除的節點沒有子節點,該節點直接進行刪除,如果包含了子節點,將會彈出一個對話框。

 

新增一個演示設備示例,Modbus-Tcp設備


 此處我們演示一個例子,添加一個Modbus-Tcp的設備,為啥要拿這個演示呢,因為基於HslCommunication組件的項目中提供了一個Modbus服務器演示項目,可以方便的進行本機的調試測試等等操作。

 下載地址:ModbusTcpServer.zip

 

 在開始開發前,還要說明個事情,雖然HslCommunication組件支持讀取線圈,寄存器,輸入點操作,但是此處只支持讀取寄存器,如果要讀取線圈怎么辦,可以采用的解決方案是把線圈的數據先挪到寄存器里,再進行解決。

 OK,萬事俱備,開始吧。

 

 然后我們輸入好設備的基本信息,比如說名字,描述,IP地址,端口號,客戶端的站號等等操作

然后點擊 確認 。回到節點配置器如下:

這樣就添加成功了一個設備,我們選中這個節點后,右側的數據列表就顯示了這個設備的相關信息。

先不要急着給設備添加訪問請求,因為目前沒有 配置解析規則 ,那么接下來的操作是點擊上圖的 保存文件 按鈕操作,然后回到主界面

 

這時候我們進入一個關鍵的操作,那就是配置解析規則,這個是什么意思呢,我先解釋下,我們從設備讀取數據通常是字節數據,並不是一些基礎的數據類型,比如說short,ushort,int,uint,float.double之類的數據,這個解析規則就是起這樣的作用的。比如ModbusTcp我們需要讀取20個地址長度的寄存器,那么讀取出來以后就是40字節長度,這些寄存器里都有什么數據呢

[      0     -     1       ]   數據一    short類型

[      2     -     3       ]   數據二   ushort類型

[      4     -     7       ]   溫度     float類型

[      8     -     31     ]   機器人關節數據    共計6個長度的float數組

[      32   -     39     ]   條碼     共計8個字節長度

 

以上是我們假設的數據,因為我也不知道您實際中會碰到怎樣的情況,此處就做了一些比較經驗的假設,還假設了一個數組的存在,條碼的字符串存在,OK,有了這些信息,我們就可以添加解析規則了。

還是老的操作,我們接下來要看看需要我們輸入什么信息了。

隨便輸入一個規則名稱吧,然后點擊 確認

 

接下來我們就需要來添加真正的規則解析了。

先根據上面的信息來填寫數據一的信息,索引為0,數據長度為1,因為沒有數組。點擊確認

 

 然后繼續添加規則

然后添加溫度數據

然后再添加機器人位置數據,注意,這是一個數組,長度為6,那么按照下面設置,數據長度的信息需要設置為6

在添加最后一個數據為條碼

 

 

 到這里為止,我們添加了所有的數據了,回到 解析規則器配置界面 ,看看剛剛配置到的成果吧,

 

 左邊顯示了字節的信息,共配置了40個字節的數據,每種數據類型的背景顏色都不一致,用於快速的區分不同種類的數據類型,可視化的界面顯示了所有配置的數據信息,類型,已經所在的字節位置。方便的快速檢查有沒有遺漏的信息。

 確認可以之后,點擊菜單的 保存文件 按鈕,然后回到節點配置器

 

 這下子可以真的完成數據配置界面了,這里再假設我們需要讀取的數據在地址0開始的20個地址的寄存器里。

 

 

 接下來就按照我們假設的信息輸入

 

 這里的請求地址是寄存器的地址,地址規則如下:

  •  Modbus協議   就是純數字的內容
  •  三菱PLC         D100,或是W1A0
  •  西門子PLC     M100,DB20.30之類的
  •  歐姆龍            D100,A100
  •  SimplifyNet     純數字,或是1.0.3

 這有什么規律呢,我們可以發現這些地址的格式需要HslCommunication支持,所以在配置前,最好使用HslCommunicationDemo軟件進行簡單的測試,關於該軟件的下載地址:

 HslCommunicationDemo.zip

 

 添加完成后,保存。回到軟件的主界面。然后點擊 啟動引擎 ,這時候我們還沒開始Modbus服務器,看看有什么效果。

 

 下面顯示加載的設備信息中發現了一台設備,類型為ModbusTcp設備,這台設備的服務器我們還沒有開啟,所以在設備監控項里這個設備處於閃爍中,我們把鼠標移動這個小框框里看看,

 

 

 可以看到一些設備的基本信息,名稱,狀態,上次接收時間,這里的上次接收時間是什么意思呢,初始化的情況下,默認為1天之前,好了,接下來我們開好服務器的軟件。

 

我們一點擊 啟動服務 按鈕后,運行日志立馬顯示有設備連接上來了,

當HslSharp的設備連接上了服務器之后,會怎么樣呢。

 背景顏色已經變綠色了,上次接收時間也更新了,狀態也變成了 在線 狀態,然后我們在看看OPC UA的客戶端,有什么效果。

 

然后我們更改下數據試試,在Modbus服務器的界面,在地址2里寫入float類型的數據,123.456試試看

 

 

然后再去OPC UA的客戶端界面刷新數據看看數據效果

 

此處驗證成功,再寫一個吧,寫個條碼信息,在地址16-19里,寫入ABCDEFGH;

 

 我們就可以看到

 此處有個小BUG,做演示截圖的時候來不及改這個BUG了,后面肯定會修復。並在日志里聲明

 

 

 

特別說明


 你看我們在配置數據解析規則的時候並沒有指定數據的大小端,比如三菱是小端在前,大端在后的,西門子是大端在前,小端在后的,Modbus協議和歐姆龍是以字為單位反轉的。實際上在本軟件中無需理會,我們只要關注什么數據,占了多少長度即可。還是相當方便的。如果有更好的建議,可以聯系作者改進。

 

 

 

ModbusTcp異形客戶端配置


 異形ModbusTcp的配置和大體上和上面的ModbusTCP配置是一樣的,但有一些小區別,需要下次完善更新。

 


免責聲明!

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



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