姜顺豹,杨东升
(1.中国科学院研究生院,北京 100049;2.中国科学院沈阳计算技术研究所,沈阳 110171)
针对开放式数控系统的控制要求,同时为了满足其开放性需求,我国在2009年6月发布了开放式数控系统总线接口和通信协议的国标。标准中把数控总线模型划分为物理层、数据链路层、应用层与用户层行规[3]。其中应用层主要负责站点间的安全、可靠的数据传输通路,并为行规层提供传输服务,而行规层则利用应用层提供的服务在驱动器和控制器之间进行设备控制。其中开放式数控总线的结构如图1所示。
图1 数控总线结构
围绕应用层、数据链路层和物理层的研究很多,然而用户和制造商比较关心的是如图1中所示的伺服、I/O等设备的控制的问题,行规层的好坏直接影响NC系统的开放性。本文在国标的基础上设计一个行规层的模型,抽象了不同制造商制造的同类设备,为用户提供统一的接口服务,同时实现了行规层中的伺服驱动器,最后给出了一个具体应用实例。
以沈阳计算所牵头制定的开放式数控系统国家标准中提出了开放式数控系统总线的概念,同时给出了一个数控总线的规范模型。它以ISO/OSI开放系统互连参考模型为基础,并对其加以改造,由物理层、数据链路层、应用层与用户层行规组成[2-3],如图2所示。
图2 开放式数控总线
在图1的模型中,通过将链路层划分为抽象数据链路子层与实数据链路子层,以便用户选用现有标准协议或引入新的标准。用户层行规以格式化数据结构形式定义,包括管理,传感器,驱动与I/O四种类别的数据定义,以确保装置间的互操作性,支持面向应用的实现。应用层维护站点间的安全,可靠的数据传输通路,并为用户层行规的命令与应答提供传输服务。应用层服务由连接管理、同步传输、异步传输、和传输管理等服务组成。
显然这种方法能很大程度增强数控总线的开放性。但是标准给出的只是一种设计规范,而没有对具体的实现方法做规定。
在国标中的规范指导下,我们可以设计一个向NC系统提供统一服务的行规层。在行规层的设计中不仅要处理具体设备的控制信息,而且还要负责兼容不同的协议,同时行规层还要屏蔽不同制造商的同类设备的差异,向NC系统提供统一接口服务。在图1的基础上建立了如图3所示的行规层模型。
图3 行规层模型图
(1)驱动层:包括图2中总线的物理层和链路层。主要用来初始化板卡以及周期性和板卡通信,同时还包含了一个总线仿真模块,该模块模拟了使用具体协议的主站板卡对发送到板卡上的数据的响应。
(2)应用层:数控系统中应用的具体总线应用层。比如具体的 MECHATROLINK-Ⅲ应用层[7],canopen 应用层,以及sercos应用层协议等。
(3)通用行规层:装置特征、功能特征和行为的规范[9]。在这层中抽象了特定装置的行为规范,并向NC系统提供通用的特定装置的服务接口。主要包括伺服[8]、主轴、I/O等的装置特征以及对应的行为规范,如轴控服务,I/O控制服务,接口控制服务等。轴控服务是利用伺服驱动器提供的通用服务接口来完成轴的业务逻辑控制的服务。I/O控制服务是利用I/O设备提供的通用服务接口来完成I/O设备控制的业务逻辑的服务。接口控制服务是与接口控制相关的一些服务。
其中的服务解释和服务映射机制通过查询相关的数据信息,统一定标格式,将来自NC服务的请求映射到具体的某个应用层提供的服务中去,例如轴控服务调用伺服驱动器提供的通用接口,并查询当前伺服控制信息,将其映射到某个具体应用层服务中。接口控制服务通过直接读写控制信息从而达到控制行规层的目的。
(1)总体结构(softInterface)
在通用总线接口模型中各个模块之间采用存放在共享内存中的数据结构来进行数据传输以及接口控制,下面是行规层中伺服驱动器的数据结构。
数据结构说明:SI_cmd数组是命令数组结构,主要用来存放发送到每个从站上的伺服行规层命令帧。SI_rsp数组是反馈值数组结构,主要用来存放从每个从站收到的伺服行规层反馈帧。SI_monitor是监控结构,主要用来存放从每个从站后获得的伺服驱动器监控数据。SI_contorl是控制结构,主要完成行规层中伺服驱动器的控制功能。SI_unitSystem是通用定标系统,主要用来统一不同总线的定标规格。SI_busInfo是总线信息结构,主要用来存储总线网络的设置。
(2)监控结构(SI_monitor)
对于每个现场总线网络中的伺服驱动器而言,都有一个SI_monitor结构,其中的监控数据如下所示:
其中I/O信号状态的位定义如下:1-伺服准备好,2-伺服报警,3-位置到达,4-制动器释放,5-零速检测,6-速度到达,6-32保留定义。
(3)控制结构(SI_control)
控制字段主要完成伺服轴输入输出控制,主轴输入输出控制等作用,以及监控字段的选择等。结构所下示:
其中协议选择字段用位定义来控制选择的协议、版本等信息。输入输出控制字段用位定义来控制输入伺服的控制信号。例如C_ioCtl字段定义如下:0-伺服使能,1-报警清除,2-CW行程限位,3-CCW行程限位,4-控制模式切换,5-偏差计数器清零,6-转矩限制切换,7-增益切换,8-指令脉冲输入禁止,9-32保留定义。
(4)定标系统(SI_unitSystem)
定标确定了在控制器和驱动器之间传送的数据的数值含义,这里在软件层次进行抽象以提供统一的定标系统。SI_unitSystem详细结构如下所示:
上述各种定标数据字段用位来进行定义,例如位置数据结构字段如下定义:0-2-定标方法,3-推荐定标/参数定标,4-直线单位,5-保留,6-数据出处,7-处理格式。直线位置数据的计算方法:直线位置数据最低有效位的权值=直线单位×定标因子×10定标指数,其他定标数据的计算方法与上面类似。
(5)总线信息结构(SI_busInfo)
其中主要包含总线的配置信息,例如总线周期,从站数目,从站mac地址等。
(1)伺服驱动器行规提供的服务:控制伺服设备的服务。主要利用数据结构的SI_cmd和S_control中的C_ioctrl和C_SpindleCtl等来实现。具体提供的函数接口[1,6]如表 1 所示。
表1 伺服行规提供的服务列表
(2)面向nc的服务:向nc提供伺服监控值的服务。主要利用数据结构的SI_monitor字段和m_contrl字段来实现。具体函数接口如表2所示。
表2 面向NC的服务列表
(3)接口控制服务:对整个接口进行控制的服务。主要利用数据结构的SI_uniforme和SI_control和SI_busInfo来实现。提供的一些主要函数接口如表3所示。
表3 接口控制服务列表
通过将伺服驱动器行规提供的接口应用到JL100主站控制卡驱动及nc110(蓝天数控系统)系统中的运动控制器中,并利用提供的接口做出了一个总线的配置调试工具,验证了上面设计的行规层切实可行。
(1)驱动程序设计
JL100控制卡驱动程序主要以周期通信的方式工作,同时调用行规层中提供的接口控制服务来完成采集数据以及总线信息初始化等工作。驱动程序包含两个部分,一部分是总线通讯初始化过程(mst_int),主要是进行通讯卡的RAM检测,参数配置,地址设置等.另一部分是初始化完成以后周期交换数据的过程(msg_exchange)。具体驱动程序结构如图4所示。
图4 驱动程序设计
其中在初始化部分需要从接口的SI_busInfo中获取初始化的参数信息,在周期线程中,将板卡上每个从站的数据和共享内存中的为每个从站准备的命令值通道以及反馈值通道[4],进行周期性的交换。同时在周期线程中还需要分析获取的每个从站的反馈值并计算以获取监控信息放到共享内存中,以方便上层接口的使用。
(2)运动控制器行规层服务的调用流程
运动控制部分的主控程序也以周期方式执行,结合行规层提供的轴控服务和面向nc的服务来完成轨迹生成、轴控制等任务[5]。如图5所示。
这里运动控制器也包含了两部分,第一部分是参数初始化,首先进行参数初始化,在参数初始化中,从共享内存中SI_busInfo中获取信息。第二部分是周期线程,在周期线程中首先确保伺服打开,然后利用读取到的伺服监控数据,进行插补运算等,在每轮周期循环中都要检查是否有伺服错误发生以及是否有参数需要配置,如果有发生则分别需要处理错误和配置参数。
图5 运动控制器中关于行规层服务的调用
(3)总线配置调试工具实例设计
因为共享内存对与用户空间和内核空间都可见,利用行规层中提供的服务可以很容易做出一个数控总线用户配置工具,主要目的是方便数控总线接口的调试和开发,具体开发环境rtlinux3.2+qt4.5。该配置调试工具流程图如图6所示。
在用户空间运行一个主线程,一个周期线程。主线程响应用户进行操作的异步事件,用户可以调用行规层提供的接口控制服务来配置该总线,或通过调用轴控服务来控制轴设备等。周期线程周期读取命令序列,并写入SI_cmd中,然后周期读取从驱动模块收到的数据并进行分析。用户可以模拟运动控制器中周期线程中对接口的调用,同时也可以实时的调试配置总线。
图6 配置工具流程图
本文在参考开放式数控系统国标中的相关规范的基础上,设计了行规层的体系结构,该行规层提供轴控服务、I/O控制服务、接口控制服务等,屏蔽了不同制造商制造的同类设备,为用户提供统一的接口服务,具有很强的开放性。同时实现了行规层中的伺服驱动器,最后通过一个应用实例验证了该行规层设计切实可行。今后的工作将针对利用开源操作系统(linux)中的一些机制进一步完善其软件接口的开放性,同时实现行规层中的I/O设备等。
[1]GB/T 18473-2001,控制与驱动装置间实时串行通信数据链路[S].
[2]GB/T 18759.2-2006,开放式数控系统——体系结构[S].
[3]GB/T 18759.3-2009,开放式数控系统——总线接口与通信协议[S].
[4]胡毅,于东.基于现场总线的开放式数控系统的设计与实现[J].小型微型机,2005(4):9-13.
[5]黄艳.开放式数控系统运动控制器的设计与实现[D].沈阳:中科院沈阳计算所,2003.
[6]陈卫福,杨建武.开放式数控系统及Sercos接口应用技术[M].北京:机械工业出版社,2004.
[7]Protocol User’s Manual of MECHATROLINK-Ⅲ [Z].2008.
[8]Command Specifications for standard Servo profile of MECHATROLINK-Ⅲ[Z].2008.