.宏程序讲解用户宏程序程序保护与快捷程序编辑图形对话编程—ManualGuidei交流内容一、变量二、运算指令三、控制指令四、系统变量五、宏程序调用六:典型应用举例用户宏程序相关主程序宏程序主程序和宏程序的关系形状类似但大小不同(圆、方及其它)其它自动化功能(刀具长度测量、生产管理等)特殊形状(椭圆、球等)大小相同但位置不同(组孔、阵列等)宏程序的适用范围宏程序子程序使用变量可使用变量不可以使用变量调用方式G65P_L_自变量赋值;M98P__;程序结束M99;M99;嵌套4重4重宏程序与子程序的比较•变量的种类•变量的显示与设定•变量的使用•未定义变量一、变量例:#10,#1005表达式也可以用于指定变量号,需封闭在括号中。例:#[#2-1],#[#500/2]可在程序段结尾加注释说明变量内容,需用括号封闭。例:#2=#3-1(TOOLNUMBER);变量符号(#)+变量号变量的表示1.变量的种类变量号变量类型用途#0空变量总为空#1~#33局部变量只能用在当前宏程序中存储变量,断电后数据初始化#100~#199#500~#999公共变量在不同的程序中意义相同,各宏程序公用。断电后#100~#199初始化为空,#500~#999数据保存#1000~系统变量可用于读写CNC运行时的各种数据变量的种类1.变量的种类正值+10-29~+104700负值-10-29~-1047变量的范围1.变量的种类1、按下显示宏程序变量值2.变量的显示2.按、显示局部和公共变量值#i=表达式将计算结果赋值给对应的变量号常数、变量、函数和运算符的组合表示方法#1=#2+100;#1=#2+#18SIN[#5];3.变量的使用•当在程序中定义变量值时,小数点可以省略#1=123;#1123.000变量的引用•跟在地址后面的数值可用变量来代替。G01X10.0F#1;F#1把#1值作为F的指令值G01X-[#1+#2]F#1;把表达式放在括号中变量的定义•把变量用于地址数据的时候,被引用变量的值根据地址的最小设定单位自动地四舍五入G01X#1;当#1赋值为12.3456时,实际指令值为G01X12.346;•改变引用变量的值的符号,要把负号放在#的前面G00X-#1;•当引用未定义的变量时,变量及地址字都被忽略G00X#1Y#2;当#1=0,#2为空时,G00X0;•程序号、顺序号和任选程序段跳转号不能使用变量O#1;N#3Y200.0;/#2G00X10.;•当变量值未定义时,这样的变量成为空变量•变量#0总是空变量,它不能写只能读未定义变量的引用当引用一个未定义的变量时,地址本身也被忽略当#1=空时当#1=0时G90X100Y#1↓G90X100G90X100Y#1↓G90X100Y04.未定义变量未定义变量的计算除了用空赋值以外,其余情况下空与0相同当#1=空时当#1=0时#2=#1↓#2=空#2=#1↓#2=0#2=#1﹡5↓#2=0#2=#1﹡5↓#2=0#2=#1+#1↓#2=0#2=#1+#1↓#2=0用空赋值条件表达式EQ和NE中的空不同于0当#1=空时当#1=0时#1EQ#0↓成立#1EQ#0↓不成立#1NE0↓成立#1NE0↓不成立#1GE#0↓成立#1GE#0↓成立#1GT0↓不成立#1GT0↓不成立条件表达式二、运算指令•运算命令的种类•运算顺序种类符号格式加法+#i=#j+#k减法-#i=#j-#k乘法*#i=#j*#k除法/#i=#j/#k加减乘除1.运算命令的种类种类函数名格式下取整FIX#i=FIX[#k]上取整FUP#i=FUP[#k]四舍五入ROUND#i=ROUND[#k]绝对值ABS#i=ABS[#k]下取整(FIX):舍去小数点以下部分上取整(FUP):将小数后部分进位到整数部分ROUND函数:在算术运算或逻辑运算指令中使用时,在第1个小数位置四舍五入,在NC语句地址中使用时,根据地址的最小设定单位将指定值四舍五入数据处理1.运算命令的种类种类符号格式结果正弦SIN#i=SIN[θ]c/a余弦COS#i=COS[θ]b/a正切TAN#i=TAN[θ]c/b反正弦ASIN#i=ASIN[c/a]θ反余弦ACOS#i=ACOS[b/a]θ反正切ATAN#i=ATAN[c]/[b]θ•三角函数的角度单位为度。如:90°30′表示为90.5三角函数1.运算命令的种类其它函数种类函数名格式平方根SQRT#i=SQRT[#k]自然对数LN#i=LN[#k]指数函数EXP#i=EXP[#k]#2=2;#1=SQRT[#2];1.414#11.运算命令的种类逻辑运算种类名称格式或OR#i=#jOR#k异或XOR#i=#jXOR#k与AND#i=#jAND#k•对32位的每一位按二进制进行逻辑运算输入值或异或与000000111010110111011.运算命令的种类2.运算顺序①函数②乘除运算(*,/,AND)③加减运算(+,-,OR,XOR)#1=#2+#3*SIN[#4];①②③2.运算顺序•可以利用[]来改变运算顺序,可嵌套5次•可以使用函数名前面的两个字母来指定该函数。ROUND→ROFIX→FI•无条件转移(GOTO语句)•条件转移(IF语句)•循环(WHILE语句)三、控制指令GOTOn;n:程序段号(1-99999)无条件地转移到程序段n去。•n也可用变量或表达式来代替GOTO10;GOTO#10;1.无条件转移(GOTO语句)IF[条件表达式]GOTOn;•若满足条件表达式,下步操作转移到程序段号为n的程序段去。•若不满足,执行下个程序段。IF[条件表达式]THEN…;•若满足条件表达式,执行THEN后的宏程序语句,只执行一个语句。IF[#1EQ#2]THEN#3=0;2.条件转移(IF语句)表达式含义英文#jEQ#k#j=#kEQual#jNE#k#j≠#kNotEqual#jGT#k#j>#kGreaterThan#jLT#k#j<#kLessThan#jGE#k#j≥#kGreaterorEqual#jLE#k#j≤#kLessorEqual•#j和#k也可用表达式来代替。条件表达式2.条件转移(IF语句)WHILE[条件表达式]DOm;(m=1,2,3)条件成立时执行的程序ENDm;•DOm和ENDm必须成对使用,并以其中的m作为识别号相互识别。•m的范围为1,2,3。可以根据需要多次使用。3.循环(WHILE语句)WHILE[…]DO1;程序WHILE[…]DO2;END1;程序END2;END1;程序WHILE[…]DO1;•DO的区域不能交叉•DO一定要在END之前规定•识别号(1,2,3)可多次使用WHILE[…]DO1;程序END1;WHILE[…]DO1;程序END1;3.循环(WHILE语句)WHILE[…]DO1;程序IF[…]GOTOn;END1;程序Nn…;•可以从DO区域的内部向外部转移•不可以从DO区域的外部向内部转移•DO循环可以嵌套3级WHILE[…]DO1;●WHILE[…]DO2;●WHILE[…]DO3;程序END3;●END2;●END1;IF[…]GOTOn;WHILE[…]DO1;程序Nn…;END1;3.循环(WHILE语句)常用格式(当前值)=(初值);WHILE[(当前值)比较(目标值)]DOm;(执行循环操作);(当前值)=(当前值)±1;ENDm;3.循环(WHILE语句)四、系统变量•刀具补偿值•CNC报警•时间信息•模态信息•位置信息•工件零点偏移补偿号刀具长度补偿(H)刀具半径补偿(D)几何补偿磨耗补偿几何补偿磨耗补偿1#11001(#2201)#10001(#2001)#13001#12001(200)#11200(#2400)#10200(#2200)400#11400#10400#13400#124001.刀具补偿值变量号设定范围功能#30000~200CNC停止运行并报警•表达式后为不超过26个字符的报警信息•屏幕上显示报警号和报警信息,报警号为#3000的值加上3000#3000=1(WRONGDATAINPUT);屏幕显示:3001WRONGDATAINPUT例:2.CNC报警变量号单位功能赋值#3001毫秒计时器。电源接通时复位为0。可以#3002小时计时器。循环启动灯亮时开始计时。即使在断电时也保存该值可以#3011年月日读取当前的日期。1999年12月31日19991231不可#3012时分秒读取当前的时间。下午3点34分56秒153456不可3.时间信息#3003单程序段辅助机能的完成0有效等待1无效等待2有效不等待3无效不等待•当电源接通时,#3003的值为0•当单程序段停止无效时,即使操作面板上的单程序段开关设为ON,也不执行单程序段停止。•当不指定等待辅助功能M、S和T功能完成时,在辅助功能完成之前程序执行到下列程序段而且分配完成信号DEN不输出4.自动运行变量号功能赋值#3005设定数据可以5.SETTING值变量号功能赋值#3007使用外部开关或SETTING操作设置的各轴镜像状态可以通过输出信号镜像检测信号读出不可6.镜像变量号功能赋值#3901已加工零件数可以#3902所要求的零件数可以7.加工零件数变量号模态信息变量号模态信息#4001G00,G01,G02,G03,G33,G60,G75,G77~G79#4107D代码#4002G17,G18,G19#4109F代码#4003G90,G91#4111H代码#4007G40,G41,G42#4113M代码#4008G43,G44,G49#4119S代码#4009G73,G74,G76,G80~G89#4120T代码#4014G54~G59#4130P代码8.模态信息变量号位置信息坐标系刀补值#5001~8程序段终点工件坐标系不包含#5021~8当前位置机床坐标系包含#5041~8当前位置工件坐标系#5061~8跳转信号位置#5081~8刀具长度补偿值#5101~8伺服位置误差9.位置信息变量号工件坐标系#5201~4第1轴到第4轴外部工件坐标原点偏移值#5221~4第1轴到第4轴G54原点偏移值#5241~4第1轴到第4轴G55原点偏移值#5261~4第1轴到第4轴G56原点偏移值#5281~4第1轴到第4轴G57原点偏移值#5301~4第1轴到第4轴G58原点偏移值#5321~4第1轴到第4轴G59原点偏移值10.工件零点偏移值11.PMC信号11.PMC信号11.PMC信号五、宏程序的调用•非模态调用G65•模态调用G66•G、M代码调用宏程序•M、T代码调用子程序G65PpLl〈自变量赋值〉;要调用的程序号重复次数•用G65指令,把由P指令的宏程序体调用L次•L的缺省值为1•按照〈自变量赋值〉的规定,将自变量的实际数值调到相应的程序体中1.非模态调用G65有两种形式的自变量赋值规定:•自变量赋值Ⅰ•自变量赋值Ⅱ自变量赋值Ⅰ地址变量号地址变量号地址变量号A#1I#4T#20B#2J#5U#21C#3K#6V#22D#7M#13W#23E#8Q#17X#24F#9R#18Y#25H#11S#19Z#26•对字母A-Z后加数值来赋值,但G,L,N,O,P除外•I,J,K须按字母顺序指定G65P9003X30.Y45.Z-3.F300;#9=300;#24=30.0;#25=45.0;#26=-3.0;自变量赋值Ⅱ地址变量号地址变量号地址变量号地址变量号A#1I3#10I6#19I9#28B#2J3#11J6#20J9#29C#3K3#12K6#21K9#30I1#4I4#13I7#22I10#31J1#5J4#14J7#23J10#32K1#6K4#15K7#24K10#33I2#7I5#16I8#25--J2#8J5#17J8#26--K2#9K5#18K8#27--•I,J,K的下标代表自变量赋值的顺序,在实际编程中不写G65P9999A1.0B1.3C