APP下载

嵌入式RTOS在智能电能表中的研究与应用

2017-12-20欧习洋王新华侯兴哲刘金涛张进陈坚

电测与仪表 2017年12期
关键词:电能表嵌入式计量

欧习洋,王新华,侯兴哲,刘金涛,张进,陈坚

(1.国网重庆市电力公司电力科学研究院,重庆401123;2.深圳市中电电力技术股份有限公司,广东 深圳518040)

0 引 言

作为智能电网最基础、最关键的设备之一,电能表逐步从传统意义上的单一功能的电能计量器具,发展成为集电能计量、用电信息上传、费控、事件监测与记录、负荷记录、防窃电、互动用电等多种功能于一体的智能终端设备。运行经验表明,软件复杂度越高,其故障率也越高。据统计,多功能电表、负控终端的所有故障中,软件方面的缺陷占到七成以上[1],给现场的运行管理带来极大的困难。而且,未来随着科技的发展及电网能源结构调整的变化,电能表的智能化要求将会越来越高,导致软件功能更为复杂、应用更为灵活[2]。

电能表软件可划分为计量模块与计量管理模块,前者完成核心的计量及基本电量测量功能,后者完成数据储存管理、费控、显示、通信等功能。其中,计量模块的功能相对稳定,计量管理模块则朝着智能化的方向发展,功能变得越来越复杂与灵活。现有电能表计量模块基本上采用简单的单片机系统架构,由一个主循环加若干中断组成,所有程序编译成一个可执行文件烧录到单片机中执行[3-4]。这种软件架构缺乏对各个功能模块的有序管理,当软件功能较多时,无法保证主循环各个任务的实时响应、优先级管理,任务间数据配合处理出错的概率也高;而且各个任务模块高度耦合,任一模块的变更或扩展对其它模块影响很大,灵活性差。这些缺陷使其在应对电能表智能化情况下功能越来越复杂、灵活性越来越高等要求方面愈加吃力。

为解决上述问题,本文利用嵌入式实时操作系统(RTOS)在任务调度管理等方面的优势,研究设计了一种新型的、基于嵌入式RTOS的电能表。

1 软件总体设计

本文所设计的基于嵌入式RTOS的电能表,产品定位为高精度、带电能质量监测功能的多功能智能电能表(以下简称电能表),硬件架构采用ARM+DSP的双CPU架构,其中DSP完成模拟通道采样及计量、电能质量的计算分析,ARM完成数据计算、数据存储、显示、通信等功能,软件总体架构如图1所示。

图1 软件总体架构图Fig.1 Overall structure diagram of software

计量模块全部在DSP中运行,软件上采用简单的单片机系统;其它内核模块、主应用模块、扩展应用模块在ARM中运行,采用嵌入式实时操作系统。电能表上电后,内核模块率先启动运行,完成硬件初始化后,发送启动命令给DSP中的计量模块使其先行运行起来,之后启动ARM的主应用模块及扩展应用模块。鉴于本文主要探讨的是嵌入式RTOS的研究与应用,故以下对计量模块的内容不进行细述。

在进行具体软件设计之前,需要先选择合适的嵌入式RTOS。目前业内广泛使用的嵌入式RTOS有很多,典型如 VxWorks、uClinux、QNX、uC/OS-II、eCOS等[5-6],需要结合硬件平台、电能表的功能及性能要求等方面来综合考虑与选择,主要考虑如下指标:

(1)任务实时调度管理。要求具备优良的任务调度能力,能够精确分配任务执行时间,并根据优先级要求合理调配不同任务的执行顺序;

(2)同步与通信机制。要求具备丰富的进程间通信机制,在保证各任务独立执行的同时,能够精确控制任务间的同步与数据交互;

(3)内存管理。选择具备支持MMU(存储管理单元)的操作系统,提供内存保护,将有效保证程序的可靠性和系统的稳定性。

综合上述要求,本设计选用的嵌入式RTOS为VxWorks,该操作系统是业内公认的实时性最好的嵌入式RTOS,以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,在电力设备监测、电力设备通信等场合也得到了广泛的应用[7-8]。

