辅助程序论文

2024-08-24

辅助程序论文(精选7篇)

辅助程序论文 篇1

在Visual Basic程序设计中,允许用户自定义的子过程或函数过程在过程体的内部调用自己,这样的子过程或函数过程称为递归子过程或者递归函数。我们在设计程序时碰到的许多问题都具有递归的特性,用递归调用的方式描述它们会非常方便,能使程序设计化繁为简。因此,对递归程序调用的读写训练是Visual Basic程序设计教学中的重要内容,也是Visual Basic二级考试的重要题型。

在递归调用程序中,比较容易阅读的是求解数学上阶梯函数的递归调用程序。首先在程序中找到递推语句、递归结束条件及递归结束时的值,根据递推语句一步一步递推,直到条件成立获得递归结束时的值,使递推结束;然后一步一步回归,即可求得函数的值。递推的轨迹和回归的轨迹都比较清晰。若递推语句之后还有赋值语句或输入输出语句等,则递推的每一步要将许多参数压栈,回归的每一步又要根据先前压栈的相关参数确定若干变量的值,程序阅读起来就比较复杂。使学生能顺利正确地阅读这类程序是教学难点之一。教学实践表明,在阅读递归调用的程序时引入表格法,可以使学生感觉有方法可依,能够按部就班地阅读程序,克服畏难情绪,也能够有效防止出错。越是阅读复杂的递归调用程序,表格法越是能显示其有效作用。本文以一道Visual Basic二级考试题为例,介绍怎样采用表格法辅助阅读递归调用程序。

例题如下:运行下面的程序,单击命令按钮Command1,则在窗体上显示的第一行内容是____,第二行内容是___,最后一行内容是_____。

1. 通读程序找出递推语句和递推结束语句

在本例中,程序由主过程Command1_Click()和函数过程Recursion%(A%,B%)构成。在主过程中从“Lcm=Recursion (N, M)”语句开始调用函数过程Recursion%(A%,B%)。函数过程Recursion%(A%,B%)以A、B为形式参数,采用传址调用。“Recursion=2*Recursion (A+A/k, B)”语句为递推语句。“A Mod B=0”是递推结束的条件,“Recursion=A”语句是递推结束语句。程序执行过程中,只要“A Mod B=0”条件不为True,就使递推语句“Recursion=2*Recursion (A+A/k, B)”执行一次,直到“A Mod B=0”条件为True,执行“Recursion=A”语句,递推才结束。

2. 用表格演绎递推过程

表一是为阅读递归调用程序而设计的表格,其横向从左向右表示递推的步骤,每一列表示递推一步,即调用自身一次;纵向依序是程序执行语句中的表达式。表格的含义就是每递推一步,程序中各表达式依照其顺序应该获得什么值。在阅读程序时,程序的阅读者首先应该按照程序语句执行的顺序将各个表达式填入表格,然后开始逐步递推。在递推过程每一步中,要填写递推步骤序号,填写在本步递推中各个表达式获得的值。对于本例而言,因为“A Mod B=0”是递推结束条件,当在某一步中A与B的值相等时,表明该步骤是递推的最后一步了。从已填的表格可见,在递推结束之前,递推结束条件“A Mod B=0”在每一步均为False,因此执行“Recursion=2*Recursion (A+A/k, B)”语句。而“Recursion=2*Recursion (A+A/k, B)”语句并不能立即获得具体的值,要用“A+A/k, B”作为实际参数调用Recursion%(A%,B%)函数一次。当递推结束条件“A Mod B=0”的值为True, Recursion获得值64,即获得参数A的值,递推结束。在递推结束后,程序要向下执行语句“Print 2*A, k”和“k=k-1”,开始回归。因此,在递推的最后一步,程序阅读者还应该填写表达式“2*A, k”和“k”的值。

3. 用表格演绎回归过程

在表一的下方再增加一行,从右向左表示回归的步骤,如表二所示。在本例中,回归的每一步做三件事:(1)根据得到的Recursion值计算“2*Recursion”的值并赋值给Recursion自身;(2)执行“Print 2*A, k”语句;(3)执行“k=k-1”语句。表格中后三栏分别记录“2*Recursion”、“2*A, k”、“k”三个表达式在回归的每一步中所获得的值。因此,在回归的每一步中,程序阅读者应该做的事情是分别填写表达式“2*Recursion”、“2*A, k”、“k”的值。

4. 根据表格答题

程序阅读者根据所填的表二,就可以进行答题工作,即填写题目所留的空格。依据程序,在窗体上显示信息是由函数过程中的语句“Print 2*A, k”和主过程中的语句“Print“Lcm=”;Lcm”完成。“Print 2*A, k”语句在回归的每一步中执行一次,显示一行信息,即表达式“2*A, k”的值,共显示四行。主过程中的语句“Print“Lcm=”;Lcm”执行一次,在窗体上显示的信息为第五行。

因此,在窗体上显示的第一行内容是,第二行内容是,最后一行内容是。

5. 结语

本文为参加Visual Basic二级考试的学生阅读递归调用程序提供了一种有效的方法,这种方法能够有效地阅读复杂的递归调用程序,防止出错。使用这种方法达到熟练以后,在阅读递归调用程序时不一定要画出表格,可以在程序的旁边根据递推与回归的步骤,按行按列依序写出各个表达式的值,但要做到心中有表。

参考文献

[1]龚沛曾, 杨志强, 陆慰民.Visual Basic程序设计教程[M].北京:高等教育出版社, 2007.

[2]江苏省高等学校计算机等级考试中心.二级考试试卷汇编Visual Basic语言分册[M].苏州:苏州大学出版社, 2005.

用优先图辅助并发程序设计 篇2

如果将程序内部的语句(或程序段)之间设计成并发执行,则可以加快程序的运行速度,提高资源的利用率。程序并发度越高,系统的性能就越好,用户越满意。但是,程序内部的语句(或程序段)之间并不都是可以并发执行的,有些语句之间有严格的先后关系,因而在设计并发程序时,必须严格保证这些先后关系的正确性,否则程序运行时就会出错。找出程序里语句(或程序段)之间所有的先后关系,成为了并发程序设计的关键。然而,不借助于一定的辅助方法,只在程序里查找语句(或程序段)之间的先后关系,不直观、不形象,而且容易出错。

优先图PG是一种描述顶点间先后关系的有向无圈图。优先图常用于描述具有先后约束关系的工程问题[1]。实际上,优先图也可以用来辅助并发程序设计,利用优先图描述并发程序内语句之间的先后关系,将使得并发程序的设计变得更加直观、简便、不易出错。利用优先图辅助并发程序设计的一般步骤是:原程序→优先图(化简)→并发程序。即根据原程序内部语句间存在的先后制约关系,将其描绘成优先图,化简优先图,再将优先图转换为并发程序。

1语句之间的先后关系

程序里语句(或程序段)之间,常常存在着一些先后制约关系。例如:变量要先赋值、后读取,这样,针对同一变量的赋值语句与读变量语句(或程序段)之间就存在先后关系;函数、过程或子程序要先定义、后调用,那么,定义函数的程序段与调用该函数的语句(或程序段)之间也存在着先后关系;还有程序流程图中有许多其它先后关系,等等。尽管语句(或程序段)之间的先后关系有许多种,但都可以用如下方法来判定:

对于程序里的两个语句(或程序段)Si和Sj,如果存在“只有当Si执行完以后,才能执行Sj”的制约关系,则称Si和Sj之间存在着先后关系[2]。这就是判断程序里两个语句(或程序段)之间是否有先后关系的依据。

一个程序里,存在着先后关系的语句(程序段)往往不只一对,对于较复杂的大程序,可能有许多具有先后关系的语句(或程序段)。必须把这些先后关系全都找出来,才能设计出正确的并发程序。如果在查找程序中语句之间的先后关系时,不采用一个较好的方法来描述,当先后关系很多、很复杂时,就很容易遗漏一些、或者将一些先后关系弄错。

2优先图概况

优先图是由顶点集合V和有向边集合A组成的有向无圈图D=(V,A),从顶点Vi指向顶点Vj的有向边表示:只有当Vi完成后,才能执行Vj[2]。

