韓路平 衛(wèi)蒙
摘 要: 為了解決自動化車間生產(chǎn)過程中大量實(shí)時(shí)數(shù)據(jù)的保存、處理和管理等問題,設(shè)計(jì)了生產(chǎn)過程數(shù)據(jù)管理系統(tǒng)。使用ARM WindowsCE系統(tǒng)的eVC開發(fā)了該系統(tǒng),利用嵌入式數(shù)據(jù)庫SQLite3及多線程技術(shù),實(shí)現(xiàn)了對工業(yè)生產(chǎn)的有效監(jiān)控,達(dá)到了精細(xì)化和精確化管理的目的,提高了產(chǎn)品質(zhì)量。
關(guān)鍵詞: 嵌入式系統(tǒng); 自動化生產(chǎn); 數(shù)據(jù)庫; 多線程; 數(shù)據(jù)總線
中圖分類號:TP29 文獻(xiàn)標(biāo)志碼: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 引言
工業(yè)生產(chǎn)現(xiàn)場經(jīng)歷了無數(shù)記錄、人工記錄數(shù)據(jù)、自動化記錄數(shù)據(jù)和實(shí)時(shí)記錄數(shù)據(jù)等幾個發(fā)展階段,隨著數(shù)據(jù)量的不斷增加和處理復(fù)雜度的不斷提高,人們逐漸引入了數(shù)據(jù)庫,國內(nèi)的科研機(jī)構(gòu)通過研究推出的嵌入式數(shù)據(jù)庫有方舟公司Noahbase和人大金倉kingbase等[1-3]。當(dāng)前常用的嵌入式數(shù)據(jù)庫有三種:EDB、Berkeley DB、SQLite。其中SQLite是一款專用于嵌入式系統(tǒng)的輕量型C語言庫,實(shí)現(xiàn)了獨(dú)立、可嵌入、零配置的SQL數(shù)據(jù)庫。使用SQLite時(shí)不用安裝相應(yīng)的驅(qū)動,使用特定的C函數(shù)即可實(shí)現(xiàn)對數(shù)據(jù)庫的各種操作[4]。本系統(tǒng)采用 SQLilte3作為數(shù)據(jù)庫, 設(shè)計(jì)數(shù)據(jù)庫實(shí)現(xiàn)故障記錄、參數(shù)修改記錄和實(shí)時(shí)數(shù)據(jù)記錄的存儲和查詢,具有操作方便、查詢速度快的優(yōu)點(diǎn)[5-6]。
1 自動化生產(chǎn)車間的構(gòu)成
自動化生產(chǎn)車間,主要由執(zhí)行機(jī)構(gòu)、控制系統(tǒng)和上位系統(tǒng)機(jī)構(gòu)成[7],其中下位機(jī)由多個相對獨(dú)立的控制系統(tǒng)組成,每個控制系統(tǒng)控制若干個執(zhí)行機(jī)構(gòu),每個執(zhí)行機(jī)構(gòu)又由多個動力系統(tǒng)構(gòu)成,各個控制系統(tǒng)來控制各自的執(zhí)行機(jī)構(gòu)進(jìn)行生產(chǎn)運(yùn)作;上位機(jī)系統(tǒng)主要由參數(shù)設(shè)置模塊、數(shù)據(jù)采集模塊、數(shù)據(jù)管理模塊、圖表分析模塊和通信模塊構(gòu)成[8-9]。如圖1所示。
1.1 下位機(jī)系統(tǒng)的構(gòu)成
下位機(jī)主要由倉管系統(tǒng),物料傳輸系統(tǒng),物料加工系統(tǒng),故障自動修復(fù)系統(tǒng),質(zhì)量監(jiān)測系統(tǒng),產(chǎn)品包裝系統(tǒng)組成[10]。在各系統(tǒng)間根據(jù)不同的工作特點(diǎn)通過CAN總線或RS485總線進(jìn)行通信,來達(dá)到各系統(tǒng)之間配合生產(chǎn)的目的。如物料加工系統(tǒng)在物料即將用完時(shí),向倉管系統(tǒng)發(fā)送加料請求,由倉管系統(tǒng)將指定的物料加載到傳輸系統(tǒng),然后由傳輸系統(tǒng)將物料運(yùn)放至物料加工系統(tǒng)的指定位置[11]等。
控制系統(tǒng)的應(yīng)用大大提高了各個模塊的生產(chǎn)效率,降低了工人的勞動強(qiáng)度,及時(shí)的故障修復(fù)功能和自動化的質(zhì)量檢測系統(tǒng)將大大的提高產(chǎn)品的質(zhì)量[12]。
1.2 上位機(jī)系統(tǒng)的構(gòu)成
上位機(jī)主要由通信模塊,人機(jī)交互界面,數(shù)據(jù)庫,以及各類數(shù)據(jù)分析的圖表構(gòu)成[13]。根據(jù)項(xiàng)目系統(tǒng)多和主從分類的特點(diǎn),上位機(jī)和下位機(jī)之間采用雙總線通信方式來確保系統(tǒng)的高效可靠性。對于只接收命令不上傳數(shù)據(jù)的下位機(jī)系統(tǒng)我們用一主多從的RS485總線進(jìn)行通信;對于既要接收數(shù)據(jù)又要發(fā)送實(shí)時(shí)數(shù)據(jù)的下位機(jī)系統(tǒng)我們采用多主的CAN總線來完成數(shù)據(jù)傳輸[14]。
上位機(jī)通過命令和參數(shù)設(shè)置界面,設(shè)置好有關(guān)數(shù)據(jù)并保存至數(shù)據(jù)庫中,以便下次直接提取下發(fā)和歷史查詢,然后通過向下位機(jī)系統(tǒng)下發(fā)命令幀來完成對下位機(jī)的控制,通過下發(fā)數(shù)據(jù)幀來設(shè)置生產(chǎn)參數(shù),同時(shí)結(jié)合接收來自下位機(jī)的實(shí)時(shí)數(shù)據(jù)來實(shí)現(xiàn)對現(xiàn)場機(jī)器狀態(tài)和生產(chǎn)過程實(shí)時(shí)監(jiān)控的目的[15]。在自動化的生產(chǎn)車間,能夠?qū)?shí)時(shí)數(shù)據(jù)做有效、可靠的分析和處理,將有助于工作人員評估產(chǎn)品質(zhì)量,合理安排產(chǎn)量和換班時(shí)間,以及對生產(chǎn)設(shè)備的運(yùn)行情況進(jìn)行有效分析。因此,高效的數(shù)據(jù)管理是必不可少的要素,采用SQLite嵌入式數(shù)據(jù)庫。
2 SQLite嵌入式數(shù)據(jù)庫在ARM-Windows CE上移植和應(yīng)用
2.1 SQLite數(shù)據(jù)庫的特點(diǎn)
SQLite嵌入式數(shù)據(jù)庫可以直接移植到其他的軟件中,而且都是通過API來完成對數(shù)據(jù)的所有操作,而不需要對某種語言進(jìn)行解析;通過線程可以對系統(tǒng)的請求在第一時(shí)間做出響應(yīng);靈活性強(qiáng),支持多種開發(fā)平臺,預(yù)留有靈活的開發(fā)接口;可以在很多移動設(shè)備上使用;能夠在較小的空間上完成對大規(guī)模存儲空間數(shù)據(jù)的管理[16]。
SQLite數(shù)據(jù)庫都是按照順序逐一執(zhí)行的進(jìn)行各種操作。頂層是標(biāo)記處理器(Tokenize)和分析器(Parser)。SQLite有高度優(yōu)化的代碼生成器,可以快速、高效地生產(chǎn)出代碼。底部經(jīng)過優(yōu)化的B樹有助其運(yùn)行在可調(diào)整的頁面緩沖上時(shí)磁盤查找時(shí)間降低到最小[3-6]。
2.2 SQLite數(shù)據(jù)庫的移植
在eVC中配置SQLite3環(huán)境,首先通過網(wǎng)站獲取SQLite嵌入式數(shù)據(jù)庫開源的sqlit3.c、sqlit3.h、sqlit3.def文件,然后打開evc新建一個“WCE Dynamic-Link Library”工程,并將其命名為sqlite,選擇建立一個空的工程即選擇“An empty Windows CE DLL project”工程,將獲得的源碼中的sqlit3..c sqlit3.h sqlit3.def 文件復(fù)制到該工程文件夾下,在工程的Source Files中添加 sqlit3.c文件,在Header Files中添加sqlite3.h和sqlite3exth兩個文件,將sqlite3.def 文件添加到工程的SourceFile中去 即為 工程/設(shè)置/Link/模塊中,編譯可以生成所需要的sqlite dll文件,同樣將sqlite3.h和sqlite3.lib復(fù)制到新建立的工程的根目錄下,將文件名sqlite3.lib添加到工程/設(shè)置/Link->L對象/模塊中,導(dǎo)入文件sqlite3.h,用語句#include "sqlite3.h"加載到xx.h或者xx.cpp就可以正常使用SQLite數(shù)據(jù)庫了[1-2]。
2.3 數(shù)據(jù)庫建立
數(shù)據(jù)庫主要需要完成對生產(chǎn)參數(shù)設(shè)置信息、界面顯示設(shè)置信息[17]、工廠信息、員工打卡記錄、生產(chǎn)數(shù)據(jù)和報(bào)警數(shù)據(jù)的管理。功能框圖如圖3所示。
依據(jù)庫的庫、表、字段和記錄的層次關(guān)系,來完成數(shù)據(jù)庫的創(chuàng)建和管理任務(wù)。
首先在指定路徑中建立數(shù)據(jù)庫,通過函數(shù)GetModuleFileName()和Left()獲得需要創(chuàng)建數(shù)據(jù)庫文件夾的路徑szPath,并給數(shù)據(jù)庫取名szPath+=L"HLPALL.db",通過函數(shù)sqlite3_open16(szPath,&db)在指定路徑上建立名為HLPALL.DB的嵌入式工程數(shù)據(jù)庫[18]。
在該數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表和它的字段,通過函數(shù)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)來創(chuàng)建。根據(jù)分析處理數(shù)據(jù)的要求,一般將一個系統(tǒng)歸為一個數(shù)據(jù)表,數(shù)據(jù)表的字段除了與生產(chǎn)相關(guān)的各種數(shù)據(jù)外,還需要員工ID號、數(shù)據(jù)ID號、班號和數(shù)據(jù)錄入時(shí)間來區(qū)分每條記錄,方便查詢和運(yùn)算分析。
向指定數(shù)據(jù)表中插入一條記錄,通過執(zhí)行insert into H_LIHEQI values(100,23,0,0,0,0,0,0,0,0,0);獲取指定條件的數(shù)據(jù)通過執(zhí)行select from H_LIHEQI where ID<",GET[0]=sqlite3_column_text(stmt,0)來實(shí)現(xiàn)。
2.4 數(shù)據(jù)庫應(yīng)用問題及解決辦法
第一,對于滿足條件的數(shù)據(jù)進(jìn)行逐行執(zhí)行,這樣一條一條的執(zhí)行數(shù)據(jù),每一次都只執(zhí)行一句,這就需要進(jìn)行一些不必要的數(shù)據(jù)重復(fù)讀取操作,這樣就會耗費(fèi)大量的時(shí)間,使得數(shù)據(jù)來不及處理,容易造成數(shù)據(jù)丟失、耗費(fèi)時(shí)間長等問題。因?yàn)閟qlite是支持事務(wù)處理的,如果你知道你要同步刪除、插入、更新很多數(shù)據(jù),就可以把它們做成一個統(tǒng)一的事務(wù)。通常一次sqlite3_exec就是一次事務(wù),如果要刪除一萬條數(shù)據(jù),sqlite就做了一萬次:開始新事務(wù)->刪除一條數(shù)據(jù)->提交事務(wù)->開始新事務(wù)->…的過程。這個操作是很慢的。因?yàn)闀r(shí)間都花在了開始事務(wù)、提交事務(wù)上??梢园堰@些同類操作做成一個事務(wù),這樣如果操作錯誤,還能夠回滾事務(wù)。事務(wù)的操作沒有特別的接口函數(shù),它就是一個普通的sql語句而已。分別如下:
int TRT;
TRT=sqlite3_exec(db, "begin transaction", 0, 0,
&zErrorMsg); //開始一個事務(wù)
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); //數(shù)據(jù)操作
TRT=sqlite3_exec(db, "insert into DB_A values(110,22,
0,0,0,0); //數(shù)據(jù)操作
TRT=sqlite3_exec(db, "insert into DB_A values(110,23,
0,0,0,0); //數(shù)據(jù)操作
……
TRT=sqlite3_exec(db, "commit transaction", 0, 0,
&zErrorMsg); //提交事務(wù)
TRT=sqlite3_exec(db, "rollback transaction", 0, 0,
&zErrorMsg); //回滾事務(wù)
這樣,數(shù)據(jù)的處理效率就會提高N倍。
第二,數(shù)據(jù)存儲和數(shù)據(jù)處理時(shí)不能做到實(shí)時(shí)更新數(shù)據(jù),出現(xiàn)界面切換緩慢甚至卡死的問題。為此我們使用多線程技術(shù),將數(shù)據(jù)庫的寫和讀放在不同的線程去,這樣就能即時(shí)的完成各種任務(wù),而不需要相互等待。
3 應(yīng)用結(jié)果
從兩方面展示設(shè)計(jì)和應(yīng)用結(jié)果,一方面是數(shù)據(jù)庫的存儲結(jié)果,如圖4所示;另一方面是對數(shù)據(jù)庫數(shù)據(jù)處理的結(jié)果以圖表的方式顯示出來如圖5所示。完成了按照條件進(jìn)行數(shù)據(jù)存儲和數(shù)據(jù)處理。
4 結(jié)束語
系統(tǒng)已經(jīng)完成測試,達(dá)到了各項(xiàng)設(shè)計(jì)要求,在實(shí)際應(yīng)用中,性能良好,數(shù)據(jù)管理可靠性較高。采用SQLite嵌入式數(shù)據(jù)庫,大大降低了系統(tǒng)的內(nèi)存開銷,能夠完成對數(shù)據(jù)的實(shí)時(shí)跟蹤管理任務(wù)。通過對實(shí)時(shí)數(shù)據(jù)庫的數(shù)據(jù)處理和分析從而達(dá)到了對整個生產(chǎn)過程實(shí)時(shí)監(jiān)控的目的,對提高生產(chǎn)效率和提高產(chǎn)品質(zhì)量意義重大。
參考文獻(xiàn)(References):
[1] 王磊,郭順生,李西興,杜百崗,許文祥.基于多Agent的建材裝
備制造企業(yè)智能生產(chǎn)進(jìn)度管控系統(tǒng)研究與應(yīng)用[J].計(jì)算機(jī)集成制造系統(tǒng),2017.23(6):1310-1319
[2] 陳培,申紅明,張會猛,楊永杰.基于ARM的線纜生產(chǎn)監(jiān)控系
統(tǒng)的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2017.40(8):65-68,72
[3] 黎孟雄,郭鵬飛.基于SQLite的數(shù)據(jù)庫原理自主實(shí)驗(yàn)平臺設(shè)
計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2016.33(11):157-160
[4] 張敏.SQLite3數(shù)據(jù)庫在WinCE系統(tǒng)中的應(yīng)用[J]. 工業(yè)控制
計(jì)算機(jī),2017.30(4):92-93
[5] 陳壽宏,侯杏娜,陳林艷,顏學(xué)龍.基于SQLite和SVF的邊界
掃描測試生成設(shè)計(jì)[J].計(jì)算機(jī)測量與控制,2015.23(10):3304-3306
[6] 王耀飛,李林,康衛(wèi),徐新國.實(shí)時(shí)數(shù)據(jù)庫主動計(jì)算的設(shè)計(jì)與實(shí)
現(xiàn)[J].電子技術(shù)應(yīng)用,2014.40(8):133-135,139
[7] 吳孝玲,尹顯明.基于MES的智能生產(chǎn)調(diào)度系統(tǒng)研究與實(shí)現(xiàn)[J].
機(jī)械,2010.37(12):41-44
[8] 包理群,呂登峰,侯志偉.嵌入式數(shù)據(jù)庫在工業(yè)控制系統(tǒng)中的
應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2014.31(2):253-255,292
[9] 王會卿,黃功軍,石愛文.全自動行車及庫區(qū)智能管理系統(tǒng)與
應(yīng)用[J].冶金自動化,2017.41(4):13-17
[10] 王運(yùn).工業(yè)自動化儀表與自動化控制技術(shù)[J].信息記錄材料,
2017.18(4):47-48
[11] 翟桂武,潘濤.煤礦智能生產(chǎn)管理系統(tǒng)的研究與實(shí)[J].煤炭學(xué)
報(bào),2014.39(8):1530-1538
[12] 楊文祥,陳富林.基于Arm-Linux的模塊化控制系統(tǒng)開發(fā)[J].
自動化與儀表,2017.32(1):16-19,33
[13] 張軍,蔣鐵登.利用EVC實(shí)現(xiàn)Pocket PC和工控機(jī)串行通信[J].
計(jì)算機(jī)工程與設(shè)計(jì),2006.12:2160-2161
[14] 王蘇敬,王立德,申萍,劉彪,王永翔.列車用CAN總線應(yīng)用
層協(xié)議研究與實(shí)現(xiàn)[J].北京交通大學(xué)學(xué)報(bào),2008.5:102-106
[15] 張穎超,楊宇峰,葉小嶺,楊樂.基于CAN總線的溫室監(jiān)測系
統(tǒng)的通信設(shè)計(jì)[J].控制工程,2009.16(1):103-106
[16] 林子雨,鄒權(quán),賴永炫,林琛.關(guān)系數(shù)據(jù)庫中的關(guān)鍵詞查詢結(jié)
果動態(tài)優(yōu)化[J].軟件學(xué)報(bào),2014.25(3):528-546
[17] 張敏.基于WinCE系統(tǒng)的界面開發(fā)實(shí)例[J].工業(yè)控制計(jì)算
機(jī),2017.30(3):22-23
[18] 黎孟雄,郭鵬飛.基于SQLite的數(shù)據(jù)庫原理自主實(shí)驗(yàn)平臺設(shè)
計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2016.33(11):157-160