
点击下方卡片,可以快速关注:
最近我们开了一个针对集水坑的水位监测设备,设备本身没什么技术含量,主要是增加公司的自研产品比例(高新企业要求),在研发人员定义通信协议的时候我发现了协议规范性问题,那下面就来谈谈这个基础知识点。
modbus作为工控领域的标准通讯协议规则,是研发人员耳熟能详的,很多研发人员也开发过。
这个协议主要是针对RS485串口下多设备连接的环境定义而来,485串口接主站(例如电脑/PLC/触摸屏),所有仪表传感器全部并联485总线,靠Modbus设备地址ID区分每一台设备。
关键点是,1)Modbus设备地址ID(1~247,每个设备地址必须不一样);2)全部A接A、B接B,并联在同一条485线上,不用单独串口。
主站串口发指令去找地址1的设备读取数据,那么只有地址1设备应答,其他设备自动忽略,完全不会错乱混淆。
平时我们说的485地址,建议统一称为Modbus设备地址,以避免歧义。
这里面还有一个寄存器的地址,是区分设备里面的哪个数据(温度、电流、电压等)。
大白话举例一下,485总线看成一条走廊,Modbus设备地址就是房间门牌号,那么寄存器地址就是房间里的柜子编号。
工控四遥也就是工业标准四遥:遥测、遥信、遥控、遥调。工控四遥在全国电力、工控、自动化全都统一这么叫、这么用,所以必须理解。
遥测(YC)是远程看数值的,远程测量模拟量数据,连续变化的数值,例如电压、电流、功率、温度、压力、流量、转速、水位。
遥信(YX)是远程看开关状态的,远程看开关量、开关状态,只有两种状态:开/关、合/分,例如断路器分合闸、阀门开关、风机启停、设备故障报警、刀闸状态。
遥控(YK)是远程手动控制开关的,远程下发指令控制设备启停、分合开关,只做开关类操作,一次性动作。例如隧道里面的风机控制、车道指示器控制。
遥调(YT)是远程调整参数大小,遥控是开关,遥调是调大小、调数值。例如隧道里面的无极调光系统,调整照度。
一般来说,遥测是读寄存器数值,遥调是读/写寄存器数值。,遥信、遥控是读/写开关线圈状态。
总结一下就是:遥测是读取连续变化数值(电压、电流、温度);遥信是读取两种状态(开关、故障信号);遥控是下发开关命令(开机、关机、合闸断电);遥调是修改参数(调速、调压、调温)。
线圈(Coil)只有两种状态:0和1,代表类型有开关、启停、开合、故障有无等等,对应工控里的遥信、遥控,就是纯开关量,只有两种结果,没有中间数值。
寄存器(Register)存具体数字数值,可以是0、5、220、36.5、1000任意数,代表类型有电压、电流、温度、压力、频率、功率等等,对应工控里的遥测、遥调,一般来说是模拟量,连续变化的大小数值。
看着都是地址,本质上完全是两回事,绝对不能混用和乱用。
在PLC编程习惯中,常使用带前缀的地址来表示不同数据区:0xxxx表示线圈,3xxxx表示输入寄存器,4xxxx表示保持寄存器。但在Modbus协议报文中,实际传输的是不带前缀的原始地址(0~65535)。设计时应明确内部地址映射规则。
输入寄存器是只读测量数值,只能读、不能改。
保持寄存器是可读写设定数值。
其中寄存器是存16位整数,32位数据需拆分为两个寄存器,能存几百几千的具体数值
简单地说就是线圈常用于遥信(看开关状态)和遥控(远程开关停),寄存器常用于遥测(读温度电压)和遥调(改频率参数)。
虽然保持寄存器通常可读可写,但若用于存储遥测值(只读数据),应在协议中明确禁止写入,设备收到写请求时返回异常码。
地址确定好了,那么开始确定功能码,这也是有规则的,不能随意瞎定义。
遥测(YC) 是现场采集的实时测量值(如当前水位),应当是只读的,不应被远程修改。优先用功能码04读输入寄存器;若用03则必须分配只读保持寄存器。
遥调(YT) 是下发的设定值或目标参数(如水位上限),通常需要可读可写,用于调整。采用功能码03读保持寄存器,读取设定参数。采用功能码06/16写保持寄存器,修改设定参数。
遥信(YX)是远程读取开关状态,只读。 推荐使用功能码02读取离散输入。若设备没有离散输入区,可使用功能码01读线圈(但需约定禁止写入)。
遥控(YK)是远程下发开关命令。采用功能码05(单个)或15(多个)写入线圈。线圈值 0xFF00 表示“合/开/启动”,0x0000 表示“分/关/停止”。 遥控地址与遥信地址可独立分配,也可共用(写后通过遥信读取确认)。
只看不碰是遥测遥信,动手控制是遥控遥调。
遥测看数值,遥信看状态,遥控控开关,遥调改参数。
02读遥信(或01),04读遥测,03读遥调(或只读遥测),05/15控开关,06/16改遥调。