1 引言
IEC公布的IEC 61131-3標(biāo)準(zhǔn)是關(guān)于編程語(yǔ)言的標(biāo)準(zhǔn),該標(biāo)準(zhǔn)規(guī)范了可編程控制器的編程語(yǔ)言及其基本元素。它是全世界控制工業(yè)第一次制定的有關(guān)數(shù)字控制軟件技術(shù)的編程語(yǔ)言標(biāo)準(zhǔn)。它統(tǒng)一了五種工業(yè)編程語(yǔ)言(梯形圖(LD)、功能塊圖(FBD)、順序功能圖(SFC)、指令表(IL)和結(jié)構(gòu)文本語(yǔ)言(ST))。它的特點(diǎn)有以下幾個(gè)方面:
(1)結(jié)構(gòu)化的軟件設(shè)計(jì),允許一個(gè)程序被分解為幾個(gè)功能元素即程序組織單元(POU)。程序、功能塊和函數(shù)等可在程序中重復(fù)使用。
(2)支持復(fù)雜的順序操作功能處理。
(3)支持多種數(shù)據(jù)結(jié)構(gòu),用戶就某一對(duì)象定義數(shù)據(jù)結(jié)構(gòu),增強(qiáng)了程序的可讀性。
(4)可根據(jù)需要選擇編程語(yǔ)言,并能混合編程。
(5)獨(dú)立于任一目標(biāo)系統(tǒng),可運(yùn)行于不同目標(biāo)系統(tǒng)的硬件平臺(tái)上。
由于IEC 61131-3標(biāo)準(zhǔn)自動(dòng)化編程語(yǔ)言的諸多優(yōu)點(diǎn),它已成為工業(yè)控制中擁有廣泛應(yīng)用基礎(chǔ)的國(guó)際標(biāo)準(zhǔn),不僅限于PLC,還廣泛地應(yīng)用于DCS集散型控制系統(tǒng)、IPC工業(yè)控制計(jì)算機(jī)、CNC數(shù)控系統(tǒng)、RTU遠(yuǎn)程終端單元等產(chǎn)品。
2 DSP控制器系統(tǒng)介紹
控制系統(tǒng)硬件是北京瑞泰公司的ICETEK-F2812-A實(shí)驗(yàn)箱,它是由核心板和外圍電路構(gòu)成,片上主處理芯片是美國(guó)TI公司的一款用于運(yùn)動(dòng)控制的DSP芯片——TMS320F2812,它的運(yùn)算速度達(dá)到150MHz,片上18K的RAM,片上擴(kuò)展64K的RAM,并有128K的FLASH,自帶16路12位A/D轉(zhuǎn)換,4路DAC7617轉(zhuǎn)換,兩路UART串行接口,符合RS232標(biāo)準(zhǔn),16路PWM輸出,1路CAN接口通訊等;外圍電路包括液晶顯示,PS2小鍵盤,模擬交通燈和40W功率的直流電機(jī)等。圖1是ICETEK-F2812-A的原理框圖。

圖1 ICETEK-F2812-A的原理框圖
控制系統(tǒng)的軟件部分采用的基于IEC 61131-3的控制軟件,它包含兩個(gè)部分:編程系統(tǒng)和目標(biāo)系統(tǒng)(運(yùn)行系統(tǒng))。編程系統(tǒng)集編輯器、編譯器、調(diào)試器、配置工具、離線模擬器于一身,用戶可以在上面進(jìn)行編程和調(diào)試,完成應(yīng)用程序的開發(fā);運(yùn)行系統(tǒng)負(fù)責(zé)對(duì)整個(gè)系統(tǒng)的管理和對(duì)應(yīng)用程序的執(zhí)行,它的主要功能有三個(gè):與編程系統(tǒng)的通信、目標(biāo)代碼的執(zhí)行以及各種I/O硬件的驅(qū)動(dòng),它提供開放式的標(biāo)準(zhǔn)C源代碼,方便用戶將運(yùn)行系統(tǒng)移植到不同的硬件平臺(tái)和操作系統(tǒng)上。圖2是軟件運(yùn)行的工作原理圖。

