☰
S7-200 SMART通过RS485控制三菱变频器:Modbus RTU通讯全解析
2026/10/21 9:53:12 网站建设 项目流程

前阵子拍了一条现场演示:S7-200 SMART通过RS485口直接控制一台三菱变频器,触摸屏上点启动,电机平稳升速,频率和电流数值跟着刷新。视频底下不少同行在问通讯程序能不能抄、参数怎么设、为什么自己写的老是超时。这篇文章就把视频背后那套通讯方案完整拆开讲:从硬件接线、三菱变频器参数,到西门子侧MBUS_CTRL/MBUS_MSG轮询程序,再到多台扩展和现场排错。视频底部挂了个店铺,我不替任何渠道做广告,更建议自己把原理吃透,因为这套东西真不算复杂。

1. 视频里的场景拆解:PLC和变频器之间到底通了什么

1.1 视频显示的最小系统

视频里看到的主回路其实很常规:断路器、接触器、三菱变频器、三相异步电机。真正值得关注的是控制回路——S7-200 SMART没有用模拟量模块给变频器送0到10V电压,也没有用一排中间继电器去搭正反转,而是从本体RS485口拉出两根线,直接连到变频器的PU通讯口。触摸屏上的启动、停止、频率设定、频率反馈、电流反馈,全部走这一条总线。

这条总线用的协议是Modbus RTU。西门子PLC作为主站,三菱变频器作为从站,一主一从,半双工一问一答。S7-200 SMART每500ms左右向变频器发出一次请求,要么写入运行命令,要么写入设定频率,要么读取当前输出频率和输出电流。视频里看着没有卡顿,是因为轮询周期控制得比较短,4个任务一轮下来大约2秒,人眼感觉就是实时刷新。

1.2 为什么用Modbus RTU而不是模拟量和IO控制

很多入门项目还在用模拟量控制变频器:PLC加一个AO模块,输出0到10V接到变频器模拟量输入端子;再用DO点控制正转、反转、停止。这种方式不是不能用,但有几个明显的痛点:

  • 模拟量模块要钱,模拟量电缆要屏蔽,信号受干扰还容易飘。
  • 正反转和复位要用好几个DO点,接线一多,柜子里全是端子。
  • 最致命的是没有回读通道:PLC给变频器发了多高的频率,实际输出多大电流,变频器报了什么故障,PLC一概不知道。要想知道,又得加反馈模块。

Modbus RTU只需要两根线,一根A,一根B,就可以同时实现控制、设定、监视、报警读取。对中小型项目来说,这是性价比非常高的方案。视频里的设备没有加任何扩展模拟量模块,就是靠通讯完成了全套闭环控制。

1.3 适用设备型号和接口限制

S7-200 SMART本体自带RS485口,可以做Modbus RTU主站。三菱FR-E700、FR-D700、FR-A800等主流变频器都支持Modbus RTU通讯,差异只在于内部参数编号和寄存器映射细节。视频演示以FR-E700系列为主,D系列参数位置稍有不同,原理完全一致。

需要注意一个接口限制:SMART本体串口一旦被程序占用为Modbus主站,就不能同时当编程口或连接普通串口触摸屏。视频里触摸屏走的是PLC以太网口,串口特意留给变频器总线。如果你手头打算用串口触摸屏,那就得加一块SB CM01信号板扩展出第二个RS485口,一个口接触摸屏,另一个口跑Modbus总线。

2. 上电前的硬参数:让三菱变频器“愿意”听PLC的话

2.1 接线:两根线不够,还要共地

通讯接线看着简单,实际翻车率极高。SMART本体RS485端子一般是A+和B-,对应变频器PU通讯口的S+和S-。不同变频器接口定义不一样,E700的PU口是RJ45座,D700有些是端子排,接线前先对着手册把S+和S-认准,不要把SG屏蔽地当成通讯地。

RS485是差分信号,理论上靠A、B两根线就能传。但在工业现场,我强烈建议把两端设备的通讯地或0V电位连在一起,也就是通常说的“共地”。如果两端电位差太大,通讯口轻则收不到数据,重则烧毁RS485芯片。屏蔽层也只在PLC侧单端接地,不要两头都接,否则现场干扰会通过屏蔽层形成地环路。

