0811 【萬泉河】雙線圈第五彈:雙線圈與手自動
我寫文章探討PLC編程中的雙線圈問題,這是第五篇了。 前面四篇分別是:
0428 【萬泉河】PLC編程:談虎色變雙線圈
0509 【萬泉河】雙線圈前傳:關(guān)于線圈的定義
0512 【萬泉河】破除雙線圈禁忌:給PLC新手的系列直播講座計(jì)劃
0728 【萬泉河】談虎色變雙線圈再談再變
很不幸, 我寫文章的順序不是由淺及深逐步來的, 而是倒過來的。
因?yàn)槲沂窃趯?shí)際的技術(shù)應(yīng)用中以及標(biāo)準(zhǔn)化推廣過程中發(fā)現(xiàn)和總結(jié)一些技術(shù)觀點(diǎn),以自認(rèn)為夠通俗直白的方式寫出來。
然后根據(jù)讀者討論和反饋 的情況, 針對討論過程中的疑問以及發(fā)現(xiàn)的讀者群體中普遍存在的認(rèn)知盲區(qū), 再提煉總結(jié)更淺顯的道理,寫成文章發(fā)表出來。
有同行嘲笑萬老師連雙線圈這種破事,都能攢出好幾篇文章來, 是不是有點(diǎn)太小題大做沒事找事了。
是的呀, 我本來也希望一篇淺文,對一個方面的技術(shù)細(xì)節(jié)有個結(jié)論, 文章發(fā)完即了事,然而,往往事與愿違, 而且不是由我個人決定的。 因?yàn)槭鞘茏x者的反饋決定的。 如果文章發(fā)完, 大家異口同聲地回復(fù),OKOK,懂了懂了, 還可以這樣,學(xué)習(xí)get到了新姿勢。 那文章算是達(dá)到了初始目的,大家皆大歡喜。
然而, 如果后面反饋的爭論聲音很大, 各種雜音都有,就說明這個理論觀點(diǎn)在同行中沒有得到普遍的認(rèn)同, 有可能是最開始的文章立意出發(fā)點(diǎn)高了, 導(dǎo)致有一些人看不懂,所以才會有較大的爭議。 那么就只能不斷的把出發(fā)點(diǎn)拉低再拉低, 換個角度再重復(fù)強(qiáng)調(diào),以達(dá)成技術(shù)上的共識。
而在反饋的聲音中,除了技術(shù)觀點(diǎn)反對的之外, 竟然還有指責(zé)漫罵的,甚至上升到人身攻擊。 這樣的,基本上是回復(fù)者個人道德水準(zhǔn)有問題, 或羨慕嫉妒恨, 或情商低到認(rèn)為受到了歧視。 總之, 網(wǎng)絡(luò)是有記憶力的, 這些謾罵者只要自己不怕丟人現(xiàn)眼, 這些帖子回復(fù)會一直存在,一直留給世人觀瞻看笑話。如果自認(rèn)為一輩子就是個不知名的無名小卒也倒罷了, 而如果那些自認(rèn)為還有些身份, 有些名望的, 然后卻在這種極其簡單的小問題上面舔著臉來跟我糾纏的, 那反而是自己的臉都豁出去了。 完全咎由自取, 我踹起臉來可是毫不留情面的。
因?yàn)槠鋵?shí),我的文章的第一目標(biāo)受眾是參加了煙臺方法學(xué)習(xí)的學(xué)員, 把這些技術(shù)原理和觀點(diǎn), 用淺顯的文字表述出來,讓他們可以更直觀的了解到煙臺方法程序架構(gòu)中的基本思想, 可以通過文章幫助理解研讀程序原理, 以及在后面他們自己公司的設(shè)備標(biāo)準(zhǔn)化程序研發(fā)過程中,可以搞好地搭建自己的標(biāo)準(zhǔn)化系統(tǒng)架構(gòu)。
所以,文章寫成之后,總是先發(fā)到學(xué)員群中, 學(xué)員們之間可以先進(jìn)行一波討論。如果這些技術(shù)點(diǎn)在培訓(xùn)示范項(xiàng)目中有用到, 我會指出來在用在了什么地方, 而如果還沒用到,我也會指出來將來可以應(yīng)用到什么場合。大家提前擁有技術(shù)儲備, 將來需要時自然可以派上用場。
所以,學(xué)員之外的其他讀者,其實(shí)是跟著搭順風(fēng)車了。 理解也好, 不理解也罷,以及支持與不支持,其實(shí)與我都沒有什么直接關(guān)系的。 只不過同行有一些普遍性的的錯誤認(rèn)知,表達(dá)出來了, 如果我認(rèn)為比較典型, 就可以拿出來作為典型實(shí)例, 再重復(fù)強(qiáng)調(diào)提醒給學(xué)員們。
前面四篇文章都發(fā)了之后, 有一天,在微信群中的討論時, 非常熟悉的請過我吃過好幾次飯的胖哥,發(fā)表個觀點(diǎn),把我驚訝到了。
說的是:我編程的原則是程序中不碰雙線圈。
我這兒談虎色變的文章寫過了,再談虎再色變的文章也發(fā)過了,也沒辦法說這是談虎色變了!也只好再基礎(chǔ)的科普了。
首先, 我說談虎色變的時候, 意思是反對這種驚慌恐懼的態(tài)度。不是我反對雙線圈或者支持雙線圈。
其次, “雙線圈”是個特有詞匯,完整的定義是:梯形圖邏輯中因?yàn)閷ν粋變量不恰當(dāng)?shù)亩啻沃貜?fù)線圈類型的寫操作,而帶來的程序邏輯錯誤。
所以,當(dāng)我們說雙線圈的時候, 指的是程序有錯誤。 而且不見得一定是2次線圈,有可能是多次。 只要超過2次而出錯,都叫雙線圈錯誤。
另外, 也不是所有的對線圈的寫操作都會發(fā)生雙線圈錯誤, 除了前面文章討論的SR和起保停之外,即便是最通常的:
|-----|I0.0 |---------(Q0.0)
這樣的語法結(jié)構(gòu), 如果多次發(fā)生,外形上看起來是雙線圈,三菱等PLC軟件中會提醒有雙線圈,也未必一定會發(fā)生雙線圈錯誤。
比如:
|-----|I0.0 |-----|I0.1 |----|I0.2 |----|I0.3 |--------(M0.0)
|-----|M0.0 |-----|I0.5 |----|I0.6 |----|I0.7 |--------(Q0.0)
|-----|I1.0 |-----|I1.1 |----|I1.2 |----|I1.3 |--------(M0.0)
|-----|M0.0 |-----|I1.5 |----|I1.6 |----|I1.7 |--------(Q1.0)
這樣的程序原本是為了易讀性, 把一行長程序砍斷, 分到了2行,其中使用了M中間變量,而兩次操作中使用的是同一個中間變量的線圈,然而并不會發(fā)生雙線圈錯誤。
我知道一些同行的習(xí)慣, 程序中遇到類似上面的場合時,習(xí)慣上絕不會重復(fù)使用同一個M0.0, 而是會換用不同的M1.0中間量來實(shí)現(xiàn)。
甚至有人還因此指責(zé)我, 你這樣程序中重復(fù)使用同一個M變量,整個程序中到處都用, 導(dǎo)致程序多難讀!
我的回復(fù)是:恰恰相反,這樣的程序才更容易讀呢!
稍微有些讀程序的經(jīng)驗(yàn), 只要見到一個變量這樣的被重復(fù)的寫,讀, 寫, 讀, 寫,讀, 寫, 讀, 那就可以知道, 這個變量只是個臨時使用,用過就丟的臨時變量,只在當(dāng)下的上下文的程序中起作用,而不需要全程序區(qū)域檢索閱讀了。
所以這是我與胖哥以及大多數(shù)同行做程序的原則出發(fā)點(diǎn)的不同之處, 拋開雙線圈專有詞匯的概念之外, 胖哥說的意思是盡量不重復(fù)使用變量,而我的觀點(diǎn)是要盡量重復(fù)使用變量。 但凡有機(jī)會可以重復(fù)使用的,都要盡量重復(fù)使用, 以節(jié)省變量資源。
這個觀點(diǎn)其實(shí)在以前的文章中已經(jīng)表達(dá)過了, 文章的題目叫做《1944 「萬泉河」給你的PLC程序洗洗澡》 ,沒讀過的或者讀過又忘記了的,可以去搜來看看。
雙線圈的理念或者說禁區(qū)對本行業(yè)的影響可謂是深且久遠(yuǎn)。 一個最常見的場景是設(shè)備的手自動模式切換。
傳統(tǒng)的控制系統(tǒng)中, 每一臺設(shè)備都要有手動自動的模式切換。 比如就地安裝的風(fēng)機(jī)水泵柜, 會在電氣控制回路上做兩種模式,手動部分繼電器邏輯通過盤面的啟停按鈕控制,而自動模式則接受來自PLC系統(tǒng)的硬線或者通訊的控制指令啟停。
然后進(jìn)化到PLC或者DCS控制之后,這個特性也被原樣繼承下來了。 比如DCS系統(tǒng)的電機(jī)塊, 都要有手自動模式切換。
其實(shí)根源就來自雙線圈。
有過不少初進(jìn)入PLC行業(yè)的初學(xué)者,在開始學(xué)寫PLC程序的時候,會把一臺設(shè)備的手動和自動邏輯分到不同的模塊中,然后再在子程序中分別逐個調(diào)用。 然后到調(diào)試的時候就出了問題,對一個線圈多次寫操作了!雙線圈錯誤了,程序鬧大笑話了!
也不僅僅是剛畢業(yè)的學(xué)生, 很多有過豐富IT編程經(jīng)驗(yàn)的程序員,剛摸PLC程序的時候, 也會掉進(jìn)這個坑,然后被豐富經(jīng)驗(yàn)PLC工程師老鳥的笑話之后,再也不敢這樣寫程序了。
而其實(shí), 這只是對PLC運(yùn)行機(jī)制不熟悉之前容易發(fā)生的錯誤。 而我這樣不厭其煩地探討雙線圈話題,有一個目的,就是針對手自動模式這點(diǎn)的。
標(biāo)準(zhǔn)化示范項(xiàng)目,使用的來自西門子官方的BST庫函數(shù),我在《PLC標(biāo)準(zhǔn)化編程原理與方法》中做了大篇幅的介紹,后來的新版的例子, BPL以及LBP, 也多次寫文章提及。 這些庫函數(shù)的統(tǒng)一的特征,都是對設(shè)備模式有手自動的切換。
而我看它們不爽已經(jīng)很久了。
通過對雙線圈原理的分析,以及對起保停, SR等各種基礎(chǔ)原理的分析之后, 其實(shí)完全可以做到去掉手自動模式的切換, 即便設(shè)備有手自動模式切換問題, 也只需要在HMI一側(cè)做切換和隱藏顯示,而不需要深入到PLC程序邏輯,甚至影響到底層塊中。
也可以實(shí)現(xiàn)手動控制和自動控制模式的分開,IT程序員剛接觸PLC的時候,模塊化的程序做法,手動控制模塊和自動控制模塊完全分開,其實(shí)是可以實(shí)現(xiàn)的。
這一點(diǎn), 我在煙臺方法學(xué)習(xí)營中跟學(xué)員們探討過, 給他們布置過作業(yè),讓他們有機(jī)會的時候嘗試實(shí)現(xiàn)。
而我自己,最近在研究信捷小型PLC標(biāo)準(zhǔn)化的時候,就把這一技能充分用上了。 底層庫函數(shù)不區(qū)分手自動, 程序邏輯手自動分開, 整個程序架構(gòu)叫一個清爽。
xj8.jpg
優(yōu)雅程度是沒得說了。不懂優(yōu)雅的人很難理解的高度。
不過信捷這類的小PLC性能太低,其它方面耗費(fèi)了我太多精力, 這些技巧很難用語言傳授給他人。另外,用過信捷的人也太少。
所以還是回到應(yīng)用最廣的西門子S7-1200或者S7-200 SMART探討這個問題,受眾會更多一點(diǎn)。 近期打算做一次直播講座,演示如何通過我對雙線圈上述的解析, 實(shí)現(xiàn)不再需要手自動模式切換。
地點(diǎn):雙線圈微信群
目前, 群成員有33人, 包含了前幾次參加了雙線圈講座的所有學(xué)員。 然后這回200人以內(nèi)均可以免費(fèi)參加,即掃群二維碼進(jìn)群即可。
還有需要聽講座的,可以期待下一期的講座,會再成立專門的講座微信群。
有一些平臺不許發(fā)二維碼, 見文后請到另外搜索找到。
正式的直播時間, 會在群中通知。
以后還有直播, 會在公眾號《PLC標(biāo)準(zhǔn)化編程》中群發(fā)信息通知,敬請關(guān)注。