寫PLC程序,新手容易忽略一個(gè)問題:為何手動(dòng)模式和自動(dòng)模式不能混寫?這里先給出答案:手動(dòng)模式和自動(dòng)模式的邏輯邊界必須清晰,PLC程序中手動(dòng)按機(jī)構(gòu)寫,自動(dòng)按流程寫;手動(dòng)和自動(dòng)只提請(qǐng)求,輸出統(tǒng)一管理;模式切換必須處理好。
在現(xiàn)場(chǎng)有部分設(shè)備,PLC程序單獨(dú)看沒什么問題,手動(dòng)能動(dòng)。 自動(dòng)也能跑,但一到調(diào)試后期,問題就開始出現(xiàn):
①手動(dòng)一按,自動(dòng)步序亂了;
②自動(dòng)暫停后切手動(dòng),設(shè)備狀態(tài)丟了;
③報(bào)警復(fù)位后重新啟動(dòng),機(jī)構(gòu)突然動(dòng)作;
④同一個(gè)輸出點(diǎn),手動(dòng)也在控制,自動(dòng)也在控制;
⑤最后出了問題,根本不知道是誰把輸出打出去的。
這類問題,表面看是某個(gè)條件沒寫好,但本質(zhì)上是一開始就沒把手動(dòng)模式和自動(dòng)模式的邏輯邊界分清楚。PLC程序不是能讓設(shè)備動(dòng)起來就算寫完。真正到現(xiàn)場(chǎng)考驗(yàn)PLC程序的,往往是手動(dòng)、自動(dòng)、暫停、報(bào)警、復(fù)位、急停這些狀態(tài)交叉的時(shí)候。

1、手動(dòng)和自動(dòng)不是一套邏輯
新手剛開始寫PLC程序時(shí),會(huì)把手動(dòng)和自動(dòng)理解成兩個(gè)按鈕:手動(dòng)按鈕和自動(dòng)按鈕,但現(xiàn)場(chǎng)做久了就知道,這兩個(gè)模式的目的完全不一樣。
(1)手動(dòng)模式的核心是什么?
手動(dòng)模式主要用于:
①調(diào)試;
②檢修;
③點(diǎn)動(dòng);
④單動(dòng)作驗(yàn)證;
⑤異常處理后的人工干預(yù)。
它關(guān)注的是單個(gè)機(jī)構(gòu)能不能動(dòng)作。比如:
①氣缸伸出/縮回;
②電機(jī)正轉(zhuǎn)/反轉(zhuǎn);
③伺服點(diǎn)動(dòng)/回零;
④夾爪打開/關(guān)閉;
⑤真空吸附/破真空。
(2)自動(dòng)模式的核心是什么?
自動(dòng)模式主要用于設(shè)備按照工藝流程連續(xù)運(yùn)行。它關(guān)注的是整臺(tái)設(shè)備的動(dòng)作順序和狀態(tài)銜接。比如:
①檢查初始狀態(tài);
②上料;
③定位;
④夾緊;
⑤加工;
⑥檢測(cè);
⑦下料;
⑧循環(huán)完成。
所以,手動(dòng)和自動(dòng)的寫法不能混在一起。一句話記住:手動(dòng)按機(jī)構(gòu)寫,自動(dòng)按流程寫;手動(dòng)不要塞進(jìn)自動(dòng)流程里。 自動(dòng)也不要直接調(diào)用手動(dòng)按鈕邏輯;這一步分不清,后面程序一定越改越亂。
2、危險(xiǎn)的寫法:PLC程序中手動(dòng)和自動(dòng)都直接控制輸出
現(xiàn)場(chǎng)常見的一種寫法是這樣的:
◆手動(dòng)按鈕→直接控制Y0
◆自動(dòng)步驟→也控制Y0
◆報(bào)警復(fù)位→又去控制Y0
比如一個(gè)壓緊氣缸,手動(dòng)畫面上有“壓緊/松開”按鈕。 自動(dòng)流程里也有“壓緊/松開”動(dòng)作。
如果手動(dòng)按鈕直接寫輸出,自動(dòng)流程也直接寫輸出,短期看設(shè)備確實(shí)能動(dòng),但后期排查時(shí)就很麻煩。你會(huì)遇到這些問題:
①Y0到底是誰給出來的?
②自動(dòng)流程沒到這一步,為什么氣缸動(dòng)作了?
③手動(dòng)按鈕松開后,為什么輸出還保持?
④報(bào)警復(fù)位后,為什么機(jī)構(gòu)狀態(tài)亂了?
⑤程序改了幾次后,為什么輸出邏輯越來越看不懂?
尤其是非標(biāo)設(shè)備,后期經(jīng)常會(huì)改需求、加動(dòng)作、加互鎖。一旦多個(gè)地方都在搶同一個(gè)輸出點(diǎn),程序很快就會(huì)變成一團(tuán)亂麻。
現(xiàn)場(chǎng)經(jīng)驗(yàn):一個(gè)輸出點(diǎn)如果在多個(gè)地方被直接賦值,后期查問題一定很痛苦。PLC程序能跑,不代表結(jié)構(gòu)合理。
3、推薦寫法:PLC程序中手動(dòng)和自動(dòng)只提請(qǐng)求,輸出統(tǒng)一管理
比較穩(wěn)的寫法是:手動(dòng)請(qǐng)求→自動(dòng)請(qǐng)求→安全條件→機(jī)構(gòu)互鎖→輸出匯總→物理輸出。也就是說:手動(dòng)邏輯和自動(dòng)邏輯不要直接控制物理輸出點(diǎn),它們只負(fù)責(zé)產(chǎn)生動(dòng)作請(qǐng)求,真正能不能動(dòng)作,要交給后面的安全條件、機(jī)構(gòu)互鎖和輸出匯總來判斷。
以壓緊氣缸為例,可以這樣拆:
Manual_ClampExtendReq:手動(dòng)壓緊請(qǐng)求
Manual_ClampRetractReq:手動(dòng)松開請(qǐng)求
Auto_ClampExtendReq:自動(dòng)壓緊請(qǐng)求
Auto_ClampRetractReq:自動(dòng)松開請(qǐng)求
ClampExtendAllow:允許壓緊
ClampRetractAllow:允許松開
Y_ClampExtend:壓緊電磁閥輸出
Y_ClampRetract:松開電磁閥輸出
最終輸出統(tǒng)一處理:
壓緊輸出=(手動(dòng)壓緊請(qǐng)求OR自動(dòng)壓緊請(qǐng)求) AND 允許壓緊
松開輸出=(手動(dòng)松開請(qǐng)求OR自動(dòng)松開請(qǐng)求) AND 允許松開
這樣寫的好處很明顯。
現(xiàn)場(chǎng)查問題時(shí),路徑非常清楚:
◆按鈕有沒有請(qǐng)求?
◆自動(dòng)步驟有沒有請(qǐng)求?
◆安全條件是否滿足?
◆互鎖條件有沒有擋住?
◆最終輸出有沒有給出去?
◆調(diào)試現(xiàn)場(chǎng)不怕問題多,怕的是沒有路徑可查。

