程序编程十篇

发布时间:2024-04-24 23:57:28

程序编程篇1

关键词宏程序;编制;变量

中图分类号tH13文献标识码a文章编号1674-6708(2011)49-0224-02

宏程序用变量代替真值,宏程序编程员可根据当前应用给变量赋值,变量不仅使宏程序更灵活,也带来很多方便,下面我以定位销为例说明如何编写宏程序。如图;

要加工一个零件,首先要仔细审阅它的零件图,我们一看上面这张图纸,便知道它不仅仅是单个零件的图纸,他要求加工4个销,所有的尺寸和材料都已给出。零件的设计者选择了一张图纸而不是四张单独的图纸来描述。从某种意义上来讲,设计者已经把这个方案看做一类零件,这和编程员一样。所有4个销相似,它们有几个共同特征。图中标出了7个尺寸,其中2个是固定的,其它5个是不一样的。

2宏程序目标

编写宏程序最重要的目标是设计出能够用一个程序加工出这个系列中的4个销的程序,因此只通过改变主程序中G65自变量(变量)就可完成加工。

3确定实际刀具路径

第一步:快速靠近工件进行表面切削;

第二步:离开工件右端面一点距离作为循环起点;

第三步:快速退到G71循环起点;

第四步:粗加工成型,留有合适的余量;

第五步:用G70完成加工。

4编写标准程序并确定其中的变量

因为这4个零件的程序相似我们只编第一个销的程序(销-001)其程序如下;

G99t0101m03S600n10G01X24.0Z-1.0F0.1

G0X53.0Z0.0m08n11Z-23.0R3.0

G01X-1.8F0.1n12X46.0R-2.0

G0Z3.0n13Z-47.0

G42X51.0n14X54.0

G71U2.5R0.1F0.3n15G70p9Q14

G71p9Q14U1.5w0.125G0G40X100.0Z50.0

n9G0X16.0m30

通过以上程序可以看出来,用下划线标出的数值即为加工这4个零件时变化的数值,我们把它们全部设为变量或自变量,需要计算的将产生组合变量输入,即我们编写nC程序时如何计算的这个数值,按规定计算的顺序把公式代入即可,系统会自动计算。

变量表;4个零件的自变量和变量赋值

零件尺寸a尺寸B尺寸C尺寸D尺寸R

a=#1B=#2C=#3D=#7R=#18

销-001a23.0B44.0C24.0D46.0R3.0

销-002a25.0B46.0C28.0D48.0R2.0

销-003a19.0B45.0C21.0D47.0R4.0

销-004a16.0B40.0C25.0D49.0R3.0

5使用变量后的程序段

我们把以上程序段中带有下划线的数字,用以上表中的变量来代替,其程序段如下:

