台达PLC和台达VFD变频器之间的Modbus通讯,是我这两年在设备调试里用得最顺手的一套组合。前阵子接了台风机控制柜的改造,三台变频电机要联动启停、远程调速、状态监控,业主指定用台达整体系。我原本也认真算过模拟量方案,但比完线缆、模块和后期维护的账之后,还是决定让三台变频器挂同一条RS-485总线,由一台DVP系列PLC统一读写。这篇案例实操就按我上手的顺序写:先把为什么选Modbus讲清楚,再依次说接线、变频器参数、PLC程序、现场排错,最后补一点多机组网的经验。想入门PLC和变频器通讯的朋友,把这篇文章当一份操作手册来读,照着走几遍基本能独立跑通。
1. 先算清楚这笔账:为什么放着模拟量不用,偏要PLC走Modbus
1.1 模拟量调速在我这儿卡壳的三件事
做单台、近距离、只用面板调速的设备,模拟量没有任何问题:PLC输出0-10V接到变频器AVI端子,两个线头一拧,转速跟着电压走,五分钟就能跑通。可一旦把场景换成一柜多机、远程联动,模拟量方案的劣势就藏不住了。第一,每台变频器都要单独拉一对信号线到控制柜,三台就要六根芯线,五台就是十根,柜内端子排、线槽和接线工时都翻着往上涨。第二,0-10V这种小信号天生怕干扰,信号线和动力电缆要是走在同一个线槽里,电机一启动,给定电压跟着飘,转速忽高忽低,现场查这种问题是最耗时间的。第三,模拟量只能"给",不能"要"——你没法通过一根电压线把变频器当前的输出频率、输出电流、故障状态读回来,想监视就得再上变送器、再拉线,成本又上一层。
1.2 数字量方案的账,算完再做决定
Modbus RTU走RS-485,本质是一条双绞线(A、B两根,通常再带一个参考地)把多台设备串在一条总线上,半双工、一问一答。台达VFD变频器的Modbus从站地址范围是1到247,一台PLC做主机,理论上一条总线挂几十台从站都不稀罕,现场挂个十台八台完全够用。关键是通信内容比模拟量丰富得多:PLC既能写频率命令、启停命令,也能用功能码把变频器的输出频率、输出电流读回来。说白了,Modbus是一条既能下指令、又能带回反馈的双向对话通道。
我这边的例子是三台风机,原来模拟量方案要买一块多通道模拟量模块,再做屏蔽线缆和端子;Modbus方案直接复用PLC自带的COM2 RS-485口,只买了几根两芯屏蔽线和端子头,硬件上基本没额外花钱。当然,如果只是单台、短距离、没有反馈需求,模拟量也并不过时,别为了赶时髦硬上通讯——选型还是要看工况。
2. 通讯链路从一根RS-485开始:端子、屏蔽层和终端电阻的细节
2.1 先认出两边的RS-485端子
台达DVP系列PLC的RS-485口,常见的有几种外形:像DVP-14SS2这类小机型,COM2通常做在机体上端,端子标S+和S-;有的紧凑型用RJ11或RJ45座,也需要通过转换端子引出S+/S-。变频器这一侧,以VFD-M和VFD-EL系列为例,控制端子排上会有RS-485通信端子,有的标+和-,有的标D+和D-。第一次接线不要凭颜色猜极性,把PLC手册和变频器手册的端子图翻出来,对清楚了再动手。
这里给个通用规则:同一侧标着D+/D-的端子,D+一般对应A,D-对应B,但不同品牌、不同批次也可能反过来。所以现场最靠谱的办法是,接好线后用串口工具实测收发,而不是赌手册没印错。我之前就遇到过一台线上标注和实际极性不符的设备,靠万用表根本看不出来,最后是拿电脑发帧试出来的。
2.2 布线时照着这几条做,能少交很多"学费"
- 极性对应:A对A、B对B,两边都用S+/S-标记时,S+对应A、S-对应B。A/B接反后的典型症状是"完全没反应",可你用万用表量A-B之间又确确实实有通讯电平变化,很多人卡在这一步把程序翻了个底朝天,其实只是两根线对调的事。
- 屏蔽层处理:单端接地。我习惯把屏蔽层在PLC控制柜侧的汇流排上接地,变频器那一侧悬空。两头都接会形成地环路,地电位差会在屏蔽层上诱导出电流,干扰反而更重。
- 终端电阻:只有一台变频器、距离在十几米以内时可以不加;距离拉长或者多了从站,就在总线最两端各并一只120Ω电阻。它的作用是吸收信号到达线缆末端时产生的反射波,没有它,反射容易把波形搞出振铃,进而出现偶发误码。
- 走线规则:通讯线和动力线必须分槽走,尤其不能和变频器输出侧电缆长距离平行。变频器输出侧是高频PWM,带来的是宽带噪声,离得近总线基本是在噪声里游泳。
- 参考地问题:PLC和变频器要共参考地。很多现场设备各自接一个开关电源,地电位不一致时,总线空闲电平和噪声底都会被抬起来。两台设备隔得很远时,最稳妥的是中间加RS-485隔离器,从根上切断地环流。
2.3 上电后先做个体检
接好线、两边都通电,拿万用表量一下A-B之间的静态电压,正常一般在1V到3V这个区间,视具体芯片而定。如果量出来接近0V,先怀疑总线没设备在驱动或者A/B没对上;如果静态电压特别高或者乱跳,检查是不是有其他电源串进了总线。这个体检花不了两分钟,却能省掉后面一晚上的查错时间。很多通讯问题其实不是协议问题,而是物理链路问题,先把物理层收拾利索了再去碰程序。
3. 变频器参数背后联动的逻辑:频率源、命令源与串口格式
3.1 一张表把关键参数设完
下面以VFD-EL和VFD-M系列常用的参数编号为例,具体到手里的机器要以铭牌和说明书为准。同一系列不同批次,参数编号都可能调整,照抄博客去调别人的机器,调不出来别怪我没提醒。
| 参数 | 含义 | 推荐值 | 说明 |
|---|---|---|---|
| P00 | 主频率输入来源 | 3 | 通常对应频率由RS-485通讯给定 |
| P01 | 运转信号来源 | 2 | 通常对应启停由RS-485通讯给定 |
| P88 | 通讯地址 | 1(多台分别为1、2、3...) | 从站地址,0一般保留给广播 |
| P89 | 通讯速度 | 9600或19200 | 必须和PLC串口波特率一致 |
| P92 | 通讯资料格式 | 7-E-1对应项 | 必须和PLC COM2格式一致 |
| P93 | 通讯异常处理 | 按工艺定 | 调试期建议选故障停机,方便发现问题 |
3.2 P00和P01这两个开关,是最常见的翻车点
很多人调不通,不是接线不是程序,而是变频器压根没让通讯"进门"。P00管频率从哪来,P01管启停命令从哪来,两个必须都切到RS-485通讯通道,后面PLC写频率命令、写运转命令才有效。如果P00没切,PLC写过来的频率会被变频器无视,但启停可能又是好的——因为启停走P01,两套开关互不干扰,反过来也一样。
我一般这样给新手解释:把P00和P01想象成两扇门,一扇门是"转速数字从哪进来",另一扇门是"启停指令从哪进来",两个门都拨到"通讯"档,PLC发来的数据才进得了屋。另一个经常被忽略的是频率单位:台达变频器的频率命令寄存器一般以0.01Hz为一个单位,50.00Hz要写成5000,也就是十六进制的0x1388,不是写50。写50对应的其实是0.50Hz,电机转得比蜗牛还慢,第一次遇到十有八九以为参数坏了。
3.3 为什么波特率和数据格式必须两边一字不差
Modbus RTU是串行位流,数据字节以某个波特率逐bit送出去,波特率、数据位、校验位、停止位这四个参数只要有一个不一致,接收方要么把帧拆错,要么CRC校验失败直接丢弃。台达DVP的COM2默认通讯格式常见是7数据位、偶校验、1停止位,也就是7-E-1,那变频器的资料格式参数就要设成对应的7-E-1。两台设备"说话"必须用同一种方言,这话听着像废话,但现场查了半小时没查出问题的,多半就是死在这一点上。
还有个小坑:改完这些参数,记得断电重启。不少变频器的通讯参数要重新上电才生效,改完不重启就测试,等于没改。我遇到过在面板上把波特率从9600改成19200,程序也换了,结果变频器根本不回应,重启之后一切正常。
4. MODRW指令五个操作数填法:从写频率到读回电流的完整程序
4.1 MODRW到底替你干了多少活
在台达DVP系列里,和变频器通讯最省事的指令是MODRW,也就是Modbus读写指令。它替你完成了组帧、CRC16校验、串口发送、等待应答、解析回帧这一整套动作,不用像老式RS、TXD、RXD指令那样自己拼字节。这对半路转来做PLC的朋友特别友好:你只要把"发到哪、发什么、拿回来放哪"填清楚,剩下的交给指令就行。不同DVP机型的MODRW定义有细节差异,有的还需要多填一个附加操作数,拿到机器先查这一条指令的指令表,别拿别的机型经验硬套。
4.2 操作数逐一说清楚
MODRW一共有六个操作数,我按自己的习惯拆成"四问一答"来记:从哪个口发、发给谁、用哪种功能码、写到哪个寄存器、一共几个数据、数据放本站哪里。
| 操作数 | 含义 | 本例取值 |
|---|---|---|
| S1 | 通讯端口 | K2(COM2,RS-485口) |
| S2 | 从站地址 | K1(对应变频器P88=1) |
| S3 | 功能码 | H06写单寄存器、H03读保持寄存器 |
| S4 | 从站寄存器地址 | H2000频率命令、H2001运转命令、H2003输出频率 |
| S5 | 数据长度 | K1(一次一个寄存器) |
| S6 | 本站数据寄存器首址 | D105(写时作数据源,读时作存放处) |
这里有个关键点:S6这个操作数身兼两职。H06写的时候,它是发送缓冲区,数据从它这里取走发往变频器;H03读的时候,它变成接收缓冲区,变频器回传的数据落在这里。读写共用同一个位置,所以程序里别把两个功能的数据寄存器设重了。
4.3 三段核心程序,直接抄
; 1) 把50.00Hz写到变频器频率命令寄存器(2000H) LDP X1 ; X1上升沿触发一次 MOV K5000 D105 ; 50.00Hz -> 5000(0.01Hz单位) MODRW K2 K1 H06 H2000 K1 D105 ; 2) 正转启动,2001H的bit0=1 LDP X2 MOV H0001 D106 MODRW K2 K1 H06 H2001 K1 D106 ; 3) 停止,2001H的bit2=1 LDP X3 MOV H0004 D107 MODRW K2 K1 H06 H2001 K1 D107 ; 4) 读输出频率到D110 LDP X4 MODRW K2 K1 H03 H2003 K1 D110注意三条写指令都用了LDP上升沿触发,按键按一下只发一次帧。启停时务必先写频率再写启动命令,顺序反了,变频器可能按上次的频率甚至0Hz启动。2001H的位定义不同系列有差异,常见的是bit0正转、bit2停车,但也有的系列把bit0当作启停复合位,动手前一定翻手册确认,不然会出现"发正转命令变成忽停忽转"的怪现象。
4.4 为什么不能让它每个周期都刷
刚学通讯时我犯过一个错:为了保险,把MODRW放在常ON的网络上,心想反正每周期都发一次,肯定能发出去。结果是变频器忙死、通讯超时乱成一锅粥。原因很简单:按9600波特率算,一帧八字节的Modbus报文要将近10毫秒才能传完,而PLC一个扫描周期可能才几毫秒。常ON等于每几毫秒塞一帧,上一帧还没回完,下一帧已经撞上来,总线上全是废帧。
正确做法是上升沿触发,或者用定时器节流。比如频率变化才写一次,或者每50-100ms周期刷新一次,并且在发下一帧前检查上一条通讯指令是否已完成。H03读回来的D110同样以0.01Hz为单位,要显示给操作员看,除以100才是Hz,触摸屏上建议先做浮点转换,直接用整型显示极容易看错一位小数。
5. 现场最容易翻车的四个细节:从CRC错帧到地址换算
5.1 排错先分段:电脑直接打变频器
通讯调不通时,大多数人习惯在PLC程序里翻来翻去,其实最高效的办法是分段定位。把PLC从总线上断开,或者只断开它的通讯线,用USB转RS-485接到电脑上,串口调试助手按RTU格式手动发一帧,比如从站地址01、功能码06、寄存器地址2000H、数据1388H,后面补上自动生成的CRC校验码。变频器如果转了、参数对了,说明线缆和变频器侧正常,问题在PLC的程序或通信设置;如果没反应,问题就在变频器参数、线缆或者A/B接法。这个五分钟的测试能直接砍掉一半排查方向。
5.2 四类高频问题的根因与对策
| 现象 | 高概率根因 | 对策 |
|---|---|---|
| 参数线都对,完全无反应 | P00/P01没切到通讯,或改参数后没断电重启 | 逐一核对参数,断电重启再测 |
| 启停正常,频率不变 | P00主频率来源没切到通讯 | 把P00对应项改掉 |
| 频率正常,但不启停 | P01运转信号来源没切到通讯 | 把P01对应项改掉 |
| 偶发超时或丢帧 | 干扰、地电位差、A/B接反、缺终端电阻 | 按第二部分的检查项逐条过,必要时加隔离器 |
| 频率写了,转速很怪 | 0.01Hz单位没换算 | 50Hz务必写5000 |
5.3 地址换算和CRC这两件事
Modbus地址在不同软件里表达方式五花八门:2000H是十六进制,换算成十进制是8192;有些组态软件又习惯显示40001、40002这种Modbus映射地址;PLC指令里直接写H2000最直观。调试助手、触摸屏驱动里填地址之前,先搞清楚它要的是原始地址还是映射寄存器号,这一条能避免很多"为什么PLC写进去变频器就是不认"的乌龙。
CRC16校验这块,用MODRW指令时由PLC自动算,不用操心;如果是自己写上位机、自己拼帧,Modbus RTU的CRC16多项式用0xA001,查表法最常用,网上代码一搜一大把。但务必在真机上验证,CRC错一帧变频器就丢一帧,而且多半不会主动报错,表现就是"十次里有一两次没反应"。
5.4 变频器报通讯故障之后
通讯过程中如果变频器面板跳出通讯故障代码,不同系列显示不一样,常见的是ce或Err一类的,先不要急着把故障屏蔽掉。我的处理顺序是:先看通讯异常处理参数,调试期建议选故障停机,免得带病运行没人发现;再查线缆和接地,多数通讯故障是干扰导致而不是逻辑错误;最后断电重启,确认故障能不能恢复。反复报的话,回到参数和硬件本身找原因。屏蔽故障代码只是把症状盖住,管道还是堵的。
6. 多台变频器组网轮询:从单机控制到一总线控制
6.1 地址规划与轮询时间片
一台PLC驱动多台变频器时,先把每台变频器的通讯地址设成不同数值,比如1、2、3,PLC侧用同一套MODRW指令分别指定不同的从站地址就好。总线上同一时刻只允许一问一答,所以多台时要轮询:给每台变频器一个时间片。比如每隔50ms处理一台,先写1号机频率,再写2号机频率,然后读1号机反馈,读2号机反馈,轮流走。时间片长度按波特率算:9600波特率下一帧大约10毫秒,加上变频器应答时间,50毫秒的间隔在多数场合够用。轮询顺序还要看工艺优先级:启动和停止命令永远优先,故障读取次之,频率刷新和状态读取放后面。
6.2 手自动切换时,程序里要做的两件事
项目里最常见的需求是:手动状态用面板或端子控制变频器,自动状态用PLC走通讯。实现时记住两点。第一,程序里用一个自动模式标志位,只在自动模式下给MODRW执行条件,手动模式下完全跳过通讯写入,避免PLC和面板"两个人抢一个方向盘"。第二,切换前把变频器先停下来再切换命令来源,或者至少在切换瞬间保持频率命令不变,否则会出现频率跳变的危险动作。这个切换逻辑我每次都会写进程序注释里,后面接手的人能少踩一个大坑。
6.3 把读回来的数用好
读输出频率寄存器拿到的值同样要除以100才是Hz,触摸屏显示可以用浮点运算;要参与PID调节或做历史记录,建议直接在PLC里转成32位浮点再送人机。读取类的MODRW同样不能常ON,用定时器节流,一般100ms读一轮状态足够平滑,也不会给总线造成压力。我自己常用一套简单的执行顺序:先处理启停请求,再写频率,再读反馈,线上跑起来很稳,三台风机同步联动没有出现过互相抢帧的情况。
最后分享一点个人习惯:凡是带通讯的项目,我都会把变频器参数表打印一份,标注好哪些是出厂值、哪些是我改过的、为什么要这么改,和程序注释放在一起存档。通讯问题是最难从代码里看出来的问题,有了这份现场记录,返修能省一半时间。另一个小建议是,每一台新变频器都先单独验证通了再挂上总线,绝不一次性把三台全接上再调试——总线上一旦有设备地址冲突或A/B接反,排查成本是成倍上升的。先把单机跑通,再组网,这是我被通讯坑过最多次之后总结出来的最稳路线。