全球FlexSim系统仿真中文论坛
标题: AGV在加速、最大速度和减速时功耗可变 [打印本页]
作者: csn-support 时间: 2024-7-22 16:48
标题: AGV在加速、最大速度和减速时功耗可变
当我们使用AGV.ampHours来获取电池中剩余的 ampHours时,无论AGV是加速/以最大速度行驶/减速,它似乎都使用相同的功率。有没有办法对它们中的每一个使用可变功耗?; d9 Z6 L: H) r6 t& m1 E
5 y( r$ ?3 j8 O. 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;
$ R4 h# w9 d' _3 l K. W7 c
1 o' U& I$ w9 B6 z
( q7 C- R* s8 V" k
欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) |
Powered by Discuz! X3.3 |