ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:366.56KB ,
资源ID:25638866      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25638866.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第八章 数字io.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第八章 数字io.docx

1、第八章 数字io第七章数字I/O DI/O的基本知识一般数据采集卡上都有DI/O功能,用来实现数据采集的触发、控制及计数等功能。DI/O 按TTL逻辑电平设计,其逻辑低电平在0到0.7V之间,高电平在3.4到5.0V之间。 数采板上多路(Line)数字 I/O 组成一组后被称为端口(Port)。一个端口由多少路数字 I/O 组成是依据其数采板而定的,在大多数情况下4或8路数字 I/O 组成一个端口。当读写端口时,你可以在同一时刻设置或获取多路DI/O的状态。MIO E 系列板卡有路数字 I/O组成了一个端口,实际使用时这路可以部分是输入,部分是输出。数字量输入输出的应用分为以下两类:立即型(非

2、锁存型)和定时型(锁存型)。在立即型情况下,当你调用数字 I/O函数后立即更新或读取数字量某一路或端口的状态。在定时型情况下,你可以使用外部信号来控制数字量数据的传输。LabVIEW 中关于DI/O的VI也分为低、中、高三个等级。在以下几个不同的子模板中:Data Acquisition Digital I/O, 顶层 用于较简单应用中的Easy I/O VI。第二部分将讨论如何使用这些VI。LabVIEW基础教程中也将会详细讲述这些 VI。Data Acquisition Digital I/O, 底层 是一些属于中级水平应用的VI,主要用于需要时间或握手线方面的数字信号应用。这些VI可用于

3、单字节数据的传输。第三部分将详细讨论关于这方面数字量信号的操作。图5-2 显示的是Data Acquisition Digital I/O 子模板。Data Acquisition Digital I/O Advanced Digital I/O 高级水平DI/O VI 可用于作为创建其他数字VI的基本模块。这些高级数字量VI可用于立即型DI/O和定时型DI/O 。图5-3显示的是 Data Acquisition Digital I/O Advanced Digital I/O 子模板。图 5-2. Data Acquisition DI/O 子模板图 5-3. Data Acquisiti

4、on Digital I/O Advanced Digital I/O 子模板 立即型 DI/O 立即型DI/O 是最简单而且也是较经常使用的关于数字量方面的应用。它也叫非锁存型的DI/O,所有带有 DI/O 接口的数采板都支持这种DI/O 模式。在这种模式下,当LabVIEW 调用函数后即可立即设置或获取某路DI/O的状态。当某路DI/O被设定为某一状态后,那么该路DI/O 将一直保持这种状态直到其状态被重新设定为止。你可以通过软件改变某路DI/O 是输入或是输出方式。下面将讨论LabVIEW DAQ VI中的立即型 DI/O。Easy I/O VI 使用Easy I/O digital V

5、I 你可以立刻输入或输出某一路(某一端口)的数字量。当你设置DI/O VI iteration端为缺省参数时,每当你调用一次DI/O 函数时系统将会按需要自动设置一次数采板。当你在一个循环中重复调用某个DI/O 函数时,为了避免系统重复设置数采板,你可以设置DI/O VI iteration 端为正数。这些VI 可用于所有带有数字量输入输出的NI数采板。Write to Digital Line 设置某一端口中某一路 DI/O为逻辑高或者逻辑低状态 Device 是数采板的设备号(device number);Port number 是该路DI/O 所在的端口号;Line 准备要写的该路DI/

6、O 的通道号;Line state 是指准备要写的该路DI/O 的状态:高(true) 或低(false)。图5-4. Write to Digital LineRead from Digital Line 读取某路 DI/O 的状态。Device 是数采板的设备号(device number);Port number 是该路DI/O 所在的端口号;Line 准备要读取的该路DI/O 的通道号;Linestate 返回要读取的该路DI/O 的状态:高(true) 或低(false)。图 5-5. Read From Digital LineWrite to Digital Port 向某一指定

7、的端口写一数字量,从而同时设定某一端口所有路DI/O通道的状态。Device 是数采板的设备号(device number);Port number 是准备要写的端口号;Pattern 是该端口要写的二进制或等同的十进制数字量。图 5-6. Write to Digital PortRead from Digital Port 读取某一指定端口所有路的DI/O 通道的状态。Device 是数采板的设备号(device number);Port number 是准备要读取的端口号;Pattern 是返回从该端口读取的数字量(十进制形式)。图 5-7. Read From Digital Port

