第十一节 子程序的调用

合集下载

浅谈西门子编程语言《子程序的调用》

浅谈西门子编程语言《子程序的调用》

浅谈西门子编程语言《子程序的调用》作者:李强来源:《科技创新导报》2019年第04期摘 ; 要:针对机电专业的学生学习西门子功能编程语言比较困难,功能编程语言经常用到子程序,从子程序的特点,运行方式,举例应用完整技术介绍了子功能编程,写程序时经常用到子程序,它是架构式的编程,学习西门子功能指令的重点和难点。

本文研究分析了西门子编程语言《子程序的调用》,希望为广大读者提供参考。

关键词:程序特点 ;运行方式 ;梯形图中图分类号:TP39 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 文献标识码:A ; ; ; ; ; ; ; ; ; ; ; ;文章编号:1674-098X(2019)02(a)-0148-021 ;子程序的特点(1)子程序只有在主程序发出调用指令的时候才运行,运行完毕后,自动返回主程序,所以不用每个扫描周期都执行,这样可以减少整个程序的运行时间,对于一些初始化的程序,写在子程里比较合适。

(2)S7-200 CPU可以写64个子程序(0-63) CPU226XM还可以写128个子程序(0-127)。

(3)子程序可以嵌套使用(主程序中调用子程序,子程序再调用子程序),最大嵌套深度为8级,但是中断程序里不能嵌套子程序。

(4)子程序默认的名称是SBR_n。

(n子程序编号)也可以修改。

2 ;子程序的运行方式(1)并列运行,一个程序中有多个子程序,之间没有嵌套的关系,是并列的,只要调用的条件满足,这个子程序就能被运行。

(2)嵌套运行,主程序调用子程序,子程序还可以再调用子程序,这种方式叫做嵌套,最多可以嵌套8层,这种情况下,各个子程序的运行有先后之分。

(3)在子程序中不能使用END(结束指令),每一个每一个子程序在编译时编译器自动在子程序的最后加入无条件返回指令,当用户需要编程实现有条件返回时,可以在子程序使用有条件返回RET指令。

(4)带参数调用子程序。

在调用子程序时可以带参数调用。

子程序调用—自己总结

子程序调用—自己总结

第一种方法:在Job模块里,创建工作,在Edit Job对话框中选择General选项卡,在User subroutine file中点击Select按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for或.f)。

第二种方法:1. 建立工作目录2. 将Abaqus安装目录\6.4-pr11\site下的aba_param_dp.inc 或aba_param_sp.inc拷贝到工作目录,并改名为aba_param.inc;3. 将编译的fortran程序拷贝到工作目录;4.将.obj文件拷贝到工作目录;5. 建立好输入文件.inp;6. 运行abaqus job=inp_name user=fortran name即可。

