基于LPC2294處理器的嵌入式PLC的設計
2嵌入式PLC的軟件系統(tǒng)設計
嵌入式PLC的軟件分為運行系統(tǒng)軟件和開發(fā)系統(tǒng)軟件兩部分。運行系統(tǒng)負責對整個系統(tǒng)的管理和對用戶程序的編譯執(zhí)行,并保存所有的數(shù)據(jù),完成與外界通訊。開發(fā)系統(tǒng)面對用戶,完成對PLC程序的編輯和轉(zhuǎn)換。
2.1 PLC運行系統(tǒng)軟件
該系統(tǒng)負責為應用程序分配內(nèi)存,把該應用程序加載到分配好的內(nèi)存里,然后開始執(zhí)行該程序的指令。如果該程序要求位于底層的操作系統(tǒng)提供服務,該運行系統(tǒng)還必須負責處理有關的服務請求。該運行系統(tǒng)是基于嵌入式操作系統(tǒng)μC/OS-II來開發(fā)的,選用嵌入式操作系統(tǒng)提高了軟件系統(tǒng)的抗干擾性,系統(tǒng)的可靠性及應用軟件的開發(fā)效率,縮短了開發(fā)周期。μC/OS-II的移植的主要工作是修改與ARM處理器相關部分的代碼,它們集中在3個文件中。
①OS_CPU.H文件該文件包含了用#define定義的與處理器相關的常量、宏和類型定義。文件中這些數(shù)據(jù)類型的定義如下:
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef signed char INT8S;
typedef unsigned short INT16U;
typedef signed short INT16S;
typedef unsigned int INT32U;
typedef signed int INT32S;
typedef float FP32;
typedef double FP64;
typedef unsigned int OS_STK;
與ARM7體系結(jié)構相關的一些定義如下:
#define OS_CRITICAL_METHOD 2
__swi(0×00)void OS_TASK_SW(void);
__swi(0×01)void _OSStartHighRdy(void);
__swi(0×02)void OS_ENTER_CRITICAL(void);
__swi(0×03)void OS_EXIT_CRITICAL(void);_
_swi(0×40)void*GetOSFunctionAddr(int Index);
__swi(0×41)void*GetUsrFunctionAddr(int Index);
__swi(0×42)void OSISRBegin(void);
__swi(0×43)int OSISRNeedSwap(void);
__swi(0×80)void ChangeToSYSMode(void);
__swi(0×81)void ChangeToUSRMode(void);
__swi(0×82)void TaskIsARM(INT8Uprio);
__swi(0×83)void TaskIsTHUMB(INT8Uprio);
/*上述函數(shù)需在移植文件OS _CPU.H中將其聲明。
*/#define OS_STK_GROWTH 1
此代碼段中的OS_ENTER_CRITICAL()函數(shù)和OS_EXIT_CRITICAL()函數(shù)實現(xiàn)打開和關閉處理器的功能。
②OS_CPU_C.C文件該文件中的任務棧結(jié)構初始化函數(shù)OSTaskStkInit(),必須根據(jù)移植時統(tǒng)一定義的任務堆棧結(jié)構進行初始化。另外還有9個系統(tǒng)規(guī)定的鉤子函數(shù)必須聲明,但可以不包含任何代碼,這些鉤子函數(shù)在本移植中全為空函數(shù)。
③OS_CPU_A.S文件的移植共包括4個函數(shù):多任務啟動函數(shù)中調(diào)用的OSStartHighRdy()、任務切換函數(shù)OSCtxSw()、中斷任務切換函數(shù)OSIntCtxSw()、時鐘節(jié)拍服務函數(shù)OSTickISR()。
至此整個μC/OS-II內(nèi)核移植完成。以后的用戶程序都是在這個基礎上進行的擴充。
2.2 PLC開發(fā)系統(tǒng)軟件
該系統(tǒng)的主要任務是讓用戶編寫PLC程序,所以還需要設計與該系統(tǒng)相對應的編程平臺。編程平臺的設計主要包括編程界面的設計、編輯器的設計、轉(zhuǎn)換模塊的設計、編譯器的設計和通信模塊的設計等。軟件系統(tǒng)結(jié)構圖如圖7所示。
用戶在編程平臺里編寫PLC程序。這里借用FX系列PLC的編程軟件SWOPC-FXGP/WIN-C作為編程平臺,編程語言可以使用梯形圖和指令表。然后通過轉(zhuǎn)換程序把編譯后的目標文件轉(zhuǎn)化成C語言。轉(zhuǎn)換程序其實就是一個解釋系統(tǒng),通過逐條翻譯編程軟件的指令表,生成和處理器指令系統(tǒng)無關的用戶指令。使用這樣的方式作為上位機編程平臺,節(jié)省了工作量。
評論