目录

  • 1 课程简介
    • 1.1 课程简介
    • 1.2 课程标准
    • 1.3 职业证书对接
    • 1.4 课程分工
  • 2 数据采集
    • 2.1 数据采集之数字量传感数据采集
    • 2.2 数据采集之模拟量传感数据采集
    • 2.3 数据采集之模拟量转换为数字量
    • 2.4 数据采集之开关量传感数据采集
  • 3 STM32微控制器基本外设应用开发
    • 3.1 STM32基础知识
    • 3.2 任务1 开发环境搭建和工程建立
    • 3.3 任务2 LED流水灯应用开发
    • 3.4 任务3 按键控制LED灯亮灭
    • 3.5 任务4 串行通信控制LED流水灯应用开发
    • 3.6 任务5 电池电量检测应用开发
  • 4 RS-485总线通信应用
    • 4.1 RS-485基本知识
    • 4.2 RS-485通信协议及网关通信协议
    • 4.3 Modbus通信协议
    • 4.4 任务1 案例分析及工程代码编写
    • 4.5 任务2 系统搭建及云平台项目创建
  • 5 CAN总线通信应用
    • 5.1 CAN总线基本知识
    • 5.2 CAN通信帧
    • 5.3 CAN控制器和收发器
    • 5.4 任务1 案例分析及工程代码编写
    • 5.5 任务2 系统搭建及云平台项目创建
    • 5.6 任务3 CAN通信数据抓包与解析
  • 6 BasicRF的无线通信应用
    • 6.1 BasicRF基础知识
    • 6.2 任务1创建工程项目
    • 6.3 任务2 温湿度节点数据采集
    • 6.4 任务3 火焰节点数据采集
    • 6.5 任务4 传感器节点组网
    • 6.6 任务5 传感数据汇聚
  • 7 WiFi数据通信
    • 7.1 WI-FI基础知识
    • 7.2 使用AT指令配置WI-FI工作模式
    • 7.3 WI-FI接入云平台
  • 8 NB-IoT联网通信
    • 8.1 NB-IoT技术简介
    • 8.2 利尔达NB-IoT模组介绍
    • 8.3 任务1 “智慧路灯”AT指令代码编写
    • 8.4 任务2.烧写智能路灯
    • 8.5 任务3NB-IoT接入云平台
  • 9 LoRa 通信技术
    • 9.1 基础知识
    • 9.2 项目分析与LoRa驱动移植
    • 9.3 任务2 LoRa温湿度传感器节点应用程序开发
    • 9.4 任务3 LoRa光照传感器节点数据采集
    • 9.5 任务4 LoRa网关节点汇聚传感器数据
    • 9.6 讨论
Modbus通信协议
  • 1 知识介绍
  • 2 PPT
  • 3 学习视频
  • 4 测试
  • 5 匠人匠心

一、Modbus通信协议的基本知识

