Intouch For循环语句用法
For循环可以反复执行一段代码。InTouch HMI 仅支持 FOR循环。FOR循环按所监视的每次循环迭代产生的递增或递减的数值循环变量值来进行。循环一直执行到循环变量值达到设定值。 For循环语法如下: FOR LoopTag = StartExpression TO EndExpression [STEP ChangeExpression] ... 语句或另一个 FOR 循环 ... NEXT; StartExpression, EndExpression 与ChangeExpression 共同定义迭代次数。 StartExpression 设置循环范围的开始值。EndExpression 设置循环范围的结束值。 STEPChangeExpression 可选择设置每次循环迭代过程中循环标记所递增或递减的值;如果不指定此值,则使用缺省值1,即每次循环对LoopTag加1。 例子e.g: FOR i=1 TO 100 STEP 2 ...........语句 NEXT; //表示每次循环i加2,总计循环50次 执行 FOR 循环时, InTouch HMI: 1 将 LoopTag 设置为 StartExpression 的值。 2 测试 LoopTag 是否大于 EndExpression。如果是,InTouch HMI 退出循环。(如果ChangeExpression 为负数,则 InTouch HMI 测试 LoopTag 是否小于EndExpression)。 3 执行循环内的语句。 4 按 ChangeExpression 的值(除非另外指定,否则设为 1)递增 LoopTag。 5 重复步骤 2 到 4直到LoopTag达到 EndExpression的值。 使用 FOR 循环时请记住以下规则: 1.FOR 循环可以嵌套。最大嵌套级数取决于可用的内存与系统资源。 2.对于每个 FOR 语句,必有一个 NEXT 结束语句。与If...else语句相同,在同一嵌套级别中, NEXT 语句总是应用于前面最接近的 FOR 语句。 3.LoopTag必须是数值标记(或局部变量),比如整形标记。 4.StartExpression、EndExpression以及ChangeExpression必须是赋值为数值结果的有效表达式,比如整形标记。 5.如果 ChangeExpression 为正, EndExpression 必须大于 StartExpression ;反之如果 ChangeExpression 为负,StartExpression 必须大于 EndExpression。否则循环不会开始。
强制结束循环 您可以通过调用语句 EXIT FOR; 在任何时间退出循环。此语句使脚本继续执行紧接着循环 NEXT 语句后的其他语句。 示例 下面的代码段使用循环将大量的虚拟记录插入数据库表。如果插入记录时发生错误,则放弃循环以防止产生更多错误。 FORCounter = 1 TO 1000 ResultCode= SQLInsert(ConnectionID, "BatchDetails","BindList1"); IFResultCode <> 0 THEN LogMessage("Errorcreating records!Aborting..."); EXIT FOR; ENDIF; NEXT;
循环对其它运行时进程的影响 执行 FOR 循环时, WindowViewer 中的所有其它运行时进程都暂停。包括以下进程: 1.屏幕更新(动画链接、值显示、趋势等)。到循环完成之前不会发生任何移动,因此不能给动画对象使用 FOR循环。 2. I/O 通讯。例如,如果修改 FOR 循环中 I/O 标记的值,则只有最终的迭代后面的值才会写入 I/O 设备。 3. 其它脚本,包括异步 QuickFunction。 您可以通过将 FOR 循环放入异步 QuickFunction 来避免暂停其它运行时进程。
循环执行的时间限制 为避免无限循环,程序设置了一个时间限制, FOR 循环必须在这个时间限制内完成执行否则WindowViewer 会自动终止循环它,并将一条关于终止的消息写入 Log Viewer中。默认缺省的循环时间限制为 5 秒。可以通过向应用程序目录中的 intouch.ini文件添加下面这行以对它进行自定义循环时间: LoopTimeout=x 将 x 替换成以秒为单位的时间限制。 备注:时间限制仅在循环的 NEXT 结束循环语句中检查。因此,循环的第一次总是会执行,即便它花费的时间比时间限制更长。
For循环的示例 以下脚本通过一个简单的循环与一个间接标记,使用 0 值来初始化 100 个标记(Tag001 到 Tag100): DIMCounter AS INTEGER; FOR Counter = 1 TO 100 IndirectInteger.Name= "Tag" + Text(Counter, "000"); IndirectInteger.Value= 0; NEXT; 以下脚本通过两个嵌套的循环与一个间接标记,使用 0 来初始化 1000 个标记(Line01_Tag001 到 Line10_Tag100): DIMLineCounter AS INTEGER; DIMTagCounter AS INTEGER; FORLineCounter = 1 TO 10 FOR TagCounter = 1 TO 100 IndirectInteger.Name = "Line" +Text(LineCounter,"00") + "_Tag" +Text(TagCounter, "000"); IndirectInteger.Value = 0; NEXT; NEXT;
提交
超越传统直觉,MATLAB/Simulink助力重型机械的智能化转型
新大陆自动识别精彩亮相2024华南国际工业博览会
派拓网络被Forrester评为XDR领域领导者
智能工控,存储强基 | 海康威视带来精彩主题演讲
展会|Lubeworks路博流体供料系统精彩亮相AMTS展会