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
相关产品推荐
相关产品推荐

