|
@@ -484,18 +484,36 @@ void Dispatch_manager::resource_allocation()
|
|
std::this_thread::yield();
|
|
std::this_thread::yield();
|
|
std::unique_lock<std::mutex> t_lock(m_lock);
|
|
std::unique_lock<std::mutex> t_lock(m_lock);
|
|
|
|
|
|
- //sort resource_allocation
|
|
|
|
|
|
+ //排序和资源分配
|
|
if ( m_dispatch_plc.get_dispatch_plc_status() == Dispatch_plc::Dispatch_plc_status::DISPATCH_PLC_READY )
|
|
if ( m_dispatch_plc.get_dispatch_plc_status() == Dispatch_plc::Dispatch_plc_status::DISPATCH_PLC_READY )
|
|
{
|
|
{
|
|
if ( m_dispatch_motion_direction_next == Common_data::Dispatch_motion_direction::DISPATCH_MOTION_DIRECTION_PICKUP)
|
|
if ( m_dispatch_motion_direction_next == Common_data::Dispatch_motion_direction::DISPATCH_MOTION_DIRECTION_PICKUP)
|
|
{
|
|
{
|
|
- auto iter = m_dispatch_request_pickup_list.begin();
|
|
|
|
- if ( iter != m_dispatch_request_pickup_list.end() )
|
|
|
|
|
|
+ //判断2个出口是否空闲, 在资源分配时,提前分配好出口终端号
|
|
|
|
+ if ( Dispatch_manager::get_instance_references().m_dispatch_singlechip[2].is_outlet_ready() )
|
|
{
|
|
{
|
|
- m_dispatch_plc.execute_for_dispatch_request_msg(*iter);
|
|
|
|
- m_dispatch_request_pickup_list.erase(iter);
|
|
|
|
- m_pickup_updata_time = std::chrono::system_clock::now();
|
|
|
|
|
|
+ auto iter = m_dispatch_request_pickup_list.begin();
|
|
|
|
+ if ( iter != m_dispatch_request_pickup_list.end() )
|
|
|
|
+ {
|
|
|
|
+ iter->mutable_id_struct()->set_terminal_id(m_dispatch_manager_id*2);
|
|
|
|
+ m_dispatch_plc.execute_for_dispatch_request_msg(*iter);
|
|
|
|
+ m_dispatch_request_pickup_list.erase(iter);
|
|
|
|
+ m_pickup_updata_time = std::chrono::system_clock::now();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if ( Dispatch_manager::get_instance_references().m_dispatch_singlechip[3].is_outlet_ready() )
|
|
|
|
+ {
|
|
|
|
+ auto iter = m_dispatch_request_pickup_list.begin();
|
|
|
|
+ if ( iter != m_dispatch_request_pickup_list.end() )
|
|
|
|
+ {
|
|
|
|
+ iter->mutable_id_struct()->set_terminal_id(m_dispatch_manager_id*2+1);
|
|
|
|
+ m_dispatch_plc.execute_for_dispatch_request_msg(*iter);
|
|
|
|
+ m_dispatch_request_pickup_list.erase(iter);
|
|
|
|
+ m_pickup_updata_time = std::chrono::system_clock::now();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ //else什么也不做,直接切换到存车就行
|
|
|
|
+
|
|
m_dispatch_motion_direction_next = Common_data::Dispatch_motion_direction::DISPATCH_MOTION_DIRECTION_STORE;
|
|
m_dispatch_motion_direction_next = Common_data::Dispatch_motion_direction::DISPATCH_MOTION_DIRECTION_STORE;
|
|
}
|
|
}
|
|
else if ( m_dispatch_motion_direction_next == Common_data::Dispatch_motion_direction::DISPATCH_MOTION_DIRECTION_STORE )
|
|
else if ( m_dispatch_motion_direction_next == Common_data::Dispatch_motion_direction::DISPATCH_MOTION_DIRECTION_STORE )
|
|
@@ -503,6 +521,7 @@ void Dispatch_manager::resource_allocation()
|
|
auto iter = m_dispatch_request_store_list.begin();
|
|
auto iter = m_dispatch_request_store_list.begin();
|
|
if ( iter != m_dispatch_request_store_list.end() )
|
|
if ( iter != m_dispatch_request_store_list.end() )
|
|
{
|
|
{
|
|
|
|
+ iter->mutable_id_struct()->set_unit_id(m_dispatch_manager_id );
|
|
m_dispatch_plc.execute_for_dispatch_request_msg(*iter);
|
|
m_dispatch_plc.execute_for_dispatch_request_msg(*iter);
|
|
m_dispatch_request_store_list.erase(iter);
|
|
m_dispatch_request_store_list.erase(iter);
|
|
m_store_updata_time = std::chrono::system_clock::now();
|
|
m_store_updata_time = std::chrono::system_clock::now();
|
|
@@ -516,7 +535,7 @@ void Dispatch_manager::resource_allocation()
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- //store finish check and erese
|
|
|
|
|
|
+ //检查时间, 并删除存车完成
|
|
for (auto iter = m_dispatch_response_store_map.begin(); iter != m_dispatch_response_store_map.end();)
|
|
for (auto iter = m_dispatch_response_store_map.begin(); iter != m_dispatch_response_store_map.end();)
|
|
{
|
|
{
|
|
if ( std::chrono::system_clock::now() - iter->first > std::chrono::seconds(10) )
|
|
if ( std::chrono::system_clock::now() - iter->first > std::chrono::seconds(10) )
|
|
@@ -530,20 +549,20 @@ void Dispatch_manager::resource_allocation()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- //pickup finish check and erese //判断2个出口是否空闲
|
|
|
|
|
|
+ //检查出口, 并删除取车完成 //判断2个出口是否空闲
|
|
if ( Dispatch_manager::get_instance_references().m_dispatch_singlechip[2].is_outlet_ready() )
|
|
if ( Dispatch_manager::get_instance_references().m_dispatch_singlechip[2].is_outlet_ready() )
|
|
{
|
|
{
|
|
- if ( m_dispatch_response_pickup_map.find(0) != m_dispatch_response_pickup_map.end() )
|
|
|
|
|
|
+ if ( m_dispatch_response_pickup_map.find(m_dispatch_manager_id*2) != m_dispatch_response_pickup_map.end() )
|
|
{
|
|
{
|
|
- m_dispatch_response_pickup_map.erase(0);
|
|
|
|
|
|
+ m_dispatch_response_pickup_map.erase(m_dispatch_manager_id*2);
|
|
m_pickup_updata_time = std::chrono::system_clock::now();
|
|
m_pickup_updata_time = std::chrono::system_clock::now();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if ( Dispatch_manager::get_instance_references().m_dispatch_singlechip[3].is_outlet_ready() )
|
|
else if ( Dispatch_manager::get_instance_references().m_dispatch_singlechip[3].is_outlet_ready() )
|
|
{
|
|
{
|
|
- if ( m_dispatch_response_pickup_map.find(1) != m_dispatch_response_pickup_map.end() )
|
|
|
|
|
|
+ if ( m_dispatch_response_pickup_map.find(m_dispatch_manager_id*2+1) != m_dispatch_response_pickup_map.end() )
|
|
{
|
|
{
|
|
- m_dispatch_response_pickup_map.erase(1);
|
|
|
|
|
|
+ m_dispatch_response_pickup_map.erase(m_dispatch_manager_id*2+1);
|
|
m_pickup_updata_time = std::chrono::system_clock::now();
|
|
m_pickup_updata_time = std::chrono::system_clock::now();
|
|
}
|
|
}
|
|
}
|
|
}
|