工业控制软件工程对高可靠性和易于广泛使用的用户具有独特的要求。这就是为什么图形语言一直是工业控制程序设计的主体,并且工业控制工程师倾向于在采用之前使计算机科学的最新趋势成熟的原因(例如符号寻址和数据结构在进入工业控制之前都已经成熟了20年)更多信息尽在振工链。
面向对象编程(OOP)在1990年代开始被计算机科学家使用,但是由于它的复杂性和缺乏支持的图形语言环境,在工业控制领域的应用一直很缓慢。幸运的是,工业软件供应商已经开始解决这些问题,并向控件世界提供了OOP的许多好处,而没有任何复杂性。
本文将展示其中一种工具的示例,展示工程师如何通过掌握一小部分OOP概念来利用这些好处,并展示如何使用对象进行编程是一种自然而直观的技术,用于控制基于对象的物理世界。
工业控制中OOP的定义
在术语“面向对象编程(OOP)”的解释上,工业控制界和计算机科学界往往会有所不同。为了避免在本文中造成混淆,我们将把工业控件解释称为面向对象的工业编程(OOIP),并将其区别如下:
面向对象编程(OOP)
包括完整的计算机科学OOP功能
主要基于文本
通常是受过高等教育的计算机科学家的领域
面向对象的工业编程(OOIP)
使用封装,实例化和抽象概念将功能块(FB)实例化为其他FB的能力
主要基于图形
只需很少的培训,即可由控制工程师和工厂技术人员使用
OOIP的演变
在工业自动化的早期,编程是固定的。我们读取输入,缩放输入,对输入生成警报,执行控制算法以生成输出,对输出执行警报,缩放输出,并使用内存映射的I / O写入输出(如图1所示) 。后来,当Functions可用时,我们合并了一些重复的代码,但是过程实际上仍然很简单。
图 1:原始平面编程样式当控制软件开始容纳多个任务时,工业程序员采用了集中式的面向任务的方法。这种方法将操作分为单独的任务,然后由一系列集中处理对程序中的标签执行每个单独的操作。第一个任务将读取所有输入,第二个任务将缩放所有输入,下一个任务将对缩放的点执行警报,依此类推,如图2 所示。
图 2:面向任务的编程样式这种集中式的面向任务的方法比平面方法有很大的进步,但是当向程序添加新功能时,它需要修改每个任务。另外,面向任务的编程通常使查看信息流和理解控制代码中的因果关系变得困难。这些缺点使程序设计更加困难,工厂技术人员也难以维护(尤其是年轻的团队成员在OOP中学习,对面向任务的编程不太满意)。
图 3:面向对象的编程风格OOIP 如图 3 所示,将面向任务的过程转变了。该功能不是在许多任务中分散,而是包含在“对象”内部。由于工业控制工厂由对象(例如:马达,传送带,阀门和传感器)组成,因此面向对象编程是工业控制的自然选择……甚至可能比最初为OOP创建的计算机编程还要多!实际上,可以将控件的对象设计为与工厂中的对象相对应,以使控制程序开始看起来非常类似于工厂设计,如图4所示。使用正确的控制图编辑器,工厂设计和控制图可以在同一张图中!
图 4:在OOIP中,控制设计是根据与物理工厂或设备设计中的对象匹配的对象构建的。要实现OOIP,控件工程师只需要掌握两个关键的OOP概念:封装和实例化。
封装形式
封装允许创建对象,其中包含控制其匹配工厂对象所需的所有功能和数据。用户不需要了解或理解底层实现……他们只是使用它!一个很好的类比是汽车发动机。发动机封装了活塞,阀门,轴承以及许多其他物体和复杂功能。驾驶员不需要知道引擎的工作原理,他们只需要了解引擎的界面并与之交互:启动按钮和油门踏板。
出现在图4左下方并在图5中详细说明的Analog Input模块是OOIP封装的一个很好的例子。该模块封装了模拟输入的所有复杂性,包括缩放,钳位,滤波,倍率,变化率报警和高/低报警。程序员只关心块的配置(_CI左端的输入)和程序的输出(Output_PO和SmoothedOutput_PO)。程序员不需要了解或担心底层的复杂性。只需将其放下并使用即可...就像汽车中的引擎一样。
图 5:模拟输入功能块实例化
实例化是声明和使用一个对象的多个副本而无需制作该对象的副本的能力。在IEC61131-3中,这些对象称为“功能块”。功能块是数据类型,就像整数或实数是数据类型一样。通过以与声明整数实例完全相同的方式对其进行声明来创建功能块的“实例”。在后台,编译器以与为Integer实例分配内存的方式完全相同的方式为功能块的每个实例中的变量分配唯一的内存。而且,就像可以声明不限数量的整数(最大为存储容量)一样,可以声明不限数量的特定功能块实例。
图6:在CODESYS连续功能图编辑器中实例化对象我喜欢在训练课程中使用的类比是福特野马,如图7所示。1964年福特野马是车辆的“ Type”(以完全相同的方式)整数是日期“类型”)。在创建它的实例之前,您不能驾驶1964 Ford Mustang“ Type”(以完全相同的方式,除非声明它,否则不能使用Integer)。因此,指示福特装配线为您创建1964年福特野马的实例的工作单类似于指示编译器为您分配Integer内存的声明。这样,您车道中的1964年福特野马便成为该数据类型的实例。
图 7:功能块但是正如您可以声明(并且编译器可以为之分配内存)许多整数一样,工厂可以制造“ Mustang”车辆“ Type”的许多实例。这样,您的邻居可以拥有自己的1964年福特野马,它完全独立于您的。它们的功能完全封装在对象的每个实例中(无法承受潜在的量子纠缠)。
接下来的是
本系列的第2部分将展示如何使用另外三个概念:抽象,接口和嵌套将较低级别的对象组装成复杂程度更高的对象,以及如何重复使用这些概念从一组对象构建整个工厂或机器。基本的构建基块。它还将展示如何将I / O映射到整个设计中分布的对象,如何将参数输入添加到对象以增强其可重用性,以及如何创建中央配置服务以允许从单个CSV管理这些参数。文件或SQL数据库。
摘要
工具供应商开始将OOIP的优势提供给控制工程师。为了利用这些好处,控件工程师只需要掌握两个关键的OOP概念:封装和实例化。有了这些知识,控制工程师就可以将工厂对象的功能封装到匹配的控制对象中,然后实例化这些对象以创建与工厂设计相似的控件设计。OOIP不仅使设计易于构建,还使设计易于工厂技术人员进行故障排除,并易于将来的控制工程师进行维护。正如其他最佳通用软件进步已被工业控制领域所采用一样,面向对象的工业编程也遵循相同的模式。OOIP显然是控制工程的未来,振工链工业自动化平台 。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved