基于μCOS的多轴运动控制器的通信模型

2019-09-19 12:09
测控技术 2019年1期
关键词:配置文件实时性缓冲区

(上海交通大学 电子信息与电气工程学院 电气工程系,上海 200240)

随着现代控制技术的发展,运动控制器的出现在一定程度上满足了新型数控系统的标准化和开放性需求,为各种工业设备、国防设备以及智能医疗设备的自动化控制系统的研制和改进提供了一个统一的硬件平台。特别是在机器人控制、半导体加工、飞行模拟器等新兴行业中,运动控制器都得到了广泛的应用。运动控制器在传统的机床控制领域所占的份额也在不断扩大。

市场上国外工业运动控制器种类很多,主要分为日本系列和欧洲系列。欧洲系列价格高于日本系列,但使用寿命更长,运动稳定性和精度也较高,系统兼容性也略胜一筹。知名度较高的有发那科、ABB、爱普生、库卡等。国内相关研究的起步较晚,由于历史较短,技术水平也比较落后,创新能力不强。早期主要依赖于从日本和欧美进口。比较知名的国内厂商有广州数控、沈阳新松、众为兴等[1]。

目前市面上绝大多数运动控制器都以LinuxCNC为蓝本,根据具体的产品需求对LinuxCNC进行功能上的裁剪和改进。LinuxCNC是一款基于Linux操作系统的开放式数控软件,能够对G代码进行译码并控制数控机床的运行。最初LinuxCNC是因铣床的应用而开发的,但之后它增加了对车床和其他机器的支持。现在LinuxCNC普遍用于铣床、车床、等离子切割机、路由器和机器人等。

LinuxCNC的功能强大,代码库完备,有利于定制式运动控制器的开发。然而LinuxCNC平台并不是一个强实时性操作系统,在实时性要求较高的场合,将无法满足实时性需求。另一方面,LinuxCNC平台由于功能繁多,其在功能运行上会有较大的冗余[2]。

由于以上原因,需要构建一个实时性更强的多轴运动控制器平台,而基于μCOS构建的多轴运动控制器平台则是一个很好的选择。

μCOS是一个可以基于ROM运行、可裁剪、抢占式的实时多任务内核,具有高度可移植性,特别适用于微处理器和控制器。μCOS使用ANSI C语言进行开发,其主要特点有源代码公开、代码结构清晰、可移植性好等,其内核属于抢占式,可以管理多达60个任务。

以μCOS为基础研发的多轴运动控制器,将最大程度地利用μCOS高实时性的特点,且在制造成本上也有着很大的优势。

多轴运动控制器是一个多模块的系统平台,为了将系统中的各个功能模块有机地结合在一起,需要构建一个全新的、可兼容基于μCOS的多轴运动控制器的通信模型。

1 多轴运动控制器的结构

由于LinuxCNC在运动控制器应用上的泛用性,基于μCOS的多轴运动控制器的功能模块结构,大体上与基于LinuxCNC的多轴运动控制器的功能模块结构相同,如图1所示[3]。

图1 运动控制器的功能模块图

多轴运动控制器的结构主要分为4个功能模块,分别是:GUI(Graphic User Interface)模块,即图形用户界面,用于与用户之间进行交互,无实时性要求;EMCTASK模块,即任务管理器,管理任务调度和分配,无实时性要求;EMCMOT模块,即运动控制器,机械运动与轨迹规划模块,有实时性要求;EMCIO模块,即输入输出管理器,管理一些无实时性要求的输入输出量,无实时性要求。

GUI模块是整个系统中唯一与用户交互的模块,为用户提供图形操作界面,以LinuxCNC上的AXIS人机界面为例,如图2所示。在图形操作界面中,可以执行G代码的导入、手动回零、校准等功能。用户对整个系统运行功能的设置,都通过GUI模块实现。

图2 GUI模块图形操作界面

EMCTASK模块向上连接GUI模块,向下连接EMCMOT和EMCIO两个模块。其主要功能是接收从GUI模块传递来的执行命令和G代码,经过一系列的转换和整合,将输入输出量相关的命令传递给EMCIO模块,运动控制相关的命令传递给EMCMOT模块。同时EMCTASK还从EMCIO和EMCMOT中收集状态信息和错误信息,整合后通过GUI模块反馈给用户。

EMCIO模块用来控制机器的输入输出量,主要是一些实时性要求不高的输入输出量,例如注入润滑液、冷却功能、控制灯光、转换操作模式等[4-5]。

EMCMOT模块是整个系统中运动控制的核心模块,运动学计算和轨迹规划等都由EMCMOT实现。EMCMOT模块在功能上涉及很多实时运算,对通信方式的实时性需求很高。在LinuxCNC中,EMCMOT和其他模块都在同一台整机中运行,EMCTASK与EMCMOT之间的通信通过共享内存(Shared Memory)的方式实现。而在基于μCOS的多轴运动控制器中,EMCMOT模块被分割到μCOS中运行,而μCOS的硬件平台是STM32,所以无法采用共享内存通信方案。作为替代,使用Socket套接字通信来实现EMCMOT与EMCTASK之间的通信。

