基于C#语言的ABB机器人程序读写方法

作者: 钱新 倪艳婷

基于C#语言的ABB机器人程序读写方法0

摘要:随着智能制造的深入应用,工业机器人与其他智能设备之间进行联调操作的场景日益增多,现有针对工业机器人的上位机控制大多采用基于数据修改的方式,仅能实现预定义的动作,存在一定局限性。鉴于此,文章采用C#语言并结合ABB的电脑端软件开发工具包PC SDK实现了工业机器人的程序读写功能,通过上位机控制,用户可以直接对ABB工业机器人的专用编程语言RAPID进行修改,该方法显著提高了工业机器人的柔性操作能力,可自定义修改机器人动作,拓宽了工业机器人在智能制造中的应用范围。

关键词:ABB工业机器人;C#语言;二次开发;程序读写;智能制造

中图分类号:TP311      文献标识码:A

文章编号:1009-3044(2025)08-0097-04

开放科学(资源服务) 标识码(OSID)

0 引言

工业机器人是衡量国家工业实力与智能制造水平的重要指标。目前,随着AI技术、边缘计算技术、数字孪生等技术的应用,工业机器人的柔性数字化场景日益丰富,如何使工业机器人操作适配新技术、新设备,日益成为柔性制造系统中的关键问题。

传统的编程方式主要有示教编程和离线编程两种。对于示教编程而言,其优点在于操作简单,针对简单轨迹的示教所记录的示教点较少,编程门槛低;相应地,由于其需要人工介入,其缺点体现在工业机器人的编程过程烦琐,编程效率低。对于离线编程而言,用户可以通过软件在电脑里重建工作场景,预先进行仿真和编程,降低了在线示教的不便。然而,离线编程由于其编程数据和现实环境有所差异,因此通常在部署程序时需要对点位数据进行二次修改,以减少由于模型误差、工件装配误差等引起的精度降低[1-2],但从长远看,离线编程是工业机器人时代发展的一项重要技术。针对离线编程,文献[3]采用了数字孪生技术实现了物理层和虚拟层之间的数据实时映射,方便后期数据挖掘和故障预警功能的实现;文献[4]结合Dalsa工业相机和上位机系统实现了可以任意摆放位置的码垛程序,该方法针对传统码垛有一定提升,但其本质还是在修改点位数据,只能实现预定义的动作;文献[5]针对采用Unity 3D技术实现虚拟调试,联调了PLC与工业机器人的动作,然而其调试环境是在虚拟工作站中,且依赖数据修改只能实现已定义的动作;文献[6]和文献[7]则采用C#语言来实现工业机器人的通信和控制,然而其本质都是采用上下级变量同步技术进行,没有实现程序代码的修改,工业机器人的动作较为固定;文献[8]和文献[9]则针对机器人服务拓展的问题构建了新的云平台服务,采用云服务技术提高机器人的实用性,但其更多地处于架构设计阶段,尚未落地;文献[10]则针对机器人的实时监控问题,采用相应外设进行辅助,但其本质还是实现预定义的操作动作。

从上述文献可以看出,现有的工业机器人已经摆脱单机运行的桎梏,可以针对不同的工作环境与其他外设进行联调作业,且大部分工业机器人采用的是外设+算法+工业机器人的组合方式,通过更改上下位机变量来实现预定义的动作。这种方式虽便于实现,但不适合高柔性化工作场合。

基于此,本文采用C#语言并依据ABB PC SDK工具包实现了ABB机器人的RAPID程序读写,该方法可以直接对ABB工业机器人进行程序编辑,作为轨迹生成和机器人控制之间的桥梁,为深层次自动化控制奠定通信基础。由于本文采用的是标准ABB接口,因此该方法适配大多数ABB工业机器人。最后,文章针对不同RobotWare版本的机器人测试了该方法,验证程序读写在不同控制器中的有效性。

1 RAPID语言分析

Rapid语言是ABB的特有编程语言,为了更全面地读写和分析代码,接下来从RAPID程序结构和典型指令进行介绍。

1.1 RAPID程序结构

