Modbus TCP

Modbus

(👆 百度百科,放心跳轉)

起源

Modbus 由 Modicon 公司于 1979 年開發,是一種工業現場總線協議標準。
Modbus 通信協議具有多個變種,支持串口,以太網多個版本,其中最著名的是 Modbus RTU、
Modbus ASCII 和 Modbus TCP 三種。Modbus TCP 是在施耐德收購 Modicon 后 1997 年發布的。

分類

1、Modbus RTU(Remote Terminal Unit)
運行在串口上的協議,采用二進制表現形式以及緊湊的數據結構,通信效率高,應用廣泛。
2、Modbus ASCII
運行在串口上的協議,采用 ASCII 碼進行傳輸,并且在每個字節的開始和結束 都有特殊字符作為標志,傳輸效率遠遠低于 Modbus RTU,只有傳輸數據量較小時,才會考慮。
3、Modbus TCP
運行在以太網上的協議。

優勢

免費、簡單、容易使用。

應用場景

Modbus 協議是現在國內工業領域應用最多的協議,不只 PLC 設備,各種終端設備,比如水控機、水表、電表、工業秤、各種采集設備,都應用此協議。

通信

1、Modbus 采用主從問答式(master / slave)通信;

有一個節點是 master 節點,其他使用 Modbus 協議參與通信的節點是 slave 節點(可多個), 每個 slave 設備都有唯一一個地址。

Modbus TCP

Modbus TCP 協議 和 Modbus RTU 協議非常相似,只要把 RTU 協議中兩個字節的校驗碼去掉,然后在 RTU 協議的開始加上 5 個 0 和 1 個 6,通信時通過 TCP/IP 網絡協議發送出去即可。
在這里插入圖片描述

特點

1、見“Modbus ——> 通信”;

2、該協議是 應用層的協議,基于傳輸層的 TCP協議 進行通信;
3、Modbus TCP 默認接收報文的端口號為 502。

協議格式(報文頭 + 功能碼 + 數據)

Modbus TCP/IP 協議 最大數據幀長度為 260 字節。報文格式如下:
在這里插入圖片描述

報文頭

在這里插入圖片描述

功能碼

在這里插入圖片描述

寄存器

在這里插入圖片描述

線圈寄存器,類比為開關量,每一個 bit 都對應一個信號的開關狀態,所以 一個 byte 就可以同時控制8 路的信號。 線圈寄存器支持也支持寫,寫又分為寫單個線圈寄存器和寫多個線圈寄存器。
對應功能碼:0x01 0x05 0x0f
離散輸入寄存器,相當于線圈寄存器的只讀模式,也是每個 bit 表示一個開關量,其開關量只能讀取輸入的開關信號,是不能寫的。比如取外部按鍵的按下還是松開。
對應功能碼: 0x02
保持寄存器,單位不再是 bit 而是兩個 byte,是可以存放具體的數據量的。比如設置時間年月日,不但可以寫入也可以讀出。該寄存器并可讀寫的,寫也分為寫單個保持寄存器和寫多個保持寄存器。
對應功能碼: 0x03 0x06 0x10
輸入寄存器,和保持寄存器類似,但也只支持讀而不能寫。一個寄存器也是占據兩個 byte 的空間。比如,通過讀取輸入寄存器獲取現在的 AD 采集值。
對應功能碼: 0x04

讀數據

主機 ——>從機
報文頭 + 功能碼 + 起始地址 + 數量
7 + 1 + 2 + 2 = 12
從機 ——>主機
報文頭 + 功能碼 + 字節計數 + 數據
7 + 1 + 1 + n = 9 + n

0x01(讀線圈狀態)

在這里插入圖片描述

0x02(讀離散輸入狀態)

在這里插入圖片描述

0x03(讀保持寄存器)

在這里插入圖片描述

0x04(讀輸入寄存器)

在這里插入圖片描述

寫單個

主機 ——>從機
報文頭 + 功能碼 + 地址 + 斷通標志 / 數據
7 + 1 + 2 + 2 = 12
從機 ——>主機
原文返回

0x05(寫單個線圈)

在這里插入圖片描述

0x06(寫單個保持寄存器)

在這里插入圖片描述

寫多個

主機 ——>從機
報文頭 + 功能碼 + 起始地址 + 數量 + 字節計數 + 數據
7 + 1 + 2 + 2 + 1 + n = 13 + n
從機 ——>主機
報文頭 + 功能碼 + 起始地址 + 數量
7 + 1 + 2 + 2 = 12

0x0F(寫多個線圈)

在這里插入圖片描述

0x10(寫多個保持寄存器)

在這里插入圖片描述

工具軟件的安裝與使用

Modbus poll

破解

點擊 connection -> connect,輸入序列號即可。

使用

先設置,后連接。
在這里插入圖片描述

Modbus slave

破解

點擊 connection -> connect,輸入序列號即可。

使用

先設置,后連接。
在這里插入圖片描述

網絡調試助手

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

Wireshark(Windows 版)

在這里插入圖片描述

