uC/OS-II

2024-07-08

uC/OS-II(精选三篇)

uC/OS-II 篇1

伴随着电力系统的日益复杂化发展, 继电保护装置对于硬件与软件方面提出了较高的标准化要求。在当前阶段继电保护装置系统相关的处理器通常使用高性能的单片机来实现实际的控制需求[1]。然而随着继电保护系统趋向于多功能、智能化、可视化与网络化方向的实行扩充化发展, 这部分处理芯片已经不可以完全符合实质性的需求。所以在设计新型的继电保护装置的同时应当选取高性能与低成本的新型处理器, 所以提出了基于ARM和u C/OS-II的嵌入式继电保护装置以实现更优化的目标。

2 ARM嵌入式系统的设计

2.1 系统构架

嵌入式系统通常能够分成软件系统与硬件系统两个具体部分, 硬件系统包括控制电路与控制板, 以及包括机械的其它附属性设备[2]。硬件系统作为嵌入式系统的重要部分, 专门从事硬件的驱动、控制处理或者界面处理, 能够提高硬件产品的使用价值。

2.2 ARM微处理器的选取

根据时间应用开发的角度考虑, 在选取ARM处理器时应当考虑了以下几项因素, 分别为ARM微处理器内核、系统的工作频率、芯片内存储器的容量与片内外围电路。基于以上各项因素的实际考虑, 并且结合继电保护的各种功能需要, 经过对各种类型芯片的对比, 把基于ARM7TDMI-S内核内嵌Flash存储器的微控制器作为系统的处理芯片, 其具有结构简单的优势从而适合于工业控制。

2.3 硬件开发平台的选用

本继电保护装置系统的硬件开发平台选用Easy ARM2200开发套件, 其具备相应的JTAG仿真技术, 能够支持ADS1.2集成开发环境与PHILIPS全部型号ARM微控制器的仿真和开发实践;板上相应的功能组件和CPU之间部分能够运用跳线器选取连接或者断开连接;配置有4Mbit SRAM与16 Mbit FLASH, 能够便于样机的迅速开发和调试处理。

2.4 硬件电路的设计

在以太网的相关硬件设计过程中应当处理各种实际性问题, 比如CPU处理操作速度、RAM的空间容量、ROM的空间容量、10Mb/s与100Mb/s的自适应双网的冗余设计与相应切换策略。硬件设计平台的CPU选用ARM嵌入式系统, 其强大的运算处理能力为继电保护装置的灵活性、可靠性与易操作性提供相应的保证, 为相关程序设计提供了很大程度的灵活性。以太网相应的控制芯片有许多种类型, 由Realtek公司产生制造的RTL8019AS使用范围相当广泛, 具有成熟稳定的特点且价格成本较低。RTL8019AS能够全面化地支持IEEE802.3的相关标准, 其数据收发速度能够达到10Mbps, 内部设置了16KB的SRAM, 能够作为发送与接收的缓存区。以太网控制芯片与嵌入式系统之前可以经过CPLD实现连接, CPLD芯片主要用于实现I/O口的扩展功能, 以便减轻系统控制中心的处理负担。

3 基于u C/OS-II的TCP/IP协议

u C/OS-II使用以优先级为基础的可剥夺式调度方案策略, 可以充分地满足于系统对于实时性能的实际要求标准, 并且其源代码为公开形式的, 能够提供免费应用。TCP/IP协议在实质层面上为一系列协议的总体简称, 包括了十多项协议标准。在目前阶段的硬件水平状况下, 在继电保护装置中能够实现全部的协议中的各项内容为不现实的同时也是不必要的。依据实际要求, 主要需要实现的内容分别为因特网控制报文协议、地址解析协议、网际层协议、传输控制协议与用户数据报协议等各个方面[3]。从基本上根据这五项协议能够构成一个小型化的TCP/IP协议。而且依据实际的状况, 对于上述的五项协议也能够实行相应的合理简化, 在能够满足完成通信功能的条件下, 确保系统的实时与可靠程度。

