萬(wàn)泉河
WX:ZHO6371995,歡迎+
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 130 個(gè)
工控威望: 246 點(diǎn)
下載積分: 831 分
在線時(shí)間: 11(小時(shí))
注冊(cè)時(shí)間: 2021-06-11
最后登錄: 2024-11-07
查看萬(wàn)泉河的 主題 / 回貼
樓主  發(fā)表于: 2022-08-13 15:45
0811 【萬(wàn)泉河】雙線圈第五彈:雙線圈與手自動(dòng)



我寫文章探討PLC編程中的雙線圈問題,這是第五篇了。 前面四篇分別是:



0428 【萬(wàn)泉河】PLC編程:談虎色變雙線圈

0509 【萬(wàn)泉河】雙線圈前傳:關(guān)于線圈的定義

0512 【萬(wàn)泉河】破除雙線圈禁忌:給PLC新手的系列直播講座計(jì)劃

0728 【萬(wàn)泉河】談虎色變雙線圈再談再變



很不幸, 我寫文章的順序不是由淺及深逐步來(lái)的, 而是倒過來(lái)的。



因?yàn)槲沂窃趯?shí)際的技術(shù)應(yīng)用中以及標(biāo)準(zhǔn)化推廣過程中發(fā)現(xiàn)和總結(jié)一些技術(shù)觀點(diǎn),以自認(rèn)為夠通俗直白的方式寫出來(lái)。



然后根據(jù)讀者討論和反饋 的情況, 針對(duì)討論過程中的疑問以及發(fā)現(xiàn)的讀者群體中普遍存在的認(rèn)知盲區(qū), 再提煉總結(jié)更淺顯的道理,寫成文章發(fā)表出來(lái)。



有同行嘲笑萬(wàn)老師連雙線圈這種破事,都能攢出好幾篇文章來(lái), 是不是有點(diǎn)太小題大做沒事找事了。



是的呀, 我本來(lái)也希望一篇淺文,對(duì)一個(gè)方面的技術(shù)細(xì)節(jié)有個(gè)結(jié)論, 文章發(fā)完即了事,然而,往往事與愿違, 而且不是由我個(gè)人決定的。 因?yàn)槭鞘茏x者的反饋決定的。 如果文章發(fā)完, 大家異口同聲地回復(fù),OKOK,懂了懂了, 還可以這樣,學(xué)習(xí)get到了新姿勢(shì)。 那文章算是達(dá)到了初始目的,大家皆大歡喜。



然而, 如果后面反饋的爭(zhēng)論聲音很大, 各種雜音都有,就說明這個(gè)理論觀點(diǎn)在同行中沒有得到普遍的認(rèn)同, 有可能是最開始的文章立意出發(fā)點(diǎn)高了, 導(dǎo)致有一些人看不懂,所以才會(huì)有較大的爭(zhēng)議。 那么就只能不斷的把出發(fā)點(diǎn)拉低再拉低, 換個(gè)角度再重復(fù)強(qiáng)調(diào),以達(dá)成技術(shù)上的共識(shí)。



而在反饋的聲音中,除了技術(shù)觀點(diǎn)反對(duì)的之外, 竟然還有指責(zé)漫罵的,甚至上升到人身攻擊。 這樣的,基本上是回復(fù)者個(gè)人道德水準(zhǔn)有問題, 或羨慕嫉妒恨, 或情商低到認(rèn)為受到了歧視。 總之, 網(wǎng)絡(luò)是有記憶力的, 這些謾罵者只要自己不怕丟人現(xiàn)眼, 這些帖子回復(fù)會(huì)一直存在,一直留給世人觀瞻看笑話。如果自認(rèn)為一輩子就是個(gè)不知名的無(wú)名小卒也倒罷了, 而如果那些自認(rèn)為還有些身份, 有些名望的, 然后卻在這種極其簡(jiǎn)單的小問題上面舔著臉來(lái)跟我糾纏的, 那反而是自己的臉都豁出去了。 完全咎由自取, 我踹起臉來(lái)可是毫不留情面的。



因?yàn)槠鋵?shí),我的文章的第一目標(biāo)受眾是參加了煙臺(tái)方法學(xué)習(xí)的學(xué)員, 把這些技術(shù)原理和觀點(diǎn), 用淺顯的文字表述出來(lái),讓他們可以更直觀的了解到煙臺(tái)方法程序架構(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)目中有用到, 我會(huì)指出來(lái)在用在了什么地方, 而如果還沒用到,我也會(huì)指出來(lái)將來(lái)可以應(yīng)用到什么場(chǎng)合。大家提前擁有技術(shù)儲(chǔ)備, 將來(lái)需要時(shí)自然可以派上用場(chǎng)。



所以,學(xué)員之外的其他讀者,其實(shí)是跟著搭順風(fēng)車了。 理解也好, 不理解也罷,以及支持與不支持,其實(shí)與我都沒有什么直接關(guān)系的。 只不過同行有一些普遍性的的錯(cuò)誤認(rèn)知,表達(dá)出來(lái)了, 如果我認(rèn)為比較典型, 就可以拿出來(lái)作為典型實(shí)例, 再重復(fù)強(qiáng)調(diào)提醒給學(xué)員們。



