ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

威伦触摸屏直连变频器:基于MODBUS RTU的RS485通信组态与调试全攻略

威伦触摸屏直连变频器:基于MODBUS RTU的RS485通信组态与调试全攻略

威伦触摸屏直连变频器这件事,我第一次听说时也觉得不靠谱。当时手头有个设备改造,三台变频器控制收卷、牵引、放卷,客户不想加PLC,说触摸屏能不能直接干。我翻了一圈资料,又拿手头的威伦屏实测了一个下午,发现这条路不但走得通,而且程序结构比带PLC中转还清爽。不过先提醒一句:标题里的RS458应该是RS485的笔误,我们下面说的全是RS485总线。

这套方案的核心价值在于,威伦触摸屏本身就是一个完整的MODBUS RTU主站,变频器是从站,两者通过RS485总线直接对话,省掉了PLC这个“传话筒”。对于不需要复杂工艺联锁、不涉及高速运动控制的场合,比如简单的风机水泵启停、多台电机调速、远程监视频率电流,这方案能省下一台PLC的成本和一套程序维护量。适合的设备厂电气工程师、现场调试人员、设备维护师傅参考,也适合刚入门工控、想搞明白MODBUS到底怎么组网的学习者。

下面我把这套标准程序的完整思路,从链路原理、接线、协议对齐、地址映射到多机组态和现场排坑,全部捋一遍。

1. 先把链路看懂:谁在说话,谁在回答

1.1 从“触摸屏—PLC—变频器”到“触摸屏—变频器”的链路简化

以前习惯的做法是触摸屏跟PLC通信,PLC再通过通信口或者IO扩展模块去控制变频器。触摸屏上的启动按钮写一个位地址,PLC扫描到这个位变了,再按照程序里写好的逻辑去驱动变频器。这套链路没有什么不对,问题在于引入了PLC之后,整个通信链条变长了:触摸屏要维护跟PLC的通信,PLC还要维护跟变频器的通信,哪一环出问题都查半天。

直连方案砍掉的正是中间那一段。触摸屏的COM口直接接到变频器的RS485端子上,触摸屏通过MODBUS RTU报文直接读写变频器的寄存器。启动、停止、频率给定、频率回读、电流监视、故障复位,全都可以靠触摸屏侧的元件地址和宏指令完成。链路短了,故障点少了,程序里需要维护的逻辑也大大简化。

1.2 MODBUS RTU总线上的角色:主站与从站

很多初学者一听MODBUS就觉得很高深,其实拆开看就是“一人问、多人答”的规则。触摸屏是主站,它掌握着总线的发言权,定期发出请求帧;挂在RS485线上的每台变频器都是从站,都有自己的站号。主站喊“3号从站,请把你的运行频率告诉我”,3号变频器听到站号是自己的,就回一帧数据;其他站听到了,发现不是喊自己,继续保持沉默。

每一帧MODBUS RTU报文都包含从站地址、功能码、数据区和CRC校验,比如读保持寄存器的请求帧大致是“站号 + 功能码03 + 起始地址 + 寄存器数量 + CRC”。校验算错了,从站直接忽略,这就是为什么通信参数错一个字符都不行。触摸屏做主站是天生自带的,不需要额外硬件,只要在工程里把“设备类型”选成MODBUS RTU从站设备即可。

1.3 直连方案的适用边界

这套方案用得顺手,但也不是万能的。我的经验是,直接连接的场合最好满足这几个条件:控制对象比较单纯,无非启停、调速、监视;没有复杂的时序联锁,比如多条皮带必须按顺序启动;对响应时间没有硬实时要求,触摸屏轮询一圈几十毫秒甚至上百毫秒都是正常的。

如果项目里有大量互锁逻辑、需要和传感器、气缸、伺服配合跑工艺流程,那还是老老实实加PLC。触摸屏的宏指令虽然也能做逻辑,但毕竟不是PLC,做复杂状态机又累又难维护。直连方案适合“让触摸屏当一个高级面板用”,而不是取代PLC做整机控制。

2. 接线没弄对,后面全是白忙:RS485物理层细节

2.1 线材选择与A/B线定义

RS485是差分信号传输,所以用双绞屏蔽线是首选。变频器附近的电磁环境比较恶劣,建议用0.5平方毫米以上的双绞屏蔽线,便宜的网线里取一对也行,但不推荐用普通平行电线,抗干扰能力差很多。触摸屏侧和变频器侧的接线端子一般标着A、B,也有标D+、D-或者485+、485-的,含义都一样。

最让人头疼的是A/B极性并不完全统一。有的设备把A定义为正,有的反过来,接反的后果是通信时好时坏,或者完全不通。保险的做法是,接线之前用万用表量一下端子标识,再对照两台设备的说明书确认极性定义。我调试时习惯先把触摸屏和第一台变频器单独接通,确保能正常通信了,再往总线里挂第二台第三台,这样一旦出问题,排查范围很小。

