分享

第一讲:参数编程基础

 阳光化 2016-08-24


第一讲:参数编程基础

0 前言

《参数编程》课程说明:参数编程属于高阶的数控手工编程方法,在实际生产中有着较广泛的应用空间,同时在数控工种的《国家技能鉴定标准》中,也是较重要的环节。本课程着重于参数编程的基础知识和应用实例,并通过在实训环节中的应用,使学员能够在较短的时间内掌握参数编程的基本方法和一般规律,扩展解决特定加工难题和工艺难题的能力,进一步提高自身的编程和工艺水平。

1 参数编程基本概念

1.1 参数编程是做什么的?

问题1:数控加工最本质关键的是什么?

数(数字量)来控制,数控加工的整个工艺过程(工件、机床、夹具、刀具等)最终都要转化为数字量(数值、数据),通过数字量来控制机床完成对工件的加工。数是关键,也就是说没有数据就没法控制,没有高质量的数据就没有高质量的产品。高质量、高可靠性的数据是产品高质量的前提保证,越是高精尖的零件加工越是对数据的要求高。

问题2:数从何而来?

测量、计算而来,得到数的方法、手段是我们从事数控机加必须掌握、具备的基本技能,是我们天天要研究、琢磨的事。

三大手段:简单的通过手工计算;复杂的借助CAD/CAM软件;编写程序通过数控机床自动计算(发挥计算机的本质,基本所有操作系统都能实现,就是参数编程,本课程的学习内容)。

现在我们再回答这个问题:参数编程是做什么的?是处理数控加工中所用到的数据的。

0

1


1.2 参数编程的应用

参数编程可理解成数控系统对用户的开放,让用户可以对数控系统进行一定功能的扩展。应用归纳为:

零件家族:大量结构形状相似,而只是尺寸、位置、角度上有差异的零件,编制通用程序,只要通过修改其中一个或几个参数来实现不同零件的加工

固定循环:钻、车、铣、阵列等循环,机床现有和没有的,开发宏程序

复杂运动:机床不具备的复杂运动,曲线、曲面加工

驱动机床附件:如测头在线测量、实现自动找正、防错等的功能

优化程序:便于编辑,通过对关键数据的处理(传输、运算、判断)提高数据、程序的高质量和高可靠性,进行加工质量控制。

1

1.3 两个基本概念

概念一:参数,也叫变量。

变量,数学上的概念,(按某种数学规律)变化的量,相对常量来说。

数控是用数字量来控制机床运动。数字量:常数和变量。数控为什么要用变量?常量控制一个固定的指令、加工位置(尺寸)、零件。变量,可根据用户需要进行更加灵活的控制,扩展性、柔性更强。

注意:不要和机床(的技术)参数概念混淆。

概念二:宏程序,由机床厂家或用户编制的参数程序,实现某一特定功能,由专用指令(宏指令)调用。

FANUC系统有此明确的定义,西门子、海德汉系统无此定义,统称参数程序。

1.4 参数编程的特性

参数编程归根到底还算手工编程的范畴,但和我们平时一般的手工编程不太一样,有其自身的特性。

计算机有关的特征

参数编程与计算机高级语言编程很相似,具有许多与计算机有关的特征,如变量赋值、算数逻辑运算、循环、转跳等指令。

CNC有关的特性

这种编程语言应用于CNC控制系统环境下,还具有许多与CNC有关的特性,通过编制用户化的宏程序(宏指令),可以使CNC用户直接与CNC控制系统联系,如刀具偏置、工件零点、各轴的位置等数据进行主动读写、运算,而仅用GM指令编程是不可能有这些功能的。

所以,参数编程表面看起来很高深,看似很神秘,可一旦我们掌握了最基本的方法以后,它其实并不难,并不神秘。

第一节FANUC

0i)系统参数编程基础

1、变量
  在常规的主程序和子程序内,可以将一个具体的数值赋给一个地址,每一次执行这个程序部分就给这些变量赋值,从而使程序更具有通用性、更加灵活。

