控制程序运行的结构_第1页
控制程序运行的结构_第2页
控制程序运行的结构_第3页
控制程序运行的结构_第4页
控制程序运行的结构_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于控制程序运行的结构1第一页,共五十四页,编辑于2023年,星期一2第5章控制程序运行的结构结构是一种程序流程控制节点,它们在程序框图中的外形一般是一个大小可以缩放的边框,当它与其它节点的连线有数据传递过来时,边框内的一段代码或者反复执行、或者有条件执行、或者按照一定顺序执行。结构内的一段代码叫做子程序框图;结构边框上数据输入输出的接线端叫隧道。第二页,共五十四页,编辑于2023年,星期一3隧道的创建方法(1)将结构外的端子连接到结构内的端子,连接后结构边框上将出现一个表示隧道的矩形框;(2)通过将外部端子连接到结构边框来创建隧道,然后再进一步将创建的隧道连接到内部端子;For循环和While循环支持自动索引。当表示隧道的矩形框是实心时,表示禁止自动索引,是空心时表示自动索引。第三页,共五十四页,编辑于2023年,星期一45-1For循环5-1-1For循环的建立在结构子选板中选中For循环图标,在所有应在For循环内执行的节点左上角单击一下鼠标,然后按住鼠标向右下角拖动,直到虚线框包围所有应在For循环内执行的节点,松开鼠标手,就得到一个大小和位置满意的边框。也可以先放好一个边框,再向里面添代码。第四页,共五十四页,编辑于2023年,星期一5For循环有两个固定的接线端。For循环边框内的代码(子框图)循环执行一定次数。总线接线端为输入接线端,除非使用自动索引功能,否则都要在For框外,为总线接线端连接一32位整型数(其它类型会强制转换为最接近的整型数),指定循环执行的次数。计数接线端是输出接线端,输出循环当前执行的次数,循环次数从0开始计数。可以从循环外边连接一个数值到总线接线端,显性地设置循环次数,也可以利用自动索引隐含地设置循环次数。For循环的接线端第五页,共五十四页,编辑于2023年,星期一65-1-2For循环的时间控制与数据传递满足循环条件情况下,循环结构在一次结束后将尽快开始执行下一次循环。控制循环速度的最常用方法是使用“编程定时”函数子选板中的“等待下一个整数倍毫秒”,程序执行到该函数时将等待到它的“毫秒计时值”变为输入的“毫秒倍数”参数的整数倍。因此可以控制循环按照固定的时间间隔执行。循环结构通道上的数据在循环执行第一次时进入循环框内,以后循环执行过程中将不再理会该数据的变化;循环结构执行完后,才传递出数据。第六页,共五十四页,编辑于2023年,星期一75-1-2For循环的时间控制与数据传递循环结构的时间控制与数据传递.vi都不能实现100次循环过程中用滑钮控制曲线变化如果For循环内的程序执行完以后,用时不足100ms,则等待到100ms后再开始下一次循环。如果循环内的程序在100ms内没有执行完,则在程序执行完后再开始下一次循环,即保证程序执行时间不会少于100ms。第七页,共五十四页,编辑于2023年,星期一85-1-3For循环对数组的自动索引自动索引是指使循环框外面的数组成员(随着循环的进行)逐个依次进入循环框内,或使循环框内的数据累加成一个数组输出到循环框外面的功能(该数组要在循环结束后一次输出!)。使用自动索引功能时,从循环框外连接到输入通道的二维数组将索引出一维数组,从一维数组将索引出单个成员。与此相反,在循环的输出边框,单个元素依次累加为一维数组,一维数组累加成为二维数组。For循环和While循环都支持自动索引。但连接到For循环的数组默认为自动索引,而连接到While循环的数组默认为不能自动索引。在通道上右击鼠标弹出菜单可选”禁用索引“或”启用索引“。第八页,共五十四页,编辑于2023年,星期一9

里层的For循环将6次执行时的循环次数累加成一个一维数组0~5输出;外层For循环依次为这个一维数组各个成员加上当前循环数,最后将8次循环的8个一维数组累加成二维数组输出。ab

