labvIEW键盘输入

labvIEW键盘输入
labvIEW键盘输入

在我的速查表中提供了VB下使用的虚拟键盘码,简称VK,如果对计算机键盘I/O比较了解,应该知道键盘上每一个键对应一个扫描码,扫描码是由OEM生商制定的,不同厂商生产的键盘同样一个按键的扫描码都有可能出现不一致的情况,为摆脱由于系统设备不一致造成扫描码不一致的情形,通过键盘驱动程序将扫描码映射为统一的虚拟键码表示,如回车键定义为VK_RETURN,其16进制值为0x0D。

我们是通过程序实现键盘自动输入的,显然我们应该采用VK而不是SCANCODE,原因:一是OEM SCANCODE可能有区别,二是需要驱动程序映射成VK.

模拟键盘我们用Keybd_event这个api函数,模拟鼠标按键用mouse_event函数。

首先介绍一下Keybd_event函数。Keybd_event能触发一个按键事件,也就是说回产生一

个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。Keybd_event共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return,tab键为vk_tab。第二个参数为扫描码,一般不用设置,用0代替就行第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数一般也是置0即可。用如下代码即可实现模拟按下键,其中的XX表示XX键的

虚拟键值,在这里也就是各键对应的键码,如''A''=65

keybd_event(65,0,0,0);

keybd_event(65,0,KEYEVENTF_KEYUP,0); ...

我们先制作一个STR_KBEVENT VI,把一个字符串转换成一个相应的VK数组,然后通过API

发出,产生键盘动作.

制作一个RING控件,包括常见的VK键

对每一个可见字符,进行查表,取得相应的VK码和大小写.

转换完毕后调用API,送出字符数组,实现键盘的自动输入.

实际效果演示:

通过VK,可以非常容易实现键盘操作,比如论坛上有人谈到如何调用PRINTSCREEN来打印屏幕,看看如何实现.

利用LabVIEW软件进行控制设计和仿真入门

利用LabVIEW软件进行控制设计和仿真入门 这个章节将集中介绍LabVIEW软件中的控制系统设计的基本特性。我们在这里假定读者们已经熟悉了LabVIEW软件的其它部分。(如果你对LabVIEW软件的其它部分不熟悉,请参考Robert H. Bishop的‘Learning with LabVIEW’)。 每一章的专用信息会包含在那一章的简介中 在我们开始之前,请确保你的计算机上已经安装了可使用的控制设计和仿真工具包。它们不是LabVIEW 基本软件的一部分,而是需要单独购买的。 LabVIEW软件的控制设计工具包 控制设计工具包可以在结构框图的All Functions选板中找到。 下面将简要介绍控制设计选板中每个单独工具的用法。我们将介绍在子选板中出现的函数。如需进一步的描述,请查看LabVIEW软件的帮助文档。 当帮助菜单中的文字帮助窗口被打开时,你可以在相应的文字帮助窗口中看到关于每个函数的描述。 模型创建选板:

这节中的函数用于创建各种类型的模型,例如状态空间模型、传递函数模型和零点/极点/增益模型等。下面将讨论创建状态空间模型和创建传递函数模型函数。 控制设计工具包中的创建状态空间模型 函数的端子如上图所示。如果采样间隔端子没有连接,那么系统被默认为是连续采样。将一个值连到采样间隔端子上会使系统变为离散系统,它使用给定的时间作为采样间隔。状态空间模型的A、B、C、D 矩阵都有对应的端子。一旦LabVIEW软件创建了状态空间模型(其输出端子可用),该模型就可以用于其它函数并且可以转化成其它的形式,在这一节里我们将进行更加深入的讨论。 下面就是创建状态空间模型的一个例子。它的输出端可以连接到控制设计工具包中很多其它函数上,作为它们的输入端。

基于LABVIEW的数字电压表的设计

学号 XX 虚拟仪器 学生姓名XX 专业班级XX

基于LABVIEW的数字电压表的设计 一、设计目的 1.掌握数字电压表的基本原理和方法。 2.基于LabView设计数字电压表并实现。 二、设计原理 电压是电路中常用的电信号,通过电压测量,利用基本公式可以导出其他的参数。因此,电压测量是其他许多电参数和非电参数量的基础。测量电压相当普及的一种测量仪表就是电压表,但常用的是模拟电压表。模拟电压表根据检波方式的不同。分为峰值电压表、均值电压表和平均值电压表,它们都各自做成独立的仪表。这样,使用模拟电压表进行交流电压测量时,必须根据测量要求选择仪表。另外,多数电压表的表头是按正弦交流有效值刻度的,而测量非正弦波时,必须经过换算才能得到正确的测量结果,从而给实际工作带来不便。 采用虚拟电压表,可将表征交流电压特征的峰值、平均值和有效值集中显示在一块面板上,测量时可根据波形在面板上选择仪表,用户仅通过面板指示值就能对测量结果进行分析比较,大大简化了测量步骤。 三、设计思路 LabVIEw 8.5版本的工程技术比以往任何一个版本都丰富.它采用了英文界面,各个控件的功能一目了然。利用它全新的用户界面对象和功能,能开发出专业化、可完全自定义的前面板。LabVIEW 8.2对数学、信号处理和分析也进行了重大的补充和完善,信号处理分析和数学具有更为全面和强大的库,其中包括500多个函数。所以在LabVIEW 8.5版本下能够更方便地实现虚拟电压表的设计。 该电压表主要用于电路分析和模拟电子技术等实验课的教学和测量仪器,能够让使用者了解和掌握电压的测量和电压表对各种波形的不同响应。因此,虚拟电压表应具备电源开关控制、波形选择,以及显示峰值、有效值和平均值三种结果,且输入信号的大小可调节等功能。所以,用软件虚拟了一个信号发生器。该信号发生器可产生正弦波、方波和三角波,还可以输入公式,产生任意波形。根据需要,可调节面板上的控件来改变信号的频率和幅度等可调参数,然后检测电压表的运行情况。因此,在LabVIEW图形语言环境下设计的虚拟电压表主要分为

