一文认识Modbus协议;

  • 1 什么是Modbus?

  • 2 主从模式

  • 3 协议的分类

    • 3.1 Modbus ASCII

    • 3.2 Modbus RTU

    • 3.3 Modbus TCP

    • 3.4 Modbus Plus

  • 4 libmodbus

  • 5 freemodbus

  • 6 总结

1 什么是Modbus?

ModbusModicon(施耐德)公司于1979年开发的串行通信协议。它最初设计用于公司的可编程逻辑控制器(PLC)。Modbus是一种开放式协议,支持使用RS232/RS485/RS422协议的串行设备,同时还支持调制解调器。它的简单性以及制造商可以免费将其纳入其产品的事实使其成为连接工业电子设备的最流行的方法。Modbus比其他通信协议使用的更广泛的主要原因有以下几点:

  • 公开发表并且无著作权要求;

  • 易于部署和维护;

  • 对供应商来说,修改移动本地的比特或字节没有很多限制;

Modbus通过设备之间的串行线进行数据传输。最简单的设置是使用一根串行电缆连接两个设备(主设备和从设备)上的串行端口。数据以称为比特10的序列发送。每个位都作为电压发送。0被发送为正电压,1被发送为负电压。如下图所示;

在这里插入图片描述

2 主从模式

Modbus解决了通过串行线路在电子设备之间发送信息的问题。该协议在遵循该协议的体系结构中实现主/从模型。Modbus主站(Master)负责从其他设备(Slave)请求信息。标准Modbus网络中有一个Modbus主站。具体如下图所示;

主设备向从设备请求信息,最多大约可达到240个 . 每个从设备都有自己唯一的从设备地址标识Slave Address)。除了从从设备请求信息之外,主设备还可以写入从设备的内部寄存器

3 协议的分类

Modbus的应用十分广泛,特别是在工业控制领域,具体如下图所示;

我们可以看到最常用Modbus协议总共有以下四种:Modbus ASCIIModbus RTUModbus PlusModbus TCP

具体如下图所示;

3.1 Modbus ASCII

当设备设置为使用ASCII美国信息交换标准代码)模式在MODBUS串行线上进行通信时,消息中的每个8位字节将作为两个ASCII 4位字符发送。当物理通信链路或设备的功能不允许符合RTU计时器管理要求时,使用此模式。所以此模式的效率不如RTU,因为每个字节需要两个字符。示例:字节0x7D编码为两个字符:0x350x42(在ASCII表中为0x37 ='7',而0x44 ='D')。

3.2 Modbus RTU

Modbus RTU是一种紧凑的,采用二进制表示数据的方式;因为使用二进制编码和CRC错误检查的结合使得Modbus RTU适用于工业应用,因为它比ASCII字符的替代方案更有效地传输。在Modbus RTU与ASCII之间进行选择时,如果考虑性能,则RTU是首选。

3.3 Modbus TCP

Modbus TCP 是在TCP/IP网络上运行的Modbus的实现,旨在允许Modbus ASCII / RTU协议在基于TCP / IP的网络上传输。Modbus / TCP将Modbus消息嵌入TCP / IP帧内。尽管实现起来非常简单,但是与网络相关的特性增加了一些挑战。例如,由于Modbus主机期望并要求在一定时间范围内对其轮询做出响应,因此必须考虑TCP / IP网络的不确定性(和其他方面)。Modbus ASCII和Modbus TCP之间的主要区别在于,Modbus ASCII所需的LRC错误检查由IP层执行。

对于以上TCP/RTU/ASCII的这三种通信协议在数据模型和功能调用上都是相同的,只有封装方式是不同的。

3.4 Modbus Plus

Modbus有一个扩展版本Modbus Plus(Modbus+或者MB+),不过此协议是Modicon专有的,和Modbus不同。它需要一个专门的协处理器来处理类似HDLC的高速令牌旋转。它使用1Mbit/s的双绞线,并且每个节点都有转换隔离设备,是一种采用转换/边缘触发而不是电压/水平触发的设备。连接Modbus Plus到计算机需要特别的接口,通常是支持ISA(SA85),PCI或者PCMCIA总线的板卡。[^1]

4 libmodbus

libmodbus是一个多平台的modbus开源库,适用于Linux,Mac OS X,FreeBSD,QNX和Win32等操作系统;可以根据Modbus协议发送和接收数据。支持RTU(串行)和TCP(以太网)通信。官网:libmodbus.orgGithub:github.com/stephane/libmodbus/

5 freemodbus

FreeModbus是嵌入式系统的Modbus ASCII / RTU和Modbus TCP实现。它提供了Modbus应用协议v1.1a的实现,   并支持Modbus over Serial Line Specification 1.0中定义的RTU / ASCII传输模式  。从版本0.7开始,FreeModbus也支持Modbus / TCP。0.9版为使用lwIP  TCP / IP堆栈的嵌入式系统添加了第一个Modbus / TCP端口  。官网:https://www.embedded-experts.atGithub:https://github.com/cwalter-at/freemodbus

