基于Qt的工业机器人语言系统的设计

2015-11-02 11:10陈富林
组合机床与自动化加工技术 2015年3期
关键词:编程语言语句指令

杨 杏,陈富林,周 霏

(南京航空航天大学机电学院,南京 210016)

基于Qt的工业机器人语言系统的设计

杨 杏,陈富林,周 霏

(南京航空航天大学机电学院,南京 210016)

工业机器人语言系统是机器人控制系统的重要组成部分,在研究和分析了工业机器人语言系统的构成和特点的基础上,提出了基于Qt和正则表达式的工业机器人的语言系统设计方案。该语言系统包括了机器人编程语言、编辑器和解释器。自定义了动作级机器人编程语言;在此基础上详细设计了基于Qt图形化界面的机器人编辑器,给出了编辑器各部分功能的具体实现;最后基于正则表达式详细设计了机器人解释器。该套机器人语言系统运用在工业机器人示教器上,具有良好的可可移植性。

语言系统;机器人编程语言;解释器;Qt;正则表达式

0 引言

作为对工业机器人进行有效控制和利用的前提,机器人语言系统在整个机器人控制系统中占有十分重要的地位,它直接影响着工业机器人的基本作业和离线编程等,从而影响到用户对机器人的控制效率[1]。机器人语言系统一般以软件形式嵌入在示教器硬件中,软硬件结合完成对机器人的控制。

由于工业机器人示教装置和作业要求的多样性,机器人语言系统也是各种各样。这也就导致了机器人语言系统在不同的控制器和操作系统上的可移植性和可扩展性较差。而Qt是一个多平台的C++图形用户界面应用程序架构。利用Qt编写出来的应用程序,在几乎不用修改的情况下,就可以同时在多种平台和系统中运行,大大增加了机器人语言系统的可移植性。它提供了关于图形用户界面的应用程序所需的一切功能。它基于完全面向对象的C++,扩展性非常强,并且允许利用组件编程。

正是由于Qt优越的跨平台性,所以本文设计和实现了一套基于Qt和正则表达式的工业机器人语言系统。利用Qt将三个模块组合在一起构成了一个集成环境,并移植嵌入示教器中。以示教器界面呈现给使用者,使对机器人的控制变得简单而高效。

1 工业机器人语言系统

1.1 语言系统结构和示教器

机器人语言系统不仅要能够支持机器人编程、控制,还应该要支持机器人与外围设备、传感器的接口、和计算机的通信等,机器人语言系统如图1所示。

工业机器人语言系统以示教器为载体,示教器生成的空间点与机器人编程语言一起构成了机器人源程序。机器人源程序经过解释器的翻译生成主控制器所能识别的命令,从而控制机器人本体的运动。

示教器采用嵌入式ARM板,外接LCD触摸屏,并移植嵌入式Linux操作系统。通过RS232与主控制器通信。它提供美观实用的人机界面:示教时,操作示教界面的按钮向主控制器发送驱动各关节轴的命令,使机械手到达相应的示教点,并记录示教点的位姿;再现模式时,通过机器人编程语言系统和记录的示教点构成的源程序再现示教的轨迹。

1.2 机器人编程语言设计

机器人编程语言是机器人运动和控制的结合点,是实现人与机器人通讯的主要方法[2],也是研究机器人语言系统的起点。本文所使用的编程语言是自定义的指令系统,为动作级语言,一个命令对应一个动作,语言简单,便于示教编程[3]。

机器人指令可以简单分为运动控制指令、程序控制指令、输入输出指令等。对于本文研究的工业机器人有如下几条指令代码:

(1)运动控制指令:MOVL、MOVC、MOVJ等指令

(2)控制指令:IF、THEN、ELSE、ENDIF、WAIT、JUMP、CALL、TIMER等指令

(3)输入输出指令:DIN、DOUT等指令

程序段是为了完成某个动作要求所需指令的组合[4],程序段格式如表1所示。

表1 机器人编程语言程序段格式

在程序段中,字与字之间以空格分隔,以“;”作为一个程序段的结束符。每个程序段完成一个功能或者动作,若干程序段按照一定的结构构成机器人程序块。

2 工业机器人程序编辑器的设计

机器人语言编程工作界面的设计是示教盒界面设计中最重要的一部分,操作人员通过此界面完成对工业机器人的示教编程工作[5]。基于Qt设计的界面如图2所示,此界面功能的实现主要靠四部分来完成,最上面的列表框用来显示机器人编程工作文件的内容,中间的编辑框是用来编辑当前的编程语句,最下面的按钮组用来对上面的两部分进行相应的控制操作。右边的按钮组用来对机器人语言进行调试和运行。

图2 程序编辑器界面

2.1 工作内容列表框的设计

