Browse Source

20210602, 调度流程 取车流程 搬运器+机器人

huli 4 years ago
parent
commit
37681473ac

+ 7 - 7
dispatch/carrier.cpp

@@ -364,7 +364,7 @@ Error_manager Carrier::update_actual_coordinates_id()
 	int t_index_min = 0;
 
 	//找出最近的坐标点
-	for (auto iter = tp_dispatch_coordinates->m_packspace_coordinates.begin(); iter != tp_dispatch_coordinates->m_packspace_coordinates.end(); ++iter)
+	for (auto iter = tp_dispatch_coordinates->m_packspace_coordinates_map.begin(); iter != tp_dispatch_coordinates->m_packspace_coordinates_map.end(); ++iter)
 	{
 		//只算x轴和z轴
 		t_distance_current = (m_actual_x - iter->second.x)*(m_actual_x - iter->second.x) + (m_actual_z - iter->second.z)*(m_actual_z - iter->second.z);
@@ -376,14 +376,14 @@ Error_manager Carrier::update_actual_coordinates_id()
 	}
 	m_actual_coordinates_id = t_index_min;
 
-	//3楼的搬运器不用加空间锁
-	if ( get_device_id() != 2 )
+	//更新空间锁, 只是 覆盖写入加锁.
+	if ( m_actual_coordinates_id != 0 )
 	{
-		//更新空间锁, 只是 覆盖写入加锁.
-		if ( m_actual_coordinates_id != 0 )
+		m_actual_coordinates_rows = (m_actual_coordinates_id-1) / Dispatch_coordinates::get_instance_references().m_space_lock_columns;
+		m_actual_coordinates_columns = (m_actual_coordinates_id-1) % Dispatch_coordinates::get_instance_references().m_space_lock_columns;
+		//3楼的搬运器不用加空间锁
+		if ( get_device_id() != 2 )
 		{
-			m_actual_coordinates_rows = (m_actual_coordinates_id-1) / Dispatch_coordinates::get_instance_references().m_space_lock_columns;
-			m_actual_coordinates_columns = (m_actual_coordinates_id-1) % Dispatch_coordinates::get_instance_references().m_space_lock_columns;
 			Dispatch_coordinates::get_instance_references().set_space_lock_for_carrier(m_actual_coordinates_rows, m_actual_coordinates_columns, m_device_id);
 		}
 	}

+ 1 - 1
dispatch/catcher.cpp

@@ -352,7 +352,7 @@ Error_manager Catcher::update_actual_coordinates_id()
 	float t_distance_current = 0;
 	int t_index_min = 0;
 	//找出最近的坐标点