在宏程序中设置了变量,即将变量赋给一个地址。

(1)变量的表示
a、变量可以用“#”号和跟随其后的变量序号来表示:#i(i123......)
例:#5 #109 #501

b、变量还可以用“#”号和跟随其后的变量表达式来表示:#[表达式m]

这里的m必须是如下的一种:

数值 #[123]

变量 #[#123]

运算式 #[#123+#321]

表达式 #[[#123+#321]*#123]

函数 #[SIN[#123]]

使用变量表达式时:“#”号后必须紧随“[


(2)变量的类型
FANUC系统的变量通常分为公共变量、局部变量和系统变量三类。
1)公共变量
  公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
公共变量的序号为:#100#131

#500#531

FANUC系统不同版本其变量序号数量各不相同,高级版本其公共变量序号可到#999

其中#100#131公共变量在电源断电后即清零,重新开机时被设置为“0”

#500#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。

2)局部变量#1#33
作用于宏程序某一级中的变量称为局部变量,即这一变量在同一程序级中调用时含义相同,若在另一级程序(如子程序)中使用,则意义不同。局部变量主要用于变量间的相互传递,初始状态下未赋值的局部变量即为空白变量。

FANUC系统中提供了G65宏指令,该指令使用地址码加数字组成:

如:G65 P666 L10X10. Y11. Z12. I13. I14.

其中:

P666 子程序号

L10 子程序调用次数

X10. #24=10.

Y11. #25=11.

Z12. #26=12.

I13. #4=13.

I14. #7=14.

也就是说:当把自变量作为一个局部变量引入宏子程序时,可用相应的地址码指定所需的数据,此时如XYZ等其后面的数值已不再是相应的坐标数值了,即与地址码无关了,而是给地址码所对应的变量赋值。

自变量分为III型两类;

——其中IJK必须按顺序指定;

——III型混用时,如果指定了两个自变量,那么最后一个起作用

自变量类型I:地址码和变量号之间的关系

地址码

对应变量

可否应用于宏程序

A

#1

B

#2

C

#3

D

#7

E

#8

F

#9

G

#10

×

H

#11

I

#4

J

#5

K

#6

L

#12

×

M

#13

N

#14

×

O

#15

×

P

#16

×

Q

#17

R

#18

S

#19

T

#20

U

#21

V

#22

W

#23

X

#24

Y

#25

Z

#26

自变量类型II:地址码和变量号之间的关系

地址码

对应变量

可否应用于宏程序

A

#1

B

#2

C

#3

I1

#4

J1

#5

K1

#6

I2

#7

J2

#8

K2

#9

I3

#10

J3

#11

K3

#12

I4

#13

J4

#14

K4

#15

I5

#16

J5

#17

K5

#18

I6

#19

J6

#20

K6

#21

I7

#22

J7

#23

K7

#24

I8

#25

J8

#26

K8

#27

I9

#28

J9

#29

K9

#30

I10

#31

J10

#32

K10

#33

3)系统变量
  系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等等。

这一变量在不同程序级中调用时含义相同。因此,一个宏程序中经计算得到的一个通用变量的数值,可以被另一个宏程序应用。
  系统变量的序号与系统的某种状态有严格的对应关系。FANUC系统不同版本其变量序号数量和对应的系统信息各不相同

(3)变量的引用
  将跟随在一个地址后的数值用一个变量来代替,即引入了变量。

变量能用于除ON/的所有地址。
例:对于F#103,若#10350时,则为F50
对于Z-#110,若#110100时,则Z-100
对于G#130,若#1303时,则为G03


2
、算术运算指令
变量之间进行运算的通常表达形式是:#i=(表达式)
1)变量的定义和替换
  #i=j