优先图无圈 (no cycle),也一定无环(no loop)[3]。图1(a)所示的有向图含有向圈<V2,V3,V4,V2>,该有向圈表示:只有V2完成以后才能执行V3,只有V3完成以后才能执行V4,只有V4完成以后才能执行V2,这是自相矛盾的先后关系,因而不是优先图;图1(b)所示的有向图中含有自环<V3,V3>,该环表示:只有V3完成后才能执行V3,明显地自相矛盾,因而也不是优先图。图2(a)和(b)所示的有向图无圈无环,因而是优先图,其中图2(a)所示优先图表示的先后关系是:只有当V1完成以后才能执行V2,只有当V2完成以后才能执行V3,只有当V2和V3都完成以后,才能执行V4。

定义1 起点与终点。在优先图中,与有向边的尾部相连的顶点叫起点,与有向边的箭头相连的顶点叫终点。

3用优先图描述程序内先后关系

优先图非常适合描述程序内语句(或程序段)之间的先后关系:用优先图中的顶点代表程序里的语句(或程序段),用连接顶点的有向边表示语句(或程序段)之间的先后关系,图中的有向边表示只有当起点语句执行完以后,才能执行终点语句;当有多条有向边指向同一个顶点(终点)时,即表示:只有与该终点相连的所有有向边的起点语句都执行完以后,才能执行该终点语句。我们来看一个简单实例。

例1 对于图3(a)所示的一段程序,每条语句前已加上标记(V1、V2、V3和V4)。将每一条语句用一个圆形顶点表示,顶点名称即为该语句的标记名称,得到优先图的顶点集(如图3(b)所示)。

对于每两条语句间是否存在优先关系,只看它们之间是否存在“只有当Si执行完以后,才能执行Sj”的关系即可。不难看出:只有当赋值语句“a=1;”(对应于图3(b)中的V1顶点)和“b=2;”(对应于图3(b)中的V2顶点)都执行完以后,才能执行运算语句“c=a+b;”(对应于图3(b)中的V3顶点),因而顶点V1与V3有先后关系、顶点V2与V3也有先后关系。在图3(b)中,应该以顶点V1和V2为起点,分别画一条有向边到达终点V3。同理,只有当顶点V1、V2和V3相应的语句都执行完以后,才能执行顶点V4对应的语句(write(c);),应该以V1、V2和V3为起点,分别画一条有向边到达终点V4。从而得到如图3(c)所示的优先图。

上述实例推而广之,得到将程序描绘成优先图的方法如下:

Step1 将程序中每个语句(或程序段)加上标记,并给所有的标记命不同的名字(如V1、V2、V3……),转step2;

Step2 将每一条语句(或程序段)在优先图中用一个圆形顶点表示,顶点名称为该语句(或程序段)的标记名称,得到优先图的顶点集,转step3;

Step3 观察优先图中的两个顶点,分析它们对应的两个语句(或程序段)之间是否存在“只有当Si执行完以后,才能执行Sj”的先后关系,转step4;

Step4 若存在先后关系,则从先执行语句相应的顶点(起点),画一条有向边到达后执行语句相应的顶点(终点),然后转step5;若无先后关系,则直接转step5;

Step5 如果优先图中任何两个顶点之间的关系都已分析完毕,即所有的先后关系都已找出,并在优先图中画出了相应的有向边,则优先图完成。否则,转step3。

使用该方法,可以将图3(a) 所示的程序段转换为如图3(c)所示的优先图。该方法既可以将一个完整的程序转换为优先图,也可以将一段程序转换为优先图。

从上例可以看出,采用优先图来描述程序里语句之间的先后关系,很形象、很直观,而且结构完整、清晰,便于分析、不易出错、不易遗漏。

4优先图转换为并发程序

设计并发程序,就是尽可能多地让程序里的语句(或程序段)并发执行。并发程序设计的基本方法就是:首先将程序内所有语句(或程序段)全部设置成可并发执行,然后采用信号量和P、V操作原语把语句(或程序段)间所有的先后关系都控制好[2]。

将原始程序描绘成优先图以后,顶点之间的所有先后关系就非常明确地表现出来了,接下来就要把优先图转换为并发程序。

将优先图转换为并发程序,只要按照如下五步操作即可:

Step1 为优先图中的每一条有向边定义一个信号量,并给所有的信号量赋初始值0,转Step2;

Step2 预设所有顶点对应的语句(或程序段)都可以并发执行,将这些语句(或程序段)并列书写在同一并发语句(如parbegin……parend)内,转Step3;

Step3 考虑优先图中的一条有向边,在与之相连接的起点语句的后面,加一个V操作,起唤醒作用;在与之相连接的终点语句前面,加一个对应的P操作,起等待作用;然后,转Step4;

Step4 重复step3的操作,直至将所有的有向边全部转换成P、V操作对。然后,转Step5;

Step5 将每一个顶点语句,以及附加在它前面的所有P操作、附加在它后面的所有V操作,用一个复合词(如begin……end)前后组合,形成一个复合语句。

转换完毕。

采用该算法转换成的并发程序,除了有先后关系的语句(或程序段)不可并发外,其余语句都是可以并发执行的。

按照该算法,将图3(c)所示的优先图可以转换成如下并发程序:

var g,h,i,j,k: semaphores;

(initial value of all semaphores is 0)

begin

parbegin

begin a=1; V(g);V(h); end;

begin b=2; V(i);V(j); end;

begin P(g);P(i); c=a+b; V(k); end;

begin P(h);P(j);P(k); write(c); end;

parend;

end;

在该并发程序中语句“a=1;”与“b=2;”是并发执行的。

5优先图的化简与并发程序的简化

有些优先图是可以化简的,例如图4(a)所示的优先图就可以化简为图4(b)。

证明:图4(a)中有三条有向边<V1,V4>、<V3,V4>和<V2,V4>指向同一个顶点V4,说明只有当V1、V3和V2都完成以后,才能执行V4。然而,从图示先后关系中可以看出:当V3完成时,V1和V2早已完成。因此,指向V4的2条有向边<V1,V4>和<V2,V4>是多余的,可以省略掉。于是,图4(a)所示优先图可以化简为图4(b)所示。证毕。

同理,图4(c)所示优先图中的有向边<V2,V4>也可以化简掉,化简为图4(d)所示优先图。

将图3(c)(即图4(a))所示的优先图化简为图4(b)以后,对应的并发程序变为:

var g,h,i: semaphores;

(initial value of all semaphores is 0)

begin

parbegin

begin a=1; V(g); end;

begin b=2; V(h); end;

begin P(g);P(h); c=a+b; V(i); end;

begin P(i); write(c); end;

parend;

end;

通过前后两个并发程序对比,可看出:优先图化简后,并发程序的复杂性降低了。信号量由化简前的5个(g,h,i,j,k)减少为化简后的3个(g,k,i),P、V操作也由原来的5对减少为3对。可见,通过化简优先图,可以降低相应并发程序的并发控制复杂性。需要注意的是,化简优先图以后,并没有改变程序的并发性质。图3(c)对应的并发程序中,只有“a+1;”与“b+2;”可并发执行;化简为图4(b)以后,依然只有“a+1;”与“b+2;”是可并发执行的。

6结束语

并发程序设计的关键在于找出程序里语句(或程序段)之间所有的先后制约关系,使用优先图辅助并发程序设计,能够简明地显示这些先后关系,便于快速、准确地找出程序里全部的先后关系,为并发程序的设计带来极大的方便。本文论述了优先图辅助并发程序设计的过程:原程序→优先图(化简)→并发程序,阐述了将程序描绘成优先图的方法和将优先图转换为并发程序的步骤。同时,发现有些优先图可以化简,化简以后,相应的并发程序的并发控制复杂度降低了。关于优先图的化简算法,将在下一步工作中研究。

参考文献

[1]刘翔,姜双斌.基于PG图的空间信息服务链建模方法[J].重庆:后勤工程学院学报,2005,2.

[2]邹鹏,罗宇,王广芳等.操作系统原理[M].第二版.长沙:国防科技大学出版社,1995.

辅助程序论文 篇3

