
1. 项目概述从梯形图到SFC的思维跃迁干了这么多年自动化从最早拿着螺丝刀对着继电器柜子改线到后来在电脑上拖拽梯形图再到如今各种高级语言和结构化文本我最大的感触就是编程思维的进化才是工程师能力提升的核心。今天要聊的“PLC实训 — SFC编程”乍一看像是个教学课题但它的内核其实是解决复杂顺序控制项目时从“点对点连线”到“流程化架构”的思维范式转换。很多刚接触PLC的朋友甚至一些有经验的工程师习惯了梯形图的直观一遇到几十步、带分支选择、有并行流程的设备控制就头大程序写得像一团乱麻后期维护更是噩梦。SFC或者说顺序功能图就是来治这个“病”的。简单说SFC不是一种新的PLC指令而是一种图形化的编程语言标准它把复杂的顺序过程分解成一个个清晰的“步”和“转移条件”。你可以把它理解为给设备动作写剧本每一幕步里角色输出做什么演完了满足什么条件转移才能进入下一幕。这对于像装配线、包装机、物料处理系统这类有严格步骤顺序的设备简直是量身定做。它让程序的逻辑结构一目了然调试时你能精准定位卡在哪一步修改时也只需动局部而不用在成百上千条梯形图网络里大海捞针。这次实训咱们就抛开那些枯燥的理论定义直接上手用最接地气的方式看看怎么把一个典型的“三级传送带启停控制”需求从梯形图的混沌中解放出来用SFC梳理得明明白白并最终在PLC里跑起来。2. SFC核心概念与编程环境准备在动手画图之前必须把SFC里的几个“零件”搞清楚不然就像拼乐高不认识积木一样。这套方法论的核心构件就三个步、转移、有向连线。2.1 理解SFC的三大核心元素步这是SFC的基本单位代表控制流程中的一个稳定状态。在这一步里设备执行某些特定的动作比如“气缸伸出”、“电机正转”、“加热器开启”。步分为初始步和活动步。初始步是系统启动后的起点通常用双线框表示活动步则是当前正在执行的步。一个关键特性是步是“记忆”的一旦被激活它会一直保持激活状态直到后续的转移条件满足它才会被后续的步取代而关闭。这完美对应了设备运行中“保持”的状态。转移这是步与步之间的“开关”或“门槛”。它用一个短横线表示旁边会标注转移条件。这个条件通常是一个或一组布尔逻辑比如“传感器X检测到到位”、“定时器T1时间到”、“按钮Y被按下”。只有当连接在当前活动步之后的转移条件为真时控制流程才能从当前步跃迁到下一步。转移是“瞬时”的条件满足的瞬间上一步关闭下一步开启。有向连线就是带箭头的线它指明了步与步之间、步与转移之间的连接顺序和方向。它定义了流程的路径。把这几个元素组合起来就构成了SFC的主干步 → 转移 → 步 → 转移 …这种“步-转移”的交替结构是SFC最经典的单序列形式。但实际项目远不止这么简单所以SFC还定义了三种基本结构来控制流程的分支与合并选择序列一个步之后有多个不同的转移分支根据不同的条件选择其中一条路径执行。就像走到一个岔路口根据路牌条件决定向左还是向右。并行序列一个转移条件满足后可以同时激活多个后续的步这些步代表的动作是同时进行的。比如“启动”按钮按下后“输送带运行”和“指示灯亮”可以同时开始。循环序列通过转移条件使流程跳回之前的某一步实现重复运行。这是实现自动循环生产的核心。理解了这些再看一个SFC图你就不会再觉得它是一堆莫名其妙的方框和线条了而是一个有严格语法和语义的设备动作流程图。2.2 主流PLC的SFC编程环境搭建理论懂了得找个地方实践。不同品牌的PLC其SFC编程的实现方式和名称略有不同但核心理念相通。这里以市场占有率极高的西门子Siemens和三菱Mitsubishi为例说说怎么进入SFC的“创作间”。西门子TIA Portal平台针对S7-1200/1500系列在博途TIA Portal里西门子将SFC的概念集成在了“GRAPH”语言中。这是一种基于SFC标准但功能更丰富的顺序控制语言。新建一个函数块FB将其语言选为“GRAPH”。打开后你会看到一个非常直观的界面左侧是导航树中间是SFC图形编辑区右侧是动作和条件编辑表。在GRAPH里“步”被称为“顺控器步”你可以直接拖拽步和转移符号到编辑区进行连接。它的强大之处在于可以为每一步详细定义“动作”比如置位一个输出、启动一个定时器并且可以指定动作执行的类型如步激活时执行一次、步活动期间一直执行等。条件编辑则使用熟悉的LAD梯形图或SCL结构化文本来编写转移逻辑。GRAPH还提供了完善的调试视图可以实时监控当前活动步和转移条件的状态这对排查问题至关重要。三菱GX Works2/3平台针对FX、Q系列三菱的软件中SFC编程是作为一个独立的“SFC图”功能存在的。在GX Works2中你需要新建一个“结构化工程”然后在程序部件中新建“SFC图”。它的编辑方式更贴近标准的SFC图形符号通过工具栏选择“块”、“步”、“转移”等元素进行绘制。步的动作和转移条件则需要通过“内置梯形图”来编写。也就是说你画好SFC的骨架然后双击每一步或每一个转移会弹出一个梯形图编辑窗口让你在里面填写具体的输出线圈、定时器指令或逻辑判断。这种方式将流程与逻辑实现分离结构非常清晰。GX Works3作为新一代软件界面更现代化但核心逻辑一致。注意无论用哪个平台一个关键习惯是为每一步和每一个转移条件起一个有意义的名称比如“Step1_ConveyorStart”而不是“S1”。这在程序复杂后对于阅读和维护的价值是无可估量的。3. 三级传送带控制从需求到SFC方案设计好了工具备齐概念清晰现在我们来啃一个经典的实训案例三级传送带顺序启停控制。这个案例麻雀虽小五脏俱全涵盖了单序列、等待、顺序启动、逆序停止等核心逻辑是理解SFC优越性的绝佳样板。3.1 控制需求与梯形图思路的局限先明确工艺要求系统有三条传送带按物料流动方向记为B1最前级、B2中间级、B3最后级。启动顺序为避免物料在B2和B1上堆积启动时必须按逆物流方向即先启动B3延时T1秒后启动B2再延时T2秒后启动B1。停止顺序停止时为了把线上物料清空必须按物料流动方向顺序停止即先停B1待B1上物料全部运走可通过延时T3秒或传感器判断再停B2最后停B3。有总启动和总停止按钮。任何一级传送带故障所有传送带立即停止。如果用传统的梯形图来写这个程序你会怎么写常见的思路是用启动按钮置位一个总运行标志然后用这个标志和一系列定时器去依次触发B3、B2、B1的启动。停止时用停止按钮复位总运行标志再同样用定时器链去依次停止B1、B2、B3。故障信号则直接串联在三个输出的控制回路里。这样写能实现功能吗能。但问题很快会暴露程序网络相互缠绕逻辑分散。启动逻辑、停止逻辑、故障逻辑分散在不同的网络里靠一堆中间继电器M点和定时器互相勾连。当你想修改停止延时或者增加一个“急停后复位”的功能时你需要同时改动好几个地方牵一发而动全身。调试时如果顺序乱了你需要在数十个网络里追踪每一个触点的状态极其耗时。3.2 使用SFC进行结构化设计现在我们用SFC的思维来重构这个问题。我们不再关注“某个线圈什么时候得电”而是关注“系统处于哪个阶段这个阶段该做什么”。首先划分系统的几个宏观“阶段”或“状态”初始状态所有传送带停止等待启动命令。这是我们的初始步。启动过程状态正在执行“B3启动 → 延时 → B2启动 → 延时 → B1启动”这个序列。正常运行状态所有传送带都在运行物料正常流动。停止过程状态接收到停止命令正在执行“B1停止 → 延时/等待 → B2停止 → 延时/等待 → B3停止”这个序列。故障状态检测到故障所有输出立即停止等待故障复位。你看这样一划分整个系统的生命周期就清晰了。接下来我们用SFC的图形来表达它。第一步绘制主干序列从初始步S0开始。转移条件是“启动按钮按下”。满足后进入“启动过程”。这个“启动过程”本身就是一个单序列里面包含若干子步S1启动B3、T1延时、S2启动B2、T2延时、S3启动B1。完成S3后转移条件为“真”即直接进入跳转到“正常运行”步S4。在“正常运行”步S4里动作就是保持B1、B2、B3运行。从这个步可以引出两个转移分支形成一个选择序列一个是“停止按钮按下”另一个是“故障信号产生”。根据哪个条件先满足流程就选择哪条路。如果选择“停止按钮按下”则进入“停止过程”。这又是一个单序列S5停止B1、T3延时或等待清空传感器、S6停止B2、T4延时、S7停止B3。完成后转移条件满足回到初始步S0完成一个循环。如果选择“故障信号产生”则直接跳转到“故障状态”步S8。在这个步里动作是立即复位所有传送带输出。它的转移条件是“故障复位按钮按下”满足后直接跳回初始步S0。通过这个SFC图任何人即使不懂梯形图也能在几分钟内看懂这台设备的工作流程。程序的逻辑结构被完美地可视化了出来。4. 在PLC中实现SFC程序与关键细节设计图画好了接下来就是把它“翻译”成PLC能执行的代码。这里以三菱GX Works2平台为例展示关键实现步骤。4.1 SFC图的绘制与步动作定义在GX Works2中新建SFC图后我们从初始块开始。创建初始步工具中选择“步”点击编辑区生成初始步通常是0号步。双击它在打开的梯形图窗口中我们可以不定义具体动作或者放一个初始化的指令。它的存在主要是标志流程起点。添加转移条件从初始步引出转移线工具中选择“转移”生成第一个转移TR0。双击TR0的转移条件编号在弹出的梯形图窗口中输入X0假设启动按钮接在X0上。这表示当X0为ON时条件满足。创建“启动过程”序列在TR0后添加步1S1。在S1的梯形图动作中我们写入SET Y0Y0控制B3电机。这表示进入S1步时置位Y0。在S1后添加转移TR1。TR1的条件是一个定时器触点。我们在TR1的梯形图里写OUT T0 K50假设T0是100ms定时器K50表示5秒。然后转移条件就是T0。这意味着S1激活后启动T05秒后T0触点接通转移条件满足。同理添加步S2动作SET Y1启动B2、转移TR2定时器T1、步S3动作SET Y2启动B1、转移TR3条件直接为常ON可以用M8000这类常ON继电器。处理选择分支从“正常运行”步假设是S4引出两条转移线分别指向“停止过程”的转移和“故障状态”的转移。在软件中这通常通过绘制选择分支结构来实现。你需要仔细查看软件的绘图工具确保两条路径始于同一个转移或步之后的不同条件。转移TR4条件X1停止按钮。转移TR5条件X2故障信号。定义步的动作类型这是精髓。在SFC中步的动作可以有不同的限定词。最常用的是N非存储型。步活动时动作执行步关闭时动作停止。比如一个闪烁的指示灯用N限定。S置位存储型。步激活的瞬间将指定的输出置位为1并且即使步关闭了输出也保持为1直到被其他地方复位。我们的传送带启动就应该用S因为我们需要电机在启动后一直运行直到停止命令到来。R复位。步激活的瞬间将指定的输出复位为0。 对于停止序列里的步其动作应该是R Y2、R Y1、R Y0用来复位对应的电机输出。4.2 转移条件的编程技巧与常见陷阱转移条件是流程的驱动力编写时需要格外小心。避免“竞争冒险”在选择分支中确保几个转移条件在逻辑上是互斥的或者程序扫描周期内不会同时为真。如果“停止”和“故障”可能同时发生你需要定义优先级。通常故障的优先级最高可以在故障转移条件里加入对停止条件的屏蔽或者用互锁逻辑。使用脉冲信号对于按钮触发的转移强烈建议使用上升沿脉冲如三菱的LDP或PLS指令。如果直接用按钮的常开触点按钮按下的整个期间转移条件一直为真可能会导致流程非预期地连续跳转多个步。条件复用与子程序复杂的转移条件比如多个传感器的与或非组合可以提前计算好存到一个辅助继电器M点中然后在转移条件里直接引用这个M点。这样SFC图会非常简洁。甚至可以将复杂的条件判断写成子程序或函数块在转移条件中调用。初始化的必要性在程序的最开始或者初始步中一定要做好初始化。包括复位所有在SFC中使用的步状态使用ZRST等区间复位指令、清除用到的定时器、计数器等。确保PLC从STOP切换到RUN时流程能准确地从初始步开始。实操心得在调试SFC程序时一定要充分利用编程软件的监控功能。可以图形化地看到当前哪一步是活动的通常会高亮显示哪个转移条件已经满足显示为真。这比监控一堆离散的线圈和触点直观一万倍。遇到流程不往前走首先就去检查当前活动步之后的那个转移条件为什么没满足。5. SFC程序调试、诊断与高级应用拓展程序写完下载到PLC真正的挑战才刚刚开始。调试是检验SFC设计是否合理的试金石。5.1 系统化调试流程与问题定位单步调试/手动步进这是SFC调试的王牌功能。在编程软件中通常有“单步”或“步进”模式。在此模式下PLC不会自动根据转移条件跳步而是需要你手动触发“进入下一步”的命令。这让你可以完全控制流程一步一步地验证每一步的动作是否正确每一步的输出是否按预期动作。尤其适合验证启动序列和停止序列。强制与监控对于转移条件中涉及的输入点如传感器如果现场设备不便动作可以使用软件的“强制”功能手动将其置为ON或OFF来模拟条件满足。同时监控对应的输出点看响应是否符合设计。状态监控视图如前所述在SFC的图形化监控视图下你能一眼看清流程卡在了哪里。如果流程停在某一步不动90%的原因是其后的转移条件不满足。这时就集中火力检查这个转移条件相关的所有输入、定时器、计数器和内部逻辑。常见问题定位流程不启动检查初始步是否被激活启动按钮的转移条件是否用了脉冲相关的使能信号如总开关是否到位流程卡在某个步这是最典型的问题。双击监控视图中的转移条件查看其梯形图逻辑逐项检查每个条件是否满足。特别注意定时器的时间设定值是否太大或者计时条件是否一直不成立。动作输出不正常检查步的动作限定词是否正确。想保持输出的用了N想瞬间动作的用了S都会导致问题。同时检查是否有其他地方比如故障处理程序复写了这个输出点。流程乱跳检查转移条件是否使用了非脉冲的持续信号导致一个扫描周期内连续跳步。检查选择分支的条件是否有重叠。5.2 超越基础SFC的高级模式与架构思想掌握了单序列和简单选择分支就可以挑战更复杂的控制逻辑了这才是SFC发挥威力的地方。并行序列的实现比如在“正常运行”步我们可能需要同时进行“物料输送”和“周期计数”。可以在“正常运行”步后设计一个并行分支分成两条同时进行的序列一条管理电机和传感器另一条管理计数器。两条序列都完成后再通过一个“并行汇合”转移同步到一起进入下一个共同步。在编程时需要仔细处理并行分支的启动和汇合条件确保逻辑同步。跳转与循环通过转移条件可以直接从序列中的某一步跳转到另一步包括跳回前面的步。这可以用来实现“单步调试模式”、“回原点操作”或者“跳过某些工艺步骤”。循环则是实现自动重复生产的核心通常在序列的最后一步设置一个转移条件跳回初始步或某个中间步。SFC与结构化编程结合大型项目不会把所有逻辑都塞在一个SFC里。可以将整个生产线控制划分为几个独立的SFC程序块例如“上料单元SFC”、“加工单元SFC”、“装配单元SFC”。然后用一个主SFC或主程序来协调这些子单元之间的启动、停止和互锁。这种模块化设计让超大型程序的维护变得可行。错误处理与异常流程一个健壮的SFC程序必须有完善的异常处理机制。除了全局的“故障状态”步还可以在关键步骤如“夹紧”、“钻孔”设置超时监控。如果该步激活后在规定时间内未收到完成信号如“夹紧到位”传感器则通过一个超时转移条件跳转到“报警处理”或“安全停止”序列而不是傻等在那里。我个人在多个大型自动化项目中深刻体会到SFC不仅仅是一种编程语言更是一种项目管理和程序架构的工具。在项目设计阶段和机械、电气、工艺工程师沟通时直接拿出SFC流程图比任何文字描述都高效。在程序移交和维护阶段后来者也能凭借清晰的SFC图快速理解系统脉络极大降低了技术债务。从纠结于梯形图的每一个触点到俯瞰整个控制流程的状态迁移这种视角的转变是每个PLC程序员走向成熟的必经之路。