先说说为啥在PLC程序里头要用FB块。干活就像跑马拉松,偶尔歇歇脚才能跑得更远。咱们上期讲了,现在工业4.0搞得火热,系统越来越复杂,老的面向过程编程根本顶不住,这就逼着大家伙儿得找新路。 现在软件变了模样,咱这次就从内存、封装、状态机一直讲到大项目的架构,好好扒一扒FB技术到底怎么在安全、维护和效率这三个方面攒下家底。 先说内存这事儿,按照IEC 61131-3的规矩,FB和FC这两个东西是不一样的,最大的区别就在管内存这一块儿。 当你调用一个FB的时候,CPU会在内存里专门给它划块地方。变量在这实例DB里头都有固定的地址:搞个布尔型就占个位地址,整型数就占个字地址。这种死绑死的方法特别稳当,对实时系统来说太重要了。 扫描一次周期的时候,FB走的流程特清楚:刚开始CPU就从实例DB把所有STAT(静态变量)的值读到工作寄存器里头;跑逻辑的时候用这些值算和判断状态;完事之后再把新的值写回原来的地方。这样能保证状态不中断,也不容易被别的东西给改坏了。 静态变量就是FB跟FC不一样的地方。就好比以前弄个边沿检测得靠全局变量记上一周期的状态,现在FB自己里头声明个PrevSignal变量就搞定了。这就不用像以前那样到处占用宝贵的M点和D点资源了。 数据隔离不光是为了让程序正常跑的时候不出岔子,出故障了更有用。要是一个FB因为外面的干扰坏了,里面的数据乱了套也只会关在这个FB里头闹,影响不到别的同类型的FB。这样单点的问题就不容易搞崩整个系统。 就拿我上回说的那个控制电机的FB来举例,只要写好一次逻辑,不管是管100个还是1000个电机都能搞定。这就是封装带来的甜头。 用FB的时候还得留神几点:在做大型项目的时候,FB的本事就不仅仅是写代码那么简单了,它已经上升到了设计系统的层面上。 现在的大项目大多是四层架构: 第一层是设备抽象层,也就是给电机、阀门、传感器这些硬件弄个FB壳子; 第二层是单元控制层,把几个设备拼起来干活; 第三层是生产线层,协调几个单元一起运转; 第四层是应用管理层,管生产计划、数据收集还有跟MES系统打交道。 在这堆层级里头,上面的FB会套着下面的FB来实现复杂功能。每个FB都有清楚的接口定义和责任分工。 典型的样子大概是这样的: 最上面是FB_Application(应用层) ├── FB_ProductionControl(生产控制) FB_Line1(生产线1) FB_Station1(工位1) ├── FB_Motor(电机) └── FB_Sensor(传感器) FB_SafetySystem(安全系统) 总而言之就是用好FB块能解决不少问题。没事儿的时候把代码写好丢程序里搁着,想用了就拿出来调调就成了。 功能块这技术可不是一般的编程工具啊,它代表着工业软件正在从写代码转向设计系统这个路子上走关键是得把握住两个核心:封装和组合。 把复杂的事儿给封在里头控制住它组合起来又能让规模变大掌握了这两点工程师就能弄出那种真正像工厂设计那样的控制架构既能满足现在的需求也能管以后十年的变化。