第第1100章章基基于于研研华华数数据据采采集集卡卡的的LLaabbVVIIEEWW程程序序设设计计本章利用研华公司的PCI-1710HG数据采集卡编写LabVIEW程序,包括:模拟量输入、模拟量输出、开关量输入以及开关量输出等。10.1模拟量输入(AI)10.1.1基于研华数据采集卡的LabVIEW程序硬件线路在图10-1中,通过电位器产生一个模拟变化电压(范围是0V~5V),送入板卡模拟量输入0通道(管脚68),同时在电位器电压输出端接一信号指示灯,用来显示电压变化情况。PCI1710HG多功能卡计算机6068DC5V+_10KAI指示灯0∽5V图10-1计算机模拟电压输入线路本设计用到的硬件为:PCI-1710HG数据采集卡、PCL-10168数据线缆、ADAM-3968接线端子(使用模拟量输入AI0通道)、电位器(10K)、指示灯(DC5V)、直流电源(输出:DC5V)等。10.1.2基于研华数据采集卡的LabVIEW程序设计任务利用LabVIEW编写应用程序实现PCI-1710HG数据采集卡模拟量输入。任务要求:(1)以连续方式读取电压测量值,并以数值或曲线形式显示电压测量变化值;(2)当测量电压小于或大于设定下限或上限值时,程序画面中相应指示灯变换颜色。~第10章基于研华数据采集卡的LabVIEW程序设计–209–10.1.3基于研华数据采集卡的LabVIEW程序任务实现1.建立新VI程序启动NILabVIEW程序,选择新建(New)选项中的VI项,建立一个新VI程序。在进行LabVIEW编程之前,必须首先安装研华设备管理程序DeviceManager、32bitDLL驱动程序以及研华板卡LabVIEW驱动程序。2.设计程序前面板在前面板设计区空白处单击鼠标右键,显示控件选板(Controls)。(1)添加一个实时图形显示控件:控件(Controls)→新式(Modern)→图形(Graph)→波形图形(WaveformChart),标签改为“实时电压曲线”,将Y轴标尺范围改为0.0-5.0。(2)添加一个数字显示控件:控件(Controls)→新式(Modern)→数值(Numeric)→数值显示控件(NumericIndicator),标签改为“当前电压值:”。(3)添加两个指示灯控件:控件(Controls)→新式(Modern)→布尔(Boolean)→圆形指示灯(RoundLED),将标签分别改为“上限指示灯:”、“下限指示灯:”。(4)添加一个停止按钮控件:控件(Controls)→新式(Modern)→布尔(Boolean)→停止按钮(StopButton)。设计的程序前面板如图10-2所示。图10-2程序前面板3.框图程序设计——添加函数进入框图程序设计界面,在设计区空白处单击鼠标右键,显示函数选板(Functions)。在函数选板(Functions)下添加需要的函数。(1)添加选择设备函数:用户库→AdvantechDA&C(研华公司的LabVIEW函数库)→EASYIO→SelectPOP→SelectDevicePop.vi,如图10-3所示。图10-3SelectPop函数库LabVIEW虚拟仪器数据采集与串口通信测控应用实战–210–(2)添加打开设备函数:用户库→AdvantechDA&C→ADVANCE→DeviceManager→DeviceOpen.vi,如图10-4所示。(3)添加选择通道函数:用户库→AdvantechDA&C→EASYIO→SelectPOP→SelectChannelPop.vi,如图10-3所示。(4)添加选择增益函数:用户库→AdvantechDA&C→EASYIO→SelectGainPop.vi,如图10-3所示。(5)添加UnbundleByName函数:编程(Programming)→簇、类与变体(Cluster&Variant)→按名称解除捆绑(UnbundleByName)。(6)添加Bundle函数:编程(Programming)→簇、类与变体(Cluster&Variant)→捆绑(Bundle)。(7)添加关闭设备函数:用户库→AdvantechDA&C→ADVANCE→DeviceManager→DeviceClose.vi,如图10-4所示。(8)添加模拟量配置函数:用户库→AdvantechDA&C→ADVANCE→SlowAI→AIConfig.vi,如图10-5所示。图10-4DeviceManager函数库图10-5SlowAI函数库(9)添加一个While循环结构:编程(Programming)→结构(Structures)→While循环(WhileLoop)。以下添加的函数或结构放置在While循环结构框架中。(10)添加模拟量电压输入函数:用户库→AdvantechDA&C→ADVANCE→SlowAI→AIVoltageIn.vi,如图10-5所示。(11)添加一个比较符号函数“≤”:编程(Programming)→比较(Comparison)→小于等于?(LessOrEqual?)。(12)添加数值常量:编程(Programming)→数值(Numeric)→数值常量(NumericConstant),将值改为0.5(下限电压值)。(13)添加一个比较符号函数“≥”:编程(Programming)→比较(Comparison)→大于等于?(GreaterOrEqual?)。(14)添加数值常量:编程(Programming)→数值(Numeric)→数值常量(NumericConstant),将值改为3.5(上限电压值)。(15)添加一个时钟函数:编程(Programming)→定时(Time&Dialog)→等待下一个整数倍毫秒(WaitUntilNextmsMultiple)。(16)添加数值常量:编程(Programming)→数值(Numeric)→数值常量(Numeric第10章基于研华数据采集卡的LabVIEW程序设计–211–Constant),将值改为500(采样频率)。(17)添加Not函数:编程(Programming)→布尔(Boolean)→非(Not)。(18)添加两个条件结构:编程(Programming)→结构(Structures)→条件结构(CaseStructure)。(19)分别在两个条件结构的真(True)选项中各添加一个比较函数:编程(Programming)→比较(Comparison)→不等于0?(NotEqualTo0?)。(20)分别在两个条件结构的真(True)选项各添加一个数值常量:编程(Programming)→数值(Numeric)→数值常量(NumericConstant),值分别为0、0。(21)将数字显示控件(标签为“当前电压值:”)、波形显示控件(标签为“实时电压曲线”)、停止按钮控件从外拖入循环结构中。(22)将指示灯控件“下限指示灯:”、“上限指示灯:”分别拖入两个条件结构的真(True)选项中。添加的函数如图10-6所示。(23)分别在两个条件结构的假(False)选项中各添加一个局部变量:编程(Programming)→结构(Structures)→局部变量(LocalVariable)。分别选择局部变量,单击鼠标右键,在弹出的快捷菜单的选项(SelectItem)选项下,为局部变量选择控件:“下限指示灯:”、“上限指示灯:”,将其读写属性设置为“写”。(24)分别在两个条件结构的假(False)选项中各添加一个比较函数:编程(Programming)→比较(Comparison)→不等于0?(NotEqualTo0?)。(25)分别在两个条件结构的假(False)选项中各添加一个数值常量:编程(Programming)→数值(Numeric)→数值常量(NumericConstant),值分别为1、1。添加的函数如图10-7所示。图10-6节点布置图1图10-7节点布置图24.框图程序设计——连线使用工具箱中的连线工具,将所有函数连接起来。(1)将SelectDevicePop.vi函数的输出端口DevNum与DeviceOpen.vi函数的输入端口DevNum相连。(2)将DeviceOpen.vi函数的输出端口DevHandle与SelectChannelPop.vi函数的输入端口DevHandle相连。LabVIEW虚拟仪器数据采集与串口通信测控应用实战–212–(3)将SelectChannelPop.vi函数的输出端口DevHandle与AIConfig.vi函数的输入端口DevHandle相连。将SelectChannelPop.vi函数的输出端口GainList与SelectGainPop.vi函数的输入端口GainList相连。将SelectChannelPop.vi函数的输出端口ChanInfo与按名称解除捆绑(UnbundleByName)函数的输入端口输入簇(InputCluster)相连。(4)将按名称解除捆绑(UnbundleByName)函数的输出端口通道(Channel)与捆绑(Bundle)函数的一个输入端口簇元素(ClusterElement)相连。(5)将SelectGainPop.vi函数的输出端口GainCode与捆绑(Bundle)函数的一个输入端口簇元素(ClusterElement)相连。(6)将捆绑(Bundle)函数的输出端口输出簇(OutCluster)与AIConfig.vi函数的输入端口Chan&Gain相连。(7)将AIConfig.vi函数的输出端口DevHandle与AIVoltageIn.vi函数的输入端口DevHandle相连。(8)将AIVoltageIn.vi函数的输出端口DevHandle与DeviceClose.vi函数的输入端口DevHandle相连。将AIVoltageIn.vi函数的输出端口Voltage与数字显示控件(标签为“当前电压值:”)相连。将AIVoltageIn.vi函数的输出端口Voltage与波形显示控件(标签为“WaveformChart”)相连。将AIVoltageIn.vi函数的输出端口Voltage与小于等于?(LessOrEqual)函数的输入端口x相连。将AIVoltageIn.vi函数的输出端口Voltage与GreaterOrEqual函数的输入端口x相连。(9)将数值常量(值为0.5,下限电压值)与小于等于?(LessOrEqual)函数的输入端口y相连。(10)将数值常量(值为3.5,上限电压值)与大于等于?(GreaterOrEqual?)函数的输入端口y相连。(11)将小于等于?(LessOrEqual?)函数的输出端口x=y?与条件结构1上的选择端口?相连。(12)将大于等于?(GreaterOrEqual?)函数的输出端口x=y?与条件结构2上的选择端口?相连。(13)在条件结构1的真(True)选项中,将数值常量(值为0)与不等于0?(NotEqualTo0?)函数的输入端口x相连;将不等于0?(NotEqualTo0?)函数的输出端口x!=0?与指示灯控件“下限指示灯”相连。(14)在条件结构1的假(False)选项中,将数值常量(值为1)与不等于0?(NotEqualTo0?)函数的输入端口x相连;将不等于0?(NotEqualTo0?)函数的输出端口x!=0?与局部变量“下限指示灯:”相连。(15)在条件结构2的真(True)选项中,将数值常量(值为0)与不等于0?(NotEqualTo0?)函数的输入端口x相连;将不等于0?(NotEqualTo0?)函数的输出端口x!=0?与指示灯控件“上限指示灯”相连。(16)在条件结构2的假(False)选项中,将数值常量(值为1)与不等于0?(NotEqual第10章基于研华数据采集卡的LabVIEW程序设计–213–To0?)函数的输入