基于LabVIEW的时钟设计_第1页
基于LabVIEW的时钟设计_第2页
基于LabVIEW的时钟设计_第3页
基于LabVIEW的时钟设计_第4页
基于LabVIEW的时钟设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录1 概述12课题简介及意义22.1 设计时钟意义22.2 时钟简介33 虚拟仪器概述34 LabVIEW简介44.1 LabVIEW的运行机制54.1.1LabVIEW应用程序的构成54.1.2LabVIEW的操作模板74.2 LabVIEW的具体操作114.2.1 显示对象(Indicator)、控制对象(Control)和数值常数对象114.2.2 关于连线125 虚拟时钟系统设计的实现125.1 总体设计135.2 子vi的相关介绍145.3 功能及实现155.3.1 获得系统时间155.3.2 时、分、秒的获取165.3.3 数据的运算165.3.4 记录坐标变换185.3.5

2、图像的绘制195.3.6 While循环实现秒针的跳变205.3.7 程序结构介绍215.3.8 图像采集与图像处理225.3.9程序设计总体246. 结束语25参考文献26致 谢271 概述随着科学技术的快速发展,各种功能的软件的都得到迅速的开发与应用。虚拟仪器成为计算机技术和仪器科学领域完美结合的产特,代表了仪器仪表的发展方向。LabVIEW作为虚拟仪器开发的平台,是一个具有革命性的图形化开发环境,在工业测量和控制领域中掀起了一场变革。它具有功能强大、编程灵活、人机界面友好的特点,在测量技术与仪器工程科学领域中得到了非常广泛的应用。本文基于LabVIEW软件,设计一个虚拟的时钟程序,使之在

3、桌面可以直接显示,形象、直观、方便。通过对本设计的研究应该能够比较熟练的掌握Labview 软件的使用,并能在此平台上进行应用程序的开发。下面我将由时钟开始,对虚拟仪器、LabVIEW以及整个设计做详细的介绍。2 课题简介及意义2.1 设计时钟意义时钟,自从它被发明的那天起,就成为人们生活中必不可少的一种工具,尤其是在现在这个讲究效率的年代,时钟更是在人类生产、生活、学习等多个领域得到广泛的应用。然而随着时间的推移,人们不仅对于时钟精度的要求越来越高,而且对于时钟功能的要求也越来越多,时钟已不仅仅是一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。诸如闹钟功能、日历显示功

4、能、温度测量功能、湿度测量功能、电压测量功能、频率测量功能、过欠压报警功能等。钟表的数字化给人们的生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。可以说,设计多功能数字时钟的意义已不只在于数字时钟本身,更大的意义在于多功能数字时钟在许多实时控制系统中的应用。在很多实际应用中,只要对数字时钟的程序和硬件电路加以一定的修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。因此,研究数字时钟及扩大其应用,有着

5、非常现实的意义。 怎样让时钟更好的为我们服务?怎样让时钟更符合实际应用的需求?这就要求人们不断设计出新型时钟,不断设计出适合实际应用的多功能时钟。2.2 时钟简介随着人类科技文明的发展,人们对于时钟的要求在不断地提高。时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。高精度、多功能、小体积、低功耗,是现代时钟发展的趋势。在这种趋势下,时钟的数字化、多功能化已经成为现代时钟生产研究的主导设计方向。设计过程采用系统设计的方法,先分析任务,得到系统要求,然后进行总体设计,划分子系统,然后进行详细设计,决定各个功能子系统中的内部电路,最后进行测试。时钟的设计有很

6、多种实现形式。它可以通过单片机接口来实现,也可以通过硬件电路,运用各种芯片实现。当然还可以用许多硬件语言VHDL、软件语言C、JAVA等编程来实现。虚拟仪器LabVIEW软件,是一个具有革命性的图形化开发环境,内置信号采集、测量分析与数据显示功能,摒弃了传统开发工具的复杂性,从简单的仪器控制、数据采集到过程控制和工业自动化系统,它都得到了广泛的应用。出于它功能的强大性,本文通过LabVIEW开发的程序开完成虚拟时钟的设计。后文将先对虚拟仪器及LabVIEW软件进行介绍。3 虚拟仪器概述虚拟仪器(virtual instrumention)是基于计算机的仪器。计算机和仪器的密切结合是目前仪器发展

7、的一个重要方向。粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的例子就是所谓智能化的仪器。随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。另一种方式是将仪器装入计算机。以通用的计算机硬件及操作系统为依托,实现各种仪器功能。虚拟仪器主要是指这种方式。下面的框图反映了常见的虚拟仪器方案。图3.1虚拟仪器的主要特点有:n 尽可能采用了通用的硬件,各种仪器的差异主要是软件。n 可充分发挥计算机的能力,有强大的数据处理功能,可创造功能更强的仪器。n 用户可以根据自己的需要定义和制造各种仪器。虚拟仪器实际上是一个按照仪器需求组织的数据采集

