华中数控世纪星PLC编程说明书 下载本文

华中数控PLC编程说明书

case 0x20: i=i; break; case 0x40: i=-i; break; default: i=0; } set_axis_jog(2,i); return; ………… }

………… }

//+Z(输入点为X2.5)

//-Z(输入点为X2.6)

//点动速度为零,即停止运动

//Z轴点动

5.3 机床轴步进

机床轴步进要求用户按一次步进轴,相关轴便步进指定的距离,因此PLC程序必须捕捉步进按钮的上升沿(或下降沿)脉冲信号。在手动方式下需要步进控制机床轴运动时,调用函数set_axis_step()即可步进相关轴运动。该函数的原型为:

void set_axis_step( int axis, //步进轴号:0-15 long displacement); //步进增量,单位:内部脉冲当量 在PLC程序中,步进控制的主要流程为:

1) 在手动操作步进方式下,根据面板按键计算步进轴及步进增量。 2) 检测步进按键上升沿脉冲后,调用一次函数set_axis_step(),步进相

关轴。 例:

………… #define Speed_MAX 420 //坐标轴移动速度最大值 #define mode_sel R[0] //模式选择 #define axis_sel R_c[1] //轴选择 #define step_mul R_i[2/2] //步进倍率 #define jog_speed R[4] //点动速率 ………… void manual( ) //手动方式控制处理函数 {

…………

45

华中数控PLC编程说明书

switch(mode_sel) //根据手动操作模式分别进行处理 { ………… case MODE_STEP: //步进模式 switch(X[2]&R[12]&(~R[22])&(~R[32])&0X7e) { // 根据不同按键的上升沿信号进行处理 case 0x02: //+X步进 set_axis_step(0,step_mul); break; case 0x04: //-X步进 set_axis_step(0,-step_mul); break; case 0x08: //+Y步进 set_axis_step(1,step_mul); break; case 0x10: //-Y步进 set_axis_step(1,-step_mul); break; case 0x20: //+Z步进 set_axis_step(2,step_mul); break; case 0x40: //-Z步进 set_axis_step(2,-step_mul); break; } return; ………… }

………… } ………… void plc2( ) //PLC扫描入口函数2 {

………… plc2_time=32; //间隔32毫秒后,再调用plc2()函数

………… if( (R_ui[110/2]==X_ui[100/2] && R_ui[120/2]==X_ui[100/2]) ||(R_ui[112/2]==X_ui[102/2] && R_ui[122/2]==X_ui[102/2]) ) { mode_sel=(auto_enable)? MODE_AUTO:0; switch(X_ui[100/2]&0xf0) //进给修调波段开关状态处理 { //进给修调指定

case 0x00: feedover=10; break; case 0x10: feedover=30; break; case 0x20: feedover=50; break; case 0x30: feedover=80; break; case 0x40: feedover=100; break;

46

华中数控PLC编程说明书

case 0x50: feedover=140; break; default: feedover=100; } mode_sel=(auto_enable)? MODE_AUTO:0; //取工作方式 switch(X[100]&R[110]&0xf) { case 0: //自动方式 *ch_ctrl(0) &= ~CH_SGL_BLK; mode_sel=(auto_enable)? MODE_AUTO:0; break; case 1: //单段方式 *ch_ctrl(0) |= CH_SGL_BLK; mode_sel=(auto_enable)? MODE_AUTO:0; break; case 2: //点动方式 mode_sel=MODE_JOG; break; case 3: //步进方式 mode_sel=MODE_STEP; break; case 4: //回零方式 mode_sel=MODE_REF_RETURN; break; case 5: //手动攻丝 mode_sel=MODE_JOG; break; default: mode_sel=0; } } if((X[100]&R[110]&0xf0)&&(mode_sel==MODE_STEP)) { //取增量倍率 switch(X[100]&R[110]&0xf0) { case 0x10: step_mul=1; break; case 0x20: step_mul=10; break; case 0x30: step_mul=100; break; case 0x40: step_mul=1000; break; case 0x50: step_mul=1000; break; default: step_mul=100; break; } }

………… }

47

华中数控PLC编程说明书

5.4 机床轴直线运动

除点动、步进等机床轴运动外,华中数控系统还为PLC提供了如下控制轴运动的函数,以便用户灵活控制轴运动: 5.4.1 设置轴移动距离及速率

void set_axis_move( int axis,

//轴号:0-15

long displacement, //移动距离增量

int speed); //移动速率,单位:内部脉冲/插补周期

int axis, //轴号:0-15

long position, //移动的目的地,绝对坐标

int speed);//移动速率,单位:内部脉冲/插补周期

5.4.2 设置轴移动的目的地及速率

void set_axis_moveto(

5.5 停止机床轴运动

要停止机床相关轴运动,在PLC程序中,调用set_axis_stop()即可。该函数的原型定义为:

//设置指定轴停止运动

void set_axis_stop(int axis); //轴号:0-15

5.5 机床轴运动状态获取

在PLC程序中,可能会需要判断某些轴是否正在运动、取轴的当前绝对位置等。系统提供了如下函数供PLC使用: 5.5.1 取指定轴当前位置

long get_axis_pos(int axis); //轴号:0-15

返回值为指定轴当前位置的绝对坐标,单位为内部脉冲当量,一般为1微米。

5.5.2 判断指定轴是否停止

int get_axis_den(int axis);

//轴号:0-15。

48