基于以上软件总体架构以及所选择的嵌入式RTOS,以下详细说明各模块的内部软件实现细节,重点是阐述嵌入式RTOS在解决电能表复杂功能情况下如何去保证可靠性与灵活性的问题。

2 内核模块设计

2.1 内核模块划分

内核模块是整个软件系统运行的中枢,本设计方案中内核模块实际整合了多个基础模块,包括引导模块、操作系统内核、应用程序管理模块、驱动支持模块,这些基础模块均与硬件平台相关,在产品的生命周期中,不论应用功能如何升级或扩展,这部分都是可以基本上维持不变的。各模块说明如下:

(1)引导模块。采用uboot实现,完成上电初始化,并引导启动操作系统;

(2)操作系统内核。提供软件系统运行基础的内存管理、任务调度、中断处理等功能,通过对Vx-Works内核裁剪得到;

(3)驱动支持模块。提供对硬件资源的访问接口,也就是俗称的板级支持包(BSP),供其他模块访问底层硬件资源的接口;

(4)应用程序管理模块。启动计量模块、主应用模块、扩展应用模块,并监视这三个模块的运行情况,当发现异常后重启对应模块。

内核模块的上述设计方法,将软件系统最底层的内容彻底独立出来,其带来的好处是,一方面,通过软件分层,将底层的任务调度、硬件驱动等封装起来,避免上层应用程序误操作带来的风险;另一方面,内核模块作为一个整体与硬件平台绑定,在单独升级应用程序时该模块并不需要更新,极大降低了程序维护的复杂度。

鉴于篇幅,以下仅对操作系统内核组件裁剪、驱动支持模块的设计细节进行详细说明。

2.2 内核组件裁剪

VxWorks内部自带丰富的软件资源,除包含任务调度管理、任务间通信、内存管理、IO系统等操作系统基础组件外,还包含网络通信、文件系统、常见硬件驱动等高级组件,可以根据实际情况进行裁剪[9]。对于电能表而言,受上电启动时间的限制,裁剪后的目标执行文件应尽可能小,所需裁剪内容应尽可能更多,但裁剪太多又可能导致系统不稳定。根据本设计的要求,裁剪内容及裁剪后的大小见表1所示。

表1 VxWorks组件裁剪表Tab.1 Exclusions of VxWorks components

经实测,裁剪后的VxWorks目标执行文件,在300 MHz主频ARM芯片上加载启动时间为1 s,满足设计要求。且经长时间运行实测,系统运行稳定。

上述内容还可以根据实际需要进行进一步裁剪,例如一般电能表并不需要网络通信,此时可以裁剪掉网络组件,以及硬件类组件中的PHY、MII等,使整个内核容量更小。

2.3 驱动接口设计

驱动支持模块包含了本设计电能表所需的各种硬件接口,为应用程序访问硬件设备起到桥梁作用。每个硬件接口分配一个设备描述符,具备open、read、write、ioctl几个控制接口,分别用于打开、读取、写入、配置操作[10]。本设计所包含的设备及其说明见表2所示。

表2 驱动设备表Tab.2 List of driver devices

3 主应用模块设计

3.1 主应用模块划分

主应用模块完成电能表所有基本功能,包括各种电能的计算、需量计算、冻结、事件记录、数据存储、负荷记录等。根据VxWorks的特点,将本模块分为数据计算、参数管理、数据存储、通信、显示等几个子模块,每个子模块通过一个独立的实时任务进程(real time process,简称RTP)来实现,每个进程的程序运行是相对独立的,相互之间通过进程间通信的方式来交换数据[11]。

(1)数据计算模块是所有数据来源的基础,通过控制表2所述“/meas”设备来读取计量模块数据,获取总及分相的正向有功、反向有功、正向无功、反向无功等基础电能数据,以及当前电压、电流、功率、相角、频率等基础实时数据;然后,利用这些数据进行更深层次的计算处理,利用基础电能数据计算得到组合有功电能、组合无功电能、四象限无功电能以及各费率电能,利用基础实时数据进行需量计算、事件记录、负荷记录的分析处理,并通过操作系统的时钟来控制结算、冻结数据的数据归集汇总。数据计算模块所生成的数据,一方面直接提供给通信、显示模块进行对外呈现,另一方面提供给数据存储模块进行固化保存;

