电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

活动编程范文

来源:莲生三十二作者:开心麻花2026-01-071

活动编程范文(精选9篇)

活动编程 第1篇

一、工具

(1) 共用工具:手电钻4把、开切电锯1台、砂轮机1台等。

(2) 各组工具:万用表、小手锤、大小活络扳手、直尺、卷尺、螺丝刀、平头钳、尖嘴钳、剪刀、各式锉刀、电工刀、砂纸等。

二、基本要求

按分配的设备器材, 制作出设计合理、体积较小、功能较多、操作较方便、外形美观的抢答器。

三、设计及制作指导

(1) 明确控制对象及控制范围:详细分析被控对象、控制过程和要求, 熟悉了解工艺流程后列出控制系统的所有功能和指标要求, 并指定较细致的工作进度计划, 注意程序设计要计划最多时间。

(2) PLC控制系统I/O点数估算、画出分配图。

(3) 硬件与程序设计:画控制系统流程图, 进一步弄清各信息流之间的关系, 然后具体安排输入输出的配置和地址编号, 再画出PLC端子和现场信号联络图表。通常, 硬件设计和程序编写可平行进行, 即进行程序设计的同时, 可以进行硬件配备工作, 如抢答器操作箱的制作、线路的安装, PLC的安装, 输入、输出线的连接等。

(4) 总装统调:总装统调前须进行模拟调试。用装在PLC上的模拟开关模拟输入信号的状态, 用输出点的指示灯模拟被控对象, 检查程序没有错误后, 方可将PLC接到系统里去, 进行总装统调。

首先, 对PLC外部接线要认真检查, 还可用自行编写的试验程序对外部线路做扫描通电检查, 检查接线有无故障。然后在不接入主电路情况下先进行预调, 确认接线无误才接上主电路, 将模拟调试好的程序送入存储器进行总调试, 直到各个部分的功能都正常且能协调一致成为一个完整的整体控制为止。假若统调达不到设计的要求, 那可对硬件和软件作调整, 比如外围线路及修改程序, 一直到全部调试完成。

四、完成情况及效果

(1) 参加此次活动的共有9个小组, 其中1个小组总装统调最后未能完成。

(2) 对剩下8个小组制作的抢答器现场进行操作验证:其中有1个组的抢答器功能较少、有1个组的抢答器不光功能较少且外形制作较差。我们在剩下的6个组中进行了评奖:一等奖1个, 二等奖2个, 其余为鼓励奖, 分别发给奖金与证书。

五、其中一组的设计制作 (成品在此略)

1. 抢答器功能说明及流程图, 如图1所示 (图略)

(1) 接通电源, 抢答器开始工作, 各组总分自动清零, 并将抢答器的答题时间默认赋值20S。

(2) 当主持人未按压开始按钮SB6, 三组中如有任意一组抢答, 则该组属于违例, HL6违例灯亮, 同时违例电铃响3S。主持人按压SB5按钮, 可将该组总分减少一分 (此设置可防止有人在抢答前故意按压抢答按钮不放手) 。

(3) 当主持人按压开始按钮SB6后, 接通开始指示灯HL7亮, 同时计时器T1开始计时10S, 10S内三组分别可通过SB1、SB2、SB3按钮进行抢答。三组中只要有一组按下抢答按钮, 接通对应的输出继电器, 相应的HL1、HL2、HL3指示灯亮, 并通过继电器的常闭触头形成互锁, 使其他两组不能抢答。如10S内没有一组抢答, 则按违例处理, 该题作废。

(4) 抢答成功的一组必须在规定时间内答题完毕 (默认时间为20S) , 如因题型不一, 主持人可按钮SB10 (每按一次加1S) 、SB11 (每按一次加10S) 进行适当加时。如在规定时间内不能完成答题的, 则按违例处理。

(5) 答题正确的, 主持人按SB4按钮加一分;答题错误的, 主持人按SB5减一分。

(6) 各组的分数通过累加, 通过七段数码管输出显示。

(7) 主持人按压SB7按钮可复位, 为下一轮比赛作准备。

(8) 主持人按压SB12按钮, 可对各组总分手动清零。

2. PLC I/O分配, 如 (图2) 所示

SB1第一组抢答按钮SB2第二组抢答按钮

SB3第三组抢答按钮SB4主持人加分按钮

SB5主持人减分按钮SB6主持人开始按钮

SB7主持人复位按钮

SB10主持人加时按钮 (每按压一次加1S)

SB11主持人加时按钮 (每按压一次加10S)

SB12各组总分清零按钮

HL1第一组抢答成功指示灯

HL2第二组抢答成功指示灯

HL3第三组抢答成功指示灯

HL6违例指示灯

HL7开始抢答指示灯

Y4接通违例电铃

3. 七段数码管显示接线图, 如 (图3) 所示

4. 程序设计说明

(1) 程序中采用主控[MC MCR]指令, 以实现抢答器的开始、复位。

(2) 应采用脉冲执行型的MOVP指令传送数据给寄存器, 按原设定的数据传送给寄存器进行累加, 反之, 不能按设定的数据传送给寄存器。

(3) 应采用脉冲执行型的ADDP指令将数据寄存器的数据进行累加, 按原设定的传入寄存器的数据进行累加, 反之, 不能按设定的数据在寄存器中累加。

(4) 应采用脉冲执行型的SUBP指令将数据寄存器的数据进行减法, 按原设定的传入寄存器的数据进行减法, 反之, 不能按设定的数据在寄存器中减法。

(5) 采用乘法指令MUL对数据寄存器内容做移位处理。

(6) 在LED数码显示设计中, 由于PLC的I/O点数限制, 采用一块4位LED数码管, 数码管低三位用于显示3组抢答积分, PLC的Y10~Y17输出驱动数码管。同时, 要在一组数码管上同时显示三组答题积分, 采用MUL指令对2、3组分数做移位处理, 通过SEGL输出。

(7) SEGL指令说明:带锁存七段码显示, 该指令与可编程的扫描定时 (运算周期) 同时执行。为实施一系列的显示, 可编程控制器的扫描定时需要10ms以上, 不足10ms时, 使用恒定扫描模式, 请用10ms以上的扫描定时运行。

(8) 其他说明:在接通Y7的电路中串入M0、M1的常闭触点, 使得主持人按压加分或减分按钮后, 抢答器复位。

5. 梯形图, 如图4所示 (图略)

参考文献

[1]王兆义.可编程控制器教程[M].北京:机械工业出版社, 2000.[1]王兆义.可编程控制器教程[M].北京:机械工业出版社, 2000.

[2]李建兴.可编程序控制器及其应用[M].北京:机械工业出版社, 2001.[2]李建兴.可编程序控制器及其应用[M].北京:机械工业出版社, 2001.

活动编程 第2篇

程大赛活动计划

电气与信息工程学院“勤奋学习,创新实践”计算机

编程大赛活动计划

一、活动目的为推进学院素质教育,培养和激励我校学生在程序设计特别是算法分析与设计的能力、软件开发过程中的创新意识,综合运用高级语言程序设计、数据结构、算法分析与设计等课程的知识,提高大学生的科学素养,拓展我校学生的综合素质,丰富大学生的校园文化生活,营造浓郁的学术、科技氛围,进一步培养学生的创新意识、创新精神和创新能力。促进我校大学生程序设计竞赛活动的开展,让同学们学以致用,电气与信息工程学院策划开展以“勤奋学习,创新实践”为主题的大学生计算机编程大赛。

二、活动时间

三、活动安排

1、大赛宗旨:

旨在培养和激励高校学生的创造力、团队合作精神以及在软件开发过程中的创新能力。提高广大学生开展计算机软件设计的兴趣和能力,给广大在计算机程序设计方面有特长的同学提供展示才能的舞台。通过参赛,检验学生在压力下进行开发的能力,展示其创新能力,为加强校内同学间的交流和相互学习提供机会。

2、参赛对象:

辽宁科技学院全体同学

3.报名时间及方式:

(1)报名时间:

(2)报名方式:各院系学生由各院系分团委副书记统计本院系报名学生,将报名表送电信学院分团委相关负责任人。

4.比赛方式及要求

(1)本次大赛的比赛时间为三个星期,分C语言、VB语言、VF语言三个比赛组别,参赛选手必须在规定时间内完成参赛作品。

(2)比赛期间选手可以翻阅相关的工具书。