2)加减运算
i=j+k
i=j-k
3)乘除运算
i=k
i=j/k  除
4)函数运算
i=SIN[j]     正弦函数(单位为度)
i=COS[j]    余函数(单位为度)
i=TANN[j] 正切函数(单位为度)
i=ATANN[j] 反正切函数(单位为度)
i=SQRT[j] 平方根
i=ABS[j]    取绝对值

i=ROUND[j] 四舍五入取整数

i=FIX[j] 舍去小数部分取整数


5)运算的组合
以上算术运算和函数运算可以结合在一起使用,运算的先后顺序是:函数运算、乘除运算、加减运算。
6)括号的应用
  表达式中括号的运算将优先进行。连同函数中使用的括号在内,括号在表达式中最多可用5层。

3、控制指令

1)条件转移
编程格式:IF[条件表达式]GOTOn
以上程序段含义为:
1)如果条件表达式的条件得以满足,则转而执行程序中程序号为n的相应操作,程序段号n可以由变量或表达式替代;
2)如果表达式中条件未满足,则顺序执行下一段程序;
3)如果程序作无条件转移,则条件部分可以被省略。
4)表达式可按如下书写:
jEQ #k     表示=
 #jNE #k     表示
jGT #k     表示>
jLT #k     表示
jGE #k     表示
jLE #k     表示
2)重复执行
编程格式:WHILE[条件表达式] DO m m = 1,23
.
.
.
END m
上述“WHILE…ENDm”程序含意为:
1)条件表达式满足时,程序段DOm END m即重复执行;
2)条件表达式不满足时,程序转到END m后处执行;
3)如果WHILE[条件表达式]部份被省略,则程序段DO m END m之间的部份将一直重复执行;
注意:1 WHILEDO m END m必须成对使用;
2DO语句允许有3层嵌套,即:
DO1
DO
2
DO
3
END
3
END
2
END
1
3
DO语句范围不允许交叉,即如下语句是错误的:
DO1
DO
2
END
1
END
2

4、宏指令的设置

1)用 G代码调用宏程序

在参数中设置调用宏程序的 G 代码,与非模态调用(G65)同样的方法用该代码调用宏程序。

说明

在参数(No.6050No.6059)中设置调用用户宏程序(O90109019)G代码号(从 19999,调用户宏程序的方法与G65 相同。例如,设置参数,使宏程序 O9010 G81 调用,就可以调用由用户宏程序编制的加工循环。

· 参数号与程序号之间的对应关系

程序号 参数号

O9010 6050

O9011 6051

O9012 6052

O9013 6053

O9014 6054

O9015 6055

O9016 6056

O9017 6057

O9018 6058

O9019 6059

·重复 与非模态调用一样,地址 L可以指定从 1 9999 的重复次数。

· 自变量指定 与非模态调用一样,两种自变量指定是有效的:自变量指定Ⅰ和自变量指

定Ⅱ。根据使用的地址自动地决定自变量的指定类型。

限制

· 使用 G代码的宏调用的嵌套

G 代码调用的程序中,不能用 G 代码调用宏程序。这种程序中的 G 代码被处理为普通 G 代码。在用 M T 代码作为子程序调用的程序中,不能用 G 代码调用宏程序。这种程序中的 G 代码也处理为普通G 代码。

2)用 M代码调用宏程序

在参数中设置调用宏程序的 M代码,与非模态调用(G65)的方法一样用该代码调用宏程序。

说明

在参数(No.6080 No.6089)中设置调用用户宏程序(O9021O9029)的M代码(从 1 9999,用户宏程序能与G65 同样的方法调用。

·参数号和程序号之间的对应关系

程序号 参数号

O9020 6080

O9021 6081

O9022 6082

O9023 6083

O9024 6084

O9025 6085

O9026 6086

O9027 6087

O9028 6088

O9029 6089

·重复

与非模态调用一样,地址 L可以指定从 1 9999 的重复次数。

· 自变量指定 与非模态调用一样,两种自变量的指定是有效的:自变量指定Ⅰ和自变量

指定Ⅱ。根据使用的地址自动地决定自变量指定的类型。

· 调用宏程序的M代码必须在程序段的开头指定。

限制

· G代码调用的宏程序或用M代码或T代码作为子程序调用的程序中,不能用 M 代码调用宏程序。这种宏程序或程序中的 M 代码被处理为普通的M代码。



第二节SINUMERIK

840D)系统参数编程基础

