msp430中如何连续对位进行取反_【万泉河】论PLC编程中的高内聚与低耦合
【万泉河】论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编程中的高内聚与低耦合相关推荐
- msp430中如何连续对位进行取反_图像视觉|相机、镜头、光源如何选型?看完这篇你就懂了...
一.视觉系统原理描述 机器视觉就是用机器代替人眼来做测量和判断.机器视觉系统是指通过机器视觉产品(即图像摄取装置,分 CMOS 和CCD 两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,根 ...
- msp430中如何连续对位进行取反_四元数数控:如何保养视觉对位平台?
视觉对位平台由于人工衍生出来的各种问题应运而生,诸如高度要求的良率,生产速度的大幅提升,人员无法达成的精准度等等,对于未来这种高度自动化程度的产业更是不可或缺的产品. 视觉对位平台就是一种利用XY向的 ...
- msp430中如何连续对位进行取反_如何选择护膝的尺码,手把手教你
Hello,大家好,我是LN君! 相信很多人在选护膝的时候,总会面临这样的问题,「怎么确定自己戴多大尺寸的护膝呢」. 当你好不忙乎确定尺码后,实际拿到手也可能发现松了或紧了,来回换码不仅麻烦还影响体验 ...
- msp430中如何连续对位进行取反_OLED制造中三个重要制程其中之一就是PVD技术
OLED制造中有三个比较重要的制程,文中通过相关资料整理,收集了些这三个制程的精华介绍,以供大家了解参考. ITO基板前处理制程 制造有机EL显示面板所采用的Indium-tin-oxide (ITO ...
- python模块化设计耦合度_什么是程序设计中的高内聚、低耦合?
开发者经常遇到一些项目,比如一个真格量化中的策略,要求较高的模块独立性.模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单.我们有两个定性的度量标准--耦合性和内聚性. ...
- 6. 以下耦合度中最松散的耦合是_什么是程序设计中的高内聚、低耦合?
开发者经常遇到一些项目,比如一个真格量化中的策略,要求较高的模块独立性.模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单.我们有两个定性的度量标准--耦合性和内聚性. ...
- java中的高内聚和低耦合和接口的简单理解
## *浅谈java编程语言中高内聚和低耦合**先说低耦合中一个例子: 假设你的一个web应用包含50个函数<或者说方法> 你改动一个函数,其他函数正常运行工作...这就是低耦合.高内聚: ...
- 软件设计中的高内聚、低耦合
一.内聚 1.定义 一个模块内部各元素聚集.关联的程度. 定义的范围在一个模块内部.一个高内聚模块,应该恰好只做一件事.高内聚就是模块内各元素高度聚集.高度关联. 2.特点 高内聚模块具备较好的可靠性 ...
- java数字取反_java中源码反码补码与取反的理解
数字在计算机里是按照二进制来表示的. 箭头朝哪边就是朝哪边移动 补码,反码,和源码 负数原码转化为补码:符号位不变,数值位按位取反,末尾加一. 负数补码转化为原码:符号位不变,数值位按位取反,末尾加1 ...
- 位运算符——取反运算符~的理解
学习位运算符中的取反运算符-- ~ 时,要搞清楚以下几点: 正数的补码是其原码,原码就是其二进制数表示 负数的补码为符号位不变,原码取反再加一 二进制数有八位数,第一位就是符号位 符号位中,0代表正数 ...
最新文章
- react控制 input 框回车之后内容清空
- 小牛生产小牛的问题解决集粹
- linux文件指令 例子,Linux 命令:文件目录操作与实例
- 做一个完整的Java Web项目需要掌握的技能[转]
- ExtJs6第二弹-- 学会查看ExtJs api文档
- 小米路由器4C刷机(以OpenWrt为例)
- 四方光电粒子计数器:洁净室在线监测终极解决方案
- Android WebView使用及苏宁易付宝支付相关问题
- ANSYS经典界面保存单元解和节点解
- Redis常用命令和操作
- (无导师学习神经网络)竞争神经网络、SOFM神经网络
- 数字IC设计随笔之一(Verdi自动添加波形脚本应用)
- 公众号“机器修行”开篇·致读者
- 航模无人机中PWM信号频率浅谈
- sqlServer 查看表结构(字段类型) (更新中)
- ffmpeg录制桌面(队列方式)
- 【谨慎学习】手把手教你破解网站管理后台帐号密码
- win7开机黑屏怎么解决?win7开机黑屏出现reboot and select的解决方法
- OpenCV的CvMat与cvSolve函数
- C语言训练-阶乘和数
热门文章
- Next主题 - 图片设置
- 深度学习visio作图技巧
- oppoa3android怎么升级,OPPO A3刷机教程_OPPO A3卡刷升级更新官方系统包
- Slick.AI | 人工智能在智慧环保应用案例
- ANSYS 闪退问题解决办法
- 2021年高压电工考试题及高压电工模拟考试
- 在 Hexo 中使用 iconfont 图标
- 用ESP32打造一个物联网红外测温打卡机/春节结束急着上班?哒咩,再努力奋斗也要先测体温
- arcgis重心迁移分析_ArcGIS支持下三峡库区适度人口重心迁移研究
- c语言产生不同随机数,怎样用c语言产生不同的随机数