可用下列方法调用宏程序,调用方法大致可分为两类:宏程序调用和子程序调用。即使在MDI运行中,也同样可以调用程序。
宏程序调用的方法:
1)简单调用(G65)。
2)模态调用(G66、G67)。
3)利用G代码的宏程序调用。
4)利用M代码的宏程序调用。
子程序调用的方法:
1)利用M代码的子程序调用。
2)利用T代码的子程序调用。
3)利用特定代码的子程序调用。
限制:
1)调用的嵌套。调用的嵌套,仅宏程序调用为5层,仅子程序调用为10层,共计15层。
2)宏程序调用与子程序调用的差别。宏程序调用(G65/G66/Ggg/Mmm)与子程序调用(M98/Mmm/Ttt)具有如下差别:
①宏程序调用可指定自变量,子程序调用则不能。自变量指传递给宏指令的数据,在日本三菱、日本森精机系统上称为引数。
②宏程序调用的程序段中含有其他的NC指令(如G01 X100.0 G65 Pp)时,会有PS0127报警发出。
③当子程序调用的程序段包含其他的NC指令(如G01 X100.0 M98 Pp)时,执行该指令后调用子程序。
④宏程序调用的程序段不会在单程序段方式下停止。宏程序调用的程序段中含有其他的NC指令(如G01 X100.0 M98 Pp)时,在单程序段方式停止。
⑤宏程序调用会引起局部变量的级别变化,但子程序调用不会引起变化。
1.非模态调用G65
当指定G65时,指定在地址P处的用户宏程序被调用。另外,数据(自变量)被传递给用户宏程序。
格式:G65 Pp Ll<自变量指定>;
p:被调用的程序号;
l:重复次数(省略时为1);
自变量:传递给宏指令的数据。
说明:
1)调用。
①在G65后面,由地址P指定将要调用的用户宏程序的程序号。
②需要指定重复次数时,在地址L后,指定重复次数(1~999999999)。如果省略L,则假设为1。
③用自变量指定法,将其值代入相对应的局部变量中。
2)自变量指定法。有两类自变量指定法:第I类使用G、L、O、N、P以外的字母,每个用一次;第Ⅱ类用A、B、C,每个用一次,还可使用10组I、J、K,自变量的指定种类是根据所用的字母自动决定的。
①第Ⅰ类自变量指定法。
a.地址G、L、N、O、P不能作为自变量使用。
b.可以省略没有必要指定的地址。与省略的地址相对应的局部变量设为空值。
c.不需要按照字母顺序指定,按照字地址格式就可以。但是,I、J、K必须按照字母顺序指定。
通过将参数IJK(No.6008#7)设定为1,即可将I、J、K作为第Ⅰ类自变量固定起来。在这种情况下,不需要按照字母顺序指定。
例如:
1.参数IJK(No.6008#7)=0的情形。在指定为I_J_K_时,成为I=#4,J=#5,K=#6,而在指定为K_J_I_时,成为第Ⅱ类自变量指定法,K=#6,J=#8,I=#10。
2.参数IJK(No.6008#7)=1的情形。即使指定为K_J_I_,也成为第I类自变量指定法,如同指定为I_J_K_一样,I=#4,J=#5,K=#6。
②第Ⅱ类自变量指定法。第Ⅱ类自变量指定法仅使用地址A、B、C一次,将I、J、K作为一组使用,最多可重复指定10次。
在将三维坐标作为自变量给出时使用第Ⅱ类指定法。
a.I、J、K的下标(表示自变量指定的顺序),在实际的程序中不写。
b.参数IJK(No.6008#7)=1,不可使用第Ⅱ类自变量指定法。
限制:
·自变量指定法的混合
CNC在内部识别第Ⅰ类和第Ⅱ类自变量指定法,如果两类指定法混合使用,则优先采用后指定的自变量格式。
对于变量#7,在指定了I4.0和D5.0两个自变量时,后面的D5.0有效。
此例中,I-3.0前面没有定义J或者K,即第Ⅱ类自变量指定法的I4指向了#4;第二次编写的带“I”的I4.0,从前面的#4向下推,即第Ⅱ类自变量指定法的I7指向了#7;D5.0,即第Ⅰ类自变量指定法指向了#7。此时,采用第Ⅱ类自变量指定法的I4.0和采用第Ⅰ类自变量指定法的D5.0同时指向了#7,两类指定法混合使用则后指定的有效,即编写在后面的,就是右边的有效。
由此可见,第Ⅱ类自变量指定法比较麻烦,如果两类自变量指定法混用更是麻烦。因此,建议采用第Ⅰ类自变量指定法赋值,21个英文字母足够赋值的了。
③小数点的位置。不带小数点传递的自变量数据单位,成为各地址的最小设定单位。
不带小数点传递的自变量的值可能会因各自的机床系统配置而每个装置都不同,为了保持程序的兼容性,最好养成在宏程序调用的自变量上添加小数点的习惯。
④调用的嵌套。宏程序调用的嵌套为5层,包括G65非模态调用和G66模态调用。另外,子程序调用的嵌套为15层,包括宏程序调用。
此外,即使在MDI运行中也同样可以调用程序。
⑤局部变量的级别。
a.为嵌套提供0~5级的局部变量。
b.主程序为0级。
c.每执行一次宏程序调用(G65/G66/Ggg/Mmm),局部变量的级别增加1,上一级的局部变量值被保存在CNC中。
d.当在宏指令中执行M99时,控制返回到调用源程序。这时,局部变量的级别变小一级,恢复为调用宏指令时保存的原先的局部变量值。
2.模态调用G66
在执行沿轴移动的程序段后,如用G66指定模态调用,则调用一个宏指令,这个过程继续到G67取消模态调用为止。
格式:G66 P p L l<自变量指定法>;
p:调用的程序号;
l:重复次数(省略时为1次);
自变量:传递给宏指令的数据。
说明:
1)调用。
①紧跟G66,在地址P指定进行模态调用的程序号。
②需要指定重复次数时,在地址L指定在1~999999999范围内的一个数。
③像简单调用(G65)一样,可作为自变量指定传递给宏指令的数据。
④在G66方式下每次执行移动指令的程序段时进行宏程序调用。
2)取消。当指定G67时,在下一程序段中不再执行模态宏程序调用。
3)嵌套。宏程序调用的嵌套为5层,包括G65简单调用和G66模态调用。另外,子程序调用的嵌套为15层,包括宏程序调用。
4)模态调用的嵌套。若是1层(G66指令为1次)模态调用,虽然在每次执行移动指令时调用已被指定的宏指令,但是,当多层指定模态的宏指令时,对于宏指令的移动指令,在每次执行时,调用下列宏指令。
宏指令按照后指定的顺序依次被调用,并且,利用G67指令,按照后指定的顺序取消宏指令。
例如:(www.xing528.com)
注释:(1-3)之后不是宏程序调用方式,因此不能进行模态调用。
限制:
①G66和G67的程序段必须成对地出现在相同的程序中。另外,若在没有处在G66方式下就指定G67,则会有PS1100报警发出。但是,参数No.6000#0=1时,也可以不发出报警。
②在G66程序段不进行宏程序调用。但是,局部变量(自变量)已被设定。
③在所有自变量前都必须指定G66。
④在没有辅助功能等轴运行指令的程序段中不进行宏程序调用。
⑤只可在G66程序段设定局部变量(自变量)。注意:不是每次执行模态调用时都设定局部变量。
⑥在与执行调用的程序段相同的程序段中指定M99时,在执行完调用后执行M99。
3.利用G代码进行的宏程序调用
通过事先在参数中设定一个用来调用宏指令的G代码号,即可调用宏程序,调用方法与简单调用(G65)相同。
参数No.6050=36
说明:通过在参数(No.6050~6059)中设定一个用来调用宏指令的G代码号(-9999~9999),即可调用用户宏程序O9010~O9019,调用方法与用G65调用相同。设定了负的G代码号时,成为模态调用(相当于G66)。
比如,当设定一个参数使得能用G36调用宏指令O9010,则用户不必改变加工程序而可调用以用户宏程序创建的固定循环。
①参数号与程序号的对应关系。
②重复。与简单调用一样,可用地址L指定一个1~99999999范围内的数作为重复次数。
③自变量指定法。与简单调用一样,有两类自变量指定法:第Ⅰ类自变量指定法和第Ⅱ类自变量指定法,自变量指定法的类型根据所用的地址自动决定。
限制:
①G代码调用的嵌套。
②通常,仅在从G代码调用的程序中调用其他程序时可以使用G65/M98/G66指令。
③若参数No.6008#6=1,可以利用M、T、特定代码,从G代码调用的程序中调用。
4.利用M代码进行的宏程序调用
通过事先在参数中设定一个用来调用宏指令的M代码号,即可调用宏程序,调用方法与简单调用(G65)相同。
参数No.6080=70
说明:通过在参数(No.6080~6089)中事先设定一个用来调用宏指令的M代码号3~99999999,即可调用用户宏程序O9020~O9029,调用方法与用G65调用相同。
①参数号与程序号的对应关系。
例如:当参数No.6081=980时,以M980调用O9021。
②重复。与简单调用一样,可用地址L指定一个1~99999999范围内的数作为重复次数。
③自变量指定法。与简单调用一样,有两类自变量指定法:第Ⅰ类自变量指定法和第Ⅱ类自变量指定法,自变量指定法的类型根据所用的地址自动决定。
限制:
①用来调用宏指令的M代码必须指定在程序段的开头。
②通常,仅在从M代码调用的程序中调用其他程序时可以使用G65/M98/G66指令。
③参数No.6008#6=1时,可以从M代码调用的程序中执行使用G代码的调用。
5.利用M代码进行的子程序调用
通过事先在参数中设定一个用来调用子程序(宏指令)的M代码号,即可调用宏程序,调用方法与子程序调用(M98)相同。
参数No.6071=06,加工中心就是用M06调用O9001换刀宏程序的;参数No.6072=60/80,加工中心就是用M60/M80调用O9002交换工作台宏程序的。
说明:通过事先在参数(No.6071~6079)中设定一个用来调用子程序的M代码号3~99999999,即可调用宏指令O9001~O9009,调用方法与用M98调用相同。
①参数号与程序号的对应关系。
②重复。与简单调用一样,可用地址L指定一个1~99999999范围内的数作为重复次数。
③自变量指定法。不允许自变量指定。
④M代码。已被调用的宏指令中的M代码被当作普通的M代码处理。
限制:
①通常,仅在从M代码调用的程序中调用其他程序时可以使用G65/M98/G66指令。
②参数No.6008#6=1时,可以从M代码调用的程序中执行使用G代码的调用。
6.利用T代码进行的子程序调用
事先在参数中将利用T代码进行的子程序调用设为有效,每当在加工程序中指定T代码时,即可调用子程序。
参数No.6001#5=1
说明:
①调用。事先将参数TCS(No.6001#5)设为1,每当在加工程序中指定T代码时,即可调用子程序O9000。指定在加工程序中的T代码被代入公共变量#149。
如上例,程序中指定了T23,即可调用O9000子程序,23被代入公共变量#149;程序中指定了T16,即可调用O9000子程序,16被代入公共变量#149。
②重复。与简单调用一样,可用地址L指定一个1~99999999范围内的数作为重复次数。
③自变量指定法。不允许自变量指定。
限制:
①通常,仅在从T代码调用的程序中调用其他程序时可以使用G65/M98/G66指令。
②参数No.6008#6=1时,可以从T代码调用的程序中执行使用G代码的调用。
7.处理宏语句
为了平稳加工,数控系统预读下一步要执行的数控语句。这个操作称为缓冲。譬如,在AI(Adobe Illustrator,为一种矢量图形制作软件)先行控制(M系列)/AI轮廓控制(M系列)方式的插补前加/减速中进行多次缓冲。
此外,在M系列的刀具半径补偿方式(G41、G42)中,即使没有处在插补前加/减速中,也需至少预读3个程序段的NC语句,并进行交点的计算。
但是,运算式子和条件转移的宏语句一旦被缓冲(即被读入缓冲器),即可被处理。因此,执行宏语句的时机并不一定按照所指定的顺序。
相反,在指定了用来控制设定在M00、M01、M02、M30和参数(No.3411~3420,No.3421~3432)中的缓冲的M代码、用来控制G31、G53等缓冲的G代码的程序段中,则不进行预读。因此,在执行完这些M代码、G代码之前,可以确保不执行后面的宏语句。
8.用户宏程序的使用限制
①顺序号检索。不能检索用户宏程序中的顺序号。
②单程序段。宏程序调用指令、运算指令、控制指令以外的程序段,即使在执行宏指令时,也可在单程序段方式终止程序段的执行。
包含宏程序调用指令(G65/G66/Ggg/Mmm/G67)的程序段,即使在单程序段也不会停止。
运算指令和控制指令的程序段,通过参数SBM(No.6000#5)或参数SBV(No.6000#7)设定1,成为如下所示情形:
对M系列:在刀具半径补偿方式下,由于宏语句而导致单程序段停止时,该语句被认为是一个没有移动的程序段,在某些情况下,不能进行适当的补偿(严格地讲,该程序段被看成是将移动量标为0的程序段)。
③可选程序段跳过。出现在<表达式>中部(放在运算式子右边的方括号[]里)的“/”代码,被认为是除法运算符,不作为可选程序段跳过代码。
④在EDIT方式下的操作。通过设定参数NE8(No.3202#0)和NE9(No.3202#4)为1,就不能删除或编辑程序号为8000~8999和9000~9999的用户宏程序或子程序。这样,就可以防止已经登录的用户宏程序和子程序因错误操作而被意外删除。但是,存储器清零处理(电源接通时,同时按下RESET和DELETE键)时,存储器的全部内容包括用户宏程序都被清除。
⑤复位。通过复位操作,将局部变量和公共变量#100~#199清除为<空值>。但是,参数CCV(No.6001#6)=1时,可以不清除#100~#199。
通过复位操作,可以清除用户宏程序和子程序的任何被调用状态、DO的状态,并将返回到主程序。
⑥进给保持。在执行宏语句期间,如果将进给保持功能设为有效,在执行完宏语句后机床就会停止。当复位操作或发出报警时,机床也会停止。
⑦DNC运行。控制指令(GOTO、WHILE…DO等)不可在DNC运行下执行。但是,在DNC运行中调用程序存储器中已被登录的程序的情形除外。
⑧可以在<表达式>中指定的常量值。在FANUC 0i-MD面板上,表达式中可以使用的数据范围为0.00000000001~999999999999和-999999999999~-0.00000000001,可以指定的最大位数是12位(十进制)。超过最大位数时,会有报警PS0012发出。
在FANUC 0i-MC面板上,表达式中可以使用的数据范围为0.0000001~99999999和-99999999~-0.0000001,可以指定的最大位数是8位(十进制)。超过最大位数时,会有报警PS003发出。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。