【万泉河】论PLC编程中的高内聚与低耦合

高内聚低耦合,是软件工程中的概念。主要源自于面向对象的程序设计中的原则。我们在推广标准化编程的过程中,不可避免地也遵循了这样的原则。

但由于这2个词汇本身比较生僻,怕吓到一些初学者,所以,以往我们基本不使用这样的说法。

首先在网上以高内聚、低耦合为关键字搜索,随便就能收到一大堆这方面的文章。这里随便转发一篇,大家可以大概一看。

什么是程序设计中的高内聚、低耦合?

https://mp.weixin.qq.com/s/y3zG97igGakL9rouNS8_kA

估计如果你不是专业的IT程序员,而只是工控行业,做点自动化PLC编程的电气工程师,那些文章看过之后,仍然会不明所以,不明白与自己做的PLC编程有什么关系。或者说这些理念,如何能对号入座应用到自己日常的PLC程序设计中。

本文,则试图以最浅显的语言,解释高内聚低耦合的原理,并以此约定PLC标准化编程的基本原则。

何为内聚,何为耦合?

映射到PLC编程中,最简单的解释,逻辑部分即为内聚。而调用逻辑(即对象实例化)的过程,即为耦合。

而高内聚低耦合的意义则为,承载逻辑部分的功能要尽量复杂完备,而负责调用逻辑块的部分,要尽可能的简单,最好是啥逻辑都没有。

当简单到啥逻辑都没有的时候,所谓的耦合,即调用的部分,存在的目的只是实现了参数(实参)的绑定。

最极致的简单,我给标准化学习营的学员提出的建议,也是我自己一直坚持的准则,模块调用的管脚上,哪怕一个取反,这是个最微不足道的逻辑吧?都不要有。

即,所有管脚的绑定实际参数,必须是正值。

举一个例子,比方一个电机设备,他可能会有允许启动的启动条件,和禁止启动的互锁条件。这两种条件的本质是互相取反的。

过去通常的做法,一个设备,允许启动的管脚上,绑上启动条件。而同级别的另一个设备,工艺要求的是一些禁止启动的互锁条件,那就将变量取反,同样输入到允许启动的管脚了。

那我给出的原则建议是,不允许

给出的理由是,假设我们的系统足够庞大,点数特别多。那么通常会是主设工程师,带几个实习生,共同完成项目。而复杂的逻辑部分,自然由主设工程师负责。而相对简单的,不大需要动脑的部分,安排实习生或者助理工程师来完成。主要是数量庞大的对点,绑点,查线,消缺等工作。

在没有逻辑需求的情况下,只是简单绑点,那么新手可以简单复制替换,或者复杂一点使用EXCEL或者小的自动工具完成。

而如果上千个设备,同样的管脚的位置,有的需要正逻辑,有的需要反逻辑,还有的有一点点并联和串联,那基本上就麻烦不断了。要么实习生不熟悉工艺和逻辑到处出错,要么因为无从下手,而需要时刻盯着主设工程师请教。

在一些极端的情况下,主设工程师还会抱怨,咋这实习生啥都不懂,啥都问我,还不如我自己亲自做了呢!

由此,工作的分工就失败了。

所以,如果你还不能深刻理解什么叫高内聚,低耦合,那么简单分工一下,高难度的,主任工程师做的工作,就叫内聚。低难度,新手实习生就可以做的工作,就叫耦合。

或许有人会说,我的控制系统很小,也无人跟我配合,上上下下,都是我自己一个人在搞定,就没必要分什么内聚和耦合了吧?

非也。

每一个人的精力,不可能一整天都在同一个紧张或者放松的状态。实际的工作情况也不允许你常年保持一个状态。比如经常有人表示,夜深人静的时候,注意力更集中,所以更容易做一些精细的,需要精确逻辑推理或者数学计算的工作。而白天的时候,各种事务性工作太多,电话,会议等打扰不断,根本容不得你静不下心来做设计,刚想做一点设计了,一个电话进来,或者讨论一个新方案,思路被打断,回来后都忘记做到哪儿了,又要从头开始。