8、系统。虚拟仪器的研究中涉及的基础理论主要有计算机数据采集和数字信号处理。目前在这一领域内,使用较为广泛的计算机语言是美国NI公司的LabVIEW。虚拟仪器的起源可以追朔到20世纪70年代,那时计算机测控系统在国防、航天等领域已经有了相当的发展。PC机出现以后,仪器级的计算机化成为可能,甚至在Microsoft公司的Windows诞生之前,NI公司已经在Macintosh计算机上推出了LabVIEW2.0以前的版本。对虚拟仪器和LabVIEW长期、系统、有效的研究开发使得该公司成为业界公认的权威。普通的PC有一些不可避免的弱点。用它构建的虚拟仪器或计算机测试系统性能不可能太高。目前作为计算机化仪

9、器的一个重要发展方向是制定了VXI标准,这是一种插卡式的仪器。每一种仪器是一个插卡,为了保证仪器的性能,又采用了较多的硬件,但这些卡式仪器本身都没有面板,其面板仍然用虚拟的方式在计算机屏幕上出现。这些卡插入标准的VXI机箱,再与计算机相连,就组成了一个测试系统。VXI仪器价格昂贵,目前又推出了一种较为便宜的PXI标准仪器。虚拟仪器研究的另一个问题是各种标准仪器的互连及与计算机的连接。目前使用较多的是IEEE 488或GPIB协议。未来的仪器也应当是网络化的。4 LabVIEW简介LabVIEW(Laboratory Virtual instrument Engineering)是一种图形化的编

10、程语言,它广泛地被工业界、学术界和研究实验室所接受,视为一个标准的数据采集和仪器控制软件。LabVIEW集成了与满足GPIB、VXI、RS-232和RS-485协议的硬件及数据采集卡通讯的全部功能。它还内置了便于应用TCP/IP、ActiveX等软件标准的库函数。这是一个功能强大且灵活的软件。利用它可以方便地建立自己的虚拟仪器,其图形化的界面使得编程及使用过程都生动有趣。图形化的程序语言,又称为“G”语言。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图或流程图。它尽可能利用了技术人员、科学家、工程师所熟悉的术语、图标和概念,因此,LabVIEW是一个面向最终用户的工具。它可以增强你

11、构建自己的科学和工程系统的能力,提供了实现仪器编程和数据采集系统的便捷途径。使用它进行原理研究、设计、测试并实现仪器系统时,可以大大提高工作效率。利用LabVIEW,可产生独立运行的可执行文件,它是一个真正的32位编译器。像许多重要的软件一样,LabVIEW提供了Windows、UNIX、Linux、Macintosh的多种版本。4.1 LabVIEW的运行机制4.1.1LabVIEW应用程序的构成所有的LabVIEW应用程序,即虚拟仪器(VI),它包括前面板(front panel)、流程图(block diagram)以及图标/连结器(icon/connector)三部分。1.前面板使用输

12、入控制和输出显示来构成。控制是用户输入数据到程序的接口。而显示是输出程序产生的数据接口。控制和显示有许多种类,可以从控制模板的各个子模板中选取。 图4.1 前面板原理图 图4.2 框图结构两种最常用的前面板对象是数字控制和数字显示。若想要在数字控制中输入或修改数值,你只需要用操作工具(见工具模板)点击控制部件和增减按钮,或者用操作工具或标签工具双击数值栏进行输入数值修。2.框图程序框图程序是由节点、端点、图框和连线四种元素构成的。节点类似于文本语言程序的语句、函数或者子程序。LabVIEW有二种节点类型-函数节点和子VI节点。两者的区别在于:函数节点是LabVIEW以编译好了的机器代码供用户使

13、用的,而子VI节点是以图形语言形式提供给用户的。用户可以访问和修改任一子VI节点的代码,但无法对函数节点进行修改。上面的框图程序所示的VI程序有两个功能函数节点,一个函数使两个数值相加,另一个函数使两数相减。端点是只有一路输入/输出,且方向固定的节点。LabVIEW有三类端点-前面板对象端点、全局与局部变量端点和常量端点。对象端点是数据在框图程序部分和前面板之间传输的接口。一般来说,一个VI的前面板上的对象(控制或显示)都在框图中有一个对象端点与之一一对应。当在前面板创建或删除面板对象时,可以自动创建或删除相应的对象端点。控制对象对应的端点在框图中是用粗框框住的,如例子中的A和B端点。它们只能

14、在VI程序框图中作为数据流源点。显示对象对应的端点在框图中是用细框框住的。如例子中的A+B和A-B端点。它们只能在VI程序框图中作为数据流终点。常量端点永远只能在VI程序框图中作为数据流源点。图框是LabVIEW实现程序结构控制命令的图形表示。如循环控制、条件分支控制和顺序控制等,编程人员可以使用它们控制VI程序的执行方式。代码接口节点(CIN)是框图程序与用户提供的C语言文本程序的接口。连线是端口间的数据通道。它们类似于普通程序中的变量。数据是单向流动的,从源端口向一个或多个目的端口流动。不同的线型代表不同的数据类型。在彩显上,每种数据类型还以不同的颜色予以强调。当需要连接两个端点时,在第一

