子程序范文

时间:2023-04-09 08:11:39

导语:如何才能写好一篇子程序,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。

子程序

篇1

本文简介了子程序编程的基础知识,以实例形式论述了子程序在模具平面、凸模和多腔铣削加工编程中的具体应用。实践表明,使用子程序编程解决了因平面铣削走刀次数多、分层铣削层数多、多腔铣削腔数多而导致的无法进行的手工编程的问题,并能够克服数控自动编程程序可读性差、柔性差的缺点,缩短编程时间和工作量。

数控编程是模具加工的关键环节,编制高质量的加工程序对工件质量、效率和成本有重要的影响。在模具加工中,经常会遇到平面铣削走刀次数多、分层铣削层数多、多腔铣削腔数多而导致的手工编程繁琐问题,甚至若不采用子程序无法进行手工编程的问题。因此,本文探讨利用子程序以简化模具加工手工编程具有重要的意义。

一、FNUAC 0i 系统子程序编程基础

1. 子程序的概念

数控机床的加工程序分为主程序和子程序两种。主程序是一个完整的零件加工程序,或是零件加工程序的主体部分,它和加工零件是一一对应的关系。在编制零件加工程序中,如果其中有些加工内容完全相同或相似,为了简化程序,可以把程序中某些重复出现的程序单独抽出来,按一定格式编成一个单独的程序,以供调用,这个程序即是子程序。

2. 子程序的调用

在FANUC 0i 系统中,子程序的调用可通过M98 指令进行,且在调用格式中将子程序的程序号地址O 改为P,其常用的子程序调用格式为:M98 P L。

其中地址P 后面的四位数字为子程序号,地址L 的数字表示重复调用的次数。若只调用1 次子程序,在地址L及其后的数字可省略不写。

3. 子程序的嵌套

在编程时让程序调用另一个子程序,这一功能称为子程序的嵌套。当主程序调用子程序时,该子程序被认为是一级子程序,为一级嵌套,一级子程序再调用子程序时,该子程序被认为是二级子程序,为二级嵌套,依次类推,FANUC 0i 系统中,子程序可以嵌套4 级。

主程序在运行过程中若需要执行某一级子程序,通过M98 调用指令来调用该一级子程序,如果该一级子程序需要执行某二级子程序,也是通过M98 指令来调用该二级子程序,依次类推。子程序返回时与调用次序相反,最终一级子程序运行结束后又返回到主程序调用程序段处,继续执行下面的程序段。

二、子程序的编程应用

1. 模具平面的编程

模具主要是由板类零件组成的,平面是典型加工表面,下面以某模板平面长、宽尺寸为300×250为例进行铣削编程。

(1)编程分析。

刀具选用直径为30mm 的平底立铣刀,以刀位点进行编程,铣削平面走刀路线由单向行切和双向行切,为保证加工表面质量采用单向不对称逆铣行切,步距一般为刀具直径的0.85 倍,故步距取26mm,工件宽度为250 除以步距26,得循环次数为9.6 次,而次数须为整数,因此,循环走刀次数确定为10 次。

(2)确定编程原点,设计走刀路线。

编程零点确定在工件上表面中心,所设计的每次走刀路线如图1 所示,即P1 P2 P3。

(3)确定基点坐标值。

考虑刀具半径15mm、刀具X 轴方向让刀距离3mm和步距26mm,采用CAD 尺寸标注法确定P1 点绝对坐标为P1(-18,11),P2、P3 点增量坐标为P1(336,0)、P2(-336,26)。

(4)编写加工程序源代码。

综合上述分析及设计,编写参考子程序如O6001 所示,编写主程序如O1 所示,根据加工平面尺寸只需修改所编程序中基点P1、P2、P3 坐标值,即可用于加工。

O6001;(子程序名)

G90G00Z5;(切换为绝对编程,刀具快速下降到Z坐标值5mm 处)

G01Z-1.5F50;(刀具切削进给至Z 值-1.5mm 处)

G91G01X336Y0F120;( 切换为增量编程,刀具切削进给从P1 到P2 点)

G90G00Z50;(切换为绝对编程,刀具快速抬刀至Z坐标值为50mm 处)

G91G00X-336Y26;(切换为增量编程,刀具快速至下一个下刀点)

M99;( 子程序结束)

O1;( 主程序名)

G91G28Z0;(刀具Z 轴回零)

G54G90G00X-18Y11S600M03;(建立XY 工件系,刀具快速至下刀点,主轴正转,转速600r/min)

G00Z50;(刀具快速至Z 坐标值50mm 处)

M98P6001L10;(调用O6001 子程序10 次)

G00Z200;(刀具快速至Z 坐标值200mm 处)

M30;(主程序结束)

2. 模具零件的分层铣削编程

某模具零件图如图2 所示,毛坯长、宽、高尺寸为:100×100×110。

(1)编程分析。

在模具实际加工中,特别高速加工,为减小切削抗力,避免机床负载的剧烈变化,刀具每次的切削深度必须限定在一定范围内。使用子程序编程可实现刀具Z 向的分层加工。一般要求加工高度和每层切削深度为整数倍关系,该冲模型芯高80mm,确定每层切削深度2mm,则需调用子程序40 次。刀具选用直径16mm 的合金刀具。

(2)确定编程零点,设计走刀路线。

编程零点确定在工件上表面中心,设计走刀路线时注意以下4 点:①走刀路线下刀点和返回点尽量重合,以简化编程;②精加工刀具要切向切入切出工件,防止接刀痕; ③ 刀具XY 下刀点尽量在工件以外, 必要时预加工工艺孔, 保护刀具; ④ 走刀路线尽量短, 有利于基点坐标计算。所设计的每层走刀路线如图3 所示,即P P1 P2 P3 P4 P5 P6 P2 P7 P。

(3)确定基点坐标值。

图3 中的刀具每层走刀路线图为精确设计,使用CAD软件查询法顺次确定基点坐标为:P(0,-60)、P1 (12,-52)、P2(0,-40)、P3(-30,-40)、P4(-30,10)、P5(30,10)、P6(30,-40)、P7(-12,-52)。

(4)编写加工程序源代码。

基于上述分析及设计,编写参考子程序如O6002 所示,编写主程序如O2 所示,以供参考。值得注意的是:①分层铣削子程序编程Z 向须用G91 编程;②主程序中程序段G01Z0F20,刀具须切削进给至Z 坐标值0 处,才能保证工件的加工高度尺寸。

O6002;(子程序名)

G91G01Z-2F20;(刀具每次切削深度-2mm)

G90G41G01X12Y-52D01F200;( 刀具从P 点切削进给到P1 点,建立刀具半径左补偿)

G03X0Y-40R12;( 刀具从P1 点切削进给到P2 点,圆弧切向切入工件)

G01X-30;( 刀具从P2 点切削进给到P3 点)

G01Y10;( 刀具从P3 点切削进给到P4 点)

G03X30R30; ( 刀具从P4 点切削进给到P5 点)

G01Y-40; ( 刀具从P5 点切削进给到P6 点)

G01X0; ( 刀具从P6 点切削进给到P2 点)

G03X-12Y-52R12;( 刀具从P3 点切削进给到P7 点,圆弧切向切出工件)

G40G01X0Y-60F1000;( 刀具从P7 点切削进给到P 点,取消刀具半径左补偿)

M99; ( 子程序结束)

O2;( 主程序名)

G91G28Z0;( 刀具Z 轴回零)

G54G90G00X0Y0S2000M03;( 建立工件系,刀具快速至下刀点P,主轴正转,转速2000r/min)

G00Z50;( 刀具快速下降到离工件顶面50mm)

G00Z5;( 刀具快速下降到离工件顶面5mm)

G01Z0F20;( 刀具切削进给到Z 坐标值0 处)

M98P6002L40;( 调用O6002 子程序40 次)

G00Z50;( 刀具快速抬刀至离工件顶面50mm)

G00Z200;( 刀具快速抬刀至离工件顶面200mm)

M30;( 主程序结束)

3. 模具的多腔铣削编程

假设刀具一次能加工深度为10mm,对图4 所示零件各腔进行精铣编程。

(1)编程分析。

刀具选用直径8mm 的键槽铣刀,零件各腔为精加工,为避免刀痕,设计走刀路线时,刀具圆弧切向切入切出工件,编写轮廓子程序使用G91 增量编程,实现工件轮廓形状编程与位置的无关。

