LabVIEW虚拟仪器数据采集与通信控制35例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

实例4 PCI-1710HG数据采集卡数字量输入

一、设计任务

采用LabVIEW语言编写程序实现PC与PCI-1710HG数据采集卡数字量输入。

任务要求如下:利用开关产生数字(开关)信号(0或1),使程序界面中信号指示灯颜色改变;利用开关产生数字(开关)信号,使程序界面中计数器文本中的数字从1开始累加。

二、线路连接

PC与PCI-1710HG数据采集卡组成的数字量输入线路如图3-13所示。

图3-13 PC与PCI-1710HG数据采集卡组成的数字量输入线路

图3-13中,由电气开关和光电接近开关(也可采用电感接近开关)分别控制两个电磁继电器,每个继电器都有2路常开和常闭开关,其中,2个继电器的一个常开开关KM11和KM21接指示灯,由电气开关控制的继电器的另一常开开关KM12接PCI-1710HG数据采集卡数字量输入0通道(56端口和48端口),由光电接近开关控制的继电器的另一常开开关KM22接数据采集卡数字量输入1通道(22端口和48端口)。

也可直接使用按钮、行程开关等的常开触点接数字量输入端口(56端口是DI0,22端口是DI1,48端口是DGND)。其他数字量输入通道信号输入接线方法与通道1相同。

实际测试中,可用导线将数字量输入端口(如56端口)与数字地(48端口)之间短接或断开产生开关量输入信号。

本设计用到的硬件包括PCI-1710HG数据采集卡,PCL-10168数据线缆,ADAM-3968接线端子(使用数字量输入DI通道),电气开关,光电接近开关(DC 24V),继电器(DC 24V),指示灯(DC 24V),直流电源(输出DC 24V)等。

三、任务实现

1.设计程序前面板

(1)为了显示数字量输入状态,添加1个指示灯控件:控件→新式→布尔→圆形指示灯,将标签改为“信号指示灯”。

(2)为了显示数字量输入次数,添加1个数值显示控件:控件→新式→数值→数值显示控件,将标签改为“开关计数器”。

(3)添加1个数值显示控件:控件→新式→数值→数值显示控件,将标签改为“中间变量”。

为保持界面整齐,将“中间变量”显示器隐藏:右键单击“中间变量”数字显示控件,选择高级→隐藏输入控件命令。

(4)为了关闭程序,添加1个停止按钮控件:控件→新式→布尔→停止按钮。

设计的程序前面板如图3-14所示。

图3-14 程序前面板

2.框图程序设计

在进行LabVIEW编程之前,必须首先安装研华设备管理程序(Device Manager)、32bit DLL驱动程序及研华板卡LabVIEW驱动程序。

(1)添加选择设备函数:函数→用户库→Advantech DA&C(研华公司的LabVIEW函数库)→EASYIO→SelectPOP→SelectDevicePop.vi,如图3-15所示。

图3-15 SelectPop函数库

(2)添加打开设备函数:函数→用户库→Advantech DA&C→ADVANCE→DeviceManager→DeviceOpen.vi,如图3-16所示。

(3)添加关闭设备函数:函数→用户库→Advantech DA&C→ADVANCE→DeviceManager→DeviceClose.vi,如图3-16所示。

(4)添加1个While循环结构:函数→编程→结构→While 循环。

以下添加的函数或结构放置在While循环结构框架中。

(5)添加两个读端口位函数:函数→用户库→Advantech DA&C→ADVANCE→SlowDIO→DIOReadBit.vi,如图3-17所示。

图3-16 DeviceManager函数库

图3-17 SlowDIO函数库

(6)添加6个数值常量:函数→编程→数值→数值常量,值分别为设备号0、通道号0、设备号0、通道号1、比较量1、时钟周期200。

(7)添加两个“不等于0?”函数:函数→编程→比较→“不等于0?”。

(8)添加两个等于函数:函数→编程→比较→“等于?”。

(9)添加1个与函数:函数→编程→布尔→与。

(10)添加1个假常量:函数→编程→布尔→假常量。

(11)添加1个时钟函数:函数→编程→定时→等待下一个整数倍毫秒。

(12)添加1个非函数:函数→编程→布尔→非。

(13)添加两个条件结构:函数→编程→结构→条件结构。

(14)添加3个局部变量:函数→编程→结构→局部变量。

选择局部变量,单击鼠标右键,在弹出菜单的选项下,为局部变量选择控件,分别为:中间变量、中间变量和开关计数器,其中一个局部变量“中间变量”放入循环结构中,另一个局部变量“中间变量”放入条件结构2的真(True)选项中;局部变量“开关计数器”放入条件结构2的真(True)选项中。

