石鑫华视觉论坛

 找回密码
 注册会员
查看: 3867|回复: 0

[转载] 陈树学:LabVIEW中类if else结构的消除Case结构

[复制链接]
  • TA的每日心情
    擦汗
    9 小时前
  • 签到天数: 3382 天

    连续签到: 4 天

    [LV.Master]2000FPS

    发表于 2014-11-2 18:49:42 | 显示全部楼层 |阅读模式 来自:广东省东莞市 移动

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

    x
    问题如下:
    有这样一个问题:x的取值范围为【0-1000】,我想进行这样的操作:将x分为20等份,在每一等分中y取不同的值。即,在x=【0-50】时,y=a;x=【50-100】时,y=b;。。。一直到x=【950-1000】时,y=z。
    最先能想到的解决办法就是嵌套case,但是这要20个case,太复杂,有没有什么办法可以不用嵌套?比如公式节点里面输入C语言?但是这样的程序c语言我不知道该怎么编,哪位指教一下~急求啊~~~

    条件结构是编程三大基本结构之一(顺序、条件、循环),使用非常广泛也极为灵活,但是过多的条件分支也往往令人头疼。对于使用过其它编程语言的朋友们,会自然想起IF ELSE,但是LABVIEW却没有这样的结构。
    有些特定情况,可以考虑用数组来替代CASE结构,针对上面的问题我给出了下面的解决方法:

    陈树学:LabVIEW中类if else结构的消除Case结构

    陈树学:LabVIEW中类if else结构的消除Case结构
    因为X的取值范围是等间隔的,因此自然考虑到用数组取代CASE结构。
    类似的问题是非常常见的,如果不是等间隔的,按照C语言的编程习惯,我会自然考虑到使用公式节点来解决这个问题。
    在写这篇博文之前,我想到了另外一种适合LABVIEW的处理方法,因此我觉得应该写出来,供大家参考。
    对于涉及到取值范围的问题,往往间隔虽然不相同,但是必须是连续的,一般按照升序排列的,因此是可能利用数组来解决的。
    LABVIEW的数组操作极其方便,这个问题本身也可以归结到数组中,我们考虑这个问题需要两个数组:
    1、取值范围的数组

    取值范围的数组

    取值范围的数组
    假设X分成如下几段:0-5,5-11,11-24三段,多个范围时原理是相同的。
    2、值数组
    三段对应三个Y值,因此需要构建值数组。Y的类型可以任意的,比如数值、字符串等等,为了说明的更加清楚,我采用字符串数组。

    值数组

    值数组
    三个字符串对应三段数值。
    下面要考虑的问题是确定给定的X值到底位于那个段的问题了,幸运的是LABVIEW提供了这样的数组操作函数,不过一般用的不多,因此可能不熟悉,下面是帮助中的函数说明。

    以阈值插值一维数组(函数)

    以阈值插值一维数组(函数)
    LABVIEW的中文帮助一向是晦涩难懂的,可能是美式中文,中国人不习惯
    简单地说,给定一个值,该函数能够找出一个索引值,表明这个值所在的范围,这正是我们所需要的。

    分段

    分段
    无论分成多少段,上面的程序框图都是适用的,需要修改的就是数组值的问题了,相对于使用CASE结构,肯定是简洁方便多了。
    --------------------------------------------------------------------------------------------------------------------------------
    补充:
    对于这种判断范围的问题,除了中间分段的范围,通常还包括两侧的问题,所以我在下面做一些补充。
    另外上面的程序框图也存在一个BUG,阙值插值函数返回的是双精度数,而数组的索引是I32数据类型。上图中采用的是自动转换,会出现四舍五入的问题,比如1.6会转换成2,这是错误的,应该采用向下取整,即1.6应该转换为1。
    我修改了X和Y的范围,增加两侧区间,见下图:

    包含上下限两头分段

    包含上下限两头分段
    在测试时,我发现阙值插值函数的特性,在大于24时,可以返回正确结果,但是在小于0时,函数返回NaN。这个问题很好解决,加一个判断就可以了,完整的程序框图如下图所示:

    改进分段

    改进分段
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    LabVIEW HALCON图像处理入门教程(第二版)
    石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
    《LabVIEW Vision函数实例详解》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-11-20 17:26

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表