20
科技资讯 SCIENCE & TECHNOLOGY INFORMATION
信 息 技 术
DOI:10.16661/jki.1672-3791.2020.07.020
基于解析器的Kuka-Volvo机器人
离线焊接程序检查
夏利n3论坛
王建伟  何洪岩
(吉利汽车研究院(宁波)有限公司  浙江宁波  315000)
摘  要:为了缩短汽车的投产周期,汽车自动化焊装生产线多采用仿真验证然后输出离线程序的方式完成
工业机器人的编程工作。而由于软件、人为等方面的因素,输出的机器人程序可能存在各种错误,削弱了离线编程的优势。文章介绍了一种基于f lex和bison编写的Kuka-Volvo机器人焊接程序的解析器,对输出的离线程序进行检查。实验证明,该解析器可以有效检测出程序中的错误,从而及早修正程序中的错误,保证离线程序的质量,使汽车能够尽快投产。关键词:机器人  解析器  焊接  程序检查中图分类号:TP391
文献标识码:A
文章编号:1672-3791(2020)03(a)-0020-02
随着科技的不断进步,汽车行业的竞争也日趋激烈。白车身制造是汽车制造中不可或缺的一环,而白车身焊接的柔性化不及涂装和总装,因此,白车身焊接线投产周期的缩短,有利于将汽车产品尽快推向市场,提高市场竞争力,从而提升企业的经济效益。竞悦
在白车身焊装自动生产线上,均使用工业机器人完成焊接任务,以提高效率,保证焊接质量,并降低工人劳动强度。机器人的焊接工作是由机器人程序驱动的,为了进一步缩短投产周期,并降低现场调试风险,机器人程序多采用仿真软件验证的离线编程方式编制。由于软件不够完善以及工作人员的疏漏,难免会出现输出的离线程序存在各种各样的问题,无法供生产线上的机器人直接使用,而在现场修改程序是一件费时费力的工作,削弱了离线编程所带来的优势。针对该情况,需要有一种手段来检
polo测出程序中存在的语法错误和逻辑错误,方便在程序发放给生产线上的机器人前对错误进行修正。
使用解析器可以有效地检测程序中的语法错误,而应用解析器生成的语法树则可以进行逻辑错误的检查。机器人程序解析由两个部分构成:词法解析和语法解析。词法解析是对程序文件中的内容进行分词,识别有意义的最小元素;语法解析则是应用词法解析的结果,组合成有意义的语句,并将语句组合成语法树。flex和bison是常用的两种构建解析器的工具,文献[1]中讲解了flex和bison的结合使用方式。
1  Kuka-Volvo机器人焊接程序
Kuka-Volvo是在Kuka机器人的基础指令上开发出的适
沃尔沃和吉利的关系
用于Volvo体系的机器人工艺包集合,文献[2-5]中对扩展部分的语法做了详细的说明。一个完整的Kuka-Volvo机器人焊接程序模块有两个文件构成:扩展名为”.dat”的数据文件和扩展名为”.src”的程序文件。1.1 数据文件
数据文件存放变量的定义,包括空间位置、负载信息、信号地址等。数据的声明均以”DECL”开始,之后是变量
①作者简介:王建伟(1987—),男,汉族,甘肃张掖人,本科,机械工程师,研究方向:白车身焊
接自动化仿真。                    何洪岩(1986—),男,汉族,黑龙江哈尔滨人,本科,自动化工程师,研究方向:数字化双胞胎。
的类型和变量名称,之后是变量的初始值。部分示例如下:
DECL LockSignType AllocateZone4={Number 27,Info[] "R1-1,R1-3 Weld and R4-2 Weld"}1.2 程序文件
程序文件中定义机器人需要执行的指令,包括运动、设备交互、时间同步等。程序文件中会定义若干程序块,其中一个为主程序块,主程序块调用文件中的其他块,而主程序则会被其他模块调用。衡阳机动车违章查询
2  解析器构造
flex是一种词法分析生成器,可以根据定义好的词法匹配规则,生成相应的词法分析程序。flex的词法规则定义由3个部分构成,使用'%%'作为分隔标识。第一部分由声明及选项组成。第二部分则是词法规则的定义部分。词法匹配规则由正则表达式书写,并在表达式后面对匹配到的元素进行相应的处理。第三部分是附加的C语言代码,这些代码会直接复制到生成的词法分析程序中。
分词阶段需要根据不同的语法定义相应的词法规则,此处主要依据Kuka-Volvo的规范编写词法规则,区分关键词、注释、数值等。由于篇幅有限,此处只摘录部分词法规则。
"DEFDAT"  {return DEFDAT;}"ENDDAT"  {return ENDDAT;}"DECL"  {return DECL;}沈阳大众
它是一个语法解析器生成器,经常与flex结合使用。同flex一样,bison的文件也由3个部分构成:包含声明和选项的第一部分,语法规则定义的第二部分,以及附加C语言代码的第三部分,各部分之间也以'%%'分隔。
一个程序文件和对应的数据文件被解析为一个模块,数据文件被解析为模块中的数据块,程序文件被解析为模块中的指令块,而文件的基础名称(不含扩展名)作为整个模块的名称。
数据块存放变量列表,变量列表中的每个变量由名