SQLite嵌入式数据库在自动化生产车间中的应用

2017-12-25 18:48韩路平卫蒙
计算机时代 2017年12期
关键词:多线程数据总线嵌入式系统

韩路平 卫蒙

摘 要: 为了解决自动化车间生产过程中大量实时数据的保存、处理和管理等问题,设计了生产过程数据管理系统。使用ARM WindowsCE系统的eVC开发了该系统,利用嵌入式数据库SQLite3及多线程技术,实现了对工业生产的有效监控,达到了精细化和精确化管理的目的,提高了产品质量。

关键词: 嵌入式系统; 自动化生产; 数据库; 多线程; 数据总线

中图分类号:TP29 文献标志码:A 文章编号:1006-8228(2017)12-42-04

Application of SQLite embedded database in automated production workshop

Han Luping, Wei Meng

(Electronic Engineering of Xi'an Shiyou University, Xi'an, Shaanxi 710065, China)

Abstract: In order to solve the problems of the storage, processing and management of a large number of real-time data in the production process of automated workshop, a data management system for production process is designed. The system is developed with the eVC (eMbedded Visual C++) for ARM WindowsCE, and the embedded database SQLite3 and multi-thread technology are used to realize the effective control of industrial production, so that a precise and accurate management is achieved and the quality of the products is improved.

Key words: embedded system; automated production; database; multi-thread; data bus

0 引言

工业生产现场经历了无数记录、人工记录数据、自动化记录数据和实时记录数据等几个发展阶段,随着数据量的不断增加和处理复杂度的不断提高,人们逐渐引入了数据库,国内的科研机构通过研究推出的嵌入式数据库有方舟公司Noahbase和人大金仓kingbase等[1-3]。当前常用的嵌入式数据库有三种:EDB、Berkeley DB、SQLite。其中SQLite是一款专用于嵌入式系统的轻量型C语言库,实现了独立、可嵌入、零配置的SQL数据库。使用SQLite时不用安装相应的驱动,使用特定的C函数即可实现对数据库的各种操作[4]。本系统采用 SQLilte3作为数据库, 设计数据库实现故障记录、参数修改记录和实时数据记录的存储和查询,具有操作方便、查询速度快的优点[5-6]。

1 自动化生产车间的构成

自动化生产车间,主要由执行机构、控制系统和上位系统机构成[7],其中下位机由多个相对独立的控制系统组成,每个控制系统控制若干个执行机构,每个执行机构又由多个动力系统构成,各个控制系统来控制各自的执行机构进行生产运作;上位机系统主要由参数设置模块、数据采集模块、数据管理模块、图表分析模块和通信模块构成[8-9]。如图1所示。

1.1 下位机系统的构成

下位机主要由仓管系统,物料传输系统,物料加工系统,故障自动修复系统,质量监测系统,产品包装系统组成[10]。在各系统间根据不同的工作特点通过CAN总线或RS485总线进行通信,来达到各系统之间配合生产的目的。如物料加工系统在物料即将用完时,向仓管系统发送加料请求,由仓管系统将指定的物料加载到传输系统,然后由传输系统将物料运放至物料加工系统的指定位置[11]等。

控制系统的應用大大提高了各个模块的生产效率,降低了工人的劳动强度,及时的故障修复功能和自动化的质量检测系统将大大的提高产品的质量[12]。

1.2 上位机系统的构成

上位机主要由通信模块,人机交互界面,数据库,以及各类数据分析的图表构成[13]。根据项目系统多和主从分类的特点,上位机和下位机之间采用双总线通信方式来确保系统的高效可靠性。对于只接收命令不上传数据的下位机系统我们用一主多从的RS485总线进行通信;对于既要接收数据又要发送实时数据的下位机系统我们采用多主的CAN总线来完成数据传输[14]。

上位机通过命令和参数设置界面,设置好有关数据并保存至数据库中,以便下次直接提取下发和历史查询,然后通过向下位机系统下发命令帧来完成对下位机的控制,通过下发数据帧来设置生产参数,同时结合接收来自下位机的实时数据来实现对现场机器状态和生产过程实时监控的目的[15]。在自动化的生产车间,能够对实时数据做有效、可靠的分析和处理,将有助于工作人员评估产品质量,合理安排产量和换班时间,以及对生产设备的运行情况进行有效分析。因此,高效的数据管理是必不可少的要素,采用SQLite嵌入式数据库。

2 SQLite嵌入式数据库在ARM-Windows CE上移植和应用

2.1 SQLite数据库的特点

