
搞PLC的人应该都有过这么一段经历设备突然不动作了程序里看不到哪里报警监控半天发现某个中间继电器状态不对最后追到源头发现只是定时器的触点没搭对。我入门用的就是三菱FX系列从FX1N玩到FX3U期间踩过不少坑也慢慢把一些常用基本编程环节摸透了。这篇就顺着我的学习路径把FX系列里最常写的逻辑、定时器、计数器、启保停、互锁、闪烁这些基础编程环节从头拆一遍哪些指令是必须会的程序该怎么搭为什么要这么搭以及实际调试时容易忽略的细节都放在一起说清楚。如果你刚接触PLC编程或者正被FX系列的梯形图搞得一头雾水这篇文章应该能帮你省不少时间。1. 认识三菱FX第一次编程前必须先搞明白的几件事1.1 为什么入门选FX系列而不是其他品牌很多朋友问过我入门PLC选三菱还是西门子还是国产的汇川、信捷。这个问题其实没有标准答案但就我个人经验三菱FX系列对新手非常友好原因是它的指令集相对规整梯形图的思维方式和继电器控制柜几乎一一对应电工出身的人学起来几乎没有理解门槛。而西门子的STEP 7或者TIA Portal用的是数据块、函数块那套思路对没有高级语言基础的人反而容易绕进去。FX系列在小型单机设备、包装机、木工机械、小流水线上出现频率极高你学的这套东西在真实项目里能直接用上这种正反馈对学习特别重要。我最早接触的是FX1N-24MT后来项目里用FX3U-32MT比较多。FX3U相比老款的FX2N运算速度更快程序容量更大指令上也多了很多方便的功能但基础编程环节的底层逻辑是一样的。如果手头有老设备用的还是FX2N或者FX1S学的东西照样通用。建议新手直接找FX3U的资料来学因为GX Works2和GX Works3对FX3U的支持最完善网上案例也多遇到问题好搜。1.2 软元件到底是什么——把PLC看成一个配电箱我第一次打开GX Works2的时候看到一堆X、Y、M、T、C的编号完全不知道从哪下手。后来老工程师给我打了个比方一下就通了PLC本质上就是个智能化的配电箱只不过把继电器、时间继电器、计数器全部做进了芯片里。X是输入继电器对应配电箱里的按钮、限位开关、光电传感器这些外部信号编号比如X0、X1、X2接的是外部接线端子。Y是输出继电器对应配电箱里的接触器、电磁阀、指示灯这些执行元件编号比如Y0、Y1、Y2。M是内部继电器中间继电器有点像配电箱里那些只用来中转信号的中间继电器不接外部线纯粹在程序内部做逻辑中转。T是定时器就是配电箱里的时间继电器FX系列T0到T199是100ms单位的T200到T245是10ms单位的T246到T249是1ms累计型的T250到T255是100ms累计型的。C是计数器对应配电箱里的计数继电器FX3U的C0到C199是16位普通计数器C200到C219是32位高速计数器。D是数据寄存器用来存放数值数据的类似配电箱里不怎么出现但在自动化里必不可少的寄存器组。这个比喻帮我解决了一个大问题写梯形图的时候我不需要关心芯片内部怎么运作只需要把它当继电器电路来搭触点怎么串并联、怎么自锁互锁物理电路里怎么接梯形图里就怎么画。这也是三菱FX系列对新手友好最核心的一点——用已有的电工知识迁移到编程里而不是从零学一套抽象的编程范式。1.3 编程软件的安装和连接别让环境坑了第一个程序软件方面三菱FX系列常用的有两款GX Developer是老版本适合FX1N、FX2N这样老型号界面老旧但稳定GX Works2是后来主推的FX3U、FX3G都支持界面更现代编程习惯也更接近市面主流。我建议直接用GX Works2的English或者中文版都行FX3U是它支持得最好的型号。连接电脑时FX3U自带USB编程口用USB线直接连就行不用额外买编程电缆。老款FX1N/FX2N通常是圆头的编程口需要配USB-SC09-FX编程线注意这种线线缆里有一个芯片不能只看接口形状一样就乱买。连线后首先要确认COM口号对不对——在设备管理器里看端口号然后在GX Works2的“在线”菜单里选择PLC类型和串口设置很多新手第一次连接失败都是端口选错导致的。还有个容易忽略的点PLC通电后写入程序如果出线隔离或者程序卡死在某个循环里通讯也会中断。我第一次调试的时候就遇到过程序里写了死循环逻辑结果想重新写入程序时PLC一直连不上后来试了断电再上电、再快速连接才救回来。所以新写的程序不要一上来就跑复杂逻辑先在空程序里写好基础环节分段验证再加功能。2. 最先要学会的指令LD、LDI、OUT、AND、ANI、OR——梯形图的基本笔画2.1 触点指令的电气对应关系FX系列的基本指令其实极度简单就是触点串联、并联、输出口诀都能编出来LD取常开触点相当于继电器电路里的一条回路的开始端。LD X0意思是“常开触点X0作为一段程序的起点”。LDI取常闭触点相当于常闭触点作为回路起点。OUT线圈输出就是给Y、M、T、C等软元件赋值。OUT Y0相当于给输出线圈通电。AND常开触点串联相当于两个触点串联形成“与”的关系。ANI常闭触点串联即“常闭并且”的意思逻辑上相当于一个常闭触点参与串联。OR常开触点并联相当于多个触点并联形成“或”的关系。ORI常闭触点并联。用电气逻辑来看串联是“与”并联是“或”常闭是用反逻辑。这个概念弄清楚了梯形图基本就入门了。我见过不少学员卡在这里主要原因是把“常闭触点”在程序里的含义搞混——常闭触点软件上表示“这个条件为ON的时候断开这条回路”也就是“停止信号用常闭”的实际编程含义。2.2 一个按钮控制一盏灯——从最简单的输出开始用GX Works2建好工程后我写的第一个真正跑起来的程序大概是这样的X0 --|--[ Y0 ]梯形图的意思就是当X0这个按钮按下外部输入ON时Y0输出线圈得电输出点动作外部接触器吸合。松开按钮X0断开Y0也断开。这个逻辑物理上就相当于一个点动按钮直接控制接触器没有任何延缓和记忆。对应指令表是步序指令操作数0LDX01OUTY02END注意指令表里最后必须写END表示程序扫描结束。如果漏掉ENDPLC会报错程序写不进去或者运行时状态异常。这是我第一次下载程序时踩的坑——梯形图画完直接点写入结果提示“程序错误”查了半天才发现是没加END块。GX Works2默认新建工程末尾会有一个END但你如果手动删掉了就要记得加回去。2.3 串联和并联把多个条件组合起来实际设备里很少只有一个按钮控制一个输出最常见的是几个条件同时满足才动作。比如一个电机要启动需要启动按钮按下和气泵压力到位两个条件同时满足。程序是这样X0 --|--[ Y0 ] X1 --|梯形图里X0和X1串联逻辑就是“X0为ON并且X1为ON时Y0为ON”。对应指令步序指令操作数0LDX01ANDX12OUTY03END并联的情况也一样比如“手动模式或者自动模式都能启动”。X0是手动启动按钮X1是自动启动信号两个并联之后共同控制Y0。对应指令就是LD X0OR X1OUT Y0。这个逻辑初看简单但如果条件多了就容易乱我的建议是先把电气原理图画出来再逐条对应到梯形图习惯之后可以直接在脑子里映射。3. 从“瞬间动作”到“持续动作”SET/RST和自锁电路3.1 为什么需要自锁——一个按钮启停电机点动控制在实际里不够用。比如一台水泵操作工按一下启动按钮水泵就得一直转再按一下停止按钮才停。这就是“启保停”电路核心就是两个字自锁。梯形图逻辑这样搭X0(启动按钮) --|--[ Y0 ] X1(停止按钮) --| | Y0(self-contact) --| |表达成文字就是启动按钮X0按下Y0得电同时Y0自身的一组常开触点并联在X0两端X0断开之后Y0通过自己的触点继续维持回路这就是“自锁”或“自保持”。停止按钮X1用常闭触点串联在回路里X1按下回路断开Y0失电。指令表步序指令操作数0LDX01ORY02ANIX13OUTY04END新手最容易犯的错是把停止按钮写成常开LD X1结果按下停止按钮电机反而启动赶紧再按启动又停了整个逻辑是反的。为什么停止必须用常闭因为在梯形图里你用ANI常闭串联意味着X1为ON时X1处的常闭触点是断开的停止按钮是按下才变为ON所以按下时断开电路这才是停止。如果你用LD X1那是按下时通路完全反了。这个“常开常闭和物理按钮的对应关系”是入门第一道坎想通了后面就顺了。3.2 SET和RST——另一种记忆方式自锁用触点实现但程序里还有更简洁的方式SET和RST指令。SET Y0就是把Y0置成ON并保持RST Y0就是把Y0复位为OFF。同一个动作逻辑用SET/RST写法是LD X0 SET Y0 LD X1 RST Y0这样写的好处是逻辑分段清晰启动和停止互不影响程序阅读起来更直观。自锁写法呢好处是完全对应电气图纸电工师傅容易理解维修时好对图。我现在的习惯是简单控制用自锁写法多步流程或复杂状态切换用SET/RST尤其是后面做顺序控制时SET/RST几乎是必须的。注意一个细节SET和RST在同一个程序扫描周期里如果同时被触发复位优先还是置位优先FX系列实际执行时取决于程序顺序。我建议同一对线圈的SET和RST不要放在同一梯级里互相牵扯不然调试时会遇到灵异现象。最好就是用动作前后分开启动逻辑放一段停止逻辑放另一段。3.3 定时器让动作“等一下”再发生定时的需求太常见了——设备启动后先吹气延时2秒再下压或者报警后持续闪烁3秒。FX系列定时器以T开头编程时要注意它有两个部分线圈触发定时和触点定时到达后动作。举个最常见的延时启动程序X0为ON时T0开始计时设定值K30如果T0是100ms单位那么30 × 100ms 3秒。3秒后T0的常开触点导通Y0输出。指令表步序指令操作数0LDX01OUTT0 K304LDT05OUTY06END这个程序做出来之后按下X0Y0不会立刻亮等3秒才亮松开X0Y0立刻灭。这就是延时吸合。如果T0的触点用常闭LDI T0那就是延时断开——X0按下后Y0立刻亮3秒后自动熄灭。定时器时间设定值的计算方法和单位密切相关具体参看表定时器类型编号范围时间单位设定值示例100ms定时器T0~T1990.1秒K30 3秒10ms定时器T200~T2450.01秒K300 3秒1ms累计定时器T246~T2490.001秒K3000 3秒100ms累计定时器T250~T2550.1秒K30 3秒我早期写延时程序总是习惯性把定时时间K值直接按“秒”写比如延时3秒直接写K3结果实际只延时了0.3秒整个流程乱了。所以看到一个定时器第一反应应该是查它的编号范围对应的单位然后再算设定值。3.4 计数器数到次数才动作计数器C的应用也很常见比如传送带上每来3个工件挡停气缸动作一次。FX3U的计数器C0到C199是16位递增计数器计数到设定值时触点动作并用RST指令来复位。简单示例LD X0 // X0每ON一次C0加1 OUT C0 K3 // 设定计数3次 LD C0 // 当计数值达到3时C0触点ON OUT Y0 // 输出 LD X1 // 复位条件例如复位按钮按下 RST C0这里有个细节C0的复位必须用RST计数线圈OUT C0只是累计计数计数满了之后不会自动归零。如果项目里需要循环计数比如每数3次就复位重新数你要把C0的触点用来自复位自己或者用PLC的扫描周期配合一条自复位逻辑。我见过有学员只在程序里写了OUT C0 K3计数满了Y0一直亮着再也不动因为根本没写RST。4. 把这些环节组合成“套路”启保停、互锁、闪烁、红绿灯4.1 三段式程序框架启保停加互锁常用编程环节组合起来最典型的就是电机正反转控制。正反转必须解决一个问题不能正转和反转两个接触器同时吸合否则电源短路或者机械冲击。这就是“互锁”电路。框架拆解正转启动按钮X0正转接触器KM1对应Y0。利用Y0自锁。反转启动按钮X1反转接触器KM2对应Y1。利用Y1自锁。互锁Y0回路里串联Y1的常闭触点Y1回路里串联Y0的常闭触点。这样Y0吸合的时候Y1的线圈回路被Y0常闭触点断开Y1不可能同时吸合。梯形图逻辑简化描述正转支路X0(启动) 串联 Y1常闭(互锁) 串联 X2常闭(停止) 并联 Y0自锁 —— 输出Y0 反转支路X1(启动) 串联 Y0常闭(互锁) 串联 X2常闭(停止) 并联 Y1自锁 —— 输出Y1这个结构写出来之后无论按哪一边另一边都会先被切断这就是电气互锁在程序里的实现。如果用SET/RST写也可以同样要在置位Y0之前先把Y1复位掉程序上形成软件互锁并且硬件层面上接触器辅助触点最好也接成互锁双重保险。实际项目里互锁不一定只在正反转里用。凡是两个输出物理上不能同时动作的比如顶升和下降、夹紧和松开、前进和后退都应该加互锁。我见过最惨的案例就是有人没加互锁气缸的伸出和缩回线圈同时得电气的电磁阀卡在中间阀体直接报废。这个教训在入门阶段就刻进脑子里写程序时形成条件反射任何一对动作方向相反的输出先写互锁再加别的逻辑。4.2 闪烁电路用两个定时器互相触发报警灯闪烁是调试时最常拿来练手的小程序也是定时器组合的基础模板。FX里面做一个闪烁电路用两个定时器“你定时完我定时、我定时完你定时”的方式Y0灯亮同时T0开始计时。T0计时到Y0灭同时T1开始计时。T1计时到Y0亮同时T0重新开始计时。程序逻辑描述LD X0 // 闪烁总开关 ANI T1 // T1未完成时Y0为ON OUT Y0 // 输出灯 OUT T0 K10 // T0计时1秒100ms单位 LD T0 // 1秒到 OUT T1 K10 // T1计时1秒这里用X0作为闪烁功能的总使能T0计时1秒控制灯亮的时间T1计时1秒控制灯灭的时间。T1常闭串在Y0回路前端T1一旦动作Y0就断开。T0和T1互为条件形成一个方波发生器。闪烁电路的变体很多可以改成亮2秒灭1秒或者慢闪快闪两个频率切换。我调试设备时经常用它来确认输出点有没有问题——把输出直接接到一个闪烁子程序上如果Y灯一闪一闪说明PLC的输出链路没问题问题在外部接线或者执行元件。这个方法比拿万用表量还快。4.3 经典综合练习十字路口红绿灯红绿灯程序几乎是所有PLC培训机构必讲的综合项目因为它把定时器、计数器、输出、循环、互锁全部串起来了。我的训练做法是只用一个PLC本体不接外部实物在GX Works2的仿真或者拿一个灯板模拟。简化思路东西方向和南北方向各两个灯绿、红再加上黄灯。状态依次是东西绿亮、南北红亮持续20秒。东西黄亮、南北红亮持续3秒。东西红亮、南北绿亮持续20秒。东西红亮、南北黄亮持续3秒。回到状态1。实现方式就是用若干定时器接力一条主定时器链T0控制阶段1的20秒T0到时接通T1T1控制阶段2的3秒T1到时接通T2……最后一个定时器到时把所有定时器复位重新开始循环。这里必须注意复位方式。不能只复位最后一个定时器要把整条链上的定时器全部复位否则定时器编号有残留循环会乱。我习惯用ZRST指令区间复位比如ZRST T0 T5一次性把T0到T5全部清零。ZRST指令在FX系列里是区间复位指令非常常用多步联动的场合用起来比一个个RST省事得多。红绿灯练完像电梯的楼层指示、交通灯、四层电梯这些经典题目底层逻辑就都通了。它们本质上就是一堆定时器 状态标志位在循环切换没有特别高深的东西。4.4 数据寄存器初步让程序不再是死数字基本编程环节到后期必然会遇到数据传送和比较。虽然D寄存器不属于纯逻辑环节但它在FX系列里使用频率极高。比如一条包装线需要根据产品数量切换速度计数结果放在D0里当D0大于50时Y10动作切换高速。常用的传送指令是MOV格式是MOV K需要传送的数值目标寄存器。例如MOV K100 D0就是把100这个数值传送到D0。比较指令CMP格式是CMP比较值1 比较值2 输出软元件。要注意的是CMP比较结果使用的软元件范围比如CMP D0 K50 M10M10是大于、M11是等于、M12是小于这三个会被自动占用程序别的地方不能再用M10到M12否则逻辑会乱。这一块是入门阶段最后的一个台阶。之前学的都是ON/OFF逻辑到D寄存器就开始接触“数值”世界但好在MOV和CMP足够直观稍微练习就能上手。5. 调试踩坑记录为什么程序下载后“不听话”5.1 程序写入后第一次运行输出怎么不动这是我带过的人问得最多的问题。程序写对了下载也没报错但是按启动按钮Y0没有反应。排查链路应该是固定的千万不要瞎猜先看PLC是否在RUN状态。PLC面板上有个RUN/STOP拨动开关或者RUN指示灯拨到STOP状态下程序不执行输出全断。这个看起来低级却是出现频率最高的原因之一。看输入信号有没有到。用GX Works2的在线监视功能打开软元件批量监视看X0的状态是否跟着按钮变化。如果无论怎么按X0都是灰色OFF说明外部接线有问题或者传感器/按钮的公共端没接对。三菱FX输入端子通常用漏型NPN接法就是传感器输出低电平有效输入公共端接24V正极这一点接反了信号就永远进不来。再看输出点。如果X0状态正常Y0在监视里已经显示ON但外部设备不动作那就是输出端子接线、中间继电器、接触器的问题。输出端子一般是COM端和Y端Y端ON时会和COM端导通外部回路形成24V或220V回路负载才动作。最后检查外部供电。Y0灯亮了但接触器不吸合先量COM到Y0之间的电压很多情况下是外部电源没送或者中间继电器的线圈电压选错了。PLC输出点本身只是个开关不给负载供电负载电源要另外接。按这个流程排查90%的问题都能找到位置。我刚开始调试时犯的毛病就是跳着查——先怀疑程序再怀疑PLC结果到最后发现是输入COM线松了。从那以后我每次调试都按“RUN状态→输入→内部逻辑输出→外部回路”这个顺序走效率高得多。5.2 仿真器和实际PLC的差别容易造成“仿真通过但实际不行”GX Works2的仿真功能GX Simulator对学习非常有帮助但有几个坑仿真器不能模拟输入信号的抖动。实际按钮按下去可能存在几毫秒的抖动如果程序里没有消抖处理计数器可能一次按下去连跳好多次。仿真环境里输入变化是理想的不存在这种问题所以你在仿真里跑得好好的计数器程序到实机上可能计数不准确。仿真器的定时器和实际PLC也有细微差别。仿真器计时不一定实时可感一些高速脉冲捕捉类指令比如SPD、高速计数器在仿真器里根本无法运行或者表现异常。仿真器对通讯指令比如RS指令、MODBUS指令基本是没办法正确模拟的需要实际的PLC或者串口调试工具配合才能验证。我的建议是用仿真器学原理、搭逻辑但最终一定要上实际PLC验证。特别是那些带反馈信号的设备比如伺服回零、气缸到位检测这类程序不接实机永远不知道会不会有问题。5.3 用强制功能快速验证程序段实际调试中有一个非常常用的手段强制执行功能。在GX Works2的在线监视状态下鼠标右键点击某个软元件可以强制它为ON或者OFF。这个功能用来验程序特别方便。比如X0接的外部按钮坏了手头又没有备件你可以强制X0为ON程序里Y0如果正常输出那就说明程序逻辑没问题问题出在外部按钮或者接线。又比如Y1对应的外部电磁阀线圈短路导致回路保险烧了你想测试程序其他部分可以强制Y1为OFF避免输出点反复尝试导通。注意强制操作是逻辑强制不是外部电路强制。强制Y0为ON时内部逻辑上是输出线圈得电外部端子确实会导通这时候一定要确认负载侧没人干活没人伸手去摸接触器或者气缸下面安全永远是第一位的。我见过有人在强制输出时压机突然动作还好人不在设备里不然就是事故。5.4 程序分块编写和加注释是后期省时间的唯一手段新手容易犯的毛病是写完一段逻辑就急着下载试机等试通了又继续往下写写到最后整个程序一大坨一个问题绕半天下不了手。入门阶段就要养成好习惯程序分块每块加注释。FX系列程序注释用“\”或者直接在GX Works2的注释栏里写。比如“电机启动自锁”“T0延时3秒启动吹气”“正反转互锁”这些注释写在关键行旁边三个月后你自己回来看程序也能看懂当初的逻辑意图。设备维护的时候电气维修师傅拿着你的程序靠这些注释才能快速定位问题。否则程序写了2000步连你自己都忘了当初为什么这个互锁要和那个信号串联。我现在的做法是每个功能块前面放一条NOP注释行或者用段注释清楚标明这个块是干什么的、控制哪台设备、对应的操作流程是哪一步。所有功能块的输入输出信号先在脑子里理一遍再落梯形图。这样写出来的程序逻辑清晰调试起来几乎不会扯皮。收尾说说我的一点真实体会学三菱FX系列的基本编程环节说到底是学一套用逻辑符号描述物理世界的思维。从LD到OUT从自锁到互锁从定时器到计数器看似简单的指令却能搭出任何单机自动化设备的控制逻辑。我的个人体会是不要急着背指令表指令是死的逻辑是活的你只要把每一个环节的“为什么”想明白——为什么停止按钮用常闭、为什么自锁要用自己的触点、为什么正反转必须互锁——后面再学步进指令、模拟量处理、通信指令都是水到渠成的事。真到项目里写程序能把这些基础环节用得更扎实、更有条理比背多少高级指令都管用。希望这篇经验整理能帮你少走点弯路早点把三菱FX系列这把钥匙握在手里。