关键词:辅助实验平台,实验效率,技术性手段

●引言

Windows程序设计是高等院校计算机科学与技术专业中的一门必修课。该课程在计算机专业的课程体系中起着承上启下的作用, 它将学生在低年级掌握的基础课知识, 如C/C++、数据结构等与平台无关的编程语言和方法与Windows操作系统相结合, 使学生能在Windows上开发可视化应用程序, 从而顺利进行高年级专业课的学习, 如数字图像处理、计算机图形学、数据库原理等 (这些课一般都在主流的Windows上进行实验) 。[1]

Windows程序设计课程的应用性极强, 旨在提高学生的编程能力, 实验环节尤其重要。但该课程的学时数一般较少, 因此, 如何在有限的实验环节中, 提高学生的实验效率, 使学生尽可能多地积累Windows编程经验值得进行教学研究和探索。

●实验环节现状分析

Windows程序设计课程的实验环节效率不高、有待优化主要体现在以下几个方面。

1.题目设计缺乏个性化

实验题目设计是本课程实验环节中的一个重要方面。[2]以往同一个班的实验题目是一样的, 但由于学生间对知识的掌握程度和编程能力客观上存在一定差异, 这就会让一部分学习情况较好的学生觉得实验收获不够, 而另一部分学习情况相对较差的学生却觉得实验太难, 从而导致实验效果不能让所有学生都满意。

2.题目要求的表达不够直观

与C、C++、数据结构等基础编程课程不同, Windows程序设计的实验最终结果是可视化应用程序, 实验效果带窗体界面, 有些甚至还有动画效果、用户交互等功能。[3]因此, 传统的实验指导书用文字说明实验题目要求的形式不利于学生快速、直观地理解实验题目的要求, 有时学生实现的功能甚至与题目要求不符, 从而降低了实验的效率。

3.存在重复性编码

计算机专业的多数基础编程课程, 如C、C++、数据结构等课程, 如C、C++、数据结构等课程的实验, 学生可以直接在空白的main ( ) 函数中编写功能代码。[4]而Windows应用程序开发则不同, 想要实现功能, 必须先实现基本Windows窗体。一个基本的Windows窗体中, 涉及了窗体的定义、注册、创建、显示, 以及Windows消息循环、消息响应函数编码等环节, 需要近100行代码来实现。因此, 在以往的实验环节中, 不少学生尤其是学习情况相对较差的学生在实现Windows基本窗体的过程中就花费了大量宝贵时间, 导致实验效率低下。

●基于辅助实验平台的实验模式

针对以上在实验教学过程中发现的问题, 结合Windows程序设计课程实验的特点和浙江农林大学计算机科学与技术专业学生的实际情况, 笔者尝试以技术性手段来提高Windows程序设计课程实验环节的效率, 设计并开发了一个Windows程序设计的辅助实验平台软件, 它具备实验题目自选模块、实验效果演示模块、辅助程序模块、编程资源模块, 能有效提高学生的实验效率, 改善实验教学效果。

1.实验题目自选

为了实现个性化实验, 使不同学习程度的学生都能够有适合自己的实验题目, 笔者根据学生情况制定了难度不一的实验题目和详细程度不一的实验指导教程。浙江农林大学的Windows程序设计课程共48学时, 其中理论教学32学时, 实验教学16学时, 针对这8次实验, 分别设计了难、中、易三套实验题目。

同时, 将这三套实验题目集成于本辅助实验平台软件中, 这样, 学生们就能方便地选择适合自己类型的实验方案, 各取所需。此外, 对实验指导教师、实验室人员来说, 实验管理也比以往更方便了, 只需在每台电脑预装本辅助实验平台软件, 无需网络和纸质的实验指导手册, 学生就能查看实验题目和实验指导教程。

2.实验效果演示

为了更直观表达实验题目的要求和预期效果, 减少学生在理解题意上花费的时间, 从而提高实验效率, 本辅助实验平台软件实现了实验效果演示模块, 不再使用实验指导书这种不适合本课程的传统实验模式。

实验效果演示模块集成了每次实验的所有实验题目, 能调用每个实验题目相对应的Windows应用程序可执行文件, 从而形象地表达实验要求。学生可通过本模块方便地预览预期的实验效果, 在实验完成后能与之比较实验效果, 验证编程环节是否正确。如图1所示, 当点击“效果演示”后, 预期的动画实验效果能直观展示。

3.辅助程序开发

SDK编程是通过C/C++语言, 以消息处理的编程方式, 直接调用Windows提供的API函数进行程序开发。它是底层的Windows程序设计方法, 能让学生加深对Windows编程的理解。一般在Windows程序设计的教学中, 都先介绍SDK编程, 然后介绍基于MFC、ATL类库的编程方法。然而, 与基于MFC、ATL类库的编程模式中, VC++会自动提供应用程序基础框架不同, SDK编程模式中, VC++不提供基础框架代码, 要实现实验题目, 必须先实现窗体基础框架。这是学生在初学Windows编程时的障碍之一, 如何让学生只关注功能本身, 尽快实现实验题目, 从而培养编程兴趣、提高编程信心并提高实验效率, 值得探讨。

笔者尝试利用辅助实验平台软件提供辅助程序开发模块, 该模块集成Windows应用程序的基本框架, 能显示基本的窗体, 并且学生可以在本软件上可视化添加每个实验的功能代码, 最终再由本软件导出最终的源程序。这样, 学生在实验过程中, 只需要专注于实验相关的功能, 进行事件响应部分的处理代码即可, 从而大大减少了重复性代码的编写量, 切实提高了实验课时的利用率。如图2所示, 当点击“开始编程”后, 空白的输入框内自动生成了基本框架代码, 在输入框内添加窗口处理代码完成功能代码编写后, 再点击“生成.cpp文件” (如图3) , 即可导出最终的源程序。

4.编程资源

Windows程序设计的实验环节中需要用到一些编程资源, 如位图、图标、第三方控件、类库等。本辅助实验平台软件除了实现以上3个主要功能模块之外, 还将集成所有实验题目需要用到的Windows编程资源, 这样学生就不必花大量时间去搜索编程资源, 从而能进一步提高学生的实验效率, 同时也能方便实验指导教师、实验室人员的管理。

5.基于辅助实验平台的实验流程

本辅助实验平台软件通过软件的形式覆盖学生实验时的各个环节。通过本实验平台, 改变了传统编程类课程的实验模式, 学生可自行选择不同难度的题目和详细程度不一的实验指导, 实验要求也更直观、明确, 实验环节中编程的效率也得到相应提高。学生基于本辅助实验平台软件进行实验时的流程如图4所示。

●建设效果

笔者以浙江农林大学计算机科学与技术专业101、102、111、112共四个班级为试点, 对计算机101、102班采用传统的实验教学模式, 而对计算机111、112班则采用辅助实验平台软件的实验教学模式。为了验证本辅助实验平台软件这种技术性手段是否能提高学生的实验效 率, 本文统计了每次实验学生能完成实验题目的平均数量。此外, 为了更进一步分析本辅助实验平台软件对不同学习状况的学生在实验环节的受益程度影响, 将学生分为学习状况相对落后、学习状况一般、学习状况较好三类 (按C、C++、数据结构课程的考试得分) 分别进行了统计, 统计结果如下表所示。

从上表可以发现, 采用了本辅助实验平台软件覆盖整个实验环节后, 学生能完成实验题目的平均个数上升明显, 就整体而言, 由原来每次实验平均只能完成2~3个题目, 上升到每次实验平均能完成3~4个题目, 实验效率提高了29.2%, 说明本文提出的以技术性手段提高学生实验效率的教学方法是有效的。

此外, 学习情况相对落后和一般的学生通过本平台实验效率分别提高了60%和30.4%, 说明辅助实验平台对这两部分学生影响较大, 能帮助他们更快、更好地完成实验, 积累更多的Windows编程经验, 这与本平台的设计初衷一致;学习情况较好的学生通过本平台实验效率提高了8.6%, 说明辅助实验平台对这部分学生影响不大, 即使没有平台, 这部分学生也能较好地完成实验任务。

