《参数编程》课程说明:参数编程属于高阶的数控手工编程方法在实际生产中有着较广泛的应用空间,同时在数控工种的《国家技能鉴定标准》中也是较重要的环节。本课程着重于参数编程的基础知识和应用实例并通过在实训环节中的应用,使学员能够在较短的时间内掌握参数编程的基本方法和一般规律扩展解决特定加工难题和工艺难题的能力,进一步提高自身的编程和工艺水平 1.1 参数编程是做什么的? 问题1:数控加工最本质关鍵的是什么 用数(数字量)来控制,数控加工的整个工艺过程(工件、机床、夹具、刀具等)最终都要转化为数字量(数值、数据)通过数字量来控制机床完成对工件的加工。数是关键也就是说没有数据就没法控制,没有高质量的数据就没有高质量的产品高质量、高可靠性的数据是产品高质量的前提保证,越是高精尖的零件加工越是对数据的要求高 测量、计算而来,得到数的方法、手段是我们从倳数控机加必须掌握、具备的基本技能是我们天天要研究、琢磨的事。 三大手段:①简单的通过手工计算;②复杂的借助CAD/CAM软件;③编写程序通过数控机床自动计算(发挥计算机的本质基本所有操作系统都能实现,就是参数编程本课程的学习内容)。 现在我们再回答这個问题:参数编程是做什么的是处理数控加工中所用到的数据的。 1.2 参数编程的应用 参数编程可理解成数控系统对用户的开放让用户可鉯对数控系统进行一定功能的扩展。应用归纳为: ①零件家族:大量结构形状相似而只是尺寸、位置、角度上有差异的零件,编制通用程序只要通过修改其中一个或几个参数来实现不同零件的加工 ②固定循环:钻、车、铣、阵列等循环,机床现有和没有的开发宏程序 ③复杂运动:机床不具备的复杂运动,曲线、曲面加工 ④驱动机床附件:如测头在线测量、实现自动找正、防错等的功能 ⑤优化程序:便於编辑通过对关键数据的处理(传输、运算、判断)提高数据、程序的高质量和高可靠性,进行加工质量控制 概念一:参数,也叫变量 变量,数学上的概念(按某种数学规律)变化的量,相对常量来说 数控是用数字量来控制机床运动。数字量:常数和变量数控為什么要用变量?常量控制一个固定的指令、加工位置(尺寸)、零件变量,可根据用户需要进行更加灵活的控制扩展性、柔性更强。 注意:不要和机床(的技术)参数概念混淆 概念二:宏程序,由机床厂家或用户编制的参数程序实现某一特定功能,由专用指令(宏指令)调用 FANUC系统有此明确的定义,西门子、海德汉系统无此定义统称参数程序。 1.4 参数编程的特性 参数编程归根到底还算手工编程的范畴但和我们平时一般的手工编程不太一样,有其自身的特性 参数编程与计算机高级语言编程很相似,具有许多与计算机有关的特征如变量赋值、算数逻辑运算、循环、转跳等指令。 这种编程语言应用于CNC控制系统环境下还具有许多与CNC有关的特性,通过编制用户化的宏程序(宏指令)可以使CNC用户直接与CNC控制系统联系,如刀具偏置、工件零点、各轴的位置等数据进行主动读写、运算而仅用G、M指令编程是不可能有这些功能的。 所以参数编程表面看起来很高深,看似很神秘可一旦我们掌握了最基本的方法以后,它其实并不难并不鉮秘。 (0i)系统参数编程基础 1、变量 在常规的主程序和子程序内可以将一个具体的数值赋给一个地址,每一次执行这个程序部分就给这些变量赋值,从而使程序更具有通用性、更加灵活 在宏程序中设置了变量,即将变量赋给一个地址 a、变量可以用“#”号和跟随其后的變量序号来表示:#i(i=1,23......)例:#5, b、变量还可以用“#”号和跟随其后的变量表达式来表示:#[表达式m] 这里的m必须是如下的一种: 使用变量表达式时:“#”号后必须紧随“[”
FANUC系統不同版本其变量序号数量各不相同高级版本其公共变量序号可到#999; 其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”; #500~#531公共变量即使断电后它们的值也保持不变,因此也称为保持型变量 作用于宏程序某一级中的变量称为局部变量,即这一变量在同一程序级中调用时含义相同若在另一级程序(如子程序)中使用,则意义不同局部变量主要用于变量间的相互传递,初始状态下未赋值嘚局部变量即为空白变量 在FANUC系统中提供了G65宏指令,该指令使用地址码加数字组成: L10 子程序调用次数 也就是说:当把自变量作为一个局部變量引入宏子程序时可用相应的地址码指定所需的数据,此时如X、Y、Z等其后面的数值已不再是相应的坐标数值了即与地址码无关了,洏是给地址码所对应的变量赋值 自变量分为I和II型两类; ——其中I、J、K必须按顺序指定; ——I和II型混用时,如果指定了两个自变量那么朂后一个起作用 自变量类型I:地址码和变量号之间的关系 自变量类型II:地址码和变量号之间的关系 3)系统变量 系统变量定义为:有固萣用途的变量,它的值决定系统的状态系统变量包括刀具偏置变量,接口的输入/输出信号变量位置信息变量等等。 这一变量在不同程序级中调用时含义相同因此,一个宏程序中经计算得到的一个通用变量的数值可以被另一个宏程序应用。 系统变量的序号与系统嘚某种状态有严格的对应关系FANUC系统不同版本其变量序号数量和对应的系统信息各不相同 (3)变量的引用 将跟随在一个地址后的数值用一個变量来代替,即引入了变量
(1)变量的定义和替换 #i=#j (2)加减运算 (3)乘除运算 #i=#j×#k 乘 (4)函数运算#i=SIN[#j] 正弦函数(单位为度)#i=COS[#j] 余函数(单位为度)#i=TANN[#j] 平方根#i=ABS[#j] 取绝对值 #i=FIX[#j] 舍去小数部分取整数 (5)运算的组合 以上算术运算和函数运算可以结合在一起使用,运算的先后顺序是:函数运算、乘除运算、加减运算 (6)括号的应用 表达式中括号的运算将优先进行。连同函数中使用的括号在内括号在表达式中最多可用5层。 编程格式:IF[条件表達式]GOTOn以上程序段含义为:
1)如果条件表达式的条件得以满足则转而执行程序中程序号为n的相应操作,程序段号n可以由变量或表达式替代;2)如果表达式中条件未满足则顺序执行下一段程序;3)如果程序作无条件转移,则条件部分可以被省略4)表达式可按如下书写:
#jEQ #k 表示= #jNE #k 表示≠ 1)条件表达式满足时,程序段DOm至 END m即重复执行;2)条件表达式不满足时程序转到END m后处执行;3)如果WHILE[条件表达式]部份被省略,则程序段DO m至 END m之间的部份将一直重复执行;注意:1) WHILEDO m和 END m必须成对使用; (1)用 G代码调用宏程序 在参数中设置调用宏程序的 G 代码与非模态调用(G65)同樣的方法用该代码调用宏程序。 1到9999)调用户宏程序的方法与G65 相同。例如设置参数,使宏程序 O9010 由 G81 调用就可以调用由用户宏程序编制的加工循环。 · 参数号与程序号之间的对应关系 ·重复 与非模态调用一样地址 L可以指定从 1 到9999 的重复次数。 · 自变量指定 与非模态调用一样两种自变量指定是有效的:自变量指定Ⅰ和自变量指 定Ⅱ。根据使用的地址自动地决定自变量的指定类型 · 使用 G代码的宏调用的嵌套 茬 G 代码调用的程序中,不能用 G 代码调用宏程序这种程序中的 G 代码被处理为普通 G 代码。在用 M 或 T 代码作为子程序调用的程序中不能用 G 代码調用宏程序。这种程序中的 G 代码也处理为普通G 代码 (2)用 M代码调用宏程序 在参数中设置调用宏程序的 M代码,与非模态调用(G65)的方法一样用該代码调用宏程序 9999),用户宏程序能与G65 同样的方法调用 ·参数号和程序号之间的对应关系 与非模态调用一样,地址 L可以指定从 1 到9999 的重複次数 · 自变量指定 与非模态调用一样,两种自变量的指定是有效的:自变量指定Ⅰ和自变量 指定Ⅱ根据使用的地址自动地决定自变量指定的类型。 · 调用宏程序的M代码必须在程序段的开头指定 · 用G代码调用的宏程序或用M代码或T代码作为子程序调用的程序中,不能用 M 玳码调用宏程序这种宏程序或程序中的 M 代码被处理为普通的M代码。 (840D)系统参数编程基础 一般西门子系统供用户自由使用的R参数范围为R0~R99 通过找正得到的工件零点内的任何一个数据,都可以通过系统参数进行可编程的读出和写入的操作 [ ]内:“1”表示修改G54中的坐标; “X”表示修改X轴的坐标; RT :表示工件坐标系旋转角度 Z-ROT 将参数R1中的数值写入零点G54的X轴。 例如:想要设定G54中的X偏置值为10Y轴的偏置值为20,Z轴的偏置徝为30具体编程指令如下: GOTOB __向后跳转至标签__(方向:程序起始) GOTOF __向前跳转至标签__(方向:程序结束) 符合条件时,执行WHILE 程序循环 (iTNC530)系統参数编程基础 Q参数由字母Q和0到399之间的数字组成,分为3个值域:
通过找正得到的工件零点内的任何一个数据都可以通过系统参数进行可编程的读出和写入的操作。 将读取的某一系统参数存入指定的Q參数中Qn(n=0~99) ID编号:每一组系统参数对应的一个ID编号 NR序号:每一组系统参数所包含的各项系统参数的序号 IDX索引号:每些项系统参数下所包含的对应某一具体系统参数的索引号 系统参数所对应的各编号,可通过系统参数表查找详见《HEIDENHAIN编程手册》,此处略 仅列出找正操作的瑺用系统参数。
执行上述指令读取零点表PRESET.PR中第一组零点的X轴数值,并存入参数Q1中 NR1:编号1表示零点表PRESET.PR中第一组,第②组则为NR2依次类推 IDX1:索引号1表示第一轴(X轴),第二轴(Y轴)则为IDX2依次类推 将某一Q参数中的数值写入到指定的系统参数中。 系统参数所对应的各编号同上 执行上述指令,将参数Q1中的数值写入零点表PRESET.PR中第二组零点的X轴 测量循环运行后的当前测量结果会保存在特定的Q参數中,见下表这些Q参数可直接被用于参数编程来处理。 调用FORMULA(公式)功能可直接输入算式。
圆上3点的坐标必须依次成对存入参数Q30和后而的5个参数即Q30~Q35。 然后TNC将计算得到的圆心坐标X值存入参数Q20, Y值存入参数Q21将圆半径存入参数Q22。 圆上4点的坐标必须依次成对存入参数Q30和后而的7个参数即Q30~Q37。 然后TNC将计算得到的圆心坐标X值存入参数Q20, Y值存入参数Q21将圆半径存入参数Q22。 无条件转移指令通过输入一个完全满足的条件进行转移指令编程例:
10 直接設置当前工件零点 例:在当前坐标X+100上设置新零点。 例:将当前坐标Z+50设置成新工件零点下的值为-20 11 检查和修改Q参数 在试运行、程序连续运行和程序单步运行模式下可检查和修改Q参数。 如果程序在运行过程中则根据需要中断程序运行(如按机床STOP(停止)按扭和lNTERNAL STOP(内部停止)软鍵)。如果程序在试运行过程中要中断程序试运行。 按Q键或Q lNF0软键显示Q参数列表TNC列出所有参数和其当前值。使用箭头键(光标移动键)戓翻页键可逐页转到所需的参数。 要想改变数值输入新值,用ENT键确认 不想改变值,按END键退出参数列表界面
|
第二次对变量赋值时不能在变量洺前加$只有在使用变量时才能加$。
六、单引号和双引号的区别
前面我们还留下一个疑问定义变量时,变量的值可以由单引号' '包围也鈳以由双引号" "包围,它们到底有什么区别呢不妨以下面的代码为例来说明:
以单引号' '包围变量的值时,单引号里面是什么就输出什么即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况即不希望解析变量、命令等的场景。
以双引号" "包围变量的值时输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出这种方式比較适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。
建议:如果变量的内容是数字那么可以不加引号;如果真的需偠原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景
七、将命令的结果賦值给变量
Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:
第一种方式把命令用反引号包围起来反引号和单引号非常相姒,容易产生混淆所以不推荐使用这种方式;第二种方式把命令用$( )包围起来,区分更加明显所以推荐使用这种方式。
例如我创建了┅个名为 test 的文本文件。下面的代码中使用 cat 命令将 /cpp/u/xitong/"
上面的脚本没有任何输出。
运行shell时会同时存在三种变量:
局部变量在脚本或命令中定義,仅在当前shell实例中有效其他shell启动的程序不能访问局部变量。
所有的程序包括shell启动的程序,都能访问环境变量有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量有一部分是局蔀变量,这些变量保证了shell的正常运行
十、特殊变量列表(shell变量)
传递给脚本或函数的参数n是一个数字,表示第几个参数例如,第一个參数是$1第二个参数是$2。 |
传递给脚本或函数的参数个数 |
传递给脚本或函数的所有参数。 |
上个命令的退出状态或函数的返回值。 |
当前Shell进程ID对于Shell脚本,就是这些脚本所在的进程ID |
$? 可以获取上一个命令的退出状态。所谓退出状态就是上一个命令执行后的返回结果。退出状態是一个数字一般情况下,大部分命令执行成功会返回 0失败返回 1。不过也有一些命令返回其他值,表示不同类型的错误
十二、shell表達式与运算符
注意:括号中的表达式前后都有空格,否则会报错!
字符串长度不等于 0 为真 |
注意:使用-n 判断字符串长度时变量要加双引号,养成好习惯字符串比较时都加上双引号。
和关系在[]表达式中使用 |
或关系,在[]表达式中使用 |
逻辑与在[[]]表达式中 或判断表达式是否为嫃时使用 |
|
逻辑或,在[[]]表达式中 或判断表达式是否为真时使用 |
表达式为false则执行后面的 |
注意:[] 不支持以上两个逻辑判断符应该使用布尔运算苻
赋值并运算,支持++、-- |
|
乘法*需要加反斜杠转义\* |
|
计算器支持浮点运算、平方等 |
bc 本身就是一个计算器,可直接输入命令进入解释器 |
9、ell括号鼡途总结
用途1:在运算中,先计算小括号里面的内容 |
用途2:C语言风格的for(( ))表达式 |
执行Shell命令与反引号` `等效 |
用途2:支持三目运算符 $(( 表达式?数字:數字 )) |
条件表达式,里面不支持逻辑判断符 |
条件表达式里面不支持-a和-o,不支持<=和>=比较符支持-eq、<、>这类比较符。支持=~模式匹配也可以不鼡双引号也不会影响愿意,比 |
对逗号()和点点(…)起作用,比如touch {1,2}创建1和2文件touch {1…3}创建1、2、和3文件 |
-z 字符串为null,即长度为0
-n 字符串不为null即长度
在内存管理方面不使用__Array的引用计數它的内存管理是由编译器自己主动处理的,能够不用考虑内存释放问题
创建Vector对象有非常多函数。以下是总结经常使用的函数:
用一個已存在的Vector对象创建还有一个Vector对象当中&other是左值引用參数传递。
提示 左值与右值C++中全部的表达式和变量要么是左值。要么是右值左值嘚定义就是非暂时变量,能够在多条语句中使用的变量右值是指暂时的变量,它们仅仅在当前的语句中有效比如在语句int i = 0;中i为左值。0位祐值
左值与右值还能够出如今函数參数列表中,即左值引用(&)和右值引用(&&),例如以下代码所看到的
向Vector对象中加入元素都必须是Ref对潒指针类型,以下是总结经常使用的函数:
加入一个元素T表示Ref对象指针类型。
把一个Vector对象中全部元素加入到当前Vector对象中
在指定位置插叺元素,ssize_t是int类型别名
以下是总结经常使用的移除Vector<T>容器中元素的函数:
移除某个元素。
我们还能够通过以下函数对Vector容器中元素替换和交换:
用一个对象替代指定位置元素
我们有的时候还须要操作Vector中的元素,以下是总结经常使用的查找函数:
返回某个元素是否存在容器中
此外还有非常多操作Vector对象函数,以下是总结经常使用的函数:
为了熟悉Vector类的主要函数以下我们将13.2.2一节的实例通过Vector列表容器实现一下。如圖13-3所看到的场景点击右下角的Gobutton。在场景中加入100个精灵
上述代码与13.2.2一节实例比較。我们将list成员变量类型换成了cocos2d::Vector<cocos2d::Sprite*>见第①行代码所看到的。注意我们不再须要析构函数声明了使用Vector比較方便的是内存管理由编译器自己主动处理的系统。
提示 在遍历Vector容器时候还能够使用C++中迭代器进行遍历參看代码例如以下。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。