资讯详情

S7-200 SMART通过RS485控制三菱变频器:Modbus RTU通讯全解析

📅 2026/10/21 9:53:26 | 华诺云谱 👁 阅读
S7-200 SMART通过RS485控制三菱变频器:Modbus RTU通讯全解析
前阵子拍了一条现场演示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.3381Pr.1171从站地址必须和PLC侧Slave一致波特率Pr.3399600Pr.1189600两侧保持一致数据位/停止位Pr.3401位停止Pr.1191位停止建议统一定成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 CRCL01是从站地址03是读保持寄存器00 6F是寄存器地址00 01是读1个寄存器。应答里13 88是十六进制换成十进制是5000对应的就是50.00Hz——因为三菱输出频率寄存器单位是0.01Hz。若写正转运行命令发01 06 00 FF 00 01 CRCH CRCL06是写单个寄存器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数据单位运行命令写RW1运行指令16#00FF10/1正转/2反转频率设定写RW1频率设定16#00FE10.01Hz输出频率读RW0监视频率16#006F10.01Hz输出电流读RW0监视电流16#007010.01A西门子库里当Count1时写操作走的是功能码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_CTRLSM0.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、31表示串口模式参数不对2表示波特率或校验初始化失败3表示超时设置异常。如果是CTRL的Error不为0先检查Mode、Baud、Parity三个参数有没有填错。MBUS_MSG错误码常见的是1、2、31表示响应帧格式问题多半是波特率/停止位和变频器不一致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号机站号12号机站号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和三菱变频器之间很少会出稀奇古怪的问题。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