除了以上的数字结果, 从学生在实验过程中的表现及课后的反馈情况来看, 本平台能让学生更快看到自己的实验成果, 从而能更快地入门Windows编程, 在适应了Windows程序设计基本方法和技巧后, 对本平台的辅助程序开发模块依赖会慢慢降低, 在后半学期绝大多数学生已经能熟练地从头开始SDK编程;另外, 本平台不但让学生完成的实验题目数量增加了, 更重要的是让学生在初学时就树立了学好Windows程序设计的信心、激发了兴趣和热情, 这种影响是潜移默化的。

●结语

本文尝试以技术性手段设计并实现了一个辅助实验平台软件用于Windows程序设计课程的实验环节, 取得了良好的实践效果。下一步的工作是继续探索实验环节能改进或优化的环节, 进一步完善辅助实验平台软件;同时, 将技术性手段改进教学或实验的思路推广、应用到其他的计算机专业课程。

参考文献

[1]方敏, 张胜.Windows程序设计 (第5版) [M].北京:清华大学出版社, 2010:12-15.

[2]方昱春, 陈讯雷, 张景峤.Windows编程课实践教学探讨[J].计算机教育, 2010 (18) :153-155.

[3]杨程, 陈念年, 李郁峰.游戏开发驱动的Windows程序设计课程教改探析[J].教学研究, 2012 (2) :92-95.

辅助程序论文 篇4

在传统的飞行程序设计中涉及到大量的计算,目前,这些计算大多是采用手工单独进行的,计算工作量大、出错率较高,而对程序设计,只要一个计算出错,就要对所有相关计算重新开始,且手动计算过程中,数据不能连续计算,只能通过有效数据的多次取舍,这不利于着陆标准的精确、有效的建立。基于这些问题,本文依据国际民航组织文件8168《航空器运行-航行服务程序“目视和仪表飞行程序设计”》[1]和中国民用航空规章CCAR-97FS-R1《航空器机场运行最低标准的制定与实施规定》[2]的要求设计了辅助软件,该软件使用简单方便,能够快速、批量的计算,准确度高,提高了设计人员的工作效率和减轻了工作负担,具有良好的可用性。

1 飞行程序设计中相关计算

1.1 速度转换计算

空速是飞机相对于空气运动的速度,由空速表测定;指示空速(IAS)是空速经过仪表误差和空气动力误差修正后的速度。真空速(TAS)是指示空速经过空气压缩性修正量误差和空气密度误差修正后的速度[3]。

在飞行程序设计中,所有涉及到速度的相关计算都必须使用真空速(TAS),本软件在换算时将不考虑空气压缩性修正量误差,则IAS换算TAS公式如(1)所示:

ΤAS=171232.9*(273+tΗ)0.5(288-0.006496*Η)2.628*ΙAS(1)

式中,空中温度(tH)单位为摄氏度(℃);高度(H)单位为米(m);指示空速(IAS)与TAS的单位为km/h。

1.2 坐标转换计算

在飞行程序设计中,一般可以用极坐标和直角坐标来标识障碍物与跑道之间的位置关系。通常测量部门给设计人员提供的障碍物位置都以极坐标表示,而极坐标不便计算,在程序设计中,设计人员首先会将极坐标转换成直角坐标,因此,涉及到障碍物坐标的大量转换问题,如果采用手工计算,将会使工作量倍增,本软件针对此问题进行了设计,只要输入跑道的基本参数和导入极坐标,就可以一次性批量转换,操作简便、准确度高、速度快,大大提高了工作效率。

在转换过程中,首先要理解极坐标和直角坐标定义。其中,极坐标系以跑道中心为原点,磁经线为起始边,用磁方位(MB)、距离(D)和障碍物标高(H)或障碍物高(h)来表示,如图1所示。直角坐标系以跑道入口的中点为原点,x轴与跑道中线延长线一致,跑道入口前x值为正,入口之后为负值;y轴过原点与x轴相垂直,在进近航迹的右侧,y值为正值,左侧为负值,z轴为过原点的竖轴,以入口标高为零,高于入口平面时z值为正值,如图2所示[3]。

极坐标转换成直角坐标通常采用公式(2),其换算示意图如图3所示。

X=-D×cosα-L2; Y=D×sinα (2)

式中,α=ΜΒ-ΜΗ;D为跑道中心至障碍物的距离;MH为着陆跑道的磁方向;L为跑道的长度[2]。

1.3 下降梯度计算

飞行程序设计中,对起始、中间和最后进近航段都有下降高度的规定[3]。本软件针对下降梯度进行了设计,使用者只要将飞机当前航路点的高度、预降航路点的高度和飞行航段的长度输入到对应区域,便可以求出相对于的下降高度。其中下降梯度主要采用公式(3)。

G=(hfirst-hsecond)D×100%(3)

式中,G表示相对应的下降梯度,hfirst表示飞机当前航路点的高度,hsecond表示飞机预降航路点的高度,D表示两点之间的距离。

1.4 最低超障高度计算

最小超障余度(MOC)是指飞机飞越障碍物时与障碍物保持的最小垂直间隔。最低超障高度(OCA)是指飞机飞越障碍物时的最小高度,其等于障碍物标高(h0)再加上最小超障余度(MOC),即公式(4)所示,从图4可看出,当已知h0时,只要求出MOC,便可以得到OCA。其中

OCA=h0+MOC (4)

在不同航段上,障碍物将分布在不同区域,如图5所示,可能分布在主区或副区,其MOC也是不同的。在主区内,各障碍物的MOC相同,h0越高,MOC就越高;在副区,不同位置的障碍物,其MOC不同,必须逐个计算其超障余度,其任意一点的MOC’可由公式(5)计算,如图5、图6所示。

ΜΟC'=L-lL/2×ΜΟC(5)

式中,L为障碍物所在位置的区域宽度,l为障碍物到航迹的垂直距离,MOC为障碍物在对应航段的主区超障余度,单位为米(m),各航段其对应的MOC如表1所示。

在求解障碍物所在位置的区域宽度L时,由于仪表进近程序的各个航段长度都不一样,且规定有相应的安全保护区,因此在计算L时,要通过各航段的长度D和障碍物距下一航段定位点的距离d来计算,如图5所示,其计算如公式(6)。

L=L'+d*tanα (6)

式中,L’为航迹一侧已知点处的区域宽度。

2 飞行程序设计辅助软件开发与测试

本软件采用Visual C++ 6.0对飞行程序设计中的部分计算进行开发[4,5]。VC++ 6.0 是Windows 平台下主要的应用程序开发环境之一,它界面简洁,兼容性及移植性强,开发出来的系统具有人机界面友好、执行速度快、维护和升级方便等优点。

作为程序设计的辅助软件,第一,要提高计算的准确度和精确度;第二,软件操作要简单方便,提高工作效率,能够批量计算和直接得出需求数据;第三,计算结果要便于下一阶段使用,即存储计算结果,撰写程序设计报告和进行检查。

此软件根据目标需求,依据相关规定[1,2],主要对四大部分计算进行了开发,如图7所示为功能图。下面将对各个模块功能进行介绍,同时采用某机场程序设计中的相关数据进行验证,确保了软件在计算过程中的准确性。

2.1 速度转换功能

速度转换功能为IAS转换成TAS,只要输入指示空速(IAS),空中温度(tH)和高度(H),便可求出真空速(TAS),如图8所示。

2.2 坐标转换功能

坐标转换功能为极坐标转换成直角坐标,程序设计人员只要填写好跑道参数(跑道长度、跑道磁方位和跑道标高),然后导入已有的极坐标数据文本文件,就可以在显示界面显示,同时可以导出到EXCEL,如图9所示。

2.3 下降梯度计算功能

下降梯度计算功能为求航路段上两航路点高度间的下降梯度。程序设计人员只要在两航路点输入高度和航路距离,就可以快速计算出航路的下降梯度,如图10所示。

2.4 OCA计算功能

在OCA计算功能中,主要是对起始进近、中间进近、最后进近中最低超障高度的计算。在软件中首先通过手动输入或者文件导入相关格式的障碍物的信息,包括障碍物标高、障碍物在该进近航段一侧的区域宽度和障碍物至对应进近航段标称航迹的垂直距离;然后选择障碍物对于的进近航段,若为最后进近航段,选择是否有最后进近定位点(FAF),最后软件会自动判断各个障碍物在主区还是副区,且计算各个障碍物的MOC和OCA,并将最大的OCA显示在列表框,如图11所示。

