☰
PLC梯形图编程与IEC 61131-3标准:多品牌指令对照与调试指南
2026/9/29 21:10:48 网站建设 项目流程

开头部分:

搞工控的人,十有八九都跟梯形图打过交道。不管你是刚摸PLC的新手,还是已经在非标设备现场泡了好几年的老油条,打开编程软件第一眼看到的,基本都是那个由母线、触点、线圈组成的梯形图界面。但很多人可能没细想过一个问题:你在三菱GX Works2里写的LD X0, OUT Y0,到了西门子博途里就变成了常开触点和线圈的拖拽,而到了Codesys或者汇川InoProShop里,写法和逻辑又略有不同——这背后的底层规则,就是IEC 61131-3标准。

今天这篇东西,我想好好聊聊梯形图这个最经典的PLC编程语言,以及IEC 61131-3这个定义了它的国际标准。更重要的是,把西门子、三菱、台达、汇川、AB这几个主流品牌的梯形图编程方式放在一起做个对照,让你在不同品牌之间切换时心里有个谱,知道哪些是通用的逻辑,哪些是厂商的私货,少走点弯路。

先说清楚这篇文章适合谁看:正在学PLC编程入门基础知识的学生、刚入职需要快速上手某个品牌PLC的工程师、或者平时主要用一个品牌但时不时需要移植或维护其他品牌程序的同行。我尽量不写得像教科书那么干巴巴,每一条经验都是我在项目现场实际踩过坑之后总结出来的。


1. IEC 61131-3标准:梯形图的“普通话”是怎么来的

1.1 为什么会有这个标准

早年间PLC编程那是真正的“百花齐放”。每个厂商都有自己的编程器、自己的指令集、自己的表达方式,同一个逻辑在A家PLC上写是一种写法,到B家又得重新学一遍。而且早期很多PLC程序就是用类似汇编的指令表写的,维护起来相当痛苦。工程师跳槽换个品牌,基本等于从头学起。

IEC 61131就是在这样的背景下出台的。它是国际电工委员会制定的PLC标准系列,其中最核心、对程序员影响最大的就是第3部分——IEC 61131-3,专门规定编程语言。这部分标准定义了五种编程语言:梯形图(LD)、功能块图(FBD)、顺序功能图(SFC)、指令表(IL)和结构化文本(ST)。2003年和2013年做了两次修订,把面向对象编程、更完善的数据类型检查等新特性加了进来。

这个标准最根本的价值,在于把所有PLC厂商的编程语言统一到一个共同的框架下面。虽然厂商仍然各有各的软件、各有各的操作习惯,但核心的编程模型——比如扫描执行机制、变量和数据类型概念、程序组织单元(POU)的概念——从根上是相通的。这就相当于大家虽然方言不同,但普通话的语法基础是统一的。

1.2 梯形图为什么至今仍是主流

在IEC 61131-3定义的这五种语言里,梯形图毫无疑问是使用最广泛、最受现场工程师欢迎的一种。这背后有很深的历史和技术原因。

梯形图本质上是从继电器控制电路演化来的。在PLC出现之前,工厂里都是成百上千个中间继电器、时间继电器、接触器通过硬接线实现逻辑控制。梯形图把这种物理电路抽象成了软件逻辑:左母线相当于火线,右母线相当于零线(虽然现在很多软件里已经看不到右母线了),触点就是开关,线圈就是负载。这让那些老电气工程师几乎不需要额外培训,就能看懂PLC程序——这是梯形图最大的历史红利。

现场维护也是梯形图的核心优势。设备出故障时,电气维修工打开编程软件在线监控,看哪个触点变绿了、哪个线圈没吸合,故障点基本一眼就能定位出来。换成ST或者IL代码,很多维修师傅根本看不懂。所以哪怕结构化文本在处理复杂算法时效率更高,梯形图在设备现场维护这个场景下依然不可替代。

另外,梯形图对数字量逻辑控制的表达确实直观。电机启保停、互锁、顺序启动、报警汇总这类典型的PLC应用,用梯形图写,逻辑清晰,别人接手也容易理解。非标设备领域的程序,八成以上逻辑都以梯形图为主、ST或FBD辅助做数据处理,这个比例到今天依然没怎么变。

1.3 IEC 61131-3标准里的几个核心概念

学标准不能光学个名头,关键要把几个核心概念吃透。首先是程序组织单元POU,它分三种:程序(PROGRAM)、功能块(FB)和功能(FUN)。程序是主逻辑单元,相当于C语言的main函数;功能块有自己的内部状态,比如定时器TON就是一个最典型的功能块,它内部会记住当前计时值;功能则没有内部状态,给它同样的输入就返回同样输出,比如加法指令。区分功能块和功能,对理解不同品牌指令差异非常重要——三菱的定时器T其实就是一个内置功能块实例,西门子里你用IEC定时器也是实例化功能块。

