薛 刚
(上海机床厂有限公司 上海 200093)
目前,随着国内外数控系统在柔性、可靠性和开放性等方面的飞速发展,许多理论和技术问题得到了较好的解决,数控机床可开发成为智能机床,满足用户的个性化需求。为了适应个性化市场的需要,数控系统向着开放式结构发展。发那科公司提供的 FANUC Series 0i-TF 数控系统没有专门针对磨床的控制界面,但它提供了 C语言执行器功能,用户可以通过二次开发把自己的功能模块集成到系统中去,满足定制化的需求。
发那科的 C语言执行器可以将机床制造商的独有画面编入发那科系统,自定义 CNC系统软件的显示和操作系统功能。可以用应用程序编写的画面置换 CNC的任意画面。和编写普通计算机程序相同,可以用一般的C语言来编写显示和操作系统的应用程序,并将执行文件编入CNC。将在计算机上编译的程序通过存储卡保存到CNC装置的Flash ROM,在启动CNC时,被读入内存并在C语言执行器上执行,流程开发流程如图1所示。
图1 软件开发流程
功能: Macro executor + C Language Executor
Custom software size
C Language Executor additional SRAM
参数: 8661 变量区容量(一般设置为:59)
8662 SRAM磁盘容量(一般设置为:4)
8781 C执行器使用的DRAM容量(一般设置为:96)
在发那科C语言执行器功能包里已经搭好了应用程序的框架结构,应用程序主要由5个独立任务构成,如图2所示。
图2 任务框架
(A)主任务(tsk1main.c)
主任务进行画面显示、键输入、CNC数据的读写等几乎所有的处理。可以使用所有程序库的功能。
(B)通讯任务(tsk2main.c)
通讯任务通常在和主任务独立进行,监视周期启动的各种状态,阅读机/穿孔机的相关处理。
(C)报警任务(tsk3main.c)
通常周期性启动报警任务,进行各种状态的监视等。
(D)窗口任务(tsk4main.c)
在任意画面上进行窗口显示。
(E)高级任务(tsk5main.c)
独立的按一定周期执行任务,实时进行高优先级的处理和快速数据监视处理等。
主任务只在用户画面显示过程中执行。报警任务和通信任务都与显示画面无关,也就是说可以在后台执行。另外,应用程序可以只有一个任务构成,即主任务。
任务之间的数据存取
在进行其他任务和数据之间的通信时,使用任务之间的公共变量(dramver.c和sramver.c)中定义,作为任务之间的公共变量配置在任务之间的公共内存里,如图3所示。
图3 变量
task1miain.c是整个C语言执行器的主程序,程序会从task1main开始运行。task1main.c中的程序当进入用户画面中才开始运行,程序流程见图4。
图4 程序流程
1)设定用户画面
登陆用户画面号:设定CRT模式:
设定 CNC画面和用户画面切换方式:设定调色板:
打开显示(CRT_OPEN):
设定视频模式画面显示
关闭显示(CRT_CLOSE):
/* 用户画面设定 */
crt_setuserscrn( scrn_tbl_size(crt_table),crt_table);
2)登陆用户画面号函数
在主任务中至少登陆一个用户画面(即使不需要 C语言执行器的用户画面),如果不指定用户画面就不能再次从 CNC画面返回用户画面。可以置换传统的CNC画面,也可以使用 C语言执行器专用画面。
crt_cncscrn(CRT_POS_ALL) ; // 设定用户画面返回方式。
/* 设定屏幕显示方式 */
_setvideomode( _VRES16COLOR ); // 16色,图像640×480,文字80×30
/* 设定用户画面到CNC画面切换方式 */
crt_setswt( CRT_SWT_GREN ) ; // 设定是否可切换、报警时是否切换,是否使用MDI键切换等
3)设定CNC画面和用户画面的切换方式
Bit 0 0:允许从用户画面向CNC画面切换 1;禁止从用户画面向CNC画面切换(CRT_SWT_DIS)
Bit 2 0:在图形显示打开过程中禁止画面切换1:在图形显示打开过程中可以画面切换(CRT_SWT_GREN);
Bit 3 CNC画面发生报警时,是否自动向报警画面切换0:根据通常CNC的设定(参数3111#7);1:基于用户画面(参数8650#1)(CRT_SWT_ACNC)
Bit 4 CNC软件对MDI面板的功能键 0:进行通常读取1:不能进行读取(CNC软键侧不能进行画面切换)(CRT_SWT_MFKY)。
在发那科基础框架下,还需要自己编写扩展一些辅助功能框架。运用这些功能来进行画面的处理。
win.c中的程序主要负责显示界面,一些非动态的图像以及文字的显示。
如上图所示,添加了一个win_test函数的定义,在其中定义了win_test这个函数中包含的内容。
Voidwin_test(void)
{ curWIN->WinFunc=win_test;//设定当前画面的函数为win_test。
curWIN->RefreshFunc=vawin_test;//设定当前画面的变量画面为vawin_test。
curWIN->InputFunc=0;//设定当前输入函数为0,0既是不调用输入函数。
curWIN->SpecialCurs=0;//判断是否使用特殊光标。
curWIN->LL_index=0x01;//函数画面所在的软按键层次。
curWIN->WinKey=SOFT_F1;//函数调用使用的软按键。
element_background();//插入背景
dlg_cncstate();//插入NC非动态状态显示
vawin.c中主要是负责显示界面中的一些动态的变量,如宏变量显示等。
通过上述两步,画面已经可以显示出一个画面的框架,现在需要将他们添加入软件中,便可以通过软件调用出我们所制作的画面。
vadailog.c文件中主要包括了一些宏变量等变量的显示,应为宏变量不同文字显示,需要根据宏变量的变化适时刷新。
void vagrinding_GRHMI(short cys,short cxs)//设置画面变量显示
softkey.c 中主要是包括了软按键的排序,画面按钮的功能
打开softkey.c文件, 出现如下显示:
void ll_init0(void);
void ll_init1(void);
void ll_init2(void);
void ll_init3(void);
……
void ll_init12(void);
如上显示的函数中使画面的软件函数 void ll_init1(void)- void ll_init12(void);为不同的软件按钮层次所对应的函数,每一个函数对应一个软件层。这个函数可以添加,也可以直接在函数中编辑。如下图中所示的,在 void ll_init1(void)函数中添加一个画面。一个画面存在10个软按键,我们选择一个空着的软按键作为该画面选择的按键。
把win_test画面插入在SOFT_F6按键,对应的画面上的第6个软按键。
temp=(LLLnode*)malloc(sizeof(LLLnode));//这里为一个temp零时的结构体声明空间。
temp->ll_next=0;//
temp->ll_WinKey=SOFT_F6;//画面的按键编号为F6。
temp->ExeFunc=win_test;//选择该画面的运行函数,在这里是我们的画面函数,win_test。
temp->IndexFunc=0;//页面跳转选择,这里为0,可以填写一个。
temp->ll_index=0x01;//当前页面软件所属的层次。
temq->ll_next=temp;
temq=temp;
通过上述的过程,win_test就可以被第一层次的第6个软按键所调用。然后,可以编辑软按键所显示的字符或者图形。
主要是画面中的输入设定,在 input中设定输入参数的宏变量值,输入方式等。
打开input.c文件,编辑输入函数,如下所示:
void input_grinding(void)
{struct odbst status;// 声明一个状态结构体
double MacroValue=0;// 声明一个双字型变量unsigned short nMacroNum=0;// 声明一个无符号短型变量
cnc_statinfo(&status);//读取系统状态到status中
if(status.aut==0 || status.emergency==0 )//判断当前状态
WinRiver Compiler
作用:
源文件到最终文件生成的过程由 WinRiver Compiler直接编译完成。
MakeFile:
编译所需要的相关内容定义都在批处理文件Makefile中,执行时只需输入nmake.exe命令即可。
目标文件:最终文件为存储卡文件格式(.mem)
实际使用:在 NCguide中,复制 DLL文件到NCguide文件夹;在实际CNC系统时,用CF卡复制MEM文件到系统F-ROM,显示界面效果如图5所示。
图5 界面样式
利用 C语言执行器提供的顺序控制把用C语言设计的人机界面嵌入到C语言执行器系统中, 最终把特有的磨床功能模块集成到C语言执行器系统中,形成了适合于磨床的操作系统。操作人员可以很方便地选择加工程序,并进行参数的编辑,而无须修改工件加工程序,还可以随时得到加工过程中的各种状态信息,实现数控机床的监控和操作。这样,不仅扩展了数控系统的使用范围,简化了操作,提高了劳动生产率, 而且还可`以为机床的维护提供大量的有价值的参考信息。