3 结论

不管是传统的飞行程序设计还是现在新型的PBN飞行程序设计,在设计中都设计到了大量的小型计算,如果都通过设计者手工计算,将会大大增加工作量,也容易出差错,该软件针对这些问题,依据国际民航组织的相关文件的要求进行了设计,使程序设计者在设计中能够快速、批量的计算,增加计算的准确性、提高工作效率、降低计算复杂度,大大减轻了设计人员的劳动强度,减少了人工差错,具有良好的可用性。但此软件还有许多考虑不周的地方,它会在使用过程中被进一步完善。随着计算机技术的发展,相信在不久以后,自动化飞行程序设计软件的诞生将为程序设计人员带来更大的方便。

参考文献

[1]CAO.Procedures for Air Navigation Services(3)Aircraft Op-eration(DOC.8168)Fifth edition[S].2006:486-593.

[2]中国民用航空总局.航空器机场运行最低标准的制定与实施规定(CCAR—97FS—R1)[S].2001.

[3]朱代武,何光勤.目视和仪表飞行程序设计[M].成都:西南交通大学出版社,2004:4-10.

[4]郑莉,董渊,张瑞丰.C++语言程序设计[M].3版,北京:清华大学出版社,2004:62-123.

全站仪自由设站辅助计算程序设计 篇5

1 程序设计思路

全站仪自由设站法测量目标点的坐标所定义的平面坐标系为测站假定坐标系, 高程系统也是假定的, 在观测目标点时, 也观测均匀分布在目标点附近的二个或两个以上已知点, 那么, 在采用自由设站法完成一个测站的观测工作后, 观测成果保存在一个数据文件中, 其中已知点有分别采用工程坐标系和测站坐标系的两套成果, 不同坐标系中的已知点的空间位置关系在一定测量误差范围内是一致的, 即分别在测站坐标系中和工程坐标系中, 任意两个已知点间的距离和高差是近似相等的, 任意不在同一直线上的三个已知点所组成的三角形是近似全等的, 利用已知点空间位置关系的相似性, 可建立工程坐标系中和测站坐标系中同一已知点的对应关系, 从而建立工程坐标系和测站坐标系的转换关系, 将同一测站所观测的目标点成果全部由测站坐标系转换为工程坐标系成果, 其中, 平面坐标转换采用四参数法 (即赫尔默特转换法) , 高程转换采用平均高差改正法。

2 程序主要控件设计

“细部之友”采用VB6.0编程语言进行设计, 如图1所示, 在主窗体的上方设置了6个“ComboB-ox”控件、2个“OptionButton”控件和2个“CheckBox”控件, 分别用于设置计算控制参数、关联方法、数据处理方法以及是否输出坐标转换分析文件, 在主窗体的中间位置对称设置了2个“DirListBox”控件和2个“FileListBox”控件, 其中, 左侧的“DirListBox”控件用于设置父级细部点数据文件路径, 左侧的“FileListBox”控件用于选定父级细部点数据文件, 右侧的“DirListBox”控件用于设置子级细部点数据文件路径, 右侧的“FileListBox”控件用于选定子级细部点数据文件。

3 程序运行过程和结果

如图2所示。在测量项目文件夹下建立以测量日期命名的文件夹, 再在该文件夹下建立“转换后”和“转换前”两个文件夹, 将工程坐标系中的已知点成果以数据文件的形式放在“转换后”文件夹中, 将测站坐标系的观测成果以数据文件的形式放在“转换前”文件夹中。

准备好数据文件后, 先按默认的转换条件进行自动批量转换, 如果个别数据文件不能满足默认的转换条件, 再重新设置转换条件进行手动转换。转换条件包括:已知点间最短距离条件、边长比对差值条件、高差比对差值条件、允许点位误差条件、允许高程差值误差条件、关联方法条件。其中关联方法包括:自由边关联、自由网关联、受控边关联、受控网关联。边关联指只有两个公共已知点, 网关联则多于两个公共已知点, 自由关联指观测数据文件中全部测点两两之间均计算边长和高差对照, 受控关联则将观测数据文件中经过编码标记的已知点挑选出来计算两两之间的边长和高差对照, 显然, 受控关联的计算效率高于自由关联, 故通常采用受控关联的计算方法, 但在外业时必须对已知点进行编码标记, 另外, 已知点之间的高程差值必须大于高差比对差值的设置值, 一般应大于10cm。

程序自动建立已知点在工程坐标系和测站坐标系的对应关系, 并自动进行坐标转换。

自动批量转换或手动转换的结果放在“转换后”文件夹里 (如图2所示) 。

采用手动转换时, 会产生图3所示的转换结果, 图3中, 左上为工程坐标系已知点数据文件, 右上为测站坐标系数据文件, 左下为转换后的观测数据文件, 右下为已知点边长和高差对照信息及精度评定信息, 右下的完整信息如图4所示, 图3正下方信息栏中还会显示已知点转换的最大点位误差、最大高差误差和最弱边相对精度。

在进行高精度转换时, 通常全部采用手动转换方法。

与定点设站法相比较, 每天平均多花费大约10min, 利用辅助计算程序“细部之友”将测站坐标系中的观测数据文件全部转换为工程坐标系中的成果, 完成坐标转换工作后, 后续的内业与定点设站法的内业无异。

4 结束语

与定点设站法相比较, 自由设站法主要有以下技术特点:

1) 外业步骤少, 效率更高。

2) 对已知点通视条件不限制, 在等级已知点密度不足的情况下, 可以采用网状图形发展下一级控制点, 比定点设站法支点更具可靠性, 下一级控制点点位选择更加灵活, 甚至可用油漆笔画在墙壁上或电线杆上 (如果测量地形图, 非地表控制点不能保留在地形图图面上) 。

3) 在地形测量或数字地面模型测量中, 图根控制测量在工序上可后于碎步测量, 在外业组织安排上更加灵活, 并且, 在外业中不必频繁输入控制点, 观测员压力小, 每一测站一般至少测量三个已知点, 检核条件多, 出错的可能性低, 与GPS-RTK配合, 技术优势更加突出。

4) 目标点的测量精度与全站仪标称精度、镜站对中精度、已知点测量照准精度和镜高测量精度直接相关, 可根据需要灵活控制。

5) 利用高精度免棱镜全站仪开展运营阶段公路高边坡位移监测, 一人一车一机即可快速完成外业, 内业可自动化处理。

近五年来, “细部之友”已经在二十多个高速公路勘测项目中得到应用, 采用自由设站法, 提高作业效率, 达到化繁为简的目的, 降低劳动强度, 取得显著的综合效益。

辅助程序论文 篇6

1 方案设计

在国际民航组织DOC8168文件中对风螺旋线的画法以及风螺旋线与保护区其他要素间的定义方法如图1所示。

图1 (a) 显示的是基于风螺旋线构成特点总结的人工绘制风螺旋线的简易画法。图1 (b) 中为在离场飞行程序保护区的设计中, 当风螺旋线边界处于导航台引导区域的保护区之外时, 以与后续标称航迹平行的角度做出最大边界范围的方式。图1 (c) 是离场飞行程序保护区设计中风螺旋线与导航台引导保护区的另一种关系:当风螺旋线边界在导航台引导区域之内时, 做与引导标称航迹成一定角度的割线。图1 (d) 显示的是有若干风螺旋线间共同包络线形成的直角飞行程序的保护区, 同样的画法也出现在基线转弯的保护区设计中。

目前的开发条件下, 较难解决的主要问题是对于一些图元难以建立相应的纯数学模式的方程求解, 并且由于行业的专业化程度较高, 也造成一些复杂图元难以有现成的数据库可以调用, 这对于主流的大部分计算机语言造成自动化绘制过程中的软件条件限制。另外, 风螺旋线结构与飞行程序保护区中前后相关的保护区要素的衔接关系具有需要多种判定条件, 种类多样, 构型不唯一的特点。不同的飞行程序设计中风螺旋线在构型中的位置及数量均有不同, 对每种飞行程序面向对象的编译手段难以满足所有的构型特点并且工作量巨大。

