關鍵字:PLC、西門子、一鍵啟停、LAD
系列文章目錄
基于7-200 SMART實現Modbus TCP通信
順序功能圖——(二)設計機組延時關機程序
基于S7-200 SMART實現MATLAB寫入與讀取PLC數據
文章目錄
前言
提示:以下內容均屬個人思考,本人也還是技術小白,如有出現紕漏,請各位大佬指出。:
一日在編寫PLC代碼時發現了早期在著名大學B站學習的一段例程——“一鍵啟停”,不過對于當時的我來說這段程序看起來有點陌生,于是決定再學習鞏固一下基礎知識。經過在網上尋找資源發現,大部分的示例都直接給出程序但缺少一點分析,有分析的又需要交費,于是就有了這篇博客。
提示:以下是本篇文章正文內容,下面案例可供參考,且案例中被改進程序與改進程序是原理關聯,可能出現被改進程序與改進程序中變量名不同的情況
一、硬件與軟件環境
操作系統:WIN11
編程軟件:STEP 7-MicroWIN SMART V2.8
編程語言:LAD
PLC:西門子——SIMATIC S7-200 SMART CPU ST60
二、基本的起保停電路`
1.普通線圈
普通線圈構成的起保停LAD代碼如下:
變量含義:
I0.0——啟動按鈕
I0.1——停止按鈕
Q0.0——電機
工作原理:動作前電機還未得電
①按下啟動按鈕→常開觸點I0.0閉合+常閉觸點I0.1閉合→線圈Q0.0得電→電機啟動
②按鈕都無動作→常開觸點Q0.0閉合+常閉觸點I0.1閉合→線圈Q0.0得電→電機保持
③按下停止按鈕→常開觸點Q0.0閉合+常閉觸點I0.1斷開→線圈Q0.0失電→電機停止
以上程序中的I、Q寄存器如果換成M寄存器也可以使用如下LAD代碼:
其中由于M寄存器依靠鼠標控制賦值,以人類的手速很難達到按鈕的效果,所以這里使用觸點+上升沿識別的方式模擬按鈕
變量含義:
M0.0+上升沿——啟動按鈕
M0.1+上升沿——停止按鈕
M0.4——電機
SM0.0在這里的作用是防止報錯
2.置位/復位線圈
變量含義:
I0.0——啟動按鈕
I0.1——停止按鈕
Q0.0——電機
工作原理:動作前電機還未得電
①按下啟動按鈕→常開觸點I0.0閉合+常閉觸點I0.1閉合→線圈Q0.0得電→電機啟動
②按鈕都無動作→常開觸點Q0.0閉合+常閉觸點I0.1閉合→線圈Q0.0得電→電機保持
③按下停止按鈕→常開觸點Q0.0閉合+常閉觸點I0.1斷開→線圈Q0.0失電→電機停止
以上程序中的I、Q寄存器如果換成M寄存器也可以使用如下LAD代碼:
變量含義:
M0.0+上升沿——啟動按鈕
M0.1+上升沿——停止按鈕
M0.2——電機
提示:本節內容如果覺得理解吃力的小伙伴,如果排除博主文筆不好的原因,可能需要自己去補一下PLC的相關知識。
三、一鍵啟停電路
首先讓我們思考一個問題,如何將兩個按鈕簡化為一個按鈕?
在基本的起保停電路中,我們利用不同的變量對應兩個按鈕,如果只用一個變量代表按鈕,那么還必須有一個中間變量用于區分當前的系統狀態,即“電機轉動”與“電機停止”。
1.基于置位/復位線圈實現一鍵啟停_1
我們先從思路比較簡單的置位/復位線圈起保停電路開始做改動
變量含義:
M0.0+上升沿——按鈕
M0.7——電機
這樣的改動看似符合了我們的要求:
①電機停止+按鈕按下→常閉觸點M0.7閉合+常開觸點M0.0上升沿識別→M0.7置位
②電機運行+按鈕按下→常開觸點M0.7閉合+常開觸點M0.0上升沿識別→M0.7復位
但實際運行起來的結果不能說差強人意吧,只能說是相差甚遠——不管如何按下按鈕電機都不會啟動。
上述問題的出現是由于我們對程序掃描的原理還不熟悉,博主認為上述程序需要以線圈為單元進行分析:當前掃描周期開始時電機停止,即M0.7未得電
①第一個線圈:電機停止+按鈕按下→常閉觸點M0.7閉合+常開觸點M0.0上升沿識別→M0.7置位
②第二個線圈:電機停止+按鈕按下+M0.7置位→常開觸點M0.7閉合+常開觸點M0.0上升沿識別→M0.7復位
在一個掃描周期中線圈復位又置位,但是注意這里變量的值會先暫存只有等所有程序都掃描完成后,才能將變量的值更新,這也是為什么我們發現實際變量并沒有變化!
知道了問題的原因,那就可以針對性的進行改進了。
已知不能直接讓代表電機的線圈M0.7直接與按鈕相連,博主這里采用增加一個中間變量的方式(已驗證):
以線圈為單元進行分析:當前掃描周期開始時M0.7未得電
第一個線圈程序:M0.0按鈕按下+常閉觸點M0.7閉合→M0.1線圈置位
第二個線圈程序:M0.0按鈕按下+常開觸點M0.7斷開→M0.1線圈不復位
第三個線圈程序:常開觸點M0.1閉合→M0.7線圈得電當前掃描周期開始時M0.7已得電
第一個線圈程序:M0.0按鈕未按下+常閉觸點M0.7斷開→M0.1線圈不置位
第二個線圈程序:M0.0按鈕未按下+常開觸點M0.7閉合→M0.1線圈不復位
第三個線圈程序:常開觸點M0.1閉合→M0.7線圈得電當前掃描周期開始時M0.7已得電
第一個線圈程序:M0.0按鈕按下+常閉觸點M0.7斷開→M0.1線圈不置位
第二個線圈程序:M0.0按鈕按下+常開觸點M0.7閉合→M0.1線圈不復位
第三個線圈程序:常開觸點M0.1閉合→M0.7線圈得電
2.基于置位/復位線圈實現一鍵啟停_2
如果小伙伴們能理解第一種的改進,那么第二種會好理解很多。
重新梳理第一種的改進:
首先,我們確定標志位
為電機運行狀態
而且,我們知道電機運行狀態
不能與電機輸出
直接相連
所以,我們用一個中間變量
作為按鈕
輸出的一個中轉站控制電機輸出
思考一下:
如果可以在按下按鈕的啟動電機時候屏蔽復位線圈,圖6的好像也可以解決問題。
基于上述思考,我們還可以針對圖6的問題進行一下改進:
變量含義:
M2.0+上升沿——按鈕
M2.7——電機
以線圈為單元進行分析:當前掃描周期開始時M2.7未得電
第一個線圈程序:M2.0按鈕按下+常閉觸點M2.7閉合→M2.7線圈置位
第二個線圈程序:M2.0按鈕按下+常閉觸點M2.7閉合→M2.1線圈得電
第三個線圈程序:M2.0按鈕按下+常閉觸點M2.1斷開→M2.7線圈不復位當前掃描周期開始時M2.7已得電
第一個線圈程序:M2.0按鈕未按下+常閉觸點M2.7斷開→M2.7線圈不置位
第二個線圈程序:M2.0按鈕未按下+常閉觸點M2.7斷開→M2.1線圈失電
第三個線圈程序:M2.0按鈕未按下+常閉觸點M2.1閉合+常開觸點M2.7閉合→M2.7線圈不復位當前掃描周期開始時M2.7已得電
第一個線圈程序:M2.0按鈕按下+常閉觸點M2.7斷開→M2.7線圈不置位
第二個線圈程序:M2.0按鈕按下+常閉觸點M2.7斷開→M2.1線圈失電
第三個線圈程序:M2.0按鈕按下+常閉觸點M2.1閉合+常開觸點M2.7閉合→M2.7線圈復位
3.基于普通線圈實現一鍵啟停_3
針對普通線圈實現的起保停,在改進前我們先將圖2.2的電路進行如下改進:
圖9的改進是基于停止按鈕的核心功能——斷開保持電路的電流,故只要斷開觸點
在保持觸點
與電機輸出
之間都可以實現斷開功能
變量含義:
M1.0+上升沿——按鈕
M1.7——電機
以線圈為單元進行分析:當前掃描周期開始時M1.7未得電
第一個線圈程序:M1.0按鈕按下→M1.1得電
第二個線圈程序:M1.1常開觸點閉合+M1.7常閉觸點閉合→M1.7線圈得電當前掃描周期開始時M0.7已得電
第一個線圈程序:M1.0按鈕不按下→M1.1不得電
第二個線圈程序:M1.1常閉觸點閉合+M1.7常開觸點閉合→M1.7線圈得電當前掃描周期開始時M0.7已得電
第一個線圈程序:M1.0按鈕不按下→M1.1不得電
第二個線圈程序:M1.1常閉觸點閉合+M1.7常開觸點閉合→M1.7線圈得電
問題 :
有些小伙伴可能有疑惑,為什么之前兩種改進增加的標志位都是兩個,如圖8的常閉觸點M2.7與常開觸點M2.7,這個為什么是只在原來基礎上增加了一個常閉觸點M1.7?
解答:
圖9中起保持作用的常開觸點Q0.0(同圖10的常開觸點M1.7)其實也有表示當前系統狀態的作用,故這里只需要添加一個常閉觸點M1.7
4.基于取反字節指令實現一鍵啟停_4
以上三種改進都是只用到了基礎的線圈和觸點,指令比較簡單但是邏輯上比較難以理解,后面五種改進就屬于指令上比較復雜,但邏輯上簡單。
該指令實現將輸入的數據按位取反的功能:
變量含義:
M3.0+上升沿——按鈕
M3.7——電機
以線圈為單元進行分析:當前掃描周期開始時3.7未得電
取反程序:M3.0按鈕按下→VB3取反
線圈程序:VB3=1→V3.0=1→M3.7線圈得電當前掃描周期開始時3.7已得電
取反程序:M3.0按鈕未按下→VB3不取反
線圈程序:VB3=1→V3.0=1→M3.7線圈得電當前掃描周期開始時3.7已得電
取反程序:M3.0按鈕按下→VB3取反
線圈程序:VB3=0→V3.0=0→M3.7線圈失電
5.基于異或字節指令實現一鍵啟停_5
基于上述指令實現一鍵啟停:
變量含義:
M4.0+上升沿——按鈕
M4.7——電機
以線圈為單元進行分析:當前掃描周期開始時4.7未得電
異或程序:M4.0按鈕按下→VB4與1異或
線圈程序:VB4=1→V4.0=1→M4.7線圈得電當前掃描周期開始時4.7已得電
異或程序:M4.0按鈕按下→VB4不與1異或
線圈程序:VB4=1→V4.0=1→M4.7線圈得電當前掃描周期開始時4.7已得電
異或程序:M4.0按鈕按下→VB4與1異或
線圈程序:VB4=0→V4.0=0→M4.7線圈失電
6.基于置位優先指令實現一鍵啟停_6
基于上述指令實現一鍵啟停:
變量含義:
M5.0+上升沿——按鈕
M5.7——電機
以線圈為單元進行分析:當前掃描周期開始時5.7未得電
置位優先程序:M5.0按鈕按下+常閉觸點M5.7閉合+置位優先指令→M5.7置位當前掃描周期開始時5.7未得電
置位優先程序:M5.0按鈕未按下+常開觸點M5.7閉合+置位優先指令→M5.7不復位當前掃描周期開始時5.7已得電
置位優先程序:M5.0按鈕按下+常開觸點M5.7閉合+置位優先指令→M5.7復位
7.基于復位優先指令實現一鍵啟停_7
變量含義:
M6.0+上升沿——按鈕
M6.7——電機
以線圈為單元進行分析:當前掃描周期開始時6.7未得電
置位優先程序:M6.0按鈕按下+常閉觸點M6.7閉合+復位優先指令→M6.7置位當前掃描周期開始時6.7未得電
置位優先程序:M6.0按鈕未按下+常開觸點M6.7閉合+復位優先指令→M6.7不復位當前掃描周期開始時6.7已得電
置位優先程序:M6.0按鈕按下+常開觸點M6.7閉合+復位優先指令→M6.7復位
8.基于計數器指令實現一鍵啟停_8
軟件自帶的幫助文檔中只有減計數器,不過原理都差不多。
基于上述指令實現一鍵啟停:
變量含義:
M7.0+上升沿——按鈕
M7.7——電機
以線圈為單元進行分析:當前掃描周期開始時7.7未得電(C7=0)
計數程序:M7.0按鈕按下→C7=1
置位線圈:C7=1→M7.7置位
復位線圈:C7=1→M7.7不復位當前掃描周期開始時7.7已得電(C7=1)
計數程序:M7.0按鈕不按下→C7=1
置位線圈:C7=1→M7.7不置位
復位線圈:C7=1→M7.7不復位當前掃描周期開始時7.7未得電(C7=1)
計數程序:M7.0按鈕按下→C7=2→C7常開觸點閉合→置位C7→C7=0
置位線圈:C7=0→M7.7不置位
復位線圈:C7=0→M7.7復位
總結
到這里博主總共在這里總結了我自己見過的八種一鍵啟停電路,并分享了自己的思考過程與原理分析,如果有錯誤也請大佬們在評論區指正,
一點感想
警告:以下就是一些個人的直抒胸臆了
這應該算是我寫的第一篇長文,分享自己在學習過程種的思考歷程與想法。寫這篇的原因有以下:
①在學習的過程中也看到了網上的許多資料,雖然有許多靠譜的答案,但總感覺不明白原理就感覺不是很暢快,如果以上思路是正確的希望能幫到一些同樣有困擾的小伙伴,如果不正確也希望能幫助大家思考;
②本科與研究生偏向理論的研究讓我在工作中遇到了很多問題,向老前輩們請教的時候總想問點為什么,但是迎來的大多是略帶不屑與不耐煩的回復,希望能我的思路和答案可以幫助到大家,而不是獲得“冷嘲熱諷”的回答;
③許多問題在我看來可以直接獲取思路與答案進行快速學習,希望我的問題與答案能幫助部分小伙伴減少在準備工作上花費的時間,進而將大部分精力花在真正重要或者困難的部分;
④自己的一點小私心,在幫助他人的過程中獲得一點自我滿足 記錄一下自己的思考,方便之后忘記了回來看看。