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