您好,欢迎访问一九零五行业门户网

基于运动控制卡的开放式数控系统研制

摘要:对基于运动控制卡和pc的开放式数控系统平台结构进行了研究,介绍了硬件原理和基于com的模块式软件结构,并在此基础上针对gt400—sv运动控制卡开发了一个数控系统。实践证明这种形式的系统具有很强的性能价格优势,实现了软硬件的开放性和数控模块的二进制复用。
1 引言
90年代以后,数控技术发展的一个重要方向是数控系统的开放化。一方面,以往的数控系统由于其封闭性无法将计算机技术发展的成果运用于数控系统中,严重地阻碍了数控技术的发展。另一方面,由于加工的多样化、专业化,对加工个性化的要求越来越高。如何有效地利用pc机丰富的软件资源,强大的运算能力,统一的人机界面实现专业化、低价格、高精度、易扩展升级的开放式数控系统成为未来数控系统研究和发展的方向。在pc机的主流操作系统ms windows下有两种方法可以实现数字控制:一种是由一台计算机和一些i/o模块组成的单机模式,这种模式在硬件成本上是较为便宜的,但在软件的编写上却很复杂,需要对windows加以改造(如内嵌实时操作系统)以保证系统的实时控制性能,这是未来数控系统的一个重要发展方向,但现阶段windows的非开放源码特性使之具有相当的难度,可行性较差。另一种是并行双cpu上下位机通讯模式,相对而言该种模式具有很大的灵活性和可行性,是一种便于用户化开发的的开放式体系结构。本文所讨论的将gt400-sv运动控制卡插入pc机中所构成的数控系统,开发周期短、运行速度快、控制精度高、价格低廉,是第二种模式的一个代表。
2 硬件系统原理与结构
2.1 固高gt400-sv运动控制卡的特点
固高公司生产的gt400—sv是高性能的伺服运动控制卡,它可以同步控制四个运动轴,实现复杂的多轴协调运动。其核心是adsp2181数字信号处理器和fpga,前者的哈佛结构和mac单元非常适合完成复杂的运动控制算法,后者实现译码、倍频、脉冲分配、定时、计数等功能。运动控制卡采用isa总线与pc相连,数据通过双端口ram在上下位机间传送。双端口ram是一种特殊的随机存储器,它具有两组数据总线和地址总线,在地址不冲突的情况下两组总线可以在同一时间并行地访问不同的存储器单元,双端口ram的这种特殊结构使得上下位机可以快速地进行大规模数据交换,大大提高了主机与dsp运动控制卡的并行处理能力,解除了以往主从式系统cpu间通讯的瓶颈。图1是主从式微处理器通过双端口ram进行数据交换的示意。
图1 主从机数据交换示意
gt400-sv运动控制卡在双端口ram的基础上提供了缓冲区命令机制,用户能够先将部分运动控制指令存放在运动控制器内部开辟的循环队列命令缓冲区内,然后发出执行命令。在运动控制器执行缓冲区内存放的运动指令的同时,主机能够继续向缓冲区内下载运动指令,这样进一步降低了对主机通讯的实时性要求,同时运动控制器通过预处理多段缓冲区内的轨迹信息,能够获得良好的运动特性,使轨迹更连贯光滑。
2.2 试验平台结构(如图2所示)
图2 实验平台结构
3 软件系统结构规划及实现
3.1 软件总体层次
该数控系统能够正常工作,其系统软件包括上位机端的cnc用户应用程序、上下位机进行通讯的通讯驱动程序。其中通讯程序的开发工作量、最困难、也有技巧性,需要对下位机的通讯结构及微软的wdm有充分了解。gt400-sv随卡提供了win98/2000下的设备驱动程序phdio.sys,同时提供了面向运动控制卡的高级函数库gtsvdll.dll,用户通过主机程序调用相应的库函数,将运动控制器相关参数和运动轨迹描述传递给运动控制器,也就是发出运动控制命令,运动控制器将根据主机的要求,自动完成轨迹规划、安全检测、伺服刷新等复杂运算,计算结果转换成模拟电压或脉冲控制电机运动,用户无须编写通讯程序,并从32位驱动库中解脱出来,将全部精力用于定义和开发自己的cnc系统应用程序。本系统的软件层次关系如图3所示。
图3 软件总体层次
本系统的开放性主要体现在两个方面:一方面,控制卡核心对外开放,系统开发商可改进运动控制卡中的运动控制算法,通过编程器和下载器下载到控制卡的k2rom中,以针对具体的控制对象优化算法,提高系统性能。另一方面,上位机数控平台对控制卡、cad/cam系统、数控机床开放。前者的开放性主要体现在对运动控制卡底层性能特性的控制能力,是以控制卡的物理结构(e2rom)为基础的。而后者的开放性体现在数控平台对硬件设备的兼容性、通用性、可定制性,对cad/cam软件的衔接能力以及数控平台各功能模块的可复用性,这主要通过合理规划软件功能,选择*的软件体系结构来实现。
微软的com及dcom是目前比较成熟并已得到广泛应用的组件接口标准,通过定义统一的操作规范,用户不再直接和软件模块的功能函数接触,com规范作为中介,接口屏蔽了模块内部的特征,从而实现了模块在二进制级的交互。具体的讲com是通过定义的虚函数表(vtable)以及双重指针来实现的,这种方法具有优异的二进制级软件可重用性,良好的语言无关性,可以实现组件跨进程、跨平台甚至网络范围内的互操作。本文对使用com规范定义开发基于运动控控制卡的数控系统软件模块做了一些有益的尝试,将com作为软件的底层结构支持。软件结构如图4所示。
图4 软件结构
3.2 主要模块间数据结构的定义
3.2.1 数控代码信息
定义了完整的数控信息,从数控程序段中提取的数控位置信息、运动信息、i/o被填入该结构。
typedef struct{
cstring title;//程序名称
int num;//程序段号
int gg00;//00组g代码
……
int gg15;//15组g代码
int gm00;//00组m代码
……
int gm10;//10组m代码
int t;//刀具号
double s;//主轴转速
double f;//进给速率
double r;//圆弧插补半径,固定循环参数
double q;//固定循环参数
double p;//固定循环参数
double x;//基本尺寸
double y;
double z;
double i;//圆弧插补圆心坐标(相对)
double j;
double k;
}codeinfo;
3.2.2 运动控制卡信息
主要定义了运动控制卡可配置部分的参数。
tvoedef struct {
double refpointx;//系统参考点
double refpointy;
double refpointz;
double refpointa;
double servocycle;//伺服周期
axismapx;//轴映射
axismapy;
axismapz;
axismapa;
unsigned short limitsense;//限位电平
unsigned short dsns;//编码器方向
unsigned long in;//中断号
unsigned long portbase;
structaxislnfo//轴参数

double axismap[5];
unsignedshort kx[5];
unsigned short ilmt;
unsigned short mtrlmt;
short mtrbias;
unsigned short poserr;
double acclnt;
}axis[4];
}cardinfo。
3.2.3 数控系统信息主要定义了数控系统的结构参数,支持的数控代码表,实际的驱动能力。该结构为译码模块和控制卡函数调用模块提供规则,译码模块依据系统信息及译码规则填充数控代码信息结构并输出错误信息。
typedef struct {
bool g00,g01,g02,g03,……,g99;//支持的g代码
bool m00,m01,m02,m03,……,m99;//支持的m代码
double xmin,xmax,ymin,ymax,zmin,zmax;//平台结构参数(软限位)
double smin,smax;//主轴转速限制
double fmin,fmax;//进给速率限制
double ff;//快速进给限制
int plusequal;//驱动电机脉冲当量
double synacc;//合成运动速度限制
double servocycle;//伺服周期
int axisnm;//轴数
struct tool//刀具参数

double lenth;
double ratio;
int index;
} tool[20];
} codepermit;
3.2.4 错误信息
typedef struct {
cstring title;//程序名称
uint line;//出错程序段
uint errortype;//错误号
}error;//传递数控代码解释过程中识
别的错误
3.3 数控流程分析
限于篇幅各模块的实现没有一一列出,以下仅对主要数控程序流程及实现作大致说明。
3.3.1 系统配置模块
系统配置模块包括运动控制卡参数配置和机床参数配置,前者包括控制卡的伺服滤波、轴映射、编码器、限位、误差限等参数的设置,这些参数位于底层,直接决定了系统的性能。后者定义的是机床的结构参数、刀具参数和支持的数控指令集,包含了机床的全部特征,这部分参数主要影响了后续数控译码过程。用户通过界面对上述参数进行设置,形成配置文件card.ini和sys.ini保存于硬盘,当系统启动时自动加载。
图5 系统参数配置 图6 控制卡参数配置
3.3.2 译码模块
译码模块根据数控代码一般规则和机床特征将指令文本翻译成数控信息流,其中主要涉及到g代码m代码的分组处理、模态代码的处理、如何定制数控代码规则等问题,若考虑到后续刀补处理则还应给出上两段代码的坐标以解决进行c刀补时插补段增加的情况。因为数控程序不是定长的,所以要求用动态数组来存储codeinfo结构,在这里使用了mfc的carray类,它可以很方便地管理操作数组元素,定义如下:carrayinfoarray;主模块可以根据数控文本译码结果动态地将codeinfo结构加入到该数组中,如下所示:
codeinfo m-temp;
translate(cncstring,m-temp,errorinfo);//伪代码infoarray.add(m-temp)。
译码完成后将数组传人下一级处理模块。
3.3.3 主模块
主模块是整个系统的核心,该模块在系统启动阶段读取配置文件初始化运动控制卡,用机床信息填充codepermit结构。在执行状态下主模块调用译码、插补等模块功能形成数控信息流,最后转入运动函数调度循环,在这个循环中,主模块监视控制卡的指令缓冲区、坐标系状态寄存器、命令状态寄存器,根据缓冲区状况将数控信息流合成控制卡函数流不断地发往指令缓冲区并反馈命令执行情况、系统坐标等状态信号供人机界面实时显示。如果运行过程由于命令执行原因或操作者选择了停止则主模块进入停止状态。如果操作者选择了暂停,则模块记录当前缓冲区命令号等待恢复执行。当然,因为windows是基于消息驱动的,所以系统各运行状态的转换及锁定都是通过消息进行的,并非如上所述的顺序执行。
4 影响该系统性能的主要因素
该运动控制卡采用了高速dsp处理器进行数据处理,正如前说述在完成数控轨迹规划、插补计算、位置控制、速度控制等方面不存在运算能力瓶颈。制约系统性能的主要有以下几个因素。
4.1 控制命令的连续性
应防止出现命令缓冲区空,控制卡对多段轨迹进行预处理是在命令缓冲区基础上进行的,缓冲区机制可以保证各段轨迹的速度、加速度不出现大幅的波动,提高加工质量。解决的关键在于有效监控缓冲区状况,合理进行运动指令调度。
4.2 伺服零漂现象
在使用系统的过程中发现,如果不使用运动控制卡提供的零漂消除功能,一般的误差有13~15个脉冲,如果脉冲当量是2000脉冲/mm,那么误差将达到6.5~7.5μm,加工精度得不到保证。通过在运行过程中对零漂值的定时检测及动态修改,可以做到无零漂。
4.3 系统pid参数的调整
pid控制算法比较成熟且应用广泛,但参数的调整需要丰富的实践经验,参数调整良好的系统动静态特性好,加工精度高,运行噪声低。在实际运用中,可通过测试程序测出系统较优的pid参数,再通过系统配置程序修改参数。在参数配置方面今后的一个发展方向是系统在线自动测试调整,这对系统运用于不同的机床和工况很实用,也是本系统有待完善的部分。
图7 数控系统主界面
5 系统运行主界面
6 结束语
本文以固高gt400-sv运动控制卡为例构筑了一个上下位机形式的开放式数控平台,其对基于运动控制卡的开放式数控系统具有一定的通用性,系统采用功能强大的运动控制卡完成插补计算、位置控制、速度控制等实时任务,以pc机实现友好的人机界面、灵活的系统配置、增强的外部软件接口,采用基于com的模块式软件结构,实践证明这种形式的系统具有较强的控制性能,实现了软硬件的开放性和模块的二进制复用,适合构建各种通用及专用数控系统,本系统的改型系统已应用于一印制板钻床。
其它类似信息

推荐信息