采用面向对象的工业编程(OOIP)技术,可提高面向对象编程(OOP)的效率,而不会为工业控制应用增加额外的复杂性。本文是面向对象工业编程系列文章的第二篇(第一篇请见2020年1-2月合刊《用于工业控制的面向对象编程》),将介绍如何在其它块的基础上构建新块,以创建大型的分层分区系统,以及如何在面向对象工业编程设计中管理输入/输出(I/O)和配置。
抽象、嵌套和接口
除了封装之外,抽象、嵌套和接口也是面向对象工业编程中3个重要的概念。抽象是将细节按层次结构中的各个级别进行分组,因此程序员只需要处理设计中任何一个级别上的相关复杂性。嵌套允许对象实例化其它对象,以构建并在逻辑上划分大型分层系统。接口提供了与层次结构中下一级交互的标准化方法。以一辆“野马”车为例,车辆包含一个发动机,该发动机包含一个启动器,该启动器包含一个电枢,电枢中的铜线可能来自在世界上任何地方进行开采和冶炼的铜矿(如图1所示)。抽象隐藏了发动机的复杂性,将铜线以及其它各个层次的细节隐藏起来,这些细节只适用于该层级。用户只需要知道发动机的接口——点火开关和油门踏板。
图1:封装、抽象、嵌套和接口表明,块可以构建在其它块上,以实现分层划分的系统,从而反映真实的设计。本文图片来源:ControlSphere
图2显示了如何使用抽象、嵌套和接口来构建分层的过程工厂。在顶层,工厂程序可以嵌套(实例化)两个反应器对象,每个对象都通过抽象简化了螺旋钻的复杂性,而它们本身也嵌套了电动机和轴编码器对象。轴编码器和电动机对象封装了从轴编码器接收脉冲并控制电动机所需的所有功能,例如合上其接触器、监视其辅助触点或向心开关以验证其是否启动,如果未启动则生成警报、怠速等。
图2:用于实现流程工厂的抽象、嵌套和接口概念。
经过抽象后控制工程网版权所有,在层次结构的任何一个层次上唯一需要关注的是与下一个层次的接口。例如控制工程网版权所有,螺旋钻中的变速电动机具有用于设置电动机速度的接口。在螺旋钻层次上,用户无需了解或处理电动机的任何潜在复杂性,例如确定电动机是否正在响应或发出警报。
一个例外是,如果螺旋钻具有冗余配置的电机,那就需要了解电机是否响应。但是,在这种情况下,附加功能将被抽象为附加的层次结构层,代替螺旋钻实例化变速电动机CONTROL ENGINEERING China版权所有,它将实例化冗余变速电动机,后者将实例化多个变速电动机,以及在主电动机发生故障时使用备用电动机的逻辑。冗余变速电动机的接口仍然仅是速度指令。每个级别都封装了它可以实现的所有功能,并且仅针对其自身无法完成的任务需求与更高级别接口。
对象配置和I/O映射
基于对象的控制与基于任务的控制之间的差异,与不同形式的组织架构之间的差异有些类似。基于任务的控制,类似于集权化的企业架构,新功能必须在最高层级报备和注册。基于对象的控制类似于权力下放的企业,在该类型组织架构中,新功能是自我支持的,并且在很大程度上可以自治的。
为了实现面向对象工业编程的可复用性优势,I/O映射和参数不能像以前的编程技术一样被硬编码到任何对象的实例中。例如控制工程网版权所有,在图3中所示CONTROL ENGINEERING China版权所有,如果将第一个反应器中第一个螺旋钻的轴编码器中的Pulse_FI输入硬编码为全局I/O变量,则其它3个轴编码器的Pulse_FI输入也将被绑定到同一全局变量。因此,该螺旋钻对象无法重复使用。对于配置输入(例如PulsePerLiter_CI)也是如此。硬编码的I/O或配置与现代面向对象的工业编程编程技术不兼容。
面向对象工业编程通过全路径I/O映射解决了I/O问题。从70年代的内存映射到90年代的全局符号映射,这是自然的发展。完整路径名是程序名的组合,通过点(.)分隔,后接所有中间的实例名,并以变量名结尾(例如:Plant.R1.A1.SE1.Pulse_FI)。I/O编辑器使用这些完整路径名将I/O映射到工厂层次结构中相应的过程变量(如图4所示)。
图3:硬编码的I/O和配置与面向对象的工业编程不兼容。
图4:面向对象的工业编程可以使用全路径I/O映射和集中式配置来映射到物理I/O并区分对象。
配置问题通过中央服务处理。在启动时,对象实例会向中央配置程序服务注册,然后该服务从CSV文件或SQL数据库获取配置数据,并将值分配给每个实例。配置输入允许一系列的对象类型,通过简化设计,满足用户最广泛的需求。
面向对象工业编程的优势
面向对象的工业编程可以提供很多优势,控制工程师应当了解下面这9个优势,以确定开发系统是否支持面向对象的工业编程。
1.可创建与匹配的工厂对象相对应的独立控制对象,并执行该工厂对象所需的所有功能,例如警报、审核、物理I/O、人机界面(HMI)I/O、缩放和控制等。
2.图形编辑器允许声明无限数量的对象实例,以任意方式互连对象实例,以及将其它对象实例化为任意深度和复杂性的层次结构的对象。在运行时,编辑器应允许对层次结构进行简单的导航控制工程网版权所有,例如双击对象实例,即可进入项目层次结构,并可向后导航。
3.具有运行时调试对象单个实例的能力,包括:在单个实例内设置断点,单步进入单个实例以及查看/更改对象实例的私有变量。
4.通过在实例可能位于项目层次结构中的任何位置为实例的配置输入分配唯一值,来区分相同对象的实例的方法。这些配置值可以来自.CSV、微软Excel文件、SQL数据库以及OPC UA。还必须有一种在运行时搜索这些配置变量的值的方法(例如控制工程网版权所有,搜索ISA标记名称配置)。
5.能够将物理I/O映射到项目层次结构中任何位置的任何实例中的任何变量(包括将一个输入点映射到多个实例)。诸如来自现场总线设备的复合I/O,必须能够映射到单个变量,或者映射到项目层次结构中任何位置的一个或多个数据结构变量。该工具必须提供一种方法,从其输入开始、经过逻辑并到达其驱动的输出来追踪变量(以此类推,从物理输出通过逻辑返回到影响该输出的物理输入的过程与此相反)。
6.具有建立与分层控制对象匹配的分层HMI对象的能力,以及通过顶级对象的实例名称互连两个对象(及其潜在的数千个底层互连)的能力。
7.能够打印分层设计的“扁平”版本,该版本显示对象实例与每个实例上的唯一配置值之间的互连。
8.实现继承、方法、多态性和接口的功能可能会有所帮助。
9.一个活跃的用户社区和论坛,可以共享开源工厂对象和建议。
总体而言,面向对象工业编程的这些功能允许以对象为基础构建控制系统设计,就像通过对象来构建工厂或设备一样,因此物理设计和控制设计可以成为一体。数字以一种易于理解的方式与实体相匹配。也许将来,设备供应商将为他们的设备提供这些控制对象。
面向对象工业编程不仅使设计易于构建,还使工厂技术人员易于进行故障排除,并使将来的控制工程师更易于进行维护。正如工业控制领域已开始采用其它最佳通用软件发展进步一样,面向对象的工业编程也将成为控制工程的一个未来趋势。(作者:Gary Pratt)