8、 如果在调用Easy I/O digital VI 时发生错误,系统将会弹出一对话框显示出错代码,这时你可以终止或继续执行VI。注意:当你只调用一个Easy I/O digital VI实例读或写某个通道或端口时,程序是不会出错的。但是当再次调用函数时会通过改变移位寄存器的状态来重新改变DI/O的设置,故你不能调用多个VI实例来控制多个端口。在这种情况下你可以通过使用下面将讨论的高级VI来达到该目的。高级 VI (Advanced Vis) 使用高级 DI/O VI 也可以执行立即型 DI/O。(实际上,Easy I/O VI 是由多个高级VI所组成的)。使用高级 VI你可以更高效的执行数字I

9、/O的读写工作,因为当你调用高级VI 时,它不会象使用Easy I/O VI 那样每次运行时都需要去改变数采板的设置。高级VI允许你使用通道屏蔽技术更新某一端口中数个DI/O通道,而无须更新整个端口。根据高级VI提供的错误信息你可以用来开发出自己错误处理程序。这些高级VI 可用于所有带有数字量输入输出的NI 数采板。DIO Port Config 设置某个端口为写或读状态。Device 和 port number设置板卡的设备号与端口号;Line direction map 设置端口为输入或输出状态;除了 TIO-10 与 MIO E 系列板卡外,其余板卡同一端口中所有各路DI/O必须是同向的

10、,即:同是输入或者同是输出。task ID out 的输出将用于下一VI函数做为创建了一任务的唯一标识。图5-8. DIO Port Config VDIO Port Write 根据已创建任务的标识taskID立即更新端口的DI/O通道状态。pattern 输入的是一十进制数,当其换算为二进制时代表的是要更新的各路DI/O通道的状态。举个例子来说:若设pattern为1(二进制0001)那么将仅只设通道0为高电位,若设pattern为15(二进制1111)那将设通道0,1,2,3为高电位。图 5-9. DIO Port Write VI使用line mask 输入, 你可以仅只改变你指定的D

11、 /IO通道状态。line mask 输入的是一十进制数字,该数字的值决定了那一个DI/O通道的状态被更新。举个例子来说:若line mask设为1(二进制0001)那么只有通道0被更新,若line mask设为15(二进制1111)那么通道0,1,2,3状态将被更新。未被包含在line mask中的通道其状态将不会被改变。图5-10 显示的两个例子就是使用line mask来控制端口中那路DI/O通道状态会被更新。你可以使用Scale By Power of 2 函数来选择单路通道或输入一十进制数直接选择多路通道。在图5-10a中,pattern值设为8(二进制1000)时,通道3将会被更新

12、。在图5-10b中,pattern值设为6(二进制0110)时,通道1,2将会被更新。假如你已设定该端口为输入状态,那么error out 将会返回一个错误代码。图 5-10. 利用通道屏蔽技术来更新一个或多个通道的状态DIO Port Read 根据已创建任务的标识taskID来获得端口的DI/O通道状态。pattern 返回的是一十进制数,当其换算为二进制时代表的是各路DI/O通道的状态。使用通道屏蔽技术你可以返回指定的通道状态,未被包含在line mask中的通道其状态将在pattern的返回值中被设为逻辑低(也就是0)。图 5-11. DIO Port Read VI立即型DI/O 的

13、应用 立即型DI/O主要应用于:控制或监测继电器,作为计数器Gate口的输入或者用于其他TTL设备。例如可用立即型DI/O控制National Instruments SC-2062, SCXI-1160和SCXI-1161继电器开关。例1监测开关状态 本例演示如何使用Easy I/O VI Read from Digital Line 来监测一外部开关的状态,关闭该开关后即初始化LabVIEW测试程序。其硬件配置如图5-12所示。图5-12. 使用DI/O监测开关的状态在如图5-13所示的程序框图中,Read from Digital Line连续不停的读取端口0的第0路通道的状态直到该通道