距离超过50米,或者总线上挂了多台变频器,还需要在总线两端各接一个120Ω终端电阻。视频演示距离就两三米,不接也能跑;实际项目里距离一长,终端电阻是稳定性的关键。

2.2 变频器内部参数设置

三菱变频器默认不一定工作在“可以被PLC控制”的状态。上电后先进入参数设置模式,把通讯参数和运行权改过来。以FR-E700为例,我常用这组配置:

设置项E700示例D700常见对应说明
站号Pr.338=1Pr.117=1从站地址,必须和PLC侧Slave一致
波特率Pr.339=9600Pr.118=9600两侧保持一致
数据位/停止位Pr.340=1位停止Pr.119=1位停止建议统一定成8N1
校验Pr.341=无校验Pr.120=无校验SMART侧Parity设0
运行模式Pr.79选择网络/组合对应Pr.79必须让运行权来自RS485

这里要提醒一句:不同批次、不同系列的参数编号确实有差异,D700和E700不一样,A800又不一样。上述表格是我手头E700实测值,大家拿到设备后要以官方手册为准。重要的是原则:站号、波特率、帧格式三个必须和西门子侧完全一致;运行指令权和频率指令权要指向RS485,否则PLC发多少报文变频器都不理你。

设置完这些参数后,最好给变频器断电重新上电一次。三菱变频器有一部分通讯参数是上电时加载的,不是所有修改都即时生效。视频里我专门演示了断电重启后再连PLC,就是为了规避这个坑。

2.3 用串口调试助手先验证变频器

最难排查的是“程序看着没错,但就是不通讯”。所以我建议在写PLC程序之前,先用电脑上的串口调试助手或Modbus调试工具,通过USB转RS485直接连变频器,手动发送报文验证。

比如读输出频率寄存器H6F,站号1,功能码03,完整请求帧是:

发送: 01 03 00 6F 00 01 CRCH CRCL 应答: 01 03 02 13 88 CRCH CRCL

01是从站地址,03是读保持寄存器,00 6F是寄存器地址,00 01是读1个寄存器。应答里13 88是十六进制,换成十进制是5000,对应的就是50.00Hz——因为三菱输出频率寄存器单位是0.01Hz。

若写正转运行命令,发:

01 06 00 FF 00 01 CRCH CRCL

06是写单个寄存器,00 FF是运行指令寄存器地址,00 01表示正转。

若写频率设定,30.00Hz就是3000,十六进制0x0BB8,发送:

01 06 00 FE 0B B8 CRCH CRCL

用调试助手能收到正确回帧,说明接线、参数、寄存器地址都没问题。之后再写PLC程序,放心大胆抄。CRCH和CRCL不用自己算,调试工具会自动生成CRC16校验,但你要理解这个校验的存在:三菱和西门子的校验必须一致,CRC算错,变频器直接不回包。

3. 西门子S7-200 SMART侧主站程序:库指令和地址换算

3.1 MBUS_CTRL负责底层,MBUS_MSG负责每一笔交易

S7-200 SMART把Modbus RTU主站做成了库指令,调用比较方便。库里面两个关键指令:

  • MBUS_CTRL:初始化并控制串口。每个扫描周期都要调用,相当于“总管”。Mode填1表示启动Modbus协议,Baud填波特率,Parity填校验,Timeout填等待从站响应的超时毫秒数。
  • MBUS_MSG:发起一笔具体的读写操作。完成一次就释放总线,然后才能发下一笔。

我程序里固定波特率9600,无校验,超时1000ms。如果现场对刷新速度要求高,可以尝试19200波特率,但前提是三菱变频器Pr.339也对应改到19200。开发阶段用9600更稳,排查问题也省心。

调用关系是:每轮扫描先执行MBUS_CTRL,确认当前总线状态,再根据轮询状态决定是否执行MBUS_MSG。MBUS_CTRL的Done和Error必须监控,如果CTRL初始化都没成功,后面的MSG发送再多也是白搭。

