资源预览内容
第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
第9页 / 共27页
第10页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
LabVIEW 与外部程序接口之调用 DLL 1. 在 LabVIEW 的编程环境中通过 DLL 的方式实现与其他程序接口的有: A C 语言 B .NET 语言 C. MATLAB D.VB 答案:ABD 2. 如果需要调用的函数是在 user32.dll 库中的,那么在选择调用规范中应该选择: A .stdcall(WINAPI) B. C 答案:A 3. 如果在 DLL 的函数定义中数据类型是 FLOAT *output,那么在配置输出函数时应该选择: A B C D 答案:B 4. 调用 DLL 的优点有: A 动态载入,节省内存;B 编写与编译器无关; C.统一 DLL 的开发规范和编程方法 D. 需要了解源代码的编程细节 答案:ABC 5. DLL 可以有以下那些语言生成: A. LabVIEW B. VC C. VB D.TCP/IP 答案:ABC LabVIEW LabVIEW 中的循环结构中的循环结构 在程序设计中,如果需要重复执行一段代码,就需要使用循环结构。接下来我们将 介绍在 LabVIEW 中常常使用的 2 种循环结构 While 循环和 For 循环。 1.1. While While 循环循环 与文本编程语言中的 Do 循环类似,While 循环 将执行子程序框图直到满足特定条件(如图 1)。 图 1.1 While 循环流程图 我们通过以下的例子来具体介绍 While 循环: 图 1.2 是使用 while 循环产生一个随机序列,当该序列中有值大于 0.9 或者停止按 钮被按下时代码停止。(该程序见附件 Random generate.vi) 图 1.2 While 循环产生随机序列 条件接线端:条件接线端:While 循环会一直执行代码,直到条件接线端收到特定的布尔值时才 会停止。在本例中,当由停止键按下或者产生的随机数大于 0.9 时就会终止该程序。 条件接线端一般默认为真时停止(),当该接线端输入为真时程序就终止。也 可以选择真时继续()。 计数接线端:计数接线端:表示已经完成的循环次数,该计数从 0 开始。在本例中,如果当产 生的第 13 个点值超过 0.9 时,计数器值为 12。 结构隧道:结构隧道: 当需要将循环中的数据传入或者传出时,我们使用隧道的方式(这一 点将在后面详细介绍)。 2.2. ForFor 循环循环 For 循环常用于已知代码循环次数的情况,比如数组的操作。下面是 For 循环的流 程图: 2.1 For 循环的流程图 我们通过以下的例子来具体介绍以下 For 循环: 如图 2.2,使用 For 循环产生一个 34 的二维随机数组。(该程序见附件 Generate array.vi) 图 2.2 For 循环产生 34 的二维随机数组 计数接线端(输入):计数接线端(输入):通过计数接线端指定 For 循环的循环次数。该接线端计数从 1 开始。 计数接线端(输出):计数接线端(输出):表示 For 循环已经完成的循环次数。该接线端计数从 0 开 始。 如图 2.2,生成 34 的二维数组后,维数 1 和维数 2 分别为 3,2。 3.3. While While 循环循环 与与 For For 循环的区别:循环的区别: 一般来说,如果已知循环的次数,那么使用 For 循环比较简便;如果循环次数未知, 那么就需要使用 While 循环。另外,因为 While 循环提供了一个布尔的条件判断端, 可以通过布尔运算实现对复杂条件的判断。 我们可以使用 While 循环来迚行错误处理:如图 3.1, 将错误簇连接到条件接线端上时,那么就可以通过停止按钮和程序运行的状态共同来控制程序的运行。对于大 多数循环,都建议采用这种方法停止循环。这里以一个数据采集任务为例,我们将数据采集任务的快速 VI 和停止按钮同时控制程序的运行。如图 3.1.(该程序见附 件 Error control while loop.vi) 图 3.1 While 循环的错误处理 练习练习 1. 针对以下几种问题,考虑使用 While 循环还是 For 循环: (1)一秒钟采集一次温度数据,采集时间是 1 分钟。如果使用 While 循环, 如何设置停止条件? 如果使用 for 循环,如何设置循环次数? (2)当温度高于 30 摄氏度时才开始采集数据,如果使用 While 循环如何设置 停止条件?如果使用 for 循环,如何设置循环次数? 2. 产生一个 1100 的随机数,当该随机数在一个指定值 3范围内停止,并且输出程序循环的次数。 输入:指定值 输出:输出循环次数 3. 程序随机生成一个 11000 的整数作为比较值,每次提示输入一个数值后, 会返回该数值和比较值的大小关系,直到输入数值等于比较值。然后返回用 户猜测的次数。 1 LabVIEW 初级教程初级教程LabVIEW 编编 程程 中中 的的 定定 时时 LabVIEWLabVIEW 编程中的定时编程中的定时 在 LabVIEW 中我们都不可避免的在循环结构或者顺序结构中使用到定时。为什么要使 用定时呢,常用的定时都有哪些,他们有什么区别?接下来我们将详细为大家介绍。 1为什么要使用定时为什么要使用定时: 一般来说在循环中,我们都会添加一个定时器。他们的作用主要有 2 个: 1. 控制代码执行的速率:简单的来说,如果在循环中添加了定时,就可以控制循环 以一定间隔重复执行;或者在串口通信中,在发送指令后等待指定的时间再读返 回值。 2. 降低 CPU 占用率:如果没有设置定时,CPU 的大部分资源会一直被该线程占用, 而无法执行其他线程。 在下面的例子(例程在附件中)中,分别是没有定时和定时为 100ms 时 CPU 的占用率 情况。 图 1.1 程序框图配置间隔 100ms 图 1.2 没有定时和定时情况下 CPU 占用率 2定时定时 VI 用法:用法: 在 LabVIEW 中的常用定时有等待(ms),和等待到下一个整数倍毫秒。 1 等待(ms) 该 VI 的输入端为整型,单位是 ms。指定代码执行的时间间隔。举例来说,连 入 VI 的输入为 10ms,如果循环中代码的运行时间是 3ms,那么每次循环的时间是 10ms;如果循环中代码的运行时间是 14 毫秒(大于 10ms) ,那么每次的循环的时 间是 14ms。可以运行附录中的例程(Wait_ms_example.vi) ,观察这两种差别。没有定时, CPU 占 用 100 定时,CPU 占用 1 2 LabVIEW 初级教程初级教程LabVIEW 编编 程程 中中 的的 定定 时时 (Windows 下软件定时的精度在 1 个 ms 左右,所以实际的情况会有 1ms 左右的误 差) 2 等待到下一个整数倍毫秒 该 VI 输入为整型,单位是 ms。该 VI 将定时和系统的时钟对应起来,使用该定 时 VI 后,代码将在系统时钟为定时时间的整数倍执行。 使用该定时 VI 的第一次运行时间间隔是不确定的。比如设定定时为 1000ms, 对于第一次运行,无论当前时间是 50ms 还是 850ms,都将在下一次 1000ms 的整数 倍时间第二次运行该代码,那么实际的间隔分别是 950ms 和 150ms。 附录中的例程(ms_multiple_test.vi)说明了这个问题: 设定间隔为 5000ms,如 果没有经过初始化, 那么使用该 VI 定时后, 第一次运行的时间间隔将可能是 05000 中的任意一个值;如果初始化,那么可以保证第一次的时间间隔为 5000ms。 3定时的精度:定时的精度: 对于上面提到的定时 VI, 输入的单位都是 ms, 但是实际运行的最小间隔在 2ms 以上。这是因为 Windows 操作系统中,对线程的操作最小的间隔是 2ms。运行附件 中的例程 (No 1 ms Resolution.vi) ,时间间隔设定为 1ms, 使用 For 循环循环另外 2000 次以观察运行的时间。我们可以看到,实际的执行之间并不是 2000ms 而是 4000ms 左右的一个值。 4使用定时的注意事项使用定时的注意事项: 在使用等待到下一个整数倍毫秒时需要注意,当该 VI 处于等待状态时,整个线程都将处于等待状态。在对时间要求较高的实时系统中,往往不可以简单的将 该定时 VI 和代码并行的放置。 我们看下面的这个例子,如图 4.1 所示,我们期望先读取,再输出,并且不断 的循环这个过程,在每个循环之间设置定时。 图 4.1 数据采集流程 图 4.2 将定时代码并行放置 如果我们按照图 4.2 的方式编程,没有指定定时和代码的执行次序,那么很 有可能会出现下面的情况:首先读取 VI 运新,然后定时 VI 执行,在定时 VI 执行 时,整个线程也将停止,然后才执行输出 VI。如图 4.3 所示: 读取 输出 等待 读取 输出 等待 3 LabVIEW 初级教程初级教程LabVIEW 编编 程程 中中 的的 定定 时时 图 4.3 并行情况下可能的执行循序 为了避免上面的不确定情况,可以通过顺序结构指定定时和代码的执行顺序: 图 4.4 指定定时和代码执行顺序 需要注意的是,虽然上面的结构可以保证代码执行的顺序,但是由于是软件定时, 由系统引入的不确定性依然存在,在很大程度上影响了定时的精度。 定时 练习题: 1. 下图中那个是循环中没有设置定时的情况? A左 B. 右 2. 可以将定时和系统的时间对应起来的是哪种定时? A等待(ms) B.等待到下一个整数倍毫秒 3. 以下哪种定时精度是不可以通过定时 VI 来实现的? A1ms B. 10ms C.100ms D.3ms 4在循环程序中设置定时,间隔为 100ms,如果代码的执行时间为 70ms,那么实际的定时 间隔是多少? A100ms B. 170ms C.30ms D.70ms 5在循环程序中设置定时,间隔为 100ms,如果代码的执行时间为 170ms,那么实际的定 时间隔是多少? A270ms B. 170ms C.100ms D.70ms 读取 等待 输出 读取 等待 输出 4 LabVIEW 初级教程初级教程LabVIEW 编编 程程 中中 的的 定定 时时 1 LabVIEW 初级教程初级教程VI 图图 标标 和和 连连 线线板板 V VI I 图标和连线板图标和连线板 1. 主主VIVI调用子调用子VIVI 当一个VI A.vi在VI B.vi 中使用,就称A.vi为B.vi的子VI,B.vi为A.vi的主VI。子VI 相 当于文本编程语言中的子程序。 在主VI的程序框图中双击子VI的图标时,将出现 该子VI 的前面板和程序框图。在前面板窗口和程序框图窗口的右上角可以看到该 VI 的图标。该图标与将VI放置在程序框图中时所显示的图标相同。 例如:打开LabVIEW范例查找器基础图形和图表Temperature Analysis, 出现如下程序框图。 图图 1 1 调用子调用子 VIVI 双击子VI图标,出现子VI的前面板,如下。 图图 2 2 子子 VIVI 的前面板的前面板 2 LabVIEW 初级教程初级教程VI 图图 标标 和和 连连 线线板板 图1中,Temperature Analysis.vi作为主VI调用了Simulated Temperature (deg F).vi。图1和图2中可以看到子VI的图标与将VI放置在程序框图中时所显示的图标相 同。 通过单击函数选板上的选择选择VI.VI.按钮,找到需要作为子VI 使用
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号