华中数控PLC编程说明书
set_axis_home()起动相关轴回零。
2) 在PLC扫描程序入口plc1()中检测回零开关是否已到,如果轴碰到
回零开关,通过轴控制字*axis_ctrl(x)|AX_HOME_SW告诉伺服系统回零开关已到,否则清该控制字位。
3) 在PLC扫描程序入口plc2()中检测系统伺服相关轴状态字位
*axis_stat(x)& AX_HOME_LAMP来判断指定轴是否已找到零位,如果轴已完成回零,则点亮回零灯,告诉机床操作员相关轴回零完成。 例:
………… #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( ) //手动方式控制处理函数 {
…………
switch(mode_sel) //根据手动操作模式分别进行处理 { ………… case MODE_REF_RETURN: //回零模式 set_axis_jog(0,0); //禁止X轴点动 set_axis_jog(1,0); //禁止Y轴点动 set_axis_jog(2,0); //禁止Z轴点动 //如果进给保持设定(进给保持键X1.1为常闭点) if((X[1]&R[11]&R[21]&R[31]&2)==0) { //进给保持键被按下,取消所有轴回零 set_axis_home(0,0); //取消X轴回零 set_axis_home(1,0); //取消Y轴回零 set_axis_home(2,0); //取消Z轴回零 } else { //X、Y、Z轴正点动的输入点分别为X2.1、X2.3、X2.5 if(X[2]&R[12]&(~R[22])&(~R[32])&0x02) set_axis_home(0,1); //起动X轴回零 if(X[2]&R[12]&(~R[22])&(~R[32])&0x08) set_axis_home(1,1); //起动Y轴回零 if(X[2]&R[12]&(~R[22])&(~R[32])&0x20) set_axis_home(2,1); //起动Z轴回零 }
41
华中数控PLC编程说明书
return; ………… }
…………
}
………… void plc1( ) //PLC扫描入口函数1 {
………… plc1_time=16; //间隔16毫秒后,再调用plc1()函数
…………
//回零信号处理
//X、Y、Z轴回零的输入点分别为X3.3、X3.4、X3.5 u1=X[3]&R[13]&R[23]; u2=X[3]|R[13]|R[23]; if(u1&0x08) *axis_ctrl(0)|= AX_HOME_SW; // X轴回零 else if((u2&0x08)==0)
*axis_ctrl(0)&=~AX_HOME_SW; if(u1&0x10) *axis_ctrl(1)|= AX_HOME_SW; // Y轴回零 else if((u2&0x10)==0) *axis_ctrl(1)&=~AX_HOME_SW; if(u1&0x20) *axis_ctrl(2)|= AX_HOME_SW; // Z轴回零 else if((u2&0x20)==0) *axis_ctrl(2)&=~AX_HOME_SW; //记住输入信号最后三次的采样值 R_ui[30/2]=R_ui[20/2]; R_ui[32/2]=R_ui[22/2]; R_ui[20/2]=R_ui[10/2]; R_ui[22/2]=R_ui[12/2]; R_ui[10/2]=X_ui[0/2]; R_ui[12/2]=X_ui[2/2]; } void plc2( ) //PLC扫描入口函数2 {
………… plc2_time=32; //间隔32毫秒后,再调用plc2()函数
………… //回零灯 Y[2]&=~0xe0; //熄灭X、Y、Z轴回零灯
42
华中数控PLC编程说明书
if(*axis_stat(0)&AX_HOME_LAMP) Y[1]|=0x10; //点亮X轴回零灯(输出点为Y1.4) else Y[1]&=~0x10; //灭掉X轴回零灯(输出点为Y1.4) if(*axis_stat(1)&AX_HOME_LAMP) Y[1]|=0x20; //点亮Y轴回零灯(输出点为Y1.5) else Y[1]&=~0x20; //灭掉Y轴回零灯(输出点为Y1.5) if(*axis_stat(2)&AX_HOME_LAMP) Y[1]|=0x40; //点亮Z轴回零灯(输出点为Y1.6) else Y[1]&=~0x40; //灭掉Z轴回零灯(输出点为Y1.6) ………… //记住输入信号最后三次的采样值 R_ui[130/2]=R_ui[120/2]; R_ui[132/2]=R_ui[122/2]; R_ui[120/2]=R_ui[110/2]; R_ui[122/2]=R_ui[112/2]; R_ui[110/2]=X_ui[100/2]; R_ui[112/2]=X_ui[102/2]; }
5.2 机床轴点动
点动控制方式下,只要用户按下点动键,机床轴便不停止运动。在手动方式下需要点动控制机床轴运动时,调用函数set_axis_jog()即可点动相关轴运动。该函数的原型为:
void set_axis_jog( int axis, //点动轴号:0-15 int speed); //点动速度,单位:内部脉冲/插补周期 在PLC程序中,点动控制的主要流程为:
1) 在手动操作点动方式下,根据面板按键计算点动速度
2) 检测点动按键状态,调用函数set_axis_jog()点动/停止相关轴。 例:
………… #define Speed_MAX 420 //坐标轴移动速度最大值 #define mode_sel R[0] //模式选择 #define jog_speed R[4] //点动速率 ………… void manual( ) //手动方式控制处理函数
43
华中数控PLC编程说明书
{
…………
switch(mode_sel) //根据手动操作模式分别进行处理 { ………… case MODE_JOG: //点动模式 //计算X轴点动速度 i = (long) jog_speed*(*axis_vmax(0))/Speed_MAX; if(X[2]&R[12]&R[22]&0x80) //快进(输入点为X2.7) i*=3; switch(X[2]&R[12]&R[22]&0x06) //X轴点动按键状态检测 { case 0x02: //+X(输入点为X2.1) i=i; break; case 0x04: //-X(输入点为X2.2) i=-i; break; default: i=0; } set_axis_jog(0,i); //X轴点动 //计算Y轴点动速度 i = (long) jog_speed*(*axis_vmax(1))/Speed_MAX; if(X[2]&R[12]&R[22]&0x80) //快进(输入点为X2.7) i*=3; switch(X[2]&R[12]&R[22]&0x18) //Y轴点动按键状态检测 { case 0x08: //+Y(输入点为X2.3) i=i; break; case 0x10: //-Y(输入点为X2.4) i=-i; break; default: i=0; //点动速度为零,即停止运动 } set_axis_jog(1,i); //Y轴点动 //计算Z轴点动速度 i = (long) jog_speed*(*axis_vmax(2))/Speed_MAX; if(X[2]&R[12]&R[22]&0x80) //快进(输入点为X2.7) i*=3; switch(X[2]&R[12]&R[22]&0x60) //Z轴点动按键状态检测 {
44