14、状态为TTL逻辑低(当开关关闭时),该VI退出While循环,然后运行下一测试子VI。Read from Digital Line设置端口为输入状态。图5-13. 监测开关状态程序框图例 2继电器控制阀门 假如你想通过调节阀门来控制流入某个罐子中水的流量:当罐中液位低于某个位置时,你想要打开阀门让水流入;当罐中液位高于某个位置时,你想要关闭阀门。通常情况下阀门是关闭的,所以你必须通过提供外部电力(如:120VAC)来打开阀门。图5-14显示了如何使用SCXI-1161继电器模块来控制这样一个系统。SCXI-1161有8个继电器(图5-14仅显示了一个),每个继电器有一COM位置,一NC位置和一

15、NO位置。当通电完成后或处于歇息状态时,SCXI-1161即从COM位置连接到NC位置。图 5-14. SCXI-1161控制阀门在本例中,数采板上的某路数字量 I/O被设为输出模式后与继电器0相连。当向该路DI/O写1时,与之相连的继电器会切换到NO位置即连通电路从而打开阀门。下面图5-15所示的LabVIEW程序框图就是用高级DI/O VI来控制该系统的。首先把SCXI-1161模块的端口0设为输出状态;用Scale By Power Of 2函数创建一通道屏蔽仅控制通道0;Get Tank Level 子VI返回罐子的液位。当液位低于设定的最低液位(LowLevel)时,程序即会向控制继

16、电器的DI/O通道写入1从而打开阀门让水流入。与之相似,当罐子的液位高于设定的最高液位(HighLevel)时,程序即会向控制继电器的DI/O通道写入0从而关闭阀门停止水的流入。图5-15. 阀门控制的程序框图 继电器接触保护 我们经常连接电动机,阀门,螺线管以及白炽灯这些具有感应性质的负载到继电器上,当继电器切换状态时就会产生巨大的反方向感生电动势。因为这些感应负载存储了大量的能量,所以常常在这种情况下会毁坏继电器或者缩短其寿命。最好的方法就是使用一接触保护电路来限制在这种情况附加的感生电动势。你可以设置保护电路直接通过负载(在小型直流情况应用时,你可以把保护电路直接安装通过继电器接触段)。

17、假如你直接使用继电器,开启计算机时数采板会设置DI/O 线的输入为高阻抗,你需要在DI/O线上连接一电阻并在设置DI/O为输出模式前将其设为一已知的状态。练习 5-1目标:使用一路DI/O 完成一立即型数字量输出建立一VI可通过前面板的开关可控制试验盒上边PA组的LED灯的状态。当你开启开关时LED灯亮,关闭开关时LED灯灭。请使用Data Acquisition Digital I/O Advanced Digital I/O 模板中的DIO Port Config 与DIO Port Write VI(请不要改变该端口其他各路DI/O的状态)。你可以使用Switch LED VI作为开始。

18、下图显示了试验盒上边PA组的LED灯与DAQ板端口0第0路DI/O的连接。提示:确保DIO Port Config VI 的 line direction map 的输入端是-1,从而设置端口为输出模式。请记住DAQ信号附件使用的是负逻辑:当你写假(逻辑低)时LED则亮。且请使用通道屏蔽技术来更新0路DI/O。练习 5-1 结束练习 5-2目标:在数字端口上执行立即型数字量输出写一个VI可随机产生一个1到4的整数,通过DAQ信号附件端口0上的LED灯的状态来指示产生的是那一个随机数。假如是1,则左边的LED会亮而其他的灯全灭;假如是2则最左边的第二个灯会亮,依次类推。使用Data Acquis

19、ition Digital I/O Advanced Digital I/O模板中的DIO Port Config 和DIO Port Write VI。请使用Digital Random Number VI开始。练习 5-2结束 定时型DI/O定时型 DI/O也叫做锁存型 I/O是第二种类型的数字量通信,它用来使用外部信号控制或作为握手信号的数据传输。握手信号确保了在你初始化操作之前数采板或仪器已准备好了传输数据。表5-2显示的是数采板能有的锁存型 DI/O端口的数目。对于某些数采板,具备锁存功能的端口数目小于实际数采板上端口的总数目,这是因为这些数采板使用的是Intel8255A PPI芯

20、片来控制数字线的。每个芯片是由3个8位的端口组成,当芯片上一个或多个端口设置为锁存型DI/O时,这些端口中的某个端口上的几路DI/O是保留用来作为控制握手信号的。所以一个芯片上最多有两个端口被用做锁存型数字端口。表 5-2. DAQ 板上能有的锁存型DI/O 端口的数目DI/O-32 型数采板有4个8路DI/O端口。所有这些端口都可用做锁存型DI/O。另外,这种类型数采板有另一定时型DI/O功能即信号产生,是用一时钟产生握手信号来初始化数据传输。这就意味着你可以以一定的频率输出或接受数字量数据。这种方法在你的仪器或外部硬件不支持握手信号而你又想定时数据传输时是非常有用的。定时型 DI/O VI

