1. 先搞清楚这两个案例到底在解决什么实际问题
如果你刚开始接触PLC编程,看到“电机启停”和“闪烁灯”这两个案例,可能会觉得太简单、太基础。但恰恰是这两个案例,是理解PLC逻辑控制最核心的“开关”。它们解决的不仅仅是让一个电机转起来、让一个灯闪起来,而是帮你建立一套最底层的编程思维:如何用程序语言去描述物理世界的“启动-保持-停止”和“周期性动作”。
很多人学PLC不动手,只看理论,结果就是面对一个真实的控制需求时,脑子里有一堆指令,却不知道从哪里开始接线、画梯形图。杨小飞老师这两个案例之所以经典,就是因为它们剥离了复杂的工艺,直击本质:
- 案例一(电机启停):核心是理解“自锁”(OR自锁)。它解决的是“如何用一个瞬间的按钮信号,去维持一个持续的输出状态”。这是所有保持型控制的基础,比如一台设备运行、一个阀门打开、一个指示灯常亮,背后都是这个逻辑。
- 案例二(闪烁灯):核心是理解“定时器(T)的交替计时”。它解决的是“如何让输出按照固定的时间周期自动循环通断”。这是周期性动作的基石,比如报警灯闪烁、设备间歇运行、巡检周期触发,都离不开这个模式。
所以,这篇文章不是给你一堆指令表,而是带你亲手搭建这两个逻辑,并讲清楚每一个触点、线圈、定时器为什么必须这么放。我会假设你手边有一套PLC硬件(三菱FX系列或西门子S7-200 SMART这类入门机型)或者一个仿真软件(如GX Works2的仿真器),我们从头开始接线、编程、调试。
2. 动手前的准备:软硬件环境与核心概念对齐
在动手写第一行程序之前,必须把“战场”准备好。这里不讲复杂理论,只说马上要用的。
2.1 你需要准备什么
硬件(二选一):
- 真实PLC:如三菱FX3U、FX5U,西门子S7-200 SMART,欧姆龙CP1E等。这是最好的方式。
- 仿真软件(最低成本):三菱的GX Works2/3自带仿真器(GX Simulator2),西门子的STEP 7-Micro/WIN SMART也自带仿真。强烈建议初学者先用仿真软件跑通,避免接线错误导致设备问题。
软件:
- 根据你的PLC品牌安装对应的编程软件。本文以三菱GX Works2为例进行演示,因为其梯形图直观,仿真器易用。逻辑本身是通用的。
核心元件认知(就这几个,记牢):
- X:输入继电器。对应物理按钮、传感器信号。
X0就代表接在PLC第0个输入端子上的按钮。 - Y:输出继电器。对应物理接触器、指示灯。
Y0就代表从PLC第0个输出端子输出的信号。 - T:定时器。用于计时。
T0 K10表示定时器T0,设定时间为10(单位可能是100ms或1s,看PLC型号,常用100ms)。 - 常开触点:
-||-。信号通了,这个触点就“闭合”。 - 常闭触点:
-|/|-。信号通了,这个触点就“断开”。 - 线圈:
-( )-。表示输出。前面的逻辑通了,这个线圈就“得电”。
- X:输入继电器。对应物理按钮、传感器信号。
2.2 案例的物理接线想象(非常重要!)
即使你用仿真,也要在脑子里接好线:
- 电机启停:启动按钮(常开)接
X0,停止按钮(常闭)接X1。输出Y0接一个接触器,控制电机主回路。 - 闪烁灯:一个常开按钮接
X2作为总开关。输出Y1接一个指示灯。
注意:实际停止按钮通常用常闭触点接入PLC,这样按钮线断了,PLC也会认为停止信号有效,更安全。在程序里,我们用常闭触点
X1来编程。
3. 案例一:电机启停控制——深入理解“自锁”
这个案例的目标是:按下启动按钮X0,电机Y0运行;松开X0,电机保持运行;按下停止按钮X1,电机停止。
3.1 梯形图程序与逐行解析
我们直接在GX Works2里编写以下梯形图:
X0 X1 Y0 |--||------|/|------( )--| // 网络1:启动与自锁 Y0 | |--||-----------------| END // 程序结束逐行拆解,为什么这么写:
第一行逻辑(启动与自锁回路):
X0(常开):启动按钮。按下时,X0状态为ON(触点闭合)。X1(常闭):停止按钮。注意这里是常闭。未按下时,X1状态为ON(触点闭合);按下时,X1状态为OFF(触点断开)。Y0(线圈):电机输出。- 当按下
X0,当前提是X1没被按下(常闭闭合),电流(能流)从左母线流经X0、X1,到达Y0线圈,Y0得电输出。 - 关键来了:
Y0得电的同时,与X0并联的Y0常开触点也闭合了。这时,即使你松开了启动按钮X0,电流可以从左母线流经这个已经闭合的Y0触点,再经过X1,继续维持Y0线圈得电。这就是“自锁”(也叫自保持)。
停止动作:
- 当按下停止按钮
X1,其常闭触点断开,整个回路被切断,Y0线圈失电,电机停止。 - 同时,并联的
Y0触点也断开。此时即使你再松开停止按钮X1(触点恢复闭合),因为X0和Y0触点都是断开的,回路无法导通,Y0保持停止状态。必须再次按下X0才能启动。
- 当按下停止按钮
3.2 在仿真中调试与验证
光看懂不行,必须跑起来看。
- 在GX Works2中写好程序,转换(F4)后,启动仿真(工具 -> 调试 -> 模拟开始)。
- 打开“软元件监视”窗口,强制
X0为ON(模拟按下启动按钮)。你应该立刻看到Y0变为ON并保持。 - 将
X0强制为OFF(模拟松开按钮),Y0应保持ON。 - 强制
X1为ON(模拟按下停止按钮),Y0应立即变为OFF。 - 再将
X1置为OFF,Y0应保持OFF。
常见问题与排查:
- 现象:按下
X0,Y0不亮。- 排查:首先检查
X1的状态。如果你在程序里错误地将停止信号X1写成了常开触点-||-,那么在未按下时它是断开的,整个回路不通。这是新手最常犯的错误:搞混物理接线的常闭按钮与程序中的常闭触点逻辑。
- 排查:首先检查
- 现象:松开
X0后,Y0也灭了,无法保持。- 排查:100%是自锁线路没接对。检查并联的
Y0常开触点是否并在了正确的位置(必须与X0并联),并且其地址是否正确。
- 排查:100%是自锁线路没接对。检查并联的
- 现象:停止按钮
X1不起作用。- 排查:检查
X1触点是否用的是常闭-|/|-,并且串联在回路中。如果错用成常开或放错了位置,就无法切断回路。
- 排查:检查
这个案例务必练到肌肉记忆。它是后续所有复杂逻辑的“原子”。
4. 案例二:闪烁灯(振荡电路)——掌握定时器的接力赛
这个案例的目标是:按下总开关X2,指示灯Y1以1秒亮、1秒灭的周期循环闪烁;断开X2,灯灭。
4.1 梯形图程序与逻辑流分析
这里用到两个定时器T0和T1,实现交替计时。程序如下:
X2 T1 |--||------|/|------[T0 K10]--| // 网络1:T0计时回路 X2 T0 |--||------|/|------[T1 K10]--| // 网络2:T1计时回路 X2 T0 T1 |--||------|/|------||------(Y1)--| // 网络3:输出灯逻辑 END逻辑流分步解析(像看一场接力赛):
- 初始状态:
X2=OFF,所有定时器未触发,Y1=OFF。 - 启动:
X2=ON(总开关打开)。- 网络1:
X2通,T1的常闭触点初始是通的(因为T1未计时完成),所以定时器T0开始计时。设定值K10,假设定时器单位是100ms,则计时时间为10 * 100ms = 1秒。 - 网络3:此时
T0未到时间(常闭通),T1未到时间(常开断),Y1不输出,灯灭。
- 网络1:
- 第一秒(灯灭期):
T0计时进行中...- 网络3:
T0常闭仍通,T1常开仍断,Y1=OFF。
- 网络3:
- 第一秒到(触发翻转):
T0计时1秒到,其状态发生变化:T0线圈得电,其常开触点闭合,常闭触点断开。- 网络1:
T0的常闭触点(|/|)断开,T0计时停止。 - 网络2:
T0的常开触点(||)闭合,T1开始计时(同样计1秒)。 - 网络3:
T0的常闭触点断开,T1的常开触点尚未闭合,Y1状态?别急,看下一步。
- 第二秒(灯亮期):
T1开始计时。- 网络3:此时
T0常闭已断,但T1常开已闭合(因为T1线圈一得电,其常开触点瞬间闭合),所以Y1回路导通,灯亮!这里是个关键点:灯亮是由T1的启动瞬间触发的。
- 网络3:此时
- 第二秒到(再次翻转):
T1计时1秒到。T1线圈得电,其触点动作。- 网络2:
T1的常闭触点断开,T1自己停止计时。 - 网络1:
T1的常闭触点断开(但此时T0已停,无影响),更重要的是T1的常闭触点断开后,又为T0的重新启动清除了障碍(因为网络1中串联了T1的常闭)。 - 网络3:
T1的常开触点闭合(但T0常闭已断),Y1回路断开,灯灭。 - 同时,由于网络1中的
T1常闭变回闭合,T0又重新开始计时...如此循环,形成振荡。
4.2 仿真调试与参数调整
- 在仿真中写入程序,启动。
- 强制
X2为ON。你应该在监视窗口看到T0和T1的当前值交替变化,Y1的状态也跟随T1的得电状态周期性ON/OFF。 - 用波形图或时序图功能观察,可以清晰看到
Y1输出一个完美的方波。
如何改变闪烁频率?
- 修改定时器设定值
K10。例如改为K5,则亮0.5秒,灭0.5秒。 - 注意:两个定时器的设定值
K要相等,才能形成对称的方波。如果想亮3秒灭1秒,那么T0的设定值应为K30(3秒),T1的设定值应为K10(1秒),同时需要调整网络3的输出逻辑,可能要用T0的常开来驱动Y1。
常见问题与排查:
- 现象:
X2接通后,灯常亮或不亮,不闪烁。- 排查:检查两个定时器的触点是否用错。核心规则:一个定时器的常闭触点去控制另一个定时器的线圈回路,同时用自己的常开触点去触发输出或下一个动作。确保
T0和T1的常闭触点串联在对方的启动回路中。
- 排查:检查两个定时器的触点是否用错。核心规则:一个定时器的常闭触点去控制另一个定时器的线圈回路,同时用自己的常开触点去触发输出或下一个动作。确保
- 现象:闪烁周期不对。
- 排查:第一,确认定时器单位时间(看PLC手册,FX系列普通定时器T0-T199是100ms单位)。第二,检查设定值
K是否正确。第三,在仿真中监视定时器的当前值,看它是否从0累加到设定值。
- 排查:第一,确认定时器单位时间(看PLC手册,FX系列普通定时器T0-T199是100ms单位)。第二,检查设定值
- 现象:
X2断开后,灯还闪了一下才停。- 排查:这是因为
X2断开时,定时器可能正在计时。需要在T0和T1的线圈回路中都串联X2的常开触点(如程序所示),保证主开关能同时切断两个定时器的“电源”。
- 排查:这是因为
5. 从案例到实战:避坑指南与扩展思路
把两个案例独立跑通只是第一步。真正理解是能把它们组合、扩展,并应用到实际设备中。
5.1 两个经典“坑”与解决方法
“双线圈输出”冲突:
- 现象:在程序的不同位置,出现了两个或以上驱动同一个
Y线圈的指令。PLC扫描周期最后,只会执行最后一个线圈的状态,导致逻辑混乱。 - 案例:在电机启停程序中,如果你又在另一个地方用
X3单独去驱动Y0,就冲突了。 - 解决:一个输出线圈在程序中只应被驱动一次。复杂的控制逻辑应通过中间继电器(
M)进行汇合,最后再统一输出给Y。
- 现象:在程序的不同位置,出现了两个或以上驱动同一个
定时器/计数器复位问题:
- 现象:定时器计时不准,或计数器计数累加。
- 案例:在闪烁灯案例中,如果
X2断开后,T0和T1的当前值没有清零,下次启动时可能从残余值开始计时。 - 解决:在定时器/计数器线圈前串联一个常闭触点,当需要复位时,用
RST指令(三菱)或专门的复位逻辑将其当前值清零。对于简单的启停控制,像我们案例中串联X2,断开即停止计时,通常当前值会归零,但最好养成使用复位指令的习惯。
5.2 如何将案例组合应用?
实际项目往往是多个基础逻辑的组合。例如,一个带延时启动和闪烁报警的电机控制:
- 主逻辑:采用案例一的电机启停逻辑(
X0启动,X1停止,控制Y0电机)。 - 延时启动:在启动回路中,加入一个定时器
T2。按下启动按钮X0后,先让T2计时(例如5秒),T2计时到,其常开触点才接通电机Y0的线圈。 - 故障报警:假设
X10是故障信号(常开,故障时接通)。当X10接通,则触发一个类似案例二的闪烁电路(用T3、T4),驱动报警灯Y10闪烁,同时还可以驱动蜂鸣器Y11响。 - 复位:增加一个报警复位按钮
X11,用于复位报警灯和蜂鸣器,并复位闪烁用的定时器。
这样,你就把自锁、定时、振荡三个基本元素用在一个项目里了。
5.3 下一步该练什么?
当你熟练这两个案例后,建议按以下顺序深化练习:
- 变式练习:把电机启停的停止按钮
X1,从程序中的“常闭”改为“常开”,思考物理接线该如何改变?程序该如何调整?(这是理解“常开/常闭”物理与逻辑对应关系的关键)。 - 功能扩展:给电机启停增加一个“点动”功能(
X2点动按钮),即按下X2时电机转,松开就停,与自锁逻辑互不干扰。 - 参数化:让闪烁灯的亮时间和灭时间可以通过两个数据寄存器(
D)来设定,而不是固定的K值。 - 仿真到实物:如果条件允许,在真实的PLC和指示灯、按钮上复现这两个案例。你会遇到接线松动、电源问题、COM端接错等仿真中遇不到的问题,这才是真正的经验。
记住,PLC编程是“动手”的学问。眼睛看懂了,手没动过,等于没懂。把这篇文章当作操作手册,打开你的软件,从建立新工程、编写第一行梯形图、进行第一次仿真监视开始,把每一个触点的状态变化、每一条能流的走向都盯明白。这两个案例吃透了,后面学习顺序控制、数据处理、通信等高级功能,才会有一个坚实可靠的逻辑地基。