Kaynağa Gözat

20220112, 取车查询出口,放到资源分配里面, 在排序之前查询空闲出口

huli 3 yıl önce
ebeveyn
işleme
ba788052ac

+ 31 - 12
dispatch/dispatch_manager.cpp

@@ -484,18 +484,36 @@ void Dispatch_manager::resource_allocation()
 			std::this_thread::yield();
 			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_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;
 				}
 				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();
 					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_request_store_list.erase(iter);
 						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();)
 			{
 			    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 ( 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();
 				}
 			}
 			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();
 				}
 			}

+ 15 - 48
dispatch/dispatch_plc.cpp

@@ -161,6 +161,15 @@ Error_manager Dispatch_plc::check_dispatch_request_msg(message::Dispatch_request
             dispatch_request_msg.has_id_struct() &&
             dispatch_request_msg.has_command_key())
     {
+		if ( m_dispatch_request_msg.dispatch_motion_direction() == message::Dispatch_motion_direction::E_STORE_CAR )
+		{
+			if ( dispatch_request_msg.id_struct().has_unit_id() )
+			{
+
+			}
+		}
+		else if( m_dispatch_request_msg.dispatch_motion_direction() == message::Dispatch_motion_direction::E_PICKUP_CAR )
+
         return Error_code::SUCCESS;
     }
     else
@@ -231,56 +240,14 @@ void Dispatch_plc::execute_thread_fun()
 					}
 					else
 					{
-						if ( m_dispatch_request_msg.dispatch_motion_direction() == message::Dispatch_motion_direction::E_STORE_CAR )
-						{
-							//封装 给plc的调度请求
-							m_result = encapsulate_dispatch_request_to_plc();
-							if ( m_result == Error_code::SUCCESS )
-							{
-								m_dispatch_plc_status = DISPATCH_PLC_WORKING;
-							}
-							else
-							{
-								m_dispatch_plc_status = DISPATCH_PLC_RESPONSE;
-							}
-						}
-						else if( m_dispatch_request_msg.dispatch_motion_direction() == message::Dispatch_motion_direction::E_PICKUP_CAR )
+						//封装 给plc的调度请求
+						m_result = encapsulate_dispatch_request_to_plc();
+						if ( m_result == Error_code::SUCCESS )
 						{
-							//判断2个出口是否空闲
-							if ( Dispatch_manager::get_instance_references().m_dispatch_singlechip[2].is_outlet_ready() )
-							{
-								m_outlet_id = 0;
-								//封装 给plc的调度请求
-								m_result = encapsulate_dispatch_request_to_plc(0);
-								if ( m_result == Error_code::SUCCESS )
-								{
-									m_dispatch_plc_status = DISPATCH_PLC_WORKING;
-								}
-								else
-								{
-									m_dispatch_plc_status = DISPATCH_PLC_RESPONSE;
-								}
-							}
-							else if ( Dispatch_manager::get_instance_references().m_dispatch_singlechip[3].is_outlet_ready() )
-							{
-								m_outlet_id = 1;
-								//封装 给plc的调度请求
-								m_result = encapsulate_dispatch_request_to_plc(1);
-								if ( m_result == Error_code::SUCCESS )
-								{
-									m_dispatch_plc_status = DISPATCH_PLC_WORKING;
-								}
-								else
-								{
-									m_dispatch_plc_status = DISPATCH_PLC_RESPONSE;
-								}
-							}
-							//else无限等待
+							m_dispatch_plc_status = DISPATCH_PLC_WORKING;
 						}
 						else
 						{
-							m_result =  Error_manager(Error_code::DISPATCH_PLC_DIRECTION_ERROR, Error_level::MINOR_ERROR,
-													  " DISPATCH_PLC_DIRECTION_ERROR fun error ");
 							m_dispatch_plc_status = DISPATCH_PLC_RESPONSE;
 						}
 					}
@@ -391,7 +358,7 @@ void Dispatch_plc::execute_thread_fun()
 
 
 //封装 给plc的调度请求