外层的For循环每执行一次循环从二维数组中索引出一行;里层的For循环每执行一次从一维数组中索引出一个成员。

在循环外边连接一个数值到计数端口,可显示地设置计数值;也可使用自动索引隐含设置计数值,此时For循环的执行次数对于一维数组等于数组长度,即把所有数组元素索引完为止;对于二维数组等于数组行数,即一次索引1行,将所有行索引完。如果连接了计数端口值,同时还有其它数组执行自动索引进入循环,则循环按照其中的最小次数进行。自动索引.vi第九页,共五十四页,编辑于2023年,星期一105-1-3For循环对数组的自动索引

在循环外边连接一个数值到计数端口,可显示地设置计数值;也可使用自动索引隐含设置计数值,此时For循环的执行次数对于一维数组等于数组长度,即把所有数组元素索引完为止;对于二维数组等于数组行数,即一次索引1行,将所有行索引完。如果连接了计数端口值,同时还有其它数组执行自动索引进入循环,则循环按照其中的最小次数进行。自动索引.vi第十页,共五十四页,编辑于2023年,星期一115-1-4移位寄存器和反馈节点1.移位寄存器

(1)建立移位寄存器

移位寄存器从一个循环向下一个循环传递数据。For循环和While循环都可以使用移位寄存器。创建移位寄存器的方法是在循环的左边框或右边框上弹出快捷菜单,然后选择“添加移位寄存器”。一个While循环或For循环可建立多个移位寄存器。移位寄存器可以保存任何类型的数据,数值型、布尔型、字符串和数组等。移位寄存器自动适应连接到它端口的第一个数据的类型。刚创建的移位寄存器包含两个相对的端口,分别位于循环竖直的左右边框上。右边端口存储循环结束时的数据,到下一循环开始时该数据出现在左边端口上。左边端口可以增加附加端口以存储多次循环的值,方法是用定位与选择工具拖动端口的方型缩放手柄,或弹出快捷菜单选“添加元素”。第十一页,共五十四页,编辑于2023年,星期一125-1-4移位寄存器和反馈节点——移位寄存器(2)移位寄存器传递数据的方法程序在循环开始前为移位寄存器左边3个接线端都赋初始值5。循环开始执行后循环数i不断送入右边框的移位寄存器接线端,并在每次循环结束时转移到左侧移位寄存器接线端。到下一次循环时这个循环数就出现在移位寄存器左边最上边的接线端中。而在每次循环中,移位寄存器左边各接线端的值都向下移动一位。到循环全部结束时,右侧接线端的数值转移到左侧接线端的同时,输出到循环边框外。第十二页,共五十四页,编辑于2023年,星期一135-1-4移位寄存器和反馈节点——移位寄存器(2)移位寄存器传递数据的方法——用移位寄存器求最大值如果要初始化移位寄存器,就必须为所有的左侧端口都赋值,而且要用同样的数据类型。求最大值.vi第十三页,共五十四页,编辑于2023年,星期一14(3)移位寄存器的初始化除非显式地初始化移位寄存器,否则当首次执行VI时,移位寄存器将初始化为移位寄存器相应数据类型的默认值,(布尔型为False,数字型为0)。存储在移位寄存器中的数据直到关闭VI才在内存中消除,如果运行的VI包含未初始化的移位寄存器,在以后执行时,移位寄存器获得的初始值将是以前执行后的最终值。由于这种情况难于检测,可能使VI调试变得困难。有时应用移位寄存器就是为了在程序的一系列执行过程中传递数据,这时就不能对移位寄存器初始化。第十四页,共五十四页,编辑于2023年,星期一155-1-4移位寄存器和反馈节点2.反馈节点自动创建反馈节当For循环或While循环边框比较大时,使用移位寄存器会造成过长的连线,因此LabVIEW提供了反馈节点。在For循环或While循环中,当我们把一个节点的输出连接到它的输入时,连线中会自动插入一个反馈节点,同时自动创建了一个初始化接线端。第十五页,共五十四页,编辑于2023年,星期一165-1-4移位寄存器和反馈节点2.反馈节点反馈节点的数据传递反馈节点的箭头方向表示数据流方向。反馈节点有两个端口:(1)输入端口:在每次循环结束时将当前值存入;(2)输出端口:在每次循环开始时将上一次循环存入的值输出。反馈节点的数据传递.vi第十六页,共五十四页,编辑于2023年,星期一175-2While循环While循环控制程序反复执行一段代码,直到某个条件发生。建立While循环的方法与For循环是一样的。While循环有两个固定的接线端。“循环计数“是一个输出接线端,它输出循环当前执行的次数。循环数是从0开始计数的。“循环条件”是一个布尔量输入接线端。程序在每次循环结束时检查条件接线端。因此,While循环总是至少执行一次。第十七页,共五十四页,编辑于2023年,星期一185-2While循环While循环终止条件死循环当条件端口连接一个出错信息簇,则默认设置是StoponError,即遇到已发生错误的信息退出循环;在条件端口弹出菜单可将设置改为ContinueWhileError。

