鄔依林 , 黃瑛 發表於 2020-12-02 10:07:37
1 引言
本文所論述是數控系統大課題中人機互動的外圍部分子課題中的資料庫開發應用。在數控加工系統中,存在著大量的用戶設定參數、系統參數、坐標軸參數、軸補償參數和刀具特徵參數等數據。在整個生產製造系統中,這些數據不僅對於數控編程人員是必需的,而且對於實時過程控制系統、調度系統、工序處理、庫存管理系統、刀具維護管理系統等也是必需的。這些數據的組織管理方式對數控系統的實時性乃至性能影響很大,因此高性能數控系統必須解決數據的有效性組織管理問題。如果採用直接將數據存放在一個表或字符數組中,數據的修改與維護會相當困難、繁雜,這與數控系統對數據操作要求簡單方便與快捷相悖,因此這種組織管理方式不能滿足數控系統的要求。目前數控加工系統普遍採用的文本文件格式存儲管理數據的方式也存在著實時操作性較差和磁碟空間浪費嚴重的缺點,而實時性和存儲空間兩個要素對於高性能嵌入式數控系統來說卻是至關重要的。因此,在本課題研究中,作者提出在嵌入式Linux環境下的數控系統中採用基於MySQL資料庫管理數據的全新技術解決方案。實踐結果表明:在嵌入式數控系統中採用資料庫進行數據管理,滿足了高性能嵌入式數控系統在實時性和存儲空間方面的要求,提高了系統的速度,極大地改善了系統的性能。本文就嵌入式數控系統中資料庫應用開發的具體實現過程,以及如何將資料庫應用程式向嵌入式數控系統硬體平臺的移植方法和對資料庫進行最小化裁剪的技巧上做了詳細介紹。
由於本課題開發的人機界面是利用GTK+圖形庫,因此系統中採用的基於MySQL資料庫應用開發,需要解決MySQL和GTK+相互融合的問題。GTK+沒有直接操作資料庫的控制項,對資料庫的操作可以採取通過MySQL C API 直接進行,再調用GTK+ 的顯示功能的方法來完成與用戶的交互。
2 資料庫實現
2.1 資料庫的建立
2.1.1創建work資料庫
首先創建一個名稱為work的資料庫,並包含系統需要的所有表,作為根用戶連接到MySQL。具體創建過程如下:
% mysql –uroot mysql; //進入資料庫
mysql》 SET PASSWORD=PASSWORD(『lyw00001』); //為根用戶分配一個口令
mysql》 CREATE DATABASE work ; //創建work資料庫
mysql》 GRANT ALL ON work.* to lyw@localhost IDENTIFIED BY 『lyw00001』;//創建一個名為lyw的用戶
//與根用戶使用同一口令,並為用戶賦予資料庫work的完全訪問權限
% mysql –ulyw –p lyw00001 work; //連接庫
2.1.2創建表
針對基於GTK+庫設計的用戶操作界面有若干個表與之相對應,下面以一個界面為例詳細說明MySQL與GTK+的連接過程。
連接到資料庫之後,就可以向它添加內容了,使用CREATE命令來創建一個名為tbl_amend_amend的表。
CREATE TABLE tbl_amend_amend (
number INT NOT NULL PRIMARY KEY,
shapeh VARCHAR(10),
deleteh VARCHAR(10),
shaped VARCHAR(10),
deleted VARCHAR(10),);
創建一個表後,可使用SQL語句INSERT命令向表中填入數據,但這種方法當數據量大時會耗時很多。因此作者採用批處理模式向表中填入數據的方法,具體作法是:首先創建一個存儲SQL語句的文本文件amend_data.sql,如圖1所示;然後執行SQL語句:% mysql –ulyw –p lyw00001 work 就將圖1中的數據加入到tbl_amend_amend表中了,如表1所示。如果需要對數據進行修改,則只需要在amend_data.sql文本文件中進行,然後重新執行一次上文中提到的語句就可以輕鬆地完成。
圖1amend_data文本文件
表1tbl_amend_amend表
2.2 連接模塊
完成資料庫及表的創建,有了相關的數據,下一步的工作就是在應用程式中實現與資料庫的連接。應用程式中用connect_to_db()模塊實現了與資料庫work連接功能,模塊代碼如下:
void Connect_to_db(){……;
conx = mysql_init((MYSQL *)0L); //初始化
……;
temp = mysql_real_connect(conx,126.0.0.1, lyw,lywcita001, work, 0, 0L, 0);
……;}
mysql_real_connect函數用於連接到名稱為conx 的MySQL伺服器,其主機的IP位址為「127.0.0.1」,用戶名為「lyw」,密碼為「lywcita001」,連接的資料庫名為work。
2.3 填充模塊
實現了與資料庫的連接後,接下來應將資料庫的數據填充到用戶界面上去。應用程式中用Fill_clist()模塊實現數據填充功能,其實現流程為:用MySQL查詢所需的數據;將查詢結果保存在內部緩存中;將緩存中的數據顯示在用戶界面上。模塊代碼如下:
void Fill_clist(){ ……;
gchar *amend_clist_row[5] = {,,,,}; //定義gtk+數組數據指針及變量
mysql_query(conx,select number,shapeh,deleteh,shaped,deleted from tbl_amend_amend);
result_set = mysql_store_result(conx); //將查詢結果保存在內部緩存中
num_fields = mysql_num_fields(result_set); //獲得結果集中列的數量
while(db_row = mysql_fetch_row(result_set)) {
lengths = mysql_fetch_lengths(result_set); //獲得列的長度
amend_clist_row[0] = db_row[0];
……;
amend_clist_row[4] = db_row[4]; //將獲得的db_row字符串數組的值一一對應地賦值給amend_clist_row
gtk_clist_append(GTK_CLIST(modify_list),amend_clist_row); }//填充到clist對應的域中
mysql_free_result(result_set);} //釋放結果集所用的內存
編譯運行插入程序,實現了資料庫向用戶界面填充數據功能,獲得了如圖2所示的界面。
圖2 MySQL填充圖
2.4 更新模塊
當用戶在界面上對系統參數進行修改後,希望將新的數據寫入資料庫保存,確保數據信息的一致性和連續性,因此應用程式應具有根據系統參數的改變而更新資料庫的功能。與填充模塊類似,應用程式中用Update_database()模塊實現資料庫更新功能。
3 資料庫移植
3.1 移植的硬體平臺
本數控系統中採用了嵌入式PC平臺,嵌入式PC與標準PC機完全兼容。因而,可以在普通PC上做好設計和開發,再將軟體移植到嵌入式PC上。本系統開發採用嵌入式PC104計算機,硬體水平達到P3級,內存為128M,程序存儲選用128M CF[4]卡。
3.2 移植過程
要在數控系統中應用資料庫和操作界面,則需要將MySQL和操作界面應用程式移植到CF卡中。考慮到CF卡的容量問題,在移植的過程中要對資料庫進行裁剪。
3.2.1 mysqld運行伺服器的移植
要讓MySQL能運行在嵌入式系統中,那麼mysqld運行伺服器文件的移植有著至關重要的作用。用命令ldd mysqld查詢與mysqld可執行文件相關的庫,結果如表2所示:
表2 與mysqld可執行文件相關的庫文件
執行文件mysqld的大小為3.3M,而其相關的庫文件的大小約為2M,將mysqld並同上述相關的庫文件一起移植到CF卡上,這樣mysqld便可在嵌入式硬體平臺上有效地執行了。
3.2.2應用文件的移植
假定應用程式的可執行文件為app,用命令ldd app同樣可以查詢到與可執行文件app相關的庫。將應用程式連同與應用程式執行相關的庫文件一起移植到CF卡上。應用程式的大小約為100K,與應用程式執行相關聯的庫文件的大小約為8M,而這8M的庫文件大部分為嵌入式Linux系統自身帶有的庫文件,基本上不需要再移植。這樣就可在嵌入式數控系統中運行用戶操作界面程序,而在後臺運行資料庫程序了。
4 結束語
CNC技術是現代加工技術的一個重要組成部分,如何在現有的技術基礎上不斷改進數控系統以滿足新的需求具有十分重要的意義。隨著機械加工領域對數控系統的精度、效率、功能以及智能化程度[5]的進一步要求,控制面板、人機界面和系統數據組織管理方式等方面都需要不斷的完善和創新,系統數據的基於Mysql資料庫管理方式與目前數控系統普遍採用的文本文件管理方式相比,資料庫只需在一個導入文檔中修改更新數據就可以完成對數據的維護,操作簡單方便、快捷,並且資料庫索引在資料庫啟動時進駐內存,對資料庫查詢、數據記錄的刪除和添加,索引能很方便、快捷地完成;資料庫最小化裁剪後容量很小,因此,不論在實時性方面還是在存儲空間方面都滿足了高性能嵌入式數控系統的要求,提高了系統的速度,極大地改善了系統的性能。
責任編輯:gt
打開APP閱讀更多精彩內容聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