PID, APC

OoIP第3部分:接口和方法

面向对象工业编程(OOIP)中使用的接口和方法有助于在不增加复杂性的情况下提高面向对象编程(OOP)的生产率。因为工厂和设备是由物体组装而成的,所以它们的控制程序也应该是这样的,这是合乎逻辑的。

通过Gary L. Pratt,P.E. 2019年9月18日
礼貌:ControlSphere Engineering

接口和方法是两个现代编程概念,为面向对象的工业编程(OoIP)提供基本功能。本系列的第1部分引入了OoIP,并显示了如何通过在实际工厂从自包含物体组装的方式组装自包含的物体来构建控制设计,如图1所示。

分布式对象

在OOIP中,对象分布在整个控制设计中,就像对象分布在整个工厂或设备中一样。例如,一个冰箱制造厂有一个装配线系统,它有一个绝缘注射子系统,它有一个聚氨酯处理子系统,它有一个异氰酸酯材料子系统,它有一个罐子系统。在这家工厂,数千个传感器对象分布在从顶级装配线向下到坦克子系统和整个毗邻的分支。

在第2部分中描述的基于任务的编程方法很受欢迎,不存在实用的方法来实现可以适应OoIP设计的分布式性质的中央服务。唯一的答案是集中整个设计。幸运的是,较新的开发环境已经实现了允许两全其美的功能:分布式控制对象(因此控制设计可以镜像工厂设计)和集中服务(管理这些分布式对象)。

图1:在ooIP中,控制设计由与物理设备或设备设计相匹配的物体构建。礼貌:ControlSphere Engineering

图1:在ooIP中,控制设计由与物理设备或设备设计相匹配的物体构建。礼貌:ControlSphere Engineering

第2部分介绍了一个类比,即较早的基于任务的编程技术类似于一个强大的集中式政府,其中每个标记都必须向所需的服务注册(如Bureau of Scaling、Bureau of Alarming等)。OOIP更像是一个自治社会,在这个社会里,公民基本上可以自己照顾自己,但即使是最热心的小政府支持者也认为,一定程度的中央政府是必要的。如何配置这些分布式对象?如何管理它们的警报(聚合、确认和搁置)?在电源故障或更换控制器时,如何保存和恢复它们的状态值?接口和方法在管理这些任务中起着关键作用。

方法

可以认为方法作为属于功能​​块的函数,并且可以通过该功能块的实例访问。图2示出了具有“AcceptConfig”方法的“AnalogSensor”功能块的示例以及如何将名为“L1”的“AnalogSensor”的实例放置在前面描述的冰箱制造设备中的异氰酸酯罐上。在启动时,中央服务可以通过中央数据库读取配置信息,并通过使用其完整路径名“plant.as1.ii1.pp1来调用该实例的”acceptconfig“方法来将配置参数传递给该实例。Isocyanate.l1.acceptconfig“。

图2:方法是属于函数块的函数。可以通过调用该实例的AcceptConfig方法来配置AnalogSensor函数块的实例。礼貌:ControlSphere Engineering

图2:方法是属于函数块的函数。可以通过调用该实例的AcceptConfig方法来配置AnalogSensor函数块的实例。礼貌:ControlSphere Engineering

方法还可以访问其父函数块的变量,并且可以通过扩展功能块中的方法覆盖。方法还可以具有访问控制,以限制对父权(私有)的访问权限(私有),父和所有扩展功能块(受保护),或者对所有(公共)打开。

接口

接口是组织对函数块方法访问的工具。接口是由功能块创建的一种契约,它支持一组特定的方法,并使这些方法具有一组特定的输入和输出。除了使方法更容易管理之外,接口还允许将同意该契约的功能块视为一个同构组。然后,中央服务可以将所有功能块作为一个集合管理。

例如,假设我们有各种类型的功能块,需要知道它是否是日夜,如图3所示。这些功能块中的每一个都同意“DayornightInterface”合同,通过添加“实现Dimplate DiplightInterface”来表示“DayornightInterface”合同他们的宣言。然后,可以组装已经实现了“DayorNightintFeace”(第3和第4行)(第3和第4行)的功能块的所有实例都可以组装成“Tarornightface”(第6行)的阵列。然后,该数组可以用于将该实例通知为黎明或黄昏(主要实现线3)的单个组。

在传统的可编程逻辑控制器(PLC)编程中,每一个需要知道是白天还是黑夜的功能都会单独轮询光传感器。这有点像家庭度假戏仿,在旅行车里的每个孩子都不停地问爸爸,“我们到了吗?”

使用方法和接口如图3所示,传感器在一个地方轮询,然后在状态改变时通知功能。在这种现代运动型电脑(SUV)中,所有的孩子都追求自己的利益和信任爸爸,让他们到达时。父母安息吧。

图3:实现接口的功能块的实例可以在该接口类型的数组中分组,然后作为集合操作。礼貌:ControlSphere Engineering

图3:实现接口的功能块的实例可以在该接口类型的数组中分组,然后作为集合操作。礼貌:ControlSphere Engineering

自我登记

当物体全部在同一节目中实例化时,上面的方法正常工作正常(例如,对于满满的儿童,可能是父亲所有的孩子来说,爸爸都知道他的孩子)。OoIP需要进一步的步骤,其中可以在其他物体内部可以在其他物体中实例化物体的情况,并且物体在整个工厂设计的层次结构中分布(例如在上面的冰箱工厂示例中)。在这种类型的系统中,其他功能用于允许分布式对象使用中心服务注册自己。这个系统类似于父亲在休假的夜间amtrak火车的家庭,其中爸爸让指挥让他们的目的地和座位数字。在接近目的地时,导体可以唤醒每个家庭。

