全球FlexSim系统仿真中文论坛

搜索
查看: 901|回复: 0
打印 上一主题 下一主题

AGV在加速、最大速度和减速时功耗可变

[复制链接]
跳转到指定楼层
1#
csn-support 发表于 2024-7-22 16:48:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当我们使用AGV.ampHours来获取电池中剩余的 ampHours时无论AGV是加速/以最大速度行驶/减速,它似乎都使用相同的功率。有没有办法对它们中的每一个使用可变功耗?: X. C( m$ K* f* g7 B4 P8 C

" N: k( N/ x& S# d6 Z( e
若使用自定义默认的AGV电池系统将会很困难。一般建议使用一个单独的跟踪变量标签(“动力学”类型)来表示电池,这样您可以完全控制它。
然后,您可以在 AGV 每次分配新控制点时解析运动学(因为运动学将在该点更新),并根据运动学的时间规划变量的速率变化。
您可以迭代 AGV 的运动学,直到根据运动学的开始和结束时间找到当前处于活动状态的运动学。
然后,您可以进一步将当前模型时间与 AGV 在该运动学中加速所花费的时间跨度进行比较。如果您发现 AGV 当前正在加速,您也可以从运动学中获取使用的加速度值。
您可以在工艺流程(PF)中,使用自定义逻辑,添加以下代码实现:
  • double curAccel = 0;
  • Object agvObj = Model.find("TaskExecuter1");  // As an example
  • AGV agv = AGV(agvObj);
  • treenode kinematics = agv.kinematics;
  • int rank = 1;
  • int numKinematics = getkinematics(kinematics, KINEMATIC_NR);
  • while(rank <= numKinematics)
  • {
  •     double kinEndTime = getkinematics(kinematics, KINEMATIC_ENDTIME, rank);
  •     double kinStartTime = getkinematics(kinematics, KINEMATIC_STARTTIME, rank);
  •     if(kinEndTime >= Model.time && kinStartTime <= Model.time)
  •     {
  •         double accTime1 = getkinematics(kinematics, KINEMATIC_ACC1TIME, rank);
  •         if(Model.time < kinStartTime + accTime1)
  •         {
  •             curAccel = getkinematics(kinematics, KINEMATIC_ACC1, rank);
  •             break;
  •         }
  •         double accTime2 = getkinematics(kinematics, KINEMATIC_ACC2TIME, rank);
  •         if(Model.time > kinEndTime - accTime2)
  •         {
  •             curAccel = getkinematics(kinematics, KINEMATIC_ACC2, rank);
  •             break;
  •         }
  •     }
  •     rank++;
  • }
  • return curAccel;* |8 B( o6 z9 i) C; m' }$ v
7 ], t- a3 k9 m; T) m: a% D

  C& _" H  `* }" A/ y$ G* Y) a5 d
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2025-5-7 04:26 , Processed in 0.055271 second(s), 13 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表