02-NC程序结构
2.1 程序命名
每个程序有一个程序名,在编制程序时须按以下规则定义程序名:
- 程序名不能包含下列字符:\ / : * ? “ < > |
- 区分大小写;
- 不能与系统中标准循环相重名
- 小数点作为文件的扩展名,主程序后缀名可兼容多种格式,如(txt、iso等等);
- 子程序后缀名必须为iso;
- 程序名不能超过32个字符
举例:
SH_27.iso
2.2 程序段的结构
为运行机床而送到CNC的一组指令称为程序。按照编制的指令,刀具沿着直线或圆弧移动,主轴电机按照指令旋转或停止。
在程序中,以刀具实际移动的顺序来编制指令。如图2.1所示。一个单步的指令称为程序段,程序由一系列加工的单程序段组成的。
程序段的结构如下所示:
/ N… □G…□X…□Y…□F…□S…□T…□D…□M…
; 注释
其中:
/ 表示 在运行过程中可以跳过的程序段;
N… 表示 程序段号,段号由最多五位数字组成;
□ 表示 中间空格;
; 注释 表示 对程序段进行说明,必须独立占用一行;
它们执行的先后顺序按以下规则进行:
1.程序段号N
2.换刀指令T和D
3.速度指令F和S
4.功能G
5.段前执行的M功能
6.坐标指令X和Y等
7.段后执行的M功能
说明:
- 在一个程序段中可以编程多个功能G,不过其它的功能只能有一个(X,Y,T,F,等等)。
- 功能G被分成不同的组,不能在同一个程序段中使用两个或两个以上同组的G指令。
- 程序段号一般以5或10为间隔进行编辑,以便以后插入新程序段时不会改变程序段号的顺序。虽然不编写程序段号也不会影响程序的执行,但是仍然建议在涉及坐标运动和辅助功能等指令的程序段前添加一个程序段号,以增加可读性。
- 程序段号与紧随的指令之间必须空一格。
2.3 主程序
有两种程序形式,主程序和子程序。一般情况下,CNC根据主程序运行。
当在程序中多次出现相同的加工形状时,可以把这个形状编成一个程序,该程序称为子程序。原来的程序称为主程序。在主程序执行期间出现子程序执行指令时,就执行子程序的指令。当子程序执行完时,返回主程序继续执行。
2.4 子程序
从本质上说,主程序和子程序没有区别。子程序中包含了要多次运行的工作过程或者工作步骤。子程序单独在一个文件中进行编程,在需要时进行调用、运行。
为了方便地选择某一个子程序,必须为子程序取一个程序名。程序名可以自由选择,但是必须符合相关规定(与主程序相同),并且建议具有一定含义。
说明:
- 子程序名后缀必须为iso。
- 子程序结尾可以用RET返回到程序调用处。
2.4.1 子程序分类
子程序分类:
- 标准子程序:和主程序一样。可以被主程序和其它子程序调用。
- 参数子程序:子程序开头处必须有PROC,末尾处RET。调用参数子程序时,通过传递参数子程序来实现具体功能。
说明:
子程序不仅可以在主程序中调用,而且还可以在另一个子程序中调用,这个过程称为子程序嵌套。对于这样的嵌套调用,总共可以最多有12级嵌套,包括主程序级。
图2.2 子程序嵌套
2.4.2 子程序调用
1、在主程序中调用子程序时,直接使用子程序名。子程序调用要求占用一个独立的程序段。
- 标准子程序调用
带程序重复P:如果要求连续多次执行一个子程序,则可以在程序段中调用子程序时,在地址P下编程程序重复的次数。P值范围1~99。
在主程序中调用子程序时,直接使用子程序名。子程序调用要求占用一个独立的程序段。
举例:
例1:N40 PA P3 ;子程序PA应连续执行3次。
例2:标准子程序调用,后面“()”可以省略。
N20 WE() P3 ;调用子程序WE 3次
或N20 CALL WE() P3 ;调用子程序WE 3次
2.参数子程序调用
如果在主程序中带参数工作,则可以在子程序中使用相应计算的或者赋值的数值。在此主程序的实际参数的值在子程序调用时传递到子程序的形式参数,并且在子程序执行过程中处理。
子程序参数传递种类:
♦ 按值传递:按值传递的参数仅作为输入参数,在被调用子程序中参与计算,即使其值发生变化也不反馈回上层子程序中。
♦ 按地址传递:按地址传递的参数作为输入输出参数,在被调用子程序中参与计算后,其值将重新返回至上层子程序。为实现参数的按地址传递,只需在被调用子程序的对应参数前加上“VAR”关键字即可。
说明:
参数仅在程序调用时或者第一次执行时传送。对于其它的重复,这些参数保持不变。
举例:
例1:
N20 WE(10,50,R32,,R45) P5 ;假设WE有5个参数,调用子程序WE 5次
或N20 CALL WE(10,50,R32,,R45) ;调用一次子程序WE
例2:
PROC CYC84 (……)
DEF REAL PP
DEF REAL MP
…… ……
STE (PP, MP)
…… ……
RET
PROC STE (VAR REAL PP, REAL MP)
…… ……
RET
在子程序“CYC84”中定义了两个参数“PP”和“MP”。在调用子程序“STE”时,“PP”为按地址传递,“MP”为按值传递。调用的目的是在“STE”中根据“MP”的值对“PP”进行相应修改,并把结果反馈给“CYC84”继续使用。即“STE”对“PP”的更改能够传递至“CYC84”。
2.4.3 模态调用子程序
在NC程序中能够以模态方式调用每个任意的子程序,也就是说自保持。该功能对于简化在重复使用钻削循环时的编程具有重要的意义。
指令格式:
MCALL SUBPROGRAM() ;模态调用一个子程序
......
MCALL ;取消模态调用
功能:
通过在子程序名称之前使用关键字MCALL,可以进行一个子程序的模态调用。使用该功能,可以在每个带轨迹运动的程序段之后自动调用该子程序并进行加工。
说明:
如果只编程MCALL,后面不带任何子程序名,则可以关闭该功能;或者通过重新模态调用一个其它的子程序,也可以改变该功能。
模态调用的嵌套是不可以的,也就是说模态调用的子程序中不可以在内部包含其它的模态子程序调用。
举例:
N10 M03 S1500
N20 G00 X0 Y0 Z10
N30 F100
N40 MCALL CYCLE81 (10, 0, 3, -20, 0) ;此处激活模态调用,但不钻孔
N50 Y0 ;钻第一个孔
N60 Y20 ;快移至该位置,并钻第二个孔
N70 Y40 ;快移至该位置,并钻第三个孔
N80 Y60 ;快移至该位置,并钻第四个孔
N90 MCALL ;取消模态调用
N100 M02
2.4.4 主、子程序同文件编辑
为方便用户对于子程序和主程序的同步编辑、修改,系统也支持主程序和子程序在同一程序下进行编辑的功能。
用法:
使用方法1——在普通程序中调用子程序:
CALL LABEL1:LABEL2 ;使用call指令调用子程序
…
LABEL1: ;起始标签
G0 X100
…
LABEL2: ;结束标签
使用方法2——在固定循环中调用轮廓子程序:
T1 D1
M3 S800
G95 F0.2
CYCLE95 ("LABEL1:LABEL2", 2, 0.02, 0.2, 0, 0.25, 0.1, 0.13, 1, 0, 0, 0 ;使用标签调用子程序
M02
LABEL1: ;起始标签
G0 X20 Z0
G1 X26 Z-3
Z-24
X35 Z-29
X40 Z-36.5
Z-40
X60
LABEL2: ;结束标签
注意事项:
1、编程时的标签不能使用段号N…,且起始段和结束段的标签后均需要加上“:”。
2、除CYCLE循环外,用户编程调用时需显示加上CALL调用,否则会报编程错误
3、MCALL不支持同文件调用方式。
4、该方式子程序仅支持调用普通子程序,由于需要标签起始和标签结束,不支持传参操作。
5、不能使用p参数进行多次调用,但可在不同位置重复调用程序段。