沒錯(cuò),這里說的是高耦合。
前幾天看了一篇計(jì)算機(jī)編程的文章, 題目叫做低內(nèi)聚高耦合,弄得我一度有點(diǎn)恍惚,趕緊把高內(nèi)聚低耦合的諺語背誦了一遍,才確信文章作者是在講解反面的內(nèi)容。
而我們做PLC行業(yè), 也有一些人奉行的高耦合的原則, 或者以高耦合為榮,而不自知。所以就有必要再舉例把這里的概念分析講解清楚。
我曾經(jīng)猶豫延遲很久之后寫過一篇文章《【萬泉河】論PLC編程中的高內(nèi)聚與低耦合》,主要的原因是內(nèi)聚和耦合這樣的詞匯生活中不太常見,很多人不熟悉,會(huì)當(dāng)成行業(yè)黑話,以為是在胡亂忽悠人的。而其實(shí)那是我們搞PLC標(biāo)準(zhǔn)化編程煙臺(tái)方法的綱領(lǐng),主要的目標(biāo)。
我在兩本書,已經(jīng)出版的《PLC標(biāo)準(zhǔn)化原理與方法》和剛剛完稿的《三菱PLC標(biāo)準(zhǔn)化編程煙臺(tái)方法》中,都全文引用了這篇文章,也在之后的各種場合,直接用高內(nèi)聚低耦合的原則指導(dǎo)設(shè)計(jì)方向。
然而,看來效果并不太好。很多人貌似對(duì)煙臺(tái)方法感興趣,但對(duì)高內(nèi)聚低耦合的理念并不理解, 也不去努力嘗試?yán)斫?,反而很多認(rèn)知都反方向的來。
比如我做了80模擬量的例子和80工位雙聯(lián)開關(guān)的例子,大部分人看到程序很簡單,會(huì)覺得很優(yōu)雅,很舒適。然而有一部分讀過之后就很不滿意。甚至殺上門來嘲笑指責(zé)我把程序搞到這么簡單,小學(xué)生都能做出來的程序,也好意思吹牛逼是高科技。
我說對(duì)啊,我們的目的就是復(fù)雜問題簡單化,最終實(shí)現(xiàn)的方法越簡單越優(yōu)雅。如果一個(gè)問題,可以用簡單易懂的方法實(shí)現(xiàn),那我們絕不會(huì)為了追求表面的高科技而故意倒過來把簡單問題復(fù)雜化。
煙臺(tái)方法的學(xué)員拿到分發(fā)的實(shí)例項(xiàng)目以后,看到程序如此簡潔,簡單。雖然是真實(shí)的上千點(diǎn)的工程項(xiàng)目應(yīng)用,然而最終的結(jié)果如80系列例子般簡單,就問, 那是不是我們把自己的設(shè)計(jì)封裝好了,將來項(xiàng)目實(shí)施讓沒有文化的小學(xué)生來承擔(dān)就可以了?。?/p>
我說,對(duì)的呀,這應(yīng)該是每一個(gè)煙臺(tái)方法學(xué)員的最終目標(biāo)。我們現(xiàn)在在一些客戶那里已經(jīng)實(shí)現(xiàn)了整個(gè)項(xiàng)目都由工人來承擔(dān)。工程師把設(shè)計(jì)標(biāo)準(zhǔn)化之后,除非再有新的控制工藝之外, 那些已經(jīng)成熟的應(yīng)用,只需要簡單交接好應(yīng)用指南,工人就可以從設(shè)計(jì)出圖編程到現(xiàn)場調(diào)試都自行完成了,都不需要來請(qǐng)示每個(gè)細(xì)節(jié)。PLC程序內(nèi)的模塊調(diào)用僅僅相似于電柜內(nèi)的元器件拼裝組柜, 難度也相似。
而我一直以來關(guān)注同行的技術(shù)發(fā)展?fàn)顟B(tài)的方式,就是看他們做的庫函數(shù)的耦合難度。說實(shí)話,PLC領(lǐng)域, 高難度的題目并不算多。特別是一些底層的設(shè)備控制,都是簡單到一句話就可以說完的, 那么耦合難度的高低其實(shí)才是我看重的最重要的指標(biāo)。
比如同行們現(xiàn)在都比較關(guān)注的SMART 200中的電機(jī)閥門塊的重復(fù)使用了,包括西門子1847平臺(tái)也有這方面的函數(shù)功能塊的實(shí)現(xiàn)原理方法介紹:
他所設(shè)計(jì)的管腳中有一個(gè)名稱為“參數(shù)”的INOUT管腳。示例調(diào)用中分配了&VB8的指針, 實(shí)際邏輯內(nèi)部使用了VB8開始的N個(gè)字節(jié)的數(shù)據(jù)作為數(shù)據(jù)的記憶緩存,相當(dāng)于FB塊中的靜態(tài)變量。
然而這個(gè)管腳在每一個(gè)實(shí)例的調(diào)用中,還均需要合理調(diào)度V區(qū),不可以重復(fù),否則會(huì)產(chǎn)生沖突。那么在我看來這就是高耦合。有人會(huì)居高臨下指責(zé)說,不就是分配V區(qū)嘛, 按順序分配下來, 有什么難的。
是的,對(duì)懂的人來說,當(dāng)然不難。然而對(duì)不懂的人, 其余的不管是輸入輸出的通道,都是直觀可見的信號(hào),而多出來這個(gè)參數(shù),只為內(nèi)部邏輯所用,而使用者需要了解邏輯原理以后才會(huì)接受,而即便接受也懂的似是而非,那這就如天書一般難了。這樣的一個(gè)細(xì)節(jié)不在意,那么多個(gè)細(xì)節(jié)當(dāng)然也不會(huì)在意,但積累下來,一個(gè)系統(tǒng)中到處都是這樣的難點(diǎn),逐漸的小學(xué)生就會(huì)認(rèn)為太高深,而拒絕配合你去干了。
不懂, 不會(huì),干不了,要干你工程師自己去干!你不哄好他們,讓他們覺得有難度,他們跟你玩賴躺平的本事還是有的。
另外,即便自己親自來做耦合階段的工作, 這種需要調(diào)度資源空間的工作量也毫無意義。所以,如果你對(duì)耦合的重要性有建立那么一點(diǎn)點(diǎn)理解的話,就會(huì)逐漸傾向于優(yōu)化設(shè)計(jì),盡量減少耦合難度。
當(dāng)然,1847課程的重點(diǎn)還是在實(shí)現(xiàn)功能塊重復(fù)的功能,所以不可以輕易指責(zé)他們的做法錯(cuò)了。而從功能模塊化的角度,也需要另外單獨(dú)的課程來講解如何降低耦合難度。所以,我們完全可以在他們做好的原有的庫函數(shù)基礎(chǔ)上,再做一次封裝,實(shí)現(xiàn)我們低耦合的需求。
比如我們可以把課程中已經(jīng)做好的VALVE更名為VALVE_0, 而復(fù)制一個(gè)備份,仍然叫VALVE,其“參數(shù)”部分的管腳改為TEMP變量,利用我們前面曾經(jīng)著文多次提過的GETSID函數(shù),得到SID,并折算到參數(shù)值。邏輯如下:
而最終實(shí)際的調(diào)用則變成了:
雖然看起來僅僅是簡化掉了一個(gè)管腳,然而這個(gè)時(shí)候可以非常簡單地教會(huì)工人使用這個(gè)模塊而毫無障礙了:只需要按照點(diǎn)表把地址正確填入即可。這樣的話, 再笨的小學(xué)生也不會(huì)拒絕配合了。
這個(gè)程序例子的名字叫做“高耦合變低耦合”,我會(huì)放在80例程的分享群中,需要者自行獲取,或者跟我私信索要。然而其中VALVE_0和GETSID塊只有接口, 邏輯功能需要自行補(bǔ)足。其中VALVE的功能從1847課堂獲取,而GETSID的實(shí)現(xiàn),大家現(xiàn)在可以理解我提及多次的GETSID的需求了吧?
而我在反復(fù)講解GETSID應(yīng)用的時(shí)候,就有大蝦不理解,質(zhì)問分明在循環(huán)調(diào)用時(shí)做個(gè)增量計(jì)算就可以實(shí)現(xiàn)SID的自動(dòng)分配,為啥還要專門做一個(gè)SID的函數(shù)。我就知道,有很多人,雖然自詡編程水平很高,但高內(nèi)聚低耦合的思想仍然是沒有的。換我是小學(xué)生,我一定跟你擺爛躺平。循環(huán)計(jì)算這樣的高級(jí)工才能干的活, 俺們小學(xué)生學(xué)不會(huì)?,F(xiàn)場擰螺絲接線是我的工作,但你工程師也得陪著我來工地上靠著,少不了你。
審核編輯:劉清
-
plc
+關(guān)注
關(guān)注
5017文章
13397瀏覽量
465722 -
SMART
+關(guān)注
關(guān)注
3文章
227瀏覽量
44775 -
SID
+關(guān)注
關(guān)注
0文章
15瀏覽量
3061
原文標(biāo)題:1223 【萬泉河】談一談高耦合
文章出處:【微信號(hào):PLC標(biāo)準(zhǔn)化編程,微信公眾號(hào):PLC標(biāo)準(zhǔn)化編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
耦合器的噪音控制技術(shù) 耦合器性能測試標(biāo)準(zhǔn)與方法
不同類型耦合器的優(yōu)缺點(diǎn) 耦合器與聯(lián)軸器的區(qū)別
以太網(wǎng)RDMA RoCE的技術(shù)局限
![以太網(wǎng)RDMA RoCE的技術(shù)局限](https://file1.elecfans.com/web1/M00/F3/65/wKgaoWcXB-mAQtr_AAEqnkKlroI661.jpg)
什么是耦合器?
光耦合器的簡短揭秘
![光<b class='flag-5'>耦合</b>器的簡短揭秘](https://file1.elecfans.com/web2/M00/09/87/wKgaomb5D9GAPbd0AABAUbPNdA4269.jpg)
理解在高輸出電流和溫度下工作的SOA曲線
![<b class='flag-5'>理解</b>在<b class='flag-5'>高</b>輸出電流和溫度下工作的SOA曲線](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論