0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MODBUS ASCII传输模式介绍

CHANBAEK 来源: 菱沃铂智能技术 作者: 菱沃铂智能技术 2023-07-19 15:58 次阅读

前面2期我们学习了,第一篇MODBUS协议基本介绍,第二篇MODBUS RTU传输模式介绍,今天我们来研究第三篇MODBUS ASCII传输模式介绍。

第三篇 MODBUS ASCII传输模式介绍

当 Modbus 串行链路的设备被配置为使用 ASCII(American Standard Code For Information Interchange)模式通信时,报文中的每个 8 位字节以两个 ASCII 字符发送。当通信链路或者设备无法符合 RTU 模式的定时管理时使用该模式。

注:由于一个字节需要两个字符,此模式比 RTU 效率低。

例:字节 0x5B 会被编码为两个字符:0x35 和 0x42(ASCII 编码 0x35=”5”,0x42=”B”)。

ASCII模式每个字节(10位)的格式

1.编码系统:十六进制,ASCII字符 0-9,A-F,报文中每个 ASCII 字符含有 1 个十六进制字符。

2.每字节 bit 流:1 起始位、7 数据位,首先发送最低有效位、1 位奇偶检验、1 停止位。

奇偶校验是要求的,其它模式(奇校验,无校验)也可以使用。为了保证与其它产品最大的兼容性,同时支持无校验模式是建议的。默认校验模式必须为偶校验。

字符是如何串行传送的:

每个字符或字节均由此顺序发送(从左到右):最低有效位(LSB)…最高有效位(MSB)。

image.png

ASCII模式位序列

设备配置为奇校验、偶校验或无校验都可以接受。如果是无奇偶校验,将传送一个附加的停止位以填充字符帧:

image.png

ASCII模式位序列(无校验的特殊情况)

帧检验域:

纵向冗余校验(LRC-Longitudinal Redundancy Checking)。

Modbus ASCII报文帧

由发送设备将 Modbus 报文构造为带有已知起始和结束标记的帧。这使设备可以在报文的开始接收新帧,并且知道何时报文结束。不完整的报文必须能够被检测到而错误标志必须作为结果被设置。

报文帧的地址域含有两个字符。

在ASCII模式,报文用特殊的字符区分帧起始和帧结束。一个报文必须以一个‘冒号’(:)(ASCII 十六进制 3A)起始,以‘回车-换行’(CR LF)对(ASCII十六进制0D和0A)结束。

注:LF 字符可以通过特定的 Modbus 应用命令改变。

对于所有的域,允许传送的字符为十六进制 0-9,A-F(ASCII 编码)。设备连续的监视总线上‘冒号’字符。当收到这个字符后,每个设备解码后续的字符一直到帧结束。

报文中字符间的时间间隔可以达1秒。如果有更大的间隔,则接收设备认为发生了错误。

image.png

ASCII报文帧

注:每个字符字节需要用两个字符编码。因此,为了确保ASCII 模式和 RTU模式在 Modbus 应用级兼容,ASCII 数据域最大长度为(2x252)是 RTU 数据域(252)的两倍。

必然的,Modbus ASCII 帧的最大尺寸为 513 个字符。

ASCII 报文帧的要求在下面的状态图中综合。“主设备”和“从设备”的不同角度均在相同的图中表示。

图片

ASCII传输模式状态图

1.“空闲”态是没有发送和接收报文要处理的正常状态。

2.每次接收到“:”字符表示新的报文的开始。如果在一个报文的接收过程中收到该字符。则当前地报文被认为不完整并被丢弃。而一个新的接收缓冲区被重新分配。

3.检测到帧结束后,完成LRC 计算和校验,然后分析地址域以确定帧是否发往此设备,如果不是,则丢弃此帧。为了减少接收处理时间,地址域可以在一接到就分析,而不需要等到整个帧结束。

LRC校验

在 ASCII 模式,包含一对全部报文内容执行的,基于纵向冗余校验(LRC-Longitudinal Redundancy Checking)算法的错误检验域。LRC 域检验不包括起始“冒号”和结尾 CRLF 对的整个报文的内容。不关报文有无奇偶校验,均执行此检验。

LRC 域为一个字节,包含一个8 位二进制值。LRC 值由发送设备计算,然后将 LRC 附在报文后面。接收设备在接收报文时重新计算 LRC 的值,并将计算结果于实际接收到的 LRC 值相比较,如果两个值不相等,则为错误。

LRC 的计算,对报文中的所有的连续 8 位字节相加,忽略任何进位,然后求出其二进制补码。执行检验针对不包括起始“冒号”和结尾 CRLF 对的整个 ASCII报文域的内容。在 ASCII 模式,LRC 的结果被ASCII 编码为两个字节并放置于 ASCII模式报文帧的结尾,CRLF 之前。

简单代码如下:

image.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MODBUS
    +关注

    关注

    27

    文章

    1442

    浏览量

    75698
  • 编码
    +关注

    关注

    6

    文章

    835

    浏览量

    54458
  • ASCII
    +关注

    关注

    4

    文章

    169

    浏览量

    34534
  • RTU
    RTU
    +关注

    关注

    0

    文章

    345

    浏览量

    28348
  • 传输模式
    +关注

    关注

    0

    文章

    7

    浏览量

    6994
收藏 人收藏

    评论

    相关推荐

    Modbus ASCII的设计与实现

    前面我们已经分析了Modbus RTU的更新设计和具体实现(如果不清楚可查看前一篇文章)。其实Modbus ASCIIModbus RTU都是基于串行链路实现的,所以有很多的共同点,
    的头像 发表于 12-13 15:30 1002次阅读
    <b class='flag-5'>Modbus</b> <b class='flag-5'>ASCII</b>的设计与实现

    使用协议栈实现Modbus ASCII从站应用

    自从开源了我们自己开发的Modbus协议栈之后,有很多朋友建议我针对性的做几个示例。所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例,这一篇中我们来使用协议栈实现Modbus ASCII从站应用。
    的头像 发表于 12-13 17:12 967次阅读
    使用协议栈实现<b class='flag-5'>Modbus</b> <b class='flag-5'>ASCII</b>从站应用

    详解Modbus协议的RTU帧和ASCII帧(2)

    前面已经分析过RTU帧和ASCII帧的报文区别,细心的朋友应该会发现在两种不同的报文传输模式下都有一个共同的组成部分——差错校验。
    发表于 10-01 10:38 217次阅读
    详解<b class='flag-5'>Modbus</b>协议的RTU帧和<b class='flag-5'>ASCII</b>帧(2)

    modbus三种通讯方式的字符介绍

    的3A用字符“3”和字符“A”表示。MODBUS TCPMODBUS TCP模式下,由于模块的地址由IP地址确定,所以不再有地址域内容,考虑到TCP网络是可靠的数据传输网络,故不再有校验数据。但是
    发表于 04-27 06:00

    Modbus-RTU协议模式学习下载

    ASCII、TCP三种模式,其中RTU模式(即Modbus-RTU)最常用。3.协议定义: 所谓协议,就是互相之间的约定。如果不让别人知道那就是暗号。4.协议定义...
    发表于 07-02 06:12

    台达PLC在使用Modbus通讯时的两种模式

      台达PLC在使用Modbus通讯时有两种模式:分别是Modbus—RTU和ModbusASCII,下面我们就这两种
    发表于 03-16 17:51

    Modbus协议的理解

    就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。   MODBUS通信之
    发表于 05-05 16:47

    Modbus ASCII 模式之通訊程序

    C语言编写的台达变频器Modbus ASCII 模式之通訊程序
    发表于 12-02 10:25 5次下载

    modbus常用功能码解读

    Modbus具有两种串行传输模式ASCII 和 RTU。它们定义了数据如何打包、解码的不同方式。支持 Modbus 协议的设备一般都支持
    发表于 02-08 09:06 1.7w次阅读
    <b class='flag-5'>modbus</b>常用功能码解读

    基于S7-200下的Modbus RTU通信协议

    我们都知道Modbus是公开通信协议,具有两种串行传输模式ASCII和RTU。
    的头像 发表于 07-05 08:58 5642次阅读

    PCS7下ASCII模式Modbus Master的实现

    PCS7下ASCII模式Modbus Master的实现说明。
    发表于 04-23 09:38 8次下载

    常见的几种Modbus网关介绍

    以下提到Modbus网关均指Modbus RTU转Modbus TCP,并不涉及对Modbus ASCII数据帧的处理,
    的头像 发表于 05-31 11:52 2034次阅读

    使用协议栈实现Modbus ASCII主站应用

    自从开源了我们自己开发的Modbus协议栈之后,有很多朋友建议我针对性的做几个示例。所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例,这一篇中我们来使用协议栈实现Modbus ASCII主站应用。
    的头像 发表于 12-13 17:09 663次阅读
    使用协议栈实现<b class='flag-5'>Modbus</b> <b class='flag-5'>ASCII</b>主站应用

    ModBus RTU、ASCII、TCP,选哪种模式更好?

    ModBus是一种通信协议,用于连接自动化设备(如PLC、温度控制器等)和计算机。它被广泛应用于工业控制系统,支持多种通信方式,包括ModBus RTU、ModBus ASCII
    发表于 01-13 10:10 908次阅读

    MODBUS RTU传输模式介绍

    上期我们学习了,第一篇MODBUS协议基本介绍,今天我们来研究第二篇MODBUS RTU传输模式介绍
    的头像 发表于 07-19 15:58 3144次阅读
    <b class='flag-5'>MODBUS</b> RTU<b class='flag-5'>传输</b><b class='flag-5'>模式</b><b class='flag-5'>介绍</b>