当前位置: 首页 > news >正文

子程序调用与宏定义的异同_新代系统:宏编程的基本概念和基本书写格式

用一组指令构成某功能,并且象子程序一样存储在存储器中,再把这些存储的功能由一个指令来代表,执行时只需写出这个代表指令,就可以执行其相应的功能。

344b50b8d8e2aa14be20b6f09768806f.png

在这里,所存储的一组指令叫做宏程序体(或用户宏程序),简称为用户宏。其代表指令称为用户宏命令,也称作宏程序调用指令。

使用时,编程人员只需会使用用户宏指令即可,而不必去关心宏程序体中的指令内容。

例如,在下述程序流程中,可以这样使用用户宏:

主程序

用户宏

……

O9011

G65 P9011 A10 I5;

……

……

X#1Y#4;

在这个程序的主程序中,用 G65 P9011调用用户宏程序 O9011,并且对用户宏中的变量赋值:#1=10、#4=5(A代表#1、I代表#4)。而在用户宏中未知量用变量#1及#4来代表。

用户宏有以下四个主要特征:

1)在用户用户宏程序中可以使用变量,即宏程序体中能含有复杂的表达式;

2)能够进行变量之间的各种运算;

3)可以用用户宏指令对变量进行赋值,就象许多高级语言中的带参函数或过程,实参能赋值给形参;

4463be125e60f36940fe88a153ec319a.png

4)容易实现程序流程的控制。

使用用户宏时的主要方便之处在于由于可以用变量代替具体数值,因而在加工同一类的工件时.只得将实际的值赋予变量既可,而不需要对每个不同的零件都编一个程序。

下面再以一个示意性的例子来说明用户宏的概念。

当图 1-1中 A、B、U、V的尺寸分别为 A=20、B=10、U=40、V=20时,

其程序为:

O1;

G9l G00 X20.0 Y10.0;

G01 Y10.0;

X40.0;

Y-20.0;

X-40.0;

G00 X-20.0 Y-10.0;;

但是当图中 A、B、U、V尺寸变化时则又需要编一个类似的程序。

实际上,我们可以将程序写为:

O1;

G91 G00 XA YB;

G01Y V;

XU;

Y-V;

X-U;

G00 X-A Y-B;

此时可以将其中变量,用用户宏中的变量#i代替,而字母与#i的对应关

系为:

A——#1

B—— #2

U—— #21

V—— #22

则用户宏程序即可写成如下形式

09801;

G9l G00 X#l Y#2;

G01 Y#22;

X#21

Y-#22;

X-#21;

G00 X-#1 Y-#2;

M99;

8cb990a32a6cfdcb6715ade112c74faf.png

使用时就可以用下述用户宏指令来调用:

G65 P9801 A20.0 B10.0 U40.0 V20.0;

由于地址码 A、B、U、V分别与变量#1、#2、#21、#22有着一定的对应关系,执行以上用户宏调用程序段时,实际数值就会将被赋予给对应的变量,其对应结果为#1=20.0,#2=10.0,#21=40.0,#22=20.0;然后被调用的用户宏程序再按所得到的变量值在宏程序中进行运算或执行指令,结束后返回主程序。

e5805e5ee0ee8b7ccf650fcf1796fe0e.png

实际使用时,一般还需要在这一指令前再加上 F、S、T指令及进行坐标系设定等。

如上述所示,当加工同一类,但只是尺寸不同的工件时,只需改变用户宏命令的数值即可,而没有必要针对每一个零件都编一个程序。

相关文章:

  • python小结和体会_Python学习心得总结
  • jar包对比工具_如何下载Commons下的IO组件以及工具类的使用
  • recyclerview放不同的布局_一页PPT,7种不同的修改方法!非常好用!
  • python二维数组变成三维数组_Python reshape的用法及多个二维数组合并为三维数组的实例...
  • dockerhub删除镜像_Docker镜像获取(gcr.io等)
  • excel量化交易模板_使用EXCEL计算并绘制ATR指标
  • js json转string_我从Vue源码中学到的一些JS编程技巧
  • 应用程序拒绝访问_照片视频不要乱拍,超过1000个APP,拒绝权限后也能收集数据...
  • 为什么启动不起来文件和打印机共享(回显请求-icmpv4)_看了不后悔,不看悔一生的“进大厂强推的Java面试知识点”,你一定错过了...
  • python小工具脚本_python小工具
  • jieba分词_北大pkuseg分词 和 jieba 分词对比测试,结果出乎意料...
  • python开发的k线系统_【开源一个用于回测的Python交互K线工具】之【一】K线核心功能...
  • json文件格式_大数据文件格式
  • jsp用户登录验证_微信小程序-打开第三方网页实现统一身份认证登录
  • python3 json解析_Python3基础 json.loads 解析json格式的数据,得到一个字典
  • 4. 路由到控制器 - Laravel从零开始教程
  • Android Studio:GIT提交项目到远程仓库
  • FastReport在线报表设计器工作原理
  • git 常用命令
  • IDEA常用插件整理
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript 基础知识 - 入门篇(一)
  • js正则,这点儿就够用了
  • leetcode386. Lexicographical Numbers
  • Node + FFmpeg 实现Canvas动画导出视频
  • 工作手记之html2canvas使用概述
  • 全栈开发——Linux
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • MyCAT水平分库
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #pragma once
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (33)STM32——485实验笔记
  • (二)springcloud实战之config配置中心
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • *Django中的Ajax 纯js的书写样式1
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .Net Core和.Net Standard直观理解
  • .NET开源快速、强大、免费的电子表格组件
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @DataRedisTest测试redis从未如此丝滑
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ Linux ] Linux信号概述 信号的产生
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [Android]如何调试Native memory crash issue