(2)确定编程零点,设计走刀路线。

编程零点确定在工件上表面中心, 所设计的走刀路线如图5 所示, 各腔的加工顺序为①②③④⑥⑦⑧⑨,所设计的每腔走刀路线为O A1 A2 A3 A4 A5 A6 A2 A7 O。

(3)确定基点坐标值。

为使刀具加工形状与其位置无关,需采用G91 方式编程,因此,使用CAD 尺寸标注法确定各基点坐标增量坐标为:O(0,0)、A1(5,5)、A2(-5,5)、A3(-15,0)、A4(0,-20)、A5(30,0)、A6(0,20)、A7(-5,-5)、O(5,-5)。

(4)编写加工程序源代码。

根据以上分析及设计,编写子程序如O6003 所示,编写主程序如O3 所示,以供参考。

O6003;(子程序名)

G00Z5;(刀具快速下降到离工件顶面5mm 处)

G01Z-10F20;(刀具切削进给到切削深度-10mm)

G91G41G01X5Y5D01F60;( 切换为增量编程,建立刀具半径补偿左刀补,刀具从O 点进给到A1 点)

G03X-5Y5R5; ( 刀具从A1 点进给到A2 点)

G01X-15Y0,R5; ( 刀具从A2 点进给到A3 点)

G01X0Y-20,R5; ( 刀具从A3 点进给到A4)

G01X30Y0,R5; ( 刀具从A4 点进给到A5 点)

G01X0Y20,R5; ( 刀具从A5 点进给到A6 点)

G01X-15Y0;( 刀具从A6 点到进给A2 点)

G03X-5Y-5R5; ( 刀具从A2 点到进给A7 点)

G40G01X5Y-5F500;( 取消左刀补,刀具从A7 点进给到O 点)

G90G00Z50;( 切换为绝对编程,刀具快速抬刀至离工件顶面50mm)

M99;( 子程序结束)

O3;( 主程序)

G91G28Z0;(刀具Z 轴回零)

G54G90G00X0Y0S800M03;(建立工件坐标系,刀具快速定位至第1 个腔体中心)

G00Z50;( 刀具快速下降到离工件顶面50mm)

M98P6003L1;( 调用O6003 子程序1 次)

G00X35Y0;( 刀具快速至第2 个腔体中心)

M98 P6003L1; ( 调用O6003 子程序1 次)

……(刀具顺次定位至腔中心,调用子程序加工)

G00X35Y-25; ( 刀具快速至第9 个腔体中心)

M98 P6003L1;( 调用O6003 子程序1 次)

G00Z200;( 刀具快速抬刀至离工件顶面200mm)

M30;( 主程序结束)

篇2

关键词:子程序调用 M98、M99指令 简化编程

中图分类号:TG519.1 文献标识码:A 文章编号:1007-9416(2014)02-0014-01

Abstract:the numerical control lathe in guangzhou M98instructions for subroutine calls,and from the subroutine return instructions M99(end with M99)come in pairs. Through examples on how to use programming subroutineM98,M99.

Key Words:Subroutine call M98,M99instruction Simplify programming

数控车床的编程方法有自动编程和手动编程,而手动编程用得比较多。手动编程时有很多方法和技巧,其中运用子程序来编程就是一种方法。在数控车床的加工编程中利用子程序编程可以简化编程、节约数控统内部资源、提高加工效率、降低生产成本。具有很灵活实用的特点,在实际的加工生产中具有重要的意义。

1 子程序的定义与作用

在编制加工程序时,如果需要加工的零件有些加工部位完全相同或相似,为了简化程序,可以把这些重复的程序段单独列出,并按一定的格式编写成子程序。主程序在执行过程中如果需要某一子程序,通过调用指令来调用该子程序,子程序执行完后又返回到主程序,继续执行后面的程序段。另外在一次定位装夹中需要加工多个相同的零件时,也可以利用子程序来编程实现循环加工,以达到节省加工时间和提高加工效率的目的。

广州数控车床系统的M98指令用于子程序调用,通常与从子程序返回指令M99(以M99结束)成对出现。

M98指令格式:

M98 P

被调用的子程序号(0000~9999)。当调用次数未输入时,子程序号的前导0可省略;当输入调用次数时,子程序号必须为4位数;调用次数(1-999),调用1时,可不输入。指令功能:当前程序段的其它指令执行完成后,系统不执行下一程序段,而是去执行P指定的子程序,子程序最多可执行999次。

从子程序返回M99

指令格式:M99 P

返回主程序执行的程序段号(0000~9999),前导0可以省略。

2 利用子程序指令M98、M99编程加工实例

采用广州GSK980TB数控系统车床加工零件(如图1所示)。该零件的毛坯材料采用φ20的PVC棒料。

2.1 对该零件进行加工工艺分析

由于该零件结构比较简单,尺寸精度要求不高,所以加工时只需要两把车刀,一把外圆车刀,一把切断刀(刀宽为2mm)。如果采用单件加工的方法编程加工,用于对刀和装夹、换刀的辅助加工时间大大增加,降低生产效率;如果采取夹位不变,一次装夹就可以加工多个零件。这样,我们可以利用子程序指令来编程进行加工,既节省时间、材料,又提高了加工效率。

2.2 利用子程序指令M98、M99编制该零件的加工程序

O0001(主程序)

M03 S1

GOO X100 Z50

T0101(外圆车刀)

G00 X22 Z2

GO1 X18 F0.2 G99

Z-81

G00 X20

Z0

M98 P80002

G00 X100 Z50

M30

O0002(子程序)

G01 X18 F0.2 G99

G02 W-8 R10

G00 X100 W58

T0202 (切断刀,刀宽2mm)

G00 X20 W-60

G01 X0 F0.1

X20 F0.2

G00 X100 W50

T0101

G00 X20 W-50

M99

3 子程序在数控车床实训课中的应用

学生在课室上编程课时总会觉得枯燥乏味,很难理解和掌握子程序的编制及运用。因此我们要充分利用实训课的时间让学生自己动手编程和操作,进一步加深了解子程序的作用。由于学校的设备有限,在上数车实训课时,我们可以把学生分为两组。一组学生用单件加工的方法编程加工(上图所示的零件);另一组学生用子程序指令来编程加工(上图所示的零件)。两组同一时间开始,每组加工8件。加工完毕后,通过比较,看看哪一组做得更快、更好。让学生们自己作对比和总结,这样做不但使他们对M98、M99指令有更深刻的认识和理解,而且能够提高他们学习数控编程的兴趣,进一步提高他们手工编程的能力和动手操作的能力。

4 结语

综上所述,利用子程序编程加工在实际应用中,执行一次加工程序可以加工多个零件,这样既节省了系统资源,又节省了每个零件的加工时间,提高了加工效率。而且在数控车床实训教学中,通过这样简单实用的例子,让学生在“做中学,学中做”,最大限度地激发学生的学习主动性、积极性和创新意识,把实际的工作状态和课堂教学融为一体,从而加强了实训效果,提高了学生的综合素质。

参考文献

[1]GSK980TB车床数控系统.使用手册(第一版),2006.

篇3

引言

“汇编语言与微机原理”是计算机科学与技术专业的必修基础课程。该课程融合了汇编语言程序设计和微机原理与接口技术两门课程的内容,要求学生重点掌握汇编语言程序设计的方法和微型计算机系统各个部件的工作原理。掌握汇编语言是掌握微机原理的基础,因为实现和验证微机系统各个部件的工作过程需要用到汇编语言,并且更高层次的综合系统设计也离不开汇编语言。

汇编语言与微机原理课程中,汇编语言子程序设计这部分内容的知识掌握起到承上启下的作用。其“承上”的作用体现在:作为一个独立的模块,子程序设计涵盖之前所学的汇编语言的指令系统、伪指令、数据类型及三种基本控制结构(顺序结构、分支结构和循环结构)。其“启下”的作用体现在:①后续接口芯片的功能应用基本上都是以子程序的形式实现;②中断系统中的中断服务程序就是一种子程序,中断系统是微机系统中非常重要的组成部分,可以说不理解中断系统就不能理解计算机的工作原理[1],而掌握子程序设计是本文由收集整理理解和应用中断系统的基础之一;③子程序设计是开发大型程序的基础,对于培养编程能力十分重要[1]。因此,汇编语言子程序设计这部分内容无论在教学上还是在实验中都必须给予足够的重视。但目前鲜有文献涉及这方面的问题,本文针对目前汇编语言与微机原理课程中汇编语言子程序实验设计中普遍存在的问题给出相应的对策,并给出一个实验设计实例。lw881.com