15、个端点上点击连线工具(从工具模板栏调用),然后移动到另一个端点,再点击第二个端点。端点的先后次序不影响数据流动的方向。当把连线工具放在端点上时,该端点区域将会闪烁,表示连线将会接通该端点。当把连线工具从一个端口接到另一个端口时,不需要按住鼠标键。当需要连线转弯时,点击一次鼠标键,即可以正交垂直方向地弯曲连线,按空格键可以改变转角的方向。快速提示:接线头是为了帮助正确连接端口的连线。当把连线工具放到端口上,接线头就会弹出。接线头还有一个黄色小标识框,显示该端口的名字。3.从框图程序窗口创建前面板对象用选择和连线工具,你都可以用鼠标右键点击任一节点和端点,然后从弹出菜单中选择“创建常数”,“创建控

16、制”,或“创建显示”等命令。LabVIEW会自动地在被创建的端点与所点击对象之间接好连线。4. 数据流编程控制VI程序的运行方式叫做“数据流”。对一个节点而言,只有当它的所有输入端口上的数据都成为有效数据时,它才能被执行。当节点程序运行完毕后,它把结果数据送给所有的输出端口,使之成为有效数据。并且数据很快从源送到目的端口。图3.3如图4.3所示,这个VI程序把两个输入数值相乘,再把乘积减去50.0。这个程序中,框图程序从左往右执行,这个执行次序不是由于对象的摆放位置,而是由于相减运算函数的一个输入量是相乘函数的运算结果,它只有当相乘运算完成并把结果送到减运算的输入口后才能继续下去。请记住,一个

17、节点(函数)只有当它所有的输入端的数据都成为有效数据后才能被执行,而且只有当它执行完成后,它的所有输出端口上的数据才成为有效。图4.3再看另一个程序(如图4.4所示),哪一个节点函数将先执行,是乘法还是除法,在这个例子中,我们无法知道哪一个节点函数首先执行,因为所有输入量几乎同时到达。对于这样一种相互独立的数据流程,如果又必须明确指定节点执行的先后次序,就必须使用顺序(Sequence)结构来明确执行次序。图4.44.1.2LabVIEW的操作模板在LabVIEW的用户界面上,应特别注意它提供的操作模板,包括工具(Tools)模板、控制(Controls)模板和函数(Functions)模板。

18、这些模板集中反映了该软件的功能与特征。下面我们来大致浏览一下。1.工具模板(Tools Palette)该模板(如图4.5所示)提供了各种用于创建、修改和调试VI程序的工具。如果该模板没有出现,则可以在Windows菜单下选择Show Tools Palette命令以显示该模板。当从模板内选择了任一种工具后,鼠标箭头就会变成该工具相应的形状。当从Windows菜单下选择了Show Help Window功能后,把工具模板内选定的任一种工具光标放在流程图程序的子程序(Sub VI)或图标上,就会显示相应的帮助信息。 图4.5下述工具中注意1和2的区别,2用于编程时,1用于运行程序时。4是一个特有

19、的工具,它并不是一个简单的画线工具,而是一个符合LabVIEW语言规定的对象连接工具。工具图标有如下几种:表4.1图标名称功能Operate Value(操作值)用于操作前面板的控制和显示。使用它向数字或字符串控制中键入值时,工具会变成标签工具Position/Size/Select (选择)用于选择、移动或改变对象的大小。当它用于改变对象的连框大小时,会变成相应形状。Edit Text(编辑文本)用于输入标签文本或者创建自由标签。当创建自由标签时它会变成相应形状。Connect Wire(连线)用于在流程图程序上连接对象。如果联机帮助的窗口被打开时,把该工具放在任一条连线上,就会显示相应的数

20、据类型。Object Shortcut Menu(对象菜单)用鼠标左键可以弹出对象的弹出式菜单。Scroll Windows(窗口漫游)使用该工具就可以不需要使用滚动条而在窗口中漫游。Set/Clear Breakpoint(断点设置清除)使用该工具在VI的流程图对象上设置断点。Probe Data(数据探针)可在框图程序内的数据流线上设置探针。通过控针窗口来观察该数据流线上的数据变化状况。 Get Color(颜色提取)使用该工具来提取颜色用于编辑其他的对象。Set Color(颜色设置)用来给对象定义颜色。它也显示出对象的前景色和背景色。下面的两个模板是多层的,其中每一个子模板下还包括多个

