ModBus協議詳解:從基礎概念到C#實現RTU與TCP通訊

ModBus協議是莫迪康公司為了讓PLC之間進行數據通信而設計出來的協議。它是一種總線協議,是一種一對多,上下級的關系。

它的應用廣泛,具有免費開源,操作簡單的有點,并且可以兼容串口和網絡通訊,兼容也不錯。

數據類型:輸入布爾(輸入線圈),輸入寄存器,輸出布爾(輸出線圈),輸出寄存器

布爾就是bool值,寄存器可以是int或者float類型

常用功能碼

1、讀取

讀取輸出線圈(Read Coils) 0x01

讀取輸入線圈 (Read DisCrete Input)0x02,(主機只讀)

讀取輸出寄存器(Read Holding Registers)0x03,

讀取輸入寄存器(Read Inpute Registers)0x04,(主機只讀)

2、寫入

寫入單個線圈(Write Single Coil)0x05

寫入單個寄存器(Write Single Register)0x06

寫入多個線圈(Write Multple Coils)0x0F

寫入多個寄存器(Write Multple Register)0x10

三種傳輸類型

1、ModbusRTU,用于串口通信,傳遞字節碼,效率更高

流程是主機向從機發出請求,從站響應請求后,主站才能接收到數據。

主機報文:從站地址+功能碼+起始地址+數據長度+校驗位(從站地址,功能碼占1個字節,起始地址、數據長度、檢驗位占2個字節)

數據長度可以看做是讀取的行數

例如:從機的設備地址是01,功能碼是讀取輸出寄存器03,起始寄存器地址是從第0開始讀取,讀取的數量是9,得出的報文就是:01 03 00 00 00 09 XX XX

從機報文:從站地址+功能碼+數據的字節位數+數據+校驗位(從站地址,功能碼,數據的字節位數占1個字節,數據、檢驗位占2個字節)

例如:從機的設備地址是01,功能碼是讀取輸出寄存器03,每次讀取4個字節,從機傳輸的值都是65,得出的報文就是:01 03 04 00 41 00 41 XX XX

2、ModBusAscii,用于串口通信,傳遞Ascii碼

3、ModBusTCP,用于網絡傳輸

4、ModBusUDP,用于網絡傳輸

5、ModBusRTUOverTCP/UDP,串口轉網口通信

6、ModBusAsciiOverTCP/UDP,串口轉網口通信

使用C#完成ModBus的RTU和TCP通訊

進行測試前需要用到Modbus Slave開啟一個ModBus服務

