子程序
子程序的定义及使用

表达式实际上都可表示成一元、二元或多元函数关系,即 F(x1,x2,…,xn),这些函数关系如果没有对应的标准函数,则 需要用户设法定义新的函数来实现它们。
FORTRAN 90提供了语句函数定义功能来定义一些简单的 函数,用于实现有关的函数关系。用户自定义语句函数其使 用方法与标准函数相同,可以作为操作数在表达式中调用。
DB=F(x,y,z,y) DG=F(x,y,z,z) WRITE(*,*) DA,DB,DG
END program
9.3 外部函数子程序
无法用一条语句来定义的函数,可以用一个单独的 程序单位定义,它不属于调用函数语句所在的程序 单位,因此称之为外部函数。
是用户自定义的函数子程序。所在程序的其他程序 单位都可以调用它。
SUBROUTINE add(m,n,s) INTEGER m,n,s s=m+n m=m+1
END SUBROUTINE add
外部子例行程序,简称外部子程序,也称外部过程,是 独立的程序单元。
外部子例行程序可产生多个结果,由参数返回。 外部子例行程序定义一般格式:
<外部子例行程序定义>→
函数引用、外部函数引用以及外部函数名和子程序名等。 如果定义外部函数无形式参数,其引用形式为:F( )。 外部函数执行过程:
若实在参数为表达式,则先对表达式求值。 实在参数与相应的形式参数结合,将实参值传递给对应形参。 经过形实结合,形式参数获得了所需要的值,然后,立即执
行内部函数体。 在 执 行 函 数 体 的 过 程 中 , 若 遇 到 RETURN 语 句 或 END
F(x1,x2,x3)=3.14159*(x1+x2/60.0+x3/3600.0)/180.0 A=F(36.0,43.0,27.0) B=F(15.0,24.0,0.0) C=F(8.0,16.0,54.0) S=COS(A)**2-4*SIN(B)*TAN(C) WRITE (*,*) A,B,C,S
子程序(数铣)

2
10
50
20
30
子程序的构成
O××××;子程序号 …………; …………; …………;子程序内容 …………; M99; 返回主程序
子程序调用指令
M98 P__ __ __ __××××
调用次数
调用的 子程序号
M98 P61001; 调用1001号子程序6次 M98 P1001;
主子程序调用关系
3.2
制图 校核 审图
槽轮
材料
比例
处
其余
技术要求
.未注尺寸公差按 照 -m。 2.允许周边铣一四 方台至98x98mm, 高10mm和铣平顶面, 以方便测量。 3.送检前应去毛刺 和清理干净。 4.材料:正火 ,HB170
A
制图 校核 审图
六方
材料
比例
技术要求
.未注尺寸公差按照 -m。 2.允许周边铣一四方台 至98x98mm,高10mm和铣 平顶面,以方便测量。 3.送检前应去毛刺和清 理干净。 4.材料:正火,HB170
R 粗 加 工 刀 具 半 径 补 偿 D01
修正量
R 精加工余量
利用刀具半径补偿进行粗、精加工
1号 刀
2号 刀
Z0
图5-27 刀具长度补偿原理
H02
主轴
H01
其余
技术要求
.未注尺寸公差按照 -m。 2.允许周边铣一四方台 至98x98mm,高10mm和 铣平顶面,以方便测量。 3.送检前应去毛刺和清 理干净。 4.材料:正火,HB170
思
考:
凸台高度5→15mm,
如何实现铣削加工?
子程序调用编程举例(二)
利用子程序调用实现 分层加工: 用φ12 的立铣刀
7.子程序:过程和函数

• 过程体: 过程体:
Procedure <过程名 参数表 is 过程名>(参数表 过程名 参数表) 说明部分; 说明部分 Begin 顺序语句; 顺序语句; [return;] --与c语言不一样 ; 与 语言不一样 End procedure 过程名; 过程名;
• 过程体用于具体描述过程的功能,可放在 过程体用于具体描述过程的功能, package体中 体中 • Return语句为可选项,用于提前结束进程 语句为可选项, 语句为可选项 如果没有return,则执行完所有语句。 体。如果没有 ,则执行完所有语句。
过程调用环境的顺序与并行
• 在顺序语句中调用过程语句
– 顺序执行 – 可视为一条复合语句
• 在并行语句中调用过程语句
– 整体与其他语句并行执行 – 由in或inout类型的参数触发,执行调用 类型的参数触发, 或 类型的参数触发
过程的复用(重载) 过程的复用(重载)
• 重载:具有不同参数数目或不同数据 重载: 类型的同名过程,称重载过程。 类型的同名过程,称重载过程。
函数的调用
直接以函数名(实参表 作为表达式使用 直接以函数名 实参表)作为表达式使用 实参表 Use work.packexp.all; …. Architecture … begin out1<=max(dat1,dat2); process(dat3,dat4) begin out2<= max(dat3,dat4); end process End;
– – – – P(val1,val2,val3,val4); P(a=>val1,b => val2,c => val3,d => val4); P(val1,val2, c => open,val4); P(val1,val2, ,val4);
子程序设计实验报告

