ch9-子程序和程序包
子程序设计实验报告

实验名称:子程序设计实验日期: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`,它们分别用于计算两个整数的和与差。
台湾永宏PLC软件说明书

2.4批注范例程序.......................................................................................... .2-7
3.2.1离线操作................................................................................................ .3-3
3.2.2联机操作....... .3-4
2.3输入及编辑范例程序............................................................................. .2-3
2.3.1以鼠标输入及编辑范例程序................................................................... .2-3
第2章:操作范例
2.1范例程序说明.......................................................................................... .2-1
2.2项目的建立.............................................................................................. .2-2
4.2.1鼠标操作输入......................................................................................... .4-1
世纪星车床说明书华中数控机床

欢迎下载支持,谢谢!数控技术培训系列教程世纪星车床数控系统HNC-21/22T编程说明书华中科技大学国家数控系统工程技术研究中心武汉华中数控股份有限公司2001 年11 月前言非常感谢您选用了本公司生产的 HNC-21/22 世纪星系列数控系统。
本说明书详细介绍了数控编程基本知识、指令体系、各指令功能的特点、注意事项和宏指令编程方法,并配以大量典型编程实例和图例加以说明。
既可作为世纪星车床数控系统产品说明书,也可作为数控编程的培训教材。
在使用本产品前,请先仔细阅读本说明书,以达到最佳使用效果。
请妥善保存说明书,并交最终使用者认真阅读。
本说明书版权为武汉华中数控股份有限公司所有。
华中科技大学国家数控系统工程技术研究中心武汉华中数控股份有限公司2002 年11 月目录第一章概述 (1)1.1 数控编程概述 (1)1.2 数控编程基本知识 (1)1.2.1 机床坐标轴 (1)1.2.2 机床坐标系、机床零点和机床参考点 (3)1.2.3 工件坐标系、程序原点和对刀点 (4)第二章零件程序的结构 (5)2.1 指令字的格式 (5)2.2 程序段的格式 (6)2.3 程序的一般结构 (7)2.4 程序的文件名 (7)第三章 HNC-21T 的编程指令体系 (8)3.1 辅助功能M 代码 (8)3.1.1 CNC 内定的辅助功能 (9)(1) 程序暂停M00 (9)(2) 程序结束M02 (9)(3) 程序结束并返回到零件程序头M30 (9)(4) 子程序调用M98 及从子程序返回M99 (9)3.1.2 PLC 设定的辅助功能 (11)(1) 主轴控制指令M03、M04、M05 (11)(2) 冷却液打开、停止指令M07、M09 (11)3.2 主轴功能S、进给功能F 和刀具功能T (11)3.2.1 主轴功能S (11)3.2.2 进给速度F (12)3.2.3 刀具功能(T 机能) (12)3.3 准备功能G 代码 (13)3.3.1 有关单位的设定 (14)(1) 尺寸单位选择G20,G21 (14)(2) 进给速度单位的设定G94、G95 (15)3.3.2 有关坐标系和坐标的指令 (15)(1) 绝对编程G90 与增量编程G91 指令 (15)I(2) 工件坐标系设定G92 (15)(3) 零点偏置G54~G59 (18)(4) 直径方式和半径方式编程 (20)3.3.3 进给控制指令 (21)(1) 快速定位G00 (21)(2) 线性进给及倒角G01 (22)(3) 圆弧进给G02/G03 (25)(4) 螺纹切削G32 (27)3. 3.4 回参考点控制指令 (30)(1) 自动返回参考点G28 (30)(2) 自动从参考点返回G29 (31)3.3.5 暂停指令G04 (32)3.3.6 恒线速度功能G96、G97 (32)3.3.7 简单循环 (34)(1) 内(外)径切削循环G80 (34)★圆柱面内(外)径切削循环 (34)★园锥面内(外)径切削循环 (35)(2) 端面切削循环G81 (37)★端平面切削循环 (37)★园锥端面切削循环 (38)(3) 螺纹切削循环G82 (40)★直螺纹切削循环 (40)★锥螺纹切削循环 (41)3.3.8 复合循环 (43)(1) 内(外)径粗车复合循环G71 (43)(2) 端面粗车复合循环G72 (50)(3) 闭环车削复合循环G73 (54)(4) 螺纹切削复合循环G76 (57)(5) 复合循环指令注意事项 (60)3.3.9 刀具补偿功能指令 (60)刀具偏置补偿和刀具磨损补偿 (60)(3) 刀尖半径补偿G40,G41,G42 (63)3.3.9 综合编程实例 (64)第一章概述 (1)1.1 数控编程概述 (1)1.2 数控编程基本知识 (1)1.2.1 机床坐标轴 (1)1.2.2 机床坐标系、机床零点和机床参考点 (3)1.2.3 工件坐标系、程序原点和对刀点 (4)第二章零件程序的结构 (5)2.1 指令字的格式 (5)2.2 程序段的格式 (6)2.3 程序的一般结构 (7)2.4 程序的文件名 (7)第三章 HNC-21/22T 数控系统的编程指令体系 (8)3.1 辅助功能M 代码 (8)3.1.1 CNC 内定的辅助功能 (9)(1) 程序暂停M00 (9)(2) 程序结束M02 (9)(3) 程序结束并返回到零件程序头M30 (9)(4) 子程序调用M98 及从子程序返回M99 (9)3.1.2 PLC 设定的辅助功能 (11)(1) 主轴控制指令M03、M04、M05 (11)(2) 冷却液打开、停止指令M07、M09 (11)3.2 主轴功能S、进给功能F 和刀具功能T (11)3.2.1 主轴功能S (11)3.2.2 进给速度F (12)3.2.3 刀具功能(T 机能) (12)3.3 准备功能G 代码 (13)3.3.1 有关单位设定的G 功能 (14)(1) 尺寸单位选择G20,G21 (14)(2) 进给速度单位的设定G94、G95 (15)3.3.2 有关坐标系和坐标的G 功能 (15)(1) 绝对值编程G90 与相对值编程G91 (15)(2) 坐标系设定G92 (16)(3) 坐标系选择G54~G59 (18)(4) 直接机床坐标系编程G53 (19)(5) 直径方式和半径方式编程 (20)3.3.3 进给控制指令 (21)(1) 快速定位G00 (21)(2) 线性进给及倒角G01 (22)(3) 圆弧进给G02/G03 (25)(4) 螺纹切削G32 (27)3. 3.4 回参考点控制指令 (30)(1) 自动返回参考点G28 (30)(2) 自动从参考点返回G29 (31)3.3.5 暂停指令G04 (32)3.3.6 恒线速度指令G96、G97 (32)3.3.7 简单循环 (34)(1) 内(外)径切削循环G80 (34)★圆柱面内(外)径切削循环 (34)★园锥面内(外)径切削循环 (35)(2) 端面切削循环G81 (37)★端平面切削循环 (37)★园锥端面切削循环 (38)(3) 螺纹切削循环G82 (40)★直螺纹切削循环 (40)★锥螺纹切削循环 (41)3.3.7 复合循环 (43)(1) 内(外)径粗车复合循环G71 (43)(2) 端面粗车复合循环G72 (50)(3) 闭环车削复合循环G73 (54)(4) 螺纹切削复合循环G76 (57)(5) 复合循环指令注意事项 (60)3.3.8 刀具补偿功能指令 (60)刀具偏置补偿和刀具磨损补偿 (60)刀尖圆弧半径补偿G40,G41,G42 (63)编程步骤 (67)综合编程实例 (68)3.4 宏指令编程 (70)3.4.1 宏变量及常量 (70)(1) 宏变量 (70)(2) 常量 (73)3.4.2 运算符与表达式 (73)(1) 算术运算符: (73)(2) 条件运算符 (73)(3) 逻辑运算符 (74)(4) 函数 (74)(5) 表达式 (74)3.4.3 赋值语句 (74)3.4.4 条件判别语句IF,ELSE,ENDIF (74)3.4.5 循环语句WHILE,ENDW (74)附表1准备功能一览表 (76)附表2直径编程注意条件 (78)附录1HNC-21T 车削循环宏程序 (78)(1) 车削循环指令的实现及子程序调用的参数传递 (78)(2) 车削循环指令的宏程序实现 (83)第一章概述本书针对HNC-21/22T 世纪星数控车床系统进行编程说明,其编程语言为广泛使用的ISO 码。
Mastercam9

Mastercam9提供有效的后处理解决方案对于Mastercam 9.1软件用户来说非常重要。
优化后处理程序可以提高CNC(数控加工)过程中的效率和精确性。
本文档将介绍一些优化Mastercam 9.1后处理的方法。
1. 后处理程序调试在使用Mastercam 9.1软件进行CNC编程时,出现后处理错误是常见的。
为了优化后处理程序,首先需要在开发或获取后处理器之前进行调试。
通过检查后处理程序的输出和与机床的预期行为进行比较,可以确定其中的错误并进行修正。
2. 定制后处理程序针对特定的机床和加工需求,定制后处理程序可以显著提高加工效率。
Mastercam 9.1软件提供了灵活的后处理定制工具,以满足不同的加工需求。
通过理解机床的特殊功能和限制,并根据具体需求进行后处理程序的修改,可以最大程度地优化后处理过程。
3. 优化刀具路径在进行CNC加工时,优化刀具路径可以节省时间和材料,并提高加工质量。
Mastercam 9.1软件提供了多种工具来优化刀具路径,例如刀具半径补偿、切割策略和连续切削等。
合理选择并配置这些工具,可以最大程度地优化后处理过程。
4. 选择合适的后处理选项在Mastercam 9.1软件中,后处理选项提供了多种控制和配置选项。
通过了解后处理选项的含义和功能,可以根据特定需求进行适当的配置。
合理选择后处理选项可以避免不必要的问题,并提高后处理的效率和准确性。
5. 及时更新软件版本Mastercam软件开发商经常发布软件更新和补丁,以修复错误和改进性能。
定期检查并安装最新的软件更新对于优化后处理过程非常重要。
这些更新通常包括后处理程序的改进和优化,可以提供更好的加工体验。
综上所述,通过调试后处理程序、定制后处理、优化刀具路径、选择合适的后处理选项和及时更新软件版本,可以最大程度地优化Mastercam 9.1后处理过程。
这些方法将提高CNC加工的效率和精确性,帮助用户获得更好的加工结果。
子程序的调试方法

子程序的调试方法在软件开发过程中,子程序(也称为函数或方法)是一种重要的编程工具,用于实现代码的模块化和重用。
然而,由于子程序的复杂性和交互性,调试子程序可能会变得相当困难。
本文将介绍一些专业的调试方法,以帮助开发人员更有效地调试子程序。
1. 理解子程序的功能在调试子程序之前,首先要确保对其功能有深入的理解。
仔细阅读子程序的文档和源代码,了解其输入和输出以及内部逻辑。
这将有助于确定可能的错误源,并缩小调试的范围。
2. 使用断点断点是调试中最常用的工具之一。
在调试器中设置断点,可以暂停程序的执行,以便检查变量的值、执行路径和调用堆栈。
通过在子程序的关键位置设置断点,可以逐步跟踪代码的执行,并找到潜在的错误。
3. 利用日志记录日志记录是另一种有用的调试技术。
在子程序中插入日志语句,记录关键变量的值和执行路径,可以帮助开发人员追踪代码的执行过程。
通过分析日志文件,可以发现潜在的问题,并了解代码中的错误行为。
4. 使用调试工具现代集成开发环境(IDE)通常提供了强大的调试工具,如变量查看器、堆栈跟踪和表达式评估器。
利用这些工具,可以更方便地检查和修改变量的值,跟踪代码的执行路径,并评估复杂表达式的结果。
熟练使用调试工具可以大大提高调试效率。
5. 编写单元测试编写单元测试是一种预防性的调试方法。
通过编写针对子程序的测试用例,可以验证其功能和正确性。
当子程序出现问题时,可以通过运行相应的单元测试来定位错误。
单元测试还可以帮助开发人员更好地理解子程序的预期行为,并提供一种可靠的调试手段。
6. 与他人合作有时,调试一个复杂的子程序可能超出了个人的能力范围。
在这种情况下,与其他开发人员合作可能是一个明智的选择。
他们可以提供新的思路和观点,帮助解决难以调试的问题。
通过团队合作,可以更快地找到子程序中的错误,并共同学习和成长。
总结起来,调试子程序需要一定的专业知识和技巧。
通过深入理解子程序的功能、使用断点和日志记录、利用调试工具、编写单元测试以及与他人合作,开发人员可以更有效地调试子程序,并提高软件开发的质量和效率。
CH9 数据库完整性与安全_2

其中:
<procedureName>:过程名,必须符合标识符规则,且在数 据库中唯一; <parameterName>:参数名,存储过程可不带参数,参数可 以是变量、常量和表达式; OUTPUT:说明该参数是输出参数,被调用者获取使用。缺 省时表示是输入参数。
School of Information Technology, Jiangxi University of Finance & Economics 6
9.4 存储过程
实现一定程度的安全性保护
存储过程存放在数据库中,且在服务器端运行; 对于不允许用户直接操作的表或视图,可通过调用存储过程来间接 地访问这些表或视图,达到一定程度的安全性; 这种安全性缘于用户对存储过程只有执行权限,没有查看权限; 拥有存储过程的执行权限,自动获取了存储过程中对相应表或视图 的操作权限; 这些操作权限仅能通过执行存储过程来实现,一旦脱离存储过程, 也就失去了相应操作权限。
8
数据库系统原理与设计
第 9 章
数据库完整性与安全
9.4.1 创建存储过程
[例9.24] 输入某个同学的学号,统计该同学的平均分,并返 回该同学的姓名和平均分。 分析: 该过程涉及三个参数:
一个输入参数,设为@sNo,用于接收某同学的学号; 两个输出参数,用于返回查询到的同学姓名和平均分,设 为@sName 和@avg
DECLARE myCur CURSOR FOR SELECT score FROM Score WHERE studentNo=@sNo
定义局部变量@score,用于接收从游标集中获取的成绩; 定义局部变量@count,用于统计选课门数; 定义局部变量@sum,用于对成绩进行累加。
CH9DMA控制器的编程结构及编程

DMAC成为总线主控者
7
9.1 DMA控制器概要
4. 数据传送阶段
►DMA控制器获得总线的控制权,向外设发送 应答信号DACK,通知外设可以进行DMA传输 了。
►DMA控制器送出地址信号和控制信号,实现 外设与内存的数据传输。
外部设备 DACK
DMAC
地址信号
读写信号
存储器
8
9.1 DMA控制器概要
CPU响应DMA 放弃总线
作 方 式
✓ CPU在每个DMA周期结 束后立即控制总线。对系 统影响不大。
DMAC控制 传一个字节
块结束否?
DMA
N
放
弃
✓ CPU和DMAC轮流控制系
Y
总
统总线,传输效率低。
线 放弃总线中断请求
21
9.3 8237A的工作方式和方式寄存器
8237A
1. 8237A的工作方式和方式寄存器
结
构
地 址
和
A8~A15
译
外
码 器
部
A4~A7
连
当前字节计数器 基字节寄存器
CS
同上
通道1
A4~A7
同上
通道2
接
A0~A3
A0~A3
同上
通道3
DREQ0 DACK0
DREQ1 DACK1 DREQ2 DACK2 DREQ3 DACK3
14
9.2 DMA控制器8237A的原理
2. 8237A的外部信号
CPU响应DMA放弃总线
Y
DMA请求?
N
放弃总线
DMAC控制传一个字节
N
块结束?
Y
放弃总线中断请求
子程序的调用

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表示子程序结束,并实现自 动返回主程序功能。如下子程序格式所示:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HandsOn
过程和函数的比较
过程
作为 PL/SQL 语句执行
函 数
作为表达式的一部分调用
在规格说明中不包含 RETURN 子句 必须在规格说明中包含 RETURN 子句
不返回任何值
可以包含 RETURN 语句,但是与函 数不同,它不能用于返回值
必须返回单个值
必须包含至少一条 RETURN 语句
HandsOn
创建过程的语法:
CREATE [OR REPLACE] PROCEDURE <procedure name> [(<parameter list>)] IS|AS 创建过程,可指定运行过程需传递的参数 <local variable declaration> BEGIN 包括在过程中要执行的语句 <executable statements> [EXCEPTION <exception handlers>] 处理异常 END;
HandsOn
程序包中的游标 2-2
SQL> CREATE OR REPLACE PACKAGE BODY pack_cur AS Cursor cur_stu(stuclass number) return t_student%rowtype Is select CREATE OR REPLACE PACKAGE pack_cur As SQL> * from t_student where f_class = stuclass; procedure proc_stu(stuclass number) return t_student%rowtype; Cursor cur_stu(stuclass number) As procedure proc_stu(stuclass number); rec_stu t_student%rowtype; end; begin / Open cur_stu(stuclass); loop Fetch cur_stu Into rec_stu; Exit when cur_stu%NotFound; dbms_output.put_line('学生姓名:'||rec_stu.f_name); end loop; end proc_stu; end; /
过程 8-4
执行过程的语法:
EXECUTE procedure_name(parameters_list);
SQL> SET SERVEROUTPUT ON SQL> EXECUTE proc_stu(‘007');
HandsOnຫໍສະໝຸດ 过程 8-5过程参数的三种模式: IN
用于接受调用程序的值 默认的参数模式 用于向调用程序返回值 用于接受调用程序的值,并向调用程序返回更新的值
HandsOn
过程 8-3
create or replace procedure proc_stu(v_id varchar2) Is v_name t_student.f_name%type; v_dept t_student.f_department%type; v_class t_student.f_class%type; begin select f_name,f_department,f_class into v_name,v_dept,v_class from t_student where f_id=v_id; dbms_output.put_line('学号:'||v_name||'姓名:'||v_dept||'班 级:'||v_class); exception when no_data_found then dbms_output.put_line('未找到相应学生'); end; / HandsOn
OUT
IN OUT
HandsOn
过程 8-6
SQL> create or replace procedure proc_avgscore(stuid In declare varchar2,avgscore out number) avgscore number; as begin begin proc_avgscore('001',avgscore); select avg(f_grade) into avgscore from t_grade where dbms_output.put_line('学号为001的学生的平均成绩为: f_stuid=stuid; '||to_char(avgscore)); exception end; / when no_data_found then dbms_output.put_line('未找到相应记录'); end; /
CREATE [OR REPLACE] PACKAGE package_name IS|AS [Public item declarations] [Subprogram specification] END [package_name];
程序包主体
CREATE [OR REPLACE] PACKAGE BODY package_name IS|AS [Private item declarations] [Subprogram bodies] [BEGIN Initialization] END [package_name];
从 SQL 语句调用函数:
SQL> SELECT func_hello FROM DUAL;
HandsOn
函数 4-4
create or replace function func_stu(v_id varchar2) return varchar2 As v_name t_student.f_name%type; DECLARE v_dept t_student.f_department%type; v_id char(3) := '001'; v_class t_student.f_class%type; v_stuinfo VARCHAR2(100); begin BEGIN select f_name,f_department,f_class into v_name,v_dept,v_class v_stuinfo := func_stu(v_id); from t_student where f_id=v_id; DBMS_OUTPUT.PUT_LINE(v_stuinfo); return END; '学号:'||v_name||'姓名:'||v_dept||'班级:'||v_class; exception / when no_data_found then dbms_output.put_line('未找到相应学生'); end; /
程序包的优点
模块化 更轻松的应用程序设计 信息隐藏 新增功能 性能更佳
HandsOn
程序包中的游标 2-1
游标的定义分为游标规范和游标主体两部分 在包规范中声明游标规范时必须使用 RETURN 子句指定游标的返回类型 RETURN子句指定的数据类型可以是:
用 %ROWTYPE 属性引用表定义的记录类型 程序员定义的记录类型
HandsOn
创建程序包 2-2
create or replace package pack_stu As As body pack_stu v_globalid char(8); procedure proc_stu(v_id varchar2) procedure proc_stu(v_id varchar2); Is function func_stu(v_id varchar2) return varchar2; v_name t_student.f_name%type; end pack_stu; v_dept t_student.f_department%type; / v_class t_student.f_class%type; begin v_globalid := v_id; select f_name,f_department,f_class into v_name,v_dept,v_class from t_student where f_id=v_id; ... end proc_stu; function func_stu(v_id varchar2) return varchar2 As ... end func_stu; HandsOn end pack_stu; /
HandsOn
函数 4-2
定义函数的限制:
函数只能接受 IN 参数,而不能接受 IN OUT 或 OUT 参数 形参不能是 PL/SQL 类型 函数的返回类型也必须是数据库类型
访问函数的两种方式:
使用 PL/SQL 块 使用 SQL 语句
HandsOn
函数 4-3
创建函数:
CREATE OR REPLACE FUNCTION func_hello RETURN VARCHAR2 IS BEGIN RETURN '朋友,您好'; END; /
函数 4-1
函数是可以返回值的命名的 PL/SQL 子程序。 创建函数的语法:
CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)] RETURN <datatype> IS|AS [local declarations] BEGIN Executable Statements; RETURN result; EXCEPTION Exception handlers; END;