(3)参赛者应尊重自己的劳动成果,严禁将自己的作品拿给他人抄袭,严禁抄袭他人的作品。

(4)比赛期间不局限于参赛者使用何种技术体系,不局限于使用何种开发工具及操作系统。

5、活动时间安排

(1)活动宣传及报名时间:

主要以海报的形式进行宣传,各院系分团委协助在本院系进行宣传报名,具体报名时间待定。

(2)项目前期的培训:

电信学院组织专任教师进行赛前集中培训,培训时C语言、VB语言、VF语言三个组别分别进行培训,并对比赛中可能出现的疑问进行解答。

(3)项目评比:

1.项目完成度:根据需求文档中的说明内容核对完成的情况(30分)

2.项目的实用价值:实际应用中的价值体现(20分)

3.创新性和思维体现:有没有融入自己的想法和思维(20分)

4.代码规范:变量命名、缩进和注释,还有项目目录结构以及文件命名(20分)

5.安全与稳定性:输入验证,异常处理,运行稳定(10分)注明:根据选手专业年级,课程进度和扩展知识程度进行评分

(4)奖项设置

大赛设置一等奖1名

二等奖3名

三等奖5名

电气与信息工程学院分团委

交换编程——极限编程的延伸实践 第3篇

在传统的开发过程中,往往是一个人从一个模块的需求调研开始,然后作分析、设计、编码、单元测试,接着才会交给第二个人(专职测试人员)进行其他测试项目。这样的开发过程会因为开发人员的变动而对项目的进展产生较大的影响,所以在软件工程的一些实践中就有项目中编码人员的重要性远比项目经理大的认识,为了改变这种状态,软件工程的研究人员进行了大量的工作,其中有人提出了极限编程的12个核心实践。在极限编程中关于团队组织模型的一个核心实践就是结对编程方式,但是对于开发人员人手严重不足的项目中,很多软件企业是不认可这种组织方式的,他们认为这会浪费很多的人力,一加一不能大于二。

结对编程是极限编程12个核心实践之一[1,2,3]。在结对编程中,要求两个程序员使用一台显示器,一套键盘鼠标来完成所有分配给他们的任务。结对编程的支持者声明结对编程的开发方式与传统的编程方式相比有很强的优势,这包括更高的团队开发效率和更高的软件开发质量。在XP的宣传中提到,两个人结对在一段时间以后可以使得开发效率超过单人编程,同时质量也会得到提高[6,7]。同样,在2006年敏捷中国开发者大会上,著名软件工程大师Martin Fowler作为首席科学家的公司ThoughtWorks的总经理Sid Pinney先生也提到了这个问题,他作出如下解释:当两个人结对时间超过三个月以后,效率会超过两个人单独编程的效率!这里,三个月这个时间不是真实确凿的时间分界线,它只是一个模糊的大概的时间范畴,如果两个技术人员配合得好,也许只需要两个多月,如果配合不好,也许需要四五个月,或者更长的时间。

但是,在本文的实践过程中发现,几乎没有软件企业因为XP这样的宣传而采用结对编程的方式进行软件开发。除了ThoughtWorks,Google等少数公司外,几乎所有的公司都仍然采用传统的单人编程的方式进行软件开发。

在所能查阅到的所有关于结对编程优劣势分析和数据采集的文献资料共计173篇,其中以结对编程为主要研究目标的有71篇论文,在这些论文中提到的试验研究的对象大部分是在校学生[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]。只有不到十分之一的论文是关于专业程序员进行结对编程的实验[6,30,31],而这部分关于专业程序员实践结对编程的论文也并没有讨论结对编程开发效率是否真的能够达到两个同等水平的专业程序员单人编程的开发效率。几乎所有的论文的对比数据基础都是基于结对编程的两人组和单人编程的一人组之间进行的,这样的数据无疑并不能让软件企业信服这种开发方法所具有的优势。

同时还查阅到一些论文在实践的基础上提出了相反的观点,如Hanna Hulkko&Pekka Abrahamsson的研究就认为结对编程在与单人编程对比的时候并不能始终保持高效率和高质量。他们在文中写道:”They indicate that pair Programming may not necessarily provide as extensive quality benefits as suggested in literature,and on the other hand,does not result in consistently superior productivity when compared to Solo Programming”[31].

基于这样的实践和研究,本文认为,在与结对编程和单人编程的对比上,交换编程具有其特殊的优势。

1 相关工作

由于交换编程属于全新的概念,交换编程也属于结对编程与单人编程结合的产物,所以这里主要用它与结对编程进行对比,所能够查阅到的所有文献都是关于结对编程的。

北卡罗琳娜州立大学的几个研究人员从2002到2005年间[26]进行了一系列的试验并发表了多篇结对编程论文[11,13,16,18,19,20,21,24,26,28]。在他们的试验中全部采用的都是在校大学生,有1350名从大一到大四的学生参与了这一系列试验。他们分别从课堂教学和学校软件实践方面进行了关于性别差异、团队构建、布鲁克斯法则、个性特点,学习类型,技能水平,对个体编程的认同度,工作道德规范,或者时间管理偏爱等基于教学考虑的方面进行了结对编程试验,并得到了一些结对编程的支持性数据和观点。

University of Sannio的Gerardo Canfora,Aniello Cimitile,Corrado Aaron Visaggio等人对学习了一些编程课程的学生进行了结对试验,验证了个体经验和技能对结对编程过程中知识构建的益处[14]。

Matthias M.M¨uller和Frank Padberg进行了一系列的结对编程试验,他们在一篇论文[7]中认为,通过使用了一系列的度量方法来理解、模型化分析、评估结对编程在软件开发中的效果。在增加了人工成本的基础上,结对编程相对于传统开发过程更侧重于提高团队产量和代码质量。

Frank Padberg和Matthias M.M¨uller的另一篇论文[15]中得到了这样的试验结论:结对编程的效率提高比例与结对编程的个人的程序开发经验无关,而是和结对编程过程中的个人感觉有关。他们认为结对编程过程中结对程序员感觉越愉快他们的开发效率提高得就越多,这篇文章也从同样的角度验证了北卡罗琳娜州立大学2006年发表的关于Examining the Compatibility of Student Pair Programmers[26]文中提到的“个性特点,学习类型,技能水平,对个体编程的认同度,工作道德规范,或者时间管理偏爱”的结对观点,认为如果不考虑这些因素,结对的效果就无法体现出来。

但是,Hanna Hulkko和Pekka Abrahamsson的一篇论文[31]的试验中引入了企业中有经验的软件开发人员。在这个试验中,他们认为:“回顾这些可以看到绝大多数这方面的实验研究都是在大学环境中进行的。几乎没有在真实软件开发项目中详细审查下的结对编程被已存在的系统化实验研究过。因此,假设目前仍然没有纯粹的经验验证这种优势的存在。”据此和他们的试验结果,文中提出了针对结对编程的反面观点:“我们的经验发现表明:提供了与结对编程所声明的优势对比的结果。他们显示出:结对编程也许不像相关文献中建议的扩展的质量好处一样的必要,并且另一方面,当与单独编程进行比较的时候,这些结果并不能证明结对编程可以一直保持较高的生产率。”

2 方法定义

与结对编程类似,交换编程也是一个非常简单和直观的概念:两位或者多位程序员轮流开发同一个软件系统的同一个模块的不同阶段的任务。

交换编程的方式更合适的说法应该是交换开发,这种方式不仅仅可以应用于软件项目,也适合其他研究开发型项目。相对而言,这更是一种更容易被人们接受的方法,在前文大家已经看到了它在实际项目中的事实,这里先分析一下它与结对编程的不同之处:

它仍然采用传统的一人一机的开发方式,如图2;结对编程是两人一机,如图3。

它在每个迭代间进行多人交换或者两两交换,结对编程没有交换的概念。

它与传统的编程方式之间的差别是在每个迭代间进行多人交换或者两两交换,而传统编程没有交换的概念。

这里说明一下两个概念:

轮流交换:三个以上的程序员之间相互交换所开发的工件,不仅限于三个。例如:A1的开发内容交给A2做下一阶段开发,A2的交给A3做下一阶段开发,,An的交给A1做下一阶段开发。这种方式称为轮流。如图4、图5、图6。

两两交换:两个程序员之间相互交换所开发的工件。仅限于两人之间,如图7和图8。

交换编程中的操作与其他过程有较大的差异,根据经验,建议在软件工程实施的各个阶段按照如下的方式进行:

(1)需求工程中,需求调研和需求分析进行轮流交换;

(2)概要设计(分析模型)开发中,需求分析到概要设计进行轮流交换;

(3)详细设计(设计模型)开发中,概要设计到详细设计进行轮流交换;

(4)编码实施启动后,详细设计到编码的交换采用两两交换。

在全程建模的开发方法下的交换编程应用方式如下图:

在编码以前全部采用轮流交换的目的就是为了让更多的人了解项目进展的全部内容,有利于增加团队内的交流,使更多的人对项目所开发的内容熟悉,并能让他们提出自己的观点,也有利于使更多的人从更多的角度来研究某个系统模块所需要实现的功能和用户需要解决的实际问题,不会因为某个人的定式思维而出现理解偏差,从而造成对需求的理解不到位。

详细设计到编码的交换采用两两交换,这是因为前期需求已经基本上都稳定下来了,这时候不需要对用户需求进行更多方面的理解,只需要进行实施并进行纯粹的编码工作即可。此时做轮流交换已经不存在任何意义,相反只能影响开发进度。

3 优劣分析

关于结对编程,很多公司对其也有一些常见顾虑,如图10,图11,图12所示:

表1中表述了传统的单人编程,交换编程,结对编程以及交换编程和结对编程配合使用四种人员组织形式下在常见的软件开发相关问题上应用适用性以及表现出来的特点。

表1的十四项内容分别从团队稳定性,技术水平,开发周期,团队人员等四个方面对这四种团队内人员组成方式进行了分析。从上面可以看到交换编程对几乎所有的这些项目都有其明显的优势,总体上看,交换编程无论在管理层面还是在团队组织层面或者是在项目变化上都优于单人编程和结对编程。

4 试验结果

2002年4月在上海进行的一个ERP项目中实际采用了结对编程的方式来进行部分模块的开发。两个各自独立完成了一个模块开发的程序员携手进行第三个模块开发时采用了结对编程的方式。两个人只用了四天时间,就完成了这个新的模块(其模块难度与前面完成的模块开发难度相同)的全部功能,并且这个模块开发完成后几乎是一次性通过了全部测试。相对于此前做的功能模块来说,时间仅有其他模块开发时间的十分之一。

但由于结对编程会让人感觉到资源被浪费了一半,在2002年10月开始的一个中国电信MSS项目中,项目组提出进行结对编程的时候被管理层拒绝。那如何才能借鉴结对编程的优势,并能降低这种表面的浪费,而又能让大家交流起来,同时能提高团队的稳定性呢?

4.1 项目基本情况

这是电信MSS项目的核心业务系统部分,包括了规划、可研、设计、施工、试运行、验收、财务、合同等多个重要环节和多个部门的业务。这个项目在最初评估的开发周期就是第一个版本在五个月内完成,整个项目至少要做上一年以上,而最后的实际情况是,这个项目随着不断的升级和调整一直开发了三年多。

可以对比的数据是:2003初到2004年10月间SAP基于自有的ERP系统给中国电信提供了完成同样功能的一套产品来替代这个团队所开发的这个产品,SAP也向中国电信承诺了要针对中国电信的行业企业特点进行定制开发,但是在2004年底推广应用前被宣布试验失败,延期推广。这个对比数据主要是为了证明这个业务系统的复杂度和规模都是相当巨大的,但是,在国外企业实施失败的情况下,国内一个小团队的开发却完成了南方电信11个省公司版本和电信集团公司版本的全部开发,2年内没有发生开发人员辞职的事情,由此可见,交换编程的开发方式带来的团队开发效率和稳定性都是比较好的。

4.2 团队组成情况

当时团队开发人员数量为11个,人员技能较为均衡,没有经验和开发水平远远超出其他人的技术人员。最初的开发团队是十一个人,后来扩展到二十三个人,其中三个有五年以上开发经验,两个三年开发经验,另外的六个人技术水平相对较低只有一年多的实际项目开发经验。对于团队人数少于20人的开发团队,企业一般不会允许采用结对编程的方式进行开发,因为这类项目大部分都存在时间紧,任务量大,承接项目的公司规模较小等特点。当然,对于类似微软,Google,ThoughtWorks,AutoDesk等对资源占用不敏感的产品开发公司中超过4人的团队就可以考虑进行结对编程。。

4.3 项目实施过程

由于开发团队中没有经验和开发水平远远超出其他人的技术人员存在,因此技术方案的论证过程都是在全体组员的共同讨论中制定下来的。因此在权衡了整个项目的实际情况后,团队经过讨论后决定在完成需求工作后,第二阶段设计模型的开发所有开发人员轮流交换来做。

在设计模型开发完成后,开发人员再次进行了轮流交换。两次交换完成后,保证了每一个模块都有至少两个人对其十分熟悉,一方面不会因为人员的变动造成团队的不稳定,另一方面保证每一个模块的开发人员都能找到人进行讨论,从而增加了团队内的沟通,方便了协调工作的进行。

因此在那个团队的开发过程中,经常是大呼小叫,无论走到哪里,都是十分热闹的场景。在Larry L.Constantine’s The Peopleware Papers[4]一书中的第十二章的“工作和游戏”一节中也有着类似的描述。Larry L.Constantine认为这是创造性团队应该具有的表现形式,这也符合Brooks[5]的胶冻团队的一个特征。

由于当时没有进行实际数据的度量对比,本文也无法从量化的数据上来说明问题,只能通过一些具体的事实来进行说明和验证:当时这个团队在七个月内满足了南方11家省级电信公司和中国电信集团公司的基本业务需求。从2003年4月到2003年12月期间,基本完成了该系统在这些省公司和集团公司等12个相对独立版本的二次定制开发任务。

5 总结

综上所述,交换编程的应用方式是有其适用环境的,并且具有较为明显的优势。交换编程的适应性较强,这里分为团队状况和项目情况两个部分进行说明:

团队状况:交换编程适用于人数超过两个人的开发团队,因为交换一次至少也需要两个开发人员。人数较多的团队也可以应用交换编程的方式,来进行项目开发。要求团队内有一两个具有两三年以上开发经验的成员,这是对于软件项目的最基本要求。

项目情况:项目规模不限,开发周期的适应性也较强,对于任何类型的项目都可以适用。

摘要:结对编程是一种编程组队方法,在这种方法中要求两个程序员使用一台电脑在一起工作完成同一个任务。在软件开发中关于结对编程的价值正在进行着争论。目前在这个领域大量的知识都是离散的和无条理的。回顾这些可以看到绝大多数这方面的实验研究都是在大学环境中进行的。几乎没有在真实软件开发项目中详细审查下的结对编程被已存在的系统化实验研究过。因此,假设目前仍然没有纯粹的经验验证这种优势的存在。由于结对编程在表象上给人以浪费一个开发人员的感觉,所以,在很多软件企业中,很难得到推广实施。在本文的报告中,我们给出了一种有别于结对编程和传统的单人编程的团队组织形式,这种形式融合了结对编程促进团队内相互交流的好处,保持了团队的稳定性,同时采用了传统单人编程的形式,不给人以浪费人力的感觉。

活动编程 第4篇

分类: C语言学习心得体会 2010-08-08 19:33 63人阅读 评论(1)收藏 举报

转载请注明出处:http://blog.csdn.net/ecorefeng

在编程过程中会遇到各种各样的错误与警告,这里我对编程过程中经常遇到的细节或者说常出错的地方进行了简单的总结,希望对正在编程的“童鞋”有所帮助:

C语言编程提示的总结:

1:使用 #include 指令避免重复声明

2:使用 #define 指令给常量值取名

3:在 #include 文件中放置函数原型

4:在使用下标前先检查它们的值

5:在 while 或 if 表达式中蕴含赋值操作

6:如何编写一个空循环体

7:始终要进行检查,确保数组不越界

8:良好的程序风格和文档将使程序容易阅读和维护

9:为了保持最佳的可移植性,把字符的值限制在有符号和无符号字符范围的交集之内,或者不要在字符上执行算术运算

10:用它们在使用时最自然的形式来表示字面值

11:不要把整型值和枚举值混在一起使用

12:不要依赖隐式声明

13:在定义类型的新名字时,使用 typedef 而不是 #define

14:用 const 声明其值不会修改的变量

15:使用名字常量而不是字面值常量

16:不要在嵌套的代码块之间使用相同的变量名

