Modbus基础
1.简述,modbus是一种工业用的多设备之间的主从通信协议。只要两台设备之间,是采用modbus协议的主从关系,并连接到相同网络,即可互相通信。因为Modbus只是协议,而且只规定了数据帧,底层连接,可以是232,485或者以太网。设备一般采用232和485进行通信,因为成本低。当然要是考虑远距离传输和多卖钱的话,也会采用以太网,不过应该就会相应复杂一些了。
2模式,modbus有两种模式,一种叫RTU模式,另一种叫acsii模式,RTU模式是纯二进制的,而acsii模式,一个信息中的每8位字节作为2个ascii字符传输的,这种模式的主要优点时允许字符之间的时间间隔长达1秒,也不会出现错误。而较acsii模式,RTU模式的优点是用最少的字节,表达更多的内容。但同时也要求设备必须连续传输。
3通讯,modbus属于主从通讯,可以是一主一从或者一主多从。通讯的方式为主机向从机发送命令(或者叫请求)从机向主机发送响应。主机不发送,从机不返回,一发,一收,不发不收。而且一个时间,只有一个机器发送请求或者响应,否则的话,则会出错。
4信息帧,RTU帧,开始时,必须要有3.5个静止的时间,也就是时间间隔,用来区分上一帧和下一帧,如果没有时间间隔的话,则会分辨不出哪里是帧开始,哪里是帧结束了。3.5个时间间隔依据波特率不同而不同。同样,结束时也需要时间。除了时间以外,还有地址,功能码,数据,crc校验四个部分,每个部分的字节数不同,地址功能码各1个字节,crc是2个字节其完整表达如下:
开始 | 地址 | 功能 | 数据 | 校验 | 结束 |
3.5t | 1字节 8b | 1字节 8b | n字节 n*8b | 2字节16b | 3.5t |
4.1、地址:主要用于区分从机,在下位机程序中,的宏定义中设置不同的从机地址。
#defineModbus_addr 0x01
设备响应时,第一位也是本机地址。地址的范围是从0-247,地址0为广播地址,所有机器均可以识别。
4.2、功能码:表示主机要命令这个设备的什么功能,执行什么程序。我看了一下正规的modbus的功能码多达24个,不同厂家生产的不同型号的设备,可能会支持不同的功能码,所以买之前需要注意一下。具体功能如下:
01读线圈状态
02读输入状态
03读保持寄存器
04读输入寄存器
05强制单个线圈
06 预置单个寄存器
07读不正常状态
08诊断
09程序484
10查询484
11通讯事件控制
12通讯事件记录
13程序控制器
14查询控制器
15强制多个寄存器
16 预置多个寄存器
17报告从机id
18程序884/M84
19通讯链路复位
20读通用参考值
21 写通用参考值
22 Mask Write 4X Register
23 Read/Write 4X Registers
24 Read FIFO 队列
常用01 02 03 04 05 06 15 和16功能码。
4.3、数据区,根据功能码的不同数据的长度是不同的。
4.4、crc校验 包含两个字节,发送端发送时,一帧的所有数据统一计算出一个crc校验码,然后加在一帧的最后两位中,然后等到发送到接收端时接收端重新计算一次除最后两位的一帧所有数据,然后根据两个数据的对比,来判断接收到的数据是否正确。