在建筑设计科学领域中, 参数化图解法[2]是解决上述问题的一种有效方法, 图解最初只是作为表达建筑几何线性关系, 内在结构与构造关系, 以此进行方案形式与内容研究[1]。现代图解方法中引入了生成性图解的概念, 其作用是使建筑作为一个事件不断展开, 所有的形式都是运动的积累[3]。同样, 可以认为飞行程序保护区的生成是一个伴随航迹运动不断生成的面域, 风螺旋线等结构均是点集的运动形式, 只要引入各个元素之间的关系作为约束来管理, 同时飞行参数, 风速等视为变量, 通过参数化技术来驱动变量, 就可以得到灵活的不同条件对应的不同结构组合。

2 图元数学建模

2.1 风螺旋线数学建模

对于单个风螺旋线[图1 (a) ]画法的构造过程, 在数学概念上有成熟的模型, 阿基米德螺线即等速曲线, 它的数学概念为:当一点沿半径方向以等速率运动的同时, 该半径又以等角速度绕圆点旋转, 该点的轨迹称为“阿基米德螺线”。其极坐标方程为:

对应到飞行程序保护区设计中, a对应转弯半径r, b对应风螺旋线每一定转弯角对应的半径增量E (θ) 。受此启发, 在计算机模拟中建立类似的算法方式, 假设风螺旋线上第i点的坐标用p[p (xi) , p (yi) ]表示, 转弯圆心为c[c (x) , c (y) ]:飞行转弯半径r (0) , 转弯过程中风影响的增量r', 图2与公式 (2) 为对一个极小θ的分析方法。

θ (0) 可由计算机判别;θ'为控制步长;和大部分逼近取值的效果一样, 当θ'选取的值越小时, 循环需要的时间复杂度和空间复杂度越高, 使风螺旋线与其他图元之间的关系计算变得缺乏效率, 因此结合实际工作的情况认为当取步长θ'为0.1°时, 构成的图元将可以基本满足飞行程序设计保护区的安全和效率的需要。

2.2 风螺旋线与直线关系的数学建模

在离场飞行程序保护区绘制过程中, 绘制了转弯边界 (风螺旋线) 后, 将根据转弯后导航台位置关系, 连接导航台保护区与风螺旋线边界, 图1 (b) 与 (c) 所示导航台保护区边界与风螺旋线边界存在两种基本关系。条件判断前, 风螺旋线必然完成与转弯后标称航迹角度平行的末端, 总结发现, 由于设计过程中没有固定的坐标系, 阿基米德螺旋线数学坐标的动态性 (它更像是一种描述而不是格式化的方程) 要建立完全的数学模型描述多种条件判断执行是非常困难的。但对生成风螺旋线的点的图解动态过程可以使用如下的数学方法描述:

①风螺旋线约束条件:风螺旋线是一个p[p (x) , p (y) ]的点集, 转弯后导航台位置N[N (x) , N (y) ], 引入逻辑运算符非 () 、与 (∧) 、或 (∨) 、条件 (→) 以及双条件 () , 根据飞行程序设计有关标准, 导航台类型 (VOR, NDB) 不同, 引导角度不同, 边界宽度d不同, d1为转弯风螺旋线末端距离转弯后航迹距离, d2为导航台边界的最大距离, 以此来比较两者的包含关系, 事件取值条件判断前有:

设风螺旋线与直线交点为T[T (x) , T (y) ]

2.3 多条风螺旋线数学建模

以上两种风螺旋线数学构造方法, 是多图元间关系的一种, 其中一个图元固定 (直线边界部分) , 可预测。但在飞行程序设计工作中, 由于飞行轨迹的不完全线性和全风向因素的考虑, 多图元均不固定的关系情形也很常见[4], 典型图例有:基线转弯保护区的各转弯处的共切连接, 直角程序中各个小保护区之间包络线图[1 (d) ]。

在直角模板中以飞行标称航迹为基准, 依据飞行参数计算得到各风螺旋线的圆心位置, 按相关规则连接多个风螺旋线的共切线或是做多个风螺旋线的共同包络线。由于坐标系中基准点的不固定, 且多个风螺旋线的圆心位置均是以不同的飞行参数计算而来, 位置和角度的不确定造成想要直接建立切线切点的数学方程非常困难。以前文中风螺旋线与直线关系作为启发, 使用类人工智能的图解方法[5], 模拟人工绘制图纸的过程, 寻求一个计算机可编译的逻辑方法成为这种类型问题解决的重点。

由于构造纯数学模型难度很大, 考虑数学方法与计算机环境识别的结合, 在实现了前文中提出的风螺旋线构造基础上, 先获得各独立的点集。猜想通过点与点间的关系获得多个风螺旋线间公切线。由几何对切线的定义可知:切线指的是一条刚好触碰到曲线上某一点的直线。更准确地说, 当切线经过曲线上的某点 (即切点) 时, 切线的方向与曲线上该点的方向是相同的, 此时, “切线在切点附近的部分”最接近“曲线在切点附近的部分” (无限逼近思想) , 换言之, 切线是对于一个非圆的曲线无线逼近的值而非一个确定值。在无限细分范围中可以认为, 在一个小步长的图元中, 风螺旋线的曲率变化可以忽略不计, 可以引入切线的定义。在上述理论的支撑下, 对于切点位置构造局部的数学模型如下:

(1) 以极小的步长时风螺旋线上部分圆弧简化为圆为思想, 设两条风螺旋线的点集分别为p[p (xi) , p (yi) ], q[q (xj) , q (yj) ], 两条风螺旋线圆心分别为c1[c (x) , c (y) ]c2[c (x) , c (y) ]设公切线连接i与j点, 图元数学关系为式 (5) 。

(2) 式 (5) 为风螺旋线在小步长逼近下, 一条直线与两条渐开线的相切关系确定的条件。该方法缺点在于只有在极小步长下才符合圆的半径与切线垂直的定理, 而极小步长下, 半径与切线的垂直关系由于编程语言本身的容差可能在不止一处点发生, 因此结果很不稳定!并且连接圆心与风螺旋线上各点, 极大的增加了算法的空间复杂度, 不利于实现效率, 因此在方案一基础上调整得到如式 (6) 。

显然减少了判断的条件的加入, 只需要比较渐开线上已有各点即可, 程序的空间复杂度大大降低。

3 图元设计的开发实践

Lisp语言的最大特点[6]在于从诞生就拥有的9种基本思想, 其中一些现在已经广泛被其他语言接收, 这9种思想依次为:条件结构、函数也是一种数据类型、递归、变量的动态类型、垃圾回收机制、程序由表达式组成、符号类型、代码由树形表示法组成, 以及任何时候整个语言的可用性。由于这些特点使得lisp可以充当扩展语言, 构造自己的宏。同时在上一部分中对于风螺旋线与其他图元要素间的关系中的建模难点做了较为细致的分析, 有了上述的数学方程式作为图元关系的描述方法、运算关系 (数字运算及逻辑运算) , 为把图元的几何结构关系转化为计算机编程语言提供依据。

程序执行的流程图如图3。

首先针对单个风螺旋线做单块建模, 只有精确的风螺旋线作为其他关系的衔接基础才能保证飞行程序保护区整体的精确性, 对模型的描述方法已经由数学模型解释, 不再赘述, 图4为编译实现的效果图。

循环语句以while语句表达, 圆弧本身有CAD绘图命令实现, 但以阿基米德螺旋线的最初概念设计, 将风螺旋线不再看做一个图元, 而是若干符合上述公式的点的集合, 这些集合以曲线命令连接形成逼近。

该程序设计实现过程中通过风螺旋线起始与结束的角度方向作为图形控制的约束条件, 每一步长下风带来转弯半径的变化看做是围绕一个圆心的运动过程, 示例螺旋线中自右向左逐渐增大了半径, 点的位置基本没有误差。

