《labview初级课程》由会员分享,可在线阅读,更多相关《labview初级课程(27页珍藏版)》请在金锄头文库上搜索。
1、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 的开发规范和
2、编程方法 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 循环流程图 我们通过以下的例子来具
3、体介绍 While 循环: 图 1.2 是使用 while 循环产生一个随机序列,当该序列中有值大于 0.9 或者停止按 钮被按下时代码停止。(该程序见附件 Random generate.vi) 图 1.2 While 循环产生随机序列 条件接线端:条件接线端:While 循环会一直执行代码,直到条件接线端收到特定的布尔值时才 会停止。在本例中,当由停止键按下或者产生的随机数大于 0.9 时就会终止该程序。 条件接线端一般默认为真时停止(),当该接线端输入为真时程序就终止。也 可以选择真时继续()。 计数接线端:计数接线端:表示已经完成的循环次数,该计数从 0 开始。在本例中,如果当产 生的
4、第 13 个点值超过 0.9 时,计数器值为 12。 结构隧道:结构隧道: 当需要将循环中的数据传入或者传出时,我们使用隧道的方式(这一 点将在后面详细介绍)。 2.2. ForFor 循环循环 For 循环常用于已知代码循环次数的情况,比如数组的操作。下面是 For 循环的流 程图: 2.1 For 循环的流程图 我们通过以下的例子来具体介绍以下 For 循环: 如图 2.2,使用 For 循环产生一个 34 的二维随机数组。(该程序见附件 Generate array.vi) 图 2.2 For 循环产生 34 的二维随机数组 计数接线端(输入):计数接线端(输入):通过计数接线端指定 F
5、or 循环的循环次数。该接线端计数从 1 开始。 计数接线端(输出):计数接线端(输出):表示 For 循环已经完成的循环次数。该接线端计数从 0 开 始。 如图 2.2,生成 34 的二维数组后,维数 1 和维数 2 分别为 3,2。 3.3. While While 循环循环 与与 For For 循环的区别:循环的区别: 一般来说,如果已知循环的次数,那么使用 For 循环比较简便;如果循环次数未知, 那么就需要使用 While 循环。另外,因为 While 循环提供了一个布尔的条件判断端, 可以通过布尔运算实现对复杂条件的判断。 我们可以使用 While 循环来迚行错误处理:如图 3.
6、1, 将错误簇连接到条件接线端上时,那么就可以通过停止按钮和程序运行的状态共同来控制程序的运行。对于大 多数循环,都建议采用这种方法停止循环。这里以一个数据采集任务为例,我们将数据采集任务的快速 VI 和停止按钮同时控制程序的运行。如图 3.1.(该程序见附 件 Error control while loop.vi) 图 3.1 While 循环的错误处理 练习练习 1. 针对以下几种问题,考虑使用 While 循环还是 For 循环: (1)一秒钟采集一次温度数据,采集时间是 1 分钟。如果使用 While 循环, 如何设置停止条件? 如果使用 for 循环,如何设置循环次数? (2)当温
7、度高于 30 摄氏度时才开始采集数据,如果使用 While 循环如何设置 停止条件?如果使用 for 循环,如何设置循环次数? 2. 产生一个 1100 的随机数,当该随机数在一个指定值 3范围内停止,并且输出程序循环的次数。 输入:指定值 输出:输出循环次数 3. 程序随机生成一个 11000 的整数作为比较值,每次提示输入一个数值后, 会返回该数值和比较值的大小关系,直到输入数值等于比较值。然后返回用 户猜测的次数。 1 LabVIEW 初级教程初级教程LabVIEW 编编 程程 中中 的的 定定 时时 LabVIEWLabVIEW 编程中的定时编程中的定时 在 LabVIEW 中我们都不
8、可避免的在循环结构或者顺序结构中使用到定时。为什么要使 用定时呢,常用的定时都有哪些,他们有什么区别?接下来我们将详细为大家介绍。 1为什么要使用定时为什么要使用定时: 一般来说在循环中,我们都会添加一个定时器。他们的作用主要有 2 个: 1. 控制代码执行的速率:简单的来说,如果在循环中添加了定时,就可以控制循环 以一定间隔重复执行;或者在串口通信中,在发送指令后等待指定的时间再读返 回值。 2. 降低 CPU 占用率:如果没有设置定时,CPU 的大部分资源会一直被该线程占用, 而无法执行其他线程。 在下面的例子(例程在附件中)中,分别是没有定时和定时为 100ms 时 CPU 的占用率 情
9、况。 图 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 占
10、用 100 定时,CPU 占用 1 2 LabVIEW 初级教程初级教程LabVIEW 编编 程程 中中 的的 定定 时时 (Windows 下软件定时的精度在 1 个 ms 左右,所以实际的情况会有 1ms 左右的误 差) 2 等待到下一个整数倍毫秒 该 VI 输入为整型,单位是 ms。该 VI 将定时和系统的时钟对应起来,使用该定 时 VI 后,代码将在系统时钟为定时时间的整数倍执行。 使用该定时 VI 的第一次运行时间间隔是不确定的。比如设定定时为 1000ms, 对于第一次运行,无论当前时间是 50ms 还是 850ms,都将在下一次 1000ms 的整数 倍时间第二次运行该代码,那么
11、实际的间隔分别是 950ms 和 150ms。 附录中的例程(ms_multiple_test.vi)说明了这个问题: 设定间隔为 5000ms,如 果没有经过初始化, 那么使用该 VI 定时后, 第一次运行的时间间隔将可能是 05000 中的任意一个值;如果初始化,那么可以保证第一次的时间间隔为 5000ms。 3定时的精度:定时的精度: 对于上面提到的定时 VI, 输入的单位都是 ms, 但是实际运行的最小间隔在 2ms 以上。这是因为 Windows 操作系统中,对线程的操作最小的间隔是 2ms。运行附件 中的例程 (No 1 ms Resolution.vi) ,时间间隔设定为 1ms
12、, 使用 For 循环循环另外 2000 次以观察运行的时间。我们可以看到,实际的执行之间并不是 2000ms 而是 4000ms 左右的一个值。 4使用定时的注意事项使用定时的注意事项: 在使用等待到下一个整数倍毫秒时需要注意,当该 VI 处于等待状态时,整个线程都将处于等待状态。在对时间要求较高的实时系统中,往往不可以简单的将 该定时 VI 和代码并行的放置。 我们看下面的这个例子,如图 4.1 所示,我们期望先读取,再输出,并且不断 的循环这个过程,在每个循环之间设置定时。 图 4.1 数据采集流程 图 4.2 将定时代码并行放置 如果我们按照图 4.2 的方式编程,没有指定定时和代码的
13、执行次序,那么很 有可能会出现下面的情况:首先读取 VI 运新,然后定时 VI 执行,在定时 VI 执行 时,整个线程也将停止,然后才执行输出 VI。如图 4.3 所示: 读取 输出 等待 读取 输出 等待 3 LabVIEW 初级教程初级教程LabVIEW 编编 程程 中中 的的 定定 时时 图 4.3 并行情况下可能的执行循序 为了避免上面的不确定情况,可以通过顺序结构指定定时和代码的执行顺序: 图 4.4 指定定时和代码执行顺序 需要注意的是,虽然上面的结构可以保证代码执行的顺序,但是由于是软件定时, 由系统引入的不确定性依然存在,在很大程度上影响了定时的精度。 定时 练习题: 1. 下
14、图中那个是循环中没有设置定时的情况? 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 读
15、取 等待 输出 读取 等待 输出 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放置在程序框图中时所显
16、示的图标相同。 例如:打开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 使用