FreeModbus是一款开源的Modbus协议栈,但是只有从机开源,主机源码是需要收费的。同时网上也没有发现比较好的开源的Modbus主机协议栈,所以才开发这款支持主机模式的FreeModbus协议栈。本版FreeModbus版本号更改为V1.6,特性如下:

  • 新增加的主机源码与原有从机的风格及接口保持一致;

  • 支持主机与从机在同一协议栈运行;

  • 支持实时操作系统及裸机移植;

  • 为应用提供多种请求模式,用户可以选择阻塞还是非阻塞模式,自定义超时时间等,方便应用层灵活调用;

  • 支持所有常用的Modbus方法。

Github:https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32

6 总结

本文简单介绍了modbus协议,以及modbus的种类以及相互之间的区别,目前没有深入到各个协议的细节,只做了一个概览。笔者能力和水平有限,文中难免存在错误和纰漏,请大佬不吝赐教。

推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

嵌入式Linux

微信扫描二维码,关注我的公众号

Modbus协议概念最详细介绍相关推荐

  1. Android多开和虚拟化--Docker概念的详细介绍

    本文只是对Docker的概念做了较为详细的介绍,并不涉及一些像Docker环境的安装以及Docker的一些常见操作和命令. 通过阅读本文你将知道以下概念: 容器 什么是Docker? Docker思想 ...

  2. 视频码流传输协议srtp/srtcp详细介绍

      RTP/RTCP 协议并没有对它的负载数据进行任何保护.因此,如果攻击者通过抓包工具,如 Wireshark,将音视频数据抓取到后,通过该工具就可以直接将音视频流播放出来,这是非常恐怖的事情,这里 ...

  3. modbus详细介绍(值得收藏)

    先来简单分析一条MODBUS-RTU报文,例如:01  06  00 01  00 17  98 04 01                  06                00 01      ...

  4. 【Modbus 】Modbus 协议

    Modbus 协议简介 Modbus协议是一项应用层报文传输协议,包括ASCII.RTU.TCP三种报文类型. 标准的Modbus协议物理层接口有RS232.RS422.RS485和以太网接口,采用m ...

  5. 一文看懂Modbus协议

    目录 1.协议简介 2.协议格式 3.数据模型 1.协议简介 自从 1979 年出现工业串行链路的事实标准以来,Modbus使成千上万的自动化设备能够通信.Modbus 是OSI模型第 7 层上的应用 ...

  6. Modbus协议简易入门教程

    关注+星标公众号,不错过精彩内容 转自 | 小麦大叔 之前有不少读者在问关于Modbus协议相关的问题,今天给大家分享一篇由小麦大叔整理的Modbus协议教程. 背景 介绍modbus rtu之前,我 ...

  7. c# MODBUS协议 上位机 (转载)

    C#写了一款上位机监控软件,基于MODBUS_RTU协议. 软件的基本结构: 1.采用定时器(Timer控件)为时间片. 2.串口采用serialPort1_DataReceived中断接收,并进行M ...

  8. Modbus协议与SerialPort端口读写

    文章目录 一.Modbus协议 二.Modbus协议的分类 三.Modbus通信报文解读 一.Modbus协议 概念 Modbus协议是MODICON(莫迪康)(现施耐德品牌)在1979年开发的,是全 ...

  9. SPI协议读写SD卡介绍

    前言 在前面的文章中,我们主要介绍了如何利用SDIO协议对SD卡进行读写操作的流程及注意事项.虽然SDIO协议读写SD卡的效率很高,但是,操作却比较麻烦,另外,还需要使用的芯片具有SDIO外设.这对于 ...

最新文章

  1. 什么场景使用mysql的存储过程_mysql存储过程的使用
  2. Jmeter之JDBC Request与mysql
  3. think php union,UNION -ThinkPHP3.2.3完全开发手册 | AnSpoon.Com
  4. centos7安装搜狗拼音
  5. jquery插件 邮箱后缀自动匹配 可自定义
  6. 每个月3000结余,买余额宝好还是基金定投好?
  7. 寺庙公众号开发:vue实现祈福牌位的前端部分
  8. 数据结构——图(存储结构)
  9. 宣武医院:让物联网为智慧医疗添翼
  10. sql语句,sql文件加注释
  11. 郭德纲致郭麒麟诫子书
  12. N76E003 PWM之极性控制
  13. 小学计算机课程课堂导入视频教程,第四届全国小学信息技术优质课观摩心得
  14. 来看看科技公司们在今年的愚人节都开了什么玩笑
  15. 虚拟化概述与虚拟化应用场景
  16. perl mysql 数据推拉_用perl 从mysql取出数据做统计分析代码
  17. ECLISPE安装阿里巴巴规范校验插件P3C
  18. 打开Excle出现配置进度解决方法【WPS罪魁祸首】
  19. 真正爱你的男孩是这样的
  20. 网络协议分析软件Sniffer Pro 4.7.5 破解版

热门文章

  1. [Android]Activity启动过程
  2. Tomcat 全攻略
  3. 使用jQuery Mobile移动开发框架将博客网站快速转化为Mobile网站
  4. FTP自动上传日期命名文件
  5. [Pku 2774] 字符串(六) {后缀数组的构造}
  6. sqlite 设置向下递增
  7. ancestral 箭头符号,译林版《牛津高中英语》模块五 高二上学期
  8. 关闭网页如何接收服务器消息,WebSocket服务端发消息给客户端,浏览器收到消息就关闭了...
  9. 互联网金融行业申请评分卡(A卡)简介
  10. 【设计模式 03】装饰模式——俄罗斯套娃?