labview主/从设计模式和生产者/消费者设计模式
LabVIEW程序设计模式(五)—生产者消费者模式(3)_LabVIEW程序的动态调用

LabVIEW程序设计模式(五)—生产者/消费者模式(3)_LabVIEW程序的动态调用LabVIEW程序设计2009-05-19 17:11:09 阅读696 评论0 字号:大中小订阅简单而言,动态调用指的是通过程序控制另外一个程序的运行、停止、赋值和获取值等。
LabVIEW提供了多种动态调用的方式,从底层而言是通过VI Server 技术实现的。
图31所示为LabVIEW中的Application Control选板,动态调用所使用的节点都位于这个选板。
当调用一个在硬盘、内存甚至是网络路径上的vi时,首先要使用Open VI Reference以将该VI载入内存并获取VI的“句柄(Reference)”;然后再使用该句柄进行其它的控制操作;最后再关闭该VI的句柄避免内存泄漏,这就完成了一次对VI的调用。
图31 Application Control选板图32是一个动态调用的具体实现代码,首先使用Open VI Reference获取被动态调用VI的Reference(例子中是C:\average.vi);再使用Call By Reference Node 节电动态运行该VI;最后关闭VI的Reference。
在使用Call By Reference Node 时需要事先指定被调用VI的输入输出接口,也就是说这种动态调用的前提是必须知道被调用VI的输入输出接口,否则无法进行动态调用。
图32 VI的动态调用Open VI Reference的路径输入是一个多态的输入口,也可以使用String输入,如图33所示。
此时被调用的VI必须在内存中,且输入的是被调用VI的文件名。
值得一提的是这种“文件名”调用方式在可执行程序中是无法被调用的,因此建议最好采用路径的调用方式。
图33 Open VI Reference的多态性【应用5】本例将使用LabVIEW的动态调用方式实现斐波那契数列(Fibonacci数列)。
labview生产者消费者

生产者/消费者模式(1)_前言statemice的LabVIEW程序设计模式(五)—生产者/消费者模式(1)_前言再次回顾“基本状态机模式”的6个缺点,只剩下第6个缺点无法在上述的“状态机和事件结构的结合模式”中被解决。
(1) 任何时刻只能有一个状态在运行这个问题也许有些多余,但是在实际的应用中往往又是最常见的。
大多数比较复杂的应用至少应该有“菜单”和“采集”两个状态,如果数据采集程序在运行时仍然希望系统能够处理菜单的事件,这是在传统的状态机或者事件结构中无法实现的。
因为无论是状态机结构还是事件结构,都是由一个循环组成的,不同的状态是无法同时被响应和处理的。
解决这个问题的方式也比较简单,LabVIEW本身就是一种多线程的程序设计语言,可以再加一个循环或者另外开一个程序独立运行。
但是这样也会带来一些新的问题,比如:(1) 两个循环(程序)之间如何交换和共享数据。
(2) 两个循环(程序)都有着独立的错误处理系统,它们之间是如何协调的。
(3) 两个循环如何分工呢?应该以哪种方式对状态进行分类以将不同的状态放置在不同的循环(程序)中?(4) 一个程序如何控制另一个程序的运行和停止。
在上面提出的4个问题中,对循环和程序这两个解决方案而言,第(1)~(3)个问题的解决方式是一样的。
只有第(4)个问题是专门针对两个程序而言的,在LabVIEW中这种不同程序之间的相互调用称为“程序的动态调用”。
生产者/消费者模式(2)_VI的可重入性(Reentrant Execution)statemice的LabVIEW程序设计模式(五)—生产者/消费者模式(2)_VI的可重入性(Reentrant Execution)在介绍VI的动态调用之前有必要对LabVIEW在执行VI过程中的规则有个大致的了解。
众所周知,LabVIEW是通过VI的文件名(VI Name)来表示独立的VI的,并不是VI的路径。
因此,LabVIEW不允许具有相同名字的VI同时载入内存中,即使这些VI存储在不同的路径中。
labview程序设计模式(五)—生产者消费者模式(4)_生产者消费者循环

LabVIEW程序设计模式(五)—生产者/消费者模式(4)_生产者/消费者循环本节将使用“多循环”来解决程序并行运行的问题,那么程序中的两个循环如何进行数据交互和共享呢?最普通的方式是采用全局变量或局域变量,但是当两个循环执行的速率不相等时,必然会造成数据的丢失或重复。
如前所述,LabVIEW提供了队列操作函数,允许数据的发送者和接受者之间建立一条缓冲通道,这样就避免了循环不同步带来的影响。
如图37所示,将整个过程与供水系统进行类比,在数据产生/采集端(供水局)产生数据后,并不直接向终端用户供水,因为前者产生水的速率与后者消耗水的速率并不相同。
此时需要建造蓄水池将供水局产生的水放入到蓄水池中,同理获取的数据也放入该缓冲区中。
当终端用户需要用水时,直接从蓄水池中获取就可以了,同理在进行数据显示和分析时直接从数据缓冲区中获取就可以了。
图37 生产者/消费者模型当然,上面的模型也会存在一个问题:数据缓冲区/蓄水池的容量?假定供水局不停地产生自来水,而终端用户却不消耗水,这样便会导致蓄水池装满而溢出。
反之当终端用户耗水量太大时,导致没有水可用。
LabVIEW中的队列函数提供了一种很好的方式规避了这个问题,由于队列中的元素是“先进先出”的,因此确保了接收到的数据是有序的。
在LabVIEW的队列操作中(入列和出列函数),提供了timeout选项以处理数据缓冲区的溢出或不足。
当数据溢出时,入列函数(数据进入队列)将停止发送数据(处于等待状态),直到缓冲区存在数据空间或者达到了timeout设置的时间;而当数据不足时,出列函数(数据流出队列)将停止接收数据(处于等到状态),直到缓冲区进入了新的数据或者达到了timeout设置的时间。
【应用6】所示,生产者与消费者之间传递的数据是一个连续的sine波形,二者靠大小为20个点的缓冲区连接。
右下角是“停止”按钮,用户控制程序的停止执行。
例程提供了操作方式控件控制生产者和消费者的数据传递速率,包含五种状态:不生产,只消费、生成快于消费、生成速率等于消费速率、生成慢于消费、只生产,不消费。
精讲LabVIEW设计模式培训

精讲LabVIEW设计模式培训概述LabVIEW是一种图形化编程语言,用于数据采集、控制、仪器仪表通信、图像处理等领域。
设计模式是一种经过验证的最佳实践方法,用于解决特定问题。
本文将精讲LabVIEW设计模式培训,帮助读者了解LabVIEW设计模式的基本概念和应用。
设计模式的概念设计模式是在软件工程中,根据问题的特点和需求的约束,提供一套解决方案的模式。
它可以提高代码的可读性、可维护性和可扩展性。
设计模式分为三大类:创建型模式、结构型模式和行为型模式。
在LabVIEW中,常用的设计模式包括状态机模式、发布-订阅模式、命令模式等。
状态机模式状态机模式是一种通过定义对象的状态来解决特定问题的设计模式。
在LabVIEW中,状态机模式常被用于处理事件驱动的程序。
它通过不同的状态和状态之间的转换来实现特定功能。
例如,一个简单的状态机模式可以用于控制流程的顺序执行,通过定义不同的状态和状态之间的转换条件,实现不同的程序逻辑。
发布-订阅模式发布-订阅模式是一种实现对象间松耦合的设计模式。
在LabVIEW中,发布-订阅模式被广泛应用于多任务编程和消息传递。
它通过将消息的发布和订阅分离,实现不同模块之间的通信。
例如,一个发布-订阅模式可以用于实现观察者模式,让观察者模块监听某个对象的状态变化。
命令模式命令模式是一种将请求封装为对象,以此来参数化客户端的设计模式。
在LabVIEW中,命令模式常被用于实现撤销和重做功能。
它通过将动作封装成命令对象,实现对动作的参数化和执行。
例如,一个命令模式可以用于实现对仪器的控制,每个命令对象代表一个具体的操作,可以被撤销和重做。
实例讲解下面,我们将通过一个简单的实例来讲解LabVIEW设计模式的应用。
假设我们需要编写一个程序来控制一个自动化实验装置,包括采集数据、处理数据和输出结果。
我们可以使用状态机模式来实现流程的顺序控制,使用发布-订阅模式来实现模块间的通信,使用命令模式来实现对仪器的操作。
上位机软件设计与实现基于LABVIEW架构的分析仪器

