您现在所在的是:

PLC论坛

回帖:19个,阅读:2864 [上一页] [1] [2] [下一页]
39267
jint 管理员
文章数:20718
年度积分:777
历史总积分:39267
注册时间:2007/8/30
发站内信
发表于:2019/1/24 14:39:20
#0楼
最近在学习某友商的产品,从学习他们的知识过程中得到一些关于编程的启示,而且我相信以下说法有些和我们平常的工作是相似的。

引文:
把大象装进冰箱的步骤:打开冰箱-->将大象放进去-->关上冰箱门;
这里有2个问题:
1.冰箱空间是否足够装载大象;
2.冰箱是否能承受如此重量的大象;


正题:
客户说要把大象装进冰箱里!
程序员二话不说针对这个需求作出分析之后列出了几个步骤:

1.把冰箱门打开。

2.把大象装进去。

3.把冰箱门关上。

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

FB_OpenTheDoor();

FB_PushElephant();

FB_CloseTheDoor();

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

通过以上描述我们发现,程序员做的工作就是在接到需求以后,会把这些需求拆成一个一个的指令或者步骤,然后根据客户的需求串起来交给控制器去执行。我们把这类的处理方式定义为面向过程(工艺需求)。

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

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

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

。。。。。。

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

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

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

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


客户需求:把大象装进冰箱;


第一步,提炼对象。

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

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

序号        对象名称         对象动作

1           大象             装

2           冰箱             打开

表格1:对象提炼清单


第二步,对象属性分析

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

附件 image.jpg

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

附件 image.jpg


第三步:对象编程

3.1.冰箱的编程

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

输入说明:

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

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

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

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

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

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

属性说明:

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

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

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

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

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

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

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

附件 image.jpg


3.2.大象的编程

参数:没有;

输入说明:

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

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

输出说明:

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

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

属性说明:

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

重量:大象的总重量;

智商:大象的智商;

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

附件 image.jpg

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

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

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


后续

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

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

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

表格4:对象正反转定义      


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

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

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

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


面向对象的优点:
模块化,接口化;
便于后续维护;
使用方便;
功能齐全,能满足对象可以实现的功能;
便于版本控制,利于技术的累积和发展;

面向对象的缺点:
程序员具备一定的分析解决问题、良好的思维以及严谨的测试能力


面向过程的优点:
简单快捷

面向过程的缺点:
功能更新困难,后续维护使用不便,技术无法得以累积并发展

——————————————————————
文章转自:工控网把大象装进冰箱的步骤-——面向对象的PLC编程
作者:流浪枭雄

19263
pqsh 版主
文章数:7424
年度积分:1093
历史总积分:19263
注册时间:2006/8/22
发站内信
2018论坛解答高手
发表于:2019/1/24 14:46:06
#1楼
jint老师讲编程了.
刚开始接触的时候,面向对象,好害羞.
37246
cvlsam 版主
文章数:12401
年度积分:1598
历史总积分:37246
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2019/1/24 14:53:52
#2楼
这个只能说是面对对象设计,绝大多数的PLC编程软件都没有面对对象。
39267
jint 管理员
文章数:20718
年度积分:777
历史总积分:39267
注册时间:2007/8/30
发站内信
发表于:2019/1/24 15:02:52
#3楼
以下是引用cvlsam2019/1/24 14:53:52的发言:
这个只能说是面对对象设计,绝大多数的PLC编程软件都没有面对对象。
欢迎C大开帖讲讲。
4326
965528555
文章数:507
年度积分:50
历史总积分:4326
注册时间:2009/9/7
发站内信
三菱电机活动(三)
发表于:2019/1/24 15:09:24
#4楼
这篇文章讲的蛮好的,很多人就是实现了文中前面的编程方式,而后面的方法真的很重要
7968
蜀中之首
文章数:5230
年度积分:50
历史总积分:7968
注册时间:2018/5/27
发站内信
发表于:2019/1/24 15:29:19
#5楼
在一个新产品推介会上有见到
对象,字段,标签,都是一个东西,会计算机语言的很容易接受,组态软件溜索的也好办,只会梯形图的就遇难了。
不同厂家的数据连接变的非常简单(符合一个标准)
7938
文章数:1877
年度积分:125
历史总积分:7938
注册时间:2008/12/26
发站内信
发表于:2019/1/24 15:38:39
#6楼
这个可以有  学习学习编程思路
21391
fywsch
文章数:13920
年度积分:-192
历史总积分:21391
注册时间:2005/12/30
发站内信
三菱电机活动(三)
西门子logo体验(三)
英威腾PLC体验(二)
发表于:2019/1/24 15:48:11
#7楼
要有好想法,好思路,然后现实中实现它。
34928
lifuquan611
文章数:15318
年度积分:909
历史总积分:34928
注册时间:2005/3/4
发站内信
2018论坛热心网友
2015论坛贡献奖
寻找英威腾(二)
西门子接触器(二)
2010年四月影像
发表于:2019/1/24 16:05:37
#8楼
类流程图,条件,结果。。。
4551
ddt250
文章数:892
年度积分:536
历史总积分:4551
注册时间:2016/12/26
发站内信
发表于:2019/1/24 16:53:41
#9楼
是不是就是现在提倡的使用功能块编程?

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005