以下是网上摘录的资料,供参考:用户进行二次开发时,要在命令行窗口执行下面的命令:abaqus job=job_name user=sub_nameABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库standardU.lib和动态库standardU.dll,还有其它一些临时文件,而它的主程序(如standard.exe和explicit.exe等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。

这种运行机制与ANSYS、LS-DYNA、marc等都不同。

这些生成的临时文件要到文件夹C:\Documents and Settings\Administrator\Local Settings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。

1子程序格式(程序后缀是.f; .f90; .for;.obj??)答:我试过,.for格是应该是不可以的,至少6.2和6.3版本应该是不行,其他的没用过,没有发言权。

在Abaqus中,运行abaqus j=jobname user=username时,默认的用户子程序后缀名是.for (.f,.f90应该都不行的,手册上也有讲过),只有在username.for文件没有找到的情况下,才会去搜索username.obj,如果两者都没有,就会报错误信息。

子程序调用指令【精选】

子程序调用指令【精选】

子程序存储在存储器中,可供一个或多个调用程序(主程序)反复调用。

主程序调用子程序时使用CALL指令,由子程序返回主程序时使用RET指令。

由于调用程序和子程序可以在同一个代码段中,也可以在不同的代码段中,因此,CALL指令和RET指令也有近调用、近返回及远调用、远返回两类格式。

 ⑴ CALL NEAR PTR <子程序名> 近调用(near call) 近调用是CALL指令的缺省格式,可以写为"CALL <子程序名>rotine"。

它调用同一个代码段内的子程序(子过程),因此,在调用过程中不用改变CS的值,只需将子程序的地址存入IP寄存器。

CALL指令中的调用地址可以用直接和间接两种寻址方式表示。

 ⑵ CALL FAR PTR <子程序名> 远调用(far call) 远调用适用于调用程序(也称为主程序)和子程序不在同一段中的情况,所以也叫做段间调用。

和近调用指令一样,远调用指令中的寻址方式也可用直接方式和间接方式。

 ⑶ RET 返回指令(return) RET指令执行的操作是把保存在堆栈中的返回地址出栈,以完成从子程序返回到调用程序的功能。

● CALL <子程序名> 段内直接调用 执行操作:① (SP) ← (SP)-2,((SP)) ← (IP)当前 ② (IP) ← (IP)当前+16位位移量(在指令的第2、3个字节中) ● CALL DESTIN 段内间接调用 执行操作:① (SP) ← (SP)-2,((SP)) ← (IP)当前 ② (IP) ← (EA) ; (EA)为指令寻址方式所确定的有效地址 ● CALL FAR PTR <子程序名> 段间直接调用 执行操作:① (SP) ← (SP)-2,((SP)) ← (CS)当前 (SP) ← (SP)-2,((SP)) ← (IP)当前 ② (IP) ←偏移地址(在指令的第2、3个字节中) (CS) ←段地址(在指令的第4、5个字节中) ● CALL WORD PTR DESTIN 段间间接调用 执行操作:① (SP) ← (SP)-2,((SP)) ← (CS)当前 (SP) ← (SP)-2,((SP)) ← (IP)当前 ② (IP) ← (EA) ; (EA)为指令寻址方式所确定的有效地址 (CS) ← (EA+2) 从CALL指令执行的操作可以看出,第一步是把子程序返回调用程序的地址保存在堆栈中。

子程序的调用编程与加工

子程序的调用编程与加工
极坐标系原点时,用绝对值编程方式来指定,如程序段“G90 G17 G16;“ • ②以刀具当前点作为极坐标系原点。当以刀具当前位置作为极坐标 系原点时,用增量值编程方式来指定,如程序段“G91 G17 G16;"
上一页 下一页 返回
任务11旋转类零件的编程与加工
• 极坐标半径值是指程序段终点坐标到刀具当前位置的距离,角度值是 指前一坐标系原点与当前极坐标系原点的连线与当前轨迹的夹角。
任务10子程序的调用编程与加工
• 2)测头 • 测头系统是三坐标测量机的关键部件之一,用以检测工件表面位置,
包括测头和测杆。测头顶端的测球通常为红宝石,为确保测头的使用 能够达到最大的测量精度,要求测杆尽量要短而且坚固,测球要尽量 大。
• 3)电气系统 • ①电气控制系统。 • ②计算机硬件部分。 • ③测量机软件。对测量结果进行数据处理。 • ④打印与绘图装置。 • 4.三坐标侧量机的应用 • 在三坐标测量机上测量零件的基本步骤如下。
上一页 下一页 返回
任务11旋转类零件的编程与加工
• ③对加工效率、刀具寿命等方面进行评估,找出加工效率与刀具寿 命的内在规律,为进一步优化刀具切削参数夯实基础。
• ④评估整个加工过程是否有需要改进的工艺方法和操作。 • ⑤评估团队成员在工作过程中表现的知识技能、安全文明、协作能
力、语言表达能力等。 • ⑥形成文书材料的评估报告。 • 知识拓展 • 极坐标编程 • 1.极坐标指令 • G16:极坐标系生效指令。
上一页 下一页 返回
任务11旋转类零件的编程与加工
• ⑦加工结束,清理机床。 • 三、检查与评价 • 1.评分表 • 检验者验收零件,加工者与检验者共同评价本次加工任务的完成情
况,评分表见表5. 4 • 2.评估优化 • ①对工件尺寸精度进行评估,找出尺寸超差是由于工艺系统因素还

子程序的调用和返回指令

子程序的调用和返回指令

1、子程序的调用和返回指令子程序的调用和返回是一对互逆操作,也是一种特殊的转移操作。

一方面,之所以说是转移,是因为当调用一个子程序时,程序的执行顺序被改变,CPU将转而执行子程序中的指令序列,在这方面,调用子程序的操作含有转移指令的功能,子程序的返回指令的转移特性与此类似;另一方面,转移指令是一种“一去不复返”的操作,而当子程序完后,还要求CPU能转而执行调用指令之下的指令,它是一种“有去有回”的操作。

为了满足子程序调用和返回操作的特殊性,在指令系统中设置了相应的特定指令。

1、1调用指令(CALL)调用子程序指令的格式如下:CALL 子程序名/Reg/Mem子程序的调用指令分为近(near)调用和远(far)调用。

如果被调用子程序的属性是近的,那么,CALL指令将产生一个近调用,它把该指令之后地址的偏移量(用一个字来表示的)压栈,把被调用子程序入口地址的偏移量送给指令指针寄存器IP即可实现执行程序的转移如果被调用子程序的属性是远的,那么,CALL指令将产生一个远调用。

这时,调用指令不仅要把该指令之后地址的偏移量压进栈,而且也要把段寄存器CS的值压进栈。

在此之后,再把被调用子程序入口地址的偏移量和段值分别送给IP和CS,这样完成了子程序的远调用操作00405600 call 0040689500405604 ......子程序调用指令本身的执行不影响任何标志位,但子程序体中指令的执行会改变标志位,所以,如果希望子程序的执行不能改变调用指令前后的标志位,那么,就要在子程序的开始处保护标志位,在子程序的返回前恢复标志位。