LabVIEW编程经验若干则

最近在编写程序时遇到一个错误,检查了很久,终于发现了原因,为了下次不再犯同样的错误,将这个现象记录下来,大家可以引以为戒。 大家都知道,数据类型有整型和浮点型。在串口或者是USB通信中,经常需要将数据强制转换成十六进制数据。笔者在最初写程序时没有注意数据类型,将十进制数据设置成双精度实数,强制转换后一直得不到想要的结果,后来将其改为无符号16位整型,结果是正确的。经过对比发现,双精度实数和无符号16位整型,即使十进制数值相等,强制转换成十六进制后结果相差很大,如图所示。 在labview中,事件结构是一个比较具有特色的一个结构,使用事件结构能够非常容易地实现其他程序运行结构不能实现的功能。一些labview的参考书告诉学习的人一般

事件结构外面要套一个while循环,可是有的时候会发生这样一种情况:在事件结构外面套上while循环后发现点击控制while循环的“退出”按钮没有用。 使用事件结构时,不要忽略事件结构左上角的连线端子。这个是“超时接线端”,是指事件结构等待事件发生的时间,以毫秒为单位,默认值为–1。如果while循环里的事件结构没有设置超时接线端,那么系统就默认为-1,事件结构一直等待事件的发生。这个时候程序就停止在等待事件发生,另外的操作都没有用。所以如果想要通过控制while循环的结束来停止程序,可行的做法是:设置超时时间,如10ms,然后增加一个“超时”的事件分支。 labview中,在字符串控件上单击鼠标右键,会发现有几种显示方式:正常显示、/代码显示、密码显示和十六进制显示。 正常显示和密码显示容易理解,在这里不作解释。笔者就用labview通过串口和USB与下位机通信时得到的一点心得与大家分享。

labview事件结构学习

labview事件结构学习 编程的主要目的是为了实现用户的某种功能,用户通过用鼠标、键盘、程 序内部等触发某种程序动作,从而达到某种结果,这些操作都被称作为事件,LabVIEW 中相应这些事件最常用的结构就是事件结构。事件结构内容丰富,基 本上大的程序结构都需要用到事件结构,下面将详细介绍事件结构。事件结构 在程序不能够单独响应各种事件,必须与循环结构一同使用,如下图事件添加 方式很简单,鼠标右键事件框弹出菜单如上图,有添加、删除、复制、编辑事 件等选项,按照操作即可。如下图,为事件结构添加Stop 事件,布尔控件触发 事件的方式有多种,鼠标按下、经过、离开、进入等,这里我们选择值改变。 确定后,stop 事件就被添加进去了,如下图,当我们运行程序后,点击前面板 的stop 按钮,触发事件使while 循环停止而后程序也停止。同一事件分支只能 添加一种事件吗?当然不是!有的时候有很多不同操作却会执行相同代码,怎 么编程才不会让代码冗余呢?看个例子,如下图2 个按钮stop1,stop2 点击后 都可以让程序停止,我们怎么为其添加事件呢?我们先添加一个事件stop1 的,方法上面已经描述了。由于stop2 的执行代码和stop1 一样,我们在事件stop1 上右键->弹出菜单->编辑本事件分支(Edit Event Handled by This Case)会弹出已添加事件stop1 的编辑框,这是左侧有2 个按钮如下截图我们点击Add Event 左侧事件列表会出现如下变化选中这个后,右侧列表选中stop2 的Value Change 事件后,点击确定在看该事件分支如下,2 个事件就添加在同一个分支当中了,运行程序后,点击stop1 或stop2 均可让程序停止。超时超时是事件结构特有的,看名字就知道是怎么回事,即超过一定时间没有触发事件则执行超时 事件。如果超时时间设置所以如果程序事件功能不多,又需要定时执行一段代码,可以考虑用此方式来完成;如果程序操作频繁,则不建议用此事件来定时

基于LABVIEW的用户登录界面设计

基于LABVIEW的用户登录界面设计 Labview具有功能强大的数学工具,用在传感器设计上可大大降低软件的设计负担。对于一个实际的传感器使用,其用户数量有限,其登陆界面设计可以完全借助其数组函数与数据记录文件完成,而不就是数据库,这样既减轻了系统的重量,也减轻了系统的负荷。没有牵涉第三方的软件,系统的稳定性也大大提高。本文设计了一个简单的用户登录系统的2个模块,希望能对读者有所启发。 1)用户初始文件的建立 Labview的数据记录文件具有较强的功能,并且不能用写字本打开,因此作为一般的保密级别可以用来存储初程序运行环境数据,本文用来存储登陆系统的用户数据。 本程序采用两个套嵌while循环,用于批量产生用户名单,内While

