孔佐君
(黔南民族職業(yè)技術(shù)學(xué)院,貴州都勻 558022)
目前,很多PLC 編程的初學(xué)者都會(huì)遇到給出控制系統(tǒng)要求,不知道如何下手寫梯形圖程序的問題,只能做一個(gè)實(shí)驗(yàn),背一套程序,或者編程思路不清,考慮不周,系統(tǒng)功能無法實(shí)現(xiàn)等情況。是否有一個(gè)通用的編程思路,能夠適用于大多數(shù)機(jī)電一體化自動(dòng)控制系統(tǒng),學(xué)會(huì)一種方法,就能夠應(yīng)對(duì)大多數(shù)應(yīng)用場(chǎng)合?經(jīng)過總結(jié),得出一套通用的編程思路,在實(shí)踐中得到運(yùn)用,效果良好。本文以西門子系列PLC 為例,對(duì)此思路進(jìn)行探討。
為了更好地說明通用編程思路的過程,通過一個(gè)實(shí)訓(xùn)場(chǎng)景進(jìn)行說明,以亞龍YL-335B 自動(dòng)化生產(chǎn)線安裝與調(diào)試實(shí)訓(xùn)設(shè)備中供料站
部分實(shí)訓(xùn)為案例進(jìn)行探討。圖1為供料站示意圖,系統(tǒng)上電后,系統(tǒng)進(jìn)行初始化檢測(cè),如果各傳感器、執(zhí)行機(jī)構(gòu)氣缸處于正常初始化狀態(tài),管形料倉中物料充足,則綠色指示燈常亮,表示準(zhǔn)備就緒,系統(tǒng)正常可以啟動(dòng);如果管形料倉中物料不足,則黃色指示燈閃爍,表示物料不足,如果物料用盡,則黃色指示燈常亮,表示已經(jīng)缺料,系統(tǒng)能自動(dòng)停止;如果傳感器、執(zhí)行機(jī)構(gòu)氣缸不處于正常初始化狀態(tài),紅色指示燈常亮,表示系統(tǒng)有故障,不能啟動(dòng);正常啟動(dòng)后,綠燈閃爍,表示系統(tǒng)正在運(yùn)行,按下停止按鈕,系統(tǒng)恢復(fù)初始化檢測(cè)狀態(tài);系統(tǒng)運(yùn)行過程中,頂料氣缸伸出防止非底層的物料落下,然后推料氣缸把底層物料推向出料臺(tái),推料氣缸復(fù)位,將出料臺(tái)物料拿走后頂料氣缸復(fù)位,上層物料落下,進(jìn)行下一次出料循環(huán)。
圖1 供料站示意圖
了解了系統(tǒng)需求以后,如何思考和編寫PLC 控制程序呢?總結(jié)的通用編程方法按照以下步驟進(jìn)行:①系統(tǒng)分析,對(duì)程序進(jìn)行模塊化劃分;②IO 分配,輔助寄存器標(biāo)志位的使用;③主程序模塊的通用寫法;④基于控制流程圖的步進(jìn)程序通用寫法。
目前高校的多數(shù)相關(guān)教材介紹PLC 編程方式都是線性編程,講解基本指令,進(jìn)行簡(jiǎn)單實(shí)驗(yàn)演示,很少涉及結(jié)構(gòu)化編程的思路和方法。
線性化編程就是將整個(gè)用戶程序放在組織塊OB1中,在CPU 循環(huán)掃描時(shí)從上到下依次執(zhí)行全部指令,其特點(diǎn)是結(jié)構(gòu)簡(jiǎn)單、但效率低下,程序結(jié)構(gòu)不清晰,造成編寫、管理和調(diào)試?yán)щy。
結(jié)構(gòu)化編程是將程序根據(jù)功能劃分為不同的邏輯塊,且每一個(gè)邏輯塊完成的功能不同,在OB1中可以根據(jù)條件調(diào)用不同的功能或模塊,其特點(diǎn)是把復(fù)雜的工藝過程分解成相對(duì)簡(jiǎn)單、容易編程實(shí)現(xiàn)的模塊,根據(jù)條件調(diào)用,提高了CPU 的利用率,同時(shí)降低了編程難度。
通用編程思路的第一步就是要將程序劃分為多個(gè)模塊,劃分的過程要對(duì)系統(tǒng)功能進(jìn)行合理的分析、分解和綜合,做好這一步,就能將龐大復(fù)雜的系統(tǒng)分解成為簡(jiǎn)單、易于實(shí)現(xiàn)的模塊。
進(jìn)行模塊化劃分,一般把系統(tǒng)分為主程序、控制工藝流程子程序和顯示子程序3個(gè)模塊。主程序主要完成系統(tǒng)初始化檢測(cè)和子程序的調(diào)用協(xié)調(diào)等工作;控制工藝流程子程序主要采用步進(jìn)程序?qū)懛?,完成?zhí)行動(dòng)作的工藝流程;顯示子程序主要是控制系統(tǒng)指示燈的顯示或者觸摸屏組態(tài)的顯示。對(duì)于執(zhí)行元件較多、控制工藝較長(zhǎng)的控制工藝流程子程序,還能繼續(xù)分解成更多更小的控制工藝流程子程序,每個(gè)子程序都能獨(dú)立運(yùn)行和相互合作。如果需要,還需要插入中斷子程序。這里需要說明的是,此種模塊化劃分是通過主程序和子程序的方式進(jìn)行劃分,適用于所有PLC,對(duì)于S7-300系列等級(jí)更高級(jí)的PLC,軟件帶有更專業(yè)的模塊劃分方法。
劃分好程序結(jié)構(gòu)后,開始編寫梯形圖之前,要在編程軟件中聲明地址分配表并注釋元件名稱,此時(shí)為了更好地理解系統(tǒng)運(yùn)行狀態(tài)和進(jìn)行程序控制,需要給系統(tǒng)的各階段狀態(tài)或者關(guān)鍵信息定義一個(gè)標(biāo)志位,這樣做的好處是讀取標(biāo)志位狀態(tài)能知道系統(tǒng)運(yùn)行的狀態(tài),對(duì)標(biāo)志位進(jìn)行操作能控制系統(tǒng)的進(jìn)程,對(duì)清晰程序結(jié)構(gòu)和編寫程序有非常大的幫助,這里建議使用位輔助寄存器M 作為標(biāo)志位,需要定義的標(biāo)志位有初態(tài)檢測(cè)標(biāo)志位、準(zhǔn)備就緒標(biāo)志位。運(yùn)行狀態(tài)標(biāo)志位、啟動(dòng)指令標(biāo)志位和停止指令標(biāo)志位,還可以根據(jù)系統(tǒng)的特殊要求增加需要的標(biāo)志位。每個(gè)標(biāo)志位代表一個(gè)功能或者系統(tǒng)狀態(tài),對(duì)標(biāo)志位進(jìn)行置位或者復(fù)位操作,然后通過標(biāo)志位的變化去控制程序的流程。
合理使用規(guī)劃好的狀態(tài)標(biāo)志位進(jìn)行主程序的編寫,主要考慮以下4個(gè)方面的問題:①系統(tǒng)初始化及初態(tài)檢測(cè);②系統(tǒng)如何進(jìn)入啟動(dòng)運(yùn)行狀態(tài);③系統(tǒng)如何進(jìn)入停止?fàn)顟B(tài);④子程序與主程序的關(guān)系、子程序間的關(guān)系及協(xié)調(diào)。
程序編寫過程中摒棄了起保停的思路,全部采用置位指令和復(fù)位指令的思路。
系統(tǒng)初始化及初態(tài)檢測(cè),是在程序一開始需要解決的問題,使用特殊寄存器SM0.1只在第一個(gè)掃描周期接通進(jìn)行初始化,置位初態(tài)檢測(cè)標(biāo)志位,復(fù)位準(zhǔn)備就緒標(biāo)志位、運(yùn)行狀態(tài)標(biāo)志位、啟動(dòng)標(biāo)志位和停止標(biāo)志位,根據(jù)系統(tǒng)實(shí)際情況,置位或者復(fù)位相應(yīng)的輸出。然后進(jìn)行初態(tài)檢測(cè),看系統(tǒng)是否處于準(zhǔn)備就緒狀態(tài),具體做法是把初態(tài)檢測(cè)標(biāo)志位常開觸點(diǎn)和所有的傳感器觸點(diǎn)串聯(lián),即進(jìn)行與運(yùn)算,其中系統(tǒng)正常準(zhǔn)備就緒情況下有信號(hào)的傳感器用常開觸點(diǎn)表示,沒有信號(hào)的傳感器用常閉觸點(diǎn)表示,另外,還可以根據(jù)系統(tǒng)的需求,增加特殊功能狀態(tài)的檢測(cè),例如串聯(lián)上供料檢測(cè)標(biāo)志位,缺料檢測(cè)標(biāo)志位等。輸出準(zhǔn)備就緒標(biāo)志位置位,同時(shí)復(fù)位初態(tài)檢測(cè)標(biāo)志位,這樣只會(huì)在系統(tǒng)上電的第一個(gè)掃描周期進(jìn)行初始化,并且檢查系統(tǒng)是否處于可以啟動(dòng)運(yùn)行的狀態(tài)。本例中,供料站初始化及準(zhǔn)備就緒檢測(cè)程序程序思路具有通用性,變化場(chǎng)景后用同樣的思路編寫程序,只需根據(jù)實(shí)際情況修改傳感器數(shù)量和狀態(tài)即可。三菱系列及其他品牌的PLC 也和西門子PLC 中SM0.1有同樣功能的寄存器指令。
然后考慮系統(tǒng)如何進(jìn)入啟動(dòng)運(yùn)行狀態(tài),用準(zhǔn)備就緒標(biāo)志位常開觸點(diǎn)串聯(lián)啟動(dòng)信號(hào)常開觸點(diǎn),輸出運(yùn)行標(biāo)志位置位和控制工藝子程序初始步置位,同時(shí)要復(fù)位和運(yùn)行狀態(tài)沖突互鎖的標(biāo)志位,例如準(zhǔn)備就緒標(biāo)志位、停止指令標(biāo)志位等。有多個(gè)啟動(dòng)信號(hào)的,根據(jù)啟動(dòng)關(guān)系進(jìn)行并聯(lián)或者串聯(lián)。
接下來考慮系統(tǒng)如何進(jìn)入停止?fàn)顟B(tài),這里的思路和啟動(dòng)程序的編寫類似,停止信號(hào)用常開觸點(diǎn),輸出停止指令標(biāo)志位置位、啟動(dòng)指令標(biāo)志位復(fù)位,同時(shí)要將停止?fàn)顟B(tài)影響的標(biāo)志位復(fù)位,例如運(yùn)行狀態(tài)標(biāo)志位復(fù)位,控制工藝流程子程序初始步復(fù)位等。停止信號(hào)除了常規(guī)的停止按鈕外,還需要考慮因?yàn)槿绷?、故障或者意外引起的需要停止系統(tǒng)的情況,如果系統(tǒng)對(duì)于停止的過程有嚴(yán)格的順序步驟,還需要寫一個(gè)停止過程子程序,用停止標(biāo)志位調(diào)用。啟動(dòng)和停止的互鎖,是通過互相復(fù)位的形式完成的。
最后考慮子程序的協(xié)調(diào)和調(diào)用問題,這個(gè)問題相對(duì)簡(jiǎn)單,使用相關(guān)標(biāo)志位調(diào)用子程序即可,對(duì)于需要一直調(diào)用的子程序,使用特殊寄存器SM0.0激活。
子程序主要有兩種類型:①控制工藝流程子程序;②系統(tǒng)顯示子程序。
控制工藝流程子程序的編寫,主要采用步進(jìn)指令SCR 基于順序功能圖進(jìn)行編寫,每一步SCR 程序段需要包含3個(gè)要素:輸出對(duì)象、轉(zhuǎn)移條件和轉(zhuǎn)移目標(biāo)。輸出對(duì)象,在這一步中要完成的動(dòng)作驅(qū)動(dòng);轉(zhuǎn)移條件,滿足條件后,實(shí)現(xiàn)SCR 步的轉(zhuǎn)移;轉(zhuǎn)移目標(biāo),要轉(zhuǎn)移到的下一個(gè)步序。系統(tǒng)控制工藝流程的執(zhí)行輸出可能很多,或者步驟流程較長(zhǎng),但是基于順序功能圖的編寫方式簡(jiǎn)單,有規(guī)律可循,且執(zhí)行過程模式較為固定,稍加練習(xí)即可掌握。對(duì)于龐大復(fù)雜的控制過程,還能拆分成多個(gè)部分分別單獨(dú)編寫控制工藝流程子程序,每個(gè)子程序再分解成若干單一步驟的組合,就能很方便地實(shí)現(xiàn)系統(tǒng)的整體執(zhí)行過程,在整個(gè)系統(tǒng)程序中,控制工藝流程子程序反而不是最難寫的。
順序功能圖是完成控制工藝流程子程序的前提和關(guān)鍵所在,在此進(jìn)行詳細(xì)說明。順序功能圖(SFC)又稱為流程圖或者狀態(tài)轉(zhuǎn)移圖,它是一種圖形化編程語言,是專用于工業(yè)順序控制程序設(shè)計(jì)的一種功能性說明語言,它能夠完整地描述電氣控制系統(tǒng)的執(zhí)行過程、特性和功能,是分析和設(shè)計(jì)電氣控制系統(tǒng)控制程序的重要工具。對(duì)于一個(gè)順序控制的問題,不管控制邏輯多么的復(fù)雜,都能夠用順序功能圖的方式描述清楚。
但是很多軟件不支持SFC 編程語言,不能直接用SFC 編程,因此大多數(shù)人的操作習(xí)慣不是用軟件的SFC 功能,而是在需要使用順序功能圖的時(shí)候,手動(dòng)畫出SFC 順序流程圖,再對(duì)照SCR 步進(jìn)指令編寫PLC 梯形圖,編寫步進(jìn)指令梯形圖的過程中有些操作看似重復(fù)繁瑣,程序也較長(zhǎng),但是思路非常清晰,易于上手和實(shí)現(xiàn),尤其是對(duì)于控制邏輯比較復(fù)雜的控制系統(tǒng),例如選擇分支、并行分支和跳轉(zhuǎn)循環(huán)的環(huán)節(jié)較多時(shí),畫出SFC 順序流程圖,再轉(zhuǎn)換成步進(jìn)控制流程梯形圖的方法,仍然是最有效和可靠的編程方法。
順序功能圖主要由“狀態(tài)”或稱“步”“轉(zhuǎn)移條件”“動(dòng)作(驅(qū)動(dòng))”及有向線段等元素組成?!盃顟B(tài)(步)”是控制系統(tǒng)中一個(gè)相對(duì)不變的性質(zhì),對(duì)應(yīng)一個(gè)穩(wěn)定的情形或者某個(gè)過程。狀態(tài)一般從初始狀態(tài)開始,大多系統(tǒng)都需要重復(fù)循環(huán)運(yùn)行,所以在末狀態(tài)一般都會(huì)跳轉(zhuǎn)回初始狀態(tài)周而復(fù)始運(yùn)行。每個(gè)狀態(tài)都有一個(gè)編號(hào),根據(jù)習(xí)慣,對(duì)應(yīng)PLC 不同編號(hào)的命名也有所不同,且可以不按順序命名或者跳轉(zhuǎn)。“動(dòng)作(驅(qū)動(dòng))”是指在當(dāng)前狀態(tài)下需要執(zhí)行的控制動(dòng)作,可以是一個(gè)動(dòng)作或者多個(gè)動(dòng)作,也可不做動(dòng)作只是等待?!稗D(zhuǎn)移條件”是指當(dāng)滿足某個(gè)特定條件且當(dāng)前狀態(tài)處于激活時(shí),控制系統(tǒng)從當(dāng)前狀態(tài)跳轉(zhuǎn)到下一個(gè)指定的狀態(tài),指定狀態(tài)被激活,當(dāng)前狀態(tài)被復(fù)位。有向線段用來連接以上元素,表明方向等信息。本例中將供料站控制工藝狀態(tài)(步)進(jìn)行了合并優(yōu)化,分成了推出步S0.0和復(fù)位步S0.1,合并優(yōu)化的原則就是在一個(gè)狀態(tài)(步)中同一個(gè)輸出只出現(xiàn)一次,不同輸出盡量合并在同一個(gè)狀態(tài)(步)中,就能簡(jiǎn)化狀態(tài)(步)的數(shù)量。
顯示子程序大部分情況是指示燈的顯示,這里要避免對(duì)同一個(gè)指示燈的多種顯示狀態(tài)編寫多個(gè)輸出,導(dǎo)致雙線圈的錯(cuò)誤編程,同一個(gè)指示燈只能有一個(gè)輸出,多種狀態(tài)可以通過并聯(lián)方式編寫,比如常亮和不同頻率閃爍,同時(shí),多個(gè)顯示狀態(tài)之間進(jìn)行互鎖控制。
PLC 通用編程思路探討,不僅限于西門子系列PLC,同樣適用于三菱系列,國產(chǎn)系列等PLC。這個(gè)思路是一個(gè)整體框架性思路,對(duì)于需要用到變頻器、步進(jìn)驅(qū)動(dòng)、伺服驅(qū)動(dòng)等特殊元器件的應(yīng)用,同樣可以嵌入到框架當(dāng)中,有時(shí)候需要根據(jù)系統(tǒng)需求多增加幾個(gè)驅(qū)動(dòng)子程序。