1 实验设计存在的问题及对策

⑴ 实验学时安排不够。据粗略调查,大多数院校汇编语言与微机原理课程的实验学时为18个学时[1],有一些院校还附加一个课程设计。对于这18个实验学时普遍的分配方式如表1所示。

表1 汇编语言与微机原理实验项目及学时安排表

[类别\&项目\&学时\&汇编语言程序设计部分

(12学时)\&汇编语言上机过程及debug的使用\&2\&dos系统功能调用\&2\&三种基本程序结构\&6\&子程序\&2\&接口芯片部分

(6学时)\&可编程中断控制器8259\&2\&并行接口芯片8255\&2\&可编程定时/计数器8253\&2\&]

从表1可以看出,子程序实验仅安排了2个学时,学时太少,难以取得良好的训练效果,可以考虑将实验“dos系统功能调用”融合到“三种基本程序结构”中,腾出2个学时给子程序实验,有助于学生深刻全面的理解子程序的相关知识。

⑵ 实验内容“片面”。对于汇编语言子程序实验,大多数院校的实验内容只涉及到两方面的知识:①子程序的类型(近子程序和远子程序);②三种参数传递方式(寄存器传递、内存单元传递、堆栈传递)[2]。这并不全面,与子程序密切相关的知识应该还包含宏和中断服务程序,所以有必要在实验中安排相应的内容让学生理解子程序与宏的区别,以及如何把一个子程序“注册”为中断服务程序,然后通过软中断指令(int n)调用该程序的过程,这样做有助于后面对中断系统的学习。中断是学习汇编语言的重点、难点部分,能否真正掌握汇编语言对中断的理解和掌握至关重要,中断也是汇编语言的魅力所在[3]。

2 实验设计的一个实例

针对前面提到的问题,在此给出一个汇编语言子程序实验设计实例,主要内容如下:

⑴ 实验学时:4学时。

⑵ 实验目的:

① 掌握子程序的编写及调用方法;

② 掌握近子程序和远子程序的区别;

③ 掌握三种参数传递方式的差别;

④ 掌握子程序与宏的区别;

⑤ 掌握编写中断服务程序的方法以及通过软中断指令。

⑶ 实验内容:

① 编写一个近子程序实现将一个字节的数据以十六进制的形式输出,采用寄存器参数传递方式;

② 编写一个远子程序,功能与①相同,采用堆栈参数传递方式;

③ 变量str中存有一个以’$’作为结束符的字符串,编写一个子程序实现将str中所有的大写字母全部改为小写字母,采用内存单元参数传递方式;

④ 用宏实现①中的功能;

⑤ 编写一中断服务程序实现①中功能。提示:利用dos系统功能调用的35h号功能和25h号功能提取和设置中断向量,具体如表2所示。

表2 dos系统功能调用的35h号和25h号功能说明[4]

[功能号\&功能\&入口参数\&出口参数\&25h\&设置中断向量\&ds:dx=所设置中断向量的段基址:偏移量al=欲设置中断向量所对应的中断号\&无\&35h\&取中断向量\&al=欲取中断向量所对应的中断类型号\&es:bx=取得的中断向量的段基址:偏移量\&]

该实验设计实例特点鲜明,首先实验所要求完成的功能都是汇编语言中简单而又常用的功能,这一方面可以使学生不必花太多功夫在算法实现上,而把主要精力集中在子程序本身的语法上,另一方面实验中所完成的程序在后续的实验中可以直接调用,减轻了学生在后续实验中的负担,同时加强了各实验之间的有机联系。我们的实验内容涵盖了与子程序相关的各种知识,特别是子程序与中断服务程序的关系,这也是本实验设计的创新之处。

篇4

关键词:PLC;顺序控制;SFC;梯形图

中图分类号:TP312文献标识码:A文章编号:16727800(2012)007002601

作者简介:刘景东(1980-),男,山东菏泽人,鄂东职业技术学院机电工程系教师,研究方向为计算机控制技术、电气自动化生产线安装与调试;张莲花(1982-),女,山东菏泽人,鄂东职业技术学院机电工程系教师,研究方向为计算机控制技术、PLC教学;孙宝兰(1982-),男,山东菏泽人,鄂东职业技术学院机械工程系教师,研究方向为数控加工技术。

0引言

PLC编程语言很多,其中梯形图是PLC的一种主要编程语言,设计好梯形图程序是用好PLC的关键。对于一些简单的程序,许多人采用经验法,这种方法没有普遍的规律可循,具有很大的试探性和随意性。对于复杂的控制系统, 需要大量的中间单元来完成记忆、互锁、联锁等功能。由于要考虑的因素很多,它们往往又交织在一起,分析起来非常困难, 并且容易遗漏掉一些应加以考虑的问题。修改某一局部电路时, 可能对系统产生意想不到的影响。另外,用经验法设计程序较为复杂,同行也难以读懂,更不用说维修人员了, 这给PLC控制系统的维护和改进带来了很大的困难。本文采用SFC图进行PLC编程来解决以上问题。

1顺序功能图的基本约定

顺序功能图简称SFC图。所谓顺序控制设计就是按照生产工艺预先规定的顺序,在各个输入信号的作用下,根据内部状态和时间顺序,在生产过程中各个执行机构自动有顺序地进行操作。

SFC图主要包含3要素:状态、动作和切换。在画SFC图时,一定体现出这3个要素,这样才是一个完整的系统流程图,如图1所示。

说明:①SFC图的初始步用双方框来表示;②在SFC图中,步0状态S0.0转换步1状态S0.1时,必须保证T100成立,才能转移S0.1,同时必须保证S0.0状态复位,也就是说对下步状态转换时,不仅保证它们之间的切换条件成立,而且必须保证上一步的状态为开启状态,才允许切换;③每步的动作必须有当前步作为驱动条件,即S0.1—Q0.1、T101动作的输入条件。

2基于SFC图的二种编程方法

2. 1S/R切换编程法

案例一:设计3盏灯的依次循环闪烁控制,要求每盏灯亮1秒。根据控制要求,绘出本程序的SFC图,并用“切换编程法”编写梯形图程序。设计思路是建立子程序的设计方法,把单独具有某一功能的程序块放在一起,作为一个子程序来处理,分别建立SBR_0初始化、SBR_1步切换//定时、SBR_3步定时3个子程序,如图2所示。

2.2步进编程法

利用步进开始指令SCR、步进转移指令SCRT和步进结束指令SCRE,让每一步的负载驱动、转换条件和转换目标均在一步之内完成。针对案例一的控制要求,采用步进编程,如图3所示。

在使用顺序控制指令时应注意:①步进控制指令SCR只对状态元件S有效,为了保证程序的可靠运行,驱动状态元件S的信号应采用短脉冲;②当输出需要保持时,可使用S/R指令;③不能把同一编号的状态元件用在不同的程序中,例如,如果在主程序中使用了S0.1,则不能在子程序中再使用S0.1;④在SCR段中不能使用JMP和LBL指令,即不允许跳入或跳出SCR段,也不允许在SCR段内跳转,可以使用跳转和标号指令在SCR段周围跳转;⑤不能在SCR段中使用FOR、NEXT和END指令。

3结语 

PLC作为工业自动化的首选控制工具已广泛应用于各种场合。PLC控制设计的主要问题是编程,采用子程序设计思路,在主程序完成调用后,SFC流程图使程序结构清晰,易于阅读与维护,尤其是SFC 的使用可以大大减轻编程的工作量,缩短系统设计时间。

总之,我们在熟练掌握以上两种方法的基础上,应根据不同的顺序控制系统,并结合PLC的响应速度,系统的复杂程度以及设计的效率等因素,来选择合适的设计方法。

参考文献:

\[1\]胡汉文,丁如春.电气控制与PLC应用[M].北京:人民邮电出版社,2009.

\[2\]吕景泉.自动化生产线安装与调试[M].北京:中国铁道出版社,2011.

\[3\]冀建平.PLC原理与应用[M].北京:清华大学出版社,2010.

\[4\]周万珍,高鸿斌.PLC分析与设计应用[M].北京:电子工业出版社,2004.

\[5\]廖常初.PLC基础及应用[M].北京:机械工业出版社,2006.

篇5

【关键词】自编测井绘图程序 地质报告 应用