采用三个文本输入框,分别输入用户姓名、用户初始密码、用户权限等内容,并用系统时间空间获取用户建立时间,通过数组创建函数创建成一维数组,点击确定键完成一个用户的建立,可以继续进行下一个用户的建立(当然您也可以只建立一个超级用户,在超级用户登陆后继续建立用户名单),用户建立完毕点击停止按钮完成用户名单建立,形成一个二维数组,由于点击停止键时,最后一个用户名单会重复建立,故采用数组删除函数去掉最后一行,然后创建一个文件,用数据记录函数将该名单存储在您希望的文件夹内(本例放在桌面上,面板上的数组就是为验证程序而建立的,可以去掉)。 2)登陆界面 登陆面板实际上只有两个文本输入控件:用户名与密码。程序首先将记录文件读入内存,让后将第一列(索引0列)的所有用户列出来,用一维数组搜索函数搜索该用户密码所在的行号,再用该行号将该用户的信息从记录文件索引出来。由于密码放在第二列(1列),直接从用户的记录信息索引第第二列(索引1列)取出该用户密码),直接用文本比较“等于”函数进行比较用户输入的密码就是否与其预设的密码一致。 至于修改用户名单、用户权限等内容可用“数组的删除、插入”

labview结构的使用

结构的使用 本页关键词:labview labview 下载labview8.2 labview教程labview论坛labview 8.20 labview 7.0 labview 序列号labview7.1 labview 8.0 结构的使用 条件结构 条件结构是执行条件语句的一种方法。这类似于文本编辑语言中常见的If…Then…Else语句。它位于程序框图中,函数→编程→结构→条件结构。如图所示: 条件结构包含有两个或者更多的子框图,每一个子框图包含一段程序代码,由此对应一个程序分支。多个子框图就像一摞卡片重叠在一起,任何时候只有一个是可见的,执行哪一个取决于于选择端子外部接口相连的某个整数,布尔数,字符串或者枚举指,用户也可以直接输入所有可能出现的值。 1.选择端口的输入值 条件结构选择端口的输入值是由与它相连的输入控件对象决定的,数据类型可以是布尔量,整形,字符串型或者枚举型。条件结构顶部中间是各分支的选择标识,它自动调整为输入的数据类型,可以在工具模板上使用标签工具直接键入单个数值或某个数据范围。数值之间用逗号来分开,例如:“..0,2,4..10”表示选择条件为:≤0,2,4,5,6,7,8,9,10。 对于字符型和枚举型数值在条件标识上会自动加上双引号,当键入的选择器标识值与连接选择端口的数值类型不同时,选择器标识变为红色标识有错误。如图:

设置默认分支的方法是,选择一个分支结构,在快捷菜单中执行“本分支设置为默认分支”,它的作用是当选择端口的值与选择器标识值没有一个匹配时,就执行默认分支。如图: 2.条件结构的数据通道 条件结构的数据通道就是数据的输入和输出端口。将结构内外的端子相连后,边框上就会出现一个小矩形框,这就是数据通道,用于传输数据。向条件结构的一个分支提供数据时,这个数据对于所有的分支都是有效的,也就是其他分支都可以使用这个输入数据。条件结构的输出通道有些不同,当在一个分支中创建输出通道后,所有分支的同一位置都会出现一个白色小方框,它要求每一个分支都必须为这个通道予以连接,通道变为实心后程序才可以运行。也可以在通道的快捷菜单中选定“未连线时使用默认”为没有连接的分支定义一个默认输出值,这时输出通道变为灰色。如图: 条件结构应用举例 例一:

Labview执行结构:详细说明

执行结构:详细说明 While循环 与文本编程语言中的Do循环或Repeat-Until循环类似,必须满足特定条件之后,While循环才会执行其内的程序代码,如图1所示。 图1. LabVIEW中的While循环;具备While循环功能的流程图; 还有While循环功能的伪码范例 While 循环位于Structures面板上。从面板上选择While Loop之后,针对所要重复的代码区块,可用鼠标拖拽出矩 形并将之圈住。放开鼠标之后,即会有While循环圈住用户所选的区块。 只要将对象拖拽至While循环中,即可将其新增至While循环中。 只要条件接线端接收特定的布尔值之后,While循环随即执行代码 也可通过While 循环的条件接线端来处理基本错误。若将错误簇连接至条件接线端,则只有Status参数的真或假值传送至接线端。同样,Stop if True和Continue if True快捷菜单项目,将分别变更为Stop if Error和Continue while Error。 计数接线端属于输出端点,其中包含已完成的循环次数。 While循环的循环计数均从零开始。 注意: While循环将至少执行一次。 无限循环 无限循环为常见的程序错误,即无法停止的循环。若条件接线端 i为True时停止,而用户又在While循环外部放置布 尔控件接线端。一旦循环开始,控件值即成为FALSE,就会形成无限循环。

图2.While循环之外的布尔控件 因为在循环开始之前,仅读取该值一次,所以改变控件的值并无法停止无限循环。若要通过控件停止While循环,则必须在循环中配置控件接线端。若要停止无限循环,则按下工具栏上的Abort Execution按钮,即可终止该VI。 在图3中的While 循环将不断执行,直到随机数函数的输出大于或等于10.00,且Enable控件为TRUE时才会停止。当且仅当“与”函数的两个输入都为真时,函数的返回值才为真。否则,与函数将回传FALSE。 在图3中,只要随机函数不产生10.00以上的值,就会成为无限循环。 图3.无限循环 结构隧道 隧道负责为结构传送数据。 While循环边框上的实心区块即为隧道。此区块的颜色与隧道所连接的数据类型的颜色相同。在循环终止之后,随即有数据送回循环。当隧道传送数据进入循环时,只有数据抵达隧道之后,才会执行循环。 图4即以计数接线端连至隧道。直到While 循环执行完毕,隧道中的数值才会传送至Iterations显示控件。计数接线端在Iterations显示控件中只会显示最后的数值。 图4. While循环的隧道

labview控制程序流程——labview事件结构