TCP/IP相应的传输层给应用层提供了两种类型的具体化服务, 其一为面向连接形式的可靠传输服务TCP协议, 通讯相应的发起节点在每一次实行通讯时在传输层都应当和通讯接收方首先建立三次握手连接之后才可以实行发送处理;其二为无连接形式的通用型数据报协议UDP协议, 这类传输方式因为不需要事先建立相应握手联系, 因此其效率比较高, 而且具有单播、分组广播与广播三种形式[4]。继电保护装置之中以太网的通信主要是使用UDP协议来实现数据的传输功能。TCP协议可以实现可靠性能的数据传输功能, 然而具有延时的缺点而容不易把握, 不利于数据的实时传输功能实现。UDP协议表现出传输数据的实时性能较强且效率较高, 同时可以在同一时间向全部节点传输数据。

4 结束语

本文提出的基于ARM和u C/OS-II的嵌入式继电保护装置, 能够很好地解决传统模式的继电保护装置存在不足, 可以充分实现多功能、智能化、可视化与网络化等各种实现形式, 具有较高的实际应用价值, 成为一类高性能的继电保护装置[5]。使用u C/OS-II实时操作系统实行实时任务调度处理操作, 能够确保以太网通信的实时性与可靠性程度, 可以完全符合继电保护装置对于以太网通讯技术的标准实现要求。嵌入式系统以太网在继电保护装置中实现相关的具体化应用。

摘要:对于传统模式的继电保护装置系统本身存在的缺陷, 提出一类将ARM嵌入式系统作为为中心的继电保护装置, 对于嵌入式系统相应的硬件与软件具备相应仔细分析, 最后经过相关实验证明继电保护装置设计方案的有效与可靠程度。因为移植了相应的嵌入式操作系统, 强化了实践应用系统的交互通信能力和可裁剪性能, 既能够根据现场用户的实际需求修改固定值, 又能够实现远程操作的目标。此继电保护装置能够符合电力系统继电保护装置应当具备的选择性、速动性、灵敏性、可靠性与实时多任务等各方面的具体化要求。

关键词:继电保护,嵌入式系统,ARM

参考文献

[1]丁毓山, 南俊星.微机保护与综合自动化系统[M].北京:中国水利水电出版社, 2002.

[2]杨奇逊.微机型继电保护基础[M].北京:中国水利电力出版社, 1998.

[3]汪觉恒, 邓庆红.我国继电保护技术的现状与发展[J].湖南电力, 2003 (3) .

[4]田有文等.微机继电保护的研究现状及展望[J].沈阳农业大学学报, 2002 (6) .

uC/OS-II 篇2

比如,在其ex21.c文件中定义的任务堆栈语句为:

OS_STK TaskStartStk[TASK_STK_SIZE]; /*启动任务堆栈*/

OS_STK TaskClkStk[TASK_STK_SIZE]; /*时钟任务堆栈*/

OS_STK TasklStk[TASK_STK_SIZE]; /*任务1#,任务堆栈*/

……

以上各任务堆栈数组变量在初始化函数OSTCBInit()中被会给了任务控制块OS_TCB的OSTCBStkPtr变量。在任务切换时,μC/OS-II调用OSCtxSw汇编过程(OS_CPU_A.ASM文件),将CPU的SP指针指向该变量,从而使每个任务使用独立的任务堆栈。

LES BX,DWORD PTR DS:_OSTCBCur

;保存挂起任务的堆栈指针SP

MOV ES:[BX+2],SS

MOV ES:[BX+0],SP

……

LESB X,DWORD PTR DS:_OSTCBHighRdy ;切换SP到要运行任务的堆栈空间

MOV SS,ES:[BX+2]

MOV SP,ES:[BX]

……

在代码中,变量OSTCBHighRdy(OSTCBCur)和堆栈指针变量OSTCBStkPtr的数值是同同的,因为OSTCBStkPtr是结构OSTCBHighRdy的第一个变量。

这种任务栈处理方法的缺点是可能造成空间的浪费。因为一个任务如果堆栈满了,该任务也就无法运行,即使其它任务的堆栈还有空间可用。当然,这种方法的好处是任务栈切换的时间非常短,只需要几条指令。

