B站https://www.bilibili.com/video/av84153640?p=6
一、通信
1.信道
传输数据的载体,比如古代传信息白天用狼烟,晚上用烽火。
2.协议
收发数据双方达成的一致协议,对数据格式、含义等作出规定,比如一道烽火代表500人,两道代表1000人。
二、串口
1.并行通讯
以收发十六进制数据为例,并行通讯要用8个IO口连8根线同时发送8位数据。
2.串行通讯
两个接口两根线构成一个回路,每次收发1位数据。
3.RS485通信
以字节形式发送,一次可以发很多字节,MAX485芯片支持,将数字量与模拟量转换,使用差分电路的方式,半双工,可收可发不可同时收发(对讲机一样)。
- 高低电平,A>B 1,A<B 0,正电2~6V,负电-2~-6V。
- 按波特率,9600的波特率就是1s能传输9600位数据,约1ms发1位,距离远的时候波特率可适当低一点。
- 工业RTU传输,数字一般以16进制(8位1字节,每组数据头加0,尾加1)或字符发送。
- 不传输数据时一直发高电平1(可用来检查设备接线是否正确:设备通电,把万用表调到直流10V档,测一下设备两根引线间的电压是不是高电平)。
三、功能码详解
RS485能做的就是收发数据,如果要进行多机通信要进行一些包装。
1.给设备进行编码
- modbus协议规定第一个字节用来放从机地址,01——FF,00作为广播地址。
- 主机不需要编号,只有一个主机。
2.给数据进行编码
- 给数据地址分配了两个字节,0000——FFFF。这个地址仅仅是个编号,不代表真实的地址。
3.给指令进行编码
不论是PLC还是单片机,都有四种数据:
bit(位输入/出) | byte(模拟量输入/出) |
开关量输入(以西门子继电器为例:I0.0~I0.7) | 寄存器输入(以双字节为单位,IW64) |
开关量输出(Q0.0~Q0.7,数据地址:0000~FFFF) | 寄存器输出(QW64) |
主机对指令进行编码,又称功能码,分成收和发两部分,可以理解为主机指令的编号。一方面代表是读是写,另一方面代表是对哪种类型的数据进行操作。
指令 | 编码 | 操作数据类型 | 编码 | 操作数据类型 |
读数据 | 01 | 开关量输出 | 02 | 开关量输入 |
03 | 寄存器输出 | 04 | 寄存器输入 | |
写数据 | 05 | 开关量输出(单个位) | 06 | 开关量输入(单个位) |
15 | 寄存器输出(多个字节) | 16 | 寄存器输入(多个字节) |
读位:读继电器开关量
读数:读变频器频率
写位:打开2号继电器
写数:将变频器的频率从50HZ改成30HZ
写入多个位: