zoukankan      html  css  js  c++  java
  • Halcon算子翻译——for

    名称

    for - 启动一个通常是运行固定次数的迭代的循环分段,。

    用法

    for( : : Start, End, Step : Index)

    描述

      在HDevelop中的语法:for Index := Start to End by Step。

      for语句启动一个通常是运行固定次数的迭代的循环分段。 for分段结束于相应的endfor语句。

      迭代次数由Start值,End值和Step值共同决定。 所有这些参数都不一定是常量值,可以用表达式或变量初始化替代。 请注意,这些循环参数只被计算一次,即在for循环输入之前。 它们在循环之后不被重新计算,即在循环内对这些变量的任何修改都不会影响迭代次数。

      传递的循环参数必须是整型或实型。 如果所有输入参数都是整数类型的,那么Index变量也是整型。 在所有其他情况下,Index变量将是real类型的。

      在每次迭代开始时,将循环变量Index与End参数进行比较。 如果Step为正,则只要Index变量小于或等于End参数,就会运行for循环。 如果Step为负,则只要Index变量大于或等于End参数,就会执行for循环。

      注意:如果将Step设置为real类型的值,则在Index变量预期与上一个周期中的End值完全匹配的情况下,可能会因为四舍五入误差而忽略最后一个循环。 因此,在一些系统中,下面的循环没有按照预期的那样运行了四次(Index变量设置为1.3,1.4,1.5和1.6),只运行了三次,因为在三次加法之后,索引变量由于四舍五入的误差而略大于1.6。

      I:=[]
      for Index := 1.3 to 1.6 by 0.1
        I := [I,Index]
      endfor

      在循环内容的运行之后,即在到达相应的endfor语句或者continue语句之后,循环计数器Index的当前值会加上Step(在for循环的开始处被初始化)。 然后,如上所述重新判断循环条件。 根据结果,循环要么被重新运行,要么运行完毕。运行完毕时,将会继续运行相应的endfor语句之后的第一个语句。

      循环中的存在break语句---没有被更多的内部分段所覆盖(that is not covered by a more internal block)---立即离开循环,并在相应的endfor语句之后继续运行。 与之相反的是,continue语句用于忽略当前循环中其余的循环内容,并继续执行索引变量并重新判断循环条件。

      注意:在HALCON 11中,for循环相对于Index变量的行为发生了变化:在以前的版本中,循环体内的Index变量的变化被for语句忽略。 在判断循环条件之前,Index变量将被重置为一个内部计数器,计数器的计算公式如下:

      Index := Start + count * Step

      count是已经运行的循环次数。

      使用HALCON 11之前的HALCON版本保存的程序和程序(program and procedure)在加载时通​​过分析它们的for循环保持不变地运行:如果在循环体内修改了这样的for循环的Index变量,则循环被设置为兼容模式并会进行相应的标注。所有以这种方式标记的循环都是使用旧的语义执行的,即在每个循环周期之前将Index变量重置为内部计数器以保持旧的行为。在程序列表中,for语句由一个警告三角形和行尾的标签__use_internal_index__标记。另外,在算子窗口中也会显示警告。check box允许取消所选for循环的兼容模式,并使用新的语义执行。在全文编辑器中删除标签__use_internal_index__具有相同的效果。但是,为了保持程序行为,必须通过将循环体开头的Index变量复制到局部变量来稍微调整for循环体。这个局部变量可以在循环体内随意使用和修改。

      在任何情况下,建议避免在其内部修改for循环的Index变量,因为代码变得难以调试,代码将不兼容HALCON 11之前的HALCON版本。

      如果for循环停止,例如通过停止语句或按下停止按钮,并且如果用户手动放置PC(程序计数器),则只要PC还在for循环内,for循环在当前迭代中继续或者跳到endfor语句。 如果PC放置在在for语句中(或之前)并再次执行,则循环将重新初始化并在开始时重新启动。

    参数

    Start (input_control)   number → (integer / real)
    循环变量的起始值。
    默认值: 1


    End (input_control)    number → (integer / real)
    循环变量的结束值。
    默认值: 5


    Step (input_control)    number → (integer / real)
    循环变量的增量值。
    默认值: 1


    Index (output_control)    number → (integer / real)
    循环变量

    案例(HDevelop)

    read_image (Image, 'fabrik')
    threshold (Image, Region, 128, 255)
    connection (Region, ConnectedRegions)
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
    area_center (SelectedRegions, Area, Row, Column)
    dev_close_window ()
    dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
    dev_display (Image)
    dev_display (SelectedRegions)
    dev_set_color ('white')
    for Index := 0 to |Area| - 1 by 1
      set_tposition (WindowHandle, Row[Index], Column[Index])
      write_string (WindowHandle, 'Area=' + Area[Index])
    endfor

    结果

    如果指定参数的值是正确的,for(作为算子)返回2(H_MSG_TRUE)。 否则,会引发异常并返回错误代码。

    备选算子

    while, until

    See also

    repeat, break, continue, endfor

    模块

    Foundation

    HDevelop例程

    match_function_trans.hdev      Calculate transformation parameters between two functions
    fuzzy_measure_pin.hdev          Measure pins of an IC using fuzzy measuring
    for.hdev                Use a for loop to iterate over extracted blobs
    clip.hdev               Determine the position and orientation of clips
    assign.hdev               Assign values to variables and tuple elements

  • 相关阅读:
    java学习:字符串比较“==”与“equals”的差异及与c#的区别
    航空8联货运单的作用详解
    flash:二次贝塞尔曲线应用生成飞机路径示意图
    javascript:双链表插入排序
    javascript:算法笔记
    玩聚RT 加入对饭否的统计
    随手小记:创业瞎聊十点
    Python的win32serviceutil之疑似BUG
    撕书记忆法
    中文锐推榜优化·二
  • 原文地址:https://www.cnblogs.com/xhiong/p/7831516.html
Copyright © 2011-2022 走看看