发表于:2007-03-04 22:01:00
19楼
5.2 ONC系统墓本体系结构组成
5.2.1 系统平台组成
系统平台是由硬件平台和软件平台组成的,用于运行数控系统应用软件,对运动部件实施数字控制
的基础部件。
5.2.1.1 硬件平台组成
ONC系统的硬件平台建立在NC硬件、PLC硬件、计算机硬件体系结构基础之上,支持软件运行的
平台部件。
5.2.1.2 软件平台组成
软件平台是由操作系统、通信系统、图形系统及ONC应用编程接口等软件组成的支持应用软件运
行的平台,是开放式数控系统基本体系结构的核心,硬件平台和应用软件之间的桥梁。
5.2.1.2.1 操作系统
ONC系统的操作系统是具有通用功能的实时多任务操作系统,该操作系统应该至少具有图形接
口、网络接口和应用编程接口API,
5.2.1.2.2 ONC应用编程接口
ONC应用编程接口为ONC应用软件调用系统功能的通道。它应含有实现功能模块之间的互操作
的应用编程接口。
5.2.2 ONC应用软件
ONC应用软件是以模块化的结构,实现专门领域的功能要求的软件。应用软件通过应用编程接口
可运行在不同的平台上。
5.2.3 配里系统
ONC配置系统是存在于ONC系统中的软件。它应提供工具、方法、集成所需的功能模块,以配置
成一致性的、完整的应用软件。
5.2.4 通信系统
ONC通信系统包括内部通信和外部通信。内部通信完成ONC内部软件功能模块之间的信息交
换;外部通信完成软件功能模块与外部设备或远程功能单元之间的信息交换。
5.2.4.1 ONC通信系统的主要功能
ONC通信系统为系统功能单元之间的信息交换提供通道。包括以下主要功能:
— 应用软件功能模块之间的信息交换;
— 应用软件功能模块与硬件功能单元之间的信息交换;
— 应用软件功能模块与远程功能单元之间的信息交换
5.2.4.2 ONC通信系统要求
ONC通信系统应满足以下要求:
— 外部通信应符合有关的国家标准和/或国际标准”;
— 应符合OSI标准通信模型。
附录A
(资料性附录)
应用示例之一— ONC系统体系结构
A.1 数控系统基本体系结构
开放式的数控系统是全模块化的系统结构,模块组件具有互换性、伸缩性、互操作性和可移植性。
数控系统的基本体系结构分为系统平台和应用软件两大部分。
系统平台由系统硬件和系统软件组成。系统软件包括实时操作系统、通信系统、设备驱动程序以及
其他可供选择的系统程序,如数据库系统和图形系统。系统软件通过标准的应用程序接口(即API)向应
用软件提供服务。系统硬件包括组成系统的各种物理实体。系统硬件对外部的表象和接口可以是一致
的,也可以通过设备驱动程序使之与操作系统分隔。
应用软件分为应用平台模块库、系统开发集成环境和用户应用软件三种。模块库提供标准模块,其
中不同厂家生产的相同功能的模块具有相同的API或兼容的API。模块库将至少包含如下模块:运动
控制、传感器控制、离散工/()点控制、系统数据库、网络接口。系统开发集成环境提供用户动态构造系统
的编程环境,系统的配置、拓扑结构的修改、参数的管理以及底层系统的校验和检测均可在此完成,同时
提供用户系统配置文件、参数管理信息和系统分析结果。用户应用软件可以通过用户根据协议自行开发
的,或由系统软件提供的软件实现人机交互。
基本体系结构主要解决如下问题:
a)基本体系结构从功能匕可分为哪些标准组件;
b)各标准组件提供的服务,及各标准组件的接口协议。
A门.1 硬件体系结构
硬件平台是实现系统功能的物理实体,包括微处理器系统、信息存储介质、电源系统、1/0驱动、各
类功能板和其他外设。系统硬件在操作系统、支撑软件和设备驱动程序的支持下,实施或执行独立的任
务功能,协调运行
平台的体系结构分为集中式和分布式两类
由于通用PC机的硬件已形成一系列较为完善、成熟的设计、加工及信号接口标准,并具有ISA,
EISA, PCI扩展插槽,有丰富的软硬件产品可供选择,且可靠性高。建议首选PC机为开放式数控系统的
硬件平台,但不限其他多种不同的实现方案。
A. -1.1.1 集中式PC数控体系结构
集中式体系结构如图A.1所示,是传统的单机系统,根据位置控制模块所实现的功能(或者说位置
控制模块上是否有实现运动控制的微处理器),这种体系结构又可以两种形式:
a) PC直接数控(无DSP运动控制卡)伺服接口卡上没有实现运动控制的微处理器,模块接受微处理器系统通过内部总线传送的位置、速
度或电流指令,用模拟接口或数字接口传送到执行机构的驱动单元。
b) PC嵌人式数控(带DSP运动控制卡)
位置控制模块上配备有实现运动控制的微处理器,模块接受微处理器系统送来的译码解释数据,完
成运动控制算法,进行位置调节或速度调节,将位置、速度或电流指令,用模拟接口或数字接口传送到执
行机构的驱动单元。
A.1.1.2 分布式(现场总线式)体系结构
分布式体系结构如图A.2所示。系统内部功能部件之间及系统与外部连接都可采用网络连接,系
统硬件各部分通过信息管理网络和开放设备级网络互连,传递命令和数据信息。
伺服伺服主轴Uo 1/o
电机电机电机信号信号
图A.2 PC机分布式数控系统体系参考结构
分布式数控系统一般有三种类型网络:
a)控制器与伺服装置连接网络,简称伺服连接网络;
b)控制器与I/O单元连接网络,简称I/O连接网络;
。)控制器外部连接网络。
其中伺服连接网络和I/O连接网络是系统内部网络,要求较强的实时性和可靠性,伺服连接网络
还要求信息传递的严格周期性和同步性。
外部网络可采用以太网连接。
选择设备级网络实现系统互连,建议厂家和用户遵循以下原则:
a)选用性价比高的现场总线;
b)厂家生产的具有总线接口的产品应符合有关规约或规约子集,使用户能选择不同厂商的产品组
建应用系统;
c)用户应首选具有通用总线接口的设备组建系统硬件平台;
d)使用网络设备驱动程序,使得软件平台适用于不同的网络连接。
A.1.2 软件体系结构
如图A.3所示,数控软件可分为基础软件平台、应用平台与应用程序三个层次。系统软件将提供实
时多任务API、文件系统、通用网络API、各类设备驱动程序API等接口。应用平台除了包含离散点I/O
控制API、传感器API、位置控制器API等接口外,还可集成用户根据系统软件平台提供的API自定义
的功能组件接口应用程序这一层含有过程控制、人机界面及系统集成与配置支撑环境等三部分。过程
控制包含G代码解释器、DNC组件及PLC组件。人机界面部分包含状态显示、文本编辑器、MDI组件、
自诊断组件、网络通信组件、数据库操作、通用菜单等组件。系统集成与配置支撑环境将给用户提供一个
方便易用的数控系统配置与安装环境。软件组件的实现采用C/C+十语言。
在数控软件组件开发过程中把对软件组件及其全部开发文档的检索做成通用HTMI超文本可视
HELP系统。
软件体系结构是具有特定形式的体系结构元素或设计元素的集合,即:
软件体系结构={元素·形式·推理)
软件体系结构的元素包括三类:处理元素,数据元素和联接元素。
处理元素指能对数据元素进行转换的部件;数据元素指包含使用和转换信息的元素;联接元素是将
软件体系结构的不同碎片粘在一起的粘合剂,如过程调用,共享数据和共享信息都是起“粘合”体系结构
元素作用的联接元素的实例。
软件体系结构的描述有三个重要视图(简称软件三视图):过程视图,数据视图和联接视图。处理过
程视图的重点放在数据流上;数据视图的重点放在过程流上。数据视图对联接元素不像过程视图那样
重视。
软件平台的数据流图的描述如图A.4所示。其输入数据为G代码指令,如本地的G代码文件、工
厂网络或全球网上的G代码文件、DNC输人的文件、MDl数据等。其输出的数据为位置速度控制指令,
并直接或通过D/A转换送给伺服驱动单元。输人G代码将经过G代码解释器、运动控制器等组件的处
理变换成相应的位置速度电流指令,输出到各相应的伺服驱动单元。
软件平台的过程流图描述如图A.5所示。软件平台文件系统、文本编辑器等组件提供的本地G代
码文件与网络系统提供的网络G代码文件及DNC和MDI等过程组件提供的G代码经G代码解释器
处理后变换成相应的插补数据,经过运动控制器处理变换成相应的位置速度控制指令直接或通过D/A
转换送给伺服驱动单元,实现对各运动坐标轴的控制。A.2 接口和接口操作协议
开放式数控系统包含逻辑上相对独立的组件集合,组件之间、组件和平台之间的接n应明确规定,
使不同厂商的模块能有效的组合,互相作用形成完整功能的控制系统
采用面向对象的方法,借鉴组件对象模型技术,编写详尽的组件接口定义及接口操作协议并和组件
共同发布。
组件具有自己的状态并提供了一组操作来读出和写人这些状态。每个组件可分成两个部分:
a)接口:描述组件的外部行为,并以此作为其他组件的使用依据;
b)实现:接口中描述的操作的实现。应该遵循的原则是:组件中只有接口是可见的,内部的实现对
软件系统的其他部分来说是不可见的和分离的。因此,对单个组件进行修改不会影响到构成系统的其余
部分。
因为接口是确定一个组件是否适用于应用程序的唯一信息源,接口不仅要能够描述其参数和函数
原型,更应该能对其组件及其应用要求进行抽象描述,同时表达将该组件集成到系统中的方式方法。下面以插补器组件为例来说明如何定义组件的接口。
首先定义插补器所需的数据结构:
struct iip_ buf//数控系统的插补数据结构
{
int cmd;//命令:直线,圆弧,时延等,其值可为:
// ICMD RAPID:快速移动
// ICMD LINE:直线
// ICMD CW:顺时针圆弧
刀ICMD CCW:逆时针圆弧
// ICMD DWELL:延时
// ICMD HOME:回零
// ICMD THREAD:螺纹
/ ICMD TAP:攻丝
// ICMD SDIR RAPID:单方向定位快速移动指令
int flag;//插补标志:
刀IFLAG SYNCHRO:速度的量纲为每转进给,旋转轴要求同步
刀IFLAG FINESTOP:精确停止校验
// IFLAG SBLK EN:单段使能
// IFLAG CIRCLE:圆弧
// IFLAG ESC EN:G31
// 工FLAG_ BLK_ BEG:某段G代码插补开始
刀IFLAG BLK END:某段G代码插补结束
int m; // M代码值
int t; //刀具代码
int b; //B代码值
mt s; //主轴转速
unsigned cmd-axes; //命令轴
unsigned out_ enable; //输出使能
long pinc [9];//九个轴的增量
long plong; /九个轴的合成增量
union { //插补参数
struct{//直线或圆弧的参数
long flong;刀速度。单位:分钟进给__脉冲/分
// 转进给脉冲/转
long i,j; /圆弧圆心相对于起点的偏移
int d_ i,d_ j; 刀一般为零
}normal;
stru ct
long lead;
long depth;
}thread;
/螺纹数据
刀螺距
//螺纹深度
stru ct //时延long time; //单位:ms
}dwell;
}data;
int axis 1, axis 2;刀圆弧所在平面的两个轴
struct iip一buf *next,* last;//插补数据链表的前后指针
然后定义送插补数据的步骤:
a)调用函数iip一get_ buf()向插补器申请一个插补数据块,例:
刀申请指定通道的空闲的缓冲区
structiip_buf'aIIPbuf=iip_get_ buf(CurrentChannel);
if(aIIPBuf==NULL) //申请插补缓冲区失败
{
while (aIIPBuf==NULL) //没有空的插补块
//通过插补器回调函数等待插补数据缓冲区空闲,
//关于插补器的回调函数,请参见下文
if ((' xxx->echo_to_ ppi)(xxx->ch_ no,SIG_ WAIT)<=O
return NULL; //出错
else 刀延迟64 ms之后再试
delay me (64);
//再次申请指定通道的空闲的缓冲区
aIIPbuf =iip _ get _buf (CurrentChannel );
)
声
b)填写插补数据,例:
//设置插补命令
aIIPbuf->cmd=ICMD LINE;//直线插补;
/设置插补标志
x=IFLAG_ BLK_ BEG十IFLAG_ B1.K_ END;//本插补数据为一个完全G代码段
if(g[14]==95) //第十四组G代码为G95:旋转速度指定
x{ =IFLAG SYNCHRO;
if(g[12]==61}}g0==60日g。一=9) //精确停止校验
x一IFLAG FINESTOP;
if(g0==31) //G31
x}=IFLAG ESC EN;
aIIPbuf->flag=x ;
刀设置M,T,S,B代码
aIIPbuf->m=7; //M 代码:打开切削液(M07)
aIIPbuf->t=1; //刀具号
aIIPbuf->s=1 000; //主轴转速
aIIPbuf->b=0; //B
aIIPbuf->cmd_ axes=0; //命令轴
aIIPbuf->out -enable =TotalAxes; //哪些轴可以输出if(g[10]!=49)
{
⋯刀刀具长度补偿
//第十组G代码G49:刀具长度补偿取消
}
if (g仁9]1 =40) //第九组G代码G40:刀具半径补偿取消
{
⋯//刀具半径补偿
}
aIIPbuf->data. normal. flong=1 000; //运动速度
aIIPbuf->axis 1一。;//所在平面的两个轴
aIIPbuf->axis 2=1;
//每个轴的进给增量
memset (aIIPbuf->pinc , 0, sizeof (aIIPbuf-> pinc)) ; //
aIIPbuf->pinc [O]二1 000;//第一个轴X的增量1 000 I'm
aIIPbuf->pinc[1]=1 000;//第一个轴X的增量1 000 pm
c)调用函数iip一add_ in(),将插补数据送往插补器进行插补,例:
if(iip_ add_ in(CurrentChannel,alIPBuf) ==一1)
{//送插补数据出错
⋯ 刀送插补数据出错的处理;
}
d)通过用户自己编写的插补器回调函数判断插补数据是否处理完(回调函数参见下文),如果所送
的插补数据已处理完,则调用函数iip_ rls一buff)将所申请的插补数据缓冲区释放掉。
插补器回调函数及如何与插补器进行通信的说明:
插补器的回调函数格式:
int far(* echo_func)(int ch_ no,int sig);
插补器在每一次数据插补开始和结束时,都调用此函数通知插补的调用者。
其中:
ch no 为通道号,
sig 为信息值,sig=sig - h ` 256+sig -1
sig 高八位sig - h为开始/结束标志,
sig - h =1为开始标志,sig_ h一2为结束标志
sig 低八位sig-1为执行段数
用户可调用函数iip一 set_ mode()向插补器设置回调函数,例如:
//定义回调函数
int echo_ from_ iip(int ch,int sig)
{
struct ch data ptr `cdp;
cdp=ch_ data_ ptr+ch_no
int i=sig&Oxff;
sig一sig&.Oxff00;
switch(sig)
{
case SIG WAIT:
//取当前通道的数据区
//信息值的低八位
//信息值的高八位
刀后置处理等待资源时调此函数return RunState;
case SIG BLK BEG:
return 1;
case SIG BLK END
return 1;
/返回运行状态
//插补器开始新一段插补
//插补器已完成当前段的插补
return I;
)
刀在程序的开始处,设置、定义回调函数
int state二iip set mode(ch no,mode,echo from iip);
最后,提供控制插补器运行及获取相关状态的函数接口:
控制插补器的运行函数有:
//设置插补器的回调函数
int iip_ set_ mode( int ch_ no, //通道号
int mode, 刀运行模式:0:停止运行;1:运行
int far (`echo_ func)(int ch_ no, int sig)//回调函数
);
刀起动或停止插补器
void iip start tint ch no, //通道号
int start);刀起动或停止的标志,0:停止,1:起动
//停止插补器
void iip_ stop(int ch_ no);//通道号
刀停止运行时,保存插补器断点
//返回保存断点所需的空间大小(单位为字节)
//如果第二个参数buf值为NULI,则返回保存断点所需的空间大小;
//否则该函数将保存断点到buf,并返回所保存的字节数
int iip save Gnt ch_ no, //通道号
char 'buf);
//恢复插补器断点
/ 返回:-1,所给的断点数据出错;其他:正确
int Cdecl iip load(int ch no, //通道号
char 'buf);//断点数据的指针
//清掉插补器的插补数据
void iip_ clear(int ch_ no,//通道号
int m) ;//清数据的标志:
刀m=0,只清掉不是运行状态的所有插补数据
// m=1,清掉所有插补数据
刀m=2,清掉所有插补数据及运行模态
取插补器运行状态的函数有:
//判断指定通道的插补器是否空闲
/返回: 0:插补器空闲; 1:插补器正忙
int iip_ get- mode (int ch-no); //通道号
刀判断指定通道的插补器是否可以循环起动/返回: 。:不能循环起动; I:可以循环起动
int iip_ cycle_ enable Ont ch_ no);//通道号
//取指定通道的插补器运行状态
刀返回: 0:停止运行
// 1:进给保持
刀2:正常运行
/ 3:运行中遇到重新对准命令
刀4:运行中遇到跳段命令
刀<。:出错即运行不允许
int iip_ cycle_ stat(int ch_ no) ;//通道号
刀判断指定通道的插补缓冲区是否为空
//返回:
// 1:非空
// 0:为空
int iip_ not_ empty Got ch_ no) ;//通道号
刀取指定通道存在轴的当前指令位置到数组pos[9口中
void-Cdecl iip-get-pcmd Got ch-no, //通道号
工。ng 'pos);刀存储指令位置的数组指针
刀取得指定通道的当前的执行段的终点位置
void-Cdecl iip-get-destOnt ch -no, //通道号
long `pos);刀存放终点位置数据的指针