Arduino是源自意大利的一个开放源代码的硬件项目平台,该平台包括一块具备简单I/O功能的电路板以及一套程序开发环境软件。Arduino简化了单片机工作的流程,对AVR库进行了二次编译封装,把端口都打包好,寄存器、地址指针之类的基本不用管,大大降低了软件开发难度,适宜非专业爱好者使用,特别适合学生和一些业余爱好者使用。本文后续内容均在Arduino UNO板上编程。图7-1Arduino UNO R3的开发板......
2023-06-26
下面对常用的DAQmx节点进行介绍。
1.DAQmx创建虚拟通道
NI-DAQmx创建虚拟通道函数创建了一个虚拟通道并且将它添加成一个任务。它也可以用来创建多个虚拟通道并将它们都添加至一个任务。如果没有指定一个任务,那么这个函数将创建一个任务。NI-DAQmx创建虚拟通道函数有许多的实例。这些实例对应于特定的虚拟通道所实现的测量或生成类型。节点的图标及端口定义如图10-18所示。图10-19是4个不同的NI-DAQmx创建虚拟通道VI实例的例程。
图10-18 “DAQmx创建虚拟通道”节点图标及端口定义
图10-19 DAQmx创建的不同类型的虚拟通道
NI-DAQmx创建虚拟通道函数的输入随每个函数实例的不同而不同,但是,某些输入对大部分函数的实例是相同的。例如一个输入需要用来指定虚拟通道将使用的物理通道(模拟输入和模拟输出)、线数(数字)或计数器。此外,模拟输入、模拟输出和计数器操作使用最小值和最大值输入来配置和优化基于信号最小和最大预估值的测量和生成。而且,一个自定义的刻度可以用于许多虚拟通道类型。在图10-20所示的LabVIEW程序框图中,NI-DAQmx创建虚拟通道VI用来创建一个热电偶虚拟通道。
2.DAQmx清除任务
NI-DAQmx清除任务函数可以清除特定的任务。如果任务现在正在运行,那么这个函数首先中止任务然后释放掉它所有的资源。一旦一个任务被清除,那么它就不能被使用,除非重新创建它。因此,如果一个任务还会使用,那么NI-DAQmx结束任务函数就必须用来中止任务,而不是清除它。DAQmx清除任务的节点的图标及端口定义如图10-21所示。
图10-20 利用创建虚拟通道VI创建热电偶虚拟通道
图10-21 DAQmx清除任务的节点图标及端口定义
对于连续的操作,NI-DAQmx清除任务函数必须用来结束真实的采集或生成。在图10-22所示的LabVIEW程序框图中,一个二进制数组不断输出直至等待循环退出和NI-DAQmx清除任务VI执行。
图10-22 DAQmx Clear Task应用实例
3.DAQmx读取
NI-DAQmx读取函数需要从特定的采集任务中读取采样。这个函数的不同实例允许选择采集的类型(模拟、数字或计数器)、虚拟通道数、采样数和数据类型。其节点的图标及端口定义如图10-23所示。图10-24是四个不同的NI-DAQmx读取VI实例的例程。
图10-23 DAQmx读取的节点图标及端口定义
图10-24 不同NI-DAQmx读取VI的实例
可以读取多个采样的NI-DAQmx读取函数的实例包括一个输入来指定在函数执行时读取数据的每通道采样数。对于有限采集,通过将每通道采样数指定为-1,这个函数就等待采集完所有请求的采样数,然后读取这些采样。对于连续采集,将每通道采样数指定为-1将使得这个函数在执行的时候读取所有现在保存在缓冲中可得的采样。在如图10-25所示的LabVIEW程序框图中,NI-DAQmx读取VI已经被配置成从多个模拟输入虚拟通道中读取多个采样并以波形的形式返回数据。而且,既然每通道采样数输入已经配置成常数10,那么每次VI执行的时候它就会从每一个虚拟通道中读取10个采样。
图10-25 从模拟通道读取多个采样值实例
4.DAQmx开始任务
NI-DAQmx开始任务函数显式地将一个任务转换到运行状态。在运行状态,这个任务完成特定的采集或生成。如果没有使用NI-DAQmx启动任务函数,那么在NI-DAQmx读取函数执行时,一个任务可以隐式地转换到运行状态,或者自动开始。这个隐式的转换也发生在如果NI-DAQmx开始任务函数未被使用而且NI-DAQmx写入函数与它相应指定的自启动输入一起执行。其节点的图标及端口定义如图10-26所示。
图10-26 DAQmx开始任务的节点图标及端口定义
虽然不是经常需要,但是使用NI-DAQmx启动任务函数来显式地启动一个与硬件定时相关的采集或生成任务是更值得选择的。而且,如果NI-DAQmx读取函数或NI-DAQmx写入函数将会执行多次,例如在循环中,NI-DAQmx启动任务函数就应当使用。否则,任务的性能将会降低,因为它将会重复地启动和停止。图10-27所示的LabVIEW程序框图演示了不需要使用NI-DAQmx启动函数的情形,因为模拟输出生成仅仅包含一个单一的、软件定时的采样。
图10-28所示的LabVIEW程序框图演示了应当使用NI-DAQmx启动函数的情形,因为NI-DAQmx读取函数需要执行多次来从计数器读取数据。
图10-27 模拟输出一个单一的采样
图10-28 多次读取计数器数据实例
5.DAQmx停止任务
停止任务。任务经过该节点后将进入DAQmx Start TaskVI节点之前的状态。
如果不使用DAQmx开始任务和DAQmx停止任务,而只是多次使用DAQmx读取或DAQmx写入,例如在一个循环里,这将会严重降低应用程序的性能。其节点的图标及端口定义如图10-29所示。
图10-29 DAQmx停止任务的节点图标及端口定义
6.DAQmx定时
NI-DAQmx定时函数配置定时以用于硬件定时的数据采集操作。这包括指定操作是否连续或有限、为有限的操作选择用于采集或生成的采样数量,以及在需要时创建一个缓冲区。其节点的图标及端口定义如图10-30所示。
图10-30 DAQmx定时的节点图标和端口定义
对于需要采样定时的操作(模拟输入、模拟输出和计数器),NI-DAQmx定时函数中的采样时钟实例设置了采样时钟的源(可以是一个内部或外部的源)和它的速率。采样时钟控制了采集或生成采样的速率。每一个时钟脉冲为每一个包含在任务中的虚拟通道初始化一个采样的采集或生成。图10-31中,LabVIEW程序框图演示了使用NI-DAQmx定时VI中的采样时钟实例来配置一个连续的模拟输出生成(利用一个内部的采样时钟)。
(www.chuimin.cn)
图10-31 DAQmxTiming应用实例之一
为了在数据采集应用程序中实现同步,如同触发信号必须在一个单一设备的不同功能区域或多个设备之间传递一样,定时信号也必须以同样的方式传递。NI-DAQmx也是自动地实现这个传递。所有有效的定时信号都可以作为NI-DAQmx定时函数的源输入。例如,在如图10-32所示的DAQmx定时VI中,设备的模拟输出采样时钟信号作为同一个设备模拟输入通道的采样时钟源,而无需完成任何显式的传递。
图10-32 模拟输出时钟作为模拟输入时钟源
大部分计数器操作不需要采样定时,因为被测量的信号提供了定时。NI-DAQmx定时函数的隐式实例应当用于这些应用程序。例如,在如图10-33所示的DAQmx定时VI中,设备的模拟输出采样时钟信号作为同一个设备模拟输入通道的采样时钟源,而无需完成任何显式的传递。
图10-33 DAQmxTiming应用实例之二
某些数据采集设备支持将握手作为它们数字I/O操作的定时信号的方式。握手使用与外部设备之间请求和确认定时信号的交换来传输每一个采样。NI-DAQmx定时函数的握手实例为数字I/O操作配置握手定时。
7.DAQmx触发
NI-DAQmx触发函数配置一个触发器来完成一个特定的动作。最为常用的动作是一个启动触发器(Start Trigger)和一个参考触发器(Reference Trigger)。启动触发器初始化一个采集或生成。参考触发器确定所采集的采样集中的位置,在那里前触发器数据(pre trigger)结束,而后触发器(post trigger)数据开始。这些触发器都可以配置成发生在数字边沿、模拟边沿或者当模拟信号进入或离开窗口。在下面的LabVIEW程序框图中,利用NI-DAQmx触发VI,启动触发器和参考触发器都配置成发生在一个模拟输入操作的数字边沿。其节点的图标及端口定义如图10-34所示。
图10-34 DAQmx触发的节点图标和端口类型
在图10-35所示的LabVIEW程序框图中,利用NI-DAQmx触发VI,启动触发器和参考触发器都配置成发生在一个模拟输入操作的数字边沿。
图10-35 DAQmx Trigger应用实例
许多数据采集应用程序需要一个单一设备不同功能区域的同步(例如,模拟输出和计数器)。其他的则需要多个设备进行同步。为了达到这种同步性,触发信号必须在一个单一设备的不同功能区域和多个设备之间传递。NI-DAQmx自动地完成了这种传递。当使用NI-DAQmx触发函数时,所有有效的触发信号都可以作为函数的源输入。例如,在图10-36所示的NI-DAQmx触发VI中,用于设备2的启动触发器信号可以用作设备1的启动触发器的源,而无需进行任何显式的传递。
图10-36 用设备2的触发信号触发设备1
8.DAQmx结束前等待
NI-DAQmx结束前等待,函数在结束之前等待数据采集操作的完成。这个函数应当用于保证在任务结束之前完成了特定的采集或生成。最为普遍的是,NI-DAQmx等待直至完成函数用于有限操作。一旦这个函数完成了执行,有限采集或生成就完成了,而且无需中断操作就可以结束任务。此外,超时输入允许指定一个最大的等待时间。如果采集或生成不能在这段时间内完成,那么这个函数将退出而且会生成一个合适的错误信号。其节点的图标及端口定义如图10-37所示。图10-38所示LabVIEW程序框图中的NI-DAQmx等待直至完成VI用来验证有限模拟输出操作在任务清除之前就已经完成。
图10-37 DAQmx结束前等待函数的节点图标和端口类型
9.DAQmx写入
NI-DAQmx写入函数将采样写入指定的生成任务中。这个函数的不同实例允许选择生成类型(模拟或数字),虚拟通道数、采样数和数据类型。其节点的图标及端口定义如图10-39所示。图10-40所示是4个不同的NI-DAQmx写入VI实例的例程。
图10-38 Wait Until Done节点应用实例
图10-39 DAQmx写入函数的节点图标及端口定义
图10-40 不同NI-DAQmx写入VI的实例
每一个NI-DAQmx写入函数实例都有一个自启动输入来确定,如果还没有显式地启动,那么这个函数是否将隐式地启动任务。正如我们刚才在本文NI-DAQmx启动任务部分所讨论的那样,NI-DAQmx启动任务函数应当用来显式地启动一个使用硬件定时的生成任务。它也应当用来最大化性能,如果NI-DAQmx写入函数将会多次执行。对于一个有限的模拟输出生成,图10-41所示的LabVIEW程序框图包括一个NI-DAQmx写入VI的自启动输入值为“假”的布尔值,因为生成任务是硬件定时的。NI-DAQmx写入VI已经被配置将一个通道模拟输出数据的多个采样以一个模拟波形的形式写入任务中。
图10-41 DAQmx Write应用实例
10.DAQmx属性节点
NI-DAQmx属性节点提供了对所有与数据采集操作相关属性的访问,如图10-42所示。这些属性可以通过写入NI-DAQmx属性节点来设置,而且当前的属性值可以从NI-DAQmx属性节点中读取。而且,在LabVIEW中,一个NI-DAQmx属性节点可以用来写入多个属性或读取多个属性。例如,图10-43所示的LabVIEW NI-DAQmx定时属性节点设置了采样时钟的源,然后读取采样时钟的源,最后设置采样时钟的有效边沿。
图10-42 DAQmx的属性节点
图10-43 DAQmx Timing属性节点使用
许多属性可以使用前面讨论的NI-DAQmx函数来设置。例如,采样时钟源和采样时钟有效边沿属性可以使用NI-DAQmx定时函数来设置。然而,一些相对不常用的属性只可以通过NI-DAQmx属性节点来访问。在图10-44所示的LabVIEW程序框图中,一个NI-DAQmx通道属性节点用来使能硬件低通滤波器,然后设置滤波器的截止频率来用于应变测量。
图10-44 DAQmx属性节点的使用实例
11.DAQ助手
DAQ助手是一个图形化的界面,用于交互式地创建、编辑和运行NI-DAQmx虚拟通道和任务。一个NI-DAQmx虚拟通道包括一个DAQ设备上的物理通道和对这个物理通道的配置信息,例如输入范围和自定义缩放比例。一个NI-DAQmx任务是虚拟通道、定时和触发信息、以及其他与采集或生成相关属性的组合。DAQ ASSISTANT配置完成一个应变测量。其节点图标如图10-45所示。
图10-45 未配置前的DAQ助手图标
有关LabVIEW 2012中文版虚拟仪器从入门到精通的文章
Arduino是源自意大利的一个开放源代码的硬件项目平台,该平台包括一块具备简单I/O功能的电路板以及一套程序开发环境软件。Arduino简化了单片机工作的流程,对AVR库进行了二次编译封装,把端口都打包好,寄存器、地址指针之类的基本不用管,大大降低了软件开发难度,适宜非专业爱好者使用,特别适合学生和一些业余爱好者使用。本文后续内容均在Arduino UNO板上编程。图7-1Arduino UNO R3的开发板......
2023-06-26
当波特率为38400bit/s时,Modbus通信协议推荐此时1个字符时间为500μs,即定时器定时时间为250μs。在接收该帧的过程中,一旦出现时序不对,则将帧标志FLAG置成55H,表明当前存在的帧为无效帧。图3-18 Modbus数据串行口接收中断服务程序结构框图......
2023-11-20
变量可以灵活变化加工过程轨迹,用变量编程称为宏编程,用变量编制的程序称为宏程序。在宏编程中虽然子程序对编制相同加工操作的程序非常有用,但由于用户宏程序允许使用变量算术和逻辑运算及条件转移,使得编制相同加工操作的程序更加方便,可将相同加工操作编为通用程序。表6-1 变量与引数赋值的对应方法之一表6-2 变量与引数赋值的对应方法之二宏程序调用及赋值 宏程序调用及赋值,见图6-7。......
2023-06-25
图11-41 新建工程界面2.模块FB的声明为了编写程序,需要在模块FB声明窗口中对模块FB进行声明。单击该按钮后会显示模块型号选择列表,从列表内选择“QX40”模块,如图11-43所示。按照先前的方法定义两个常量,分别是“40”和“55”,定义一个变量“TIC001.SV”,随后根据图示使用连线工具进行连接。图11-60 定义注释5.程序编译1)单击工具栏的图标,也可以通过点击菜单的“Convert(转换)”→“Cold-start Compile”执行操作,如图11-61所示。......
2023-06-16
与普通神经元节点比较,Host-Bost结构节点增加了一个主处理器8515,进行数据采集和处理的应用电路接到主处理器8515的端口上,而不是直接接到神经元芯片的I/O端口上。8515与神经元芯片之间通过单字节FIFO的并行接口进行数据交换。以下简称8515为A机,Neuron芯片为B机。为了让8515CPU与Neuron芯片尽量同步开始工作,设计时把Neuron芯片的复位输出经74HC04取反后接到8515CPU的复位引脚上。......
2023-11-22
图8.2-4 程序一览表显示图8.2-5 下一程序段显示3.程序检查当CNC处于自动运行时,通过MDI面板的功能键及软功能键〖程序〗,可选择程序显示页面。图8.2-7 8.4in LCD的当前程序段显示图8.2-8 G代码指令提示显示图8.2-9 G代码指令输入显示对话编程生成的程序同样可以利用程序编辑功能,进行修改、替换、删除、复制等操作,有关对话编程的更多内容,可以参见第6章、6.1节。......
2023-06-25
程序中第3行定义了宏:#defineTEST,第16行语句是条件编译指令,用于判断程序中是否定义过宏名TEST。注意,#ifndef后面的标识符部分不需要圆括号,仅需用空格和#ifdef分开即可。通过比较发现,#ifndef编译预处理的含义与#ifdef刚好相反。......
2023-11-20
下面开始对PLC进行编程。单击图4-6左下角的“Portal视图”,返回到Portal视图,单击左侧的“PLC编程”项,可以看到选中“显示所有对象”时,右侧显示了当前所选择PLC中的所有块,双击“main”块,打开程序块编辑界面,如图4-7所示。也可以在项目树下直接双击打开PLC设备下程序块里的“main”程序块。......
2023-06-15
相关推荐