1 参数

一般西门子系统供用户自由使用的R参数范围为R0~R99

2 零点数据的读写

通过找正得到的工件零点内的任何一个数据,都可以通过系统参数进行可编程的读出和写入的操作。

1

2

2.1读取零点数值

R51=$p_uifr[1,x,tr]

[ ]内:“1”表示修改G54中的坐标;

$P_UIFR[0] 对应G500

$P_UIFR[1] 对应G54

$P_UIFR[2] 对应G55

依次累推

X”表示修改X轴的坐标;

TR”表示实际值。

$p_uifr[3,Z,RT]

RT :表示工件坐标系旋转角度 Z-ROT

$P_UIFR[1, X,FI]

FI”:表示修正

2.2写入零点数值

$p_uifr[1,x,tr]=R1

将参数R1中的数值写入零点G54X轴。

例如:想要设定G54中的X偏置值为10Y轴的偏置值为20Z轴的偏置值为30,具体编程指令如下:

$P_UIFR[1, X, TR] =10

$P_UIFR[1, Y, TR]=20

$P_UIFR[1, Z, TR]=30

3 运算功能

运算符号

功能含义

=

赋值R1=10

+

-

*

/

Sin( )

正弦

COS( )

余弦

TAN( )

正切

ASIN( )

反正弦

ACOS( )

反余弦

ATAN2(,)

反正切

SQRT( )

方根

ABS( )

绝对值

POT( )

二次方(平方)

TRUNC( )

舍位取整数

ROUND( )

进位整数

LN( )

自然对数

EXP( )

指数

4. 跳转

4.1无条件跳转

GOTOB __向后跳转至标签__(方向:程序起始)

GOTOF __向前跳转至标签__(方向:程序结束)

1

2

3

4

4.2有条件程序跳转

IF 表达式 GOTOB __

IF 表达式 GOTOF __

比较运算

含义

==

等于

<>

不等于

>

大于

<>

小于

>=

大于或者等于

<>

小于或者等于

5 循环功能

WHILE 比较运算

NC 程序段

ENDWHILE

符合条件时,执行WHILE 程序循环。






第三节 HEIDENHAIN

iTNC530)系统参数编程基础

1 Q参数的功能范围

Q参数由字母Q0399之间的数字组成,分为3个值域:

Q参数含义

值域

可在TNC内存中通用的自由参数

供用户自由使用

Q0Q99

用于专用TNC功能的参数

Q100Q199

主要用于循环的参数,

通常对TNC内存中所有程序有效

Q200Q399

2 零点数据的读写

通过找正得到的工件零点内的任何一个数据,都可以通过系统参数进行可编程的读出和写入的操作。

2

2.1读取系统参数

FN18SYS-DATUM READ Qn=ID_ NR_IDX_

将读取的某一系统参数存入指定的Q参数中,Qnn=0~99

ID编号:每一组系统参数对应的一个ID编号

NR序号:每一组系统参数所包含的各项系统参数的序号

IDX索引号:每些项系统参数下所包含的对应某一具体系统参数的索引号

系统参数所对应的各编号,可通过系统参数表查找。详见《HEIDENHAIN编程手册》,此处略。

仅列出找正操作的常用系统参数。

组名

ID编号

NR序号

IDX索引号

含义

REF坐标系中的名义位置

240

1

1

X~W




2





3





4





5





6





7





8





9


偏移表REF数值

501

偏移值编号1~n

1~9

X~W

零点表数值

503

零点编号1~n

1~9

X~W

零点表坐标系旋转值

504

零点编号1~n

1~9

1

例:读取零点表数据

FN18SYSREAD Q1=ID 503 NR1 IDX1