SQLite嵌入式数据库可以直接移植到其他的软件中,而且都是通过API来完成对数据的所有操作,而不需要对某种语言进行解析;通过线程可以对系统的请求在第一时间做出响应;灵活性强,支持多种开发平台,预留有灵活的开发接口;可以在很多移动设备上使用;能够在较小的空间上完成对大规模存储空间数据的管理[16]。

SQLite数据库都是按照顺序逐一执行的进行各种操作。顶层是标记处理器(Tokenize)和分析器(Parser)。SQLite有高度优化的代码生成器,可以快速、高效地生产出代码。底部经过优化的B树有助其运行在可调整的页面缓冲上时磁盘查找时间降低到最小[3-6]。

2.2 SQLite数据库的移植

在eVC中配置SQLite3环境,首先通过网站获取SQLite嵌入式数据库开源的sqlit3.c、sqlit3.h、sqlit3.def文件,然后打开evc新建一个“WCE Dynamic-Link Library”工程,并将其命名为sqlite,选择建立一个空的工程即选择“An empty Windows CE DLL project”工程,将获得的源码中的sqlit3..c sqlit3.h sqlit3.def 文件复制到该工程文件夹下,在工程的Source Files中添加 sqlit3.c文件,在Header Files中添加sqlite3.h和sqlite3exth两个文件,将sqlite3.def 文件添加到工程的SourceFile中去 即为 工程/设置/Link/模块中,编译可以生成所需要的sqlite dll文件,同样将sqlite3.h和sqlite3.lib复制到新建立的工程的根目录下,将文件名sqlite3.lib添加到工程/设置/Link->L对象/模块中,导入文件sqlite3.h,用语句#include "sqlite3.h"加载到xx.h或者xx.cpp就可以正常使用SQLite数据库了[1-2]。

2.3 数据库建立

数据库主要需要完成对生产参数设置信息、界面显示设置信息[17]、工厂信息、员工打卡记录、生产数据和报警数据的管理。功能框图如图3所示。

依据库的库、表、字段和记录的层次关系,来完成数据库的创建和管理任务。

首先在指定路径中建立数据库,通过函数GetModuleFileName()和Left()获得需要创建数据库文件夹的路径szPath,并给数据库取名szPath+=L"HLPALL.db",通过函数sqlite3_open16(szPath,&db)在指定路径上建立名为HLPALL.DB的嵌入式工程数据库[18]。

在该数据库中创建数据表和它的字段,通过函数create table H_LIHEQI([id] integer PRIMARY KEY autoincrement, [No] char(1), [logtime] TIMESTAMP default (datetime ('now', 'localtime')), [RY] char(1),[NJ] integer, [CS] char(1), [GS] integer)来创建。根据分析处理数据的要求,一般将一个系统归为一个数据表,数据表的字段除了与生产相关的各种数据外,还需要员工ID号、数据ID号、班号和数据录入时间来区分每条记录,方便查询和运算分析。

向指定数据表中插入一条记录,通过执行insert into H_LIHEQI values(100,23,0,0,0,0,0,0,0,0,0);获取指定条件的数据通过执行select from H_LIHEQI where ID<",GET[0]=sqlite3_column_text(stmt,0)来实现。

2.4 数据库应用问题及解决办法

第一,对于满足条件的数据进行逐行执行,这样一条一条的执行数据,每一次都只执行一句,这就需要进行一些不必要的数据重复读取操作,这样就会耗费大量的时间,使得数据来不及处理,容易造成数据丢失、耗费时间长等问题。因为sqlite是支持事务处理的,如果你知道你要同步删除、插入、更新很多数据,就可以把它们做成一个统一的事务。通常一次sqlite3_exec就是一次事务,如果要删除一万条数据,sqlite就做了一万次:开始新事务->删除一条数据->提交事务->开始新事务->…的过程。这个操作是很慢的。因为时间都花在了开始事务、提交事务上。可以把这些同类操作做成一個事务,这样如果操作错误,还能够回滚事务。事务的操作没有特别的接口函数,它就是一个普通的sql语句而已。分别如下:

int TRT;

TRT=sqlite3_exec(db, "begin transaction", 0, 0,

&zErrorMsg); //开始一个事务

TRT=sqlite3_exec(db, "insert into DB_A values(100,20,

0,0,0,0); //第一句

TRT=sqlite3_exec(db, "insert into DB_A values(100,21,

0,0,0,0); //数据操作

TRT=sqlite3_exec(db, "insert into DB_A values(110,22,

0,0,0,0); //数据操作