21、对象。2.控制模板(Control Palette)注意:只有打开前面板时才能调用该模板。该模板用来给前面板设置各种所需的输出显示对象和输入控制对象。每个图标代表一类子模板。如果控制模板不显示,可以用Windows菜单的Show Controls Palette功能打开它,也可以在前面板的空白处,点击鼠标右键,以弹出控制模板。控制模板如图4.6所示,它包括如下所示的一些子模板。子模板中包括的对象,我们在功能中用文字简要介绍。 表4.2 图4.6图标子模板名称功能Numeric(数值量)数值的控制和显示。包含数字式、指针式显示表盘及各种输入框。Boolean(布尔量)逻辑数值的控制和显示。包含各

22、种布尔开关、按钮以及指示灯等。String & Path(字符串和路径)字符串和路径的控制和显示。Array & Cluster(数组和簇)数组和簇的控制和显示。List & Table(列表和表格)列表和表格的控制和显示Graph(图形显示)显示数据结果的趋势图和曲线图。Ring & Enum(环与枚举)环与枚举的控制和显示。I/O(输入/输出功能)输入/输出功能。于操作OLE、ActiveX等功能。Refnum参考数10Digilog Controls(数字控制)数字控制11Classic Controls(经典控制)经典控制,指以前版本软件的面板图标。12Activex用于ActiveX

23、等功能。13Decorations(装饰)用于给前面板进行装饰的各种图形对象。14Select a Controls(控制选择)调用存储在文件中的控制和显示的接口。15User Controls(用户控制)用户自定义的控制和显示。3.功能模板(Functions Palette) 注:只有打开了流程图程序窗口,才能出现功能模板。功能模板是创建流程图程序的工具。该模板上的每一个顶层图标都表示一个子模板。若功能模板不出现,则可以用Windows菜单下的Show Functions Palette功能打开它,也可以在流程图程序窗口的空白处点击鼠标右键以弹出功能模板。功能模板如图4.7所示,其子模块如

24、下所示。个别不常用的子模块未包含。图4.7表4.3图标子模板名称功能Structure(结构)包括程序控制结构命令,例如循环控制等,以及全局变量和局部变量。Numeric(数值运算)包括各种常用的数值运算,还包括数制转换、三角函数、对数、复数等运算,以及各种数值常数。Boolean(布尔运算)包括各种逻辑运算符以及布尔常数。String(字符串运算)包含各种字符串操作函数、数值与字符串之间的转换函数,以及字符(串)常数等。Array(数组)包括数组运算函数、数组转换函数,以及常数数组等。Cluster(簇)包括簇的处理函数,以及群常数等。这里的群相当于C语言中的结构。Comparison(比较

25、)包括各种比较运算函数,如大于、小于、等于。Time & Dialog(时间和对话框)包括对话框窗口、时间和出错处理函数等。File I/O(文件输入/输出)包括处理文件输入/输出的程序和函数。Data Acquisition(数据采集)包括数据采集硬件的驱动,以及信号调理所需的各种功能模块。Waveform(波形)各种波形处理工具Analyze(分析)信号发生、时域及频域分析功能模块及数学工具 。Instrument I/O(仪器输入/输出)包括GPIB(488、488.2)、串行、VXI仪器控制的程序和函数,以及VISA的操作功能函数。Motion & Vision(运动与景像)Mathe

26、matics(数学)包括统计、曲线拟合、公式框节点等功能模块,以及数值微分、积分等数值计算工具模块。Communication(通讯)包括TCP、DDE、ActiveX和OLE等功能的处理模块。Application Control(应用控制)包括动态调用VI、标准可执行程序的功能函数。Graphics & Sound(图形与声音)包括3D、OpenGL、声音播放等功能模块。包括调用动态连接库和CIN节点等功能的处理模块。Tutorial(示教课程)包括LabVIEW示教程序。Report Generation(文档生成)Advanced(高级功能)Select a VI(选择子VI)User

27、 Library(用户子VI库)4.2 LabVIEW的具体操作4.2.1 显示对象(Indicator)、控制对象(Control)和数值常数对象显示对象和控制对象都是前面板上的控件,前者有输入端子而无输出端子,后者正好相反,它们分别相当于普通编程语言中的输出参数和输入参数。数值常数对象可以看成是控制对象的一个特例。在前面板中创建新的控制对象或显示对象时,LabVIEW 都会在流程图中创建对应的端子。端子的符号反映该对象的数据类型。例如,DBL 符号表示对象数据类型是双精度数;TF 符号表示布尔数;I16 符号表示16位整型数;ABC符号表示对象数据类型是字符串。一个对象应当是显示对象还是控

28、制对象必须弄清楚,否则无法正确连线。有时他们的图标是相似或相同的,可以根据需要明确规定它是显示对象还是控制对象。方法是将鼠标移到图标上,然后点右键,可出现快速菜单(例见右图)。如果菜单中的第一项是Chang to Control,说明这是一个显示对象,你可以根据需要,将其变为控制对象。如果菜单中的第一项是Chang to Indicator ,说明这是一个控制对象,你也可以根据需要,将其变为显示对象。控制对象和显示对象都不能在流程图中删除,只能从前面板上删除。4.2.2 关于连线连线是程序设计中较为复杂的问题。流程图上的每一个对象都带有自己的连线端子,连线将构成对象之间的数据通道。因为这不是几

29、何意义上的连线,因此并非任意两个端子间都可连线,连线类似于普通程序中的变量。数据单向流动,从源端口向一个或多个目的端口流动。不同的线型代表不同的数据类型。下面是一些常用数据类型所对应的线型和颜色:类型颜色标量一维数组二维数组整形数兰色浮点数橙色逻辑量绿色字符串粉色文件路径青色当需要连接两个端点时,在第一个端点上点击连线工具(从工具模板栏调用),然后移动到另一个端点,再点击第二个端点。端点的先后次序不影响数据流动的方向。当把连线工具放在端点上时,该端点区域将会闪烁,表示连线将会接通该端点。当把连线工具从一个端口接到另一个端口时,不需要按住鼠标键。当需要连线转弯时,点击一次鼠标键,即可以正交垂直方

30、向地弯曲连线,按空格键可以改变转角的方向。接线头是为了帮助正确连接端口的连线。当把连线工具放到端口上,接线头就会弹出。接线头还有一个黄色小标识框,显示该端口的名字。线型为波折号的连线表示坏线。出现坏线的原因有很多,例如:连接了两个控制对象;源端子和终点端子的数据类型不匹配(例如一个是数字型,而另一个是布尔型)。可以通过使用定位工具点击坏线再按下 来删除它。选择 EditRemove Bad Wires 或者按下 可以一次删除流程图中的所有坏线。当 VI 无法运行,或者显示 Signal has Loose Ends (信号丢失终端)的错误信息时,这是一个快捷的调试方法。5 虚拟时钟系统设计的实

31、现5.1 总体设计一. 先从系统中获得一个初始时间,直接从软件用调用一个控件。二. 将获得的秒转换成所需要的时、分、秒,此处用一个子vi实现。三. 对时、分、秒进行函数运算,得到时钟指针的坐标值。这里用公式节点来实现。四. 将所得的坐标值输入给绘图的子vi,再用移动画笔的子vi进行移动指针。五在第四步之前要有个图片数据处理的过程。通过一个绘制平化像素图的子vi来进行处理与运算。六. 程序的循环实现。调用一个while循环。七. 程序的流程与结构要采用顺序结构实现,while循环要嵌套在顺序结构中,再调用库函数来采集图片的数据信息。整体流程图如图5.1所示。层叠式顺序结构图5.1 整体流程图以下

32、即为总体设计出来的时钟前面板及程序框图图5.2时钟演示(前面板)图5.3程序总体框图(后面板)5.2 子vi的相关介绍1建立子VI子VI(SubVI)相当于普通编程语言中的子程序,也就是被其他的 VI调用的VI。可以将任何一个定义了图标和联接器的 VI作为另一个 VI的子程序。在流程图中打开 FunctionsSelect a VI. ,就可以选择要调用的子 VI 。构造一个子VI主要的工作就是定义它的图标和联接器。每个VI在前面板和流程图窗口的右上角都显示了一个默认的图标。启动图标编辑器的方法是,用鼠标右键单击面板窗口的右上角的默认图标,在弹出菜单中选择 Edit Icon。图5.4显示了图

33、标编辑器的窗口。可以用窗口左边的各种工具设计像素编辑区中的图标形状。编辑区右侧的一个方框中显示了一个实际大小的图标。图5.4 图标编辑器窗口操作有两种方法,一种是通过vi创建子vi,另一种方法是通过在设计的vi程序上,先定一部分内容创建子vi。这里我采用第二种方法。2子VI的调用一个子VI程序,相当于普通程序的子程序。节点相当于子程序调用。子程序节点并不是子程序本身,就象一般程序的子程序调用语句并不是子程序本身一样。如果在一个框图程序中,有几个相同的子程序节点,它就象多次调用相同的子程序。请注意,该子程序的拷贝并不会在内存中存储多次。在新的vi上调用子vi,只需在程序框图设计窗口下,打开函数/

34、选择vi,找到要调用的已建好的子vi的路径,即可调用。5.3 功能及实现5.3.1 获得系统时间在程序框图面板中,从函数中选 放在程序框图中获取日期/时间(秒) 其输出端为 当前时间。返回当前时间的时间标示。LabVIEW将时间标识计算为自1904年1月1日星期五12:00am(通用时间)以来的秒数。图5.55.3.2 时、分、秒的获取 创建一个子vi,前面板中放入时间标识的控件,用来输入得到的系统时间。在程序框图中,放入秒至时间日期的转换函数,输出是一组名称时间值,将其按名称解除捆绑按名称解除捆绑,簇分解成簇的各个元素并。再将输出的各元素按名称捆绑,这样可以按照元素的名称替掉簇中的相应数据,