圖2 軟件運(yùn)行的工作原理圖
本文采用的通訊方式是串口RS232通信,故需要在編程系統(tǒng)在下載到TMS320F2812之前,對(duì)其進(jìn)行移植工作,使得下載后的運(yùn)行系統(tǒng)和編程系統(tǒng)的通訊適配。
3 運(yùn)行系統(tǒng)在TMS320F2812的移植
編程系統(tǒng)和運(yùn)行系統(tǒng)之間的通信采用串口RS232方式,利用TMS320F2812提供的接收和發(fā)送數(shù)據(jù)中斷向量,編寫中斷服務(wù)子函數(shù)SCITXINTA_ISR和SCIRXINTA_ISR,目的是利用中斷向自定義的一個(gè)環(huán)型緩沖區(qū)opcs_rx_buf[us_write_p]寫入數(shù)據(jù);而運(yùn)行系統(tǒng)源程序中的ser.c里提供面向編程系統(tǒng)串口通訊接口的讀寫函數(shù)SerReadComm()和SerWriteComm(),它們通過(guò)中斷得到的環(huán)型緩沖區(qū)域數(shù)據(jù)將發(fā)送至cpBuf[n],并由cpBuf[n]實(shí)現(xiàn)編程系統(tǒng)和運(yùn)行系統(tǒng)數(shù)據(jù)的傳遞,保證了編程資源可以下載到運(yùn)行系統(tǒng)內(nèi)核中。
當(dāng)完成了移植工作后,編程系統(tǒng)的I/O變量需要用過(guò)程映像(也稱I/O映射)的方法與運(yùn)行系統(tǒng)內(nèi)存單元進(jìn)行數(shù)據(jù)交換,下面就介紹過(guò)程映像的原理和實(shí)現(xiàn)方法。
4 過(guò)程映像的原理和實(shí)現(xiàn)方法
所謂過(guò)程映像其實(shí)是運(yùn)行系統(tǒng)自動(dòng)定義的一個(gè)段。I/O接口通過(guò)對(duì)過(guò)程映像的訪問(wèn)來(lái)實(shí)現(xiàn)I/O變量的訪問(wèn)。而上位機(jī)就是通過(guò)過(guò)程映像來(lái)與物理硬件設(shè)備通信,讀寫I/O變量的信息。過(guò)程映像內(nèi)存單元和編程系統(tǒng)I/O變量的物理定義地址是一一對(duì)應(yīng)的。
過(guò)程映像有一個(gè)段表頭,段表頭后面跟著用于物理輸入(%I)的內(nèi)存空間,接著是物理輸出(%Q)和用于存儲(chǔ)運(yùn)行系統(tǒng)內(nèi)核(%M)的內(nèi)存空間。在輸入和輸出之間,輸出和標(biāo)志之間,以及在標(biāo)志之后,都有可能有一些不用的內(nèi)存空隙。對(duì)過(guò)程映像變量的訪問(wèn)是通過(guò)指針pProcImgSeg_p來(lái)實(shí)現(xiàn)的,讓其總指向物理輸入的起始偏移地址,pProcImgSeg_p加上相對(duì)偏移量,就可以訪問(wèn)不同I/O變量和標(biāo)志的存儲(chǔ)單元。
過(guò)程映像的布局如圖3所示。

圖3 過(guò)程映像布局
在運(yùn)行系統(tǒng)運(yùn)行環(huán)境接口文件lzsenv.c中提供了過(guò)程映像讀寫函數(shù)LzsEnvReadProcImg()和LzsEnvWriteProcImg(),里面可以采用指針pProcImgSeg_p實(shí)現(xiàn)運(yùn)行系統(tǒng)和編程系統(tǒng)之間變量的對(duì)應(yīng)關(guān)系。
5 用LD語(yǔ)言實(shí)現(xiàn)模擬交通燈的控制
ICETEK-F2812-A提供模擬信號(hào)燈裝置,東西南北每個(gè)方向各紅黃綠三盞燈,信號(hào)燈的狀態(tài)由片外擴(kuò)展地址對(duì)應(yīng)的寄存器CTRLR控制。實(shí)驗(yàn)要求:設(shè)置板上的兩個(gè)DIPS撥碼開關(guān)(由寄存器DIPS控制),一個(gè)作為啟動(dòng)按鍵(設(shè)為key0),一個(gè)作為停止按鍵(設(shè)為key1)。當(dāng)程序運(yùn)行的時(shí)候,默認(rèn)狀態(tài)0statusHold,按下key0,信號(hào)燈按如附表的狀態(tài)從狀態(tài)1到狀態(tài)8循環(huán)運(yùn)行,直到按下key1,信號(hào)燈返回默認(rèn)狀態(tài)0。
附表 信號(hào)燈循環(huán)狀態(tài)表

程序設(shè)計(jì):首先在運(yùn)行系統(tǒng)lzsenv.c中定義控制變量nNowStatus。
在函數(shù)LZSBYTE LzsEnvReadProcImg ( )中添加如下代碼:
key_pre=DIPS&0xff;
*((LZSBYTE*)(pProcImgSeg_p+0))=key_pre;/*DIPS撥碼開關(guān),一共四個(gè)分別對(duì)應(yīng)編程系統(tǒng)的ix0.0~ix0.3*/
在函數(shù)LZSBYTE LzsEnvWriteProcImg ()中添加代碼:
TRF_BYTE =*((LZSBYTE*)(pProcImgSeg_p+100));
/*TRF_BYTE對(duì)應(yīng)編程系統(tǒng)qx0.0~qx0.7 */
nNowStatus= TRF_BYTE&0xff;
switch ( nNowStatus )
{
case statusNSGreenEWRed:
對(duì)控制寄存器寫入相應(yīng)的控制字;
break;
…………
case statusHold:
對(duì)控制寄存器寫入相應(yīng)的控制字;
break;
}
然后打開編程系統(tǒng),定義變量
VAR
(*過(guò)程映像的對(duì)應(yīng)關(guān)系*)
key0:bool at %ix0.0;
key1:bool at %ix0.1;
NSgEWr:bool at %qx0.0;
NSfEWr:bool at %qx0.1;
NSyEWr:bool at %qx0.2;
NSrEWy:bool at %qx0.3;
NSrEWg:bool at %qx0.4;
NSrEWf:bool at %qx0.5;
NSrEWy1:bool at %qx0.6;
NSyEWr1:bool at %qx0.7;
a10,a11,a12,a13,a14,a15,a16,a17,b:bool;
t00 :time :=t#4s;
t01 :time :=t#20s;
t02 :time :=t#6s;(*定時(shí)器時(shí)間設(shè)置*)
t1,t2,t3,t4,t5,t6,t7,t8 :TON;(*定時(shí)器功能塊)
END_VAR
用LD梯形圖語(yǔ)言編寫程序經(jīng)過(guò)編譯、下載和運(yùn)行后,交通燈正常工作。程序如圖4所示。

圖4 LD語(yǔ)言編寫的模擬交通燈程序
6 結(jié)束語(yǔ)
本文采用基于IEC 61131-3的TMS320F2812控制系統(tǒng)對(duì)模擬交通燈進(jìn)行實(shí)時(shí)控制,達(dá)到了預(yù)期的效果。