TRT=sqlite3_exec(db, "insert into DB_A values(110,23,

0,0,0,0); //数据操作

……

TRT=sqlite3_exec(db, "commit transaction", 0, 0,

&zErrorMsg); //提交事务

TRT=sqlite3_exec(db, "rollback transaction", 0, 0,

&zErrorMsg); //回滚事务

这样,数据的处理效率就会提高N倍。

第二,数据存储和数据处理时不能做到实时更新数据,出现界面切换缓慢甚至卡死的问题。为此我们使用多线程技术,将数据库的写和读放在不同的线程去,这样就能即时的完成各种任务,而不需要相互等待。

3 应用结果

从两方面展示设计和应用结果,一方面是数据库的存储结果,如图4所示;另一方面是对数据库数据处理的结果以图表的方式显示出来如图5所示。完成了按照条件进行数据存储和数据处理。

4 结束语

系统已经完成测试,达到了各项设计要求,在实际应用中,性能良好,数据管理可靠性较高。采用SQLite嵌入式数据库,大大降低了系统的内存开销,能够完成对数据的实时跟踪管理任务。通过对实时数据库的数据处理和分析从而达到了对整个生产过程实时监控的目的,对提高生产效率和提高产品质量意义重大。

参考文献(References):

[1] 王磊,郭顺生,李西兴,杜百岗,许文祥.基于多Agent的建材装

备制造企业智能生产进度管控系统研究与应用[J].计算机集成制造系统,2017.23(6):1310-1319

[2] 陈培,申红明,张会猛,杨永杰.基于ARM的线缆生产监控系

统的设计[J].现代电子技术,2017.40(8):65-68,72

[3] 黎孟雄,郭鹏飞.基于SQLite的数据库原理自主实验平台设

计[J].实验技术与管理,2016.33(11):157-160

[4] 张敏.SQLite3数据库在WinCE系统中的应用[J]. 工业控制

计算机,2017.30(4):92-93

[5] 陈寿宏,侯杏娜,陈林艳,颜学龙.基于SQLite和SVF的边界

扫描测试生成设计[J].计算机测量与控制,2015.23(10):3304-3306

[6] 王耀飞,李林,康卫,徐新国.实时数据库主动计算的设计与实

现[J].电子技术应用,2014.40(8):133-135,139

[7] 吴孝玲,尹显明.基于MES的智能生产调度系统研究与实现[J].

机械,2010.37(12):41-44

[8] 包理群,吕登峰,侯志伟.嵌入式数据库在工业控制系统中的

应用[J].计算机应用与软件,2014.31(2):253-255,292

[9] 王会卿,黄功军,石爱文.全自动行车及库区智能管理系统与

应用[J].冶金自动化,2017.41(4):13-17

[10] 王运.工业自动化仪表与自动化控制技术[J].信息记录材料,

2017.18(4):47-48

[11] 翟桂武,潘涛.煤矿智能生产管理系统的研究与实[J].煤炭学

报,2014.39(8):1530-1538

[12] 杨文祥,陈富林.基于Arm-Linux的模块化控制系統开发[J].

自动化与仪表,2017.32(1):16-19,33

[13] 张军,蒋铁登.利用EVC实现Pocket PC和工控机串行通信[J].

计算机工程与设计,2006.12:2160-2161

[14] 王苏敬,王立德,申萍,刘彪,王永翔.列车用CAN总线应用

层协议研究与实现[J].北京交通大学学报,2008.5:102-106

[15] 张颖超,杨宇峰,叶小岭,杨乐.基于CAN总线的温室监测系

统的通信设计[J].控制工程,2009.16(1):103-106

[16] 林子雨,邹权,赖永炫,林琛.关系数据库中的关键词查询结

果动态优化[J].软件学报,2014.25(3):528-546

[17] 张敏.基于WinCE系统的界面开发实例[J].工业控制计算

机,2017.30(3):22-23

[18] 黎孟雄,郭鹏飞.基于SQLite的数据库原理自主实验平台设

计[J].实验技术与管理,2016.33(11):157-160

猜你喜欢
多线程数据总线嵌入式系统
智能电网调度控制系统中的数据总线技术研究
Java并发工具包对并发编程的优化
基于物联网项目驱动的嵌入式系统教学改革的研究与实践
基于ASP.NETSignalR的实时Web功能的实现
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究
基于多线程文件传输关键技术研究与实现
网页爬虫技术的关键技术研究探索
一种基于多线程的高速磁盘镜像算法
现场总线技术在电厂自动化控制中的应用