还有一个核心概念是变量与数据类型。标准规定变量分为局部变量VAR和全局变量VAR_GLOBAL,数据类型从BOOL到位、整数、实数、时间都做了统一定义。不同品牌最大的坑就在这里:三菱传统指令集只认它那套软元件编号(X、Y、M、D),而博途和Codesys体系直接使用符号名变量。这就好比一个用门牌号寻址,一个用联系人姓名寻址,后面移植程序时会有非常细致的工作要做。

IEC 61131-3还定义了执行模型:PLC周期性扫描输入、执行程序、更新输出。扫描周期内,程序自上而下逐条执行,执行完一遍再回到开头,周而复始。这个机制是整个PLC运行的核心逻辑,后面很多程序的坑都和它有关。

2. 梯形图编程的底层逻辑:触点、线圈与能流

2.1 触点线圈模型的本质

梯形图程序的执行,本质上是布尔代数的运算。常开触点就是“读一个BOOL变量,如果为真则导通”,常闭触点就是“读一个BOOL变量,如果为假则导通”,线圈就是“把这个BOOL变量的当前值写为某个结果”。所有复杂的梯形图逻辑,拆到底层都不过是在重复这件事。

这里有个很多新手容易混淆的概念:梯形图里的X0、Y0那些地址,到底是触点还是线圈?关键看它在程序里的位置和用法。X0是外部输入映射区,它的状态由外部开关决定,程序里只能读不能写;Y0是输出映射区,程序里可以写,写完后在END指令或I/O刷新阶段把Y0区的状态送到物理输出端子。M是内部继电器区,相当于中间变量,程序里既能读也能写。所以一个软元件地址既可以作为触点出现在程序里,也可以作为线圈出现在程序里,这在不同品牌里规则是一样的,但地址符号各不相同。

2.2 扫描周期的迷思与陷阱

PLC的扫描执行是理解梯形图行为最重要的基础。默认情况下,PLC从上到下、从左到右逐条执行梯形图逻辑,所有指令在一个扫描周期内完成。这和电脑程序顺序执行很像,但有一个关键区别:梯形图里的输出结果会立刻影响后续梯级对同一地址的读取。

举个例子,三菱PLC里如果第一行写OUT M0,第二行写LD M0 OUT Y0,在同一个扫描周期内,M0一旦在第一行被置为ON,第二行紧跟着就能读到M0为ON,所以Y0当周期就能通。但如果你是先LD M0 OUT Y0,然后下一行才OUT M0,那Y0要等到下一个扫描周期才能被置位。这在电脑程序里可能无所谓,但在PLC里直接决定了设备响应时间。调试高速设备时,这种顺序依赖会直接表现为输出晚了一个扫描周期。

扫描周期也不是固定不变的。程序量越大、指令越复杂,扫描周期就越长。一般小型PLC默认扫描周期在1到10毫秒之间。如果程序里有通信指令、定位指令,扫描时间会被额外拉长。做高速检测或精确定位时,一定要关注扫描周期是否稳定,否则模拟量采样、计数器的响应都会出问题。

2.3 能流概念与程序执行顺序

梯形图里有个叫“能流”的概念,就是逻辑从左母线往右流动,像电流流过电路一样。能流是一种比喻,实际执行时要看程序的前后位置关系。并联触点相当于“或”逻辑,串联触点相当于“与”逻辑,复杂分支的优先级通过行排列和块来实现。

实际编程里,梯形图的顺序直接影响逻辑正确性。比如电机的顺启逆停控制:三台电机依次顺序启动,逆序停止。这里就有典型的顺序逻辑,你必须把启动信号、前级电机的运行状态作为后级电机的启动条件串联起来,再把停止信号、后级电机的运行状态作为前级电机的停止条件并联进去。这种逻辑用梯形图画出来特别直观,但如果你把梯级顺序倒一下,或者把互锁触点放错位置,设备就可能出现“该停的没停,不该启动的启动了”这种危及设备安全的现象。

2.4 定时器计数器的工作机制

定时器是梯形图里最常用的功能块。IEC 61131-3标准定义了三种定时器:TON(通电延时)、TOF(断电延时)和TP(脉冲定时)。三菱传统编程里主要是TON的用法,也就是线圈得电后开始计时,计时到达设定值后触点动作。西门子S7-200 SMART的TON也是这个逻辑,但它的定时器编号分分辨率和范围,和IEC标准定时器用法有明显差异。

这里必须强调一个重要的底层机制:定时器的当前计数值只在定时器指令被执�行的那次扫描里刷新。如果定时器所在梯级条件不满足,梯形图程序就不会执行那句定时器指令,当前值就不会更新。这一点和很多人的直观理解不太一样。

比如设备里有个定时器,本来5秒后输出一个信号,但它在梯级里被某个互锁条件给断开了,这时即使物理时间已经过了5秒,定时器的当前值还是卡的原来那个数,输出自然不会动作。很多现场“定时器没到时间”的故障,根因其实是定时器指令根本没被执行,而不是定时器本身坏了。

