本文提出了一种基于嵌入式Linux系统的居民用电管理解决方案,系统结构如图1所示。整个居民用电管理系统从结构上看分为4层:第1层为主站,负责远程抄表和控制,为供电部门和小区物业提供数据访问服务;第2层为管理终端,完成数据的远程接收和转发,并对其下的管理终端进行管理;第3层为抄表终端,用于采集现场的电表数据,通过ZigBee协议发送到管理终端;第4层为电表。管理终端操作系统选用嵌入式Linux,同时搭配单片机实现与采集终端之间的无线通信。

  主站和管理终端之间的报文传输遵循《电力负荷管理系统数据传输规约》。根据该规约,主站会向管理终端下达一些参数设置的命令,管理终端在接到命令后应记录下该参数,并根据最新的参数来执行任务;在终端掉电重启后,参数设置依然有效。传统的参数配置基本采用两类方法:配置文件法(如.ini文件)和数据库法。由于本系统需要管理的参数条目不多,使用数据库占用的空间太大;.ini文件虽轻巧但上下文相关,不易维护和管理。XML文件则能克服以上缺点。XML(eXtensible Markup Language)是由万维网协会(W3C)设计,特别为Web应用服务的SGML的一个重要分支。

  它具有简单、开放、高效且可扩充、国际化的特性。XML语言具有很多优秀的特性:

  ①具有严格、良好的层次结构,实现了数据内容和表现形式的分离,使得配置文件结构清晰,可读性强;

  ②具有跨平台、自解释等诸多优点;

  ③现在各种经过测试的、性能优越的XML解释器非常多,避免了自己开发XML解释器,从而可以大大提高软件的生产率和健壮性。在众多的XML解释器中,通过比较选择了Ti-nyXml。

  1 TinyXml的特点

  TinyXml是一个简单、小巧的C++XML解释器。TinyXml具有以下特点:

  ① TinyXml最大的特点就是体积小,速度快,而且只有2个头文件和3个源文件,总共144 KB,十分适合嵌入式系统应用。

  

  ② 功能完善,简单易用,为用户提供了丰富的API。TinyXml是一种基于DOM模型的解释器。基于DOM模型是指在分析时,一次性对整个XML文档进行分析,并在内存中形成对应的树结构;同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,速度往往较慢,但可以给用户提供一个面向对象的访问接口,对用户更为友好。在本项目中需要存放的参数不是很多,因而不会占用系统很多的内存。

  ③ 源码开放,无须付费。开放的源码不仅可以降低产品的生产成本,更为重要的是为产品的维护完善和稳定运行提供了最为彻底的保障。

  ④ 易于移植。TinyXml与操作系统无关,可以方便地移植到各种系统平台。源代码中已经提供了一份Make-file文件,稍加改造就可以移植到我们的嵌入式Linux下。

