一文讲透Modbus协议
前言
Modbus是一种串行通讯协议,是Modicon公司(现在的施耐德电气 Schneider Electric) 于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议事实上的业界标准,并且现在是工业电子设备之间常见的连接方式。
Modbus在工业环境下很流行,因为它是公开发布而免版税的。它是为工业应用开发的,与其他标准相比,它相对易于部署和维护,除了要传输的数据格式的大小外,几乎没有其他限制。Modbus使用RS485作为其物理层。
Modbus支持连接到同一网络的许多设备之间进行通信,例如,一个测量温度和湿度并将结果发送给服务器的系统中,Modbus通常用于在监控和数据采集(SCADA)系统中将计算机或服务器与远程终端单元(RTU)连接。许多数据类型是根据梯形逻辑(一种通过基于继电器逻辑电路图的图形来代表程序的一种编程语言)的行业用法机及其在驱动继电器中的用途来命名的: 单位物理输出称为线圈,单位物理输入称为离散输入或触点。
Modbus协议在RS232,RS422和RS485之上运行。有针对Modbus帧的基于IP链路层定义的 Modbus/TCP规范。Modbus协议基于Request(请求)/Response(响应)模型。
Modbus通信协议的类型
串行端口和以太网存在多种版本的Modbus协议,最常见的是:
- Modbus RTU
- Modbus ASCII
- Modbus TCP
- Modbus Plus
Modicon发布了基于主从架构的多点网络的Modbus通信接口。Modbus节点之间的通信通过发送请求和读取响应类型消息来实现。
Modbus协议及其物理媒体
Modbus是描述消息通信对话框的开放标准。
Modbus通过多种类型的物理介质进行通信,例如:
串行RS-232
串行RS-485
串行RS-422
以太网
最初的Modbus接口在RS-232串行通信上运行,但是大多数后来的Modbus实现使用RS-485,因为它允许:
距离更长。
更高的速度。
单个多点网络中可能有多个设备。
使用两线制通过串行RS-485物理介质进行主从Modbus通信 发送 并接收连接。
在简单的接口(如RS232或RS485)上,Modbus消息以纯格式通过网络发送,并且该网络将专用于Modbus通信。
但是,如果您的网络需要使用功能更广泛的网络系统(例如以太网上的TCP / IP)使用多个异构设备,则Modbus消息将以此物理接口规定的格式嵌入到以太网数据包中。
因此,在这种情况下,Modbus和其他类型的混合协议可以同时存在于同一物理接口上。
Modbus消息结构简介
Modbus的主要消息结构是点对点。Modbus能够在点对点和多点网络上运行。
Modbus设备使用Master-Slave(Ethernet称为Client-Server)技术进行通信,其中只有一个设备(Master 或Server)可以请求数据(称为查询)。
其他设备(Slaves或Clients)通过将请求的数据提供给主服务器或执行查询中请求的操作来进行响应。
从站是任何外围设备,例如I / O传感器,阀门,网络驱动器或其他测量类型的设备,它们处理信息并使用Modbus将其响应消息发送到主设备。
主机可以寻址单个从机或向所有从机发起广播消息。从站将分别对所有寻址到它们的消息查询返回响应,但不响应广播消息。
从站不会自行回复消息,而仅响应从主站发送的消息查询。
对于使用以太网的协议(例如Modbus TCP),任何设备都可以发出Modbus命令,因此所有设备都可以充当主设备,尽管通常只有一个设备充当主设备。
主站(Master)的查询将包括:
- 从站地址(广播地址)。
- 带有从站读取或写入数据命令的功能代码。
- 如果写命令是由主机发起的,则写命令为“数据”。
- 错误检查字段。
命令
Modbus命令可以指示Modbus设备执行以下操作:
- 更改其寄存器之一的值,该值将被写入线圈和保持寄存器。
- 读取I / O端口:从Discrete和Coil端口读取数据,
- 命令设备发送回其线圈和保持寄存器中包含的一个或多个值。
Modbus命令包含要使用的设备的Modbus地址(1到247)。即使其他设备可能会收到命令,只有被寻址的设备才会响应并执行该命令(例外是发送到节点0的特定可广播命令,该命令已执行但未确认)。
所有Modbus命令都包含校验和信息,以使接收者能够检测到传输错误。
错误检查
错误检查是主机或从机在传输或响应开始时创建的值,然后在接收到消息时进行检查以验证内容是否正确。
从站的响应包括:
- 确认请求的字段。
- 要返回的数据。
- 错误检查数据。
如果未发生错误,则从站的响应将包含所请求的数据。
如果从站接收到的消息查询中发生错误,或者从站无法执行请求的操作,则从站将返回异常消息作为其响应。
从站的消息帧的错误检查字段允许主站确认消息的内容有效。
在本文中,您了解了什么是Modbus通信协议以及行业中使用的Modbus通信类型。
一文讲透Modbus协议的更多相关文章
- 一文讲透Dubbo负载均衡之最小活跃数算法
本文是对于Dubbo负载均衡策略之一的最小活跃数算法的详细分析.文中所示源码,没有特别标注的地方均为2.6.0版本. 为什么没有用截止目前的最新的版本号2.7.4.1呢?因为2.6.0这个版本里面有两 ...
- 一文讲透Java序列化
本文目录 一.序列化是什么 二.为什么需要序列化 三.序列化怎么用 四.序列化深度探秘 4.1 为什么必须实现Serializable接口 4.2 被序列化对象的字段是引用时该怎么办 4.3 同一个对 ...
- 从零入门 Serverless | 一文讲透 Serverless Kubernetes 容器服务
作者 | 张维(贤维) 阿里云函数计算开发工程师 导读:Serverless Kubernetes 是以容器和 kubernetes 为基础的 Serverless 服务,它提供了一种简单易用.极致弹 ...
- 一文讲透静电放电(ESD)保护(转发)
一直想给大家讲讲ESD的理论,很经典.但是由于理论性太强,任何理论都是一环套一环的,如果你不会画鸡蛋,注定了你就不会画大卫. 先来谈静电放电(ESD: Electrostatic Discharge) ...
- 一文讲透Cluster API的前世、今生与未来
作者:Luke Addison 原文链接:https://blog.jetstack.io/blog/cluster-api-past-present-and-future/ Cluster API是 ...
- 一文讲透为Power Automate for Desktop (PAD) 实现自定义模块 - 附完整代码
概述 Power Automate for Desktop (以下简称PAD)是微软推出的一款针对Windows桌面端的免费RPA(机器人流程自动化)工具,它目前默认会随着Windows 11安装,但 ...
- 一文讲透APaaS平台是什么
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 互联网行业就喜欢搞一些单词的缩写,在云计算行业,前者有SaaS.PaaS.IaaS,最近两三年 ...
- RS485通信和Modbus协议(转)
转自:http://www.51hei.com/bbs/dpj-23230-1.html 在工业控制.电力通讯.智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换.最初采用的方式是RS232接 ...
- MODBUS协议详解
MODBUS是一个工业上通信常用的通讯协议,一般在PLC上面用的比较多,主要是定义了一种数据传输的规范,比如数据发给谁,数据是干嘛的,数据错没错,接收到数据的从机告诉我数据有没有接受到等. 传输的方式 ...
随机推荐
- 好程序员分享Web前端面试题汇总JS篇之跨域问题
为什么80%的码农都做不了架构师?>>> 好程序员分享Web前端面试题汇总JS篇之跨域问题,接着上一篇文章我们继续来探讨web前端面试必备面试题. 跨域解决方案 1. 通过jso ...
- andorid jar/库源码解析之okhttp3
目录:andorid jar/库源码解析 Okhttp3: 作用: 用于网络编程(http,https)的快速开发. 栗子: // okHttpClient定义成全局静态,或者单例,不然重复new可能 ...
- 3-MyBatisPlus教程(CRUD-上)
1,增加MP日志配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:m ...
- P1220 关路灯(提高+)
以下内容转自z2415445508 只是为了方便自己复习而已 题目传送门-->关路灯 我是一条憨憨的分割线 关灯不需要额外的时间,经过了灯就关了.但是可能折返回去关某一个大灯会比继续往下走关接下 ...
- C. Helga Hufflepuff's Cup 树形dp 难
C. Helga Hufflepuff's Cup 这个题目我感觉挺难的,想了好久也写了很久,还是没有写出来. dp[i][j][k] 代表以 i 为根的子树中共选择了 j 个特殊颜色,且当前节点 i ...
- SpringCloudStream学习(三)RabbitMQ中的惰性队列
从RabbitMQ 3.6.0之后,有了 Lazy Queues 的概念-一个会尽早的将队列中的内容移动到磁盘的队列,并且只有当消费者需要的时候,才会将它们加载到内存中 惰性队列设计的一个主要 ...
- 【Hadoop离线基础总结】Hue与Hadoop集成
目录 1.更改所有hadoop节点的core-site.xml配置 2.更改所有hadoop节点的hdfs-site.xml 3.重启hadoop集群 4.停止hue的服务,并继续配置hue.ini ...
- 使用 Visual Studio Code 搭建 C/C++ 开发和调试环境
文章目录 1. 安装 C/C++ 插件 2. 安装 MinGW-w64 并配置好环境变量 3. 测试环境变量是否配置正确 4. 创建和设置 C 语言开发工作区 5. 编写你的第一个 C 语言程序 6. ...
- 【HDU4990】递推式
题目大意:给定序列 1, 2, 5, 10, 21, 42, 85, 170, 341 …… 求第n项 模 m的结果 递推式 f[i] = f[i - 2] + 2 ^ (i - 1); 方法一: ...
- Python脚本:实现对象集合List导入到excel表格,支持mysql,postergrsql,MongoDB
import xlwt import os import datetime #验证export_filed中的字段是否在对象字段中 def checkField(obj_list,filed_dict ...