中图分类号: P24文献标识码:A 文章编号:

CorelDRAWGraphicsSuite是加拿大Corel公司的平面设计软件;该软件是Corel公司出品的矢量图形制作工具软件,这个图形工具给设计师提供了矢量动画、页面设计、网站制作、位图编辑和网页动画等多种功能。

该软件图像软件是一套屡获殊荣的图形、图像编辑软件,它包含两个绘图应用程序:一个用于矢量图及页面设计,一个用于图像编辑。这套绘图软件组合带给用户强大的交互式工具,使用户可创作出多种富于动感的特殊效果及点阵图像即时效果在简单的操作中就可得到实现——而不会丢失当前的工作。通过Coreldraw的全方位的设计及网页功能可以融合到用户现有的设计方案中,灵活性十足。

该软件套装更为专业设计师及绘图爱好者提供简报、彩页、手册、产品包装、标识、网页及其它;该软件提供的智慧型绘图工具以及新的动态向导可以充分降低用户的操控难度,允许用户更加容易精确地创建物体的尺寸和位置,减少点击步骤,节省设计时间。

一CorelDRAW12使用技巧

1、快速拷贝色彩和属性。在CorelDraw软件中,给其群组中的单个对象着色的最快捷的方法是把屏幕调色板上的颜色直接拖拉到对象上。同样地道理,拷贝属性到群组中的单个对象的捷径是在用户拖拉对象时按住鼠标右键,而此对象的属性正是用户想要拷到目标对象中去的。当用户释放按钮时,程序会弹出一个右键显示菜单,在菜单中用户可以选择自己想要拷贝的属性命令。

2、让渐变效果更平滑。渐变效果是图象制作过程中常用的一种效果,如何把这种效果的渐变层次处理得更平滑、更自然一点,就变得非常重要了。在CorelDraw中,获得平滑的中间形状的最好方法是以渐变控制物件作为开始,此渐变控制物件使用相同节点数量,并且是在相同的绘图顺序(顺时针或者逆时针方向)下建立的。这样做的话,需要通过修改第一个物件的拷贝来建立你的第二个物件。在第一个物件被选择后,在数字键盘上按+键来复制它。把复制件放在一边,选择Shape工具,并且开始重新安排节点。如果你需要在这儿或那儿添加额外的节点来制造第二个物件(在CorelDraw中,你能在曲线上双击以添加节点),请同时在第一物件中添加相对应的节点。如果你的形状有许多节点,你可以放置一个临时性如圆圈一样的标识器在第一物件中邻近节点的地方,也放置另一个标识器在第二物件中邻近对应的节点的地方。

3、快速输出结果。有人说,输出结果不就是单击一下“打印”按钮就可以了,其输出速度是不由人控制的。这话没错,不过在使用CorelDraw制作图象,在列印输出之前最好先检查一下页面,在非列印区的页面上是否存放了很多暂存的物件,这些物件在列印输出时,虽然没有实际被列印出来,但依旧会被计算处理,这样计算机就要多花时间来处理,为此我们只要删除掉这些暂存的物件,就能大大提高输出的速度了。

二、技术方案

1、数据库转换。“CLGIS煤田测井综舍解释程序“所生成的DAT数据文件,包含有涮井参数曲线、砂泥孔隙百分比曲线、岩性柱状等数据信息。经过加密处理,只能由该系统读取。CLGIS的DAT文件具有特廉的数据存储方式及繁杂的数据结构。据有关资料和实际操作可知,该文侔阻字节方式展开有以下特点:(1)按结构可分为两大部分,第一部分为数据头部分,定长数据,主要存放数据库名称、曲线条数、各曲线名称,曲线采样开始结束潦度、数据存放起始指针等。第二部分为数据存放区,该部分字节数由数据量的多少来确定。(2)按存取方式分类,为顺序文件。以ASCII码储存文本。同时用二进制形式、压缩格式存储教据。(3)数据依照深度顺序连续存储。没有深度数据和分隔标志。不论其文件类型,结构如何,如果我们知道其每一我们所需信息,在文件中确切的储存位置、存储形式,可以用控制二进制文件的方法,将其转换为可供任意诵用的文车格式。

2、砂泥孔隙百分比含量绘图。砂、泥、孔隙数据是百分比数据,只需绘出砂泥曲线即可。泥曲线的横向幅值应为*.DAT数据文件中砂与泥幅值之和。由于砂泥含量图形是不规则图形,砂泥符号须用充填方法,曲线绘图设计要将起止点闭合才能充填砂或泥符号。

测井岩性柱状绘图CI GIS解释系统所生成的岩性文件(LYER),依次包含有柱状起止深度、总层数;每层的起止深度、岩性代码(阿拉伯数字)。每一层数据用“0”隔开。每种岩性用VBA语言代码编写成子程序,以在绘制柱状岩性时调用。

自编数字测井绘图程序在地质报告中的应用

我们还编写了“编制测井曲线柱状图”、“绘制测井曲线对比图”;“绘制测井曲线煤层成果图”;“绘制地质、测井综合柱状图”等程序。其中“绘制地质、测井综合柱状图”,是直接调用地质野外记录的电子文档数据,绘制地质部分的岩芯描述,深度厚度,岩性名称等。本程序人机交流界面方便灵活、绘制的图件美观,绘图效率高,简单易学,实用性强,有一定的推广和实用价值。下图是“绘制地质、测井综合柱状图”程序在《红阳三矿深部勘探地质报告》中绘制的“红阳三矿深部1505号钻孔综合柱状图”的头尾部分图形。

四、以绘测井曲线成果图”程序为例,简介绘图程序结构

1、主控窗体。“绘测井曲线成果图”程序由两级窗体组成,第一级为主控窗,可分别点击“数据库文件转换”,“绘测井曲线”“绘砂泥孔隙百分比”、“绘测井柱状”按钮,就可显示第二级窗体,(图略)若需终止程序运行,点击“退出”按钮。

2、数据库转换程序窗体。当点击主控窗体“数据库文件转换”按钮时,则显示相应窗体,本程序设计每次可选择转换1~ 10 条曲线,“数据库文件路径”、“文本文件保存目录”等文本框输入的参数均可按所需改写。转换*.DAT 文件时,如果库中文件曾有被删除,则必须用CLGIS 系统的PACK 命令压缩数据文件后再转换。

测井曲线绘图窗体。当点击主控窗体“绘测井曲线”按钮时,则显示相应窗体。测井曲线绘图是整个绘图的关键,为适应对比图煤层成果图,等不同图件的需要,对曲线绘图控制比较细致。绘制灵活方便,基本能满足多种图件的绘制需求。

砂泥孔隙百分比绘图程序窗体。当点击主控窗体“绘砂泥孔隙百分比”按钮时,则显示相应窗体。同样,窗体文本框输入的参数可根据需要更改。程序运行结束后,将砂泥区分别用作好的砂、泥图形充填。

绘成果柱状图窗体。当点击控窗体“绘测井柱状”按钮时,则显示相应窗体。文本框内容修改完毕,点击“开始”按钮,程序将调用设计好的各种岩性子程序,按数据库解释时输入的岩性代码、绘制岩性柱状;岩性名称;底板深度;厚度。

参考文献:

[1] 孙宏利.测井曲线绘制系统[J]. 油气田地面工程. 2007(03)

[2] 杨克敬,毛宝安,刘军祥.自编测井绘图程序在地质报告中的应用[J]. 地下水. 2007(05)

[3] 胡菊艳,郭鸿.测井曲线在许疃井田煤岩层对比中的应用[J]. 中国煤炭地质. 2008(12)

[4] 常东,高占华,彭鸿鹄,张景考,靳彦彬.测井曲线在准东煤田大井矿区一井田煤层对比中的应用[J]. 中国煤炭地质. 2008(12)

篇6

