李 通,韓 靜,李樹文
(山西工程職業(yè)學(xué)院 計(jì)算機(jī)信息系,山西 太原 030032)
在工業(yè)控制領(lǐng)域,可編程控制器發(fā)揮了巨大作用,但是在小規(guī)模應(yīng)用場景中也存在價格昂貴,維護(hù)成本高的問題[1]。針對上述問題,提出了一種可用于小規(guī)??刂茍龊系暮喴卓删幊炭刂破鞯脑O(shè)計(jì)方案并完成了軟硬件的制作[2-3]。
目前,在工控領(lǐng)域中PLC的使用存在三種方案,一是傳統(tǒng)的PLC系統(tǒng),它技術(shù)成熟,但存在技術(shù)壁壘,兼容性差;二是軟PLC,它基于IEC61131-3標(biāo)準(zhǔn)[4-6],打破了傳統(tǒng)PLC廠家之間的技術(shù)壁壘,代表著PLC的發(fā)展方向。但軟件授權(quán)費(fèi)高,需二次開發(fā);三是基于單片機(jī)的可編程控制器的研究[7],該方法是在單片機(jī)的基礎(chǔ)上實(shí)現(xiàn)PLC的硬件功能,采用VC++等可視化編程方法開發(fā)上位機(jī)軟件,開發(fā)周期長,功能不全,到目前為止仍處于實(shí)驗(yàn)室研究階段。
經(jīng)過分析,決定采用方案一和方案三相結(jié)合的方法,即選擇通信協(xié)議已經(jīng)公開的三菱PLC上位機(jī)編程軟件GXWORK2作為應(yīng)用程序開發(fā)軟件,采用STM32單片機(jī)開發(fā)硬件。
簡易可編程控制器功能有:1)讀取外部數(shù)字量信號;2)輸出數(shù)字量信號;3)采用梯形圖編寫應(yīng)用程序;4)掉電后數(shù)據(jù)不丟失。
簡易可編程控制器硬件[8]由電源模塊、CPU模塊、輸入模塊、輸出模塊、通信模塊組成,結(jié)構(gòu)框圖如圖1所示,實(shí)物圖如圖2所示。
圖1 簡易可編程控制器硬件結(jié)構(gòu)框圖Fig.1 Structure block diagram of simple programmable controller hardware
圖2 簡易可編程控制器實(shí)物圖Fig.2 Physical diagram of simple programmable controller
電源模塊為控制器各模塊提供穩(wěn)定的電能。電源模塊輸出24.0 V,5.0 V,3.3 V三種電壓。其中,24.0 V用于輸入模塊、輸出模塊等外圍電路供電,5.0 V用于通信模塊供電,3.3 V用于CPU內(nèi)核供電。
CPU模塊采用STM32F103系列單片機(jī)作為主控制器,最高工作頻率72 MHz,指令的平均執(zhí)行速度可達(dá)1.25 MIPS/MHz.該芯片共有144引腳,64 KB的SRAM、512 KB的FLASH,片內(nèi)資源豐富,性能穩(wěn)定,功耗低,滿足設(shè)計(jì)要求。[8]
CPU模塊除了SWD程序下載電路、時鐘電路、復(fù)位電路等最小系統(tǒng)電路外,還設(shè)計(jì)了后備電源電路、狀態(tài)指示電路,利用片內(nèi)的串行通信控制器及SP3232和SP3485芯片設(shè)計(jì)了RS232和RS485通信模塊,利用片內(nèi)CAN總線控制器及TJA1050芯片設(shè)計(jì)了CAN通信模塊,利用IO接口設(shè)計(jì)了輸入輸出模塊等。各模塊的端口分配如表1所示。
表1 主控芯片端口分配表Table 1 Allocation table of master control chip ports
輸入模塊共有24路,采用LTV354交流光耦采集外部輸入信號,并對單片機(jī)的IO口進(jìn)行電氣隔離。該電路既可輸入NPN信號也可輸入PNP信號,但需注意R255和R254不能同時接入電路[9]。電路原理圖如圖3所示,引腳分配見表1.
輸出模塊共有16路,采用ULN2803A驅(qū)動繼電器,繼電器采用富士通公司的F3AA024E,既可以驅(qū)動直流驅(qū)動器,也可以驅(qū)動交流驅(qū)動器,最大輸出電流3 A[9].輸出模塊電路原理如圖4所示,引腳分配見表1.
圖3 輸入模塊電路原理圖Fig.3 Electrical schematic diagram of input module
圖4 輸出模塊電路原理圖Fig.4 Electrical schematic diagram of the output module
通信模塊采用SP3232實(shí)現(xiàn)電平轉(zhuǎn)換,主要功能是與上位機(jī)梯形圖編程軟件GXWORK2通信,下載應(yīng)用程序。引腳分配見表1.
圖5 簡易可編程控制器工作模式Fig.5 Operation mode of simple programmable controller
簡易可編程控制器軟件設(shè)計(jì)包括系統(tǒng)軟件和應(yīng)用軟件兩部分。系統(tǒng)軟件又具體劃分為運(yùn)行模式和停止模式,這兩種工作模式可通過RUN/STOP開關(guān)切換,不同模式的功能如圖5所示。應(yīng)用軟件指用戶編寫的梯形圖程序,它可以根據(jù)不同的控制需求而改變。
系統(tǒng)配置主要是軟元件地址分配和程序存儲空間分配。
由PLC的控制原理可知,PLC執(zhí)行的是存儲在ROM區(qū)的控制程序,而運(yùn)行數(shù)據(jù)則存儲在RAM區(qū)。因此,需要在單片機(jī)的RAM區(qū)為每個軟元件分配存儲空間,在Flash區(qū)開辟出控制程序存儲空間,同時在Flash區(qū)開辟出存儲軟元件運(yùn)行數(shù)據(jù)的空間,以便斷電后將這些數(shù)據(jù)保存。
由Cortex-M3權(quán)威指南中可知,STM32單片機(jī)的SRAM地址是從0x20000000開始的64 KB范圍,且是可位尋址的。因此把軟元件運(yùn)行空間分配在此區(qū)域;對照三菱PLC通信協(xié)議[10]將軟元件分配如表2所示。而Flash區(qū)的主存儲器地址是0x08000000-0x0807FFFF的512 KB的范圍內(nèi)。由于Flash區(qū)是以頁為單位擦除的,每頁2 KB,這里設(shè)置程序存儲區(qū)的地址范圍為0x08006000-0x0800DFFF,共可以存儲16 000余步PLC程序。從表2中可以看出,PLC中軟元件共占0x3E80個單元,因此運(yùn)行數(shù)據(jù)保持區(qū)的地址范圍為0x0800E000-0x08011E80的空間內(nèi)。
表2 三菱PLC與STM32單片機(jī)中各軟元件地址分配對照表Table 2 Comparison table of address assignment between Mitsubishi PLC and STM32
圖6 通信數(shù)據(jù)采集原理框圖Fig.6 Block diagram of communication data acquisition principle
3.2.1分析三菱PLC通信數(shù)據(jù)
為了實(shí)現(xiàn)安裝在PC機(jī)上的GXWORK2軟件與簡易可編程控制器的交互通信,設(shè)計(jì)如圖6所示的通信數(shù)據(jù)采集裝置。結(jié)合三菱FX2N PLC編程口通信協(xié)議,分析獲取的通信數(shù)據(jù)可知,三菱PLC與上位機(jī)的通信機(jī)制分三步:1)通信握手;2)查驗(yàn)PLC型號和軟件版本號;3)讀寫PLC配置信息及程序。表3為通信握手?jǐn)?shù)據(jù)和查驗(yàn)PLC型號和軟件版本號數(shù)據(jù)。
表3 PC機(jī)與PLC部分通信數(shù)據(jù)Table 3 Part of communication data of PC and PLC
3.2.2通信服務(wù)程序設(shè)計(jì)
在對通信數(shù)據(jù)分析的基礎(chǔ)上并結(jié)合三菱PLC通信協(xié)議,設(shè)計(jì)了通信服務(wù)程序流程,流程圖如圖7所示。其中,指令解析函數(shù)包括對X,Y,M,S,T,C,D各軟元件狀態(tài)的讀取或?qū)懭?對X,Y,M,S,T,C各軟元件強(qiáng)制置位或復(fù)位;讀取或?qū)懭隤LC配置參數(shù);讀取或?qū)懭肟刂瞥绦?。解析函?shù)可解析的命令及代碼如表4所示。表3讀寫PLC配置信息及程序數(shù)據(jù)與表4命令吻合。
表4 指令解析函數(shù)可解析的指令Table 4 Instructions resolvable by instruction resolver function
表4 (續(xù))Table 4 (Continue)
圖7 串口通信處理流程圖Fig.7 Serial communication processing flowchart
用戶指令程序是指用戶使用GXWORK2編寫的梯形圖程序或指令程序。這些程序經(jīng)過計(jì)算機(jī)軟件編譯后使用表4中命令“E11”傳送到單片機(jī)的Flash區(qū)中。因此,破解每條指令對應(yīng)的二進(jìn)制代碼是解析梯形圖程序的關(guān)鍵。下面舉例說明獲取梯形圖程序?qū)?yīng)代碼的方法。
首先,在GXWORK2中寫入如圖8所示的梯形圖并下載至單片機(jī)的Flash中,然后,使用STM32的仿真器查看Flash中對應(yīng)存儲單元的數(shù)據(jù),如圖9所示。
圖8 梯形圖示例程序Fig.8 Ladder diagram of sample program
圖9 梯形圖示例程序在單片機(jī)Flash中的編碼Fig.9 Ladder diagram of sample program in the single-chip flash coding
分析圖9中數(shù)據(jù)可知,0x08006000-0x0800605B單元數(shù)據(jù)用于配置PLC的初始值;圖8中梯形圖的編碼對應(yīng)于0x0800605C-0x0800606F地址中的數(shù)據(jù)。
對比現(xiàn)有三種可編程控制器的設(shè)計(jì)方案,提出了將三菱PLC上位機(jī)編程軟件與STM32單片機(jī)相結(jié)合的設(shè)計(jì)方案,實(shí)現(xiàn)了用STM32單片機(jī)制作簡易可編程控制器的軟硬件設(shè)計(jì)任務(wù),并在山西某公司的垂直循環(huán)車庫上完成實(shí)測,控制效果良好。