
逛工控论坛的时候经常能看到一类帖子讨论PLC编程有没有标准底下一定会有人搬出ISA88再带上一句“全球公认”。最近有条帖子的标题很有代表性《0913【万泉河】PLC编程标准全球公认的标准 ISA88不是真的》。标题里那句“不是真的”加得很精妙——ISA88这个名字在圈子里流传极广可大家其实也隐隐觉得把它当成“PLC编程标准”这件事有点不对劲。我做过不少PLC和DCS项目也面试过很多工程师今天就把这个话题掰开揉碎讲一讲顺便把自动化标准体系完整梳理一遍。这篇文章适合谁看新入行的PLC工程师、在流程行业做批处理控制的自动化工程师、需要对外解释“程序按什么标准写”的负责人还有那些听到ISA88就条件反射想起SFC的程序员。你能从这里得到的不是一套“背了就能过面试”的套话而是几个真正能用来组织项目、写程序、做评审的判断框架。1. 先掰扯清楚ISA88到底是什么不是什么1.1 ISA88是批过程控制标准不是编程语言标准先给结论ISA88是真的标准而且有年头了。它的正式名称叫Batch Control最早由美国ISA国际自动化学会在1990年代中期发布后来被国际电工委员会采纳为IEC 61512系列标准。这里要特别注意一个定位差异——ISA88规范的不是“用什么语言写程序”而是“批量生产过程怎么描述、怎么组织、怎么复用”。它解决的问题是一个工厂里可能同时用PLC、DCS控制几十台反应罐和几百台阀门生产各种配方不同的产品程序如果不分层、不模块化每个人写出来都不一样厂家一换、工程师一走程序就成了黑盒子。所以才有了ISA88。它把批生产过程拆成一套分层模型让工程师可以像搭积木一样描述生产流程。这套模型是ISA88的灵魂也是后来说它影响PLC编程的原因。1.2 物理模型、程序模型和配方ISA88的三大支柱ISA88的核心内容可以概括成三大块。第一块是物理模型。它把工厂设备从大到小拆成若干层级工厂/Site、车间/Area、过程单元/Process Cell、单元/Unit、设备模块/Equipment Module、控制模块/Control Module。举个好理解的例子一条生产线是一个Process Cell里面每个反应罐是一个Unit反应罐上的搅拌电机、夹套进水阀、进料阀各自是Equipment Module而阀门的开到位信号、电机的接触器反馈这些最底层的点属于Control Module。这样分层的意义在于任何一个控制逻辑都能被放到合适的层级去实现而不是拍脑袋写在某个不相关程序段里。第二块是程序模型。它把控制程序也分了层Procedure过程、Unit Procedure单元过程、Operation操作、Phase阶段。Phase是最小的不可再拆分的过程环节一个Phase执行完才可以进入下一个Phase。这种“步进式”的结构和PLC里常用的顺序控制思路天然契合这也是很多人误以为ISA88是编程标准的直接原因。第三块是配方模型。配方Recipe里定义了做一批产品需要哪些动作Procedure、多少原料Formula、哪些设备Equipment Requirement。比如生产一批果味饮料配方规定了进料顺序、搅拌时间、加热温度、降温速率。产品切换时不需要重写PLC程序只需要切换配方。用做菜类比就更好懂了。物理模型就是你的厨房锅、灶、料理台、刀程序模型就是做菜的步骤备菜、炒制、装盘其中炒制又能拆成热锅、倒油、下菜、翻炒、调味配方就是菜谱宫保鸡丁和鱼香肉丝的步骤结构基本相同但调料比例和火候参数不同——这不就是流程行业“同一套设备生产不同产品”的缩影吗。1.3 它没有规定任何编程语言ISA88全文看下来几乎没有一行内容规定你用梯形图、功能块图还是结构化文本。ISA88回答的是“做什么”和“怎么组织”不是“用什么语言写”。这就决定了它不可能替代IEC 61131-3成为“PLC编程标准”。如果你把ISA88当PLC编程标准去学会发现它不教你怎么写一段PID控制也不讲怎么处理扫描周期它的着眼点在生产过程建模上。换句话说ISA88是给“过程”立规矩的IEC 61131-3才是给“程序”立规矩的。2. 误解从哪来为什么有人把ISA88当PLC编程标准2.1 历史背景批处理系统的程序组织需求催生了ISA88ISA88的诞生背景其实就埋下了被误读的种子。上世纪八九十年代制药、化工、食品饮料这些流程行业大量用DCS和PLC搭批处理系统。每条生产线可能有好几个罐每个罐要执行进料、混合、加热、保温、冷却、出料一整套动作。那时候的程序大部分是工程师个人发挥有人写在梯形图里有人写在顺序器里程序和硬件设备强耦合。一个工程师离职下一个接手的人得花好几周去“考古”。ISA88解决的正是这个痛点它提出“把设备和流程分开建模”。于是很多厂商开始按ISA88的模型来组织PLC程序——把一个罐的控制写成若干个Phase功能块再通过上层的Operation去调用。因为ISA88确实深度参与了“PLC程序怎么组织”这件事从2000年以后越来越多的工程师在讨论程序架构时引用ISA88。但请注意这仍然是“借鉴模型来组织程序”不等于“ISA88是PLC编程语言标准”。2.2 SFC和Phase长得太像边界被模糊了第二个原因更直接ISA88的Phase模型和IEC 61131-3里的SFC顺序功能图在外观和思路上都太像了。SFC用步Step和转换Transition描述顺序控制步里有动作ISA88用Phase描述一个阶段每个阶段里也可以有步进逻辑。一个工程师先用SFC写了顺序程序再去看ISA88会非常自然地产生“这俩不是一回事吗”的感觉。实际上ISA88的标准文本里也用了类似SFC的图形来表示Phase之间的切换。但要注意SFC是一种编程语言的表达方式它只是描述“这段程序在不同步之间怎么跳转”而ISA88的Phase是过程控制的组织单元它除了包含执行逻辑还包含状态、模式、互锁、配方参数和报警管理。你可以用SFC实现一个Phase也可以用FBD和ST实现。把这两者混为一谈是行业里最常见的认知误区。2.3 “标准”这个词被用滥了层级感丢了还有一个很现实的原因中文里“标准”这个词太宽泛。ISA的正式出版物里严格区分了Standard标准、Technical Report技术报告、Recommended Practice推荐实践到了国内无论是国家标准、行业标准、企业标准还是某个大厂内部的编程规范都被统称为“标准”。于是ISA88被叫标准IEC 61131-3被叫标准某PLC品牌自己的程序模板也被叫标准甚至连网上流传的一份《PLC编程规范》PDF也被叫标准。层级一乱概念就乱。真正把自动化标准体系放在同一个维度上比对过的人其实并没有想象中那么多。3. 真正的PLC编程标准IEC 61131-3到底规定什么3.1 软件模型从Configuration到Function Block的六层体系既然要说“PLC编程标准”那IEC 61131-3是绝对绕不开的。它才是真正定义“PLC程序应该怎么写”的国际标准。IEC 61131-3里首先规定了一个软件模型从大到小依次是Configuration、Resource、Task、Program、Function Block/Function、变量。用人话解释。Configuration相当于整个PLC项目它定义这台PLC的硬件配置和连接方式Resource相当于处理器核心一个Configuration可以有几个Resource对应多核处理器或者不同任务域Task是调度器它决定每个程序按什么周期执行、由什么事件触发Program是程序的组织单元Function Block功能块是带内部状态的程序模块比如定时器TON、PID控制块、电机控制块Function是纯函数同样输入永远得到同样输出比如加法和字节转换。这一层一层分下来标准本身就倡导了一种“结构化”的思考方式程序不是一堆梯形图堆在一起而是有层次、有命名空间、有数据隔离的工程。3.2 五种编程语言什么时候用哪个IEC 61131-3定义了五种编程语言梯形图LD、功能块图FBD、结构化文本ST、指令表IL、顺序功能图SFC。这里最容易踩的坑是“PLC编程梯形图”实际上现代大型项目很少只用梯形图。我做项目时的分配习惯是联锁和电气回路用LD因为它直观电气工程师也能一起审图过程控制回路和模拟量处理用FBD信号流清楚PID调试时方便复杂的数据处理、配方计算、状态机逻辑用ST因为写起来快、可读性强顺序控制用SFC特别是多步生产流程阶段划分一目了然。IL现在已经很少用来开发新项目更多是历史程序维护用。这五种语言可以混用标准并不强制“一个项目只能用一种语言”这给了工程师很大的发挥空间。记住一个关键点IEC 61131-3只管编程语言和软件模型它不管你怎么拆批次、怎么定义配方、怎么和MES交互。所以它和ISA88不是竞争关系而是互补关系——一个管语言和程序结构一个管过程和设备建模。3.3 更大的标准地图IEC 61131-3、ISA88、ISA95、PLCopen、PackML各管什么再把视野拉高一点会发现自动化领域其实有一张标准地图每张“标准”管一个剖面。IEC 61131-3管“编程语言和软件模型”ISA88/IEC 61512管“批过程控制模型”ISA95/IEC 62264管“企业层和控制系统层的集成”就是常说的ERP到MES到控制系统的数据流PLCopen管“IEC 61131-3基础上的应用库”最典型的就是运动控制功能块PackMLISA-TR88.00.02管“单台设备/包装机械的状态模型”。把这几个放在一起看清楚之后你再去听别人说“我们按ISA88编程”心里就有数了他大概率是在说我们用ISA88的模型来架构批处理程序但写代码落地的语言还是IEC 61131-3如果他说“我们用PackML”那他强调的通常是单机自动化设备的状态标准化不是整个生产过程。4. 一次理清容易混淆的自动化标准对照速查表4.1 核心标准速查对照表我把常见的容易混淆的标准化文件列成一张表项目评审、技术交流时直接对照。名称发布方状态/类型管什么典型场景IEC 61131-3IEC正式标准PLC编程语言、软件模型PLC/DCS上的控制程序编写ISA-88 / IEC 61512ISA/IEC正式标准批过程控制模型、配方模型制药、化工、食品饮料的批处理控制ISA-95 / IEC 62264ISA/IEC正式标准企业-控制系统集成、业务数据流ERP/MES接口、工厂信息化PLCopenPLCopen协会行业规范/推荐实践基于IEC 61131-3的库、运动控制功能块伺服运动控制、Safety编程PackML / ISA-TR88.00.02ISA/OMAC技术报告TR单机设备状态模型、机器Tag包装机械、单机自动化设备IEC 61499IEC正式标准分布式控制系统的功能块模型分布式IO、边缘控制器协同这张表最关键的用途是遇到“按标准编程”的说法先问一句“是哪个层面的标准”。语言层面、过程模型层面、系统集成层面用的东西完全不一样混着谈永远理不清。4.2 不同项目的正确用法面对不同类型的项目标准的组合方式其实有规律可循。如果你做的是单机设备比如一台包装机、一台注塑机最实用的组合是IEC 61131-3负责程序语言PackML负责设备状态管理和界面状态显示PLCopen负责运动控制。这样客户看到的触摸屏状态执行、暂停、完成、报警是统一的后续做远程监控和数据采集也方便。如果你做的是流程行业的批处理项目比如反应罐、发酵罐、配料系统那重点就是IEC 61131-3写逻辑、ISA88定架构物理模型拆设备层次程序模型拆批次动作配方模型做产品切换。等到项目要上MES再把ISA95里的信息模型拿来做接口规划让MES能看懂PLC里的批次数据。最怕的是什么最怕的是做一个单机设备项目周期两个月硬要照着ISA88全模型从Process Cell拆到Control Module导致过度设计反过来做一个大型连续化工项目却只用梯形图平铺几百个程序段连Operation和Phase的概念都没有最后程序维护难度指数级上升。标准是工具不是装饰品。5. 实操启示把ISA88的模型思想用到PLC程序里讲完理论来点实际的。ISA88虽然不是编程语言标准但它的建模思想放到今天依然非常值得在PLC项目里借鉴。我下面用一套实际落地过的架构来讲。5.1 设备模块化把电机、阀门、仪表封装成功能块ISA88物理模型里最实用的一层是Equipment Module。落到PLC里就是一个一个有标准接口的功能块。以搅拌电机为例功能块通常包含这些接口启动/停止命令、远程/本地模式、现场反馈、故障反馈、联锁条件以及内部的状态和报警。外部程序只需要发命令、读状态不看内部的梯形图实现。这样做的好处很多第一联锁逻辑集中在一个块里不会散落在几百行程序里第二工程师换人后不用从头读一个项目的每个细节只要会看接口就能上手第三同一设备在多个罐上可以反复实例化项目复制速度快。一个设备模块的状态输出通常包括运行、停止、故障、联锁激活等。可以额外定义更细的状态比如“本地操作中”“启动中”“停止中”这些都是设备模块内部自己管的事情不暴露给上层上层只关心命令和结果。5.2 按Operation/Phase组织程序以一个反应罐为例假设一个反应罐R101要完成“进料、搅拌加热、保温反应、放料”四个阶段。按照ISA88程序模型可以这样拆UnitR101对应一个Unit Procedure叫“生产产品A” Operation 1进料Phase 1.1检查进料条件罐空、放料阀关、搅拌未运行Phase 1.2打开进料阀按流量累计进料Phase 1.3进料完成关闭进料阀Operation 2反应Phase 2.1启动搅拌电机Phase 2.2夹套通入蒸汽升温至目标温度Phase 2.3保温计时按配方维持温度Phase 2.4反应结束条件满足时间或pH停搅拌Operation 3放料Phase 3.1确认下游设备就绪Phase 3.2打开放料阀Phase 3.3吹扫管线Phase 3.4关闭放料阀复位状态每一层都有自己的命名空间每个Phase有明确的入口条件和出口条件。操作员在HMI上看到的不是密密麻麻的梯形图而是“当前处于Operation 2的Phase 2.3保温剩余8分钟”这对工厂操作员来说非常友好。更重要的是如果产品B只是加热温度不同、保温时间更长只需要改配方不需要改PLC程序结构。5.3 状态机是ISA88留给PLC编程最值钱的遗产ISA88的标准里定义了一组经典的设备/过程状态IDLE空闲、RUNNING运行中、PAUSED暂停、HOLDING保持中、HELD已保持、COMPLETED已完成、ABORTING中止中、ABORTED已中止、STOPPING停止中、STOPPED已停止。这些状态串起来就是一台设备或一个Phase的生命周期。很多PLC程序写得乱不是因为工程师不会写梯形图而是因为程序里没有状态概念。你按下启动按钮程序把电机转了、阀门开了下一步干什么全被堆在一串置位/复位指令里一旦出现中途异常根本没法优雅地停下来。引入状态机之后一切操作都是“根据当前状态决定是否接受新命令”程序的控制逻辑会变得非常清晰。下面是一段用IEC 61131-3结构化文本写状态转移的示意代码展示一个Phase的核心骨架CASE eState OF IDLE: IF bCmdStart THEN IF bPrefCond THEN // 预条件满足 eState : RUNNING; END_IF; END_IF; RUNNING: bOutput : TRUE; // 驱动执行机构 IF bCmdPause THEN eState : PAUSED; ELSIF bDone THEN eState : COMPLETED; ELSIF bFault THEN eState : ABORTING; END_IF; PAUSED: bOutput : FALSE; IF NOT bCmdPause THEN eState : RUNNING; END_IF; ABORTING: bOutput : FALSE; // 执行安全复位动作 IF bResetDone THEN eState : IDLE; END_IF; COMPLETED: IF bCmdReset THEN eState : IDLE; END_IF; END_CASE;这段代码虽然简单但它明确了一个原则状态是这个模块的唯一事实来源single source of truth任何操作按键、配方指令、报警信号都要先经过状态判断再决定要不要执行。这就是ISA88的思维方式。5.4 结合IEC 61131-3语言落地的参考架构把ISA88模型和IEC 61131-3语言放在一起一个批处理项目里的程序结构可以是这样Configuration: BatchPlant Resource: PLC_CPU Program: RecipeManager // 配方管理使用ST Program: UnitProcedure_R101 // 单元过程调度使用SFC Program: Operation_React // 操作层使用ST或FBD Program: EquipmentModule // 设备模块功能块使用FBD/LD实际中我不建议把每一层都建一个独立Program项目规模小的时候UnitProcedure和Operation可以合并成一个SFC组织单元EquipmentModule用功能块实例。关键是要让代码的物理层次名称和ISA88的模型命名对得上这样以后无论是做MES接口还是技术交接别人一眼就能看懂。6. 避坑清单这几个误区我见一个纠正一个6.1 “ISA88不是真的”这个说法到底该怎么理解回到标题里的那句“不是真的”。这句话悬在很多工程师心里但必须分清楚ISA88这个标准是真的而且在国际上被广泛采用作为批过程控制模型完全没问题。真正“不是真的”是另一句话——“ISA88是全球公认的PLC编程标准”。这个说法站不住脚因为ISA88从设计目标到标准内容从来就不是编程语言标准。所以下次再看到类似争论可以反问一句你说的“编程标准”是指写程序用的语言标准还是指组织控制逻辑的模型标准把这个问题问清楚一半的争论就消失了。6.2 面试和项目评审中如何正确回答“PLC编程遵循什么标准”这个问题我在面试里问过无数次大多数人的回答都会卡壳。比较好的回答方式是这样分层给程序语言层遵循IEC 61131-3标准根据场景选择LD、FBD、ST、SFC批量过程控制层如果是批处理项目参照ISA-88/IEC 61512的物理模型和程序模型做架构单机设备层如果是单机或包装机械参考PackML状态模型工厂集成层如果涉及MES/ERP对接按ISA-95/IEC 62264做信息交互规划。这样回答既准确又完整而且体现出你理解标准的层级关系而不是背了一个名词就往上套。项目评审的时候也一样先界定清楚讨论的是哪一层再评价这个层有没有落实标准要求效率会高很多。6.3 学习建议把标准吃透而不是背结论最后分享一点学习心得。我见过太多人收集了几十张“一张图看懂ISA88/ISA95”的知识卡片真正做起项目来还是不知道从哪下手。我的建议是第一直接读标准原文。ISA-88 Part 1就是一本很薄的小册子信息密度远高于任何二手解读。不需要一字不差重点看物理模型、程序模型、配方模型那几章花一个周末就能过一遍。第二拿手头的项目对照一下你上一个项目的设备能不能拆成Unit和Equipment Module你的程序能不能按Operation和Phase命名如果拆不动说明架构上可以改进。第三看大厂的工程模板白皮书很多DCS和PLC品牌都发布过基于ISA88的批处理解决方案里面有现成的架构实例可以研究。标准学习从来不是一次性的我的经验是每做一个新行业项目回来看一遍标准都会有新的理解。比如做食品的时候你更关注清洗流程里的Phase划分做精细化工的时候你更关注配方的版本管理这些体会是纯理论学习得不到的。最后再讲一点我自己的感受。刚开始做PLC那几年我也觉得程序能跑就行标准什么的都是给大公司做表面文章用的。后来真正栽过跟头一套老设备交接过来几千行梯形图散落在十几个程序段里没有状态机没有模块化一个阀门开到位信号被复制了六个副本改一个地方冒出一堆报警。从那之后我才意识到ISA88和IEC 61131-3这些标准最值钱的地方不是那个“全球公认”的名头而是它逼着你在一开始就想清楚设备怎么分层程序怎么组织状态怎么定义。把这些想清楚了程序写起来反而会慢一点但调试、交接、维护的周期会大幅缩短。如果你现在也处在“程序写得越久越怕接手项目”的阶段不妨从ISA88的模型和IEC 61131-3的语言规范入手重新理一遍自己的程序架构。这个投入迟早会赚回来。