首页 > 其他分享 >网络基础 Modbus协议学习总结

网络基础 Modbus协议学习总结

时间:2024-07-21 21:58:25浏览次数:10  
标签:总结 01 字节 hex 网络 Modbus 地址 寄存器

协议简介

Modbus协议,首先从字面理解它包括Mod和Bus两部分,首先它是一种bus,即总线协议,总线就意味着有主机,有从机,这些设备在同一条总线上。

Modbus支持单主机,多个从机,最多支持247个从机设备。关于Mod,因为这种协议最早被用在PLC控制器中,准确的说是Modicon公司的PLC控制器,这也是Modbus名称的由来。后来Modicon被施耐德电器收购,Modbus协议广泛应用在工业控制器、HMI和传感器上,逐渐被其他厂商所接受,成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。

  • 每种设备(PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备)都能使用 Modbus协议来启动远程操作。

  • 在基于串行链路和以太 TCP/IP 网络的 Modbus 上可以进行相互通信。

  • 一些网关允许在几种使用 Modbus 协议的总线或网络之间进行通信

术语说明

HDLC 高级数据链路控制
HMI 人机界面
IETF 因特网工程工作组
I/O 输入/输出设备
IP 互连网协议
MAC 介质访问控制
MB Modbus 协议
MBAP Modbus 协议

关于总线补充说明

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线地址总线控制总线,分别用来传输数据、数据地址和控制信号。总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。

Modbus被广泛使用主要原因

  1. 标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权
  2. Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。  
  3. Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

协议版本

Modbus 协议目前分别定义了基于串口()和以太网传输数据的协议,其中串口(RS232,RS485,RS422,光纤,无线等)数据传输协议分为 Modbus RTU 和 Modbus ASCII串行链路协议,以太网数据传输协议一种 Modbus TCP/IP协议。

其中,Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。

工作模式

Modbus 协议采用主从(Master/Salve)通信方式,TCP/IP传输模式下,主节点也叫客户机,从节点也叫服务器。连接到总线上的所有主机节点中有且只有一个 Master 节点(主节点),其余为 Slave 节点(从节点,可选地址为1~247,每个Slave节点的地址必须唯一)。

主从通信以 请求/应答 为主,每次通讯都是主节点先发送请求(采用广播模式、单播模式),从节点响应指令,并按要求应答,或者报告异常。当主节不发送请求时,从节不会自己发出数据,从节点之间不能相互通讯(也就是说从节点之间不能相互发送请求)。

无论主节点发送的是广播指令还是单播指令,实际上所有从节点都会完整接收指令。但发送单播指令时,只有地址和指令中中指定地址相同的从节点才会执行及回应指令,其它从节点将忽略收到的指令,而广播请求所有收到指令的设备都会执行指令,但不会给主机回应指令。

半双工通信

Modbus 由于请求/应答机制所以不能同步通信(同步通信需要收发双方以相同的节奏发送和接收数据),总线上每次只有一帧数据进行传输,属于半双工通信。

Modbus 没有支持繁忙机制处理,例如主机给从机发送命令, 如果从机正在处理其他任务,此时从机将无法响应主机,所以需要通过软件的方式来判断是否正常接收。

Modbus消息帧

Modbus 协议定义了一个与基础通信层无关的简单协议数据单元(PDU -> 功能码 + 数据 部分)。特定总线或网络上
的 MODBUS 协议映射能够在应用数据单元(ADU -> 地址域 + 功能码 + 数据 + 差错校验)上引入一些附加域

通用数据帧

地址域 功能码 数据 差错校验码
1字节 1字节 N字节 CRC: 16字节 LRC: 1字节

说明:每个划分字段都用16进制表示

  • 地址域

    从机设备地址,通常1-247为有效地址,0为广播地址(用于接收主机的广播数据),每个从机在总线上地址必须唯一,只有与主机发送的地址码相符的从机才能响应返回数据

    主节点通过将要联络的从节点的地址放入消息中的地址域来选取需要通信的从设备。当从节点发送回应消息时,需要把自己的地址放入回应的地址域中,以便主节点知道是哪一个设备作出的回应。

  • 功能码

    表明主节点请求数据的类型。

    当主节点向从设备发送消息时,功能码将告诉从设备需要执行哪些行为。例如去读取输入的开关状态,读一组寄存器的数据内容等。

  • 数据

    包含寄存器地址寄存器数据

  • 差错校验

    对数据进行冗余校验的结果,CRC、LRC