号
10701 TP311.1
学 密
号 级
1082420009 公开
分类号
题(中、英文)目
基于 LABVIEW 架构的分析仪器 上位机软件设计与实现 PC software design and implementation based on LABVIEW architecture of an analytical instrument
ABSTRACT
The virtual instrument (VI) technology is particularly in correspondence with the international development tendency that turns hardware technique into software, therefore it often called as “software instrument”. The key idea of VI is “software is instrument”. The virtual instrument has exclusive advantages over conventional instrument, and it can perform tasks that the conventional instrument is incapable. So the user-defined measurement systems are designed based on virtual instrument which enables complex and expensive hardware to be replaced by developed software. This thesis firstly introduces the state-of-the-art virtual instrument, and the features and advantages of LABVIEW. The LABVIEW-based PC software is designed according to the actual demand. The producer/consumer model is used to the design of main program, and messages between producer and consumer are transmitted and managed through message queuing processor. Then the integral software architecture is described, and the design of all sub-modules is presented, including file management module, upper/lower machine communication module, the real-time data acquisition of lower machine module, data processing module and curve fitting module etc. The design and implementation for each sub-module is performed by using the standard state machine and synchronization technology. Finally, the functions expected above are tested by establishing communication connection with lower machine, and then the results show that the LABVIEW-based software designed in this thesis operates normally. Keywords: Weak-light Detection Data Processing LABVIEW Virtual Instrument Upper/Lower Machine
第2章 LabVIEW程序设计模式

23
使用数组处理消息队列
在建立消息队列之前首先要确定程序的状 态,“初始化”状态是必不可少的,它用以复 位前面板控件、中间变量值、寄存器值和打开 扫描仪器等;“等待”状态,在该状态下程序 一直探测前面板三个按钮的动作;“退出”状 态用于销毁空间,关闭扫描仪器等;此外,还 需要“扫描区域A”、“扫描区域B”、“扫描 区域C”和“扫描区域D”分别控制各个不同的 扫描区域。
2
LabVIEW程序设计模式
源于虚拟仪器技术的LabVIEW程序设计语言, 从被创建开始就是面向测量和应用的,并且绝 大多数采用LabVIEW开发的应用程序都同测控仪 器等硬件设备紧密结合。虽然这些设备的类型 和规模各不相同,应用领域的差异也很大,但 从测量和控制过程的基本步骤来看,绝大多数 的LabVIEW程序的基本框架是有章可循的,具有 一定的模式特征。
例2 使用改进的顺序型状态机计时
16
测试流程型状态机
顺序型状态机还有一个缺点:不便于阅读 和修改程序,Case结构的子框图列表中显示的 是数值,不具有任何的实际意义。所以需要找 到一种方式,不仅能够保证Case结构的正常运 行,还要能够很方便地识别Case结构中各个子 框图的功能。 使用枚举型常量代替数值型常量控制状态 机运行,也就是我们提出的测试流程型状态机, 正好能满足我们的要求。
24
使用数组处理消息队列
建立消 息队列
移出消息 队列
加入消 息队列
扫描例程—初始化状态
25
使用数组处理消息队列
扫描例程——等待状态
26
使用数组处理消息队列
一旦用户单击前面板的按钮,这个信息将会 被系统探知,并执行相应的消息处理函数,如 Case子框图标识为“1”、“1”和“3”的源代 码。当没有搜索到任何“真”值时,便将“等 待”状态加入消息队列,以便不断探测消息队 列中的值,维持循环的运行。当搜索到“0”~ “2”时,将相应需要执行的状态序列加入消息 队列。运行完各个扫描区域的代码后,程序应 该继续回到“等待”状态。
风洞试验软件系统的设计

