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



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



0428 【萬泉河】PLC編程:談虎色變雙線圈

0509 【萬泉河】雙線圈前傳:關于線圈的定義

0512 【萬泉河】破除雙線圈禁忌:給PLC新手的系列直播講座計劃

0728 【萬泉河】談虎色變雙線圈再談再變



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



因為我是在實際的技術應用中以及標準化推廣過程中發(fā)現(xiàn)和總結一些技術觀點,以自認為夠通俗直白的方式寫出來。



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



有同行嘲笑萬老師連雙線圈這種破事,都能攢出好幾篇文章來, 是不是有點太小題大做沒事找事了。



是的呀, 我本來也希望一篇淺文,對一個方面的技術細節(jié)有個結論, 文章發(fā)完即了事,然而,往往事與愿違, 而且不是由我個人決定的。 因為是受讀者的反饋決定的。 如果文章發(fā)完, 大家異口同聲地回復,OKOK,懂了懂了, 還可以這樣,學習get到了新姿勢。 那文章算是達到了初始目的,大家皆大歡喜。



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



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



因為其實,我的文章的第一目標受眾是參加了煙臺方法學習的學員, 把這些技術原理和觀點, 用淺顯的文字表述出來,讓他們可以更直觀的了解到煙臺方法程序架構中的基本思想, 可以通過文章幫助理解研讀程序原理, 以及在后面他們自己公司的設備標準化程序研發(fā)過程中,可以搞好地搭建自己的標準化系統(tǒng)架構。



所以,文章寫成之后,總是先發(fā)到學員群中, 學員們之間可以先進行一波討論。如果這些技術點在培訓示范項目中有用到, 我會指出來在用在了什么地方, 而如果還沒用到,我也會指出來將來可以應用到什么場合。大家提前擁有技術儲備, 將來需要時自然可以派上用場。



所以,學員之外的其他讀者,其實是跟著搭順風車了。 理解也好, 不理解也罷,以及支持與不支持,其實與我都沒有什么直接關系的。 只不過同行有一些普遍性的的錯誤認知,表達出來了, 如果我認為比較典型, 就可以拿出來作為典型實例, 再重復強調提醒給學員們。



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



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



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



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



其次, “雙線圈”是個特有詞匯,完整的定義是:梯形圖邏輯中因為對同一個變量不恰當?shù)亩啻沃貜途圈類型的寫操作,而帶來的程序邏輯錯誤。



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



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



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



這樣的語法結構, 如果多次發(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ā)生雙線圈錯誤。



我知道一些同行的習慣, 程序中遇到類似上面的場合時,習慣上絕不會重復使用同一個M0.0, 而是會換用不同的M1.0中間量來實現(xiàn)。



甚至有人還因此指責我, 你這樣程序中重復使用同一個M變量,整個程序中到處都用, 導致程序多難讀啊!



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



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



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



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



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



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



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



其實根源就來自雙線圈。



有過不少初進入PLC行業(yè)的初學者,在開始學寫PLC程序的時候,會把一臺設備的手動和自動邏輯分到不同的模塊中,然后再在子程序中分別逐個調用。 然后到調試的時候就出了問題,對一個線圈多次寫操作了!雙線圈錯誤了,程序鬧大笑話了!



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



而其實, 這只是對PLC運行機制不熟悉之前容易發(fā)生的錯誤。 而我這樣不厭其煩地探討雙線圈話題,有一個目的,就是針對手自動模式這點的。



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



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



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



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



這一點, 我在煙臺方法學習營中跟學員們探討過, 給他們布置過作業(yè),讓他們有機會的時候嘗試實現(xiàn)。



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

xj8.jpg



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







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



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



地點:雙線圈微信群



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







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





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



正式的直播時間, 會在群中通知。

以后還有直播, 會在公眾號《PLC標準化編程》中群發(fā)信息通知,敬請關注。
菜鳥入行
級別: 論壇先鋒

精華主題: 0
發(fā)帖數(shù)量: 1379 個
工控威望: 1557 點
下載積分: 3686 分
在線時間: 177(小時)
注冊時間: 2017-09-01
最后登錄: 2024-06-11
查看菜鳥入行的 主題 / 回貼
1樓  發(fā)表于: 2022-08-13 16:57
講的什么亂七八糟的!
雙線圈我的見解就是:
比如Y0,可以用M1000,M1001,M1002等來作條件驅動
比如M1000是初始化輸出Y0, M1001是自動時輸出Y0,M1002是手動時輸出Y0。
這樣很好的避免了雙線圈,也讓編程更有邏輯
打個醬油,懂的不多
水平有限,能幫則幫
互相幫助,共同進步
yankkkkkkk
太好了,密碼找到了又能回家啦
級別: 工控俠客
精華主題: 0
發(fā)帖數(shù)量: 264 個
工控威望: 2872 點
下載積分: 18616 分
在線時間: 192(小時)
注冊時間: 2008-03-12
最后登錄: 2024-12-13
查看yankkkkkkk的 主題 / 回貼
2樓  發(fā)表于: 2022-08-13 21:23
大神們都有自己的見解。我們就吸收各種精華
ds1004396
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 146 個
工控威望: 191 點
下載積分: 852 分
在線時間: 122(小時)
注冊時間: 2009-12-08
最后登錄: 2023-04-13
查看ds1004396的 主題 / 回貼
3樓  發(fā)表于: 2022-08-17 14:17
老萬這是無處不在!
ldf710613
級別: 論壇先鋒
精華主題: 0
發(fā)帖數(shù)量: 367 個
工控威望: 1154 點
下載積分: 1301 分
在線時間: 31(小時)
注冊時間: 2022-04-09
最后登錄: 2023-12-18
查看ldf710613的 主題 / 回貼
4樓  發(fā)表于: 2022-08-19 12:27
感謝感謝
fgx9306
Engineer-X
級別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 733 個
工控威望: 837 點
下載積分: 18278 分
在線時間: 152(小時)
注冊時間: 2015-06-08
最后登錄: 2024-12-25
查看fgx9306的 主題 / 回貼
5樓  發(fā)表于: 2022-08-22 18:08
這是跟FB執(zhí)行與否與輸出不同來實現(xiàn)的嗎?
〇·微塵ベ
級別: 論壇先鋒
精華主題: 0
發(fā)帖數(shù)量: 329 個
工控威望: 1174 點
下載積分: 3191 分
在線時間: 287(小時)
注冊時間: 2020-04-11
最后登錄: 2024-07-19
查看〇·微塵ベ的 主題 / 回貼
6樓  發(fā)表于: 2022-08-22 20:49
在西門子官方論壇上,萬被人到處懟