2. Modbus协议核心原理
Modbus之所以能在车站机电系统中长期占据一席之地,根本原因在于它的模型极其简单:一台主站、若干从站、一套固定的报文格式和四类数据区。理解了这套“骨架”,后面无论是配置BAS网关、调试风机变频器,还是排查照明回路点位错位,都能落到具体的字节和地址上,而不是停留在“通信不通”的模糊判断。
一、主从架构:谁发问,谁回答
Modbus采用严格的主从(Master/Slave)架构。总线上只有一个主站,典型对象是车站BAS控制器、PLC或综合监控前置机;从站则是被控设备,如变频器、智能电表、照明控制器、风机水泵控制箱、EPS电源等。通信的发起权完全掌握在主站手里:主站发出请求帧,被寻址的从站才回应;从站之间不通信,也不会主动上报。这一点与很多现场总线不同,意味着“设备有故障但主站不轮询”时,故障信息不会自己冒出来,必须靠主站的轮询周期去覆盖。
每个从站有唯一的站号(Slave ID,1~247,0为广播地址)。主站请求帧中携带站号,只有站号匹配的从站才处理并应答,其余从站保持沉默。因此站号重复是现场最常见的“通信异常”原因之一——两台设备同时应答,主站收到的数据会错乱或校验失败。
二、请求响应模型:一帧请求,一帧应答
Modbus RTU帧结构为:站号 + 功能码 + 数据域 + CRC校验。主站请求与从站应答共用这个结构,区别在于数据域内容。以读保持寄存器为例,主站请求包含起始地址和寄存器数量,从站应答则包含字节数和具体数据。若从站无法执行,会返回“异常应答”:功能码最高位置1(如03变为0x83),数据域给出异常码,常见的有01(非法功能)、02(非法数据地址)、03(非法数据值)、04(从站设备故障)。
工程上要特别注意两点:其一,RTU模式下帧与帧之间需有至少3.5个字符时间的静默间隔作为帧边界,波特率越低这个间隔越长,轮询过密会导致粘帧;其二,主站必须设置合理的超时(常见300~1000ms)和重试次数(一般1~2次),超时太短会误判掉线,太长则拖慢整条总线的轮询周期。
三、功能码:八个常用码的分工
功能码决定了“访问哪类数据区、做什么操作”。课程涉及的八个功能码可按读写和位/字两个维度归类:
- 01(读线圈):读取可读写位状态,一次最多2000位,常用于批量读取设备启停命令或状态字。
- 02(读离散输入):读取只读位,如风机运行反馈、故障干接点状态。
- 03(读保持寄存器):读取可读写16位寄存器,一次最多125个,是读取频率设定、模式参数的主力。
- 04(读输入寄存器):读取只读16位寄存器,典型为温度、湿度、电流等实测值。
- 05(写单个线圈):写一位,数据域用0xFF00表示ON、0x0000表示OFF,用于单台设备启停。
- 06(写单个寄存器):写一个16位寄存器,如设定频率。
- 15(写多个线圈):一次写连续多位,适合照明回路分组控制。
- 16(写多个寄存器):一次写连续多个寄存器,适合下发多参数或批量设定。
选择原则很直接:位操作用01/02/05/15,字操作用03/04/06/16;单点用05/06,批量用15/16。需要提醒的是,05和06的应答是“原样回显”请求帧,主站收到回显即认为写成功,但这只代表从站接收了命令,不代表设备已执行到位——执行结果仍需通过02或04回读确认。
四、地址与数据映射:从手册到报文
这是配置点位时最容易出错的地方。设备手册通常用“40001”“10001”这类五位数表示数据区与序号,而Modbus报文中的地址是从0开始的偏移量。换算规则是:线圈区0x对应报文地址=手册序号−1;离散输入1x同理;输入寄存器3x、保持寄存器4x也各自从0起算。例如手册标注“频率设定 40002”,则报文起始地址为0x0001。
以一个车站排风机变频器为例,假设其点位表如下(示例参数,实际以设备手册为准):运行命令为线圈00001,运行反馈为离散输入10001,输出频率为输入寄存器30002(单位0.01Hz),频率设定为保持寄存器40002(单位0.01Hz)。主站要启动风机并把频率设为35.00Hz,操作序列是:先用05功能码向地址0x0000写0xFF00;再用06功能码向地址0x0001写十进制3500(即0x0DAC);随后用02读地址0x0000确认运行反馈为1,用04读地址0x0001确认输出频率接近3500。若回读频率长期为0而反馈为1,则问题多半在变频器参数源设置,而非通信链路。
五、异常与边界:让原理落到排障上
掌握上述模型后,常见故障可以快速定位。若主站收到异常码02(非法数据地址),说明功能码与数据区不匹配或地址越界,应检查是否把保持寄存器地址用03去读却填了输入寄存器的偏移;若收到异常码03(非法数据值),多因写入值超出设备允许范围,如频率设定超过50.00Hz;若完全无应答,则依次排查站号、波特率与校验位(如9600-8-N-1)、接线A/B极性、终端电阻和超时设置。把这些判断建立在“功能码—数据区—地址”的对应关系上,排障就从猜测变成了逐项排除。
最后强调一个工程习惯:主站轮询应分区、分优先级组织,把关键状态量(故障、运行反馈)放在快周期,把电量、温度等慢变量放在慢周期,并避免对同一从站连续下发写命令而不留处理间隔。Modbus简单,但简单不等于可以随意,帧边界、地址偏移和读写语义这三处细节,恰恰是车站机电点位配置成败的关键。