labview控制程序流程——labview事件结构 1 事件结构及它的图形化表示法事件被用来通知用户有异步活动发生。图 形化语言的事件响应包括:用户界面事件、外部I/O 事件和程序其它部分的事件。对事件的处理程序也被称为:事件驱动程序。事件驱动程序可以分为若干 个分支,每个分支处理不同的事件响应。所以对事件的响应结果也可以控制程 序的流程。事件驱动机制来自于可视化的操系统,可视化操作系统对用户事件 提供了简洁、有效的响应方式,最常见的事件来自于鼠标和键盘。虚拟仪器借 助于操作系统的事件处理机制实现了图形化语言的事件响应能力。在没有引入 事件结构之前,LabVIEW 是借助于轮询的方式来查询用户操作,由于轮询的方 式会占用一定的CPU 资源,甚至可能遗漏事件,所以这种处理方式并非理想。事件结构的出现避免了对CPU 资源的占用,同时也避免了事件的遗漏。事件 结构在函数选板》编程》结构子选板中可以找到,并可以将其直接拖拽到程序 框图中,图形化表示的事件结构,参见下图。图 1 图形化的事件结构与Case 结构和循环结构类似,事件结构也包含了一个主框架,这个框架内将用来放置 事件处理的事件驱动程序代码。如果事件处理任务众多,会有众多事件分支存在,在结构上类似Case 的多帧结构(选择器标签)。当在程序框图上拖放一个 事件结构时,我们只能看到上图所示的一帧已经预先注册的超时事件(Timeout),超时事件分支。它具有定时延迟的基本功能(不包括While 循环),参见下图。图 2 具有定时延迟的基本功能当然也可以采用另一种表示方法,参 见下图。图 3 利用事件结构内部节点获得中止时间通过这个例子也好理解内部 节点中时间的含义(是事件响应的停止时间)。超时事件超时事件是一种特殊 的事件,当然也可以看成是默认的事件分支。如果存在其它事件源时,超时事 件完全可以被忽略或取消。看下面一个例子。图 4 仅有的两个事件之一超时事

中大型LABVIEW软件三层设计架构

通常一个VI若包含三、四十个以上的subVI(不包含LabVIEW本身在Functions中提供的VI)时,就可算是一个中大型的软件计划(software project)了。虽然比起软件工程中的一些作业环境软件(如Windows系列)或大型应用软件(如Word、Excel)等仍算是小工程,但其复杂性亦在一定程度之上,若没有事先想好在撰写程序时的一些规划与方法,想要完成这类中大型的软件绝对不是一件简单的事。尤其这类软件通常不是由一个人,而是由一个团队所共同完成的,因此整个软件的结构,就要能让团队中的每一成员都能清楚的了解,而且要够简单,才算是好的软件结构。以下将参考由Rick Bitter等人所着”LabVIEW Advanced Programming Techniques”,中之第4章的部分内容,介绍所谓软件计划中的三层式结构(the Three-Tiered Structure)的概念及其优点。 需要软件结构的主要原因,是当软件人员发展软件到某一阶段时,若没有计划或无意的创造了许多subVI,但各subVI之间有许多部分其实是重复撰写的;或各VI相互间呼叫时没有一定的纪律,使得在VI Hierarchy中所看到的各VI间的联机是错综复杂,像个盘丝洞一般,这将可能会使多人发展的软件计划增加所耗费的时间和可能出错的机会、减低程序的效率,以及增加debugging时的困难。为了改善上述的情形,所以要提倡三层式结构的概念。 三层式结构由上而下依次为:Main Level、Test Level和Driver Level,这种结构是由经验中得来的,在多人发展的软件计划中显得简单明了,当大家都能遵照这个结构来写程序时,这种结构就可以充分显现出它的优点。那这三个阶层到底如何区别呢?以通俗的比喻来说,假设我们如果要组织一个篮球队参加全国比赛,每个球员要练习基本动作及体能,如何跑、如何跳、手脚该如何放置才是正确位置等,这就相当于系统中Driver Level所做的事情;接下来,将各球员组合练习某一套防守或进攻的战术,如二三区域联防、人盯人防守,每个人该在什么位置才能正确接应等,则像是T est Level中一项项的test了;而最后比赛时,场上的战略运用,包括何时要用什么战术组合、如何更换球员、何时喊暂停、终场前是不是要故意犯规或采拖延战术等等,对照过来,就像是在Main Level中,如何将T est Level中各test 做最有效能的整合与排列组合等的工作。 简单来说,Driver Level包含了程序与所有仪器、组件、马达或其它应用软件的沟通、控制等较低阶的事情,使其可完成某一项基本的动作,例如初始化、马达走到home位置、雷射以设定的能量及频率发射光束???等。可注意到我们在这边所说的driver,并不像一般在别处所称驱动程序的那种driver那么低阶,真正最低阶的工作还是要有现成的VI来帮忙才行;在Test Level中,则是如何连接各个Driver VI的基本动作,使可做完出一套连续、有意义的流程,来执行某项测试,例如让手臂由A点走到B点,下降夹取一个螺丝,再走至C点装到某面板上,然后回到A点等待,类似这样控制一个流程的进行,便是Test VI的工作内容;Main Level则包含了使用者接口(User Interface)或称人机接口(Man-Machine Interface) ,目的是整合各项测试和例外处理(Exception Handling)等,将它们以适当的顺序及流程组合,很容易地让使用者操作。 当一个软件计划严格的遵照上述的三层结构来撰写时,最大的优点是可使程序代码的再使用(code reuse)达到最大化,在不同的T est VI中,可重复使用相同的Driver VI;而在不同程序的Main Level中,又可重复使用相同的T est VI,这将使得程序维护或修改的时间与精力大幅减少;同时当我们已有一个程序的样板(template)后,可增加软件版本更新的速度。另一个很重要的好处是,当我们在撰写某一个level中的程序时,并不需要关心在另一个level中有什么其它的程序是如何执行的,而只要专注在自己的这个level的程序上就可以了,这使得由团队来共同完成一个大型计划的工作变得容易许多。 以下将依Driver Level、Test Level、Main Level的顺序,来介绍在各level写程序时的原

