实例6 PCI-1710HG数据采集卡温度测控
一、设计任务
采用LabVIEW语言编写应用程序实现PC与PCI-1710HG 数据采集卡温度测控。
任务要求如下:自动连续读取并显示温度测量值(十进制);显示测量温度实时变化曲线;统计采集的温度平均值、最大值与最小值;实现温度上、下限报警指示和控制,并能在程序运行中设置报警上、下限值。
二、线路连接
PC与PCI-1710HG数据采集卡组成的温度测控线路如图3-25所示。
图3-25 PC与PCI-1710HG数据采集卡组成的温度测控线路
图3-25中,温度传感器 Pt100热电阻检测温度变化,通过温度变送器(测量范围0~200℃)转换为4~20mA 电流信号,经过250Ω电阻转换为1~5V电压信号送入数据采集卡模拟量输入1通道(端口34是AI1,端口60是AIGND)。
当检测温度大于计算机设定的上限值,计算机输出控制信号,使数据采集卡数字量输出1通道13端口置高电平,晶体管V1导通,继电器KM1常开开关KM11闭合,指示灯L1亮。
当检测温度小于计算机程序设定的下限值,计算机输出控制信号,使数据采集卡数字量输出2通道46端口置高电平,晶体管V2导通,继电器KM2常开开关KM21闭合,指示灯L2亮。
当检测温度大于计算机程序设定的下限值并且小于计算机设定的上限值,计算机输出控制信号,使数据采集卡数字量输出1通道13端口置低电平,晶体管V1截止,继电器KM1常开开关KM11断开,指示灯L1灭,同时使数据采集卡数字量输出2通道46端口置低电平,晶体管V2截止,继电器KM2常开开关KM21断开,指示灯L2灭。
测试前需安装PCI-1710HG数据采集卡的驱动程序和设备管理程序。
三、任务实现
1.设计程序前面板
(1)为了以数字形式显示测量温度值,添加6个数字显示控件:控件→新式→数值→数值显示控件,标签分别为“当前值:”“测量个数:”“累加值:”“平均值:”“最大值:”“最小值:”。
(2)为了以指针形式显示测量温度值,添加1个实时图形显示控件:控件→新式→图形→波形图形,将Y轴标尺范围改为0.0~50.0。
(3)为了设置上下限温度值,添加两个数值输入控件:控件→新式→数值→数值输入控件,标签分别为“上限值:”和“下限值:”,将其值改为50和25,并设置为默认值。
(4)为了显示测量温度超限状态,添加两个指示灯控件:控件→新式→布尔→圆形指示灯,将标签分别改为“上限灯:”和“下限灯:”。
(5)为了关闭程序,添加1个停止按钮控件;控件→新式→布尔→停止按钮。
设计的程序前面板如图3-26所示。
图3-26 程序前面板
2.框图程序设计
(1)添加选择设备函数:函数→用户库→Advantech DA&C(研华公司的LabVIEW函数库)→EASYIO→SelectPOP→SelectDevicePop.vi。
(2)添加打开设备函数:函数→用户库→Advantech DA&C→ADVANCE→DeviceManager→DeviceOpen.vi。
(3)添加选择通道函数:函数→用户库→Advantech DA&C→EASYIO→SelectPOP→SelectChannelPop.vi。
(4)添加选择增益函数:函数→用户库→Advantech DA&C→EASYIO→SelectGainPop.vi。
(5)添加关闭设备函数:函数→用户库→ADVANCE→DeviceManager→DeviceClose.vi。
(6)添加按名称解除捆绑函数:函数→编程→簇→按名称解除捆绑。
(7)添加捆绑函数:函数→编程→簇→捆绑。
(8)添加模拟量配置函数:函数→用户库→Advantech DA&C→ADVANCE→SlowAI→AIConfig.vi,如图3-27所示。
图3-27 SlowAI函数库
(9)添加1个While循环结构:函数→编程→结构→While 循环。
以下添加的函数或结构放置在While循环结构框架中。
(10)添加1个时钟函数:函数→编程→定时→等待下一个整数倍毫秒。
(11)添加1个数值常量:函数→编程→数值→数值常量,值分别为500。
(12)添加1个非函数:函数→编程→布尔→非。
(13)添加1个顺序结构:函数→编程→结构→层叠式顺序结构。
将其帧(Frame)设置为2个(序号0~1)。设置方法:选中层叠式顺序结构上边框,单击鼠标右键,执行“在后面添加帧”命令1次。
(14)在顺序结构 Frame0中,添加模拟量电压输入函数:函数→用户库→Advantech DA&C→ADVANCE→SlowAI→AIVoltageIn.vi,如图3-27所示。
(15)在顺序结构 Frame0中,添加2个写端口位函数:函数→用户库→Advantech DA&C→ADVANCE→SlowSlowDIO→DIOWriteBit.vi。
(16)在顺序结构Frame0中,添加1个减号函数“-”:函数→编程→数值→减。
(17)在顺序结构Frame0中,添加1个乘号函数:函数→编程→数值→乘。
(18)在顺序结构Frame0中,添加1个比较符号函数“≥”:函数→编程→比较→“大于等于?”。
(19)在顺序结构Frame0中,添加1个比较符号函数“≤”:函数→编程→比较→“小于等于?”。
(20)在顺序结构Frame0中,添加6个数值常量:函数→编程→数值→数值常量,值分别为1、50、0、1、0、2。
(21)在顺序结构Frame0中,添加两个条件结构:函数→编程→结构→条件结构。
(22)添加4个“不等于0?”函数:函数→编程→比较→不等于0?,这4个比较函数分别放入两个条件结构的真(True)选项和假(False)选项中。
(23)在两个条件结构的真(True)选项和假(False)选项中添加8个数值常量:函数→编程→数值→数值常量,值分别为0、1。
(24)在两个条件结构的假(False)选项中添加两个局部变量:函数→编程→结构→局部变量。
选择局部变量,单击鼠标右键,在弹出菜单的选项下,为局部变量选择控件“上限灯:”和“下限灯:”,将其属性设置为“写”。
(25)分别将数值显示控件、波形图形控件、停止按钮控件从外拖入循环结构While 循环结构中。
(26)分别将指示灯控件“上限灯:”和“下限灯:”分别拖入两个条件结构的真(True)选项中。
(27)将函数SelectDevicePop.vi的输出端口“DevNum”与函数DeviceOpen.vi的输入端口“DevNum”相连。
(28)将函数DeviceOpen.vi的输出端口“DevHandle”与函数SelectChannelPop.vi的输入端口“DevHandle”相连。
(29)将函数SelectChannelPop.vi的输出端口“DevHandle”与函数AIConfig.vi的输入端口“DevHandle”相连。
将函数SelectChannelPop.vi的输出端口“Gain List”与函数SelectGainPop.vi的输入端口“Gain List”相连。
将函数SelectChannelPop.vi的输出端口“ChanInfo”与函数按名称解除捆绑的输入端口输入簇相连。
(30)将按名称解除捆绑函数的输出端口“通道”与捆绑函数的一个输入端口“簇元素”相连。
(31)将函数SelectGainPop.vi的输出端口“GainCode”与捆绑函数的一个输入端口“簇元素”相连。
(32)将捆绑函数的输出端口“输出簇”与函数AIConfig.vi的输入端口“Chan & Gain”相连。
(33)将函数 AIConfig.vi 的输出端口“DevHandle”与函数 AIVoltageIn.vi 的输入端口“DevHandle”相连。
(34)将函数AIVoltageIn.vi的输出端口“DevHandle”与函数DeviceClose.vi的输入端口“DevHandle”相连。
将函数AIVoltageIn.vi的输出端口“Voltage”与减函数的输入端口“x”相连。
(35)将数值常量(值为1)与减函数的输入端口“y”相连。
(36)将减函数的输出端口x-y与乘函数的输入端口“x”相连。
(37)将数值常量(值为50)与乘函数的输入端口“y”相连。
(38)将乘函数的输出端口“x*y”与数值显示控件相连。
将乘函数的输出端口“x*y”与波形显示控件相连。
将乘函数的输出端口“x*y”与“大于等于?”函数的输入端口“x”相连。
将乘函数的输出端口“x*y”与“小于等于?”函数的输入端口“x”相连。
(39)将数值常量(值为50,上限温度值)与“大于等于?”函数的输入端口“y”相连。
(40)将数值常量(值为25,下限温度值)与“小于等于?”函数的输入端口“y”相连。
(41)将“大于等于?”函数的输出端口“x >= y?”与条件结构(上)的选择端口相连。
(42)将“小于等于?”函数的输出端口“x <= y?”与条件结构(上)的选择端口相连。
(43)将数值常量(值为0,设备号)与函数DIOWriteBit.vi(上)的输入端口“Port”相连。
将数值常量(值为0,设备号)与函数DIOWriteBit.vi(下)的输入端口“Port”相连。
(44)将数值常量(值为1,DO通道号)与函数DIOWriteBit.vi(上)的输入端口“BitPos”相连。
将数值常量(值为2,DO通道号)与函数DIOWriteBit.vi(下)的输入端口BitPos相连。
(45)将函数DeviceOpen.vi的输出端口“DevHandle”与函数DIOWriteBit.vi(上)的输入端口“DevHandle”相连。
将函数DeviceOpen.vi的输出端口“DevHandle”与函数DIOWriteBit.vi(下)的输入端口“DevHandle”相连。
(46)将条件结构(上)的真(True)选项中的数值常量(值为1,状态位)与函数DIOWriteBit.vi(上)的输入端口“State”相连。
将条件结构(上)的假(False)选项中的数值常量(值为0,状态位)与函数DIOWriteBit.vi (上)的输入端口“State”相连。
(47)将条件结构(下)的真(True)选项中的数值常量(值为1,状态位)与函数DIOWriteBit.vi(下)的输入端口“State”相连。
将条件结构(下)的假(False)选项中的数值常量(值为0,状态位)与函数DIOWriteBit.vi (下)的输入端口“State”相连。
(48)在条件结构(上)的真(True)选项中,将数值常量(值为0)与“不等于0?”函数的输入端口“x”相连;将“不等于0?”函数的输出端口“x != 0?”与指示灯控件“上限灯:”相连。
在条件结构(上)的假(False)选项中,将数值常量(值为1)与“不等于0?”函数的输入端口“x”相连;将“不等于0?”函数的输出端口“x != 0?”与局部变量“上限灯:”相连。
(49)在条件结构(下)的真(True)选项中,将数值常量(值为0)与“不等于0?”函数的输入端口“x”相连;将“不等于0?”函数的输出端口“x != 0?”与指示灯控件“下限灯:”相连。
在条件结构(下)的假(False)选项中,将数值常量(值为1)与“不等于0?”函数的输入端口“x”相连;将“不等于0?”函数的输出端口“x != 0?”与局部变量“下限灯:”相连。
(50)将数值常量(值为500,采样频率)与等待下一个整数倍毫秒函数的输入端口“毫秒倍数”相连。
(51)将停止按钮控件与非函数的输入端口“x”相连。
(52)将非函数的输出端口“非 x ?”与循环结构的条件端子相连。
其他函数的连线在此不做介绍。设计的框图程序如图3-28与图3-29所示。
3.运行程序
执行菜单命令“文件”→“保存”,保存设计好的VI程序。
单击快捷工具栏“运行”按钮,运行程序。
给Pt100热电阻传感器升温或降温,VI程序前面板显示温度测量值及实时变化曲线;同时显示测量温度的平均值、最大值、最小值等。
可以改变温度报警下限值、上限值:在下限指示文本框中输入下限报警值,在上限指示文本框中输入上限报警值。
图3-28 框图程序(一)
图3-29 框图程序(二)
当测量温度小于设定的下限温度值时,程序中下限指示灯改变颜色,线路中DO指示灯1亮;当测量温度值大于设定的上限温度值时,程序中上限指示灯改变颜色,线路中 DO 指示灯2亮。
程序运行界面如图3-30所示。
图3-30 程序运行界面