中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

PLC论坛

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 PLC论坛 → 浏览主题: 1223 【万泉河】谈一谈高耦合
发表新帖 回复该主题
回帖:7个,阅读:708 [上一页] [1] [下一页]
* 帖子主题:

1223 【万泉河】谈一谈高耦合

分享到
2180
万泉河.
文章数:910
年度积分:65
历史总积分:2180
注册时间:2009/12/4
发站内信
发表于:2022/12/23 21:01:42
#0楼
1223 【万泉河】谈一谈高耦合

没错,这里说的是高耦合。

前几天看了一篇计算机编程的文章, 题目叫做低内聚高耦合,弄得我一度有点恍惚,赶紧把高内聚低耦合的谚语背诵了一遍,才确信文章作者是在讲解反面的内容。

而我们做PLC行业, 也有一些人奉行的高耦合的原则, 或者以高耦合为荣,而不自知。所以就有必要再举例把这里的概念分析讲解清楚。

我曾经犹豫延迟很久之后写过一篇文章《【万泉河】论PLC编程中的高内聚与低耦合》,主要的原因是内聚和耦合这样的词汇生活中不太常见,很多人不熟悉,会当成行业黑话,以为是在胡乱忽悠人的。 而其实那是我们搞PLC标准化编程烟台方法的纲领,主要的目标。

我在两本书,已经出版的《PLC标准化原理与方法》和刚刚完稿的《三菱PLC标准化编程烟台方法》中,都全文引用了这篇文章,也在之后的各种场合,直接用高内聚低耦合的原则指导设计方向。

然而,看来效果并不太好。很多人貌似对烟台方法感兴趣,但对高内聚低耦合的理念并不理解, 也不去努力尝试理解,反而很多认知都反方向的来。

比如我做了80模拟量的例子和80工位双联开关的例子,大部分人看到程序很简单,会觉得很优雅,很舒适。 然而有一部分读过之后就很不满意。甚至杀上门来嘲笑指责我把程序搞到这么简单,小学生都能做出来的程序,也好意思吹牛逼是高科技。

我说对啊,我们的目的就是复杂问题简单化,最终实现的方法越简单越优雅。如果一个问题,可以用简单易懂的方法实现,那我们绝不会为了追求表面的高科技而故意倒过来把简单问题复杂化。

烟台方法的学员拿到分发的实例项目以后,看到程序如此简洁,简单。虽然是真实的上千点的工程项目应用,然而最终的结果如80系列例子般简单,就问, 那是不是我们把自己的设计封装好了,将来项目实施让没有文化的小学生来承担就可以了啊?

我说,对的呀,这应该是每一个烟台方法学员的最终目标。我们现在在一些客户那里已经实现了整个项目都由工人来承担。工程师把设计标准化之后,除非再有新的控制工艺之外, 那些已经成熟的应用,只需要简单交接好应用指南,工人就可以从设计出图编程到现场调试都自行完成了,都不需要来请示每个细节。 PLC程序内的模块调用仅仅相似于电柜内的元器件拼装组柜, 难度也相似。

而我一直以来关注同行的技术发展状态的方式,就是看他们做的库函数的耦合难度。 说实话,PLC领域, 高难度的题目并不算多。 特别是一些底层的设备控制,都是简单到一句话就可以说完的, 那么耦合难度的高低其实才是我看重的最重要的指标。

比如同行们现在都比较关注的SMART 200中的电机阀门块的重复使用了,包括西门子1847平台也有这方面的函数功能块的实现原理方法介绍:


他所设计的管脚中有一个名称为“参数”的INOUT管脚。示例调用中分配了&VB8的指针, 实际逻辑内部使用了VB8开始的N个字节的数据作为数据的记忆缓存,相当于FB块中的静态变量。

然而这个管脚在每一个实例的调用中,还均需要合理调度V区,不可以重复,否则会产生冲突。 那么在我看来这就是高耦合。有人会居高临下指责说,不就是分配V区嘛, 按顺序分配下来, 有什么难的。

是的,对懂的人来说,当然不难。然而对不懂的人, 其余的不管是输入输出的通道,都是直观可见的信号,而多出来这个参数,只为内部逻辑所用,而使用者需要了解逻辑原理以后才会接受,而即便接受也懂的似是而非,那这就如天书一般难了。 这样的一个细节不在意,那么多个细节当然也不会在意,但积累下来,一个系统中到处都是这样的难点,逐渐的小学生就会认为太高深,而拒绝配合你去干了。

不懂, 不会,干不了,要干你工程师自己去干!你不哄好他们,让他们觉得有难度,他们跟你玩赖躺平的本事还是有的。

另外,即便自己亲自来做耦合阶段的工作, 这种需要调度资源空间的工作量也毫无意义。所以,如果你对耦合的重要性有建立那么一点点理解的话,就会逐渐倾向于优化设计,尽量减少耦合难度。