例如:CALL DISPLAY;DISPLAY是子程序名CALL BX;BX的内容是子程序的偏移量CALL WORD1;WORD1是内存字变量,其值是子程序的偏移量CALL DWORD1;DWORD1是双字变量,其值是子程序的偏移量和段值CALL word ptr [BX];BX所指内存字单元的值是子程序的偏移量CALL dword ptr [BX];BX所指内存双字单元的值是子程序的偏移量和段值1、2返回指令(RET)当子程序执行完时,需要返回到调用它的程序之中。

子程序的调用

子程序的调用

mov ax,data mov ds,ax call nearp lea ax,nearp call ax call nproc lea bx,nproc call word ptr [bx]
call farp call fproc lea bx,fproc
Nearp proc near
…… ret Nearp endp Code1 ends end main code2 segment
3)在调用时,NEAR 和FAR 可以强制改变 CALL FAR PTR NEARPROC CALL NEAR PTR FARPROC
子过程的调用与返回指令
子过程的调用是个”有去有回”的过程,子程序执行
完后必须返回CALL指令的下一条指令处,因此必须对
CALL指令的下条指令的地址进行保存.保存地址的操作 是通过堆栈来完成.不是采用PUSH \POP指令来实现,而
通过存储器来传递参数
当调用程序和子程序处于同一文件中,可以直接访问 块内的变量或数据。 举例3:编写程序从键盘上输入一个字符串,存于变量为INPUT中, 要求以回车键作为输入过程的结束,字符结尾部分添加0。 (1) 分析: 子程序getstring直接从键盘输入字符串,入口参数:无。出 口参数:字符串变量INPUT 变量INPUT 属于通过存储器传递参数,调用程序和子程序处 于同一文件在数据段定义变量属于局部变量
Findmax proc
mov ax,[si] Lp1: cmp ax,[si+2] jg next xchg ax,[si+2] next: add si,2 loop lp1 ret findmax endp Code ends
end main
参数的传递

(完整word版)子程序的调用

(完整word版)子程序的调用
重复循环执行 (2)如果在主程序中执行到 M99 PXX,跳转到主程序中P指
定的顺序号的程序段执行。 3、仅在子程序中使用 M99: (1)如果直接执行子程序,当执行到 M99 的程序段时,控制返回
到 子程序的开始段重复循环执行 (2)如果在子程序中执行到 M99 PXX,跳转到子程序中P指
定的顺序号的程序段执行。
4、尺寸计算: A 点:X30、Z96 B 点:X31、Z65 C 点:X31、Z40 D 点:X31、Z20 E 点:X31、Z5
5、设计加工程序并编程 O1234: N10 MO3 S700 T0101;(启动主轴,确定刀具)
N20 GOO X30 Z71;(车Φ30 外圆定位) N30 G01 X30 Z-5 F0。2;(精车Φ30 外圆) N40 G00 X100 Z100;(退刀至换刀点) N50 T0202 S350;(换切刀降速) N60 G00 X31 Z65;(切刀定位至 B 点) N70 M98 P0001;(调用子程序) N80 GOO X31 Z40;(切等二槽定位 C 点) N90 M98 P0001;(调用子程序) N100 GOO X31 Z20;(切等三槽定位 D 点) N110 M98 P0001;(调用子程序) N120 G00 X31 Z5;(切等四槽定位 E 点) N130 M98 P0001;(调用子程序) N140 G00 X35 ;(横向退切刀) N150 G00 X100 Z100;(纵向退切刀) N180 M30;(程序结束)
(完整 word 版)子程序的调用
1、返回主程序的指定程序段 如果用 M99 P 指定一个顺序号,当子程序结束时子程序不是
返回到调用该子程序的那个程序段的下一个程序段,而是返回到 由 P 指定顺序号的那个程序段。如:M 99 P15 ; 2、在主程序中的使用 M99 ; (1)如果在主程序中执行到 M99 ,控制返回到主程序的开始段,

第十一节 子程序的调用

第十一节 子程序的调用

