if (agvs[i].getLoad() == true){ //如果是負載的狀態,則任務的起點到任務的終點 if (agvs[i].getCurrentX() == agvs[i].getEndX() && agvs[i].getCurrentY() == agvs[i].getEndY()) { agvs[i].setState(true); agvs[i].setLoad(false); //int w = agvs[i].get_task_id(); tasks[i].setCompleted(2);//錯誤:第i個小車,不是第i個任務 update(); task_to_agv(); } else { Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node1 = new Node(agvs[i].getEndX(), agvs[i].getEndY()); std::vector<Node*> path_to_end = astar.getPath(start_node, end_node1); path_to_end.erase(path_to_end.begin()); std::vector<Node*> path; path.insert(path.end(), path_to_end.begin(), path_to_end.end()); paths[i] = path; } } //如果是空載的狀態,則行駛到任務的起點 //如果agv已經到達任務起點,變爲負載狀態 if (agvs[i].getLoad() == false) { if(agvs[i].getCurrentX() == agvs[i].getStartX() && agvs[i].getCurrentY() == agvs[i].getStartY()) { agvs[i].setLoad(true); } else{ Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node = new Node(agvs[i].getStartX(), agvs[i].getStartY()); std::vector<Node*> path_to_start = astar.getPath(start_node, end_node); std::vector<Node*> path; path.insert(path.end(), path_to_start.begin() + 1, path_to_start.end()); paths[i] = path; } },有沒有錯誤
时间: 2023-12-10 20:40:16 浏览: 85
AGVS.rar_AGVS调度_gulf5j4_scheduling AGV_wpf agv调度系统_调度控制
5星 · 资源好评率100%
这段代码可能存在一些错误,具体如下:
1. 在第一个if语句中,如果agvs[i].getCurrentX() == agvs[i].getEndX() && agvs[i].getCurrentY() == agvs[i].getEndY()为false,那么没有给paths[i]赋值,可能会导致程序出错。
2. 在第二个if语句中,如果agvs[i].getCurrentX() == agvs[i].getStartX() && agvs[i].getCurrentY() == agvs[i].getStartY()为false,那么也没有给paths[i]赋值,可能会导致程序出错。
3. 在第一个if语句中,当agvs[i].getLoad()为true时,应该执行行驶路径的代码段,在else语句中应该执行到达终点后的代码段;当agvs[i].getLoad()为false时,应该执行行驶路径的代码段,在else语句中应该执行到达起点后的代码段。目前的代码逻辑有些混乱。
4. 在第一个if语句中,如果agvs[i].getCurrentX() == agvs[i].getEndX() && agvs[i].getCurrentY() == agvs[i].getEndY()为true,应该先设置agvs[i].setLoad(false),再执行agvs[i].setState(true),否则可能会导致状态设置错误。
5. 在第一个if语句中,应该先更新任务状态为已完成,再调用update()和task_to_agv()函数。
综上所述,可以对代码进行如下修改:
```c++
if (agvs[i].getLoad() == true) { // 如果是负载的状态
if (agvs[i].getCurrentX() == agvs[i].getEndX() && agvs[i].getCurrentY() == agvs[i].getEndY()) { // 如果到达终点
agvs[i].setLoad(false); // 设置为空载状态
agvs[i].setState(true);
tasks[agvs[i].get_task_id()].setCompleted(2); // 更新任务状态为已完成
task_to_agv(); // 更新任务分配
update(); // 更新AGV状态
} else { // 否则行驶到终点
Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY());
Node* end_node1 = new Node(agvs[i].getEndX(), agvs[i].getEndY());
std::vector<Node*> path_to_end = astar.getPath(start_node, end_node1);
path_to_end.erase(path_to_end.begin());
std::vector<Node*> path;
path.insert(path.end(), path_to_end.begin(), path_to_end.end());
paths[i] = path;
}
} else { // 如果是空载的状态
if (agvs[i].getCurrentX() == agvs[i].getStartX() && agvs[i].getCurrentY() == agvs[i].getStartY()) { // 如果到达起点
agvs[i].setLoad(true); // 设置为负载状态
} else { // 否则行驶到起点
Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY());
Node* end_node = new Node(agvs[i].getStartX(), agvs[i].getStartY());
std::vector<Node*> path_to_start = astar.getPath(start_node, end_node);
std::vector<Node*> path;
path.insert(path.end(), path_to_start.begin() + 1, path_to_start.end());
paths[i] = path;
}
}
```
阅读全文