-	for (auto iter = tp_dispatch_coordinates->m_packspace_coordinates.begin(); iter != tp_dispatch_coordinates->m_packspace_coordinates.end(); ++iter)
+	for (auto iter = tp_dispatch_coordinates->m_packspace_coordinates_map.begin(); iter != tp_dispatch_coordinates->m_packspace_coordinates_map.end(); ++iter)
 	{
 		//只算x轴和z轴
 		t_distance_current = (m_actual_x - iter->second.x)*(m_actual_x - iter->second.x) + (m_actual_z - iter->second.z)*(m_actual_z - iter->second.z);

+ 43 - 22
dispatch/dispatch_coordinates.cpp

@@ -72,7 +72,7 @@ Error_manager Dispatch_coordinates::dispatch_coordinates_init_from_protobuf(Disp
 		t_point3d.x = dispatch_coordinates_parameter_all.packspace_coordinates_parameters(i).x();
 		t_point3d.y = dispatch_coordinates_parameter_all.packspace_coordinates_parameters(i).y();
 		t_point3d.z = dispatch_coordinates_parameter_all.packspace_coordinates_parameters(i).z();
-		m_packspace_coordinates[id] = t_point3d;
+		m_packspace_coordinates_map[id] = t_point3d;
 	}
 
 	size = dispatch_coordinates_parameter_all.passageway_coordinates_parameters_size();
@@ -83,7 +83,7 @@ Error_manager Dispatch_coordinates::dispatch_coordinates_init_from_protobuf(Disp
 		t_point3d.x = dispatch_coordinates_parameter_all.passageway_coordinates_parameters(i).x();
 		t_point3d.y = dispatch_coordinates_parameter_all.passageway_coordinates_parameters(i).y();
 		t_point3d.z = dispatch_coordinates_parameter_all.passageway_coordinates_parameters(i).z();
-		m_passageway_coordinates[id] = t_point3d;
+		m_passageway_coordinates_map[id] = t_point3d;
 	}
 
 	size = dispatch_coordinates_parameter_all.carrier_coordinates_parameters_size();
@@ -94,7 +94,7 @@ Error_manager Dispatch_coordinates::dispatch_coordinates_init_from_protobuf(Disp
 		t_point3d.x = dispatch_coordinates_parameter_all.carrier_coordinates_parameters(i).x();
 		t_point3d.y = dispatch_coordinates_parameter_all.carrier_coordinates_parameters(i).y();
 		t_point3d.z = dispatch_coordinates_parameter_all.carrier_coordinates_parameters(i).z();
-		m_carrier_coordinates[id] = t_point3d;
+		m_carrier_coordinates_map[id] = t_point3d;
 	}
 
 	size = dispatch_coordinates_parameter_all.catcher_coordinates_parameters_size();
@@ -105,7 +105,7 @@ Error_manager Dispatch_coordinates::dispatch_coordinates_init_from_protobuf(Disp
 		t_point3d.x = dispatch_coordinates_parameter_all.catcher_coordinates_parameters(i).x();
 		t_point3d.y = dispatch_coordinates_parameter_all.catcher_coordinates_parameters(i).y();
 		t_point3d.z = dispatch_coordinates_parameter_all.catcher_coordinates_parameters(i).z();
-		m_catcher_coordinates[id] = t_point3d;
+		m_catcher_coordinates_map[id] = t_point3d;
 	}
 
 
@@ -130,10 +130,10 @@ Error_manager Dispatch_coordinates::dispatch_coordinates_init_from_protobuf(Disp
 	m_catcher_d2_min = dispatch_coordinates_parameter_all.catcher_d2_min();
 	m_catcher_d2_max = dispatch_coordinates_parameter_all.catcher_d2_max();
 
-	std::cout << " huli test :::: " << " m_packspace_coordinates.size() = " << m_packspace_coordinates.size() << std::endl;
-	std::cout << " huli test :::: " << " m_passageway_coordinates.size() = " << m_passageway_coordinates.size() << std::endl;
-	std::cout << " huli test :::: " << " m_carrier_coordinates.size() = " << m_carrier_coordinates.size() << std::endl;
-	std::cout << " huli test :::: " << " m_catcher_coordinates.size() = " << m_catcher_coordinates.size() << std::endl;
+	std::cout << " huli test :::: " << " m_packspace_coordinates_map.size() = " << m_packspace_coordinates_map.size() << std::endl;
+	std::cout << " huli test :::: " << " m_passageway_coordinates_map.size() = " << m_passageway_coordinates_map.size() << std::endl;
+	std::cout << " huli test :::: " << " m_carrier_coordinates_map.size() = " << m_carrier_coordinates_map.size() << std::endl;
+	std::cout << " huli test :::: " << " m_catcher_coordinates_map.size() = " << m_catcher_coordinates_map.size() << std::endl;
 
 	m_default_wheelbase = dispatch_coordinates_parameter_all.default_wheelbase();
 
@@ -185,6 +185,8 @@ Error_manager Dispatch_coordinates::dispatch_coordinates_init_from_protobuf(Disp
 	m_car_wheel_base_min = dispatch_coordinates_parameter_all.car_wheel_base_min();
 	m_car_wheel_base_max = dispatch_coordinates_parameter_all.car_wheel_base_max();
 
+	m_separated_distance_z = dispatch_coordinates_parameter_all.m_separated_distance_z();
+	m_separated_distance_x = dispatch_coordinates_parameter_all.m_separated_distance_x();
 
 	return Error_code::SUCCESS;
 }
@@ -207,17 +209,17 @@ Error_manager Dispatch_coordinates::get_distance(int coordinates_id_1, int coord
 	float t_distance_z = 0;
 
 	//检查合法性
-	if ( m_carrier_coordinates.find(coordinates_id_1) != m_carrier_coordinates.end() &&
-		 m_carrier_coordinates.find(coordinates_id_2) != m_carrier_coordinates.end() )
+	if ( m_carrier_coordinates_map.find(coordinates_id_1) != m_carrier_coordinates_map.end() &&
+		 m_carrier_coordinates_map.find(coordinates_id_2) != m_carrier_coordinates_map.end() )
 	{
 		//计算距离
 		if(coordinates_id_1 == coordinates_id_2)
 		{
 			distance = 0;
 		}
-		else if ( m_carrier_coordinates[coordinates_id_1].z == m_carrier_coordinates[coordinates_id_2].z )
+		else if ( m_carrier_coordinates_map[coordinates_id_1].z == m_carrier_coordinates_map[coordinates_id_2].z )
 		{
-			distance = m_carrier_coordinates[coordinates_id_1].x - m_carrier_coordinates[coordinates_id_2].x;
+			distance = m_carrier_coordinates_map[coordinates_id_1].x - m_carrier_coordinates_map[coordinates_id_2].x;
 			if ( distance<0 )
 			{
 				distance = -distance;
@@ -225,9 +227,9 @@ Error_manager Dispatch_coordinates::get_distance(int coordinates_id_1, int coord
 		}
 		else if ( parkspace_path == Dispatch_coordinates::Parkspace_path::LEFT_PATH )
 		{
-			t_distance_x = (m_carrier_coordinates[coordinates_id_1].x - m_carrier_default_x_left) +
-						   (m_carrier_coordinates[coordinates_id_2].x - m_carrier_default_x_left);
-			t_distance_z = m_carrier_coordinates[coordinates_id_1].z - m_carrier_coordinates[coordinates_id_2].z;
+			t_distance_x = (m_carrier_coordinates_map[coordinates_id_1].x - m_carrier_default_x_left) +
+						   (m_carrier_coordinates_map[coordinates_id_2].x - m_carrier_default_x_left);
+			t_distance_z = m_carrier_coordinates_map[coordinates_id_1].z - m_carrier_coordinates_map[coordinates_id_2].z;
 			if ( t_distance_z<0 )
 			{
 				t_distance_z = -t_distance_z;
@@ -236,9 +238,9 @@ Error_manager Dispatch_coordinates::get_distance(int coordinates_id_1, int coord
 		}
 		else if ( parkspace_path == Dispatch_coordinates::Parkspace_path::RIGHT_PATH )
 		{
-			t_distance_x = (m_carrier_default_x_right - m_carrier_coordinates[coordinates_id_1].x ) +
-						   (m_carrier_default_x_right - m_carrier_coordinates[coordinates_id_2].x );
-			t_distance_z = m_carrier_coordinates[coordinates_id_1].z - m_carrier_coordinates[coordinates_id_2].z;
+			t_distance_x = (m_carrier_default_x_right - m_carrier_coordinates_map[coordinates_id_1].x ) +
+						   (m_carrier_default_x_right - m_carrier_coordinates_map[coordinates_id_2].x );
+			t_distance_z = m_carrier_coordinates_map[coordinates_id_1].z - m_carrier_coordinates_map[coordinates_id_2].z;
 			if ( t_distance_z<0 )
 			{
 				t_distance_z = -t_distance_z;
@@ -247,12 +249,12 @@ Error_manager Dispatch_coordinates::get_distance(int coordinates_id_1, int coord
 		}
 		else if ( parkspace_path == Dispatch_coordinates::Parkspace_path::TEMPORARY_CACHE_PATH )
 		{
-			t_distance_x = m_carrier_coordinates[coordinates_id_1].x - m_carrier_coordinates[coordinates_id_2].x;
+			t_distance_x = m_carrier_coordinates_map[coordinates_id_1].x - m_carrier_coordinates_map[coordinates_id_2].x;
 			if ( t_distance_x<0 )
 			{
 				t_distance_x = -t_distance_x;
 			}
-			t_distance_z = m_carrier_coordinates[coordinates_id_1].z - m_carrier_coordinates[coordinates_id_2].z;
+			t_distance_z = m_carrier_coordinates_map[coordinates_id_1].z - m_carrier_coordinates_map[coordinates_id_2].z;
 			if ( t_distance_z<0 )
 			{
 				t_distance_z = -t_distance_z;
@@ -483,6 +485,25 @@ Error_manager Dispatch_coordinates::catcher_try_space_lock(int row_min, int colu
 							 " Dispatch_coordinates::carrier_try_space_lock error ");
 	}
 }
+//抓取器强制空间加锁(不做判断了, 直接加锁)
+Error_manager Dispatch_coordinates::catcher_force_space_lock(int row_min, int column_min, int row_max, int column_max, int catcher_id )
+{
+	//不做判断了, 直接加锁
+	std::unique_lock<std::mutex> t_lock(m_lock);
+	for (int i = row_min; i <= row_max; ++i)
+	{
+		for (int j = column_min; j <= column_max ; ++j)
+		{
+			if ( mpp_space_lock[i][j].m_catcher_id != -1 &&
+				 mpp_space_lock[i][j].m_catcher_id != catcher_id &&
+				 mpp_space_lock[i][j].m_carrier_id != -1)
+			{
+				mpp_space_lock[i][j].m_catcher_id = catcher_id;
+			}
+		}
+	}
+	return Error_code::SUCCESS;
+}
 //搬运器解锁, 退回电梯井, 全部解锁
 Error_manager Dispatch_coordinates::carrier_space_unlock(int carrier_id)
 {
@@ -516,14 +537,14 @@ Error_manager Dispatch_coordinates::catcher_space_unlock(int catcher_coordinates
 	//保留4楼的空间锁
 	if ( catcher_coordinates_id >= 34 && catcher_coordinates_id <= 42 )
 	{
-		int t_coordinates_columns = catcher_coordinates_id -30;
+		int t_coordinates_columns = catcher_coordinates_id -30-1;
 		catcher_4st_floor_space_lock(t_coordinates_columns, catcher_id);
 	}
 	else if ( catcher_coordinates_id >= 1401 && catcher_coordinates_id <= 1406 )
 	{
 		int t_coordinates_columns = catcher_coordinates_id - 1400;
 		int temp = (t_coordinates_columns-1)%2;
-		t_coordinates_columns = 4 + ((t_coordinates_columns-1)/2)*3 + temp*2;
+		t_coordinates_columns = 4 + ((t_coordinates_columns-1)/2)*3 + temp*2 -1;
 		catcher_4st_floor_space_lock(t_coordinates_columns, catcher_id);
 	}
 	else

+ 8 - 5
dispatch/dispatch_coordinates.h

@@ -86,6 +86,8 @@ public://API functions
 	Error_manager carrier_try_space_lock(int row_min, int column_min, int row_max, int column_max, int carrier_id, int & avoid_catcher_id );
 	//抓取器尝试空间加锁
 	Error_manager catcher_try_space_lock(int row_min, int column_min, int row_max, int column_max, int catcher_id );
+	//抓取器强制空间加锁(不做判断了, 直接加锁)
+	Error_manager catcher_force_space_lock(int row_min, int column_min, int row_max, int column_max, int catcher_id );
 	//搬运器解锁, 退回电梯井, 全部解锁
 	Error_manager carrier_space_unlock(int carrier_id);
 	//抓取器解锁, 上升到最上层, 全部解锁, 保留4楼的空间锁
@@ -117,19 +119,19 @@ public://member variable
 
 
 	//楼上车位的坐标 1~165
-	std::map<int, Point3D_tool::Point3D>	m_packspace_coordinates;
+	std::map<int, Point3D_tool::Point3D>	m_packspace_coordinates_map;
 
 	//一楼出入口的坐标 1100~1107
-	std::map<int, Point3D_tool::Point3D>	m_passageway_coordinates;
+	std::map<int, Point3D_tool::Point3D>	m_passageway_coordinates_map;
 
 	//搬运器在2~4楼交界处 的坐标 1201~1206 1301~1306 1401~1406
 	//搬运器在电梯井的坐标 2101~2112 2201~2212
 	//机器手在一楼出入口的坐标 1100 和 1107
-	std::map<int, Point3D_tool::Point3D>	m_carrier_coordinates;
+	std::map<int, Point3D_tool::Point3D>	m_carrier_coordinates_map;
 
 	//机器手在2~4楼交界处 的坐标 1201~1206 1301~1306 1401~1406
 	//机器手在一楼出入口的坐标 1101~1106
-	std::map<int, Point3D_tool::Point3D>	m_catcher_coordinates;
+	std::map<int, Point3D_tool::Point3D>	m_catcher_coordinates_map;
 
 
 	Point3D_tool::Point3D_box				m_carrier_box;//搬运器 限定范围
@@ -183,7 +185,8 @@ public://member variable
 	int										m_car_wheel_base_min;			//汽车轮距最小值, 默认1000
 	int										m_car_wheel_base_max;			//汽车轮距最大值, 默认4000
 
-
+	float 									m_separated_distance_z;		//机器人和搬运器分离时的z轴距离, 默认190
+	float 									m_separated_distance_x;		//机器人和搬运器分离时的x轴距离, 默认3600
 private:
 
 };

+ 8 - 8
dispatch/dispatch_manager.cpp

@@ -896,7 +896,7 @@ void Dispatch_manager::resource_allocation()
 								}
 
 							}
-							else if ( t_carrier_left_is_ready &&
+							else if ( t_carrier_left_is_pickup &&
 									  (t_parkspace_path == Dispatch_coordinates::Parkspace_path::LEFT_PATH || t_parkspace_path == Dispatch_coordinates::Parkspace_path::DOUBLE_PATH) )
 							{
 								m_carrier_map[0]->appoint_task((*iter)->m_command_key, (*iter)->m_dispatch_process_type, Dispatch_device_base::Dispatch_task_level::DISPATCH_TASK_ONE_LEVEL);
@@ -904,7 +904,7 @@ void Dispatch_manager::resource_allocation()
 								t_allocation_flag = true;
 								break;
 							}
-							else if ( t_carrier_right_is_ready &&
+							else if ( t_carrier_right_is_pickup &&
 									  (t_parkspace_path == Dispatch_coordinates::Parkspace_path::RIGHT_PATH || t_parkspace_path == Dispatch_coordinates::Parkspace_path::DOUBLE_PATH) )
 							{
 								m_carrier_map[1]->appoint_task((*iter)->m_command_key, (*iter)->m_dispatch_process_type, Dispatch_device_base::Dispatch_task_level::DISPATCH_TASK_ONE_LEVEL);
@@ -912,7 +912,7 @@ void Dispatch_manager::resource_allocation()
 								t_allocation_flag = true;
 								break;
 							}
-							else if ( t_carrier_3rd_is_ready && t_parkspace_path == Dispatch_coordinates::Parkspace_path::THIRD_FLOOR_PATH)
+							else if ( t_carrier_3rd_is_pickup && t_parkspace_path == Dispatch_coordinates::Parkspace_path::THIRD_FLOOR_PATH)
 							{
 								m_carrier_map[2]->appoint_task((*iter)->m_command_key, (*iter)->m_dispatch_process_type, Dispatch_device_base::Dispatch_task_level::DISPATCH_TASK_ONE_LEVEL);
 								(*iter)->set_main_carrier(m_carrier_map[2]);
@@ -958,7 +958,7 @@ void Dispatch_manager::resource_allocation()
 								(*iter)->m_temporary_cache_flag = false;
 							}
 							//分配合理的版搬运器
-							if ( t_carrier_left_is_ready && t_carrier_right_is_ready)
+							if ( t_carrier_left_is_store && t_carrier_right_is_store)
 							{
 								if ( (is_left_path && is_right_path) ||
 									 ( (!is_left_path) && (!is_right_path) && is_2nd_path) || //如果只能存到2楼, 那么也要执行
@@ -987,7 +987,7 @@ void Dispatch_manager::resource_allocation()
 									}
 								}
 							}
-							else if ( t_carrier_left_is_ready )
+							else if ( t_carrier_left_is_store )
 							{
 								if ( is_left_path ||
 									 ( (!is_left_path) && (!is_right_path) && is_2nd_path) || //如果只能存到2楼, 那么也要执行
@@ -999,7 +999,7 @@ void Dispatch_manager::resource_allocation()
 									break;
 								}
 							}
-							else if ( t_carrier_right_is_ready )
+							else if ( t_carrier_right_is_store )
 							{
 								if ( is_right_path ||
 									 ( (!is_left_path) && (!is_right_path) && is_2nd_path) || //如果只能存到2楼, 那么也要执行
@@ -1011,9 +1011,9 @@ void Dispatch_manager::resource_allocation()
 									break;
 								}
 							}
-							else if ( t_carrier_3rd_is_ready)
+							else if ( t_carrier_3rd_is_store)
 							{
-								if ( ( (!is_left_path) && (!is_right_path) && is_3rd_path) || //如果只能存到2楼, 那么也要执行
+								if ( ( (!is_left_path) && (!is_right_path) && is_3rd_path) || //如果只能存到3楼, 那么也要执行
 								(m_process_store_list.size() >= DISPATCH_MANAHER_STORE_LIST_SIZE_LIMIT && is_3rd_path) )	//存车流程数量超限
 								{
 									m_carrier_map[2]->appoint_task((*iter)->m_command_key, (*iter)->m_dispatch_process_type, Dispatch_device_base::Dispatch_task_level::DISPATCH_TASK_ONE_LEVEL);

+ 98 - 18
dispatch/dispatch_parameter.pb.cc

@@ -574,6 +574,8 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, car_wheel_base_min_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, car_wheel_base_max_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, parkspace_number_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, m_separated_distance_z_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, m_separated_distance_x_),
   ~0u,
   ~0u,
   ~0u,
@@ -617,6 +619,8 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT
   36,
   37,
   2,
+  38,
+  39,
 };
 static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
   { 0, 7, sizeof(::Dispatch_proto::Catcher_parameter)},
@@ -631,7 +635,7 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROT
   { 113, 124, sizeof(::Dispatch_proto::Catcher_box_parameter)},
   { 130, 137, sizeof(::Dispatch_proto::Axis_range_parameter)},
   { 139, 148, sizeof(::Dispatch_proto::Parkspace_number)},
-  { 152, 200, sizeof(::Dispatch_proto::Dispatch_coordinates_parameter_all)},
+  { 152, 202, sizeof(::Dispatch_proto::Dispatch_coordinates_parameter_all)},
 };
 
 static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -705,7 +709,7 @@ void AddDescriptorsImpl() {
       "_range_parameter\022\025\n\003min\030\001 \001(\005:\010-1000000\022"
       "\024\n\003max\030\002 \001(\005:\0071000000\"W\n\020Parkspace_numbe"
       "r\022\014\n\004rows\030\001 \002(\005\022\017\n\007columns\030\002 \002(\005\022\r\n\005tota"
-      "l\030\003 \002(\005\022\025\n\rliftway_width\030\004 \002(\005\"\314\r\n\"Dispa"
+      "l\030\003 \002(\005\022\025\n\rliftway_width\030\004 \002(\005\"\214\016\n\"Dispa"
       "tch_coordinates_parameter_all\022Y\n packspa"
       "ce_coordinates_parameters\030\001 \003(\0132/.Dispat"
       "ch_proto.Packspace_coordinates_parameter"
@@ -749,15 +753,17 @@ void AddDescriptorsImpl() {
       "ce_id_total\030( \001(\005\022\032\n\022car_wheel_base_min\030"
       ") \001(\005\022\032\n\022car_wheel_base_max\030* \001(\005\022:\n\020par"
       "kspace_number\030+ \002(\0132 .Dispatch_proto.Par"
-      "kspace_number*\321\001\n\036Passageway_functioning"
-      "_pattern\022*\n&PASSAGEWAY_FUNCTIONING_PATTE"
-      "RN_UNKNOWN\020\000\022(\n$PASSAGEWAY_FUNCTIONING_P"
-      "ATTERN_INLET\020\001\022)\n%PASSAGEWAY_FUNCTIONING"
-      "_PATTERN_OUTLET\020\002\022.\n*PASSAGEWAY_FUNCTION"
-      "ING_PATTERN_BIDIRECTION\020\003"
+      "kspace_number\022\036\n\026m_separated_distance_z\030"
+      ", \001(\005\022\036\n\026m_separated_distance_x\030- \001(\005*\321\001"
+      "\n\036Passageway_functioning_pattern\022*\n&PASS"
+      "AGEWAY_FUNCTIONING_PATTERN_UNKNOWN\020\000\022(\n$"
+      "PASSAGEWAY_FUNCTIONING_PATTERN_INLET\020\001\022)"
+      "\n%PASSAGEWAY_FUNCTIONING_PATTERN_OUTLET\020"
+      "\002\022.\n*PASSAGEWAY_FUNCTIONING_PATTERN_BIDI"
+      "RECTION\020\003"
   };
   ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-      descriptor, 3305);
+      descriptor, 3369);
   ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
     "dispatch_parameter.proto", &protobuf_RegisterTypes);
 }
@@ -5306,6 +5312,8 @@ const int Dispatch_coordinates_parameter_all::kThirdFloorParkspaceIdTotalFieldNu
 const int Dispatch_coordinates_parameter_all::kCarWheelBaseMinFieldNumber;
 const int Dispatch_coordinates_parameter_all::kCarWheelBaseMaxFieldNumber;
 const int Dispatch_coordinates_parameter_all::kParkspaceNumberFieldNumber;
+const int Dispatch_coordinates_parameter_all::kMSeparatedDistanceZFieldNumber;
+const int Dispatch_coordinates_parameter_all::kMSeparatedDistanceXFieldNumber;
 #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
 
 Dispatch_coordinates_parameter_all::Dispatch_coordinates_parameter_all()
@@ -5343,15 +5351,15 @@ Dispatch_coordinates_parameter_all::Dispatch_coordinates_parameter_all(const Dis
     parkspace_number_ = NULL;
   }
   ::memcpy(&catcher_b_min_, &from.catcher_b_min_,
-    static_cast<size_t>(reinterpret_cast<char*>(&car_wheel_base_max_) -
-    reinterpret_cast<char*>(&catcher_b_min_)) + sizeof(car_wheel_base_max_));
+    static_cast<size_t>(reinterpret_cast<char*>(&m_separated_distance_x_) -
+    reinterpret_cast<char*>(&catcher_b_min_)) + sizeof(m_separated_distance_x_));
   // @@protoc_insertion_point(copy_constructor:Dispatch_proto.Dispatch_coordinates_parameter_all)
 }
 
 void Dispatch_coordinates_parameter_all::SharedCtor() {
   ::memset(&carrier_box_parameters_, 0, static_cast<size_t>(
-      reinterpret_cast<char*>(&car_wheel_base_max_) -
-      reinterpret_cast<char*>(&carrier_box_parameters_)) + sizeof(car_wheel_base_max_));
+      reinterpret_cast<char*>(&m_separated_distance_x_) -
+      reinterpret_cast<char*>(&carrier_box_parameters_)) + sizeof(m_separated_distance_x_));
   _cached_size_ = 0;
 }
 
@@ -5436,10 +5444,10 @@ void Dispatch_coordinates_parameter_all::Clear() {
         reinterpret_cast<char*>(&carrier_default_y_leave_)) + sizeof(parkspace_id_max_));
   }
   cached_has_bits = _has_bits_[1];
-  if (cached_has_bits & 63u) {
+  if (cached_has_bits & 255u) {
     ::memset(&parkspace_id_total_, 0, static_cast<size_t>(
-        reinterpret_cast<char*>(&car_wheel_base_max_) -
-        reinterpret_cast<char*>(&parkspace_id_total_)) + sizeof(car_wheel_base_max_));
+        reinterpret_cast<char*>(&m_separated_distance_x_) -
+        reinterpret_cast<char*>(&parkspace_id_total_)) + sizeof(m_separated_distance_x_));
   }
   _has_bits_.Clear();
   _internal_metadata_.Clear();