labview的深入探索----labview与回调函数

labview的深入探索----labview与回调函数 回调函数是WINDOWS 编程(API 编程)的核心内容之一,在许多高级编程语 言,如VB,VC(MFC)中已经封装了回调函数,取而代之的是事件响应函数,但是,追 溯其本质,实际就是回调函数.所谓WINDOWS 回调函数,就是按照WINDOWS 的规范,编写的(CALLBACK)函数,当WINDOWS 检测到事件发生时,自动调用的 函数,WINDOWS 是通过函数指针调用的,因此,回调函数的内容是由用户决定的, 而何时调用是由操作系统决定的.我们看一下CVI 中的一般回调函数的定义int callback aaaa(int panel,int control,int event1,int event2,callbackdata *data);回调函数的参数是有操作系统提供的,比如上面的回调函数,panel---表示的哪个面板(窗口) 发生的事件control---表示的面板上哪个控件发生的事件event1 event2 表示事件 的类型和相应数据,比如鼠标坐标等回调函数是一般高级编程语言的基本功能, 但是,在LABVIEW8.X 之前是不支持的,这极大限制了LABVIEW 功能的扩展, 因为ACTIVEX,.NET 都需要回调函数.8.X 中,增加了回调函数的功能,主要用于ACTIVE,.NET 和LABVIEW 自身控件,LABVIEW 例子程序中提供了几个例子, 是有关ACTIVEX 和.NET 调用的,下面,我们通过LABVIEW 自身控件说明一下 回调函数的使用方法.在.NET 摸板中也提供了这个节点,从分类上就可以看出,注 册回调函数主要是用于ACTIVEX 和.NET 的.下面我们做一个简单的回调函数 的程序,有两个功能,返回当前值的变化和记录控件被点击的次数注册回调函数 需要三个参数:控件参考,用户参数和自动生成的回调函数,有了控件参考,我们就 可以选择事件的类型,用户参数主要是用于返回结果,因为回调函数是由操作系 统调用的,没有办法通过数据流返回处理结果.添加了这两个参数后,就可以自动 生成回调函数了回调函数如下图所示简单编程,CONTROL 的值传递给 INDICATOR 这样值变化的回调函数完成了,下面我们通过鼠标UP 事件来记录

基于labview跑马灯设计

选题分析: 随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰已经成为一种时尚。 跑马灯是一种生活中比较常见的装饰,本文主要通过labview来设计了一个相对简单的对跑马灯的控制,实现了其有规律的亮灭,带来一定的观赏效果。 本文主要是实现了跑马灯的单个流水闪烁、双路同步流水闪烁、四路同步流水闪烁、全体同步闪烁,以此循环。本程序并控制闪烁的间隔时间,使其运行更具可观性。 方案设计: 本文主要设计了12个显示灯,并让其方形围成一圈。 运行效果: 单个流水闪烁:单个灯依次轮流闪烁 双路流水同步闪烁: 相对两灯同时依次轮流闪烁 四路同步流水闪烁:等间距四灯依次轮流闪烁 全体同步闪烁:全体灯同时闪烁 运行步骤: 单个流水闪烁→全体同步闪烁→双路流水同步闪烁 ↑↓ 全体同步闪烁←四路同步流水闪烁←全体同步闪烁 以此循环。

运行控制: 直接点击labview运行按钮进行跑马灯演示。 开关:用于结束当前操作,控制其关断。当开始运行程序时也可通过关断开关了结束程序的运行。 水平指针滑动杆:用于调节彩灯间的延时时间。通过其可调整灯闪烁的快慢。前面板的设计: 前面板主要由12个指示灯、一个开关及水平指针滑动杆构成。 水平指针滑动杆——用于调节彩灯间的延时时间。 指示灯——用以显示程序运行结果。 开关——用于结束当前操作。 对于前面板的设计相对简单,通过开关来控制其关断,水平指针滑动杆来控制其延时时间,指示灯显示程序运行的结果,观看到跑马灯的演示情况。 图1. 前面板

程序框图的设计: 设计思路: 本程序主要用到平铺式顺序结构和层叠式顺序结构顺序执行。 本程序用真假常量来控制灯亮与不亮。 本程序还用到了while循环和for循环,循环是用于达到闪烁和同步递进循环。整个程序几乎每一帧都用到了延时,单位是毫秒,延时的目地是使本程序更具有可观性。

LabVIEW事件结构的妙用

LabVIEW事件结构的妙用 首先,我们回顾一下上期节目:LabVIEW网络讲坛乊悬案迷思中关于事件结构的几个重要知识点。 事件结构的基本组成部分: 事件结构五大基本组成部分 事件结构由——事件选择器、超时接线端、事件数据节点、事件过滤节点和动态事件接线端5个基本部分组成。 事件结构编程的3条黄金原则: 在使用LabVIEW事件结构迚行编程的时候,我们应该注意:1.不要将事件结构放置在while循环乊外,而应该放置在while循环的内部;2.不要在事件结构的内部使用循环处理事件,可选择采用生产者消费者结构,在生产者循环中放置事件结构,在消费者循环中处理事件;3.记得为事件结构添加一个单独处理停止按钮的分支。 遵守以上三条原则将使我们的程序更加健壮,避免在使用事件结构的时候出现前面板死锁等问题。 过滤事件与通知事件:

在LabVIEW中,以问号结束的事件被称为过滤事件,其余的事件被称为通知事件。对于通知事件,程序可以感知事件的发生并且响应该事件,然后再处理在事件结构中定义的任务;而对于过滤事件,程序感知事件发生后,首先处理在事件结构中定义的任务,然后根据事件过滤节点的值(Discard?)来决定是否响应该事件或是否改变事件数据。 因此我们建议,在希望参与处理用户操作时使用过滤事件,因为过滤事件可以放弃事件或修改事件数据。如果仅需要知道并响应用户执行的某一特定操作,则应使用通知事件。 在本期节目中,我们着重介绍动态注册事件的用法。 静态和动态两种事件注册模式: 静态注册指定了事件结构的每个分支具体处理哪些事件。一旦VI开始运行,LabVIEW将自动注册这些事件,并且在VI运行的整个过程中无法改变事件结构所处理的事件。 而动态事件注册与VI服务器相结合,允许在程序运行时使用控件、VI或应用程序的引用来动态地指定和改变产生事件的对象。动态注册在控制LabVIEW产生何种事件和何时产生事件等方面更为灵活。 Demo 1和Demo 2帮助大家更好地理解动态注册事件编程方法。 Demo 1:动态注册事件_阿拉丁神灯.vi Demo概述: 在这个VI中,用严格自定义的方式将一个布尔类型的控件做出神灯的样子,并为这个布尔控件动态注册了”鼠标按下”的事件。这个事件执行的任务是显示神灯神仙,并弹出一个对话框。由于该事件采用的是动态注册的方式,所以可以通过一个按钮取消对该事件的注册。并通过另一个按钮再次注册该事件。这就是动态事件的使用效果,它可以在程序运行的过程中,动态地控制何时注册事件和注册什么样的事件。 程序实现:

Labview设计报告

实训报告 实训名称基于Labview的音乐彩灯设计系别电子与电气工程学院 专业、班级,,,,,,,,,,,,,,,,,,,,,,,,,,, 学生姓名、学号,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 指导教师,,,,,,,,,,,,,,,,, 2013年1月10日

一、引言 Labview是一款程序开发环境,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境,但是Labview与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而Labview使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。 同C语言和BASIC语言一样,Labview也是通用的编程系统,有一个完成任何编程任务的庞大函数库。Labview的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储等。Labview也有传统的程序调试工具,如设置断点、以动画方式显示数据及其子程序的结果、单步执行等等,便于程序的调试。 Labview是一种用图标代替文本行创建应用程序的图形化编程语言。传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序,而Labview采用数据流编程方式,程序框图中节点之间的数据流向决定了VI及函数的执行顺序。VI 指虚拟仪器,是Labview的程序模块。 Labview提供很多外观与传统仪器类似的控件,可用来方便地创建用户界面。用户界面在Labview中被称为前面板。使用图标和连线,可以通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G代码。Labview的图形化源代码在某种程度上类似于流程图,因此又被称作程序框图代码。 而本学期通过对于Labview的学习对于Labview有了一定的认识,在此基础上,我们根据老师的要求,制作了基于Labview的声音和彩灯的小装置,通过Labview与PCI6221 DAQ数据采集卡的结合运用达到采集声音信号从而控制彩灯的闪烁的效果。 二、项目方案 1、设计项目方案: 在Labview开发环境下,应用DAQ助手以及采集卡来采集声音,并将此所检测到的声音文件,输出为不同的数字信号来控制彩灯的闪烁,从而达到随着声音的强弱和节奏彩灯有规律的闪烁的效果。 2、人员分配情况: 郑广强:方案制定、编写程序、软件调试 刘进向:方案制定、硬件电路的搭建、论文报告

labview事件结构浅析

https://www.360docs.net/doc/8f8293172.html,/forum.php?mod=viewthread&tid=207837 使用LabVIEW图形化语言开发的应用程序界面是图形化用户操作界面,也称为:GUI (graphical user interface),它的作用是与操作者实现人机对话形式的互动操作。这种对界面操作的互动响应在LabVIEW 6.1发布之前,只能是通过“轮询(polling)”的方式来实现。轮询的方式的缺点是:需占用一定的CPU资源(在没有事件发生时)和灵活性不好。在LabVIEW6.1引入事件结构(Event Structure)后,采用事件结构来设计、实现的GUI操作则变得更加灵活、方便,并且不占用CPU的资源,这与先前采用轮询的方式来查询事件的方式相比要合理的多。下面结合应用项目中的设计实例来介绍GUI设计中的事件驱动。 有关事件结构的一些基本概念、原理及使用方法在LabVIEW Help及许多中文书中都作了详细的讲解,这里我就不作更多地介绍了。 事件结构通常包括以下部分: 1、Event cases——包含有若干个注册的事件源及同等数目的Event case层,在每个Event case层中包含对该事件响应的处理程序。 2、While循环——用来检测连续不断产生的事件 事件结构中的While循环,是用来确保检测到连续不断发生的事件。如果没有这个While循环,无论有多少事件发生只能对第一个发生的事件进行处理,处理完后程序将退出事件结构。 菜单选项事件结构实例 2011-11-11 09:50 上传下载附件(8.79 KB) NI USB-9219是一款4通道通用C系列模块,专为多功能测试而设计。USB-9219能够测量传感器中的多种信号,如压力计、RTD、热电偶、测压元件和其他需要供电的传感器。由于通道接受单独选择,4条通道可以分别进行不同类型的测量。测量范围随测量类型而异,包括±60 V最大电压范围和±25 mA最大电流范围。 第1步、创建一个项目:综合参数测量仪 按照我的设计习惯,首先在桌面上创建一个新的文件夹,命名为《综合参数测量仪》。然后,打开、运行LabVIEW开发环境,并选择开发环境中的:新建》项目。 此后,在“项目浏览器”就可以看到一个新建的项目:"未命名项目1"。单击项目浏览器:文件》保存,并将该项目命名为:“综合参数测量仪”后,存放到桌面上的《综合参数测量仪》文件夹中。 此时,项目创建完毕。 第2步、创建一个主vi:综合参数测量仪.vi 2011-11-11 09:41 上传下载附件(14.71 KB) 打开刚刚新建的“综合参数测量仪”项目,然后用鼠标右击该项目中的”我的电脑“选择:新建》VI,即创建了一个新的vi。 用鼠标点击新vi的:文件》保存(命名为:综合参数测量仪.vi)。 主vi即宣告创建完毕。如例图所示。