35、并合成一个新的簇。通过把控制或显示对象捆绑成一个簇,实现簇与子VI传递数据,同时,在后面赋给各元素相对应的数据类型。最后,输出到显示时间记录的控件中,完成了子vi时间标识到数据记录的设计。后续可以在原程序中按照上面的方法调用此子vi。 其程序框图如图5.6所示。图5.6 程序框图图4.45.3.3 数据的运算1实现小时的12进制 运用条件结构来实现小时的24进制到12进制的转换。输出数据h,当其大于12时,执行一个减12的操作。若不大于12则直接输出到下一步。2实现数字到坐标的转换首先要设置一个公式节点,主要在公式节点中运用函数算法来运算。公式节点是一个大小可变的方框,可以利用它直接在流程图中

36、输入公式。从FunctionsStructures中选择公式节点就可以把它放到流程图中。当某个等式有很多变量或者非常复杂时,这个功能就非常有用。利用公式节点可以直接输入一个或者多个复杂的公式,而不用创建流程图的很多子程序。使用文本编辑工具来输入公式。公式节点的帮助窗口中列出了可供公式节点使用的操作符、函数和语法规定。一般说来,它与C语言非常相似,大体上一个用C写的独立的程序块都可能用到公式节点中。设计输入值为上步所获得的smh。同时,在图形象素中,其坐标值要先确定。本例用时钟指钟的原点x0=67,y0=123,要在输入端赋值。还要用到角度的运算Pi=180度。(1)公式内程序如下所示。int

