王善紅
摘 要:本文設(shè)計了一種基于單片機開發(fā)控制器的新方案以實現(xiàn)內(nèi)核驅(qū)動與邏輯運算、控制分離。
關(guān)鍵詞:單片機;梯形圖;結(jié)構(gòu)化數(shù)據(jù);自編程
中圖分類號:TP334 文獻(xiàn)標(biāo)識碼:A
一、概述
通?;趩纹瑱C開發(fā)的智能控制器,因內(nèi)部程序已固化,開發(fā)完成后,其功能基本定型,只能應(yīng)用于設(shè)計時的特定目標(biāo),現(xiàn)場如需變更控制方案也非常困難。針對這一短板,我們設(shè)計一種基于單片機開發(fā)控制器的一種新方案,實現(xiàn)內(nèi)核驅(qū)動與邏輯運算、控制分開,并以簡明梯形圖語言實現(xiàn)運行邏輯編程,不僅擴展了控制器的應(yīng)用范圍,而且減輕現(xiàn)場調(diào)試難度,控制方案的變動,只需修改梯形圖邏輯即可解決。
二、原理
單片機應(yīng)具備的特性:足夠容量的可擦寫flash程序存儲器,支持IAP功能,現(xiàn)在大多單片機芯片都支持用戶自編程IAP功能,如Atmega128、STM32F3、STM32F4系列皆能滿足要求。首先將單片機flash存儲器劃分為3塊,一部分存儲實現(xiàn)IAP功能的Boot Loader程序,一部分存儲單片機內(nèi)核程序,余下的部分用于存儲用戶程序。內(nèi)核程序主要是硬件驅(qū)動及用戶程序間代碼接口與算法。用戶程序即為用梯形圖編輯工具形成順序控制邏輯,比較規(guī)則及數(shù)據(jù)輸出去向等。
內(nèi)核程序周期性地掃描內(nèi)外部設(shè)備內(nèi)存映射地址,并調(diào)用用戶區(qū)邏輯運算,將結(jié)果以數(shù)據(jù)量及消息量的方式輸出到設(shè)備,如此周而復(fù)始,完成用戶邏輯的控制方案。
三、具體實現(xiàn)
單片機如何實現(xiàn)硬件驅(qū)動及通信不在本議題討論范圍內(nèi),重點論述如何實現(xiàn)梯形圖編譯工具軟件與單片機執(zhí)行梯形圖控制邏輯。
1.用戶程序編輯與編譯(梯形圖編譯工具):
梯形圖的編輯元器件主要包括常開接點、常閉接點、繼電器等簡單元件和定時、比較等功能元器件。為了靈活應(yīng)用和擴展編輯元器件,方便編程,將梯形圖元件數(shù)據(jù)結(jié)構(gòu)定義如下:
type
Tmdevice=record
name: string[4]; //元件名稱
mclass: byte; //元件類型
memo: string; //元件備注,消息變量為消息變量實體
end;
其中Mclass的取值0:開關(guān)量輸入(DI),1:開關(guān)量輸出(DO),2:定時器(T),3:計數(shù)器(C),4:內(nèi)部繼電器(M),5:數(shù)據(jù)寄存器(D),6:消息輸入(MI),7:消息輸出(MO)。
梯形圖用戶程序我們可以看成是有限個邏輯節(jié)點構(gòu)成固定列寬,可擴展行數(shù)的表,每個節(jié)點代表元件加邏輯操作構(gòu)成的數(shù)據(jù)結(jié)構(gòu)體,因此首先定義節(jié)點數(shù)據(jù)結(jié)構(gòu):
Type
Tprodata=record
Opclass: byte; //節(jié)點類型(元件類型+連接類連)
notop: byte; //操作碼
Address: byte; //操作數(shù)內(nèi)存地址
Chadd: word; //比較數(shù)
end;
依據(jù)上述約定實現(xiàn)繪制的梯形圖,如圖1所示。
2.梯形圖邏輯掃描算法
梯形圖語言描述一個邏輯網(wǎng)絡(luò)自左向右的能量潮,元件的邏輯運算總是與左側(cè)的運算“與”運算,分支總是與左側(cè)結(jié)果“或”運算,逐行掃描遇分支節(jié)點先將運算結(jié)果壓入棧,掃描暫時放棄分支節(jié)點右側(cè)元件,進(jìn)行下一行掃描,如遇分支,繼續(xù)執(zhí)行壓棧,一直掃描到?jīng)]有分支時,將結(jié)果與棧頂“或”運算,執(zhí)行出棧(先進(jìn)先出原則),同時判斷棧頂節(jié)點連接類型,決定下一步是出棧還是掃描,如遇出棧節(jié)點有右側(cè)分支,則掃描右側(cè)元件,并作邏輯運算,直至掃描至行結(jié)束標(biāo)志節(jié)點,并將運算結(jié)果賦值與最后節(jié)點元件,因此位于結(jié)束標(biāo)志點的元件一定是輸出型元件。如果在掃描過程中,能量潮在開始標(biāo)志與結(jié)束標(biāo)志中有中斷或能量潮開始與結(jié)束標(biāo)志不完整,都視為梯形圖編譯未能通過。
我們將上面元件掃描順序及元件操作類型記錄在一個順序數(shù)據(jù)組中,這個順序數(shù)組結(jié)構(gòu)應(yīng)是這樣:
Type
Tprodata=record
Oprate: byte; //數(shù)據(jù)運算類型
selfop: byte; //自身附加運算
Address: byte;//元件內(nèi)存映射地址
Chadd: word;//比較運算值
end;
其中Oprate對應(yīng)的邏輯運算,1表示與,2表示異或,4表示賦值,5表示壓棧,6表示出棧,7表示棧更新,8表示定時器操作,9:定時器溢出處理,10:計數(shù)器操作,11:計算器溢出處理,12:表示位操作,13:寄存器數(shù)值比較。
然后定義一個Tprodata類型變長數(shù)組,將上面梯形圖掃描編譯順序結(jié)果存放在這個變長數(shù)組中,最后將這個數(shù)據(jù)數(shù)據(jù)按Intel Hex格式格式化輸出文件,并保存在磁硬盤中。
3.下載用戶程序到單片機用戶程序寄存器
單片機具有自編程(IAP)功能,將梯形圖編譯結(jié)果文件(Intel Hex格式)下載到單片機用戶程序寄存器分區(qū),因用戶程序寄存器分區(qū)是可單獨通過IAP擦寫,這樣修改控制器運行邏輯,只需修改梯形圖,編譯下載就可實現(xiàn)控制邏輯與內(nèi)核程序分離。
4.單片機執(zhí)行梯形圖邏輯實現(xiàn)
5.梯形圖元件在單片機內(nèi)存映射
單片機內(nèi)核程序中首先定義一組元件內(nèi)存映射,數(shù)組的大小與梯形圖中元件數(shù)組大小一致,并保持與梯形圖編輯工具中元件類型對應(yīng),這里定義為u16 opdate[255]。
為處理梯形圖用戶邏輯,在單片機內(nèi)核程序中建立幾個接口函數(shù),如圖2所示。
接口函數(shù)實現(xiàn)方式中已明確了數(shù)據(jù)處理細(xì)節(jié),單片機內(nèi)核循環(huán)執(zhí)行ReadDI()、checkprodata()、OutDO()函數(shù)。ReadDI()將輸入端口的邏輯狀態(tài)讀入映射區(qū)。通信控制字、消息輸入通過中斷接口調(diào)用中斷處理函數(shù)將數(shù)據(jù)存入相應(yīng)的內(nèi)存映射地址,checkprodata()順序讀取、處理用戶邏輯,并將邏輯運算、比較結(jié)果傳遞相應(yīng)的輸出映射內(nèi)存地址,OutDO()函數(shù)將輸出映射地址中的結(jié)果輸出控制器的輸出端。通過圖3更清晰彼此間的作用機制。
結(jié)論
本文設(shè)計基于單片機開發(fā)智能控制器,實現(xiàn)內(nèi)核程序與用戶控制邏輯分離,控制邏輯通過梯形圖編輯工具編譯與下載,控制目標(biāo)的變更,只需修改梯形圖邏輯即可實現(xiàn)。此設(shè)計方案成功應(yīng)用在江蘇鹽城供電公司東郊變、安泰變環(huán)境監(jiān)測與報警,智能排水不同控制目標(biāo)。
參考文獻(xiàn)
[1]杜開初.基于AT89C51單片機的微型可編程控制器[J].單片機與嵌入式系統(tǒng)應(yīng)用,2002(1):17-18.