当然,1847课程的重点还是在实现功能块重复的功能,所以不可以轻易指责他们的做法错了。 而从功能模块化的角度,也需要另外单独的课程来讲解如何降低耦合难度。 所以,我们完全可以在他们做好的原有的库函数基础上,再做一次封装,实现我们低耦合的需求。

比如我们可以把课程中已经做好的VALVE更名为VALVE_0, 而复制一个备份,仍然叫VALVE,其“参数”部分的管脚改为TEMP变量,利用我们前面曾经著文多次提过的GETSID函数,得到SID,并折算到参数值。逻辑如下:


而最终实际的调用则变成了:

虽然看起来仅仅是简化掉了一个管脚,然而这个时候可以非常简单地教会工人使用这个模块而毫无障碍了:只需要按照点表把地址正确填入即可。这样的话, 再笨的小学生也不会拒绝配合了。

这个程序例子的名字叫做“高耦合变低耦合”,我会放在80例程的分享群中,需要者自行获取,或者跟我私信索要。 然而其中VALVE_0和GETSID块只有接口, 逻辑功能需要自行补足。其中VALVE的功能从1847课堂获取,而GETSID的实现,大家现在可以理解我提及多次的GETSID的需求了吧?

而我在反复讲解GETSID应用的时候,就有大虾不理解,质问分明在循环调用时做个增量计算就可以实现SID的自动分配,为啥还要专门做一个SID的函数。我就知道,有很多人,虽然自诩编程水平很高,但高内聚低耦合的思想仍然是没有的。 换我是小学生,我一定跟你摆烂躺平。循环计算这样的高级工才能干的活, 俺们小学生学不会。现场拧螺丝接线是我的工作,但你工程师也得陪着我来工地上靠着,少不了你。
附件:1223 【万泉河】谈一谈高耦合.pdf
[本地下载]
PLC标准化编程
20063
bnnyygy
文章数:5723
年度积分:729
历史总积分:20063
注册时间:2012/3/15
发站内信
2018论坛分享达人
发表于:2022/12/23 21:18:40
#1楼
辛苦万老师了,写这么多,我也没看.


啥时候万老师留个附件程序让大伙儿观摩下
36498
cvlsam 版主
文章数:12298
年度积分:850
历史总积分:36498
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2022/12/23 21:40:12
#2楼
以下是引用bnnyygy2022/12/23 21:18:40的发言:
辛苦万老师了,写这么多,我也没看.


啥时候万老师留个附件程序让大伙儿观摩下

我觉得当前最主要的是你分享程序时应该留点Bug,这样指不定哪天把烟台学员带进沟里,万掌门还可以洋洋得意的发帖表扬自己程序写得简单。
36773
知道一点
文章数:21904
年度积分:1192
历史总积分:36773
注册时间:2004/6/12
发站内信
工控人谈电商
2013国庆活动
2011国庆活动
发表于:2022/12/24 14:03:58
#3楼
回复 #2楼 cvlsam
还沾沾自喜的说修正了学员的bug,学员又没看出给埋了更大的BUG,然后美滋滋的点赞
快乐 幸福 自由 比什么都重要
2180
万泉河.
文章数:910
年度积分:65
历史总积分:2180
注册时间:2009/12/4
发站内信
发表于:2022/12/27 11:48:24
#4楼
回复 #1楼 bnnyygy
去看80例子。

除此之外,就是完整的工程项目了。

你觉得直接问人要完整的项目资料, 好吗?
PLC标准化编程
2180
万泉河.
文章数:910
年度积分:65
历史总积分:2180
注册时间:2009/12/4
发站内信
发表于:2022/12/27 11:50:34
#5楼
回复 #3楼 知道一点
你认为有bug,顶多是与你习惯的工艺逻辑不同。
然而,任何人随时都可以修复bug。

只要不像某大佬一样把人盘子都掀翻了,另起炉灶重写程序就行。

bug无关编程方法。
PLC标准化编程
8175
fujifa
文章数:2909
年度积分:108
历史总积分:8175
注册时间:2014/2/10
发站内信
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
发表于:2022/12/27 11:54:34
#6楼
以下是引用万泉河.2022/12/27 11:48:24的发言:
去看80例子。

除此之外,就是完整的工程项目了。

你觉得直接问人要完整的项目资料, 好吗?

自我感觉真好,当然骗子是要有这点心态才能骗得。

恬不知耻才是骗子的基本素养。
精通富士POD,富士PLC的编程
有问题可以直接电邮:FUJIFA@yeah.net
36773
知道一点
文章数:21904
年度积分:1192
历史总积分:36773
注册时间:2004/6/12
发站内信
工控人谈电商
2013国庆活动
2011国庆活动
发表于:2022/12/27 12:11:19
#7楼
以下是引用万泉河.2022/12/27 11:50:34的发言:
你认为有bug,顶多是与你习惯的工艺逻辑不同。
然而,任何人随时都可以修复bug。

只要不像某大佬一样把人盘子都掀翻了,另起炉灶重写程序就行。

bug无关编程方法。
难怪有"恬不知耻的素养。"
快乐 幸福 自由 比什么都重要
工控学堂推荐视频:

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

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

62.4004