执行上述指令,读取零点表PRESET.PR中第一组零点的X轴数值,并存入参数Q1中。

参数含义:

ID 503ID503表示零点表PRESET.PR数据

NR1:编号1表示零点表PRESET.PR中第一组,第二组则为NR2,依次类推

IDX1:索引号1表示第一轴(X轴),第二轴(Y轴)则为IDX2,依次类推

2.2写入系统参数

FN17SYS WRITE ID_ NR_ IDX_= Qn

将某一Q参数中的数值写入到指定的系统参数中。

系统参数所对应的各编号同上。

例:写入零点表数据

FN17SYS WRITE ID 503 NR1 IDX1=Q1

参数含义同上。

执行上述指令,将参数Q1中的数值写入零点表PRESET.PR中第二组零点的X轴。

3 测量结果的调用

测量循环运行后的当前测量结果会保存在特定的Q参数中,见下表。这些Q参数可直接被用于参数编程来处理。

测量循环测量结果

实际测量值

参数

直线的角度

Q150

中心的第一轴坐标

Q151

中心的第二轴坐标

Q152

直径

Q153

槽(腔)长

Q154

槽(腔)宽

Q155

所选轴向的长度

Q156

中心线位置

Q157

A轴角度

Q158

B轴角度

Q159

所选轴向的坐标

Q160

测量偏差值

参数

中心的第一轴坐标

Q161

中心的第二轴坐标

Q162

直径

Q163

槽(腔)长

Q164

槽(腔)宽

Q165

长度

Q166

中心线位置

Q167


测量的立体角度

参数

A轴旋转角度

Q170

B轴旋转角度

Q171

C轴旋转角度

Q172

4 基本运算功能

逻辑命令

功能含义

FN0

赋值

FN0Q5=+60

FN1

FN1Q1=-Q2+-5

FN2

FN2Q1=+10-+5

FN3

FN3Q2=+3*+3

FN4

FN4Q4=+8DIV+Q2

FN5

平方根

FN5Q20=SQRT4


5 三角函数

逻辑命令

功能含义

FN6

正弦

FN6Q20=SIN-Q5

FN7

余弦

FN7Q21=COS-Q5

FN8

平方和的根

FN8Q10=+Q5LEN+4

FN13

FN6Q20=+25ANG-Q1


6 输入公式

调用FORMULA(公式)功能,可直接输入算式。

逻辑命令

功能含义

+

Q10=Q1+Q5

-

Q25=Q7-Q108

*

Q12=5*Q5

/

Q25=Q1/Q2

左括号

Q12=Q1*(Q2+Q3)

右括号

Q12=Q1*(Q2+Q3)

SQ

平方

Q15=SQ 5

SQRT

平方根

Q22=SQRT 25

SIN

正弦

Q44=SIN 45

COS

余弦

Q45=COS 45

TAN

正切

Q46=TAN 46

ASIN

反正弦

Q10=ASIN 0.75

ACOS

反余弦

Q11=ACOS Q40

ATAN

反正切

Q12=ATAN Q50

Q15=33

PI

Pi(3.14159)

Q15=PI

LN

自然对数,基数2.7183

Q15=LN Q11

LOG

对数基数10

Q33=LOG Q22

EXP

指数函数,2.7183n次幂

Q1=EXP Q12

NEG