(2)参数管理模块提供对配置参数的集中管理,包括上电初始阶段从数据存储模块获取原始值,以及运行期间接受通信模块的参数修改命令,将修改后的参数传递给数据存储模块固化保存;

(3)数据存储模块集中管理所有针对非易失性存储器的读写操作,响应数据计算模块、参数管理模块的存储要求,操作表2中的“/spifram”与“/spiflash”设备,完成电能、需量、事件记录、冻结、负荷记录等的存储管理;

(4)通信、显示模块与常规非操作系统的软件设计差异不大,只不过通信的收发操作需要使用表2中的“/comm”设备来完成,按键监测、液晶显示分别使用“/keyboard”、“/lcd”设备来完成。

上述模块划分方法带来的好处是:其一,将复杂功能分解为简单模块,降低软件难度;其二,每个模块可以独立开发维护,在完全不影响其它模块的前提下可以单独升级局部模块的程序;最后,在扩展新功能时,旧有模块无需做任何更改。这些优势从设计源头降低了软件出错的风险,提高了软件的健壮性、可靠性。

3.2 模块执行流程

基于操作系统的应用程序设计与常规单片机系统不同,其各个模块的任务是独立运行的,通过操作系统的任务调度机制来实现任务的切换。

图2 数据计算模块流程图Fig.2 Flowchart of data calculation module

模块的流程设计包括两种典型的方式,定时轮询与中断触发。以数据计算模块为例,采用定时轮询方式,流程见图2所示,该模块完成数据初始化、注册看门狗后,即进入定时等待状态,每1 s定时时间到后依次进行各项数据计算处理,处理完后再等待新的1 s定时,如此循环反复。

中断触发方式以数据存储模块为例,流程图见图3所示。常规情况下模块处于等待状态,当收到外部存储命令后才去执行存储操作。

图3 数据存储模块流程图Fig.3 Flowchart of data storage module

上述两种典型流程设计方式,可以根据实际功能要求进行选择。对于周期性、实时性要求低的任务,可选择定时轮询方式;对于突发性、实时性要求高的任务,可选择中断触发方式。

3.3 模块间数据交互

从上一节执行流程可知,采用嵌入式RTOS后,各模块任务的运行相互独立,要交互数据,就需要使用进程间同步与通信来完成。VxWorks支持的通信方式有共享内存、消息队列、信号量、互斥锁、管道等[11],根据本项目模块之间数据交换的特点,本文的设计采用了共享内存+消息队列的方式来实现,见图4所示。图中,“/sd_meas”、“/sd_params”为共享内存,前者存放数据计算模块生成的电能、瞬时测量数据,后者存放参数管理模块处理后的参数数据;“/msg_meas”、“/msg_params”为消息队列,分别用作“/sd_meas”与“/sd_params”数据的通知处理。具体程序实现时,采用先写入共享内存,再通过消息队列通知的方式,以实现数据的异步处理。消息队列内带参数,用于对消息的内部细节进行补充说明,例如图3中的“收到数据存储命令”,其命令即采用消息队列的方式,其参数中包含了要存储的数据类型。

图4 进程间数据通信示意图Fig.4 Schematic diagram of inter-process data communication

4 扩展应用模块设计

上述主应用模块涵盖了标准所要求的智能电能表的基本功能,而且由于采用模块化的设计方法,也方便维护升级,但还需要解决如下问题:

(1)扩展通信模块的软件实现。电能表可扩展无线、蓝牙、光纤等多种通信模块,每一种通信模块对应的程序不一样,目前一般采用将各种通信方式程序糅合在一起,通过参数选择对应通信程序的方式,使整个软件系统非常复杂;

(2)定制化的软件功能。随着互动用电要求的提高,用户需要选择定制的数据服务,或由于地区上的差异,需要软件上实现特殊的功能。如果针对每一种定制化需求开发一版程序,将导致大量人力物力浪费,且软件本身因要兼容太多的情况,使得软件质量不可控。