提示:A、B两根线接反后,报文依然会在线上跑,但电平逻辑完全颠倒,从站收不到有效请求。很多现场“之前明明好好的,换了一台触摸屏就连不上”的案例,就是新旧设备AB定义不一致造成的。

2.2 多台设备串联的接线顺序与终端电阻

往总线上串多台变频器时,要按“手拉手”的方式接线,也就是从触摸屏的A端子接到第一台变频器的A,再从这台变频器的A接到第二台的A,B线同理,而不是从触摸屏分别拉两根线到每一台设备形成星型结构。星型接法容易造成信号反射,距离一长或者设备一多,通信质量明显下降。

总线的两端需要各接一个120欧姆终端电阻。所谓两端,指的是触摸屏这一端和最后一台变频器那一端。中间设备不接。有些变频器主板上自带拨码或跳线可以切入终端电阻,有的是需要外接电阻端子。如果只有一两台设备、通信距离很短,不接也常常能跑,但距离超过二三十米或者设备数达到三台以上,终端电阻的作用就体现出来了,不接可能出现偶发通信失败。

2.3 屏蔽与接地:变频器强电侧的干扰隔离

屏蔽层的重要性往往被低估。正确的做法是屏蔽层单端接地,也就是在触摸屏那一端接保护地,变频器侧屏蔽层悬空或者通过电容接地。如果两端都接地,不同设备之间的地电位差会在屏蔽层里形成环流,反而带来干扰。有的变频器的主机上有专门的接地端子,屏蔽层可以就近接在那里,不过要注意确保变频器本身有可靠的保护接地。

把RS485线跟变频器输出线、动力电缆保持足够的距离,是成本最低的干扰抑制手段。现场施工如果没法避免走线交叉,尽量让通信线垂直跨越动力线,而不是平行长距离走在一起。变频器输出侧如果已经加了输出电抗器或滤波器,对通信的友好度也会好很多,因为脉宽调制输出的尖峰是干扰通信的头号来源。

3. 触摸屏和变频器的“对话规则”:协议参数对齐

3.1 触摸屏COM口的通信参数设置

威伦触摸屏的每个COM口的通信参数可以独立配置。我在工程里一般这么设:协议选MODBUS RTU、设备类型选从站设备、波特率9600、数据位8、校验位None、停止位2。这套参数组合是变频器出厂默认值最常用的搭配,也是很多老工程师口中的“8N2”。

波特率不是越高越好。115200看着很美,但在变频器这种干扰源旁边,误码率会随波特率上升。9600在几十米总线上非常稳,轮询三台设备速度也完全够用。确认触摸屏COM口接线时,还要搞清楚COM口用的是哪个物理端子,有的屏COM1是九针口,有的COM2是五针端子排,接错口就是白忙。

3.2 变频器侧需要修改的运行参数

变频器侧要改的参数不多,但每一类都不能漏。第一类是通信地址,也就是站号,每台变频器必须唯一;第二类是通信协议和波特率、数据格式,要和触摸屏COM口完全一致;第三类是控制源和频率源的选择,很多变频器要专门把“运行指令来源”设成通信,把“主频率给定来源”设成通信,否则你通过报文把运行命令和频率写进去了,变频器却还在等待端子启动、面板调速,什么都不动。

具体参数编号不同品牌不一样,但逻辑是相通的。现场操作时,我习惯把通信出错时的动作也顺手设好,比如通信超时后变频器是报故障停机还是保持当前频率运行。这个必须跟工艺要求一致,否则总线上一个分机掉线,可能导致整个系统出安全事故。

3.3 一张表对齐两侧参数

参数项目触摸屏侧设置变频器侧设置说明
协议模式MODBUS RTUMODBUS RTU(8位二进制)不支持ASCII模式混用
波特率96009600两边必须严格一致
数据格式8、N、28、N、2个别变频器叫“数据位8、无校验、停止位2”
从站站号目标站号1、2、3…每台设成1、2、3…站号不可重复
控制源—通信命令控制写运行/停止命令才有效
频率源—通信给定写频率寄存器才有效
通信超时由触摸屏轮询时间决定设3~5秒停机/保持取决于工艺要求

还有一个容易忽略的点:有些变频器专门有一个“通信协议版本”或者“寄存器区选择”参数,选错之后报文格式看着一样,实际读取的地址却是另一套映射。换变频器品牌时,哪怕都是MODBUS RTU,寄存器地址也经常对不上,必须以手册为准。

4. 写标准程序的轴心:地址映射与宏指令

4.1 MODBUS地址从哪来:功能码03、06、16的实际用法