其中事务处理正常时,客户机向服务器发送请求,在功能码中填充功能码代号,说明服务器需要执行的动作,在数据码区填充具体的要求,比如读寄存器的地址和数量,通信正常时服务器会在返回的通信帧的功能码区中填充一个操作码,该操作码=功能码,在通讯帧的数据区填充返回的采样数据。

当出现事务处理异常时,服务器会在返回的通讯帧的功能码中填充一个差错码,该差错码 = 功能码 + 0x80,即将功能码的最高位置1代表出现错误。并在后面的数据段中填充错误码,用来指示本次通信的错误具体内容。

Modbus ASCII消息帧

起始位(

标签:总结,01,字节,hex,网络,Modbus,地址,寄存器
From: https://www.cnblogs.com/shouke/p/18315015

相关文章

  • 24.07.21 周总结(Kotlin学习)
    本周Kotlin学习学习内容以及笔记部分展示部分练习代码展示funmain(){varstu1=Student("xiaoming",13)varstu2=Student("xiaohong",15)println((stu1<stu2))}classStudent(varname:String,varage:Int){operatorfuncompareTo(......
  • 封禁 NetBIOS Session Service 和 SMB 服务(特别是旧版本的SMB)可能是出于安全性考虑。
    封禁NetBIOSSessionService和SMB服务(特别是旧版本的SMB)可能是出于安全性考虑。这两种服务在过去的实现中存在一些安全漏洞和风险,特别是在现代网络环境中,这些风险可能会被利用来进行攻击或者未经授权的访问。下面是一些常见的安全考虑:中间人攻击:未加密的NetBIOS和旧版本......
  • Python网络数据可视化全攻略【方法与技巧详解】
    ......
  • JS基础知识总结(4)
    一、字符串反转的方式varstr1=str.split("").reverse().join("");//记住这个让字符串反转的方式二、实现某个字符的“偏移”(也就是说ASCII码值往后挪,往前挪多少位)。/***@description字符串加密*@param{number}offset偏移量......
  • 2024暑假总结1
    总结记得26号来见到了一些新同学,还考了一场试,题目都很基础,但是我清楚地记得我把图论大部分内容都忘了,第二题计数题也没调出来。这次经历让我深深感受到半年不碰OI再次上手时原来如此乏力,脑海中搜索出的知识结构图也只有空荡荡的框架而无多少内容。看到一个知识只是粗略知道它的原......
  • 第三周学习总结
    类与对象的理解深化本周,我对Java中的类和对象有了更深的理解。类(Class)是创建对象的模板或蓝图,它定义了对象所拥有的属性(即数据成员)和方法(即函数)。而对象(Object)则是根据类创建的具体实例,它拥有类中定义的属性和方法,并且可以存储具体的数据。通过构造器(Constructor),我学会了如何初......
  • 网络编程的艺术:Xcode中构建高效网络应用的秘诀
    网络编程的艺术:Xcode中构建高效网络应用的秘诀在移动应用开发中,网络编程是实现数据交换和远程服务调用的关键技术。Xcode,作为苹果官方的集成开发环境(IDE),提供了强大的工具和框架来支持网络编程。本文将深入探讨Xcode中网络编程的各个方面,包括使用URLLoadingSystem、NSURLS......
  • 自学考试(北邮)计算机专业毕业总结
    本文目的2024年是北京自学考试专业过渡期,恰好赶在过渡期前完成了专业的全部课程,于是2024上半年开始毕业论文与设计并完成了答辩,赶在收到毕业证这天总结一下,给后续北邮自考生一点参考,给自己这5年的努力作个总结。毕业要求所学专业的所有笔试、实践科目、论文成绩均合格,其中笔试、......
  • 《算法笔记》总结No.10——链表
        从第10期破例插叙一期单链表的实现,这个东东相当重要!考研的同学也可以看:相较于王道考研的伪码不太相同,专注于可以运行。如果是笔试中的伪码,意思正确即可~ 注:博主之前写过一个版本的顺序表和单链表的C++实现,和这篇的写法有所不同,不过内容也较全,大家可以先行阅读~......
  • 网络编程必备:Python中Paramiko和FTP的文件夹与文件检测技巧
    哈喽,大家好,我是木头左!Paramiko是一个用于进行SSH连接的Python库,它支持以加密的形式进行远程命令执行、文件传输等操作。另一方面,FTP即文件传输协议,用于在网络上进行文件的传输。Python中的ftplib模块允许实现FTP客户端的功能,包括列出目录内容、上传和下载文件等。检查文件夹......