-Error_manager Dispatch_plc::encapsulate_dispatch_request_to_plc(int outlet_id)
+Error_manager Dispatch_plc::encapsulate_dispatch_request_to_plc()
 {
 	//把m_dispatch_request_msg的信息传给本地的数据缓存.
 	std::unique_lock<std::mutex> t_lock(m_lock);
@@ -407,7 +374,7 @@ Error_manager Dispatch_plc::encapsulate_dispatch_request_to_plc(int outlet_id)
 	{
 		m_request_dispatch_motion_direction = Common_data::Dispatch_motion_direction::DISPATCH_MOTION_DIRECTION_PICKUP;
 		m_request_passageway_direction = Common_data::Passageway_direction::PASSAGEWAY_DIRECTION_OUTLET;
-		m_request_passageway_id = m_dispatch_request_msg.mutable_id_struct()->unit_id()*2+outlet_id+1;//0~2出口单元号改为1~6
+		m_request_passageway_id = m_dispatch_request_msg.mutable_id_struct()->terminal_id()+1;//0~5入口终端号改为1~6
 
 	}
 	else

+ 1 - 1
dispatch/dispatch_plc.h

@@ -82,7 +82,7 @@ protected://member functions
 	void execute_thread_fun();
 
 	//封装 给plc的调度请求
-	Error_manager encapsulate_dispatch_request_to_plc(int outlet_id = 0);
+	Error_manager encapsulate_dispatch_request_to_plc();
 	//更新plc通信
 	Error_manager update_dispatch_plc_communication();
 	//检查plc答复反馈

+ 0 - 16
main.cpp

@@ -58,7 +58,6 @@ using namespace std;
 
 int main(int argc,char* argv[])
 {
-
 	int t_id = 0;
 	if ( argc == 2 )
 	{
@@ -90,21 +89,6 @@ int main(int argc,char* argv[])
 	std::cout << " huli test :::: " << " Dispatch_communication::get_instance_references().communication_init() = " << t_error.to_string() << std::endl;
 	std::cout << "Dispatch_communication = " << Dispatch_communication::get_instance_references().get_status() << std::endl;
 
-	Dispatch_communication::Dispatch_request_from_manager_to_plc_for_data a;
-	Dispatch_communication::Dispatch_request_from_manager_to_plc_for_key b;
-	Dispatch_communication::Dispatch_response_from_plc_to_manager c;
-
-	std::cout << " huli test :::: " << " sizeof(a) = " << sizeof(a) << std::endl;
-	std::cout << " huli test :::: " << " sizeof(b) = " << sizeof(b) << std::endl;
-	std::cout << " huli test :::: " << " sizeof(c) = " << sizeof(c) << std::endl;
-	int aa = Dispatch_communication::get_instance_references().m_send_buf_map[0].m_size;
-	int bb = Dispatch_communication::get_instance_references().m_send_buf_map[1].m_size;
-	int cc = Dispatch_communication::get_instance_references().m_receive_buf_map[0].m_size;
-	std::cout << " huli test :::: " << " aa = " << aa << std::endl;
-	std::cout << " huli test :::: " << " bb = " << bb << std::endl;
-	std::cout << " huli test :::: " << " cc = " << cc << std::endl;
-
-
 	t_error = Dispatch_manager::get_instance_references().dispatch_manager_init(t_id);
 	std::cout << " huli test :::: " << " Dispatch_manager::get_instance_references().dispatch_manager_init(0) = " << t_error.to_string() << std::endl;
 	std::cout << "Dispatch_manager = " << Dispatch_manager::get_instance_references().get_dispatch_manager_status() << std::endl;

+ 4 - 2
system/system_executor.cpp

@@ -54,7 +54,8 @@ Error_manager System_executor::check_msg(Communication_message* p_msg)
 				{
 					if ( t_dispatch_request_msg.dispatch_motion_direction() == message::Dispatch_motion_direction::E_STORE_CAR )
 					{
-						if ( t_dispatch_request_msg.mutable_id_struct()->terminal_id() == Dispatch_manager::get_instance_references().get_dispatch_manager_id()*2 ||
+						if ( t_dispatch_request_msg.id_struct().has_terminal_id() &&
+							 t_dispatch_request_msg.mutable_id_struct()->terminal_id() == Dispatch_manager::get_instance_references().get_dispatch_manager_id()*2 ||
 							 t_dispatch_request_msg.mutable_id_struct()->terminal_id() == Dispatch_manager::get_instance_references().get_dispatch_manager_id()*2+1)
 						{
 							return Error_code::SUCCESS;
@@ -62,7 +63,8 @@ Error_manager System_executor::check_msg(Communication_message* p_msg)
 					}
 					else if ( t_dispatch_request_msg.dispatch_motion_direction() == message::Dispatch_motion_direction::E_PICKUP_CAR )
 					{
-						if ( t_dispatch_request_msg.mutable_id_struct()->unit_id() == Dispatch_manager::get_instance_references().get_dispatch_manager_id() )
+						if ( t_dispatch_request_msg.id_struct().has_unit_id() &&
+						t_dispatch_request_msg.mutable_id_struct()->unit_id() == Dispatch_manager::get_instance_references().get_dispatch_manager_id() )
 						{
 							return Error_code::SUCCESS;
 						}