n9G0X[#3-2*1-2*3]n12X#7R-2.0

n10G01X#3Z-1.0F0.1n13Z-[#2+3.0]

n11Z-#1R#18

我们把这些带有宏程序特征的标准程序编写成真正的宏程序。

编写后的程序如下:

主程序:G71U2.5R0.1F0.3

G99t0101m03S600G71p9Q14U1.5w0.125

G0X53.0Z0.0m08n9G0X[#3-2*1-2*3]

G01X-1.8F0.1n10G01X#3Z-1.0F0.1

G0Z3.0n11Z-#1R#18

G42X51.0n12X#7R-2.0

G65p8021a23.0B44.0C24.0D46.0R3.0n13Z-[#2+3.0]

G0G40X100.0Z100.0n14X54.0

m30n15G70p9Q14

子程序:o8021m99

6最终的宏程序

这样我们便把第一个零件的宏程序编出来了,但这不是我们的最终目的,而我们所需要的是编写一个程序把4个零件都加工出来。在宏程序o8021中,对不同的销,修改变量赋值的唯一方法是在程序段n8中的G65命令。这是一种很常见的方法,但不是最好的方法。更好的方法是将4种定义变量都包括在一个主程序当中,然后只通过修改一个变量号(在程序的开头)来选择要加工的零件(销),这个目标可通过在主程序中使用iF函数包含4个定义来达到:

(销001-销004加工的程序)

n1#33=1(选择零件;1=0012=0023=0034=004)n20Goto22

n2iF[#33Gt4]Goto991n21G65p8021a16.0B40.0C25.0D49.0R3.0

n3iF[#33Lt1]Goto991n22G0G40X100.0Z100.0

n4G99t0101m03S600n23Goto999

n7G0X53.0Z0.0m08n991#3000=991

n8G01X-1.8F0.1n992#3000=991

n9G0Z3.0n999m30

n10G42X51.0子程序o8021;

n11iF[#33eQ1]Goto15G71U2.5R0.1F0.3

n12iF[#33eQ2]Goto17G71p9Q14U1.5w0.125

n13iF[#33eQ3]Goto19n90G0X[#3-2*1-2*3]

n14iF[#33eQ4]Goto21n100G01X#3Z-1.0F0.1

n15G65p8021a23.0B44.0C24.0D46.0R3.0n110Z-#1R#18

n16Goto22n120X#7R-2.0

n17G65p8021a25.0B46.0C28.0D48.0R2.0n130Z-[#2+3.0]

n18Goto22n140X54.0

n19G65p8021a19.0B45.0C21.0D47.0R4.0n150G70p9Q14

m99

以上便是加工4个零件的完整程序,通过程序可以总结出宏程序的特征:

1)需要考虑安全事项,选择正确的刀具路径;

2)仔细选择变量赋值;

3)使用内部计算而不是定义变量;

4)包含的信息与报警。

抓住了编制宏程序的特征,对编写宏程序来说有很大的帮助,这是编写宏程序重要的一面。但对任何实际应用程序来讲,其首要的和主要的目的是开发基本程序的核心,要尽可能运用最短的程序来实现要加工的目标。编写出最简洁最实用的宏程序来。

参考文献

[1]彼得・斯密德.FanUC数控系统用户宏程序与编程技巧.化学工业出版社,2008,7.

程序编程篇2

关键词:ZeromQ;多线程编程;阻塞;无锁编程

1、多线程编程的挑战

自摩尔定律提出以来,CpU主频一直以指数级的速度在增长。为了充分利用硬件性能,改善程序体验,软件业广泛采用了多线程编程技术。但是由于多个线程是动态运行的,使得这类程序的编写和调试异常困难[1-2]。与单线程程序相比,软件开发人员往往需要付出数十倍的精力。近几年,随着CpU主频逐渐逼近物理极限,芯片工业逐步向多核发展,但新增加的CpU性能无法全面发挥出来。除了像erlang[3]这样的少数语言外,绝大多数编程语言,包括C和C++,并没有提供对于并发编程的支持。在传统多线程编程技术中,采用加锁以及信号量的方式来实现线程同步。这样的方式存在如下一些问题:(1)编写以及维护这类代码代价非常高昂。根据经验估算,编写多线程代码的成本是编写单线程代码成本的10~100倍;(2)这类方法很难扩展到更多线程。大多数多线程应用使用2个线程(例如典型的生产者消费者线程),有一些会用到3个或者4个。这表明对于一个有着16个或者更多核心的CpU,其硬件性能没有充分利用起来;(3)即便代码是多线程的,它往往也不能受益于多核CpU,因为不同的线程间经常彼此阻塞。开发者很难发现精巧的多线程程序实际上已经退化成了一个单线程;(4)即便在最理想的情况下,应用程序被设计成避免大范围使用加锁操作,还是很难扩展到超过10个核心的CpU上。随着线程数以及CpU核数的增加,硬件资源的利用率会急剧下降;(5)线程被换入CpU中会引发程序的上下文切换,以及CpU缓冲区中的内容失效,这也将极大地影响整个程序的执行效率。为了避免加锁导致的阻塞,最新的编程理论提出了无锁算法来实现数据共享。该算法需要用到硬件指令集中的“比较以及交换原子操作”[4]来避免加锁。为了达到无锁编程的准确性以及安全性,程序员需要具备硬件以及编译器方面的知识背景。无锁编程技术虽然提高了软件性能,但是其高度复杂性使得软件开发过程充满了挑战,所以这样的技术目前并没有获得广泛的使用。

2、ZeromQ消息中间件技术

ZeromQ是由imatix公司开发的一款开源的消息中间件。最初的设计目标是在股票交易系统中实现极快的数据交换,所以性能是设计的首要考虑因素。ZeromQ看起来像是一套嵌入式的网络链接库,但工作起来更像是一个并发式的框架。它可以在多种协议中传输消息,如线程间、进程间、tCp、广播等。开发人员可以据此构建多种连接模式,如:-订阅、任务分发、请求-应答等。它对几乎所有主流语言均可支持,并能在几乎所有的操作系统上运行。ZeromQ目前已经在很广泛的范围内获得使用,包括:金融服务、游戏开发、嵌入式系统、科学研究,以及航天系统中。为了达到高性能,ZeromQ采用了两项核心技术来实现高效的消息传输,分别为并发模型和无锁队列。

2.1ZeromQ的并发模型

为了充分利用CpU的多核特性,ZeromQ被设计成完全避免使用锁,从而使得每个线程能够全速运行。线程之间的通信采用基于事件的异步消息发送模式,即经典的参与者模式。它为每一个CpU核启动一个工作线程,从而避免了当两个线程共享一个核时所做的线程上下文切换操作(见图1)。ZeromQ的内部对象紧密地与特定工作线程绑定到一起。这样就不需要使用任何临界区、锁,以及信号量等同步操作。并且每个ZeromQ内部对象与特定的CpU核也是关联的,这样也避免了上下文切换,有效利用CpU缓存区机制。这种设计避免了传统多线程开发所面临的诸多问题,因为线程之间不再需要共享对象。不过在该设计中,需要提供一个调度器。调度器采用基于事件驱动的方式管理ZeromQ内部对象,从而避免了在整个循环中去检测对象,也避免了对象长时间地占用CpU这种情况。这样,整个系统工作在异步模式下,所有的对象以状态机的方式运行。

2.2ZeromQ的无锁队列

为了保证并发操作,ZeromQ使用了无锁队列在用户线程以及ZeromQ工作线程之间交换数据。无锁队列中用到无锁算法,该算法不依赖操作系统所提供的锁以及信号量等机制实现数据共享,但是需要依赖CpU提供的原子操作。无锁算法本质上并不是“无锁”的,只是它的锁是在硬件层面上实现。此外,无锁队列的两个特别设计使得其拥有很高的性能。第一个特点是:每个队列对应一个写线程和一个读线程(见图2)。在一个写线程对应多个读线程的通信环境下,ZeromQ将创建多个队列。这种读写之间一一对应的模式,加上无锁操作,使得无锁队列的实现非常高效。第二个特点是:采用批处理的方法来写入或者读取消息。虽然无锁编程算法比传统的基于信号量的算法更高效,但是CpU的原子操作很费时,特别是当CpU的多个核之间存在竞争时。为了解决这个问题,ZeromQ采用了批处理的方法来应对。假设从网络上收到了一个数据包,其中包含了10个小消息。为了将这些消息写入无锁队列中去,需要使用10次原子操作。ZeromQ采用的方式是,先将单个消息保存到一个预写区域中,累积到一定数目后,使用一次原子操作,一起写入队列中;类似地,在读取时也应用了预读取缓冲区。

3、ZeromQ性能验证

3.1测试方法

通过对ZeromQ工作原理的分析,知道其性能无疑会超过传统多线程方法的。但是这样的性能差距到底有多大,需要通过实验来分析。ZeromQ作为消息中间件可以在多种应用场合传递消息。其中的线程间通信模式,使得其可以很好地用于多线程应用程序。在其多种消息传递模型中,任务分发的消息模式特别适合典型的生产者-消费者这种应用形式。传统多线程编程方法采用了互斥锁以及信号量来实现生产者-消费者线程之间的数据共享。每一个生产者线程与一个消费者线程作为一个线程对。线程的执行时间以生产者线程开始工作,到消费者线程处理完最后一个数据之间的时间间隔作为该线程对的执行时间。多线程情况下,将各个线程对的执行时间做相加处理。在每次测试期间,指定采用ZeromQ的方法与采用传统多线程的方法这两种程序所处理的消息数是相等的。对不同条件下的执行时间进行统计,从而比较哪种方法性能更优。

3.2性能分析

通过测试,分别采用两种方法的多线程程序所用的时间如表1所示。表1中的数据是在一个采用了超线程技术的2核i5CpU上执行结果。从表1中可以看出,采用ZeromQ的多线程编程方法比采用传统的方法在各种情况下性能均占优势,这表明其对于并发编程有更好的支持。此外,在与其他主流消息队列,比如:RabitmQ、activemQ以及mSmQ的性能比较中,ZeromQ也大幅胜出。考虑到ZeromQ在软件开发以及调试上的便利性,采用其进行多线程软件开发将带来巨大的成本优势。

4、结语

随着CpU内核数越来越多,如何有效地发挥硬件运算能力成为越来越重要的任务。传统的基于加锁以及信号量做线程同步的方法已经越来越不适应性能要求;最新的基于无锁算法的编程技术虽然能够提升性能,但是实现的过程非常复杂,使得软件开发充满了挑战性。ZeromQ这一消息中间件很好地弥补了性能与易用性之间的鸿沟,使得普通开发人员也可以编写出高性能、可靠的软件产品。

参考文献

[1]叶崧,姚健东.基于ZeromQ&JSon的分布式测控系统消息通信架构设计[J].现代电子技术,2014(2):105-109.

[2]张俊帅.多线程技术在数据通信中的应用[J].科技创新与应用,2016(11):87.

[3]蒲凤平,陈建政.基于ZeromQ的分布式系统[J].电子测试,2012(7):24-27.

程序编程篇3

关键词程序设计高质量代码编程中图分类号:tp31.5文献标识码:a

0引言

软件质量就是软件的生命线。软件代码中一个微小的错误,就可能造成无法预计的重大损失。高级语言程序设计是本科生初次接触软件编程的一门入门级的课程,但是在这门课的教学中,教师普遍重视基本语法和知识点的讲解,在程序设计教学中忽视了程序质量的概念,教师们和学生们也很少自觉关心软件的质量。一些勤奋好学的程序员长期在低质量的程序堆中滚爬,吃尽苦头之后才有一些心得体会,并且长进极慢。①

1树立高质量程序设计理念的必要性

由于软件本身特有的性质决定了只要存在一个很小的错误,就可能带来灾难性的后果。②千年虫事件,仅仅是因为程序员为了节省宝贵的内存资源和硬盘空间,在存储日期时,只保留年份的后两位,如“1990”年被保存成“90”,结果到2000年快要来临的时候,为此一个简单的设计缺陷,全世界付出了几十亿美元的代价。因为若是1990年的存款,到2000年取款的时候,存款年限就被计算为了-90年,以此错误数据计算的话,银行要支付巨额利息。还有1999年的火星登录事故,美国宇航局的火星基地登录飞船在试图登陆火星表面时突然坠毁失踪,质量管理小组观测到故障,认定出现错误动作的原因极可能是某一个数据位被意外更改了。由此可见,软件质量的问题造成的损失是巨大的,甚至是无法估计的。如果不懂得如何有效地提高软件质量,项目会付出巨大的维护和修补的代价,因此作为软件的开发者,就应该树立编写高质量程序代码的理念,将高质量内建于开发过程之中,这就是“预防胜于治疗”的道理。

在当前软件行业迅猛的发展下,软件逐渐走向大型化。在这种形势下,一个软件的开发势必需要众多人的参与。因此软件的开发工作是一种工程,而不是一种个人艺术。由于大型产品的开发通常由很多的人协同作战,如果开发工作者没有树立编写高质量程序代码的理念,不遵循统一的编程规范,最终合到一起的程序其可读性将较差。这不仅给代码的理解带来障碍,增加维护阶段的工作量,同时不规范的代码隐含错误和缺陷的可能性也比较大。由此造成的测试和维护成本会远远大于开发成本。BeLL实验室的研究资料表明软件错误中50%左右产生于代码编写阶段,因此在代码开发阶段程序员自觉的建立编写高质量程序代码的理念,能够自觉遵循相关规范,将有效的降低软件后期的测试和维护费用。

在学习程序设计语言之初,就建立编写高质量程序代码的理念,对学生来说,将是受益终生。可以让学生在学习的过程中少走弯路,可以使学生在迈上工作岗位之初,有效降低个人成长周期,快速的适应工作环境,融入开发团队,快速成长为一名优秀的软件开发工作者。

2高级语言程序设计教学中渗透高质量程序设计理念

2.1在教学过程中明确高质量程序设计的概念

在教学过程,要通过实例讲解什么是高质量的程序,让学生了解软件质量属性的概念。明确“正确性”只是反应软件质量的因素之一,且运行正确的软件也不一定就是高质量的软件。软件运行正确,但是内存消耗过大,运行速度低,可移植性差,那此软件实际应用价值就会大打折扣,这依然不是一个高质量的软件。

软件的质量属性可以分为两大类:“功能性”与“非功能性”,非功能性的质量属性也称为是软件的“能力”。功能性属性主要包括:正确性、健壮性和可靠性。非功能性属性主要包括:性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性等等。高级语言程序设计是大部分学生初次接触软件编程的课程,在教学过程中,要向学生明确,正确性、健壮性、易用性、清晰性等的质量属性在初学程序设计的时候就要掌握,可靠性、性能、安全性、兼容性等属性会在数据结构和操作系统等后续课程的教学中讲授。让学生理解高质量程序设计的概念也是贯穿于计算机软件课程教学的始终的,并且深刻理解高质量的程序设计理念对专业知识的学习有深刻的促进作用。

2.2在教学过程中渗透高质量程序设计理念

2.2.1遵循编程规范,养成良好的编程习惯

在学习程序设计入门之处,就要循环代码编程的规范。这些规范包括:命名规范、连接规范、文件结构规范、代码版式规范等等。俗话说,“没有规矩,不成方圆”,高质量代码编写也是同样的道理。遵循一定的编程规范,养成良好的编程习惯,是成为优秀程序员的先决条件。从程序设计的入门阶段就锻炼编写规范干净的程序代码,可以在程序开发过程中及后续的程序维护过程中不断受益。

具有良好编程风格的代码,版式美观,具有较好的清晰度,为代码的后期维护升级提供了较好的基础。成熟的it企业都有自己内部的软件编程规范,遵循共同的规范编写出的各模块的代码,具有了更好的整合性,可以大大降低软件整合、测试的费用,提高软件的整体质量,降低软件的开发成本。

2.2.2掌握简单的软件测试技术

软件测试是提高软件质量的重要手段。一个程序能够正确的运行一次,是否就证明程序是正确的呢?答案当然是否定的。例如对于分支结构的程序设计中,我们常用的测试方法,就是路径覆盖测试和边界测试。我们至少要设计多个测试用例把程序的分支结构的每一条分支语句都要覆盖一遍,来检测程序的正确性。而且还要对分支结构的边界值进行必要的检测,因为很多的错误的产生就是发生在输入输出的边界点上。如果这些测试用例都能正确执行,这仅仅是检查了代码的正确性。

除此之外,还要检查代码的健壮性和容错能力。对需求之内的数据设计测试用例,还要对需求之外的数据设计合适的测试用例,检查程序的健壮性。程序的健壮性是指在发生异常的情况下,例如一旦有用户输入了意外的数据,则程序有无容错能力,有无出错的处理,程序还能否正常运行的能力。这些都要通过测试来检查程序的健壮性。

2.2.3建立模块化的编程思想

在第一门程序设计语言教学中,学生必须掌握自顶向下,逐步求精的软件模块化思想。其基本理念就是将一个大的程序按功能分割成一些小模块。软件模块化设计就是现实生活中“分而治之”思想的具体体现。并且保证各模块之间要高内聚、低耦合、结构清晰、接口简单。这样既可以实现模块的复用,也易于维护和功能扩充,缩短开发周期。

总之,在程序设计教学中,让学生牢固树立编写高质量程序代码的理念是至关重要的,这不仅能够提高教学质量,而且为学生后续的学习和工作打好了坚实的基础。

注释

程序编程篇4

关键词:椭圆数控编程宏程序难点简化

中图分类号:tG659文献标识码:a文章编号:1003-9082(2013)12-0251-01

随着数控技术不断的发展,数控技术在生产制造的作用和地位逐渐凸显出来,在企业内的应用也越来越广泛,对数控技能的掌握就显得更有必要了。每年全国数控职业技能大赛的规模举办得越来越大,显然国家对数控技能人才的培养很重视。借技能大赛,国家意于发现更多的数控人才,培养出更多的数控人才,发挥数控人才的技能,强大数控人才团队,从而更好更快的推动数控技术的发展。

比赛的趋势必然对选手的技能要求越来越高,比如非圆曲线的加工在竞赛中的比例逐渐加大,非圆曲线的手工编程涉及到宏程序,很多学生碰到宏程序编程就觉得无从下手,总认为是一个难以攻破的难题。在我们数控编程与加工教学过程中,广大教师感到宏程序编程不易教学;学生学起来也不易理解,难以掌握,所以能否掌握非圆曲线的宏程序编程就成为了解决难题的关键。本文针对HnC-21/22t数控车系统关于椭圆宏程序编程方法的探讨,希望有助于我们尽快尽早地解决此难题,同时利于提高学生在比赛编程环节中的效率,提高学生的数控编程能力和赢得获奖荣誉的机会。

我们以下面已知轴类零件图为例,来探讨椭圆的宏程序编程,归纳出椭圆编程的规律,便于今后的教学。

通过图样分析,椭圆的编程是零件图的难点之处,编程之前我们需要掌握相关的知识。

一、建立椭圆轮廓的数学模型

a形式:

椭圆参数方程

a为椭圆的长半轴,b为椭圆的短半轴,为离心角,(c,d)为椭圆中心坐标相对于编程坐标原点的坐标。

零件图的椭圆,长半轴a=9,短半轴b=6,离心角,在椭圆上的任一点a的坐标为(,),则X=9,y=6。在数控车床编程时,我们要注意坐标轴的转换,把椭圆方程坐标系的轴变为车床的轴,Z轴变成X轴,Y轴变为X轴,再考虑椭圆中心(c,d)坐标相对于编程坐标系的坐标,则椭圆的参数方程应转变为:

离心角的定义域

二、需要了解数控编程宏程序的基础知识

1.算术运算符:+,-,*,/

2.条件运算符:eQ(=),Gt(>),Ge(≥),Lt(

3.函数:Sin(正弦),CoS(余弦)SQRt(开平方)

4.常量pi:圆周率π

5.变量#i(i=1,2,3...)

6.赋值语句

格式:宏变量=常数或表达式,如:#1=30;#2=12*Sin[#1*pi/180]

7.循环语句表达式:用运算符连接起来的常数,宏变量构成表达式

格式:wHiLe条件表达式

......

......

enDw

三、根据以上两部分的知识,针对华中“世纪星”HnC-21/22t系统进行椭圆宏程序编程

四、在大量的典型例子练习中,我们摸索出了椭圆宏程序编程的规律,按此规律来编写宏程序就简便许多了,又容易掌握(见表1)

程序编程篇5

关键词:数控;椭圆;宏程序

中图分类号:G646文献标识码:a

1宏程序概念

宏程序就是将一群命令所构成的功能,像子程序一样登录在内存中,再把这些功能用一个命令作为代表,执行时只需写出这个代表命令就可以执行其功能。在这里,所登录的一群命令叫作用户宏主体(或用户宏程序),简称用户宏(Custommacro)指令,这个代表命令称为用户宏命令,也称为宏调用命令。使用时,操作者只需会使用用户宏命令即可,而不必去理会用户宏主体。

用户宏即可以在用户宏主体中使用变量;可以进行变量之间的运算;可以用用户宏对变量进行赋值。

2数控铣床、加工中心的椭圆轮廓程序编制(见图1)

编制如图1所示椭圆凸台加工程序,深度8mm。

3采用极坐标编程方式

椭圆的方程有一般方程和极坐标方程,这里用到椭圆的极坐标方程X=aCoSα;Y=bSinα。该零件从图纸上得到的a=30,b=20。将椭圆的极角设为#1,X设为#2,Y设为#3。根据FanUC的宏程序语言,椭圆的极坐标方程转化为#2=30*CoS[#1],#3=20*Sin[#1]。分析极角的变化范围,极角从0°变化到180°。将#1的初始值设为0,而终止的条件为≤180。

#1=#1+0.5;这里0.5是调整椭圆的形状精度的语句,该数值在粗加工时应该取较大值,以利于数控系统进行计算。精加工时该数值应取较小数值,以满足零件图纸为宜,例如0.1。如精加工取的数值过小,则不利于数控系统的计算,在加工过程中已出现刀具移动迟滞,反而影响表面。

4采用椭圆标准方程进行编制

椭圆的一般标准方程为,这里设#1为X,#2为Y,那么该方程就变为,这里如果将X也就是#1设为变化量,那么将其转化为FanUC的宏程序格式为#2=20*SQRt[1-#1*#1/900]。

综上所述,在加工公式曲线时,可以不采用计算机编程,而是利用FanUC系统宏程序的编程。按照分析公式、变量的选择、初始值和终止值的选定等编制宏程序,而且宏程序的编程格式、变量的选择、公式的选择都非常灵活,程序可读性非常高,使加工更加高效、快捷。

参考文献

程序编程篇6

关键词:纵接输出;多路输出;栈指令;记号;主控指令;临时左母线。

一、对梯形图进行适当变换,解决多路输出编程问题

在进行编程学习时,经常遇到多路输出问题。

如何对多路输出梯形图进行编程呢?下面通过一个具体的实例来说明,进行梯形图适当变换,利用基本指令解决多路输出问题。

如图1所示,就是一个三路输出的梯形图程序,三路共用一组公共触点。对于多路输出梯形图,我们可以根据pLC中触点可以无限次使用的特点,将各路共用的公共触点,在每一路输出中分散开来,将多路输出变成独立的多个单路输出,从而使用简单的基本指令对多路输出进行编程。

在图1所示梯形图中,第一路输出Y000的线圈由X000和X001串联驱动,第二路输出Y001的线圈由X000和X002串联驱动,第三路输出Y002的线圈由X000和X003串联驱动,所以图1所示梯形图的功能和图2所示梯形图的功能是一样的。

对于图2所示梯形图,我们就可以使用简单的基本指令进行编程了,从而有效地解决了多路输出问题。

对多路输出梯形图进行有效地等效变换,可以解决多路输出编程问题,但是当公共部分触点较多、较复杂,或者输出路数较多时,利用这种方法就较复杂了。这时我们可以使用栈指令或主控指令进行编程

二、利用栈指令解决多路输出问题

1.复习纵接输出梯形图的编程

使用栈指令编程的梯形图程序和纵接输出梯形图在形式上有相似之处,这也是同学们在学习中容易引起混淆,经常出错的地方。为此在学习栈指令之前,可以进一步复习纵接输出梯形图的编程。如图3所示,指令语句表如下:

0LDX000

1oUtY000

2oUtY001

3aniX001

4oUtY002

如图4所示纵接输出梯形图,指令语句表如下:

0LDX000

1oUtY000

2anDX001

3oUtY001

4aniX002

5oUtY002

2.栈指令教学的引入

在复习纵接输出编程之后,给出如图5所示梯形图,让同学们思考能否用纵接输出编程。

这时同学们肯定能根据前面学习的内容对图5所示梯形图编程如下:

0LDX000

1oUtY000

2anDX001

3oUtY001

4aniX002

5oUtY002

这时,引导同学们观察图4、图5所编写的指令语句表,发现指令语句表是一样的,从而产生疑惑,这是为什么呢?

对于图5所示梯形图程序,Y000是由X000驱动输出的,Y001是由X000和X001相串联驱动输出的,而Y002是由X000和X002相串联驱动输出的。在以上指令语句表中,aniX002语句之前,结果寄存器的内容已经是X000和X001相串联,在给出aniX002语句之后,结果寄存器的内容已经变成是X000、X001和X002相串联,所以oUtY002的结果就是用X000、X001和X002相串联的结果驱动Y002输出,而不是用X000和X002相串联驱动输出的。这时自然而然提出问题,这样的梯形图如何进行编程呢?

3.栈指令教学

用栈指令可以解决如图5所示多路输出问题。在FX2n系列pLC中,有11个存储运算中间结果的存储器,称为栈存储器。这个栈存储器将触点之间的逻辑运算结果存储后,可以用指令将这个结果读出,再参与其他触点之间的逻辑运算。

(1)mpS指令:

mpS指令称为“进栈指令”,功能是栈存储器中的数据依次向下推移,腾出1号单元,将结果寄存器中存储的触点的运算结果存储到栈存储器1号单元,可形象的称之为“做记号”。

(2)mRD指令:

mRD指令称为“读栈指令”,功能是将存储到栈存储器1号单元中的触点的逻辑运算结果读出来,存储到结果寄存器中,可形象的称之为“使用记号”。

(3)mpp指令:

mpp指令称为“出栈指令”,功能是将存储到栈存储器1号单元中的触点的逻辑运算结果读出来,存储到结果寄存器中,其他单元中的内容依次向上推移,可形象的称之为“使用并清除记号”。

(4)栈指令使用注意事项:

■mpS、mRD、mpp指令均没有操作元件;

■mpS、mpp必须成对使用,即只要做了记号,必须使用记号,且记号可以多次使用,但在使用完记号后,必须清除记

■栈指令可以嵌套使用,即可以连续做记号。由于栈存储器共11层,所以最多连续做11个记号。

下面通过图6所示梯形图,介绍栈指令的使用方法。

对于图6所示梯形图,是一个三路输出梯形图,在图中三路输出共用X000触点。期中X000和X001串联,驱动Y000输出;X000和X002串联,驱动Y001输出;X000和X003串联,驱动Y002输出。按照从左到右、从上向下的编程原则,首先应是X000,指令语句为LDX000,这时如果对X001触点进行编程,对于第一路输出是没有影响的,但是却使得其余两路无法进行编程。为了便于对其余两路进行编程,应使用mpS指令在a点做一个记号后,再对X001触点进行编程,X002触点和X003触点都是从a点开始的。指令语句表如下:

0LDX000

1mpS

2anDX001

3oUtY000

第一路输出完成后,进行第二路输出的编程。此时,结果寄存器的内容为X000和X001相串联,如果直接使用anDX002对X002触点进行编程,会导致Y001的输出是由X000、X001和X002三个触点串联驱动的。这时我们可以使用mRD指令,使用我们所做的记号。使用mRD指令后,结果寄存器的内容将变成X000,这时再使用anDX002指令编程即可使Y001的输出由X000和X001的串联驱动。至此指令语句表如下:

0LDX000

1mpS

2anDX001

3oUtY000

4mRD

5anDX002

6oUtY001

在对第三路进行编程时,也应使用之前做得记号,但是因第三路是最后一路,以后不再使用该记号,所以应使用mpp指令,之后再对第三路进行编程。使用栈指令编程的指令语句表如下

0LDX000

1mpS

2anDX001

3oUtY000

4mRD

5anDX002

6oUtY001

7mpp

8aniX003

9oUtY002

下面再看一个例子,梯形图如图7所示:

该梯形图为四路输出,等效为图8所示梯形图:

根据学过的知识,指令语句表如下:

根据栈指令的功能,使用栈指令对图7所示梯形图程序进行编程时,可在图8所示梯形图程序的指令语句表基础上进行改动:在第一次叙述完各路公共部分之后,使用mpS指令做一记号,然后将第二、第三次公共部分的指令语句用mRD替代,第四次也就是最后一次公共部分的指令语句用mpp替代即可。使用栈指令对图7所示梯形图程序进行编程的指令语句表如下:

0LDX000

1oRiX001

2mpS

3anDX002

4oUtY000

5mRD

6aniX003

7oUtY001

8mRD

9oUtY002

10mpp

11LDiX004

12oRX005

13anB

14anDX006

15oUtY003

三、利用主控指令解决多路输出问题

对于多路输出梯形图的编程,除了使用栈指令进行编程外,还可以使用主控指令进行编程。特别是当输出路数较多或者是公共触点之外每一路的开始为电路块时,如果使用栈指令会造成编程步数增多,程序复杂,在这种情况下,可以使用主控指令进行编程。主控指令包括主控指令mC和主控复位指令mCR。

1.主控指令介绍

(1)主控指令mC:

mC指令的功能是:当多路输出的公共部分触点组合驱动主控指令时,通过mC指令的操作元件Y或m的常开触点,将左母线移到多路输出的公共部分触点组合之后,产生一个临时左母线,从而简化了后面程序的编程。

(2)主控复位指令mCR:

mCR指令的功能是:取消由mC指令产生的临时左母线,即将左母线返回到原来的位置,在多路输出编程结束后,必须使用mCR指令,以便多路输出之后后续程序的编程。

(3)主控指令使用注意事项:

■在多路输出的公共部分触点组合之后使用mC指令;

■mC指令的操作元件可以是输出继电器Y,也可以是辅助继电器m(特殊辅助继电器除外);

■执行mC指令后,因左母线移到多路输出的公共部分之后,所以在公共部分之后,各路输出必须用LD指令或LDi指令开始写指令语句表;

■在各路输出编程完毕,必须使用mCR指令,使左母线由临时位置返回到原来的位置,即主控指令mC和主控复位指令mCR必须配套使用,且嵌套级编号必须一致;

■主控指令可以嵌套使用,即mC指令内可以再使用mC指令,这时嵌套级编号从n0到n7按顺序增加,顺序不能颠倒。

2.主控指令使用

下面以图7所示梯形图为例,介绍利用栈指令编程的方法:

在使用主控指令进行编程时,首先分清哪是多路输出的公共触点组合,哪是受公共触点组合控制的主控电路块,如图9所示。

然后利用公共触点组合驱动主控指令mC,对梯形图进行变形。如图10所示:

变形后的梯形图指令语句表如下:

0LDX000

1oRiX001

2mCn0m100

执行主控指令的结果是在a点产生一个临时左母线,即在多路输出的公共触点组合之后。这样各路输出在公共触点之后的部分,就相当于从左母线开始的。梯形图变形如图11所示:

实际上,采用主控指令编程时,在原左母线和临时左母线之间将串联一个由主控指令mC指定的辅助继电器m100的常开触点,我们称之为主控触点。只有当驱动mC指令的多路输出的公共触点组合逻辑运算结果为1时,该主控触点才能闭合,各路输出才有可能被驱动,否则该主控触点断开,各路线圈均不能被驱动。主控触点由主控指令产生,无需对其进行编程。

左母线移到临时位置a后,我们就可以使用我们比较熟悉的基本指令对其进行编程了。

指令语句表如下:

5LDX002

6oUtY000

7LDiX003

8oUtY001

9oUtY002

10LDiX004

11oRX005

12anDX006

13oUtY003

在各路输出结束后,应使用主控复位指令mCR,将左母线由临时位置a移到原来的位置,以便后续程序的编程,也就是说主控指令mC和主控复位指令mCR必须配套使用,且嵌套级编号必须一致。梯形图如图所示:

指令语句表如下:

14mCRn0

综上所述,图7所示梯形图,采用主控指令编程时,梯形图变形为如图13所示:

相应梯形图程序的指令语句表如下:

0LDX000

1oRiX001

2mCn0m100

5LDX002

6oUtY000

7LDiX003

8oUtY001

9oUtY002

10LDiX004

11oRX005

12anDX006

13oUtY003

14mCRn0

总之,对于多路输出程序的编程问题,首先应明确什么是多路输出,多路输出与纵接输出有什么区别。其次在编程时应掌握什么情况下采用变换梯形图的办法,将多路输出变换为多个单路输出,然后进行编程;什么情况下采用栈指令解决多路输出问题;什么情况下采用主控指令进行编程。在此基础上,通过多加练习和实际上机操作,熟练掌握栈指令、主控指令的功能、使用方法、注意事项,一定能很好的掌握多路输出程序的编程问题。为进一步学习pLC打下坚实的基础。

参考文献:

程序编程篇7

关键词:数据包;tCp协议;UDp协议

abstract:networkprogrammingtechnologyisnowmorepopularsoftwaredevelopmenttechnology,thispaperintroduceshowtCpandUDpformatinJavanetworkprogramming,thebasicmethodofdemonstrationexamplesofnetworkprogrammingsimple,itistoplaytheroleofnetworkprogrammingenthusiastsplay.

Keywords:datapackets;tCpprotocol;UDpprotocol

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

引言:计算机网络是计算机技术和通信技术紧密结合的产物,对如今社会发展有着深远的影响。网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要问题:一个是如何准确地定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效地进行数据传输。在tCp/ip协议中ip层主要负责网络主机的定位,数据传输的路由,由ip地址可以唯一地确定internet上的一台主机。而tCp层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心ip层是如何处理数据的。

Java历史

Java是由Sunmicrosystems公司于1995年5月推出的一种程序设计语言,主要应用于互联网、个人pC、数据中心、游戏控制台、科学超级计算机。它刚开始的名字叫“oak”,Java最初是为电视、控制烤面包机等家用电器的交互操作而设计的,但当时并没有得到成功的推广、随着互联网的发展,Java经过数次的设计和改进后演变成当前受到极大欢迎的Java。

基于Java前身设计的特点,其具备了可移植性和平台无关性,成为了可以运行于不同的环境、不同的CpU上的程序语言。当前Java在全球得到了大量的推广和应用,在计算机应用中发挥着强大的作用。

一、tCp和UDp协议

tCp和UDp协议属于传输层协议。其中tCp提供ip环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDp则不为ip提供可靠性、流控或差错恢复功能。一般来说,tCp对应的是可靠性要求高的应用,而UDp对应的则是可靠性要求低、传输经济的应用。tCp支持的应用协议主要有:telnet、Ftp、Smtp等;UDp支持的应用层协议主要有:nFS、Snmp、DnS、tFtp等。

二、网络通信中Java的网络类和接口

Java中有关网络方面的功能都定义在程序包中。Java所提供的网络功能可大致分为三大类:

(一)URL和URLConnection:使用Socket类进行网络编程相当麻烦。对已经存在的协议,程序员应当了解它的每一段代表的含义,改而使用URL类可以很大程度上免去这些麻烦。

1.URL类

URL是类URL表示统一资源定位器,即指向网上某处资源的指针。一个URL包括协议名和主机名,有些还包括特定的端口号。

2.URLConnection类

通过URL的方法openStream(),只能从网络上读取数据,如果同时还想输出数据,例如向服务器的CGi程序发送一些数据,则必须先与URL建立连接,然后才能对其进行读写,这时就要用到URLConnection类了。CGi是公共网关接口的简称,它是用户浏览器和服务器端的应用程序进行连接的接口。

URLConnection类可以由两种方式构建:一种是通过一个URL实例openConnection()方法返回一个,另一种是直接通过newURLConnection(URLul)来创建。URLConnection实例不仅可以实现接收消息,还可以发送消息。

(二)Socket:又称套接字,是网络编程中最原始的通信方式之一。一个套接字通常包含一个ip地址和一个端口地址,后者一般对应着某个应用程序。因此如果要进行Socket编程,首先要确定端口。一般来说,1024以下的端口已经被指定为固定的服务类型,如果用户要开发自己的交流平台,必须使用之后的端口地址。

套接字(Socket)允许程序把网络连接当成一个流,可以向这个流写字节,也可以从这个流读取字节。Java的Socket类提供了丰富的功能。服务器使用的一般是ServerSocket,通过连接使双方都会产生一个实例,对实例进行操作来实现通信。大部分工作都是在抽象类Socketimpl中定义的。

任何一个网络程序都离不开连接的建立、读写操作、关闭,程序还分为客户和服务器两种类型。除了关闭操作可以简单地使用Close()方法外,读写操作都不是一句话说得完的。

(三)Datagram:是一种面向无连接的通信方法。它基于UDp协议,不需要建立和释放连接,每次通信时只要构造一个Datagrampacket实例发送出去,对方同样构造一个Datagrampacket实例接收。以Datagram方式传送数据时,只是把数据的目的地记录在数据包中,然后就直接放在网络上进行传输,系统不保证数据一定能够安全送到,也不能确定什么时候可以送到。

三、Java实现加密

Java的网络功能十分强大,还体现在作用它可以轻松实现各种加密算法。如今加密算法大致可分为两类:对称加密和公钥加密。

对称加密,发送方和接收方使用同样的密钥,前者用它来加密,后者则用它解密。这样做本来是很安全的,例如3DeS的密钥为112位,这样的组合数大约是5×1033,几乎不可能被攻破。但是密钥总要在双方交换,因此交换途径的保密性就很关键,使用人工固然安全却麻烦,在网络上传输虽方便但危险。故如今网络上大多使用公钥加密方式。

公钥加密的优点在于,加密和解密的密钥是不同的,前者称为公钥,后者称为私钥。公钥,顾名思义,是可以公开的,一台电脑里可能存放了很多远程通讯方提供的公钥。

公钥解密还可以用在数字签名上,这时的动作是相反的:用私钥加密,和用公钥解密。Java里用于实现这方面功能的是java.省略包中。

四、结束语

总之,网络编程中Java程序设计,除了上述的一些应用外,还有很多地方可以使用接口,比如在Java的事件机制中就常用到接口。另外,对于一些已经开发好的系统,在结构上进行较大的调整已经不太现实,这时可以通过定义一些接口并追加相应的实现来完成功能结构的扩展。学好Java程序设计可以帮助我们更好的理解和运用面向对象的设计原则。使我们能设计出更好的软件系统。

参考文献:

[1]印旻.Java语言与面向对象程序设计[m].北京:清华大学出版社,2007

[2]朱福喜.Java语言程序设计[m].北京:清华大学出版社,2007

[3]李明才.Java语言程序设计案例教程[m].北京:中国水利水电出版社,2010,8

[4]张渝.Java语言程序设计[m].北京:北京大学出版社,2008

程序编程篇8

每个人都有过美丽的青春,有的人青春美丽在雪山哨所,有的人青春美丽在菁菁校园,有的人青春美丽在无影灯下……而我,一个平凡的税务干部,将我青春最美好的年华,链接在五彩缤纷的电脑屏幕上、粘贴在数不胜数的加班和孤独中、献给了我钟爱的税收事业……97年我调到刚成立的信息中心,对计算机只感到的新鲜、好奇。分局安排我到武汉大学脱产学习,给了我一个理想实现的机会。在这一年中,我同其他分局的同行们一起,系统的学习了计算机的基础知识和应用软件,从DoS、wpS到编程、网络……春夏秋冬,放弃了寒暑假,放弃了节假日,放弃了朋友们的一次次聚会,一年中没有回过几次襄樊,终于以优异的成绩完成了全部课程。随着信息社会的到来,在征管改革的深化进程中,微机作为信息化的媒介,以其巨大的容量,便捷的方式,超人的速度,丰富的资源,迅猛的登上了税收工作的舞台,成为新时期税务改革的弄潮儿。原以为学习过的我,已能驾驶着计算机驶入税务信息的高速公路,接触工作才知道理论和实际相差很远,为了跟上税务信息的发展,适应工作,痛定思痛后,我从自修英语起步,同时说通父母,花了一万多元搬回了电脑,并购置和借阅了多种计算机方面的书籍,也从这时起我就和孤独结下了不解之缘。近两年的时间,晚上我常常是守着书桌上的一盏台灯打发掉的,或看书,或写作,或打开心爱的电脑。我也到处学艺,分局信息组的同事就是我的良师,我们经常在一起讨论,相互学习,取长补短,有不少时候,为了一个问题,我们常常争论的面红耳赤,为了一个方便的解决办法,我们绞尽脑汁,而一旦有了结果,我们又欣喜若狂。青春的美丽在于不断的创造和不停的超越自己。正是这段孤独和寂寞的日子,我重新明白了青春奉献与创造的意义,彻底放弃了泡在网络聊天和电子游戏的所谓“虚拟人生”中却大言不惭地说这就是“e时代人类”的“精神家园”的陈腐思想。经过一段艰辛的努力,经过无数孤独中知识的积累,对《征管法》孜孜不倦的学习,我这只苯鸟也有了质的飞跃,工作起来也倍感轻松,游刃有余。今年十月份,我局承担了电子申报纳税的试点工作。timS向CtaiS转换对我们信息中心来说是一个巨大的挑战,看到有些同志对计算机不太了解,我急在心里,建议开展培训并毛遂自荐当老师,将自己所学的知识和大家“共享”,在培训中,一边教一边学,发现问题,解决问题。为了使大家学习有针对性,利用业余时间起草编拟并印发了300多套简易教程。有了人员保证还要有技术上支持,通过协调向市局申请开通了“测试器”,在指导大家白天采集资料,晚上录入计算机的基础上,抽时间对不能处理或不知如何处理的问题,反复在“测试器”上试验,一遍、两遍……最多的一次测试了70多遍,就这样,白天楼上楼下、各个科室转,晚上大家加班结束后我们再加班,甚至通宵达旦,一个多月下来,连睡觉基本都放在了分局。长时间的熬夜,我的眼睛由原来的近视150度到加大到350度,平时只好佩带着隐性眼镜,由于眼镜长时间不能清洁,严重刺激了眼球,造成了眼睛散光,流泪不止。到医院治疗,医生戏称这属于“通天眼”,“计算机综合症”,再不注意,后果严重……。长时间的加班,连女朋友对我都产生了怀疑,有时人才进家门手机就追到,有几次约好刚见面电话就响了,我只有打的往单位赶,为这事她专门找到办公室来,质问“是不是故意躲”,直到后来需要我们科长亲自打电话,才相信是加班。很多人说我是一个工作狂,其实,工作狂来自一种激情,因此我每时每刻都在提醒自己:要用积极的心态去求取生命的最大值,去发现希望的星星,用心创造生活的每一天经过一个多月的努力,在良好的工作氛围中,我们分局顺利通过了从tmiS到CtaiS的转变、金税工程和电子申报,得到了省、市局领导的好评。特别是电子申报,我们靠自己摸索,从基础资料的采集,将每一个预计发生的问题提前做好了“备份”。整个试点工作没有出一点纰漏,信息中心也成为了同志们工作中有利的后盾。青春飞扬,青春无悔,青春是美好的,青春也是奉献的,新时期的计算机工作给了我发展的空间和创造的舞台,在信息社会中,高度文明的高智化的条件须要我们付出艰苦的体力和脑力劳动,掌握大量的知识和驾驭现代化用具的能力,作为一名税务部门的信息人员,只有不断加强自己专业知识的长度和宽度,才能将高科技和税收业务有机的结合。作为一名国税部门的计算机工作者,我要用我“下载”的知识,全身心的投入到未来的工作中,“知我者谓我心忧,不知我者谓我何求。”今天,我要在这里自豪他说:“我爱我的岗位,我爱我的信息中心,我要用我青春的理想,编织出更美好的程序”

程序编程篇9

随着数控系统的不断更新,宏指令应用越来越广泛。以日本FanUC-oi系统为例,oi系统使用B类宏指令,在o系列的早期版本中,曾使用a类宏指令,主要特征为使用G65代码为宏指令专用代码,包括宏变量的赋值、运算、条件调用等。B类宏指令功能相对a类而言,其功能更强大,编程更直观。在FanUC-oi系统的固定循环指令中,毛坯切削循环G71指令内轮廓削循环G73指令内部可以使用宏程序进行编程。

宏指令编程虽然属于手工编程的范畴,但它不是直接算出轮廓各个节点的具体坐标数据,而是给出数学公式和算法,由CnC来即时计算节点坐标,因此对于对于简单直观的零件轮廓不具有优势。若零件结构不能用常规插补指令可以完成编程的,则可采用编制宏程序的方法,将计算复杂数据的任务交由数控系统来完成。对于加工方法和加工方式,零件的加工步骤,走刀路线及对刀点起刀点的位置,以及切入、切出方式的设计还是遵循一般手工编程的规则。编制宏程序时,首先应从零件的结构特点出发,分析零件上各加工表面之间的几何关系,据此推倒出各参数之间的数量关系,建立准确的数学模型。为此,必须注意正确选择变量参数并列出正确的参数方程,同时设定合理有效的循环变量。若采用主子程序调用的编程模式,还注意局部变量和全部变量的设定,了解变量传值关系。特别值得注意的是,为提高程序的通用性,尺寸参数尽可能地用宏变量表示,运行程序前先进行赋值。

宏程序编程实例:如下图所示零件:

程序以FaUnC-oi-tC系统的格式编写

1、程序计算说明:

由抛物线方程Z=-X2/10得X=10,故直线段起点X坐标值Xa=20。

由椭圆方程:,得出,并且X为半径值。

椭圆中心在如图编程坐标系中的坐(40,-35)。

2、用仿形车削循环指令G73编程,加工程序如下:

o0001;

G99G97m03S600t0101F0.2;

G0X42Z2;

G73U20R15

G73p10Q20U0.5;

n10G0X0;

G1Z0;

#1=0(赋抛物线Z轴起始值)

n11#2=2*SQRt[-10*#1];

G1X#2Z[#1-40];(下转第128页)(上接第126页)

#1=#1-0.5;

iF[#1Ge-10]Goto11;

G1X30w-5;

w-7.5;

#3=12.5;(赋椭圆Z轴初始值)

n12#4=8*SQRt[1-#3*#3/256];

G1X[40-#4*2]Z[#3-35];

#3=#3-0.5;

iF[#3Ge-12.5]Goto12;

G1Z-55;

X40;

n20Z-65;

G00X100Z100;

m05;

m00;

m03S1000t0101F0.1;

G0X40Z2;

G70p10Q20;

G0X100Z100;

m30;

3、子程序调用m99m98指令编程

o0002;

G99G97m03S600t0101F0.2;

G0X42Z2;

#100=40;

n30m98p0011;

#100=#100-2;

iF[#100Ge0.5]Goto30;

S1000F0.1t0101;

#100=0;

m98p0011;

m30;

o0011;(子程序)

#1=0(赋抛物线Z轴初始值);

n11#2=2*SQRt[-10*#1]+#100;

G1X#2Z#1;

#1=#1-0.5;

iF[#1Ge-10]Goto11;

G1U10w-5;

w-7.5;

#3=12.5;(赋椭圆Z轴初始值)

n12#4=40-16*SQRt[1-#3*#3/256]+#100;

G1X#4Z[#3-35];

#3=#3-0.5;

iF[#3Ge-12.5]Goto12;

G1w-7.5;

U10

n20w-10;

G00U2Z2;

U-2;

程序编程篇10

关键词:汇编语言程序设计;教学方法;内联编程

1课程的现状

汇编语言不同于其它高级语言,必须要求编程人员有一定的硬件基础,如对CpU的结构、CpU与存储器等部件的数据传送过程必须要有基本的了解,这样才能学好这门课程。在教学过程中,我们发现学生对高级语言编程学习积极性高,对汇编语言课程缺乏兴趣,因为课程本身指令复杂,规定繁多,再加上学习汇编指令前对CpU的相关工作过程理解不透,导致学生厌学,又由于本课程面对的低年级学生只有高级语言的基础,习惯于高级语言的自然表达,初次接触计算机硬件知识心理上有恐惧感,更难以适应繁杂的低级语言。

针对本课程的特点,对教学内容、环节、过程等进行了精心设计,下面就教学方法的设计、实践教学方法、课程考核形式等方面进行的一系列改革进行详细探讨。

2教学方法设计改革

为了避免学生因指令复杂,规定繁多、难度大而对该课程产生畏惧的学习心理,教师有必要对教学内容进行合理组织,对教学过程进行精心的设计。

2.1利用FLaSH技术,使教学难点容易理解

在多年的教学过程中,我发现学生在学习CpU结构这章节中,对介绍的CpU由哪些寄存器(名称、大小)构成,各个寄存器的含义,用途,CpU与存储器等部件的数据传送过程,会觉得很抽象,多数同学都是采用死记硬背的方式,这章节是第二章节的内容,也是能否学好该课程关键的一章,如果理解不深,这无疑为后续的学习,特别是寻址方式的学习埋下了隐患。

针对这个问题,教师有必要对教学过程进行精心的设计。

在这章节中我们利用FLaSH技术,把各种寻址方式下传送指令的CpU与存储器等部件的数据传送过程以动画形式展现给学生,使得复杂,抽象的过程变得直观,学生理解比较容易,也加深了对寻址方式的记忆。

2.2对比法教学

目前计算机专业的课程设置中,《汇编程序语言的程序设计》课程通常是学习完C语言课程之后开始学习的。所以在教学中可以采用对比法来讲解课程,对某些语法知识点和程序设计过程我们可以以C语言和汇编语言对应分析。

例如在介绍寄存器时,由于在一般的c语言程序中并没有直接使用到寄存器。因此,我们使用vC++6.0环境下的调试工具显示一个c语言程序及其对应的机器码,让学生看到编写汇编程序寄存器的用途,加深了学生对汇编语言程序的理解。

intm=5,n=6,c;

004010e8movdwordptr[ebp-4],5

004010eFmovdwordptr[ebp-8],6

c=m+n;

004010F6moveax,dwordptr[ebp-4]

004010F9addeax,dwordptr[ebp-8]

004010FCmovdwordptr[ebp-0Ch],eax

在介绍语法知识时,比如变量的定义:

C语言中的变量定义形式如下:

intc1,c2=0;

汇编语言的变量定义形式如下:

clDw?

c2Dw0转贴于

2.3抽象概念的比喻教学法

在对段地址和偏移地址的讲解过程中,可以采用比喻法,把操作数比喻成学生,把教室的房间号比喻成段地址,教室内每个座位编个号,编号就是偏移地址,要想到教室把某个学生找到,就要找到相应的教室号,再到对应的座位号找到这个学生,同理,要想把主存中的操作数找到就要找到段地址和相应的偏移地址,另外要让学生知道每个教室里的座位号都是从0号开始编号的,也就是每个段里的偏移地址如果不特别指定,也是从0号开始编号的。

3实践教学改革

3.1增强实验环节,做一些实际项目

程序设计对于大多数的初学者来说有一定的难度。对于给定的一个实验题目,许多学生往往感到无从下手。目前的上机实验时间往往很短,常常是学生才刚刚有点入门,实验环节就结束了;且课外实践环节几乎没有,导致学生即使课内学的再好也不会应用。

在实验设计方面可以先把一些经典的程序提供给学生,例如分支结构的设计、循环结构的设计等,让学生在写出C语言程序之后再设计汇编程序,找出两者编程思维的区别。这样通过一段时间的经验积累,就能够编写比较复杂的的程序,由于上机时间有限,可以每次实验课之后布置一些题目供学生选择思考,让学生课外分组来设计这些程序,题目的类型可以是研讨型的让学生从更多的角度去思考上机实验过的题目,编写出不同的程序;另一种为编程型,

例如可以设置这2道题目,音乐小键盘、贪吃蛇游戏等,以加强同学们的编程能力的训练。

3.2采用与高级语言混合编程

目前越来越多的场合要使用汇编语言和高级语言进行混合编程,因此在教学时应强调汇编语言和C/C++的混合编程,并且这样也可以为今后嵌入式系统软件开发的学习打下坚实的软硬件基础。

在实验课中可以借助VisualC++开发工具,采用内联汇编的方式,在C/C++源程序中嵌入汇编指令序列完成一定的功能,并让学生设置断点然后跟踪执行,同时注意观察寄存器的内容和变量的值。这样可以一方面让同学们熟练掌握两种语言的切换使用,另一方面让他们感受到两种语言各有特点。例如可以利用汇编语言处理高级语言中不方便处理的一些问题。

4课程考核形式改革

因为“汇编语言程序设计”是实践性很强的一门课程,所以实验课成绩应该在总成绩中占有相当大的比重。目前大多数高校的汇编语言课程的实验课成绩只占很小的比重,即理论知识往往占课程期末考核总成绩的70%~80%,这样往往会导致学生不得不将大量的精力放在理论知识的学习中,结果只会造就大批的应试高手。在教学中,我们遇到过有的学生考试试卷能考90分以上,却连最基本的计算机操作都不能动手。今后这门课程的考核,实验课成绩应该提高到占总成绩的1/2。老师在实验中应该营造出互动气氛,检查每个学生的完成情况同时做好记录,根据学生的实际动手情况给出他们的平时实验成绩,而不是只依据交上来的实验报告,这样也能杜绝抄袭之风。

5结束语

通过教学改革的实践,在一定程度上提高了他们对本课程的学习积极性,又降低了学习难度。良好的教学效果是永远追求的目标,在今后的教学中,我们还需要不断进行探索、研究和尝试,不断更新观念,发现自身教学过程中的问题,找到解决办法,提高教学效果。

参考文献

[1]王成耀.80x86汇编语言程序设计[m].北京:人民邮电出版社,2008(第2版).

[2]卜登立,彭嵩松,唐卫东,龙侃.“汇编语言程序设计”课程教学改革研究与探讨[J].井冈山学院学报,2009,30(10):124-127.