計(jì)與調(diào)試)
簡(jiǎn)介本資源是一套基于西門(mén)子S7-1200 PLC實(shí)現(xiàn)的六層電梯控制系統(tǒng)完整工程文件面向自動(dòng)化、電氣工程及相關(guān)專業(yè)初學(xué)者與實(shí)踐者解決電梯邏輯控制建模、多樓層召喚響應(yīng)、平層定位、開(kāi)關(guān)門(mén)協(xié)同及安全保護(hù)等核心問(wèn)題。壓縮包共34個(gè)文件含6個(gè)XML配置文件用于設(shè)備組態(tài)與通信參數(shù)、5個(gè)DEL與CFS文件系統(tǒng)數(shù)據(jù)塊與符號(hào)表支持、1個(gè).tis項(xiàng)目結(jié)構(gòu)文件及多個(gè).plf、.idx、.db等TIA Portal工程必需的底層編譯與索引文件整體大小為638KB結(jié)構(gòu)符合標(biāo)準(zhǔn)S7-1200項(xiàng)目組織規(guī)范。已有513人學(xué)習(xí)下載可直接導(dǎo)入TIA Portal V15及以上版本進(jìn)行編譯、仿真與硬件下載。讀者將獲得可運(yùn)行的梯形圖/ST混合邏輯程序、完整的PLC地址分配表、樓層信號(hào)采集與狀態(tài)機(jī)控制流程、以及包含UserFiles、PEData、XRef等模塊的成熟工程目錄結(jié)構(gòu)是理解工業(yè)級(jí)電梯控制邏輯與PLC工程化開(kāi)發(fā)的優(yōu)質(zhì)實(shí)操范例。 從學(xué)生時(shí)代的課程設(shè)計(jì)開(kāi)始一直到后來(lái)做真實(shí)的三層、六層甚至高層電梯改造“基于PLC的六層電梯控制程序S7-1200”基本上是繞不開(kāi)的經(jīng)典題目。去年整理硬盤(pán)的時(shí)候我翻出自己這套用博途TIA Portal寫(xiě)的S7-1200六層電梯控制程序順手重新打開(kāi)工程跑了一遍仿真發(fā)現(xiàn)核心邏輯放到今天依然通用只是當(dāng)年踩過(guò)的那些坑、總結(jié)出來(lái)的調(diào)試方法現(xiàn)在再回頭看更清晰了。這篇就把整個(gè)設(shè)計(jì)思路、I/O分配、程序架構(gòu)、實(shí)操步驟和排查經(jīng)驗(yàn)完整拆開(kāi)講不管你是準(zhǔn)備PLC課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)還是初學(xué)者接了電梯改造項(xiàng)目都能拿來(lái)直接參考。1. 項(xiàng)目概述電梯控制程序到底要解決什么問(wèn)題1.1 電梯控制的核心是“調(diào)度”而不是“動(dòng)作”很多新手第一次接觸電梯控制第一反應(yīng)是糾結(jié)“怎么讓電機(jī)轉(zhuǎn)起來(lái)”實(shí)際上PLC控制電梯和變頻器控制電機(jī)是兩回事。在標(biāo)準(zhǔn)電梯改造中六層電梯的拖動(dòng)電機(jī)一般由變頻器帶動(dòng)PLC根本不需要直接輸出PID調(diào)速信號(hào)它只負(fù)責(zé)決定“往上還是往下”“到第幾層停”“門(mén)開(kāi)多久”。也就是說(shuō)PLC站在調(diào)度層采集各種按鈕和傳感器信號(hào)通過(guò)邏輯判斷產(chǎn)生方向指令、停層指令、開(kāi)關(guān)門(mén)指令再把這些指令輸出到接觸器、繼電器或變頻器讓對(duì)方去執(zhí)行。所以六層電梯控制程序的核心本質(zhì)上是三個(gè)邏輯問(wèn)題呼叫如何登記、方向如何判定、到站如何停車(chē)開(kāi)關(guān)門(mén)。把這三個(gè)問(wèn)題想透了程序怎么寫(xiě)都不會(huì)亂。1.2 為什么選S7-1200做六層電梯六層電梯的開(kāi)關(guān)量點(diǎn)位大概在40點(diǎn)以內(nèi)輸入約25到30點(diǎn)輸出約10到15點(diǎn)這個(gè)規(guī)模用西門(mén)子S7-1200來(lái)跑非常舒服。S7-1200的CPU自帶14DI/10DO配合一個(gè)SM 1221數(shù)字量輸入模塊或者SM 1223數(shù)字量混合模塊點(diǎn)位完全夠用硬件成本不高。編程軟件TIA Portal博途是現(xiàn)在西門(mén)子的主流環(huán)境比Step 7老界面友好太多支持梯形圖、SCL、FBD初學(xué)和學(xué)習(xí)工控的人上手快。集成以太網(wǎng)口下載調(diào)試方便網(wǎng)線一插就能在線監(jiān)控變量、強(qiáng)制信號(hào)比老式MPI/DP電纜體驗(yàn)好一個(gè)時(shí)代。后續(xù)如果要接上位機(jī)C#、LabVIEW、Java讀數(shù)據(jù)或者Profinet遠(yuǎn)程從站S7-1200都是現(xiàn)成支持不用換平臺(tái)。從課程設(shè)計(jì)和工程應(yīng)用兩個(gè)角度來(lái)說(shuō)S7-1200都是“性價(jià)比很高的選擇”。有些學(xué)校教材還在用200SMART或三菱FX系列做電梯那也很好只是我下面講的具體組態(tài)和指令會(huì)以S7-1200博途為準(zhǔn)。1.3 六層電梯系統(tǒng)整體構(gòu)成整套控制系統(tǒng)可以分為三個(gè)部分信號(hào)輸入側(cè)、PLC控制器、執(zhí)行輸出側(cè)。信號(hào)輸入側(cè)包括轎廂內(nèi)選層按鈕1到6層共6個(gè)、廳外召喚按鈕1層只有上召6層只有下召中間2到5層有上召和下召共10個(gè)、每層平層開(kāi)關(guān)/樓層感應(yīng)開(kāi)關(guān)共6個(gè)用于判斷轎廂當(dāng)前到哪一層、門(mén)鎖信號(hào)、開(kāi)關(guān)門(mén)到位信號(hào)、超載信號(hào)、急停信號(hào)、檢修模式信號(hào)。執(zhí)行輸出側(cè)包括上行接觸器、下行接觸器、開(kāi)門(mén)繼電器、關(guān)門(mén)繼電器、樓層顯示驅(qū)動(dòng)、方向指示燈、到站提示鈴。這樣一個(gè)系統(tǒng)輸入點(diǎn)位可以做到26到30個(gè)輸出點(diǎn)位10到14個(gè)。所以我建議CPU選擇1214C DC/DC/DC再擴(kuò)展一塊SM 1221 DI 16或者用SM 1223的8DI/8DO組合。后者雖然模塊多一塊但能讓輸出冗余更充裕。2. 硬件搭建與I/O信號(hào)分配2.1 輸入信號(hào)梳理不能只數(shù)按鈕把輸入信號(hào)列出來(lái)這一步看著簡(jiǎn)單實(shí)際上一錯(cuò)后面全亂。很多初學(xué)者拿到的參考圖紙里I/O表寫(xiě)得七零八落照著接線后程序怎么調(diào)都別扭大部分問(wèn)題出在平層信號(hào)和門(mén)區(qū)信號(hào)的處理上。六層電梯最常用的樓層檢測(cè)方案是在井道內(nèi)每層安裝一個(gè)感應(yīng)開(kāi)關(guān)或隔磁板轎廂側(cè)面安裝一個(gè)平層感應(yīng)器。轎廂經(jīng)過(guò)哪一層哪一層的信號(hào)就有效PLC據(jù)此判斷當(dāng)前樓層。注意這個(gè)信號(hào)不是“持續(xù)保持”的轎廂離開(kāi)該層后信號(hào)就消失所以程序中必須用當(dāng)前樓層記憶機(jī)制運(yùn)行到某層時(shí)把當(dāng)前樓層號(hào)更新并保持直到下一次更新。還有一種方案是接近開(kāi)關(guān)加計(jì)數(shù)用高速計(jì)數(shù)器HSC統(tǒng)計(jì)脈沖算樓層但六層電梯用不到這么復(fù)雜每個(gè)樓層一個(gè)感應(yīng)點(diǎn)最簡(jiǎn)單可靠。內(nèi)呼和外呼按鈕就更直接了內(nèi)呼6個(gè)外呼10個(gè)1層上召、6層下召、2到5層上下召各一全部為自復(fù)位按鈕接到PLC數(shù)字量輸入點(diǎn)。這些按鈕在程序中要用置位/復(fù)位方式“記住”不能被瞬時(shí)的按鈕脈沖沖掉所以要登記和消號(hào)。下面是我實(shí)際項(xiàng)目中常用的一組I/O分配參考你可以直接用PLC地址信號(hào)名稱說(shuō)明I0.0~I0.5內(nèi)呼1~6層按鈕轎廂內(nèi)選層I0.61層上召喚廳外呼梯上I0.7、I1.0、I1.12/3/4層上召喚廳外呼梯上I1.25層上召喚廳外呼梯上I1.32層下召喚廳外呼梯下I1.4、I1.5、I2.03/4/5層下召喚廳外呼梯下I2.16層下召喚廳外呼梯下I2.2~I2.71~6層平層開(kāi)關(guān)井道樓層感應(yīng)I3.0門(mén)鎖信號(hào)所有廳門(mén)轎門(mén)閉合I3.1開(kāi)門(mén)到位信號(hào)開(kāi)門(mén)機(jī)反饋I3.2關(guān)門(mén)到位信號(hào)開(kāi)門(mén)機(jī)反饋I3.3超載信號(hào)超載開(kāi)關(guān)I3.4急停信號(hào)常閉串入I3.5檢修/慢車(chē)模式檢修時(shí)強(qiáng)制低速Q(mào)0.0上行接觸器控制電機(jī)正向Q0.1下行接觸器控制電機(jī)反向Q0.2開(kāi)門(mén)繼電器開(kāi)門(mén)機(jī)動(dòng)作Q0.3關(guān)門(mén)繼電器關(guān)門(mén)機(jī)動(dòng)作Q0.4樓層顯示ABCD編碼個(gè)位Q0.5樓層顯示BBCD編碼Q0.6樓層顯示CBCD編碼Q1.0上行方向燈指示上行Q1.1下行方向燈指示下行Q1.2到站鈴/蜂鳴器到站提醒這張表不是死的。比如平層開(kāi)關(guān)數(shù)量、外呼接線順序都可以根據(jù)現(xiàn)場(chǎng)調(diào)整但有一個(gè)原則必須保證所有輸入點(diǎn)中急停、門(mén)鎖、上下行接觸器這類安全相關(guān)信號(hào)必須接常閉邏輯也就是線路斷開(kāi)時(shí)PLC讀到的必須是“停車(chē)條件不滿足”而不是“允許運(yùn)行”。這樣一旦斷線電梯停在原處而不是瘋跑。2.2 輸出側(cè)執(zhí)行機(jī)構(gòu)接觸器互鎖是保命項(xiàng)輸出側(cè)最核心的是上行接觸器和下行接觸器。這兩個(gè)接觸器任何時(shí)刻只能有一個(gè)吸合否則主回路短路輕則跳閘重則燒變頻器。程序里當(dāng)然要做互鎖即上行條件滿足時(shí)強(qiáng)制復(fù)位下行輸出下行條件滿足時(shí)強(qiáng)制復(fù)位上行輸出但程序互鎖不等于物理互鎖。在電氣回路上同樣必須用接觸器輔助觸點(diǎn)做硬件互鎖KM1的常閉觸點(diǎn)串聯(lián)在KM2線圈回路里KM2的常閉觸點(diǎn)串聯(lián)在KM1線圈回路里。這是我反復(fù)強(qiáng)調(diào)的程序只是軟邏輯硬件才是保命底線。開(kāi)門(mén)和關(guān)門(mén)繼電器也是一樣不能同時(shí)輸出。雖然開(kāi)門(mén)機(jī)和關(guān)門(mén)機(jī)在物理上通常自帶限位但PLC在邏輯上還是要做到二選一而且要有“關(guān)門(mén)途中再次開(kāi)門(mén)”的處理。至于樓層顯示最省輸出的方式是用BCD碼輸出3個(gè)輸出點(diǎn)Q0.4、Q0.5、Q0.6組合代表1到6層二進(jìn)制再接一個(gè)BCD到七段碼的譯碼器驅(qū)動(dòng)數(shù)碼管。這樣比直接給七段碼輸出省一半以上的點(diǎn)。有些項(xiàng)目直接用觸摸屏顯示樓層號(hào)那就更省了PLC只需把當(dāng)前樓層號(hào)放到一個(gè)整型變量里。2.3 接線實(shí)操注意強(qiáng)弱電混裝最容易出問(wèn)題電梯控制柜里既有220VAC的接觸器、變壓器又有24VDC的傳感器和PLC接線時(shí)最忌諱強(qiáng)電和弱點(diǎn)捆在一起走線槽。我在現(xiàn)場(chǎng)吃過(guò)虧PLC輸入信號(hào)線跟接觸器線走同一根扎帶接觸器一吸合PLC的AI/AO信號(hào)亂跳。后來(lái)改成強(qiáng)弱電分離輸入信號(hào)用屏蔽雙絞線傳感器和PLC電源用一個(gè)獨(dú)立的DC24V開(kāi)關(guān)電源問(wèn)題才消失。另外S7-1200數(shù)字量輸入默認(rèn)是漏型接法也就是NPN傳感器接法公共端M接DC24V負(fù)極。如果你現(xiàn)場(chǎng)用的是PNP型傳感器在自動(dòng)化行業(yè)很常見(jiàn)要么選源型輸入接法要么用中間繼電器轉(zhuǎn)接。這個(gè)接錯(cuò)了指示燈不亮但信號(hào)一直沒(méi)進(jìn)來(lái)排查起來(lái)特別浪費(fèi)時(shí)間。3. 核心控制邏輯設(shè)計(jì)與程序架構(gòu)3.1 程序架構(gòu)用OB、FB、DB把邏輯拆干凈S7-1200的程序不建議全部堆在OB1里做六層電梯雖然邏輯不算復(fù)雜但把功能拆開(kāi)后期調(diào)試、改型號(hào)、換樓層數(shù)都會(huì)方便很多。我習(xí)慣這樣分程序塊功能OB1主循環(huán)調(diào)用下列所有功能FC1輸入去抖與呼叫登記FC2當(dāng)前樓層識(shí)別與樓層記憶FC3目標(biāo)樓層匯總與方向決策FC4停層判斷與開(kāi)關(guān)門(mén)控制FC5顯示輸出與指示FB1電梯主控狀態(tài)機(jī)可選進(jìn)階用DB1電梯運(yùn)行數(shù)據(jù)區(qū)當(dāng)前層、目標(biāo)層、呼叫數(shù)組等OB1作為主程序去調(diào)用各個(gè)FC看起來(lái)多了一層但實(shí)際上每個(gè)功能的代碼量都不大而且能獨(dú)立測(cè)試。尤其是方向決策和停層判斷這兩塊單獨(dú)拉出來(lái)寫(xiě)出現(xiàn)問(wèn)題時(shí)不至于在幾百行梯形圖里翻。3.2 樓層識(shí)別從輸入信號(hào)到當(dāng)前樓層號(hào)樓層識(shí)別雖然不復(fù)雜但處理不好會(huì)出現(xiàn)樓層亂跳。我用一個(gè)整型變量CurrentFloor存儲(chǔ)當(dāng)前樓層類型Int。當(dāng)每一層的平層開(kāi)關(guān)信號(hào)有效時(shí)把這個(gè)樓層號(hào)寫(xiě)入CurrentFloor。梯形圖或SCL里寫(xiě)法是IF #FloorSensor[1] THEN #CurrentFloor : 1; ELSIF #FloorSensor[2] THEN #CurrentFloor : 2; ELSIF #FloorSensor[3] THEN #CurrentFloor : 3; ELSIF #FloorSensor[4] THEN #CurrentFloor : 4; ELSIF #FloorSensor[5] THEN #CurrentFloor : 5; ELSIF #FloorSensor[6] THEN #CurrentFloor : 6; END_IF;這看著簡(jiǎn)單但實(shí)際工程中會(huì)出現(xiàn)一種情況電梯運(yùn)行速度太快PLC掃描周期長(zhǎng)結(jié)果經(jīng)過(guò)中間某一層時(shí)該層平層開(kāi)關(guān)的脈沖剛好被掃描周期漏掉導(dǎo)致樓層顯示跳到兩層之外。解決方法是在接近預(yù)定??繕菍訒r(shí)提前減速讓轎廂以慢車(chē)速度通過(guò)平層區(qū)這樣每次掃描都能穩(wěn)定捕捉到每層信號(hào)。如果在純開(kāi)關(guān)量方案里沒(méi)有變頻器減速配合那就在程序里多做幾次采樣確認(rèn)或者用高速計(jì)數(shù)方式捕捉但一般電梯調(diào)試時(shí)首車(chē)都會(huì)調(diào)慢車(chē)。3.3 呼叫登記與消號(hào)用置位/復(fù)位別用自鎖內(nèi)呼和外呼按鈕都是瞬時(shí)脈沖按下1秒松開(kāi)PLC必須在松開(kāi)后依然“記得”這個(gè)呼叫。初學(xué)者最容易想到的是自鎖電路用按鈕接通一個(gè)中間繼電器Q再用Q的常開(kāi)觸點(diǎn)保持回路。這個(gè)在PLC里完全可以做但更推薦用置位/復(fù)位SR因?yàn)榍逦?、不容易出錯(cuò)。以1層內(nèi)呼為例梯形圖邏輯是網(wǎng)絡(luò)1I0.0按下有效則 SET #CallInside[1]網(wǎng)絡(luò)2當(dāng)電梯到達(dá)1層且開(kāi)門(mén)到位時(shí)滿足消號(hào)條件則 RESET #CallInside[1]這樣每個(gè)呼叫按鈕就對(duì)應(yīng)一個(gè)Bool變量登記就是置位到達(dá)消號(hào)就是復(fù)位。外呼同理只是外呼還得分上行呼叫和下行呼叫。有個(gè)細(xì)節(jié)值得注意廳外呼叫按鈕不像內(nèi)呼到站后要不要消號(hào)要看電梯運(yùn)行方向。比如電梯正在上行5層有人按了上召電梯到達(dá)5層??窟@時(shí)候上召消號(hào)沒(méi)問(wèn)題。但如果5層有人按下召而電梯正在上行會(huì)先經(jīng)過(guò)5層不停因?yàn)椴豁樎愤@時(shí)下召不能被消掉必須等電梯下行到達(dá)5層再消。這就是順向截梯規(guī)則中的“方向性消號(hào)”。3.4 方向決策順向截梯算法方向決策是整個(gè)電梯控制程序中最有含金量的部分。六層電梯雖然規(guī)模小但算法邏輯和三十層電梯是同一個(gè)套路。我的做法是構(gòu)造兩個(gè)數(shù)組內(nèi)呼數(shù)組CallInside[1..6]、外呼上召數(shù)組CallUp[1..6]、外呼下召數(shù)組CallDown[1..6]。這里注意1層沒(méi)有下召6層沒(méi)有上召但數(shù)組下標(biāo)統(tǒng)一沒(méi)用的地方置FALSE即可。上行決策電梯當(dāng)前處于停止?fàn)顟B(tài)或者正在上行過(guò)程中。如果當(dāng)前是停止?fàn)顟B(tài)只要存在任何一個(gè)目標(biāo)樓層高于當(dāng)前樓層就進(jìn)入上行狀態(tài)。如果電梯正在上行任何高于當(dāng)前樓層的有效呼叫內(nèi)呼上召下召都可以被納入目標(biāo)范圍但這些呼叫要分優(yōu)先級(jí)順向的呼叫對(duì)上行來(lái)說(shuō)上召是順路內(nèi)呼也是順路優(yōu)先響應(yīng)下行召喚只在它位于電梯當(dāng)前行駛方向前方時(shí)才會(huì)被“順路”帶上否則要等下一次下行。下行決策同理反向處理。在實(shí)際的純PLC梯形圖里我不會(huì)寫(xiě)太多復(fù)雜的循環(huán)多用比較和置位。比如用MaxFloor變量保存當(dāng)前方向上“最遠(yuǎn)目標(biāo)樓層”。找到所有高于當(dāng)前層的有效呼叫取最大值作為本次上行的“終點(diǎn)層”。電梯向上運(yùn)行過(guò)程中只要CurrentFloor等于某個(gè)有效目標(biāo)樓層就停層。到達(dá)終點(diǎn)層后再判斷是否有反方向的呼叫如果有就換向下行如果沒(méi)有電梯停在終點(diǎn)層待機(jī)。用SCL寫(xiě)這段邏輯會(huì)更直觀// 搜索上方向最遠(yuǎn)目標(biāo)樓層 #HighestTarget : #CurrentFloor; FOR #i : #CurrentFloor 1 TO 6 DO IF #CallInside[#i] OR #CallUp[#i] OR #CallDown[#i] THEN #HighestTarget : #i; END_IF; END_FOR; // 存在高于當(dāng)前層的目標(biāo)則輸出上行 IF #HighestTarget #CurrentFloor THEN #DirectionUp : TRUE; ELSE #DirectionUp : FALSE; END_IF;注意這個(gè)FOR循環(huán)在OB1里執(zhí)行沒(méi)有壓力六層循環(huán)周期極短整個(gè)PLC掃描周期也就幾毫秒完全不影響實(shí)時(shí)性。3.5 停層與開(kāi)關(guān)門(mén)控制別忽略平層精度電梯運(yùn)行到了目標(biāo)樓層怎么停下來(lái)不是一到位就立即開(kāi)門(mén)而是要經(jīng)過(guò)“平層檢測(cè)→減速停車(chē)→開(kāi)門(mén)繼電器動(dòng)作→開(kāi)門(mén)到位→延時(shí)→關(guān)門(mén)繼電器動(dòng)作→關(guān)門(mén)到位→運(yùn)行準(zhǔn)備”這一整個(gè)流程。門(mén)聯(lián)鎖是電梯里最重要的一環(huán)電梯運(yùn)行前門(mén)鎖信號(hào)必須有效I3.0為T(mén)RUE表示所有廳門(mén)和轎門(mén)都已閉合運(yùn)行過(guò)程中如果門(mén)鎖信號(hào)突然消失程序必須立刻斷開(kāi)上下行輸出讓電梯急停。這個(gè)邏輯要用硬件回路和程序雙重保證。開(kāi)門(mén)延時(shí)一般設(shè)5到8秒具體看現(xiàn)場(chǎng)客流量。延時(shí)可以用S7-1200的TON定時(shí)器。關(guān)門(mén)過(guò)程中要判斷關(guān)門(mén)到位信號(hào)如果一定時(shí)間內(nèi)門(mén)沒(méi)關(guān)到位要能再次開(kāi)門(mén)重新關(guān)這是最基礎(chǔ)的防夾邏輯。真實(shí)電梯還有光幕或安全觸板但六層電梯教學(xué)項(xiàng)目里可以用“開(kāi)門(mén)到位信號(hào)斷開(kāi)”來(lái)簡(jiǎn)單模擬。3.6 顯示與指示BCD顯示和方向燈當(dāng)前樓層號(hào)送到顯示輸出時(shí)要把CurrentFloor整數(shù)轉(zhuǎn)換成BCD輸出。如果需要用Q0.4、Q0.5、Q0.6三位輸出表示1到6層可以寫(xiě)成#DisplayBCD : #CurrentFloor; // 1~6 #Out_A : #DisplayBCD.0; // 位0 #Out_B : #DisplayBCD.1; // 位1 #Out_C : #DisplayBCD.2; // 位2上行/下行方向指示燈直接由方向標(biāo)志驅(qū)動(dòng)。到站鈴可以在平層完成的瞬間輸出一個(gè)0.5秒脈沖用TON實(shí)現(xiàn)。4. 博途實(shí)操?gòu)慕üこ痰皆诰€調(diào)試4.1 新建項(xiàng)目與硬件組態(tài)打開(kāi)TIA Portal新建項(xiàng)目設(shè)備里選擇S7-1200對(duì)應(yīng)的CPU型號(hào)。我手頭版本如果是V15及以上基本都能選到1214C DC/DC/DC固件版本一般選V4.x。建完CPU后添加SM 1221數(shù)字量輸入模塊16點(diǎn)或SM 1223模塊。組態(tài)界面上可以看到每個(gè)I/O點(diǎn)的地址自動(dòng)分配。建議在組態(tài)里把設(shè)備名稱、IP地址先設(shè)置好比如IP設(shè)為192.168.0.10這樣后面仿真和下載不容易混亂。注意博途不同版本打開(kāi)同版本工程也會(huì)有系統(tǒng)提示需要升級(jí)的情況。老版本工程用新版本打開(kāi)會(huì)彈出“項(xiàng)目升級(jí)”提示確認(rèn)即可。但如果你的工程是V18做的V15是打不開(kāi)的這一點(diǎn)下載別人工程前一定先確認(rèn)版本。4.2 程序編寫(xiě)先搭變量表再寫(xiě)邏輯寫(xiě)程序前我強(qiáng)烈建議先建好全局變量表PLC tags。把I0.0、Q0.0這些實(shí)際地址和語(yǔ)義名稱綁定好后面寫(xiě)梯形圖全是看名字不會(huì)寫(xiě)錯(cuò)地址。我的習(xí)慣是輸入信號(hào)統(tǒng)一命名In_InnerCall_1F、In_UpCall_3F、In_FloorSensor_5F、In_DoorLock輸出信號(hào)統(tǒng)一命名Out_MotorUp、Out_MotorDown、Out_DoorOpen、Out_DoorClose程序內(nèi)部變量統(tǒng)一放DBCurrentFloor、DirectionUp、CallInside數(shù)組等然后OB1里依次調(diào)用FC1到FC5。FC1里寫(xiě)輸入去抖用S7-1200自帶的輸入延時(shí)濾波器或者簡(jiǎn)單用TON做20ms去抖。FC2做樓層識(shí)別FC3做方向決策FC4做停層開(kāi)關(guān)門(mén)FC5做顯示輸出。這里給一個(gè)FC3方向決策的簡(jiǎn)化SCL參考方便你理解整體邏輯// 先復(fù)位方向輸出 #Out_MotorUp : FALSE; #Out_MotorDown : FALSE; // 上行條件有高于當(dāng)前層的目標(biāo) #DirUpReq : FALSE; FOR #i : #CurrentFloor 1 TO 6 DO IF #CallInside[#i] OR #CallUp[#i] OR #CallDown[#i] THEN #DirUpReq : TRUE; END_IF; END_FOR; // 下行條件有低于當(dāng)前層的目標(biāo) #DirDownReq : FALSE; FOR #i : 1 TO #CurrentFloor - 1 DO IF #CallInside[#i] OR #CallUp[#i] OR #CallDown[#i] THEN #DirDownReq : TRUE; END_IF; END_FOR; // 互鎖輸出 IF #DirUpReq AND NOT #DirDownReq THEN #Out_MotorUp : TRUE; ELSIF #DirDownReq AND NOT #DirUpReq THEN #Out_MotorDown : TRUE; ELSE // 上下方向同時(shí)有請(qǐng)求按當(dāng)前所處位置順序處理 // 簡(jiǎn)單做法優(yōu)先運(yùn)行當(dāng)前方向一致的一側(cè) END_IF;這段代碼還可以再優(yōu)化但作為六層電梯的第一版已經(jīng)能跑。真正投入現(xiàn)場(chǎng)前一定要在仿真里反復(fù)測(cè)試邊界情況。4.3 使用PLCSIM仿真驗(yàn)證S7-1200在博途V15及以上版本可以使用S7-PLCSIM仿真。仿真啟動(dòng)后把程序下載到虛擬PLC然后在“仿真PLC”里手動(dòng)改變輸入變量狀態(tài)來(lái)模擬按鈕信號(hào)、平層開(kāi)關(guān)信號(hào)。好處是不需要真實(shí)硬件課程設(shè)計(jì)答辯前完全可以跑通整個(gè)流程。我測(cè)試邏輯的時(shí)候一般按這個(gè)順序在1層模擬按下6層內(nèi)呼按鈕觀察方向輸出是否上行、樓層顯示是否變化。把2到5層平層開(kāi)關(guān)依次短暫置位模擬電梯經(jīng)過(guò)觀察CurrentFloor是否更新遞增。到了6層觀察是否消號(hào)、是否開(kāi)門(mén)到位。在6層模擬按下2層外呼下召觀察電梯是否反向下降、2層是否消號(hào)。測(cè)試門(mén)鎖斷開(kāi)電梯運(yùn)行中把In_DoorLock復(fù)位看上下行輸出是否立刻斷開(kāi)。如果仿真中這5步全部通過(guò)程序的基本功能就沒(méi)大問(wèn)題。4.4 下載與在線調(diào)試仿真通過(guò)后連接真實(shí)PLC。用網(wǎng)線連接電腦和CPU博途中選擇“在線訪問(wèn)”設(shè)置PG/PC接口為對(duì)應(yīng)網(wǎng)卡。設(shè)置PLC的IP地址保證電腦和PLC在同一網(wǎng)段。下載硬件組態(tài)和程序。下載完成后把CPU切換到RUN模式。在線監(jiān)控打開(kāi)監(jiān)控表把所有I/O變量和關(guān)鍵中間變量都拉出來(lái)實(shí)時(shí)看狀態(tài)變化。調(diào)試現(xiàn)場(chǎng)要注意首次上電前斷開(kāi)主回路只給PLC送電先檢查輸入信號(hào)采集是否正確。逐個(gè)按下按鈕看對(duì)應(yīng)的輸入變量是否置位。如果輸入信號(hào)沒(méi)反應(yīng)優(yōu)先查線路、查公共端別急著改程序。輸入部分確認(rèn)沒(méi)問(wèn)題后再接通主回路用檢修模式低速點(diǎn)動(dòng)檢查電機(jī)轉(zhuǎn)向是否與方向指令一致。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 輸入抖動(dòng)導(dǎo)致呼叫反復(fù)觸發(fā)按鈕和繼電器觸點(diǎn)按下過(guò)程會(huì)有機(jī)械抖動(dòng)PLC可能一個(gè)按鈕按下去同一信號(hào)在0.1秒內(nèi)跳變數(shù)次。結(jié)果就是內(nèi)呼按一下樓層顯示亂跳或者消號(hào)瞬間又被再次登記。解決方法是給每個(gè)按鈕信號(hào)加20ms左右的去抖用TON定時(shí)器或讀取輸入濾波器參數(shù)。S7-1200的DI模塊可以在組態(tài)里直接設(shè)置數(shù)字量輸入濾波時(shí)間0.1ms到20ms可選調(diào)試時(shí)設(shè)成6.4ms或10ms即可。5.2 電梯運(yùn)行中樓層數(shù)跳變或丟失最常見(jiàn)原因是平層開(kāi)關(guān)信號(hào)在PLC掃描周期內(nèi)有效時(shí)間太短剛好被漏掉。典型場(chǎng)景是快車(chē)速度過(guò)快轎廂經(jīng)過(guò)一層時(shí)的信號(hào)持續(xù)時(shí)間小于一個(gè)掃描周期。解決思路校核電梯快車(chē)速度必要時(shí)加裝提前減速信號(hào)雙平層開(kāi)關(guān)方案。在程序里用“多周期確認(rèn)”邏輯平層信號(hào)連續(xù)兩個(gè)掃描周期有效才更新樓層號(hào)。確認(rèn)平層開(kāi)關(guān)的常開(kāi)/常閉接法有沒(méi)有和程序反了。5.3 門(mén)鎖斷開(kāi)后電梯還在運(yùn)行這個(gè)現(xiàn)象一旦出現(xiàn)必須停線檢查。不僅是程序問(wèn)題很可能硬件回路里門(mén)鎖觸點(diǎn)沒(méi)串進(jìn)運(yùn)行接觸器回路。我調(diào)試時(shí)遇到過(guò)一種情況門(mén)鎖信號(hào)接的是PLC的輸入點(diǎn)但是接觸器吸合回路里沒(méi)有串門(mén)鎖觸點(diǎn)結(jié)果門(mén)鎖一斷PLC程序雖然輸出了停車(chē)但接觸器仍然保持吸合電梯繼續(xù)走。所以安全回路必須硬接線串到接觸器控制回路不能只靠PLC邏輯。這也是我一直強(qiáng)調(diào)的“程序互鎖≠物理互鎖”。問(wèn)題現(xiàn)象可能原因排查順序按鈕按下無(wú)反應(yīng)公共端接錯(cuò)、傳感器類型不對(duì)先查硬件接線再看PLC在線信號(hào)電梯到達(dá)樓層不停平層信號(hào)沒(méi)掃到、目標(biāo)樓層判斷錯(cuò)誤檢查平層信號(hào)狀態(tài)和CurrentFloor變化上下行同時(shí)輸出程序互鎖缺失、輸出點(diǎn)短路立刻斷電檢查硬件互鎖樓層顯示亂跳輸入抖動(dòng)、平層開(kāi)關(guān)離得太近加濾波、檢查安裝間距關(guān)門(mén)后無(wú)法運(yùn)行門(mén)鎖信號(hào)沒(méi)到、關(guān)門(mén)到位沒(méi)延時(shí)監(jiān)控門(mén)鎖和關(guān)門(mén)到位信號(hào)時(shí)序仿真正?,F(xiàn)場(chǎng)不行干擾、接線、電源地不干凈檢查屏蔽接地、強(qiáng)弱電分槽5.4 電梯停在中間樓層沒(méi)有任何呼叫時(shí)亂跑電梯沒(méi)有呼叫時(shí)應(yīng)停在當(dāng)前樓層不動(dòng)。如果出現(xiàn)亂跑多半是方向決策邏輯里“請(qǐng)求信號(hào)”沒(méi)有被正確清零。例如外呼按鈕信號(hào)置位后電梯到了一層的上召消號(hào)但程序里忘復(fù)位對(duì)應(yīng)的CallUp[1]導(dǎo)致呼叫一直存在。所以調(diào)試時(shí)要把每一個(gè)置過(guò)的呼叫變量在合適時(shí)機(jī)都復(fù)位并且用監(jiān)控表跟蹤呼叫數(shù)組的狀態(tài)。5.5 博途版本、固件與工程兼容性問(wèn)題熱詞里有人問(wèn)“博途V18支持S7-1200 CPU1211C所有版本固件嗎”這里統(tǒng)一回復(fù)一下博途V18對(duì)S7-1200系列的支持是全面的1211C、1214C這些型號(hào)都支持但不代表所有老固件都能直接下載。CPU固件V4.x基本沒(méi)問(wèn)題個(gè)別V2.0/V3.0的老版本可能需要升級(jí)固件后才能在V18工程里使用。下載別人做的程序包時(shí)先確認(rèn)對(duì)方是哪個(gè)博途版本V15還是V16還是V18版本差太多一般打不開(kāi)或需要升級(jí)升級(jí)前先備份工程。另外S7-1200和S7-200 SMART的工程文件不互通用200SMART的梯形圖不能直接拖到S7-1200里運(yùn)行知識(shí)點(diǎn)可以遷移但程序要重建。6. 擴(kuò)展思考從六層電梯到群控和上位機(jī)完成六層電梯控制后如果想往深走有兩個(gè)方向我特別推薦一個(gè)是多電梯群控。兩部電梯同時(shí)工作需要對(duì)前后門(mén)、召回、閑梯停靠做調(diào)度核心仍然是方向決策和呼叫分配但要把“呼叫歸屬”做出來(lái)內(nèi)呼只能由當(dāng)前轎廂響應(yīng)外呼則需要根據(jù)哪部梯更順路來(lái)分配??梢杂肧7-1200之間的Profinet通信或者I/O交換來(lái)實(shí)現(xiàn)這是我做過(guò)最有趣的控制擴(kuò)展。另一個(gè)是上位機(jī)數(shù)據(jù)采集。通過(guò)S7-1200的以太網(wǎng)口上位機(jī)用C#、Java或LabVIEW可以讀取PLC里的當(dāng)前樓層、運(yùn)行方向、故障信號(hào)做成電梯監(jiān)控界面。S7-1200支持S7協(xié)議通信上位機(jī)輪詢讀取DB里的數(shù)據(jù)PLC端不需要額外編程只要把要監(jiān)控的數(shù)據(jù)放到全局DB并保證可訪問(wèn)狀態(tài)即可。這部分和當(dāng)前熱門(mén)的工業(yè)物聯(lián)網(wǎng)采集是同一個(gè)思路很多初學(xué)者從電梯項(xiàng)目入門(mén)再拓展到上位機(jī)正好形成完整的工控知識(shí)閉環(huán)。在折騰這套六層電梯程序的過(guò)程中我最大的感受是電梯控制這個(gè)題目雖然看起來(lái)簡(jiǎn)單但能把呼叫登記、方向判斷、停車(chē)開(kāi)關(guān)門(mén)這些邏輯做到穩(wěn)、不沖突、不丟信號(hào)需要非??b密的思路這也是很多公司招聘PLC工程師時(shí)喜歡拿電梯當(dāng)面試題的原因。你把它做完一遍再回頭看那些機(jī)械手、分揀線、運(yùn)動(dòng)控制的程序很多套路是相通的。本文還有配套的精品資源點(diǎn)擊獲取