图4:用“call_after_global_init_slot”属性标注的方法在启动时自动执行,允许对象自动注册自己。礼貌:ControlSphere Engineering

图4:用“call_after_global_init_slot”属性标注的方法在启动时自动执行,允许对象自动注册自己。礼貌:ControlSphere Engineering

此自我登记依赖于图4所示的控制器开发软件(CODESYS)中的关键功能。[[Codesys组开发代码,一个用于开发和工程控制器应用程序的硬件独立的IEC 61131-3自动化软件。]需要配置服务的每个功能块实现“CONFIGMGRINT”界面,并具有“acceptConfig”和“RegistMyConfig”方法。“RegisterMyConfig”方法的第一行包含“call_after_global_init_slot”属性,这会导致程序启动时自动执行的方法。

注册和配置过程的其余部分如图5所示。实现“configmgrint”的每个功能块的每个实例都使用其“RegenterMyConfig”方法将指针传递到自身,其功能块名称和其实例名称到“RecoverObjectRegistration“配置”中央服务的方法。然后,配置器将该信息放入“configmgrint”类型的数组中。这configurator obtains the configuration data for the configurable objects (from a .CSV file or SQL Database), finds the matching instance name in the array, and uses the pointer provided by the object at initiation time to pass this data to each object’s “AcceptConfig” method. The “AcceptConfig” method then writes the data to the appropriate configuration inputs.

图5:寄存器本身可以从中央源(例如CSV文件或SQL数据库)接收它们的配置。为了帮助理解,颜色将程序和数据流区分开,将方法呼叫的目的地分开,呼叫中的数据的目的地以及数据存储/检索的目的地。礼貌:ControlSphere Engineering

图5:寄存器本身可以从中央源(例如CSV文件或SQL数据库)接收它们的配置。为了帮助理解,颜色将程序和数据流区分开,将方法呼叫的目的地分开,呼叫中的数据的目的地以及数据存储/检索的目的地。礼貌:ControlSphere Engineering

令人担忧,调优参数

配置和警报中心服务的实际实现如图6所示。注意,配置服务还包括“provideconfigtitle”和“ProvideConfig”方法。这些方法允许系统编写格式良好的配置参数文件,其中配置按函数块类型分组,并以参数名称标题行开头,如图7所示。这个文件可以作为控制工程师开始配置规范过程的理想起点。

图6:ControlSphere配置库包括获取配置变量名和当前数据的方法,这些方法用于创建格式良好的模板文件和保存检查点/重启数据集。礼貌:ControlSphere Engineering

图6:ControlSphere配置库包括获取配置变量名和当前数据的方法,这些方法用于创建格式良好的模板文件和保存检查点/重启数据集。礼貌:ControlSphere Engineering

一旦工厂或设备启动并运行,这些方法还可以用来存储特定实例的配置值。这对于保存操作期间对特定实例所做的调优参数或其他更改或存档关键变量值的快照非常有用,以便在电源故障或更换控制器后可以恢复系统状态。

图7:ControlSphere Configurator创建了一个按函数块名称分组的模板文件,其中包括设计中每个对象的变量名和默认值。它还创建一个文件来存档和恢复调优参数和状态变量

图7:ControlSphere Configurator创建了一个按函数块名称分组的模板文件,其中包括设计中每个对象的变量名和默认值。它还创建一个文件来存档和恢复调优参数和状态变量

直观的控制设计

OoIP允许工程师通过在植物或设备中组装匹配的硬件对象的相同方式组装控制对象来创建高度直观的控制设计。除了本系列的第1和第2部分中描述的OOIP的概念之外,方法和接口是OoIP的两个附加关键特征。这些功能为在整个工厂层次结构中分布的对象提供了一种方法,以接收中心服务,例如配置,警报和检查点。正如其他一般软件进步的最佳进步就在工业控制世界中,OoIP遵循相同的模式。OOIP及其相关方法和工具代表了控制工程的未来。

Gary L. Pratt,P.E.是…的主席ControlSphere Engineering.。由Mark T. Hoske,Content Manager编辑,控制工程《媒体mhoske@cfemedia.com.

更多的答案

关键词

面向对象的工业编程,控制编程

接口和方法向OOIP添加功能。

OOIP对象可以分发。

OOIP设计可以镜像植物和设备。

考虑一下这一点

您的编程应该以模块化,更容易理解的方式组织吗?

有关ooip的更多信息

本系列的第1部分介绍如何利用面向对象的工业编程

第2部分解释OOIP如何使用新的I/O映射和配置技术

在线额外

关于作者

Gary L. Pratt, p.e., ControlSphere Engineering的总裁,1982年在雪佛龙公司工程开始他的职业生涯,并在工业控制行业担任过许多职位。他持有工业控制方面的专利,并通过IEC 61131-3和CoDeSys培训和咨询与下一代分享他的知识和经验。

ControlSphere提供了一个视频演示OoIP,模拟和配置对象。

一个开源的交流中心OOIP功能块和设计示例可以在这里找到。

Bedrock Automation在YouTube上的一个视频提供了更详细的例子OoIP中的离散,批次和连续控制系统设计。

Codesys用于本文中的示例的IDE可以是下载免费。下载包括基于软件的PLC,将在重置之间运行2小时。


Gary L. Pratt,P.E.
作者简介:Gary L. Pratt, p.e.是ControlSphere LLC的总裁。