完成单个风螺旋线的设计后, 处理与导航台保护区边界关系时, 便可以直接调用部分函数, 此处体现了Lisp语言的先进性, 自定义的模块加入到整体程序编译中。与单个图元设计的不同, 将转完后导航台的边界首先作为已知结构形成判断条件, 风螺旋线的生成过程与导航台的边界扩大同步发生, 即“生成性图解”的思想[7], 随着保护区边界的延伸变化, 当多种结构结合在一起, 之前设定的约束条件发挥作用, 根据不同的约束将风螺旋线与直线的关系作出两种分类。

该部分先调用生成的风螺旋线模块, 将风螺旋线的程序结束条件转化为与导航台保护区相对关系的判断条件, 并将此条件函数作为一个值, 当 (d2<d1) 时模拟人工删除边界内曲线, 反之, 扩大保护区, 构成外扩图形。在CAD平台下编译时需先将图元对象转换为VLA对象以便模拟人工延伸, 剪切, 由VLisp提供的这种功能, 将坐标, 点元组成的图元视作同类的整体命令操作, 运行结束后, 再由VLA返回图元, 供图元继续拓扑, 并且可以用vlax-curveget Start Point调用图元中的初始点定位。

图5 (a) 中是在指定点转弯离场飞行程序保护区中风螺旋线边界包含转完后保护区边界的情况, 图5 (b) 中是指定高度离场飞行程序保护区中转弯后保护区边界包含风螺旋线边界的绘制方法, 两种不同类型的开发模块中均达到预期效果, 显示了这种模拟人工画法得到的模块在不同的程序中均有较好的共享性。

针对最复杂的多条风螺旋线间关系的确定方法, 前文中建立了数学理论上的判定条件, 初步的开发测试获得相应的图元切线, 角度误差在1°左右, 虽然已经较小, 但考虑飞行程序保护区参数单位较大 (千米级) , 希望对边界范围的影响进一步减小。在实际开发过程中, 不仅要考虑数学意义上的精确性, 还要兼顾编程语言本身的容差与算法实现的复杂度长度问题[8]。

为了尽可能降低lisp语言在系统执行时的固有的容差范围对精度影响, 借鉴人工绘图设计时以参考物 (直尺等) 寻找曲线切线的方法, 确定的最终方案为:打散既有风螺旋线表集上各点, 以其中一条风螺旋线为基准, 依次取点与另一风螺旋线上各点依次相连, 相切的另一重要图元特征, 即是该线与曲线本身在一定小范围内只有一个交点。同时将经验知识作为一种条件改进方案, 将遍历点的位置总是以多条风螺旋线之间最近点开始循环, 以尽早找到目标切线, 同时添加约束使当切线生成时停止遍历循环, 在减小空间复杂度的同时缩短时间长度。

实现该功能的语言编译逻辑为:判断交点数量, 由此判断是否为切线的条件, CAD空间中每个点有三维的坐标元素, 当元素数量大于3时, 认为有超过一个的交点不符合判断切线的条件, 将该图元排除;而所有约束条件均满足时即是约束循环的条件, 控制整个循环的执行时间。整个图元的生成过程中, 相关结构中的点均是处于备选中, “切线”的不断尝试过程是一直存在的, 这即是动态的图解过程。

4 结语

此次开发中, 对飞行程序保护区设计的计算机辅助绘图实现做了一定的探索和研究, 尤其针对主要影响精度和效率的风螺旋线的应用展开了较详细的讨论。开发过程中积累的经验和编程模块将可以在大型空域仿真系统中有一定的指导作用, 但由于开发时间较短, 缺乏一定的编译语言的经验, 在程序执行效率以及精度上或许可以进一步提高, 同时抛砖引玉, 希望在更多的相关设计中拓展功能, 优化程序。

参考文献

[1] 朱庆, 高玉荣, 危拥军, 等.GIS中三维模型的设计.武汉大学学报 (信息科学版) , 2003;28 (3) :283—287Zhu Q, Gao Y R, Wei Y J, et al.Design of 3D model for 3D.Geomatics and Information Science of Wu Han University, 2003;28 (3) :283 —287

[2] 陶晓晨.数字图解—图解作为“抽象机器”在建筑设计中的应用.北京:清华大学, 2008Tao X C, Digital diagram:diagram functioning as“abstract machine”in architectural design, Beijing:Tsinghua University, 2008

[3] 韩波.图解.大连:大连理工大学, 2013Han B, Diagram.Dalian:Dalian University of Technology, 2013

[4] 刘渡辉, 帅斌, 王大海, 等.区域导航航路和进离场程序设计分析与仿真.交通运输工程与信息学报, 2006; (03) :123—127Liu D H, Shuai B, Wang D H, et al.Analyzing and simulating of RNAV route and SID STAR procedure design.Journal of Transportation Engineering and Information, 2006; (03) :123—127

[5] 胡志超, 杨富富, 王沁峰, 等.已知摇杆摆角和伸缩比条件的摆动传动缸机构的图解分析与综合.机械设计, 2011;28 (1) :66 —69Hu Z C, Yang F F, Wang Q F, et al.Graphic analysis and synthesis of swing cylinder mechanism with given rocker swing angle and extension ratio.Journal of Machine Design, 2011;28 (1) :66—69

[6] 屠志伟.基于Visual Lisp的AUTOCAD的二次开发.长春:吉林大学, 2008Tu Z W, The secondary development of AUTOCAD based on visual lisp.Changchun:Jilin University, 2008

[7] 毛新丽.生成性图解法在建筑创作中的应用初探.长沙:湖南大学, 2011Mao X L.The research on generative diagram methodology in the practice of architectural creation.Changshai:Hunan University, 2011

辅助程序论文 篇7

随着科学技术的发展,越来越多的科技手段应用在各个行业中来提高生产效率。在农业生产方面,从过去的手工劳动到现在开始趋向的农业机械化和农业数字化,很多的高科技产品已经在农业生产劳动中开始应用,不仅节省了人力资源,还在很大程度上解决了劳动生产效率低的问题。在北美和西欧地区这种趋势表现的非常明显。在我国的新疆和东北地区,人们将带有数字化设备的大型农业机械应用在农业生产中的发展势头日益迅猛,极大地提高了农业生产的效率。而农机辅助导航系统可以提高作业的行距和作业方向的精确度,解决了作业精度以及工作效率低的问题[1],同时将人工作业技术的难度降低。所以,推广农机辅助导航系统对于我国发展现代化农业具有十分重要的意义[2]。在此,就如何在实现串口通信和GPS数据解析问题进行了探讨。

1 嵌入式系统

嵌入式系统是“用来控制、监视或者辅助操作机器和设备的装置”。它是以计算机技术为基础,以应用为中心,并且软硬件是可裁减的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标的严格要求的专用计算机系统,这是国际电气和电子工程师协会的定义。对其他设备的控制、监视或管理等功能是该系统能够实现的[3]。

嵌入式系统是软件和硬件的综合体,也可以在机械等附属装置上使用,这主要是从应用上加以定义。

2 开发平台

2.1 硬件平台

硬件平台的设计遵循稳定性高、可扩展性好、具备一定的抗干扰能力和模块化标准[9]。

农机GPS辅助导航程序选用的硬件分别是LJD-eWin7000触控一体机和AG332型GPS接收机。

为了能够给用户提供更好的精度以及各种差分服务[5],因而AG332型接收机采用了先进的高性能双频接收机和Ultimate Choice 技术。AG332型接收机可以得到下面几种精度:RTK 基准站差分精度为±2.5cm ,OmniSTAR HP 高精度卫星差分精度为±(5~10)cm ,OmniSTAR XP 高精度卫星差分精度为±(7~12)cm ,具有多种精度选项的AG332适合于各种需要;同时,具有RS232接口的AG332型GPS接收机能满足日常通信的需要[6]。

LJD-eWin7000是一款拥有32位ARM920高速处理器内核的触控一体机,该机的操作系统是Windows CE5.0。在EVC或者Visual Studio 2008开发环境下使用VC++或C#编程语言实现的程序可以在LJD-eWin7000触控一体机下运行。由于LJD-eWin7000触控一体机具有移植功能强大的特点,因此在该触控一体机下编译成功的程序同样可以移植到其他基于Windows CE系统的ARM体系结构操作平台上运行。同时,为了满足与其他设备进行通信的要求,LJD-eWin7000触控一体机具有RS232等接口。

