登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:为什么你看了那么多标准化编程,却依然写不好程序?

点击:2876 回复:32

   现在所谓的模块化编程,面向对象编程,甚至于标准化编程等等理念在电气编程领域广泛宣扬,也出现了很多随便把程序分成几个模块就认为这就是面向对象编程了的同仁,没怎么搞清楚面向对象编程的概念就放手去写了。比如有些个朋友,喜欢把一个启保停的程序做成一个块,然后不同的电机调用一次这个块,蛮好吧,这是不是面向对象编程?
  如下图,我是发现很多朋友喜欢这样,把每个小动作做成一个FC,然后集合一下,看,这就是面向对象编程了:
附件 微信截图_20211204170851.jpg
  粗看还好,要是某个项目需要控制的东西非常多时,产生了大量的FC,而且上图还是举例这一个东西调用了三个FC,有些更甚,你要查个问题,得不断的进入下级FC,套娃一样,有甚者在次级FC里还套了下一次FC,有没有朋友遇到过,可以回帖讲讲,这种方式让其他人监控调试程序引起极大不便
  假如这个电机FB测试没有问题了,其他人可以调用,那么他必须同时调用下面包涵的三个FC,否则如果他不清楚的情况少调用一个,就懵了。
  这样写程序的人大有人在,他们认为把动作分解,各自独立成一个FC,然后这就是最好的程序了,也很标准了。大错特错!
  上面的例子,我们可以尝试用下面的方式体现,对比一下是否比它要好:
附件 微信截图_20211204170900.jpg
 这个把这个电机的控制和速度还有状态封装,它是不是比上面的方式更好呢,起码其他人只需要调用这一个FB,不需要再复制其它FC,这个FB就是一个完整独立的功能块,而且其他人要进入FB监视,也不需要多次点击内部的其它套娃式FC,这样的编程方式比前面的那群人呢高级一点了。但这还不是最好的。
  虽然理解了封装的概念,但是我们还要继续升华,理解面向对象。
  其实很多的电气编程的朋友经常犯一个误区,喜欢把驱动器或者执行元件当作对象,这理解我认为是错的。
  其实真正的控制对象,它应当像一个人一样,手,脚只是一个人的一部分驱动,我们不能只把手或脚当作一个对象。我们要学会把一个人当对象,那么这个人除了手,脚(驱动,执行部分),还有肤色,健康状况,还有体温是否正常,还有吃饭睡觉等动作;而这些如果都去拆分成各个功能块,那么再次调用时很难将这些功能块再组合一起,特别是一千个一万个呢。
  那么这个人我们编程时,不能拆分人这个对象,它有驱动执行部分,有肤色属性,有状态信息,还有其它动作。我们要面向它,用一个FB将它的所有功能包涵,在引脚上赋值他的所有属性及事件即可,这样不管有多少人,我们调用这个FB即可。
 那么在设备控制范畴,我们要跳出只关注执行元件范畴,要学会把某个设备或者设备的某个组件看成一个对象,这个组件它有电机,有气缸,有传感器,有指示信号等等,它拥有各类属性及各类事件,但都关联这一个组件。这个时候我们就可以将它看作一个对象。这种概念很难手把手的传达,要学会自己探索体会,等真正明白了这个之后所编写出来的程序那才是好程序。
 只有学会将设备的某一部分组件当作对象,摒弃把动作肆意分解多个FC的想法,然后再开始写程序,我们在一个FB里可以完成它的状态,它包含的每个执行元件的各自动作输出,它的各类信息显示,它与其它组件联动的引脚等。这个时候,别人在调用你的这个FB,只需要对这个对象进行相关赋值,就可以完成这部分组件的各类动作和信息交换。
 如现场很多的轴类控制,西门子的FB284它这个功能块相信很多人有接触过,它不是以一个伺服电机为对象,而是以一个轴为对象,这个轴它有回原点动作,有绝对定位动作,有相对定位动作,你想执行什么只要进行相关赋值即可。同时它还可以进行速度,位置的设定和实际值显示,还包括了它的报警信息,报警代码。它是一个完整的轴对象。而它的这些各类属性和动作如果你都拆分成一个个小的独立的FC,这对其他人熟悉这个FB是非常困难的,我要控制一个轴我得熟悉七八个甚至于几十个FC,然后还得我把它们串起来才能用,这不是好程序。而FB284就只需要你调用一个FB,即可完成你需要的轴控制任务。这个朋友们体会了就能摸着门道。
 上面仅用西门子的这个FB块举例让朋友们方便理解,其它品牌也有同样高效的面向对象编程的FB样例,优秀的工程师们早就告诉我们:
 不要只关注一个动作,不要在程序上把动作分解;
 要学会关注设备,关注它哪些是可以成为一个组件;
 电气控制的最终目的是实现每一个动作,但请学会控制了一个对象的动作,就控制了所有同类对象,这样其它对象就会自动帮你完成动作。