@@ -6054,6 +6062,34 @@ bool Dispatch_coordinates_parameter_all::MergePartialFromCodedStream(
         break;
       }
 
+      // optional int32 m_separated_distance_z = 44;
+      case 44: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(96u /* 352 & 0xFF */)) {
+          set_has_m_separated_distance_z();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &m_separated_distance_z_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // optional int32 m_separated_distance_x = 45;
+      case 45: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(104u /* 360 & 0xFF */)) {
+          set_has_m_separated_distance_x();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &m_separated_distance_x_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
       default: {
       handle_unusual:
         if (tag == 0) {
@@ -6310,6 +6346,17 @@ void Dispatch_coordinates_parameter_all::SerializeWithCachedSizes(
       43, *this->parkspace_number_, output);
   }
 
+  cached_has_bits = _has_bits_[1];
+  // optional int32 m_separated_distance_z = 44;
+  if (cached_has_bits & 0x00000040u) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(44, this->m_separated_distance_z(), output);
+  }
+
+  // optional int32 m_separated_distance_x = 45;
+  if (cached_has_bits & 0x00000080u) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(45, this->m_separated_distance_x(), output);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
         _internal_metadata_.unknown_fields(), output);
@@ -6559,6 +6606,17 @@ void Dispatch_coordinates_parameter_all::SerializeWithCachedSizes(
         43, *this->parkspace_number_, deterministic, target);
   }
 