这个时候,你就可以对自己的工作时间做个合理的分工,把可以集中精力的连续片段的时间,安排做难度高的工作,而把容易被切割的片段时间,安排做用脑比较少,但属于偏向于体力活的简单工作。

前者即内聚,后者为耦合。

这是在设计工作中的原则。

而对于产品开发,其实也同样存在高内聚与低耦合的逻辑。

一个好的开发的产品,一定是高内聚低耦合的,即其内部的功能可以很强大,但留给使用者的接口又非常简单。使用者不需要非常懂得产品的原理,却可以轻松使用地很好。

这其中,典型的是日本人推出的傻瓜相机。留给摄像师的需要调整的参数极其少,摄像者甚至不需要懂太高深的摄像原理,都可以照出完美的影像来。根源就是,产品的开发者,极大程度的实现了高内聚,低耦合。

还有一个更典型的例子是苹果手机。苹果推出手机之后迅速风靡全球,所有倩倩少女,都以自己可以轻松玩转苹果手机系统为荣。根源也在于乔帮主带领一干设计工程师,把各种复杂的功能,都集大成地不留痕迹的内聚到其核心了。留给使用者的,只是最简单的操作。

我想到这一点,其实来自于有WANQ局域网互通路由器的用户,新体验了产品之后,跟我感慨,这使用也太简单了吧!简直零难度,零设置啊,啥都不需要做。仅仅设置设备上网而已。和普通路由器完全一样。

我说,对呀,我们在出厂之前,把所有设置都做好了。留给用户的只是最简单的应用了。所谓的使用说明书,也只是防止有新手想多想歪,反而做不成。所以给出了个手把手的傻瓜手册。

而实际上,所有的老用户,再次购买的时候,我们的设备压根说明书都不发了。

就是这么有底气!

对WANQ路由器感兴趣的用户,在公众号后台回复WANQ微信群,申请加入用户群,与新老用户咨询交流!顺便请教一下老用户们,是不是真的不需要说明书了。

对学习PLC标准化编程有兴趣的,请加微信ZHO6371995交流。

总得来说,我一直在做的工作,不管是标准化编程,还是WANQ,本质上都是一件事:高内聚,低耦合。

