故事作者:万泉河

最近创作

看看TA的故事

1118 【万泉河】结构化编程不是设备对象的模块化,而是。。。。

已锁定

万泉河

  • 帖子

    10885
  • 精华

    132
  • 被关注

    892

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

1118 【万泉河】结构化编程不是设备对象的模块化,而是。。。。

2176

19

2022-11-18 16:15:53

1118 【万泉河】结构化编程不是设备对象的模块化,而是。。。。

 

我强调过多次了,烟台方法提供的只是一套完整的系统设计的范本。参加 学习的学员,得到的只不过是一张完美而优雅的大饼。 凡是没有见过的人,都根本想不到大饼啥样子。就像初进入职场的员工,对老板给画的大饼过于美好反而充满质疑一样。然而不同的是,我这里是把这张大饼完完整整的做出来了,让大家品尝的同时,也晓得了大饼真的存在,这个大饼果然是一层又一层那么多层摊出来的。得到了验证之后每个人回家去烙自己的大饼了。

 

其实太多人无法想象也有情可原,因为我自己,在开始做的时候,也根本没有预想过会是现在的样子,一层又一层摊出来,重叠在一起的千层饼的样子,我自己都觉得惊奇,从来没见过别的人别的行业有这么做过。 所以确信应该是PLC行业首创。

 

然而,我们在一个项目中所能展现的技术方法是有限的,因为这个项目中压根没有用到嘛!所以,我后来又整理了一些文章,有的发在了公众号和专栏,有的也加到了专著中, 从各个应用方面, 针对各种各种需求给出解决思路。

 

其中,大部分的问题来自标准化学习营的学员们。 他们在自己各自从事的行业,以及用到的形形色色的产品元件,系统结构中,有一些特殊的要求, 示范项目中学不到,《PLC标准化编程原理与方法》的书也没有。所以就在学员群里和其他的学员们讨论。

 

有一个问题是一直悬而未决的。是在触摸屏上的模块化化实现。 我们的示范项目是S7-1500+WINCC的, 从外观上看无限接近于一套DCS系统。即上位操作单个设备的时候,是通过弹出式对话框来实现的。

 

而大量的非标设备通常都是由触摸屏来做上位人机界面的,尤其是许多低端型号的触摸屏,是无法做到弹出窗口的。所以资料中有我们做过的MCGS的资料,但只是用普通的方法,按钮平铺开实现的,并没有实现通用的模块化的窗口化的实现方法。

 

当然,我给出的解释是,对于非标设备,通常一个触摸屏能控制的对象数量有限,所以即便没有标准化模板,工作量也没多大。学员们倒也欣然接受。也有学员在西门子精致屏中用多路复用的方法,以及在MCGS屏中的高级技能,自行实现了窗口调用。

 

但总不是很令人满意。主要是实现的过程太复杂,太累。 我自己在项目中做过多路复用,感觉就不是很好,功能没有模块化,不能重复,所以不太满意。

 

今年上半年,在学习西门子的新版例程LBP的过程中,读到了它有通过在PLC中设立一个公用的数据区,通过PLC逻辑来实现触摸屏中数据多路复用的方法,很是有趣。 也想有机会嫁接到烟台方法架构中来实现。

然而,有一个核心的功能问题没解决,所以就一直悬而未决。 有一天,学员们又在讨论相关问题的时候,我就把问题提出来,大家胡乱讨论了一番,都没有结果。

 

我当然知道这种问题是问不来答案的。那些口口声声嘲笑烟台方法只是糊弄新手小白的而把自己当做高手的高手如云的群,我压根就没去问他们。

 

甚至官方论坛也没必要问, 我自己都还不会的问题,又有几个能知道呢!所以直接问了下崔坚:

 

请问一下,一个FB的2个实例,即2个IDB,优化块,我想把数据从IDBA完整复制到IDBB,有没有什么指令?

 

崔工第一时间回答是不知道有,因为我问的时间是晚上,他答应我第二天上班后帮查一下,内部同事们交流一下。 第二天给我的回复是没有这个功能。

 