前面四篇文章都發(fā)了之后, 有一天,在微信群中的討論時(shí), 非常熟悉的請(qǐng)過我吃過好幾次飯的胖哥,發(fā)表個(gè)觀點(diǎn),把我驚訝到了。



說的是:我編程的原則是程序中不碰雙線圈。



我這兒談虎色變的文章寫過了,再談虎再色變的文章也發(fā)過了,也沒辦法說這是談虎色變了!也只好再基礎(chǔ)的科普了。



首先, 我說談虎色變的時(shí)候, 意思是反對(duì)這種驚慌恐懼的態(tài)度。不是我反對(duì)雙線圈或者支持雙線圈。



其次, “雙線圈”是個(gè)特有詞匯,完整的定義是:梯形圖邏輯中因?yàn)閷?duì)同一個(gè)變量不恰當(dāng)?shù)亩啻沃貜?fù)線圈類型的寫操作,而帶來(lái)的程序邏輯錯(cuò)誤。



所以,當(dāng)我們說雙線圈的時(shí)候, 指的是程序有錯(cuò)誤。 而且不見得一定是2次線圈,有可能是多次。 只要超過2次而出錯(cuò),都叫雙線圈錯(cuò)誤。



另外, 也不是所有的對(duì)線圈的寫操作都會(huì)發(fā)生雙線圈錯(cuò)誤, 除了前面文章討論的SR和起保停之外,即便是最通常的:



|-----|I0.0 |---------(Q0.0)



這樣的語(yǔ)法結(jié)構(gòu), 如果多次發(fā)生,外形上看起來(lái)是雙線圈,三菱等PLC軟件中會(huì)提醒有雙線圈,也未必一定會(huì)發(fā)生雙線圈錯(cuò)誤。



比如:



|-----|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)



這樣的程序原本是為了易讀性, 把一行長(zhǎng)程序砍斷, 分到了2行,其中使用了M中間變量,而兩次操作中使用的是同一個(gè)中間變量的線圈,然而并不會(huì)發(fā)生雙線圈錯(cuò)誤。



我知道一些同行的習(xí)慣, 程序中遇到類似上面的場(chǎng)合時(shí),習(xí)慣上絕不會(huì)重復(fù)使用同一個(gè)M0.0, 而是會(huì)換用不同的M1.0中間量來(lái)實(shí)現(xiàn)。



甚至有人還因此指責(zé)我, 你這樣程序中重復(fù)使用同一個(gè)M變量,整個(gè)程序中到處都用, 導(dǎo)致程序多難讀啊!



我的回復(fù)是:恰恰相反,這樣的程序才更容易讀呢!



稍微有些讀程序的經(jīng)驗(yàn), 只要見到一個(gè)變量這樣的被重復(fù)的寫,讀, 寫, 讀, 寫,讀, 寫, 讀, 那就可以知道, 這個(gè)變量只是個(gè)臨時(shí)使用,用過就丟的臨時(shí)變量,只在當(dāng)下的上下文的程序中起作用,而不需要全程序區(qū)域檢索閱讀了。



所以這是我與胖哥以及大多數(shù)同行做程序的原則出發(fā)點(diǎn)的不同之處, 拋開雙線圈專有詞匯的概念之外, 胖哥說的意思是盡量不重復(fù)使用變量,而我的觀點(diǎn)是要盡量重復(fù)使用變量。 但凡有機(jī)會(huì)可以重復(fù)使用的,都要盡量重復(fù)使用, 以節(jié)省變量資源。



這個(gè)觀點(diǎn)其實(shí)在以前的文章中已經(jīng)表達(dá)過了, 文章的題目叫做《1944 「萬(wàn)泉河」給你的PLC程序洗洗澡》 ,沒讀過的或者讀過又忘記了的,可以去搜來(lái)看看。



雙線圈的理念或者說禁區(qū)對(duì)本行業(yè)的影響可謂是深且久遠(yuǎn)。 一個(gè)最常見的場(chǎng)景是設(shè)備的手自動(dòng)模式切換。



傳統(tǒng)的控制系統(tǒng)中, 每一臺(tái)設(shè)備都要有手動(dòng)自動(dòng)的模式切換。 比如就地安裝的風(fēng)機(jī)水泵柜, 會(huì)在電氣控制回路上做兩種模式,手動(dòng)部分繼電器邏輯通過盤面的啟停按鈕控制,而自動(dòng)模式則接受來(lái)自PLC系統(tǒng)的硬線或者通訊的控制指令啟停。



然后進(jìn)化到PLC或者DCS控制之后,這個(gè)特性也被原樣繼承下來(lái)了。 比如DCS系統(tǒng)的電機(jī)塊, 都要有手自動(dòng)模式切換。



其實(shí)根源就來(lái)自雙線圈。



