第6讲:PLC运动控制的实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
{
//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 轴点动按键状态检测
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)
{ case 0x20:
//+Z(输入点为 X2.5)
i=i;
break;
case 0x40:
//-Z(输入点为 X2.6)
i=-i;
break;
default: i=0;
//点动速度为零,即停止运动
}
set_axis_jog(2,i);
return; ………… } ………… }
5.3 机床轴步进
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)
//坐标轴移动速度最大值
#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( ) //手动方式控制处理函数
//如果进给保持设定(进给保持键 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 轴回零
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];
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;
int speed); //点动速度,单位:内部脉冲/插补周期
在 PLC 程序中,点动控制的主要流程为:
1) 在手动操作点动方式下,根据面板按键计算点动速度
2) 检测点动按键状态,调用函数 set_axis_jog()点动/停止相关轴。
例:
…………
#define Speed_MAX 420
//坐标轴移动速度最大值
int start_stop); //为 0:取消回零 非 0:回零
当碰到回零开关时,PLC 程序必须通过轴控制字*axis_ctrl(x)|AX_HOME_SW
告诉伺服系统回零开关已到。当伺服轴找到机械零位后,系统会通过轴状态字
*axis_stat(x)& AX_HOME_LAMP 告诉 PLC 零位已到。因此,在 PLC 程序中,回
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)
//坐标轴移动速度最大值
#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( ) //手动方式控制处理函数
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);
if(X[2]&R[12]&(~R[22])&(~R[32])&0x20)
set_axis_home(2,1); //起动 Z 轴回零
}
return;
…………
}
…………
} …………
void plc1( ) //PLC 扫描入口函数 1 {
………… plc1_time=16; //间隔 16 毫秒后,再调用 plc1()函数
第五章 PLC 运动控制的实现
第三章介绍了 PLC 程序可调用的一些函数接口,利用其中一些函数便可实现轴运动控 制的实现。本章将示例说明各运动控制函数的使用
5.1 机床轴回零控制
在手动方式下需要控制机床轴回零时,调用函数 set_axis_home()即可起动相关轴开始 回零。该函数的原型为:
void set_axis_home( int axis, //所指定的轴号:0-15
{
………… 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 轴点动
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;
void plc2( ) //PLC 扫描入口函数 2
{
…………
plc2_time=32; //间隔 32 毫秒后,再调用 plc2()函数
…………
//回零灯
Y[2]&=~0xe0;
//熄灭 X、Y、Z 轴回零灯
if(*axis_stat(0)&AX_HOME_LAMP)
Y[1]|=0x10;
//点亮 X 轴回零灯(输出点为 Y1.4)
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
//记住输入信号最后三次的采样值 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];
Leabharlann Baidu
R_ui[12/2]=X_ui[2/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]) )
#define mode_sel
R[0]
//模式选择
#define jog_speed R[4]
//点动速率
…………
void manual( ) //手动方式控制处理函数
{
…………
switch(mode_sel) //根据手动操作模式分别进行处理
{
…………
case MODE_JOG:
//点动模式
//计算 X 轴点动速度
{
…………
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);
}
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 轴回零
//Z 轴点动
机床轴步进要求用户按一次步进轴,相关轴便步进指定的距离,因此 PLC 程序必须捕
捉步进按钮的上升沿(或下降沿)脉冲信号。在手动方式下需要步进控制机床轴运动时,调用
函数 set_axis_step()即可步进相关轴运动。该函数的原型为:
void set_axis_step(int axis,
零控制的主要流程是:
1) 在手动回零模式下,检测用户按回零起动键(在一些机床上,这些按
键被定义为+X 点动、+Y 点动、+Z 点动等)后,调用函数 set_axis_home()
起动相关轴回零。
2) 在 PLC 扫描程序入口 plc1()中检测回零开关是否已到,如果轴碰到回
零开关,通过轴控制字*axis_ctrl(x)|AX_HOME_SW 告诉伺服系统回零
//步进轴号:0-15
long displacement);//步进增量,单位:内部脉冲当量
在 PLC 程序中,步进控制的主要流程为:
1) 在手动操作步进方式下,根据面板按键计算步进轴及步进增量。
2) 检测步进按键上升沿脉冲后,调用一次函数 set_axis_step(),步进相关轴。
例:
…………
#define Speed_MAX 420
………… //回零信号处理 //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;
开关已到,否则清该控制字位。
3) 在 PLC 扫 描 程 序 入 口 plc2() 中 检 测 系 统 伺 服 相 关 轴 状 态 字 位
*axis_stat(x)& AX_HOME_LAMP 来判断指定轴是否已找到零位,如果
轴已完成回零,则点亮回零灯,告诉机床操作员相关轴回零完成。
例:
…………
#define Speed_MAX 420