17:在一个没有循环体的循环中,用一个分号表示空语句,并让它独占一行

18: for 循环的可读行比 while 循环强,因为它把用于控制循环的表达式收集起来放在一个地方

19:在每个 switch 语句中都使用 default 子句

20:使用符号赋值符可以使用程序更容易维护

21:使用条件操作符代替 if 语句以简化表达式

22:使用逗号操作符来消除多余的代码

23:不要混用整型和布尔型值

24:一个值应该只具一种意思

25:如果指针并不指向任何有意义的东西,使它非法地指向了数组第 1 个元素的前面的内存位置

26:在函数原型中使用参数名,可以给使用该函数的用户提供更多的信息

27:抽象数据类型可以减少程序对模块实现细节的依赖,从而提高程序的可靠性

28:当递归定义清晰地优点可以补偿它的效率开销时,就可以使用这个工具

29:一开始就编写良好的代码显然比依赖编译器来修正劣质代码更好

30:源代码的可读性机会总是比程序的运行时效率更为重要

31:只要有可能,函数的指针参都应该声明为 const

32:在有些环境中,使用 register 关键字提高程序的运行时效率

33:在多维数组的初始值列表中使用完整的多层花括号能提高可读性

34:不要试图自己编写功能相同的函数来取代库函数

35:使用字符分类和转换函数可以提高函数的移植性

36:把结构标签声明和结构的 typedef 声明放在头文件中,当源文件需要这些声明时可以通过 #include 指令把它们包含进来

37::结构成员的最佳排列形式并不一定就是考虑边界对齐而浪费空间最少的那种排列形式

38:把位段成员显示地声明为 signed in 或 unsigned 类型

39:位段是不可移植的40:位段时源代码中位的操作表达得更为清楚

41:动态内存分配有助于消除程序内部存在的限制

42:使用 sizeof 计算数据类型的长度,提高程序的可移植性

43:消除特殊情况使代码更容易维护

44:通过锻炼语句消除 if 语句中的重复语句

45:不要仅仅根据代码的大小评估它的质量

46:如果并非必要,避免使用多层间接访问

47: cdecl 程序可以帮助你分析复杂的声明

48:把 void* 强制转换为其他类型的指针时必须小心

49:使用转移表时,应始终验证下标的有效性

50:破坏性的命令行参数处理方式使你以后无法再进行处理

51:不寻常的代码始终应该加上一条注释,描述它的目的和原理

52:避免用 #define 指令定义可以用函数实现的很长序列的代码

53:在那些对表达式求值的宏中,每个宏参数出现的地方都应该加上括号,并且在整个宏定义的两边也加上括号

54:避免使用 #define 宏创建一种新语言

55:采用命名约定,使程序员很容易看出某个标识符是否为 #define 宏

56:只要合适就应该使用文件包含,不比担心它的额外开销

57:头文件只应该包含一组函数和(或)数据的声明

58:把不同集合的声明分离到不同的头文件中可以改善信息隐藏

59:嵌套的 #include 文件使我们很难判断源文件之间的依赖关系

60:在可能出现错误的场合,检查并报告错误

61:操纵文本行而无需顾及它们的外部标识形式,这个能力有助于提高程序的可移植性

62:使用 scanf 限定提高可移植性

63:当你打印长整数时,即使你所使用的机器并不需要,坚持使用 1 修改符可以提高可移植性

64:滥用 setjmp 和 longjmp 可能导致晦涩难懂的代码

65:对信号进行处理将导致程序的可移植性变差

66:使用断言可以简化程序的调试

67:避免使用具有副作用的函数可以使程序更容易理解

68:一个模块的接口应该避免暴漏它的细节

69:将数据类型参数化,是它更容易修改

70:只有模块对外公布的接口才应该是公用的71:使用断言来防止非法操作

72:几个不同的实现使用同一个通用接口是模块具有更强的可互换性

73:复用现存的代码而不是对它进行改写

74:迭代比尾部递归效率更高

75使用 stdarg 实现可变参数列表

76:改进算法比优化代码更有效率

77:使用某种环境特有的技巧会导致程序不可移植

活动编程 第5篇

目前, 我国软件设计人才在数量上供不应求, 但很大一部分毕业生在编程能力上有一定的缺陷。 如何在教学中提高计算机专业学生的编程能力, 探索出有效提高编程能力培养的方法, 一直以来都是倍受关注的问题。

科学的教学方法能够激发学生的认知潜能, 提高学生的学习效率, 但前提这种教学方法是符合学生的认知规律。 美国心理学家Adelson和Soloway通过对编程专家和新手编程行为的对比研究, 提出著名的编程过程认知模型[1]。 这一模型的提出, 为有效培养学生的编程能力提供了心理学的支持。旨在介绍该认知模型, 并与教学实际相结合提出适宜的教学方法。

2 编程过程认知模型

2.1 基本特征

编程过程认知模型认为编程过程是一个问题解决的过程, 具有以下3 个基本特征。 (1) 目标导向性。 编程行为很显然有一个目标, 就是实现所要求的功能。 (2) 子目标分解。 如果该目标很容易实现, 例如在屏幕上输出一行文字, 这个也是问题的解决, 但这是对一般意义的解决。 问题解决的要点是编程专家需要将目标分成一些子任务, 如设计不同的功能模块。 (3) 算子应用。 算子是指将某一问题状态转化为另一问题状态的动作。 整个问题的解就是这些已知算子的一个序列[2]。 如将A、 B两瓶中的溶液互换问题, 问题的轨迹图如图1 所示。

2.2 模型成分及运作机制

Adelson和Soloway的编程过程认知模型如图2 所示。 该认知模型除了有上文中提到的目标和算子还包括知识基础和粗略心理模型。 其中知识基础是指, 为了能够完成具体程序的编写所需要的陈述性知识、 程序性知识和策略性知识; 粗略心理模型是指, 在程序设计的不同阶段心理模型的抽象水平不同, 当前阶段较下一阶段而言抽象水平高, 即为粗略心理模型。 可见, 粗略心里模型是动态的, 随着编程的进行而更加具体化。

编程过程以粗略心理模型向最终详细心理模型转化为最终目标。 粗略心理模型在编程过程中动态发展, 以所具备的知识基础为基础, 在目标和算子的控制下不断细化, 最终详细化为与可执行程序一致的最终详细心理模型。 在最终详细心理模型的指导下完成具体的程序。

目标和算子控制着粗略心里模型细化的方向。 粗略心理模型不断细化过程其实是目标的在编程过程中在算子的作用下不断分解过程。 无论是粗略心理模型还是最终详细心理模型和目标、 算子与知识基础之间相互作用。 在构建最初的粗略心理模型时, 编程者需调用自己已有知识储备 (即知识基础) , 若缺乏相应知识或具有错误知识, 则无法建构最初心理模型或建构错误的模型, 而粗略心理模型的建构反过来又会激活相关领域知识; 显然知识基础也决定着目标设定与算子选择, 缺乏相应知识或具有错误知识, 则会导致设定错误目标及选择错误算子, 而后者对前者也具有制约作用, 决定着激活和调用哪些知识。

3 借鉴意义

编程者以所具备知识储备为基础, 构建粗略心理模型, 利用算子, 逐个实现子目标, 将粗略心理模型不断细化为详细心里模型, 最终形成与可执行程序一致的详细心理模型, 指导程序编写。 通过上文对编程过程认知模型运作机制的分析可知, 知识基础在编程过程中起着决定性的作用。 在教学过程中提高学生陈述性知识、 程序性知识和策略性知识共同构成编程者的知识基础的掌握程度, 可以有效提升学生的编程能力。

3.1 基础知识成分识别

使用基础知识成分识别并确保学生能全部掌握这些成分, 将会强化编程者的知识基础。 软件设计学习之初, 学生要大量学习陈述性知识, 如程序语言的约定, 数据的定义规则等。教师在教学过程中, 首先分析要教授内容的要素即基础知识成分识别, 这种教学方法被称作是成分分析法[3]。 掌握学习是成分分析法行之有效核心环节, 在这一环节的根本任务是跟踪学生在每个成分上的绩效, 以此确保所有成分都被掌握。这一过程也可以理解为各类算子的储备阶段, 但这些算子仍然处于陈述性状态, 在算子的应用上还很迟钝。

3.2 有目的的练习

