SQLite数据库在力矩限制器中的应用
SQLite数据库在力矩限制器中的应用
王 青 杨凯
长沙中联重科
摘要:本文主要结合工程机械中力矩限制器的应用,以wince系统平台为例,阐述了sqlite数据库的特点,以及其在嵌入式环境中的应用。在嵌入式环境中,随着数据管理要求的提高,数据库必然会取代传统的数据操作模式。而轻量级数据库sqlite的简单高效和跨平台的特性使其非常适合这种应用需求。
关键词:sqlite 力矩限制 嵌入式
引言
力矩限制器为起重机的安全保护系统的核心,能对起重设备进行实时记录和监控,实现过载保护和过抑保护,确保起重机在安全范围内工作,是保障设备安全,人身安全的重要设备。随着起重机的技术的发展,大吨位起重机的相继出现,工况变的越来越复杂,起重量表的数据量变的越来越庞大,对于力矩限制器的数据管理和操作提出了更高的要求。
嵌入式数据库SQLite
嵌入式数据库的选择
本项目主要基于Windows CE操作系统设计开发一款适合中大吨位起重机的力矩限制系统。而力矩控制器中不可缺少对数据的存储和管理。目前在WinCE系统中常用的数据的存储和管理方法有两种。一是直接基于WinCE的文件系统提供的API接口实现对数据的读写管理,第二种是采用数据库方式管理数据。数据库方式与文件系统相比在进行数据存储管理时有巨大优势。windows CE 系统以独占的方式访问文件,所以第一种方式IO开销大,访问效率比较低,数据的共享性和应用软件的可重用性较差,但使用简单,适合小数据量的应用。数据库方式可以使得数据和程序操作相互独立,数据库可以通过事务来进行调度与并发控制,可以有效方便的对数据进行存取,修改,查询等共享操作,同时借助于数据库所具有的安全性检验、完整性检查等多种安全措施,使得系统有较好的整体性能。
在WinCE系统中常用的嵌入式数据库有三种。一是系统自带的数据库。主要面对需要存储的数据量较小,数据结构相对简单的应用,例如系统的动态配置文件,则使用起来非常合适。第二种是Microsoft 为Windows CE 平台开发的嵌入式数据库SQL Server CE。表一所示,列出了WinCE 自带数据库与SQLCE 数据库部分功能的对比。
表1 WinCE自带数据库与SQLCE数据库功能对照表
第三种是使用开源的嵌入式数据库SQlite 管理数据。SQLite 与SQL Server CE 某些方面相比SQLite 占用很少的存储器空间,约100KB-300KB;而SQL Server CE 则大致占用1MB-3MB,这对资源极其珍贵的嵌入式系统来说无疑是个挑战。SQLite 与SQL ServerCE 都采用标准的SQL 语句,SQLite 使用非常简单,无需安装管理,一般只需要带上一个动态库就可以使用,数据库文件独立,只需拷贝该文件就可以完成备份工作,而基本的数据操作上只需要掌握3 个核心API 函数就可以实现,而SQL Server CE 相对复杂,需要充分理解数据库引擎和掌握高级数据库接口组件ADOCE 的编程。另外SQLite 完全独立,有良好的移植性;SQL Server CE 专为Windows CE 平台开发,没法移植到其他嵌入式平台上。两个数据库的性能测试对比,多次实验测得SQLite插入5000条数据的用时在4500到5000左右,而SQLCE是在23000到25000左右,单位ms。所以在性能上大概可以看出SQLite是SQLCE的3到4倍左右。
表2 数据库写入记录时间比较示意图
Sqlite支持大多数SQL92 标准包括索引、限制、触发和查看,不支持外键,但支持原子的、一致的、独立和持久 (ACID) 的事务,这一点能够保证即使在系统崩溃或断电时数据的完整性和有效性。而工程机械一般工作在比较恶劣的条件下,对数据库的稳定有效有比较高的要求。综上所述,因此在本项目开发中选用sqlite数据库实现数据的管理操作。
2.2SQLite的体系结构
SQLite由被组织在3个子系统中的8个独立的模块组成,如图1所示。这个模型将查询过程划分为几个任务,在体系结构栈的顶部编译查询语句,在中部执行它,在底部处理操作系统的存储和接口。
图1 SQLite的体系结构
SQL语句通过接口被送到高效的SQL命令编译器,由标记处理器(Tokenizer)分解成各个标志符分析器(parser),分析器重新组合标识符并调用代码生成器(code generator)生成虚拟机器码,交由给虚拟机(virtual machine)执行,完成SQL语句指定的任务,在后端,数据库按照B树(B tree)的形式存储在磁盘上,通过可调整的页面缓冲(pager)得到对数据的快速查找和存储。Sqlite还使用了一个抽象层接口(OS interface)实现了与不同操作系统的对接。
SQLite在力矩限制器系统中的应用
力矩限制器系统的方案设计
本系统的整体结构如图2所示,数据采集和通信模块位于系统底层,通过can总线采集所需的各传感器数据处理后传送到力矩计算模块。力矩计算模块根据得到的数据计算当前实际载荷,比较当前额定载荷,根据报警策略,做出对应的响应。数据库需要为多个系统功能单元提供数据接口,系统初始化时需从数据库中读取初始设置数据,初始化完成后,进入力矩控制流程,需从数据库中读取当前工况的额定起重量,如有超载,还需将当前超载记录写入数据库中。因此在本系统中数据管理模块可分为三个子系统,其中系统配置子系统,存储和管理与系统设置相关的重要信息,包括系统的安全权限,系统上次工作的设置信息,起重量表子系统存储额定起重性能表数据,报警记录子系统记录系统的异常报警信息,及当前报警状态下的各关键工作参数,如额定载荷,实际载荷,主臂工作角度,拉力值等等,以便为日后故障排查提供依据。
图2系统的整体结构
SQLite查询性能的优化
经过对SQLite的查询优化的分析以及项目中的实践,可以将SQLite的查询优化总结如下。影响查询性能的因素:
对表中行的检索数目,越小越好
排序与否。
是否建立好索引。
查询语句的形式。
因此数据库建立时,应充分考虑到上述因素,使得数据库的查询性能得到最大的发挥。
结语
本文基于起重机力矩限制器开发项目,使用SQLite完成力矩限制器中的数据管理功能,简化了程序的复杂度,提高了运行效率,减少了内存消耗,提高了软件的可靠性,满足了在嵌入式系统中对于数据管理的需要。SQLite的易于使用性可以加快应用程序的开发,并使得小型应用程序能够完全支持复杂的 SQL。由于SQLite的快速高效,稳定可靠和零管理成本,将会在嵌入式系统中的数据管理上得到越来越广泛的应用。
SQLite数据库在力矩限制器中的应用.doc