- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析mea中的宏程序的译码处理
为了提高数值加工程序的编程效率,简化数值加工程序,中高档数控机械通常提供固定周期语句、子程序和用户宏程序等高效编程功能。虽然子程序功能可以用来编制相同加工操作的通用程序,并通过重复调用实现多次加工,但是,由于用户宏程序允许使用变量、算术、逻辑运算及条件转移等方法,使得更加容易编制相同加工操作的通用程序,而且其变量编程的方式增加了应用对象的灵活性。用户宏程序实际上是一种带变量的子程序,其使用方法和子程序完成一样,都是通过一条简单指令进行调用。而且,数控加工主程序在调用用户宏程序的过程中,可以通过给变量赋值的方式来定义特定加工过程的参数,这是用户宏程序比子程序功能强大之处。
正确恰当地使用宏功能,可以极大地提高编程效率,并扩展数控系统的功能。对于一个中高档数控系统,宏功能应该是其必备的功能之一。由于用户宏程序的结构和语法定义相对子程序较为复杂,使得宏程序的译码也成为译码模块的一个实现难点。从文献检索来看,很多用户都有应用用户宏程序的编程经验,但是具体介绍用户宏程序的译码功能实现的文章却较为罕见。
FANUC系统作为市场占有率最高的数控系统品牌,具有很高的代表性,本文即以FANUC系统的宏程序指令格式为例,介绍了一种用户宏程序的译码实现方法。
1 fn0t用户的宏程序语句
先对FANNC 0T车床数控系统的宏功能指令作如下简要说明。
1.1 赋值指令“=”
格式: #i=#j+#k;
FANNC 0T系统中以“#”作为变量的标志,“#”后的数值是变量的标号,用以区分各变量。
“=”就是变量的赋值指令,“=”左边是被赋值的变量,“=”右边是一个数值表达式。表达式中可以包含的运算符有:“+”、“-”、“*”、“/”、“”以及一些数学运算函数,也可以包括变量。
FANNC 0T系统中常用的数学运算函数有:“SIN”、“ASIN”、“COS”、“ACOS”、“TAN”、“ATAN”、“SQRT”平方根函数和“ABS”绝对值函数等。
1.2 无条件转让命令
格式:GOTO n;
n是目的程序段的标号,本指令将无条件地转移到指定的程序段;
1.3 运算符和逻辑程式
格式:IF [conditional expression] GOTO n;
“”中是一个逻辑表达式,逻辑表达式中可以包含的运算符有:“EQ”、“NE”、“GT”、“GE”、“LT”、“LE”。其中:EQ为等于运算符;NE为不等于运算符;GT为大于运算符;GE为大于等于运算符;LT为小于运算符;LE为小于等于运算符。逻辑表达式中也可以包括变量。
n是目的程序段的标号。如果“”中的逻辑表达式成立,程序将转移到指定的程序段;否则,继续执行下一条指令。
1.4 循环体循环编码
“”中是一个逻辑表达式,逻辑表达式中包含的运算符与IF指令相同。
“DO”语句后的m是循环标号,与“END”语句的m一致,表示了一个循环的启示位置和结束位置;“DO”与“END”语句之间的部分是循环体,循环体之间可以嵌套另一个WHILE循环。
如果“”中的逻辑表达式成立,程序将不断反复的执行循环体;否则,将跳出循环,继续执行下一条指令。
2 用户的宏程序翻译代码
2.1 数控加工程序的译码实现
对数控加工程序进行译码的关键是对加工程序所包含信息的识别处理。由于数控加工程序是以程序段为一个独立数控加工动作的存储单位,所以本译码程序也是通过逐一读取程序段并进行处理,来实现对整个加工程序的译码。本系统的编程语言为Visual C++,具体思路如下:
第一步,识别模块将以ASCII字符为单位,逐字对当前数控加工程序进行读取。并以程序段为单位,将其存入所设计的数据结构中。
第二步,识别模块将对存储程序段的数据结构进行识别。首先,判断程序段中是否有宏指令,如果有宏指令则调用宏指令的处理函数,并进行识别和处理。如果没有宏指令,则继续对该程序段进行普通语句的处理,诸如G、T字符的识别等。由于已有文献探讨了数控加工程序普通语句的一般译码实现方法,在此本文不作进一步的介绍。
2.2 节点存储文件结构
为了以程序段为单位存储数控加工程序,可以设计了一个队列链表的数据结构“LineContent”,该链表的每一个节点存储一个程序段信息。“LineContent” 链表各节点的结构如下:
其中,“N”是整型变量,用来记录该节点存储的程序段的段号。“Content[LineLength]”是一个字符数组,用来存储该节点对应程序段的全部字符串;“LineLength”表示一个程序段可容纳的最多字符数。“Next”变量是指针变量,它指向下一个节点。
2.3 对于下过程的处理方法
译码模块在完成对当前数控加工程序的读取,并将一个完整的数控加工程序存入队列链表“LineContent”之后,队列链表的数据结构“Line
原创力文档


文档评论(0)