做PLC这一行久了,你会发现一个很有趣的现象:不管是刚入行的电气工程师,还是干了十几年的老手,大家手里的“武器”各不相同——有人用三菱,有人用西门子,有人用台达,还有人被客户指定必须用AB或者汇川。但无论换到哪个平台,只要你会看梯形图,上手速度就差别不大。这背后靠的,就是IEC 61131-3这个标准的功劳。这篇文章我想从梯形图的角度出发,结合几个主流品牌的实际差异,聊聊这个标准到底规范了什么、各品牌之间又有哪些对不上的地方,以及怎么做才能让程序在不同平台之间顺利“搬家”。不管你是刚接触PLC编程入门基础知识的新人,还是正在为某个非标项目调试头大的工程师,这篇内容应该都能给你一点参考。
1. 内容整体设计与思路拆解
1.1 为什么IEC 61131-3值得花时间研究
聊PLC梯形图,绕不开IEC 61131-3。它是国际电工委员会制定的PLC编程语言标准,规定了PLC编程的语法、语义、数据结构和指令等。简单说,这个标准就是给PLC编程语言立了个“普通话”的规矩。
在IEC 61131-3之前,各家PLC的编程语言完全是“方言”状态。你用三菱的编程软件GX Works2写的梯形图,拿到西门子的STEP7 Micro/WIN SMART里根本打不开;你在台达的WPLSoft里用顺手的指令,到了汇川的InoProShop里可能连助记符都不一样。那时候的工程师换品牌,等于重学一遍编程。别说程序移植,连基本的指令对应都要花不少时间查手册。
IEC 61131-3定义了五种编程语言:梯形图(LD)、功能块图(FBD)、顺序功能图(SFC)、结构化文本(ST)和指令表(IL)。其中梯形图因为图形化直观、和传统继电器控制线路高度相似,成了国内工控现场最常用的一种。标准的出现,让梯形图在语法层面有了统一的基础——比如变量命名规则、数据类型、程序组织单元(POU)的概念,这些在不同品牌之间开始变得相似。
1.2 标准解决的核心痛点与方案选型逻辑
我们实际做项目的时候,遇到过最头疼的一类问题是:甲方前期用的是A品牌PLC,到了中期因为供货周期或成本原因,要求换成B品牌,但程序逻辑、工艺要求完全不变。如果没有IEC 61131-3的知识底子,你只能从头把它们对应的指令一个个查出来改掉,工作量巨大。
有了标准框架之后,我的做法是:先按“功能逻辑”而不是“品牌指令”来设计程序。什么意思呢?就是先把工艺需求拆解成基本的逻辑单元——比如自锁、互锁、延时启动、顺序控制、模拟量处理——然后用通用的梯形图思路画出来,最后再映射到具体品牌的指令上。这样无论最终用哪个品牌,程序框架都不用伤筋动骨。
选型上我个人更推荐以IEC 61131-3为依据来组织程序结构,也就是把程序按功能块拆分,而不是一股脑写成一个巨型OB块或主程序。这套思路在汇川InoProShop、CODESYS这些符合国际标准的软件里尤其好用——因为它们本身就是按IEC 61131-3的模型设计的。三菱和西门子虽然在很多地方保留了自家风格,但底层逻辑也在向标准靠拢。
2. 梯形图核心元素解析与实操要点
2.1 梯形图的底层逻辑:从左母线到右母线的“电路思维”
梯形图严格来说是在模拟继电器控制电路。左母线相当于火线,右母线相当于零线(部分品牌省略右母线,西门子就常不画)。触点是输入条件,线圈是输出结果,电流“流过”触点组合,线圈才得电。
这里面有几个最基本的元素需要反复理解:
- 常开触点(----| |----):条件为真(位为1)时导通。
- 常闭触点(----|/|----):条件为假(位为0)时导通。
- 输出线圈(----( )----):前面条件导通,线圈得电,对应位被置1。
- 置位线圈(----(S)----):一旦触发,位保持为1,直到被复位。
- 复位线圈(----(R)----):一旦触发,位被置为0,释放保持。
我见过不少新手把常开常闭搞反。在继电器电路里,常闭触点在没有外力时是导通的,对应到PLC梯形图,|/|符号就是“在没有信号时旁路导通”。实际调试中,急停按钮的输入触点,很多人习惯用常闭,如果程序里处理不当,就会出现“一上电就报警”的尴尬场景。我自己的习惯是:急停、限位这类安全信号,硬件用常闭接法,PLC程序内部用常开触点去读取——这样如果线路断了或者PLC没收到信号,程序能立刻判定为异常状态,符合故障安全原则。
2.2 梯形图符号大全与功能块扩展
标准梯形图除了基本触点线圈,还包含很多功能块和指令。常见的有定时器TON(延时接通)、TOF(延时断开)、计数器CTU(递增计数)、比较指令(CMP)、算术运算、数据移动等。这部分在不同品牌里的符号差异还真不小。
我先列一个对比表,方便大家对照:
| 功能 | 三菱(GX Works2) | 西门子(STEP7 Micro/WIN SMART) | 台达(WPLSoft) | 汇川(InoProShop) |
|---|---|---|---|---|
| 常开触点 | -- | -- | -- | |
| 常闭触点 | -- | / | -- | -- |
| 输出线圈 | --( )-- | --( )-- | --( )-- | --( )-- |
| 置位 | SET | S(或置位) | SET | SET |
| 复位 | RST | R(或复位) | RST | RST |
| 延时接通 | TON(需要指定定时器编号) | TON(需要指定定时器背景DB或M) | TON(需要指定编号) | TON(功能块实例化) |
| 上升沿检测 | PLS / LDP | EU(Edge Up) | PLS | R_TRIG |
| 比较指令 | CMP / LD>等 | CMP / LD>等 | CMP / LD>等 | CMP / LD>等 |
| 数据传送 | MOV | MOV / MOVE | MOV | MOVE |
从表里能看出来,基本触点线圈的符号几乎完全一致,但一到功能块和指令,差异就来了。三菱和台达比较相似,毕竟台达早期产品受三菱影响比较深;西门子自成一派,用了大量的背景数据块(DB)、临时变量(TEMP)概念;汇川InoProShop基于CODESYS,完全走的是IEC标准路线,功能块需要像“实例”一样先声明再用。
2.3 定时器与计数器:最容易踩坑的地址映射
定时器这块,我多说一句。三菱PLC的定时器是“编号制”,比如T0到T255,你直接在梯形图里写“OUT T0 K100”,意思是T0延时100个0.1秒(也就是10秒,取决于定时器时基)。西门子S7-200 SMART则不一样,TON指令需要指定定时器编号和预设值(例如TON T37, 100,时基通常是0.1秒,但不同定时器号对应的时基可能不同——T32、T96是1ms,T33-T36、T97-T100是10ms,T37-T63、T101-T255是100ms)。如果你按照三菱的习惯随便挑一个定时器号,很容易把延时时间搞错。
我在做三菱程序转西门子的时候,专门整理过一个映射表,把三菱的T0~T199(100ms定时器)对应到西门子的T37~T63和T101~T255,把三菱的T200~T255(10ms定时器)对应到西门子的T33~T36和T97~T100。这样转换的时候心里有数,不会因为时基不对导致整个工艺节奏出错。
计数器也是类似。三菱的C0~C255有区分16位和32位计数器,西门子S7-200 SMART里计数器也有编号和类型限制。台达和汇川相对灵活一些,但原理相通。
2.4 数据类型与地址体系:标准化的真正内核
很多新手会把注意力全放在指令符号上,但我认为IEC 61131-3最值钱的部分其实是数据类型的规范化。传统三菱PLC程序里的地址就是纯粹的软元件编号——X、Y、M、D,你很难从地址上看出这个变量到底是整数还是浮点数。而IEC 61131-3引入了BOOL、INT、DINT、REAL、STRING等标准数据类型,变量名可以自己定义,调试时一眼就能看出用途。
以汇川InoProShop为例,你在程序里声明一个变量“MotorSpeed”为REAL类型,梯形图里做比较和运算时,系统自动按REAL处理;而在三菱里,你得记住D100是整数还是浮点数,存取方式不对很容易出乱子。
这个差异带来的实际好处,主要体现在程序可读性和后期维护上。非标设备调试时频繁改参数、加功能,是常有的事,如果程序里全是意义不明的D寄存器编号,隔一个月再看基本等于看天书;但如果程序顶层就是“启动按钮”“停止按钮”“主轴转速设定”这种带名字的变量,维护效率会好很多。这其实就是IEC 61131-3在背后起作用。
3. 实操过程与核心环节实现
3.1 从零搭建一个符合标准的多品牌通用程序框架
下面我直接分享一个我在实际项目里用过的做法。假设要写一个简单的“电机顺启逆停定时器”程序,工艺要求是:按启动按钮,电机1先运行,3秒后电机2自动启动;按停止按钮,电机2先停,4秒后电机1停。这其实就是热搜词里出现过的“plc电机顺启逆停定时器”的典型场景。
我先用IEC 61131-3的思路构思POU(程序组织单元)结构,把程序拆成:Input映射、输出映射、逻辑控制三个功能块。然后用梯形图实现核心逻辑,最后再映射到具体品牌。
先看三菱的梯形图(简化):
X0 启动按钮 M0 启动自锁 --| |----------(M0)-- M0 自锁 T0 延时3秒 --| |----------(OUT T0 K30)-- M0 T0 Y0 电机1接触器 --| |--| |------(Y0)-- T0 Y1 电机2接触器 --| |-----------(Y1)-- X1 停止按钮 T1 延时4秒 --| |----------(OUT T1 K40)-- T1 M1 停止中间继电器 --| |-----------(M1)-- M1 Y1 电机2停止(切断) --|/|-----------(Y1)-- M1 T1完成后 Y0 电机1停止(切断) --|/|-----------(Y0)--这段程序写得比较粗糙,真实项目里还得考虑互锁、故障复位等逻辑,但作为示例足够说明问题。
再看西门子S7-200 SMART的写法思路。西门子没有X、Y这种直接叫法,输入是I0.0、Q0.0这种,M区变成M0.0、M0.1。定时器换成TON指令,预设值要按时基换算成整数。
Network 1: 启动自锁 I0.0 M0.2 --| |--|/|-------(M0.0)-- // M0.2是停止中间继电器常闭 Network 2: 3秒延时 M0.0 --| |------------(TON T37, 30)-- Network 3: 电机1输出 M0.0 T37 --| |--| |-------(Q0.0)-- Network 4: 4秒延时(从停止信号触发) I0.1 --| |------------(TON T38, 40)-- Network 5: 停止过程控制 T38 M0.0 --| |--|/|-------(M0.1)-- Network 6: 电机驱动 M0.1 // 停止过程中切断Q0.1 --|/|------------(Q0.1)-- M0.1 T38 --| |--| |-------(M0.2)--三菱和西门子的逻辑本质是一样的,区别主要表现在:软元件命名完全不同、定时器编号和时基有差异、程序段组织方式不同(三菱是步进梯形图或普通梯形图,西门子分Network)。
3.2 台达PLC怎么下载程序和端口设置实战
热搜词里有“台达plc怎么下载程序”和“inproshop怎么设置plc端口号”,这两个都是实操里非常常见的问题,我放在一起讲。
台达PLC家族分ES/EX/SS/SA/SC等系列,编程软件是WPLSoft,部分新系列用ISPSoft。下载程序的基本流程是:
- 用编程线(通常USB转串口或专用编程线)连接PLC和电脑。
- 打开WPLSoft,新建程序,选择正确的PLC型号(比如DVP-14SS2)。
- 在“通信设置”里选择正确的串口号或USB端口,设置通信参数(常见为9600, 7, Even, 1,具体看PLC型号)。
- 点击“程序下载”按钮,选择“程序”选项,确认下载。
- 下载完成后,如果PLC处于RUN状态,需要先STOP才能下载,下载完再RUN。
这里面最常踩的坑是通信端口选错。特别是笔记本电脑,只有一个USB口还要插U盘、鼠标,插上编程线之后系统经常分配一个新的COM口。我的排查习惯是:打开设备管理器,找到“端口(COM和LPT)”,看看编程线识别成了哪个COM号,在WPLSoft的通信设置里选对应的端口,基本就能连上。
汇川InoProShop的设置稍不一样。它基于CODESYS,默认走以太网连接。设置PLC端口号的方法:在InoProShop左侧设备树里双击“PLC”,在“通信设置”或“Ethernet”配置页面里,可以看到端口号(默认一般是11740,CODESYS常用端口)。如果模块和PLC之间连不上,就把这个端口号记下来,在“扫描网络”或手动添加设备的时候填上,再加上PLC的IP地址,就能建立连接。这里提醒一下,如果电脑装了多个网卡或者开了虚拟机,虚拟网卡的IP段很可能干扰PLC的通信,排查不到设备时先禁用VMware等虚拟网卡再试。
3.3 S7-200 SMART连接不上CPU的处理经验
热搜词里还有一条很典型:“step7 micro/win smart软件连接plc后搜索找不到cpu,通过添加ip地址可以连接上c”。这个问题我遇到过不止一次。
S7-200 SMART使用以太网通信。正常情况下,在STEP7 Micro/WIN SMART里点击“查找CPU”,软件会广播搜索局域网内的PLC。如果搜不到,常见原因包括:
- PLC和电脑不在同一网段。S7-200 SMART默认IP是192.168.2.1,如果你的电脑网卡是192.168.1.x,除非PLC被改过IP,否则搜不到。
- 电脑开了无线网卡,PLC的搜索请求走了无线,而PLC插在有线网口上。
- Windows防火墙拦截了搜索广播包。
上面那条热搜里提到的“通过添加IP地址可以连接上”,其实就是绕过了广播搜索的限制,直接建立点对点TCP连接。操作方式是:在STEP7 Micro/WIN SMART的“通信”界面里,选择“添加CPU”,输入PLC的IP地址(比如192.168.2.1),点击确定。只要能ping通,基本都能连上。
我个人的建议是:现场调试S7-200 SMART时,先把电脑网卡IP固定成192.168.2.x(例如192.168.2.10),子网掩码255.255.255.0,然后用“添加IP”的方式直连。这比每次依赖自动搜索稳定得多。
3.4 三菱PLC项目实战案例的编程思路
三菱在国内市场占有率很高,GX Works2和GX Works3是主要编程环境。三菱PLC的梯形图风格和IEC标准差异较大,最典型的就是它保留了“软元件”概念而非“变量名”。不过新出的GX Works3(对应FX5U、R系列)已经开始支持标签式编程,向IEC靠拢了。
我在做三菱项目时,常用的结构化套路是:分配软元件规划表。比如:
| 地址范围 | 用途 | 备注 |
|---|---|---|
| X0~X17 | 输入信号 | 按钮、限位、传感器 |
| Y0~Y17 | 输出信号 | 接触器、电磁阀、指示灯 |
| M0~M99 | 内部继电器 | 中继逻辑、状态标志 |
| M100~M199 | 锁存继电器 | 断电保持的工艺状态 |
| D0~D99 | 数据寄存器 | 参数、设定值 |
| D100~D199 | 锁存数据寄存器 | 工艺参数断电保存 |
| T0~T255 | 定时器 | 按工艺分段使用 |
这个规划表是每个三菱项目开工前必须做好的功课。否则写到一半发现M地址冲突或者D寄存器被重复占用,调试时会特别痛苦。我甚至见过一个项目里,同一个M50既当自动模式标志又当报警复位信号,工艺一切换整个逻辑就乱套。
3.5 非标项目里的多品牌混搭:西门子PLC与变频器通讯
热搜词“abb变频器与西门子plc”和“西门子s7-200smart系列plc与森兰变频器sb200系列高性能通用型变频器通讯”都属于典型的非标项目场景——PLC品牌固定,变频器品牌五花八门。
S7-200 SMART与变频器做Modbus RTU通讯时,PLC做主站,变频器做从站。核心步骤是:
- 在Micro/WIN SMART里,调用MBUS_CTRL指令初始化串口(波特率9600、校验Even、从站地址等)。
- 调用MBUS_MSG指令发送读写请求,比如写变频器的运行命令地址,读当前频率和电流。
- 变频器侧需要设置通信参数——从站地址、波特率、数据格式,和PLC侧保持一致。
这里面容易出问题的地方是变频器的参数地址映射。比如森兰SB200的通信地址和ABB的标准Modbus地址不一定兼容。我的经验是:拿到变频器手册后,先只看“通讯地址表”,把需要读写的参数地址一个个抄下来,再写PLC程序。不要凭经验猜地址,不同品牌的变频器内部寄存器定义差异很大——同样是“运行频率”,ABB可能是40002,森兰可能是2000H,台达可能是H2001,直接照搬别人的程序肯定会出问题。
4. 常见问题与排查技巧实录
4.1 模拟量处理:温度PID波动温差大怎么调
热搜词里“plc温度pid波动温差大如何调节”是很经典的现场问题。PID调节本身不算难,难的是参数整定。温度控制大惯性,PID参数设置不好会有剧烈波动。
我自己的排查顺序是:
- 先看P值(比例),如果温度波动幅度大、周期长,通常是P值偏大。
- 再看I值(积分),如果温度稳定后存在静差,需要适当减小积分时间。
- D值(微分)对温度这种大惯性对象一般不常用,如果D值太大会引入噪声。
实际操作时,我习惯先设一个偏保守的参数(P=100,I=10秒,D=0),观察温度趋势曲线——如果超调大就减小P,如果响应太慢就减I。每次只改一个参数,等系统稳定半小时左右再记录结论。这个“一次只改一个参数”的习惯能避免你把参数调乱了还找不出哪个参数在起作用。
4.2 博途与模拟屏不兼容的坑
“博途plc与模拟屏不兼容”这个热搜也很真实。西门子博途(TIA Portal)和第三方组态屏之间做通信时,常见情况是屏的驱动版本太老,不支持S7-1200/1500的通讯协议,或者需要在屏里手动填PLC的IP、机架号、槽号。解决办法一般是升级屏的组态软件驱动,或者确认通讯设置:S7-1200使用以太网,协议选“S7-200”或“S7-300/400”往往不行,必须选“S7-1200”或“SIMATIC S7”。如果是老掉牙的模拟屏,直接换一个支持新协议的屏可能是最快路径。
4.3 一个PLC可以接两个触摸屏吗
这个问题我直接回答:可以,但分情况。
如果是COM1口接一个屏,COM2口接另一个屏,没问题,互不干扰。
如果两个屏都走以太网,只要PLC的以太网接口支持多连接,也完全没问题——S7-1200一般支持最多16个HMI连接,三菱FX5U也可以同时连多个触摸屏。
但要注意变量分配的带宽和通信周期。两个屏同时频繁读写大量变量时,PLC的通信负载会明显增加,导致程序扫描周期变长或HMI刷新变慢。我的建议是:两个屏的刷新周期不要都用“100ms”,可以把不重要的画面设置成500ms或1s刷新,给PLC留出运算余量。
4.4 台达、汇川等国产PLC的下载与调试小技巧
国产PLC这几年进步很明显,台达和汇川在中小型非标设备里应用很广。台达WPLSoft有一个我很喜欢的功能是“程序比对”——下载前先比对一下电脑里的程序和PLC里的程序是不是一致,避免误覆盖。汇川InoProShop因为是CODESYS内核,调试体验和进口品牌在一个水平线上,支持在线监视变量、强制赋值、断点调试,排查逻辑问题方便很多。
这些小功能看起来不起眼,但真正在生产现场处理故障时,能帮你省下大量时间。我做过一个统计,用在线监视和变量强制功能排查一个故障的平均时间,比纯靠眼睛看梯形图找问题快至少3倍。
5. 多品牌指令对照速查表
5.1 常用位逻辑指令对照
| 功能 | 三菱 | 西门子S7-200 | 台达 | 汇川 |
|---|---|---|---|---|
| 取反 | INV | NOT | INV | NOT |
| 空操作 | NOP | NOP | NOP | NOP |
| 输出 | OUT | = | OUT | = |
| 置位 | SET | S | SET | S |
| 复位 | RST | R | RST | R |
| 上升沿 | PLS/LDP | EU | PLS | R_TRIG |
| 下降沿 | PLF/LDF | ED | PLF | F_TRIG |
5.2 常用功能指令对照
| 功能 | 三菱 | 西门子S7-200 | 台达 | 汇川 |
|---|---|---|---|---|
| 加法 | ADD | ADD_I / ADD_R | ADD | ADD |
| 减法 | SUB | SUB_I / SUB_R | SUB | SUB |
| 乘法 | MUL | MUL_I / MUL_R | MUL | MUL |
| 除法 | DIV | DIV_I / DIV_R | DIV | DIV |
| 数据传送 | MOV | MOV_B/W/DW/R | MOV | MOVE |
| 比较(整数) | CMP / LD> | LD> / LDR> | CMP | GT / GE / EQ等 |
| 跳转 | CJ | JMP | CJ | JMP |
| 子程序调用 | CALL | CALL | CALL | CALL |
| 循环 | FOR/NEXT | FOR/NEXT | FOR/NEXT | FOR |
这张表不是让你背的,而是方便你在程序移植时快速定位。真正动手的时候,还是建议每个指令都以对应品牌的编程手册为准。
6. 移植方法论:如何把三菱程序改成西门子
6.1 移植前的准备工作
如果你接到一个任务,要把三菱的程序改成西门子PLC用,千万不要直接打开两个软件一句句对着抄。这样不仅效率低,还容易漏逻辑。
我的做法分四步:
- 第一步:先把三菱程序完整过一遍,画出工艺流程的时序图,理清各动作之间的先后关系和互锁条件。
- 第二步:制作软元件映射表。把所有X、Y、M、D的用途列出来,按照功能重新用符号命名(比如X0改名为“StartBtn”,Y1改名为“Motor1Run”)。
- 第三步:把三菱梯形图按“功能块”拆解——启动停止、自动流程、报警处理、手动调试,每个功能做完一个再做一个。
- 第四步:在西门子环境里按Network为单位逐段重建逻辑,每个Network加上注释说明功能。
这样操作下来,程序虽然重新写了一遍,但逻辑结构比原来还清晰。
6.2 常见移植坑点
移植过程中最容易出的问题集中在几个地方:
- 定时器分时基不同。三菱T0默认100ms,K30等于3秒;西门子T37也是100ms,但T33是10ms,如果直接用T33且预设值写成30,实际只有0.3秒,整个延迟保护就失效了。
- 数据寄存器长度不同。三菱D寄存器默认16位,32位数据用D和D+1组合表示;西门子的VW是16位,VD是32位,如果直接用VD覆盖了两个连续的VW,程序数据就会错位。
- 常闭触点的处理逻辑不同。三菱的程序里,停止按钮如果硬件接了常闭,程序一般直接取常开触点;西门子里也类似,但换成S7-200 SMART后,I/O映射如果没处理好,会出现“上电即启动”的情况。
- 程序扫描顺序不同。三菱按梯形图从上到下、从左到右扫描,西门子按Network顺序执行。如果是用跳转指令或子程序比较多的程序,移植后执行顺序可能发生变化。
6.3 移植后的验证方法
移植完成后,建议先在软件里做离线仿真(如果软件支持的话,比如S7-PLCSIM或GX Works2的模拟器),然后做一次空载测试。空载测试要把输出回路断开或者用临时按钮代替执行机构,确认每个输出的动作时序符合工艺要求后再接实际负载。
我在S7-PLCSIM里跑过几次移植后的程序,发现过好几个隐蔽问题——比如某个定时器的预设值换算错了、某条比较指令的数据类型不匹配导致结果永远为FALSE等。这些问题如果在仿真阶段发现,改起来很快;如果等到现场接好线再查,往往就是半天时间起步。
7. 写在最后的一点个人心得
做了这么多年PLC项目,最大的体会是:IEC 61131-3标准不是考试用的理论,它的价值在于给你一个“跨品牌思考”的框架。你会了三菱的定时器,到了西门子面前不至于从零学起;你习惯了CODESYS的变量声明方式,回到台达的软元件体系也能快速找到对应关系。熟练的工程师和新手之间真正的差距,不在于记住了多少指令,而在于脑子里有没有一套稳定、清晰的程序组织逻辑。
再说一句很实在的话:无论你用哪个品牌,多翻手册、多画时序图、多留注释,永远是提升工作效率最有效的手段。品牌会变,标准会更新,但一套好的编程习惯能让你在各种PLC之间都吃得开。希望这篇文章能给你一些实用的参考,下次换平台、改程序的时候少走点弯路。