西门子PLC标准化程序面向对象和面向过程的概念

面向对象和面向过程概念

“面向过程”(ProcedureOriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。

图 3‑1 : 面向过程编程方法

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了

面向对象(Object Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。


图 3‑2 : 面向对象编程方法

面向对象是把构成问题事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为

面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

在PLC中虽然没有面向对象编程的类等术语的概念,但在PLC中都能找到与面向对象中相类似概念的表达方法;

比如面向对象中类的概念在PLC可以通过UDT定义出来,不同的是PLC中可能需要多个UDT才能将一个对象的类完整表达出来;

面向对象中方法的概念在PLC中可以通过FB表达出来,同时FB的嵌套可以稍微的和面向对象中的继承类似;

而在标准化系统中,所有设备的性能属性都被归纳总结在工艺描述中,那面向对象的编程方法就是将其在程序系统中实例化出来;为便于理解,下文将用一个面向对象的编程思路来剖析“怎么将大象放进冰箱”;

3.2.面向对象和面向过程的不同表达

在面对这样的课题的时候,面向过程的编程人员就会二话不说针对分析这个需求之后列出了几个步骤:

  1. 把冰箱门打开。
  2. 把大象装进去。
  3. 把冰箱门关上。

上面每一个步骤,程序员都会用一个函数或者功能来实现,比如定义了如下的功能块:

FB_OpenTheDoor();

FB_PushElephant();

FB_CloseTheDoor();

再通过排列组合完成客户的需求,顺利交工。

通过以上描述我们发现,程序员做的工作就是在接到需求以后,会把这些需求拆成一个一个的指令或者步骤,然后根据客户的需求串起来交给控制器去执行。和上面面向过程的定义是一致的,而且现实中的编程人员(PLC)大部分可能都是这样的做法。

我们以为这样就结束了?但是后续交流客户又说还要实现以下功能:

【我要把大象装冰箱,但是门别关,敞着就行】

【我还需要冰箱的冷藏温度调到10°】

。。。。。。

这个时候我们就必须得把整个程序系统通读一遍,找出可以用的函数(如果没有就再定义一个),最后依次调用它们。随着客户后续要求的不断提出,最后整个系统越来越杂乱无章难以管理,程序员不堪重负。

面向对象思维,从另一个角度来解决这个问题。面向对象是把【对象】作为程序的基本单元,我们控制过程中的驱动器,传感器,智能设备都可以归纳为对象。那么对象到底是什么呢?对象就是对事物的一种抽象描述。人们发现,现实世界中的事物,都可以用「数据」和「能力」来描述。比如我要描述一个人,「数据」就是他的年龄、性别、身高体重,「能力」就是他能做什么工作,承担什么样的责任。

例如你可以让「狗」这个对象「吃狗粮」,就可以把「吃狗粮」的命令发给「狗」让其执行,然后我们就实现了「狗吃狗粮」的需求。

如何进行面向对象的编程呢?根据上面课题的需求,演示按照面向对象是怎么编程的。

3.3.对象属性

第一步,提炼对象属性。分析这个需求里面我们要面对的对象是显而易见的,大象和冰箱都是这个需求中明确的实体对象。

装进这个动作是一串的指令,其实包括两方面的动作:打开(冰箱)+装(大象);那这个需求的对象就如下表;


表3-1 : 对象提炼清单表

第二步,对象属性分析对象。属性分析就是描述对象特征,像上文说的一样,可以用一些数据和能力来描述,如下表所示提炼的对象的数据和能力。


表 3-2 : 对象属性分析表

在PLC编程过程中,除了分析这个对象属性以外,其实我们还要做的就是将对象属性和我们程序结构相关联,细化到程序中就如下表所示。


表 3-3 : 对象属性实例化分析表

3.4.对象编程

3.4.1.冰箱的编程

参数说明:可以来自HMI或者信息管理系统,包括冷藏室温度设置和冷冻室温度设置;

输入说明

存储:向冰箱下达存储指令,存储指令包括的信息有存储的对象(大象),存储的位置(冷冻室还是冷藏室)等;

取件:向冰箱下达取件指令,存储指令包括的信息有取件的对象(大象),取件的位置(冷冻室还是冷藏室)等;

启停命令:此信号为True的时候冰箱启动,否则冰箱停止运行;

输出说明:

冷冻室门的开关:True表示冷冻室打开,False表示冷冻室关闭;

冷藏室门的开关:True表示冷藏室打开,False表示冷藏室关闭;

启停状态:True:冰箱已经启动,False:冰箱停止运行;

属性说明:

三维尺寸:冰箱的外在存储,包括长宽高的尺寸;

冷藏室:当前温度以、当前剩余空间、载重能力;

冷冻室:当前温度以、当前剩余空间、载重能力;

逻辑信息:包括运算逻辑以及运行状态;

运算逻辑信息,比如储存对象不符合当前冰箱的容量、取件对象在冰箱里面不存在、大象重量超重(以上信息冷藏冷冻是分别存储的);

运行状态数,比如冰箱是否启动,是否有故障等等;

将以上信息概括后可以在一个统一的模型中(后续有模型说明)得到体现,具体见下图所示:

图 3‑3 : 冰箱在PLC中的程序模型


3.4.2.大象的编程

参数:没有;

输入说明:

进冰箱:True表示要求大象进入冰箱,False无定义;

出冰箱:True表示要求大象走出冰箱,False无定义;

输出说明:

正向行走:True表示大象进冰箱方向行走,False无定义;

反向行走:True表示大象出冰箱方向行走,False无定义;

属性说明:

三维尺寸:大象的体积,包括长宽高的尺寸;

重量:大象的总重量;

智商:大象的智商;

将以上信息概括后可以在一个统一的模型(后续有模型说明)中得到体现,具体见下图所示:

图 3‑4 : 大象在PLC中的程序模型

如此,就将冰箱和大象的模型在程序中得以再造,只要将这两个模型在程序中建立接口关系,那客户的需求将大象装进冰箱就很容易得以实现。此时,只要我们给大象下达走进冰箱的指令,冰箱就会在得到信息后打开对应门,大象自己就走进去了。

若此时大象体积太大或者超重(数据来自传感器),冰箱模块还会告知系统不能装载大象的原因。

同时,后续客户有其他需求的时候,只要在给冰箱的输入信息中说明,冰箱就会执行相应的动作,比如门打开就好或者冷冻温度设置到-18°等等其他需求;

3.5.其他说明

通过上述的描述发现大象和冰箱有两个相同点:

1.两个控制对象的控制模型是一样的;

2.两个控制对象有一个相同的Function:正反转;

表 3-4 : 对象正反转定义表

现假设冰箱对象的程序名为FB_FrIndentityge,大象的程序名为FB_Elephant。那后续的项目中只要有这两个对象,我们要做的工作就是将程序名实例化而已。

面向过程只是着眼于当前工艺需求,编程简便快捷但后续维护和再次使用比较困难,也无法形成对应模型知识库,相关技术及知识得不到累积和传承。

面向对象就是在制造东西,是将现实中的对象在程序中再造一次。面向对象编程工作量大且需要具备相当的能力将对象的属性提炼总结出来,但面向对象的程序具有模块化,接口化等特点,便于后续的维护和使用,利于形成行业知识库,技术可以得到累积、发展、传承和更新。

随着技术发展,冰箱的能力会越来越先进,那对于程序员来说要做的工作就是与时俱进更新FB_Fridge的功能,这样FB_Fridge的版本就会从原始版本跟着时代的更新发展到更多的版本。这样,对于冰箱这个对象,我们的再造功能已经完成而且我们还能按照客户需求选择不同版本的程序来满足客户(客户的冰箱可能是老款)的需求;

表3-5 : 两种编程方法优缺点对比

3.6.后记

上述就是以一个非控制实体为列演示的面向对象的编程思路,在实际编程中最重要的就是要把对象详细拆分正确,而这些就是前面两章从机械和电气两方面对设备工艺的详细拆分;

不要看上述工艺的拆分,这是最考验工程师能力的地方;往往很多标准化设备由于工艺理解不到位,或者工艺总结没有细致详细,到实际工作就发现某个已经做好的标准化设备,由于其中很小的一个改动或者客户的一个不同要求的提出,这个标准的设备就又无法适用需求;

所以,前面两章节是整个标准化系统最重要的环节,这两个部分做的很好,后面章节就是将整个工艺在控制器中搭建出来,只是一个思想的执行者而已;

所以,工艺部分的理解和拆分的标准化,才是我们整个标准化的灵魂;这也应了一句话就是,程序就是工艺;

展开阅读全文

页面更新:2024-04-26

标签:冷冻室   冷藏室   过程   程序   大象   冰箱   属性   模型   对象   概念   需求

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top