Modbus在串行总线通信中的协议有RTU和ASCII两种。RTU是Remote Terminal Unit的缩写,意思是远程终端单元。ASCII是American Standard Code for Information Interchange,意思是美国信息交换标准代码,是将文字编辑符号、大小写字母、数字和一些不可见的控制字符进行编码的一种字符表示形式,除了空字符外,共127个字符编码。
两种协议的不同之处,孔丙火(微信公众号:孔丙火)认为,最简单的讲,就是:RTU是直接发送数据,二进制代码,其表示的物理意义,需要发送端和接收端进行约定;ASCII发送的数据是用于表示字符的二进制代码;举例如下:

图1 
在数据发送格式上,两者也有以下不同之处。
(1)ASCII有开始字符和结束字符,可以作为一帧数据开始和结束的标志,用于接收端判断,一个报文必须以一个‘冒号’ ( : )(ASCII 十六进制3A )起始,以‘回车-换行’ (CR LF) (ASCII 十六进制0D 和0A) 结束,如图2所示。而RTU则没有这样的标志,需要用时间间隔来判断一帧数据的开始和结束,协议中规定的是3.5个字符周期,就是在一帧开始前,必须有大于3.5个字符周期的空闲时间,一帧结束后,也必须有大于3.5个字符周期的空闲时间,否则会出错,如图3所示。

图2

图3
特别说明:大家都知道,串口发送数据是以字节为单位的,两个字节的发送时间间隔在RTU中也是有规定的,必须小于1.5个字符周期,不然也会出错。字符周期是一个时间单位,在孔丙火(微信公众号:孔丙火)看来,很多人在做的时候会弄错这个概念,有的人以为是bit,这是不对的,应该是字节,但不是8个bit的字节,而是RTU发送1个字节的实际bit数,这里面包含一些附加位,如起始位、停止位、校验位等,加起来是11个bit,即1个字符周期是11bit的时间。那么问题来了,细心的朋友就会问孔丙火(微信公众号:孔丙火),如果串口参数是无校验的时候,不就是10个bit了吗?的确是这样,所以RTU协议中有明确规定,偶校验是推荐的,但无校验也是允许的,但也推荐,无校验的时候,停止位最好设置为2位,就是为了确保1个字符周期是11bit。
(2)两者的数据域的长度不同,RTU数据域的长度为252字符,而ASCII的是其两倍,这是由于本文第2段所述的原因,同时为了两种协议的应用层数据保持一致,才做出这样的规定。孔丙火(微信公众号:孔丙火)还注意到一个问题,在标准中,描述数据域长度使用的单位是字符,而不是字节,我想这跟我在上段中描述的11bit的问题有关,用字符更加准确。
(3)两者的数据帧校验方式不同。RTU使用CRC校验,即循环冗余检验,ASCII使用的是LRC,即纵向冗余校验。
(4)在Modbus标准中,RTU是必须要求的,而ASCII是可选项,即作为一个Modbus通信设备可以只支持RTU,也可以同时支持RTU和ASCII,但不能只支持ASCII。
参考文献:GB/T 19582-2008。
文章在微信公众号同步推出,微信公众号:孔丙火,关注欣赏更多文章。

本订阅号致力于单片机、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,一起分享,共同交流。

简说Modbus-RTU与Modbus-ASCII的更多相关文章

  1. C# 开发Modbus Rtu客户端 modbus测试Demo,Modbus 串口通信 , 虚拟MODBUS-RTU测试

    前言 本文将使用一个NuGet公开的组件技术来实现一个ModBus RTU的客户端,方便的对Modbus rtu的服务器进行读写,这个服务器可以是电脑端C#设计的,也可以是PLC实现的,也可以是其他任 ...

  2. Modbus RTU 通信工具设计(转)

    Modbus RTU 通信工具设计 Modbus 是一个工业上常用的通讯协议.一种通讯约定. ModBus 协议是应用层报文传输协议(OSI 模型第7层),它定义了一个与通信层无关的协议数据单元(PD ...

  3. Modbus TCP和Modbus Rtu协议的区别 转

    http://blog.csdn.net/educast/article/details/9177679   Modbus rtu和Modbus tcp两个协议的本质都是MODBUS协议,都是靠MOD ...

  4. Modbus RTU 介绍

    S7-1200 Modbus RTU 通信概述 Modbus具有两种串行传输模式:分别为ASCII和RTU.Modbus是一种单主站的主从通信模式,Modbus网络上只能有一个主站存在,主站在Modb ...

  5. Modbus RTU通信协议详解以及与Modbus TCP通信协议之间的区别和联系

    Modbus通信协议由Modicon公司(现已经为施耐德公司并购,成为其旗下的子品牌)于1979年发明的,是全球最早用于工业现场的总线规约.由于其免费公开发行,使用该协议的厂家无需缴纳任何费用,Mod ...

  6. Modbus RTU 通信应用案例

    如何打开项目归档文件 例程中的TIA博途项目文件与STEP 7项目文件均为归档文件,需要按如下方式打开: TIA博途项目文件 1. 打开TIA博途软件,通过软件左下方“项目视图”按钮切换至项目视图: ...

  7. modbus ASCII和MODBUS RTU区别

    下表是MODBUS ASCII协议和RTU协议的比较: 协议 开始标记 结束标记 校验 传输效率 程序处理 ASCII :(冒号) CR,LF LRC 低 直观,简单,易调试 RTU 无 无 CRC ...

  8. Modbus协议栈实现Modbus RTU多主站支持

    前面我们已经详细讲解过Modbus协议栈的开发过程,并且利用协议栈封装了Modbus RTU主站和从站,Modbus TCP服务器与客户端,Modbus ASCII主站与从站应用.但在使用过程中,我们 ...

  9. ModBus通信协议的【Modbus RTU 协议使用汇总】

    1.RTU模式 当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符.这种方式的主要优点是:在同样的波特率下,可比ASCII方式传 ...

  10. 调试备忘录-RS485 MODBUS RTU协议简述

    目录--点击可快速直达 目录 写在前面 先简单说下什么是MODBUS? 参考文章 写在前面 最近在做和物联网有关的小项目,有一个传感器通讯用到了RS485 MODBUS RTU协议,所以就写个随笔记录 ...

随机推荐

  1. Typed Lua

    https://the-ravi-programming-language.readthedocs.io/en/latest/ravi-overview.html https://github.com ...

  2. C#委托链

    使用Delegate.Combine时,注意两点: 1. 不可以将不同签名的两个委托相互Combine. 2.如果将有返回值的两个委托A 和 B Combine,那么返回值是最后一个委托的的返回值,也 ...

  3. Jogl2.0 jogamp-all-platforms 在eclipse 中的配置

    我的电脑在win8 64位系统,搞了好久,网上的方法都快试了个遍,官网的试了,都不行,目前成功了,希望可以帮助其他同学. 1.首先去这里http://jogamp.org/deployment/jog ...

  4. WinMTR 网络测试工具-九五小庞

    WinMTR(建议优先使用) 百度下载工具 链接:https://pan.baidu.com/s/19ArKSTA2amsa4p6vHegDIQ 提取码:cy4y WinMTR是mtr工具在Windo ...

  5. shell小技巧(3)复制文件到其他主机

    复制一个文件nfsclient.sh到主机172.18.117.162的/tmp目录下 scp -P22 /tmp/nfsclient.sh  root@172.18.117.162:/tmp -P2 ...

  6. 网易云uwp

    起因 昨天晚上折腾Ubuntu 莫名其妙任务栏的网易云音乐图标消失了,今早才发现原来是更新了. but,这个更新真的是让人一言难尽 upw更新一下直接变成了桌面版? 折腾 重新装回老版uwp 网易云U ...

  7. 有关Sql中时间范围的问题

    背景 有时候需要利用sql中处理关于时间的判别问题,简单的如比较时间的早晚,判断一个时间是否在一段时间内的问题等.如果简单将时间判断与数值比较等同,那就会出现一些问题. 处理方式 处理Sql时间范围的 ...

  8. 浅谈Java 线程池原理及使用方式

    一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...

  9. [LeetCode] 337. 打家劫舍 III (树形dp)

    题目 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称之为"根". 除了"根"之外,每栋房子有且只有一个&q ...

  10. Docker Swarm 集群管理利器核心概念扫盲

    Swarm 简介 Docker Swarm 是 Docker 官方推出的容器集群管理工具,基于 Go 语言实现.代码开源在:https://github.com/docker/swarm 使用它可以将 ...