有研究指出, 只有投入大量的时间练习才能获得某一领域的专业技能, 但并非所有练习都能使得能力提升。 我们也注意到很多学生花费大量时间编写程序, 但却没有取得很大的进步。 问题的关键在于他们的练习是否是有目的练习。 有目的练习和普通练习的区别在于以下两点: (1) 学习的动力。 在有目的的练习中, 学习者不是机械地操作, 他们有学习的动力。 针对这一点, 教师在安排练习的同时要从情感上激发学生练习的积极性, 适时地鼓励也可增加学生学习的动力。 (2) 反馈。 学生能够得到关于自身操作的反馈, 他们可以通过比较自己的操作和正确的操作不同, 发现哪些做对了, 哪些有差距, 并能消除差距。 这就要求教师在练习的设计上要把握题目的数量和难度。

在有目的练习过程中, 学生最初的错误理解会被逐渐发现和改正而且解决问题所需要的各要素之间的联系被强化。在有目的练习之后, 陈述性知识转化为模式驱动的程序性知识。 学生编程能力的变化就是从外显的运用陈述性知识转变为直接运用程序性知识。

3.3 策略学习

在前面的陈述性知识和程序性知识的学习, 其实是很多小问题的反复出现, 能够快速得到问题的解并可以验证问题的解是否正确。 然而实际的编程问题往往是一个庞大的复杂问题, 短时间内无法解决更无法评估解决的方法是否正确, 但它们解决过程是类似的。 也就是说, 在解决实际编程问题与解决简单问题相似的, 编程者都是从问题的陈述开始着手, 到子问题再到更下一层的问题, 直到问题的解决, 这一策略也叫自上而下。 这一策略应用的困难在于需要设立目标和子目标并记住它们, 对于复杂问题, 这无疑给工作记忆带来了沉重的负担, 即在粗略心理模型构建和细化的过程中很容易失败, 无法到达最终详细心里模型, 而不能完成编程任务。因此, 如何细化粗略心里模型, 确定子目标的粒度以平衡记忆负荷是策略性知识学习的关键。 在策略学习中, 可以模仿问题解决的实例, 或是通过直接的指导而习得。 这类知识的教学教师要安排合理的课程设计任务, 以提高学生的策略知识的掌握程度。

4 结语

基于编程过程认知模型提出了提高学生编程能力的教学方法。 在分析中, 重点叙述了知识基础的重要性, 针对3 个层次的知识与教学实际相结合给出了基础知识成分识别、 有目的的练习、 策略学习具体的实施方法。 但是, 在学生编程能力的培养中, 知识基础的提高是重点也是难点, 因此, 需要更多的学者去关注并研究。

参考文献

[1]郝宁, 吴庆麟.埃德尔森的编程过程认知模型简介[J].开放教育研究, 2004, 04:46-48.

[2]约翰, 安德森, 著.认知心理学及其启示[M].人民邮电出版社, 2012, 227-257.

活动编程 第6篇

1 规则曲面的特征

变量编程属于手工编程。手工编程一般只能实现X、Y、Z任意两轴轮廓编程以及三维直线编程,但对某些具有特定几何特征的规则曲面也可进行手工编程,特别是借助变量还可实现较为复杂规则曲面的手工编程。

从理论上将只要在进刀平面能建立函数关系、在切削平面能编写轨迹,这样的曲面就可进行变量编程。如图1所示的锥台,该曲面用普通两维半手动编程几乎无法实现,但借助变量的计算则可在XZ面内确定一条棱边的函数,实现Z向进刀,也可在XY内确定环切圆半径与Z向进刀深度的函数关系,实现环切,但此类曲面的计算比较复杂。因此,归纳比较适宜变量编程的规则曲面应具备以下特征:

(1)用平行于XY或XZ或YZ面的一系列平面剖切三维实体,在各剖切平面上得到的图形均为相似形;

(2)相似形的几何中心在垂直于剖切面的同一轴线上。

图2所示凸半球满足上述特征,利用变量编程非常方便。

2 数控系统的变量

以FANUC0i-MC数控系统为例列出变量编程的基本信息,详细内容见相关操作说明书。