如果产生循环终止条件的数据源放置在While循环的外边,根据初始值的不同,可创建无限循环或仅执行1次的循环。因为G程序是在进入循环之前读取数据源的数据值,进入循环后将不再理会循环框外面数据的变化——数据流编程!第十八页,共五十四页,编辑于2023年,星期一19While循环的自动索引、循环时间控制方法以及移位寄存器的使用类似于for循环。由于while循环次数不是事先确定的,因此使用数组自动索引功能时应注意:(1)如个数组成员已经索引告罄,则LabVIEW自动在后面追加缺省值,数字型的缺省值为0,布尔型为false。

(2)while循环使用自动索引时输出数组长度也是事先未知的。第十九页,共五十四页,编辑于2023年,星期一205-3定时循环如果需要对循环的执行时间进行更精确的控制和增加更多控制功能,可以使用定时循环。定时循环.vi右边框内的输出节点默认情况下只显示一个错误信息接线端,这里选择为dt,连接了一个输入型控件,使得程序可以在执行中改变循环的速度。第二十页,共五十四页,编辑于2023年,星期一215-4条件结构

条件结构类似于文本编程语言中的If…Then…Else语句。条件结构包含有两个以上子程序框图,每个子程序框图中的一段程序代码对应一个条件分支,程序运行时选择其中的一段执行。这些代码框像一叠卡片一样重叠在一起,一次只能看到一张。第二十一页,共五十四页,编辑于2023年,星期一225-4条件结构5-4-1条件结构的建立单击递减箭头和递增箭头可分别查看或编辑前一个或后一个子框图。在子框图表示上单击鼠标左键,则出现所有存在的子框图名,可以选择显示其中的任一个。第二十二页,共五十四页,编辑于2023年,星期一235-4-1条件结构的建立在选择结构边框上弹出菜单可进行“删除本分支”、“复制分支”、“在前面添加分支”,“在后面添加分支”、“删除条件结构”等操作。连接到选择端口的值可以是整型、布尔型、字符型或枚举型,默认布尔型。当选择端口连接一个枚举量时,边框弹出的快捷菜单中有“为每个值添加分支”选项,即有几个枚举值,就有几个子框图。第二十三页,共五十四页,编辑于2023年,星期一245-4-2条件结构的设置1.默认选项的设置

在LabVIEW中使用条件结构,必须设置一个默认子程序框图处理超出选项范围的情况,除非能够为每个可能的选择值都设置一个子程序框图。设置缺省选项的方法是:当显示缺省子图形代码框时,在结构边框上弹出菜单选择Makethisthedefaultcase。第二十四页,共五十四页,编辑于2023年,星期一255-4-2条件结构的设置2.子程序框图的设置用编辑文本工具修改选择器标签中的选择器值可以设置子程序框图与选项的对应关系。子图形代码框标识可以是一个单值,例如3;也可以是一个表,例如1,2,3;也可以是一个范围,例如5..10;范围可以是开放的例如..1(小于或等于1)或9..(大于或等于9)。同一个子程序框图中设置的范围有重叠时,自动调整为紧凑形式,例如,输入“5..15,12..20”,则显示为5..20”。字符型和枚举型数值在子图形代码框中被自动加上双引号。字符型选择值表示范围时不包括最后一个字符,例如“a”..“c”,包括字符a和字符b开头的任何字符选项值,而不包括c开头的字符选项值。第二十五页,共五十四页,编辑于2023年,星期一26错误的子框图标识被自动地用红色显示。修改选择结构子图形代码框顺序的方法是在结构边框弹出菜单选择“重排分支”命令,弹出一对话框,在“分支列表”中拖动条件选择其标签值到需要的位置。第二十六页,共五十四页,编辑于2023年,星期一275-4-2条件结构的设置3.隧道的要求