2.2 软件平台

本文开发系统是在Windows XP操作系统下进行,以VS2008(Microsoft Visual Studio 2008)为开发程序的IDE(Integrated Development Environment,集成开发环境)。VS2008是微软公司针对在.NET框架下的IDE,可以在该环境开发Windows程序、Web程序和智能设备的程序。该环境支持Visual C# ,Visual Basic和Visual C++编程语言。农机辅助导航系统采用Visual C#进行实现。

Visual C#是微软为.NET Framewor量身订做的程序语言,是微软公司在2006年发布一种面向对象的编程语言。

.NET Framework 在微软公司所有其他.NET开发产品中都是核心概念。.NET Framework由两个要素组成:CLR(公共语言运行库,Common Language Runtime)和一组名为.NET Framework 类库的程序库。用户应用程序是在CLR中执行的,CLR是标准化的程序执行环境,这些程序可以用各种高级语言编写,如Visual Basic,C#,NET Framework 类库提供用户代码在CLR中执行时所需要的功能支持,这种功能支持与使用的编程语言无关。因此,用C++,C#或者任何其他支持.NET Framework的语言编程的.NET程序,都使用相同的.NET程序库。

C#拥有C/C++的强大功能和Visual Basic的简易使用的特性,是第一个组件导向(Component-oriented)的程序语言。其和C++与Java一样亦为对象导向程序语言,但是C#所编写的程序只能在Windows环境下运行。

2.3 Serial Port

在农机辅助导航系统中采用的是串口通信,其优点是具有足够的带宽以实现监视功能,并且传送距离长和成本低,在定义通信协议时比较简单,同时在实现功能时没有复杂的编码;但是,其缺点是传送速度比较慢[4]。

C#提供了与串口通信相关的控件:Serial Port。为了方便地使用这个控件,需要引入该控件的命名空间,其命名空间为System.IO.Ports。

Serial Port控件与C#提供的其他控件一样,具有属性、事件和方法。用户通过这些设置和使用该控件。通过对Serial Port控件的操作可以实现对串口发送和接收数据[4]。

2.4 Serial Port基本说明

在使用Serial Port进行串口通信之前先来了解Serial Port的基本情况。

Serial Port控件的属性:

1) Name。用来指示代码中用来标识该对象的名称,如SerialPort1,在调用串口的时候就可以直接输入SerialPort1即可。

2) BaudRate。指串行端口上使用的波特率,在使用串口的时候可以根据实际的需要更改串口的波特率,常用的波特率,如4 800,9 600,192 000。

3) Portname。指要打开的通信串口的名称,串口通信前必须确定串口名,如COM1,COM2等,以此对应设备上的串口。

4) IsOpen。标识符,串行通信端口打开或未打开的标志。

5) Handshake。根据实际需要是否选择用于串行端口数据交换中流控制的握手协议。

Serial Port控件的事件:

1) DataReceived。每次从Serial Port接收数据时引发,当数据输入到缓冲区的时候触发该事件,从而达到对串口接收到的数据进行接收。

2) ErrorRecived。每次从Serial Port接收错误时引发,当接收到错误的数据的时候触发该事件,从而进行对接收的数据进行处理。

SerialPort 控件的方法:

1) GetPortNames:获取当前计算机的串行端口名称数组。

2) Open:打开一个新的串行端口连接,以进行串口通信。

3) Close:关闭串口连接,将IsOpen 属性设置为false,并释放内部Stream 对象。

3 GPS 数据格式

全球定位系统GPS 是英文Navigation atellite Timing and Ranging/Global Positioning System 的字头缩写词NAVSTAR/GPS 的简称[7]。

GPS 主要有3大部分组成:空间星座部分、地面监控部分和用户接收部分[8]。

GPS使用的是WGS-84坐标系(World Geodetic System-1984,1984年世界大地坐标系),采用大地精度(L)、纬度(B)和大地高程(H)来描述空间位置。GPS接收机采用NMEA(National Marine Electronics Association(美国)国家航海电子协会)规定的NMEA-0183数据输出格式。NMEA-0183是美国国家海洋电子协会制定的一种标准数据通信格式。用于GPS数据传输时使用“$GP”开始,常用的语句有GGA,RMC,GSA,VTG,GSA等,可根据实际需要选择使用。

本文中以“$GPGGA”为例。“$GPGGA”帧的结构及各字段释义如下:

GPGGA, <1>, <2>, <3>, <4>, <5>, <6>, <7>, <8>, <9>, <10>, <11>, <12>, <13>, <14>*hh

<1>当前位置的格林尼治时间

<2>纬度

<3>纬度标识,N或者S(南、北)

<4>经度

<5>经度标识,E或者W(东、西)

<6>卫星接收信号质量

<7>正在使用卫星的数目

4 串口通信程序的设计

在使用Serial Port控件完成串口通信时,需要对程序的整体功能进行分析,根据实际的需求设计合理的软件框架,设计友好的用户界面;对通信对象、通信端口号、通信协议进行合理地设置以便满足硬件配置的需要;然后编写符合需求分析的程序,实现对数据的接收和处理的功能。其中,图1为串口通信的流程图;图2为农机辅助导航系统的用户界面。

1)用Serial Port控件前应该先对其进行初始化和添加注册事件,主要代码如下:

//初始化SerialPort对象

com.NewLine = "";

com.DataReceived += com_DataReceived; //添加事件注册

2) 对Serial Port控件的状态进行判断,主要代码如下:

//根据当前串口的对象,判读对串口的具体操作

if (com.IsOpen)

{

Closing = true;

While(Listening) Application.DoEvents();

com.Close();

}

else

{

com.PortName=comboPortName.Text;

com.BaudRate=int.Parse(comboBaudrate.Text);

}

3) 利用Serial Port控件可以接收数据,在触发DataReceived事件后可以实现这一功能,代码如下:

Listening = true;//设置标记

int n = com.BytesToRead;//先记录下来

byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据

received_count += n;//增加接收计数

com.Read(buf, 0, n);//读取缓冲数据

程序正常运行后,在系统中收集到的数据如图3所示。

5 结论

在本文中,结合相关程序的代码,介绍了基于C#的嵌入式农机GPS辅助导航程序的串口通信的实现方法;讨论了在Windows XP操作系统和VS 2008开发平台下的串口通信程序的设计,同时对GPS的数据格式进行简单的介绍。该系统主要解决了如何利用串口读取AG332型GPS接收机收到的数据信息并对读取到的信息进行相应的解析。该系统是一种低成本、实时性较高、稳定性较好的信息采集系统,应用GPS技术、编程以及嵌入式系统等多种技术提供了GPS信息快速采集的一种解决方案,为农机自动化驾驶技术提供了良好的途径,更好地为数字化农业服务。通过实验得出,该系统运行稳定,为农机导航辅助系统的进一步研究奠定了基础。

参考文献

[1]王熙,王新忠.JD-9520T型履带拖拉机GPS自动跟踪驾驶系统[J].拖拉机与农用运输车,2005(6):15-16.

[2]于占宝,王熙.黑龙江垦区农机作业GPS导航自动驾驶技术应用[J].农机化研究,2011,33(9):208-211.

[3]于占宝,王熙,王鹏.基于嵌入式的农机GPS辅助导航系统串口通信实现[J].黑龙江八一农垦大学学报,2011(12):20-23.

[4]王文全.基于Serial Port的串口通信系统实现[J].科技广场,2011(5):21-23.

[5]孔德峰,汪春,王熙,等.基于GPS/GIS的大型农用拖拉机自动导航系统[J].农机化研究,2007(3):54-55.

[6]李强,李永奎.我国农业机械GPS导航技术的发展[J].农机化研究,2009,31(8):242-244.

[7]陈彩蓉.GPS技术及其在农业中的应用[J].农业装备技术,2008,34(6):14-16.

[8]雷伟伟,张锋,王元波.GPS技术在现代精准农业中的应用研究[J].农技服务,2008(3):113-115.

上一篇:实际岗位下一篇:北京工业