史曉娟,姚 兵,王 磊,程森林
(西安科技大學(xué)機械工程學(xué)院,陜西西安 710054)
可編程邏輯控制器(PLC)是針對工業(yè)控制而設(shè)計的數(shù)字運算電子控制器,是工業(yè)控制系統(tǒng)的核心器件,在自動控制領(lǐng)域發(fā)揮了重要作用。但由于傳統(tǒng)PLC兼容性差、缺乏統(tǒng)一標準等因素,難以形成開放的軟硬件體系結(jié)構(gòu),同時又無法滿足客戶的個性化和差異化需求[1-2]。
嵌入式PLC的架構(gòu)較為開放,不僅具有傳統(tǒng)PLC的邏輯控制功能,而且軟硬件均可根據(jù)需求定制,可實現(xiàn)特殊控制功能,具有較高的靈活性,在融合控制算法方面也具有明顯優(yōu)勢[3]。雷路路[4]研究了一種嵌入式PLC,采用與三菱PLC產(chǎn)品兼容的方式開發(fā),需配合三菱PLC軟件使用,開放程度較低,難以實現(xiàn)特殊控制功能。許貞俊[5]研究了一種快速嵌入式PLC,采用德國Inforteam的OpenPCS系統(tǒng)開發(fā),嵌入式PLC功能完善,但由于系統(tǒng)封閉,軟硬件拓展困難。針對以上問題,本文設(shè)計了基于STM32的嵌入式PLC,提出一種嵌入式PLC系統(tǒng)執(zhí)行語句表指令的方法,利用通用的通訊工具即可編輯用戶程序,并且對語句表指令格式要求更低,開發(fā)用戶程序時更加便捷高效。同時基于LabVIEW設(shè)計的嵌入式PLC監(jiān)控中心,可對嵌入式PLC遠程監(jiān)測和控制。
嵌入式PLC硬件總體結(jié)構(gòu)如圖1所示,其中包含主控芯片、輸入模塊、輸出模塊、通訊模塊、顯示模塊、復(fù)位模塊、按鍵模塊和電源模塊。采用STM32F407微處理器作為嵌入式PLC的控制核心,負責(zé)系統(tǒng)的運算和控制任務(wù)。嵌入式PLC設(shè)計為16路數(shù)字量輸入、8路模擬量輸入和16路數(shù)字量輸出的結(jié)構(gòu)。
圖1 嵌入式PLC硬件總體結(jié)構(gòu)
根據(jù)嵌入式PLC硬件結(jié)構(gòu),電源模塊需提供12、5、3.3 V的電壓。電源模塊電路如圖2所示,電源模塊由24 V直流電源供電,熔斷器后串聯(lián)整流二極管,在正負極兩端接共模電感,濾除共模干擾信號和后級電路產(chǎn)生的電磁干擾。24 V電壓通過LM2576-12、LM7805和ASM1117-3.3集成穩(wěn)壓電路輸出所需電壓[6]。各集成穩(wěn)壓電路的輸入和輸出端均使用電容濾波。
圖2 電源模塊電路
嵌入式PLC數(shù)字量輸入和輸出模塊電路如圖3所示。數(shù)字量信號通過X輸入端口輸入時,使用L217光耦實現(xiàn)光電隔離,并在光耦前端采用RC濾波電路,濾除電路在開關(guān)瞬間產(chǎn)生的尖波信號,避免光耦誤判,最后信號由Xpin引腳輸入芯片。嵌入式PLC數(shù)字量輸出模塊同樣采用光電隔離方式設(shè)計,由Ypin芯片引腳輸出控制信號,通過光電隔離將信號映射到Y(jié)輸出端口,驅(qū)動被控對象。
(a)數(shù)字量輸入模塊
(b)數(shù)字量輸出模塊圖3 數(shù)字量輸入和輸出模塊電路
嵌入式PLC模擬數(shù)字轉(zhuǎn)換器的轉(zhuǎn)換參數(shù)是電壓,傳感器輸出的電流信號需要經(jīng)過調(diào)理電路轉(zhuǎn)換為電壓信號。模擬信號調(diào)理電路如圖4所示,輸入4~20 mA的電流信號通過電阻R6轉(zhuǎn)換為0.06~0.3 V的電壓信號,再由放大電路將電壓放大后輸出0.6~3 V的電壓。通過串聯(lián)電阻R12增加輸入阻抗,可以減少信號損失。二極管D3、D4使輸入微控制器引腳的電壓限制在0~3 V之間。電路中C11和C14電容的作用是濾波,提高信號質(zhì)量。最終轉(zhuǎn)換后的電壓信號通過Vpin引腳輸入芯片進行處理。
圖4 模擬信號調(diào)理電路
嵌入式PLC的通訊模塊電路如圖5所示。控制器集成3種通訊接口,控制系統(tǒng)中僅有1臺嵌入式PLC時,使用RS232串口或HC-25 WiFi模塊實現(xiàn)通訊。HC-25 WiFi模塊內(nèi)置IEEE802.11協(xié)議棧以及TCP/IP協(xié)議棧,無線通訊方式可以有效解決線路布置問題??刂葡到y(tǒng)中多臺嵌入式PLC組網(wǎng)時,采用CAN總線通信,TAJ1050T收發(fā)器連接CAN控制器和物理總線,并將TTL電平信號和差分信號相互轉(zhuǎn)換[7]。
(a)RS232通訊電路
(b)CAN總線通訊電路
(c)WiFi模塊電路連接圖圖5 通訊模塊電路
嵌入式PLC系統(tǒng)軟件結(jié)構(gòu)如圖6所示,系統(tǒng)軟件由嵌入式PLC系統(tǒng)程序和上位機監(jiān)控中心組成。嵌入式PLC監(jiān)控中心主要由監(jiān)控模塊和用戶程序編輯模塊構(gòu)成。為確保嵌入式PLC實時性,移植μC/OS-Ⅲ操作系統(tǒng),嵌入式PLC系統(tǒng)程序的核心是PLC指令驅(qū)動程序,PLC指令驅(qū)動程序由語句表格式化程序、指令編碼程序、指令解釋程序、輸入采樣程序和輸出刷新程序構(gòu)成。指令解釋程序包含指令分析程序和指令解釋子程序。
圖6 嵌入式PLC系統(tǒng)軟件結(jié)構(gòu)
嵌入式PLC系統(tǒng)執(zhí)行用戶程序時,同時處理信號采樣、按鍵檢測、顯示、通訊等任務(wù),μC/OS-Ⅲ實時操作系統(tǒng)能夠根據(jù)任務(wù)優(yōu)先級實現(xiàn)多任務(wù)管理與調(diào)度[8]。
移植μC/OS-Ⅲ操作系統(tǒng)時,根據(jù)微控制器特性修改bsp.h、bsp.c、os_cpu_a.asm、os_cpu_c.c、os_cfg_app.h等文件。同時將原順序執(zhí)行任務(wù)分割為獨立的循環(huán)任務(wù),并按照重要程度劃分優(yōu)先級。用戶程序執(zhí)行任務(wù)和模擬信號轉(zhuǎn)換任務(wù)設(shè)置為中優(yōu)先級任務(wù),通訊任務(wù)設(shè)置為高優(yōu)先級。
此方法對網(wǎng)絡(luò)文本內(nèi)容進行處理,分析文本的每一個詞目,將樣本內(nèi)容分解為若干個分析單元,對每一個單元進行整合,評判單元內(nèi)所表現(xiàn)的事實并進行定量的統(tǒng)計描述,可以進行特征分析、發(fā)展分析和比較分析[3]。
嵌入式PLC用戶程序接收流程圖如圖7所示。系統(tǒng)初始化包括系統(tǒng)初始配置及各狀態(tài)標識初始化。系統(tǒng)通過判斷用戶程序接收狀態(tài)標識和接收次數(shù)標識進入不同狀態(tài),系統(tǒng)初始化后處于等待接收用戶程序狀態(tài)。首次完成接收后,更新標識,并將用戶程序?qū)懭隦OM,隨后調(diào)用PLC指令驅(qū)動程序。再次完成接收時,更新接收次數(shù)標識,系統(tǒng)停止執(zhí)行原用戶程序,并將新用戶程序?qū)懭隦OM,通過這種方式可實現(xiàn)用戶程序?qū)崟r修改。
圖7 用戶程序接收流程圖
2.3.1 軟元件配置
PLC指令驅(qū)動程序能夠驅(qū)動執(zhí)行常用PLC指令,包括輸入觸點X、輸出線圈Y、繼電器M和定時器T、計數(shù)器C等軟元件的使用,各軟元件數(shù)量均配置為256。軟元件根據(jù)其操作數(shù)存儲在RAM對應(yīng)的映像區(qū)中。觸點或線圈占用1 bit存儲空間,表示開關(guān)狀態(tài)。定時器和計數(shù)器需要存儲觸點、線圈、設(shè)定值和當(dāng)前值,其中觸點、線圈各占用1 bit,設(shè)定值和當(dāng)前值各占用4 Byte。
線圈和觸點存儲地址的計算方法如式(1)所示,定時器和計數(shù)器的設(shè)定值及當(dāng)前值的存儲地址如式(2)所示。
BitAdd=BaseAdd+OffsetAdd+N/8
(1)
式中:BitAdd為線圈或觸點的存儲地址;BaseAdd為存儲基地址,設(shè)置為0x20001000;OffsetAdd為偏移地址,根據(jù)軟元件類型分配;N為序號。
ValueAdd=BaseAdd+OffsetAdd+4N
(2)
式中:ValueAdd為定時器和計數(shù)器的當(dāng)前值或設(shè)定值存儲地址。
依據(jù)式(1)計算出線圈或觸點的存儲地址,再進一步通過N%8可計算其處于字節(jié)中的位地址。各軟元件的具體存儲地址可根據(jù)表1 軟元件偏移地址計算。定時器T、計數(shù)器C的設(shè)定值和當(dāng)前值的具體存儲地址可根據(jù)表2數(shù)值偏移地址計算。
表1 軟元件偏移地址
表2 數(shù)值偏移地址
2.3.2 用戶程序執(zhí)行原理
用戶程序執(zhí)行原理如圖8所示,系統(tǒng)調(diào)用輸入采樣程序,檢測輸入端口電平信號,并將電平值存入輸入映像區(qū)。用戶程序和輸入信號經(jīng)過指令解釋程序分析運算,將輸出線圈的值保存在輸出映像區(qū),最終利用輸出刷新程序輸出控制信號[9]。嵌入式PLC系統(tǒng)循環(huán)執(zhí)行輸入采樣、解釋用戶程序和輸出刷新3個過程,實現(xiàn)邏輯控制功能。
圖8 用戶程序執(zhí)行原理
2.3.3 指令解釋程序設(shè)計
傳統(tǒng)PLC使用專用集成開發(fā)環(huán)境編輯用戶程序,本文提出一種由嵌入式PLC識別并執(zhí)行標準語句表指令的方法,利用通用通訊工具即可編輯和修改用戶程序。如圖9所示,使用Android設(shè)備并利用網(wǎng)絡(luò)調(diào)試工具編輯和修改用戶程序。編輯的語句表中允許存在空格、換行和分號等字符,軟元件地址碼可使用連續(xù)可變位數(shù)的數(shù)字字符串表示,有效提高用戶程序編輯的便捷性和容錯性。該方法實現(xiàn)的核心在于語句表格式化程序和指令編碼程序。利用語句表格式化程序?qū)邮盏挠脩舫绦蝾A(yù)處理,過濾無效字符,并重新順序排列。通過指令編碼程序?qū)⒚織l指令的操作碼和操作數(shù)統(tǒng)一編碼為短整型數(shù)據(jù),有效降低指令解釋難度。
圖9 編輯用戶程序界面
指令解釋程序包含指令分析程序和指令解釋子程序。解釋語句表時首先調(diào)用指令分析程序識別操作碼,根據(jù)操作碼類型調(diào)用指令解釋子程序,指令解釋子程序通過識別操作數(shù),尋址讀取軟元件,并與運算棧的值進行邏輯運算,運算結(jié)果再次保存在運算棧中。輸出線圈時,讀取運算結(jié)果并寫入輸出映像區(qū)。指令解釋程序流程如圖10所示。
圖10 指令解釋程序流程圖
讀寫軟元件時,通過位尋址修改和訪問對應(yīng)的映像區(qū)。解釋用戶程序之前,首先建立8位運算棧變量Result。用戶程序在梯形圖上具有分支結(jié)構(gòu)時,變量Result左移1位(模擬進棧)并將運算結(jié)果保存在最低位,完成分支運算后,運算棧Result右移1位(模擬出棧),保存運算結(jié)果。例如執(zhí)行LD取指令時,運算棧Result左移1位,讀入觸點狀態(tài),若觸點值為1,通過或運算將運算棧Result最低位置1;若觸點值為0,由于運算棧Result左移時,最低位已為0,直接讀取下一條指令。LD指令解釋流程如圖11所示。運算完成后,根據(jù)輸出映像區(qū)對應(yīng)值輸出控制信號。
圖11 LD指令解釋流程圖
嵌入式PLC監(jiān)控中心利用LabVIEW軟件開發(fā),系統(tǒng)界面如圖12所示。
圖12 嵌入式PLC監(jiān)控中心界面
嵌入式PLC定時讀取映像區(qū)數(shù)據(jù),通過通訊模塊發(fā)送給上位機的監(jiān)控中心,實現(xiàn)輸入輸出端口電平可視化。同時監(jiān)控中心可編輯、修改用戶程序,控制系統(tǒng)運行。
為測試嵌入式PLC邏輯控制的可行性及可靠性,選擇機械臂作為控制對象。通過編制語句表類型的用戶程序控制機械手前后移動,機械臂動作控制方案如表3所示。
表3 機械臂動作控制方案
實驗結(jié)果表明:嵌入式PLC對機械臂的控制動作符合設(shè)定方案。通過讀取監(jiān)控中心數(shù)據(jù)繪制各端口時序圖,輸入輸出端口時序如圖13所示,驗證了嵌入式PLC準確執(zhí)行用戶程序,實現(xiàn)了可編程邏輯控制。
圖13 輸入輸出端口時序圖
為了檢測嵌入式PLC的實時控制性能,通過標記時間戳來計算系統(tǒng)響應(yīng)時間。在機械臂動作控制實驗中,根據(jù)控制邏輯可知,按鈕SB和SB1被分別按下后,Y0和Y1端口電平立即跳變,可分別記錄觸發(fā)輸入端口X0和X1后,Y0和Y1端口輸出高電平的響應(yīng)時間。對系統(tǒng)進行100次測試,實時性測試結(jié)果如表4所示。Y0端口最大響應(yīng)時間為19 ms,平均響應(yīng)時間為16.3 ms;Y1端口最大響應(yīng)時間為18 ms,平均響應(yīng)時間為15.2 ms,表明系統(tǒng)具有良好的實時性。
表4 系統(tǒng)實時性典型測試結(jié)果 ms
本文設(shè)計的嵌入式PLC系統(tǒng)克服了傳統(tǒng)PLC兼容性差的缺點,能夠根據(jù)需求定制軟硬件。該系統(tǒng)采用多種通訊方式,具有較強的適應(yīng)性。與傳統(tǒng)PLC相比,該系統(tǒng)可利用通用設(shè)備編輯和修改用戶程序,便于用戶程序開發(fā)?;贚abVIEW的監(jiān)控中心可實時監(jiān)測與控制系統(tǒng)運行。通過實驗驗證了該嵌入式PLC系統(tǒng)的可行性和可靠性,且具有較高的實時性。