计数器也是同样逻辑。CTU(加计数)只有在CU引脚从OFF变ON的上升沿才会加1。如果同一个扫描周期内CU保持ON且计数器指令连续执行多次,计数也只会加一次,因为PLC的边沿检测是基于上一次扫描的虚拟存储位来判断的。

3. 多品牌梯形图实操对照:西门子、三菱、台达、汇川、AB

3.1 地址与变量体系的根本差异

做多品牌对照,首先要分清楚两大类体系:基于软元件编号的传统体系,和基于符号名变量的体系。

三菱是传统体系的代表。它的输入是X000到X017(八进制编号),输出是Y000到Y017,内部继电器M0到M7679,数据寄存器D0到D7999。注意三菱的X/Y是八进制,没有8和9这两个数字,X7后面直接就是X10。这个历史遗留问题来自PLC早期硬件引脚编号习惯,但是现在还在沿用,编程时一不小心就会把X8写错。

台达PLC基本跟随三菱体系,但细节有差异。台达的输入也是X0到XF(十六进制编号),输出Y0到YF。早期台达PLC的指令表学习成本很低,因为几乎和三菱兼容,很多做代工设备的老工程师用起来非常顺手。不过台达的数据寄存器、特殊继电器编号和三菱不完全一样,做程序移植时不能整个库直接替换。

西门子S7-200 SMART用的是I/Q/M体系:输入I0.0到I0.7,输出Q0.0到Q0.7,位地址是“字节.位”的形式,M是内部标志位,V是变量存储区。S7-1200/1500在博途里更进一步,提倡用符号名(比如“启动按钮”、“电机运行反馈”)代替绝对地址,硬件I/O在设备组态里绑定符号名,程序里只写符号。

汇川的中大型PLC如AM系列和AC系列,走的是Codesys生态,也就是PC-Based的可视化编程环境,地址体系是标准的IEC变量模型。它也有%I、%Q的绝对地址映射方式,但日常编程更推荐用符号名加变量绑定表。小型的H系列则兼容三菱/西门子风格,所以汇川的产品线在编程体验上是“两头都有”。

AB(罗克韦尔)的Controllogix/CompactLogix体系也是符号名优先,但它有独有的Tag(标签)概念,数据组织更像一个面向对象的数据库,输入输出都用别名标签(Alias Tag)映射到物理点。AB的梯形图里没有全局软元件号,程序的数据全靠标签名关联,这对习惯了“M0、D100”的老工程师反而需要适应。

3.2 指令系统的对应关系

了解了地址体系,接着就是指令对应。任何品牌的梯形图核心指令无非是位逻辑、定时器、计数器、比较、数学运算、移动、程序控制这几大类。难点在于指令的写法、操作数类型和可用范围。

  1. 3.3 定时器指令的细节差别

定时器在几乎所有品牌里都是重头戏。三菱的T0到T199是100ms定时器,T200到T245是10ms定时器,T246到T249是1ms累计定时器。台达的定时器编号也分段,但具体分段值与三菱并不相同,做程序转换时必须逐个核对。西门子S7-200 SMART的TONR是累计型定时器,T37、T38等是100ms分辨率,T32、T96等是1ms分辨率,SMART还支持用定时器编号定义不同的分辨率段。

