第六章变量与数学函数6.1变量SINUMERIK数控系统变量是指系统内部已经命名和规划用途的参数。学习和使用系统变量进行编写加工程序是属于高级编程阶段的内容,需要编程者已经对西门子数控系统比较了解,具有一定的加工编程经验和系统数据调试经验。由于在编程中涉及系统参数的一些读取或写入操作,在验证所编写的程序时一定要注意操作安全,并做好数据记录。系统变量的设计与规划用途的完整情况只能由系统研发人员作出说明,可能需要非常多的篇幅。仅就828D系统而言,其支持软件系统有三个主要版本,某些变量又是针对某个版本设计规划的。本书仅仅就选取出的部分以标示符$打头的、常用的变量使用方法进行说明,需要读者在机床上验证后使用。通过使用变量,特别是计算机功能和控制结构的相关变量,可以使零件程序和循环的编写更为灵活。为此,828D系统提供了三种不同类型的变量:系统变量、预定义用户变量和用户定义变量。6.1.1系统变量系统变量是系统中定义有固定名称的供用户使用的一种标志符号,它们具有固定的预设含义。系统变量的含义中的大部分属性也是由系统固定预设的。用户只能小范围地对属性进行重新定义和匹配。本系统中的系统变量分为预处理变量和主处理变量。1)预处理变量。预处理变量是指在于处理程序状态中,即在执行设定了系统变量的零件程序段进行编译时,读取和写入的系统变量。2)主处理变量。主处理变量是指在主运行状态中,即在执行编程了系统变量的零件程序段时,读取和写入的系统变量。通过系统变量可在零件程序与循环中提供当前控制系统的参数,例如机床,控制系统和加工步骤状态。3)变量前缀。系统变量的一个显著特点是其名称通常包含一个前缀。该前缀由一个$字符、一个或两个字母以及一条下划线构成。系统规定:如果数据在执行期间保持不变,则可以和预处理同步读入,为此在机床数据或设定数据的前缀中写入一个$字符。如$M。预处理时读取或写入的系统变量见表6-1和表6-2。表6-1预处理时读取或写入的系统变量的第一个字符$+第1个字母数据类型$+第1个字母数据类型$M机床数据$CISO固定循环的循环变量$S设定数据,保护区域$P程序变量,通道专用系统变量$T刀具管理参数RR参数(计算参数)。在零件程序和工艺循环中使用R参数时,不写入前缀$O选项数据表6-2预处理时读取或写入的系统变量的第二个字符$+第1个字母变量显示$+第1个字母变量显示N全局变量A轴专用变量C通用专用变量前缀系统的特例:$TC_…:第2个字母C表示的不是通道专用变量,而是刀架专用系统变量。6.1.2用户变量(1)用户变量。是用户自己定义的用于程序编写中表示某种(个)特定意义的一种标志号,系统不确知其含义,也不对其进行分析的变量。1)预定义用户变量。预定义用户变量是在系统中已经定义的变量,但是用户还需通过专门的机床数据对其数量进行参数设置。例如循环指令中的变量。2)用户定义变量。用户定义变量是仅由用户定义的变量,到系统运行时才会创建这些变量。它们的数量、数据类型和所有其他属性都完全由用户定义。例如用户自己编制宏程序时设置的变量。(2)用户变量名称的定义规则1)“$”字符预留给系统变量,用户所定义的变量不可使用。2)变量名称必须意义明确。同一名称不可以用于不同的对象。3)系统中已定义的或备用的关键子不可以用作名称。4)变量名称的长度小于31个字符。允许使用的字符有字母、数字和下划线。5)书写变量名称,开始的两个字符必须是字母或下划线。在单个字符之间不允许有分隔符。6)预留的字符组合。7)为了避免出现名称冲突,在设定名称时要注意避免使用下列字符:①所有的以CYCLE”、“CUST_”、“GROUP_”或“S_”开始的名称均用于西门子标准循环。②所有的以“CCS”开始的名称均用于西门子汇编循环。③用户汇编循环以“CC”开始。④名称“RL”预留给传统车床。⑤以“E_”或“F_”开始的名称预留给EASY…STEP编程。⑥已经被系统使用的指令,标志等名称。8)建议用户选择有区别的且有一定含义的字符来定义变量名称,如以“U”(用户)开始的名称,因为系统、汇编循环和西门子循环不使用这些名称。也可以方便区分和记忆所定义的变量。9)一个程序段中只能定义一种类型的用户变量,可以定义同一种用户变量类型的多个用户变量。6.1.3计算参数(R)计算参数或R参数是名称为R的预定义用户变量,用字母R加数字表示,定义为REAL数据类型的数组。由于历史原因,R参数既可以带数组索引编写,如R[10],也可不带数组索引编写,如R10。(1)编程格式RnR[表达式](2)指令参数说明R:作为预处理变量使用时的名称。n:R参数编号,类型为整数型(INT)。本系统为300个,数值为0~299。表达式:数组索引。只要可将表达式结果转换为数据类型INT,则可设定任意表达式作为数组索引。(3)参数值的赋值范围1)可以在以下数值范围内给计算参数赋值:0.0000001-99999999,8个数位,带符号小数点。2)用指数表示法可以赋值更大的数值范围,±(10-300-10300)。指数值写在“Ex”行号之后,EX范田为-300~+300。Rl=-0.1EX-5;表示R1=-0.000001R2=l.874EX8;表示R2=187400000(4)赋值方法1)直接赋值或通过函数表达式赋值。可以用数值、算术表达式或计算参数对Nc地址赋值。一个程序段中可以有多个赋值语句,也可以用计算表达式赋值。如:N10R1=10R2=20R3=10*2R4=R2-R1R5=SIN(30)2)通过参数变量赋值。通过给Nc地址分配计算参数或参数表达式,可以增加NC程序的通用性。但对程序段段号N、加工指令G和调用子程序指令L例外。赋值时在地址符之后写入字符“=”。赋值语句也可以赋值一个负号。给坐标轴地址(运行指令)赋值时,要求有一个独立的程序段。(5)编程示例算数功能中R参数的赋值和应用。程序代码注释R0=3.5678;在预处理中赋值R[1]=-37.3;在预处理中赋值R3=-7;在预处理中赋值R4=-0.1EX-3;在预处理中赋值:R4=-0.1×105(R4=-0.0001)R7=SIN(25.3);在预处理中赋值$R[6]=l.87EX6;在主运行中赋值:R6=1.87×106(R6=1870000)R[R2]=R10;通过R参数间接地址赋值R[(Rl+R2)*R3]=5;通过算术表达式间接地址赋值X=(Rl+R2);给X轴赋值Z=SQRT(Rl*R1+R2*R2);给Z轴赋值,运行至通过(R2l+R22)平方根确定位置要使一个零件程序不仅适用于特定数值下的一次加工,或者在程序运行中需要计算出某些数值,这两种情况均可以使用计算参数。可以在程序运行时由控制器计算或设定所需要的数值;也可以通过操作面板设定参数数值。如果参数已经赋值,可以通过段号寻址变量并对其进行操作。6.1.4定义用户变量用户可通过DEF指令定义白己的变量并进行赋值。在划分系统变量时,这些变量被称为用户定义变量或用户变量(UserData)。根据变量的有效范围,即变量可见范围,用户变量可分为以下几个类别:1)局部用户变量(LUD)。局部用户变量(LUD)是执行时在调用零件程序时创建,并在零件程序结束或者NC复位时删除。而不是在主程序的零件程序中定义的变量。此变量只能在定义LUD的零件程序中存取该LUD。2)程序全局用户变量(PUD)。程序全局用户变量(PUD)是在作为主程序的零件程序中定义的变量。此变量在零件程序开始时创建,在零件程序结束或NC复位时删除。可在主程序及所有子程序中存取PUD。3)全局用户变量(GUD)。全局用户变量(GUD)是在数据块(SGUD,MGUD,UGUD,GUD4,…,GUD9)中定义的NC或通道全局变量,此变量通电后依然保留。可在所有零件程序中存取GUD。在使用(读/写)用户变量前对其进行定义时必须遵循以下规则:①GUD必须在定义文件如_N_DEF_DIR/_M_SGUD_DEF中定义。②PUD和LUD必须在零件程序的定义段中定义。③必须在单独的程序段中进行数据定义。④每次数据定义只能使用一种数据类型。⑤每次数据定义可以定义多个相同数据类型的变量。(1)编程格式系统中定义的编程格式非常完整,规定的编程格式为:DEF范围类型预处理停止初始化时间物理单位限值存取权限名称[值_l,值_2,值_3]=初始化值在实际使用中,编程格式可以为:DEF类型名称[值_1,值_2,值_3]=初始化值(2)指令参数说明DEF:用于定义用户变量GUD、PUD、LUD的指令。类型:数据类型①INT:带正负号的整数值。②REAL:实数型数值。③B00L:真值=TRUE(1)/假值=FALSE(0)。④CHAR:ASCII一字符。⑤STRING[最大长度]:定义长度的字符串。⑥AXIS:进给轴或主轴标志符。⑦FRAME:静态坐标转换的几何设定。名称:变量名称。规定与用户定义变量名称相同。[值_l,值_2,值_3]:设定1维至3维(最大)数组变量的数组长度(可选)。初始化值:初始化值(可选)。(3)编程示例程序全局和局部用户变量(PUD/LUD)的定义。程序代码注释PROCMAIN;主程序DEFINTVARl;程序全局用户变量PUD定义一个名称为“VARl”整型变量VAR1=30;名称为VARl的变量更式初始值为30...SUB2;调用子程序...M30PROCSUB2;子程序SUB2DEFINTVAR2;局部用户变量LUD定义...IF(VAR1==1);程序全局用户变量PUD读取VARl=VARl+l;程序全局用户变量PUD读取与写入VAR2=l;局部用户变量LUD写入ENDIFSUB3;调用子程序...M17PROCSUB3;子程序SUB3...IF(VAR1==1);程序全局用户变量PUD读取VARl=VARl+l;程序全局用户变量PUD读取与写入VAR2=l;错误:SUB3中的局部用户变量LUD未知ENDIF...M17提示:当设置了以下机床数据时,在主程序中定义的程序局部用户变量(PUD)同样在子程序中可见。MD11120$MN_LUD_EXTENDED_SCOPE=1设置MD11120=0时,在主程序中定义的程序局部用户变量只在主程序中可见。6.2系统变量、用户变量和NC语言指令的重新定文(REDEF)(1)指令功能在编写程序中,使用REDEF指令可对系统变量、用户变量和NC语言指令的属性进行更改。重新定义的前提条件是必须在相应的定义后进行。在重新定义中不能同时对多个属性进行更改。必须为每个需要更改的属性编写单独的REDEF指令。如果编写的多个属性更改之间有冲突,则最后进行的更改有效。提示:不能对局部用户变量(PUD/LUD)进行重新定义。(2)编程格式REDEF名称预处理停止REDEF名称限值REDEF名称初始化时间REDEF名称初始化时间初始化值(3)指令参数说明REDEF:用于重定义系统变量、用户变量和NC语言指令的特定属性的指令。名称:已定义的变量或NC语言指令的名称。限值:下限或上限。如果在重新定义一个用户变量的极限值时,当前实际值超出了新的定义范围,系统会输出报警,而不接收该极限值。因此,在重新定义用户变量的极限值时,请注意值(极限值、实际值和初始化值)的修改应保持一致。初始化时间:变量重新初始化的时间。INIP0:通电。INIRE:主程序结束,NC复位或上电。INICF:重新配置或主程序结束,NC复位或通电。PRLOC:主程序结束,本地更改后NC复位或通电。初始化值:初始化值。在定义初始化值时,必须设定初始化时间。提示:系统变量不可进行重新定义,也不可以删除已设定数据。6.3存取权限(APR,APW,APRP,APWP,APRB,APWB)对系统变量的读取与写入操作是一件非常严肃和认真的工作,来不得半点马虎。为了保证数据读取和写入工作的严肃性和安