標籤:env void 管理 sda hub cps 執行個體化 href 控制台
前言
本文將使用一個Nuget公開的組件技術來實現一個ModBus TCP的伺服器端資料引擎,方便的實現接收來自各種裝置的資料。
在visual studio 中的Nuget管理器中可以下載安裝,也可以直接在Nuget控制台輸入下面的指令安裝:
Install-Package HslCommunication
Nuget安裝教程 http://www.cnblogs.com/dathlin/p/7705014.html
支援人員QQ群:592132877 (組件的版本更新細節也將第一時間在群裡發布)
Reference
ModBus組件所有的功能類都在 HslCommunication.ModBus命名空間,所以再使用之前先添加
using HslCommunication.Enthernet;
How to Use
private bool m_IsModBusStart { get; set; } = false; // 服務是否啟動 private ModBusTcpServer tcpServer; // 伺服器引擎對象 private void userButton1_Click(object sender, EventArgs e) { if (!m_IsModBusStart) { m_IsModBusStart = true; tcpServer = new ModBusTcpServer(); // 執行個體化伺服器接收對象 tcpServer.LogNet = new HslCommunication.LogNet.LogNetSingle(Application.StartupPath + @"\Logs\log.txt"); // 設定記錄檔 tcpServer.OnDataReceived += TcpServer_OnDataReceived; // 關聯資料接收方法 tcpServer.ServerStart(51234); // 綁定連接埠 timer.Start(); // 啟動服務 } } private void TcpServer_OnDataReceived(byte[] object1) { // 顯示出來接收到了什麼資料 BeginInvoke(new Action<byte[]>(ShowModbusData), object1); } private void ShowModbusData(byte[] modbus) { textBox1.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " :" + HslCommunication.BasicFramework.SoftBasic.ByteToHexString(modbus) + Environment.NewLine); }
特別說明:
伺服器只負責接受Modbus TCP協議的資料,無論用戶端發了讀寫指令,都會觸發接收事件,並返回一串成功的資料。
所以在伺服器端,接收用戶端的讀取是無效的,返回資料空。
最關鍵的地方在於接收來自各個裝置的寫入功能,這樣你就可以開發一個資料總站,來負責搜集資料資訊。
如下視窗就是測試例子,西門子1215C的PLC向伺服器進行發送讀寫資料,伺服器端的接收資料顯示。
注意:
資料串的第7個位元組為Modbus的站號資訊,如下介面是FF,也即255,可以以此來區分不同的裝置發來的資料資訊,所以此處一個伺服器執行個體掛的最大用戶端數為256台裝置,前兩個位元組為訊息的頭序列,如果裝置可以固定訊息頭,用這個來標識裝置的話,就可以區分65536台裝置。
參考連結:
如果你對MODBUS TCP不熟悉,那麼請參照如下地址,我就是參照該地址的部落格開發的代碼:
http://blog.csdn.net/thebestleo/article/details/52269999
C# 開發ModBus Tcp的伺服器程式 實現ModBus Tcp資料總換