+  cached_has_bits = _has_bits_[1];
+  // optional int32 m_separated_distance_z = 44;
+  if (cached_has_bits & 0x00000040u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(44, this->m_separated_distance_z(), target);
+  }
+
+  // optional int32 m_separated_distance_x = 45;
+  if (cached_has_bits & 0x00000080u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(45, this->m_separated_distance_x(), target);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields(), target);
@@ -6863,7 +6921,7 @@ size_t Dispatch_coordinates_parameter_all::ByteSizeLong() const {
     }
 
   }
-  if (_has_bits_[32 / 32] & 63u) {
+  if (_has_bits_[32 / 32] & 255u) {
     // optional int32 parkspace_id_total = 37;
     if (has_parkspace_id_total()) {
       total_size += 2 +
@@ -6906,6 +6964,20 @@ size_t Dispatch_coordinates_parameter_all::ByteSizeLong() const {
           this->car_wheel_base_max());
     }
 
+    // optional int32 m_separated_distance_z = 44;
+    if (has_m_separated_distance_z()) {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->m_separated_distance_z());
+    }
+
+    // optional int32 m_separated_distance_x = 45;
+    if (has_m_separated_distance_x()) {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->m_separated_distance_x());
+    }
+
   }
   int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
   GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
@@ -7051,7 +7123,7 @@ void Dispatch_coordinates_parameter_all::MergeFrom(const Dispatch_coordinates_pa
     _has_bits_[0] |= cached_has_bits;
   }
   cached_has_bits = from._has_bits_[1];