(1)变量类型:变量类型包括空变量(#0)、局部变量(#1~#33)、公共变量(#100~#199、#500~#999)、系统变量(#1000~)。

(2)算术及逻辑运算功能:变量可进行加法、减法、乘法、除法,正弦、反正弦、余弦、反余弦、正切、反正切,平方根、绝对值、舍入、上取整、下取整、自然对数、指数函数等算术运算以及或、异或、与等逻辑运算;还可进行BCD码与BIN码的互相转换。

(3)转移和循环功能:变量编程时可进行无条件转移(GOTO),以及等于、不等于、大于、大于等于、小于或等于、小于等于等条件转移。

(4)变量赋值:变量可直接赋值也可通过自变量赋值,但自变量只能给局部变量赋值,且有严格的对应关系。

3 变量编程的思路

规则曲面变量编程思路与两维半手工编程相似。以图2所示的凸半球为例,铣刀在XZ面内上升或下降一个弧段AB,实现Z向进刀,即半轴;在XY平面内做圆周运动,铣出该平面上的圆,即两轴;并依次类推。半轴进给量越小,球体表面越光滑。

两维半实体加工可用平头立铣刀或球头立铣刀。编程时平头铣刀按刀心编程,球头铣刀按球心编程,一般不使用刀具半径补偿功能,刀具轨迹可采用“行切法”或“环切法”,但不论从上至下或从下至上、从左至右或从右至左、从前至后或从后至前加工,刀具均不能发生干涉现象。

图3所示为使用平头铣刀加工凸半球面,按铣刀刀心编程。刀心在XZ面内沿圆弧进刀,在XY面内做环切。为避免平头铣刀在XZ面下刀时产生过切,刀心下刀圆弧的圆心一定要与轮廓圆心错开一个刀具半径。

图4所示为使用球头铣刀加工凹半球面,按刀心编程。刀心在XZ面内沿圆弧下刀(半轴),在XY面内做环切(两轴)。加工凹形曲面不宜使用平头铣刀,否则会出现平底现象。

曲面加时无论使用哪种铣刀,都会留下一定的残余高度,如图4所示。行距、层降和刀具直径对残余高度有直接影响,必要时可通过残余高度计算来确定合适的行距和层降。

4 规则曲面编程实例

以图4所示凹半球加工为例,使用球头铣刀,按球头铣刀刀心轨迹编程,XZ面内沿圆弧进刀半轴,XY面内做环切两轴。

使用配置FANUC0i-MC数控系统的德国DECKEL公司HR3C立式数控立式加工中心,以球头刀刀心对刀,其变量编程程序如下:

5 加工性能对比

利用CAM生成上述凹半球加工程序非常容易,但仔细分析发现CAM在此类规则曲面编程时存在一些问题,具体分析如下:

(1)以MASTER CAM为例,选择与手工编程思路最接近的等高线加工,即Z向深度进给,XY面内整圆环切,但XY面内得到的整圆运动轨迹是在允许误差范围内由直线段(G01)拟合出来的,而不是真正的G02或G03,大量的小直线段插补以及曲线拟合时的误差处理,会大大增加数控系统数据计算和处理的工作量,特别是球面精度要求较高时,数据处理和程序长度会成百倍增加,使加工时间大大延长,这也正是大部分CAM程序需要用DNC方式进行在线加工的原因;

(2)CAM利用DNC在线加工时,数控系统与电脑之间的数据传输速度会影响加工速度,特别是在高速高精度加工时,数据传输往往跟不上系统的需要,从而造成机床反应迟钝;

(3)就编程本身而言,CAM编程精度受CAD建模精度、刀具轨迹拟合、后处理等多方面影响。仍以MATER CAM为例,它在曲线拟合时一般采用等误差或等弦长直线逼近,尽管拟合误差被限制在允许范围之内,但却远远大于G02或G03的计算误差和插补误差;

(4)CAM宰加工尺寸不同、形状相同的曲面时,必须分别建模;

(5)个别CAM虽然可以生成G02或G03,但与手工编程的G02或G03意义不同,它是在半径误差限定下的“二次拟合”,即在后续处理中将小直线段再拟合成G02或G03,以减小程序量,但这同时又形成了“二次误差”。

尽管如此,CAM为不规则曲面加工,特别是异形曲面加工提供了有效途径。

对于规则曲面,参量编程则显示出其自身的优势,具体表现为:

(1)变量编程具有灵活性和通用性。以上述程序为例,修改#4参数可加工任意直径的凹半球,并可从毛坯一直到最后的成型;修改#29或#31参数可加工任意高度、任意起始角度和终止角度的凹半球;修改#2参数可分别进行粗、精加工;修改#3参数可更换其他尺寸的刀具;修改#9参数可改变环切进给速度;修改#10参数可改变半轴下刀进给速度。

(2)变量编程可提高机床执行程序的速度。变量编程采用G代码编码,如G01、G02等,数控系统可直接进行插补运算,运算速度较高,可提高系统工作效率。

(3)变量编程可将机床功能、加工工艺与编程相结合,实现一体化编程,不但可提高编程效率,还可实现程序的优化,并能非常好地体现编程者的工艺思想。

(4)参数编程可有效减少系统内存的占用空间,提高加工程序的汇编速度和质量。

(5)参数编程具备模块化编程的特质,可利用非模态、模态、G代码、M代码等多种方式调用变量程序模块。

6 结束语

规则曲面变量编程可从上述半球推广到多种形状,如孔系、二维规则型腔、柱面、锥面、简单斜面、斜面或圆角过渡、简单二次曲面等。灵活的参数编程可使机床达到最佳的工作性能,也给操作者提供了充分的自由发挥空间。

参考文献

[1]FANUC Series0i-MC操作说明书[Z].北京发那科机电有限公司.北京.2001.

[2]德国DECKEL-HR3C数控加工中心操作说明书[Z].北京蓝拓机电设备有限公司.北京.2006.

活动编程 第7篇

数控加工技术目前已非常普遍, 各种编程软件如CAXA制造工程师、UG编程软件等可以非常方便地编出各种复杂程序, 但编程软件编出的程序量非常大, 特别是编三维图形程序时, 有时程序量可以达到几百句, 不仅占用数控机床CPU内存的大量空间, 而且修改起来工作量也很大。为了培养手工数控编程方面的高技能人才, 本文阐述了椭圆数控加工原理, 着重介绍了椭圆数控编程参变量的选择及R参数编程。

1椭圆数控加工原理及参数的选择

随着数控技术的发展, 先进的数控系统不仅向用户编程提供了一般的基本功能与辅助功能, 而且还提供了R参数编程功能。R参数编程功能为提高数控系统性能, 实现椭圆等非圆曲线数控手工编程与加工提供了可能。

1.1椭圆数控加工原理

由于一般的数控系统只具有直线插补和圆弧插补两种基本插补功能, 因此对于椭圆的数控加工, 大多根据微分原理, 采用小段直线和小段圆弧来逼近轮廓曲线的数学处理方法来完成数控加工, 即在满足允许编程误差的条件下, 用若干直线段或圆弧段分割并逼近给定的曲线。

1.2参数的选择

如前所述, 非圆曲线的数控加工是利用小段直线和小段圆弧逼近的数学处理方法来实现的, 常用的有等间距直线逼近法和等步长直线逼近法。参变量的取值有以角度为参变量和以步长为参变量两种。等角度取值间距比较均匀, 而等步长取值间距相差比较大, 因此等角度取值加工精度优于等步长取值加工精度。

2 R参数编程

R参数编程功能充分利用数控系统的计算能力, 为椭圆等非圆曲线手工编程与加工提供了可能。下面分别叙述以等角度取值和等步长取值编制的可以加工内、外椭圆轮廓的R程序。

2.1等角度取值编程

由椭圆公式X=acosα, Y=bsinα (其中, a为长轴半径, b为短轴半径, α为角度变量) 可推导出加工内、 外椭圆的程序为:

2.2等步长取值编程

R参数编程不仅可以编制加工二维平面图形程序, 还可以编制加工三维立体图形程序。加工半个椭圆球程序为:

3椭圆数控加工R程序的特点

椭圆数控加工R程序的开发, 充分发挥了CNC系统自身的计算功能, 它具有以下特点:1R参数直接采用绝对编程方式;2既可铣削全椭圆又可铣削椭圆弧;3既可铣削外轮廓又可铣削内轮廓;4可进行椭圆球铣削加工。

4结束语

本文从R参数编程所需的参变量选择入手, 分析比较了等角度取值编程和等步长取值编程;并编制了可加工内外椭圆轮廓的R程序及加工椭圆球R程序, 实现了二维椭圆和三维椭圆球的数控手工编程与加工。

摘要:针对非圆曲线加工方法, 对椭圆曲线数控加工编程时以角度值为变量和坐标值为变量进行了比较, 编制了可实现椭圆内、外轮廓加工的R程序及可实现椭圆球加工的R程序。椭圆数控编程参变量的合理选择及R参数编程即保证了加工精度又缩短了加工程序段数, 提高了加工效率。

关键词:椭圆曲线,数控加工,参变量选择,R参数编程

参考文献

[1]翟瑞波.数控机床编程与操作[M].北京:中国劳动社会保障出版社, 2004.

[2]赵玉刚.数控技术[M].北京:机械工业出版社, 2003.

[3]熊光华.数控机床[M].北京:机械工业出版社, 2001.

基于可视化编程的自动化编程工具 第8篇

提高软件开发效率、降低开发成本、减轻编程负担是软件开发追求的目标[1,2,3]。在软件设计和开发过程中,人们通常采用的方法有如下两种方式,第一种是基于代码重用:利用类的特性,创建用户定义类;对公共处理用公用的函数实现;在可视化编程中,充分利用ActiveX控件实现目标功能;调用API函数解决实际问题[4]。另一种是基于共性之上的追加开发,即针对某类业务做成基本软件包,然后在基本软件包基础上根据各用户的特殊需求做追加开发,行业针对性很强的软件及ERP类软件均属于这一方式。第一种方式在一定程度上减少了代码编写量,但不同系统共用部分的分析及程序代码的编写工作量依然很大;第二种方式代码编写的总工作量会大幅度减少,但对基本软件包的理解往往需要在前期花费大量的时间。目前市场上较成熟的ERP软件,比如EBS、SAP等业务内容非常庞大,对于中小型企业,在硬件(设备)和人力资源(既懂业务又懂计算机)上都难以到位。因此,大多数企业仍然是根据自身实力和业务需要开发专用的管理软件。

为提高编程效率,研究者们提出了基于代码重用和常规结构程序的自动化编程方法[5,6],国内也有部分自动化编程工具问世,旨在让不会编程的人通过无代码操作实现简单的管理信息系统,这些工具往往只支持Access或SQL Server数据库,有一定局限性,对于不懂系统设计的人要用好它不是很容易,而对于懂得系统设计和编程的人来说,在某些方面反而感觉利用工具更加繁琐。日本一些软件开发机构致力于开发针对日文的文本分析工具来实现从设计书到程序自动生成,但目前还处于文本分析工具的完善阶段。本自动化编程工具通过在工具界面进行编程设定来完成自动化编程,而编程设定的依据来自于详细设计书,它实现了从设计书到代码的半自动化编程。

在软件开发过程中,我们通过拷贝、修改的方式,编写了很多类似的代码。这样的编程工作机械而枯燥,若修改不当将会花费较长的调试时间,如果能把这样的工作交给计算机来完成,将达到事半功倍的效果。我们只要抽象出各种系统开发的共性,找出编程规律,便可以利用计算机进行自动化编程,从而有效地减轻编程者负担,提高编程效率。同时,用计算机编写的程序,规范且风格统一,可增强程序的可读性及可维护性。

1自动化编程的可行性分析

虽然管理信息系统的设计各具特色,处理的信息也千差万别,但它们所实现的功能和操作模式往往是相似的[7]。通过对现存管理信息系统的比较分析,我们发现不同的管理信息系统从功能上划分通常包含三部分:信息登录、报表打印、批处理。批处理基本都是针对业务内容的,共性抽象较困难;报表打印中的数据生成部分及表格输出格式与业务关联也比较强,但用于数据检索条件输入的输入控件编程与信息登录处理类似,报表制作流程也基本一致的;信息登录处理有50%以上的处理集中在对界面(VB中的窗体form)中输入控件的编程处理,包括输入数据类型控制、光标走向、数据检查,这些处理与每一个输入控件都相关,故编程量较大,但编写的程序却非常雷同且有规律可循,此外,非输入控件的事件处理,除业务逻辑以外,其处理流程也是按统一方式设计实现。而同一系统由于数据处理类别不同,往往有多个甚至几十几百个类似的界面或功能模块设计。由于不同系统之间以及同一系统内部不同模块之间具有类似的处理模式,因此我们就能设计出一种通用的模式,基于这种模式来实现自动化编程。以下主要针对信息登录处理部分,探讨其自动化编程的实现。

2自动化编程工具的实现

针对大多数高级语言都有相应的可视化编程工具,通过控件拖放完成界面布局。由于用户界面的视觉效果要求较高,因此界面设计通常是手动实现。在可视化设计过程中,会自动生成一个资源描述文件,例如VB是以frm为扩展名的文件,VC是以rc为扩展名的文件,而.net系列、Jbuilder、Eclipse等在可视化设计完成后都会形成一个这样的资源描述文件。可视化设计之后的编程,基本都是针对资源文件里的控件。我们通过读取资源文件中需要进行编程的控件,并以一览方式(表格形式)表示,在一览表示中根据设计书进行编程设定,然后依据设定开始自动化编程。本自动化编程工具以VB6.0为平台,在可视化编程完成后实现程序自动生成。本编程工具本身也利用VB6.0开发实现。

2.1设计思想

分析可知,针对某一界面的编程包括两大部分:输入控件和动作控件(选项按钮、命令按钮、菜单等)。动作控件主要集中在系统功能实现和处理流程控制上,在设计时,只要遵循以下原则,各个界面的编程基本是一致的,因此就能较大比例地实现自动化编程。

(1) 采用某一可行的设计模式。

(2) 不同界面除输入控件以外的同类控件采用相同的命名。

(3) 不同界面的同类模块级变量采用相同的命名,如数据库连接相关的变量、主记录集、用于特殊判断的标志符等。

(4) 要求控件及变量命名含义明确,与数据库字段相关联的控件采用控件或数据类型标识与字段名组合命名。

不同界面中输入控件处理的内容不同,输入控制、错误检查和格式控制也各不相同,因此在不同界面的编程中,针对输入控件的编程差异较大,为了实现针对不同界面的动态编程,我们通过读取可视化编程完成后形成的资源描述文件,将需要进行编程控制的输入控件读出并用MSFlexGrid控件(本工具中的控件名为grdList)一览显示于界面,在一览显示中根据设计书进行编程设定,来实现不同输入控件的动态编程。

2.2界面设计

如图1所示,自动化编程工具的界面组成如下。

1) 编程文件选择栏

