modbus协议是工业控制中很常用的协议。
主要用于PLC和设备通信,Modbus协议可以使用串口的RS232、RS485和网口的TCP、UDP协议。
Modbus分为主机和从机,主机主要作为控制端,从机主要作为受控端。一个主机可以控制多个从机。
modbus有触点、线圈等概念。
什么是触点?
触点就是类似开关的东西。所有触点代表开关量输入,用于信号输入
什么是线圈?
线圈就是类似继电器的东西。下图是一个继电器,通电线圈就闭合或者端口。通常用线圈代表开关量输出,用于控制输出。
什么是寄存器?
寄存器是用来存储数据的,比如存储模拟量、程序状态等,从机设备有一套自己的程序,可以读取寄存器的内容从而执行相应的操作,或者读取到某些数据后存放到寄存器中。
什么是站号,Modbus为了区分设备,需要提前给每个设备都设定好一个站号,从1-254,一个Modbus网络可以支持253个从机设备。主机没有站号。
Modbus通信流程
modbus的通信流程很简单,主机发出命令,从机接收到命令后处理并返回响应。
如果从机在设定时间段内未响应,则判断通信失败。
Modbus通信主要是Modbus-RTU,也就是串口模式。
Modbus网络需要保证主要的串口参数保持一致,也就是波特率、校验位、数据位、停止位都相同,不然无法正常通信。
在现场中,设备通信不上就需要测试这些参数是否一致。检查参数是否被复位了,站号是否正确等。
在现场环境中,由于存在电机启停,导致电磁干扰、电位差干扰、电源不稳定等,使通信经常出错,所以在工业中要使用抗干扰的芯片,稳定的电源,同时串口的波特率不要设置得太高。能用IO控制尽量不用通信,不然调试起来特别麻烦。
Modbus格式
Modbus是以数据帧的格式通信的,每帧最小间隔3.5个字节。
Modbus数据帧的第一字节是地址码,第二字节是功能码,中间是数据,最后两位是CRC校验码。
中间的数据格式由功能码决定。
返回时如果设备存在异常则功能码+80返回,返回的数据格式由功能码决定。
功能码功能参考Modbus手册