37、Rs=36,Rm=32,Rh=25, Rs_=14,Rm_=9,Rh_=6,float ws,wm,wh; ws=-pi/2+s*pi/30; wm=-pi/2+(m+s/60)*pi/30; wh=-pi/2+(h+m/60)*pi/6; xs=x0+int(Rs*cos(ws); ys=y0+int(Rs*sin(ws); xs_=x0-int(Rs_*cos(ws); ys_=y0-int(Rs_sin(ws); xm=x0+int(Rm*cos(wm); ym=y0+int(Rm*sin(wm); xm_=x0-int(Rm_*cos(wm); ym_=y0-int(Rm_sin(wm

38、); xh=x0+int(Rh*cos(wh); yh=y0+int(Rh*sin(wh); xh_=x0-int(Rh_*cos(wh); yh_=y0-int(Rh_sin(wh);输出端为xs ys xs_ ys_ xm ym xm_ ym_ xh yh xh_ yh_ 的值。(2)程序解读输入x0 y0为时钟图片的中心转点(下文称为中点)的坐标位置,图片原点在图片的左上角(0,0),中点为(67,123)。RsRmRh设置为时针、分针、秒针从中点到指针针尖的长度。Rs_Rm_Rh_设置为从中点到指针尾端的长度。wswmwh设置为每一秒、一分、一小时,指针所转的弧度。后来的运算都是对时钟

39、每走一秒,每个指针的坐标位置。对于由公式节点输出的坐标值,对xy成对捆绑后输出到下一个功能模块。程序框图如图5.7所示。图5.75.3.4 记录坐标变换功能:这个模块记录了标的变换,使图片上的指针不断的变动。实现:用两个子vi。1.绘制直线子vi对此子vi,在程序框图中从图片函数中选中绘制直线节点,在输入端口上各创建相应的输入控件。在前面板中,各控件都会显示出来。此后,要对这个vi做一定修改,在其中又建立了一个设置画笔状态的子vi,用来具体完成对画笔的数据设定(如图5.8所示)。 图5.8其程序框图如图5.9所示。图5.9之后,通过一个选择节点对绝对坐标的确定做出选择,再将所得数据通过对数据作

40、强制类型转换,最后由连接字符串节点来完成连接后输出到新图片。程序框图如下图5.10所示。图5.10 2. 移动画笔子vi此vi与上个有相似之处,它不需再对画笔进行设置,而是直接可对各控件的数据进行操作,得出新的图片数据。它主要完成旧的到新的坐标点的移动。具体的程序框图如图4.8所示。完成上述两个子vi后,做如图5.11所示的连接。图5.11图5.12对于上一排数字,1/0是对秒针粗细的设置,3/0为对时针分针粗细的设定。而67/123是对时钟中点的坐标值输入。都是进子vi的新位置节点。5.3.5 图像的绘制功能: 对于采集的图像信息做处理运算,最后做为时钟的表盘背景图。实现:1.用数组设定图片

41、的定位信息,做为输入下一个子vi(绘制平化像素vi)的输入数据。具体为图像类型,图像深度,图像,掩码,颜色,矩形(又包括其上、下、左、右的坐标信息)。如图5.13所示。 图5.13 图5.14 图5.152.绘制平化像素的子vi的设计 前面板的输入控件,除了上述信息控件外,还要一图片输入控件与一新图片显示控件。 程序框图部分,首先,是对图像数据信息按名称解除掉捆绑,使各个数据信息独立输出。如图5.14所示。其次是对矩形数据的处理,前面的vi获得了矩形的左、上、右、下的数据,将其进行相减操作,得到图片的长和宽后分别输出。还有其它部分的信息都做了复杂的处理,主要是将得到的数据在一坐标系中,实时地显

42、示出来,用数据类型的强化转换、条件结构、for循环、数组、簇索引等功能,实现了数据的处理记录与图像的显示功能。如图5.15所示。 5.3.6 While循环实现秒针的跳变While 循环可以反复执行循环体的程序,直至到达某个边界条件。它类似于普通编程语言中的 Do 循环和 Repeat-Until 循环。While 循环的框图是一个大小可变的方框,用于执行框中的程序,直到条件端子接收到的布尔值为 FALSE。该循环有如下特点:l 计数从0开始(i=0)。l 先执行循环体,而后i+1,如果循环只执行一次,那么循环输出值i=0。l 循环至少要运行一次。 图5.16 While 循环示意图在这里,要

43、用到的是定时循环结构。定时循环结构是一种特殊的循环结构,是在While循环结构的基础上经过改进而成的,在程序执行一个或多个方框结构(帧)时,用户可以指定每一次循环的执行周期。等待(ms)(如图5.17) :等待指定长度的毫秒数,并返回毫秒计时器的值。将0连接到毫秒计时值输入,可迫使当前线程让出对CPU的控制。该函数作出异步系统调用,但是函数节点却是同步操作的。所以,直到指定时间结束,函数才停止执行。使用。等待前面板活动函数,可减少连续轮询前面板的需要并确定前面板的值是否被改变。图5.17用一个上面的等待毫秒设定循环时间,放一个布尔开关,完成While的整个循环。5.3.7 程序结构介绍这里先介

44、绍一下采用的程序结构,即顺序结构。Labview提供了平铺式顺序结构和层叠式顺序结构。平铺式顺序结构和层叠式顺序结构分别如下图5.18、图5.19所示。 图5.18平铺式顺序结构 图5.19层叠式顺序结构当平铺式顺序结构的帧都连接了可用的数据时,结构的帧按照从左至右的顺序执行。每帧执行完毕后会将数据至传递至下一帧。这意味着某个帧的输入可能取决于另一个帧的输出。在平铺式顺序结构中无需使用顺序局部变量来传递帧与帧之间的数据。平铺式顺序结构在程序框图上显示每个帧,故无需使用顺序局部变量即可完成帧与帧之间的连线,同时也不会把代码隐藏起来。层叠式顺序结构将所有的帧依次层叠,因此每次只能看到其中的一帧,并

45、且按照帧0、帧1、直至最后一帧的顺序执行。层叠式顺序结构仅在最后一帧执行结束后返回数据。如需节省程序框图空间,可使用层叠式顺序结构。使用顺序选择标识符浏览已有帧并且重新安排这些帧。层叠式顺序结构的帧标签类似于条件结构的条件选择器标签。帧标签包括中间的帧号码以及两边的递减和递增箭头。与条件选择器标签不同,不能往帧标签中输入值。在层叠式顺序结构中添加、删除或重新安排帧时,LabVIEW会自动调整帧标签中的数字。 5.3.8 图像采集与图像处理1调用动态链接库驱动图像采集卡NI公司针对自己生产的图像采集卡附带有卡的驱动和管理程序,对于普通的I/O卡,还不能直接被LabVIEW所应用,必须采取其他方法

46、。LabVIEW提供了4种调用外部程序代码的途径:端口直接操作、调用库函数节点(Call Library Function Node即CLFN)调用DLL(Dynamic Link Library动态连接库)、使用CIN(Code Interface Node,外部代码节点),调用Active X控件。其中端口直接操作,利用PortIn.Vi和PortOut.vi功能,此法应用简单,但无法实现较复杂的接口功能。而采用动态链接库,可以根据具体需要编写适当的程序,灵活利用LabVIEW的各项功能。较其余三种具有明显的优势。用户可以调用Windows标准的动态连接库(DLL),也可以调用用户自己编制

47、的DLL,实现LabVIEW与硬件的连接。建立一个DLL需要的文件有:h函数声明文件(可选,可包含在c源文件里);c源文件(必需);def模块定义文件(如果是使用标准调用或函数输出必需添加关键字_declspec (dllexport) 函数名)。H文件的作用是声明DLL要实现的函数原型,供DLL编译使用,同时还提供应用程序编译使用。C文件是实现具体文件的源文件,它有一个入口点函数,在DLL被初次调用的运行,做一些初始化工作。一般情况下,用户无须做什么初始化工作,只需保留入口点函数框架即可。def文件是DLL项目中比较特殊的文件,它用来定义该DLL项目将输出哪些函数,只有该文件列出的函数才能被

48、应用函数调用。要输出的函数名列在该文件EXPORTS关键字下面。本系统在LabVIEW平台下调用动态链接库实现图像数据的采集主要分为五步:(1)初始化并打开设备(DM642图像采集卡);(2)读取标志信号位,看是否初始化为默认值;(3)写入标志信号位,进行图像数据采集;(4)对SDRAM中所存储的图像数据进行读取;(5)关闭句柄并释放端口资源。主要调用动态链接库sd_pci64.dll的目标函数有PCI64_Open,PCI64_MemRead32和PCI64_Close,函数功能如下表4.1所示:表5.1 函数功能 PCI64_API INT32 PCI64_Open打开接入到DM642的P

49、CI板口PCI64_API INT32 PCI64_MemRead32读取目标地址数据PCI64_API INT32 PCI64_Close关闭端口函数的具体参数如下:PCI64_API INT32 PCI64_Open( int BoardNum, PCI64_HANDLE * pHndl ); BoardNum板口号(0-3),* pHndl 返回句柄的无符号指针,当返回值为0时,表示打开端口成功,非0时,表示失败。PCI64_API INT32 PCI64_MemRead32( PCI64_HANDLE Hndl, UINT32 Taddr,UINT32 Count , UINT32 *

50、 pData );获取由PCI64_Open传递的句柄指针,对目标地址存储的数据进行读取,需注意的是目标地址的寻址空间在4M之内,必须初始化一个所需目标数据大小的无符号32位数组空间。同样返回值为0时,表示成功,非0表示失败。PCI64_API INT32 PCI64_Close( PCI64_HANDLE Hndl );需要注意的是,在每次调用PCI64_MemRead32完成读取后,都要将端口关闭,释放地址空间。具体的调用过程如下:首先在新建的VI的Block Diagram中,Function Advanced子菜单中添加Call Library Function Node控件,然后对其

51、进行配置,添加该节点后进行配置的对话框如下图5.20所示:图5.20 调用CLFN配置框图分别对DLLs文件名称及存放路径,函数调用方式,需要调用的目标函数的名称,参数个数,每个参数的类型,数据类型及返回值类型进行设置。设置完成后单击“OK”返回LabVIEW 的设计面板(diagram)中。此时,Call Library Function已经根据刚才配置好的参数个数和类型设置好了输人输出端口,和其它的LabVIEW节点图标一样,只需要将其对应的参数连线即可。程序调用sd_pci64.dll的目标函数PCI64_Open,PCI64_MemRead32和PCI64_Close完成对指定地址空间

52、0x8102E000化为十进制,大小的数据读取,最后将读取的数据存储在无符号32位pData数组里面。在LabVIEW中利用CLFN节点可以较容易地实现访问动态连接库(DLL)。由于DLL是一个外部模块,提高了程序的开发效率,而且在购买普通数据采集卡的时候,厂商一般会给用户提供动态连接库(DLL),所以研究在LabVIEW平台下通过调用动态链接库功能来驱动普通图像采集卡实现图像采集的方法,成为值得推广的方法,具有重要意义。 2. CCD图象标定完成CCD图像数据的标定,数字图象处理是该标定过程的关键,NI公司提供的图象处理模块IMAQ Vision为LabVIEW平台提供了完整的图像处理函数库

53、,如各类边缘检测算子、自动阈值处理、各种形态学算法、滤波器、FFT等,该库包含大量当前证明成功的理论算法,使用户无需专业编程经验,即可迅速开发完成优秀的、适合本专业的图像处理与分析系统。图5.21以上图像数据采集与图像处理过程,全部放在层叠式顺序结构中执行,先用RGB至颜色转换控件,将0到255之间的红、绿、蓝RGB值转换为相应的RGB颜色然后,用调用库函数节点,直接调用一个DLL或共享库。“调用库函数节点”支持众多数据类型和调用规范。可用于调用大多数标准或自定义DLL或共享库中的函数。如需调用含有ActiveX对象的DLL,可将打开自动化VI与属性节点和调用节点结合使用。调用库函数“调用库函

54、数节点”为可扩展函数,可显示已连线的输入端和输出端的数据类型,与捆绑函数相似。图5.22具体设计程序框图如下: 图5.23图5.245.3.9程序设计总体将上述功能模块按照流程连起来,便组成了虚拟时钟的系统。图像采集与处理的层叠式的结构与while循环的程序结构平行放放平铺式的结构中,便可使一个模拟的时钟正常运行。6. 结束语通过运用Labview完成时钟的设计,我熟悉并掌握了labview(这门虚拟仪器)的设计语言。对于这个设计,我在Labview的软件平台中,通过几个功能模块,包括时间的获取输出,公式节点的函数运算,调用DLL库函数的图像数据采集与处理,绘制平化像素的画图,绘制直线以及移动画笔等等,成功的实现了时钟的正确显示。它一运行,会在桌面显示一个时尚的时钟图面,成为电脑桌面一道亮丽的风景。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论