3.2 三菱寄存器地址和西门子Addr参数的对应关系

这是我踩过最多坑的地方。三菱手册里给的寄存器编号,比如H6F是输出频率,H70是输出电流,HFE是频率设定,HFF是运行指令,这些编号可以直接填到MBUS_MSG的Addr参数里。

读写任务大致如下:

功能MBUS_MSG参数寄存器Addr填写Count数据单位
运行命令写(RW=1)运行指令16#00FF10/1正转/2反转
频率设定写(RW=1)频率设定16#00FE10.01Hz
输出频率读(RW=0)监视频率16#006F10.01Hz
输出电流读(RW=0)监视电流16#007010.01A

西门子库里,当Count=1时,写操作走的是功能码06(写单个寄存器),读操作走的是功能码03(读保持寄存器)。如果Count大于1,写操作才会自动变成10H写多个寄存器。刚开始学的时候不要把Count和读写命令搞混,Count是数据个数,不是功能码。

数据存储方面,用DataPtr指向一个V存储区首地址。比如读输出频率放到VB220,读回来两个字,高字节在VB220,低字节在VB221,直接用VW220读取就是完整16位数据。写频率时也一样,把3000传给VW210,库函数会自动按Modbus的大端字节序发出。

3.3 程序数据区怎么规划

调用库指令之前,先在系统里给库存储区分配一段专用V区,不要让用户数据区和库存储区重叠。我习惯把VB0到VB99留给库函数,用户数据从VB100开始:

VW0: 轮询状态计数器 VW200: 运行命令寄存器,写0停止,1正转,2反转 VW210: 频率设定寄存器,单位0.01Hz VW220: 输出频率反馈寄存器,单位0.01Hz VW230: 输出电流反馈寄存器,单位0.01A M0.0: MBUS_CTRL完成标志 MB20: MBUS_CTRL错误码 M0.1: MBUS_MSG忙碌标志 MB21: MBUS_MSG错误码

梯形图里网络1放MBUS_CTRL,SM0.0常ON。网络2放一个定时器,产生1秒或500ms的脉冲。网络3用定时器上升沿触发轮询判断,根据VW0的值分别调用不同的MBUS_MSG任务。可以这样理解:VW0等于0时写运行命令,等于1时写频率,等于2时读输出频率,等于3时读电流。每个任务完成或报错后,VW0加1,超过3就归零。

MBUS_MSG千万别用常ON直接驱动。库函数在发送期间会一直占用总线,如果每个扫描周期都重新触发同一条指令,最后的结果就是所有报文堵在门口,视频里看到的现象就是触摸屏数据偶尔跳动甚至卡死。用边沿触发配合轮询状态机,是Comms稳定的前提。

4. 多任务轮询调度:让启停、调速、读反馈互不打架

4.1 为什么同一时刻只能有一个请求在路上

Modbus RTU是半双工协议,总线上一问一答,不能像以太网一样自由并发。如果程序里同时让两个MBUS_MSG都接通,或者上一条请求还没等到响应就发出下一条,总线必然乱套。这也是很多人把视频里的“教程程序”抄回去却跑不通的重要原因:不是地址错,而是调度错。

S7-200 SMART的MBUS_MSG自带Busy标志。当Busy为1时,这条指令正在等待从站回包,你这时候去执行另一条MBUS_MSG,不仅第二条发不出去,还可能把第一条的响应帧冲掉。所以轮询调度必须保证任何时刻只有一个任务在途,其他任务排队等。

4.2 用状态计数器实现一个简单的轮询状态机

视频里那套逻辑并没有用什么复杂算法,就是一个计数器加四个分支。500ms定时器到一次,取反,上升沿触发状态判断:

状态0:写运行命令到16#00FF 状态1:写频率设定到16#00FE 状态2:读输出频率到VW220 状态3:读输出电流到VW230

