基于Qt的数控系统测试软件的设计与实现
2018-4-3 来源:转载 作者:吴纯赟 栗勇 杜少华 葛小川
摘要:数控系统的测试相比较一般的系统更加复杂,以往的测试工具存在测试过程复杂、测试效率低下、可移植性差、用户交互不理想等缺点。在研究了Linux驱动及Qt技术的基础下设计并实现了蓝天数控系统的测试驱动程序以及基于Qt的测试应用软件,完成对数控系统I0, DA,键盘操作站等的测试。软件具有较高的移植性,可以运行在不同平台上,测试人员可以自主选择测试的项目与过程,提高了测试效率,简化了测试过程,缩短了测试时间。测试软件在生产车间中投入使用,有效地保障了数控系统的可靠性。
关键词:数控系统;软件测试;Qt技术
0、引言
数控技术是工业化过程中发展国家高新技术产业和尖端工业的重要一环,也是先进制造技术的核心研究内容。数控系统测试软件为工业生产提供了有效保障,目前我国的数控测试软件主要采用基于c语言的命令行模式,虽然在功能上能覆盖常用的模块,但存在可移植性差、用户交互性弱、测试过程复杂等缺点。基于Qt的数控系统测试软件正是要解决以上问题,为测试人员提供一个操作简便、可视化程度高、移植性好的测试环境。
在深入理解Linux内核以及Qt界面、信号与槽机制的前提下,基于Qt的数控系统测试软件重新设计了GJ303系统的测试3动程序,并且使用Qt的UI实现了可视化操作。软件完成了对IO,DA,键盘、操作站等功能模块的设计与实现,编译后部署在蓝大高精数控测试生产线上进行实际测试,并记录测试时间和故障率,从而验证测试软件的可行性。
1、需求说明
GJ303是新一代开放式普及型数控系统,采用高性能工业级PC平台,在工业生产中已经有广泛的应用,生产车间需要在数控系统出厂前对IO,DA,键盘操作站等进行测试,以确保软硬件的正确性和稳定性,为工业生产提供保障。
对于IO部分,需要GJ303系统与外接板连接,通过测试程序对IO读写信号进行测试;DA部分需要程序对DA输出值进行测试;键盘和操作站部分需要通过程序对数控系统键盘键位的有效性及操作站控制的有效性等进行测试。
从上述可以看出数控系统的测试存在步骤多、测试过程繁琐、测试过程掌控不到位等问题。在此背景下,结合当前数控封装测试车间的实际应用场景,采用Qt技术j实现功能完备、测试过程简单高效、移植性强、可视化程度高的数控系统测试软件。
2、测试软件驱动的设计与实现
测试软件需要对数控系统的硬件资源进行操控,所以底层需要一套专门的驱动来配合上层的Qt程序。蓝大数控系统内核是基于Linux 2. 6系统,测试驭动程序符合一般Linu、字符驭动程序开发的流程。在整个数控系统测试软件中,驱动程序扮演着承上启下的作用。
在Linux2. 6内核中,使用cdev结构体描述一个字符设备,cdev结构体的定义描述如下:
cedv结构体的dev_t成员定义了设备号,为32位,其中12位主设备号,20位次设备号。使用下列宏可以获得主设备号和次设备号:
MAJOR (dev_ t dev)
MINOR (dev_ t dev)
使用下列宏可以通过主设备号和次设备号生成dev_t:
MKDEV (int major int minor)
文件操作file operations是程序操作设备的主要结构,它的成员在应用层中以open ( ) ,write ( ) , read(),close ()等系统调用来体现。以上操作在测试软件中需要进行自定义,以read函数为例,GJ303系统中需要先设置偏移找到读取的起始位置,再根据传入的读取范围分配内核空间内存,最后调用_copy_ to_ user函数将需要的数据从内核空间拷贝到用户空间。write函数操作过程类似,只是拷贝数据的方向相反。
上层的应用程序在测试过程中需要对机床的各个功能硬件进行命令的收发,通过以上驭动程序的调用就可以高效便捷地进行交互。
3、测试软件应用层的设计与实现
3.1 总体架构设计
测试软件从结构上分成二层,如图1所示,用户界面采用Qt技术实现,底层调用驭动测试程序。驱动程序直接解析用户界而传来的测试命令,数控硬件系统根据驭动程序进行相应的操作完成测试。
图1 系统整体结构
Qt具有跨平台以及界而美观等优点,且在嵌入式领域已经有广泛地应用,所以本软件的用户交互界面全部由Qt来实现。应用层的开发在搭载Ubuntu 14. 04的PC下完成,测试与部署则在蓝大数控GJ303系统上进行。上图中数控系统部分实际还需要用到I0, DA的外接测试板以及外置手轮。
3. 2 事件处理机制
由于以往的蓝大数控系统测试工具都是基于C语言的命令行格式,测试人员即便测试某个小功能也要掌握所有的命令选项,一步步地进入到测试点。这不仅造成测试过程复杂,还容易出错。传统的程序界而跳转采用顺序驭动,导致逻辑复杂,跳转代码与业务代码掺杂在一起,结构混乱,不利于软件的功能扩展及移植。
软件使用Qt实现事件驭动机制,并抽取测试人员常用的测试选项于页而供直接使用,很好地解决了以上问题。测试软件的测试组件由按钮和命令行组成。按钮是由事件驭动的测试路径,需要通过数控系统自带的键盘绑定相应的事件;命令行则是快捷测试路径的入口,需要绑定并解析相应键盘输入的字符串。为了让软件更好地支持与底层硬件通信,提高测试效率,以上测试路径采用异步的事件通知。异步意味着当主线程接受完一个信号后可以继续处理业务逻辑,不必等待,当调用QApplication : : exec时,就进入了事件循环队列。对于按钮和命令,自定义的事件主要对QKeyEvent进行封装,只需对不同的事件源进行判断就可以满足动态需求。测试人员在对某个功能进行测试时,其输入将被包装成一个事件源。如果是简单的键盘事件,将调用Qt自带的事件处理器,但当要输入命令时,就先由事件分发器捕获回这次命令事件,然后判断是否自定义的事件,若是则分发器查找对应的自定义事件处理器,并触发相应的操作,具体流程如图2所示。为了便于管理众多的按钮与命令输入框,也为了统一结果显示页而,软件还扩展了Qt的部分控件:
(1) 状态控制方法,由于不同控件有各自的布局及大小管理方法,使用时十分不便,本软件设计的voidset-eometry (int , int , int , int)成员方法可以统一设置所以控件的大小及位置,前两个参数表示起点位置,后两个参数表示长度和宽度;
(2) 字体设置方法,为了使界而支持各种编码的字符,设计了QString to -Chinese (const char* str,constchar* code)方法,内部使用了QTextCodec字符编码器将传入的信息提示字符串str转变为code指定的编码,使得软件支持国际化。
基于异步的事件处理机制对数控测试软件的各个功能模块进行了解耦,不同模块间形成了责任链模式,在提高性能的同时也增加了扩展性。
图2 自定义事件处理机制
3. 3 IO与DA测试的设计与实现
IO与DA是数控系统的基础,是数控系统机床控制系统的重要组成部分,因此对这两部分的测试就尤为重要。GJ303数控系统的IO模式是48IN320UT以及32IN240UT,测试时需要考虑多种输入输出的情况。
IO测试模块程序流程如图3所示,以48IN320UT输出测试为例,犯个比特要每隔is输出一位,要控制时间间隔便要使用Qt定时器来完成任务。该功能模块的实现方法定义: void IO_ outport (int offset , int st , un-signed int word),该方法内部实现需要使用上文的驱动程序,即调用writ。系统调用,该系统调用将向操作系统内核传递IO输出数据。
DA的测试需要提供一组待测电压以及一组与之对应的地址。软件中封装了void DA outport (int st int chunsigned int word)方法,word参数就是要测试的DA地址值,前而两个参数是状态控制参数。为了可扩展性,测试的地址冈值可以由测试人员自行输入,软件后台会将最近的一次设定值保存在数组中,并写入配置文件刷新到磁盘上。测试开始时软件会根据最终的地址传入上述方法,底层使用系统调用传递给数控系统。
图3 IO测试流程
3. 4 键盘测试的设计与实现
数控系统的键盘是其在工业生产环境中最常用的外设,操作人员绝大部分操作及维护都是通过它来完成的,因此对键盘的测试尤为重要。GJ303数控系统的键盘和普通PC机的键位基木相同,但多了几个系统键。该部分测试的主要思想是利用Qt的键盘事件。当在主界而按下代表键盘测试的按钮后,整个键盘进入测试模式,测试人员之后按下的每个键都会在软件的界面上进行回显,直到连按2次ESC键后退出测试。
进入键盘测试后就触发了事件源,事件分发器捕获事件源并判断自定义事件。软件中对该功能的自定义事件改变了QKeyEvent原来的传播行为,将输出重定向至内存中,再在界而上输出。只要生产时键盘焊接等工艺没有发生错误,测试时键盘的事件源就会被准确地捕获,一次典型的捕获过程如图4所示。
图4 键盘测试流程
3. 5 操作站测试的设计与实现
操作站是键盘的延伸,是数控系统对机床进行控制的操作而板,可以控制数控运行过程中主轴的转动方向、液压系统、照明等,图5是GJ303系统配套的操作站。
图5 操作站
对操作站的测试不同于键盘,因为它是数控系统独有的,Qt的事件并不支持。软件中采用的方法是对操作站的键位进行转换,然后用类似于键盘的测试方法在主界面上回显按下的键位。
对于数控系统底层驭动来讲,操作站的每个键位都对应着IO的某个地址,地址的格式是8位的无符号整数。在软件中为了简洁使用unsigned char ch_pre变量表示,整个转换的过程使用void mopValueToText(unsigned char ch_pre, unsigned char ch_rev,char*str)这个方法来完成,转换过程如图6所示。
图6 操作站转换过程
接下去的操作是分发器调用以上转换方法,而非某个自定义事件。转换方法的核心部分是将IO地址一一转换成中文或其他语言,代码片段如下:
case 0x81 : sprintf (str, " % s",”进给修调0%”);
0x81就是IO地址“进给修调”是需要在主界而上显示的表述。
4、测试结果
测试软件通过交叉编译后部署在测试车间的GJ303数控系统上供测试人员使用。针对3个月的车间平均测试统计,结果如表1所示。
表1 GJ303数控系统测试时间比较
表1中数据是部署后车间流水线上每台数控系统各个项目的平均测试时间,是经过长时间累计测试得出的。从中可以看出4个项目测试时间都有较大的缩短,使得测试效率得到提高。对于出厂数控系统的故障率和返修率也进行了统计,如表2所示。
表2 GJ303数控系统故障率比较
从表2可以看出在使用新的测试软件后平均故障率大幅卜降,给生产带来了较大的保障,提高了产品的经济效益。
5、结论与展望
基于Qt的GJ303数控系统测试软件完成了对I0,DA,键盘与工作站的测试,并且在蓝大数控测试生产线上进行了部署。经过长期运行证明了该软件测试系统的稳定性与高效性。软件帮助测试人员建立了完善易用的人机交互界面,对各个部分的测试效率也有较大地提高。
由于软件采用了Qt技术,因此其跨平台性也进一步得到了提高,目前已经针对GJ301,GJ302等蓝天数控系统进行改造,是测试软件能部署在更多的数控系统上,从而创造更多的经济效益。
未来的工作还要进一步扩展测试软件的功能,例如编码器、轴测试等,最终使软件能够适应更多的生产环境。
来源:中国科学院大学,中国科学院沈阳计算技术研究所高档数控国家土程研究中心.沈阳高精数控智能技术股份有限公司
投稿箱:
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com
更多相关信息