1、RTU通訊(串口通訊)

    var modbus = new HslCommunication.ModBus.ModbusRtu();modbus.SerialPortInni(cfg => {cfg.BaudRate = 9600;cfg.PortName = "COM2";cfg.Parity = System.IO.Ports.Parity.None;cfg.DataBits = 8;cfg.StopBits = System.IO.Ports.StopBits.One;// 每次寫falsecfg.RtsEnable = false;});// 設置超時時間modbus.ReceiveTimeOut = 5000;// 設置起始地址是否從0開始,有些情況是從1開始modbus.AddressStartWithZero = true;// 設置數據大小端modbus.DataFormat = HslCommunication.Core.DataFormat.CDAB;// 設置設備地址modbus.Station = 1;modbus.Crc16CheckEnable = true;modbus.IsClearCacheBeforeRead = false;var openResult = modbus.Open();if(openResult.IsSuccess == false){MessageBox.Show("打開ModBus失敗");return;}// 讀取數據,從第0位開始,讀取5個數據var readResult = await modbus.ReadInt16Async("0", 5);if(readResult.IsSuccess == true){this.textBox1.Text = this.textBox1.Text + string.Join(",", readResult.Content) + Environment.NewLine;}// 繼續讀取另一個設備地址的Bool類型modbus.Station = 2;var readBool = await modbus.ReadBoolAsync("5");if (readResult.IsSuccess == true){this.textBox1.Text = this.textBox1.Text + readBool.Content + Environment.NewLine;}// 寫入數據modbus.Station = 1;var writeResult = await modbus.WriteAsync("0", (short)90);if (writeResult.IsSuccess == true){this.textBox1.Text = this.textBox1.Text + "寫入成功" + Environment.NewLine;}

2、TCP通訊

    var modBus = new HslCommunication.ModBus.ModbusTcpNet("127.0.0.1");modBus.Port = 502;modBus.Station = 1;modBus.ConnectTimeOut = 10000;modBus.ReceiveTimeOut = 5000;modBus.AddressStartWithZero = true;modBus.IsStringReverse = false;modBus.DataFormat = HslCommunication.Core.DataFormat.CDAB;// 讀取數據var result = await modBus.ReadInt16Async("0");if (result.IsSuccess){this.textBox1.Text = this.textBox1.Text + result.Content + Environment.NewLine;}// 寫入數據var resultWrite = await modBus.WriteAsync("1", 66);if (resultWrite.IsSuccess){this.textBox1.Text = this.textBox1.Text + "寫入成功" + Environment.NewLine;}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80147.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80147.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80147.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP數組排序深度解析:sort()、rsort()、asort()、arsort()、ksort()、krsort() 的適用場景與性能對比

在PHP開發中,數組排序是日常操作的核心技能之一。無論是處理用戶數據、產品列表,還是分析日志信息,合理的排序方法能顯著提升代碼的效率和可維護性。PHP提供了多種數組排序函數(如 sort()、rsort()、asort() 等)&#…

RabittMQ-高級特性2-應用問題

文章目錄 前言延遲隊列介紹ttl死信隊列存在問題延遲隊列插件安裝延遲插件使用事務消息分發概念介紹限流非公平分發(負載均衡) 限流負載均衡RabbitMQ應用問題-冪等性保障順序性保障介紹1順序性保障介紹2消息積壓總結 前言 延遲隊列介紹 延遲隊列(Delaye…

HOW - 在 Mac 上的 Chrome 瀏覽器中調試 Windows 場景下的前端頁面

文章目錄 為什么需要模擬 Windows 環境?一、修改 User-Agent 模擬 Windows 瀏覽器方法 1:通過 Chrome 開發者工具修改 UA方法 2:使用瀏覽器插件 二、模擬 Windows 的字體和滾動條樣式1. 模擬 Windows 字體2. 強制顯示滾動條(模擬 …

如何刪除豆包本地大模型

由于無法選擇大模型的安裝位置,因此會占用C盤大量空間,然后又找到不卸載的地方,經排查豆包大模型安裝位為:C:\Users\[當前電腦用戶]\AppData\Local\Doubao\User Data,只能進行手動卸載。

Linux C語言線程編程入門筆記

目錄 開發環境準備 線程基礎概念 進程與線程的關系 線程生命周期 創建線程 等待線程結束 線程函數和參數 互斥鎖與共享資源保護 總結 開發環境準備 操作系統:以 Linux 為例(Ubuntu/CentOS 等主流發行版)。請確保系統已安裝 GNU C 編…

levelDB的數據查看(非常詳細)

起因:.net大作業天氣預報程序(WPF)答辯時,老師問怎么維持數據持久性的,啟動時加載的數據存在哪里,我明白老師想考的應該是json文件的解析(正反),半天沒答上來存那個文件了(老師默認這個文件是自…

數據分析怎么做?高效的數據分析方法有哪些?

目錄 一、數據分析的對象和目的 (一)數據分析的常見對象 (二)數據分析的目的 二、數據分析怎么做? (一)明確問題 (二)收集數據 (三)清洗和…

手寫 Vue 源碼 === 完善依賴追蹤與觸發更新

目錄 依賴收集的完整實現 trackEffects:建立雙向依賴關系 觸發更新的完整實現 完整的響應式流程 為什么使用 Map 而不是 Set? 總結 在上一篇文章中,我們介紹了 Vue3 響應式系統的基本原理和 activeEffect 的作用。現在,我們將深入探討完善后的依賴追蹤和觸發更新機制…

從代碼學習深度學習 - 區域卷積神經網絡(R-CNN)系列 PyTorch版

文章目錄 前言R-CNNFast R-CNN興趣區域匯聚層 (RoI Pooling)代碼示例:興趣區域匯聚層 (RoI Pooling) 的計算方法Faster R-CNNMask R-CNN雙線性插值 (Bilinear Interpolation) 與興趣區域對齊 (RoI Align)興趣區域對齊層的輸入輸出全卷積網絡 (FCN) 的作用掩碼輸出形狀總結前言…

18個國內wordpress主題推薦

工廠wordpress中文主題 紅藍色搭配的工廠wordpress中文主題,適合從事生產、加工的工廠官方網站使用。 https://www.jianzhanpress.com/?p8533 Pithy設計師wordpress網站模板 精練簡潔的wordpress模板,設計師或設計工作室展示型網站模板。 https://w…

低成本自動化改造技術錨點深度解析

執行摘要 本文旨在深入剖析四項關鍵的低成本自動化技術,這些技術為工業轉型提供了顯著的運營和經濟效益。文章將提供實用且深入的指導,涵蓋老舊設備聯網、AGV車隊優化、空壓機系統智能能耗管控以及此類項目投資回報率(ROI)的嚴謹…

Oracle — 數據管理

介紹 Oracle數據庫作為全球領先的關系型數據庫管理系統,其數據管理能力以高效性、安全性和智能化為核心。系統通過多維度技術實現海量數據的存儲與實時處理,支持高并發事務操作與復雜分析查詢,滿足企業關鍵業務需求。在安全領域,O…

【PhysUnits】3.3 SI 基礎量綱單位(units/base.rs)

一、源碼 這段代碼定義了一系列基礎物理量綱的類型別名,并使用標記 trait Canonical 來表示它們是國際單位制(SI)中的基本單位。 use crate::Dimension; use typenum::{P1, Z0};/// 標記特質,表示基礎量綱單位 pub trait Canoni…

硬件實操技巧記錄

本篇自用,防止自己忘記 焊接技巧 一般都是隨機電烙鐵錫膏組合。 拆電阻時,電烙鐵放在電阻上,加錫膏,這個時候熔點會降低,電阻更容易掉下來,用電烙鐵帶走;焊電阻時,一端點錫膏&…

13.thinkphp的Session和cookie

一.Session 1. 在使用Session之前,需要開啟初始化,在中間件文件middleware.php; // Session 初始化 \think\middleware\SessionInit::class 2. TP6.0不支持原生$_SESSION的獲取方式,也不支持session_開頭的函數&…

TensorFlow中數據集的創建

目錄 前言示例示例1示例2示例3示例4 前言 TensorFlow 的 tf.data.Dataset API 提供了一種靈活且高效的方式來加載和預處理數據。它可以輕松處理大規模數據集,并支持多種數據源格式。 所有數據集相關的內容都在tf.data中,from_tensor_slices:…

第十六章,網絡型攻擊防范技術

網絡攻擊介紹 網絡攻擊 --- 指的是入侵或破壞網絡上的服務器 ( 主機 ) ,盜取服務器的敏感數據或占用網絡帶寬。 網絡攻擊分類: 流量型攻擊 網絡層攻擊 應用層攻擊 單包攻擊 畸形報文攻擊 --- 向目標主機發送有缺陷的IP報文,使得目標在…

服務器不備案有影響嗎

在當今數字化的時代,服務器成為了眾多企業和個人開展業務、展示自我的重要工具。然而,有一個問題常常被忽視,那就是服務器不備案到底有沒有影響? 答案是肯定的!服務器不備案,影響可不小。據相關數據顯示&a…

【LeetCode Solutions】LeetCode 176 ~ 180 題解

CONTENTS LeetCode 176. 第二高的薪水(SQL 中等)LeetCode 177. 第 N 高的薪水(SQL 中等)LeetCode 178. 分數排名(SQL 中等)LeetCode 179. 最大數(中等)LeetCode 180. 連續出現的數字…

D720201 PCIE 轉USB HUB

1. 啟動時出現了下面錯誤 [ 4.682595] pcieport 0004:00:00.0: Signaling PME through PCIe PME interrupt [ 4.684939] pci 0004:01:00.0: Signaling PME through PCIe PME interrupt [ 4.691287] pci 0004:01:00.0: enabling device (0000 -> 0002) [ 5.2962…