通讯协议
物理层数据链路层协议
近距离通信
Bluetooth
NFC
远距离蜂窝通信
远距离非蜂窝通信
wifi
TD-LTE(4G)
SIP
有线通信
SPI
SPI串行外设接口(Serial Peripheral Interface)的缩写SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今主流的微控制器都集成有spi接口,如 stm32 家族。
I2C
全称Inter-Integrated Circuit意思是芯片与芯片间的通信,I2C是一种半双工协议,同一时间只能进行接收或发送。一个I2C可以连接多个设备,通常是一主多从模式。它串的设备数量有没有上限呢?有的,上限是127个。物理上就像如下图:
根据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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析