PLC编程核心:四大基础逻辑详解与汇川实战案例

PLC编程核心:四大基础逻辑详解与汇川实战案例
1. 这个坑是怎么踩出来的高阶指令快感背后的隐患1.1 为什么新手总想往“高”处走这些年我陆陆续续带过不少刚入行的电气工程师也在几个技术社群里回答过几百个PLC相关问题发现一个特别普遍的现象很多人学PLC上来就研究伺服运动控制、EtherCAT总线通讯、FB块封装、ST结构化文本甚至还有人拿着视觉相机与PLC的Profinet通讯案例啃得起劲可一到现场让他写一个最简单的电机启保停或者两台设备之间的时序配合他却卡住了。这事听起来离谱但真不是个例。我见过有新人把汇川H5U的轴控指令背得滚瓜烂熟能写完整的电子凸轮追剪程序却搞不清楚一个自锁回路为什么要用“自己的常开触点并联启动按钮”。有一次调试现场他写的程序里一个设备启动后因为缺少互锁两个气缸同时伸出直接把治具顶变形了。设备停下来之后他还在查数据块、查总线配置完全没意识到问题就出在最基础的逻辑上——两个输出线圈用了同一组条件却没有互相锁死。这不是能力问题是学习方向的“错位”。PLC中文叫可编程逻辑控制器台面叫“逻辑控制”本质上干的就是逻辑活什么时候通电、什么时候断电、什么时候延时、什么时候计数、什么时候跳到下一步。伺服怎么走、总线怎么传、配方怎么调这些都是在这个逻辑骨架上长出来的肌肉。肌肉再发达骨架塌了人照样站不住。1.2 高阶指令的“假需求”与基础逻辑的“真地基”为什么新手会沉迷高阶指令说白了三个原因。第一个原因是获得感强。写一个轴控指令伺服电机“嗖”地转起来看着很酷做一次总线通讯数据在触摸屏上跳出来成就感拉满。而写自锁互锁、定时器、计数器灰扑扑的看起来跟十年前的老古董设备没什么两样。人都是视觉动物天然容易被“动态效果”吸引这是很正常的心理。第二个原因是教程环境造成的错觉。现在网上的培训视频、带货课程十个里有八个在讲总线、讲伺服、讲视觉、讲高级指令。因为这些内容好展示、好截图、好做宣传。而基础的“自锁互锁”“顺序控制”讲来讲去就那点东西显得“不够高级”自然没人愿意花篇幅细讲。于是新手接收到的信息就是大家都学高阶我也得赶紧跟上。第三个原因是**“能用就行”的假自信**。很多人在学基础指令的时候只是看懂了梯形图的画法并没有真正理解背后的电气逻辑。比如定时器TON他就知道“延时接通”但不知道定时器的时钟来源、扫描周期影响、重复调用时机这些细节。等到设备上电定时器乱跳他才会发现原来自己根本没懂。但残酷的现实是现场设备百分之七十以上的故障都是基础逻辑问题。不是总线断了不是伺服参数错了而是条件的与或非关系没理清楚是互锁漏了是定时器被重复调用是状态机缺少默认分支。这些恰恰是“高阶指令学习”完全覆盖不到的盲区。所以这篇文章我就想以汇川PLC的实战视角把那些真正的地基——四大基础逻辑掰开揉碎讲一遍。文章会有原理、有梯形图思路、有现场真实踩坑案例也会告诉你这些基础逻辑怎么一步步长成高级程序。适合刚入门、入了一两年门但总觉得哪里不通透的朋友认真对照着看。2. 四大基础逻辑到底指什么汇川视角逐条拆解这里说的四大基础逻辑是哪四个先给结论自锁与互锁、定时逻辑、计数逻辑、顺序控制状态机。有人可能会说就这不就常开常闭、定时器、计数器、置位复位吗对就这些。但你别小看这四样几乎所有你能见到的设备程序不管是用汇川AutoShop写的普通逻辑还是用H5U配合EtherCAT总线伺服做的复杂产线拆到底层骨架都是这四样东西在反复组合。下面我逐条说。2.1 自锁与互锁记忆、保持、安全的第一道防线自锁解决的是“记忆”问题。一个启动按钮按下去松开之后线圈还要继续得电靠的就是自锁——把自己的常开触点并联在启动条件上。用汇川的梯形图来表达大概是这样的思路启动按钮X0常开触点并联电机接触器输出Y0的常开触点然后串联停止按钮X1的常闭触点最后驱动Y0。联动思考按下X0Y0得电同时Y0的常开触点闭合回路保持导通当X1断开时保持回路断开Y0失电。这背后的物理逻辑就是继电器控制里的“启保停电路”。PLC虽然是软件“跑”出来的逻辑但它的模型源于继电器控制学基础逻辑之前最好先把这个对应关系搞明白。互锁解决的是“安全互斥”问题。两个输出不能同时得电比如电机正转和反转、气缸伸出和缩回、两台设备不能同时动作。互锁有两种做法硬互锁在外部回路里KM1的常闭触点串联在KM2线圈回路KM2的常闭触点串联在KM1线圈回路。就算程序出问题外部触点也能把电路切断。软互锁在程序里Y0的驱动条件串联Y1的常闭触点Y1的驱动条件串联Y0的常闭触点。我在现场见过很多次程序里软互锁做了但设备还是出问题——原因是变频器或者伺服的正反转切换不能直接靠软互锁还需要考虑减速时间、抱闸时序单纯靠逻辑互锁是不够的。这个后面在问题排查章节再细说。自锁和互锁还有一个进阶形态就是用置位SET和复位RST代替自锁回路。用SET/RST写出来的程序更清晰特别是状态多的时候不会出现一大串“自己的触点并联自己”的迷宫式梯形图。但是SET/RST是一把双刃剑用得好程序干净利落用不好就是灾难。因为SET之后线圈状态是“保持”的如果下次扫描周期里你忘了RST设备就会一直处于旧状态查起问题来极其痛苦。这一点我在带新人时反复强调用SET/RST前默念三遍“谁置位谁负责复位”。2.2 定时逻辑工艺时序的节拍器定时器在PLC里就相当于设备运行的“节拍器”。什么时候该延时启动什么时候该等待稳定什么时候该报警超时都得靠定时器撑起来。汇川AutoShop里面定时器主要有TON延时接通、TOF延时断开、TP脉冲定时这几种。以TON为例当使能条件为真时定时器开始计时计时到达设定值后输出置位为真当使能条件为假时输出复位当前值清零。这个逻辑看着简单但实际工程里有很多容易翻车的地方。第一个坑是定时器编号重复调用。比如你在程序段A里用了T0做延时在程序段B里又用了T0做另一个延时。PLC扫描到程序段A时T0计时开始扫描到程序段B时T0又被重置了。最后T0的输出状态就完全不可控随机乱跳。设备一会儿动一会儿停就是你排查的头号嫌疑对象。第二个坑是定时器时长会受扫描周期影响吗。普通定时器的计时基准在汇川PLC中一般是以固定时基比如1ms、10ms、100ms来累计的。如果程序特别长扫描周期超过时基定时精度就会变差。对这种场景汇川H5U这类支持软元件定时和指令定时精度会更高可以做到规格书标称的精度水平。不过对大多数普通设备几十毫秒的误差根本不影响工艺没必要过度纠结。第三个坑是断电保持问题。很多定时器默认是掉电清零的。如果设备工艺要求“断电续跑”或“断电能记住定时进度”就必须选择带断电保持属性的定时器或者在掉电时通过其他机制把当前值存起来。这个细节做设备的人最懂——客户停电三分钟起来之后物料状态全乱了谁也受不了。实际项目中定时器最常见的搭档是“超时报警”。比如气缸伸出到位检测X2程序里给出Y3输出之后同时启动一个3秒定时器如果3秒后X2还没到位就触发报警提示操作工检查气源和传感器。这就是定时器最经典的现场用法——不光是延时还能当“监督员”。2.3 计数逻辑批量、统计与防呆的基础计数器在很多人眼里是配角觉得“数个数而已嘛”。其实计数逻辑在产线里是主角之一。最典型的场景注塑机或者压铸机每完成一次合模、注射、开模、顶出算一个循环计数加一。到了设定值比如1000模就提示保养或者换料。另一个场景是散料包装光电传感器每检测到一个产品计数器加一到设定数量就控制挡板动作完成一次打包。在汇川PLC里计数器分加计数CTU、减计数CTD、加减计数CTUD。我最常用的还是CTU加计数配合一个复位条件来清零。这里有几个工程细节是教科书一般不讲的第一计数器的响应频率有限制。普通计数器是基于扫描周期的也就是说输入脉冲信号如果太快比如电机编码器输出、高速光电普通计数器根本数不过来。这时候要么用PLC的高速计数器HSC功能要么把信号送进支持高速输入的特定输入点。汇川H5U、H3U这类机型都有高速计数功能用之前一定查清楚输入端子是不是高速通道别又把信号接到普通输入点上然后怀疑是计数器坏了。第二计数器要分清“掉电保持”和“普通”。普通计数器断电清零保持型计数器断电保持当前值。如果产线要做到“断电后恢复计数”就要选保持型或者在程序里用掉电保持的寄存器来自建计数逻辑。第三数值上限要算清楚。计数器用的寄存器位数决定最大值。比如用16位寄存器最大能计32767如果产线一天几万个产品老老实实换32位或者做“计满清零大数累加”的二段式处理否则数值溢出瞬间复位你查半天都查不出原因。2.4 顺序控制与状态机复杂流程的基本骨架如果说前三样是“砖头”那顺序控制就是“图纸”。它能帮你把复杂的工艺流程拆成一个个明确的步骤每一步干什么、下一步什么时候开始、异常了怎么处理全都在程序里写得明明白白。顺序控制的实现方式有很多种最传统的是“步进梯形图STL”在汇川的软件里习惯叫“SFC顺序功能图”也可以用“置位/复位”手动搭一个状态机还可以用ST语言写CASE结构。不管哪种形式核心思路是一致的把流程拆成若干“步”每一步有一个“激活条件”当前步激活时做该做的事满足“转移条件”后关闭当前步激活下一步。举个例子一个简单的自动注水设备初始步S0按下启动按钮转到S1打开进水阀液位低时一直注水液位高到位后转到S2关闭进水阀启动搅拌电机搅拌5秒后转到S3打开出料阀料排空后回到S0等待下一次启动。这就是一个典型的状态机。看着很简单但正是这种“一个时间只干一件事”的思维方式让程序有了“骨架”。你不会再把几十个线圈的条件搅成一锅粥而是把动作按步骤各归其位。用汇川来写一般可以用SFC语言也可以用梯形图加置位复位来搭建。我自己的习惯是小设备用置位复位写状态机大设备或者联机设备用SFC。前者灵活后者直观调试时看当前步一目了然。这里必须强调一点状态机一定要有“默认分支”和“异常分支”。什么是默认分支就是条件既不满足A也不满足B时程序要待在哪里。比如暂停键按下时不管当前是哪一步都要进入暂停步等恢复信号到了再回到原步。没有这个设计现场一按急停恢复后程序就乱了设备不知道从哪一步开始跑。什么是异常分支就是超时、报警、缺料、卡料等情况下程序跳到异常步去处理而不是卡死在当前步。很多新手写的状态机看着步进关系挺漂亮但一遇到异常就锁死原因就是只考虑了主线没考虑分支。3. 汇川AutoShop/H5U下把基础逻辑用活一个实战小项目接下来我用汇川PLCAutoShop环境手把手带你把四大基础逻辑串联起来做成一个完整的小案例。这个案例不是网上那种“烧脑算法题”就是从现场提炼出来的典型动作自动注水、搅拌、出料、报警。3.1 从继电器电路到梯形图的翻译练习在正式写程序之前我强烈建议你先做一件事把一张纸质继电器电路图“翻译”成梯形图。怎么练最简单的启动停止电路原电路启动按钮SB1常开、停止按钮SB2常闭、接触器KM线圈、KM辅助常开触点。启动按钮和KM辅助触点并联再串联停止按钮最后接KM线圈。翻译成PLC程序X0对应SB1启动X1对应SB2停止Y0对应KM线圈。X0常开并联Y0常开串联X1常闭输出Y0。就是这么直接。别小看这个翻译练习它训练的是“从电气原理到程序逻辑”的映射思维。以后遇到电箱里复杂的继电器控制你能一眼看出它实现的是什么逻辑然后原样搬进PLC比对着案例抄梯形图强一百倍。有条件的朋友找一台废旧的继电器控制柜把每个继电器回路都画一遍、对应成梯形图练上十来个典型回路正反转、星三角、顺序启动你会发现后面学定时器、计数器、状态机全都顺了。3.2 一个混合逻辑的完整案例自动注水搅拌出料假设现场有这样一个工艺需求我用最简单的I/O分配来说明输入启动按钮X0急停X1液位低检测X2低有效液位高检测X3出料门关闭到位X4常开出料门打开到位X5。输出进水阀Y0搅拌电机Y1出料阀Y2运行指示灯Y3报警灯Y4。工艺要求按下启动允许自动运行自锁若液位低且出料门关闭打开进水阀注水互锁出料门开时禁止注水液位高后关闭进水阀启动搅拌电机搅拌10秒定时搅拌结束打开出料阀放料放料至液位低关闭出料阀自动进入下一轮注水计数记录循环次数达到10次后停机保养任何时刻急停按下全部输出关闭安全互锁。这个案例四大基础逻辑全用上了。我来拆一下程序的关键段思路。第一步启动自锁急停互锁。// 伪梯形图描述 // 段1运行状态自锁 [运行标志M0] X0 启动按钮边沿置位更稳 OR M0 自保 AND NOT X1 急停 // 段2运行指示灯 [Y3] M0实际编程时我习惯用置位复位而不是纯自锁。按下X0SET M0按下X1或者常规停止RST M0。这样逻辑一眼能看懂后面加条件也方便。第二步注水控制。// 段3注水阀 [Y0] M0 // 在自动运行状态下 AND X4 // 出料门关闭到位 AND X2 // 液位低 AND NOT Y2 // 互锁出料阀不得打开这里最关键的互锁是注水阀Y0和出料阀Y2绝对不能同时开。即使X4没有到位程序也必须加上“NOT Y2”来做软互锁。现场电气回路里建议再加一组硬互锁。第三步搅拌定时。// 段4液位高后触发搅拌延时 [搅拌中标志M1] M0 AND X3 AND NOT M1 // 用TON延时断开搅拌10秒 TON(T10, M1, 10000) // 10秒 [Y1搅拌电机] M1 AND T10.Q注意这里的写法思路M1是搅拌标志液位高时置位搅拌结束T10时间到时复位。T10的使能条件就是M1这样搅拌电机转10秒后自动停。如果你用“Y1直接输出、T10并联Y1自锁”这种写法在扫描周期上虽然也能转但状态多了以后很难维护我推荐用“标志位定时器”分离的思路。第四步出料和循环计数。// 段5出料阀 [Y2] M1 AND NOT T10.Q // 搅拌结束后打开出料阀 OR Y2 // 自锁保持 AND NOT X2 // 液位低到后停止出料 // 段6循环计数 [循环计数C0] 每完成一次“低→高→低”液位变化加1计数的触发信号可以用液位低到高的上升沿来实现。我一般这样处理液位高信号X3的上升沿进入一次标志等到液位低X2再次有效就用“处于高后且复位为低”的完成信号来驱动C0加一。C0到10次后触发保养提醒把M0复位设备停在待机状态。第五步清零和报警。// 段7保养提醒 [Y4报警灯] C0 计数达到10 // 段8手动清零 X6按下RST C0完整跑下来你就能体会到一个东西一个看似复杂的“自动循环注水搅拌出料”工艺其实就是“一个状态机骨架 几个基础指令”并不需要伺服也不需要总线更不需要高级算法。这也是我想强调的核心很多产线功能基础逻辑完全足够用先把这些写熟再去碰高级指令会事半功倍。3.3 基础逻辑怎么演变成FB、ST和总线程序有人可能会问我现在学的是基础逻辑可是招聘都要求FB、ST、总线这中间怎么过渡答案是FB和ST只是“表达方式”变了核心逻辑没变。比如你学会了一个搅拌定时控制发现很多设备上都要用于是你把它封装成一个功能块FB输入是“启动”、“停止”、“定时时长”输出是“运行中”、“完成”。这个FB内部的实现仍然是用自锁、互锁、定时器。只不过把I/O换成了接口变量把那段梯形图放进了FB内部。ST语言也是同理。你用梯形图写过状态机再用ST写CASE语句其实只是换了个语法CASE state OF 0: // 待机 IF bStart THEN state : 1; END_IF; 1: // 注水 bValveIn : TRUE; IF bHighLevel THEN bValveIn : FALSE; state : 2; END_IF; ... END_CASE;你看本质还是那个状态机还是那四个基础逻辑没有变化。所以那些看上去“高”的编程能力不是空中楼阁它们全都构建在基础逻辑之上。你在基础阶段多花的时间都会在捣鼓FB、总线、运动控制时加倍还给你。很多人学高级功能学得痛苦正反馈差就是因为基础逻辑没有形成肌肉记忆。4. 现场常见问题与排查实录这几条全是学费换的这一节我写几个真实的现场案例都是跟基础逻辑直接相关的故障你调试时大概率也会碰到。4.1 定时器乱跳同一个定时器被重复使用的后果有一台半自动焊机动作流程是按下启动焊枪下降到位后焊接2秒抬起完成。程序不大但现场偶尔出现焊接时间忽长忽短有时甚至只有零点几秒就抬枪了。排查过程先检查焊机本身正常。再看程序发现梯形图里有三大段都用了T0。第一段用于焊枪下降到位后延时第二段用于另一工位吹气延时第三段用于报警闪烁。因为PLC是循环扫描的每次扫描到不同的T0调用都会重置定时器。当程序跑到最后一段再回到第一段时T0当前值被清零重计定时时长就全乱了。解决办法给每段延时分配独立定时器编号规范程序不共用定时器资源。提示定时器重复调用是新手最常见的隐形问题。写完程序后养成习惯检查一下有没有同一个定时器编号被多次使用。4.2 互锁只做软互锁伺服/变频器照样撞机有一台小型冲压设备用汇川H5U控制两个伺服轴A轴和B轴在物理上只能交替动作不能同时进给。程序里我在两个轴的使能输出和方向输出上做了软互锁双轴同时进给的逻辑条件都避免了。但实测时仍然发生了干涉报警两轴偶尔会同时动一下。后来查出来的原因伺服使能信号虽然被程序互锁但伺服驱动器的使能输入还连着一个中间继电器而中间继电器的响应时间是十几毫秒。A轴输出断开后继电器触点还没完全释放B轴输出已经接通两个轴在“窗口期”同时动作了几十毫秒。解决办法程序级互锁照做硬件回路里再加一组接触器/继电器互锁并考虑输出动作之间的延时。对于要求高的场合两个伺服轴的允许进给信号应当串入对方驱动器的使能回路做到“硬件级互锁”。简单说基础逻辑不是画在程序里就完事了还得与外部回路配合才能真正扛住安全问题。4.3 断电后数据全丢了计数/配方保持的基础处理一个包装设备每班要计一包数量达到一万包提示清理。客户反映一断电计数器归零有时候晚上停电第二天早上来一看计数没了班次统计也对不上。排查结果程序里用的计数器C0是普通计数器掉电清零。汇川PLC里普通软元件和保持型软元件是分开的要掉电保持得在软件的系统块或者PLC参数里设置对应软元件的掉电保持范围。解决办法在AutoShop的PLC参数设置中把C0这样的计数器分配到掉电保持区域或者改用保持型寄存器自建计数逻辑。同时为了防止数据写到一半断电导致不完整关键计数还可以做双份存储、校验比对。注意设备交付前把“断电保持区域”体系梳理一遍哪些掉电要记住哪些掉电要归零复位做成表格存档对后期维护很有帮助。4.4 状态机卡死没有默认分支和超时保护的代价有一台自动锁螺丝机状态流程是传送带到位→气缸下压→电批锁付→抬起→放行。试产时频繁出现“卡死”表现为设备停在中途无报警触摸屏上状态指示不动。排查过程一开始怀疑电批通讯、伺服反馈查了个遍没问题。后来打开状态机一看发现问题出在“抬起”这个状态程序里等待的标准条件是“抬起到位传感器X11有效”但现场传感器被螺丝屑盖住了信号偶尔闪断状态机没有设置超时保护也没有默认分支条件永远不满足流程就永远卡在抬起步。解决办法每个状态加超时定时器。比如气缸下压后3秒内要检测到位信号否则触发超时报警进入异常处理步画面弹窗提示。这一个改动直接解决了设备“无声无息卡死”的问题。这也是我反复强调状态机必须带“异常分支”的原因。设备不是只走理想流程的现场有无数的意外传感器闪断、气缸慢漏、物料卡滞程序设计就得提前想到“如果这一步卡住怎么办”。5. 新手入门的正确姿势个人经验向5.1 先把继电器控制图吃透再碰软件如果你接触PLC时间不超过两年我给你的第一个建议可能跟主流教程完全不同先去读电气原理图先把继电器逻辑吃透再碰软件。为什么因为PLC梯形图就是从继电器控制演化来的。你把接触器、中间继电器、时间继电器、计数继电器的回路搞明白了PLC的输入输出、常开常闭、自锁互锁、延时全是同一套逻辑。很多老工程师学PLC上手快不是因为他们聪明而是因为他们对电气柜里那一堆继电器太熟了看梯形图就像看旧相识。具体怎么练找几份典型设备的电气原理图来分析把继电器控制的动作时序写成文字再对应写成梯形图。正反转互锁、星三角降压启动、两台电机顺序启动、用时间继电器实现自动循环这四个回路吃透你的基本功就稳了。5.2 练习模板3个由浅入深的小项目光看理论没用要动手练。我推荐三个小项目难度递进全部覆盖四大基础逻辑项目一三台电机顺序启动逆序停止。要求M1启动后5秒才能启M2M2启动后5秒才能启M3停止时逆序M3先停5秒后M2停再5秒后M1停。这个项目练自锁、互锁、定时器还能顺带练状态机思维。项目二自动运料小车。小车在A、B两点间往返装满料后从A到B到B卸料5秒空车返回A装料5秒循环运行记循环次数。这个项目练位置检测、定时、计数、顺序控制几乎就是常用设备的缩影。项目三模拟产线不良品分拣。用一个传感器计产品数量每5个为一批第5个产品到位后气缸动作把不良品推出。这个项目练计数精确触发、气缸互锁、状态机恢复。做完之后你会对“批处理”逻辑有非常直观的理解。三个项目全部用汇川AutoShop完成不建议一上来就上H5U和总线。普通AC机型就够了。真正把这些案例每一行都在仿真上跑通过、在实物上点亮过再考虑学H5U、ST、EtherCAT。5.3 关于“学哪些基本指令”的最终建议我直接给你一份清单位逻辑类常开触点、常闭触点、输出线圈、置位、复位、边沿检测上升沿/下降沿。用得最多必须形成肌肉记忆。定时器类TON、TOF、TP。重点掌握TON在各种工艺里的变体用法。计数器类CTU、CTD、CTUD。重点掌握掉电保持与复位逻辑。比较指令等于、大于、小于、区间比较。用于数值判断、状态判断。顺序功能图SFC或等价的状态机写法不一定是独立指令但状态机思维必须有。别看这份清单简单。你要做的不是“认识”它们而是能在不翻手册的情况下把它写到正确的位置跟其他逻辑正确配合。这里有个笨办法但极其有效手抄。每学一个典型回路不是看而是自己在软件里重新画一遍然后删除隔天再画一遍。重复五到十遍这个回路就长在脑子里了。很多人喜欢收藏教程、看视频、看文章就是不动手画结果看完就忘这个习惯必须改。关于“要不要学ST语言”的问题我的观点是可以学但别喧宾夺主。ST在算法处理、数组操作、大型状态机上确实更高效但它和梯形图的关系不是“替代”而是“组合”。你用梯形图维护普通动作用ST处理数据和复杂逻辑混用起来效率最高。基础不好的人强行ST写出来的代码往往逻辑混乱因为语言只是外衣逻辑才是内核。写到最后我还想多提一句心得。我在带人的时候总说一句话设备越高端基础越重要。总线通讯快快不过你互锁短路伺服定位准准不过你状态跳错一步。很多新手觉得基础逻辑“不够炫”可现场的设备维护恰恰是靠这些“不炫”的东西在兜底。我在调试时遇到程序问题第一反应永远是从I/O表、从自锁互锁、从状态机开始查而不是先怀疑编译环境或者硬件算力。这个习惯帮我避开了很多弯路也希望你能从现在的学习阶段就养成。

最新新闻

日新闻

周新闻

月新闻