列表框使用的是QListWidget部件,QListWidget可以显示一个清单,清单中的每个项目是QListWidget-Item的一个实例,通过QListWidgetItem来操作[6],可以对清单中的每个项目进行添加、删除、查找和替换。

2.2 语句编辑框的实现

编辑框使用了Qt的编辑框控件类(QLineEdit),通过text()函数获取QLineEdit中的内容。在语句编辑框中设置了一个检验器来限制输入的范围。Qt提供了三个内置检验器类[7]:QIntValidator、QDoubleValidator、QRegExpValidator。在这里使用检验器类QRegExpValidator,让它带一个正则表达式来限制机器人语言输入,即只能按照定义好的程序段格式输入。避免输入未定义的语句,有效防止错误的产生。QRegExp regExp("(N\d+)(\s)(MOVL)(\s)(\d+)(\s)(\d+)(\s)((OPEN)|(CLOSE));");//程序段格式的正则表达式

ui->lineEdit->setValidator (new QRegExpValidator(regExp,this));//调用检验器

2.3 编辑操作按钮的实现

(1)添加按钮的实现

添加按钮是语句编辑框的默认按钮。默认按钮就是当用户按下Enter键能够按下对应的按钮[8]。当编辑框没有内容时,添加按钮是灰色的不能和用户发生交互操作,只有当行编辑器中的文本发生变化时就会调用槽enableAddButton()。enableAddButtond的实现如下:

ui->Add_pushButton->setEnabled(ui->line-Edit->hasAcceptableInput());//如果有文本输入就调用使能函数。

输入完成后,当用户单击添加按钮或者按下Enter时,会调用Add_PushButton_Slot()私有槽。私有槽的实现是将行编辑器中的文本内容取出来,产生新的一个项目,并加入到清单(QListWidget)中。

QString AddName=ui->lineEdit->text();//将编辑框内的文本取出来;

QListWidgetItem*item=new QListWidgetItem;

item->setText(AddName);//把文本内容添加到项目QListWidgetItem中

ui->listWidget->addItem(item);//将新产生的项目加入到清单QListWidget中

ui->lineEdit->clear();//当前编辑框清空(2)删除按钮的实现

主要实现删除QListWidget中的一个Item,利用takeItem的类函数实现。QListWidgetItem*item=ui ->listWidget->takeItem(ui->listWidget->currentRow());

delete item;

(3)删除全部按钮实现

主要实现删除QListWidget中的全部Items,即此按钮可以删除全部显示在工作列表框中的所有内容

(4)软键盘实现

在触摸屏上的激活方式只限于单击,因此也就需要设计一套输入字母和数值的方法[9]。在此使用的是软键盘的方法,当用户需要输入字母或数字时,点击输入框时,将弹出软键盘对话框,用户可以点击软键盘的字母或数字输入数据,点关闭后将回到先前的对话框中,并将输入数据显示出来。需要输入的编辑框都重载了鼠标单击函数(相当于触摸屏点击),在重载函数里实现了软键盘的弹出功能。如图3所示。

图3 软键盘界面

3 工业机器人程序解释器的设计

解释器负责将自定义的机器人语言翻译成机器人目标平台能识别的指令系统。传统解释过程为输入的机器人程序进行译码和数据处理的过程,解释程序首先要识别出源程序中的每个单词,再分析每个语句及其语义,最后根据指令的语义执行相关动作。即解释过程分为词法分析、语法分析、语义分析、信息提取、错误记录和处理等过程[10]。

传统的解释过程复杂,实时性不好。针对这一问题本文设计的解释器基于正则表达式。由于在程序编辑器模块对输入的机器人语言进行了限制,大大降低了错误代码的产生,也可以省去词法分析和语法分析的复杂过程,只对代码进行语义分析。对于一行正确输入的代码,只需要按照一定的匹配模式,进行关键词归约,并根据关键词进入相应的解释子程序,方便快捷的完成机器人指令程序的解释[11]。解释器流程图如图4所示。

首先利用正则表达式建立关键字表,然后依次从列表框中读入一条语句,利用刚刚建立的关键词表对整条语句进行匹配,如果匹配成功则根据关键字类型来调用相应的分析函数;如果匹配不成功则错误检查确定行号错误还是参数错误。

3.1 建立关键词表

利用正则表达式为每条语句建立一个关键词表,只有严格按照正则表达式所规定的格式的语句才能被完全匹配。

增加机器人语言只需要在此多建立相对应的正则表达式即可,方便进行语言的扩展,使得解释器具有良好的灵活性。

3.2 匹配并解释

对于每一种指令类型,都要设计其各自的语义检查和目标代码生成的接口。此函数中包含大量的 if else if语句来根据不同的匹配语句调用相应的解释函数,函数的主要结构如下。

对于运动控制、输入输出、等待等简单指令,只需要按照其指令及参数做相应的简单处理即可。

3.3 流程控制指令的解释方法