向case结构框内输入数据时,各子图形代码框连接或不连接这个数据都可以;从case结构框向外输出数据时,各子图形代码框都必须为这个数据通道连接数据,否则通道图标是中空的,程序运行按钮是断开的。当各子图形代码框都为这个通道连好数据以后,通道图标才成为实心的,程序才可运行。如果允许没有连线的子图形代码框输出默认值,可在数据通道上弹出菜单,选择“未连线时使用默认值”,这时数据通道变为灰色,程序执行到没有为其连接数据通道连线的子图形代码框时,就输出相应数据类型的默认值。第二十七页,共五十四页,编辑于2023年,星期一285-4-3条件结构应用示例1.使While循环先检查条件接线端再执行代码While循环是先执行完循环框内的代码,再检查条件端口,循环框内的代码至少要被执行1次。利用选择结构,可实现使用While循环时先检查后执行。While循环的先检查后执行.vi第二十八页,共五十四页,编辑于2023年,星期一295-4-3条件结构应用示例2.按一定条件分离数组元素将一个浮点数数组的正负数成员分离成两个数组。按条件分离数组成员.vi第二十九页,共五十四页,编辑于2023年,星期一305-4-3条件结构应用示例3.用条件结构处理错误

LabVIEW的很多VI输出一个“错误输出”参数,指出这个VI执行中是否发生错误,通知后续程序进行必要的处理。用case结构处理错误.vi第三十页,共五十四页,编辑于2023年,星期一315-5顺序结构基于文本的编程语言,程序是按照语句出现的顺序执行。“数据流”控制LabVIEW程序的运行方式。数据流程序中一个节点(函数)只有当它所有的输入端的数据都成为有效数据后才能被执行,而且只有当它执行完成后,它的所有输出端口上的数据才成为有效。第三十一页,共五十四页,编辑于2023年,星期一32

如上图所示,这个VI程序把两个输入数值相乘,再把乘积减去50.0。这个程序中,框图程序从左往右执行,这个执行次序不是由于对象的摆放位置,而是由于相减运算函数的一个输入量是相乘函数的运算结果,它只有当相乘运算完成并把结果送到减运算的输入口后才能继续下去。

第三十二页,共五十四页,编辑于2023年,星期一33

在这个例子中,我们无法知道哪一个节点函数首先执行,因为所有输入量几乎同时到达。对于这样一种相互独立的数据流程,如果又必须明确指定节点执行的先后次序,就必须使用顺序(Sequence)结构来明确执行次序。第三十三页,共五十四页,编辑于2023年,星期一345-5顺序结构

