普通加工程序直接用数值指定G代码和移动距离,例如G01 X100.0。使用用户宏程序时,数值可以直接指定或用变量指定。当用变量指定时,变量值可用程序或用MDI面板上的操作改变。
#1=#2+100.0;
G01 X#1 F300;
解释:
(1)变量的表达方式 当指定一个变量时,在符号“#”的后面指定变量号,即#i(i=1,2,3,4…),例如:#8、#112、#1005,或者使用后面将要叙述的“运算指令”项目中的<表达式>,按照如下方式表达:#[<表达式>],例如:#[#100]、#[#1001-1]、#[#6/2]、#[10000+#1]、#[12000+#8]。
变量号码为负时,会有报警出现,例如#-5,应表示为-#5。
下列为不正确的变量表示法:
下面说明中的变量#i可以用变量#[<表达式>]来替换。
(2)变量的种类 根据变量号,可以将变量分为局部变量、公共变量、系统变量,各类变量的用途和特性各不相同。另外,还有为用户准备的只读专用的系统变量。
(3)变量的范围 局部变量和公共变量可使用下列范围内的任意值。如果运算结果超过此范围,就会有报警PS0111发出。
参数No.6008#0=0时,最大值约为±10308,最小值约为±10-308。
用户宏程序中进行处理的数值数据,基于IEEE(国际电气与电子工程师学会)标准,作为双倍精度实数处理。运算过程中出现的误差,也基于此双倍精度。
参数No.6008#0=1时,最大值约为±1047,最小值约为±10-29。
(4)局部变量(#1~#33) 局部变量就是在宏内被局部使用的变量。也即,它与在某一时刻调用的宏中使用的局部变量#i和在另一时刻调用的宏(不管是以前的宏,还是别的宏)中使用的#i不同。因此,在从宏A中调用宏B时(如多层调用一样),有可能在宏B中错误使用在宏A中正在使用的局部变量,导致破坏该值。
局部变量用于传输自变量。其与自变量地址之间的对应关系,请参阅宏程序调用指令的章节。没有被传输自变量的局部变量,在初始状态下为<空值>,用户可以自由使用。局部变量的属性为可READ/WRITE(读/写)。
(5)公共变量(#100~#199、#500~#999) 局部变量在宏内部被局部使用,而公共变量则是在主程序、从主程序调用的各子程序、各个宏之间通用。也即,在某一宏中使用的#i与在其他宏中使用的#i是相同的。此外,由某一宏运算出来的公共变量#i可以在别的宏中使用。局部变量的属性基本上为可READ/WRITE(读/写)。但是,也可以对由参数(No.6031~6032)指定的变量号的公共变量进行保护(设定为只读)。公共变量的用途没有在系统中确定,因此,用户可以自由使用。公共变量可以使用#100~#199、#500~#999共计600个。#100~#199将会由于电源切断而被清除,但是,#500~#999即使在电源切断之后仍会被保留起来。
(6)公共变量的写保护 通过在参数(No.6031~6032)中设定变量号,即可对多个公共变量(#500~#999)进行保护,也即将其属性设定为只读。此功能对利用MDI从宏界面的输入/全部清零、在宏指令中的写入均有效。利用数控程序将设定范围的公共变量设定为WRITE(在“=”左边使用)时,会有报警(PS0116)发出。
(7)系统变量 系统变量是在系统中用途被固定的变量。其属性共有3类:只读、只写、可读/写,根据各系统变量属性不同。
(8)系统常量 为用户准备的其值不变的量,用户可以与变量一样地引用这些常量。系统常量的属性为只读。
(9)小数点的省略 在程序中定义变量值时,可省略小数点。例如,“#1=1234;”的含义是:变量#1的实际值是1234.000。
(10)变量的引用 可以用变量指定紧接地址之后的数值。如果编制一个<地址>#i或<地址>-#i的程序,则意味着原样使用变量值,或者将其补码作为该地址的指令值。
例如:当F#33、#33=2.0时,与指定了F2.0时的情形相同。
当Z-#18、#18=30.0时,与指定了Z-30.0时的情形相同。
当G#130、#130=3.0时,与指定了G3时的情形相同。
不可引用地址“/”“:”“O”和“N”中的变量。
例如:不可编制诸如O#27、N#5或N[#7]的程序。
不可将可选程序段跳过/n的n(n=1~9)作为变量来使用。
不能直接用变量来指定变量号。
例如:用#30来替换#5的5时,代之以指定##30,应指定#[#30]。
不能指定超过每个地址中所确定的最大指令值的值。
例如:当#140=120时,G#140超过最大指令值。
变量为地址数据时,变量被自动地四舍五入到各地址有效位数以下的位数。
例如:在设定单位为1/1000mm的装置上,当#1为12.3456时,如果执行“G00 X#1;”,实际指令将成为“G00 X12.346;”。
利用后面叙述的<表达式>,可以用<表达式>来替换紧跟在地址之后的数值。(www.xing528.com)
<地址>[<表达式>]或<地址>-[<表达式>]
若按照上面的顺序编程,则意味着原样使用<表达式>的值,或者将其补码作为该地址的指令值。需要注意的是,“[]”中使用的不带小数点的常量,视为其末尾带有小数点。
例如:X[#24+#18∗COS[#2]]
Z-[#18+#26]
(11)未定义变量 将尚未定义变量值的状态称为“空值”。
变量#0、#3100永远是空变量,它不能写入,但能读取。
1)引用变量。在引用一个尚未定义的变量时,地址本身也被忽略。
2)定义/替换、加法运算、乘法运算。将局部变量或公共变量直接替换为<空值>时,其结果也为<空值>。将系统变量直接替换为<空值>时,或者替换使用<空值>运算出来的结果时均作为变量值0来对待。
3)比较运算。若是EQ和NE的情形,<空值>和0被判定为不同的值。若是GE、GT、LE、LT的情形,<空值>和0被判定为相同的值。
①将<空值>代入#1时:
②将0代入#1时:
注:EQ和NE只用于整数数值的比较,有小数点的数值的比较请使用GE、GT、LE和LT。
(12)系统变量(常量)的名称指令 系统变量(常量)通过变量号指定,但是,也可以通过事先预备的系统变量(常量)名称来指定。系统变量(常量)名称由_(下划线)开始的8个字符以内的英文大写字母、数字以及_(下划线)构成。另外,依赖于轴的变量(坐标值等)或存在多个同类数据的变量(刀具补偿量等),作为名称的下标,可以用[n](n为整数)指定数值。此时,n可以用<表达式>即运算格式指定。指令格式为
[#_DATE]
必须以[#_系统变量名称]的格式指定。
例如,“#101=[#DATE];”:读出#3011(年月日),代入#101。
“#102=[#_TIME];”:读出#3012(时分秒),代入#102。
“#103=[#_ABSMT[1]];”:读出#5021(第1轴的机械坐标值),代入#103。
“#104=[#_ABSKP[#500∗2]];”:读出#506x(第[#500∗2]轴的跳过位置),代入#104。
为下标n指定了整数值以外的值时,视为指定了将n的小数点以下进行四舍五入处理后的值并引用变量值。
例如,“[#_ABSIO[1.4999999]]”:假定此值为[#_ABSIO[1]],也即#5001。
“[#_ABSIO[1.5000000]]”:假定此值为[#_ABSIO[2]],也即#5002。
注意:
①指定尚未登录的变量名称时,会有报警PS1098发出。
②指定了非法的值作为下标n(负值等)时,会有报警PS1099发出。
(13)系统常量#0、#3100~#3102(属性:R) 可以如同系统变量一般地处理作为系统中固定值的常量。这一常量称为系统常量。系统常量有下列几种。
(14)公共变量的名称指令 通过指定由后述的SETVN指令设定的变量名称,即可从公共变量读取或者写入到公共变量。
指令格式如[#VAR500]所示,必须以[#公共变量名称]的格式指定。
例如,“X[#POS1]Y[#POS2];”:通过变量名称指令指定位置。
“[#POS1]=#100+#101;”:通过变量名称指令执行代入语句。
“#[100+[#ABS]]=500;”:同上(变量号的指定)。
“#500=[1000+[#POS2]∗10];”:通过变量名称指令读取变量。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。