Labview常见问题及解答

1、Labview如何实现由一个事件引发其他三个事件的顺序发生,且这三次事件间的时间间隔为50ms? A:可以引用状态机来设计程序,将触发事件作为状态机的状态控制参数,后面发生的三个事件依次作为状态机的三个顺序状态,设置状态切换时间间隔为500ms. 2、labview在主程序通过局部变量不能实时看子vi的参数 A:通过局部变量只能得到子vi运行完之后的结果。可以用control reference 方式,在子vi加一个属性节点引出一个reference。 主程序里把需要显示的控件创建一个reference连到子vi的reference输入端口。另外也可以用vi server方式实现。 3、如何在一个graph或chart显示多个Y轴刻度,并且使每个通道对应每个刻度? A:在前面板上,右键点击刻度,然后选择duplicate scales,就会创建一个新的刻度。然后再点击右键,选择swap sides,就可以让刻度显示在图的左边或右边。然后右键右上角的plot legend上的曲线plot,选择Y scales然后就可以选择与该曲线相应的Y轴SCALES。多条曲线对应多条Y轴的刻度时,是同样的方法。 4、如何从labview中打开一个pdf文件? A:最简单的方法:用system exec.vi实现,在system exec.vi的command line 端口创建一个常量,输入adobe reader 的路径,再加上文件名等几个参数就可以实现上述要求。举例如下:如果要拉开位于c盘的1234.pdf文件可以这样写“C:\Program files\Acrobt 7.0\Acrobat\Acrobat.exe”/t “C:\1234.pdf” “username”其中C:\Program files\Adobe\Acrobt 7.0\Acrobat\Acrobat.exe是Adobe Reader 的安装路径,/t是命令参数,C:\1234.pdf则是要打开的文件名,最后的username 是用户的名字。 5、采集数据在graph如何显示系统时间,并且随着采集点数时间不断刷新。A:有两种方式,一种是采集波形数据然后输出给graph,在graph上选择显示绝对时间,并且去掉ignore time stamp选项。第二种是采集数据文件,然后用获取时间的vi获取当前时间,然后把采集的数据文件和当前vibuild成波形文件再给graph.graph的设置和前种方法一样。这样就可以显示出时间虽采集点不断刷新的效果。 6、report generation里的standard和HTML究竟是什么意思? A:STANDARD和HTML是LV本身就有的报表类型,无须安装其他的文本编辑工具就可以打印。STANDARD是LV内建的一种报表格式,可以打印但不能存盘,也就是说我们的报表没有电子版。HTML是网页格式的文件,可以用浏览器打开,其实相当于LV帮我们编写HTML代码,这种格式是不能直接打印的,需要先指定网页路径才能打印出来。还要注意,如果是一段程序是用了report generation的vi,在打包成exe文件或llb文件时,需要加入两个动态vi:_excel dynamic vi和_word dynamic vi。如果生成的报表采样了模板需要自支持文件

LABVIEW 中的事件结构杂谈

LABVIEW中的事件结构杂谈 刚开始接触事件结构时觉得它很好用,所以很喜欢用,但也引起了一些问题,就是前面板很容易就被挂起来了,就是所前面板没有响应了,很郁闷。之后就不敢用了,很多可以用事件结构的地方都只用CASE结构麻烦的代替了~~ 今天被师兄那么一指点,觉得完全是委屈了事件结构啊,之前事件结构引起的问题可以很容易的解决。 方法就是设置“超时”(之前一直觉得这个东西没用的): 一般情况下,事件结构是会和while循环套用的,通过不断的循环来执行不同事件源激发的事件,但如果不设置超时,也没有事件源发生,那么while循环将一直等待事件的发生而不进行循环,这样就会使得事件结构外的其他程序也不能执行,可能造成的结果就是前面板本该有反应的地方(比如变量值的变化)没有了反应。 而如果设置了超时,比如设置为100(ms),意思就是每隔100ms如果没有事件发生就超时,进行一次循环,那么事件结构外的其他程序也就得到了执行。 总结一下: 如果事件结构在while循环中,而事件结构之外又有其他的程序需要执行(可能不依赖于事件的发生),那么就应该设置超时。 在事件处理过程内,如何响应前面板命令控件的命令? 我发现,在一个事件内的处理过程完成之前,系统不能响应前面板的其他命令。系统是在事件完成之后的等待时期才响应其他前面板命令事件。 编辑事件结构对话框的下边有一个: 锁定前面板在事件分支执行完毕前。你可这个默认选中的选项取消了,就可以实现你的“在一个事件过程处理中途响应前面板的其他命令"功能。 LabVIEW事件结构 使用LabVIEW图形化语言开发的应用程序界面是图形化用户操作界面,也称为:GUI (graphical user interface),它的作用是与操作者实现人机对话形式的互动操作。这种对界面操作的互动响应在LabVIEW 6.1发布之前,只能通过“轮询(polling)”的方式来实现。轮询的方式的缺点是:需占用一定的CPU资源(在没有事件发生时)和灵活性不好。在LabVIEW6.1引入事件结构(Event Structure)后,采用事件结构来设计、实现的GUI操作则变得更加灵活、方便,并且不占用CPU的资源,这与先前采用轮询的方式来查询事件的方式相比要合理的多。下面结合应用项目中的设计实例来介绍GUI设计中的事件驱动。 有关事件结构的一些基本概念、原理及使用方法在LabVIEW Help及许多书中都作了详

