1. NC编程基础

1.1      坐标系定义

    机床中使用右手笛卡尔直角坐标系,如图1.1。机床中的运动是指刀具和工件之间的相对运动,通常假设是刀具相对于工件进行运动。

   

                         图1.1 坐标系定义

                 1.2 车铣复合机床坐标系定义

    车铣复合机床的坐标系统如图1.2,是以机床的原点为坐标原点建立起来的XZ轴直角坐标系。其中,Z轴与床主轴的旋转中心线重合,为纵向进刀方向,远离主轴端面的方向为正方向;X轴与主轴轴线垂直,为横向进刀方向,远离主轴旋转中心的方向为正方向。

    常用车铣复合系统的坐标系统定义如下:

  • 机床坐标系MCS:坐标系的原点定在机床零点,它也是所有坐标轴的零点位置。该点由机床生产厂家确定,机床开机后通过回参考点确定机床坐标系;
  • 工件坐标系WCS:编制零件加工程序时所设定的坐标系,其中Z轴的零点可以任意设置,X轴的零点始终位于旋转轴中心线上。工件坐标系通过可设定的零点偏置指令得到。

1.2      NC程序的结构和内容名称规定

        一个NC程序由一系列程序段(见后续章节)构成。每个程序段说明一个加工步骤,在一个程序段中以“字”的形式写出各个指令,在加工步骤中,最后一个程序段包含一个特殊字,表明程序段结束:M02M30

1.2.1  程序名称

    每个程序有一个程序名,在编制程序时须按以下规则定义程序名:

    程序名以字母开头,只能由字母、数字或下划线组成;

  • 不能使用分隔符;
  • 区分大小写;
  • 不能与系统中标准循环相重名;
  • 小数点作为文件的扩展名,主程序后缀名可兼容多种格式,如(txtiso等等);
  • 子程序后缀名必须为iso
  • 程序名不能超过32个字符。

示例:

SHLLE_527.iso

 1.2.2   程序段和结构

        一个加工程序是由一系列顺序执行的程序段组成,每个程序段单独占一行,每一个程序段执行一个加工步骤、逻辑处理或数学运算功能。

示例:

N10 G94 G01 Z80 F100      ;第一程序段

N20 G00 X100                     ;第二程序段

N30 ……

N40 M02                                ;程序结束

    一个程序段由若干个字组成,各功能的执行顺序是独立于其排列先后的,由数控系统内部自动重新加以排列,但是为了使程序段结构清晰明了,当程序段中有很多指令时,建议按如下顺序排列:

示例:

/N10□G…□X…□Z…□F…□S…□T…□D…□M…

;注释

其中:

/           表示在运行过程中可以跳过的程序段;

N…       表示程序段号,段号由最多五位数字组成;

□           表示中间空格;

;             表示其后文字描述是对程序段进行说明。

