【Modbus通信实验四】Modbus RTU协议

一、Modbus协议简介

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
传统Modbus 是一个请求/应答协议,由于485为单工,1个服务器为主,多个客户机为从,从设备只能应答。

Modbus消息桢包括RTU、ASCII、TCP。RTU、ASCII消息桢用于异步串行传输通信。TCP消息桢应用于网络传输通信(本文暂不考虑)。
【Modbus通信实验四】Modbus RTU协议_第1张图片

ASCII模式:消息以冒号字符(:对应ASCII码3aH)开始,以回车换行符(CR,LF对应ASCII码0dH,0aH)结束。其它域可以使用的传输字符是十六进制的0…9,a…f。(H表示16进制hex)
RTU模式:以RTU模式在Modbus总线上进行通讯时,信息中的每8位字节分成2个4位16进制的字符,每个信息必须连续传输。

例:写出设备地址0x02、功能代码0x01、数据0x13的ASCII模式和RTU模式通用消息帧:
RTU:0x02 0x01 0x13 0x_crc___(CRC结尾)
ASCII:0x3a 0x30 0x32 0x30 0x31 0x31 0x33 0x_lrc_ 0x0d 0x0a(回车换行符结尾)

注:Modbus RTU由于没有起始和结束字符,故需要再传输时填充大于3.5个字符的数据以此来隔开报文。
【Modbus通信实验四】Modbus RTU协议_第2张图片

ASCII和RTU没有优劣,只是应用场景不同:【Modbus通信实验四】Modbus RTU协议_第3张图片

二、Modbus RTU命令

开关量:开关量只有两种状态,0、1,包括开入量和开出量,反映的是状态。(某个电灯的开关,对应MODBUS线圈中一位)
数字量:数字量由多个开关量组成。如三个开关量可以组成表示八个状态的数字量。(多个电灯的状态,对应MODBUS线圈)
模拟量:模拟量是连续的量,数字量是不连续的。反映的是电量测量数值(如电流、电压)(电灯当前电流测量值,对应MODBUS中的寄存器)

1.读写线圈(开关量控制及状态返回)

  • 功能码01

【Modbus通信实验四】Modbus RTU协议_第4张图片

【Modbus通信实验四】Modbus RTU协议_第5张图片

【Modbus通信实验四】Modbus RTU协议_第6张图片

下图为一个典型的Modbus主从控制电路,PC为Master,MCU为Slave。 MCU通过线圈继电器来控制外部电路中的开关,同时通过光耦原件监测灯泡附近的电势,并实现与外部电路的相互隔离。
【Modbus通信实验四】Modbus RTU协议_第7张图片
PC发送01命令时MCU根据线圈的状态对主机回复。
PC发送05命令时MCU通过控制线圈中的电流大小,从而控制外部电路中的开关开闭。
PC发送02命令时MCU通过读取光耦原件返回的电信号,从而对主机进行输入状态的回复。

2.读写寄存器(数值给定设置及测量结果返回):对电灯设定电灯功率,接收当前电灯实际功率。

  • 功能码03/04(03是读保持寄存器,04是读输入寄存器)

【Modbus通信实验四】Modbus RTU协议_第8张图片

  • 功能码10

10用于写多个寄存器。
【Modbus通信实验四】Modbus RTU协议_第9张图片

你可能感兴趣的:(c++,信息与通信)