NModBus的使用

来源:https://www.cnblogs.com/mapleFlying/archive/2018/04/26/HowToUseNModBus4DotNet.html
-Advertisement-
Play Games

前言:最近在做一個項目,需要使用ModBus RTU與PLC進行通訊,現在將使用過程記錄,以便備查。 一、什麼是ModBus通訊協議 Modbus協議是應用於電子控制器上的一種通用語言,此協議支持傳統的RS-232、RS-422、RS-485和乙太網設備。 ModBus功能碼 二、ModBus通訊協 ...


  前言:最近在做一個項目,需要使用ModBus RTU與PLC進行通訊,現在將使用過程記錄,以便備查。


 

一、什麼是ModBus通訊協議

  Modbus協議是應用於電子控制器上的一種通用語言,此協議支持傳統的RS-232、RS-422、RS-485和乙太網設備。

  ModBus功能碼

01 READ COIL STATUS
02 READ INPUT STATUS
03 READ HOLDING REGISTER
04 READ INPUT REGISTER
05 WRITE SINGLE COIL
06 WRITE SINGLE REGISTER
15 WRITE MULTIPLE COIL
16 WRITE MULTIPLE REGISTER

 

二、ModBus通訊協議的.Net實現

    因為實現並不困難,網上有許多網友自己的實現,但在這裡我推薦一個github的開源實現類庫:NModBus4,github地址:https://github.com/NModbus4/NModbus4。針對TCP、UDP、RTU等的ModBus通訊方式都有實現。

    

    讀寫方法:

方法名 作用 所需參數 返回值 對應功能碼
ReadCoils 讀取DO的狀態

從站地址(8位)

byte slaveAddress

起始地址(16位)

 

ushort startAddress

讀取數量(16位)

ushort numberOfPoints

bool[] 01
ReadInputs 讀取DI的狀態

從站地址(8位)

byte slaveAddress

起始地址(16位)

 

ushort startAddress

讀取數量(16位)

ushort numberOfPoints

bool[] 02
ReadHoldingRegisters 讀取AO的值

從站地址(8位)

byte slaveAddress

起始地址(16位) 

ushort startAddress

讀取數量(16位)

ushort numberOfPoints

ushort[] 03
ReadInputRegisters 讀取AI的值

從站地址(8 位)

byte slaveAddress

起始地址(16位)

 

ushort startAddress

讀取數量(16位)

ushort numberOfPoints

ushort[] 04
WriteSingleCoil 寫入值到DO

從站地址(8位)

byte slaveAddress

線圈地址(16位)

ushort coilAddress

寫入值(布爾型)

bool value

無返回值 05
WriteSingleRegister 寫入值到AO

從站地址(8位)

byte slaveAddress

寄存器地址(16位)

ushort registerAddress

寫入值(16位)

ushort value

無返回值 06
WriteMultipleCoils 寫多線圈寄存器

從站地址(8位)

byte slaveAddress

起始地址(16位)

ushort startAddress

寫入值(布爾型數組)

bool[] data

無返回值 15
WriteMultipleRegisters 寫多個保持寄存器

從站地址(8位)

byte slaveAddress

 

起始地址(16位)

ushort startAddress,

寄存器值(16位整型數組)

ushort[] data

無返回值 16
ReadWriteMultipleRegisters 讀寫多個保持寄存器

從站地址(8位)

byte slaveAddress

讀起始地址(16位)

ushort startReadAddress

 

讀取數量(16位)

ushort numberOfPointsToRead,

寫入起始地址(16位)

ushort startWriteAddress,

寫入值(16位整型數組)

ushort[] writeData

ushort[] 23

    每個方法都有各自的非同步方法實現。

 

    這裡以RTU展示其使用方法:

 

 1    /// <summary>
 2          /// 創建 ModBus RTU 連接
 3          /// </summary>
 4          /// <param name="portName">埠號</param>
 5          /// <param name="baudRate">波特率</param>
 6          /// <param name="parity">奇偶校驗位</param>
 7          /// <param name="dataBits">數據位</param>
 8          /// <param name="stopBits">停止位</param>
 9          /// <returns></returns>
10          public  IModbusSerialMaster CreateModBusRtuConnection(string portName,int baudRate,Parity parity,int dataBits,StopBits stopBits)
11          {
12               return CreateModBusRtuConnect(new SerialPort(portName, baudRate, parity, dataBits, stopBits));
13          }
14 
15          public  IModbusSerialMaster CreateModBusRtuConnection(SerialPort serialPort)
16          {
17             IModbusSerialMaster master = null;
18             if (!serialPort.IsOpen)
19             {
20                 try
21                 {
22                     serialPort.Open();
23                 }
24                 catch (Exception e)
25                 {
26                     throw e;
27                 }
28             }
29             try
30             {
31               master = ModbusSerialMaster.CreateRtu(serialPort);
32               ///同時也可以配置master的一些參數
33               master.Transport.ReadTimeout = 100;//讀取數據超時100ms
34               master.Transport.WriteTimeout = 100;//寫入數據超時100ms
35               master.Transport.Retries = 3;//重試次數
36               master.Transport.WaitToRetryMilliseconds = 10;//重試間隔
37 
38             }
39             catch(Exception e)
40             {                 throw e;
41             }
42             return master;
43         }
44     }
View Code

 

    


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、Hibernate框架 Hibernate是一個開放源代碼的對象關係映射框架,它對 JDBC進行了非常輕量級的對象封裝,它將POJO類與資料庫表建立映射關係,是一個 全自動的ORM框架,hibernate可以自動生成SQL語句,自動執行。Hibernate可以應用在任何使用 DBC的場合,既可以 ...
  • 一 引入背景 在軟體開發周期中,無論是開發中,或是測試中,或是上線後,選擇合適的工具監控程式的運行狀態至關重要,只有如此,才能更好地排查程式問題和檢測程式性能問題等。本篇文章主要與大家分享,如何利用Log4net在項目中記錄日誌文件。在應用程式出現問題時,啟用日誌記錄有助於解決問題。使用log4ne ...
  • 一種啟動和檢測 UWP 應用的方法 背景 我們發佈過多款 UWP 平臺的同類型 App ,最近有一個需求:用傳統 Win32 程式啟動我們的 UWP 程式。因為我們的每一個UWP App在客戶機器上都是互斥的,也就是同時只能存在一個,並且我們的win32程式也只有一個版本,所以啟動 UWP App ...
  • qMISPlat是什麼? qMISPlat(業務配置開發平臺)是一套基於.net core 2.0、跨平臺的,面向開發人員和具有一 定技術水平的業務人員使用的業務配置開發平臺。基於此平臺您只需通過配置和少量開發即可快速 搭建滿足用戶需求的業務系統,大大降低項目開發工作量。平臺代碼100%開源,免費下 ...
  • 腳註和章節附註是對文本的補充說明。腳註一般位於頁面的底部,可以作為文檔某處內容的註釋;章節附註一般位於文檔的末尾,列出引文 的出處等。在本示例中將介紹如何來添加或刪除Word腳註。 工具使用: Free Spire. Doc for .NET(免費版) 第一步 :dll引用 第二步: 添加Word腳註、章節附註 ...
  • 根據一個Image的Url鏈接可以在瀏覽器中顯示一個圖片,如果要通過代碼將圖片保存在本地磁碟可以通過以下方式: 1、首先獲取圖片的二進位數組。 static public byte[] GetBytesFromUrl(string url) { byte[] b; HttpWebRequest my ...
  • 一、前言 今年開始安裝了VS2017,有時候需要使用到腳本編譯,奈何MS在VS2017上的腳本編譯上不再支持VS2015那種 "%VS140COMNTOOLS%vsvars32.bat",我真是服了。那麼沒辦法,我使用devenv總可以吧,於是我就寫了一段程式用於獲取最新版本VS的devenv。網上 ...
  • 首先聲明 這是讀了 愉悅的紳士 文章 《菜鳥之旅——學習線程(線程和線程池)》 《Task與線程》 的一些個人總結,還是那句話,如有不對,歡迎指正 文章以代碼加註釋的方法展示。 //線程的創建,阻塞和同步 //對方法加鎖 //線程池 //Task 任務 推薦使用任務來做多線程的,便於管理 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...