办公室里,小宇耷拉着脑袋站在我面前。我历数他的不是。为什么不听话?小宇一句话也不说。这时,班长举着一件作品赶来:“快看,这是在小宇书包里找到的,这哪算书法作品?简直就是垃圾!”我一愣。“既然有作品,那为何不按时交上来?”我疑惑地问。“我,我怕,怕同学们笑话――”他的声音在喉咙里打转。可不是吗?字大小不一、歪歪扭扭的,笔画也很不到位。我翻开欣怡的书法作品,我说:“你和欣怡是好朋友,仔细瞧瞧吧!为何人家的作品能获得第一名,而你却把字写成这个样子?这就叫差距!”“因为,因为他的字是家长帮他写的――”小宇涨红了脸。我愕然了。“他的字是家长帮他写的,这是我亲眼看到的。欣怡还说让家长也给我写一幅,保证能得奖的,我没有要――”小宇慢慢地说。我疑惑地望着他。“我实在不想撒谎拿别人的作品冒充是自己的,那样即使得了奖我心里也不踏实的!老师,您不是经常教导我们要做一个诚实的人吗?我做到了……”我没想到会这样。我呆呆地望着小宇,心中五味杂陈。

我想起当初捧着作品时的赞不绝口,我说:“同学们真是太厉害了,恐怕老师也要苦练好多年才能达到这种水平呢!”我问,“是自己写的吗?”他们作谦虚状:是别人指导的!其实我心里明白:三年级软笔书法刚刚起步,在很多同学甚至连握笔姿势都成问题的情况下,别人又该如何“指导”呢――关于这一点,不光我明白,所有老师,包括作品展的组织者们也心中有数,可是大家都默许这么做。组织领导们愿意这样,因为届时可以向社会、向上级展示,这就是我校艺术教育成果,连小学三年级的软笔也有书法家的样儿;老师们愿意这样,别人都这样,如果你不这样,到时候眼瞅着大摞大摞的获奖都流向别的班级,那岂不是自讨没趣;家长们也愿意这样,别的孩子在“指导”后都拿出了像样的作品,那自己也得跟上,哪怕是让它变成“家长作业”又何妨;当然,孩子们更愿意这样,如果能轻轻松松得个奖,何乐而不为呢?于是,一年又一年,作品展上的软笔精品数不胜数。我想起上午作品展上,别说三年级,就连小学二年级,甚至一年级学生不是都有绝妙的书法作品展示吗?

可是,就偏偏有一个人不愿意这样――小宇。“对了,家长让我把这个交给您――”小宇说着,从衣兜里摸出一张小纸条――

老师,首先我替小宇向您表达深深的歉意――他总是与这个班级格格不入,以至于给您带来了不少麻烦。这次软笔书法作品展可能又让您不愉快。本来,我是可以承担责任帮助他的,可是他太固执,说什么也不让,还说如果拿着家长的作品参展那是欺骗老师。我一再劝他别人都是这么做的,可他就是听不进去,他一定要自己完成。他的作品完成得太辛苦,每写好一幅,他总是不满意,于是又重写一次,反反复复,他一连写了几十幅。昨天,他一直写到深夜,可是,早晨他还是没有勇气交上去……他一直都是这么特别,就说平时的家庭作业吧!有时候我们不在家,我们无法给作业签名。我们叮嘱他,让他代替我们签一下,可是他说那是欺骗老师,他不愿意那样,他要做诚实的孩子;还有前几天搜集花的事,我们一家人打着手电筒到小区里找花,结果一无所获。最后我们说去花店买几株花,可是他不愿意。他说宁可被老师批评,也不愿意欺骗老师……唉,他就是这样一个孩子,真拿他没办法!

篇7

充分赏识孩子的优点和进步

成就感是怎样形成的呢?人要看清楚自己,必须有一面镜子。而孩子也一样,他们需要一面镜子及时将自己的状况清楚准确地反馈给他们,即获得评价。积极的评价让他们充满自信,获得成就感,消极的评价让他们形成压力,丧失成就感。

父母需要做一个有心人,注意观察孩子在学习过程中的每一个进步,小进步小激励,大进步大奖励,并及时作出表示,或者是一个眼神,一句赞扬的话,一张表扬性质的纸条,等等。

为孩子提供充分的展现机会

个体的成就感,最根本的还是来自于对自我能力的认识。当孩子从实际活动中感受到自己能够很好地完成任务时,就能真切体会到一种”我能”的感觉。这种积极、愉悦的感受,即是获得成就感,父母可以通过组织一些户外活动,或者鼓励孩子适当参加社区活动等方式,为孩子提供展现自己能力的机会。另外,在孩子展现自己能力的过程中,也要善于引导他认识到自己努力的方向,避免演变为“伤仲永”式的炫耀。

对儿童的评价,要依据儿童的标准

对孩子的要求和给予孩子完成的任务要符合孩子的发展水平,循序渐进。例如,虽然孩子的曲目弹得不够流畅,但对于一个7岁的孩子来说,已经是很不错了。如果家长用成人的标准去评价、要求孩子,就必然导致指责多于表扬,并最终导致孩子的退缩甚至放弃。只有每次给予的任务都是孩子有所准备的,让孩子“跳一跳就能摘到苹果”,这样,孩子才会有信心。

注重过程,淡化结果,努力为孩子减少消极压力

篇8

对不起。我不能再保护你们了。

因为,我是冰族的二皇子。

我是樱空释。

梦魇•星旧•星移

当我来到刃雪城下时,王和一个拥有很长的红头发的人,已经倒在了地上。他们的身边,开满了红莲。 温暖如春。

我明白了。

那个人就是那个勇猛的火族皇子。

就是樱空释。

王把他所有的灵力都给了樱空释。他只剩下短短的,可怜的头发。樱空释的红头发间,也掺杂着一些银发。

可是没用了。他们都死了。

我绝望地走到他们面前。却惊人地发现,樱空释,他还没死,他还拥有微弱的生命。

火族精灵已经攻进了刃雪城。可是他们,望着倒下的樱空释,他们的首领,呆住了。没有了樱空释,他 们就没有了一切。

刃雪城内只剩下可怜的几个弱小的巫师和剑士。可在现在却是如此强大。因为没有了樱空释。火族精灵 们一个个倒下,倒下。我也用我所学会的最厉害的幻术,对抗他们。

他们马上就被我们消灭了。因为没有了樱空释。

谁都不会想到,是这些微不足道的巫师剑士,击退了火族的攻击。而灵力高强的月神、皇柝、潮涯、蝶澈,还有离镜和剪瞳,却全部灭亡。

多么可笑。就因为没有了樱空释。

我把王的遗体安葬在了皇宫的最底层。

望着此时的刃雪城,我想起了他的名字,黑色之城。

樱空释被我带到了雪雾森林里。

樱空释依然昏迷不醒。现在已经是圣战后的第三年了。

为什么会这样?难道,樱空释就跟凡世里的人们说的,植物人一样了吗?

我登上了祭星台。举起我的落星杖。

星象混乱,混乱。我用我所有的灵力去解答这个问题。

占星中,我不断地吐血,直到祭星台上溅满了我的血迹。

三天三夜的占星后,我终于知道了樱空释昏迷不醒的原因。

用隐莲复活的人,见到把他复活的人时,就会昏迷,昏迷。一直昏迷十年。十年之后,他将醒来。这时,他就会忘记他今生所经历的一切,只记得他的前世所发生的事情。

刃雪城里,现在已经没有了王。虽然它只是一个水晶宫殿,渊祭的玩具,但也不能没有人来管。这是王说的。在照顾樱空释的同时,我管理着这个几乎已经破灭的帝国。我告诉臣民们,他们的王已经死去。不过,王的弟弟,樱空释,在几年之后,便会回来,继承王位,管理这个帝国。他就是我们新的王。在他没有回来之前,请让我暂时管理。请让我做个暂时的王。

我统领着全城人们,指挥他们重建自己的家园。刃雪城一天天回复原来的样子……

在雪雾森林的一天天里,樱空释的红头发渐渐掉落。他的银白色头发渐渐露出来。他的瞳仁颜色渐渐变淡。

我知道,这意味着他的火系幻术正在渐渐消失。他的记忆正在渐渐消退。

他那精纯的幻术,就这样一点点不见。不见。多么的悲哀。

十年终于过去了。樱空释已经只剩下了银白色的头发,长长的,非常纯净。只有我知道,这是他的哥哥 ,王留下的。他的瞳仁也变得像王一样的清澈。像极了他的前世。没有人会相信,他是火族的人。他是冰族 的幻术师。本来就是。

我知道,他现在只记得,他是樱空释,幻雪帝国的二皇子。他只会用那些冰族的幻术,和 一点点火族的幻术。这个秘密只有我知道。

而这时,刃雪城已经如大战之前,一样的宏伟,壮观。人们也恢复了平静的生活,一切像什么都没发生过。

樱空释苏醒的那一天终于到了。

篇9

关键词: 病毒 进程间通信 程序自我保护