每个MBUS_MSG执行完,不管成功还是失败,都检查Done和Error,然后把VW0加1。写程序时要注意:必须在当前任务的Done位置确认后再加1,不能看状态值变了就当发送完成,因为库函数调用会持续好几个扫描周期。

实际执行一轮大约2秒。如果希望启停响应更快,可以把启停、频率设定这两个写任务排在前面,读反馈放在后面;也可以把每个任务周期从500ms缩短到200ms。我视频里用的是500ms,主要是为了稳定,调试期一眼能看清哪一步出了问题。

4.3 错误码和重试机制

两个库的Error寄存器分别对应MBUS_CTRL和MBUS_MSG。调试时在线监控这两块字节,比用眼看触摸屏快得多。

MBUS_CTRL常见的错误码是1、2、3:1表示串口模式参数不对,2表示波特率或校验初始化失败,3表示超时设置异常。如果是CTRL的Error不为0,先检查Mode、Baud、Parity三个参数有没有填错。

MBUS_MSG错误码常见的是1、2、3:1表示响应帧格式问题,多半是波特率/停止位和变频器不一致;2表示接收数据超时,说明请求发出去了但从站没回;3表示请求超时,多半是从站地址错误、变频器运行模式没设对,或者通讯线根本没接通。遇到Error不为0,我建议先把对应状态的任务固定住,用Modbus调试助手手动发送同一报文,看变频器到底回不回。

重试逻辑上,我的做法是连续3次同一任务失败,就不再重试当前站,把VW0继续往后拨。这样可以避免一台变频器掉线拖死整条总线。现场如果有HMI,再加一个“变频器通讯故障”报警位,比读三菱故障代码更直观。

5. 回到视频:一台最小系统的完整验收流程

5.1 做这样一个最小系统需要准备什么

清单很短:S7-200 SMART CPU一个,三菱FR-E700变频器一台,三相电机一台,带屏蔽的RS485线两三米,一个USB转RS485调试工具,触摸屏可有可无。视频里用触摸屏是为了展示,开发阶段用电脑软件在线监控VW220和VW230也一样。

先把变频器Pr.338到Pr.341设好,Pr.79调成网络控制模式。然后PLC侧写好MBUS_CTRL和轮询MBUS_MSG程序,下载。首次联机时,别急着给电机上电,可以把变频器输出回路先断开,只验证通讯帧。等报文跑通了,再恢复电机接线。

5.2 从空载测试到带负载,每一步看什么

我建议按这个顺序验收:

操作步骤预期现象
PLC上电,变频器待机变频器面板显示0.00,无通讯报警
触摸屏/面板按正转变频器CUT指示灯亮,输出频率从0开始上升
输出频率设定为30.00HzVW220读到的值接近3000,面板显示30.00
读取输出电流VW230数值与钳形表实测值在显示分辨率内
按停止输出频率按减速时间下降,正转指示灯熄灭

从空载测试到带负载测试,唯一的区别是电流读数会变大,通讯逻辑不用改。如果带负载后出现偶尔通讯失败,先怀疑变频器输出端对通讯线的干扰,把RS485通讯线远离动力线,屏蔽层重新单端接地。

5.3 如果频率反馈和设定值对不上怎么办

三菱输出频率寄存器单位是0.01Hz,所以VW220看到3000就代表30.00Hz。如果你写入VW210的值是3000,但读回来是2950之类,不要急着怀疑通讯,先看是不是变频器的模拟量上限、最高频率、基准频率参数影响了实际输出。很多变频器出厂最高频率是120Hz或400Hz,频率指令源改为RS485后,输入数据和实际Hz的关系以Pr.1最高频率、Pr.20加减速基准频率为准。视频里演示用的是默认最高频率60Hz,所以3000正好对应30.00Hz。换到其他变频器,这块要单独校准。

6. 扩展:一台PLC拖多台三菱变频器的思路

6.1 从单站到多站,轮询任务只是翻倍

