前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >串口通信(三)

串口通信(三)

作者头像
Coder昊白
发布2023-12-14 13:01:01
1610
发布2023-12-14 13:01:01
举报

前言

初识Android串口通信(一) - 掘金

串口通信(二) 数据校验 - 掘金

前面讲了一些Android串口通信的一些数据校验和基本使用,下面说说串口通信中与硬件之接的协议ModBus

ModBus

什么是ModBus

自从 1979 年出现工业串行链路的事实标准以来,Modbus使成千上万的自动化设备能够通信。Modbus 是OSI模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。Modbus应用层协议和服务规范主要包含两类:一类是串行链路上的Modbus(Modbus 串行链路取决于TIA/EIA 标准:232-F 和 485-A),另一类是TCP/IP 上的Modbus(Modbus TCP/IP 取决于IETF 标准:RFC793 和 RFC791 有关)。Modbus通信栈示意图如下所示:

Modbus通信协议支持不同的通信方式,包括串行通信(如Modbus RTU和Modbus ASCII)和以太网通信(Modbus TCP/IP)。这使得Modbus非常适合用于各种工业应用,无论是在制造业、能源领域、建筑自动化,还是其他自动化控制系统。我们在看Modbus的时候,经常会看到485串口,232串口,详细请看拓展。

协议格式

MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的 MODBUS 协议映射能够在应用数据单元(ADU)上引入一些附加域。

  • 地址域: 子节点的地址信息;
  • 功能码: 指明服务器要执行的动作,有效的码字范围是十进制 1-255(128-255 为异常响应保留),当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作(功能码内容较多,建议查阅Modbus协议说明手册,上面介绍的很清晰)。
  • 数据: 传输的数据内容,在某种请求中,数据可以是不存在的(0 长度),在此情况下服务器不需要任何附加信息,功 能码仅说明操作。
  • 差错校验: 验证收、发的数据是否正确。比如前面写过的CRC校验。

Modbus协议是一种请求/应答方式的交互过程,主机主动发起通讯请求,从机响应主机的请求,从机在没有收到主机的请求时,不会主动发送数据,从机之间不会进行通讯。

MODBUS 数据模型

MODBUS 以一系列具有不同特征表格上的数据模型为基础。四个基本表格为:

MODBUS 传输模式

1979年,Modicon 首先推出了串行Modbus标准,后来由于网络的普及,需要更高的传输速度,1997年制定了基于TCP网络的Modbus标准。 所以总的可分为两个传输模式:基于串行链路的和基于以太网TCP/IP的。

  • 基于串口的Modbus-RTU 数据按照标准串口协议进行编码,是使用最广泛的一种Modbus协议,采用CRC-16_Modbus校验算法
  • 基于串口的Modbus-ASCII 所有数据都是ASCII格式,一个字节的原始数据需要两个字符来表示,效率低,采用LRC校验算法。
  • 基于网口的Modbus-TCP Modbus-TCP基于TCP/IP协议,占用502端口,数据帧主要包括两部分:MBAP(报文头)+PDU(帧结构),数据块与串行链路是一致的。

功能码分类

公共功能码

  • 是较好地被定义的功能码,
  • 保证是唯一的,
  • MODBUS 组织可改变的,
  • 公开证明的,
  • 具有可用的一致性测试,
  • MB IETF RFC 中证明的,
  • 包含已被定义的公共指配功能码和未来使用的未指配保留供功能码。

用户定义功能码

  • 有两个用户定义功能码的定义范围,即 65 至 72 和十进制 100 至 110。
  • 用户没有 MODBUS 组织的任何批准就可以选择和实现一个功能码
  • 不能保证被选功能码的使用是唯一的。
  • 如果用户要重新设置功能作为一个公共功能码,那么用户必须启动 RFC,以便将改变引入公共分类中,并且指配一个新的公共功能码。

保留功能码

  • 一些公司对传统产品通常使用的功能码,并且对公共使用是无效的功能码。

举例

Modbus-RTU协议

主机对从机写数据操作

从站地址

功能码

数据地址(高)

数据地址(低)

数据(高)

数据(低)

校验

0x01

0x06

0x00

0x01

0x00

0x17

0x98 0x04

含义:

0x01:从机的地址 0x06:修改功能,修改从机寄存器的数据 0x00 0x01: 代表修改的起始寄存器地址.说明修改0x0000-0x0001的存储内容 0x00 0x17: 要修改的数据值为0017 0x98 0x04: 循环冗余校验 CRC

从机回复报文格式如下:

从站地址

功能码

数据地址(高)

数据地址(低)

数据(高)

数据(低)

校验

0x01

0x06

0x00

0x01

0x00

0x17

0x98 0x04

0x01:从机的地址 0x06:修改功能,修改从机寄存器的数据 0x00 0x01: 代表修改的起始寄存器地址.说明是0x0000 0x00 0x17:修改的值为0017 0x98 0x04: 循环冗余校验 CRC

从机的回复和主机的发送是一样的,如果不一样说明出现了错误

拓展

ModBus网络体系结构

当在Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

什么是RS-485 RS-232

数据在通信双方之间传输,本质是传输物理的电平 比方说传输5V的电压 -1V的电压信号,这些物理信号在传输过程中会受到很多干扰,比方说你传输一个5V的电压,到了接收端可能就变成了4.8V,并且通信的双方高低电平的参考电压可能不同。 那么这个时候就需要一个电平标准,来判断多少V的电压是高电平 1,多少V的电压是低电平 0 这就诞生了 RS-485 RS-232 **RS232:**是电子工业协会(Electronic Industries Association,EIA) 制定的异步传输标准接口,同时对应着电平标准和通信协议(时序),其电平标准:+3V~+15V对应0,-3V~-15V对应1。

  • 全双工
  • 逻辑1:-15V–5V
  • 逻辑0:+3V–+15V

RS485:RS485是一种串口接口标准,为了长距离传输采用差分方式传输,传输的是差分信号,抗干扰能力比RS232强很多。两线压差为-2~-6V表示0,两线压差为+2~+6V表示1

  • 半双工
  • 逻辑1:+2V~+6V
  • 逻辑0: -2V~ -6V

总结

ModBus大多使用场景的都是使用ModBus-RTU这个通信格式,其他的我们了解一下就行,如果想深入可以在去参考链接里面去看看

参考

图文详解Modbus-RTU协议

一、MODBUS通讯协议完整介绍(全文10000字以上)

一文看懂Modbus协议

MODBUS协议中文版/英文版预览及下载

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • ModBus
    • 什么是ModBus
      • 协议格式
        • MODBUS 数据模型
          • MODBUS 传输模式
            • 功能码分类
              • Modbus-RTU协议
          • 举例
          • 拓展
            • ModBus网络体系结构
              • 什么是RS-485 RS-232
              • 总结
              • 参考
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档