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