输入编程对象文件,在VB6.0中资源描述文件和编程文件是以frm为后缀的同一文件,因此这里实际上是指定了资源描述文件和编程文件。

2) 控件读入

此操作完成从资源描述文件读出需要进行编程的控件,可视化设计中,某些控件是不需要进行编程的,比如只用于显示的某些Label控件,对这样的控件特殊命名,在忽略读入控件栏输入特殊命名标志符来控制非编程控件的读入。

3) 输入控件编程设置一览

每一行为一个控件,每一列是对输入控件的常用编程设置,主要包括控件类别(主键项、检索项、普通项)输入字符类别控制、格式化控制、数值范围控制等编程设置项目,通过鼠标单击某单元格,内容设为"○",表示该控件在编程中需要对相应列进行对应编程,再次单击可取消设定,双击单元格可直接输入文字,主要用于格式化设定和检查标准设置,比如日期对应列设置为"YYYY/MM/DD",表示按此格式显示日期,最大值对应列设置为60,错误检查时就要验证数据是否超过60。

4) 操作说明

为使用方便,当鼠标停留在一览表格的行首某列时,操作说明栏会给出相应列设置所代表的意义,从而引导编程者进行编程设定。

5)整体编程内容设定

根据系统的具体设计,我们可以在界面中选择自动生成输入控件以外的其他程序,如父界面和子界面的相互切换程序、数据库连接程序、权限检查程序等。当用户对某一部分编程提出与通用设计不同的要求时,我们可以不选择这部分编程,而利用手工来完成,在需要自行加入程序的位置本工具自动写入提示注释以提醒编程者自己加入该部分处理的程序。

6) 编程实施

编程设定完毕,便可根据设定内容向编程文件中写入程序。

2.3程序实现

利用VB6.0写文件的功能,将程序按行写入对应的编程文件来实现自动化编程。编程内容包括以下部分:初始化处理、各命令按钮编程、输入控件编程以及与这几部分相关的被调函数的编程。

逐行写入程序涉及行文字列编辑,为便于指定空格数目(句前缩行)和带回车的程序行写入,工具中设计CatString函数来处理待写入程序行。

按以下顺序完成程序的自动编写。

1)模块级共用程序做成

以写方式打开编程文件,后逐行将语句写入文件。

编程界面中“权限控制程序做成”为选中状态时,定义权限标志变量。

如此依次进行所有变量定义。

2)针对输入控件的编程

通过实用性和可操作性结合分析,Key Down、Got Focus、Key Press、Validate四个事件处理即能友好地完成输入控制相关的功能,利用Key Down事件实现常用操作中利用键盘上下箭头实现光标按Tabindex正反向顺次移动;利用Got Focus事件实现控件内容的反显,醒目地提示用户光标位置(错误检查时定位出错位置);利用Key Press事件实现输入字符控制,让非允许输入无效;利用Validate事件,来完成及时输入错误检查和格式化。不同输入控件针对这四个事件处理的程序基本类似,因此我们在工程的公共模块中定义四个通用的事件处理函数(Key Down Event、Got Focus Event、Key Press Event、Validate Event),将输入控件对象本身作为函数参数,各输入控件在事件处理函数中对其进行调用即可。

在Key Press和Validate事件中完成对各控件的输入字符控制、格式化控制和输入内容检查,实现方法是,根据控件一览的设置,将输入控制方式、格式化方式和检查形式按一定方式编辑成字符串,然后将该字符串设为该控件的Tag属性,在Key Press和Validate事件处理函数中,通过读取Tag属性完成输入控制、格式化处理和输入内容检查,例如tag属性值“Keypress|9,/&&DATE|YYYY/MM/DD”(&&为项目分隔符)表示在Keypress事件中只能输入数字和斜杠,在Validate事件中检查输入数据是否日期,并格式化为带斜杠的日期表示形式。由于控件名本身是函数参数,这样,各控件编程代码一致,因为各自不同的Tag属性各控件执行时表现出不同的功能。

从控件一览逐行读取控件及编程设置,完成各输入控件的事件处理编程,由于这些事件处理已抽象为函数实现,编程只涉及函数调用,因此编程内容简单。以下为Key Press事件的编程实现:

上面程序中,变量x_ctrlname为控件名对应的列编号,x_Sel Cob为下拉选项标志对应的列编号。程序循环结束,一览中的所有输入控件的Key Press事件处理编程自动完成。Get KeyPress Event函数实现如下,参数str Ctrlname为控件名,str Sel Cob标识是否是仅供选择而不允许键盘输入的下拉列表框控件:

以上编程工具程序生成的代码如下:

以上为txt Birthday控件的Key Press事件处理程序,其中,通用的事件处理函数Key Press Event函数将根据Tag属性值进行可输入字符的控制。程序如下:

System Err Proc为错误处理函数,给出错误信息、发生界面名和函数名等错误信息提示。自动编程实现了Key Press事件处理外,还做成了调试用的预编译处理程序,错误处理程序,并实现了规范的两字符程序缩行书写。Key Down、Got Focus、Validate事件处理程序也可以类似生成。

3)动作控件的编程

遵循设计思想中的设计原则,各动作控件的编程内容及处理流程大体是固定的,将固定语句顺次写入编程文件即可,涉及数据库操作的SQL语句和特殊业务逻辑等需要手动编程部分以注释方式向编程文件中写入提示信息,编程者根据提示进行手动编程。

3应用实例

本自动化编程工具在日本都市银行债权管理系统和健康管理系统的开发中使用,这两套系统都涉及大量的不同种类的信息登录、修改、删除和查询处理。在进行完需求分析后,我们向用户推荐了实际开发中常用的一套设计模式,得到用户认可,并利用自动化编程工具予与实现。

