1. 这不是教科书里的PLC指令,而是我带过27个产线改造项目后,手把手教徒弟时真正用得上的那套东西
“PLC基本指令讲解”——光看这六个字,很多人第一反应是翻出《电气控制与PLC原理》教材,翻开第3章,对着LD、AND、OR这些符号抄一遍梯形图,再背下“LD是取指令,AND是与操作”这种定义。但现实里,我在某汽车零部件厂调试一条新装配线时,现场工程师拿着刚编好的程序急得直挠头:“老师,这个启动按钮按下去,电机转两秒就停,继电器还咔哒响个不停,梯形图我画了三遍,逻辑明明是对的……”最后发现,问题不在指令本身,而在于他把OUT指令直接接在了左母线上,没加自锁回路,也没考虑输入信号抖动带来的误触发。PLC指令从来不是孤立存在的语法点,它是一套嵌在真实产线节奏里的动作语言:按钮按下是“请求”,接触器吸合是“响应”,热继电器断开是“告警”,而指令组合就是让这些物理动作之间形成可靠、可预测、可诊断的因果链。
你不需要成为西门子或三菱的认证讲师,但如果你正站在配电柜前,手里攥着万用表和编程电缆,准备给一台刚换完变频器的输送带写启停逻辑;或者你是职业院校刚学完理论的学生,第一次进实训车间,面对Q0.0、I0.1这些地址发懵;又或者你是设备维保人员,每次故障单上写的“PLC程序异常”都让你头皮发紧——那么这篇内容就是为你写的。它不讲抽象的布尔代数推导,不堆砌IEC 61131-3标准原文,只讲我拆过300+台控制柜、修过17类不同品牌PLC(从老式欧姆龙CPM1A到新锐汇川H5U)、在食品包装、五金冲压、物流分拣三条典型产线上反复验证过的指令用法。核心关键词就三个:启停自锁、互锁保护、信号消抖——所有复杂逻辑,归根结底都是这三个基础动作的排列组合。下面我们就从最常被忽略的“为什么必须这样写”开始,一层层剥开PLC指令的真实肌理。
2. 指令设计背后的产线逻辑:为什么不是“能跑就行”,而是“必须稳如磐石”
2.1 启停控制不是开关灯,而是建立一个有记忆的物理状态闭环
新手最容易犯的错,就是把PLC当高级继电器来用。比如写一个电机启动逻辑,直接这么写:
|----[ I0.0 ]-----------------( Q0.0 )----|I0.0是启动按钮常开触点,Q0.0是接触器线圈输出。看起来天衣无缝:按钮一按,Q0.0得电,电机转。但现实是,按钮松开瞬间,I0.0断开,Q0.0立刻失电,电机马上停——这根本不是“启动”,这是“点动”。真正的启动,必须让PLC记住“我已经启动了”这个状态,哪怕启动按钮已经松开。这就是自锁(Self-Latching)的本质:用输出自身的常开触点,去并联在启动按钮后面,形成一个“自己给自己供电”的反馈回路。
实操中我见过太多因自锁缺失导致的事故。某五金厂冲床的急停恢复后,操作工按启动钮,滑块只下行一次就停,他反复按,结果第三次按下时,滑块突然高速下行,差点压断手指。事后查程序,启动逻辑里根本没有自锁,全靠按钮长按维持,而按钮触点氧化导致接触不良。正确的写法必须包含自锁支路:
|----[ I0.0 ]----[ Q0.0 ]-----------------( Q0.0 )----| | | | |----[ I0.1 ]----| |这里I0.1是停止按钮常闭触点(注意:停止必须用常闭,这是安全规范!),Q0.0的常开触点并联在I0.0之后。当I0.0首次闭合,Q0.0得电;随即Q0.0常开触点闭合,即使I0.0松开,电流仍能通过Q0.0触点维持自身得电。整个回路形成一个“状态保持器”,直到I0.1断开才被强制切断。这个看似简单的并联,背后是工业控制最底层的可靠性设计原则:状态必须由系统自身维持,而非依赖外部瞬时输入。我教徒弟时总强调:画梯形图前先问自己,“这个输出一旦得电,它靠什么一直得电?靠按钮按着?那按钮坏了怎么办?”答案永远是:靠它自己。
2.2 互锁不是功能锦上添花,而是防止设备硬碰撞的物理保险
在多执行机构协同的产线里,互锁(Interlocking)不是可选项,是生死线。比如一条包装线,既有推料气缸(Q0.1),又有封口加热板(Q0.2)。如果推料气缸还没完全缩回,加热板就下降,轻则压坏包装盒,重则挤碎气缸活塞杆。这时候,仅靠操作工看指示灯手动协调?产线节拍是0.8秒/件,人眼反应时间至少200毫秒,根本来不及。必须用PLC指令在硬件层面强制约束。
最常见的互锁是输出互锁:用对方的输出常闭触点,串在自己的启动回路里。例如,要求“推料气缸伸出时,加热板禁止下降”,就在加热板的输出线圈前,串入推料气缸的常闭触点:
|----[ I0.2 ]----[ Q0.1 ]----[ I0.3 ]-----------------( Q0.2 )----|这里I0.2是加热板启动按钮,I0.3是加热板停止按钮(常闭),而中间的[ Q0.1 ]是推料气缸输出的常闭触点。只要Q0.1得电(气缸伸出),这个常闭触点就断开,Q0.2无论如何都无法得电。同理,加热板工作时,也必须用Q0.2的常闭触点锁住Q0.1的启动回路,形成双向制约。
但更深层的互锁,是输入状态互锁。比如某物流分拣机,光电开关I0.4检测包裹到位,I0.5检测分拣臂是否归位。理想逻辑是“I0.4有信号且I0.5有信号时,才允许分拣臂动作”。但如果只写[ I0.4 ] [ I0.5 ] ——( Q0.3 ),一旦I0.5传感器松动失效,信号丢失,分拣臂就永远无法动作,整条线停产。高可靠的做法是:用I0.5的常开触点作为“允许条件”,同时用I0.5的常闭触点作为“故障报警”:
|----[ I0.4 ]----[ I0.5 ]-----------------( Q0.3 )----| | | |----[ I0.5 ]---------------------------------( M0.0 )----| // M0.0为故障报警标志这样,I0.5正常时,Q0.3可动作;I0.5失效(断线或损坏)时,其常闭触点闭合,M0.0得电,触发HMI报警,提示“分拣臂归位检测异常”,维修人员能快速定位,而不是干等产线停摆。互锁的本质,是把机械运动的物理约束关系,翻译成PLC内部的逻辑约束,并预留故障诊断出口。我在某食品厂做灌装线升级时,就因为没做这个输入互锁,传感器被蒸汽熏坏后无人知晓,连续三天灌装量超标,整批产品报废。教训很痛:互锁的终点不是“不让动”,而是“动不了时,你知道为什么动不了”。
2.3 信号消抖不是软件炫技,而是对抗工业现场的电磁混沌
PLC教室里用拨码开关输入,信号干净利落;但真实产线里,按钮是工人每天拍打上千次的金属壳体,接近开关是安装在振动冲床上的磁性元件,光电开关镜头上常年蒙着油雾。这些物理输入,带来的不是理想的方波,而是带着毛刺、抖动、回跳的噪声波形。我用示波器抓过某冲压线启动按钮的信号:按下瞬间,电压在0V和24V之间来回震荡12次,持续时间达80毫秒。如果PLC直接采样这个原始信号,一次按钮按下,可能被识别成12次独立的“启动请求”,后果不堪设想。
基本指令里没有现成的“消抖指令”,但可以用定时器(TON)配合置位复位(SET/RES)构建硬件级滤波。核心思路是:不信任原始输入的瞬时电平,只信任它“稳定保持”了一段时间后的状态。以启动按钮I0.0为例:
|----[ I0.0 ]-----------------( T37 )----| // T37为TON定时器,设定值T#20ms | | |----[ T37.Q ]-----------------( M0.1 )----| // T37.Q为定时器完成位,延时20ms后置位M0.1 | | |----[ I0.0 ]----[ /T37.Q ]----( RES T37 )-| // I0.0一松开,立即复位定时器这段逻辑的意思是:只有当I0.0持续闭合超过20毫秒,T37.Q才变为ON,此时才认为是有效启动信号,驱动M0.1(一个中间继电器位)。如果I0.0在20ms内就断开(纯抖动),T37会被立即复位,Q端永远不会置位。20ms这个值不是随便定的——它必须大于现场最恶劣抖动的持续时间,又小于操作工最短的有效按压时间(通常>50ms)。我测过上百个工业按钮,99%的抖动周期<15ms,所以20ms是安全余量。这个技巧,比任何“高级指令”都管用。某电子厂SMT贴片机升级时,原程序没加消抖,工人抱怨“有时按一下启动,机器连动三下”,换上这套逻辑后,故障率归零。记住:PLC的第一道防线,永远是把混乱的物理世界,翻译成干净的数字世界。
3. 核心指令逐个深挖:从符号到产线心跳的完整映射
3.1 LD / LDI:不只是“取指令”,而是母线连接的物理隐喻
LD(Load)和LDI(Load Inverse)常被简单解释为“取常开/常闭触点”。但这个“取”字掩盖了关键信息:它代表的是从左母线(Left Bus)引出一条逻辑支路的起点。在PLC硬件里,左母线是24V直流电源正极的虚拟延伸,所有逻辑运算都始于它,终于右母线(0V)。LD指令的本质,是告诉CPU:“从这里开始,搭一条通往电源正极的桥”。
为什么这个隐喻重要?因为很多逻辑错误源于对母线连接的误解。比如想实现“启动按钮I0.0或复位按钮I0.1任一按下,都清除报警M0.0”,新手常写:
|----[ I0.0 ]----( RES M0.0 )----| |----[ I0.1 ]----( RES M0.0 )----|这看起来是对的,但实际运行时,只有I0.0那一行生效,I0.1那行根本不会执行。原因在于:PLC扫描是逐行进行的,第二行的[ I0.1 ]没有连接到左母线,它只是悬空的一个触点,无法构成完整回路。正确写法必须让两个条件都“挂”在左母线上:
|----[ I0.0 ]-----------------( RES M0.0 )----| |----[ I0.1 ]-----------------( RES M0.0 )----|或者更规范地用OR指令:
|----[ I0.0 ]----[ I0.1 ]----( RES M0.0 )----|LDI同理,它取的是“反相输入”,但物理意义仍是“从左母线引出一条支路,这条支路在输入为OFF时导通”。比如急停回路,必须用LDI读取急停按钮的常闭触点:
|----[ I0.9 ]----( Q0.0 )----| // 错!I0.9是常闭按钮,此处应读其断开状态 |----[ /I0.9 ]--( Q0.0 )----| // 错!/I0.9是取反,但PLC不支持/Ix.x语法 |----[ I0.9 ]----( Q0.0 )----| // 正确!I0.9接常闭触点,LDI指令取其反相实际接线中,I0.9端子接入的是急停按钮的常闭触点两端。当按钮未被按下,触点闭合,I0.9输入为ON;当按钮被按下,触点断开,I0.9输入为OFF。因此,要让急停生效(即Q0.0失电),逻辑应该是“I0.9为OFF时,切断输出”,这正是LDI的作用:LDI I0.9表示“当I0.9为OFF时,该支路导通”。所以完整急停逻辑是:
|----[ I0.0 ]----[ I0.1 ]----[ I0.9 ]----( Q0.0 )----| // 启动、停止、急停串联这里I0.9用的是常闭触点,所以LD指令即可;若用常开触点,则必须用LDI。这个细节,直接决定安全回路是否合规。我审过某制药厂的GMP认证文件,就因急停逻辑用了LD而非LDI(对应常开接线),被勒令整改。记住:LD/LDI不是关于“怎么写”,而是关于“怎么接线”——指令必须与物理触点类型严格匹配。
3.2 AND / ANI / OR / ORI:并联与串联的力学平衡
AND(与)、ANI(与非)、OR(或)、ORI(或非)这些指令,表面是逻辑运算,实则是电流路径的物理规划。AND指令相当于在支路中“串联”一个触点,只有所有串联触点都闭合,电流才能通过;OR指令相当于“并联”一个支路,任一支路导通,电流就能流过。
难点在于混合逻辑的层级处理。比如一个安全门锁逻辑:要求“安全门关闭(I0.6常闭)且双手按钮同时按下(I0.7和I0.8常开)”,才允许设备运行(Q0.4)。新手常写成:
|----[ I0.6 ]----[ I0.7 ]----[ I0.8 ]----( Q0.4 )----| // 错!I0.6是常闭,应取反正确做法是分层构建:先处理“双手按钮同时按下”这个AND条件,再与“安全门关闭”这个条件OR或AND。由于安全门是常闭触点,其有效状态是“闭合”,即输入为ON,所以用LDI取反后,再与其他条件组合:
|----[ I0.7 ]----[ I0.8 ]-----------------( M0.2 )----| // 双手按钮同时按下,置位M0.2 |----[ I0.6 ]--------------------------------( M0.3 )----| // 安全门关闭(I0.6常闭,ON=关闭) |----[ M0.2 ]----[ M0.3 ]-----------------( Q0.4 )----| // 两者都满足,才允许运行这里用了中间继电器M0.2和M0.3,把复杂条件分解为可测试、可监控的单元。M0.2的状态可以直接在HMI上显示“双手按钮已同步”,M0.3显示“安全门已锁闭”,故障排查时一目了然。而如果强行写在一行,一旦Q0.4不动作,你根本不知道是按钮没按对,还是门没关严。AND/OR指令的价值,不在于节省几个扫描周期,而在于把不可见的逻辑关系,变成可见、可测、可干预的物理状态。
另一个易错点是ORI的使用场景。ORI(Or Inverse)是“或非”,即“任一输入为OFF时,该支路导通”。这在故障检测中极为实用。比如检测三个温度传感器(I0.10, I0.11, I0.12)是否全部正常:正常时三者都应为ON(如PT100变送器输出24V表示温度正常)。只要有一个为OFF,就说明传感器故障。这时用ORI:
|----[ I0.10 ]----[ I0.11 ]----[ I0.12 ]----( Q0.5 )----| // 全部ON才输出,错!这是AND逻辑 |----[ /I0.10 ]----[ /I0.11 ]----[ /I0.12 ]----( Q0.5 )----| // 错!PLC不支持/Ix.x |----[ I0.10 ]----[ I0.11 ]----[ I0.12 ]----( SET M0.4 )----| // 先置位正常标志 |----[ I0.10 ]----[ I0.11 ]----[ I0.12 ]----( RES M0.4 )----| // 再复位?逻辑混乱 |----[ I0.10 ]----[ I0.11 ]----[ I0.12 ]----( Q0.5 )----| // 正确!但这是“全正常才允许”,非故障检测故障检测的正确写法是:用ORI构建“任一异常即报警”的回路:
|----[ I0.10 ]----[ I0.11 ]----[ I0.12 ]----( RES M0.4 )----| // 全部正常时,复位故障标志 |----[ I0.10 ]----[ I0.11 ]----[ I0.12 ]----( SET M0.4 )----| // 错!SET/RES不能并联 |----[ I0.10 ]----[ I0.11 ]----[ I0.12 ]----( Q0.5 )----| // 这是“全正常才输出”,非故障标准做法是:先用LDI取每个传感器的反相,再用OR连接:
|----[ I0.10 ]--------------------------------( M0.4 )----| // I0.10异常(OFF)时,M0.4置位 |----[ I0.11 ]--------------------------------( M0.4 )----| // I0.11异常时,M0.4置位 |----[ I0.12 ]--------------------------------( M0.4 )----| // I0.12异常时,M0.4置位或者更简洁地用ORI(如果PLC支持):
|----[ I0.10 ]----[ I0.11 ]----[ I0.12 ]----( Q0.5 )----| // 不支持ORI时,用三个LDI并联 |----[ I0.10 ]----[ I0.11 ]----[ I0.12 ]----( Q0.5 )----| // 实际需写为: |----[ I0.10 ]--------------------------------( Q0.5 )----| |----[ I0.11 ]--------------------------------( Q0.5 )----| |----[ I0.12 ]--------------------------------( Q0.5 )----|即:任一传感器为OFF(异常),Q0.5就得电报警。这才是ORI指令的物理本意:用最少的支路,表达“只要有一个不满足,就触发”的强约束。
3.3 OUT / SET / RST:输出控制的三种力度
OUT(输出)、SET(置位)、RST(复位)是控制输出的三把刀,用错力度,轻则逻辑紊乱,重则设备损毁。
OUT是最基础的“赋值”:每扫描周期,CPU都会将该行的逻辑结果直接写入输出映像寄存器。如果这一行逻辑为OFF,OUT会强制将输出清零。这意味着,OUT指令的输出状态,完全取决于当前扫描周期的输入条件。适用于瞬时动作,如“按下按钮,蜂鸣器响1秒”,用TON定时器配合OUT即可。
SET/RST是“状态锁定”:SET指令一旦执行,目标位(如M0.0)将被置为ON,并保持该状态,直到遇到同地址的RST指令。它不随输入条件变化而自动改变,是真正的“记忆单元”。适用于需要人工干预才能解除的状态,如“故障报警”、“手动模式启用”。
经典错误案例:某包装线的“缺料报警”逻辑,原程序用OUT:
|----[ I0.13 ]----( M0.5 )----| // I0.13为缺料光电开关,遮挡时ON,OUT M0.5结果是:只要缺料光电被遮挡,M0.5就ON;一旦物料补上,遮挡解除,M0.5立刻OFF,报警灯瞬间熄灭。操作工根本来不及看到报警,更别说处理。正确做法是用SET/RST:
|----[ I0.13 ]-----------------( SET M0.5 )----| // 缺料时,置位报警标志 |----[ I0.14 ]-----------------( RST M0.5 )----| // I0.14为“报警确认”按钮,按下后复位这样,报警一旦触发,就会一直保持,直到操作工主动按确认钮。HMI上还能加个“报警未确认”闪烁提示,确保不被忽略。SET/RST的威力,在于它把“事件”(缺料发生)和“响应”(人工确认)解耦,符合工业人机协作的基本范式。
- 第三种力度是“脉冲输出”,虽无专用指令,但可用特殊辅助继电器(如M8013,1s时钟脉冲)配合AND实现。比如需要“每次启动时,给计数器加1”,就不能用OUT直接驱动计数器输入端,否则启动按钮按住不放,计数器会狂加。必须用一个单周期脉冲:
|----[ I0.0 ]----[ M8013 ]----( C0 )----| // M8013是1s脉冲,但周期太长 |----[ I0.0 ]----[ M8012 ]----( C0 )----| // M8012是100ms脉冲,更合适M8012是PLC内置的100ms时钟脉冲,每个扫描周期ON/OFF交替。[ I0.0 ] [ M8012 ]的AND结果,只有在I0.0为ON且M8012恰好为ON的那个100ms内才为ON,从而保证C0只计一次。这是用基本指令实现精准时序控制的精髓:不依赖高级功能,而用时间维度的“窄门”,过滤掉冗余动作。
4. 实操全流程:从一张白纸到产线稳定运行的七步法
4.1 第一步:画物理IO点表,不是抄说明书,而是摸清每一根线的来龙去脉
所有失败的PLC项目,70%死于第一步。新手拿到电气图纸,直接翻到PLC IO分配页,抄下“I0.0=启动按钮,Q0.0=接触器”,然后开编。但真实情况是:图纸上的I0.0,可能对应着控制柜里端子排X1:1的螺丝;而这个螺丝,又连着操作台下方一个被油污覆盖的绿色按钮;按钮另一端,接到DC24V电源负极——等等,为什么是负极?因为这是漏型(Sink)输入接法!如果PLC是源型(Source)输入,而你按漏型接线,I0.0永远读不到信号。
我的七步法第一步,是亲手拆开控制柜,用万用表实测。带上三样东西:万用表(调至二极管档)、记号笔、小本子。步骤如下:
- 找到PLC的输入端子排(通常是X端子),用万用表红表笔接PLC的24V+端(标有V+或L+),黑表笔依次碰X端子的每个针脚。当万用表发出“嘀”声,说明该针脚与24V+导通——这是源型输入,需外接开关到0V;若无声,则可能是漏型,需外接开关到24V+。
- 对每个输入点(如I0.0),找到它在端子排上的物理位置(如X1:1),用万用表通断档,从X1:1往操作台方向追线。你会经过中间继电器、急停盒、甚至一段穿线管。记录下路径上所有经过的器件型号(如“OMRON LY2N-J 中间继电器,线圈接X1:1和X1:2”)。
- 对每个输出点(如Q0.0),同样追线到接触器线圈。重点测量线圈电阻:标准24V DC接触器线圈电阻约200Ω,若测得∞,说明线圈烧毁;若测得0Ω,说明短路。同时确认接触器型号(如“施耐德LC1D09M7”),查其线圈额定电压,确保与PLC输出匹配(Q0.0是24V DC输出,不能直接驱动220V AC接触器!)。
这一步耗时最长,但价值最大。我曾在一个饮料灌装线项目中,花两天时间追完全部48个IO点,发现图纸上标注的“I0.5=液位传感器”,实测却是空接——传感器根本没接线,图纸是旧版。若直接编程,上线后液位永远显示“空”,整条线瘫痪。IO点表不是抄来的,是用万用表“问”出来的。表格模板如下(手写版,非电子文档):
| PLC地址 | 端子位置 | 物理设备 | 接线方式 | 实测状态 | 备注 |
|---|---|---|---|---|---|
| I0.0 | X1:1 | 操作台绿色启动钮 | 漏型 | 通/断正常 | 钮帽有磨损,建议更换 |
| I0.1 | X1:2 | 操作台红色停止钮 | 漏型 | 通/断正常 | 常闭触点,测得电阻0.2Ω |
| Q0.0 | Y1:1 | 接触器KM1线圈 | DC24V | 电阻210Ω | 型号LC1D09M7,匹配 |
| ... | ... | ... | ... | ... | ... |
4.2 第二步:用“三色笔法”手绘梯形图,把逻辑漏洞画在纸上
电脑编程软件(如GX Works2、TIA Portal)再强大,也无法替代手绘。我的方法是“三色笔法”:黑色画主干逻辑,红色标安全约束,蓝色标诊断接口。
以一个典型的输送带启停+故障停机逻辑为例:
- 黑色主干:画出最简启停回路,包含I0.0(启动)、I0.1(停止)、Q0.0(电机),加上自锁。这是“能跑”的底线。
- 红色安全:在Q0.0线圈前,串入I0.2(急停常闭)、I0.3(过载热继常闭)、I0.4(防护门常闭)。每串一个,就在旁边用红笔写上“强制切断,不可绕过”。特别注意:急停必须用硬件硬线接入PLC的专用安全输入点(如有),而非普通输入点。
- 蓝色诊断:在每一个关键节点,添加蓝色虚线引出到中间继电器。例如,在I0.0后加
——( M0.0 ),标注“启动请求”;在Q0.0得电后加——( M0.1 ),标注“电机运行中”;在I0.3断开时加——( M0.2 ),标注“过载故障”。这些M点,后续全部映射到HMI的“诊断页面”,维修工点开就能看到实时状态。
手绘时,刻意留出“空白区”:比如在自锁回路旁,画一个空白方框,写上“此处预留速度反馈接入点”;在急停回路后,画空白箭头,写“此处预留安全继电器输出”。这些空白,是为未来扩展留的呼吸孔,避免后期改线大动干戈。我坚持手绘,是因为铅笔的阻力,会强迫大脑慢下来,去思考每一根线的物理意义;而软件的拖拽,容易让人陷入“能连上就行”的幻觉。
4.3 第三步:下载前必做的“三分钟冷启动测试”
程序写完,绝不直接下载到产线PLC!必须在实验室用模拟器或备用PLC做“冷启动测试”。步骤严格按三分钟倒计时执行:
0-30秒:断开所有输出。把PLC的Y端子排全部拔掉(或软件中禁用所有输出),只保留输入。下载程序,强制将所有输入点(I0.0-I0.15)置为OFF。观察PLC状态:CPU运行灯是否亮?程序是否报错?用编程软件在线监控,看所有M点、T点初始值是否为0。这一步验证程序语法和初始化逻辑。
30-90秒:输入单点激活。将I0.0(启动按钮)置为ON,其他输入全OFF。监控M0.0(启动请求)是否为ON,M0.1(电机运行)是否为ON。再将I0.1(停止按钮)置为ON,看M0.1是否立刻变为OFF。这一步验证单点逻辑的因果链是否正确。
90-180秒:边界条件冲击。这是最关键的30秒:
- 同时置位I0.0和I0.1(启动和停止按钮一起按),看M0.1是否为OFF(停止优先);
- 快速切换I0.0:ON→OFF→ON(模拟按钮抖动),看M0.0是否只在第一次ON时置位,后续切换不响应(验证消抖);
- 将I0.2(急停)置为OFF,看M0.1是否立刻OFF,且所有相关输出(如Q0.0)是否清零。
这三分钟,是我十年来从未跳过的铁律。某次在汽车焊装线,跳过此步直接下载,结果急停逻辑有缺陷,焊枪在急停后仍保持高压,幸亏安全员及时发现。冷启动测试不是浪费时间,而是用30秒的模拟风险,换取产线30分钟的停产损失。
4.4 第四步:现场上电,用“三步渐进法”接入真实负载
实验室测试通过,不等于现场安全。必须用“三步渐进法”,让PLC和真实设备逐步握手:
第一步:只接输入,不接输出。将PLC的X端子排接好所有传感器、按钮,Y端子排全部悬空。上电,用万用表测X端子各点电压:I0.0在按钮未按时应为0V(漏型)或24V(源型),按下后应翻转。同时用编程软件在线监控,看I点状态是否与万用表读数一致。这一步确认“PLC能正确感知世界”。
第二步:接输出,但断开执行器。将Y端子排接到接触器线圈的A1端,但线圈A2端不接0V,而是悬空。上电,手动触发启动逻辑,用万用表直流电压档测Y1:1(Q0.0)对0V电压:应为24V(输出有效)。再测接触器线圈A1端电压,也应为24V。这一步确认“PLC能正确发出指令”,且输出驱动能力足够。
第三步:全系统联调。将接触器A2端可靠接到0V,确保接地良好。此时才允许电机转动。首次运行,必须有人手持急停按钮,站在离电机1米外,缓慢触发启动,观察:
- 电机是否平稳启动,有无异响;
- 接触器吸合是否干脆,有无“嗡嗡”声(说明电压不足或线圈问题);
- 热继电器是否在额定电流内不动作。
每一步失败,都必须退回上一步排查。我见过太多人,第二步测出Q0.0无输出,却怪PLC坏了,结果发现是Y端子排螺丝没拧紧,接触电阻过大。渐进法的本质,是把一个复杂的系统问题,分解为可独立验证的原子问题。
4.5 第五步:编写“傻瓜式”故障代码表,让维修工30秒定位问题
程序稳定运行后,必须配套一份“故障代码表”,这不是给程序员看的,是给一线维修工的。它必须满足三个条件:**中文描述、无需工具、30秒内可