1. 从继电器柜到梯形图:为什么工控人绕不开这一关
干了十几年现场调试,我见过太多新手卡在同一个地方:硬件接线能看懂,电气原理图能读明白,但一打开编程软件,面对那一排排触点和线圈,脑子就空了。西门子PLC梯形图学习这件事,说难不难,说简单也真不简单——它的门槛不在于语法有多复杂,而在于你能不能把"继电器逻辑"这套思维方式,平滑地迁移到软件编程里。
这篇文章就是写给那些刚接触西门子PLC、或者从其他品牌转过来、又或者自学了一段时间但总觉得没摸到门道的朋友。我会从梯形图的本质讲起,把触点、线圈、定时器、计数器这些基础元件拆开揉碎,再结合几个典型的实操案例,把编程思路和避坑经验一并交代清楚。你不需要有很深的电工基础,但最好对"常开""常闭""自锁"这些概念有个模糊印象,剩下的我来补。
先说一个我反复跟徒弟强调的观点:梯形图不是画给PLC看的,是画给人看的。PLC最终执行的是语句表或者经过编译的机器码,梯形图只是为了让电气工程师能用自己的母语——继电器逻辑——去描述控制意图。理解了这一点,你就不会纠结于"为什么梯形图里没有真正的电流流动",而是把注意力放在"逻辑关系"上。
西门子在小型自动化领域的产品线很长,从早期的S7-200到后来的S7-200 SMART,再到现在的S7-1200和S7-1500,编程软件也从STEP 7 Micro/WIN演进到了博途(TIA Portal)。不同平台的操作界面差异不小,但梯形图的核心逻辑是一脉相承的。我下面讲的内容,尽量做到平台无关,但会以S7-1200配合博途作为主要参照,因为这是目前新手最容易接触到的组合。
2. 梯形图的底层逻辑:触点、线圈与能流概念
2.1 能流不是电流,但你可以当它是
梯形图最左边那条竖线叫母线,相当于继电器柜里的电源正极。右边的线圈相当于负载,最终回到负极。编程软件里那条绿色的"能流"线,本质上是一个布尔值传递的过程——从左到右,只要条件满足,能流就能"流过"。
这里有个新手最容易犯的错:把能流当成真实的电流方向。实际上梯形图里的能流只有"通"和"断"两种状态,不存在电压降、不存在分流。一个网络里可以有多个分支,每个分支独立判断条件,互不干扰。我见过有人为了"让电流先经过这个触点再经过那个",硬是把并联关系画成串联,结果逻辑完全不对。
提示:判断一个梯形图网络是否正确,不要看它"像不像电路图",要看它"条件满足时输出是否为真"。
2.2 常开与常闭:名字骗了很多人
| |是常开触点,|/|是常闭触点。这两个符号的名字来源于继电器时代——常开触点在继电器未动作时是断开的,常闭触点在继电器未动作时是闭合的。但在PLC梯形图里,它们代表的是对某个位变量的判断:
- 常开触点:当该位为1时导通,为0时断开
- 常闭触点:当该位为0时导通,为1时断开
我见过太多人把常闭触点理解成"物理上闭合的开关",然后在程序里到处乱用。记住一句话:常闭触点是取反操作。你写一个常闭触点,就是在说"当这个条件不成立时,允许能流通过"。
2.3 线圈的几种形态与使用禁忌
普通线圈( )是最常用的输出指令,它的行为是:能流通过时,对应位写1;能流断开时,对应位写0。这里有个关键点——普通线圈具有"保持最后状态"的特性吗?答案是没有。只要程序扫描到这一行,它就会根据能流状态强制刷新输出位。这意味着如果你在同一个程序里对同一个输出位用了两次普通线圈,后面的会覆盖前面的,而且编译器通常会给出警告。
置位线圈(S)和复位线圈(R)则不同。置位线圈在能流通过时把位置1,之后即使能流断开,该位仍然保持为1,直到遇到复位指令。复位线圈同理。这两个指令在需要"记忆"状态的场景里非常有用,比如启动/停止控制中的运行标志。
注意:置位和复位指令不要滥用。如果一个输出位既被普通线圈控制,又被置位/复位指令控制,程序的可读性会急剧下降,调试时你会想砸键盘。
3. 从自锁到互锁:三个必须刻进肌肉记忆的经典回路
3.1 起保停回路:梯形图的"Hello World"
起保停是每个PLC学习者的第一课。需求很简单:按启动按钮,电机运行;按停止按钮,电机停止;如果两个按钮同时按下,停止优先。
梯形图实现方式:启动按钮的常开触点与输出线圈的常开触点并联,再与停止按钮的常闭触点串联,最后接输出线圈。这个结构就是自锁——输出线圈得电后,自己的常开触点闭合,维持能流路径。
但这里有个细节很多人没注意:停止按钮为什么用常闭触点?因为在电气接线中,停止按钮通常接的是常闭物理触点,未按下时电路是通的。在梯形图里用常闭触点,表示"当停止信号未触发时,允许能流通过"。如果你把停止按钮接成了常开物理触点,梯形图里就要用常开触点,逻辑正好反过来。梯形图里的触点类型必须和物理接线方式匹配,这是现场调试时最容易出问题的地方。
3.2 互锁回路:两个输出不能同时得电
正反转控制是互锁的经典场景。正转接触器和反转接触器如果同时吸合,就是相间短路,后果很严重。梯形图里的互锁做法是:正转线圈的能流路径上串联反转输出的常闭触点,反转线圈的能流路径上串联正转输出的常闭触点。
这个逻辑的意思是:当正转输出为1时,反转路径上的常闭触点断开,反转无法启动;反之亦然。但要注意,互锁只能防止程序逻辑层面的同时输出,不能替代硬件互锁。实际工程中,正反转接触器之间必须还有电气互锁和机械互锁,梯形图里的互锁只是第一道防线。
3.3 延时回路:定时器的正确打开方式
西门子PLC的定时器有几种类型,S7-1200里常用的是TON(接通延时)、TOF(断开延时)和TP(脉冲定时器)。新手最常用的是TON,但经常搞不清它的行为:
- 能流从0变1时,定时器开始计时
- 计时达到设定值后,定时器输出位变为1
- 能流保持为1期间,定时器保持输出为1
- 能流从1变0时,定时器复位,输出位变0,当前值清零
这里有个坑:TON的使能端如果一直为1,定时器达到设定值后会保持输出,不会自动复位。如果你需要周期性脉冲,得用其他方式实现。另外,定时器的设定值可以是常数,也可以是变量。用变量的时候要注意数据类型,S7-1200的TON定时器PT引脚是Time类型,不能直接填整数。
4. 博途环境下的实操:从新建项目到下载运行
4.1 项目创建与硬件组态
打开博途,新建项目,添加新设备。选择你的CPU型号,比如CPU 1214C DC/DC/DC。这里要注意:订货号必须和实物一致,否则下载时会报错。如果你手头没有实物,可以用PLCSIM仿真,但仿真环境和真实硬件的行为在某些细节上会有差异,比如高速计数和脉冲输出。
硬件组态里需要确认几个关键参数:PROFINET接口的IP地址、系统时钟存储器、输入输出的地址分配。系统时钟存储器是个好东西,它提供了周期性的方波信号,可以用来做闪烁控制或者简单的定时任务,不需要自己写定时器。
4.2 梯形图编辑器的使用技巧
博途的梯形图编辑器支持拖拽和快捷键。几个我常用的操作:
- 在空白网络里直接输入指令助记符,比如输入
A然后回车,会自动生成常开触点 - 选中一个触点按
Ctrl+C再按Ctrl+V,可以快速复制 - 右键点击网络可以插入新网络、删除网络、切换语言(LAD/FBD/STL)
- 编译时按
Ctrl+B,有错误会在下方消息栏显示
提示:博途的自动补全功能很好用,但不要完全依赖它。有时候它补全的指令类型和你想的不一样,尤其是定时器和计数器。
4.3 下载与在线监控
下载程序之前,确认PLC的IP地址和电脑在同一网段。博途里点击"下载到设备",选择接口类型(PN/IE)和接口卡,然后搜索设备。如果搜不到,检查防火墙和网线。
下载完成后,点击"转至在线",就可以监控程序运行状态了。博途的在线监控会用绿色表示能流通,蓝色表示能流断。你可以右键点击某个变量,选择"修改"来强制赋值,这在调试时非常有用。但要注意:强制赋值会覆盖程序逻辑,调试完成后一定要取消强制,否则可能出安全事故。
5. 那些年我踩过的坑:新手最常见的五个错误
5.1 双线圈输出:编译器不报错,但逻辑会乱
前面提过,同一个输出位在同一个程序里用了两次普通线圈,后面的会覆盖前面的。但博途在某些情况下不会报错,只会给警告。如果你忽略了警告,下载运行后会发现输出行为完全不符合预期。解决办法:用置位/复位指令替代双线圈,或者把逻辑合并到一个网络里。
5.2 定时器编号冲突:同一个定时器用了两次
S7-1200的定时器是"实例化"的,每个TON指令都需要一个背景数据块。如果你复制粘贴网络时没有注意,两个TON用了同一个背景DB,就会互相干扰。解决办法:每次插入定时器时,让博途自动生成新的背景DB,或者手动指定不同的DB编号。
5.3 沿触发指令的M位陷阱
上升沿P和下降沿N指令需要一个存储位来记录上一次的扫描状态。博途里如果直接用P指令,它会自动分配一个临时存储位,但这个临时位在每个扫描周期都会变化,导致沿触发不可靠。正确做法:使用P_TRIG指令并指定一个全局的M位或DB位作为边沿存储位。
5.4 模拟量处理的量程转换错误
S7-1200的模拟量输入模块,原始值范围是0到27648(对应0到10V或0到20mA)。很多新手直接把这个值当成实际物理量使用,结果数值完全不对。正确做法:用NORM_X和SCALE_X指令进行归一化和缩放,或者自己写线性转换公式。
5.5 程序块加密后忘记密码
博途支持对程序块进行加密,保护知识产权。但如果你加密后忘记了密码,连自己都打不开。建议:加密前把密码记录在安全的地方,或者只对最终交付版本加密,开发阶段不要加密。
6. 从梯形图到实际项目:一个分段加热控制的完整思路
6.1 需求拆解与控制策略
假设你要做一个分段加热控制:三个加热区,每个区有独立的温度传感器和加热器,要求按顺序启动,每个区达到设定温度后才启动下一个区,任何一个区超温则全部停止。
这个需求拆解下来,需要以下功能块:温度采集与转换、比较判断、顺序启动逻辑、超温报警与急停。梯形图实现时,可以用状态机的方式,用整数变量记录当前步骤,每个步骤对应一组输出条件。
6.2 梯形图网络的组织方式
我习惯把程序分成几个FC(功能)或FB(功能块):一个负责模拟量采集和转换,一个负责逻辑控制,一个负责报警处理。主程序OB1里只调用这些块,保持结构清晰。
在逻辑控制块里,用M位或者DB位作为步骤标志。比如M10.0表示"等待第一区就绪",M10.1表示"第一区加热中",以此类推。每个步骤的转移条件用比较指令判断温度是否达到设定值。
6.3 调试时的实用技巧
调试分段加热程序时,不要一上来就接真实加热器。先用仿真或者用小功率灯泡代替,观察输出指示灯的变化是否符合预期。博途的监控表功能可以同时监控多个变量,把温度值、步骤标志、输出状态放在一个表里,一目了然。
另外,超温保护一定要用常闭触点串联在总输出回路上,这样即使程序逻辑出错,硬件层面也能切断加热。这是我在现场学到的最重要的一课:软件保护永远不能替代硬件保护。
7. 进阶方向:梯形图之外你还需要知道什么
梯形图能解决大部分逻辑控制问题,但有些场景它并不擅长。比如复杂的数学运算、字符串处理、通信协议解析,这些用SCL(结构化控制语言)或者STL(语句表)会更高效。博途支持在同一个项目里混合使用多种语言,你可以用梯形图做逻辑,用SCL做计算,用GRAPH做顺序控制。
我个人的建议是:先把梯形图练到能独立完成一个中小型项目,再去学SCL。梯形图培养的是逻辑思维和电气思维,这是工控人的基本功。跳过梯形图直接学SCL,就像没学过走路就想跑,遇到问题时会缺乏排查的直觉。
还有一个方向是HMI(人机界面)的配合。西门子的WinCC或者精简面板,和PLC的变量连接非常方便。你可以在HMI上做按钮、指示灯、趋势图,把PLC的内部状态可视化。调试时有一个好的HMI界面,效率会提升很多。
最后说一句掏心窝子的话:PLC编程这件事,看十遍书不如动手做一遍。找个二手PLC,或者用仿真软件,把起保停、正反转、星三角、抢答器这些经典案例都亲手写一遍,遇到问题就查手册、问论坛。你踩过的每一个坑,都会变成你以后调试时的直觉。