风洞试验软件系统的设计傅冰;陈雪原【摘要】对某高速风洞试验软件系统的分析设计与实现过程进行了论述.在国内外可借鉴经验极少的情况下,结合国内风洞试验技术现状,为该风洞设计了一套较为完善的风洞试验软件系统.本文介绍了项目研制过程中主要涉及的关键技术、系统总体设计、各子系统功能设计及其具体实现过程.基于风载试验数据的分析对比与研究,对系统实时数据的处理进行了改进,使系统控制的稳定性与效率达到较好的平衡.【期刊名称】《沈阳航空航天大学学报》【年(卷),期】2017(034)003【总页数】5页(P76-80)【关键词】计算机应用技术;试验软件;流场控制;安全监控【作者】傅冰;陈雪原【作者单位】中航工业空气动力研究院测控技术部,沈阳110034;中航工业空气动力研究院测控技术部,沈阳110034【正文语种】中文【中图分类】V211.7420世纪中末叶,世界上建成了德荷风洞联合体的LLF风洞、NTF风洞和ETW风洞等几座具有代表性的现代化生产型风洞,我国也相继建成了FL-2、FL-21和FL-24等多座现代化生产性风洞。
风洞试验软件成为这些风洞控制的重要组成部分,主要用于实现风洞设备的基本运行控制。
新建的某高速生产型风洞是目前国内同类型同等尺寸风洞中结构和测控系统较为复杂的风洞。
试验控制方式复杂,流场控制的快速准确性要求更高,多环节复杂系统的运行效率问题、高马赫数下风洞洞体高压情况的安全保障问题也更为突出。
该风洞试验软件作为风洞的综合自动化试验软件平台,着重多种试验控制流程及模式、流场控制策略及算法和系统安全性设计,在自动化控制风洞运行的同时达到提升流场品质、提升运行效率、保证系统安全的目的。
风洞的流场品质和综合能力达到目前航空先进国家同类型风洞的先进水平。
风洞试验软件系统能控制风洞运行达到指定流场指标,实现风洞试验流程,取得试验数据,保证试验过程设备安全。
风洞试验软件系统是集成各种试验软硬件资源构成的综合测控平台,是测控系统的核心,能够在软件层面实现风洞试验自动化流程控制、多参数耦合高精度调节和安全监控保障等功能,同时实现人机交互[1-2]。
状态机