同一段程序中的指令按以下先后顺序执行:

  • 程序段号N
  • 换刀指令TD
  • 速度指令FS
  • 功能G
  • 段前执行的M功能(详见P18
  • 坐标指令XZ
  • 段后执行的M功能(详见P18

    在一个程序段中可以编程多个功能G和功能M,不过其它的功能只能有一个(XZTF等等)。功能G被分成不同的组,不能在同一个程序段中使用两个或两个以上同组的功能G

    程序段号一般以510为间隔进行编辑,以便以后插入新程序段时不会改变程序段号的顺序。虽然不编写程序段号也不会影响程序的执行,但是仍然建议在涉及坐标运动和辅助功能等指令的程序段前添加一个程序段号,以增加可读性。程序段号与后面之间指令必须空一格。

1.2.3  字结构及地址

    字是程序段的组成元素,由它构成控制指令。字由以下几部分组成(如图1.3):

  • 地址符:地址符是一个字母或字符串。
  • 数值:数值是一个数字串,它可以带正负号和小数点,通常正号可以省略。

                  图1.3 字结构

1.2.4  运算/计算功能

加法
减法
* 乘法
/ 除法
DIV 两数相除,结果取整
MOD 两数相除,取其余
SIN( ) 正弦,括号内参数单位为度
COS( ) 余弦,括号内参数单位为度
TAN( ) 正切,括号内参数单位为度
ASIN( ) 反正弦,计算结果单位为度
ACOS( ) 反余弦,计算结果单位为度
ATAN( ) 反正切,计算结果单位为度
ATAN2( ) 反正切2,计算结果单位为度
SQRT( ) 平方根
ABS( ) 绝对值
POT( ) 二次幂(平方)
TRUNC( ) 取整数
LN( ) 自然对数
EXP( ) 指数函数

1.2.5  比较运算符和逻辑运算符

= = 等于
!= 不等于
大于
小于
>= 大于或者等于
<= 小于或者等于
&&
||
!

 

1.2.6  信息编程

    信息编程在一个独立的程序段中。当程序执行到所在的行时,信息显示在屏幕上方的信息显示区域,并且一直有效。一个新的信息显示,上一条信息上滚。在MSG信息显示指令中还可加入表达式、变量等,在显示时将这些表达式、变量的当前值显示出来(类似高级语言的print语句)。

示例:

MSG (“THIS IS A SAMPLE=”, 25*4)

显示结果为:“THIS IS A SAMPLE=100”

 1.2.7   程序字体颜色

     以下规则适用于程序后缀名是小写iso的程序:

  • 默认一般字体都是黑色显示;
  • 关键字为蓝色显示,并且关键字同其它字需要用符号隔开(加减乘除符号、逗号、点号、分号、冒号、左右小括弧、等号、横线、空格、制表符及换行符);
  • 特殊情况:
  1. 以“//”开头的,为绿色;
  2. 以“#”开头的为灰色(仅当“#”作为字符串开头如此,“#”作为连接符与其他连接符用法一样);
  3. 以双引号“”开头的为褐色;
  4.  以单引号“”开头的为橘红色,一般需要另一个单引号“”配合,两个单引号匹配后中间字符橙黄色显示,代表字符常量。

1.3      子程序

       原则上主程序和子程序之间并没有区别。零件加工主程序也可作为子程序被调用。可以用子程序编写经常重复进行的加工,比如某一确定的轮廓形状。子程序单独在一个文件中进行编程,在需要时进行调用。

    子程序的一种形式就是加工循环,加工循环包含一般通用的加工工序,如螺纹切削,坯料切削加工等等。通过对规定的计算参数赋值就可以实现各种具体的加工。为了方便地选择某一个子程序,必须给子程序取一个程序名。程序名可以自由选择,但必须符合相关规定(与主程序相同),并且建议具有一定含义。

1.3.1    子程序的分类和定义

       子程序分类:

    标准子程序:不带参数的子程序,可以被主程序和其他子程序调用。

    参数子程序:调用参数子程序时,通过传递参数给子程序来实现具体功能。

       子程序定义:

    标准子程序:和主程序一样。

    参数子程序:子程序中开头处必须有PROC,末尾处RET

1.3.2  子程序调用

    在一个程序中(主程序或子程序)可以直接用程序名调用子程序。被调用的子程序必须与主程序在同一目录下。子程序调用要求占用一个独立的程序段。如果要求多次连续地执行某一子程序,则在编程时必须在所调用子程序的程序名后对地址P进行次数编程,最大次数为99次。

示例1标准子程序的调用,后面“()”可以省略

N10 WELLE7() P3                     ;调用子程序WELLE7 3

N10 CALL WELLE7() P3      ;调用子程序WELLE7 3

示例2参数子程序的调用(假设WELLE85个参数)

N10 WELLE8(10, 50, R32, , R45) P5                ;调用子程序WELLE8 5

N10 CALL WELLE8(10, 50, R32, , R45)        ;调用一次子程序WELLE8

 

         实参可以是常量、变量或R参数,没有赋值的参数以零代之,也就是说第四个参数为零。

  注意:

  1. 在退出子程序后,主程序中必须重新进行技术定义(G91/G90G71/G70DIAMOF/DIAMON等等)。另外,子程序的名称是区分大小写的,后缀名必须是小写iso
  2. 在子程序中执行M02时,程序跳出子程序,返回到主程序,同时主程序结束。

1.3.3  程序嵌套深度

    子程序不仅可以从主程序中调用,也可以从其它子程序中调用,这个过程称为子程序的嵌套,嵌套的深度可以为12级(包括主程序)。

          图1.4 程序调用嵌套

1.3.4  子程序参数传递

    子程序参数传递分为两种形式,按值传递和按地址传递。按值传递的参数仅作为输入参数,在被调用子程序中参与计算,即使其值发生变化也不反馈回上层程序。而按地址传递的参数作为输入输出参数,在被调用子程序中参与计算后,其值将重新返回至上层程序。为实现参数的按地址传递,只需在被调用子程序的对应参数前加上“VAR”关键字即可。

例:

PROC SUB1 (……)

DEF REAL PT

DEF REAL M2PIT

……

SUB2 (PT, M2PIT)

……

RET

PROC SUB2 (VAR REAL PT, REAL M2PIT)

……

RET

        在子程序“SUB1”中定义了两个参数“PT”和“M2PIT”。在调用子程序“SUB2”时,“PT”为按地址传递,“M2PIT”为按值传递。调用的目的是在“SUB2”中根据“M2PIT”的值对“PT”进行相应修改,并把结果反馈给“SUB1”继续使用。即“SUB2”对“PT”的更改能够传递至“SUB1”。

1.4      程序跳转

         NC程序在运行时以写入时的顺序执行程序段。程序在运行时可以通过插入程序跳转指令改变执行顺序。跳转目标只能是有标记符或一个程序段号的程序段。此程序段必须位于该程序之内。

    标记符可以自由选取,但必须符合相关规定(与程序名称相同),标记符后面必须跟冒号,并且必须位于程序段段首,如果程序段有段号,则标记符紧跟着段号。 

示例:

Label1: G01 X20               ;Label1是标记符,跳转目标程序段

N100 GOTOB Label1       ;跳转至Label1程序段

 1.4.1    绝对跳转

        跳转指令必须占用一个独立的程序段。

示例:

GOTOF Label           ;向前跳转(程序结束的方向)

GOTOB Label           ;向后跳转(程序开始的方向)

1.4.2    有条件跳转

        用IF条件语句表示有条件跳转。如果满足跳转条件,则进行跳转。跳转目标只能是有标记符或程序段号的程序段。该程序段必须在此程序之内。有条件跳转指令必须是独立的程序段。

示例:

IF 条件 GOTOF Label                       ;向前跳转

IF 条件 GOTOB Label                       ;向后跳转

条件为比较逻辑运算,其运算符及其意义如下:

= = 等于

! = 不等

> 大于

< 小于

> = 大于或等于

< = 小于或等于

示例:

N10 IF R1>1 GOTOF Label      ;R1大于1时,跳转到Label程序段

1.5      变量定义

 1.5.1    定义格式和变量类型     

    一个变量名称包含字母、数字和下划线,且只能使用字母开头。

    变量定义的格式为:

        DEF 类型 名称 [= 数值]

示例:

DEF INT ANZAHL

DEF INT ANZAHL = 7

        也可以对连续的变量进行定义并赋值:

        DEF 类型 名称1 [=数值1],名称2 [=数值2],名称3 [=数值3]……

示例:

DEF REAL HH1=1, HH2=2, HH3=3

         变量的类型包括以下几种:

    INT                 整数型,意即整数的数字

        REAL              实数型,意即带小数的数字,包括整数

        BOOL            布尔型,其值只能是“TRUE”或者“FALSE

        CHAR             字符型,是与ASCII代码相对应的单个字符,用单引号标识

        STRING          字符串型,由多个字符组成的符号串,用双引号标识

        AXIS                轴类型,代表轴地址,0X轴,1Y轴,2Z

示例:

DEF CHAR FORM = 'A'

DEF CHAR FORM [2] = ('A','B')

DEF STRING MDG = “ALARMING”

 1.5.2    数组定义

编程:

DEF CHAR NAME [N, M]

DEF INT NAME [N, M]

DEF REAL NAME [N, M]

DEF AXIS NAME [N, M]

DEF STRING NAME [M]

DEF BOOL NAME [N, M]

   说明:

    数组最多可以由2维尺寸定义,但字符串类型的数组变量只能定义成一维尺寸。第一个数组单元从地址[0, 0]开始,例如,当数组为3×4的二维数组时,最大可能的数组地址为[2, 3]

    数组单元可以在程序运行时,也可以在数组定义时进行赋值。

  数组定义时:

        DEF REAL FELD [2, 3] = (10, 20, 30, 40)

  程序运行时:

        可以对单个单元进行赋值。

示例:

FELD [0, 0] = 10

FELD [0, 1] = 20

……

         也可以进行连续赋值,示例:

FELD [0, 0] = SET (10, 20, 30, 40)

    有多少初值被编程就有多少数组单元被赋值,没有赋值的单元会自动被填上0,如果赋值数量超过数组单元数,就会触发系统报警。使用“SET”关键字可以从指定的单元开始连续赋值。

    另外,还可以使用“REP”关键字对数组赋予相同的数值,示例在数组定义中:

DEF REAL FELD [10, 3] = REP (9.9)

         以上定义中,所有数组单元均为9.9。又或者在程序运行中进行定义:

DEF REAL FELD [10, 3]

FELD [0, 0] = REP (100)

FELD [5, 0] = REP (-100)

         数组的前半部分为100,后半部分为-100

1.6      程序结构

 1.6.1   CASE语句

    编程格式:

    CASE 表达式 OF 常量1 GOTOF LABEL1 … DEFAULT GOTOF LABELn

        CASE指令能够根据INT类型实际值的不同而进行相应跳转。被CASE指令检测的表达式具有什么值,程序就转移到对应常量所属跳转目标确定的位置上。如果表达式的值不在常量类表当中,则使用DEFAULT指令确定跳转目标。而如果DEFAULT指令没有被编程,则紧跟在CASE指令之后的程序段将成为跳转目标。
 

示例:

DEF INT VAR1, VAR2

CASE (VAR1+VAR2) OF 7 GOTOF MARK1 9 GOTOF MARK2 DEFAULT GOTOF MARK3

MARK1: G00 X1 Y1

MARK2: G00 X2 Y2

MARK3: G00 X3 Y3

1.6.2  IF语句

    编程格式:

        IF 表达式

        NC程序段

        ELSE

        NC程序段

        ENDIF

        IF-ELSE-END模块用于二选一,如果表达式的值为TRUE,则执行IF分支中的程序模块,否则ELSE分支被执行。这个ELSE分支可以取消。

示例:

DEF INT VAR1, VAR2

IF VAR1>VAR2

G00 X1 Y1

ELSE

G00 X2 Y2

ENDIF

      IF语句可以嵌套使用,嵌套层数不能超过9层。 

1.6.3    WHILE语句

  编程格式:

    WHILE 表达式

    NC程序段

    ENDWHILE

    只要表达式的值为TRUEWHILE循环就被执行。要想跳出循环,需要在结构体中不断修改表达式的值,直到其为FALSE。

示例:

DEF REAL HH=9

G01 X0

WHILE HH>0

G91 X=HH

HH=HH-1

ENDWHILE

1.7      指令表

地址 含义 编程
D 刀具补偿号 D…
用于某个刀具T…的补偿参数,D0表示不使用刀补,一个刀具最多有9个D号。
F 进给率 F…
刀具/工件的进给速度,对应G94或G95,单位分别为毫米/分钟或毫米/转。
G G功能 G…
G功能按G功能组划分,一个程序段中只能有一个G功能组中的一个G功能指令。G功能分为模态和非模态两种方式。
G00 快速定位 G00 X… Z…
G01 直线插补 G01 X… Z… F…
G02 顺时针圆弧插补 圆心和终点:
G02 X… Z… I… K… F…
半径和终点:
G02 X… Z… CR=…F…
张角和圆心:
G02 AR=… I… K… F…
张角和终点:
G02 AR=… X… Z… F…
G03 逆时针圆弧插补 G03…;其它同G02
G33 恒螺距螺纹插补 圆柱螺纹:
G33 Z… K… SF=…
端面螺纹:
G33 X… I… SF=…
锥螺纹,螺距为K
G33 Z… X… K… SF=…
锥螺纹,螺距为I
G33 Z… X… I… SF=…
G04 暂停给定时间 G04 H…,单独程序段
G74 返回参考点 G74 X… Z…,单独程序段
G75 返回固定点 G75 X… Z…,单独程序段
G25 工作区域下限 G25 X… Z…,单独程序段
G26 工作区域上限 G26 X… Z…,单独程序段
G17 XY平面  
G18 ZX平面  
G19 YZ平面  
G40 取消刀具半径补偿  
G41 调用刀具半径补偿,刀具在轮廓左侧移动  
G42 调用刀具半径补偿,刀具在轮廓右侧移动  
G500 取消可附加零点偏移  
G501 设定可附加零点偏移  
G54 第一可设定零点偏移  
G55 第二可设定零点偏移  
G56 第三可设定零点偏移  
G57 第四可设定零点偏移  
G58 第五可设定零点偏移  
G59 第六可设定零点偏移  
G53 取消可设定零点偏移  
G60 准确定位方式,模态有效  
G64 连续路径加工方式,默认有效,模态有效  
G09 非模态准确定位  
G70 英制尺寸(长度)  
G71 公制尺寸(长度)  
G90 绝对尺寸  
G91 增量尺寸  
G94 直线进给率,毫米/分  
G95 旋转进给率,毫米/转  
G96 使用恒定切削速度(F毫米/转,S米/分) G96 S… LIM=… F…
G97 取消恒定切削速度  
WALIMON 工作区域限制生效 单独程序段
WALIMOF 工作区域限制取消 单独程序段
DIAMOF 关闭直径编程,半径数据输入 单独程序段
DIAMON 打开直径编程,直径数据输入 单独程序段
H 暂停时间 参见G04
I 插补参数,X轴尺寸。在G02和G03中为圆心坐标;在G33中表示螺距大小。 参见G02,G03和G33
K 插补参数,Z轴尺寸,其余同I 参见G02,G03和G33
M 辅助功能 M…
M00 程序无条件暂停 单独程序段
M01 程序有条件暂停 单独程序段
M02 主程序结束,主轴停止并返回程序起始处,工件计数加1 单独程序段
M03 主轴顺时针旋转  
M04 主轴逆时针旋转  
M05 主轴停止  
M19 主轴定位 M19 SP=…,单独程序段
M30 主程序结束,主轴停止并返回程序起始处,工件计数加1 单独程序段
M90 工件计数加1,用于自动加工单元的无限循环加工计数,不得与M02、M30存在于同一程序中,否则工件计数会发生错误。 单独程序段
N 程序段号 N…
P 子程序调用次数 N10 WELLE7() P3
调用三次
R0~R99 R参数 R1=30
R2=SIN(R1)
RET 子程序结束 单独程序段
S 主轴转速,此时值不可为负。 S…
G96时单位为米/分钟,其余均为转/分钟。
T 刀具号 T…
X 坐标轴 X…
Z 坐标轴 Z…
C C轴 C…
ANG= 在轮廓中定义直线的角度 N10 G01 X… Z…
在G00或G01中定义直线的一种方法:平面中只有一个终点坐标已知,或者在几个程序段表示的轮廓中最后的终点坐标已知。单位为度。 N20 X… ANG=…
   
AR= 圆弧插补张角 参见G02和G03,AR范围0~360
CALL 子程序调用 N10 CALL WELLE7()
单独程序段
CHF= 倒角 N10 X… Z… CHF=…
在两个轮廓之间插入给定长度的倒角。 N20 X… Z…
CHR= 倒角  N10 X… Z… CHR=…
在两个轮廓之间插入给定边长的倒角。 N20 X… Z…
CR= 圆弧插补半径 参见G02和G03
DEF 变量定义 DEF INT VAR1=12
在程序开始处定义BOOL、INT、REAL、CHAR等类型的局部用户变量。 DEF REAL VAR2=2.4
GOTOB 向后跳转 N10 LABEL1: …
N100 GOTOB LABEL1
GOTOF 向前跳转 N10 GOTOF LABEL2
N100 LABEL2: …
IF 跳转条件 N10 IF R1>5 GOTOF LABEL3
N100 LABEL3: …
LIM= 使用G96时的主轴转速上限 参见G96
MSG( ) 显示信息,文本位于双引号内 MSG(“MESSAGE TEXT”)
单独程序段
RND= 倒圆角 N10 X… Z… RND=…
N20 X… Z…
SET( ) 数组赋值,从指定元素开始连续赋值 参见数组赋值
REP( ) 数组赋值,从指定元素开始赋予相同值 DEF REAL VAR3[12] = REP(4.5)
此时所有元素值均为4.5
SF= 使用G33时的螺纹起始角 参见G33,SF范围0~360
SP= 使用M19时的主轴定位角度 参见M19,单独程序段
SPOS= 定位主轴角度 SPOS= 30
单独程序段
MIRROR 镜像 MIRROR X0
单独程序段
TRANSMIT 激活端面插补 单独程序段
TRACYL( ) 激活柱面插补 单独程序段
TRAFOOF 取消端面插补或柱面插补 单独程序段
M70 轴模式  
M71 主轴模式  
SETMS ( ) 指定当前加工主轴  

1.8      G功能分组

1 平面(M

2 单位(M

3 编程模式(M

4 刀具补偿(M

5 零点偏置(M

G17 X/Y

G70 英制

G90 绝对(R)

G40 取消(R)

G53 取消(R)

G18 Z/X(R)

G71 公制(R)

G91 增量

G41 左刀补

G54-G59 零点偏置

G19 Y/Z

 

 

G42 右刀补

G501 设定可附加零点偏置

 

 

 

 

G500 取消可附加零点偏置

 

6 特殊(A

7 连续路径加工

8 进给率(M

9 范围限制(A

10 运动

G04 暂停

G60 精准停(M

G94 mm/minR

G25 工作区下限

G00快速定位(MR

G74 返回参考点

G64 连续路径加工(MR

G95 mm/r

G26 工作区上限

G01 直线插补(M

G75 返回固定点

G09 精确停(A

G96 恒定线速度

 

G02 圆弧(顺时针,A

 

 

G97 取消恒线速度

 

G03 圆弧(逆时针,A

 

 

 

 

G33 螺纹加工(A

      
         其中:M表示模态,R表示默认有效,A表示非模态。

1.9      M功能分组

1

M功能

类型

说明

参数

备注

M00

N

程序停止

 

单独程序段

M01

N

选择性程序停止

 

单独程序段

M02

N

主程序结束,复位到程序开始

 

单独程序段

M30

N

程序结束,复位到程序开始

 

单独程序段

M90

N

工件计数加1,用于自动加工单元的无限循环加工计数,不得与M02M30存在于同一程序中,否则工件计数会发生错误。

 

单独程序段

2

M功能

类型

说明

 

 

M03

MI

主轴或动力头顺时针旋转

 

 

M04

MI

主轴或动力头逆时针旋转

 

 

M05

MRF

主轴或动力头停止

 

 

M19

N

主轴或动力头定位

须带SP

单独程序段

 
注意:M表示模态;N表示非模态;R表示默认有效;I表示段前执行;F表示段后执行。

   说明:

  • 不能在同一个程序段中指定两个或两个以上同组的M代码;
  • 同一程序段中最多可以编程5M代码;
  • I段前执行:当运动指令和M功能在同一程序段中出现时,M指令在运动指令之前执行;
  • F段后执行:当运动指令和M功能在同一程序段中出现时,M指令在运动指令之后执行;
  • M指令和T指令在同一程序段出现时,T指令先执行;
  • 用户自定义M指令必须单独程序段。
5 (1)
文章评级 (1 投票)
文章评级
附件
暂无附件。
评论
暂无评论,第一发布评论。
姓名
邮箱地址
验证码 Security Code
相关文章 RSS Feed
5.变量
从 Fri, Oct 28, 2016起,访问2459 次。
4.刀具补偿
从 Fri, Oct 28, 2016起,访问4222 次。
6.固定循环(6.3.1-6.3.3)
从 Fri, Oct 28, 2016起,访问2765 次。
0前言
从 Wed, Oct 26, 2016起,访问2238 次。
6.固定循环(6.1-6.2)
从 Fri, Oct 28, 2016起,访问3346 次。
2.准备功能(2.8-2.10)
从 Fri, Oct 28, 2016起,访问3234 次。
3.车铣复合功能
从 Fri, Oct 28, 2016起,访问8692 次。
2. 准备功能(2.1-2.7)
从 Thu, Oct 27, 2016起,访问3774 次。
6.固定循环(6.3.4-6.3.7)
从 Mon, Oct 31, 2016起,访问2789 次。