1.引言

在计算机和网络技术日益发展的今天,病毒这个字眼越来越多地出现在了媒体和人们的言论中。计算机病毒的发展必然会促进计算机反病毒技术的发展,新型病毒的出现向以行为规则判定病毒的预防产品、以病毒特征为基础的检测产品,以及根据计算机病毒传染宿主程序的方法而消除病毒的产品提出了挑战,致使原有的反病毒技术和产品在新型的计算机病毒面前无能为力。这样,势必使人们认识到现有反病毒产品在对抗新型的计算机病毒方面的局限性,迫使人们在反病毒的技术和产品上进行新的更新和换代。要打败对手,就要从了解对手开始,本文从模拟病毒隐藏性和寄生性的角度出发,以进程通信、进程快照、多线程等技术基础,利用Visual C++的MFC窗口界面设计了一组程序自我保护软件,经过测试实现了程序的稳定运行。

2.进程的概念

当一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序所使用到的内存和系统资源。因此定义进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。而进程则不同,它是程序在某个数据集上的执行,是一个动态实体。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤销,反映了一个程序在一定的数据集上运行的全部动态过程。

进程由两个部分组成:

(1)操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。

(2)地址空间。它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间,如线程堆栈和堆分配空间。

目前常用的操作系统都是并行的,就是多个进程可以同步运行,这时就会牵扯到进程间通信这个概念。所谓进程通信,就是不同进程之间进行一些“接触”,这种接触有简单,也有复杂。机制不同,复杂度也不一样。通信是一个广义上的意义,不仅仅指传递一些信息。举个例子来说明:比如说在使用IE上网时,你想将网页上的一段文字保存至你的电脑上,这时有一种简单的方法,就是复制粘贴。将你想保存的文字选中,然后将其复制,接下来将所复制的文字粘贴到.TXT文档中,这时就形成了两个进程之间的通信,这里的通信媒介是剪贴板。

3.线程的概念

为了对线程模式有一定的理解,我们可以将其想象为把一所屋子里的东西搬到另一所屋子。如果采用单线程方法,则需要自己完成从打包到扛箱子再到拆包的所有工作。如果使用单元线程模式,则表示邀请了好朋友来帮忙。每个朋友在一个单独的房间里工作,并且不能帮助在其他房间工作的人。他们各自负责自己的空间和空间内的物品搬运。如果采用自由线程方法,仍然邀请相同的朋友来帮忙,但是所有朋友可以随时在任何一个房间工作,共同打包物品。与此类似,房子就是运行所有线程的进程,每个朋友都是一个代码实例,搬运的物品为应用程序的资源和变量。

有了上面的例子,便能容易理解线程(Thread)是一个能独立于程序的其他部分运行的作业,是进程的一个实体,是CPU调度和分派的基本单位。线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。一个线程可以执行应用程序代码的任一部分,包括正在由另一线程执行的代码。

线程由两个部分组成:

(1)线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。

(2)线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量。

线程属于一个过程,操作系统为每一个运行线程安排一定的CPU时间――时间片,线程是操作系统分配CPU时间的基本单位。系统通过一种循环的方式为线程提供时间片,线程在自己的时间内运行,因时间片相当短,因此,给用户的感觉,就好像线程是同时运行的一样。如果计算机拥有多个CPU,线程就能真正意义上同时运行了。

4.进程与线程的关系

根据操作系统的定义,进程是系统资源管理的最小单位,线程是程序执行的最小单位。进程是不活泼的,进程可以理解为是线程的容器。若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,此线程负责执行包含在进程的地址空间中的代码。单个进程可能包含若干个线程,这些线程都“同时”执行进程地址空间中的代码。每个进程至少拥有一个线程,来执行进程的地址空间中的代码。当创建一个进程时,操作系统会自动创建这个进程的第一个线程,称为主线程。此后,该线程可以创建其他的线程。

线程是属于进程的,它没有自己的独立的数据地址空间,线程运行在进程空间内,因此线程的切换速度比较快。同一进程所产生的线程共享同一内存空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其他线程共享虚地址空间、全局变量,以及该进程所拥有的全部资源,包括打开的文件、信号标志及动态分配的内存等。但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。

线程有点像进程身体内的细胞,我们通常听过多进程多线程,单进程多线程。这就是说,一个系统内有几个进程,如果进程是多个,就是多进程的,如果进程内有多个线程,那就是多线程的,多进程多线程的系统比单进程多线程的系统速度慢,但是可靠性高。

5.程序的设计与实现

程序的自我保护是一个大的概念,其中有多种方式和手段来实现自身的保护。比如隐藏、自我复制、注册为服务,等等。我们实现的程序自我保护实际上是一个相互监督的过程。其中包括了程序之间的监督和报警,监听程序的隐藏与保护。

5.1监督

所谓监督,是利用进程枚举的方法,让所有程序在运行同时不停地对进程列表进行快照,并检查目标进程是否存在的过程。

在Windows环境下可以通过调用ToolHelp API函数来达到枚举系统进程的目的。微软的Windows NT开发小组因为不喜欢ToolHelp函数,所以没有将这些函数添加给Windows NT,所以开发了自己的Process Status函数,就是PSAPI。但是后来微软已经将ToolHelp函数添加给了Windows 2000。ToolHelp32库函数在KERNEL32.dll中,它们都是标准的API函数。

ToolHelp32库中有各种各样的函数可以用来枚举系统中的进程、线程,以及获取内存和模块信息。其中枚举进程只需用如下三个的函数:CreateToolhelp32Snapshot()、Process32First()和Process32Next()。

使用ToolHelp32函数的第一步是用CreateToolhelp32Snapshot()函数创建系统信息“快照”。这个函数可让你选择存储在快照中的信息类型。如果你只是对进程信息感兴趣,那么只要包含TH32CS_SNAPPROCESS标志即可。CreateToolhelp32Snapshot()函数返回一个HANDLE,完成调用之后,必须将此HANDLE传给CloseHandle()。

接下来是调用一次Process32First函数,从快照中获取进程列表,然后重复调用Process32Next,直到函数返回FALSE为止。这样将遍历快照中进程列表。这两个函数都带两个参数,它们分别是快照句柄和一个PROCESSENTRY32结构。

调用完Process32First或Process32Next之后,PROCESSENTRY32中将包含系统中某个进程的关键信息。它的具体内容如下:

typedef struct tagPROCESSENTRY32{

DWORD dwSize;

DWORD cntUsage;

DWORD th32ProcessID;

DWORD th32DefaultHeapID;

DWORD th32ModuleID;

DWORD cntThreads;

DWORD th32ParentProcessID;

LONG pcPriClassBase;

DWORD dwFlags;

TCHAR szExeFile;

DWORD th32MemoryBase;

DWORD th32AccessKey;

}PROCESSENTRY32;

其中进程ID就存储在此结构的th32ProcessID。此ID可以被传给OpenProcess()API以获得该进程的句柄。对应的可执行文件名及其存放路径存放在szExeFile结构成员中。在该结构中还可以找到其他一些有用的信息。

5.2报警

这里的报警就涉及了进程间通信的概念。本文中涉及的进程间通信是用剪贴板的方法,剪贴板在我们实际应用中是用得比较多的,它实际上是系统维护管理的一个内存区域,当我们在一个程序中复制数据的时候,实际上是将这些数据放入了内存,相反,当我们在另一个程序中粘贴数据时实际上是从内存取出数据。下面介绍一下使用剪贴板时的主要函数:打开剪贴板OpenClipboard(),不管是对剪贴板的读还是写,都要首先调用此函数,以判断是否可以对剪贴板进行操作。此函数是BOOL型的,如果调用成功就返回非零,否则返回零。清空剪贴板EmptyClipborad(),每次对剪贴板的写入操作之前,都应该调用此函数,这个函数的作用不仅是清空剪贴板,而且起到获得剪贴板的使用权的作用。同样,这个函数也是BOOL型的,如果调用成功就返回非零,否则返回零。对剪贴板写入SetClipboardData(UINT uFormat,HANDLE hMem),这个函数有两个参数,第一个参数用来表示写入剪贴板数据的格式,第二个参数接收一个句柄值,在这里它接收一个指向内存对象的句柄,这个内存对象中存放着准备写入剪贴板的数据内容。在调用SetClipboardData(UINT uFormat,HANDLE hMem)之前还需要调用GlobalAlloc(UINT uFlags,SIZE_T dwSytes)这样一个函数,它专门用来为将要写入的数据分配一块内存空间。这个函数接收两个参数,第一个参数表示如何来分配内存空间,这里我们将它设置为GMEM_MOVEABLE,表示动态分配内存。第二个参数是表示分配内存空间的大小。GlobalAlloc(UINT uFlags,SIZE_T dwSytes)返回一个句柄,我们无法使用句柄来间接的将数据放入内存,这时就需要调用另一个函数GlobalLock(HGLOBAL hMem),这个函数获得一个内存对象的句柄,将这块内存加锁,返回一个指针,这时我们就可以给指针所指向的这块内存写入数据了。这个函数使用一个内存计数,计数器基数为零,每调用一次计数器加一,所以每调用一次的同时还需要调用另外一个函数GlobalUnlock(HGLOBAL hMem)来给计数器减一,相当于取消对这块内存的锁定。本文设计的程序实现报警功能就是在枚举进程之后发现目标进程被终止,从而在剪贴板中写入信息的过程。