主程序与子程序间的参数传递 主程序与子程序相互传递的信息称为参数。 主程序与子程序相互传递的信息称为参数。主程序提供给 子程序以便加工处理的信息称为入口参数, 子程序以便加工处理的信息称为入口参数,经子程序加工 处理后回送给主程序的信息称为出口参数。 处理后回送给主程序的信息称为出口参数。在调用子程序 主程序应事先把入口参数放到某些约定的位置。 时,主程序应事先把入口参数放到某些约定的位置。子程 序在运行时,可以从约定的位置得到有关的参数。同样, 序在运行时,可以从约定的位置得到有关的参数。同样, 子程序在运行结束前,也应把出口参数送到约定位置。 子程序在运行结束前,也应把出口参数送到约定位置。在 返回主程序后,主程序可以从这些地方得到需要的结果。 返回主程序后,主程序可以从这些地方得到需要的结果。
第十节 子程序的调用
子程序的概念
• 子程序是一种重要的程序结构。 在实用中, 子程序是一种重要的程序结构 。 在实用中 , 常会遇到需要反复多次执行同一程序段的情 为了减少重复编写的工作量, 形 。 为了减少重复编写的工作量 , 并减少程 序存储空间, 常常把功能完整、 序存储空间 , 常常把功能完整 、 意义明确并 次使用的程序段从原来的程序( 被多次使用的程序段从原来的程序(称为主程 中分离出来独立编写,就成为子程序, 序)中分离出来独立编写,就成为子程序,从 而主程序可根据需要多次调用子程序。 而主程序可根据需要多次调用子程序。
子程序调用与堆栈的关系
• 为了能够成功地调用子程序,主程序应能在需要时通过调用指 为了能够成功地调用子程序, 令自动转入子程序, 令自动转入子程序,子程序完成后应能够通过末尾的返回指令 自动返回调用指令下一条指令地址(称为断点地址 处继续执行。 称为断点地址)处继续执行 自动返回调用指令下一条指令地址 称为断点地址 处继续执行。 • 因此,调用指令不仅要将子程序入口地址送到程序计数器 , 因此,调用指令不仅要将子程序入口地址送到程序计数器PC, 还要将断点地址存入堆栈保护起来。 以便实现程序转移,还要将断点地址存入堆栈保护起来。返回 指令则要将断点地址从堆栈中取出送给PC, 指令则要将断点地址从堆栈中取出送给 ,以便返回断点处继 续执行主程序。 续执行主程序。

数铣子程序调用

数铣子程序调用
… M99;
课题五
O1;(主程序) G91…; G41…; M98 P2; G40…; M30;
子程序的调用
O2;(子程序) …; M99;
(2)在半径补偿模式中的程序不能被分支
在以上程序中,刀具半径补偿模式在主程序及子程序中被分 支执行,在编程过程中应尽量避免编写这种形式的程序。在有些 系统中如出现此种刀具半径补偿被分支执行的程序,在程序执行 过程中还可能出现系统报警。正确的书写格式如下: O1;(主程序) O2;(子程序) G91…; G41…; …; …; M98 P2; G40…; M30; M99;
课题五
子程序的调用
教学重点(对应于知识目标) 教学重点 1、指令的格式
2、指令的调用过程 子程序嵌套 3、指令的应用 教学难点(对应于技能目标) 教学难点 –对指令的理解以及后续的应用。
课题五
子程序的调用
任务要求:加工如下左图所示零件,毛坯为50mm×48mm×10mm的45钢, 内孔已加工完成,现以内孔定位装夹来加工外轮廓,在数控铣床上进行4件或 多件加工,零件在夹具中的装夹如下右图所示,试编写其数控铣加工程序。
课题五
2.子程序的嵌套
子程序的调用
为了进一步简化程序,可以让子程序调用另一个子程序, 这一功能称为子程序的嵌套。 当主程序调用子程序时,该子程序被认为是一级子程序, 系统不同,其子程序的嵌套级数也不相同。一般情况下,在 FANUC 0系统中,子程序可以嵌套4级,如下图所示。
子程序嵌套
课题五
3.子程序的格式
课题五
二、编写加工程序
1.设计加工路线
子程序的调用
编写本例周边轮廓的加工程序时,应注意切入方式的合理选 择,此处选择轮廓左侧直线的延长线切入。另外还应注意刀具轨 迹的合理规划,防止刀具移动过程中与其他轮廓发生干涉。

数控编程中子程序的定义和调用方法

数控编程中子程序的定义和调用方法

数控编程中子程序的定义和调用方法
1.子程序的定义
在编制加工程序中,有时会遇到一组程序段在-个程序中多次出现,或者在几个程序中都要使用它。

这个典型的加工程序可以做成固定程序,并单独加以命名,这组程序段就称为子程序。

2.使用子程序的目的和作用
使用子程序可以减少不必要的编程重复,从而达到减化编程的目的。

主程序可以调用子程序,一个子程序也可以调用下一级的子程序。

子程序必须在主程序结束指令后建立,其作用相当于一个固定循环。

3.子程序的调用
在主程序中,调用子程序的指令是一个程序段,其格式随具体的数控系统而定,FANUC-6T 系统子程序调用格式为
M98 P--L--
式中M98--子程序调用字;
p--子程序号;
L--子程序重复调用次数。

由此可见,子程序由程序调用字、子程序号和调用次数组成。

4.子程序的返回
子程序返回主程序用指令M99,它表示子程序运行结束,请返回到主程序。

5.子程序的嵌套
子程序调用下一级子程序称为嵌套。

上一级子程序与下一级于程序的关系,与主程序与第一层子程序的关系相同。

子程序可以嵌套多少层由具体的数控系统决定,在FANUC-6T系统中,只能有两次嵌套。

子程序的调用和返回指令

子程序的调用和返回指令

子程序的调用和返回指令
子程序是指在一个程序中定义的可以被其他程序调用的一段代码。

通过使用子程序,
程序员可以将重复的代码封装起来,减少代码的复制粘贴,提高代码的复用率和可维护性。

在编程语言中,子程序也被称为函数、过程或方法。

子程序的调用指令和返回指令是用于在程序中调用和退出子程序的指令。

在大多数编
程语言中,这些指令可以通过程序的控制流语句实现,在汇编语言中,这些指令是由特定
的汇编语句生成的机器指令。

子程序的调用指令通常包括以下步骤:
1. 保存当前程序计数器(PC)的值,以便返回时恢复执行点。

3. 将栈指针向下移动一定的偏移量,为子程序分配新的栈空间。

4. 将传入子程序的参数压入栈中,以便被子程序使用。

1. 弹出子程序的返回值,如果有的话。

4. 使用跳转指令将程序计数器更新为保存的返回地址,以便返回到调用者的程序
流。

子程序的调用和返回指令是编程中常用的技巧,可以优化程序的结构和代码重用。


高级编程语言中,编译器通常会自动为程序员处理子程序的调用和返回指令。

然而,在底
层编程和系统级编程中,程序员需要手动处理这些指令,以便更好地控制程序的执行流和
资源管理。

中断处理和子程序调用

中断处理和子程序调用

中断处理和子程序调用一、引言中断处理和子程序调用是计算机领域中常用的两种编程技术。

中断处理是指在程序执行过程中,遇到特定事件时,暂停当前任务,转而执行特定的中断处理程序。

而子程序调用是指将一个独立的程序段作为子程序,在需要的时候进行调用,执行完毕后返回到原程序继续执行。

本文将深入探讨中断处理和子程序调用的原理、应用场景及其优缺点。

二、中断处理中断处理是计算机系统中的一种重要机制,用于处理外部事件的发生。

当特定事件发生时,中断会打断当前程序的执行,转而执行中断处理程序。

中断可以分为硬件中断和软件中断两种类型。

2.1 硬件中断硬件中断是由硬件设备触发的中断,例如外部设备的输入输出、定时器的溢出等。

硬件中断需要通过硬件电路来实现,当硬件设备触发中断时,会向CPU发送中断请求信号,CPU则根据中断向量表找到对应的中断处理程序并执行。

2.2 软件中断软件中断是由软件指令触发的中断,也称为软中断或系统调用。

软件中断通常由程序员在程序中主动设置的中断指令触发,用于处理一些特定的操作,如操作系统的系统调用。

软件中断的触发和处理过程由CPU完成,通过改变程序计数器的值,使CPU跳转到中断处理程序的入口地址执行。

2.3 中断处理过程中断处理过程主要包括中断请求、中断响应和中断处理三个阶段。

1.中断请求:当硬件设备或软件触发中断时,会向CPU发送中断请求信号,请求CPU执行中断处理程序。

2.中断响应:CPU在接收到中断请求后,会根据中断类型和中断向量表找到对应的中断处理程序的入口地址,并将当前程序的状态保存起来,以便中断处理完成后能够恢复执行。

3.中断处理:CPU跳转到中断处理程序的入口地址开始执行中断处理代码。

中断处理程序会根据具体的中断类型进行相应的处理,处理完毕后会恢复之前保存的程序状态,并返回到原程序继续执行。

三、子程序调用子程序调用是一种将一个独立的程序段作为子程序,在需要的时候进行调用的编程技术。

子程序通常用于完成某个独立的功能,可以在不同的地方多次调用,提高代码的复用性和可维护性。

子程序的调用

子程序的调用

主程序流程图
开始
调用子程序DECBIN,从键盘 接受一个十进制并转化为对应的二进制 调用子程序CRLF实现回车换行 调用子程序BINHEX,把二进制数转换成 16进制并显示 调用子程序CRLF实现回车换行 Y 是否退出 N 接收下一次键盘输入 END
decbin PROC NEAR push ax push cx mov bx,0 mov si,0 Newchar: mov ah,1 int 21h cmp al,’*’ je ext1 sub al,30h jl ext2 cmp al,9 jg ext2 cbw xchg ax,bx mov cx,10 mul cx xchg ax,bx add ax,bx jmp newchar
子程序的定义
3.注意问题
1)过程体内必须有一条RET指令被执行 proc1 proc mov ax,0 proc1 endp proc2 proc mov bx,-1 ret proc endp
子程序的定义
2)调用程序和过程在同一程序段时,属性选择NEAR,当调 用程序和过程不在同一程序段时,应选择FAR 3)在调用时,NEAR 和FAR 可以强制改变 CALL FAR PTR NEARPROC CALL NEAR PTR FARPROC
参数的传递
1 参数传递: 当子程序被调用时,一般需要向子程序传递若干参数, 由子程序来对这些参数完成特定功能处理;当子程序 处理后,需要向调用它的主程序传递结果。这种主程 序和子程序之间的信息的传递称为参数的传递。
参数的传递
2 参数传递方法: 寄存器传递参数 存储器传递参数 地址表传递变量地址 堆栈传递参数
子过程的调用与返回指令
4.子程序调用方式举例
分析下面程序段,说明各种调用子程序的方法和寻址方式: data segment nproc dw nearp fproc dd farp data ends code1 segment assume cs:code1,cs:data Main proc far