实验名称:子程序设计实验日期:2023年X月X日实验地点:XX大学计算机实验室实验目的:1. 理解子程序的概念和作用。
2. 掌握子程序的设计方法和调用方式。
3. 学会使用子程序提高程序的可读性和可维护性。
实验内容:一、实验背景子程序是程序设计中常用的一种结构,它可以将一段具有独立功能的代码封装起来,方便在其他程序中调用。
使用子程序可以提高程序的可读性、可维护性和模块化程度。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C++三、实验步骤1. 创建一个新的C++项目,命名为“子程序设计”。
2. 在项目中创建一个头文件“Subroutine.h”,用于声明子程序。
3. 在头文件中声明两个子程序:`Add` 和 `Subtract`。
4. 在头文件中定义一个全局变量 `Result`。
5. 在源文件“Subroutine.cpp”中实现头文件中声明的子程序。
6. 在主函数中调用子程序,并输出结果。
7. 编译并运行程序,观察输出结果。
四、实验代码1. 头文件“Subroutine.h”:```cpp#ifndef SUBROUTINE_H#define SUBROUTINE_Hvoid Add(int a, int b);void Subtract(int a, int b); int Result;#endif // SUBROUTINE_H```2. 源文件“Subroutine.cpp”:```cpp#include "Subroutine.h"void Add(int a, int b) {Result = a + b;}void Subtract(int a, int b) { Result = a - b;}```3. 主函数“main.cpp”:```cpp#include <iostream>#include "Subroutine.h"int main() {int a = 10;int b = 5;Add(a, b);std::cout << "Add: " << Result << std::endl;Subtract(a, b);std::cout << "Subtract: " << Result << std::endl;return 0;}```五、实验结果与分析1. 编译并运行程序,输出结果如下:```Add: 15Subtract: 5```2. 分析:(1)在实验中,我们首先在头文件中声明了两个子程序 `Add` 和 `Subtract`,它们分别用于计算两个整数的和与差。
子程序的结构

汇编语言程序设计
汇编语言程序设计
子程序的结构
子程序又称为过程或者函数,是一段能够独立的完成 某项功能的程序段。每一个子程序都是由子程序的定义 和子程序的调用构成。
1.子程序
子程序的结构包括: 子程序的定义;子程序的程序段;子程序的返回。 设计子程序,与程序的设计方法完全相同,可以采用顺 序、分支和循环结构;不同之处只是在于子程序的程序 段只有被调用时,其代码才能称为过程调用,本书称为主程序调用。 当主程序在需要调用子程序时,可以使用调用指令直接 调用已经定义的子程序,转去执行子程序的程序段,执 行完成后,由返回指令直接返回到主程序中调用指令的 下一条指令继续执行主程序。
3.子程序与循环结构的区别 两者都是重复执行一些相同的程序段,但循环结构每次 处理的数据都必须具有一定的规律,而子程序的程序段 每次处理的数据可以是任意的。可见,当需要对不同的 数据进行相同的处理时,应当采用子程序结构。
第5章4 子程序设计

由于主程序和子程序具有相互独立性,而CPU 中的寄存器是公用的,所以它们在使用寄存器时会 发生冲突,即:如果主程序在调用子程序之前的某 一寄存器中的内容在从子程序返回后还有用,而子 程序又恰好使用了此寄存器,这样就会破坏寄存器 中原有的内容,从而造成在返回主程序时程序因数 据的丢失而出现错误。
在设计一个子程序之前,首先应该明确: 子程序的名字; 子程序的功能; 入口参数:为了运行这个子程序,主程序为它准备了哪几个 “已知条件”?这些参数存放在什么地方? 出口参数:这个子程序的运行结果有哪些?存放在什么地方? 影响寄存器:执行这个子程序会改变哪几个寄存器的值? 其它需要说明的事项。
BX,OFFSET X SI, OFFSET ROOT
;初始化指针
MOV
ONE: MOV
CX, 5
AX, [BX]
;设置计数器初值
;设置入口参数 ;调用子程序
CALL SQUARE
MOV
ADD INC
[SI], AL
BX, 2 SI
;保存返回参数(平方根)
;修改指针 ;修改指针
LOOP ONE
JMP $ CODE ENDS
• • • • • • • • • • • • • • • • • •
change proc cmp ah,90 jb m1 mov al,'A' jmp exit m1: cmp ah,80 jb m2 mov al,'B' jmp exit m2: cmp ah,60 jb m3 mov al,'C' jmp exit m3: mov al,'D' exit: ret change endp code ends end start
使用子程序的注意事项