而我在崔工给我回复不知道后,就又直接问了下在德国的PORTAL研发中心的哥们,也请他可以直接问下核心研发的德国同事。

 

稍晚后,给我来了回复,说是一组Symbolic move的命令可以。还发来了屏幕照片:


然而,我在V16中没有找到。 发给学员们,大家在V17中找了半天,也都没找到这个指令。 有人甚至去SIOS搜索帮助,也没找到。

 

我就再去追问哥们,是什么版本。他也有点迷糊了,研发的电脑上版本有点乱,有可能新功能不经意间掺进来了。 所以告诉我有可能是V18的。

 

那我们就只有等V18正式发行之后了。

 

然而我就想,既然现成的指令没有, 那把数据拆开打散了能不能实现呢?想了几个晚上,做了一些实验,通过搭建UDT,大致实现了。

 

就找了个晚上的时间,在学员群中做了一场直播讲座。讲座完成,学员们回去纷纷做实验自己再去实现了。他们实现后会让他们再逐个来做讲座讲解自己的实现过程。

 

有学员反复看录制的视频,发来个疑问,问我为啥要在原有的FB:NM29上面封装一层,单独做个NM30来实现呢?能不能在NM29里面直接增加代码实现呢?

 

就引来了这篇文章的题目。

 

我语音讲解了一下,大致的意思便是,结构化模块化编程的本质不是设备对象的模块化,而是功能的模块化。

 

比如一条生产线, 你按照顺序1,2,3,4,5,给分成5个单元来设计和编程, 那算不上什么模块化

 

烟台方法的标准化架构, 要实现的是每一个功能的模块化。 比如一台普通的电机,仅仅实现了手动自动的控制运行功能,但在各行业的应用中会需要增加一些特殊的功能,比如中央声光报警,寿命累积,变频器,正反转,星三角启动,以及本文提到的触摸屏多路复用等等。

 

我们经常见到一些人在谈到要做标准化的时候,就大谈规划。 大意是只要把所有需要的功能都提前考虑齐全了,都做好了,具体使用的时候只需要打勾,库函数的管脚上每个功能都有个激活的管脚,只需要把这个管脚打勾了,激活了,这个功能就选择激活了。

 

凡是有这样理论的人,我都可以断定他们不懂标准化和模块化。 如此的做法,有2个弊端:

1,  把所有能想得到的功能都做在库函数里面,会导致库的规模巨大,具体应用中有大量的功能是用不到的,就成了累赘。 然而因为所有功能都混杂在一起,要摘除反而需要一定的调试工作量。

2,这种大而全的思路本身是僵化的,其前提基础是技术工艺都是现成的,目的要求实现方法都是明确的,只需要规划好了做进去即可。 然而忽略了需要一直创新,技术一直需要发展。 如果已经做好了固化了,再有新功能需求怎么办?那就不断再增加,而前面的所谓的规划就全部失效了。 你今天的规划再好,也永远不能涵盖明天的技术发展。

 

比如我现在用UDT实现的功能,其实并没有完全模块化,对不同的设备类型, 电机, 阀门,都还要单独再编程和增加代码实现。如果将来V18新功能出来后,研究好了,有可能用一个功能模块就能实现所有设备类型通用。 我们总不能一直停留在原地等软机系统提供新功能吧!

 

我在书中的5.5.1节, 提到了把一个原始的库函数封装一层,首先实现了对原有设备功能的100%的继承而又没有增加任何新功能。 这个封装技能本身非常重要,我都是要求学员们重点掌握的。 而书的读者们也建议重视起来。 这个技能虽然看起来平淡无奇,也没多少难度,然而确实实现模块化设计的基石。 任何功能都可以模块化地添加,也可以模块化地删除减少。

 

这次的讲座中讲解到的多路复用的实现过程中,再次用到了UID的功能,即在去年底时出过的题目。而我自己在近一年中又有了新的实现方法,在讲座中又花费了一大块时间做了讲解。只不过发现程序还有一些小问题, 等彻底解决之后再拿出来探讨。 

 




1118 【万泉河】结构化编程不是设备对象的模块化,而是。。。。 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3227条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。