子程序的调用

子程序的调用
O0100;
G91 G01 Z-2.0; … G91 G28 Z0; M99;
子程要单 独书写一行,如上面程序中最后两行写成 “G91 G28 Z0 M99;”也是允许的。 2.子程序的调用 格式 M98 P××××××××; 例3 M98 P50010; 例4 M98 P510;
子程序的调用
子程序的执行过程如下程序所示 主程序:
O0001; N10 …; N20 M98 P0100; N30 …; … … N60 M98 P20200 ; … N100 M30; 子程序: O0100; … M99; O0200; … M99;
江西省轻工高级技校
本次课题结束,谢谢
江西省轻工高级技校
[数控铣及加工中心]
子程序的调用
模具数控教研室:彭帆
选用120X50X10的毛坯,1mm的球头刀,切深为 0.5mm。
子程序的调用
1.子程序的格式 在FANUC系统中,子程序和主程序并无 本质区别。子程序和主程序在程序号及程 序内容方面基本相同,但结束标记不同。 主程序用M02或M30表示主程序结束,而子 程序则用M99表示子程序结束,并实现自 动返回主程序功能。如下子程序格式所示:

数控车床编程与操作--子程序的调用(说课)ppt课件

数控车床编程与操作--子程序的调用(说课)ppt课件