其他非实时模块,如GUI、EMCTASK和EMCIO之间的通信,则采用RCS库中的NML通信方式。

2 RCS库中的NML通信

2.1 RCS库

RCS(Real-Time Control Systems)是由美国国家标准与技术研究院研发和支持的一种模块之间的实时通信系统,可用于复杂系统的模块化开发。RCS是基于面向对象模式开发的,代码开源,可以方便地按照需求进行代码重构。

RCS库中有两个重要的子系统,分别是CMS(Communication Manage System)和NML(Neutral Message Language)。CMS是RCS库的底层通信管理软件,主要作用在于提供通信接口,完成不同平台上的基本数据类型与中性格式数据之间的编码和解码,以实现数据的跨平台通信。NML是RCS库中独立于控制系统的中性消息语言,实际上是CMS的一种更高级的封装形式[6]。

2.2 CMS和NML

CMS为本地进程、本地服务器进程和远程进程都提供了基本的通信功能模块、编码/解码模块,在本地进程访问中还提供了相应的缓冲区管理和读写信息。

CMS的具体功能由封装好的CMS类来实现。CMS类中比较重要的成员函数有以下几类:

① Format函数:格式化函数,用来识别消息类型、建立进程与缓冲区之间的连接。

② Update函数:更新成员的信息,同时对数据进行编码或解码,使其通过命令通道、状态通道或错误通道来传输信息。

③ CMS通信函数:CMS层的底层读写函数,用于向缓冲区中的消息进行读写操作。

NML是CMS的顶层封装,是用户直接操作的层级,用户通过对NML层的操作,无需了解NML层以下的层级的具体操作,即可完成NML通信的需求。

NML层主要包括消息管理模块和配置管理模块,例如消息词汇的定义、消息类型的声明和NML应用中配置文件的配置。

2.3 NML在运动控制器中的应用

基于μCOS的多轴运动控制器中,EMCTASK与GUI之间、EMCTASK与EMCIO之间,都通过NML通信建立通信连接。通过NML通信建立通信连接的主要优点在于,NML可以实现不同平台上的本地或远程通信。这是由于NML通信可以将一个平台上的数据类型,转换成中间数据类型,到另一个平台上再转换成对应平台的数据类型。利用NML进行通信的各个模块之间,可以处于不同的系统平台,这对通信接口的统一性和模块的扩展性有极大的助益。

以EMCTASK与EMCIO之间的NML通信为例,其通信框图如图3所示。EMCTASK与EMCIO之间的NML通信通道构建,主要分为3个通道,分别是命令通道、状态通道和错误通道。正常工作时,命令通道将EMCTASK下发的命令传递到EMCIO,而状态通道将EMCIO的状态反馈给EMCTASK。当EMCIO发生错误时,错误信息通过错误通道反馈给EMCTASK。

图3 EMCTASK与EMCIO的通信框图

NML通信的构建,首先需要配置NML配置文件,NML配置文件主要配置的对象有两个:一是缓冲区配置,如表1所示;二是进程配置,如表2所示。

表1 NML配置文件中的缓冲区配置

表2 NML配置文件中的进程配置

缓冲区配置文件中,每一行参数为对一个缓冲区的配置,#号所在的行是注释行。首位的关键字“B”表示配置类型为Buffer,即缓冲区配置类型。第2位是Name,表明缓冲区的名称。第3位是Type,表明缓冲区内存类型,可选项有SHMEM(共享内存)、GLOBMEM(全局内存)、LOCMEM(本地内存)、FILEMEM(文件内存),EMCTASK和EMCIO处于同一个操作系统中,选用速度较快的SHMEM类型。第4位是Host,即缓冲区所在的主机名称,用于远程通信。第5位是size,即缓冲区容量,表明该缓冲区所能容纳的最大字节数。第6位是neutral,该标志位表明消息是否转换为中性格式,该位置为“0”表示消息在同一个操作系统上传递,无需改变当前的数据格式;该位置为“1”,则表示消息会在不同的操作系统上传递,传递时需要将消息转换为中性格式,消息到达对应平台时,再转换成平台对应的数据格式。第7位与配置文件的版本有关,默认置0即可。第8位是buffer number,即缓冲区标号,共享同一个服务器的缓冲区标号,必须是不同的。第9位是MP(Maximum Processes),即该缓冲区能连接的最大进程数。再之后的参数为可选参数,并不是必要的,依次是远程通信端口号、远程通信协议、使用的中性消息格式、是否队列式读写等。