在ABB机器人中,机器人运行的程序被称为RAPID,相应的RAPID应用也被称为一项任务(Task) 。1) 任务是ABB机器人程序的最高层次,定义了机器人运行过程中需要完成的整体任务,ABB机器人也支持多任务运行,每个任务里包含一组模块(Module) ;2) 模块可以分为System modules(系统模块) 和Task modules(任务模块) ,模块是程序和数据的载体,系统模块通常在系统启动期间自动加载到任务缓冲区,旨在预定义常用的数据对象,如工具数据、焊接数据、移动数据等,而用户编写的通常是任务模块,模块中有对应的例行程序,其中包含主入口程序Main;3) 主入口程序是ABB工业机器人程序指针的入口地址,通常在过程、函数和模块中定义的变量其生命周期仅在该模块内,在程序执行完该模块后其生命周期结束,在模块外定义的变量是全局可见的,其生命周期会一直持续到程序结束,通常这类变量是为了共享数据。Rapid程序结构如图1所示,可以看出程序数据定义在模块内则其生命周期仅存在于该模块中,若干个模块组成了一个任务,该任务在运行时被加载在程序内存中。

特别要注意的是,为了保证ABB工业机器人数据安全性,模块通常有属性设置,如表1所示。用户创建的模块默认情况下是可读可写的,如果在创建之初对模块进行了特殊设置,那么该模块内容上位机可能将无法读取,例如:将模块属性设置为READONLY,那么上位机系统仅能读取程序而不能对程序进行修改;将模块属性设置为NOVIEW,那么该模块将不可见,上位机无法读取也无法修改。对模块进行特殊设置的原因通常是为了防止人员误操作。

1.2 RAPID中常用指令分析

RAPID语言可以支持分层编程方案。可采用不同语句、表达式进行指令或是函数的编写。读写指令是实现ABB机器人程序读写最基本的要求,下文以典型MoveJ运动指令做介绍。

MoveJ是ABB机器人中最常用的指令之一,其函数变元如下所示:

不带中括号的是必选参数,反之为可选参数,用户可以依据操作需要进行选择,MoveJ详细的操作指令如表2所示。

值得注意的是,在实际操作中,适当的代码注释能很好地帮助编程人员进行维护和修改,ABB机器人中指令、函数通常为英文字符,纯英文注释在任何RobotWare控制平台中均没有编码要求,但是,如果采用中文注释,对于RobotWare>= 7.1的控制平台则需要指定UTF-8编码格式。

2 上位机控制界面设计

ABB工业机器人支持多种二次开发方式,现如今随着AI、边缘计算的深入,由于众多设备驱动和算法代码的使用,基于PC和基于Web的二次开发使用场景越来越多,赋予了工业机器人柔性化操作的可能。为了方便本地部署,文章依据实际情况,考虑使用基于PC的二次开发,上位机在通过网络连接到工业机器人后,在获取到ABB机器人的Mastership权限后,上位机就能获得读写工业机器人程序的能力。

2.1 PC SDK开发接口

针对程序读写,大致分为以下3个过程。程序的导出:针对所需要修改的模块文件进行导出,ABB中文件多以.mod和.modx文件格式;程序的显示和修改:C#中字符流用于处理字符数据的输入和输出,在这里系统以字符流方式进行读取,由于GBK主要针对中文字符进行编码,同时也支持日文假名、希腊字母、俄文等多种语言,考虑到此次上位机设计中的中文注释的兼容性,文件可以采用GBK编码格式打开;程序的导入和运行:修改后的模块需要被传输至机器人控制器HOME文件夹中再加载至任务中才能正常运行,所涉及的ABB中的控制域主要由表3所示。

2.2 程序读写流程分析