21-12-04 18:10

。。。。。嗯,言之有物,精辟入理,通俗易懂。
     特别是这一句“要学会关注设备,关注它哪些是可以成为一个组件”。。。细品之下,最为精要。
21-12-04 18:44
讲得好!深有感触。
之前现场调试过别人写的程序,他就是喜欢将一个对象的各种功能分块,小PLC里面写了很多子程序,每个子程序完成一个功能,于他自己轻车熟路,好驾驭。换成一个陌生人,一个个子程序翻看,有的甚至有嵌套,就很不好理解与调试,这样子对其他人很不友好。
21-12-04 18:48
当程序逻辑相当复杂时,使用一个FB来完成所有的功能反而不好。
相反,一个FC完成一个功能要比一个FB来完成多个功能要好的多,每个FC或者FB中使用越简单的代码越好。
例如图一的那种,电机启停FC也可以用于气缸等一切类似控制功能,而速度转换FC我可以用在伺服电机位置计算上,从而减少了代码的重复写作。
既然以西门子FB284为例,西门子是不会将所有功能在一个FB中实现,其也是通过图片1中的多个FC或者FB之间套用来实现的。
Good Luck~
21-12-04 18:53
看来论坛也中了万总的毒,开始深究起怎么快速编制出PLC程序的方法了。
其实这玩意就跟商品房家装水电一样,你一定要去研究怎么标准化的布线怎么布管,才方便随便抓一个水电工就能检修出问题,随便换一个水电工,就能无限制的,照本宣科的用这个案例去装出N套商品房的水电布置。殊不知N套房就有N个主人,有N种布局,就可能有N种装修要求。也许这是对的,因为商品房水电不管怎么装,最终还不一样是厨房客厅书房卧室么?
深究一个细分领域的方法(编程或者装修),不失为从业技术升级换代的途径,但是如果不去深究呢?难道工控领域就立马落后了么?工控的大变革感觉还是依靠硬件变革获得更大的提升(比如5G硬件)。
不过话又说回来,在编程技术领域上的深究也能搞出一定的成绩来,比如特斯拉的电池组管理技术,就有限度的提升了新能源车的续航里程,对不呢?表情
21-12-04 19:07
我认为就没有所谓的标准化程序
就以电机控制为例,你能做出的控制模板也只是针对控制要求建立的某个特定模板,以后遇到类似的电机控制要求调用就是了,能有万能模板?
楼上的例子作为开发商是完全可以做到千篇一律,作为毛坯房的装修肯定是万紫千红。
同样,作为电机,有直起,有星角起,还有变频起,伺服起…只是一个电机启动就五花八门,不同的电机,不同的控制…
一个开关,一个PLC,一个灯的程序控制,有标准答案吗?
21-12-04 20:44

引用 知道一点 在 2021/12/4 20:44:27 发言【内容省略】

。。。。。真知灼见,赞!
21-12-04 22:18
本人自己开发的专用控制器,内部也带有电机启停的部分,同样是星三角启动。被控制的电机从55-160KW不等,在控制从星形到三角形转换的时候,是根据系统设置的最大工作电流,来确定转换时间,每次按下启动按钮后,先是星形启动,启动后就会检测三相的电流是否平衡(主电机部分有三个互感器检测电流,三相的电流全检测),是否欠流(低于某个特定的值,说明接触器有问题,会自动报错),启动一定的时间后(根据电流的设置自动计算大概的启动时间),当检测到电流达到转换条件后(电流低于自动计算的结果,且星形时间至少大于2秒),就会转换至三角,如果一个电机启动的时候有一定的负载,那么启动的时间就会长一些,如果电机已经在正常运行,直接急停,然后再次启动的话(电机还在惯性高速运转),就会很快转换过来,星三角转换的时间并不是一个固定的值。
最后修改:2021/12/5 0:38:05
21-12-05 00:25
标准化是一个概念,不是搬别人一套程序出来就是标准化了,像某上帖子里面的买完1500的标准化程序再买smart的标准化程序,这样压根就没有认真去研究什么是标准化,这样的做项目再多也没用;
例如我们行业内,一般会将常用的模式转换,气缸,电缸,压机,焊机,扫码枪等等做成一套标准的模块,大家写程序时候直接调用,只用考虑回原点、自动流程部分,第三方设备的触发程序在标准块内部完成,大大减少了工程师的工作量;
21-12-05 14:35
看过万总的历史发帖记录,好像标准化的灵感来自博图V15,全国那么多工程师用博图V15,难道就他一个领悟出了精髓么?感觉有点给自己搞噱头的样子,不过想起历史上有一个人,好像是理发师,发明了高温耐火材料(有机物),死活捂着到挂掉也不肯商用,后面也有人也摸出来了,并公布天下,其实就是面粉合成制品这玩意。
21-12-06 00:01

上一页下一页

工控新闻

更多新闻资讯