MODBUS RTU里和变频器相关的主要是这几个功能码:03读保持寄存器,06写单个寄存器,16写多个寄存器。保持寄存器是16位一个,变频器的运行状态、输出电压、电流、故障码这些,通常通过功能码03读回来;频率给定、启停命令,通常通过功能码06或16写进去。

威伦触摸屏的地址表达方式里,4x开头是保持寄存器。比如4x-0001对应MODBUS地址0,4x-4097对应地址4096,具体偏移关系不同固件有点区别。我自己的习惯是,在触摸屏里用“设备地址 = 站号 + 寄存器号”的方式去访问,比如要读站号2的40001,就是在元件地址里填“2-4x-0001”之类的格式。千万不要凭空猜,每一台变频器的寄存器定义都要打开手册对照。

4.2 用LW和宏指令做频率给定、启停互锁与故障复位

简单场景其实不需要宏指令也能跑。触摸屏上放一个数值显示元件,地址指到3号站的频率寄存器,就能实时看到那台变频器的频率;放一个位按钮,地址指到运行命令寄存器,按一下就是启动。把这些元件摆好,通信就已经在工作了。

但要做成“标准程序”,建议还是加几条宏指令把逻辑串起来。比如说,启动按钮按下后,先判断变频器没有故障,没有故障才允许写启动命令;故障复位按钮按下时,先写一个故障复位命令,然后延时几十毫秒再发启动命令。这类“带条件的写入”,靠单纯元件做不到,必须借助宏指令。

宏指令写起来有点像C语言。我这里给一个典型例子:把画面上的设定频率从触摸屏内部寄存器LW10送到1号变频器的运行频率寄存器。

macro_command main() short set_freq short target_addr = 0x2000 // 以某一品牌变频器频率给定地址为例 GetData(set_freq, "本机", LW, 10, 1) SetData(set_freq, "MODBUS_RTU_1", 4x, target_addr, 1) end macro_command

这个例子里的地址需要换成实际变频器手册里的地址。宏指令的价值在于,你可以在中间加入范围判断、故障锁定、多台设备联动逻辑,这些才是标准程序里值钱的部分。

4.3 我常用的“触摸屏轮询策略”与宏代码示例

触摸屏作为主站,会在后台不断轮询所有画面中引用的地址。这个轮询是按扫描周期来的,画面中元素越多、站数越多,每一轮轮询的时间就越长。所以标准程序要控制好画面元素数量,不要把每台变频器的所有参数都铺在一屏上。我通常的做法是,总览页只放启停按钮、当前频率、当前电流这几个高频监视项,其余参数放到二级页面。

针对频繁读写的地址,可以用宏指令做集中读写,减少总线报文数量。下面是一个读取多台设备频率并汇总到本机LW区域的示意:

macro_command main() short freq1, freq2, freq3 GetData(freq1, "MODBUS_RTU_1", 4x, 0x1001, 1) GetData(freq2, "MODBUS_RTU_2", 4x, 0x1001, 1) GetData(freq3, "MODBUS_RTU_3", 4x, 0x1001, 1) SetData(freq1, "本机", LW, 20, 1) SetData(freq2, "本机", LW, 21, 1) SetData(freq3, "本机", LW, 22, 1) end macro_command

把这一段宏指令设定成周期执行,比如每200毫秒跑一次。画面上的显示元件不再直接指到变频器地址,而是指到LW20、LW21、LW22,画面刷新和总线通信就解耦了,操作体验会顺畅很多。

5. 多台设备串联组态的完整示例:三台变频器的收卷设备

5.1 设备场景与站号规划

我拿一个实际项目来做说明。某设备上一共有三台变频器,分别管收卷、牵引、放卷。触摸屏只有一台,挂在三台变频器的同一根RS485总线上。站号规划很关键,我的分配方式是收卷变频器为站号1、牵引为站号2、放卷为站号3,这样站号跟设备编号一一对应,画面和程序不会乱。

接线就是按照第2节说的方法,触摸屏的A、B接到站号1的A、B,站号1再接到站号2,站号2再接站号3。终端电阻接在触摸屏端和站号3端,中间的站号1、2不接。通信参数统一设成9600、8N2。这样做完,总线上一共四个节点,一个主站加三个从站。

5.2 每台变频器的操作画面与站号隔离

操作画面我分成两层。第一层是总览页,显示三台变频器的运行状态、当前频率、电流,用的是前面说的LW地址加宏指令周期刷新。第二层是单机操作页,用切换画面时传入设备编号的方式,让一组元件共用一套地址模板,切换站号后操作的是不同变频器。

