华中数控世纪星PLC编程说明书

华中数控PLC编程说明书

} if(ToolChangeState != 0) // 正在换刀,立等待换刀完成 return; T=mod_T_code(ch)/100; // 计算目地刀位号 switch(T) { case 1: //刀位1 case 2: //刀位2 case 3: //刀位3 case 4: //刀位4 ToolDesPos = T; // 目地刀位号 ToolChangeState = 1; // 启动换刀 break; case 0: default: // 只有四个刀位,对其它刀位不作处理 mod_T_code(ch)=-1; // 向数控系统发送完成T指令的信号 break; } }

//刀具手动换刀的相关信号输入检测 void ToolManualActionInput(void) { if((X[3]&R[13]&0x80)==0x00) { //急停 Y[0] &= ~0x04; //刀架启动/停止灯灭 Y[2] &= ~0x0C; //清刀架正反转位 return; } if(mst_lock()||mac_lock()) { //机床锁住 Y[0] &= ~0x04; //刀架启动/停止灯灭 Y[2] &= ~0x0C; //清刀架正反转位 return; } if(mode_sel!=MODE_JOG) { //当前不是手动状态 return; } switch(X[1]&0x03) //刀具应该到的位置 { case 0x03: //刀号1 ToolDesPos = 1; break; case 0x01: //刀号2

37

华中数控PLC编程说明书

ToolDesPos = 2; break; case 0x02: //刀号3 ToolDesPos = 3; break; case 0x00: //刀号4 ToolDesPos = 4; break; } if(X[1]&R[11]&(~R[21])&(~R[31])&0x10) { //刀架启动上升沿信号处理 if(ToolDesPos != ToolPos) //需要换刀 if(ToolChangeState==0) //设置换刀状态 ToolChangeState = 1; } }

//换刀控制

void ToolAction(void) { switch(X[3]&0x0f) //当前刀具实际位置 { case 0x01: //刀号1 ToolPos = 1; break; case 0x02: //刀号2 ToolPos = 2; break; case 0x04: //刀号3 ToolPos = 3; break; case 0x08: //刀号4 ToolPos = 4; break; } //目的刀具已到 if(ToolDesPos==ToolPos) { if(ToolChangeState==0) //换刀已完成 { Y[0] &= ~0x04; //刀架启动/停止灯灭 Y[2] &= ~0x0C; //清刀架正反转位 return; } else if (ToolChangeState==1) //换刀到位后,要反转刀架一下

38

华中数控PLC编程说明书

ToolChangeState=2; } switch(ToolChangeState) { case 0: //刀具到位 Y[0] &= ~0x04; //刀架启动/停止灯灭 Y[2] &= ~0x0C; //清刀架正反转位 break; case 1: //转动刀架(正向) start moving tool Y[0] |= 0x04; //刀架启动/停止灯亮 Y[2] &= ~0x0C; //清刀架正反转位 Y[2] |= 0x04; //置刀架正转 break; case 2: //反向转动刀架,然后延时 10*16 ms,以便锁住刀具。 Y[0] |= 0x04; //刀架启动/停止灯亮 Y[2] &= ~0x0C; //清刀架正反转位 Y[2] |= 0x08; //置刀架反转 case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: ToolChangeState++; break; case 13: //换刀完成 ToolChangeState = 0; mod_T_code(0) = -1; // 向数控系统发送完成T指令的信号 break; } }

// 手动方式处理 void manual(void) {

……………… ToolManualActionInput(); //刀具手动换刀的相关信号输入检测 ……………… }

// 在plc1()函数中调用换刀实现函数ToolAction() void plc1(void)

39

华中数控PLC编程说明书

{

………………

plc1_time=16; //间隔16毫秒后,再调用plc1()函数 ……………… if((stat&CH_CYCLE_LAMP)==0) //在非自动运行状态 manual(); //调用手动处理 ………………

ToolAction (); //调用换刀动作的实现函数 ………………

//记住第0-3组信号的最近四次采样值,以实现软件滤波 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]; }

第五章 PLC运动控制的实现

第三章介绍了PLC程序可调用的一些函数接口,利用其中一些函数便可实现轴运动控制的实现。本章将示例说明各运动控制函数的使用

5.1 机床轴回零控制

在手动方式下需要控制机床轴回零时,调用函数set_axis_home()即可起动相关轴开始回零。该函数的原型为:

void set_axis_home( int axis, //所指定的轴号:0-15 int start_stop); //为0:取消回零 非0:回零 当碰到回零开关时,PLC程序必须通过轴控制字*axis_ctrl(x)|AX_HOME_SW告诉伺服系统回零开关已到。当伺服轴找到机械零位后,系统会通过轴状态字*axis_stat(x)& AX_HOME_LAMP告诉PLC零位已到。因此,在PLC程序中,回零控制的主要流程是:

1) 在手动回零模式下,检测用户按回零起动键(在一些机床上,这些按

键被定义为+X点动、+Y点动、+Z点动等)后,调用函数

40

联系客服:779662525#qq.com(#替换为@)