5.3监听

所谓监听,就是报警的反方向,即从剪贴板中读出信息。从剪贴板读取数据的函数GetClipboardData(UINT uFormat)。这个函数只接收一个参数,参数指定读取的格式。读取信息之后,我们还要对信息进行if判断,如果信息是我们预留的某个进程被结束的话,我们就启动保护措施。

5.4保护和隐藏

这里的保护是指监听程序对其他程序的保护,方法非常简单,只需要利用WinExec函数来实现目标进程的启动就可以。而隐藏是指监听程序自身的隐藏,只要在OnPaint()函数里调用ShowWindow(SW_HIDE)函数就可以了,同时将监听程序命名为smss,就可以避免其被强行终止。

6.结语

本文中程序的设计是模仿病毒的一些特性而做成的。它实现了程序的隐藏,并且利用了系统的漏洞实现了不被终止。对我们了解病毒的特征提供了良好平台,同时对一般程序自我保护的设计有很好的现实意义。

参考文献:

[1]吴倩.一种进程通信劫持技术的实现与应用研究[J]中央民族大学学报(自然科学版),2007,(1).

[2]徐江峰,张战辉,杨有.基于VC~(++)的进程通信技术研究[J]计算机科学,2007,(9).

[3]郭江平.Windows进程通信技术分类[J]电脑编程技巧与维护,2010,(2).

[4]冯德旺,兰建容,宁正元.基于VC的剪贴板应用程序[J]计算机应用研究,2002,(7).

篇10

摘 要:针对地方院校程序设计课程存在的问题,在广泛评估学生差异的基础上,阐述该课程常规教学模式的缺陷,提出具有多个教学目标的“自分类教学”教改方案。目前该课程被设置成双平台教学系统,其教学效果经权威考试评价,都要优于同期未试系统,教学对一部分学生无效的状况得到改善。

关键词:自分类教学;差异;平台

作者简介:朱骐,男,副教授,研究方向为计算应用与教学;陈瑾,女,讲师,研究方向为计算应用与教学;张宏,男,讲师,研究方向为计算应用与教学。

程序设计课程是我国高校理工科专业普遍开设的一门公共基础课程,在经历二十多年的发展后,课程的模式已经基本固定,但课程的魅力反而正在失去。近年各种质疑接踵而来,如该课程“学以致用”吗?“学而能用”吗?盐城工学院计算中心关于“大学计算机”课程的毕业调查显示,这些质疑来自各方,有毕业生,也有其他学科教师,另外,在校学生学习热情普遍降低,这些情况在地方院校表现得非常明显。

笔者认为要挽回目前的颓势,必须重新认识该课程,引入更符合学生实际、操作性更强的自分类教学模式。自分类教学与在特殊教育中经常采用的分类教学相似,但它更尊重学生的自主性。

1 自分类教学的科学依据

分类教学源于学生差异,自分类教学同样如此。

1.1 学生差异的普遍性及评估

1.1.1 在校生的差异

资料显示,目前人们讨论学生差异,多针对于基础教育和职业教育。而对于高等教育中的学生差异,比较完善的论述很少,局部性的讨论偶见,且多着眼于人格、人生观、城乡等方面差异[1-2]。可是,笔者在教学实践中强烈地感受到高等教育大众化以来,地方院校普通本科生的差异正在逐年扩大,这深刻地影响着教学活动与教学效果。

在学习程序设计课程时,学生表现得最强烈的差异可以归纳为以下几方面。

第一,能力差异。程序设计课程有三个特点。其一,逻辑性强,需要数学知识和各种常识支持;其二,实践性强,需要高强度的上机练习;其三,语法性强,需要在理解基础上强化记忆。因此逻辑能力、实践能力、记忆能力俱佳的学生在学习这门课程时将会得心应手。可是客观上学生的能力发展并不一致,能力差异既反映在能力综合水平上,也反映在能力结构上;随着进入高校就读的学生一年年地增加,他们的能力综合水平整体呈下降趋势,能力结构存在缺陷的学生也越来越多。

第二,兴趣差异。“程序设计”是一件新事物,开始学习时,多数学生对它都有一定兴趣。可是从教育心理学来理解,这种兴趣属于间接兴趣,即对学习结果有所期待,它需要转化为直接兴趣才有意义。而直接兴趣是在教学过程中产生的,是对所学材料的兴趣;随着其他差异造成学习效果的不同,一个人的直接兴趣会朝着两个方向变化:一个方向是激发、维持、增长;另一个方向是未产生、或无法维持、衰退;直接兴趣差异因此出现,反过来它再影响学习效果,形成循环。

第三,目标差异。地方院校学生学习目标差异近年来也在扩大,一方面一部分学生积极进取,学习上有所追求;另一方面校园内广泛存在“心不在焉一族”,课堂教学对之没有效果。从宏观来看,目标差异是当前地方院校教学活动大环境的构成因素之一,从中观、微观来看,它又是一门具体课程间接兴趣差异的主要来源。

面对较大差异而无对策,最终必然造成优生、中等生和差生的全面分化。NCRE①二级是一种比较权威的考试,难度适中,可借用它来评估学生的分化。评估标准不妨设定为:首次参加考试即取得注有“优秀”字样合格证书的是优生,取得一般合格证书的是中等生,而没有取得合格证书的是差生。如果一个地方院校NCRE二级通过率位于同类院校上游水平,一般首次通过率会在60%~70%,按照上面的设定标准,差生比例将高达30%~40%!可见在差异背景下常规教学模式效率不理想。

1.1.2 毕业生的差异

笔者曾经对70位从事技术工作的毕业生进行问卷调查,考察程序设计知识的应用情况,调查显示毕业生可以分成三种人群。

第一类人群:由需要应用并能应用的人组成;

第二类人群:由有机会应用但没有能力应用的人组成;

第三类人群:由没有机会应用的人组成。

三类人群数量比例大约是5:8:7,能够做到学以致用的只占25%,如果再考虑应用的程度,则能做到深度应用的毕业生将少之又少。这一比例也说明了:常规教学模式存在缺陷。

1.2 常规教学模式的缺陷

综上所述,常规教学模式对地方院校普通本科学生存在着不适用性,追根溯源,它的缺陷有两个。

第一,程序设计课程多年来一直都采用合班教学,一个教师面对的学生通常有几十到一百多个。如果集体中只有个别差生,教师会有精力依靠因材施教来解决他们的问题,但是实际情况并非如此,差生人数往往很多,在学进度下,差生群体问题根本无法通过因材施教来解决。因材施教在合班教学中缺乏可操作性。

第二,长期以来,理工科专业程序设计课程的教学目标是培养(业余)程序员,教学活动一厢情愿地追求编程能力的培育。由于没有考虑学生的客观差异和主观需求,因此也就没有区别教学,结果欲高而不就,反而落得许多学生在该课程学习上一无所成。一方面,差生和部分中等生由于技术领悟力不足而未能登堂入室;另一方面,该课程在思维方式上对其他课程、学生未来也没有任何给予。单一教学目标与分化的学生之间存在着矛盾。

1.3 教学目标需要多元化

从尊重学生主体地位出发,解决问题必须从改革教学目标入手。

首先,应该改变观念,承认学生差异的普遍性及客观存在性;承认了这一点,就意味着差异教学的必要性;否认这一点,则有效教学可能沦为空谈。多种多样的差异造就教学的生态环境,差异具有潜在性、不确定性和丰富性[3],这些特征保障了教师开展创造性教学活动所必须的可用资源[3]。