(15)添加3个数值常量:函数→编程→数值→数值常量,值分别为1、1、2,其中一个常数1放入条件结构1的假(False)选项中,另一个常数1放入条件结构2的真(True)选项中,常数2放入条件结构2的真(True)选项中。

(16)添加1个加号函数:函数→编程→数值→加,并放入条件结构2的真(True)选项中。

(17)分别将指示灯控件(标签为“信号指示灯”)、停止按钮控件等从外拖入循环结构框架中;将数值显示控件(标签为“中间变量”)放入条件结构1的假(False)选项中;将数值显示控件(标签为“开关计数器”)放入条件结构2的真(True)选项中。

(18)将函数SelectDevicePop.vi的输出端口“DevNum”与函数DeviceOpen.vi的输入端口“DevNum”相连。

(19)将函数DeviceOpen.vi的输出端口“DevHandle”与DIOReadBit.vi函数1的输入端口“DevHandle”相连。

将函数 DeviceOpen.vi 的输出端口“DevHandle”与 DIOReadBit.vi 函数2的输入端口“DevHandle”相连。

(20)将数值常量(值为0,设备号)与DIOReadBit.vi函数1的输入端口“Port”(设备号)相连。

将数值常量(值为0,通道号)与DIOReadBit.vi函数1的输入端口“BitPos”(DI通道号)相连。

(21)将数值常量(值为0,设备号)与DIOReadBit.vi函数2的输入端口“Port”(设备号)相连。

将数值常量(值为1,通道号)与DIOReadBit.vi函数2的输入端口“BitPos”(DI通道号)相连。

(22)将DIOReadBit.vi函数1的输出端口DevHandle与DeviceClose.vi函数1的输入端口“DevHandle”相连。

将DIOReadBit.vi函数1的输出端口State与“不等于0?”函数1的输入端口“x”相连。

(23)将DIOReadBit.vi函数2的输出端口DevHandle与DeviceClose.vi函数2的输入端口“DevHandle”相连。

将DIOReadBit.vi函数2的输出端口State与“不等于0?”函数2的输入端口“x”相连。

(24)将“不等于0?”函数1的输出端口“x ! = 0”与指示灯控件(信号指示灯)相连。

(25)将“不等于0?”函数2的输出端口x ! = 0与“等于?”函数1的输入端口“x”相连。

(26)将假常量与“等于?”函数1的输入端口“y”相连。

(27)将“等于?”函数1的输出端口“x = y?”与条件结构1上的选择端口相连。

将“等于?”函数1的输出端口“x = y?”与And函数的输入端口“x”相连。

(28)在条件结构1的假(False)选项中,将数值常量(值为1)与数字显示控件(标签为“中间变量”)相连。

(29)将循环结构中的局部变量“中间变量”(读属性)与“等于?”函数2的输入端口“x”相连。

(30)将循环结构中的数值常量(值为1)与“等于?”函数2的输入端口“y”相连。

(31)将“等于?”函数2的输出端口“x = y?”与And函数的输入端口“y”相连。

(32)将与函数的输出端口“x .and.y?”与条件结构2上的选择端口相连。

(33)在条件结构2的真(True)选项中,将局部变量“开关计数器”与加号函数的输入端口“x”相连。

(34)在条件结构2的真(True)选项中,将数值常量(值为1)与加号函数的输入端口“y”相连。

(35)在条件结构2的真(True)选项中,将加号函数的输出端口“x+y”与数值显示控件(标签为“开关计数器”)相连。

(36)在条件结构2的真(True)选项中,将数值常量(值为2)与局部变量“中间变量”(写属性)相连。

(37)将数值常量(值为200,时钟周期)与等待下一个整数倍毫秒函数的输入端口“毫秒倍数”相连。

(38)将停止按钮控件(标签为“Stop”)与非函数的输入端口“x”相连。

(39)将非函数的输出端口“非x ?”与循环结构的条件端子相连。

设计的框图程序如图3-18所示。

图3-18 框图程序

3.运行程序

单击快捷工具栏“运行”按钮,运行程序。

运行“SelectDevicePop.vi”子程序,选择研华板卡设备PCI-1710HG。

打开/关闭数字量输入0通道“电气开关”,程序界面中信号指示灯亮/灭(颜色改变)。

打开/关闭数字量输入1通道“电气开关”,程序界面中开关计数器文本中的数字从1开始累加。

程序运行界面如图3-19所示。

图3-19 程序运行界面