You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flexsim(类C#)如何用do while实现每千件货品自动切换端口

Flexsim下类do-while循环的端口切换实现方案

你这个场景不需要刻意套用do-while的语法格式,核心要解决的是状态持久化存储问题,你原来的代码逻辑失效全是因为变量作用域和判断逻辑写反了:

  • 原代码里的id、count都是单次逻辑执行时的局部变量,每次触发路由判断都会重新初始化,既存不住累计通过的货品数,也记不住当前应该启用的输出端口
  • 判断条件完全写反:逻辑是累计满1000个才切端口,你写的是计数小于1000就执行切换
  • 计数重置时机错误,应该是完成端口切换后再清零计数,而不是未达阈值就重置

正确实现逻辑如下,利用Flexsim的对象标签做持久化存储,执行逻辑完全匹配do-while“先执行固定逻辑、再判断条件触发分支”的特性:

// 首次执行时初始化持久化存储标签,仅初始化一次
if (!current.labels.assert("activePort", 1)) {
    current.labels.assert("itemCount", 0);
}

// 每次触发必执行的计数逻辑,对应do-while的do块
double currentCount = current.labels["itemCount"].value + 1;
current.labels["itemCount"].value = currentCount;
int targetPort = current.labels["activePort"].value;

// 阈值判断逻辑,对应do-while的条件判断块
if (currentCount >= 1000) {
    // 两个端口间来回切换
    targetPort = targetPort == 1 ? 2 : 1;
    current.labels["activePort"].value = targetPort;
    // 切换完成后重置计数
    current.labels["itemCount"].value = 0;
}

// 返回当前路由的目标端口
return targetPort;

注意:这段代码需要绑定在分流对象的「输出端口选择」触发事件上,不要绑定在货品进入、处理器加工完成等其他事件上,否则会出现计数不准的问题。

逻辑运行后会一直保持当前端口的路由状态,直到累计通过1000个货品才会触发一次切换,切换后继续保持状态,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者JoseGtzr99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:39:22