-  if (cached_has_bits & 63u) {
+  if (cached_has_bits & 255u) {
     if (cached_has_bits & 0x00000001u) {
       parkspace_id_total_ = from.parkspace_id_total_;
     }
@@ -7070,6 +7142,12 @@ void Dispatch_coordinates_parameter_all::MergeFrom(const Dispatch_coordinates_pa
     if (cached_has_bits & 0x00000020u) {
       car_wheel_base_max_ = from.car_wheel_base_max_;
     }
+    if (cached_has_bits & 0x00000040u) {
+      m_separated_distance_z_ = from.m_separated_distance_z_;
+    }
+    if (cached_has_bits & 0x00000080u) {
+      m_separated_distance_x_ = from.m_separated_distance_x_;
+    }
     _has_bits_[1] |= cached_has_bits;
   }
 }
@@ -7145,6 +7223,8 @@ void Dispatch_coordinates_parameter_all::InternalSwap(Dispatch_coordinates_param
   swap(third_floor_parkspace_id_total_, other->third_floor_parkspace_id_total_);
   swap(car_wheel_base_min_, other->car_wheel_base_min_);
   swap(car_wheel_base_max_, other->car_wheel_base_max_);
+  swap(m_separated_distance_z_, other->m_separated_distance_z_);
+  swap(m_separated_distance_x_, other->m_separated_distance_x_);
   swap(_has_bits_[0], other->_has_bits_[0]);
   swap(_has_bits_[1], other->_has_bits_[1]);
   _internal_metadata_.Swap(&other->_internal_metadata_);

+ 68 - 0
dispatch/dispatch_parameter.pb.h

@@ -2254,6 +2254,20 @@ class Dispatch_coordinates_parameter_all : public ::google::protobuf::Message /*
   ::google::protobuf::int32 car_wheel_base_max() const;
   void set_car_wheel_base_max(::google::protobuf::int32 value);
 
+  // optional int32 m_separated_distance_z = 44;
+  bool has_m_separated_distance_z() const;
+  void clear_m_separated_distance_z();
+  static const int kMSeparatedDistanceZFieldNumber = 44;
+  ::google::protobuf::int32 m_separated_distance_z() const;
+  void set_m_separated_distance_z(::google::protobuf::int32 value);
+
+  // optional int32 m_separated_distance_x = 45;
+  bool has_m_separated_distance_x() const;
+  void clear_m_separated_distance_x();
+  static const int kMSeparatedDistanceXFieldNumber = 45;
+  ::google::protobuf::int32 m_separated_distance_x() const;
+  void set_m_separated_distance_x(::google::protobuf::int32 value);
+
   // @@protoc_insertion_point(class_scope:Dispatch_proto.Dispatch_coordinates_parameter_all)
  private:
   void set_has_carrier_box_parameters();
@@ -2332,6 +2346,10 @@ class Dispatch_coordinates_parameter_all : public ::google::protobuf::Message /*
   void clear_has_car_wheel_base_max();
   void set_has_parkspace_number();
   void clear_has_parkspace_number();
+  void set_has_m_separated_distance_z();
+  void clear_has_m_separated_distance_z();
+  void set_has_m_separated_distance_x();
+  void clear_has_m_separated_distance_x();
 
   ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
   ::google::protobuf::internal::HasBits<2> _has_bits_;
@@ -2378,6 +2396,8 @@ class Dispatch_coordinates_parameter_all : public ::google::protobuf::Message /*
   ::google::protobuf::int32 third_floor_parkspace_id_total_;
   ::google::protobuf::int32 car_wheel_base_min_;
   ::google::protobuf::int32 car_wheel_base_max_;
+  ::google::protobuf::int32 m_separated_distance_z_;
+  ::google::protobuf::int32 m_separated_distance_x_;
   mutable int _cached_size_;
   friend struct ::protobuf_dispatch_5fparameter_2eproto::TableStruct;
   friend void ::protobuf_dispatch_5fparameter_2eproto::InitDefaultsDispatch_coordinates_parameter_allImpl();
@@ -4717,6 +4737,54 @@ inline void Dispatch_coordinates_parameter_all::set_allocated_parkspace_number(:
   // @@protoc_insertion_point(field_set_allocated:Dispatch_proto.Dispatch_coordinates_parameter_all.parkspace_number)
 }
 
+// optional int32 m_separated_distance_z = 44;
+inline bool Dispatch_coordinates_parameter_all::has_m_separated_distance_z() const {
+  return (_has_bits_[1] & 0x00000040u) != 0;
+}
+inline void Dispatch_coordinates_parameter_all::set_has_m_separated_distance_z() {
+  _has_bits_[1] |= 0x00000040u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_has_m_separated_distance_z() {
+  _has_bits_[1] &= ~0x00000040u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_m_separated_distance_z() {
+  m_separated_distance_z_ = 0;
+  clear_has_m_separated_distance_z();
+}
+inline ::google::protobuf::int32 Dispatch_coordinates_parameter_all::m_separated_distance_z() const {
+  // @@protoc_insertion_point(field_get:Dispatch_proto.Dispatch_coordinates_parameter_all.m_separated_distance_z)
+  return m_separated_distance_z_;
+}
+inline void Dispatch_coordinates_parameter_all::set_m_separated_distance_z(::google::protobuf::int32 value) {
+  set_has_m_separated_distance_z();
+  m_separated_distance_z_ = value;
+  // @@protoc_insertion_point(field_set:Dispatch_proto.Dispatch_coordinates_parameter_all.m_separated_distance_z)
+}
+
+// optional int32 m_separated_distance_x = 45;
+inline bool Dispatch_coordinates_parameter_all::has_m_separated_distance_x() const {
+  return (_has_bits_[1] & 0x00000080u) != 0;
+}
+inline void Dispatch_coordinates_parameter_all::set_has_m_separated_distance_x() {
+  _has_bits_[1] |= 0x00000080u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_has_m_separated_distance_x() {
+  _has_bits_[1] &= ~0x00000080u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_m_separated_distance_x() {
+  m_separated_distance_x_ = 0;
+  clear_has_m_separated_distance_x();
+}
+inline ::google::protobuf::int32 Dispatch_coordinates_parameter_all::m_separated_distance_x() const {
+  // @@protoc_insertion_point(field_get:Dispatch_proto.Dispatch_coordinates_parameter_all.m_separated_distance_x)
+  return m_separated_distance_x_;
+}
+inline void Dispatch_coordinates_parameter_all::set_m_separated_distance_x(::google::protobuf::int32 value) {
+  set_has_m_separated_distance_x();
+  m_separated_distance_x_ = value;
+  // @@protoc_insertion_point(field_set:Dispatch_proto.Dispatch_coordinates_parameter_all.m_separated_distance_x)
+}
+
 #ifdef __GNUC__
   #pragma GCC diagnostic pop
 #endif  // __GNUC__

+ 3 - 0
dispatch/dispatch_parameter.proto

@@ -207,5 +207,8 @@ message Dispatch_coordinates_parameter_all
 
     required Parkspace_number                           parkspace_number=43;
 
+    optional int32                                      m_separated_distance_z=44;
+    optional int32                                      m_separated_distance_x=45;
+
 
 }

File diff suppressed because it is too large
+ 770 - 106
dispatch/dispatch_process.cpp


+ 63 - 5
dispatch/dispatch_process.h

@@ -162,7 +162,30 @@ public:
 		DISPATCH_CARRIER_PICKUP_57				= 257,
 		DISPATCH_CARRIER_PICKUP_58				= 258,
 		DISPATCH_CARRIER_PICKUP_59				= 259,
-
+		DISPATCH_CARRIER_PICKUP_60				= 260,
+		DISPATCH_CARRIER_PICKUP_61				= 261,
+
+		DISPATCH_CARRIER_PICKUP_70				= 270,
+		DISPATCH_CARRIER_PICKUP_71				= 271,
+		DISPATCH_CARRIER_PICKUP_72				= 272,
+		DISPATCH_CARRIER_PICKUP_73				= 273,
+		DISPATCH_CARRIER_PICKUP_74				= 274,
+		DISPATCH_CARRIER_PICKUP_75				= 275,
+		DISPATCH_CARRIER_PICKUP_76				= 276,
+		DISPATCH_CARRIER_PICKUP_77				= 277,
+		DISPATCH_CARRIER_PICKUP_78				= 278,
+		DISPATCH_CARRIER_PICKUP_79				= 279,
+
+		DISPATCH_CARRIER_PICKUP_80				= 280,
+		DISPATCH_CARRIER_PICKUP_81				= 281,
+		DISPATCH_CARRIER_PICKUP_82				= 282,
+		DISPATCH_CARRIER_PICKUP_83				= 283,
+		DISPATCH_CARRIER_PICKUP_84				= 284,
+		DISPATCH_CARRIER_PICKUP_85				= 285,
+		DISPATCH_CARRIER_PICKUP_86				= 286,
+		DISPATCH_CARRIER_PICKUP_87				= 287,
+		DISPATCH_CARRIER_PICKUP_88				= 288,
+		DISPATCH_CARRIER_PICKUP_89				= 289,
 		DISPATCH_CARRIER_PICKUP_END				= 299,
 
 
@@ -176,6 +199,40 @@ public:
 		DISPATCH_CATCHER_PICKUP_7				= 307,
 		DISPATCH_CATCHER_PICKUP_8				= 308,
 		DISPATCH_CATCHER_PICKUP_9				= 309,
+		DISPATCH_CATCHER_PICKUP_10				= 310,
+		DISPATCH_CATCHER_PICKUP_11				= 311,
+		DISPATCH_CATCHER_PICKUP_12				= 312,
+		DISPATCH_CATCHER_PICKUP_13				= 313,
+		DISPATCH_CATCHER_PICKUP_14				= 314,
+		DISPATCH_CATCHER_PICKUP_15				= 315,
+		DISPATCH_CATCHER_PICKUP_16				= 316,
+		DISPATCH_CATCHER_PICKUP_17				= 317,
+		DISPATCH_CATCHER_PICKUP_18				= 318,
+		DISPATCH_CATCHER_PICKUP_19				= 319,
+		DISPATCH_CATCHER_PICKUP_20				= 320,
+		DISPATCH_CATCHER_PICKUP_21				= 321,
+		DISPATCH_CATCHER_PICKUP_22				= 322,
+		DISPATCH_CATCHER_PICKUP_23				= 323,
+		DISPATCH_CATCHER_PICKUP_24				= 324,
+		DISPATCH_CATCHER_PICKUP_25				= 325,
+		DISPATCH_CATCHER_PICKUP_26				= 326,
+		DISPATCH_CATCHER_PICKUP_27				= 327,
+		DISPATCH_CATCHER_PICKUP_28				= 328,
+		DISPATCH_CATCHER_PICKUP_29				= 329,
+		DISPATCH_CATCHER_PICKUP_30				= 330,
+		DISPATCH_CATCHER_PICKUP_31				= 331,
+		DISPATCH_CATCHER_PICKUP_32				= 332,
+		DISPATCH_CATCHER_PICKUP_33				= 333,
+		DISPATCH_CATCHER_PICKUP_34				= 334,
+		DISPATCH_CATCHER_PICKUP_35				= 335,
+		DISPATCH_CATCHER_PICKUP_36				= 336,
+		DISPATCH_CATCHER_PICKUP_37				= 337,
+		DISPATCH_CATCHER_PICKUP_38				= 338,
+		DISPATCH_CATCHER_PICKUP_39				= 339,
+
+		DISPATCH_CATCHER_PICKUP_END				= 399,
+
+
 
 		DISPATCH_CARRIER_STORE_START			= 400, 	//取车流程 开始
 		DISPATCH_CARRIER_STORE_1				= 401,
@@ -233,13 +290,12 @@ public:
 		std::shared_ptr<Dispatch_device_base>	mp_main_catcher;						//调度设备指针, 内存由Dispatch_manager来管理
 		std::shared_ptr<Task_Base>				mp_main_catcher_task;					//调度任务指针, 内存由本模块管理
 		//跟随搬运器, 3号搬运器
-		bool									m_following_flag;						//3号搬运器是否跟随机器人
+		bool									m_following_flag;						//3号搬运器是否跟随机器人, 如果车位在3楼, 则为false
 		std::shared_ptr<Dispatch_device_base>	mp_following_carrier;					//调度设备指针, 内存由Dispatch_manager来管理
 		std::shared_ptr<Task_Base>				mp_following_carrier_task;				//调度任务指针, 内存由本模块管理
 		//目前没有让别人避让的功能
 
 		Error_manager							m_error;							//错误码
-
 	};
 
 	//调度设备搬运器节点
@@ -255,7 +311,6 @@ public:
 		std::shared_ptr<Task_Base>				mp_avoid_catcher_task;					//调度任务指针, 内存由本模块管理
 
 		Error_manager							m_error;							//错误码
-
 	};
 
 
@@ -375,6 +430,8 @@ protected://长流程
 	Error_manager excute_passageway_motion(Dispatch_control_node & dispatch_control_node);
 
 protected://短流程
+	//检查 任务单 是否完成任务, 里面不会调整短步骤
+	Error_manager check_task_status(std::shared_ptr<Task_Base> p_task);
 	//检查 任务单 是否完成任务, 里面会调整短步骤
 	Error_manager check_task_status(std::shared_ptr<Task_Base> p_task, Dispatch_control_status & dispatch_control_status);
 	//检查 任务单 是否完成任务, 里面会调整短步骤
@@ -412,7 +469,8 @@ protected://短流程
 	//搬运器 修正轴距
 	Error_manager carrier_adjust_wheel_base(Dispatch_control_node & dispatch_control_node, Carrier * tp_carrier, Carrier_task * tp_carrier_task, Dispatch_coordinates * tp_dispatch_coordinates);
 
-
+	//机器手 准备开始, 需要同步任务单和设备真实数据.
+	Error_manager catcher_ready_to_start(std::string dispatch_control_command_key, Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates);
 	//机器手调整到 正常待机的姿态(调节夹杆和轴距)
 	Error_manager catcher_adjust_to_ready(std::string dispatch_control_command_key, Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates);
 	//机器手 移动x

+ 5 - 0
setting/dispatch_coordinates.prototxt

@@ -3377,3 +3377,8 @@ parkspace_number
     liftway_width:3
 }
 
+m_separated_distance_z:190
+m_separated_distance_x:3600
+
+
+