msp430中如何连续对位进行取反_【万泉河】论PLC编程中的高内聚与低耦合相关推荐

  1. msp430中如何连续对位进行取反_图像视觉|相机、镜头、光源如何选型?看完这篇你就懂了...

    一.视觉系统原理描述 机器视觉就是用机器代替人眼来做测量和判断.机器视觉系统是指通过机器视觉产品(即图像摄取装置,分 CMOS 和CCD 两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,根 ...

  2. msp430中如何连续对位进行取反_四元数数控:如何保养视觉对位平台?

    视觉对位平台由于人工衍生出来的各种问题应运而生,诸如高度要求的良率,生产速度的大幅提升,人员无法达成的精准度等等,对于未来这种高度自动化程度的产业更是不可或缺的产品. 视觉对位平台就是一种利用XY向的 ...

  3. msp430中如何连续对位进行取反_如何选择护膝的尺码,手把手教你

    Hello,大家好,我是LN君! 相信很多人在选护膝的时候,总会面临这样的问题,「怎么确定自己戴多大尺寸的护膝呢」. 当你好不忙乎确定尺码后,实际拿到手也可能发现松了或紧了,来回换码不仅麻烦还影响体验 ...

  4. msp430中如何连续对位进行取反_OLED制造中三个重要制程其中之一就是PVD技术

    OLED制造中有三个比较重要的制程,文中通过相关资料整理,收集了些这三个制程的精华介绍,以供大家了解参考. ITO基板前处理制程 制造有机EL显示面板所采用的Indium-tin-oxide (ITO ...

  5. python模块化设计耦合度_什么是程序设计中的高内聚、低耦合?

    开发者经常遇到一些项目,比如一个真格量化中的策略,要求较高的模块独立性.模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单.我们有两个定性的度量标准--耦合性和内聚性. ...

  6. 6. 以下耦合度中最松散的耦合是_什么是程序设计中的高内聚、低耦合?

    开发者经常遇到一些项目,比如一个真格量化中的策略,要求较高的模块独立性.模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单.我们有两个定性的度量标准--耦合性和内聚性. ...

  7. java中的高内聚和低耦合和接口的简单理解

    ## *浅谈java编程语言中高内聚和低耦合**先说低耦合中一个例子: 假设你的一个web应用包含50个函数<或者说方法> 你改动一个函数,其他函数正常运行工作...这就是低耦合.高内聚: ...

  8. 软件设计中的高内聚、低耦合

    一.内聚 1.定义 一个模块内部各元素聚集.关联的程度. 定义的范围在一个模块内部.一个高内聚模块,应该恰好只做一件事.高内聚就是模块内各元素高度聚集.高度关联. 2.特点 高内聚模块具备较好的可靠性 ...

  9. java数字取反_java中源码反码补码与取反的理解

    数字在计算机里是按照二进制来表示的. 箭头朝哪边就是朝哪边移动 补码,反码,和源码 负数原码转化为补码:符号位不变,数值位按位取反,末尾加一. 负数补码转化为原码:符号位不变,数值位按位取反,末尾加1 ...

  10. 位运算符——取反运算符~的理解

    学习位运算符中的取反运算符-- ~ 时,要搞清楚以下几点: 正数的补码是其原码,原码就是其二进制数表示 负数的补码为符号位不变,原码取反再加一 二进制数有八位数,第一位就是符号位 符号位中,0代表正数 ...

最新文章

  1. react控制 input 框回车之后内容清空
  2. 小牛生产小牛的问题解决集粹
  3. linux文件指令 例子,Linux 命令:文件目录操作与实例
  4. 做一个完整的Java Web项目需要掌握的技能[转]
  5. ExtJs6第二弹-- 学会查看ExtJs api文档
  6. 小米路由器4C刷机(以OpenWrt为例)
  7. 四方光电粒子计数器:洁净室在线监测终极解决方案
  8. Android WebView使用及苏宁易付宝支付相关问题
  9. ANSYS经典界面保存单元解和节点解
  10. Redis常用命令和操作
  11. (无导师学习神经网络)竞争神经网络、SOFM神经网络
  12. 数字IC设计随笔之一(Verdi自动添加波形脚本应用)
  13. 公众号“机器修行”开篇·致读者
  14. 航模无人机中PWM信号频率浅谈
  15. sqlServer 查看表结构(字段类型) (更新中)
  16. ffmpeg录制桌面(队列方式)
  17. 【谨慎学习】手把手教你破解网站管理后台帐号密码
  18. win7开机黑屏怎么解决?win7开机黑屏出现reboot and select的解决方法
  19. OpenCV的CvMat与cvSolve函数
  20. C语言训练-阶乘和数

热门文章

  1. Next主题 - 图片设置
  2. 深度学习visio作图技巧
  3. oppoa3android怎么升级,OPPO A3刷机教程_OPPO A3卡刷升级更新官方系统包
  4. Slick.AI | 人工智能在智慧环保应用案例
  5. ANSYS 闪退问题解决办法
  6. 2021年高压电工考试题及高压电工模拟考试
  7. 在 Hexo 中使用 iconfont 图标
  8. 用ESP32打造一个物联网红外测温打卡机/春节结束急着上班?哒咩,再努力奋斗也要先测体温
  9. arcgis重心迁移分析_ArcGIS支持下三峡库区适度人口重心迁移研究
  10. c语言产生不同随机数,怎样用c语言产生不同的随机数