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

一、Modbus协议简介

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

Modbus消息桢包括RTU、ASCII、TCP。RTU、ASCII消息桢用于异步串行传输通信。TCP消息桢应用于网络传输通信(本文暂不考虑)。
在这里插入图片描述

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个字符的数据以此来隔开报文。
这里是引用

ASCII和RTU没有优劣,只是应用场景不同:在这里插入图片描述

二、Modbus RTU命令

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

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

  • 功能码01

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

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

在这里插入图片描述

  • 功能码10

10用于写多个寄存器。
在这里插入图片描述

Modbus功能码表完全版如下:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值