STM32:Modbus通信协议核心解析:关键通信技术

知识点1【 Modbus通信】

1、Modbus的概述

Modbus是OSI模型第七层的应用层报文传输协议

协议:说明有组包和解包的过程

2、通信机制

Modelbus是一个请求/应答协议

通信机制:主机轮询,从机应答的机制。每个从设备有唯一的地址主设备通过地址指定通信对象

轮询:在通信或控制系统中,由主设备主动发送,周期性地向从设备发起请求并获取数据的机制。

特点

(1)系统中只有一个主机:主机通信

(2)系统中的从机不可以主动向主机发送数据

(3)系统上电后,所有的主从设备都应该处于监听总线的状态,也就是接收状态

(4)如果要发起一次通信,必须从主机的主动发起

通信流程

(1)主机首先切换成发送模式,发送数据包

(2)马上转成接收模式

3、Modbus报文格式

缩略语

报文介绍(重点

地址域:从设备的ID号 1Byte

功能码:执行的具体操作 1Byte

数据域:发送或者接收的有效数据 252Byte

差错校验:判断数据传输是否正确 2Byte

异常响应

这段话,中我们可以看到异常响应,那什么是异常响应,如何区分异常响应和正确响应呢?

异常响应概述

服务器(从设备)客户端(主设备) 返回的错误通知,用于指示请求无法撑场处理

异常响应的辨别

功能码为原功能码 + 0x80(即最高位置1),范围为128-255(十进制)

通信的架构图

(1)正确的响应

(2)错误的相应

知识点2【功能码】

功能码分为三类

1、公共功能码

2、用户定义功能码:

3、保留功能吗:

其中最常用的也就是公共功能码

常用功能码介绍

1、0x01:可读可写 按照bit操作

  • 请求格式

    从站地址 | 0x01 | 起始地址高位 | 起始地址低位 | 寄存器数量高位 | 寄存器数量低位 | CRC

  • 响应格式

    从站地址 | 0x01 | 数据字节数 | 线圈状态(按位打包) | CRC

  • 示例

    读取地址0x0000开始的5个线圈状态,返回值为0x15(二进制00010101,表示线圈0-4的状态为ON、OFF、ON、OFF、ON)。

2、0x02:只读 按照bit操作

  • 请求格式

    从站地址 | 0x02 | 起始地址高位 | 起始地址低位 | 输入数量高位 | 输入数量低位 | CRC

  • 响应格式

    从站地址 | 0x02 | 数据字节数 | 离散输入状态(按位打包) | CRC

  • 示例

    读取地址0x0002开始的3个离散输入,返回0x05(二进制00000101,表示输入2-4的状态为ON、OFF、ON)。

3、0x03:读保持寄存器,按照寄存器读取

  • 请求格式

    从站地址 | 0x03 | 起始地址高位 | 起始地址低位 | 寄存器数量高位 | 寄存器数量低位 | CRC

  • 响应格式

    从站地址 | 0x03 | 数据字节数 | 寄存器值(每寄存器2字节) | CRC

  • 示例

    读取地址0x000A开始的2个保持寄存器,返回值为0x00FF0x1234

4、0x06: 按照寄存器操作

  • 请求格式

    从站地址 | 0x06 | 寄存器地址高位 | 寄存器地址低位 | 写入值高位 | 写入值低位 | CRC

  • 响应格式

    从站地址 | 0x06 | 寄存器地址高位 | 寄存器地址低位 | 写入值高位 | 写入值低位 | CRC(与请求相同,表示操作成功)

  • 示例

    向地址0x0001写入值0xABCD,请求与响应报文一致。

5、0x16:写入多个寄存器

  • 请求格式

    从站地址 | 0x10 | 起始地址高位 | 起始地址低位 | 寄存器数量高位 | 寄存器数量低位 | 字节数 | 寄存器值列表(每值2字节) | CRC

  • 响应格式

    从站地址 | 0x10 | 起始地址高位 | 起始地址低位 | 寄存器数量高位 | 寄存器数量低位 | CRC

  • 示例

    向地址0x0000写入两个寄存器值0x12340x5678,请求中包含字节数0x04和值列表。

注意

请求和响应部分 手册中的图如下,我这里来说一下分析时候的注意事项

无论是请求还是响应都是 PDU部分,即 功能码和数据 部分

并且Modbus是大端存储,我们存数据的时候先存入 高地址

知识点3【Modbus在数据链路层的实现】

1、请求方式

(1)单播模式

(2)广播模式

2、地址的规则

寻址地址共256个

主节点没有地址,每个子节点必须有一个地址

3、传输过程中的注意事项

(1)间隔时间

由于没有起始位和停止位,Modbus使用的是以3.5个字符作为 两个报文 之间的最短间隔时间。

(2)相邻字符最大间隔

同一帧数据中相邻字符间隔时间大于1.5个字符

上面的时间单位都是字符,哪一个字符是多久呢?请看下面介绍

(3)RTU模式每个字节(11位)格式

奇偶校验位 是可以没有的,收发端保持一致即可

是不是很熟悉,和串口一摸一样。

因为Modbus是应用层协议,而串口 是物理层和数据链路层 的标准,因此到达数据链路层,他们的格式都是一样的。

串口是一个广义概念,泛指异步串行通信接口。并不只局限于USART。RS485,RS232也都是串口。

因此这里的一个字符时间就是:

字符时间

以波特率9600为例

总结

  • 帧间空闲时间(Inter-Frame Delay)必须 ≥ 3.5个字符时间,以区分连续的数据帧。
  • 帧内字符间隔(Inter-Character Timeout)必须 ≤ 1.5个字符时间,否则视为帧结束。

4、RS485和Modbus 的关系

通信:硬件层,软件层组成

硬件层:

RS485——解决的是数据的传输问题,也就是如何将一个“0“或”1”传输到另外一端。

软件层:

Modbus——在硬件的基础上,解决数据传输的含义,传的数据代表什么。

### 回答1: modelbus协议是一种用于模型之间通信协议。它是一种面向模型的通信协议,旨在实现模型之间的高效、可靠的通信和数据交换。该协议定义了模型间通信的规则和约定。 modelbus协议的设计目标是促进模型的互操作性和集成性。它提供了一种统一的接口,使得不同的模型可以方便地进行数据传输和共享。通过这个协议,模型可以发送和接收消息、请求和响应数据、进行事件通知等。这种通信方式使得模型之间可以实现实时的数据交互和同步。 modelbus协议具有以下特点: 1. 简单易用:modelbus协议的设计简洁明了,易于理解和使用。它提供了简单的API和消息格式,使得开发者能够快速实现协议兼容的模型。 2. 高性能:modelbus协议使用高效的数据传输机制,能够快速传输大量的数据。它支持多线程和异步操作,可以实现并发处理和高速数据传输。 3. 可扩展性:modelbus协议允许用户自定义消息格式和扩展功能。它提供了灵活的插件机制,使得开发者可以根据实际需求进行功能扩展。 4. 可靠性:modelbus协议支持消息的确认机制和错误处理,保证通信的可靠性和稳定性。它提供了异常处理和错误重试的机制,能够有效处理通信中出现的问题。 总之,modelbus协议是一种用于模型之间通信协议,它提供了简单、高效、可靠的通信方式,促进了不同模型之间的数据交换和集成。它是实现模型互操作性和集成性的重要工具。 ### 回答2: Modelbus协议是一种用于模型驱动开发的通信协议,用于在模型驱动的软件开发过程中进行模型模型之间以及模型工具之间的通信和交互。 Modelbus协议定义了一组规范,包括消息格式、通信约定和交互方式。通过使用Modelbus协议,不同的模型和工具可以通过共享和交换模型数据来实现协同工作。基于Modelbus协议,可以实现模型的可重用性、协作性和交互性,从而提高软件开发的效率和质量。 Modelbus协议包括以下几个方面的内容: 1. 消息格式:定义了通信中使用的消息格式,包括消息头和消息体。消息头用于描述消息的类型、发送者和接收者等信息,消息体用于携带模型数据和操作指令等内容。 2. 通信约定:定义了通信的一些基本规则,如建立连接、断开连接、消息的发送和接收等。通过这些通信约定,不同的模型和工具可以进行互联,实现数据的共享和交互。 3. 交互方式:定义了模型间和模型工具间的交互方式。例如,模型之间可以通过发布-订阅的方式进行消息的传递,工具可以通过请求-响应的方式模型进行交互。 Modelbus协议的应用领域广泛,包括软件开发、系统工程、模型验证等。它可以用于构建模型驱动的开发环境,提供了一种开放和标准化的通信机制,促进了不同模型和工具之间的集成和协同工作。同时,Modelbus协议还可以支持模型的版本控制、协同编辑和分布式计算等功能,提高了开发过程的效率和质量。 ### 回答3: Modelbus协议是一种用于数据交换的通信协议。它定义了数据的格式、传输方式和通信规则,旨在实现不同模型之间的数据共享和交互。 Modelbus协议采用了基于事件的通信机制,模型通过发送和接收事件来实现数据交互。模型可以是任何形式的计算模型,如计算机模型、仿真模型或者物理模型。 Modelbus协议核心是事件的定义和传输。事件包括两部分内容:事件类型和事件数据。事件类型指示了事件的种类,如模型启动、数据更新或者模型关闭等。事件数据则包含了具体的信息,如数据值、时间戳等。 Modelbus协议规定了事件的传输方式,一般使用消息队列或者发布-订阅模式来实现。消息队列将事件按照先后顺序进行存储和传输,保证了数据的准确性和一致性。而发布-订阅模式则以主题为单位进行消息的发送和订阅,允许多个模型同时订阅同一个主题,实现了数据的共享和交流。 Modelbus协议还定义了通信规则,包括事件发送和接收的规范。模型通过发送事件将数据传递给其他模型,其他模型则通过接收事件来获取数据。为了保证数据的完整性和准确性,模型需要按照规定的格式发送和接收事件。 总结来说,Modelbus协议是一种用于数据交换的通信协议,通过定义事件的格式、传输方式和通信规则,实现不同模型之间的数据共享和交互。它可以广泛应用于计算模型、仿真模型和物理模型等领域,提高了模型之间的相互联系和数据传递效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值