串行通信 - Modbus协议
Modbus协议采用的是主-从通信模式。
Modbus协议主要有Modbus RTU、Modbus ASCII和Modbus TCP三种。前两者均支持RS-485总线协议。其中RTU采用二进制数据表达形式、数据结构紧凑,通信效率高,应用广泛。
Modbus的三种传输模式
ASCII模式:数据中每8bit的字节作为一个ASCII码发送。字符发送的时间间隔可达到1s,不产生错误。
RTU模式:以RTU(远程终端单元)模式通信,每8bit的字节都包含两个4bit的十六进制字符。传输数据比ASCII模式更多。
TCP模式:用于通过以太网或互联网来连接和传输 数据,由于互联网遵循的是TCP/IP模式。
Modbus模式未必是串行通信所用,也可以是TCP/IP通信。
ASCII模式与RTU模式的区别
ASCII模式数据位数为7位,RTU模式为8位。
ASCII模式采用LRC(纵向冗余校验)的错误校验方法,RTU使用CRC(循环冗余校验)方法。
ASCII模式发送字符的间隔可以达到1s,以适用不同速率的设备,RTU模式必须以连续数据流形式传输。
ASCII模式每个字节的位:1位起始位,7位数据位,最低有效位先发送;1位奇偶校验位,1位停止位;
RTU模式:1位起始位,8位数据位,最低有效位先发送;1位奇偶校验位,1位停止位;
常用的通信模式(9600,N,8,1)是一个字节的传输协议;
Modbus协议是如何用串口一次连续传输多个字节的协议,它规定了一次发送多少个字节,以及字节顺序如何排列。
Modbus协议定义了校验码、数据序列等,即定义了特定数据交换的必要内容。通信时,主机的信号寻址到一台特定地址的终端设备,然后终端设备发出的应答信号以相反的方向传输给主机。
主-从技术
主设备(Master)能初始化传输,从机(Slave)根据主设备查询提供的数据做出相应的回应。
Modbus协议建立的主控制器查询的格式是:设备地址码,功能码,要发送的数据,错误检测域。
从机回应协议包含要行动的域,要返回的值和错误检测域。
传输设备将Modbus消息转为有起点和终点的帧,使接收的设备在消息起始处开始工作,读地址分配信息,判断哪个设备被选中,判断何时消息被完成,侦测到部分消息的错误并且返回
查询-回应周期
查询:查询消息中功能码告知被选中的从机将要执行的功能,数据段包含从设备要执行功能的所有附加消息。
回应:数据段包含了从设备收集的数据,比如寄存器值或状态。如果有错误发生,功能码用于指出回应消息是错误都,同时数据段包含了描述此错误信息的代码。
ASCII消息帧与RTU消息帧
ASCII模式消息以冒号":"开始,以回车、换行符结束。总线上设备的不断检测冒号,当接收到冒号后,从机设备解码判断消息对象是否为自己。
RTU模式下消息的发送至少要以3.5个字符时间的停顿间隔开始,传输的第一个域为设备地址,在最后一个传输字符之后,一个至少3.5字符时间的停顿标定了消息的结束。
整个消息帧必须作为连续流传输,在完成之前如有1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定停顿时间后收到的字节是一个新消息的地址域。
若两消息帧的停顿时间小于3.5个字符时间,则认为后一段消息是前一段消息的延续。
功能域
包含8位bit,部分功能适用于所有控制器,有些则应用于某种控制器,比如读取输入段的状态、读取寄存器的内容等等。
从机回应时,使用功能码来指示是否正常,或错误,出现错误时返回功能码的低位置1.从设备还可以将独特的代码放到回应消息的数据域中,告诉主机具体出现了什么类型的错误。
举例 主机发送功能域位03H,从机异议回应为83H.
数据域
数据域由2个十六进制数集合而成,包含从设备需要执行的行为的具体参数。如果主设备准备写一组从设备的寄存器,数据域则指明了要写的起始寄存器以及要写的寄存器数量,字节数,要写数据。
数据域可以是不存在的,例如从机回应通信应答。
错误检测域
==ASCII-LRC纵向冗余检测:==将每个字节的所有位相加得出一个校验和,并在传输结束后将校验和发送给接收方进行验证。
LRC校验可以检测传输过程中出现的单比特差错和某些双比特差错,但并不能检测出所有错误,因为多个错误可能会互相抵消。此外,LRC校验也无法纠正错误,只能检测错误是否存在。
==RTU-CRC循环冗余检测:==通过在数据传输前计算出一个校验码,并将其添加到数据末尾,来保证数据传输的准确性。这个校验码可以被接收方用来检测是否存在数据损坏或传输错误。
Modbus 以帧的方式传输,每帧有确定的起始位和结束位,使接收设备在信息的起始位开始读地址,并确定要寻址的设备,以及信息传输的结束时间。RTU 模式中,信息开始至少需要有 3.5 个字符的停顿时间,依据使用的波特率,很容易计算停顿时间。
各个域允许发送的字符均为十六进制。Modbus 网络上的设备连续监测网络上的信息,包括停顿时间。当接收第一个地址数据时,每台设备立即对它解码,以决定是不是自己的地址。发送完最后一个字符后,也有一个至少 3.5 个字符的停顿时间,然后才能发送一个新的信息。整个信息必须连续发送。如果在发送信息帧期间,出现大于 1.5 个字符的停顿时间,则接收设备刷新不完整的信息,并进行下一个地址数据接收。主设备把从设备的地址放入信息帧的设备地址域,并向从设备寻址。从设备响应时,把自己的地址放入响应信息的设备地址域,让主设备识别已做出响应的从设备地址。地址 0用于广播地址,所有从设备均能识别。
接在设备地址后面的就是功能码,接在功能码的后面是数据域。数据域有 2个十六进制的数据,数据范围为 00FF(十六进制)。主设备向从设备发送的数据中包含了从机执行主设备功能码中规定的请求动作,如逻辑线圈地址、处理对象的数目,以及实际的数据字节数等。
接在数据域后面的是校验域(CRC 校验)。CRC 校验有 2个字节,包含一个 16 位的值(2个8 位字节),它由发送设备计算后加入消息中。接收设备重新计算收到消息的 CRC 值,并与接收到的 CRC 值进行比较,如果两值不同,则有误。
TCP和RTU协议非常相似,只要在RTU协议的开始加上五个“00”和1个“06”,然后把RTU协议的最后两个字节的校验码去掉,通过TCP\IP网络发送出来即可。
TCP是面向可靠连接的,不存在所谓的地址码
HART下回学
串行通信 - Modbus协议相关推荐
- PIC单片机与触摸屏串行通信MODBUS协议
PIC单片机与触摸屏串行通信MODBUS协议 关键词:触摸屏 PIC单片机 Modbus协议 通信 工控中经常需要观察系统的运行状态或者修改运行参数.触摸屏能够直观.生动地显示运行参数和运行状态,而且 ...
- java modbus协议
概念 Modbus是一种串行通信协议,Modbus协议目前存在用于串口.以太网以及其他支持互联网协议的网络的版本. 大多数Modbus设备通信通过串口EIA-485物理层进行. 通讯格式 地址域 功能 ...
- 基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文)
基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文) 导读:触摸屏能够直观.生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好.触摸屏和单片机通信,需要根据触 ...
- Modbus协议概念最详细介绍
★ 一文认识Modbus协议: " 1 什么是Modbus? 2 主从模式 3 协议的分类 3.1 Modbus ASCII 3.2 Modbus RTU 3.3 Modbus TCP 3. ...
- 基于modbus协议的工业自动化网络规范_一种基于Modbus的工业通信网关设计
近年来,随着工业自动化领域的发展,工业现场对网络的可靠性及成本有极高的要求.传统基于串口的工业网关可以满足工业现场的应用,但却要付出高额成本.一种基于 ModBus 设计的工业通信网关就走进人们的眼中 ...
- 【物联网毕设基础】单片机:RS485 通信与 Modbus 协议
文章目录 RS485 通信与 Modbus 协议 单片机 RS485 通信接口.控制线.原理图及程序实例 RS485 通信与 Modbus 协议 在工业控制.电力通讯.智能仪表等领域,通常情况下是采用 ...
- 【Modbus 】Modbus 协议
Modbus 协议简介 Modbus协议是一项应用层报文传输协议,包括ASCII.RTU.TCP三种报文类型. 标准的Modbus协议物理层接口有RS232.RS422.RS485和以太网接口,采用m ...
- Modbus协议(翻自wiki)
文章目录 原文 译文 Modbus Modbus对象类型 协议版本 通讯和设备 帧格式 支持的功能代码 主要功能代码的请求和响应数据格式 功能代码 1(读取线圈)和功能代码 2(读取离散输入) 功能码 ...
- 【工控协议专题01】Modbus协议原理与安全性分析
目录 O.术语 一.背景: 二.协议原理 三.传输方式 四.Modbus RTU 和Modbus ASCII有什么区别? 五.MODBUS TCP 注意点 六.功能码作用 七.Modbus 协议安全性 ...
最新文章
- window resize和scroll事件的基本优化
- 二进制搜索算法_使用安全摄像机镜头解释二进制搜索算法
- 掌握ConstraintLayout(十)按比例设置视图大小
- mac os 快捷键
- When Cyber Security Meets Machine Learning 机器学习 安全分析 对于安全领域的总结很有用 看未来演进方向...
- cocoapos错误信息
- 工作243:name报错
- python相对路径下的shell_shell,python获取当前路径(脚本的当前路径) (aso项目记录)...
- 你靠什么在单位立足?此文堪称经典
- HTML5 3D翻书效果(双面效应)
- C++餐厅订餐管理系统
- IEEE 1588和IEEE 802.1AS的版本和关系
- 提升前端线上问题发现率的方法
- 【黑灰产犯罪研究】DDOS攻击
- Python爬取新闻联播(文字版)
- 推荐几个查找英语单词缩写的网站
- 微信可以批量清理僵尸粉啦
- 数据结构最常用的排序算法一(冒泡、插入、选择)-Java实现
- X-Space二级(三级)域名配置
- 体感互动LED显示屏系统|体感互动屏幕|体感互动大屏软件
热门文章
- 解决某物流企业二维码打印问题
- PHP preg_match(): Unknown modifier '/'
- 计算机语音输入软件,语音输入法_语音输入法电脑版_语音输入法哪个好【最新】-太平洋电脑网...
- 金山办公CEO章庆元:数字化、云化、订阅化趋势下,组织数字办公走向纵深
- 华为交换机MPU、LPU硬件信息解释
- 19款奥迪a5支持Android,19款奥迪a5有敝篷版吗?
- Python程序员看见一个好看的手机壁纸网站,开撸!
- ios 13 全局修改 present 卡片式
- 2021 最新 Cloudera 大数据平台 CDP 升级指南白皮书完整版开放下载!(中文版)...
- 在安卓应用开发过程中减小安卓应用大小的 9 种方法