威伦触摸屏支持在工程里建立多个MODBUS设备对象,每个对象对应不同的站号。这样在画面里放启动按钮时,可以直接把按钮指向“MODBUS_RTU_2”的运行命令地址,表面上看是同一个按钮,实际上已经隔离到站号2。要注意按钮的写入地址里站号必须和页面标题一致,否则就会出现“明明点的是牵引启动,结果是收卷动作”的低级事故。

5.3 异常处理:单台掉线不能卡死整条总线

多站通信最怕的是单台从站掉线后拖累整条链路。MODBUS协议本身是请求—应答,如果某个站不回复,主站会等待超时再继续轮询下一个站。所以触摸屏侧的通信超时时间要设置合理,默认值如果太长,某台变频器一掉电,整条总线的刷新周期明显变慢。

我一般在触摸屏里对每台设备做一个通信状态监视位,宏指令定期读取每一站的设备识别码或者一个固定寄存器,读成功就置位,读失败就清零。画面上做一个红色的“通信异常”指示灯,哪台掉线一眼就能看到。这样比等操作员发现“按钮按了没反应”要提前很多。

6. 现场调试试运行阶段最常踩的5个坑

6.1 A/B线接反导致通信时好时坏

A/B接反的隐蔽之处在于,如果屏蔽层接地做得不错,偶尔还能通信成功几下,看起来像“干扰”,其实是极性反了。我在调一台新设备时,第一件事就是拿万用表确认触摸屏一侧和变频器一侧的A、B定义,不要光看端子丝印。曾遇到一台变频器丝印标A实际是B,另一台标B实际是A,两台接到一起,表面看A对A,实际完全反了。

6.2 变频器干扰导致CRC错误频繁

通信偶尔失败,但不频繁,检查CRC错误计数器就能发现干扰问题。变频器运行时脉宽调制输出的尖峰很容易串进RS485线,特别当通信线跟动力线扎在一起走长距离时。我的处理顺序是:先拉开通信线和动力线的距离,再把屏蔽层改成单端接地,最后给触摸屏COM口或者变频器通信板加隔离器。大多数现场到第二步就能解决。

6.3 站号重复或寄存器偏移导致读到假数据

站号重复是组态时的低级错误,但排查起来费时间。两台变频器都设成站号1,触摸屏发请求时两台都会认为是自己的地址,回帧碰撞后数据就乱了。寄存器地址偏移则是新手最容易犯的错,MODBUS协议里的地址编号和手册里的寄存器编号经常有对应公式,比如手册写40001对应协议地址0,画面上写成4x-0001没错,但有些厂商的手册在某个区域把寄存器编号和通信地址错开了,不仔细看就会把所有数据读到偏移量不清的路子上。

6.4 触摸屏通信超时参数要按设备数目调整

设备从一台扩展到三台后,总线报文量翻了不止三倍,因为还有重试机制。如果超时时间按单台设备调整得很小,多台设备轮询时某站忙了一下,超时后触摸屏还会重试一次,反而拖慢整条链路。我一般把超时时间设在500毫秒到1秒之间,重试次数设在1~2次。这样单站掉线,也只是这一站暂时标记异常,不会影响其他站。

6.5 “调试时能连、运行中掉线”的隐蔽原因排查

这类问题最常见的原因是变频器侧通信超时处理参数不同。有的变频器默认通信超时后报故障停车,一旦现场有一条指令因为干扰被丢失,变频器就停机了,看起来像是“掉线”,其实是变频器主动保护。排查时先看变频器面板报什么故障码,如果报的是通信超时之类,把那台变频器的通信超时时间调长,或者把超时后的动作改成保持运行,整个系统的可靠性就上来了。

还有一次遇到奇怪的问题,触摸屏单独调试时怎么都通信正常,一挂上整台设备就掉线。最后发现是设备机架上有另一套系统也在用RS485,两根总线在某个接线盒里被并在一起了,相当于两个主站同时抢一条总线。这种物理拓扑问题不仔细理线很难发现,排查时把总线上的每个节点都过一遍,从源头确认没有把两种设备串到同一条线上。

我在实际使用中最大的体会是,直连方案的难点从来不在触摸屏软件本身,而在通信参数的严谨性和现场物理层的处理。只要把站号、波特率、寄存器地址这三个要素核对清楚,再把接线和屏蔽做好,威伦触摸屏直连多台变频器的“标准程序”其实非常稳定。这两年我陆续把好几套老设备的PLC中转方案改成了直连方案,运行都很平稳,有些现场跑了两年多没动过一根线。

最后补充一个实用扩展方案:如果变频器分布在不同的电气柜,距离超过几十米,或者现场电缆桥架示意比较复杂,可以考虑在触摸屏侧加一路RS485转以太网的模块,通过无线局域网或者工业交换机把通信串起来。不过这个就属于进阶玩法了,基础还是先把直连这套逻辑吃透,后面的路才好走。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进