通讯协议

物理层数据链路层协议

近距离通信

Bluetooth

NFC

远距离蜂窝通信

远距离非蜂窝通信

wifi

TD-LTE(4G)

SIP

有线通信

SPI

SPI串行外设接口(Serial Peripheral Interface)的缩写SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今主流的微控制器都集成有spi接口,如 stm32 家族。

I2C

全称Inter-Integrated Circuit意思是芯片与芯片间的通信,I2C是一种半双工协议,同一时间只能进行接收或发送。一个I2C可以连接多个设备,通常是一主多从模式。它串的设备数量有没有上限呢?有的,上限是127个。物理上就像如下图:
image
根据I2C协议规定:SCL处于高电平时,SDA由高到低变化,这种信号是起始信号。

CAN

modbus

参考:

https://blog.csdn.net/tiandiren111/article/details/118347661

https://blog.csdn.net/m0_47136030/article/details/139128639

大致分为以下几种:

  • Modbus-RTU
  • Modbus-ASCII
  • Modbus-TCP
  • Moubus-UDP

以上4种协议,一个设备只会有一种协议,如果你的设备使用的是Modbus-RTU,只需查看以下对应部分,一般来说大部分的设备都是Modbus-RTU协议的。

Modbus的通讯方式有:串行通讯方式、以太网通讯方式、串行-以太网转换方式、无线通讯方式

modbus通信过程

Modbus是主从方式通信,也就是说,不能同步进行通信,总线上每次只有一个数据进行传输,即主机发送,从机应答,主机不发送,总线上就没有数据通信。(所以说,这也算是一个缺点了)

Modbus-RTU

设备必须要有RTU协议!这是Modbus协议上规定的,且默认模式必须是RTU,ASCII作为选项。(也就是说,一般的设备只有RTU这个协议,ASCII一般很少)所以说,一般学习Modbus协议,只需要了解RTU的协议,ASCII作为学习的了解就足够了。

Modbus-RTU协议只需要看懂功能码0x03、0x06、0x10这三个基本的就已经足够了,分别回想下其数据域部分:

  • 0x03—主机需要发送起始地址+寄存器数量,从机回复总字节数+数据;

  • 0x06—主机发送起始地址+数据内容(因为你只需要修改一个,所以起始地址就是所要修改的地址),从机返回起始地址+数据内容(发现居然一样!)

  • 0x10—主机发送起始地址+寄存器个数+总字节数+数据,从机返回起始地址+寄存器数量

1. 帧结构

帧结构 = 地址 + 功能码+ 数据 + 校验

  • 地址: 占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)。

  • 功能码: 占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改数据,所以不同功能码对应不同功能。

  • 数据: 根据功能码不同,有不同结构,在下面的实例中有说明。

  • 校验: 为了保证数据不错误,增加这个,然后再把前面的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了。

Modbus-ACSII协议

1. 帧形式

对于RTU协议,比如RTU发送一个字节:0x12;ASCII协议则需要发送2个字节:一个字节代表ASCII码1,一个代表ASCII码2,即0x31和0x32,才能代表0x12。所以,ASCII协议的效率比较低。但是ASCII更符合串口打印查看,因为串口发送的数据一般都是文本模式(ASCII)。

比如用RTU方式,也叫16进制方式,要发0x03数据,RTU方式就发送00000011。用ASCII发送0x03,就要发送0的ASCII码0x30和3的ASCII码0x33,对应到2进制也就是发送00110000和00110011。很显然RTU方式只需要发送8位就可以了(加上起始位和停止位就是10位数据)。那么ASCII码方式发送就需要两个8位(每个8位分别加上起始位和停止位就是20位数据)。也就是说ASCII码发送数据量是RTU方式的2倍,所以ASCII码效率更低。

由于Modbus-RTU和Modbus-ACSII都是基于232和485链路的,所以其通讯模式半双工,一般是主机和从机的模式。其差别就是其字节的格式不同,一个是16进制的数据,一个是ASCII数据。ASCII多了帧头和帧尾,也就是说可以有用这个头尾判断一帧字节来判断是否结束;而RTU没有帧头和帧尾,所以协议里明确两帧之间要大于3.5个字节时间间隔,作为一帧结束的判断依据。对于RS485来说,总线上一般允许最大32个设备。

Modbus-TCP协议

是基于以太网的一种通讯方式,它将Modbus协议封装在TCP/IP协议栈中,通过以太网传输数据。具有高速、稳定的特点。

Modbus-UDP协议

是基于UDP/IP协议的一种通讯方式。与Modbus TCP/IP不同,Modbus UDP/IP采用无连接的通讯方式,不保证数据的可靠性和顺序。相比于Modbus TCP/IP,Modbus UDP/IP的通讯开销较小,可以减少网络负载。

USB

UART

串口通信,物理层就是二根线,一根发送一根接收。速度比较慢。

RS232

串口通信的一种,它的通信距离30米左右

RS485

串口通信的一种,它的通信距离可以达到1000米。同时485还增加了一对多的功能。

PWM

PWM即脉宽调制(Pulse-width Modulation, PWM。
PWM有两个重要的参数,第一个是周期,就像是正弦波,其周期就是2pi,指的是多久循环一次,我们这里设置的是50HZ,也就是说20ms。

在一个周期里,引脚高电平的时间就称为占空比,这里我们设置的是0.5ms-2.5ms之间作为舵机控制的占空比范围。
换句话说,假设我们设置当前舵机角度为90度,此时占空比

占空比 = 500+90*(2500-500)/180
posted @ 2024-06-30 17:51  alvinlyb  阅读(1)  评论(0编辑  收藏  举报