对于流程控制指令等,常还需要进行解释程序段的跳转等。现以条件分支指令说明流程控制指令的解释方法。

IF IN/OUT 5 1/0 JUMP/CALL;

此指令用于判别输入输出口的状态(“0”和“1”),若为输入输出口的状态符合语句定义,则执行后面的操作,否则跳过此程序行。后面的操作可为跳转或子程序调用,所以,条件分支指令语义分析的核心任务是检测输入输出口的状态、跳转或子程序调用的处理。在语义分析程序读到“IF”指令后,读进下一个符号判断是检测输入还是输出口,然后读取下一个符号决定检测第几个输入或输出口,根据检测结果判断是否执行下面的操作。

若条件输入输出口的状态满足要求,再根据条件表达式后的第一个字符进行相应的处理。

若为“JMUP”,读进下一个符号即标号,利用正则表达式对标号进行匹配,若找到则从标签处开始解释,否则进行错误处理;

若为“CALL”,则读进下一个符号即子程序名,利用正则表达式对子程序号进行匹配,若找到保留当前程序解释的断点同时开始解释子程序,若没找到则进行错误处理。

条件分支指令解释的流程图如图5所示。

图5 条件分支指令处理流程图

4 测试和结论

将开发好的Qt应用程序移植到示教器中,示教器界面如图6所示,输入完成后单击测试框中的自动按钮完成测试。

图6 示教器界面

示教生成了10个点,其中0号点为初始位置,1号点为抓取工件的位置,5、6点为两个放置工件的位置。传感器5号通道为1时应该将工件放置在5号位置,否则将工件放置到6号位置。

实验表明基于Qt的机器人语言系统能够很好的完成对机器人的控制,满足工业机器人实时性的要求。同时由于Qt程序能在不同的平台和操作系统上运行,所以该套机器人语言系统能够适用于多个平台和系统,具有较好的可移植性。

[1]郭显金.工业机器人编程语言的设计与实现[D].武汉:华中科技大学,2013.

[2]别卫春,朱志红,叶伯生,等.HNC-IR机器人语言解释系统的研究与实践[J].机电一体化,2000(3):27-30.

[3]张玮光,刘俊玲,赵新,等.微操作机器人编程语言[J].中南大学学报(自然科学版),2007,38(1):558-559.

[4]陈生翰.不锈钢厨具拉伸成型工序机器人控制软件设计与实现[D].广州:华南理工大学,2011.

[5]王彦.码垛机器人示教盒系统软硬件设计[D].上海:上海交通大学,2010.

[6]丁林松,黄丽琴.Qt4图形设计与嵌入式开发[M].北京:人民邮电出版社,2009.

[7]闫锋欣.C++GUIQt4[M].北京:电子工业出版社,2008.

[8]蔡志明.精通Qt4编程[M].北京:电子工业出版社,2008.

[9]谢芬,潘丽,刘守印.基于QT/E的嵌入式Linux系统的软键盘实现[J].电子设计工程,2012,20(5):177-179.

[10]何嘉健,李伟光.基于GRETA正则表达式的机器人解释器的研究[J].组合机床与自动化加工技术,2012(1):17-24.

[11]任松涛.NC代码编译器的设计与实现[D].西安:西北工业大学,2007.

(编辑 李秀敏)

Design of the Industry Robot Language System Based on Qt

YANG Xing,CHEN Fu-lin,ZHOU Fei
(Collage of Mechanical and Electronic Engineering,NanJing University of Aeronautics and Astronautics,Nanjing 210016,China)

Industrial robot language system is an important part of the robot control system,research and analysis the structure and characteristics of robot language system.The design scheme of industrial robot language system is put forward based on Qt and Regular Expression.Robot programming language,the editor and the interpreter are included in the language system.On the basis of the custom action level robot programming language,detailed design a graphical interface editor based on Qt.Editor function of each part are given specific implementation.Then detailed design robot interpreter based on Regular Expression.The set of robot language system has good extensibility.

robot language system;robot programming language;interpreter;Qt;regular expression

TH166;TG506

A

1001-2265(2015)03-0071-04 DOI:10.13462/j.cnki.mmtamt.2015.03.019

2014-07-09;

2014-08-12

杨杏(1990—),男,江苏泰兴人,南京航空航天大学硕士研究生,研究方向为机器人及自动控制,(E-mail)yxxb@163.com。

猜你喜欢
编程语言语句指令
基于JavaScript编程语言之 闭包技术在焦点轮播上的应用
重点:语句衔接
《单一形状固定循环指令G90车外圆仿真》教案设计
计算机软件开发的JAVA编程语言及其实际应用分析
浅谈不同编程语言对计算机软件开发的影响
高职计算机编程语言课程教学方法的相关分析
中断与跳转操作对指令串的影响
一种基于滑窗的余度指令判别算法
我喜欢
MAC指令推动制冷剂行业发展