LabVIEW程序设计步骤

LabVIEW 程序设计步骤 下面通过一个设计实例来详细介绍虚拟仪器软件 LabVIEW 的程序设计步骤。 设计目标:假设有一台仪器,需要调整其输入电压,当调整电压超过某一设定电压值时, 需通 过指示灯颜色变化发出警告。 1 建立新VI 启动LabVIEW 程序,单击VI 按钮,建立一个新 VI 程序。 这时将同时打开 LabVIEW 的前面板和后面板(框图程序面板) 。在前面板中显示控件 选板,在后面板中显示函数选板。在两个面板中都显示工具选板。 如果选板没有被显示出来,可以通过菜单查看( View )/工具选板(Tools Palette )来 显示工具选板,通过查看( View )/控件选板(Controls Palette )显示控件选板,通过查 看(View )/函数选板(Functions Palette )显示函数选板。 也可以在前面板的空白处,单击鼠标右键,以弹出控件选板。 2前面板设计 输入控制和输出显示可以从控件选板的各个子选板中选取。 本例中,程序前面板中应有 1个调压旋钮,1个仪表,1个指示灯,1个关闭按钮共4 个控件。 1) 往前面板添加 1个旋钮控件:控件(Controls )宀 新式(Modern )宀数值 (Numeric )宀旋钮(Knob ),如图2-14所示,标签改为"调压旋钮”; 2) 往前面板添加 1个仪表控件:控件(Controls )宀 新式(Modern )宀数值 (Numeric )宀 仪表(Meter ),如图2-14所示,标签改为"电压表”。 3) 往前面板添加 1个指示灯控件:控件( Controls )宀 新式(Modern )宀 布尔 (Boolean ) 宀圆形指示灯(Round LED ),如图2-15所示,将标签改为"上限灯”。 4)往前面板添加1个停止按钮控件:控件(Controls )宀 新式(Modern )宀布尔 图2-14添加旋钮、仪表控件 图2-15添加指示灯、按钮控件

Labview基本常见问题解答

Labview基本常见问题解答(连载一) 关键字:Labview vi graph 1、Labview如何实现由一个事件引发其他三个事件的顺序发生,且这三次事件间的时间间隔为50ms?回答:可以引用状态机来设计程序,将触发事件作为状态机的状态控制参数,后面发生的三个事件依次作为状态机的三个顺序状态,设置状态切换时间间隔为500ms. 2、labview在主程序通过局部变量不能实时看子vi的参数回答:通过局部变量只能得到子vi运行完之后的结果。可以用control reference 方式,在子vi加一个属性节点引出一个reference。主程序里把需要显示的控件创建一个reference连到子vi的reference输入端口。另外也可以用vi server方式实现。 3、如何在一个graph或chart显示多个Y轴刻度,并且使每个通道对应每个刻度?回答:在前面板上,右键点击刻度,然后选择duplicate scales,就会创建一个新的刻度。然后再点击右键,选择swap sides,就可以让刻度显示在图的左边或右边。然后右键右上角的plot legend上的曲线plot,选择Y scales然后就可以选择与该曲线相应的Y轴SCALES。多条曲线对应多条Y轴的刻度时,是同样的方法。 4、如何从labview中打开一个pdf文件?回答:最简单的方法:用system exec.vi实现,在system exec.vi的command line 端口创建一个常量,输入adobe reader 的路径,再加上文件名等几个参数就可以实现上述要求。举例如下:如果要拉开位于c盘的1234.pdf 文件可以这样写“C:\Program files\Acrobt 7.0\Acrobat\Acrobat.exe”/t “C:\1234.pdf” “username”其中C:\Program files\Adobe\Acrobt 7.0\Acrobat\Acrobat.exe是Adobe Reader 的安装路径,/t是命令参数,C:\1234.pdf则是要打开的文件名,最后的username是用户的名字 5、采集数据在graph如何显示系统时间,并且随着采集点数时间不断刷新。回答:有两种方式,一种是采集波形数据然后输出给graph,在graph上选择显示绝对时间,并且去掉ignore time stamp选项。第二种是采集数据文件,然后用获取时间的vi获取当前时间,然后把采集的数据文件和当前vibuild成波形文件再给graph.graph的设置和前种方法一样。这样就可以显示出时间虽采集点不断刷新的效果。 6、report generation里的standard和HTML究竟是什么意思?回答:STANDARD和HTML是LV本身就有的报表类型,无须安装其他的文本编辑工具就可以打印。STANDARD 是LV内建的一种报表格式,可以打印但不能存盘,也就是说我们的报表没有电子版。HTML 是网页格式的文件,可以用浏览器打开,其实相当于LV帮我们编写HTML代码,这种格式是不能直接打印的,需要先指定网页路径才能打印出来。还要注意,如果是一段程序是用了report generation的vi,在打包成exe文件或llb文件时,需要加入两个动态vi:_excel dynamic vi和_word dynamic vi。如果生成的报表采样了模板需要自支持文件里添加相应模板。 7、如果要将channel名字,测的是什么信号,采样率是多少这样的数据和采得数据一起存入文件应该用什么方式比较好?回答:推荐一种以前基本被忽略的文件结构——TDM

相关文档
最新文档