面向对象编程是计算机高级语言的一种高级编程模式,这种设计思想也可以应用于工业控制系统的plc程序中。虽然我们无法实现面向对象编程的许多优秀特性,如“继承性”甚至完全不具备面向对象编程语言的特性,但面向对象编程的基本概念是类和类的实例(即对象),我们只需要使用这个概念。在计算机编程中,我们需要在编写类之前抽象和总结一些东西。在工业控制系统中,电机、阀门等控制对象是显而易见的控制类别,无需抽象就可以显而易见地为其编写类。下面将用西门子的Step7编程语言和施耐德的Unity编程语言来讲解PLC的面向对象编程。
一、实施方式
面向对象编程在步骤7中使用功能块(FB)编程。说到这个,我们会想到西门子提出的模块化编程。是的,就是这个模块化编程。但是西门子提出的模块化、后台数据块、多背景等术语,并不能让所有人都非常清楚地理解和使用这个优秀的设计理念。如果你从面向对象编程的角度来理解它,你就能很好地理解这种设计模式。“FB块”被视为“类”,可视为同类控制对象的代码归纳。比如MM440的变频器可以写FB块:MtrMM440,在面向对象编程中称为“类”。当需要对特定的电机进行编程和控制时,可以给它分配一个后台DB块,在面向对象编程中称为类的实现(即创建class: object的一个实例)。需要时,FB块可以作为实现类的参考。在步骤7中还有另一种程序块,即FC块。基于FC块的编程在西门子称为结构化编程,也可以与计算机编程中面向过程的编程相比较,即单纯基于函数的编程。
施耐德的Unity软件编程可以更好的理解面向对象编程。它的DFB定义包括输入/输出参数、私有/共享变量和代码实现,它们是计算机面向对象编程中“类”的基本元素。创建类的实例(对象)就像创建普通的“布尔”变量一样,只需在“功能块”中定义这个“类”的变量。
Step7和Unity都可以采用面向过程和面向对象的编程方法。这两种编程方法的区别类似于计算机高级语言中C语言和C++语言编程的区别。
下面的解释将把步骤7中的FB和Unity中的DFB称为“类”,步骤7中的FB+背景DB和Unity中的DFB实例称为“对象”。
二、面向对象的编程架构
以上解释是关于实现细节,编程思路是基于程序架构的。如果不在本地使用面向对象的方法,可以称为这种编程或面向对象编程。这种编程需要从以下几个方面入手:
1.结构化电路设计。
本文主要介绍自动线,它可以是单机的简化结构。
自动线级:这是最高级别,它有一个主控PLC,控制其下的区域。
工程层:有独立的配电系统,但没有PLC,只有分布式模块,由自动线控制。顾名思义,它具有很大的独立性,可以作为一个单独的项目进行设计和制造。当自动线很小时,这个级别可以省略。
功能组层:根据工艺划分,将实现某一工艺功能的工段设备划分为一个功能组,属于工程层,当省略工程层时,属于自动线层。
面向对象编程不一定需要使用上述结构,但是好的电气结构更有利于面向对象编程。
2.任何控制对象逻辑都是在“类”中实现的。
为此,有必要分析与受控对象相关的信息。例如,对于电机,需要考虑以下相关信息:
输入信息:
、电路保护信息,如电机的空气开关、热继电器等。
、功能保护信息,如电机限位开关、风扇气压开关、油泵油位开关等。
、启停条件下,上述电路保护和功能保护可能导致电机运行终止,而复位也可能导致重启,但这里的条件是指正常运行的启停条件,如顺序控制的流程步骤。
控制方式:如手动和自动。
故障复位:通过复位信息重启。
输出信息:
控制输出,如控制电机的主接触器。
,状态信息输出
,故障输出
.........
状态存储信息:
用于代码实现的中间变量和可由人机界面读出的状态变量等。
将以上所有信息集成到一个类中,并尝试标准化该类的参数。但是,与高级编程语言有一些不同。对于Step7,应该遵循的标准是:程序结构用FC实现,对象控制用FB实现。以下结构体系(其电气结构来源于上面的介绍):这只是一个粗略的PLC程序架构体系,好的架构应该更完善、更科学。
3.规划数据结构。
数据结构的定义很重要,尽量统一这些结构,不用担心存储空间。如今的PLC内存足以容纳大量数据。有一点是,在步骤7中,我们应该尽量不要在类外定义数据结构(UDT),而是在类内定义它。虽然会造成同一结构在不同类中的重复定义,但会提高类的独立性。
第三,优越性
1.标准化
使用这种设计模式,程序设计可以分为两个阶段,即标准库、基础架构开发和实际应用级设计。其中,标准库和基础架构是使程序标准化的基础,而应用层设计是针对具体的控制工程编程,这样程序员可以分为两类,一类是标准开发,由资深程序员负责,另一类是应用设计(包括程序调试规划到应用设计),由经过标准化培训的一般程序员完成。通过这种分配,可以解决中国工业自动化面临的尴尬局面。在中国传统的受控行业,一个程序是一个人设计的,所以他还必须负责现场调试,经验丰富的程序员一般都是30岁以后,已经结婚了,显然长期出差对家人不好,所以很多优秀的程序员为了家庭考虑不得不改行,要么转行到管理岗位,要么去制造工厂维修设备,这是资源的严重流失。毫无疑问,使用上述设计流程,我们可以让有经验的程序员设计标准库和架构,让刚踏入这个行业的年轻人设计和调试应用。这不仅能让老程序员在不影响家庭的情况下继续自己的工作,还能让年轻程序员参与现场调试,培养自己的经验,增加收入。
这可能会让一些人担心年轻程序员能否参与现场调试?可以肯定的是,没有标准化支持的程序不仅可以由年轻的程序员编译,而且在现场调试中也存在很多问题。但是有了好的标准化,一年半以上工作经验的程序员应该可以独立面对自动线。
PLC中面向对象编程的核心是黑盒编程。对于步骤7,我们使用FB来控制每个对象。控制逻辑、报警处理和信号交换都在FB中。对于应用程序设计人员来说,他们不需要了解里面的代码实现,只需要知道FB的功能以及如何很好地使用它,这就大大降低了对应用人员编程能力的要求。对于编程,他们只是遵循架构,复制代码并更改输入和输出条件。
调试呢?很多人认为使用FB编程最大的麻烦是在反复调用FB后无法诊断这些代码。严格来说,这是真的。除了从后台数据库查看信息,我们无法监控FB反复调用后的代码。但正如我所说,这是黑盒编程。我们不需要诊断这些代码,只需要知道什么样的输入和什么样的参数设置导致什么样的输出。代码的逻辑和功能是标准库开发人员的责任,这就要求标准开发人员在不同的条件下对自己设计的功能块进行不同的测试,以保证正确性,同时还要编写完整详细的功能描述文档,方便应用程序设计人员理解这些块。标准架构不是一劳永逸制定出来的,需要针对千变万化的项目不断完善和修订,这也是工程公司实际可以积累知识的地方。
程序不仅需要调试人员使用,还需要用户(设备维护人员)知道,如果将完整的标准库文档交给用户,可能存在技术泄露的可能;如果没有,可能很难为他们诊断设备,这就需要标准制定者制作另一个文档,即设备维护文档,而知识的公开仅限于用户使用程序进行诊断的能力。
2.可重用性和可管理性
计算机面向对象编程的优点还包括可重用性和易于管理,这在可编程逻辑控制器中也有应用。以步骤7为例,有必要讨论FC和FB的区别。观察数据类型,FB只比FC多了一个“STAT”类型。在使用中,FB需要后台DB,而FC不需要。但由于这种差异,FB有自己独立的数据存储空间,而FC的数据存储必须依赖公共变量(如中间变量M或共享DB)。有一个规则,程序块的独立性越强,它的可重用性越好,数据访问冲突的可能性越小,管理也越容易。有些公司生产的PLC,其编程语言没有类似FB的这个特性,可以用类似“FC+共享DB”的替代解决方案来解决,但其独立性已经大大降低。
同一代码的独立性是制定标准的重要环节。很难想象一个与其他功能块有着千丝万缕联系的功能块,能够在不同的项目中被有效地复用为标准块。
纵观计算机语言的发展,最初的编程是令人恐惧的,但今天的编程给了人们极大的解脱。有许多现成的标准类库可供实际使用。人们可以把更多的编程精力投入到实现功能本身。plc编程也应该朝着这个方向发展。更多的人应该从事应用级的设计。那些标准功能块不应该由不同的人重复开发。虽然各大PLC工厂都开发了大量的程序库,但不同行业的工业控制对象也各不相同,此处可以结合plc视频教程来学习。
3.先进的设计理念
在电路图设计中,我们已经使用了控制对象的绘制方法,即在配置好基本的主配电电路和PLC后,我们将为电机、阀门、气缸等各个现场控制对象绘制电路图。它们的电源来自独立的分配电路,控制和反馈与PLC相连,硬件链根据实际情况调整,控制对象堆砌得像积木一样有组织。同样,编程也可以通过对每个控制对象使用相应的标准控制块来实现,有效地封装了程序的控制细节,使程序看起来简洁,易于维护,而好的设计可以使原理图和程序有很好的连接,甚至实现一对一的关系。比如原理图中的一个控制对象可以在程序中找到对应的FB调用,真正实现控制面向对象编程。
有些人可能会有疑问,PLC编程大多是分步编程,每个标准块都是针对控制对象的,那么如何实现控制顺序呢?这就需要编写一个专门的FB块进行顺序控制,或者用西门子现成的Graph7来实现,这和一般的编程没什么区别。
结论:目前工业控制领域有很多程序大师。他们非常精通算法,有自己的编程思路。当我和一些人讨论标准化时,他们意识到标准化的高效率,但他们认为这不能反映他们的编程水平。是的,如上所述,应用层面的编程不应该有很高的编程水平,但是想一想,一个人能一辈子都在做现场调试吗?如果你想展示你的价值,你可以从事标准编程。也希望他们能花一点时间研究一下程序架构,各行各业,真正的高手是系统架构设计师,而编程小技巧只是一个好架构的锦上添花。本文来源:www.jcpeixun.com。
审核编辑:鄢孟繁
评论
查看更多