技術頻道

      嵌入式數(shù)據(jù)庫在數(shù)控系統(tǒng)中的實現(xiàn)與應用

      摘要:針對目前數(shù)控系統(tǒng)普遍采用文本文件格式存儲管理數(shù)據(jù)方式上存在的問題,提出在嵌入式數(shù)控系統(tǒng)中采用基于MySQL數(shù)據(jù)庫管理數(shù)據(jù)的全新技術解決方案。在RTLinux操作系統(tǒng)下,用MySQL設計機床數(shù)據(jù)庫,創(chuàng)建用戶接口,實現(xiàn)數(shù)據(jù)庫與基于GTK+庫開發(fā)的用戶操作界面的連接,在對數(shù)據(jù)庫最小化裁剪后,成功完成了向嵌入式數(shù)控系統(tǒng)硬件平臺的移植。結果表明:嵌入式數(shù)控系統(tǒng)的數(shù)據(jù)庫管理方式實現(xiàn)了對大量參數(shù)的有效管理,極大地改善了系統(tǒng)的性能。
      關鍵詞:嵌入式數(shù)控系統(tǒng);MySQL數(shù)據(jù)庫;Linux;MySQL C API;移植

      1 引言

      本文所論述是數(shù)控系統(tǒng)大課題中人機交互的外圍部分子課題中的數(shù)據(jù)庫開發(fā)應用。在數(shù)控加工系統(tǒng)中,存在著大量的用戶設定參數(shù)、系統(tǒng)參數(shù)、坐標軸參數(shù)、軸補償參數(shù)和刀具特征參數(shù)等數(shù)據(jù)。在整個生產(chǎn)制造系統(tǒng)中,這些數(shù)據(jù)不僅對于數(shù)控編程人員是必需的,而且對于實時過程控制系統(tǒng)、調(diào)度系統(tǒng)、工序處理、庫存管理系統(tǒng)、刀具維護管理系統(tǒng)等也是必需的。這些數(shù)據(jù)的組織管理方式對數(shù)控系統(tǒng)的實時性乃至性能影響很大,因此高性能數(shù)控系統(tǒng)必須解決數(shù)據(jù)的有效性組織管理問題。如果采用直接將數(shù)據(jù)存放在一個表或字符數(shù)組中,數(shù)據(jù)的修改與維護會相當困難、繁雜,這與數(shù)控系統(tǒng)對數(shù)據(jù)操作要求簡單方便與快捷相悖,因此這種組織管理方式不能滿足數(shù)控系統(tǒng)的要求。目前數(shù)控加工系統(tǒng)普遍采用的文本文件格式存儲管理數(shù)據(jù)的方式也存在著實時操作性較差和磁盤空間浪費嚴重的缺點,而實時性和存儲空間兩個要素對于高性能嵌入式數(shù)控系統(tǒng)來說卻是至關重要的。因此,在本課題研究中,作者提出在嵌入式Linux[1]環(huán)境下的數(shù)控系統(tǒng)中采用基于MySQL數(shù)據(jù)庫管理數(shù)據(jù)的全新技術解決方案。實踐結果表明:在嵌入式數(shù)控系統(tǒng)中采用數(shù)據(jù)庫進行數(shù)據(jù)管理,滿足了高性能嵌入式數(shù)控系統(tǒng)在實時性和存儲空間方面的要求,提高了系統(tǒng)的速度,極大地改善了系統(tǒng)的性能。

      本文就嵌入式數(shù)控系統(tǒng)中數(shù)據(jù)庫應用開發(fā)的具體實現(xiàn)過程,以及如何將數(shù)據(jù)庫應用程序向嵌入式數(shù)控系統(tǒng)硬件平臺的移植方法和對數(shù)據(jù)庫進行最小化裁剪的技巧上做了詳細介紹。

      由于本課題開發(fā)的人機界面是利用GTK+圖形庫,因此系統(tǒng)中采用的基于MySQL數(shù)據(jù)庫應用開發(fā),需要解決MySQL和GTK+相互融合的問題。GTK+ 沒有直接操作數(shù)據(jù)庫的控件,對數(shù)據(jù)庫的操作可以采取通過MySQL C API 直接進行,再調(diào)用GTK+ 的顯示功能的方法來完成與用戶的交互 [2] [3]。

      2 數(shù)據(jù)庫實現(xiàn)

      2.1 數(shù)據(jù)庫的建立

      2.1.1 創(chuàng)建work數(shù)據(jù)庫

      首先創(chuàng)建一個名稱為work的數(shù)據(jù)庫,并包含系統(tǒng)需要的所有表,作為根用戶連接到MySQL。具體創(chuàng)建過程如下:

      % mysql –uroot mysql; //進入數(shù)據(jù)庫

      mysql> SET PASSWORD=PASSWORD(‘lyw00001’); //為根用戶分配一個口令

      mysql> CREATE DATABASE work ; //創(chuàng)建work數(shù)據(jù)庫

      mysql> GRANT ALL ON work.* to lyw@localhost IDENTIFIED BY ‘lyw00001’;//創(chuàng)建一個名為lyw的用戶

      //與根用戶使用同一口令,并為用戶賦予數(shù)據(jù)庫work的完全訪問權限

      % mysql –ulyw –p lyw00001 work; //連接庫

      2.1.2 創(chuàng)建表

      針對基于GTK+庫設計的用戶操作界面有若干個表與之相對應,下面以一個界面為例詳細說明MySQL與GTK+的連接過程。

      連接到數(shù)據(jù)庫之后,就可以向它添加內(nèi)容了,使用CREATE命令來創(chuàng)建一個名為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),);

      創(chuàng)建一個表后,可使用SQL語句INSERT命令向表中填入數(shù)據(jù),但這種方法當數(shù)據(jù)量大時會耗時很多。因此作者采用批處理模式向表中填入數(shù)據(jù)的方法,具體作法是:首先創(chuàng)建一個存儲SQL語句的文本文件amend_data.sql,如圖1所示;然后執(zhí)行SQL語句:

      % mysql –ulyw –p lyw00001 work < amend_data.sql

      就將圖1中的數(shù)據(jù)加入到tbl_amend_amend表中了,如表1所示。如果需要對數(shù)據(jù)進行修改,則只需要在amend_data.sql文本文件中進行,然后重新執(zhí)行一次上文中提到的語句就可以輕松地完成。


      圖1 amend_data文本文件
      表1 tbl_amend_amend表

      2.2 連接模塊

      完成數(shù)據(jù)庫及表的創(chuàng)建,有了相關的數(shù)據(jù),下一步的工作就是在應用程序中實現(xiàn)與數(shù)據(jù)庫的連接。應用程序中用connect_to_db()模塊實現(xiàn)了與數(shù)據(jù)庫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函數(shù)用于連接到名稱為conx 的MySQL服務器,其主機的IP地址為“127.0.0.1”,用戶名為“l(fā)yw”,密碼為“l(fā)ywcita001”,連接的數(shù)據(jù)庫名為work。

      2.3 填充模塊

      實現(xiàn)了與數(shù)據(jù)庫的連接后,接下來應將數(shù)據(jù)庫的數(shù)據(jù)填充到用戶界面上去。應用程序中用Fill_clist()模塊實現(xiàn)數(shù)據(jù)填充功能,其實現(xiàn)流程為:用MySQL查詢所需的數(shù)據(jù);將查詢結果保存在內(nèi)部緩存中;將緩存中的數(shù)據(jù)顯示在用戶界面上。模塊代碼如下:

      void Fill_clist(){ ……;

      gchar *amend_clist_row[5] = {,,,,}; //定義gtk+數(shù)組數(shù)據(jù)指針及變量

      mysql_query(conx,select number,shapeh,deleteh,shaped,deleted from tbl_amend_amend);

      result_set = mysql_store_result(conx); //將查詢結果保存在內(nèi)部緩存中

      num_fields = mysql_num_fields(result_set); //獲得結果集中列的數(shù)量

      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字符串數(shù)組的值一一對應地賦值給amend_clist_row

      gtk_clist_append(GTK_CLIST(modify_list),amend_clist_row); }//填充到clist對應的域中

      mysql_free_result(result_set);} //釋放結果集所用的內(nèi)存

      編譯運行插入程序,實現(xiàn)了數(shù)據(jù)庫向用戶界面填充數(shù)據(jù)功能,獲得了如圖2所示的界面。


      圖2 MySQL填充圖

      2.4 更新模塊

      當用戶在界面上對系統(tǒng)參數(shù)進行修改后,希望將新的數(shù)據(jù)寫入數(shù)據(jù)庫保存,確保數(shù)據(jù)信息的一致性和連續(xù)性,因此應用程序應具有根據(jù)系統(tǒng)參數(shù)的改變而更新數(shù)據(jù)庫的功能。與填充模塊類似,應用程序中用Update_database()模塊實現(xiàn)數(shù)據(jù)庫更新功能。

      3 數(shù)據(jù)庫移植

      3.1 移植的硬件平臺

      本數(shù)控系統(tǒng)中采用了嵌入式PC平臺,嵌入式PC與標準PC機完全兼容。因而,可以在普通PC上做好設計和開發(fā),再將軟件移植到嵌入式PC上。本系統(tǒng)開發(fā)采用嵌入式PC104計算機,硬件水平達到P3級,內(nèi)存為128M,程序存儲選用128M CF[4]卡。

      3.2 移植過程

      要在數(shù)控系統(tǒng)中應用數(shù)據(jù)庫和操作界面,則需要將MySQL和操作界面應用程序移植到CF卡中。考慮到CF卡的容量問題,在移植的過程中要對數(shù)據(jù)庫進行裁剪。

      3.2.1 mysqld運行服務器的移植

      要讓MySQL能運行在嵌入式系統(tǒng)中,那么mysqld運行服務器文件的移植有著至關重要的作用。用命令ldd mysqld查詢與mysqld可執(zhí)行文件相關的庫,結果如表2所示:

      表2 與mysqld可執(zhí)行文件相關的庫文件

      相關庫文件
      大小
      相關庫文件
      大小
      librt.so.1 => /lib/librt.so.1
      37K
      libstdc++.so.5 => /usr/lib/libstdc++.so.5
      71K
      libdl.so.2 => /lib/libdl.so.2
      15K
      libm.so.6 => /lib/tls/libm.so.6
      21K
      libpthread.so.0 => /lib/tls/libpthread.so.0
      79K
      libgcc_s.so.1 => /lib/libgcc_s.so.1
      30K
      libz.so.1 => /usr/lib/libz.so.1
      52K
      libc.so.6 => /lib/tls/libc.so.6
      1531K
      libcrypt.so.1 => /lib/libcrypt.so.1
      23K
      /lib/ld-linux.so.2 => /lib/ld-linux.so.2
      103K
      libnsl.so.1 => /lib/libnsl.so.1
      91K

      執(zhí)行文件mysqld的大小為3.3M,而其相關的庫文件的大小約為2M,將mysqld并同上述相關的庫文件一起移植到CF卡上,這樣mysqld便可在嵌入式硬件平臺上有效地執(zhí)行了。

      3.2.2 應用文件的移植

      假定應用程序的可執(zhí)行文件為app,用命令ldd app同樣可以查詢到與可執(zhí)行文件app相關的庫。將應用程序連同與應用程序執(zhí)行相關的庫文件一起移植到CF卡上。應用程序的大小約為100K,與應用程序執(zhí)行相關聯(lián)的庫文件的大小約為8M,而這8M的庫文件大部分為嵌入式Linux系統(tǒng)自身帶有的庫文件,基本上不需要再移植。這樣就可在嵌入式數(shù)控系統(tǒng)中運行用戶操作界面程序,而在后臺運行數(shù)據(jù)庫程序了。

      4 結束語

      CNC技術是現(xiàn)代加工技術的一個重要組成部分,如何在現(xiàn)有的技術基礎上不斷改進數(shù)控系統(tǒng)以滿足新的需求具有十分重要的意義。隨著機械加工領域?qū)?shù)控系統(tǒng)的精度、效率、功能以及智能化程度[5]的進一步要求,控制面板、人機界面和系統(tǒng)數(shù)據(jù)組織管理方式等方面都需要不斷的完善和創(chuàng)新,系統(tǒng)數(shù)據(jù)的基于Mysql數(shù)據(jù)庫管理方式與目前數(shù)控系統(tǒng)普遍采用的文本文件管理方式相比,數(shù)據(jù)庫只需在一個導入文檔中修改更新數(shù)據(jù)就可以完成對數(shù)據(jù)的維護,操作簡單方便、快捷,并且數(shù)據(jù)庫索引在數(shù)據(jù)庫啟動時進駐內(nèi)存,對數(shù)據(jù)庫查詢、數(shù)據(jù)記錄的刪除和添加,索引能很方便、快捷地完成;數(shù)據(jù)庫最小化裁剪后容量很小,因此,不論在實時性方面還是在存儲空間方面都滿足了高性能嵌入式數(shù)控系統(tǒng)的要求,提高了系統(tǒng)的速度,極大地改善了系統(tǒng)的性能。

      參考文獻

      [1] 于明儉,陳向陽,方漢.Linux程序設計權威指南[M].北京:機械工業(yè)出版社,2001.22-337.

      [2] 孔令富,曹立強.用GTK+和MySQL開發(fā)數(shù)據(jù)庫應用[J].計算機工程與科學.2001,23(3):45-46,54.

      [3] T C X.MySQL Reference Manual[EB/OL].http://www.mysql.com/ documentation/ mysql/full/,2000-09-25.

      [4]李昊等.CF卡在大容量數(shù)據(jù)存儲系統(tǒng)的典型應用[J].微計算機信息(測控自動化).2005.第21卷第

      11-1期:66-68

      [5] 熊清平.數(shù)控系統(tǒng)技術的發(fā)展趨勢[J].機電工程技術.2004,(3):91-94

      文章版權歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 国产欧美色一区二区三区| 精品少妇人妻AV一区二区三区| 亚洲AⅤ视频一区二区三区| 三上悠亚亚洲一区高清| 成人免费观看一区二区| 亚洲av一综合av一区| 无码少妇一区二区浪潮av| 欧美日韩一区二区成人午夜电影 | 国产在线精品观看一区| 2021国产精品视频一区| 中文字幕在线播放一区| 国产成人高清亚洲一区久久| 伦精品一区二区三区视频| 无码精品国产一区二区三区免费| 中文字幕一区二区日产乱码| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 夜夜添无码一区二区三区| 一区二区三区中文字幕| 鲁大师成人一区二区三区| 日本人的色道www免费一区| 在线欧美精品一区二区三区| 亚洲国产精品综合一区在线| 人妻无码久久一区二区三区免费| 国产AV午夜精品一区二区三区| 国产精品高清一区二区三区| 2014AV天堂无码一区| 无码人妻一区二区三区在线| 亚洲一区综合在线播放| 亚洲中文字幕在线无码一区二区| 色妞色视频一区二区三区四区| 亚洲福利视频一区| 亚洲福利一区二区| 国产精品久久亚洲一区二区| 国产精品亚洲综合一区在线观看| 波多野结衣精品一区二区三区| 人妻无码一区二区视频| 精品一区二区三区免费| 日本在线视频一区二区| 日韩视频免费一区二区三区| 无码人妻精品一区二区三区99不卡 | 久久影院亚洲一区|