Modbus是一种串行通信协议,是Modicon公司(既现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。

基于串行链路的 Modbus 通信协议有两种传输模式,它们分别是 Modbus RTU 与 Modbus ASCII,这两种模式在数值数据表示和协议细节方面略有不同。Modbus RTU 是一种紧凑的, 采用二进制数据表示的方式,而 Modbus ASCII 的表示方式则更加冗长。在数据校验方面;Modbus RTU 采用循环冗余校验方式,而 Modbus ASCII 采用纵向冗余校验方式。另外,配置 为 Modbus RTU 模式的节点无法与 Modbus ASCII 模式的节点通信。

3-1RTU模式与ASCII模式对照表

特性

RTU模式

ASCII模式

编码

二进制

ASCII

每个字符位数

起始位:1 bit

数据位:8 bit

奇偶检验位(可选):1位

停止位:1或2

起始位:1bit

数据位:7 bit

奇偶检验位(可选):1位

停止位:1或2

报文校验

CRCY(循环冗余校验)

LRCY(纵向冗余校验)


Modbus 是一种单主/多从的通信协议,即在同一时间里,总线上只能有一个主设备, 但可以有一个或多个(最多 247 个)从设备。主设备是指发起通信的设备,而从设备是接收 请求并做出响应的设备。在 Modbus 网络中,通信总是由主设备发起,而从设备没有收到来 自主设备的请求时,不会主动发送数据。ModBus 通信的请求与响应模型如图所示。在 Modbus 网络中,主设备向从设备发送 Modbus 请求报文的模式有两种:单播模式与广播模式。

Modbus 通信的请求与响应3-26Modbus 通信的请求与响应

单播模式:主设备寻址单个从设备。主设备向某个从设备发送请求报文,从设备接收并 处理完毕后向主设备返回一个响应报文。

广播模式:主设备向 Modbus 网络中的所有从设备发送请求报文,从设备接收并处理完毕后不要求返回响应报文。

正常响应时,响应功能码 与请求信息中的功能码相同。

服务器正常响应3-27服务器正常响应

发生异常时,功能码将被修改以指出响应消息是错误的。差错检测区允许主设备确认消息内容是否可用。

服务器异常响应3-28服务器异常响应

二、Modbus寄存器

寄存器是Modbus通信协议的一个重要组成部分,它用于存放数据。Modbus寄存器最初借鉴于PLC(Programmable Logical Controller,可编程控制器)。后来随着Modbus通信协议的发展,寄存器这个概念也不再局限于具体的物理寄存器,而是慢慢拓展到了内存区域范畴。

根据存放的数据类型及其读写特性,Modbus 寄存器被分为4种类型,如表 3-2所示:分别是线圈状态(Coll),作为输出端口(可读可写),相当于PLC的DO(数字量输出),可用于LED显示、电磁阀输出等;第二是离散输入状态(Discerte Input),作为输出端口(只读),相当于PLC的DI(数字量输入),可用于接近开关、拨码开关等;第三是保持寄存器,作为输出参数或保持参数(可读可写),相当于PLC的AO(模拟量输出),可用于模拟量输出设定值、传感器报警阈值等;第四是输入寄存器,作为输入输出(只读),相当于PLC的AI(模拟量输入),可用于模拟量输入值。

3-2Modbus 寄存器的分类与特性

寄存器种类

特性说明

实际应用

线圈状态

(Coil)

输出端口(可读可写),相当于PLC的DO(数字量输出)

LED显示,电磁阀输出等

离散输入状态(Discrete Input)

输入端口(只读),相当于PLC的DI(数字量输入)

接近开关、拨码开关等

保持寄存器(Holding Register)

输出参数或保持参数(可读可写),相当于PLC的AO(模拟量输出)

模拟量输出设定值、PID运行参数、传感器报警阈值等

输入寄存器(Input Register)

输入参数(只读),相当于PLC 的AI(模拟量输入)

模拟量输入值


寄存器地址又分为PLC地址和Modbus地址,其中这四个寄存器的Modbus协议地址是相同的,为0000H~FFFFH,以十六进制数据表示。具体的PLC地址如表 3-3所示。

3-3Modbus 寄存器的地址分配

寄存器种类

寄存器PLC地址

寄存器Modbus协议地址

位/字操作

线圈状态

00001~09999

0000H~FFFFH

位操作

离散输入状态

10001~19999

0000H~FFFFH

位操作

保持寄存器

40001~49999

0000H~FFFFH

字操作

输入寄存器

30001~39999

0000H~FFFFH

字操作


三、Modbus的串行消息帧格式

在计算机网络通信中,帧(Frame)是数据在网络上传输的一种单位,帧一般由多个部分组合而成,各部分执行不同的功能。Modbus通信协议在不同的物理链路上的消息帧是有差异的,本节主要介绍串行链路上的Modbus消息帧格式,包括ASCII和RTU两种模式的消息帧。在ASCII模式中,消息以冒号字符开始,以回车换行符结束。消息帧的其它域可以使用的传输字符是十六进制的0~F。Modbus网络上的各设备都循环侦测起始位——冒号字符,当接收到起始位后,各设备都解码地址域并判断消息是否发给自己的。注意:两个消息帧之间的时间间隔最长不能超过1秒,否则接收的设备将认为传输错误。一个典型的ModbusASCII消息帧如表 3-4所示。

3-4典型的Modbus ASCII消息帧格式

起始位

地址

功能代码

数据

LRC校验

结束符

1个字符

2个字符

2个字符

n个字符

2个字符

2个字符CR,LF


在RTU模式中,消息的发送与接收以至少3.5个字符时间的停顿间隔为标志。Modbus网络上的各设备都不断地侦测网络总线,计算字符间的间隔时间,判断消息帧的起始点。当侦测到地址域时,各设备都对其进行解码以判断该帧数据是否发给自己的。另外,一帧报文必须以连续的字符流来传输。如果在帧传输完成之前有超过1.5字符时间的间隔,则接收设备将认为该报文帧不完整。一个典型的ModbusRTU消息帧如表 3-5所示。

3-5典型的Modbus RTU消息帧格式

起始位

地址

功能代码

数据

CRC校验

结束符

字符

8位

8位

n个8位

16位

字符


消息帧分为地址域、功能码域、数据域和差距校验四部分。地址域存放了Modbus通信帧中的从设备地址。Modbus ASCII消息帧的地址域包含2个字符,Modbus RTU消息帧的地址域长度为1个字节。在下行帧中,地址域表明只有符合地址码的从机才能接收由主机发送来的消息。上行帧中的地址域指明了该消息帧发自哪个设备。

功能码域用于表明一个Modbus信息帧的用途。当主设备向从设备发送信息时,功能码将告诉从设备需要执行哪些行为。

数据域与功能码紧密相关,存放功能码需要操作的具体数据。数据域以字节为单位,长度 是可变的。

差错校验是在数据通信过程中能发现或纠正差错,并把差错限制在尽可能小的允许范围内的技术和方法。常用的校验方法有:循环冗余码和奇偶校验码。

四、Modbus的功能码

部分常用的Modbus功能码如表 3-6所示。01用于读取从设备的线圈或离散量(DO,数字量输出)的输出状态(ON/OFF);02用于读取从设备的离散量(DI,数字量输入)的输入状态(ON/OFF);03用于读取从设备保持寄存器的二进制数据,不支持广播;04用于读取从设备输入寄存器的二进制数据,不支持广播;05用于将单个线圈或单个离散输出状态设置为“ON”或“OFF”;06用于更新从设备单个保持寄存器的值。

3-6部分常用的Modbus功能码

代码

功能码名称

位/字操作

操作数量

01

读线圈状态

位操作

单个或多个

02

读离散输入状态

位操作

单个或多个

03

读保持寄存器

字操作

单个或多个

04

读输入寄存器

字操作

单个或多个

05

写单个线圈

位操作

单个

06

写单个保持寄存器

字操作

单个


表 3-7可以看到,从设备地址为 06,需要读取的 Modbus起始地址22(0x16),结束地址为 54(0x36),共读取33(0x21)个状态值。

3-7功能码01的请求报文

从设备地址

功能码

起始地址

寄存器个数

CRC校验

06

01

00 16

00 21

1C 61


响应报文和请求报文前两个都一样保持不变,但响应报文多了数据域字节数和数据域,前者是响应数据的长度,后者是具体的数据。CRC校验则是随着每个报文的不同而变化。

3-8功能码01的响应报文

从设备地址

功能码

数据域字节数

5个数据

CRC校验

06

01

05

23 88 24 C4 01

ED 9C


功能码02的请求报文和响应报文的结构和功能码01基本相同。

3-9功能码02的请求报文

从设备地址

功能码

起始地址

寄存器个数

CRC校验

04

02

00 77

00 1E

48 4D

3-10功能码02的响应报文

从设备地址

功能码

数据域字节数

4个数据

CRC校验

04

02

04

AD B7 05 38

3C EA


功能码03和功能码04的请求报文和响应报文的结构和功能码01基本相同。

3-11功能码03的请求报文

从设备地址

功能码

起始地址

寄存器个数

CRC校验

06

03

00 D2

00 04

E5 87

3-12功能码03的响应报文

从设备地址

功能码

数据域字节数

4个数据

CRC校验

06

03

08

02 6E 01 F3 01 06 59 AB

1E 6A

3-13功能码04的请求报文

从设备地址

功能码

起始地址

寄存器个数

CRC校验

06

04

01 90

00 05

30 6F

3-14功能码04的响应报文

从设备地址

功能码

数据域字节数

4个数据

CRC校验

06

03

0A

1C E2 13 5A 35 DB 23 3F 56 E3

51 3A


功能码05和功能码06与以上功能码略有区别,它们的第四部分不是寄存器个数了,而是变更数据。01~04功能码着重突出读数据,功能码05是写单个线圈,功能码06是写单个保持寄存器。

3-15功能码05的请求报文

从设备地址

功能码

起始地址

变更数据

CRC校验

04

05

00 98

FF 00

0D 80

3-16功能码05的响应报文

从设备地址

功能码

起始地址

变更数据

CRC校验

04

05

00 98

FF 00

0D 80

3-17功能码06的请求报文

从设备地址

功能码

起始地址

变更数据

CRC校验

03

06

00 82

02 AB

68 DF

3-18功能码06的响应报文

从设备地址

功能码

起始地址

变更数据

CRC校验

03

06

00 82

02 AB

68 DF