4 共用空间的`堆栈处理方法

(1)栈共用连续存储空间

如果多个任务使用同一段连续空间作为堆栈,这样各个堆栈之间就可以互补使用。在前面说过,共用空间的问题在于一个任务运行时不能破坏其它任务的堆栈数据。为简单起见,先看图3所示两个任务的情况。

假定任务1首次运行时任务栈为空。运行一段时间后任务2运行,堆栈空间继续往上生长。这次任务切换不需要修改CPU的SP数值,但需要记下任务1的栈顶位置SP1(图3中)。

在任务2运行一段时间后,RTOS又切换到任务1运行。在切换时,不能简单地将SP指针修改回SP1的数值,因为这样堆栈向上生长时会破坏任务2堆栈中的数据。办法是将原来任1务堆栈保存的数据移动到靠栈顶的位置,而将任务2堆栈数据下移到靠栈底的位置,堆栈指针SP实际上不需要修改(图3右)。

考虑到更为一般的情况,有N个任务,当前运行的任务为k,下一个运行的任务为j,在共用任务堆栈时必须做的工作有:

*为每个任务定义栈顶和栈底2个堆栈指针;

*在任务切换时,将待运行任务j的堆栈内容移动到靠栈顶位置,同时将其堆栈上方的任务堆栈下移,修改被移动推栈的任务堆栈指针。

假设我们定义的任务栈空间和任务的栈指针变量为:

void TaskSTK[MAX_STK_LEN];/*任务堆栈空间*/

typedef struct TaskSTKPoint{

int TaskID;

int pTopSTK;

int pBottomSTK;

}TASK_STK_POINT;

TASK_STK_POINT pTaskSTK[MAX_TASK_NUM]; /*存放每个任务的栈顶和栈底指针*/

任务栈指针数组pTaskSTK的元素个数同任务个数。为了堆栈交换,需要另外一块临时存储空间,其大小可按单个任务栈最大长度定义,用于中转堆栈交换的内容。堆栈内容交换的伪C算法可写为:

StkEechange(int CurTaskID,int RunTaskID)

{ /*2个参数为当前运行任务号和下一运行任务号*/

void TempSTK[MAX_PER_STK_LEN]; /*注意该变量长度可小于TaskSTK*/

L=任务RunTaskTD的堆栈长度;

①将TaskSTK顶部的L字节移动到TempSTK中;

②将RunTaskID任务的堆栈内容移动到TaskSTK顶部;

③将RunTaskID堆栈上方(移动前位置)所有内容下移L个字节;

④修改RunTask堆栈上方(移动前位置)所有任务栈顶和栈底指针(pTaskSTK变量);

};

该算法的平均时间复杂度可计算如下:

O(T)=SL/2+SL/2+SL×N/2

式中,第一、二项为步骤①和步骤②时间,第三项为步骤③时间;SL表示每个任堆栈的最大长度(即MAX_PER_STK_LEN),N表示任务数。

取SL为64字节,任务数为16个,则数据项平均移动次数为576。假设每次移动指令时间为2μs,则一次任务栈移动时间长达约1ms。所以在使用该方法时,为了执行时间尽量短,编码时应仔细推敲。

从空间上说,共用任务栈比独立任务栈优越。假设独立任务栈方法中每个堆栈空间为K,任务数为N,则独立任务栈方式的堆栈总空间为N×K。在共用任务栈时,考虑各任务互补的情况,TaskSTK变量不需要定义为N×K长度,可能定义为二分之一或者更小就可以了。

另外,这种方法不需要在任务切换时修改CPU的SP指针。

(2)工作栈和任务堆栈

上节共用任务栈算法的缺点是:任务切换时的堆栈内容交换算法复杂,占用时间长。另外一个折中的方法是设计一个工作堆栈,用于给当前运行的任务使用;在任务切换时,将工作栈内容换出得另外的存储空间,该空间可以动态申请,其大小按实际需要即可。

这种方法看起来和独立任务栈的方法类似,需要N+1块存储空间,其中一块用于工作栈空间。和独立任务堆栈相比,其区别有2点:

①SP指针所指向的空间始终是同一块存储空间,即工作栈;

②每个任务栈的大小不需要按最大空间定义,可以动态按实际大小从内存中分配空间。

对于8031这种处理器结构,由于堆栈指针只能指向其内部存储器,大小十分有限。采取这种方法,可将工作栈设在内部RAM,将任务栈设在外部RAM,扩展了堆栈空间。

和上一种共用堆栈方法相比,这种方法的交换时间要短,其时间复杂度约为1.5倍最大任务栈长度。

5 总结

独立任务栈的方法适合于存储器充足、任务切换频繁、对任务切换时间要求较高的场合,一般主要用在16位或者32位微处理器平台环境。值得注意的是,在某些微处理器中,虽然可使用的数据存储器可以设计得较大,但堆栈所能使用的存储器却是有限的。比如8031系列存储器,堆栈只能使用内部的128字节数据存储器,即使系统中有64K字节的外部数据存储器,任务栈的总空间也不能超过128字节。这种处理器使用共用任务栈结构的RTOS就更好一些。

由于共用任务栈系统需要较长的任务切换时间,不适于任务切换频繁的场合,在很多嵌入式系统中,长时间只有几个任务会处于运行状态,其它任务在特定的条件下才会运行。对于RTOS的使用者,也可以适当地划分任务,来减小任务切换的时间。

uC/OS-II 篇3

我国城网、农网及工矿企业的电网大部分属于60KV以下的中低压电力系统, 在这些电压等级的系统中, 属单相接地故障较多, 如何保证系统在发生单相接地时提高系统供电的可靠性成为了一个重要的研究课题 (1) 。若这些系统采用中性点接地的方式, 则系统在发生任何单相故障时都要跳闸停电, 影响电网的正常供电。而如果系统采用中性点不接地系统的方式 (含中性点绝缘或经消弧线圈接地) , 则系统发生单相接地故障时, 可以持续维持系统运行一段时间, 从而提高系统供电的稳定性和持续性。

以往我国3~35KV (含66KV) 电网多采用中性点不接地系统, 发生单相间歇性弧光接地时, 系统内部形成多频振荡回路, 产生3.5倍相电压峰值的过电压, 严重威胁电网的安全运行, 同时电弧中的高频电流也极易造成设备与人身事故。为既能有效抑制弧光过电压, 防止电缆事故的发生, 又能避免企业因被迫停电所带来的经济损失, 当发生单相弧光接地时, 应当在以下三个方面采取措施:尽快消灭电弧, 防止故障进一步发展;尽快将过电压限制在安全水平, 避免固体绝缘的积累性破坏;允许用户在完成转移负荷的倒闸操作之后再处理故障线路, 避免被迫停电。由此, 在中性点非直接接地系统中, 发生单相电弧接地时, 我们选择快速地化弧光接地为金属接地这一有效的方法。

消弧过电压保护装置 (又称XHG) 就是当中性点非直接接地系统发生单相电弧接地时, 能够快速将弧光接地转化为金属接地的执行载体。硬件系统作为实现保护原理的载体和实现保护功能的基础, 其研制和开发水平的提高对推动整个微机保护的水平起着重要作用。设计中的CPU部分, 本文放弃了以往通用的8位或16位单片机, 而改用TI公司生产的高性能32位定点DSP作为主控制器 (2) , 而随着微处理器芯片性能的高速发展、价格的下降和对软件的可重用性、可维护性的提高, 采用实时操作系统 (RTOS) 已经是大势所趋, 其中比较具有代表性的有uC/OS-II (3) (4) 。

在32位DSP+CPLD上构建以嵌入式实时操作系统uC/OS-II为平台的开发应用近年来颇多 (5) — (8) , 但在微机保护测控装置方面的应用还不多见, 本文将对今后微机保护测控装置的研究提供一定的参考价值。

二、新型消弧过电压保护装置介绍

本节介绍一种新型的消弧过电压保护装置 (XHG) 。它由控制器ZK, 三项组合式过电压保护器TBP, 分组控制的高压真空断路器JZ, 高压限流熔断器FUR, 高压隔离开关BD, 电压互感器PT, 电流互感器CT等部分组成。其结构如图1所示。

ZK是整个消弧过电压保护装置的核心, 它通过外围电路采集三相线路的电压和电流以及各断路器、熔断器等器件的状态等信息, 然后快速处理这些信息得出线路的工作状态, 并在线路故障或装置调试时, 发出控制指令控制其他部分动作完成相应的保护动作或测试。ZK自身设有键盘和液晶显示器等人机接口。ZK还可以通过工业以太网, R S485或CAN等总线系统和上位机进行通信。

三、硬件电路的设计分析

现代微机保护测控装置的硬件通常都按照通用的标准来设计, 不同的保护类型, 主要的差异在于软件保护功能的配置。XHG装置是一个以TMS320F2812 DSP为核心的实时嵌入式系统, 系统可总体上分为以下若干模块组成: (1) 主控制器模块; (2) 电源模块; (3) 模拟量采集模块; (4) 开关量输入输出模块; (5) 通讯模块; (6) 人机接口模块。

XHG的工作过程是这样的:主控制器模块发出模拟量和开关量采集命令, 模拟量采集模块和开关量输入模块将线路中的各种电流、电压以及熔断器、刀闸、接触器状态等信息送给主处理器DSP, DSP首先根据设计的算法判断线路的工作状态, 如果正常则仅定时将采集的信息上传至上位机和发送到控制器的LCD以及LED显示;如果故障则先通过开关量输出执行相应故障的处理命令, 并向操作室告警, 并向上位机、LCD和LED发送和记录故障消息。同时, 通过人机接口可以对故障的历史记录进行查询, 也可以修改定值等。

四、系统的软件设计和分析

1. 算法。

目前微机保护算法的种类众多, 分析和评价算法的主要指标是其速度和精度, 而且这两者之间又是相互制约的。因此, 微机保护中关于算法基本问题就是寻找合适的算法, 在速度和精度两个方面达到平衡, 以满足系统的要求。目前, 在微机保护中应用较广泛的算法有全波傅氏算法、半波傅氏算法、最小二乘算法、卡尔曼滤波算法和小波算法等。其中全波傅氏算法在微机保护中获得了广泛的应用, 由于本论文研究的10KV线路保护对保护的速动性要求不是很高, 因此本装置也选用了比较成熟的全波傅氏算法。

傅氏算法是从傅立叶级数导出的。假设被采样的模拟信号是周期性的, 采用此方法可以准确地求出基波分量。傅氏算法始终假设被处理的信号是周期性的, 即由稳恒直流、基波和整次谐波分量组成, 假设输入信号为u (t) , 则u (t) 的一般表达式为:

式中A0表示稳定直流分量;Ai表示i次谐波分量幅值;w1表示基波角频率;фi表示i次谐波分量相位。

傅氏算法属于正交样品函数。这一类算法是采用某一正交函数组作为样品函数, 将这一样品函数组与待分析的时变函数u (t) 进行相应的积分变换, 以求出与样品函数频率相同的分量的实部与虚部的系数, 进而可以求出待分析的时变函数u (t) 中该频率的谐波分量的模值和相位。

在下面的积分方程中:

式中y (t) 表示选定的正交样品函数;u (t) 表示待分析的时变函数。

根据正交函数的定义, 如u (t) 可分解为一个级数且级数各项都属于同一正交函数, 则上述积分结果为u (t) 中与样品函数相同分量的模值。取y (t) =cosnwt时, 则得n次倍频分量的实部的模值URn为:

取y (t) =sinnwt时, 则得n次倍频分量的虚部的模值URn为:

由此则可得模值Un, 即

并可得到以样品函数为基准的Un的相位角θ,

式 (3) 和 (4) 就是傅氏级数相应项的系数计算式。

该算法在计算机上实现时, 也是对离散的采样值进行运算。将式 (3) 用离散值计算时, 其实部为:

式中N代表一个周期T中的采样点数;UDC代表第K个采样值。

这种算法是利用一个周期T内的全部采样值来进行计算, 因此数据窗也就是一个周期T。

用同样方法求其虚部:

2. 基于uC/O S-II的应用程序设计。

(1) 基于uC/OS-II的任务划分。多任务运行的实现实际上是靠CPU (中央处理单元) 在许多任务之间转换、调度。CPU只有一个, 轮番服务于一系列任务中的某一个。多任务运行使CPU的利用率得到最大的发挥, 并使应用程序模块化, 并可以将很复杂的应用程序层次化。使用多任务, 应用程序将更容易设计与维护。

完成了任务划分后, 我们从各个任务的实时性、系统的整体工作等方面考虑, 给XHG装置控制器应用程序的各个任务分配了优先级和堆栈空间, 具体如表1所示:

(2) 主程序设计。在进入主程序之前我们需要对一些全局变量进行定义, 对一些函数进行申明或定义。在主程序中我们主要完成DSP系统的初始化, uC/O S-II操作系统的初始化以及系统正常运行所需变量和参数的初始化。其中, DSP系统的初始化主要完成:DSP系统控制如系统时钟等的初始化, 中断扩展模块包括PIE寄存器和PIE参数表的初始化, DSP片上外设如SCI口、定时器的初始化, GPIO的初始化, 外部接口XINTF的初始化等。外部器件初始化主要完成:外部ADC的初始化, 以太网控制器的初始化, LCD的初始化 (如清屏, 显示模式的选择等) , 一些保存在外部存储空间的重要参数和定值的初始化 (如一些保护定值的读取等) , 通过CPLD输出开关量的初始化等 (9) 。

uC/O S-II的初始化主要完成:函数源代码由操作系统自带, 主要是用来初始化uC/O S-II所有的变量和数据结构, 由O SIint () 函数实现。

在主程序中我们通过OSTaskCreakExt () 函数只建立一个保护判据任务, 其他的任务都放在保护判据任务中建立。因为操作系统正常运行和调度的前提是必须要先建立至少一个任务, 每个任务的建立既可以放在主程序中, 也可以放在其他任务中建立。任务的建立即初始化了该任务的优先级, 初始化了任务的堆栈空间, 初始化了任务控制块等等。

五、结论

电力系统对XHG的研究一直是继电保护领域最为活跃的课题之一, 在微机保护获得广泛应用的今天, 对它的研究已向高性能和综合型方向发展。本文在深入分析了当前微机保护的应用现状后, 开发了基于DSP2000系列和实时操作系统uC/OS-II的微机保护测控装置, 大大降低了系统开发调试的复杂性, 提高了装置的可靠性和可扩展性。

摘要:文章在充分分析和吸收当前微机保护装置的先进技术和经验后, 设计了一种基于DSP和嵌入式实时操作系统uC/OS-II的新型消弧过电压保护测控装置。该系统硬件上采用32位DSP处理器TMS320F2812, 软件的设计是基于嵌入式操作系统uC/OS-II展开的, 该装置不仅提高了采样的快速性和准确性, 而且使得对装置的操作更加简洁。

关键词:DSP,uC/OS-II,消弧,移植

注释

1[1]付惠琪, 袁东升.电力系统中性点接地方式分析及选择[J].河南理工大学学报.2006 (6)

2[2]贺洪江, 董爱荣, 董克俭等.DSP在变电站综合自动化系统中的应用.微计算机信息, 2007 (2)

3[3][美]Jean J.Labrosse著, 邵贝贝等译.嵌入式实时操作系统μC/OSII (第二版) [M].北京:北京航空航天大学出版社, 2005

4[4]任哲.嵌入式实时操作系统原理与应用.北京:北京航空航天大学出版社, 2005

5[5]郁景礼, 周有庆, 王洪涛.基于TMS320F2812的中低压线路保护装置的研制[J].电气应用, 2007 (2)

6[6]严法高, 陈虹.基于DSP的中低压保护装置设计.仪器仪表学报, 2006 (27)

7[7]王东光.微机保护装置的通信系统研究.湖南工程学院学报, 2006 (1)

8[8]陈志雄, 陈小川.微机保护系统设计可靠性研究.东北电力技术, 2006 (2)

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【uC/OS-II】相关文章:

上一篇:信贷成本下一篇:电源方案

本站热搜

    相关推荐