自动化立体仓库:AGV与高级仓储技术

需积分: 11 1 下载量 37 浏览量 更新于2024-08-16 收藏 5.29MB PPT 举报
"自动导向车AGV-自动化立体仓库技术及应用" 自动化导向车(AGV)是现代仓储系统中的重要组成部分,它是一种能够在无需人工驾驶的情况下自动导航行驶的搬运工具。AGV通常由蓄电池供电,并配备直流电动机进行驱动,其承载能力广泛,从小型的50kg到大型的5000kg甚至100吨都有涵盖。根据不同应用场景,AGV分为自动导向搬运车、自动导向牵引车和自动导向叉车等多种类型,满足各种货物搬运需求。 自动化立体仓库(AS/RS)是高效利用空间存储货物的设施,因其层数多、空间利用率高而被称为“立体仓库”。这种仓库系统的核心特点是无需人工介入,能够自动进行物料的存取。自动化仓库系统包括高层货架、传输设备、存储设备、巷道堆垛起重机、控制系统、通讯系统以及计算机管理监控系统等多个子系统。其中,巷道堆垛起重机在自动化仓储作业中扮演关键角色,负责在货架间取放货物。 自动化立体仓库系统的主要组成如下: 1. 货架:用于存储货物,可以是多层结构,高度可达到数十米。 2. 传输设备:如输送机,用于将货物从生产线搬运到入库区或从出库区搬运到发货区。 3. 存储设备:包括托盘等,用于承载货物。 4. 堆垛机:按照计算机指令在货架间移动,完成货物的存取。 5. 控制系统:协调整个仓库的运作,包括调度堆垛机、监控设备状态等。 6. 通讯系统:确保各个设备之间的信息交流。 7. 计算机管理监控系统:负责库存管理、作业计划、故障诊断等功能。 以蒙牛自动化立体仓库为例,该仓库由太原刚玉物流工程有限公司设计制造,与生产线无缝对接,库区面积大,货架高度各异。仓库内分别设有常温和低温区,配备有大量货架货位,托盘尺寸标准化。入库和出库系统均采用自动化联机操作,通过链式输送机、双工位高速穿梭车、巷道堆垛机等设备协同工作,实现高效的货物存取。入库区的链式输送机与穿梭车负责将生产线上的货物运送到指定位置,而储存区的巷道堆垛机则根据指令进行货物的存取。此外,还设有专门的托盘回流区,用于回收和再利用空托盘。 自动导向车(AGV)与自动化立体仓库是现代化物流体系中的关键技术,它们显著提升了仓库运营效率,降低了人力成本,实现了仓储作业的智能化和无人化。随着科技的发展,这些技术将进一步优化,为物流行业带来更高的效率和更低的运营成本。

void AGVScheduler::assign_task_to_agv(std::vector<Task>& tasks, std::vector<AGV>& agvs) { // 首先按照任务的完成状态、优先级进行排序 std::sort(tasks.begin(), tasks.end(), [](const Task& task_1, const Task& task_2) { if (task_1.completed != task_2.completed) { return !task_1.completed; } else { return task_1.priority < task_2.priority; } }); for (const auto& task : tasks) { std::cout << "Task name: " << task.id << ", Completed: " << task.completed << ", Priority: " << task.priority << std::endl; } // 遍历任务列表,分配任务给可用的小车 for (auto& task : tasks) { if (!task.completed) { AGV* closest_agv = nullptr; // 初始化为 nullptr while (closest_agv == nullptr) { // 查找可用的小车 for (auto& agv : agvs) { if (agv.getState()) { closest_agv = &agv; break; } } if (closest_agv == nullptr) { // 没有可用的小车,等待一段时间再查找 std::this_thread::sleep_for(std::chrono::seconds(1)); } } // 找到最近的可用小车 int min_distance = INT_MAX; for (auto& agv : agvs) { if (agv.getState()) { int distance = abs(agv.getCurrentX()- task.start_x) + abs(agv.getCurrentY() - task.start_y); if (distance < min_distance) { min_distance = distance; closest_agv = &agv; } } } // 将任务分配给 AGV 对象的起点和终点坐标 closest_agv->setStartCoord(task.start_x, task.start_y); closest_agv->setEndCoord(task.end_x, task.end_y); closest_agv->setState(false); task.completed = true; std::cout << closest_agv->getid() << "," << task.id << endl; } } },當沒有小車用的時候就卡死,添加代碼,找到可用小車的開始運行,沒找到可用小車的一直等待,直到有可用小車

2023-05-24 上传

for (const auto& task : tasks) { //std::cout << "Task name: " << task.id << ", Completed: " << task.completed << ", Priority: " << task.priority << std::endl; } // 遍历任务列表,分配任务给可用的小车 for (auto& task : tasks) { if (task.completed == 0) { // 只分配未完成的任务 AGV* closest_agv = nullptr; int wait_time = 0; // 等待时间计数器 // 初始化为 nullptr while (closest_agv == nullptr && wait_time < 3) { // 最多等待 1 秒钟 // 查找可用的小车 for (auto& agv : agvs) { if (agv.getState()) { closest_agv = &agv; break; } } if (closest_agv == nullptr) { // 没有可用的小车,等待一段时间再查找 std::this_thread::sleep_for(std::chrono::seconds(1)); wait_time++; } } if (closest_agv != nullptr) { // 找到可用小车 // 找到最近的可用小车 int min_distance = INT_MAX; for (auto& agv : agvs) { if (agv.getState()) { int distance = abs(agv.getCurrentX()- task.start_x) + abs(agv.getCurrentY() - task.start_y); if (distance < min_distance) { min_distance = distance; closest_agv = &agv; } } } // 将任务分配给 AGV 对象的起点和终点坐标 closest_agv->setStartCoord(task.start_x, task.start_y); closest_agv->setEndCoord(task.end_x, task.end_y); closest_agv->setState(false); // 小车被占用 task.completed = 1; // 任务状态修改为进行中 std::cout << "agv_id" << closest_agv->getid() << "————" << "task_id"<<task.id << endl; } else { std::cout << "task_id-" << task.id << "No available AGV!" << endl; } } },修改爲黨沒有可用小車的時候直接退出

2023-05-24 上传