文章目录

前言

本系列主要记录STM32使用Modbus协议实现主从通信的功能,此篇主要介绍一些相关的基础知识,笔者学习参考的是灵育科技胥工的Modbus教程,想要学习的可以去这个链接购买

协议简介

我们都知道在计算机的世界里只有0和1,那么计算机是怎么从一堆1、0组成的数据中识别出特定的内容的呢?这就需要使用到协议,协议是指两台或者多台设备之间进行通信所必须共同遵守的规定或规则,可以形象的理解为规定了数据包的断句位置和每一个位数据的具体意义。
举个栗子,如下,从机发送了一个数据包是“00100110101”,在没有协议约定的时候我们根本无法知道其中的意思,只有约定好了协议,双方都知道了断句位置以及每一位代表的是什么才能知道这其中的意义。


利用协议进行解读,就可以得到主机发送的内容是0x4D这样一个数。

协议分类

在嵌入式的学习过程中,会接触到两大类的协议,其一是用来实现主系统与其他从系统的硬件层通信协议,类似于STM32与AT24C04、STM32与DS1302、STM32与串口屏等这种通信都属于硬件层通信协议;而另外一种则是类似于MODBUS、TCP/IP这样的软件层协议。

硬件层协议

在硬件层协议中,又分为板级通信协议和现场通信协议,硬件层协议决定了数据传输中的0、1该怎样的方式传输,需要用几个信号线进行连接,是同步通信还是异步通信,是全双工、半双工还是单工。可以形象的理解为A城区与B城区的公路,可以使双向的,也可以是单行道的。可以是八车道也可以是双车道。

板级总线

板级通信见名知意,就是应用在PCB板上的的通信协议,主要是指SPI、IIC、UART、1-Wire这一类。有关这些协议的详解可以参考笔者树莓派笔记系列中的各个例子。
例如:UART这一板级通信协议中的0就是指低电平1就是指高电平。单片机中常用的是TTL电平,TTL电平中低电平是指IO电压小于0.2V,高电平一般是指大于2V(CMOS电平中低电平是0.3VCC,高电平是0.7VCC,如果电压是5V基准的则分别对应1.5V和3.5V)。

现场总线

现场协议主要是应用在工业控制现场,由于使用环境变得复杂,各种干扰会出现并对通信造成影响,所以这类通信协议一般采用差分信号或者提高高低电压范围的方式来提高抗干扰能力,不同协议有不同的电压信号代表逻辑值0和1。

RS232

例如:RS232使用的是后者,其逻辑1是-3V至-15V,逻辑0是+3V至+15V;


由于单片机一般是TTL电平,所以要与使用RS232协议的系统通信需要使用TTL与RS232的转换电路,常用的是max232电路实现。

485通信

而485通信协议和CAN总线就是采用的差分信号,利用两个信号线之间的电压来传输逻辑0和1。
485通信连接图:

485的逻辑0是A,B两个信号线的电压差Ua-Ub=-5V(或者UB-UA>2V至6V)
482的逻辑1是A,B两个信号线的电压差Ua-Ub=5V(或者UA-UB>2V至6V)


同样,由于单片的电平与485设备电平不一致,所以需要进行硬件转换,常用MAX485实现。

CAN总线

CAN总线:逻辑1:-1.5V–0V 逻辑0:+1.5V–+3V)这里的电平指CAN_High、CAN_Low 两线间的电压差。
CAN总线通信连接图:

逻辑1,U CAN_High - U CAN_Low = 0V;
逻辑0,U CAN_High - U CAN_Low = 2V。



同上面其他两种现场通信总线一样,CAN总线也需要有电平转换电路来实现单片机与CAN总线上的设备通信。


类似上述三种需要转换后才能正常通信的还有USB接口,我们串口烧录和调试的时候就经常使用到它,一般是采用CH340的电路实现。
上述三种现场总线的图片转载的此篇博文

软件层协议

软件层的协议最主要的作用就是决定数据怎么传,给数据包做好断句和数据位的定义,使得通信双方能够根据这个协议的定义去解析出数据包中的数据,从而达到通信的方式。此系列将要详细记录的·MODBUS就属于软件层的协议,类似的还有TCP/IP等等,需要注意的是软件层的协议都是需要借助硬件层的通信协议来实现物理层的传输的,所以同一个软件协议可能会出现不同硬件载体的分支版本。

MODBUS协议

MODBUS协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。1


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

总结

有关通信协议的基础知识介绍就先记录到此,如有不足欢迎指正,此篇目的是做个铺垫,主要描述了硬件层协议的传输方式,后面将借助这些知识实现一个MODBUS RTU的通信。

合集

STM32 Modbus通信学习笔记——理论基础
STM32 Modbus通信学习笔记——通信流程
STM32 Modbus通信学习笔记—— 代码及示例
STM32 使用MODBUS与维控屏通信(modbus系列代码)


  1. 什么是MODBUS ↩︎