在该模式的界面及功能设计中,我们利用同一界面实现登录、修改、删除、查询四项功能,界面由标题区、功能选择区、检索区、信息输入区、动作按钮区、状态栏组成。标题区包括系统标题及界面标题,用Label控件实现;功能选择区用选项按钮实现,用于界面在登录、修改、删除、查询功能状态间切换;检索区包括检索条件输入项和检索动作按钮,检索条件输入项为数据库表定义的主键项或索引项,用文本框(textbox)或下拉列表框(combobox)实现,检索按钮执行检索处理;普通项(非检索项目)置于信息输入区,当登录信息只涉及一个表且项目数不多时,用文本框和下拉列表框实现,图片信息可用图片框(PictureBox)实现,当数据项较多时,为了控制登录界面大小及实现处理内容的分类,利用SSTab控件的多个选项卡来实现,若需在同一界面实现多表数据的处理,对1:1关系的多表数据,利用SSTab控件的不同选项卡来放置不同表的内容,对1:N关系的多表数据,可在选项卡中用网格控件(MSFlexGrid)实现;动作按钮区设置执行、复原、取消、退出四个按钮,用于对界面状态、输入内容及数据入库进行控制;状态栏显示操者信息、处理状态及进度。

在本设计中通过控制登录、修改、删除、查询四种状态下主键项目和普通项目及动作按钮的可用状态(enabled属性),来防止系统使用时的误操作和降低编程复杂程度。

基于这种模式,针对输入控件的四大事件程序处理程序、四种功能状态下控件可用状态的设定和动作按钮的主控制流程全部由自动化编程工具完成,占总编程量的70%以上,只有对数据库操作的部分较复杂的SQL语句和需要根据业务进行特殊计算的界面显示项和登录项目需要手动编程来完成。

4结束语

自动化编程的目标为从设计书到程序自动生成。由于自然语言二义性较大,目前还没有完善的面向设计书的自动化编程工具,我们有望通过制定统一的设计书书写规范,开发出针对各种编程平台的自动化程度更高的编程工具。

参考文献

[1]宫涛,侯红,李玉鹏.一种基于OSS的开发框架及其应用[J].计算机应用与软件,2008,25(4):97-99.

[2]黄健,吴延海,刘晓佩,等.如何高效开发企业级的数据库信息系统[J].计算机工程与设计,2005,26(8):2168-2169.

[3]林冰玉,彭四伟,汪须忠.软件开发自动化平台的研究与应用[J].计算机工程与应用,2005(9):122-124.

[4]甘露.如何提高面向对象编程效率[J].电脑开发与应用,2004(1):44-45.

[5]Zhuo Kang,Yan Li,Li-shan Kang.Automatic Programming Methodolo-gy for Program Reuse[C]//Proc.of International Conference on Com-putational Intelligence and Security,2006,1:208-214.

[6]Reformat M,Chai Xinwei,Miller J.Experiments in automatic program-ming for general Purposes[C]//Proc.of15th IEEE International Con-ference on Tools with Artificial Intelligence,2003:366-373.

活动编程 第9篇

可编程控制器 (PLC) 在我国工业方面的应用越来越广泛, 尤其是德国西门子系列的PLC在我国可编程控制器使用方面占了相当大的比重。通过西门子S7-200编程方法的学习, 可以解决部分工业智能控制的问题。

2 S7-200编程方法

2.1 S7-200的程序结构

S7-200分为线性结构和分块结构两种形式的程序结构。也可以叫做线性程序设计和分块程序设计。

2.1.1 线性程序设计

当程序中有多个需要控制的任务时, 该设计方法就是把这些任务根据工程需要编写在主程序 (0B1) 中。下面我们可以举一个例子说明一下, 假设在一个控制工程之中包含四个需要控制的任务, 分别为任A、B、C和D。那么线性程序设计即在一个主程序中我们将这4个控制程序根据要求编写进去。这种方法对于相对而言容易的并且规模较为短小的程序会有很好的效果, 读起来会比较容易, 而那些较为复杂的, 分支多的程序则不适用。

2.1.2 分块程序设计

这种方法相对于上面的方法就能很好的处理复杂程序的问题了, 它将总的工程分为许多个小而且简单的控制任务。这些小而且简单的控制任务也就是一个个子程序块。而最终通过调用的形式, 主程序将这些子程序整合在了一起, 这样就形成了一个完整的复杂的大程序。

当控制工程比较复杂, 且分支较多的情况下, 应用分块程序设计控制任务就更加便捷灵活了。在实际工程应用中更加广泛。而这每一个小任务块我们可以选择比较简单的线性程序方法, 这样两者相结合使用会使得程序的编制更加便捷。

2.2 S7-200的编程方法

经过上面的介绍, 对PLC的程序结构有了初步的了解, 下面对于编制PLC控制程序的方法进行简单介绍。其编程的方法较多, 常见的包括以下几种。

(1) 图解法编程

顾名思义该方法是靠画图来编写PLC程序的。图解法编程又可以分为梯形图法、逻辑流程图法、时序流程图法和步进顺控法。

(2) 经验法编程

该方法是运用与自己工艺比较接近的程序, 再根据实际的工程需要, 对该相近的程序进行逐一修改, 满足实际的工程需要。而这种经验法编程需要编程者具有很多的经验。

(3) 计算机辅助设计编程

该方法在编制PLC程序时是把PLC编程软件与计算机联通, 并在计算机上进行程序设计、离线或在线编程、离线仿真和在线调试等工作。S7-200的系列编程专用软件“STEP7-Micro/WIN 32”3.0支持Windows95, Windows98和Windows NT使用环境。

2.3 S7-200的编程步骤

前面我们对程序结构和编程序方法有了一个大概的了解, 下面我们就来对PLC程序的编写上进行学习。PLC程序的编写与计算机是类似的, 包括以下几个步骤。

(1) 对系统任务分块

为了便于编程, 我们通常会把较为复杂的、繁重的的问题简化成几个简单的、小的问题。这样对于一个复杂的工程来说, 就可以把它化为几个相对原系统而言简单的小任务了。

(2) 编制控制系统的逻辑关系图

在逻辑关系图中能够看出某个逻辑关系的结果, 并且可以得出这个结果应该导出的一些动作。而整个的控制活动进行的顺序可以作为这个系统的逻辑关系。

(3) 绘制各种电路图

在编制PLC的程序时很重要的一步就是绘制电路。绘制PLC的输入电路时要考虑以下几点:其一信号的连接点要与命名保持一致;其二输入端的电压和电流要适当的选取;其三要保证在特殊条件下系统能够可靠与稳定的运行;其四对于当高压引入到PLC的输入端时, 会不会对PLC造成较大伤害也是需要考虑的问题。绘制PLC的输出电路时, 同样的我们也要做到以下几点要求:其一输出信号的连接点要与命名保持一致;其二要保证PLC输出模块的带负载能力和耐电压能力;其三电源的输出功率和极性问题。

(4) 编制PLC程序并进行模拟调试

编制程序时在保证了正确、可靠的情况下, 如果能够经过改进, 使程序具有简捷、省时、便于阅读、便于修改的优点就是最好的结果了。在编写任何一个程序块时, 要对其进行模拟实验, 进行问题查找, 如果有错误即可及时的进行修改。

(5) 现场调试

任何程序的设计都要经过现场调试的环节, 因为只有经过现场调试的系统才能最终投入现场使用。现场调试过程中可以发现控制回路和控制程序不符合系统所要求的地方或者二者存在矛盾的地方。

(6) 编写技术文件并现场试运行

这是最后的一个步骤, 经过以上的步骤, 我们基本确定了系统的控制电路和控制程序, 也即整个系统的软硬件都有了。这时我们要对电路图、PLC程序、使用说明及帮助文件等技术文件进行整理。

3 小结

在编程时首先是要根据整个工艺来进行任务的分块, 然后正确的运用指令, 编写好每一个子程序块, 之后就可以进行单元调试的环节了, 这里包括了软硬件联调与系统总调, 还有对程序不满足工程要求的地方进行修改这三部分。最后经过一段时间的实验运行, 如果没有问题后就可以投入实际的运行了。

摘要:本文介绍了可编程控制器西门子S7-200编程方法。可编程控制器在工业智能控制方面有着重要的应用。本文主要从西门子S7-200的程序结构、编程方法、编程步骤进行论述, 对读者学习使用该系统有重要的指导意义。

关键词:可编程控制器,智能控制,编程方法

参考文献

[1]黄德先, 王京春, 金以慧.过程控制系统「M].北京:清华大学出版社, 2011.

活动编程范文

活动编程范文(精选9篇)活动编程 第1篇一、工具(1) 共用工具:手电钻4把、开切电锯1台、砂轮机1台等。(2) 各组工具:万用表、小手锤、大...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部