其次,加强学生的主体地位,溶入多元理念。常规教学目标适用于综合能力较强、兴趣较大的学生,但是如果学生的某些能力不足、或学习目标未及、或学习兴趣未至,教学目标可以退一步,把课程作为通识教育的一个平台,致力于使学生利用不同的思维方式发展思辨能力。课程拥有多个教学平台,对应于不同教学目标,让学生自由选择,这就是自分类教学。因为学生拥有了相当的自,自分类教学相比特殊教育中的分类教学有更大的灵活性;与分层教学(分层操作通常采取学习水平分层,而不是自愿,因此对学生心理易造成不良影响[1])也完全不同。自分类教学不是在课堂教学中才承认差异,而是在课堂教学前就承认差异,预见性、针对性比自然分材教学也要高。

2 自分类教学的操作思路

2.1 双平台教学系统

程序设计课程拥有三到五个教学平台,因材施教的可行性将极大提升,可取得非常好的教学效果;但是兼顾资源配置,并考虑积累经验也是实验的目的之一,所以为课程设置下面两个教学平台是比较合适的:能力型平台、通识型平台。

教学平台不同,价值取向、内容重点随之不同。能力型平台的算法逻辑性特征明显,以求得对实际问题的技术性解决能力;而通识型平台的基础逻辑性特征明显,立足于掌握编程知识内含的思维方式。

2.2 学生拥有自

人才培养是高校与学生在充分沟通的基础上双向选择、共同适应、双向努力的过程,学生在教学中必须拥有一定的自,即对教学过程中那些事关自己成长过程、职业基础、前途命运的教学要素享有一定程度的知情权、参与权、选择权。程序设计课程改革中学生“三权”应有如下含义。

知情权:学生首先应该了解课程的基础价值、职业价值;其次应该知道为什么要设立两个教学平台,以及它们在教学目标、内容特征、教学方式上的差异。教师有义务告知学生课程的这些基本信息。

参与权:学生在学习过程中的要求、学习结束后的意见应被尊重并处理。

选择权:在知情权得到保障情况下,学生根据自己意愿自由选择平台,在教学过程中可以调换平台。

2.3 能力型平台方案

在教学目标上追求应用能力发展、培养业余程序员。能力的核心是“四会”,所谓“四会”就是:会思考、会运用、会借鉴、会查资料。会思考就是掌握分析方法,能够举一反三;会运用则是掌握实现方法,通过学习与模仿,能够创新;会借鉴指的是有能力利用一切已有的、成熟的或不成熟的设计成果,来构建自己的系统;会查资料指的是有能力通过查阅各种资料来解决实际问题,并且查阅资料成为一种工作习惯。

在教学内容上强调算法逻辑性特征,围绕实际问题开展教学。这是因为:实际问题往往规模大,需要多方把握,能拓宽视野,提高掌控全局的能力;实际问题也比较真实、直观,学生能找到应用价值,易产生兴趣和成就感;实际问题伸缩性强、挖掘潜力大,能锻炼学生的创新能力。

教学方式采用任务驱动。在计算机领域的一些课程教学中,任务驱动方式的教学实验已进行了十余年,不乏成功的案例[4]。“四会”能力培育必须依赖实践,教学内容与实践内容是同一的。任务驱动尤其适用于实践途径的能力型教学目标,每一个实际问题都通过任务驱动方式在实践中加以解决。任务驱动的教学必须达到:第一,合理设计任务,激发学生兴趣,将驱动学生的外动力转变成学生自己内在的求知欲望;第二,细节因问题而存在,无关当前问题的细节可以暂时忽略,这样抓大放小的策略有利于学生快速入门,也能保护学生的初始兴趣;第三,通过阅读程序逐步进入了发现问题、解决问题的学习模式。

开卷考试。考试内容同样也立足于实际问题,是设计型的;考试用时要宽松,让学生有充裕的时间思考、规划、设计与调试;在考试中,允许查阅资料和借鉴已有成果;在评分上向创新倾斜,让考试更像是一场创新竞赛。

2.4 通识型平台方案

教学的主要目标是让学生掌握课程特有的思维方式。“在通识教育模式下,学生需要综合、全面地了解人类知识的总体状况(包括主要知识领域的基本观点、思维方式和历史发展趋势)[5]。”计算机科学是新兴科学,其知识堪称人类最新思维成果。作为计算机科学最重要的基本课程,程序设计思维方式内涵丰富,向学生介绍这些思维方式,并不直接为学生将来的职业活动做准备,只是要提高科学素养。

教学内容强调基础性逻辑特征。旨在宏观把握课程的基础原理、中观掌握课程的基本方法,至于微观的技术细节则适当了解。因此理论教学只求逻辑通晓,不求技术深入;实验教学只求简单验证,不求复杂应用。

在教学方式上,以概念为中心开设专题,强调讨论。具体做法是:第一,将课程分解成若干专题,每一专题针对于一个或一组宏观或中观问题,专题之间通过逻辑演进;专题不是任务,任务是实际案例的分解,而专题是概念体系的分解。第二,采用“征引加讨论”的教学手段,即通过与日常生活中的事理进行类比,把抽象的逻辑搞清楚,它应该由教师先做,然后再交给学生讨论,集思广益。第三,可广泛采用观摩方法实施案例教学,这样既能深化理解,又能激发兴趣。但是观摩一定要控制细节讲解,否则便会陷入技术的泥流之中,违背教学目标。第四,在各专题的实验教学中,验证也应该围绕逻辑,技术细节的展开要适可而止。

考试内容要体现基础逻辑性高这一特征。

3 自分类教学实验

3.1 实验步骤

以我校化生学院2008级5个班为实验班级,参与学生155人,任课教师3人。工作周期分为五个阶段:宣讲、试听、选择、教学、评价。

宣讲:教师告知学生关于课程的基本信息;试听:提供10节课的时间让学生试听,权衡比较,分析自己的趣向和适应性,教师也根据实际情况提供参考意见;宣讲、试听都是学生知情权的落实。选择:让学生选择一个平台;教学:开展教学活动,此时学生依然能够重新选择平台;选择与教学都是学生选择权、参与权的落实。评价:分为二步,首先,组织校内考试,检验教学效果;其次,与校外考试接轨,组织能力型平台的学生参加NIT②C类模块考试、通识型平台的学生参加NCRE二级考试,通过与未实验教学系统的对比,取得教学效果的权威评价。

3.2 实验情况及效果

两个平台实验情况见表1。综述如下:第一,能力型平台“最终人数”比“选择人数”减少8人,退出的原因是不适应该平台的学习强度与节奏。第二,能力型平台NIT(C类VB模块)考试成绩优异,为省内历年罕见,有关学生普遍反映收获大、信心足。第三,通识型平台NCRE二级考试一次通过率较高,优于同期未试教学系统(同期全体普通本科生一次通过率为63.1%)。第四,笔者必须提示:通识型平台促进贯通,只能依靠潜移默化,远期成果更具有价值,但考试不能反映出这一点。第五,在各平台的实验教学中,都广泛开展了互助学习,能力型平台还开展了研究性学习活动,“共振效应”普遍显现,有力地推动了教学。

4 结语

在学生差异较大的背景下,地方院校程序设计课程常规教学模式已经暴露出不适用性,从尊重学生的主体地位出发,多个教学目标的自分类教学模式势在必行。经权威考试评价,双平台教学系统的各平台教学效果都要优于同期未试系统,教学对一部分学生无效的状况得到了改善。

参考文献:

[1] 周光明,彭. 尊重差异因材施教构建“和谐”教学新模式[J]. 中国大学教学,2007(6):69-71.

[2] 钱军平. 论基于生源差异的高等教育有效质量保障策略[J]. 河北科技大学学报:社会科学版,2009(1):89-95.

[3] 程向阳. 论学生差异资源的教育学价值[J]. 当代教育科学,2005(15):14-17.

[4] 祁云嵩,华伟. 任务驱动式教学方法应用研究[J]. 教材与教法研究,2008(12):119-120.

[5] 陈向明. 对通识教育有关概念的辨析[J]. 高等教育研究,2006(3):64-68.

The Self-Assorting Teaching of the Programming Course

ZHU Qi, CHEN Jin, ZHANG Hong

(Computer Center, Yancheng Institute of Technology, Yancheng 224002, China)