21、下面是使用握手线时传输数字量数据的高级VI:Digital Group Config 设置使用的device 和 端口。 你设置 port list 组成了一组端口。task ID out 用来作为识别任务的标号。group 输入是指已有一组端口,那么新设置将会替代已有的的设置。group direction 输入端指定了组中的端口的方向。当该组支持握手线时 handshaking返回值为1 ,否则为0。Figure 5-16. Digital Group Config VIDigital Single Write 根据task ID 任务标识执行数字量的输出。opcode设定指定传输是否使用

22、握手线。Pattern list是一准备被输出的一维数组。time limit设置决定传输时所分配的最大的时间。假如数据传输未在一定的时间内完成,函数将返回一个警告信息。patterns written输出将返回更新组(Group)后的组数。假如组中包含两个端口且pattern list有5个待输出的信号元素(即2.5个组信号),那么仅只有前四个信号元素被输出且patterns written的返回值为2。Figure 5-17. Digital Single Write VIDigital Single Read 根据task ID 任务标识执行组内端口的数字量读取。Opcode输入端确定数

23、据传输是否使用握手线。Number to read确定是那一组输入被执行。time limit设置决定传输时所分配的最大的时间。假如数据传输未在一定的时间内完成,函数将返回一个警告信息。Pattern list返回的是读取回的一维数组。patterns read输出将返回读取组(Group)后的组数。Figure 5-18. Digital Single Read VIDIO Single Read/Write, 一中级VI你可以在Data Acquisition Digital I/O模板中找到该VI,它是在我们上面讨论道的高级VI的基础上作出来的。请记住:当你在循环中使用DI/O时,最好使

24、用高级VI以免象DIO Single Read/WriteVI这样在循环中重复设置配置。Figure 5-19. DIO Single Read/Write VIDigital Single Read 与 Digital Single Write VI的执行是同步的;当它们被调用后直到完成期间,其他LabVIEW过程是不会被执行的。这种方式对于短急信息的传输来说是非常有效的,但是当你想传输长数据流时就有可能长时间的占用计算机的资源。在这种情况下你就可以使用下面将讲到的缓冲 DI/O。例子 - PC-PC 数据传输 你可以用有定时型DI/O的数采板来完成通信应用,例如 PC-to-PC的数据传输

25、。图5-20显示了使用两台都装有DIO-32F数采板的计算机来完成PC-to-PC的数据传输。在这个例子中REQ 与ACK线分别用于输入与输出的握手线信号。当软件调用操作且在REQ线上接受到信号后,数采板就会执行一次数据传输。当执行完传输后数采板会在ACK线上发出一个脉冲。这样就可以保证数采板间数据传输的同步性。Figure 5-20. DIO-32F 用于PC到PC 的数据传输LabVIEW 框图输出数采板输入数采板 缓冲型 DI/O VI 假如需要大数量的数据传输,你也许希望使用非同步中断驱动式传输。这样不至于在传输数据时占用计算机的资源。使用这种方式传输数据时,一计算机内存缓冲被分配为后

26、台线程输入或输出缓冲中。中级Data Acquisition Digital I/O的模板中包含了用于建立数字量信号发生的VI。表5-3中显示的是缓冲式数字IO程序设计的顺序,这些VI与第四课表4-1中的缓冲式模入和模出的程序设计顺序相类似。表5-3缓冲式数字IO程序设计的顺序DIO Config 设置的一组端口为输入或输出模式;创立数据缓冲,产生了任务唯一标识符,它将会被下面的DIO函数使用。DIO Start 启动缓冲式DIO操作。设定更新或读取的点数,当你输入0时将连续操作。指定握手信号源:内部时钟用于信号发生,IO连接端口,或RSTI连接端口。当执行信号发生时,你也可以输入握手线信号的