在数据流程序中,只要一个节点所有需要输入的数据全部到达就开始执行。如果有时需要某个节点先于其它节点执行,可以用顺序结构作为控制节点执行次序的一种方法。5-5-1顺序结构的建立顺序结构可包含一个或多个子框图,每个子框图称为一个“帧”。子框图编号从0开始,顺序结构从0号程序图框内的代码开始,按顺序执行。第三十四页,共五十四页,编辑于2023年,星期一35有层叠(StackedSequenceStructure)和平铺(FlatSequenceStructure)2种顺序结构形式。刚放入程序框图的顺序结构只有一个子框图。在顺序结构边框弹出菜单,选“在后面添加帧”或“在前面添加帧”逐个增加子框图。第三十五页,共五十四页,编辑于2023年,星期一36层叠顺序结构在层叠顺序结构边框上弹出快捷菜单可进行:(1)子框图的复制、删除或移除整个顺序结构,移除整个顺序结构后时只剩下顶层内的程序框图。(2)选择“本帧设置为”命令可为当前帧指定顺序号。(3)选择“替换”命令可把它替换为平铺顺序结构或选择结构;选择结构也可替换为层叠顺序结构。层叠顺序结构节省程序框图空间,但掩盖了程序代码关系。第三十六页,共五十四页,编辑于2023年,星期一37平铺顺序结构与层叠顺序结构的不同(1)不可复制子框图。(2)只能替换为层叠顺序结构,不能直接替换为选择结构。(3)移除平铺顺序结构后各子框图的代码都保留。(4)平铺顺序结构,不会掩盖程序代码,但占用程序框图空间大。第三十七页,共五十四页,编辑于2023年,星期一385-5-2顺序结构中数据输入输出与传递向顺序结构框内输入数据时,各子图形代码框连接或不连接这个数据都可以(与条件结构相同)。从顺序结构框向外输出数据时,各子图形代码框只能有一个连接这个数据通道。否则通道图标是中空的,程序运行按钮是断开的。注意条件结构要求各子图形代码框都必须为这个数据通道连接数据。不论由哪一层图形代码向外传递数据,都要等所有子图形代码框顺序执行完后才能传出数据。各个子框图之间传递数据,平铺顺序结构可以直接连线,但层叠顺序结构要借助顺序结构变量。第三十八页,共五十四页,编辑于2023年,星期一39

在各个子程序框图之间传递数据,平铺顺序结构可以直接连线。第三十九页,共五十四页,编辑于2023年,星期一40建立顺序局部变量的方法是在顺序结构边框上弹出快捷菜单,选择“添加顺序局部变量”,出现一黄色小方框。为这个小方框连接数据后它的中间出现一个指向数据结构框外的箭头。不能在为顺序局部变量赋值的子代码图形框之前访问该数据。在这些子框图中顺序局部变量图标没有箭头,也不允许连线。在为顺序局部变量赋值的子框图之后,所有子框图都可以访问这个数据,这些子框图的顺序局部变量图标都有一个向内的箭头。层叠顺序结构传递数据.vi第四十页,共五十四页,编辑于2023年,星期一415-5-3顺序结构应用示例

使用平铺顺序结构计时

使用顺序结构计时.vi第四十一页,共五十四页,编辑于2023年,星期一425-5-3顺序结构应用示例

使用层叠顺序结构计时使用顺序结构计时.vi第四十二页,共五十四页,编辑于2023年,星期一435-5-4顺序结构的缺陷与人为的数据依从关系

NI公司在LabVIEW中提供了顺序结构,却不提倡过多使用它。原因主要有两点。顺序结构妨碍了作为LabVIEW优点之一的程序并行运行机制。顺序结构掩盖了部分程序代码,中断了作为LabVIEW

主要特点的数据流形式。这一点已经通过使用平铺的顺序结构解决。第四十三页,共五十四页,编辑于2023年,星期一445-8公式节点5-8-1公式节点的用途图形编程的数学计算

公式节点的数学计算程序中的复杂运算可使用公式节点使程序简洁公式节点.vi第四十四页,共五十四页,编辑于2023年,星期一455-8公式节点5-8-2公式节点的建立 在“编程—>结构”函数子选板和“数学—>脚本与公式”函数子选板都可以找到公式节点。在程序框图中放置公式节点的方法以及公式节点边框大小的调整与其它结构是一样的。5-8-3公式节点的语法

公式节点中的代码看上去就像一小段C语言的程序。公式节点中也可以声明变量,可以使用C语言的语法,可以加语句注释,每个公式语句也是以分号结束。公式节点的变量可以与输入输出接线端连线无关,但是变量不能有单位。第四十五页,共五十四页,编辑于2023年,星期一465.8公式节点FormulaNode

用“编辑文本工具”往公式节点中输入公式;在公式节点边框上弹出菜单,选择“添加输入”或“添加输出”为公式节点创建输入或输出端口在端口小方框中输入变量名(分大小写),将提供变量值的控制件或前面的程序节点连接到输入端口,将输出端口连接到显示件或需要此数据的后续节点。第四十六页,共五十四页,编辑于2023年,星期一47公式节点常用运算符意义符号赋值=加、减、乘、除、乘方+、-、*、/、**逻辑或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论