2 TinyXml在嵌入式Linux下的移植

  (1) 建立arm-linux交叉编译环境

  将TinyXml移植到嵌入式Linux下首先必须搭建交叉编译环境。本文采用嵌入式Linux,版本为2.4.18;安装的交叉编译器arm-linux版本为2.95.3。

  (2) 下载TinyXml源代码

  可以到相关网站(如http://www.grinninglizard.com/tinyxml/index.html)下载TinyXml源代码包。目前可以下载到tinyxml_2_5_2.tar.gz(190 527字节)或者tinyxmL_2_5_2.zip(241 756字节)。这里使用的版本是2.3.4。将下载的代码包解开,生成tinyxml目录。

  (3) 生成动态链接库libtinyxml.so

  首先修改 Makefile文件:

  ① 将"CXX:=g++"改为"CXX:=arm-linux-g++",即将编译器由g++改为交叉编译器。

  ② 将"OUTPUT:=xmltest"改为"OUTPUT:=libtinyxml.so",即将原来生成演示程序改为生成动态链接库libtinyxml.so。

  ③ 将xmltest.cpp从"SRCS:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp"中删除,注释掉"xmltest.o:tinyxml.h tinystr.h"。因为不需要将演示程序添加到动态库中。 ④ 在"${LD}-o$@${LDFLAGS)${OBJS}${LIBS}${EXTRA_LIBS}"语句的"${LD)"后添加"-shared",用于生成动态库。

  修改完成后,执行make命令就可以在当前目录生成需要的动态链接库文件libtinyxml.so,也可以根据需要把TinyXml编译成静态库文件。

  3 TinyXml的应用编程

  为了清晰地描述参数,定义了两个XML文件:一个用来定义配置文件的数据结构和类型;另一个用来存放具体的配置数据。处理方法举例如下:

  对《电力负荷管理系统数据传输规约》的参数设置命令F7,即终端抄表日设置。具体描述如表1所列。

  

  终端抄表日期:D0~D30对应每月1日~31日,置"1"为有效,置"0"为无效。

  数据格式19如表2所列。

  

  对于上述表中的数据,其配置数据的结构和类型的XML文件构建如下(文件名:param.xsd):

  

  对于具体的配置数据XML文件构建如下(文件名param.xml):

  

  

  4 结 论

  本文提出了一种基于嵌入式Linux系统的居民用电管理解决方案,并利用TinyXml实现具体功能,其参数配置方法可以用于其他嵌入式系统。

基于TinyXml的嵌入式Linux相关推荐

  1. linux 挂iscisc存储,基于arm的嵌入式linux操作系统的移植研究-通信与信息系统专业论文.docx...

    基于arm的嵌入式linux操作系统的移植研究-通信与信息系统专业论文 Classified Index: TP316.8 U.D.C: 621.38 Dissertation for the Mas ...

  2. 基于ARM的嵌入式Linux移植真实体验(3)――操作系统

    基于ARM的嵌入式Linux移植真实体验(3)――操作系统 宋宝华[email]21cnbao@21cn.com[/email] 出处:dev.yesky.com 在笔者撰写的<C语言嵌入式系统 ...

  3. 基于AT91SAM9G20构建嵌入式Linux系统

    本文中使用的目标平台AT91SAM9G20是Atmel公司使用ARM926EJ-S处理器内核开发的一块SoC嵌入式微处理器,主频达到400MHz,具有Atmel 先进的外设DMA 和分布式存储器架构, ...

  4. vme嵌入式软件linux,基于VME总线嵌入式Linux应用研究.pdf

    基于VME总线嵌入式Linux应用研究 皋 粮 突 典 悸 猪 笺 诈 虹 切 躲 亦 餐 慌 霄 杆 仗 培 檬 子 厂 饥 捧 铰 吨 卿 娄 承 虚 犯 卒 郧 笛 玉 饭 秋 微 俩 鲤 弹 ...

  5. s3c2440a如何保证嵌入式linux对于虚拟内存的支持?,基于S3C2440的嵌入式LINUX操作系统内核研究【资料学习】.doc...

    学校代码: 11059 学 号:0805070285 Hefei University 毕业论文(设计) BACHELOR DISSERTATION 论文题目: 基于S3C2440的嵌入式 LINUX ...

  6. 基于ARM的嵌入式Linux移植真实体验(1)――基本概念

    基于 ARM 的嵌入式 Linux 移植真实体验( 1 ) ――基本概念 宋宝华   [email]21cnbao@21cn.com[/email] 出处:dev.yesky.com 1. 引言 AR ...

  7. 基于ARM的嵌入式Linux移植真实体验(4)――设备驱动

    基于 ARM 的嵌入式 Linux 移植真实体验( 4 ) ――设备驱动 宋宝华 [email]21cnbao@21cn.com[/email] 出处:dev.yesky.com 设备驱动程序是操作系 ...

  8. 嵌入式linux配置qt,基于qt的嵌入式Linux开发环境搭建

    摘要:本文主要介绍在PC机上搭建基于QT的嵌入式开发环境,其中很多源文件都是开发板自带,需要相应资料的可以评论留下邮箱地址. 版本:交叉编译工具链:GCC 4.7.3  [gcc-linaro-arm ...

  9. 基于ARM的嵌入式Linux开发平台

    在进行嵌入式系统的开发时,首先面临的难题就是如何挑选一个适合自己的开发平台.ARM系列处理器是专门针对嵌入式设备设计的,是目前构造嵌入式系统硬件平台的首选.本文将介绍如何挑选适合实际需要的嵌入式开发平 ...

最新文章

  1. CVPR2020 Oral | 港中文-商汤等开源:自监督场景去遮挡
  2. 一个有意思的项目,快上车!
  3. Kubernetes master节点的高可用配置
  4. 阿里巴巴拿下奥运顶级赞助商
  5. 帝国扩展变量是哪个php,帝国CMS后台系统设置里面的扩展变量是干什么的?
  6. 有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别
  7. DotNetBar.Bar作为容器使用的方法及Text更新原理
  8. 斐波那契堆的java实现
  9. 人工智能 猴子摘香蕉问题
  10. css重复,CSS小课堂之可重复渐变
  11. selenium上传附件的两种方式(普通上传和借助AutoIt识别Windows上传窗口)
  12. outlook邮箱撤回邮件
  13. 20135323符运锦---信息安全系统设计基础第一周学习总结
  14. SQL-count()理解
  15. 容器云的双活与灾备技术
  16. Android Studio中通过SQLiteDatabase类操作数据库
  17. B站怎么就成为了教育类的视频网站了
  18. Wordpress 修改 mysql 插件_WordPress批量查找替换修改文章内容的插件和代码
  19. OmniPlan,一款让你爱不释手的项目管理工具
  20. matlab插值与拟合(命令与示例),matlab插值与拟合(命令与示例)

热门文章

  1. 酷瓜云课堂(腾讯云版)v1.2.7 发布 - 钉钉机器人群通知
  2. 小程序横向scroll-view组件自动滚动到某个view
  3. 15类一面试就知道不靠谱的公司
  4. Console方式下俩台思科路由器间局域网通信配置
  5. Embedded video playback halted;module v4l2src0 reported:Internal data flow error
  6. 360环视辅助驾驶硬件系统方案---OV2715+DS90UB913+DS90UB914+FPGA
  7. Enigma虚拟文件打包使用说明
  8. Nike如何利用邮件营销助力科比退役赛事?
  9. 怼你没商量!Linux之父手删AWS 工程师提交的补丁,表示这是愚蠢的行为,网友:我的快乐又回来了...
  10. mysql5.7 删除复制_mysql5.7实现主从复制以及产生问题记录