组 合子件程的序数的控调车 削用
说课稿
肯请各位教师批判指正
组 合子件程的序数的控调车 削用
说课稿
外加工件:47个槽 尺寸、要求一样
组 合子件程的序数的控调车 削用 子程序的调用
说课稿
1、调用子程序 M98 P 2 0002 M98 P0002 L2
2、子程序的格式 O XXXX; …… M99 ;
组 合子件程的序数的控调车 削用
说课稿
教学过程
1 实际学习 2 仿真训练 3 机床操作
提出问题
义务描画
义务分析
①子程序格式 ②子程序调用
00001〔主程序〕
M3 S300 T0101;
GO X42 Z0;
G0 Z-8;
O0002;〔子程序〕
MM9988 PP00000022;; G1 U-12 F0.05;
组 合子件程的序数的控调车 削用
教学过程
1 实际学习
仿真1
仿真2
检验程序 演练机床加工效果
2 仿真训练 3 机床操作
说课稿
拓展
组 合子件程的序数的控调车 削用
说课稿
教学过程
1 实际学习
仿真1
仿真2
拓展
改成等距槽工件:编程仿真 练习稳定
2 仿真训练 3 机床操作
组 合子件程的序数的控调车 削用
说课稿
组 合子件程的序数的控调车 削用
说课稿
教学过程
1 实际学习 2 仿真训练 3 机床操作
提出问题
义务描画
用以前的方法编写第一个槽的程序
义务分析
00001〔主程序〕 M3 S300 T0101; GO X42 Z0; G0 Z-8; O0002;〔子程序〕 M98 P0002; G1 U-12 F0.05; G0 Z-23;B G0 U12; M98 P0002; W-2; G0 Z-33;C G1 U-12; M98 P0002; G0 U12; G0 X100 Z100; M99; M30;

子程序 PPT

子程序 PPT