4、手動(dòng)模式不是“想動(dòng)就動(dòng)”,互鎖不能省
新手以為手動(dòng)模式就是調(diào)試用的,所以按鈕按下就應(yīng)該動(dòng)作,這個(gè)想法很危險(xiǎn)。手動(dòng)模式可以比自動(dòng)模式靈活,但絕不能繞過安全和機(jī)構(gòu)互鎖。比如:
①氣缸A伸出前,氣缸B必須先退回;
②伺服移動(dòng)前,安全門必須關(guān)閉;
③夾爪松開前,要確認(rèn)產(chǎn)品不會(huì)掉落;
④電機(jī)反轉(zhuǎn)前,正轉(zhuǎn)輸出必須斷開;
⑤機(jī)構(gòu)回原點(diǎn)前,不能處在干涉位置。
手動(dòng)模式至少要保留三類條件:
第一類:安全條件
比如:急停;安全門;光柵;安全繼電器;安全PLC狀態(tài)。
這些條件不能因?yàn)楫?dāng)前是手動(dòng)模式就被繞過。
第二類:機(jī)構(gòu)互鎖
比如:頂升沒下降,橫移不能動(dòng);壓緊沒松開,產(chǎn)品不能取走;夾爪未打開,下料機(jī)構(gòu)不能動(dòng)作;伺服未到安全位,氣缸不能伸出。
這些都屬于機(jī)構(gòu)之間的互鎖關(guān)系。
第三類:邊界條件
比如:原點(diǎn)信號(hào);到位信號(hào);前后限位;伺服軟限位;運(yùn)動(dòng)范圍限制。
這些條件是為了防止機(jī)構(gòu)跑過頭、撞機(jī)構(gòu)、誤動(dòng)作。手動(dòng)不是無條件動(dòng)作。手動(dòng)是在安全允許范圍內(nèi)的單機(jī)構(gòu)控制。很多現(xiàn)場(chǎng)事故,不是自動(dòng)流程出問題,而是手動(dòng)調(diào)試時(shí)把設(shè)備狀態(tài)打亂了。
5、自動(dòng)模式要按步驟寫,不要堆一堆條件
PLC程序中自動(dòng)模式最怕寫成一大串條件。比如:?jiǎn)?dòng)按鈕按下;AND 氣缸A到位;AND 氣缸B退回;AND 伺服完成;AND 產(chǎn)品有料;AND 檢測(cè)OK……這種寫法設(shè)備可能也能跑,但有幾個(gè)問題:
①不好調(diào)試;
②不好查故障;
③不好顯示當(dāng)前狀態(tài);
④不好加異常處理;
⑤后期改需求很麻煩。
非標(biāo)設(shè)備的自動(dòng)流程,建議用步序方式寫。比如:
Step 0:待機(jī)
Step 10:檢查初始狀態(tài)
Step 20:上料氣缸伸出
Step 30:等待上料到位
Step 40:夾緊產(chǎn)品
Step 50:伺服移動(dòng)到加工位
Step 60:執(zhí)行加工
Step 70:檢測(cè)結(jié)果
Step 80:下料
Step 90:循環(huán)完成
每一步只做一件事;每一步都要有:進(jìn)入條件;執(zhí)行動(dòng)作;完成條件;超時(shí)報(bào)警;異常處理。這樣設(shè)備卡在哪一步,觸摸屏上一顯示步號(hào),現(xiàn)場(chǎng)馬上就能判斷問題大概在哪里。
自動(dòng)模式不是條件堆得越多越安全。真正穩(wěn)定的自動(dòng)流程,是步驟清楚、狀態(tài)明確、異常可追蹤。
6、模式切換,是最容易出問題的地方
手動(dòng)和自動(dòng)分開寫以后,還有一個(gè)關(guān)鍵點(diǎn):模式切換必須處理好。
很多設(shè)備出問題,不是在正常自動(dòng)循環(huán)時(shí),而是在下面這些場(chǎng)景:
①自動(dòng)運(yùn)行中切手動(dòng);
②手動(dòng)調(diào)整后切自動(dòng);
③報(bào)警復(fù)位后繼續(xù)運(yùn)行;
④急停恢復(fù)后重新啟動(dòng);
⑤暫停后直接繼續(xù)。
這些狀態(tài)交叉時(shí),最容易暴露程序架構(gòu)問題:
第一種:自動(dòng)運(yùn)行中直接切手動(dòng)
設(shè)備自動(dòng)流程還停在某一步。 操作員切到手動(dòng),把某個(gè)機(jī)構(gòu)移動(dòng)了;再切回自動(dòng)時(shí),程序還以為設(shè)備狀態(tài)沒變。這時(shí)候下一步動(dòng)作就可能出問題。
第二種:手動(dòng)調(diào)整后直接切自動(dòng)
手動(dòng)狀態(tài)下,機(jī)構(gòu)位置可能已經(jīng)變了。如果不重新檢查初始狀態(tài),自動(dòng)流程直接啟動(dòng),很容易誤動(dòng)作。
第三種:報(bào)警復(fù)位后繼續(xù)原流程
有些報(bào)警發(fā)生后,設(shè)備狀態(tài)已經(jīng)不可信了。這時(shí)候只清報(bào)警,不重置步序,是很危險(xiǎn)的。
【干貨】正確的處理方式是:自動(dòng)運(yùn)行中,不允許隨便切手動(dòng)。要先停止自動(dòng)流程,確認(rèn)設(shè)備進(jìn)入安全狀態(tài),再允許手動(dòng)操作;手動(dòng)切自動(dòng)時(shí),也不能直接啟動(dòng),必須重新檢查自動(dòng)啟動(dòng)條件:
①急停正常;
②安全門正常;
③沒有未清除報(bào)警;
④關(guān)鍵氣缸在初始位;
⑤伺服已經(jīng)回零;
⑥工件狀態(tài)明確;
⑦當(dāng)前步序回到待機(jī)位。
如果設(shè)備狀態(tài)不明確,就不要讓它進(jìn)入自動(dòng)。
7、現(xiàn)場(chǎng)案例:程序能跑,但狀態(tài)亂了
一臺(tái)壓裝設(shè)備在調(diào)試過程中暴露的問題:手動(dòng)畫面可以單獨(dú)控制壓緊氣缸,自動(dòng)流程里也會(huì)控制同一個(gè)氣缸。剛開始調(diào)試沒問題,手動(dòng)能壓緊。 自動(dòng)也能循環(huán);但問題出在自動(dòng)暫停以后,操作員暫停設(shè)備,切到手動(dòng),把夾緊氣缸松開,調(diào)整了一下產(chǎn)品位置,然后又切回自動(dòng),直接點(diǎn)繼續(xù);這時(shí)候PLC程序還停在“產(chǎn)品已夾緊”的步驟,程序默認(rèn)夾緊狀態(tài)仍然成立;下一步伺服直接移動(dòng),但產(chǎn)品位置已經(jīng)變了,差點(diǎn)撞到機(jī)構(gòu)。
后來資深工程師做了三件事:
①手動(dòng)請(qǐng)求和自動(dòng)請(qǐng)求全部拆開;
②所有輸出統(tǒng)一經(jīng)過互鎖和狀態(tài)判斷;
③手動(dòng)切回自動(dòng)時(shí),必須重新檢查初始狀態(tài),不允許直接續(xù)跑。
問題才徹底解決。這個(gè)案例說明一件事:程序能跑,不代表架構(gòu)是安全的。
8、推薦一套清晰的PLC程序結(jié)構(gòu)
如果是非標(biāo)設(shè)備,昌暉儀表建議PLC程序至少按下面幾個(gè)模塊拆:
①輸入信號(hào)處理;
②安全狀態(tài)處理;
③報(bào)警處理;
④模式管理;
⑤手動(dòng)控制;
⑥自動(dòng)步序;
⑦機(jī)構(gòu)互鎖;
⑧輸出匯總;
⑨HMI數(shù)據(jù)交互;
⑩通訊與記錄。
其中最關(guān)鍵的是這三層:
①手動(dòng)控制層
手動(dòng)控制層負(fù)責(zé)單機(jī)構(gòu)動(dòng)作請(qǐng)求。比如:氣缸伸出請(qǐng)求;氣缸縮回請(qǐng)求;電機(jī)點(diǎn)動(dòng)請(qǐng)求;伺服回零請(qǐng)求。
②自動(dòng)步序?qū)?/span>
自動(dòng)步序?qū)迂?fù)責(zé)整機(jī)流程推進(jìn)。比如:當(dāng)前執(zhí)行到哪一步;這一步要做什么動(dòng)作;什么條件下進(jìn)入下一步;超時(shí)后報(bào)什么警。
③輸出匯總層
輸出匯總層負(fù)責(zé)統(tǒng)一處理最終輸出。也就是:手動(dòng)/自動(dòng)→動(dòng)作請(qǐng)求→安全互鎖→統(tǒng)一輸出
這個(gè)結(jié)構(gòu)看起來比直接寫輸出麻煩一點(diǎn),但項(xiàng)目越復(fù)雜,越能體現(xiàn)價(jià)值。尤其是后期客戶改需求、現(xiàn)場(chǎng)加動(dòng)作、設(shè)備出現(xiàn)偶發(fā)故障時(shí),結(jié)構(gòu)清楚的程序非常好查。
9、新手最容易犯的5個(gè)錯(cuò)誤
最后總結(jié)一下,PLC程序的手動(dòng)和自動(dòng)邏輯里,新手最容易犯這幾個(gè)錯(cuò)誤:
①手動(dòng)按鈕直接控制物理輸出點(diǎn)
短期方便,后期難查。
②自動(dòng)流程里到處寫同一個(gè)輸出
輸出來源不清楚,程序越改越亂。
③手動(dòng)模式不加安全互鎖
調(diào)試時(shí)看似方便,實(shí)際很容易留下安全隱患。
④自動(dòng)暫停后不處理當(dāng)前步序
設(shè)備狀態(tài)變了,程序狀態(tài)沒變,很容易誤動(dòng)作。
⑤手動(dòng)切自動(dòng)時(shí)不重新確認(rèn)設(shè)備狀態(tài)
這是現(xiàn)場(chǎng)非常常見的坑。這些錯(cuò)誤一開始不一定明顯,設(shè)備簡(jiǎn)單時(shí),可能也能正常跑,但非標(biāo)設(shè)備一旦動(dòng)作多、工位多、狀態(tài)多,問題就會(huì)集中爆發(fā)。
10、寫在最后
PLC程序不是能動(dòng)就行,真正考驗(yàn)程序架構(gòu)的,不是正常自動(dòng)循環(huán),而是各種異常狀態(tài):手動(dòng)、自動(dòng)、暫停、繼續(xù)、報(bào)警、復(fù)位、急停、重新啟動(dòng)。程序架構(gòu)清楚,現(xiàn)場(chǎng)就好調(diào)。 架構(gòu)一開始混亂,后面每改一次需求,都是在埋雷。
這篇文章的核心,其實(shí)就四句話:手動(dòng)按機(jī)構(gòu)寫。自動(dòng)按流程寫。手動(dòng)和自動(dòng)只提請(qǐng)求,不直接搶輸出。最終輸出統(tǒng)一匯總,安全互鎖永遠(yuǎn)不能省。這套思路做好了,PLC程序不一定寫得花哨,但一定更穩(wěn)定、更好調(diào),也更適合現(xiàn)場(chǎng)長(zhǎng)期維護(hù)。
相關(guān)閱讀
◆分享八個(gè)電動(dòng)機(jī)常用PLC應(yīng)用電路
◆PID調(diào)節(jié)器的PID與PLC的PID異同及特點(diǎn)
◆PLC中的I0.0、I0.1、M0.0、M0.1、Q0.1、Q0.2
