华中数控PLC编程说明书
该函数返回1表示指定轴已停止运动;返回0表示轴正在移动
第六章 辅助指令M、S、T、B的控制
在PLC程序中,对辅助指令进行控制涉及到辅助指令响应函数及其初始化、PLC与数控系统的通信等过程。本章将示例说明对辅助指令的控制方法。 数控系统在自动运行过程中碰到辅助指令MSTB时,将向PLC发送MSTB指令信号、调用相应的响应函数并等待PLC给出动作完成的应答信号。MSTB响应函数在执行完相关动作后,应向数控系统给出应答信号,否则数控系统将一直等待。
PLC向数控系统给出应答信号有两种方式:
1) PLC在完成所有相应动作后再给出应答信号;
2) PLC记录下相应指令,马上给出应答信号,然后再执行相应动作。
6.1 辅助指令响应函数及其初始化
数控系统在自动运行过程中碰到辅助指令MSTB时,将向PLC发送MSTB指令信号并调用相应的响应函数。这些响应函数必须在PLC初始化时,即在函数init()中,调用函数set_mst_func()来指定,如果不指定,系统将调用缺省的响应函数,该函数将对MSTB指令不作实际处理,只是对数控系统给出辅助指令执行完的信号。该函数的原型定义为:
void set_mst_func( int ch, //通道 char name, //代码类型:M、S、T、B、E void (*mst_func)(int)); //响应函数地址 PLC辅助指令的初始化可示例如下,E指令稍后便会说明:
void exec_M(int ch) { mod_M_code(ch)=-1; } void exec_S(int ch) { mod_M_code(ch)=-1; } void exec_T(int ch) { mod_M_code(ch)=-1; } void exec_B(int ch) { mod_M_code(ch)=-1; } void exec_MST_mod(int ch) { ; } void init(void) //系统初始化程序 {
set_mst_func(0,'M',exec_M); //辅助功能M指令响应函数设置 set_mst_func(0,'T',exec_T); //刀库功能T指令响应函数设置
49
华中数控PLC编程说明书
}
set_mst_func(0,'S',exec_S); //主轴速度功能S指令响应函数设置 set_mst_func(0,'B',exec_B); //刀库功能T指令响应函数设置 set_mst_func(0,'E',exec_MST_mod); //MST模态指令响应函数设置 …………
6.2访问辅助指令模态值
对于MSTB的当前命令值,即数控加工程序传递过来的辅助指令,PLC程序可通过如下宏进行访问: 6.2.1 通道当前的M代码
#define ch_M_code(x) (F_i[(x)*20+164]) //M代码
其中宏参数x表示通道号,其值可为0,1,2,3,即系统最大可有4个通道。例:
通道0当前的M代码为 ch_M_code(0) 6.2.2 通道当前的T代码
#define ch_T_code(x) (F_i[(x)*20+165]) //T代码
其中宏参数x表示通道号,其值可为0,1,2,3,即系统最大可有4个通道。 6.2.3 通道当前的B代码
#define ch_B_code(x) (F_i[(x)*20+166]) //B代码
其中宏参数x表示通道号,其值可为0,1,2,3,即系统最大可有4个通道。 6.2.4 通道当前的S代码
#define ch_S_code(x) (F_i[(x)*20+167]) //S代码
其中宏参数x表示通道号,其值可为0,1,2,3,即系统最大可有4个通道。
6.3 在PLC程序中控制系统辅助指令模态值与系统应答
PLC程序可以更改数控系统的MSTB模态值,即向数控系统发送辅助指令或其运行情况。具体实现是对宏ch_mst_mod(ch,x)进行赋值相关值。为便于记忆方便,系统提供了如下宏对辅助指令进行控制: 6.3.1 通道当前的M代码模态值
#define mod_M_code(ch)
(*ch_mst_mod(ch,0))//M代码模式
50
华中数控PLC编程说明书
其中宏参数ch表示通道号,其值可为0,1,2,3,即系统最大可有4个通道。 6.3.2 通道当前的S代码模态值
#define mod_S_code(ch) (*ch_mst_mod(ch,1)) //S代码模式
其中宏参数ch表示通道号,其值可为0,1,2,3,即系统最大可有4个通道。 6.3.3 通道当前的T代码模态值
#define mod_T_code(ch)
(*ch_mst_mod(ch,2)) //T代码模式
其中宏参数ch表示通道号,其值可为0,1,2,3,即系统最大可有4个通道。 6.3.4 通道当前的B代码模态值
#define mod_B_code(ch) (*ch_mst_mod(ch,3))//B代码模式
其中宏参数ch表示通道号,其值可为0,1,2,3,即系统最大可有4个通道。 当执行“ *ch_mst_mod(ch,x) = -1”后,数控系统将认为相关辅助指令执行完毕,并自动继续执行下一条数控加工指令。如语句:
mod_M_code(0)=-1
将表示当前M代码已执行完成,数控系统将自动运行下一条指令。
但如果在这之前置标志“*msthold_dis(ch)|=CH_M_HDIS”,也可让数控系统继续等待,直到PLC清掉该标志。
因此,PLC一定要在相关辅助指令执行完后,才能将对应的模态变量值赋值为“-1”。在有些场合,PLC可以在不执行完相关辅助指令时,让系统继续执行下一指令。这时,可对辅助指令的缓冲模态进行赋值,使得系统向PLC发送“E”指令,并执行相关辅助指令。
例: PLC初始化时可强制系统的主轴转速S为500转/分钟。数控系统在探得S模态值被PLC改变后,会向PLC发送辅助指令“E”,并调用其对应的响应函数。
#define mod_S_buf (*ch_mst_mod(0,7)) //未执行完的S指令缓冲区 void exec_M(int ch) {; } void exec_T(int ch) {; } void exec_B(int ch) {; }
#define spdl_cmd R_ui[46/2] void exec_MST_mod(int ch) { if(ch==0) //设系统只有0通道存在 spdl_cmd=mod_S_buf; // 保存主轴命令,在主轴控制模块函数中再处理 }
51
华中数控PLC编程说明书
void exec_S(int ch) {//S指令处理 if((mst_lock()==1)||(mod_S_code(ch)<0)) { //MST锁住 mod_S_code(ch)=-1; return; } mod_S_buf=mod_S_code(ch); mod_S_code(ch)=-1; //告诉数控系统S指令执行完毕,可自动运行下条指令 }
void init(void) //系统初始化程序 {
set_mst_func(0,'M',exec_M); //辅助功能M指令响应函数设置 set_mst_func(0,'T',exec_T); //刀库功能T指令响应函数设置 set_mst_func(0,'S',exec_S); //主轴速度功能S指令响应函数设置 set_mst_func(0,'B',exec_B); //刀库功能T指令响应函数设置 set_mst_func(0,'E',exec_MST_mod); //MST模态指令响应函数设置 mod_S_buf=500; …………… }
6.4 辅助指令控制示例
换刀T指令的控制可参见第四章第节的示例。本节将给出M代码控制的示例。S代码的控制示例将在第八章给出。
…………
void exec_M(int ch); void init(void) //系统初始化程序 {
set_mst_func(0,'M',exec_M); //辅助功能M指令响应函数设置 ………… }
void exec_M(int ch) { unsigned den; if(mac_lock()||mst_lock()) //机床锁住或MST锁住 { mod_M_code(ch)= -1; //M代码停 return; }
52