新闻中心

EEPW首页>嵌入式系统>设计应用> 基于LPC2294处理器的嵌入式PLC的设计

基于LPC2294处理器的嵌入式PLC的设计

作者: 时间:2013-12-26 来源:网络 收藏

2的软件系统设计

的软件分为运行系统软件和开发系统软件两部分。运行系统负责对整个系统的管理和对用户程序的编译执行,并保存所有的数据,完成与外界通讯。开发系统面对用户,完成对PLC程序的编辑和转换。

2.1 PLC运行系统软件

该系统负责为应用程序分配内存,把该应用程序加载到分配好的内存里,然后开始执行该程序的指令。如果该程序要求位于底层的操作系统提供服务,该运行系统还必须负责处理有关的服务请求。该运行系统是基于嵌入式操作系统μC/OS-II来开发的,选用嵌入式操作系统提高了软件系统的抗干扰性,系统的可靠性及应用软件的开发效率,缩短了开发周期。μC/OS-II的移植的主要工作是修改与ARM相关部分的代码,它们集中在3个文件中。

①OS_CPU.H文件该文件包含了用#define定义的与相关的常量、宏和类型定义。文件中这些数据类型的定义如下:

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体系结构相关的一些定义如下:

#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);

/*上述函数需在移植文件OS _CPU.H中将其声明。

*/#define OS_STK_GROWTH 1

此代码段中的OS_ENTER_CRITICAL()函数和OS_EXIT_CRITICAL()函数实现打开和关闭的功能。

②OS_CPU_C.C文件该文件中的任务栈结构初始化函数OSTaskStkInit(),必须根据移植时统一定义的任务堆栈结构进行初始化。另外还有9个系统规定的钩子函数必须声明,但可以不包含任何代码,这些钩子函数在本移植中全为空函数。

③OS_CPU_A.S文件的移植共包括4个函数:多任务启动函数中调用的OSStartHighRdy()、任务切换函数OSCtxSw()、中断任务切换函数OSIntCtxSw()、时钟节拍服务函数OSTickISR()。

至此整个μC/OS-II内核移植完成。以后的用户程序都是在这个基础上进行的扩充。

2.2 PLC开发系统软件

该系统的主要任务是让用户编写PLC程序,所以还需要设计与该系统相对应的编程平台。编程平台的设计主要包括编程界面的设计、编辑器的设计、转换模块的设计、编译器的设计和通信模块的设计等。软件系统结构图如图7所示。

本文引用地址://m.amcfsurvey.com/article/256989.htm



用户在编程平台里编写PLC程序。这里借用FX系列PLC的编程软件SWOPC-FXGP/WIN-C作为编程平台,编程语言可以使用梯形图和指令表。然后通过转换程序把编译后的目标文件转化成C语言。转换程序其实就是一个解释系统,通过逐条翻译编程软件的指令表,生成和处理器指令系统无关的用户指令。使用这样的方式作为上位机编程平台,节省了工作量。



评论


相关推荐

技术专区

关闭