摘要:针对目前数控系统普遍采用文本文件格式存储管理数据方式上存在的问题,提出在嵌入式数控系统中采用基于MySQL数据库管理数据的全新技术解决方案。在RTLinux操作系统下,用MySQL设计机床数据库,创建用户接口,实现数据库与基于GTK+库开发的用户操作界面的连接,在对数据库最小化裁剪后,成功完成了向嵌入式数控系统硬件平台的移植。结果表明:嵌入式数控系统的数据库管理方式实现了对大量参数的有效管理,极大地改善了系统的性能。
关键词:嵌入式数控系统;MySQL数据库;Linux;MySQL C API;移植
1 引言
本文所论述是数控系统大课题中人机交互的外围部分子课题中的数据库开发应用。在数控加工系统中,存在着大量的用户设定参数、系统参数、坐标轴参数、轴补偿参数和刀具特征参数等数据。在整个生产制造系统中,这些数据不仅对于数控编程人员是必需的,而且对于实时过程控制系统、调度系统、工序处理、库存管理系统、刀具维护管理系统等也是必需的。这些数据的组织管理方式对数控系统的实时性乃至性能影响很大,因此高性能数控系统必须解决数据的有效性组织管理问题。如果采用直接将数据存放在一个表或字符数组中,数据的修改与维护会相当困难、繁杂,这与数控系统对数据操作要求简单方便与快捷相悖,因此这种组织管理方式不能满足数控系统的要求。目前数控加工系统普遍采用的文本文件格式存储管理数据的方式也存在着实时操作性较差和磁盘空间浪费严重的缺点,而实时性和存储空间两个要素对于高性能嵌入式数控系统来说却是至关重要的。因此,在本课题研究中,作者提出在嵌入式Linux[1]环境下的数控系统中采用基于MySQL数据库管理数据的全新技术解决方案。实践结果表明:在嵌入式数控系统中采用数据库进行数据管理,满足了高性能嵌入式数控系统在实时性和存储空间方面的要求,提高了系统的速度,极大地改善了系统的性能。
本文就嵌入式数控系统中数据库应用开发的具体实现过程,以及如何将数据库应用程序向嵌入式数控系统硬件平台的移植方法和对数据库进行最小化裁剪的技巧上做了详细介绍。
由于本课题开发的人机界面是利用GTK+图形库,因此系统中采用的基于MySQL数据库应用开发,需要解决MySQL和GTK+相互融合的问题。GTK+ 没有直接操作数据库的控件,对数据库的操作可以采取通过MySQL C API 直接进行,再调用GTK+ 的显示功能的方法来完成与用户的交互 [2] [3]。
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),);nextpage
创建一个表后,可使用SQL语句INSERT命令向表中填入数据,但这种方法当数据量大时会耗时很多。因此作者采用批处理模式向表中填入数据的方法,具体作法是:首先创建一个存储SQL语句的文本文件amend_data.sql,如图1所示;然后执行SQL语句:
% mysql –ulyw –p lyw00001 work < amend_data.sql
就将图1中的数据加入到tbl_amend_amend表中了,如表1所示。如果需要对数据进行修改,则只需要在amend_data.sql文本文件中进行,然后重新执行一次上文中提到的语句就可以轻松地完成。
图1 amend_data文本文件
表1 tbl_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,selec 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填充图
nextpage2.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可执行文件相关的库文件
/usr/lib/libstdc++.so.5
/lib/tls/libpthread.so.0
/lib/ld-linux.so.2
相关库文件 大小 相关库文件 大小
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
执行文件mysqld的大小为3.3M,而其相关的库文件的大小约为2M,将mysqld并同上述相关的库文件一起移植到CF卡上,这样mysqld便可在嵌入式硬件平台上有效地执行了。
3.2.2 应用文件的移植
假定应用程序的可执行文件为app,用命令ldd app同样可以查询到与可执行文件app相关的库。将应用程序连同与应用程序执行相关的库文件一起移植到CF卡上。应用程序的大小约为100K,与应用程序执行相关联的库文件的大小约为8M,而这8M的库文件大部分为嵌入式Linux系统自身带有的库文件,基本上不需要再移植。这样就可在嵌入式数控系统中运行用户操作界面程序,而在后台运行数据库程序了。
4 结束语
CNC技术是现代加工技术的一个重要组成部分,如何在现有的技术基础上不断改进数控系统以满足新的需求具有十分重要的意义。随着机械加工领域对数控系统的精度、效率、功能以及智能化程度[5]的进一步要求,控制面板、人机界面和系统数据组织管理方式等方面都需要不断的完善和创新,系统数据的基于Mysql数据库管理方式与目前数控系统普遍采用的文本文件管理方式相比,数据库只需在一个导入文档中修改更新数据就可以完成对数据的维护,操作简单方便、快捷,并且数据库索引在数据库启动时进驻内存,对数据库查询、数据记录的删除和添加,索引能很方便、快捷地完成;数据库最小化裁剪后容量很小,因此,不论在实时性方面还是在存储空间方面都满足了高性能嵌入式数控系统的要求,提高了系统的速度,极大地改善了系统的性能。