27、频率。DIO Read 返回从数字量缓冲中扫描的数据;返回缓冲中的数据剩余量;返回在一定时限中操作的初始化是否成功信息。DIO Write 用于输出操作中更新缓冲中的数据。当等侯的握手信号发生时,端口将被新的缓冲数据更新。假如在一定时限内握手信号没有出现,将返回一错误信息。DIO Wait 等待与任务标识符task ID.相关任务的数字量输入或输出操作的完成。DIO Clear s停止操作,同时清除与task ID任务相关的缓冲。注意:当你使用这些VI时,你的数采板必须支持握手信号。表5-2显示了NI公司生产的哪一些数采板支持握手信号。信号发生的功能只有AT-DIO-32F, PCI-DIO-

28、32HS,和AT-DIO-32HS型号的数采板具有下面的框图显示了使用缓冲式握手数字IO VI的工作。每一个用于该框图的数字量VI将在下面进行详细的讨论。DIO Config VI. 设置端口1端口1为一组输出组,同时为它们分配了数据缓冲。DIO Write VI.将一个一维整形量数组存于缓冲中。FOR循环使用自动索引输出方式创建了该数组。 DIO Start VI. 设置I/O接线端口为握手信号源,并启动输出操作。DIO Wait VI.等待缓冲式输出操作完成。DIO Clear VI.清除输出操作任务。第一课 计数器 Counter I/O 对于一个成熟的数据采集和控制系统来说,它有一种非

29、常重要的要求就是能操纵和协调多种不同时间参数和事件。这就需要某些硬件机构完成高精度的定时工作,那么这些机构中最基本的功能块就是计数器。如果给予计数器非常精确的时钟你就可以把它应用到非常广泛的定时和计数应用之中去。例如:检测和分析数字波形,产生复杂的方波。你可以在NI的某些系列的多功能数采板上找到应用计数器的例子,那就是AM9513A系统定时控制器。这个集成电路是由5个16位的计数器构成的,它们主要负责DAQ操作的定时工作,如多用途定时及计数器应用。尽管AM9513A是一多用途定时计数控制器,但它并不是专门为数据采集使用而专门设计的。因为AM9513A仅有5个计数器,假如你在运行某些同步操作时那

30、么这些计数器将不够用,举个例子来说AM9513A就没有足够的计数器来同时执行模拟输入、模拟输出和频率测量。正是AM9513A的局限性,所以NI公司专门研制了数据采集控制器(System Timing Controller (STC))用来控制E系列的多功能数采板的定时操作。DAQ-STC与现在其它公司生产的定时计数器相比,它具备有可扩展功能,低造价、低功耗的这些特点。这一块专用集成电路芯片总共有10个16位和24位20MHz的定时计数器。其中四个计数器用于控制模拟输入的定时操作,四个计数器用于模拟输出的定时操作;其它两个是留给用户使用的多用途,UP/DOWN,24位20MHz的定时计数器。对于

31、更高要求的定时计数操作,NI公司专门研发了NI-TIO 集成电路芯片用于6602和445X系列数采板。这些定时计数器芯片是与DAQ-STC相兼容的,同时又提供了其它的附加功能。每一个NI-TIO芯片有四个能用于80 MHz、20 MHz、100 kHz时基的32位计数器,每一个计数器都有能被外部或内部信号控制的GATE,UP/DOWN,SOURCE 输入口。如果使用预标定技术,NI-TIO能测量甚至频率高达125MHz的连续,高速,重复信号的周期或频率。因为直接低层编程使用定时计数器芯片是非常困难的,所以LabVIEW提供了一系列高级的定时/计数器库函数。在简化了定时/计数器使用的同时并没有牺

32、牲它们广泛的灵活性。在NI-DAQ6.5 有一个例程库,在该库中有每一种NI定时/计数器芯片的使用例子:8253.llb,Am9513.llb,DAQ-STC.llb以及NI-TIO.llb。下面将对计数器做一简单描述,接着将介绍 LabVIEW 中计数器 VI 以及使用计数器的例子。计数器信号计数器可以接收或输出TTL兼容信号,一个TTL高电位信号是被定义为其电位在2.0和5V之间的信号,TTL低电位是指其电位在0到0.8伏之间。一个能被计数器测得的信号,至少其特征不低于能被该计数器识别的最小的脉冲宽度,上伸时间、下降时间,请看图6-1。图6-1计数器信号的特性参数计数器操作 计数器是一能测量信号的变化过程或产生不同类型时间信号的设备。我们可以看一看如图6-2所示的计数器的简化模型:一个SOURCE输入口,一个GATE输入口, 一个 OU

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1