取负数(乘以-1

Q2=NEG Q1

INT

取整,小数点后位数去掉

Q3=INT Q42

ABS

绝对值

Q4=ABS Q22

FRAC

取小数,小数点前位数去掉

Q5=FRAC Q23

SGN

检查代数符号

Q12=SGN Q50

Q50>=0Q12=1,Q50>0Q12=0

%

计算模数值

Q12=400%360 结果Q12=40

7 计算圆

7.1三个点确定圆

FN23Q20=CDATA Q30

圆上3点的坐标必须依次成对存入参数Q30和后而的5个参数,即Q30~Q35

然后,TNC将计算得到的圆心坐标X值存入参数Q20 Y值存入参数Q21,将圆半径存入参数Q22

1

2

7.2四点确定圆

FN24Q20=CDATA Q30

圆上4点的坐标必须依次成对存入参数Q30和后而的7个参数,即Q30~Q37

然后,TNC将计算得到的圆心坐标X值存入参数Q20 Y值存入参数Q21,将圆半径存入参数Q22

8 判断-转移功能

8.1无条件转移

无条件转移指令通过输入一个完全满足的条件进行转移指令编程。例:

FN9IF+1 EQ +1 GOTO LBL 5

1

2

3

4

5

6

7

8

8.2条件转移

判断-转移功能

含义

FN9

IF EQUAL

JUMP

如果等于,

转移

FN9

IF+Q1 EQ +Q3

GOTO LBL 5

FN10

IF NOT EQUAL

JUMP

如果不等于,

转移

FN10

IF+10 NE -Q5

GOTO LBL 10

FN11

IF GREATERTHAN

JUMP

如果大于,

转移

FN11

F+Q1 GT+10

GOTO LBL 5

FN12

IF LESS THAN

JUMP

如果小于,

转移

FN12

IF+Q5 LT +0

GOTO LBL 1

判断-转移所用缩写

含义

lF

If(如果)

EQU

Equals(等于)

NE

Not equal(不等于)

GT

Greate r than(大于)

LT

Less than(小于)

GOTO

Go to(转移到)

9 输出错误信息

FN14ERROR=_

错误信息编号范围

信息文本

0…299

错误信息代码0…299

300…999

独立于机床的对话

1000…1099

系统内部错误信息

例:FN14ERROR=1004(超出范围)

10 直接设置当前工件零点

FN25PRESET=__/__/__:对某一轴设置新工件零点

例:在当前坐标X+100上设置新零点。

FN25PRESET=X/+100/+0

例:将当前坐标Z+50设置成新工件零点下的值为-20

FN25PRESET=Z/+50/-20

11 检查和修改Q参数

在试运行、程序连续运行和程序单步运行模式下,可检查和修改Q参数。

步骤

如果程序在运行过程中,则根据需要中断程序运行(如按机床STOP(停止)按扭和lNTERNAL

STOP(内部停止)软键)。如果程序在试运行过程中,要中断程序试运行。

Q键或Q lNF0软键显示Q参数列表,TNC列出所有参数和其当前值。使用箭头键(光标移动键)或翻页键,可逐页转到所需的参数。

要想改变数值,输入新值,用ENT键确认。

不想改变值,按END键退出参数列表界面。

第四节 参数编程举例

设计钻孔循环

G181 R_Z_B_H_F_

R-#18

Z-#26

B-#2

H-#11

F-#9


程序一:

O9010

#100=#2+#18(R)

#101=#2-#26(Z)

#102=#2+#11(R)

G0Z#100

G1Z#101F#9

G0Z#102

M99

程序二:

O9010

#18=ABS[#18]

#26=ABS[#26]

#11=ABS[#11]

#100=#2+#18(R)

#101=#2-#26(Z)

#102=#2+#11(R)

G0Z#100

G1Z#101F#9

G0Z#102

M99

程序三:

O9010

IF[#18 EQ #0] THEN #18=2

IF[#26 EQ #0] GOTO 1

IF[#2 EQ #0] GOTO 2

IF[#11 EQ #0] GOTO 3

IF[#9 EQ #0] GOTO 4

#18=ABS[#18]

#26=ABS[#26]

#11=ABS[#11]

#100=#2+#18(R)

#101=#2-#26(Z)

#102=#2+#11(H)

G0Z#100

G1Z#101F#9

G0Z#102

M99

N1 #3000=1(NO VALUE IN Z)

N2 #3000=2(NO VALUE IN B)

N3 #3000=3(NO VALUE IN H)

N4 #3000=4(NO VALUE IN F)




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多