NML进程的配置,首位的关键字“P”表示配置类型为Process,即进程类型。第2位的Name表示进程名称。第3位的Buffer表示该进程连接的缓冲区名称。第4位的Type表示该进程的类型,类型只分为两种,LOCAL本地类型和REMOTE远程类型。第5位的Host表示该进程运行所在的主机名。第6位的Ops表示该进程所做的操作,可选项有R(只读)、W(只写)、RW(读写)3种。第7位server是一个标志位,置“0”表示该进程不是一个NML服务器,置“1”表示该进程为NML服务器进程。第8位的timeout表示进程执行的时限,单位为s。第9位的master是一个特殊的标志位,标志位置“0”时,该进程连接到的缓冲区如果不存在,则这是一个错误的操作;标志位置“1”时,该进程连接到的缓冲区如果不存在,则会新建一个缓冲区。第10位的cnum即connect number,是在0与缓冲区最大进程数之间的一个特殊数字,作为操作特定缓冲区的进程序号,用于信号量操作。

在配置完NML配置文件后,可以在工程代码中初始化并使用NML函数库实现通信功能。

3 Socket套接字通信

3.1 Socket套接字简介

Socket套接字是支持TCP/IP协议族的网络通信基本操作单元,是网络通信层中的中间软件抽象层。Socket包含两个最基本的成员:IP和port,IP可标识通信网络中的一台主机,而port即端口号,可标识一台主机中特定的一个进程,所以可将Socket套接字视为不同主机的进程之间进行通信的端点。

常见的Socket套接字类型有3种。

① 流套接字。面向连接,面向流,提供可靠的数据传输服务。这种类型的Socket套接字能实现数据的无差错、无重复发送,接收时会按照发送的顺序接收。由于流套接字使用TCP进行数据传输,接收端在接收数据后会返回ack信号。根据ack信号,发送端会决定该次传输是否成功,传输成功则结束该次传输,准备下一次传输;传输失败则重新发送相同的数据。

② 数据包套接字。面向消息,提供无连接、高效率的服务。与流套接字不同,数据包套接字类型在传输数据时不需要建立连接,只需将目的地址信息和数据打包后发出即可,支持一对多传输。该Socket套接字使用UDP进行传输,高效率低延迟,但由于接收方对数据传输无反馈,所以无法保证数据传输的可靠性。

③ 原始套接字。允许操作者对访问和控制底层的通信协议,即可以通过该类型的Socket套接字操纵网络层和传输层应用。原始套接字主要用于通信协议的开发,能获取通信协议的高级访问权限,所以并不适合普通用户使用[7]。

3.2 Socket套接字在多轴运动控制器中的应用

在基于μCOS的多轴运动控制器系统中,Socket套接字主要用于EMCTASK和EMCMOT之间的通信。其中EMCTASK模块位于上位机系统中,而EMCMOT模块位于作为下位机的STM32中。EMCMOT模块中的Socket套接字通信模块会不断轮询来自上位机的通信信息,并由此做出相应的操作和反馈。其通信框图如图4所示。

图4 Socket套接字通信框图

首先,EMCMOT和EMCTASK分别创建Socket套接字。EMCMOT需要用过bind()函数绑定IP地址和port端口,之后使用listen()函数开始监听该端口。之后调用accept()函数,该函数在EMCTASK发起连接请求之前,会使通信功能一直处于阻塞状态。EMCTASK模块调用connect()函数向EMCMOT模块发起Socket套接字通信连接请求。建立通信连接后,EMCMOT模块会调用recv()函数轮询来自EMCTASK模

块的指令,EMCTASK模块将从上个层级传来的指令通过send()函数发送给EMCMOT模块。EMCMOT模块在处理完EMCTASK模块发出的指令后,会调用send()函数反馈对应的信息给EMCTASK模块,之后重新调用recv()函数等待下一个指令。

4 结束语

基于μCOS的多轴运动控制器相比于传统的多轴运动控制器实时性更强,且生产成本更低,但需要重新设计通信结构。通信模型的构建以4大功能模块为基础,GUI、EMCTASK和EMCIO 3个模块之间使用NML通信相连接,而EMCTASK和EMCMOT之间使用Socket套接字通信,这种通信模型既满足了模块的实时性要求,又具有一定程度的灵活性和扩展性。

猜你喜欢
配置文件实时性缓冲区
从Windows 10中删除所有网络配置文件
用软件处理Windows沙盒配置文件
互不干涉混用Chromium Edge
基于Zookeeper的配置管理中心设计与实现
基于ARC的闪存数据库缓冲区算法①
航空电子AFDX与AVB传输实时性抗干扰对比
计算机控制系统实时性的提高策略
一类装配支线缓冲区配置的两阶段求解方法研究
初涉缓冲区
一种车载Profibus总线系统的实时性分析