捕獲器選擇:
如果連接有線網絡,選擇本地連接 / 以太網;
如果連接無線網絡,選擇 WLAN;
如果只是在本機上的通信,可以選擇 NPCAP Loopback apdater 或 Adapter for loopback traffic capture。
過濾條件:

1、過濾端口:tcp.port == 502
2、過濾IP:ip.addr == Windows 的IP
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

練習:

1、讀傳感器數據,讀1個寄存器數據,寫出主從數據收發協議。
在這里插入圖片描述

2、寫出控制 IO 設備開關的協議數據,操作1個線圈,置1。
在這里插入圖片描述

3、在虛擬機編寫客戶端,實現 poll 端功能,和 Slave 通信,讀保持寄存器的三個值。

    uint8_t hldreg[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x00, 0x00, 0x03};send(sockfd, hldreg, sizeof(hldreg), 0);uint8_t buf[32] = {};recv(sockfd, buf, sizeof(buf), 0);for (int i = 0; i < buf[8]; i++)printf("%#x ", buf[9+i]);putchar(10);

運行結果如下:
在這里插入圖片描述
在這里插入圖片描述

4、編寫客戶端程序,實現對 Slave 單個線圈的控制(置一)。

    uint8_t coil[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x05, 0x00, 0x00, 0xff, 0x00};send(sockfd, coil, sizeof(coil), 0);

運行結果如下:
在這里插入圖片描述

5、封裝函數:設置單元標識符(從機地址)

void set_slave_id(uint8_t *p, int slave_id){p[6] = slave_id;
}

6、封裝函數:讀保持寄存器

void read_hldreg(int addr, int num, uint8_t *hldreg, uint8_t *dest){hldreg[5] = 0x06;hldreg[7] = 0x03;hldreg[8] = addr >> 8;hldreg[9] = addr & 0xff;hldreg[10] = num >> 8;hldreg[11] = num & 0xff;send(sockfd, hldreg, 12, 0);			// 指針類型,不能 sizeof(hldreg)recv(sockfd, dest, 64, 0);				// 64 為數組 dest 的長度,sockfd 為全局變量
}

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

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

相關文章

基于STM32的數字圖像處理與模式識別算法優化

基于STM32的數字圖像處理與模式識別算法優化是一項涉及圖像處理和機器學習領域的研究任務&#xff0c;旨在實現高效的圖像處理和模式識別算法在STM32微控制器上的運行。本文將介紹基于STM32的數字圖像處理與模式識別算法優化的原理和實現步驟&#xff0c;并提供相應的代碼示例。…

圖神經網絡與圖注意力網絡

隨著計算機行業和互聯網時代的不斷發展與進步&#xff0c;圖神經網絡已經成為人工智能和大數據的重要研究領域。圖神經網絡是對相鄰節點間信息的傳播和聚合的重要技術&#xff0c;可以有效地將深度學習的理念應用于非歐幾里德空間的數據上。本期推送圍繞圖神經網絡與圖注意力網…

dockerfile多階段構建

我理解多階段構建 多階段構建就是為了鏡像更小更容易維護&#xff0c;易讀&#xff0c;最終從一個階段的核心內容復制到另一個階段&#xff0c;而不必需要那些非核心的內容。 舉例說明 FROM registry.cn-hangzhou.aliyuncs.com/2qqq/node:14 as build COPY ./app WORKDIR /app…

RK3588平臺開發系列講解(嵌入式AI篇)嵌入式AI模型的部署

文章目錄 一、嵌入式AI模型的部署二、AI模型訓練框架有哪些三、rknn-toolkit可支持轉換的模型沉淀、分享、成長,讓自己和他人都能有所收獲!?? ?? 本篇將給大家介紹嵌入式AI模型的部署。 一、嵌入式AI模型的部署 模型的部署,是指將訓練好的模型放到運行環境中進行推理的…

【11月比賽合集】48場可報名的數據挖掘大獎賽,任君挑選!

