沒錯,這里說的是高耦合。
前幾天看了一篇計算機編程的文章, 題目叫做低內聚高耦合,弄得我一度有點恍惚,趕緊把高內聚低耦合的諺語背誦了一遍,才確信文章作者是在講解反面的內容。
而我們做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的函數。我就知道,有很多人,雖然自詡編程水平很高,但高內聚低耦合的思想仍然是沒有的。換我是小學生,我一定跟你擺爛躺平。循環計算這樣的高級工才能干的活, 俺們小學生學不會。現場擰螺絲接線是我的工作,但你工程師也得陪著我來工地上靠著,少不了你。
審核編輯:劉清
-
plc
+關注
關注
5013文章
13327瀏覽量
464065 -
SMART
+關注
關注
3文章
224瀏覽量
44720 -
SID
+關注
關注
0文章
15瀏覽量
3047
原文標題:1223 【萬泉河】談一談高耦合
文章出處:【微信號:PLC標準化編程,微信公眾號:PLC標準化編程】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論