西门子S7-200 SMART PLC基本指令全解析:从能流原理到实战编程框架
1. 项目概述:从“开关”到“逻辑”的跨越
如果你刚开始接触西门子S7-200 SMART PLC,面对编程软件里那一排排的指令图标,感觉像在看天书,那太正常了。我记得自己第一次打开STEP 7-Micro/WIN SMART时,也是满脑子问号,觉得这玩意儿比高级语言难多了。但后来我明白了,PLC编程,尤其是基本指令部分,它的核心不是复杂的算法,而是对工业现场“开关量”逻辑的精确描述。所谓基本指令,就是构建这些逻辑关系最基础、最直接的砖瓦。它们处理的是“通”与“断”、“是”与“否”这样的二值信号,对应着现场按钮的按下、传感器的触发、继电器的吸合。掌握好基本指令,你就拿到了打开PLC控制世界的第一把钥匙,后续的定时、计数、数据处理等功能,都是在此基础上搭建起来的。这篇文章,我就以一个老电工转型PLC编程的视角,带你彻底吃透S7-200 SMART的基本指令,我会把官方手册里冷冰冰的描述,变成现场调试中活生生的案例和容易踩的坑,让你不仅知道指令怎么用,更明白为什么要这么用。
2. 核心逻辑:触点、线圈与能流概念
在深入每条指令之前,必须建立一个PLC编程中最核心的底层逻辑模型,这能帮你从根本上理解梯形图(LAD)是如何工作的。如果你有继电器控制电路的基础,会更容易上手,但即使没有,把这个概念想通也就成功了一大半。
2.1 能流:虚拟的“电流”
你可以把PLC内部想象成有一条虚拟的“电流”,我们称之为“能流”。在梯形图中,这条能流从左边的垂直母线(想象成电源火线)出发,向右流动,经过各种指令构成的“元件”,最终到达右边的母线(想象成电源零线)或一个线圈指令。一个梯级(网络)是否能够被“导通”,就取决于这条能流能否从左至右畅通无阻地流到终点。
2.2 触点:能流的“开关”
基本指令中的“触点”指令,就是控制这条能流通断的开关。它有两种基本状态:
- 常开触点:像是一个弹起的按钮,默认状态下是断开的,能流无法通过。当它所关联的存储位(比如I0.0)的状态为“1”(ON)时,这个触点就“闭合”,允许能流通过。
- 常闭触点:像是一个被按下的按钮,默认状态下是闭合的,能流可以通过。当它所关联的存储位(比如I0.1)的状态为“1”时,这个触点反而“断开”,阻止能流通。
这里的关键在于,触点指令本身并不改变存储位的状态,它只是一个“侦察兵”,根据存储位的当前状态来决定是否让能流通过。你在编程时拖放一个常开触点I0.0,意思就是:“去检查一下输入映像寄存器I0.0这个点现在的状态是不是1,如果是,就让能流过;如果不是,就拦住。”
2.3 线圈:能流的“负载”与“写操作”
线圈指令通常是梯级的终点,是能流驱动的“负载”。最常见的线圈就是输出线圈。当能流能够成功流到某个线圈指令时,这个线圈所关联的存储位(比如Q0.0)就会被置为“1”;如果流不到,则会被复位为“0”。
所以,线圈指令执行的是“写”操作,它直接改变了PLC内部一个位的状态,进而通过输出模块影响外部设备(如指示灯、继电器)。一个简单的自锁电路梯形图:I0.0(启动)常开触点并联Q0.0(自锁)常开触点,再串联I0.1(停止)常闭触点,最后驱动Q0.0线圈。这个图描述的逻辑就是:当能流能从左母线,经过I0.0或Q0.0(前提是Q0.0之前已被置位),再经过I0.1(停止按钮没被按下,常闭触点导通),流到Q0.0线圈,那么Q0.0就被置位并保持。
注意:理解“能流”是理解所有后续复杂指令(如定时器、计数器、比较指令)的基础。即使指令本身不是简单的触点/线圈,其使能条件也遵循能流通断的原则。
3. 位逻辑指令全解析与实战应用
位逻辑指令是基本指令的基石,所有开关量控制都离不开它们。下面我们跳出手册的简单罗列,结合真实场景和常见错误来深入剖析。
3.1 标准触点与立即触点
标准触点(I,Q,M,V,S等)是我们最常用的,它们操作的是输入/输出映像寄存器。这里有一个至关重要的扫描周期概念需要厘清。
PLC的工作是循环扫描的:读输入 -> 执行程序 -> 写输出。在“读输入”阶段,PLC会把所有外部输入端子(如I0.0, I0.1…)的物理状态一次性拷贝到“输入映像寄存器”区。在接下来的整个程序执行阶段,程序里使用的I0.0,其实都是这个映像寄存器里的值,而不是实时变化的物理端子状态。同样,程序执行时对Q0.0的写操作,也只是改变了“输出映像寄存器”里的值,要到“写输出”阶段,才会一次性把所有输出映像寄存器的值送到物理输出端子上。
这就引出了立即指令的特殊性。立即触点(I或Q后面带I,如I0.0的立即触点在指令树里是常开立即)和立即线圈(如立即输出)是为了应对需要快速响应的场景。它们绕过了映像寄存器,直接读取物理输入点或写入物理输出点。
- 应用场景:例如,一个急停按钮
I0.7,要求一旦按下,必须在几个微秒内切断所有危险输出。如果你用普通的I0.7常闭触点串联在控制逻辑里,由于扫描周期的影响(通常几毫秒到几十毫秒),从按下到程序响应会有一个延迟。而使用I0.7的立即常闭触点,则可以在执行到该指令时立即读取物理I0.7端子的状态,实现最快响应。 - 实操心得:立即指令虽然快,但不能滥用。首先,它增加了程序扫描时间,因为需要额外的I/O直接访问。其次,过度使用会破坏程序基于映像寄存器状态的同步性和一致性,让逻辑变得难以分析和调试。我的经验是,只在真正的安全功能(如急停、安全门)和高速计数/脉冲输出的控制中谨慎使用立即指令,常规逻辑一律使用标准指令。
3.2 输出指令与置位/复位指令
这是最容易混淆的一组指令,它们的区别直接决定了程序的稳定性和可靠性。
- 输出指令:就是普通的线圈
=。它的逻辑很简单:本扫描周期,能流能流到我,我就把关联位置1;流不到,我就把它置0。它是瞬态的,每个扫描周期都根据能流情况刷新一次状态。 - 置位
S/复位R指令:它们具有保持(锁存)特性。当能流到达置位指令时,它将关联的位(或一段连续的位)置1,并且即使下一扫描周期能流消失,这个位也保持为1,直到有能流到达对应的复位指令将其置0。复位指令同理,一旦执行,位被清0并保持。
核心区别与选用原则:
- 自锁电路:这是最经典的案例。用普通线圈实现自锁,必须在梯级里用自身的常开触点并联在启动条件上。而用置位指令实现自锁,启动梯级里只需要对目标位
S,停止梯级里对其R即可。后者逻辑更清晰,尤其是对于需要多处启动、停止的设备,用S/R指令可以分散在不同网络里,程序结构更灵活。 - 状态保持:电机运行标志、设备报警信号、模式选择状态等,这些需要在PLC断电重启后(如果有电池或电容保持)或条件消失后依然保持的状态,必须使用
S/R指令。如果你错误地使用了普通线圈,一旦启动条件断开(比如按钮松开),线圈立刻失电,状态就丢了。 - 顺序控制:在顺序功能图(SFC)或步进顺序控制中,当前步激活用
S指令,转移到下一步时,除了S下一步,还必须R当前步。用普通线圈很难实现这种互锁和状态转移。
踩坑记录:我曾调试一台设备,手动模式下点动按钮控制气缸动作。最初用了普通线圈,发现按钮必须一直按着气缸才动,一松就回。这显然不对,因为手动点动通常希望按一下,气缸伸出并保持;再按一下,气缸缩回并保持。这就是典型的双稳态(乒乓)控制,必须用
S/R指令来实现。将程序改为:点动按钮上升沿触发,用一个中间位M0.0的常闭触点去置位Q0.0(伸出)并复位Q0.1(缩回);同时用M0.0的常开触点去置位Q0.1并复位Q0.0。完美实现了点动切换功能。
3.3 边沿检测指令
边沿检测是处理按钮、传感器信号时防止误动作的利器。S7-200 SMART提供了P(上升沿)和N(下降沿)指令。
- 原理:它比较的是“本次扫描”和“上一次扫描”时指定信号的状态。以上升沿
P为例,只有当信号从上次扫描的0变为本次扫描的1时,它才会在本周期输出一个扫描周期的能流脉冲。 - 关键细节:每个边沿检测指令都需要关联一个位存储器(如
M0.0)来存储“上一次扫描”的状态。这个位必须唯一,不能重复使用,否则逻辑会混乱。在软件中,你拖入一个P指令,它会自动弹出一个对话框让你分配这个存储位。
实战应用:
- 单按钮启停:这是经典面试题。用一个按钮
I0.0控制一盏灯Q0.0的亮灭。按下亮,再按灭。实现方法很多,边沿指令是最清晰的一种。网络1:I0.0的上升沿P触发一个中间位M0.0一个扫描周期。网络2:用M0.0去触发Q0.0的状态取反(可以用异或逻辑,或者用M0.0去置位/复位Q0.0,但需配合Q0.0的常开/常闭触点做判断)。 - 计数触发:流水线上产品计数,光电传感器
I0.2每感应到一个产品会导通一段时间。如果你直接用I0.2的常开触点去触发计数器CU端,那么传感器持续的导通状态会让计数器在一个扫描周期内累加很多次。必须在I0.2后面串联一个上升沿指令,确保每个产品只产生一个计数脉冲。 - 避免初始化误动作:设备上电时,如果某个按钮
I0.3恰好是按下状态(常开触点闭合),而你的程序里直接用I0.3去启动一个动作,那么一上电就会误启动。如果在启动逻辑前串联一个I0.3的上升沿指令,就可以避免这种上电初始化时的误触发,因为上电第一次扫描,没有“上次状态”的比较,不会产生上升沿脉冲。
4. 定时器与计数器:时间与数量的度量
掌握了位逻辑,你就能搭建静态的逻辑关系。而要让设备“动”起来,按时间顺序或根据数量进行控制,就必须引入定时器和计数器。
4.1 定时器指令深度剖析
S7-200 SMART有三种定时器:TON(通电延时)、TOF(断电延时)、TONR(保持型通电延时)。选型错误是新手常犯的错。
1. TON(通电延时定时器)
- 工作逻辑:当使能端
IN为1时,定时器开始计时,当前值Txxx(如T37)从0递增。当当前值达到预设值PT时,定时器位Txxx变为1(常开触点闭合,常闭触点断开)。只要IN为1,定时器位就保持为1。当IN变为0时,定时器立即复位,当前值清零,定时器位变为0。 - 典型应用:电机星三角启动的星形运行时间控制。按下启动按钮
I0.0,IN得电,定时器T37开始计时,同时电机星形启动。计时到预设值(如5秒)后,T37触点动作,切断星形接触器,接通三角形接触器,完成转换。如果中途按下停止按钮I0.1,IN失电,T37立即复位,为下次启动做准备。 - 参数设置:预设值
PT是时间基数(分辨率)的倍数。S7-200 SMART定时器的时间基数有1ms、10ms、100ms三种,由定时器号决定(如T32为1ms,T33-T36为10ms,T37-T63为100ms)。若需要定时5秒,使用100ms基数的T37,则PT应设为50(50 * 100ms = 5000ms)。
2. TOF(断电延时定时器)
- 工作逻辑:当使能端
IN从1变为0时,定时器开始计时。在计时过程中,定时器位Txxx保持为1。当当前值达到预设值PT时,定时器位才变为0。如果在计时过程中IN又变为1,则定时器立即复位(当前值清零,定时器位置1)。 - 典型应用:设备停止后的冷却风扇延时关闭。当设备运行信号
Q0.0为1时,风扇Q0.1直接运行。当Q0.0变为0(设备停止),TOF定时器T38开始计时,风扇继续运行。计时到(如30秒)后,T38位变0,风扇停止。如果中途再次启动设备(Q0.0变1),风扇立即恢复运行,定时器复位。 - 常见错误:误用TON代替TOF。比如上述场景,若用TON,逻辑是:设备停止(
IN=0)时定时器不工作,其位为0,风扇无法运行。完全无法实现延时关闭功能。
3. TONR(保持型通电延时定时器)
- 工作逻辑:当
IN为1时,开始累积计时,当前值增加。当IN变为0时,当前值保持,不会清零。下次IN再为1时,在当前值基础上继续累加。只有当当前值达到PT时,定时器位才置1。定时器位一旦置1,只能用复位指令R才能将其清零,同时当前值也清零。 - 典型应用:记录设备的总运行时间或电机的累计通电时间。用一个运行标志
M10.0驱动TONR定时器T5的IN端,PT设为一个很大的值(如360000,对于100ms基数是10小时)。再用一个比较指令,当T5当前值大于等于36000(1小时)时,将某个累计小时数VD100加1,同时用复位指令R复位T5,重新开始计时。这样就实现了运行小时数的累计。 - 注意事项:TONR的当前值具有断电保持功能(如果存储器区设置了保持),可以用来实现断电后继续计时。而TON和TOF的当前值断电后丢失。
4.2 计数器指令应用精讲
计数器用来对脉冲信号进行计数。S7-200 SMART有CTU(加计数器)、CTD(减计数器)和CTUD(加减计数器)。
1. CTU(加计数器)
- 逻辑:
CU端每检测到一个上升沿,当前值Cxxx加1。当当前值大于等于预设值PV时,计数器位Cxxx置1。R端为1时,计数器复位(当前值清零,位清零)。 - 应用:产品包装数量控制。光电传感器
I0.4每检测到一个产品,发出一个脉冲给CU。当当前值达到预设包装数量(如12)时,计数器位C10置1,触发打包机动作Q0.2,同时用C10的常开触点驱动复位端R,为下一箱计数做准备。 - 要点:
R的优先级最高。即使正在计数,只要R为1,计数器立即清零。通常用计数器位自身或下一个工序的启动信号来复位计数器,避免累计。
2. CTUD(加减计数器)
- 逻辑:
CU上升沿加1,CD上升沿减1。当前值大于等于PV时,计数器位置1;当前值小于等于-1时,计数器位置位(通常用于特殊指示,如Cxxx的常闭触点)。R端复位。 - 应用:仓库进出库物料统计。入库传感器
I0.5接CU,出库传感器I0.6接CD。预设值PV设为仓库容量上限。当当前值>=PV时,C20置1,触发“仓库满”报警Q0.3。当当前值<=0时,C20的常闭触点断开,触发“库存空”报警Q0.4。R端可由管理员在盘点后手动清零。
实操陷阱:计数器的
CU/CD端必须接边沿信号!如果你直接把一个持续为1的信号(比如一个按钮的常开触点)接在CU上,那么每个扫描周期PLC都会认为有一个上升沿(从0到1),计数器会疯狂累加,速度取决于扫描周期。所以,务必在传感器信号后串联一个上升沿指令P,确保一个物理事件只产生一个计数脉冲。
5. 比较、移位与循环指令
这些指令开始涉及对数据的操作,让逻辑控制变得更加灵活和强大。
5.1 比较指令
比较指令用于比较两个数值(字节、整数、双字、实数)的大小或相等关系。它在梯形图中以触点形式出现,相当于一个条件开关,比较结果为真则触点“闭合”,允许能流通过。
- 类型:
==(等于)、<>(不等于)、>=(大于等于)、<=(小于等于)、>(大于)、<(小于)。 - 数据格式:必须注意数据类型匹配。比较整数
IW0和VW10,用==I;比较双字VD100和常数500000,用>=D;比较实数(浮点数)VD200和VD204,用<R。数据类型选错,比较结果毫无意义。 - 应用场景:
- 模拟量报警:一个温度值
AIW0采集后转换为工程量存在VD0中。可以用>=R指令比较VD0和报警上限VD4(如80.0),输出一个报警位M1.0。 - 步进控制:结合计数器,实现多步流程。例如,C30计数当前步骤,用
==I指令比较C30当前值和常数1、2、3…,分别激活不同的工艺步骤。 - 权限判断:输入一个密码
VW10,与预设密码VW12比较,相等则M2.0置位,允许进入管理模式。
- 模拟量报警:一个温度值
5.2 移位与循环指令
这类指令用于对字节、字或双字的数据位进行移动,在流水线控制、状态队列、数据打包等场景非常有用。
- 移位寄存器指令:这是S7-200 SMART中一个非常独特且强大的指令。
SHRB指令将一个位值移入一个位队列(如VB0开始的N位),同时队列另一端移出。它有DATA(移入位)、S_BIT(队列最低位地址)、N(队列长度和方向,正为左移,负为右移)三个参数。- 应用:流水线工件位置跟踪。假设一条5个工位的流水线,在入口有传感器
I0.7检测工件进入。定义一个5位的移位寄存器,从VB0的V0.0到V0.4。I0.7的上升沿触发一次SHRB指令,DATA端接I0.7(表示有工件进入),S_BIT为V0.0,N=5。这样,V0.0到V0.4就依次代表了5个工位是否有工件。当V0.4为1时,表示工件到达最后一个工位,触发加工动作Q0.5。
- 应用:流水线工件位置跟踪。假设一条5个工位的流水线,在入口有传感器
- 字节/字/双字移位指令:
SHL_B,SHR_W等,将整个数据单元的位向左或向右移动,空出的位补0,移出的位丢失。- 应用:简单的跑马灯控制。将一个字节
QB0(控制8个灯)初始值设为1(00000001)。用一个定时器每秒产生一个脉冲,触发一次SHL_B指令,将QB0左移一位。这样QB0的值会依次变为2(00000010)、4(00000100)、8…,实现单个灯逐一点亮的效果。移动到最高位后,需要额外逻辑将其复位或改为右移。
- 应用:简单的跑马灯控制。将一个字节
- 循环移位指令:与移位指令类似,但移出的位会从另一端补回来,数据不会丢失。
- 应用:需要循环显示或轮询的场景。
经验之谈:移位寄存器指令
SHRB理解起来有点绕,但一旦掌握,在顺序控制和状态跟踪上极其高效。调试时,建议在状态图表中监控整个位队列(如VB0的二进制格式),直观地看数据是如何一步步移动的,这比干想程序逻辑要快得多。
6. 程序控制指令与结构化思维
基本指令的最后一部分,是管理程序执行流程的指令。它们能让你写出结构更清晰、更易于维护的程序。
6.1 跳转与标签指令
JMP和LBL指令配合使用,实现程序的无条件或有条件跳转。当JMP指令所在的梯级导通时,程序将跳转到指定标号LBL处继续执行,中间的代码被跳过。
- 用途:
- 模式选择:手动、自动、调试等不同模式,对应完全不同的逻辑。可以用一个模式选择开关
I1.0,当其为1(手动模式)时,跳转到手动程序段LBL 1;为0时,跳转到自动程序段LBL 2。这样避免了用大量常开常闭触点去互锁两段程序,使主程序非常简洁。 - 错误/急停处理:当急停信号
I1.1有效时,用一个JMP指令直接跳转到程序的末尾或一个紧急处理模块,跳过所有正常的设备控制逻辑,直接执行停机和安全输出。
- 模式选择:手动、自动、调试等不同模式,对应完全不同的逻辑。可以用一个模式选择开关
- 严重警告:跳转指令必须成对使用,且不能从主程序跳转到子程序内部,或反之。跳转范围必须在同一个程序块(如主程序OB1)内。滥用跳转会破坏程序的线性扫描特性,导致逻辑混乱,难以调试,被称为“面条代码”。我的原则是:除非是明显的、大块的功能分支(如模式切换),否则尽量少用或不用跳转。
6.2 子程序调用指令
CALL指令用于调用子程序(SBR)。这是PLC编程走向结构化的关键一步。
- 优势:
- 代码复用:将重复的功能(如气缸控制、电机启停、报警处理)封装成子程序。在主程序中,只需用不同的参数(如气缸编号、电机接口地址)去调用它。极大减少了代码量,修改功能时只需改一个地方。
- 逻辑清晰:主程序变得非常简洁,像一本书的目录,只有一系列
CALL指令,一目了然地知道设备按什么流程执行了哪些功能。 - 便于调试:可以单独测试和调试每个子程序,问题容易定位。
- 参数传递:S7-200 SMART的子程序支持带参数调用。在子程序接口区可以定义输入(IN)、输出(OUT)、输入-输出(IN_OUT)和临时变量(TEMP)。这是实现通用功能块的基础。例如,创建一个“阀门控制”子程序,输入参数有“阀门开命令”、“阀门关命令”、“开到位信号”、“关到位信号”,输出参数有“阀门开输出”、“阀门关输出”、“阀门故障”。这样,控制十个阀门,只需要调用十次这个子程序,传入不同的IO地址即可。
- 局部变量:子程序内部应尽量使用局部变量(L地址),避免滥用全局变量(M、V地址)。局部变量的生命周期仅在子程序执行期间,不会产生意外的地址冲突,是编写高质量、可移植子程序的必备习惯。
6.3 结束与看门狗指令
END指令:表示主程序结束。在S7-200 SMART中,通常由软件自动管理,不需要手动添加。早期有些编程习惯会在主程序末尾加END,现在已非必需。STOP指令:当条件满足时,使PLC从RUN模式切换到STOP模式,所有输出禁用。此指令极其危险,一般只用于严重故障且无法自动恢复的场合,比如关键部件断裂、安全系统失效。正常的生产控制逻辑中应避免使用,否则可能导致生产意外中断。WDR(看门狗复位)指令:看门狗定时器是PLC内部的一个安全机制,如果程序扫描周期超过预设时间(默认150ms),PLC会认为程序跑飞或陷入死循环,从而自动停机。在程序中有特别长的循环或通讯等待时,扫描周期可能超时。此时需要在循环内适当位置插入WDR指令,复位看门狗定时器,告诉PLC:“我还活着,程序在正常执行,只是这次循环有点长”。使用需极其谨慎,必须确保在插入WDR指令后,程序最终能跳出长循环,否则会屏蔽真正的程序故障。
7. 实战编程框架与避坑指南
掌握了所有指令,就像拥有了各种工具。但如何用这些工具盖起一座坚固的房子(程序),还需要一个良好的框架和施工经验。
7.1 推荐的程序组织结构
一个结构清晰的主程序通常按以下顺序组织网络:
- 网络1-10:初始化与模式选择。上电初始化、运行模式(手动/自动/单步)选择、总启停控制。这里多用
S/R指令设置状态标志。 - 网络11-30:手动子程序调用。根据手动模式标志,调用各个设备的手动控制子程序。手动程序里通常是简单的点动、寸动逻辑。
- 网络31-100:自动逻辑核心。这是程序的主体。建议采用“状态步进”或“顺序功能图”的思想。用一个步计数器或一组状态位(
M区)来代表设备的当前工作步。每一步里,完成特定动作(置位/复位相应输出),并判断转移到下一步的条件(传感器信号、定时器到等)。条件满足后,复位当前步,置位下一步。这种结构逻辑清晰,易于调试和扩展。 - 网络101-120:报警与故障处理。集中处理各类传感器故障、超时报警、急停等。报警信号应使用置位指令锁存,并有明确的复位按钮逻辑。
- 网络121-130:输出汇总与互锁。这是最后一道安全屏障。无论前面逻辑如何,在这里对所有最终输出线圈
Q进行最终裁决。例如,加入急停总开关的常闭触点、安全门信号、过载信号等硬性互锁条件。任何输出线圈,其最终控制逻辑中必须串联急停信号,这是安全规范。 - 网络131-150:指示灯与HMI信号更新。将设备状态、报警代码、当前步骤等映射到特定的输出点或存储器供触摸屏显示。
7.2 常见问题与排查技巧实录
问题:输出点
Q0.0偶尔闪烁或不稳定。- 排查:首先在线监控
Q0.0的线圈和所有能控制它的触点、中间位。很可能存在多路逻辑(双线圈)驱动。即在同一扫描周期内,有两个或以上的梯级都对Q0.0进行了写操作(=、S、R)。PLC以最后一个写入的网络为准,结果不可预测。解决方案:确保每个输出点只在一个地方被最终驱动(输出汇总网络),其他逻辑只操作中间标志位M。
- 排查:首先在线监控
问题:定时器不到时间就动作,或者到了时间不动作。
- 排查:
- 不到时动作:检查使能端
IN是否在计时期间发生了抖动或中断。检查预设值PT设置是否正确(注意时间基数)。对于TONR,检查是否被意外复位。 - 到时不动:最常见的原因是定时器位被用于驱动自身复位。例如,网络1:
I0.0启动T37计时;网络2:T37常开触点去复位T37。这样T37位一置位,在同一个扫描周期内就被复位了,你根本看不到它ON的状态。解决方案:用定时器位去触发一个中间位M,再用M的常开触点,并在下一个扫描周期去执行复位或下一步动作。
- 不到时动作:检查使能端
- 排查:
问题:计数器计数不准,数量远多于实际。
- 排查:99%的原因是
CU端没有使用边沿信号。用状态图表监控CU端的信号,如果发现它是一个持续为ON的状态,那就证实了。解决方案:在传感器信号后必须加上升沿指令P。
- 排查:99%的原因是
问题:子程序里的逻辑似乎没执行。
- 排查:首先确认主程序中是否调用了该子程序(
CALL指令)。其次,检查子程序的局部变量与全局变量是否混淆。例如,子程序里用L0.0作为中间变量,但你在主程序监控时却盯着M0.0。解决方案:在线编程时,可以打开子程序块,直接监控其内部的局部变量状态。
- 排查:首先确认主程序中是否调用了该子程序(
问题:程序下载后,输入点有信号但程序没反应。
- 排查:首先检查PLC是否处于RUN模式。然后,打开状态图表,强制给输入点
I0.0写1,看程序逻辑中的I0.0触点是否变为绿色(导通)。如果不通,检查程序是否有语法错误阻止了编译?或者CPU是否处于STOP状态?终极技巧:善用“程序状态”监控功能,它能以颜色高亮显示能流的通断,是调试逻辑最直观的工具。从前往后,一步步追踪能流在哪里断开了,问题就一目了然。
- 排查:首先检查PLC是否处于RUN模式。然后,打开状态图表,强制给输入点
写PLC程序,尤其是基本逻辑部分,是一个将物理世界的要求翻译成严谨的布尔代数的过程。它不需要多么高深的数学,但需要极致的细心和逻辑性。每一个触点、线圈、定时器、计数器都不是孤立的,它们在一个扫描周期内被有序地扫描执行,周而复始。理解这个循环,理解能流的概念,然后像搭积木一样,用这些基本指令去构建你想要的控制逻辑,从简单的启保停,到复杂的顺序流程。调试时遇到的几乎所有古怪问题,最终都可以归结为对某个指令特性理解不透彻,或者对扫描周期、能流通断的把握不到位。多写,多调,多踩坑,把这些基本指令变成你条件反射般的工具,后续学习功能指令、模拟量、通讯时,你会发现底层逻辑都是相通的。
