while (agvs[i].battery_ < 100) { agvs[i].setState(2);// 设置AGV状态为充电 std::this_thread::sleep_for(std::chrono::seconds(1)); if (agvs[i].battery_ + 10 <= 100) { agvs[i].battery_ += 10; // 假设每秒充电10% } else { agvs[i].battery_ = 100; // 电量达到100后,不再进行充电操作 } } agvs[i].setState(0);// 设置AGV状态为空载 if (agvs[i].battery_ == 100) { // 设置充电站为可用状态 for (int j = 0; j < charges.size(); j++) { if (agvs[i].end_x_ == charges[j].charge_x && agvs[i].end_y_ == charges[j].charge_y) { charges[j].setavailable(true); break; } } // 更新任务分配 agvs[i].setAvailable(true); tasks[completed_task_index].completed = 2; scheduler.assign_task_to_agv(tasks, agvs); },一個小車在充電的時候,其他小車都暫停了,怎麽修改
时间: 2024-02-10 14:06:41 浏览: 81
你可以在小车的充电过程中,让其他小车执行其他任务,这样就不会因为一个小车的充电而导致其他小车暂停了。
你可以先检查其他小车是否有任务可以执行,如果有任务,就让它们执行任务。如果没有任务,你可以让它们等待一段时间,再检查是否有任务可以执行。
修改后的代码如下:
```
while (agvs[i].battery_ < 100) {
agvs[i].setState(2);// 设置AGV状态为充电
std::this_thread::sleep_for(std::chrono::seconds(1));
if (agvs[i].battery_ + 10 <= 100) {
agvs[i].battery_ += 10; // 假设每秒充电10%
} else {
agvs[i].battery_ = 100; // 电量达到100后,不再进行充电操作
}
// 让其他小车执行其他任务
for (int j = 0; j < agvs.size(); j++) {
if (j != i && !agvs[j].isCharging() && agvs[j].hasTask()) {
agvs[j].executeTask();
}
}
// 让其他小车等待一段时间,再检查是否有任务可以执行
std::this_thread::sleep_for(std::chrono::seconds(5));
}
agvs[i].setState(0);// 设置AGV状态为空载
if (agvs[i].battery_ == 100) {
// 设置充电站为可用状态
for (int j = 0; j < charges.size(); j++) {
if (agvs[i].end_x_ == charges[j].charge_x && agvs[i].end_y_ == charges[j].charge_y) {
charges[j].setavailable(true);
break;
}
}
// 更新任务分配
agvs[i].setAvailable(true);
tasks[completed_task_index].completed = 2;
scheduler.assign_task_to_agv(tasks, agvs);
}
```
这样,当一个小车在充电的时候,其他小车可以执行其他任务,从而提高了整个系统的效率。
阅读全文
相关推荐