为了解决上述灵活性问题,本文的研究利用了嵌入式RTOS多任务机制、以及可以单独加载模块程序的特点,设计了扩展应用模块。见图1所示,扩展应用模块与主应用模块、内核模块相连,一方面,该模块是对主应用模块的补充,可以利用其提供的数据,进行新的运算处理,得到新的用户所需要的数据,或反向将外部数据更新到主应用模块中;另一方面,该模块可以操作底层内核模块的资源,控制硬件实现对外接口功能。

上述软件模块上的隔离仍然不够彻底,为了充分保证扩展应用模块的独立性,需要实现物理介质层次上的隔离。具体做法是,该模块采用单独编译、单独下载、单独存储的方式。见图5所示,扩展应用程序固化在0x500000~0x600000的1 MB的空间内,与内核模块、计量模块、主应用模块完全隔离。

图5 程序存储空间分配Fig.5 Storage space allocation of software parts

当不需要扩展通信模块、或不需要定制化软件功能时,扩展应用模块部分为空;针对每一种扩展通信方式,开发单独的扩展应用模块,根据实际硬件配置自由选择下载;当需要定制化软件功能时,可以根据实际需求开发单独的扩展应用程序。采用这种实现方式,既保持了传统意义软件功能的可靠性,又兼顾到了新技术、新需求应用的灵活性。

5 对比与测试

将本文设计的基于嵌入式RTOS的智能电能表与基于单片机系统的进行优势对比,列举几个典型项目见表3所述。对比可知,采用嵌入式RTOS在设计源头上提升了软件可靠性与应用灵活性。

表3 嵌入式RTOS的设计优势Tab.3 Design superiorities of embedded RTOS

以下通过几个典型测试用例进一步说明嵌入式RTOS的优势:

(1)通过在局部软件模块中注入故障,测试其自动恢复的能力。软件运行受环境条件的影响很大,测试时很难全部覆盖,当特定条件发生时可能存在程序“跑飞”现象。通过在其中一个模块(以通信模块为例)强行注入软件故障来测试。对比测试可知,采用本文设计的电能表,当故障发生时,其它模块功能仍运行正常,例如显示仍可正常查看,计量、测量数据正常,一段时间之后通信模块被单独重启(通过软件看门狗),此时如软件故障的条件消失,则通信模块恢复正常运行,否则继续重启,在此期间其它任务均不受影响;采用单片机系统实现的电能表,故障发生时,程序卡死,显示无法操作,一段时间后整机重启(通过硬件看门狗),在此期间计量、测量功能均失效;

(2)验证测试新任务单独加载与更新时,其它现有任务不受影响。具体测试方法是,编写程序在初始化时先不加载某程序模块,程序运行后通过rtpS-pawn命令在控制台再启动该模块,测试加载期间其它任务功能均不受影响。这一点在单片机系统中是无法实现的。

6 结束语

本文提出了一种基于嵌入式RTOS的电能表软件设计方案,将整个电能表软件划分为内核模块、计量模块、主应用模块、扩展应用模块几个独立的模块,结合电能表的特点,将内核模块进行精简化设计,并采用模块化、层次化的设计思路,使电能表内部软件实现更加合理、有效。采用这种设计方式,既保证了电能表核心功能的稳定、可靠性,同时也兼顾了软件功能易于扩展的灵活性。这些设计方法对于提升电能表在功能复杂情况下的软件可靠性、解决特殊应用场合的灵活性等方面提供了新的思路,并具有一定的参考价值。

猜你喜欢

电能表嵌入式计量
巧数电能表
《化学分析计量》2020年第6期目次
认识电能表
关注日常 计量幸福
搭建基于Qt的嵌入式开发平台
计量自动化在线损异常中的应用
嵌入式软PLC在电镀生产流程控制系统中的应用
基于因子分析的人力资本计量研究
电能表自动化检定机器人可靠挂卸表方案设计与实现
基于MSP430+ATT7022B的三相三线多回路多功能电能表的研究