1.编写子程序时,一般采用增量方式编程,这样可减少计算量。
2.主程序中的模态指令可被子程序中同一组的其他G 代码所更改。
如子程序用了G91代码后,再返回主程序时将继续以G91方式进行,故应特别注意代码的转换,否则可能产生位置错误。
3.调用程序时使用刀补。
最好不要在刀具补偿状态下的主程序中调用子程序,换句话来说,刀补的建立和取消应在子程序进行。
如果必须在主程序中建立,则应在主程序中消除。
绝不能在主程序中建立,在子程序取消,也不能在子程序建立,在主程序中消除,否则极易出错。
4.子程序不能单独运行。
第13课(子程序(过程与函数))

变量的作用域
写出下列程序的运行结果: 例 写出下列程序的运行结果
var x,y:integer; 运行结果如下: 运行结果如下 procedure a; *1*2 var x:integer; #2# begin #2# x:=2; writeln('#',x,'#'); writeln('#',y,'#'); * * *1 * * * 2 end;{of a} begin{main program} x:=1;y:=2; writeln('*',x,'*',y); , a; writeln('***',x,'***',y); end.
函数定义的一般格式: 函数定义的一般格式 function <函数名 (<形式参数表 函数名> 形式参数表 形式参数表>):<类型 {函数首部 类型>; 函数首部 函数首部} 函数名 类型
函数调用方式与标准函数的调用方式相同. 函数调用方式与标准函数的调用方式相同. 函数调用的一般格式: 函数调用的一般格式: 函数名> <函数名> S:=area(b1,b5,b6)+area(b2,b6,b7)+area(b3,b4,b7); 或 实在参数 实在参数 实在参数 函数名>(实在参数表) >(实在参数表 <函数名>1 2
运行结果: 运行结果: 1 2 2 1
函数和过程的区别
过程和函数都为子程序,但也有区别: 过程和函数都为子程序,但也有区别:
1,标识符不同.函数的标识符为FUNCTION,过程为:PROCEDURE. ,标识符不同.函数的标识符为 ,过程为: . 2,函数中一般不用变量形参,用函数名直接返回函数值;而过程如有返 ,函数中一般不用变量形参,用函数名直接返回函数值; 回值,则必须用变量形参返回. 回值,则必须用变量形参返回. 3,过程无类型,不能给过程名赋值;函数有类型, 3,过程无类型,不能给过程名赋值;函数有类型,最终要将函数值传送 给函数名. 给函数名 4,函数在定义时一定要进行函数的类型说明,过程则不进行过程的类型 ,函数在定义时一定要进行函数的类型说明, 说明. 说明. 5,调用方式不同.函数的调用出现在表达式中,过程调用由独立的过程 ,调用方式不同.函数的调用出现在表达式中, 调用语句来完成. 调用语句来完成. 6,过程一般会被设计成求若干个运算结果,完成一系列的数据处理, ,过程一般会被设计成求若干个运算结果,完成一系列的数据处理, 或与计算无关的各种操作;而函数往往只为了求得一个函数值. 或与计算无关的各种操作;而函数往往只为了求得一个函数值.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数控车削技术
成刀具折断;刀具埋在深孔中切削无法观察,加工质 量较难控制等。
一般深孔加工工艺上采取的措施是:采用具有适合 深孔加工的几何形状和几何角度的刀具及解决冷却排 屑问题。
数控车削技术
2、 薄壁零件数控加工难点及采取措施
难点:工件易产生变形。
主要措施有:
(1)夹紧力尽可能径向截面上分布均匀; (2)夹紧力的位置宜选在工件刚性较强的部位; (3)采取轴向夹紧工件方法; (4)在工件上制出加强刚性的辅助凸边。
④、工艺系统刚性差,因受孔径尺寸限制,孔的长 径比较大,刀杆细而长,刚性差,易产生震动,钻孔 易走偏,因而支承导向极为重要。
数控车削技术
(3)、深孔加工主要解决问题
冷却,润滑,排屑,合理导向。
综上可以看出,深孔加工的特点及工艺上需采取 的措施如下:
深孔加工的特点:随着加工孔长度的增加,使孔 加工所用刀具的刚性减弱。另一方面,孔的精度和表 面粗糙度要求的提高,又使刀具形状趋于复杂 削液注入困难,切屑不易排出,经常出现切屑堵塞, 拉毛孔壁并使刀具磨损加剧,极易造
c 二级嵌套
O0001 : : M98P400; : : M99
d 三级嵌套
O0001 : : : : : M99
e 四级嵌套
数控车削技术
4、子程序编程举例
x
o
z
数控车削技术
例如:加工零件如上图所示,已知毛坯直径 Ф32mm,长度为50mm,一号刀为外圆车刀, 二号刀为切断刀,其宽度为2mm,其加工程序如
下主:程序
O0010 N10 G50 X150.0 Z100.0 N20 G50 S1800 N30 G00 G96 S150 T0101 N40 M03 N50 M08 N60 X35.0 Z0
数控车削技术
N70 G98 G01 X0.F100(车右端面) N80 G00 Z2.0 N90 X30.0 N100 G01 Z-40.0F100(车外圆) N110 G00 X150.0 Z100.0 T0202 N120 X32.0 Z0 N130 M98 P0031008(切三槽) N140 G00 W-100 N150 G01 X0 F60(切断) N160 G04 X2.0(暂停2S) N170 G00 X150.Z100.0 N180 M30
数控车削技术
格式二:M98 P××××××××
例3 M98 P50010; 例4 M98 P0500;
说明:
(1)地址P后面的八位数中,前四位表示调用次数, 后四位表示子程序号, (2)调用次数前的0可以省略不写,但子程序号前 的0不可省略。
数控车削技术
3、子程序的嵌套
为了进一步简化加工程序,可以允许子程序在调用 另一个子程序,这一功能称为子程序的嵌套。
说明:
(1)子程序一般不可以作为独立的加工程序使用。只能 通过主程序进行调用,实现加工中的局部动作。
(2)子程序结束后,能自动返回到调用它的主程序中。
数控车削技术
2、子程序的调用格式
格式一:M98 P××××L××××;
例1:M98 P100 L5 ; 例2:M98 P100;
说明:
(1)P后面的四位数字为子程序号,L后面的数字表示 重复调用次数,且P、L后面的四 位数中前面的0可以以 省略不写。 (2)如只调用一次,则L及后面的数字可省略。
当主程序调用子程序时,该子程序被认为是一级子 程序,FANUC O系统中的子程序允许4级嵌套。 FANUC 0T/18T系统中,只能有2级嵌套。
如下图所示:
数控车削技术
O0001 : : M98P100; : : M30
a 主程序
O0001 : : M98P200; : : M99
b 一级嵌套
O0001 : : M98P300; : : M99
数控车削技术
1、深孔数控加工的难点及采取措施
(1)、深孔概念
孔加工分为浅孔加工和深孔加工两类,也包括介于两者之间 的中孔加工,一般规定孔深L与孔径d0之比大于5,即L/d0>5 的孔称为深孔; L/d0≤5的孔称为浅孔。
(2)深孔加工特点
深孔加工时处于封闭或半封闭状态下进行的,股具有以下特 点:
①不能直接观察到刀具的切削情况,目前只能凭经验,通过 声音,看切削,观察机床负荷及压力表,触摸震动等外观现象 来判断切削过程是否正常。
数控车削技术
第十一讲 子程序
(M98/M99)
数控车削技术
任务描述
x
o
z
数控车削技术
任务目标:
掌握子程序的含义及用法。
任务难点重点: M98/M99指令的含义 子程序的嵌套使用
数控车削技术
一、数控车床子程序编程 二、典型零件数控加工简析
数控车削技术
一、子程序
1、子程序的概念
一组程序段在一个程序中多次出现,或者在几个程序 中都要使用它,我们将这样一组程序段单独加以命名, 做成固定的程序,这组程序段称为子程序。
数控车削技术
3、车削细长轴时工件产生弯曲的原因及消除方法
(1)、坯料自重或本自弯曲,应对毛坯进行较直和热处 理。 (2)、工件装夹不良,尾座顶尖与工件中心孔顶得过紧。 应适当顶尖与工件的松紧程度。 (3)、刀具几何参数和切削用量选择不当。根据实际情 况合理选择参数。 (4)、工件切削时产生热变形。加注切削液。 (5)、刀尖与跟刀架支承块间距离过大。加工中间距应 保持在2mm以内。
数控车削技术
子程序
O1008 N300 G00 W-10.0 N310 G98 G01 U-12.0 F60 N320 G04 X1.0 N330 G00 U12.0 N340 M99
数控车削技术
二、典型零件数控加工简析
主要内容: 1、深孔数控加工的难点及采取措施 2、 薄壁零件数控加工难点及放错措施 3、车削细长轴时工件产生弯曲的原因及消除方法
数控车削技术
②、切削热不易传散,一般切削过程中80%的切削 热被切削带走,而深孔钻削只有40%,刀具占切削热 的比例较大,扩散迟,易过热。必须采用强制有效的 冷却方式。
③、切削不易排出。由于孔深,切削经过路线长, 容易发生阻塞,造成刀具损坏,因此,切屑的长短和 形状要加以控制,并要进行强制性排屑。