CompHub[1] 實時聚合多平臺的數據類(Kaggle、天池…)和OJ類(Leetcode、牛客…&#xff09;比賽。本賬號會推送最新的比賽消息&#xff0c;歡迎關注&#xff01; 以下信息僅供參考&#xff0c;以比賽官網為準 目錄 Kaggle&#xff08;9場比賽&#xff09;阿里天池&#xff08;…

PHP curl常見CURLESSLCACERT (60)錯誤及get,post實例

常見的 CURLE_SSL_CACERT (60) 錯誤&#xff0c; 解決辦法&#xff1a; 從 https://curl.haxx.se/ca/cacert.pem (opens new window)下載最新的 可直接下載2022 年 3 月 22 日 配置 php.ini 文件&#xff0c;搜索 [curl] &#xff0c;在下方添加 curl.cainfo "D:\php…

HarmonyOS(三)—— 應用程序入口—UIAbility

前言 學習過android的同學都是知道Activity&#xff0c;Activity是Android組件中最基本也是最為常見用的四大組件之一&#xff0c;用戶可以用來交互為了完成某項任務。 Activity中所有操作都與用戶密切相關&#xff0c;是一個負責與用戶交互的組件&#xff0c;可以通過setCon…

10個容易被忽視的FastAPI實用功能

大家好&#xff0c;FastAPI是一種現代、高性能的Python Web框架&#xff0c;用于構建Web應用程序和API。它基于Python的異步編程庫asyncio和await語法&#xff0c;以及類型注解和自動文檔生成等特性&#xff0c;提供了快速、易用和可靠的開發體驗&#xff0c;接下來本文將介紹1…

ElasticSearch之Nodes info API

查看當前集群中各節點的信息&#xff0c;執行如下命令&#xff1a; curl -X GET "https://localhost:9200/_nodes?pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"本接口允許指定節點和指標。 當前支持的指標&#…

機器視覺公司為什么寧愿高薪招新人,也不愿加薪留老員工?老員工特殊時間特殊照顧,新人必須常照顧

?職場常出現的“薪酬倒掛”現象。其實這是正常的職場規律&#xff0c;實際上是企業管理不得不面對的一種選擇。 很多企業寧愿老員工離職也不加薪&#xff0c;卻高薪請新員工&#xff1f;這就是職場上的鯰魚效應&#xff0c;一些高層領導認為一個企業&#xff0c;老員工好比沙…

基本的彈層,點擊彈出

<div class"role"><el-button type"primary" size"mini" click"showDialog true">添加角色</el-button></div><!--控制彈框的顯示隱藏visible .sync可以點擊X關閉彈框 --> <el-dialog width"…

Spring Cloud學習(十一)【深入Elasticsearch 分布式搜索引擎03】

文章目錄 數據聚合聚合的種類DSL實現聚合RestAPI實現聚合 自動補全拼音分詞器自定義分詞器自動補全查詢completion suggester查詢RestAPI實現自動補全 數據同步數據同步思路分析實現elasticsearch與數據庫數據同步 集群搭建ES集群創建es集群集群狀態監控創建索引庫1&#xff09…

【RocketMq系列-02】RocketMq的架構解析和高性能設計

RocketMq系列整體欄目 內容鏈接地址【一】RocketMq安裝和基本概念https://zhenghuisheng.blog.csdn.net/article/details/134486709【二】RocketMq的架構解析和高性能設計/font>https://zhenghuisheng.blog.csdn.net/article/details/134559514 RocketMq的架構解析和高性能設…

CentOS 防火墻查看已開發的端口

在CentOS上&#xff0c;你可以使用 firewall-cmd 命令來查詢當前防火墻規則&#xff0c;以查看已經開放的端口。以下是一些常見的查詢命令&#xff1a; 查詢已開啟的端口&#xff1a; sudo firewall-cmd --list-ports這將列出所有已經開啟的端口。 查詢已開啟的服務&#xf…

leetcode:520. 檢測大寫字母

一、題目&#xff1a; 鏈接&#xff1a;520. 檢測大寫字母 - 力扣&#xff08;LeetCode&#xff09; 函數原型&#xff1a;bool detectCapitalUse(char* word) 二、思路&#xff1a; 本題較為簡單&#xff0c;分為三種情況&#xff1a; 1.首字母大寫&#xff0c;其余小寫 2.首字…

外網IP和內網ip的區別

首先得先知道什么是ip地址&#xff0c;它就是唯一標識連接網絡的設備的&#xff0c;即IP地址充當了設備在網絡中的“住址”&#xff0c;使得設備能夠相互通信和交換數據。 我們常聽開發人員說外網內網&#xff0c;那么它們有什么區別呢&#xff1f; 外網可以理解為互聯網&…

RT-Thread Sensor框架使用 - 1

RT-Thread Sensor框架使用 - 1 簡介Sensor框架結構函數說明rt_device_findrt_device_openrt_device_read 簡介 使用氣體傳感器&#xff0c;對接到sensor框架中使用。 Sensor框架結構 device框架 --》sensor框架 --》具體的設備 函數說明 rt_device_find 查找設備時的名稱…

【Docker】從零開始:6.配置鏡像加速器

【Docker】從零開始&#xff1a;5.配置鏡像加速器 什么是鏡像加速器&#xff1f;為什么要配置docker鏡像加速器?常見的Docker鏡像加速器有哪些&#xff1f;如何申請Docker鏡像加速器如何配置Docker鏡像加速器 什么是鏡像加速器&#xff1f; 鏡像加速器是一個位于Docker Hub之…

vue2.x中使用JS與路由守衛配置、vue2.x中使用TS與路由守衛的配置和vuex的配置以及TS在vue2.x中的使用說明

vue2.x 事件修飾符 <button click.stop.self"handleDelete(item)"></button>在使用 $confirm 時&#xff0c;使用 await 方式時&#xff0c;需要添加 catch 回調&#xff0c;否則無法獲取 $confirm 關閉和取消時的標識值&#xff0c;并且后續代碼停止執…

騰訊微服務平臺TSF學習筆記(二)--如何使用spring cloud zuul實現線上流量復制

需求提了n遍了&#xff0c;好好好&#xff0c;那這個需求就由我測試來做 1.在zuul端配置&#xff1a; ●假設provider-mirror是provider-demo的灰度應用 package com.tencent.tsf.msgw.zuul1.filter;import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.Re…