9
举例源程序
(home)
主程序
INTEGER R REAL IFAC 10 WRITE(*,*)’输入正整数R,K(R>K)’ READ(*,*)R,K IF(R .GE.0 .AND. K .GE.0 .AND S . R-K .GE.0 )THEN
C=IFAC(R)/ (IFAC(R-K)* IFAC(K)) ELSE
②当有一个以上的虚参时,它们之间用逗号隔开,如果没有虚参,
则一对括号可以省略不写。
③子例行程序的说明部分,应包括对虚参和子例行程序中所用变
量、数组等的说明。
④子例行程序中RETURN语句END语句的作用同函数子程序。
⑤子例行程序也是一个独立的编译单位,在变量名、语句标号
等的使用方面与函数子程序相同。
①第一条语句不同。
②名字的作用不同。
函数子程序名除了供调用时使用外,还代表着函数值,应作类型说
明,且必须在返回调用单位前在函数体内给函数名赋予函数值。函数值
通过函数名带回调用单位。
子例行程序名只供调用时使用,不代表某个值,不得在程序体内赋值。
2021/8/12
12
11.2 子例行程序
在子例行程序中求得的值通过实参和虚参的联系带回调 用单位。
2.如果实参是变量或数组,在调用子程序时,对应的虚参 实际上将与实参共用一个存储单元。如果实参是常量或表
达式,则子程序中对应的虚参变量的值不应当改变,也就 说在这种情况下虚参不应当在子程序中被赋值。
integer a,c(3)
subroutine sub(x,a)
data c/3*0/
integer x,a
③调用的方式不同。 函数子程序的调用总是出现在表达式中,并将所得的函
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 该程序的功能是什么?子程序的入口参数和出口参数分别存 该程序的功能是什么? 放在哪个寄存器中?子程序最后还有的一条指令是什么? 放在哪个寄存器中?子程序最后还有的一条指令是什么?
思考题
• • • 调用子程序及返回与堆栈无关。 ( )调用子程序及返回与堆栈无关。 ( )一段子程序可以被主程序多次调 用。 主程序调用子程序时是怎样确保返回主 程序调用指令后的断点位置, 程序调用指令后的断点位置,以便在断 点处继续执行主程序? 点处继续执行主程序?
第十节 子程序的调用
子程序的概念
• 子程序是一种重要的程序结构。 在实用中, 子程序是一种重要的程序结构 。 在实用中 , 常会遇到需要反复多次执行同一程序段的情 为了减少重复编写的工作量, 形 。 为了减少重复编写的工作量 , 并减少程 序存储空间, 常常把功能完整、 序存储空间 , 常常把功能完整 、 意义明确并 次使用的程序段从原来的程序( 被多次使用的程序段从原来的程序(称为主程 中分离出来独立编写,就成为子程序, 序)中分离出来独立编写,就成为子程序,从 而主程序可根据需要多次调用子程序。 而主程序可根据需要多次调用子程序。
寄存器或存储器法举例 寄存器或存储器法举例

• • • • • • • • • • • • • • • •
MAIN: MOV R0,#29H : , MOV R2 ,#06H MOV R3,#09H , ACALL JIAFA MOV A,R7 , MOV @R0,A , MOV R2,#25H , MOV R3,#45H , ACALL JIAFA MOV A,R7 , MOV @R0,A , …… JIAFA:MOV A,R2 : , ADD A,R3 , MOV R7,A , INC R0 。
子程序调用与堆栈的关系
• 为了能够成功地调用子程序,主程序应能在需要时通过调用指 为了能够成功地调用子程序, 令自动转入子程序, 令自动转入子程序,子程序完成后应能够通过末尾的返回指令 自动返回调用指令下一条指令地址(称为断点地址 处继续执行。 称为断点地址)处继续执行 自动返回调用指令下一条指令地址 称为断点地址 处继续执行。 • 因此,调用指令不仅要将子程序入口地址送到程序计数器 , 因此,调用指令不仅要将子程序入口地址送到程序计数器PC, 还要将断点地址存入堆栈保护起来。 以便实现程序转移,还要将断点地址存入堆栈保护起来。返回 指令则要将断点地址从堆栈中取出送给PC, 指令则要将断点地址从堆栈中取出送给 ,以便返回断点处继 续执行主程序。 续执行主程序。
主程序与子程序间的参数传递 寄存器或存储器法
• 寄存器或存储器法 就是主程序与子程序间传递 寄存器或存储器法就是主程序与子程序间传递 的参数都在约定的寄存器或存储器中。 的参数都在约定的寄存器或存储器中 。 在调用 子程序前主程序将入口参数送到约定的寄存器 或存储器中, 或存储器中 , 子程序直接从这些寄存器或存储 器中取得这些参数进行运算处理, 器中取得这些参数进行运算处理 , 经加工处理 后得到的结果, 后得到的结果 , 即出口参数也放在约定的寄存 返回主程序后, 器或存储器中 , 返回主程序后 , 主程序就从该 寄存器或存储器中得到结果。 寄存器或存储器中得到结果。
绝对调用指令 • 绝对调用指令:ACALL addr11 绝对调用指令: • 绝对调用指令与绝对转移指令AJMP一样提供的 绝对调用指令与绝对转移指令 一样提供的 是低11位转移目的地址 位转移目的地址, 是低 位转移目的地址,而转移目的地址的高五 位保持不变,与指令首地址加2后的地址的高五 位保持不变,与指令首地址加 后的地址的高五 位是一样的,所以绝对调用指令限在2K地址空 位是一样的,所以绝对调用指令限在 地址空 间内调用。两种指令所不同的是指令ACALL 间内调用。两种指令所不同的是指令 addr11要把主程序调用处的断点地址压入堆栈保 待执行子程序结束处的返回指令, 护起来,待执行子程序结束处的返回指令,把堆 栈里的断点地址推出到PC中 栈里的断点地址推出到 中,这样单片机就可 以根据PC值 回到主程序, 以根据 值,回到主程序,从其断点位置继续 执行程序。 执行程序。
寄存器或存储器法举例 寄存器或存储器法举例
• 例如, 编写一个子程序, 将片内RAM 的一组单元清零, 子程序不包含这组单元 例如,编写一个子程序,将片内RAM的一组单元清零, RAM的一组单元清零 的起始地址和单元的个数: 的起始地址和单元的个数: SUBRT:MOV A, #00H : , LOOP: MOV @R0,A : , INC R0 DJNZ R7, LOOP , RET 主程序调用SUBRT时,就必须向它提供两个入口参数:被清零单元的起始地址 主程序调用 时 就必须向它提供两个入口参数: 和被清零单元的个数。采用寄存器或存储器法调用SUBRT的主程序应该是: 和被清零单元的个数。采用寄存器或存储器法调用 的主程序应该是: 的主程序应该是 MAIN: …… …… : MOV R0,#30H;传递 , ;传递RAM数据区的起始地址 数据区的起始地址 MOV R7,#0AH;传递 , ;传递RAM数据区的长度 数据区的长度 ACALL SUBRT; 调用清零子程序 ; …… …… MOV R0,#50H;传递 , ;传递RAM数据区的起始地址 数据区的起始地址 MOV R7,#10H;传递 , ;传递RAM数据区的长度 数据区的长度 ACALL SUBRT; 调用清零子程序 ; SUBRT:同前 :
长调用指令和返回指令
• 长调用指令: LCALL addr16 长调用指令: • 本指令的机器码为:00010010B addr8~15 addr0~7 本指令的机器码为: • LCALL指令提供 位目标地址,以调用 指令提供16位目标地址 以调用64K字节范围内所指 指令提供 位目标地址, 字节范围内所指 定的子程序。执行本指令,首先(PC)+3→(PC),以获得下一条 定的子程序。执行本指令,首先 , 指令的首地址(此地址为断点地址) 然后把这16位主程序断 指令的首地址(此地址为断点地址) ,然后把这 位主程序断 点地址先后压入堆栈(先压入 先压入PC0~7低位字节,后压入 低位字节, 点地址先后压入堆栈 先压入 低位字节 后压入PC8~15 高位字节)。栈指针SP加 指向栈顶 接着将16位子程序首地址 指向栈顶。 高位字节 。栈指针 加2指向栈顶。接着将 位子程序首地址 addr16送入程序计数器 addr16送入程序计数器PC,从而使程序从主程序断点处转向 送入程序计数器PC, 子程序首地址(addr16)开始执行被调用的子程序 开始执行被调用的子程序。 子程序首地址(addr16)开始执行被调用的子程序。子程序的首 址可设置在64K字节程序存储器地址空间的任何位置。 字节程序存储器地址空间的任何位置。 址可设置在 字节程序存储器地址空间的任何位置 • 返回指令:RET 返回指令: • 本指令的机器码为:22H(00100010B) 本指令的机器码为: ( ) • RET指令是从子程序返回。当程序执行到本指令时,表示结束 指令是从子程序返回。 指令是从子程序返回 当程序执行到本指令时, 子程序的执行,返回调用指令ACALL或LCALL的下一条指令 子程序的执行,返回调用指令 或 的下一条指令 处继续往下执行。因此, 处继续往下执行。因此,它的主要操作是将保护在堆栈内的主 程序断点地址送到PC中 程序断点地址送到 中 。
子序调用举例
例 设(SP)=07H ORG 0123H MAIN: LCALL SUBRTN : ;主程序 长调用指令 ANL A,#55H , …… ORG 5678H SUBRTN:MOV A,#05H : , ;子程序 …… RET ;返回主程序断点
子程序返回举例
• 例 设 (SP)=07H , 符 号 地 址 “ SUBRTN”指向程序存储器的 指向程序存储器的 5678H,(PC)=0123H。从0123H , = 。 处执行指令: 处执行指令: • MAIN:LCALL SUBRTN : • ;主程序长调用指令 • …… • SUBRTN:MOV A,#05H : , • ;子程序 • …… • RET • ;返回主程序断点
主程序与子程序间的参数传递 主程序与子程序相互传递的信息称为参数。 主程序与子程序相互传递的信息称为参数。主程序提供给 子程序以便加工处理的信息称为入口参数, 子程序以便加工处理的信息称为入口参数,经子程序加工 处理后回送给主程序的信息称为出口参数。 处理后回送给主程序的信息称为出口参数。在调用子程序 主程序应事先把入口参数放到某些约定的位置。 时,主程序应事先把入口参数放到某些约定的位置。子程 序在运行时,可以从约定的位置得到有关的参数。同样, 序在运行时,可以从约定的位置得到有关的参数。同样, 子程序在运行结束前,也应把出口参数送到约定位置。 子程序在运行结束前,也应把出口参数送到约定位置。在 返回主程序后,主程序可以从这些地方得到需要的结果。 返回主程序后,主程序可以从这些地方得到需要的结果。
相关文档
最新文档