为了实现ABB机器人的程序读写,文章依据PC SDK工具包和C#语言开发上位机系统,主要设计了以下三大模块。1) 程序的读出与保存:主要目标是将工业机器人中的用户模块读出并保存。文件方向由Robot系统至PC系统,PC在获取控制器权限后将相应程序模块读出并保存在本地电脑中,主要目的是作为数据备份;2) 程序的加载和修改:主要目标是将读出的用户模块在本地系统中显示和修改。操作员依据需要执行的操作将程序修改并保存,读出和保存的方式以系统默认编码进行;3) 程序的传输和加载:主要目标是将本地系统中修改好的用户模块送至机器人系统中并运行。文件方向由PC系统至Robot系统,用户将修改后的模块程序传输至Robot系统的Home文件夹中,然后再将Home文件夹中的模块程序加载至对应的任务中,从而实现PC端对工业机器人的程序读写功能,上位机针对程序读写的流程如图2所示。

值得注意的是,在读取模块时PC端除了要获得AuthenticationSystem验证系统,还需要该模块文件支持读写,在传输修改模块至Robot系统中,由于ABB系统参考Unix文件系统建立,上下位机的转义符不一样,需要对模块名称进行适当修改,以便程序正确传输和加载,同时,对于RobotWare>= 7.1版本的系统,模块文件的扩展名将是“.modx”或“.sysx”,而文件内容将采用UTF-8编码。

2.3 不同版本RobotWare程序读写验证

基于C#语言的ABB机器人程序读写,采用WinForm框架进行编程,为了验证该控制方法的可行性,文章针对不同RobotWare系统的工业机器人进行程序读写验证。图3为上位机中程序修改界面,并以文本框作为程序修改界面,值得注意的是,采用上位机修改机器人程序后,由于没有语法纠错,对编程人员的编程要求更高。

从图4可以看出,RobotWare7.1以前的版本对程序的编码要求不高,按照系统GBK默认编码就可以实现中文注释,从图5可以看出,该上位机程序可以实现机器人模块的读写;图6和图7可以看出,该系统可以对RobotWare7.1及以上版本读取和修改系统文件,但是对中文字符需要指定UTF-8编码格式进行处理,防止中文字符乱码。

从以上验证可以看出:该系统可以适配不同版本的RobotWare机器人,如果对中文注释有要求就需要针对不同系统进行编码格式的指定,否则Rapid程序易出现乱码显示。

3 结束语

文章采用C#语言并借助ABB PC SDK实现了上位机直接对机器人的程序进行读写,同时验证了该方法可以在不同版本RobotWare中的应用,改变了传统以修改工业机器人数据进行固定作业变化的方法。采用该远程读写方法,对于推动工业机器人柔性化制造有一定的实际意义,后续可引入代码自动生成的功能,利用AI生成代码并自主修改机器人程序。

参考文献:

[1] 高峰,郭为忠.中国机器人的发展战略思考[J].机械工程学报,2016,52(7):1-5.

[2] 计时鸣,黄希欢.工业机器人技术的发展与应用综述[J].机电工程,2015,32(1):1-13.

[3] 杜莹莹,罗映,彭义兵,等.基于数字孪生的工业机器人三维可视化监控[J].计算机集成制造系统,2023,29(6):2130-2138.

[4] 易焕银,潘伟荣,郝建豹,等.结合Dalsa工业相机和ABB工业机器人的码垛系统[J].电脑知识与技术,2019,15(7):267-269,272.

[5] 王佩玉,陈振中.一种基于Unity 3D的生产线跨平台虚拟调试系统设计方法[J].东华大学学报(自然科学版),2022,48(2):69-74,80.

[6] 吴毅文,刘博.基于C#的机器人自主编程控制系统[J].重型机械,2021(2):24-28.

[7] 王晓忠.基于C#语言的ABB机器人远程示教方法[J].电脑知识与技术,2024,20(18):85-88.

[8] 周风余,尹磊,宋锐,等.一种机器人云平台服务构建与调度新方法[J].机器人,2017,39(1):89-98.

[9] 赵连翔,王全玉,贾金苗,等.机器人云操作平台的实现研究[J].华中科技大学学报(自然科学版),2012,40(S1):161-164.

[10] 王吉岱,丁冠军,郝亚东.基于C#.NET技术的巡检机器人远程监控系统的研究[J].机床与液压,2018,46(9):38-41,46.

【通联编辑:谢媛媛】

经典小说推荐

杂志订阅