视频演示是单台变频器,但项目里经常出现一台S7-200 SMART控制两三台、甚至四五台三菱变频器的情况。只要把每台变频器的站号设成不同地址,比如1号机站号1,2号机站号2,然后把MBUS_MSG的任务表扩展成8个、12个状态就行:

  • 状态0到3:站号1的运行命令、频率设定、频率读取、电流读取
  • 状态4到7:站号2的运行命令、频率设定、频率读取、电流读取
  • 状态8到11:站号3的运行命令、频率设定、频率读取、电流读取

线缆连接改成手拉手菊花链,依次从PLC出来到1号机,再从1号机串到2号机。不要搞成星型,每台变频器都单独拉一对线到PLC那种做法,反射信号会很严重,距离稍长就误码。

6.2 每一台的数据区要分清楚

多台变频器的反馈数据不能都放在VW220和VW230,否则后一台会把前一台覆盖。我的习惯是为每台变频器划分独立数据块:

VW200~VW209: 1号机命令区和状态区 VW210~VW219: 2号机命令区和状态区 VW220~VW229: 3号机命令区和状态区

每条MBUS_MSG的DataPtr指向各自数据块首地址。HMI组态时也按这个分区建变量,后续维护方便。

6.3 多台设备掉线隔离

多从站系统里,最怕1号机停机掉电,整条总线卡在1号机的请求上,后面2号、3号全都被堵住。解决办法就是前面说的连续失败跳站机制。我一般设置“最大重试次数2次”,超过2次直接跳下一站,同时把该站的“通讯故障”位置1。这样一台掉线不影响其他变频器控制。故障恢复后,只要下一轮轮询能成功回到该站,故障位自动复位。

7. 现场最容易翻车的几个地方:经验补漏

7.1 地址偏移:不要看到别人填16#006E就照抄

三菱手册寄存器编号H6F到底该填16#6F还是16#6E,这个问题我每次调试都会遇到。不同固件版本、不同库版本确实可能存在偏移差异。遇到这类问题,我的解决思路不是猜,而是直接用调试助手发03 00 6F,看变频器能不能正确回包。能回,PLC程序就填16#006F;不回,再试16#006E。视频里的程序按16#006F实测没问题,但你手头设备如果有差异,这个方法比死记地址更快。

另外,有人喜欢用寄存器十进制编号加40001后的地址来填西门子的Addr参数,比如读400112这种。SMART库里这种做法更容易错,不建议。把三菱手册编号直接当十六进制数填入Addr,比换算40001系列地址直观,排查问题也方便。

7.2 运行权被“抢”的坑

通讯参数全对了,程序也下载进去了,但PLC写运行命令,变频器纹丝不动。这时候大概率是运行权被变频器面板或外部端子抢走了。三菱变频器有PU运行、外部运行、网络运行三种指令源,Pr.79设置不对,或者面板上RUN指示灯亮着,PLC的HFF寄存器写入就无法生效。

我的排查习惯是先看变频器面板状态灯:通讯控制正常,应该是NET模式或对应通讯指示灯亮。如果面板显示EXT,说明当前运行权在外部端子;显示PU,说明在面板按键上。把Pr.79切到网络模式后,再重新上电,问题通常立刻消失。

7.3 库存储区和用户数据区重叠

这个坑容易被新手忽略。S7-200 SMART插入Modbus库指令后,需要右键“库存储区”分配一段V区给库使用。如果不分配,编译能过,但运行起来库函数会占用你根本没预料到的V区,可能正好覆盖你存频率设定值的变量。视频里我曾演示过现场程序“跑一会儿频率设定就变成乱码”,原因就是库存储区占用到了用户变量区。

解决方法是把库存储区放在用户数据区之前,比如VB0到VB99留给库,用户数据从VB100开始,中间留出足够余量。分配完库存储区再编译一次,确认没有重叠警告。这个检查,比看一百遍梯形图都管用。

这套从单台变频器到多台变频器的Modbus RTU通讯方案,是我在视频演示项目里反复验证过的。真要说独家技巧,就是一条:通讯调试不要靠猜,先用调试助手把变频器侧验证通,再写PLC侧程序,最后再谈轮询优化。按这个顺序来,S7-200 SMART和三菱变频器之间很少会出稀奇古怪的问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询