到了博途S7-1200/1500和Codesys生态,情况完全不同了。这些平台主要使用IEC定时器TCON等标准功能块(TON/TOF/TP),你需要实例化一个定时器功能块,在输入引脚PT上填时间值(比如T#5S),输出引脚ET读当前时间,Q作为到时时输出。这种做法比三菱的时间编号方式更灵活,也更贴近高级语言的习惯。西门子还保留了传统S5定时器(S5TIME格式),但在博途里已经不建议新程序使用了。

这里我专门提醒一下:三菱和台达的定时器,当你把OUT T0 K50写成线圈时,定时器的计时是从梯级条件为真开始计,一直计到预置时间,Q触点动作。但当你在线修改定时器线圈所在梯级的条件,让它变假再变真,当前值会清零重计。而累计型定时器(如三菱T246),即使条件断了当前值也不会清零,必须用RST指令手动复位。这个区别在现场特别容易踩坑,因为常规定时器和累计定时器在梯形图上的表现形式可能几乎一模一样。

3.3 编程软件与项目结构差异

软件也是多品牌对照里的关键部分。三菱现在主推GX Works2/GX Works3,其中GX Works3面向iQ-R和iQ-F系列,界面和资源管理方式更接近现代IDE;GX Works2则支持Q、L、FX系列。台达的ISPSoft和WPLSoft并存:WPLSoft是老牌的简单指令环境,ISPSoft则支持IEC 61131-3的工程结构,支持FBD、ST、SFC等语言混编。

西门子这边,S7-200 SMART用STEP 7-Micro/WIN SMART,S7-1200/1500在TIA博途(Portal)里编程。博途的特点是整个工程(PLC、HMI、驱动、网络组态)都在一个项目里管理,但软件体积大、打开慢、版本兼容性问题是老生常谈的痛点——博途PLC与模拟屏不兼容这个搜索热词,说的就是早期版本的博途项目和某些国产模拟屏的驱动不匹配,或者是Multi-User多人协作模式下版本冲突的问题,这个我会在第5部分细讲。

汇川的InoProShop基于Codesys平台,工程结构里有Application、POUs、Task等层次。首次接触InoProShop的人最大的困惑是找不到“强制输入输出”按钮和端口设置的位置,因为它和台达、三菱那种传统软件的工具条布局完全不一样。很多人搜索“inproshop怎么设置plc端口号”,其实设置位置在左侧设备树里双击PLC的“以太网节点”,然后在“通讯参数”页面配置端口号——默认是1217,和Codesys标准端口一致。

AB的编程软件是Studio 5000 Logix Designer,工程用Controller Organizer组织,逻辑类似博途的树状结构。AB的在线编辑功能做得很强,可以无中断下载和在线修改逻辑,这点在现场调试大型设备时非常有用——但它的软件授权费用也很“强”。

3.4 各品牌梯形图的关键词速查表

下面这张表我从实际项目里整理出来的,方便大家在不同品牌间切换时快速找到对应关系:

功能三菱GX Works西门子S7-200 SMART西门子博途台达WPL/ISPSoft汇川InoProShopAB Studio 5000
常开触点LD X0LD I0.0拖拽常开触点LD X0拖拽触点或LD %IX0Examine On
常闭触点LDI X0LDN I0.0拖拽常闭触点LDI X0拖拽常闭触点Examine Off
输出线圈OUT Y0= Q0.0赋值线圈OUT Y0赋值输出Output Energize
置位SET Y0S Q0.0置位线圈SET Y0置位Latch
复位RST Y0R Q0.0复位线圈RST Y0复位Unlatch
通电延时定时器OUT T0 K50TON T37, 50TON功能块TMR T0 K50TON功能块TON功能块
加计数器OUT C0 K10CTU C0, 10CTU功能块CNT C0 K10CTU功能块CTU功能块
上升沿检出PLS M0EUR_TRIG功能块PLS M0R_TRIG功能块OneShot / ONS

这张表看起来简单,但每条对应关系的背后都涉及具体的操作数与软件实现细节,真正做项目移植时不能只看表,必须逐条理解目标品牌指令的扫描与执行机制。举例来说,三菱SET Y0之后,即使你连续多次OUT Y0也不能抵消SET的保持锁存,只能靠RST Y0解除;AB的Latch/Unlatch也是同样道理。只要把“置位就是保持接通直到被复位”这个模型理解清楚,换到任何平台都不会犯低级错误。

3.5 多品牌设备通讯连接实操提示

热词里有“台达plc怎么下载程序”“通过添加ip地址可以连接上c”以及“step7 micro/win smart软件连接plc后搜索找不到cpu”这类问题,这属于每个品牌工程师都会经历的“连不上”日常。我单独拎出来说明一下。

台达PLC下载程序分两种情况:走串口(COM口)的老型号,如DVP14SS等,需要在WPLSoft/ISPSoft里设置正确的COM口号与通信参数(常见9600, 7, E, 1);走网口的新型号,如DVP-ES3系列,需要在软件里点“通讯设置”→选“Ethernet”→填PLC的IP地址,然后点“通讯测试”。很多人是忘记把电脑本地网卡地址改成和PLC同网段,导致软件一直提示“通讯超时”。

汇川InoProShop设置PLC端口号的位置,上面提过是在设备树的GateWay节点下。Codesys体系的PLC默认端口号是1217,仿真模式则用本地回环地址127.0.0.1加端口号。有些工程师在电脑上多装了多个版本的Codesys或者InoProShop,可能出现端口占用导致在线连不上——撤销方案是把其他网关程序全部退掉,或者Windows服务里停掉多余的Codesys Gateway实例。

西门子S7-200 SMART搜索不到CPU是最常见的入门问题。常规做法是:先用网线直连PLC的以太网口,然后打开STEP 7-Micro/WIN SMART,点击“通信”→选择本机网卡→刷新设备。如果搜不到,项目实践中最有效的方法不是反复搜,而是看电脑本地连接的网段是否与PLC默认IP处在同一范围。SMART CPU出厂的默认IP是192.168.0.1或者192.168.2.1,具体看型号批次,电脑地址要改成192.168.0.x或192.168.2.x(最后一位不是1),然后再刷新。还有一种隐蔽情况:PLC之前被人远程修改过IP,你完全不知道它现在是多少。这时只能通过“恢复出厂设置”的方式将PLC复位到默认IP,然后按已知地址重连。SMART上有个办法是按住RUN开关上电十秒以上,面板会以特定状态提示正在恢复,但不同型号可能不太一样,建议下载官方手册确认。

博途连接S7-1200也偶有连不上的问题,常见原因是PG/PC接口设置里选的访问点不对,或者没有勾选“允许从其他PLC进行PUT/GET通信”。此外博途还要求PLC确认“优化块访问”选项,某些版本如果工程里的块访问方式与PLC实际不支持不匹配,也无法在线下载。在PLC属性里关闭“优化块访问”或者改成标准访问,基本就能解决。

4. 从零搭建一个跨品牌梯形图项目:以电机顺启逆停为例

4.1 控制需求与I/O分配

说再多理论都不如拿一个实际案例走一遍。我选最经典的“三台电机顺序启动、逆序停止”作为示例,因为它逻辑清晰、覆盖位逻辑与定时器两大核心要素,而且在不同品牌里都能轻松实现。

控制要求:按下启动按钮,1号电机立即启动;1号启动3秒后,2号电机自动启动;2号启动3秒后,3号电机自动启动。按下停止按钮,3号电机立即停止;4秒后2号电机停止;再过4秒后1号电机停止。任何时刻任一电机过载(热继电器动作),全部电机立即停止并报警。启动按钮X0,停止按钮X1,三台电机热继电器X2、X3、X4,输出Y1、Y2、Y3分别控制三台电机的接触器,Y10是报警输出。

4.2 在三菱GX Works2里的实现

三菱F序列的电脑编程逻辑是这样的:X0置位M0作为启动记忆,X1或过载信号复位M0,M0置位Y1;启动3秒定时器T0,T0到时置位Y2;再设一个3秒定时器T1,到时置位Y3。停止逻辑:X1置位M1,M1立即复位Y3,同时启动4秒定时器T2,T2到时复位Y2;再启动4秒定时器T3,T3到时复位Y1,并复位M1。

注意定时器T0和T1的计时起点不同:T0需要M0为真且Y1为真才开始计时,而T1需要Y2已经为真才开始。如果用T0到达作为T1的启动条件而T1串在Y2的常开触点之后,T1实际上是从Y2输出为ON的扫描周期才真正开始计时的。一般会直接把T0常开触点并联在Y2的输出条件上,保证T0到时后Y2和T1同时导通。停止端,M1是停止记忆信号,在M1置位的那一刻就复位Y3,T2计时结束后复位Y2,T3再从Y2变为OFF之后才开始计时。如果你把T3的计时起始条件做成M1本身,那么T3从按下停止按钮就开始计时,等Y1复位时实际只过了4秒+2个扫描周期,达不到严格意义上的“先停3号,过4秒再停2号,再过4秒停1号”的顺序,所以在RST Y2的同时用一个上升沿触发T3的启动会更稳妥。

这段程序在GX Works2上我用梯形图写出来,大约25行梯级,非常直观。关键是这类“顺序启动、逆序停止”逻辑是各种非标设备的基础模板,什么流水线、泵组、风机群控都是这个模型的变体。

4.3 在博途S7-1200里的对应实现

到了博途,以上逻辑依然是位逻辑加定时器,但写作方式不同。博途更推荐用SR触发器(置位复位触发器)功能块代替自锁保持回路,用TON功能块代替编号定时器。

启动信号X0会触发一个SR触发器实例“StartMemory”,Q输出为True;停止信号X1或过载信号会触发复位端R。StartMemory.Q输出作为Y1线圈的条件,同时作为TON定时器“电机2延时”的IN引脚。当TON的IN为True,开始计时3秒,Q到时输出True,作为Y2线圈的置位条件。Y2又作为“电机3延时”定时器的IN,依次类推。

停止逻辑同样用StopMemory触发,它置位后立即复位Y3,并通过TON“电机2停止延时”4秒后复位Y2,再通过“电机1停止延时”再过4秒后复位Y1。和我在三菱部分强调的时序细节一样,博途里也必须注意TON的IN触发时机。把“停止延时”定时器做成一个边沿脉冲链,或者用步进状态位来控制会更加严谨。写博途时推荐用IEC定时器且有内部可保持状态的优势,但要注意:用非保持的TON,如果PLC从RUN转STOP再转RUN,定时器会清零,这在有些设备上可能导致时序重启。如果希望断电或停机后保持计时进度,必须使用TONR/累计型并搭配合适的保持性设置,AB里叫RTO指令加掉电保持标签。

4.4 在其他品牌里的移植要点

在台达WPLSoft里,地址映射与三菱几乎一致,但要注意台达的X输入是十六进制编号。移植时只需要把三菱的X0改成X0.0?不是,台达的编号通常是X0到XF作为一组,X10到X1F是第二组,不存在“字节.位”的写法。基本指令LD、AND、OR、OUT、SET、RST、TMR、CNT一致,移植成本最低。

汇川InoProShop因为是Codesys生态,更接近博途的符号变量方式。你在全局变量表里定义START_BTN、STOP_BTN、MOTOR_1_RUN等变量,并映射到%IX或%QX,然后梯形图里直接使用这些符号名。定时器用TON实例,和博途几乎一样。所以从博途转到汇川的Codesys平台,学习曲线很陡,但适应后会觉得它们根本上是同一个套路。

AB的Studio 5000里,位逻辑用Examine On/Off和Output Energize指令,定时器用TON指令。AB最大的特点是标签Tag必须提前创建好,包括物理输入输出的别名映射。梯形图里无法像三菱那样直接写X0——你必须在I/O组态里给输入卡件的端子建一个Tag,比如“Start_PB”,然后程序里用这个Tag。这个习惯一开始很烦,但长期看对后期维护和多人协作很有帮助。

4.5 梯形图移植时的几个硬性注意事项

第一,扫描周期不同,时序逻辑可能整体偏移。两个品牌PLC即使梯形图逻辑相同,如果扫描周期差距大,定时器的实际动作时刻会有误差。在三菱FX5U扫描周期0.5毫秒,在S7-200 SMART约1-2毫秒,在AB中型PLC约2-5毫秒,这本身影响不大,但如果设备对时序精度要求到毫秒级,一定要实测。

第二,引脚上升沿的检测方式不同。三菱传统指令只支持在LD/LDI上直接加P(上升沿)或F(下降沿)修饰符;西门子SMART用EU/ED指令;博途和Codesys用R_TRIG/F_TRIG功能块;AB有OneShot(ONS)指令。尤其要小心的是,有些平台对“连续两个梯级引用同一个上升沿功能块实例”会报错,因为上升沿功能块实例不能重复使用,你必须新建一个实例。很多移植程序编译报错就是因为忘了复制一份边沿检测块。

第三,数据类型的严格性不同。IEC体系(博途、Codesys)对数据类型非常严格,一个TIMER与比较指令的实参类型不匹配会直接编译错误;而传统体系(三菱、台达)往往隐式转换,导致同样的数值在不同品牌里可能出现不同结果。最常见的是D100作为一个16位数据寄存器,如果你往里面写了一个超过32767的值,三菱里某些指令依然能用,但博途里INT溢出直接报警。移植程序时一定要先理清原程序的每个数据是否可能超范围。

第四,定时器编号资源有限。传统体系的定时器数量受编号段限制,三菱FX3U的T编号分配到T255就到头了。如果一个设备定时器用量很大,用传统编号会越写越紧张,移植到Codesys或博途这类IEC体系里就没有这个问题——每个定时器功能块都可以新建实例,数量几乎只受内存限制。这有时候反而是从传统PLC往Codesys平台迁移的一大动力。

5. 常见问题与调试心得:这些坑我替你们踩过了

5.1 定时器不动作:检查梯级是否真的被执行

现场调试中,定时器“不动作”是我遇到最多的软故障。排查思路就一句话:先用在线监控看定时器线圈所在梯级前面的条件是不是真的为真,再看指令有没有被打断。很多新手一看输出线圈没亮,第一反应是定时器坏了,然后换了个定时器编号再加一条,还是不行。实际上多数情况是梯级前面的互锁触点、跳转指令或者MCR(主控继电器)把这条梯级给短路或者跳过了。

如果程序用了CJ跳转指令,跳转区域的线圈即使条件为真也不会执行。三相电机顺启逆停的定时器如果放在跳转区内,启动后你会发现输出完全不动——因为程序根本没扫描到那一段。检查方法是打开在线监控,看当前执行到的位置,或者直接把跳转指令临时屏蔽掉试试。

另外,别忘了工艺上的特殊要求。很多设备用触摸屏修改“启动延时”参数,把定时器的时间设定直接关联到触摸屏的数值寄存器。如果触摸屏地址写错了,定时器的设定值可能一直是0,那么输出“瞬间”动作,看起来就像没延时一样。排查这类问题,要在线看定时器的当前值(PV值)是多少,一旦发现设定值=0或者负数(传统体系里可能被当成65535),就能立刻定位到参数绑定错误。

5.2 温控PID波动大:梯形图程序也要背锅

热词里有“plc温度pid波动温差大如何调节”,这其实是PLC梯形图应用里的经典问题。PID控制不像启保停那么简单,很多人把PID功能块扔进梯形图里就撒手不管了,结果系统要么超调要么震荡,一调好几周。

从梯形图的角度看,几个常见坑:第一,PID块没有被周期性无条件调用。如果你把PID功能块放在一个条件很少满足的梯级里,导致PID计算不是每个扫描周期都执行,那输出就非常不稳定。正确做法是把PID调用单独放一个无条件执行的梯级,或者用定时中断去调用。第二,PID参数没有根据扫描周期换算。很多PID指令的积分时间、微分时间参数与采样周期强相关,如果你改了程序的扫描周期,而PID参数没跟着重新整定,波动自然大。第三,CV值的平滑处理。直接梯形图读模拟量,不做均值或滤波就进PID,现场震动稍大就会让PID输出疯狂波动。至少要在模拟量采样的子程序里做一个简单滑动平均,再用限幅功能块把PV和CV的速率限制在合理范围内。

实际项目中,温度PID波动大,我一般按三步走:先确认模拟量输入读数是否稳定,不要上PID就先查传感器和滤波;第二步把P调小、I调大(积分时间增加)、D先设0,让系统稳定再说;第三步逐步加I和D,每次改参数后用曲线记录至少两个完整加热周期。不要一上来就翻手册抄参数,每个设备的滞后特性差异很大。

5.3 博途PLC与模拟屏不兼容

“博途PLC与模拟屏不兼容”这个问题,近两年问的人特别多。先说结论:博途(TIA Portal)本身不负责和模拟屏通讯,和模拟屏通讯的是WinCC或者其他HMI软件。你搜到的“不兼容”,大概率是以下三种情况之一:

第一种,博途V15以上版本创建的S7-1200/1500项目,模拟屏所用的通讯库或者驱动版本比较老,不支持新PLC的“优化块访问”方式。老版通讯库读的是绝对地址,而新PLC默认启用符号化优化访问,两者就对不上了。解决方法是PLC块属性里关掉优化块访问,重新下载硬件配置;或者升级通讯库。

第二种,和WinCC的通讯组态有关。WinCC 8.0和博途的PLC仿真连不上,多半是Simulation Advanced版的PLCSIM没有配置好。S7-PLCSIM Advanced下载程序时提示“在线检查保护PLC组态数据的密码时出错”,这个提示往往是因为仿真实例的访问密码和博途工程密码不一致。解决方法是在PLCSIM Advanced里建立一个和工程密码一致的仿真实例网卡,再重新下载。

第三种,IP地址/子网掩码不匹配。模拟屏和PLC不在同一网段,或者模拟屏组态里填的PLC站号不对。排查时把模拟屏和PLC都拔下来,直连电脑分别ping一下,先确认硬件链路没问题,再去查组态。

5.4 台达PLC程序下载失败的处理流程

台达PLC下载程序的报错很多都和通讯参数有关。老款DVP系列如果用串口下载,要确认编程线是原装还是兼容线。很多兼容线缺少某些握手信号,程序下载到一半就报错“写入超时”。这问题网上教程很少讲清楚,实际教训就是:怀疑编程电缆就先换一根,别反复点下载浪费时间。

网口机型下载程序时,把电脑的网卡IP设为和PLC同网段的固定IP,不要用自动获取。有些台达型号支持多连接,但默认保持连接数有限,如果之前有别人连着PLC不释放,你再去下载就会冲突。可以去“通讯设置”里看“连接状态”,把旧连接断开。

还有个小众但高发的坑:台达PLC编程口兼作COM1(一般连接触摸屏)时,如果触摸屏也在抢这个口,下载程序会不停失败。这种情况下可以临时把触摸屏电源断掉再下载,下载完再接回去,谁用谁知道。

5.5 在线修改与强制输出的注意事项

在线修改梯形图是高阶调试的常见动作。三菱GX Works2支持在线修改但会提示“实时修改”,修改的程序只存在于RAM,掉电会丢失,必须重新写入。博途支持在线下载但会影响CPU状态(停止或复位),虽然S7-1500可以做无扰动下载,但也不是所有修改都支持——比如新增一个DB块可能需要停机下载。

强制(Force)功能比在线修改更危险。强制可以把一个输入或输出强制为ON/OFF,即使在硬件没有信号的情况下。这在排查问题时效率很高,但每次强制完必须记得“释放强制”,否则程序下一次运行会被强制状态干扰。我在一个项目中就吃过亏:在产线上强制了一个输出比较器试动作,试完忘记释放,过了几天设备偶发异常动作,查了很久才发现原来那个输出一直被强制为ON。

特别提醒:传递梯形图程序给客户或者同事时,最好先检查一遍是否存在隐藏的强制表。三菱软件里可以在监控模式下右键“强制ON/OFF”,然后要逐一“释放”;博途里要打开“在线与诊断”里的“强制表格”删除强制操作。任何项目交付前,我都会全局搜索一遍强制状态,把强制表清空,再完整下载一遍程序,保证设备完全由PLC程序逻辑控制。

6. 学习路线与工具建议:怎么从入门到跨品牌无障碍

6.1 一个适合自己的入门路径

现在网上教你PLC的教程非常多,但路线选对了能省很多时间。我的建议是:先学一台典型PLC,把梯形图的基础指令吃透,再用同样的逻辑去走另一个替代品牌。先别急着同时学五个品牌,那样只会把自己绕晕。

对新手来说,我比较推荐从三菱FX系列或者西门子S7-200 SMART入门,原因是资料多、案例多、模拟器完善,而且这两者分别代表了两类体系。先把三菱的X/Y/M/D地址方式和基本指令搞明白,理解“软元件编号”这个概念;再去接触博途或Codesys,理解符号名变量和功能块实例的概念。两条腿走路之后,再去看台达、汇川、AB,你会发现它们不过是这两个体系的变种。

如果没有实际硬件,优先用带仿真功能的软件:GX Works2自带仿真器,安装GX Simulator后可以离线跑梯形图逻辑;博途自带PLCSIM,可以仿真S7-1200/1500大部分指令逻辑;Codesys生态的所有软件(包括InoProShop)都可以在线仿真,根本不需要真实PLC。用仿真器练梯形图完全够了,真正的硬件操作无非是接线和通讯组态而已。

6.2 用好仿真器的5个实用技巧

仿真器和真机行为不完全一样,但用来学习逻辑绰绰有余。几个技巧分享给大家:

第一,仿真时强制模拟输入信号。在三菱仿真器里,可以直接在软元件监控表里改X0的值为ON,观察Y0有没有变化;在博途PLCSIM里,把变量表里的I0.0强制为True就行。这是练梯形图逻辑最基础的操作。

第二,仿真器里可以故意设置错误条件,观察程序的“错误处理”逻辑。很多学员写梯形图只写正常流程,不写异常分支。用仿真器模拟一下急停、过载、正反限位同时触发这些极端条件,你会发现自己的程序在异常分支上漏洞百出。

第三,在仿真环境里测试扫描周期相关的逻辑。把一段很长的子程序放进来故意拉长扫描周期,观察定时器实际动作时间。你会直观感受到“扫描周期对时序的影响”不是一个抽象概念,而是每毫秒都在发生的事。

第四,利用仿真器的“变量趋势记录”功能,看模拟量的变化曲线。博途PLCSIM可以把变量导出CSV,导入Excel里画曲线,看清楚PID波动问题。这比单纯在梯形图里看数值高一个维度,调试温控类设备特别有用。

第五,养成在仿真器里先把程序跑到“稳定状态”的习惯。很多PLC程序首次启动时,内部缓存区、保持性变量还残留上次状态,直接跑正产流程可能会被旧值干扰。在仿真器里先复位所有变量,再冷启动,能帮你快速发现“上电初始化”是否完善。

6.3 跨品牌经验迁移的方法论

最后聊一聊跨品牌迁移的思维方式。我从三菱转到西门子、再从西门子转到Codesys平台的过程中,最大的感受是:不要试图找“一一对应”的指令,而是要从逻辑结构层面理解程序在干什么。

每个品牌的指令集都是对底层PLC硬件的封装,封装方式不同产品之间会有差异,但逻辑模型是一样的。你把一个“电机启动”程序从三菱迁移到博途时,不要想着“OUT M0对应S Q0.0”就完事了,而要想:这个程序里的“启动自锁”逻辑,对应“锁存”(Latch)或“SR触发器”功能块;“延时输出”逻辑,对应“TON功能块实例”;“掉电保持”逻辑,对应“保持性变量”或“断电保持继电器区”。从逻辑模型层面做映射,迁移才能又快又准。

还有一点也很重要:多品牌的经验本质上是不断扩展你的“工控词汇量”,但逻辑设计能力(流程图、状态机)才是核心竞争力。你掌握了顺启逆停、互锁、报警、模拟量处理、PID调节这些通用逻辑模块之后,换一个品牌只是换一层皮而已。

6.4 保持程序可读性与注释习惯

最后想强调一个很多人忽略但极其重要的习惯:梯形图注释。传统老程序里动辄几百行梯形图,没有注释、没有符号表、软元件全部裸写。设备出问题时,大家对着屏幕一顿猜,效率极低。我接手过不少十个以上软元件的程序,没有注释简直是在考古。

不管用哪个品牌,我都建议:每个项目新建时,先在软件里建立完整的符号表(三菱的注释、博途的变量列表、Codesys的全局变量表),把每个输入点、输出点、中间继电器、数据寄存器的用途写清楚。程序里每个梯级的“梯级注释”至少写一句话说明这段逻辑是干嘛的。交付时再附带一份I/O表,写清楚每个地址对应现场哪个按钮、哪个传感器、哪个接触器。

这个习惯平时多花点时间,检修时能省下几倍时间。而且很多时候,写注释的过程本身就是对逻辑的一次复查——你写着写着就会发现有些软元件根本没有用到,有些定时器编号重复用了,有些分支逻辑其实永远不可能通过。这部分检查比任何仿真都值钱。

我做非标项目多年的体会是:梯形图看似简单,真正写好、写稳、写可维护,一点都不简单。IEC 61131-3给了我们一个共同的语言框架,但每个品牌的实现细节仍然需要我们一个个去趟。希望这篇对照能让你在切换品牌时少踩些坑,多留点时间去现场喝口茶。

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

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

立即咨询