如何关联Slider滑块与数据库 动态赋值AGV速度变量v_agvSpeed
实现步骤
按下面3步配置就能完成关联,没有额外复杂依赖:
1. 先把Excel参数表导入为可查询的内置数据集
- 在Main的控件面板找到
Connectivity分类,拖入ExcelFile控件,命名为excel_agvParam,属性页选中你存速度参数的Excel文件,勾选模型启动时自动读取数据。 - 你的表结构是第一列存周期时长(和Slider取值对应),后续27列依次对应27个作业周期的AGV速度,直接拖入一个
TableFunction控件(命名为tf_speedMap)做映射查询:属性里设置数据源为刚才导入的Excel文件,框选参数表的有效数据范围,设置第一列为自变量(即周期时长),其余列按顺序对应27个作业周期的速度因变量。
注意:如果Slider选的周期时长都是固定离散值(比如只有50s/60s/70s这类预设档位),把TableFunction的插值模式改成「最近值匹配」,不要用线性插值,避免非准确档位取到错误的计算速度。
2. 配置Slider的值变更触发逻辑
- 找到你用来调整周期时长的Slider控件,在属性的
On change(值变更触发)回调里写匹配逻辑,每次拖动滑块改周期时长时自动更新速度:
// 替换成你模型里判断AGV当前所在作业周期的逻辑,返回值为0-26的序号,和Excel列顺序一一对应 int currentCycle = agv.location().getCycleIndex(); // 从映射表里取对应周期时长、对应作业周期的速度,赋值给全局速度变量 v_agvSpeed = tf_speedMap.get(Slider绑定的周期时长变量, currentCycle);
- 序号对应关系不要错:比如Excel里第二列(第一列是周期时长)对应第1个作业周期,那这个周期的索引值就填0,TableFunction的列索引从0开始计数。
3. 补全区段切换时的速度更新逻辑
- 你现在已经把
Move To块的移动速度绑定到v_agvSpeed,但要注意不要只在模型启动时给这个变量赋一次值:在每个作业周期区段的入口位置加触发逻辑,AGV刚进入该区段时,重新执行一遍上面的速度查询赋值代码,保证AGV在不同区段自动切换到对应速度。 - 如果是单AGV场景直接给全局变量赋值即可,如果是多AGV场景,把速度变量改成AGV智能体的自有参数,每个AGV进区段时单独查值赋值,避免多车速度冲突。
校验方式
把Slider调到60.0sec档位,逐段核对每个作业区段的AGV运行速度,和Excel表中60sec行的对应列数值完全一致就说明关联正常。
内容的提问来源于stack exchange,提问作者SimulationNewBe
相关产品推荐
相关产品推荐

