子程序的调用
- 格式:ppt
- 大小:146.00 KB
- 文档页数:46
子程序存储在存储器中,可供一个或多个调用程序(主程序)反复调用。
主程序调用子程序时使用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指令执行的操作可以看出,第一步是把子程序返回调用程序的地址保存在堆栈中。
零起步轻松学欧姆龙PLC技术
304
电工技术系列
图8-16 两种程序结构
8.4.2 子程序指令及使用
1.子程序调用(SBS)、子程序进入(SBN)和子程序返回(RET)指令 (1)指令说明
指令说明如下:
指令名称、格式与符号功能说明操作数N
子程序调用
SBS N
调用编号为N的子程序。
在子程序中再调用其他的子程序称为嵌套,子程序调
用指令的嵌套最多为16层
0~255
(十进制)
子程序进入
SBN N
开始编号为N的子程序
0~255
(十进制)
子程序返回
RET 子程序结束,并返回调用指令的下一条指令无操作数
(2)使用举例
子程序调用(SBS)、子程序进入(SBN)和子程序返回(RET)指令使用如图8-17所示。
不带嵌套的子程序调用如图8-17(a)所示,该程序分作常规程序区域和子程序区域,在常规程序区域中有A、B、C三段程序和两个子程序调用指令,在子程序区域有编号分别为1、2的两个子程序,每个子程序都以SBN指令开始,以RET指令结束。
在程序运行时,当执行完A段程序时,如果0.00常开触点处于断开,“SBS 1”指令不执行,会执行B段程序,B段程序执行完后,如果0.01常开触点处于断开,则执行C段程序,C段程序执行完后,跳过子程序区。
子程序的调用原理
子程序是一个独立的代码块,可以被其他程序调用。
在程序中调用子程序可以提高代码的可读性和可维护性。
子程序的调用原理通常是通过栈来实现的。
当程序调用子程序时,会将当前程序执行的位置(即返回地址)压入栈中,并将程序控制转移到子程序的第一行代码。
子程序执行完毕后,会将返回地址从栈中弹出,并跳转到该地址继续执行原来的程序。
在子程序的执行过程中,可能会使用到一些参数。
这些参数可以通过栈或者寄存器来传递。
在调用子程序时,将参数压入栈中,子程序在执行时从栈中弹出参数并使用。
总之,子程序的调用原理是通过栈来实现的,包括将返回地址和参数压入栈中,以及在子程序执行完毕后从栈中弹出返回地址并跳转到该地址继续执行程序。
加工中心是一种高精度、高效率的数控机床,其主要作用是对工件进行加工。
在加工中心的操作过程中,通常会涉及到多个子程序的调用。
如何合理地调用多个子程序,可以有效提高加工效率,保证加工质量,本文将从以下几个方面介绍加工中心主程序调用多个子程序的方法:一、了解加工中心主程序的结构加工中心主程序通常采用G代码和M代码进行编程。
G代码用于控制加工中心的运动轨迹和加工轨迹,M代码用于控制加工中心的辅助功能,如刀具切换、冷却液开关等。
在编写加工中心主程序时,需要充分了解加工中心的结构和工作原理,明确每个子程序的功能和调用顺序。
二、合理规划加工过程中的子程序在加工中心的加工过程中,通常会涉及到多个子程序,如加工轨迹生成、刀具切换、冷却液控制等。
在编写加工中心主程序时,需要对加工过程进行合理规划,明确每个子程序的功能和调用顺序,确保加工过程顺利进行。
三、采用模块化编程思想在编写加工中心主程序时,可以采用模块化编程思想,将不同功能的子程序分解成多个模块,每个模块负责完成相应的功能。
通过模块化编程,可以有效提高代码的复用性和可维护性,简化主程序的编写和调试过程。
四、合理使用宏指令和循环结构在加工中心主程序中,可以合理使用宏指令和循环结构,简化代码的编写和提高代码的可读性。
宏指令可以将一系列操作封装成一个整体,通过简单的调用即可完成复杂的操作;循环结构可以简化重复操作的编写,提高代码的复用性和可维护性。
五、加强调试和测试工作在编写加工中心主程序时,需要加强调试和测试工作,确保主程序和子程序之间的调用顺利进行。
可以通过模拟加工、单步调试等方式对主程序和子程序进行验证,及时发现和解决问题,保证加工过程的顺利进行。
通过以上几点方法的合理运用,可以有效提高加工中心主程序调用多个子程序的效率和质量,确保加工过程的顺利进行。
希望本文对加工中心主程序调用多个子程序的方法有所帮助。
一、优化主程序结构加工中心的主程序结构通常需要按照加工过程的逻辑顺序来组织。
调用西门子plc的子例行程序(CALL)指令将控制转换给子例行程序(SBR_n)。
您可以使用带参数或不带参数的“调用子例行程序”指令。
在子例行程序完成执行后,控制返回至“调用子例行程序”之后的指令。
每个子例行程序调用的输入/输出参数最大限制为16。
如果您尝试下载的西门子plc程序超过此一限制,会返回一则错误讯息。
如果您为子例行程序指定一个符号名,例如USR_NAME,该符号名会出现在指令树的“子例行程序”文件夹中。
1. 参数值指定给局部内存的顺序由CALL 指定,参数从L.0开始。
2.一至八个连续位参数值被指定给从Lx.0开始持续至Lx.7的单字节。
3.字节、字和双字数值被指定给局部内存,位于字节边界(LBx、LWx或LDx)位置。
在带参数的“调用子例行程序”指令中,表中定义的变量完全匹配。
参数顺序必须以输入参数开始,其次是输入/输出参数,然后是输出参数。
为带安数 =0调用设置ENO的错误条件: 0008 超出最大子例行程序嵌套。
注释:位于指令树中的子例行程序名称的工具提示显示每个参数的名称。
艾驰商城是国内最专业的MRO工业品网购平台,正品现货、优势价格、迅捷配送,是一站式采购的工业品商城!具有10年工业用品电子商务领域研究,以强大的信息通道建设的优势,以及依托线下贸易交易市场在工业用品行业上游供应链的整合能力,为广大的用户提供了传感器、图尔克传感器、变频器、断路器、继电器、PLC、工控机、仪器仪表、气缸、五金工具、伺服电机、劳保用品等一系列自动化的工控产品。
如需进一步了解相关PLC产品的选型,报价,采购,参数,图片,批发等信息,请关注艾驰商城。
/。
新代m98调用子程序实例说明新代M98调用子程序实例说明在新代M98中,调用子程序是一种常见和重要的操作。
子程序是一段独立的代码,可在主程序中多次调用,提高了代码的复用性和可维护性。
下面我们将通过一个实例来说明如何在新代M98中进行子程序的调用。
假设我们有一个主程序,需要进行一个复杂的计算操作,并且该计算操作需要在不同的地方多次使用。
为了简化代码和提高效率,我们可以将该复杂计算操作封装在一个子程序中,并在需要的地方调用该子程序。
首先,我们需要定义一个子程序,并给它一个名称,例如"calculation"。
在定义子程序时,我们可以指定输入参数和返回值。
输入参数是在调用子程序时传递给子程序的数据,而返回值则是子程序执行完后返回给调用程序的结果。
接下来,我们可以在需要调用子程序的地方使用"CALL"命令来调用子程序。
例如,我们可以在主程序中的某个位置写下"CALL calculation",这样程序就会跳转到子程序的开始处执行子程序中的代码。
当程序跳转到子程序后,子程序会执行一系列的计算操作,并根据需要使用输入参数来进行计算。
子程序可以使用新代M98提供的各种指令和功能,如数学运算、逻辑运算、读取输入端口等。
在子程序执行完毕后,程序会回到调用子程序的地方,同时返回一个结果给调用程序。
该结果可以是一个数值、一个状态、或者是任何我们在定义子程序时指定的返回值。
需要注意的是,调用子程序时会暂时停止主程序的执行,并将控制权交给子程序。
因此,在设计程序时,我们需要合理安排子程序的调用位置,以及在子程序中进行必要的数据传递和操作。
总之,通过新代M98调用子程序可以有效地提高程序的模块化和可重用性。
通过将复杂的计算操作封装在子程序中,并在需要的地方调用该子程序,我们可以简化代码、提高效率,并优化程序的开发和维护过程。
如有任何疑问,请随时向我提问。