基于CODESYS平台的机器人控制器设计
2022-10-15薛浩宇林福师蒙国良
薛浩宇,林福师,蒙国良
(上汽通用五菱汽车股份有限公司,广西 柳州 545007)
0 引 言
控制器作为自动化系统的核心部件,在工业制造领域广为应用,现有的控制器类型比较多样化,控制形式比较离散,可拓展性能较差。以汽车制造集成的生产线为例,控制器主要有以下几种类型:(1)PLC控制器:专注于现场离散的设备的集成控制,成本昂贵;(2)机器人控制器:专注于单个机器人的控制;(3)专有设备控制器:用于特定设备的控制,如视觉、涂胶等。机器人控制器是工业机器人的核心部件之一,国外品牌工业机器人所采用的控制器基本上都是开发者基于自己的独立结构进行开发的,结构封闭,开放性、可扩展性差,难以根据不同的生产需要进行定制化开发。
EtherCAT实时工业以太网技术以其网络实时性高、数据传输率高、拓扑结构灵活等优点,在工业生产中得到广泛应用,能满 足工业网络传输的实时性和同步性要求。在支持EtherCAT总线的CODESYS平台上开发机器人控制器系统,能够满足开放性、可移植性和可扩展性的需求。采用Linux+Preempt-RT操作系统,移植CODESYS平台的Runtime组件与机器人算法,利用C++编写共享内存库,实现CODESYS与机器人算法间PDO数据共享,再利用CODESYS的PLC编程功能,即可打造一个PLC+机器人控制器平台,完成对机器人以及现场离散设备的集成控制。
1 系统架构
本文中,采用x86架构的工控机,安装Debian9操作系统,移植linux-4.19.152版本内核、CODESYS平台的Runtime组件与机器人算法程序,构成一个同时支持PLC与机器人控制功能的可编程逻辑控制器。利用CODESYS平台的可视化模组进行设计开发人机交互界面,机器人驱动器采用清能德创CoolDrive A8型号的驱动器。
工控机上使用CODESYS作为EtherCAT主站,下挂六轴机器人伺服驱动器。其中,六轴机器人伺服驱动器的PDO数据,通过共享内存的方式,在CODESYS与机器人算法程序间传输。同时CODESYS作为Modbus_TCP主站控制作为从站的机器人算法程序,系统架构如图1所示。
2 Linux系统搭建
2.1 Linux环境搭建
在工控机上安装Debian9操作系统,安装完成后,随即开始搭建系统环境:(1)配置网络镜像源,编辑source.list文件,将缺省的国外镜像源配置成国内镜像源;(2)安装调试及生产需要的软件,例如vim、net-tools、rt-tests等;(3)配置网卡,本文的工控机有两个网卡,故将其中一个网卡设置成静态IP地址,用于连接内网,另一个网卡设置成采用DHCP协议自动获取IP地址,用于连接外网;(4)移除无用的软件包,禁用一些不需要的服务,加快系统启动时间。
图1 系统架构图示
2.2 Linux内核配置
Linux采用非抢占式的调度方法,其内核允许在内核态,应用程序运行在用户态,程序在内核态和用户态间切换需要消耗大量时间,无法满足运动控制的实时性要求。可以通过安装实时内核补丁的方式改善Linux内核实时性。Debian9推送的内核是4.19.152版本,故下载内核源码时选择linux-4.19.152版本的源码以及与之相对应的Preempt-RT补丁。进入内核源码目录,执行如下命令,安装Preempt-RT补丁:
进入内核配置界面:
如图2所示,内核配置界面最上方显示的是引导说明以及不同字符所代表的含义,其余区域显示的是不同的内核配置选项。
图2 内核配置界面
如图3所示,内核配置中,支持设置不同的Preemption模式,以处理不同的工作负载。Preemption是指内核为了处理更高优先级的任务,中断正在执行的任务的能力。在安装了Preempt-RT补丁后,将会多出两个preemption模式,为了搭建实时操作系统,选择Fully Preemptible Kernel (RT)模式。
图3 Preemption模式选择界面
2.3 系统实时性测试
实时性测试主要有两点:模拟负载与实时性测试工具。模拟负载采用stress软件,实时性测试工具选择cyclictest软件。经过72小时不间断测试,各核最大抖动不超过30 μs,实时性满足运动控制的需求。
3 共享内存功能实现
3.1 格式定义
进程间通信的目的是实现计算机系统内部相互协作的进程之间数据共享和信息交换,是实现进程间同步和互斥的一种重要手段。实时系统中常用的进程间通信方式包括管道、消息队列、信号量和共享内存等。
本文使用共享内存的进程间通信方式实现CODESYS与机器人算法程序间PDO数据共享。PDO即为过程数据对象,其作用是传输实时短帧数据。PDO数据按照读写类型分为只读PDO与读写PDO,只读PDO是EtherCAT从站(即伺服驱动器)输出给EtherCAT主站(即CODESYS)的数据,读写PDO是EtherCAT主站输出给EtherCAT从站的数据。机器人算法程序需要通过与伺服驱动器相互传输PDO数据,从而对机器人本体进行控制。由于CODESYS与机器人算法程序同时作EtherCAT主站的情况下,EtherCAT总线无法正常工作,故将CODESYS设置为EtherCAT主站,机器人算法程序与CODESYS通过进程间通信的方式实现双方数据传输。因为PDO数据传输需要较高的实时性,所以本文采用最高效的进程间通信机制,即共享内存实现数据的传输。基本步骤如下:(1)伺服驱动器输出的只读PDO由CODESYS接收,然后写入共享内存区中,机器人算法程序访问共享内存区读取只读PDO;(2)机器人算法程序向共享内存区中写入读写PDO,CODESYS访问共享内存区读取读写PDO,然后输出给伺服驱动器。
采用共享内存方式进行进程间通信,需要预先规定两个进程写入共享内存区的数组的数据格式,本文中数组的格式定义如下:
3.2 共享内存功能块封装
利用CODESYS的开发工具包,使用C++编写共享内存功能源码并封装成功能块,实现二次化开发。调用shm_open()函数创建一个新的共享对象或打开一个既有对象,并获得一个上述对象的文件描述符:
int fd = shm_open(“PDODataExchange”,O_RDWR|O_CREAT,0777);
调用mmap()函数把共享内存对象映射到进程的虚拟地址空间,该函数使用shm_open()函数返回的对象文件描述符作为参数:
为了保证共享内存对象能够被受控访问,需要使用IPC信号量,信号量的本质是计数器,如果受保护的资源是可用的,那么信号量的值为正数;如果受保护的资源现不可用,那么信号量的值为0。调用semget()函数获取IPC信号量标识符,作为参数指定对共享资源进行保护的IPC信号量的IPC关键字,为了保证CODESYS与机器人算法进程间的数据的同步性,需要创建两个信号量:
伺服总共有三种控制方式,分别为转矩控制、速度控制和位置控制。其中,位置控制是最常用的控制方式,一般是通过外部输入的脉冲频率来确定转动速度的大小,通过脉冲的个数来确定转动的角度,本文中,机器人伺服控制方式使用的就是位置控制,必需的只读PDO有:(1)Status word状态字,(2)Position actual value位置实际值,(3)Error code故障代码,(4)Mode of operation display控制模式显示;必需的读写PDO有:(1)Control word控制字,(2)Target position位置目标值,(3)Modes of operation控制模式设定。将所需PDO按照预先规定的格式定义编写程序代码,并封装成共享内存功能块,调用实例如图4所示。
图4 共享内存功能块实例
3.3 验证效果
连续运行机器人,监控CODESYS编程软件中的EtherCAT主站状态(如图5所示),未发现丢帧等异常状态,且机器人运行平滑无卡顿。
图5 EtherCAT主站状态监控
在机器人运行期间,使用清能德创的调试软件连接伺服驱动器,监控数据状态,通过监控到的数据曲线(如图6所示)得知,EtherCAT主站周期稳定。
图6 伺服驱动器数据监控
4 结 论
本文设计了一种基于CODESYS平台的机器人控制器。以六轴工业机器人为控制对象,结合EtherCAT总线通信技术和共享内存IPC通信方式,设计了一种同时具备PLC逻辑控制和机器人运动控制功能的控制器。该控制器有很好的开放性和可移植性,同时,仅仅是CODESYS和机器人算法程序双方各新增一个共享内存功能块,代码实现较为简单,故还具备开发成本低、开发周期短以及兼容性好的优势。