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