有過不少初進(jìn)入PLC行業(yè)的初學(xué)者,在開始學(xué)寫PLC程序的時(shí)候,會(huì)把一臺(tái)設(shè)備的手動(dòng)和自動(dòng)邏輯分到不同的模塊中,然后再在子程序中分別逐個(gè)調(diào)用。 然后到調(diào)試的時(shí)候就出了問題,對(duì)一個(gè)線圈多次寫操作了!雙線圈錯(cuò)誤了,程序鬧大笑話了!



也不僅僅是剛畢業(yè)的學(xué)生, 很多有過豐富IT編程經(jīng)驗(yàn)的程序員,剛摸PLC程序的時(shí)候, 也會(huì)掉進(jìn)這個(gè)坑,然后被豐富經(jīng)驗(yàn)PLC工程師老鳥的笑話之后,再也不敢這樣寫程序了。



而其實(shí), 這只是對(duì)PLC運(yùn)行機(jī)制不熟悉之前容易發(fā)生的錯(cuò)誤。 而我這樣不厭其煩地探討雙線圈話題,有一個(gè)目的,就是針對(duì)手自動(dòng)模式這點(diǎn)的。



標(biāo)準(zhǔn)化示范項(xiàng)目,使用的來(lái)自西門子官方的BST庫(kù)函數(shù),我在《PLC標(biāo)準(zhǔn)化編程原理與方法》中做了大篇幅的介紹,后來(lái)的新版的例子, BPL以及LBP, 也多次寫文章提及。 這些庫(kù)函數(shù)的統(tǒng)一的特征,都是對(duì)設(shè)備模式有手自動(dòng)的切換。



而我看它們不爽已經(jīng)很久了。



通過對(duì)雙線圈原理的分析,以及對(duì)起保停, SR等各種基礎(chǔ)原理的分析之后, 其實(shí)完全可以做到去掉手自動(dòng)模式的切換, 即便設(shè)備有手自動(dòng)模式切換問題, 也只需要在HMI一側(cè)做切換和隱藏顯示,而不需要深入到PLC程序邏輯,甚至影響到底層塊中。



也可以實(shí)現(xiàn)手動(dòng)控制和自動(dòng)控制模式的分開,IT程序員剛接觸PLC的時(shí)候,模塊化的程序做法,手動(dòng)控制模塊和自動(dòng)控制模塊完全分開,其實(shí)是可以實(shí)現(xiàn)的。



這一點(diǎn), 我在煙臺(tái)方法學(xué)習(xí)營(yíng)中跟學(xué)員們探討過, 給他們布置過作業(yè),讓他們有機(jī)會(huì)的時(shí)候嘗試實(shí)現(xiàn)。



而我自己,最近在研究信捷小型PLC標(biāo)準(zhǔn)化的時(shí)候,就把這一技能充分用上了。 底層庫(kù)函數(shù)不區(qū)分手自動(dòng), 程序邏輯手自動(dòng)分開, 整個(gè)程序架構(gòu)叫一個(gè)清爽。

xj8.jpg



優(yōu)雅程度是沒得說了。不懂優(yōu)雅的人很難理解的高度。







不過信捷這類的小PLC性能太低,其它方面耗費(fèi)了我太多精力, 這些技巧很難用語(yǔ)言傳授給他人。另外,用過信捷的人也太少。  



所以還是回到應(yīng)用最廣的西門子S7-1200或者S7-200 SMART探討這個(gè)問題,受眾會(huì)更多一點(diǎn)。 近期打算做一次直播講座,演示如何通過我對(duì)雙線圈上述的解析, 實(shí)現(xiàn)不再需要手自動(dòng)模式切換。



地點(diǎn):雙線圈微信群



目前, 群成員有33人, 包含了前幾次參加了雙線圈講座的所有學(xué)員。 然后這回200人以內(nèi)均可以免費(fèi)參加,即掃群二維碼進(jìn)群即可。







還有需要聽講座的,可以期待下一期的講座,會(huì)再成立專門的講座微信群。





有一些平臺(tái)不許發(fā)二維碼, 見文后請(qǐng)到另外搜索找到。



正式的直播時(shí)間, 會(huì)在群中通知。

以后還有直播, 會(huì)在公眾號(hào)《PLC標(biāo)準(zhǔn)化編程》中群發(fā)信息通知,敬請(qǐng)關(guān)注。
菜鳥入行
級(jí)別: 論壇先鋒

精華主題: 0
發(fā)帖數(shù)量: 1379 個(gè)
工控威望: 1557 點(diǎn)
下載積分: 3686 分
在線時(shí)間: 177(小時(shí))
注冊(cè)時(shí)間: 2017-09-01
最后登錄: 2024-06-11
查看菜鳥入行的 主題 / 回貼
1樓  發(fā)表于: 2022-08-13 16:57
講的什么亂七八糟的!
雙線圈我的見解就是:
比如Y0,可以用M1000,M1001,M1002等來(lái)作條件驅(qū)動(dòng)
比如M1000是初始化輸出Y0, M1001是自動(dòng)時(shí)輸出Y0,M1002是手動(dòng)時(shí)輸出Y0。
這樣很好的避免了雙線圈,也讓編程更有邏輯
打個(gè)醬油,懂的不多
水平有限,能幫則幫
互相幫助,共同進(jìn)步