上一页
返回
8.2 状 态 机
• 状态机是LabVIEW 中常用且用途广泛的一个设计模型。用状 态机设计模型可以实现任何用状态图或流程图明确描述的算法。状态 机通常用于实现较为复杂的判断算法, 如诊断程序或过程监控。
• 状态机(更确切地说是有限状态机) 包含一组状态和映射下一状态 的转移函数。有限状态机有多个变量。最常用的两种有限状态机是米 勒型状态机和摩尔型状态机。米勒型状态机对于每一个状态变化产生 一个响应; 而摩尔型状态机是对状态转移图中的每一个状态产生一 个响应。LabVIEW 中状态机设计模型模板可以实现任何由摩 尔型状态机描述的算法。
上一页 下一页 返回
8.1LabVIEW 程序设计模式
• 从软件的角度看, 生产者是数据的提供方, 消费者是数据的消费方 。生产者和消费者之间存在一个数据缓冲区, 大小一般是固定的。 当生产过剩而消费不足的情况下, 缓冲区的剩余空间不断减小直至 耗尽。当缓冲区无剩余空间时, 生产者必须停止生产, 一直等到缓 冲区出现剩余空间时再继续生产; 反之, 当消费能力大于生产的时 候, 缓冲区内的数据会逐渐减少, 直至缓冲区中再无数据可用。此 时, 消费者处于等待状态。如图8-3 所示, 生产者、消费者设计 模式常常是多个生产者提供数据, 一个消费者使用或者处理数据。 因为消费者使用数据的时候, 队列中的数据已经被取出, 所以在存 在多个消费者的情况下, 消费者所消费的将会是不同的数据。
上一页 下一页 返回
8.1LabVIEW 程序设计模式
• 队列消息处理器的最大优点是一次可以发送多条消息, 形成消息队 列。每次循环, 删除最先进入数组的元素即下消息, 同时取出被删 除的元素, 并执行相应的消息处理分支。队列消息处理器至少需要 两个分支, 即“无事件发生” 和“退出分支”。其中, “无事件发 生”必须是默认状态。当队列中无消息时, 取出的字符串为空, 执 行默认分支。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.2 LabVIEW设计模式——主/从设计模式和生产者/消费者设计模式
在上一节中曾经谈到过,NI LabVIEW 中提供了六种最基本的设计模式。
本节首先介绍其中的两种:主/从
设计模式与生产者/消费者设计模式(Master/Slave design pattern and Producer/Consumer design pattern)。
这是由于这两种设计模式在结构上极为相似(使用的内置函数不同),所以我们在这里将一起来讨论(基本结构参见图 5.2-1、图 5.2-2)。
图 5.2-1 主/从设计模式
图 5.2-2 生产者/消费者设计模式
5.2.1 主/从设计模式(Master/Slave design pattern)
与主/从设计模式的相关内置函数(Notifier_通知)参见下图所示。
图 5.2.1-1 主/从设计模式内置函数(通知)
关于这些内置函数的定义和使用方法请参考LabVIEW Help文件,这里就不再进行讨论了。
对于绝大多数LabVIEW的学习者来讲,仅仅依据这些主/从操作提供的内置函数(通知),即便是借助于帮助文件也很难理解和设计出正确的应用程序代码或基本架构。
因为这些内置函数的内部程序代码是不对外开放的、不公开的,所以我们也就很难理解的更准确或更全面。
那么如何正确的使用它们呢?
通常有两个最简单、最直接的方法可以解决这个问题:一是,查看NI给出的设计模式或例程;二是,查看其它使用者所提供的实用例程。
其实,这里也再次间接的告诉大家,更多查看和理解其它LabVIEW开好者所提供的实用例程是学习LabVIEW的最好方法之一。
通过图 5.2-1,就可以初略地领会到NI 基于数据流的图形化代码主/从设计模式的表达形式或架构。
从图 5.2-1中,可以看到主/从设计模式的基本构成是:包括了两个While循环(上面为主循环、下面的为从循环)和若干个“通知”内置函数(Notifier)构成。
主循环中的Case结构用来确定是否向从循环发出通知。
该设计模式支持图形化代码的多种数据类型的数据输入(图 5.2-1中的数据类型为:字符串);并且用一个Stop按键来控制这两个While循环的停止。
如果用“高亮执行”方式来查看它的数据流运行状态时,我们会发现:当主循环中的Case结构的条件输入端为:F时,主循环不会发出通知,从循环也不执行任何操作;当主循环中的Case结构的条件输入端为:T时,主循环发出通知,从循环执行相应的操作。
当我们按下“Stop”键时,主循环停止并利用错误簇(表现为:出现错误)通知从循环也停止。
主/从设计模式工作时,数据(元素)传递是发生在两个While之间,依据While循环的数据流工作原理,我们的确很难理解数据是如何在两个While循环之间传递的。
这使得这种结构的两个While循环之间传递数据的关系看起来
有点象全局变量(或本地变量)。
其实,它与全局变量功能上是相近的,但还是有些区别。
其中最主要区别在于:负责产生信息的主循环必须保持循环查询数据是否发生变化。
在数据没有发生改变的时候,从循环结构则完全停止执行,只有当新数据可用时才重新启动(通知)。
这就会使计算机减少浪费在无止境的轮询中的时间。
另外,全局变量破坏了数据流的关系,而这里则完全保证了数据流的关系。
主/从设计模式主要用来解决两个或多于两个的同时发生的并且拥有不同运行速率的线程的通信应用中或
者在运行于同一台机器的两个VI之间通信的工具。
这种方式一般用来同步两个独立的进程,所以它的这些内置函数是分类在函数选板的同步模版中。
其实,在数据采集和处理中,更需要这种主
/从构架的应用。
比如,在连续数据采集和分析、处理中,我们可能会将采集、分析、处理放在一个While循环内。
那么While 循环运行一次的时间就是采集、分析、处理这三部分运行时间之和。
如果任务中需要快速采集和实时处理,显然这种在采集、分析、处理同放在一个While循环中的方式很不好,很可能导致
数据采集的不连续性(数据时间上出现间断点),也就是采集完后将等待分析、处理完成后才能再次进行采集。
如果真的不希望这种情况发生,那就可以通
过采用主/从设计模式来解决这样类似的问题。
比如,将数据采集放到主循环中,分析和处理放置到从循环中。
由于我们不是LabVIEW内置函数的设计者,
所以不清楚主/从设计模式的数据存储方式,所以我们只能认定:这种工作方式当Send Notification有效时,元素被存储,当Wait on Notification有效时,元素被读取,从而实现主/从
结构间的数据传递。
这样做就会高枕无忧了吗?其实不然!
这种构架的缺点是:如果取走元素的速度慢,而发送元素的速度快,則会发生元素漏掉的情形。
为了验证这样的说法,我们做一个简单的验证程序。
例 5.2.1-1 主从结构数据传递试验
图5.2.1-2 是该程序的程序框图。
图 5.2.1-2 主/从模式数据传输试验程序框图
主循环产生一个随机数并发送到从循环,在每个循环中各放置一个Chat图形显示器来观察随机数发送和接收的情况。
主/从循环各放置一个定时器,选择不同的定时时间来验证数据传输的正确性。
1、主循环定时:150ms,从循环定时:150ms
图 5.2.1-3 主循环、从循环定时均为150ms
从图 5.2.1-3可以看出数据传递是准确可靠的。
2、主循环定时:200ms,从循环定时:150ms
图 5.2.1-4 主循环定时200ms、从循环定时为150ms
从图 5.2.1-4也可以看出数据传递是准确可靠的。
3、主循环定时:150ms,从循环定时:200ms
图 5.2.1-5 主循环定时150ms、从循环定时为200ms
从图 5.2.1-5可以看出数据传递明显出现丢失数据的现象。
数据没有传递完是由于我们终止了运行。
还有一个问题,从循环的停止是来自于主循环提供的错误信息,那么如果从循环内发生错误如何报错?
鉴于这些原因存在,这也是主/从循环设计
模式被使用的比较少的原因之一。
那么有没有更好的解决方法呢?这就是我们下节所要介绍的“生产者、消费者设计模式”。
5.2.2 生产者/消费者设计模式(Producer/Consumer design pattern)
可以说:生产者、消费者设计模式是图形化
程序设计中最广泛使用的设计模式。
与生产者、消费者设计模
式的相关内置函数(Queue_队列)参见下图所示。
图 5.2.2-1 生产者/消费者设计模式内置函数(队列)
在图 5.2-2中,就是基于数据流的图形化代码生产者/消费者设计模式的表达形式或架构。
它的构成与上面所讨论的主/从设计模式基本相同,只是使用的内置函数不同。
同样我们也不介绍内置函数的定义和使用方式。
同时,生产者/消费者设计模式的基本工作
原理也就不多介绍了。
下面主要介绍它们之间的不同之处。
它们之间最大的不同就是数据存储和传输方式的不同。
生产者/消费者设计模式采用了队列的数据存储方式(FIFO)。
队列的数据存储是开辟一个缓存区,依据先进先出的原则进行的。
新来的元素总是被加入队尾(即不允许"加塞"),每次离开的元素总是队列头上的(即不允许中途离队),当前"最老的"元素离队。
这样就保证了数据传递过程中基本上不会发生数据丢失的现象。
为了验证这样的说法,我们还是同样做一个简单的验证程序。
例 5.2.2-1 生产者/消费者结构数据传递试验
图5.2.2-2 是该程序的程序框图。
图 5.2.2-2 生产者/消费者模式数据传输试验
生产者循环产生一个随机数并发送到消费者循环,在每个循环中各放置一个Chat图形显示器来观察随机数发送和接收的情况。
生产者/消费者循环各放置一个定时器,选择不同的定时时间来验证数据传输的正确性。
1、生产者循环定时:150ms,消费者循环定时:150ms
图 5.2.2-3 生产者循环、消费者循环定时均为150ms
从图 5.2.2-3可以看出数据传递是准确可靠的。
2、生产者循环定时:200ms,消费者循环定时:150ms
图 5.2.2-4 生产者循环定时200ms、消费者循环定时为150ms
从图 5.2.2-4可以看出数据传递也是准确可靠的。
3、生产者循环定时:150ms,消费者循环定时:200ms
图 5.2.2-5 主循环定时150ms、从循环定时为200ms
从图 5.2.2-5 可以看出数据传递也没有出
现数据丢失的现象。
实际上,由于数据传递被强行停止,所以后面的数据没有被全部完全传递出来。
解决这个问题的方法是在程序设计中添加一些处理程序,这部分内容可参考:LabVIEW网络讲坛系列第三季《运筹帷幄》——生产者/消费者循环。
还是那个问题,从循环的停止是来自于主循环提供的错误信息,从循环内如果发生错误如何报错?
下面给出一个使用Mac版LabVIEW编写的DAQmxBase的实例(仅用于Mac数据采集应用)。
图 5.2.2-6 Mac电脑用于数据采集的生产者/消费者例程(DAQmxBase)。