计算机仿真和可视化设计——基于LabVIEW的工程软件应用蔡建安陈洁华张文艺目录1LABVIEW概述2LABVIEW模板简介3创建VI程序4LABVIEW结构5LABVIEW数据类型6图表及图形7字符串和文件I/O8数据采集9工程仿真和设计常用编程技法10虚拟设备实例水环境工程仿真软件11附录4LABVIEW结构4.1WhileLoop循环4.2ForLoop循环4.3移位寄存器4.4Case结构4.5顺序结构4.6结构连线中的常见问题4.7公式节点4.8局部变量和全局变量学习指导LabVIEW有四种结构控制程序流程:WhileLoop循环,ForLoop循环,Case结构和Sequence结构。公式节点、局部和全局变量等特殊结构对简化程序和传递数据有重要意义。学习要点While循环的执行是根据条件端子上输入的布尔值是TRUE或FALSE确定的,用布尔开关人工控制时需了解对应的机械操作模式;For循环将子框图执行N次,N为计数端的输入值;在For或WhileLoop循环中,应掌握移位寄存器的用法;Case结构是执行条件语句的一种方法,能代替常规语言的IF…Then…Else和多项选择语句,需要关注Case下多选子框图标识符的用法;顺序结构为控制节点按顺序执行的方法。该结构只有数据相关性不足以控制数据流,而又必需强调执行顺序时才使用;学习要点解决结构连线问题往往是结构编程的关键,特别要掌握结构下数据隧道的正确使用;公式节点是—种允许用文本语言编写一个或多个代数公式的结构。在公式节点上建立输入和输出端子后,用公式节点支持的运算符和函数写出以分号结尾的语句;局部变量用于程序中控制初始化、协调控制功能、临时保存数据和传递数据。全局变量可在不同VI之间交换数据。4.1WhileLoop循环While循环有两个端子:条件端子(输入端子)和重复端子(输出端子)。重复端子的作用是输出循环已执行次数的数字。条件端子输入的是布尔值TRUE或FALSE。在每一次重复执行后,Ⅵ检查条件端子,如果条件端子值为TRUE那么执行下一个重复,直到条件端子变成FALSE。条件端子的默认值是FALSE。由于检查条件端子输入值是循环结束后,因此While循环至少也要执行—次。布尔开关机械操作模式六种模式SwitchWhenPressed(按下时启动)SwitchWhenReleased(松开时启动)SwitchUntilReleased(按下启动直到松开)LatchWhenPressed(按下时锁定)LatchWhenReleased(松开时锁定)LatchUntilReleased(直到松开时才锁定)4.2ForLoop循环在指定次数的重复操作完成之前,For循环控制VI执行重复操作。For循环和While循环之间的差别是:For循环的次数是预先指定的;While循环则一直执行,直到输入条件变为False为止。For循环与While循环都可以在Function菜单的Structures选项板中可找到4.3移位寄存器移位寄存器(Shifiregister)用于For循环或While循环中从一个迭代传输数据到下一个迭代,它由循环垂直边框上一对方向相反的端子组成,通过从左或右循环边框上弹出快捷菜单并选择AddShiftRegister,可以创建移位寄存器。右端子(带向上箭头的矩形)在每完成一次迭代后存储数据,移位寄存器将上次迭代的存储数据在下一次迭代开始时移动到左端子(具有向下箭头的矩形)上,同一个寄存器端子上数据类型的数据必须是同一类型。建立循环结构演示建立循环结构和移位寄存器演示4.4Case结构Case结构是执行条件语句的一种方法。这类似于常规的文本编程语言中常见的IF…Then…Else语句。从Functions选项板的Structures子选项板中选择Case结构并将其放置在框图上。4.5顺序结构顺序结构用于顺序地执行子框图。这些子框图看起来像一帧电影胶片,因此称为帧(frame)。将最先要执行的代码放置在顺序结构帧0(0..x)边框内,然后依次将执行代码放在帧1、帧2框内。只有当最后一帧完成后,数据才离开结构4.6结构连线中的常见问题1、给顺序结构局部变量多次赋值2、对顺序结构中的多个帧进行连线3、未在Case结构的所有分支中连接隧道4、隧道重叠5、连线从结构下面通过而不是从结构上穿过例4-5Case结构演示1、设当水中溶解氧浓度超过2mg/L时,反应速度为K0,否则降低为0.1K0。2、添加分支,设当水中溶解氧浓度超过4mg/L时,反应速度为K0;超过2mg/L时,反应速度为0.5K0,否则降低为0.1K0。例4-5Case结构演示4.7公式节点公式节点(FormulaNode)是—种结构,允许用户使用类似于多数文本编程语言的句法,编写一个或多个代数公式。这对于实现有多个变量的公式来说很有用。否则需要使用复杂的框图模型。通过在框中直接键人公式代码来代替创建框图部分。公式节点的输入、输出变量从公式节点边框上弹出快捷菜单,从中选择AddInput或AddOutput。ChangetoOutput可将输入改变为输出,ChangetoInput可将输出改变为输入。在公式节点上有了I/O端子,使用Labeling工具键入I/O变量的名字。节点中每一个变量不能具有相同的名字。用于内部计算的中间变量必须声明为输出,但不一定要连接到外部节点。LabVIEW7.1一级反应VI公式语句公式语句使用的算术表达式,句法类似于多数文本编程语言。可给语句添加注释,注释用一对“/*”封闭起来(/*注释*/)。使用Labeling工具在公式节点内输入公式,每个公式一定要用分号结束,并且变量的名字是大小写敏感的。函数名说明函数名说明abs(x)绝对值lnp1(x)返回ln(x)+1acos(x)反余弦,x弧度log(x)以10为底对数acosh(x)反双曲余弦,x弧度log2(x)以2为底对数asin(x)反正弦max(x,y)xy中最大值者asinh(x)反双曲正弦min(x,y)xy中最小值者atan(x)反正切函数mod(x,y)求模,x/y的整数值atanh(x)反双曲正切pi(x)X*πceil(x)返回大于1的最小整数pow(x,y)x^yci(x)余弦积分,x为非负实数rand()(0,1)区间的随机数cos(x)余弦函数rem(x,y)返回x/y的余数cosh(x)双曲余弦sec(x)正割cot(x)余切函数sign(x)符号csc(x)余割函数sin(x)正弦,x弧度exp(x)指数函数sinc(x)sin(x)/xexpm1(x)exp(x)-1sinh(x)双曲正弦floor(x)返回小于x的最大整数sqrt(x)平方根int(x)返回距x最近的整数tan(x)正切intrz(x)返回0-x间最近的整数tanh(x)双曲正切ln(x)自然对数函数公式节点的运算符运算符说明运算符说明?:条件赋值>=大于等于&&逻辑与<=小于等于││逻辑或算术移位(右移)!逻辑非算术移位(左移)&位与+加│位或―减^位异或*乘!=不等于/除==等于++加1>大于――减1<小于**乘方[例]4.9均布载荷简支梁受力和变形baLc)2();2(abLqbRcbLqbRba])(4[241])(4[241442442LaqLcLqLREIThBLcqLaLqLREIThAba,),(;0,)()(21,2LxbaRbaxaaxqRaxRQxlRaxqxRxRMbaaxbaax]4)()()(4[2410002/424443LxqcxLRLxaLqbaxqaxqxREIyLxbaaa时的桡度函数为:在局部变量的创建和使用方法局部变量的创建既可以通过图示右键弹出菜单获得,也可以在功能模板上选择Function/Structures/LocalVariable将其拖到框图上,得到一个代“?”的图标,再将其与框图中已有的变量建立关联。4.8局部变量和全局变量局部变量用于程序中控制初始化、协调控制功能、临时保存数据和传递数据。全局变量可在不同VI之间交换数据。局部变量和公式节点例4.7LabVIEW7.1全局变量全局变量与VI地位等同,以独立文件的形式保存在磁盘中。全局变量只有面板没有框图。通过全局变量不同VI之间交换数据。全局变量的创建步骤:在Function\Structures下选择GlobalVariable,将其图标拖到框图中。双击GlobalVariable图标,得到其前面板在其前面板上放上所需要的变量,例如数组、布尔量、字符串变量。命名和保存这个变量。5LABVIEW数据类型5.1LabVIEW的数据类型5.2数值类型5.3LabVIEW的数组5.3.1创建控制器数组和指示器数组5.3.2用循环创建数组5.3.3数组功能5LABVIEW数据类型5.4函数的多态性操作5.5簇5.5.1创建簇控件和指示器5.5.2簇顺序5.5.3簇函数5.5.4数组和簇的互换学习指导LabVIEW的数据按类型有数值量、逻辑量、字符串、文件路径等几类,在结构上有标量、一维、多维和簇,编程需要使数据连线匹配。学习要点1.认识数据类型的概念,编程时需要明确函数和子VI每一个数据结点的数据匹配;2.数组是同类数据元素的集合,簇是混合元素的集合。熟悉数组的建立和使用过程,掌握数据类型及其结构在使用时的转换方法;3.掌握循环结构的自动索引功能和函数的多态性操作方法。5.1LabVIEW的数据类型整形数兰色浮点数橙色逻辑量绿色字符串粉色文件路径青色5.2数值类型最基本的数据类型是数值类型,这是一种标量值,通常包括一个整型值或实型数值(浮点)。LabVIEW可以处理当前32位处理器提供的可能整型和实型的表示法。选择合适数值表示法的关键是要求的范围和精度。数据类型占用的字节越多,取值的可能范围越大。浮点类型和单精度类型可以处理的最大值为1038,一个无符号整型数的上限为2N-1,其中N是位的数值。5.3LabVIEW的数组5.3.1创建控制器数组和指示器数组从控制模板中的Array&Cluster子模板中选择一个空的数组壳;将有效数据对象(诸如数字、布尔型或字符串)拖进数组壳或者从数组壳的弹出菜单中选一个控制对象或指示器直接放入数组壳中。5.3.2用循环创建数组For循环和While循环可以在其边界处自动地检索和累积数组元素,这种能力称为自动索引。每循环一次就建立一个数组元素,在循环结束后,把数组送到一个数组指示器。5.3.3数组功能ArraySize指的是输入数组的元素数,N维数组的输出则是N个元素的数组。InitializeArray创建—个包含初始值的数组。初始值由Element给出。BuildArray构组数组,用于合并多个数组或给数组添加元素。5.3.3数组功能ArraySubset数组子集从输入数组中,输出个数组子集,以index指定开始的元素,以length指定元素个数。IndexArray索引数组index指定索引号,指定元素,第一个元素的索引号是0。5.4函数的多态性操作多态性(Polymorphism)是LabVIEW的函数接受不同维数数组和类型输入的能力。拥有这种能力的算术是多态函数。5.4多态函数的运算规则标量与标量相加输出结果是一个标量。标量与数组相加结果每个元素被加上这个标量。数组与数组相加结果是每个元素被加到另一个数组。标量与数组相乘结果是每个元素被乘上这个标量。标量与数组相除结果是每个元素被除以这个标量。数组与数组相乘结果是一个数组,但由于一个数组的尺寸比另一个小,故得到的输出与输入数组中较小的一个一样大小,乘运算作用于两个输入数组中的相应元素。5.5簇簇(cluster)是一种类似数组一样的数据结