huli 4 лет назад
Родитель
Сommit
5eb24a3d8a

+ 1 - 0
dispatch/carrier_task.cpp

@@ -12,6 +12,7 @@ Carrier_task::Carrier_task()
 	m_task_statu_information.clear();
 	m_task_error_manager.error_manager_clear_all();
 
+	m_step = 0;
 
 	m_request_x = 0;				//搬运器坐标x轴,
 	m_request_y = 0;				//搬运器坐标y轴,

+ 1 - 0
dispatch/carrier_task.h

@@ -51,6 +51,7 @@ protected://member functions
 public://member variable
 
 	std::mutex							m_lock;	//锁
+	int 								m_step;//长流程细分为短流程, m_step 控制短流程的步骤
 
 //调度下发到plc
 	std::string							m_request_key;				//请求唯一码, 用作识别

+ 2 - 0
dispatch/catcher_task.cpp

@@ -13,6 +13,8 @@ Catcher_task::Catcher_task()
 	m_task_statu_information.clear();
 	m_task_error_manager.error_manager_clear_all();
 
+	m_step = 0;
+
 	m_request_x = 0;				//机器人坐标x轴,
 	m_request_y = 0;				//机器人坐标y轴,
 	m_request_b = 0;				//机器人坐标b轴, 旋转范围80~280

+ 1 - 0
dispatch/catcher_task.h

@@ -47,6 +47,7 @@ protected://member variable
 
 public:
 	std::mutex							m_lock;	//锁
+	int 								m_step;//长流程细分为短流程, m_step 控制短流程的步骤
 
 	//调度下发到plc
 	std::string							m_request_key;				//请求唯一码, 用作识别

+ 7 - 0
dispatch/dispatch_coordinates.cpp

@@ -119,5 +119,12 @@ Error_manager Dispatch_coordinates::dispatch_coordinates_init_from_protobuf(Disp
 	m_catcher_3th_floor_z = dispatch_coordinates_parameter_all.catcher_3th_floor_z();
 	m_catcher_4th_floor_z = dispatch_coordinates_parameter_all.catcher_4th_floor_z();
 	m_catcher_d1_d2_distance = dispatch_coordinates_parameter_all.catcher_d1_d2_distance();
+	m_catcher_wheel_base_limit = dispatch_coordinates_parameter_all.catcher_wheel_base_limit();
+	m_carrier_default_y1_back = dispatch_coordinates_parameter_all.carrier_default_y1_back();
+	m_carrier_default_y1_leave = dispatch_coordinates_parameter_all.carrier_default_y1_leave();
+	m_carrier_default_y_back = dispatch_coordinates_parameter_all.carrier_default_y_back();
+	m_carrier_default_y_leave = dispatch_coordinates_parameter_all.carrier_default_y_leave();
+	m_carrier_default_x_left = dispatch_coordinates_parameter_all.carrier_default_x_left();
+	m_carrier_default_x_right = dispatch_coordinates_parameter_all.carrier_default_x_right();
 	return Error_code::SUCCESS;
 }

+ 14 - 4
dispatch/dispatch_coordinates.h

@@ -73,12 +73,22 @@ public://member variable
 
 	float 									m_default_wheelbase;		//默认轴距
 
-	float 									m_catcher_1th_floor_z;			//机器手在1楼的z周高度
-	float 									m_catcher_2th_floor_z;
-	float 									m_catcher_3th_floor_z;
-	float 									m_catcher_4th_floor_z;
+	float 									m_catcher_1th_floor_z;			//机器手在1楼的z周高度, 0
+	float 									m_catcher_2th_floor_z;			//机器手在2楼的z周高度, 2760
+	float 									m_catcher_3th_floor_z;			//机器手在3楼的z周高度, 5360
+	float 									m_catcher_4th_floor_z;			//机器手在4楼的z周高度, 5410
 
 	float									m_catcher_d1_d2_distance;		//机器手2D1-2D2零位间距1903mm
+	float									m_catcher_wheel_base_limit;		//机器手下降过程中的轮距限制 3000mm
+
+	float									m_carrier_default_y1_back;		//小跑车的默认y1, 回到中跑车 4500mm
+	float									m_carrier_default_y1_leave;		//小跑车的默认y1, 离开中跑车 10500mm
+	float									m_carrier_default_y_back;		//小跑车的默认y, 回到中跑车 3000mm
+	float									m_carrier_default_y_leave;		//小跑车的默认y, 离开中跑车 9000mm
+
+	float									m_carrier_default_x_left;		//中跑车的默认x, 左侧电梯井 0mm
+	float									m_carrier_default_x_right;		//中跑车的默认x, 左侧电梯井 32600mm
+
 private:
 
 };

+ 7 - 0
dispatch/dispatch_device_base.cpp

@@ -362,6 +362,13 @@ Dispatch_device_base::Device_status Dispatch_device_base::get_actual_device_stat
 	return DEVICE_UNKNOWN;
 }
 
+int Dispatch_device_base::get_device_id()
+{
+	return m_device_id;
+}
+
+
+
 //执行外界任务的执行函数
 void Dispatch_device_base::execute_thread_fun()
 {

+ 1 - 0
dispatch/dispatch_device_base.h

@@ -176,6 +176,7 @@ public://get or set member variable
 	Dispatch_device_status get_dispatch_device_status();
 	//获取硬件设备的状态, 必须子类继承
 	virtual Device_status get_actual_device_status();
+	int get_device_id();
 
 protected://member functions
 

+ 9 - 6
dispatch/dispatch_manager.cpp

@@ -34,25 +34,28 @@ Error_manager Dispatch_manager::dispatch_manager_init(int dispatch_id)
 	m_catcher_size = 2;
 	for (int i = 0; i < m_catcher_size; ++i)
 	{
-		std::shared_ptr<Catcher> tp_catcher(new Catcher);
+		std::shared_ptr<Dispatch_device_base> tp_dispatch_device_base(new Catcher);
+		Catcher* tp_catcher = (Catcher*)tp_dispatch_device_base.get();
 		tp_catcher->dispatch_device_base_init(i);
-		m_catcher_map[i] = tp_catcher;
+		m_catcher_map[i] = tp_dispatch_device_base;
 	}
 
 	m_carrier_size = 3;
 	for (int i = 0; i < m_carrier_size; ++i)
 	{
-		std::shared_ptr<Carrier> tp_carrier(new Carrier);
+		std::shared_ptr<Dispatch_device_base> tp_dispatch_device_base(new Carrier);
+		Carrier* tp_carrier = (Carrier*)tp_dispatch_device_base.get();
 		tp_carrier->dispatch_device_base_init(i);
-		m_carrier_map[i] = tp_carrier;
+		m_carrier_map[i] = tp_dispatch_device_base;
 	}
 
 	m_passageway_size = 8;
 	for (int i = 0; i < m_passageway_size; ++i)
 	{
-		std::shared_ptr<Passageway> tp_passageway(new Passageway);
+		std::shared_ptr<Dispatch_device_base> tp_dispatch_device_base(new Passageway);
+		Passageway* tp_passageway = (Passageway*)tp_dispatch_device_base.get();
 		tp_passageway->dispatch_device_base_init(i);
-		m_passageway_map[i] = tp_passageway;
+		m_passageway_map[i] = tp_dispatch_device_base;
 	}
 
 	//创建线程池

+ 6 - 6
dispatch/dispatch_manager.h

@@ -95,12 +95,12 @@ public://member variable
 	int 										m_dispatch_id;						//调度模块的id, (楚天项目就是单元号, 0~2)
 
 	//硬件资源
-	int 										m_catcher_size;					//抓车器的数量, 默认1个
-	std::map<int, std::shared_ptr<Catcher>>		m_catcher_map;					//抓车器的对象实例,内存由本类管理
-	int 										m_carrier_size;					//搬运器的数量, 默认3个
-	std::map<int, std::shared_ptr<Carrier>>		m_carrier_map;					//搬运器的对象实例,内存由本类管理
-	int 										m_passageway_size;				//通道口的数量, 默认7个
-	std::map<int, std::shared_ptr<Passageway>>	m_passageway_map;				//通道口的对象实例,内存由本类管理
+	int 														m_catcher_size;					//抓车器的数量, 默认1个
+	std::map<int, std::shared_ptr<Dispatch_device_base>>		m_catcher_map;					//抓车器的对象实例,内存由本类管理
+	int 														m_carrier_size;					//搬运器的数量, 默认3个
+	std::map<int, std::shared_ptr<Dispatch_device_base>>		m_carrier_map;					//搬运器的对象实例,内存由本类管理
+	int 														m_passageway_size;				//通道口的数量, 默认7个
+	std::map<int, std::shared_ptr<Dispatch_device_base>>		m_passageway_map;				//通道口的对象实例,内存由本类管理
 
 
 	//流程控制

+ 295 - 13
dispatch/dispatch_parameter.pb.cc

@@ -502,6 +502,13 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, catcher_3th_floor_z_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, catcher_4th_floor_z_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, catcher_d1_d2_distance_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, catcher_wheel_base_limit_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, carrier_default_y1_back_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, carrier_default_y1_leave_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, carrier_default_y_back_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, carrier_default_y_leave_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, carrier_default_x_left_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::Dispatch_proto::Dispatch_coordinates_parameter_all, carrier_default_x_right_),
   ~0u,
   ~0u,
   ~0u,
@@ -520,6 +527,13 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT
   11,
   12,
   13,
+  14,
+  15,
+  16,
+  17,
+  18,
+  19,
+  20,
 };
 static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
   { 0, 6, sizeof(::Dispatch_proto::Catcher_parameter)},
@@ -533,7 +547,7 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROT
   { 90, 101, sizeof(::Dispatch_proto::Carrier_box_parameter)},
   { 107, 118, sizeof(::Dispatch_proto::Catcher_box_parameter)},
   { 124, 131, sizeof(::Dispatch_proto::Axis_range_parameter)},
-  { 133, 156, sizeof(::Dispatch_proto::Dispatch_coordinates_parameter_all)},
+  { 133, 163, sizeof(::Dispatch_proto::Dispatch_coordinates_parameter_all)},
 };
 
 static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -603,7 +617,7 @@ void AddDescriptorsImpl() {
       "\004 \001(\005:\0071000000\022\027\n\005z_min\030\005 \001(\005:\010-1000000\022"
       "\026\n\005z_max\030\006 \001(\005:\0071000000\"C\n\024Axis_range_pa"
       "rameter\022\025\n\003min\030\001 \001(\005:\010-1000000\022\024\n\003max\030\002 "
-      "\001(\005:\0071000000\"\325\006\n\"Dispatch_coordinates_pa"
+      "\001(\005:\0071000000\"\274\010\n\"Dispatch_coordinates_pa"
       "rameter_all\022Y\n packspace_coordinates_par"
       "ameters\030\001 \003(\0132/.Dispatch_proto.Packspace"
       "_coordinates_parameter\022[\n!passageway_coo"
@@ -624,10 +638,16 @@ void AddDescriptorsImpl() {
       "\022\033\n\023catcher_1th_floor_z\030\016 \001(\005\022\033\n\023catcher"
       "_2th_floor_z\030\017 \001(\005\022\033\n\023catcher_3th_floor_"
       "z\030\020 \001(\005\022\033\n\023catcher_4th_floor_z\030\021 \001(\005\022\036\n\026"
-      "catcher_d1_d2_distance\030\022 \001(\005"
+      "catcher_d1_d2_distance\030\022 \001(\005\022 \n\030catcher_"
+      "wheel_base_limit\030\023 \001(\005\022\037\n\027carrier_defaul"
+      "t_y1_back\030\024 \001(\005\022 \n\030carrier_default_y1_le"
+      "ave\030\025 \001(\005\022\036\n\026carrier_default_y_back\030\026 \001("
+      "\005\022\037\n\027carrier_default_y_leave\030\027 \001(\005\022\036\n\026ca"
+      "rrier_default_x_left\030\030 \001(\005\022\037\n\027carrier_de"
+      "fault_x_right\030\031 \001(\005"
   };
   ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-      descriptor, 2068);
+      descriptor, 2299);
   ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
     "dispatch_parameter.proto", &protobuf_RegisterTypes);
 }
@@ -4528,6 +4548,13 @@ const int Dispatch_coordinates_parameter_all::kCatcher2ThFloorZFieldNumber;
 const int Dispatch_coordinates_parameter_all::kCatcher3ThFloorZFieldNumber;
 const int Dispatch_coordinates_parameter_all::kCatcher4ThFloorZFieldNumber;
 const int Dispatch_coordinates_parameter_all::kCatcherD1D2DistanceFieldNumber;
+const int Dispatch_coordinates_parameter_all::kCatcherWheelBaseLimitFieldNumber;
+const int Dispatch_coordinates_parameter_all::kCarrierDefaultY1BackFieldNumber;
+const int Dispatch_coordinates_parameter_all::kCarrierDefaultY1LeaveFieldNumber;
+const int Dispatch_coordinates_parameter_all::kCarrierDefaultYBackFieldNumber;
+const int Dispatch_coordinates_parameter_all::kCarrierDefaultYLeaveFieldNumber;
+const int Dispatch_coordinates_parameter_all::kCarrierDefaultXLeftFieldNumber;
+const int Dispatch_coordinates_parameter_all::kCarrierDefaultXRightFieldNumber;
 #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
 
 Dispatch_coordinates_parameter_all::Dispatch_coordinates_parameter_all()
@@ -4559,16 +4586,16 @@ Dispatch_coordinates_parameter_all::Dispatch_coordinates_parameter_all(const Dis
     catcher_box_parameters_ = NULL;
   }
   ::memcpy(&catcher_b_min_, &from.catcher_b_min_,
-    static_cast<size_t>(reinterpret_cast<char*>(&catcher_d1_d2_distance_) -
-    reinterpret_cast<char*>(&catcher_b_min_)) + sizeof(catcher_d1_d2_distance_));
+    static_cast<size_t>(reinterpret_cast<char*>(&carrier_default_x_right_) -
+    reinterpret_cast<char*>(&catcher_b_min_)) + sizeof(carrier_default_x_right_));
   // @@protoc_insertion_point(copy_constructor:Dispatch_proto.Dispatch_coordinates_parameter_all)
 }
 
 void Dispatch_coordinates_parameter_all::SharedCtor() {
   _cached_size_ = 0;
   ::memset(&carrier_box_parameters_, 0, static_cast<size_t>(
-      reinterpret_cast<char*>(&catcher_d1_d2_distance_) -
-      reinterpret_cast<char*>(&carrier_box_parameters_)) + sizeof(catcher_d1_d2_distance_));
+      reinterpret_cast<char*>(&carrier_default_x_right_) -
+      reinterpret_cast<char*>(&carrier_box_parameters_)) + sizeof(carrier_default_x_right_));
 }
 
 Dispatch_coordinates_parameter_all::~Dispatch_coordinates_parameter_all() {
@@ -4630,10 +4657,15 @@ void Dispatch_coordinates_parameter_all::Clear() {
         reinterpret_cast<char*>(&catcher_d2_max_) -
         reinterpret_cast<char*>(&catcher_b_min_)) + sizeof(catcher_d2_max_));
   }
-  if (cached_has_bits & 16128u) {
+  if (cached_has_bits & 65280u) {
     ::memset(&default_wheelbase_, 0, static_cast<size_t>(
-        reinterpret_cast<char*>(&catcher_d1_d2_distance_) -
-        reinterpret_cast<char*>(&default_wheelbase_)) + sizeof(catcher_d1_d2_distance_));
+        reinterpret_cast<char*>(&carrier_default_y1_back_) -
+        reinterpret_cast<char*>(&default_wheelbase_)) + sizeof(carrier_default_y1_back_));
+  }
+  if (cached_has_bits & 2031616u) {
+    ::memset(&carrier_default_y1_leave_, 0, static_cast<size_t>(
+        reinterpret_cast<char*>(&carrier_default_x_right_) -
+        reinterpret_cast<char*>(&carrier_default_y1_leave_)) + sizeof(carrier_default_x_right_));
   }
   _has_bits_.Clear();
   _internal_metadata_.Clear();
@@ -4885,6 +4917,104 @@ bool Dispatch_coordinates_parameter_all::MergePartialFromCodedStream(
         break;
       }
 
+      // optional int32 catcher_wheel_base_limit = 19;
+      case 19: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(152u /* 152 & 0xFF */)) {
+          set_has_catcher_wheel_base_limit();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &catcher_wheel_base_limit_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // optional int32 carrier_default_y1_back = 20;
+      case 20: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(160u /* 160 & 0xFF */)) {
+          set_has_carrier_default_y1_back();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &carrier_default_y1_back_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // optional int32 carrier_default_y1_leave = 21;
+      case 21: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(168u /* 168 & 0xFF */)) {
+          set_has_carrier_default_y1_leave();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &carrier_default_y1_leave_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // optional int32 carrier_default_y_back = 22;
+      case 22: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(176u /* 176 & 0xFF */)) {
+          set_has_carrier_default_y_back();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &carrier_default_y_back_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // optional int32 carrier_default_y_leave = 23;
+      case 23: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(184u /* 184 & 0xFF */)) {
+          set_has_carrier_default_y_leave();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &carrier_default_y_leave_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // optional int32 carrier_default_x_left = 24;
+      case 24: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(192u /* 192 & 0xFF */)) {
+          set_has_carrier_default_x_left();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &carrier_default_x_left_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // optional int32 carrier_default_x_right = 25;
+      case 25: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(200u /* 200 & 0xFF */)) {
+          set_has_carrier_default_x_right();
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+                 input, &carrier_default_x_right_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
       default: {
       handle_unusual:
         if (tag == 0) {
@@ -5012,6 +5142,41 @@ void Dispatch_coordinates_parameter_all::SerializeWithCachedSizes(
     ::google::protobuf::internal::WireFormatLite::WriteInt32(18, this->catcher_d1_d2_distance(), output);
   }
 
+  // optional int32 catcher_wheel_base_limit = 19;
+  if (cached_has_bits & 0x00004000u) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(19, this->catcher_wheel_base_limit(), output);
+  }
+
+  // optional int32 carrier_default_y1_back = 20;
+  if (cached_has_bits & 0x00008000u) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(20, this->carrier_default_y1_back(), output);
+  }
+
+  // optional int32 carrier_default_y1_leave = 21;
+  if (cached_has_bits & 0x00010000u) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(21, this->carrier_default_y1_leave(), output);
+  }
+
+  // optional int32 carrier_default_y_back = 22;
+  if (cached_has_bits & 0x00020000u) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(22, this->carrier_default_y_back(), output);
+  }
+
+  // optional int32 carrier_default_y_leave = 23;
+  if (cached_has_bits & 0x00040000u) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(23, this->carrier_default_y_leave(), output);
+  }
+
+  // optional int32 carrier_default_x_left = 24;
+  if (cached_has_bits & 0x00080000u) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(24, this->carrier_default_x_left(), output);
+  }
+
+  // optional int32 carrier_default_x_right = 25;
+  if (cached_has_bits & 0x00100000u) {
+    ::google::protobuf::internal::WireFormatLite::WriteInt32(25, this->carrier_default_x_right(), output);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
         _internal_metadata_.unknown_fields(), output);
@@ -5133,6 +5298,41 @@ void Dispatch_coordinates_parameter_all::SerializeWithCachedSizes(
     target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(18, this->catcher_d1_d2_distance(), target);
   }
 
+  // optional int32 catcher_wheel_base_limit = 19;
+  if (cached_has_bits & 0x00004000u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(19, this->catcher_wheel_base_limit(), target);
+  }
+
+  // optional int32 carrier_default_y1_back = 20;
+  if (cached_has_bits & 0x00008000u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(20, this->carrier_default_y1_back(), target);
+  }
+
+  // optional int32 carrier_default_y1_leave = 21;
+  if (cached_has_bits & 0x00010000u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(21, this->carrier_default_y1_leave(), target);
+  }
+
+  // optional int32 carrier_default_y_back = 22;
+  if (cached_has_bits & 0x00020000u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(22, this->carrier_default_y_back(), target);
+  }
+
+  // optional int32 carrier_default_y_leave = 23;
+  if (cached_has_bits & 0x00040000u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(23, this->carrier_default_y_leave(), target);
+  }
+
+  // optional int32 carrier_default_x_left = 24;
+  if (cached_has_bits & 0x00080000u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(24, this->carrier_default_x_left(), target);
+  }
+
+  // optional int32 carrier_default_x_right = 25;
+  if (cached_has_bits & 0x00100000u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(25, this->carrier_default_x_right(), target);
+  }
+
   if (_internal_metadata_.have_unknown_fields()) {
     target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
         _internal_metadata_.unknown_fields(), target);
@@ -5252,7 +5452,7 @@ size_t Dispatch_coordinates_parameter_all::ByteSizeLong() const {
     }
 
   }
-  if (_has_bits_[8 / 32] & 16128u) {
+  if (_has_bits_[8 / 32] & 65280u) {
     // optional int32 default_wheelbase = 13;
     if (has_default_wheelbase()) {
       total_size += 1 +
@@ -5295,6 +5495,57 @@ size_t Dispatch_coordinates_parameter_all::ByteSizeLong() const {
           this->catcher_d1_d2_distance());
     }
 
+    // optional int32 catcher_wheel_base_limit = 19;
+    if (has_catcher_wheel_base_limit()) {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->catcher_wheel_base_limit());
+    }
+
+    // optional int32 carrier_default_y1_back = 20;
+    if (has_carrier_default_y1_back()) {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->carrier_default_y1_back());
+    }
+
+  }
+  if (_has_bits_[16 / 32] & 2031616u) {
+    // optional int32 carrier_default_y1_leave = 21;
+    if (has_carrier_default_y1_leave()) {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->carrier_default_y1_leave());
+    }
+
+    // optional int32 carrier_default_y_back = 22;
+    if (has_carrier_default_y_back()) {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->carrier_default_y_back());
+    }
+
+    // optional int32 carrier_default_y_leave = 23;
+    if (has_carrier_default_y_leave()) {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->carrier_default_y_leave());
+    }
+
+    // optional int32 carrier_default_x_left = 24;
+    if (has_carrier_default_x_left()) {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->carrier_default_x_left());
+    }
+
+    // optional int32 carrier_default_x_right = 25;
+    if (has_carrier_default_x_right()) {
+      total_size += 2 +
+        ::google::protobuf::internal::WireFormatLite::Int32Size(
+          this->carrier_default_x_right());
+    }
+
   }
   int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
   GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
@@ -5357,7 +5608,7 @@ void Dispatch_coordinates_parameter_all::MergeFrom(const Dispatch_coordinates_pa
     }
     _has_bits_[0] |= cached_has_bits;
   }
-  if (cached_has_bits & 16128u) {
+  if (cached_has_bits & 65280u) {
     if (cached_has_bits & 0x00000100u) {
       default_wheelbase_ = from.default_wheelbase_;
     }
@@ -5376,6 +5627,30 @@ void Dispatch_coordinates_parameter_all::MergeFrom(const Dispatch_coordinates_pa
     if (cached_has_bits & 0x00002000u) {
       catcher_d1_d2_distance_ = from.catcher_d1_d2_distance_;
     }
+    if (cached_has_bits & 0x00004000u) {
+      catcher_wheel_base_limit_ = from.catcher_wheel_base_limit_;
+    }
+    if (cached_has_bits & 0x00008000u) {
+      carrier_default_y1_back_ = from.carrier_default_y1_back_;
+    }
+    _has_bits_[0] |= cached_has_bits;
+  }
+  if (cached_has_bits & 2031616u) {
+    if (cached_has_bits & 0x00010000u) {
+      carrier_default_y1_leave_ = from.carrier_default_y1_leave_;
+    }
+    if (cached_has_bits & 0x00020000u) {
+      carrier_default_y_back_ = from.carrier_default_y_back_;
+    }
+    if (cached_has_bits & 0x00040000u) {
+      carrier_default_y_leave_ = from.carrier_default_y_leave_;
+    }
+    if (cached_has_bits & 0x00080000u) {
+      carrier_default_x_left_ = from.carrier_default_x_left_;
+    }
+    if (cached_has_bits & 0x00100000u) {
+      carrier_default_x_right_ = from.carrier_default_x_right_;
+    }
     _has_bits_[0] |= cached_has_bits;
   }
 }
@@ -5422,6 +5697,13 @@ void Dispatch_coordinates_parameter_all::InternalSwap(Dispatch_coordinates_param
   swap(catcher_3th_floor_z_, other->catcher_3th_floor_z_);
   swap(catcher_4th_floor_z_, other->catcher_4th_floor_z_);
   swap(catcher_d1_d2_distance_, other->catcher_d1_d2_distance_);
+  swap(catcher_wheel_base_limit_, other->catcher_wheel_base_limit_);
+  swap(carrier_default_y1_back_, other->carrier_default_y1_back_);
+  swap(carrier_default_y1_leave_, other->carrier_default_y1_leave_);
+  swap(carrier_default_y_back_, other->carrier_default_y_back_);
+  swap(carrier_default_y_leave_, other->carrier_default_y_leave_);
+  swap(carrier_default_x_left_, other->carrier_default_x_left_);
+  swap(carrier_default_x_right_, other->carrier_default_x_right_);
   swap(_has_bits_[0], other->_has_bits_[0]);
   _internal_metadata_.Swap(&other->_internal_metadata_);
   swap(_cached_size_, other->_cached_size_);

+ 238 - 0
dispatch/dispatch_parameter.pb.h

@@ -1864,6 +1864,55 @@ class Dispatch_coordinates_parameter_all : public ::google::protobuf::Message /*
   ::google::protobuf::int32 catcher_d1_d2_distance() const;
   void set_catcher_d1_d2_distance(::google::protobuf::int32 value);
 
+  // optional int32 catcher_wheel_base_limit = 19;
+  bool has_catcher_wheel_base_limit() const;
+  void clear_catcher_wheel_base_limit();
+  static const int kCatcherWheelBaseLimitFieldNumber = 19;
+  ::google::protobuf::int32 catcher_wheel_base_limit() const;
+  void set_catcher_wheel_base_limit(::google::protobuf::int32 value);
+
+  // optional int32 carrier_default_y1_back = 20;
+  bool has_carrier_default_y1_back() const;
+  void clear_carrier_default_y1_back();
+  static const int kCarrierDefaultY1BackFieldNumber = 20;
+  ::google::protobuf::int32 carrier_default_y1_back() const;
+  void set_carrier_default_y1_back(::google::protobuf::int32 value);
+
+  // optional int32 carrier_default_y1_leave = 21;
+  bool has_carrier_default_y1_leave() const;
+  void clear_carrier_default_y1_leave();
+  static const int kCarrierDefaultY1LeaveFieldNumber = 21;
+  ::google::protobuf::int32 carrier_default_y1_leave() const;
+  void set_carrier_default_y1_leave(::google::protobuf::int32 value);
+
+  // optional int32 carrier_default_y_back = 22;
+  bool has_carrier_default_y_back() const;
+  void clear_carrier_default_y_back();
+  static const int kCarrierDefaultYBackFieldNumber = 22;
+  ::google::protobuf::int32 carrier_default_y_back() const;
+  void set_carrier_default_y_back(::google::protobuf::int32 value);
+
+  // optional int32 carrier_default_y_leave = 23;
+  bool has_carrier_default_y_leave() const;
+  void clear_carrier_default_y_leave();
+  static const int kCarrierDefaultYLeaveFieldNumber = 23;
+  ::google::protobuf::int32 carrier_default_y_leave() const;
+  void set_carrier_default_y_leave(::google::protobuf::int32 value);
+
+  // optional int32 carrier_default_x_left = 24;
+  bool has_carrier_default_x_left() const;
+  void clear_carrier_default_x_left();
+  static const int kCarrierDefaultXLeftFieldNumber = 24;
+  ::google::protobuf::int32 carrier_default_x_left() const;
+  void set_carrier_default_x_left(::google::protobuf::int32 value);
+
+  // optional int32 carrier_default_x_right = 25;
+  bool has_carrier_default_x_right() const;
+  void clear_carrier_default_x_right();
+  static const int kCarrierDefaultXRightFieldNumber = 25;
+  ::google::protobuf::int32 carrier_default_x_right() const;
+  void set_carrier_default_x_right(::google::protobuf::int32 value);
+
   // @@protoc_insertion_point(class_scope:Dispatch_proto.Dispatch_coordinates_parameter_all)
  private:
   void set_has_carrier_box_parameters();
@@ -1894,6 +1943,20 @@ class Dispatch_coordinates_parameter_all : public ::google::protobuf::Message /*
   void clear_has_catcher_4th_floor_z();
   void set_has_catcher_d1_d2_distance();
   void clear_has_catcher_d1_d2_distance();
+  void set_has_catcher_wheel_base_limit();
+  void clear_has_catcher_wheel_base_limit();
+  void set_has_carrier_default_y1_back();
+  void clear_has_carrier_default_y1_back();
+  void set_has_carrier_default_y1_leave();
+  void clear_has_carrier_default_y1_leave();
+  void set_has_carrier_default_y_back();
+  void clear_has_carrier_default_y_back();
+  void set_has_carrier_default_y_leave();
+  void clear_has_carrier_default_y_leave();
+  void set_has_carrier_default_x_left();
+  void clear_has_carrier_default_x_left();
+  void set_has_carrier_default_x_right();
+  void clear_has_carrier_default_x_right();
 
   ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
   ::google::protobuf::internal::HasBits<1> _has_bits_;
@@ -1916,6 +1979,13 @@ class Dispatch_coordinates_parameter_all : public ::google::protobuf::Message /*
   ::google::protobuf::int32 catcher_3th_floor_z_;
   ::google::protobuf::int32 catcher_4th_floor_z_;
   ::google::protobuf::int32 catcher_d1_d2_distance_;
+  ::google::protobuf::int32 catcher_wheel_base_limit_;
+  ::google::protobuf::int32 carrier_default_y1_back_;
+  ::google::protobuf::int32 carrier_default_y1_leave_;
+  ::google::protobuf::int32 carrier_default_y_back_;
+  ::google::protobuf::int32 carrier_default_y_leave_;
+  ::google::protobuf::int32 carrier_default_x_left_;
+  ::google::protobuf::int32 carrier_default_x_right_;
   friend struct ::protobuf_dispatch_5fparameter_2eproto::TableStruct;
   friend void ::protobuf_dispatch_5fparameter_2eproto::InitDefaultsDispatch_coordinates_parameter_allImpl();
 };
@@ -3444,6 +3514,174 @@ inline void Dispatch_coordinates_parameter_all::set_catcher_d1_d2_distance(::goo
   // @@protoc_insertion_point(field_set:Dispatch_proto.Dispatch_coordinates_parameter_all.catcher_d1_d2_distance)
 }
 
+// optional int32 catcher_wheel_base_limit = 19;
+inline bool Dispatch_coordinates_parameter_all::has_catcher_wheel_base_limit() const {
+  return (_has_bits_[0] & 0x00004000u) != 0;
+}
+inline void Dispatch_coordinates_parameter_all::set_has_catcher_wheel_base_limit() {
+  _has_bits_[0] |= 0x00004000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_has_catcher_wheel_base_limit() {
+  _has_bits_[0] &= ~0x00004000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_catcher_wheel_base_limit() {
+  catcher_wheel_base_limit_ = 0;
+  clear_has_catcher_wheel_base_limit();
+}
+inline ::google::protobuf::int32 Dispatch_coordinates_parameter_all::catcher_wheel_base_limit() const {
+  // @@protoc_insertion_point(field_get:Dispatch_proto.Dispatch_coordinates_parameter_all.catcher_wheel_base_limit)
+  return catcher_wheel_base_limit_;
+}
+inline void Dispatch_coordinates_parameter_all::set_catcher_wheel_base_limit(::google::protobuf::int32 value) {
+  set_has_catcher_wheel_base_limit();
+  catcher_wheel_base_limit_ = value;
+  // @@protoc_insertion_point(field_set:Dispatch_proto.Dispatch_coordinates_parameter_all.catcher_wheel_base_limit)
+}
+
+// optional int32 carrier_default_y1_back = 20;
+inline bool Dispatch_coordinates_parameter_all::has_carrier_default_y1_back() const {
+  return (_has_bits_[0] & 0x00008000u) != 0;
+}
+inline void Dispatch_coordinates_parameter_all::set_has_carrier_default_y1_back() {
+  _has_bits_[0] |= 0x00008000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_has_carrier_default_y1_back() {
+  _has_bits_[0] &= ~0x00008000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_carrier_default_y1_back() {
+  carrier_default_y1_back_ = 0;
+  clear_has_carrier_default_y1_back();
+}
+inline ::google::protobuf::int32 Dispatch_coordinates_parameter_all::carrier_default_y1_back() const {
+  // @@protoc_insertion_point(field_get:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_y1_back)
+  return carrier_default_y1_back_;
+}
+inline void Dispatch_coordinates_parameter_all::set_carrier_default_y1_back(::google::protobuf::int32 value) {
+  set_has_carrier_default_y1_back();
+  carrier_default_y1_back_ = value;
+  // @@protoc_insertion_point(field_set:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_y1_back)
+}
+
+// optional int32 carrier_default_y1_leave = 21;
+inline bool Dispatch_coordinates_parameter_all::has_carrier_default_y1_leave() const {
+  return (_has_bits_[0] & 0x00010000u) != 0;
+}
+inline void Dispatch_coordinates_parameter_all::set_has_carrier_default_y1_leave() {
+  _has_bits_[0] |= 0x00010000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_has_carrier_default_y1_leave() {
+  _has_bits_[0] &= ~0x00010000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_carrier_default_y1_leave() {
+  carrier_default_y1_leave_ = 0;
+  clear_has_carrier_default_y1_leave();
+}
+inline ::google::protobuf::int32 Dispatch_coordinates_parameter_all::carrier_default_y1_leave() const {
+  // @@protoc_insertion_point(field_get:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_y1_leave)
+  return carrier_default_y1_leave_;
+}
+inline void Dispatch_coordinates_parameter_all::set_carrier_default_y1_leave(::google::protobuf::int32 value) {
+  set_has_carrier_default_y1_leave();
+  carrier_default_y1_leave_ = value;
+  // @@protoc_insertion_point(field_set:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_y1_leave)
+}
+
+// optional int32 carrier_default_y_back = 22;
+inline bool Dispatch_coordinates_parameter_all::has_carrier_default_y_back() const {
+  return (_has_bits_[0] & 0x00020000u) != 0;
+}
+inline void Dispatch_coordinates_parameter_all::set_has_carrier_default_y_back() {
+  _has_bits_[0] |= 0x00020000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_has_carrier_default_y_back() {
+  _has_bits_[0] &= ~0x00020000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_carrier_default_y_back() {
+  carrier_default_y_back_ = 0;
+  clear_has_carrier_default_y_back();
+}
+inline ::google::protobuf::int32 Dispatch_coordinates_parameter_all::carrier_default_y_back() const {
+  // @@protoc_insertion_point(field_get:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_y_back)
+  return carrier_default_y_back_;
+}
+inline void Dispatch_coordinates_parameter_all::set_carrier_default_y_back(::google::protobuf::int32 value) {
+  set_has_carrier_default_y_back();
+  carrier_default_y_back_ = value;
+  // @@protoc_insertion_point(field_set:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_y_back)
+}
+
+// optional int32 carrier_default_y_leave = 23;
+inline bool Dispatch_coordinates_parameter_all::has_carrier_default_y_leave() const {
+  return (_has_bits_[0] & 0x00040000u) != 0;
+}
+inline void Dispatch_coordinates_parameter_all::set_has_carrier_default_y_leave() {
+  _has_bits_[0] |= 0x00040000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_has_carrier_default_y_leave() {
+  _has_bits_[0] &= ~0x00040000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_carrier_default_y_leave() {
+  carrier_default_y_leave_ = 0;
+  clear_has_carrier_default_y_leave();
+}
+inline ::google::protobuf::int32 Dispatch_coordinates_parameter_all::carrier_default_y_leave() const {
+  // @@protoc_insertion_point(field_get:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_y_leave)
+  return carrier_default_y_leave_;
+}
+inline void Dispatch_coordinates_parameter_all::set_carrier_default_y_leave(::google::protobuf::int32 value) {
+  set_has_carrier_default_y_leave();
+  carrier_default_y_leave_ = value;
+  // @@protoc_insertion_point(field_set:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_y_leave)
+}
+
+// optional int32 carrier_default_x_left = 24;
+inline bool Dispatch_coordinates_parameter_all::has_carrier_default_x_left() const {
+  return (_has_bits_[0] & 0x00080000u) != 0;
+}
+inline void Dispatch_coordinates_parameter_all::set_has_carrier_default_x_left() {
+  _has_bits_[0] |= 0x00080000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_has_carrier_default_x_left() {
+  _has_bits_[0] &= ~0x00080000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_carrier_default_x_left() {
+  carrier_default_x_left_ = 0;
+  clear_has_carrier_default_x_left();
+}
+inline ::google::protobuf::int32 Dispatch_coordinates_parameter_all::carrier_default_x_left() const {
+  // @@protoc_insertion_point(field_get:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_x_left)
+  return carrier_default_x_left_;
+}
+inline void Dispatch_coordinates_parameter_all::set_carrier_default_x_left(::google::protobuf::int32 value) {
+  set_has_carrier_default_x_left();
+  carrier_default_x_left_ = value;
+  // @@protoc_insertion_point(field_set:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_x_left)
+}
+
+// optional int32 carrier_default_x_right = 25;
+inline bool Dispatch_coordinates_parameter_all::has_carrier_default_x_right() const {
+  return (_has_bits_[0] & 0x00100000u) != 0;
+}
+inline void Dispatch_coordinates_parameter_all::set_has_carrier_default_x_right() {
+  _has_bits_[0] |= 0x00100000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_has_carrier_default_x_right() {
+  _has_bits_[0] &= ~0x00100000u;
+}
+inline void Dispatch_coordinates_parameter_all::clear_carrier_default_x_right() {
+  carrier_default_x_right_ = 0;
+  clear_has_carrier_default_x_right();
+}
+inline ::google::protobuf::int32 Dispatch_coordinates_parameter_all::carrier_default_x_right() const {
+  // @@protoc_insertion_point(field_get:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_x_right)
+  return carrier_default_x_right_;
+}
+inline void Dispatch_coordinates_parameter_all::set_carrier_default_x_right(::google::protobuf::int32 value) {
+  set_has_carrier_default_x_right();
+  carrier_default_x_right_ = value;
+  // @@protoc_insertion_point(field_set:Dispatch_proto.Dispatch_coordinates_parameter_all.carrier_default_x_right)
+}
+
 #ifdef __GNUC__
   #pragma GCC diagnostic pop
 #endif  // __GNUC__

+ 7 - 1
dispatch/dispatch_parameter.proto

@@ -149,5 +149,11 @@ message Dispatch_coordinates_parameter_all
     optional int32                                      catcher_3th_floor_z = 16;
     optional int32                                      catcher_4th_floor_z = 17;
     optional int32                                      catcher_d1_d2_distance = 18;
-
+    optional int32                                      catcher_wheel_base_limit = 19;
+    optional int32                                      carrier_default_y1_back = 20;
+    optional int32                                      carrier_default_y1_leave = 21;
+    optional int32                                      carrier_default_y_back = 22;
+    optional int32                                      carrier_default_y_leave = 23;
+    optional int32                                      carrier_default_x_left = 24;
+    optional int32                                      carrier_default_x_right = 25;
 }

+ 611 - 98
dispatch/dispatch_process.cpp

@@ -263,10 +263,10 @@ Error_manager Dispatch_process::connect_dispatch_device()
 			mp_catcher = Dispatch_manager::get_instance_references().m_catcher_map[1];
 		}
 
+		Catcher* tp_catcher = (Catcher*)mp_catcher.get();
 		//检查设备状态
-		if ( mp_catcher->check_status() == Error_code::SUCCESS &&
-			 mp_catcher->m_actual_device_status == Dispatch_device_base::DEVICE_READY &&
-			 mp_catcher->m_actual_load_status == Dispatch_device_base::NO_CAR)
+		if ( tp_catcher->check_status() == Error_code::SUCCESS &&
+			 tp_catcher->m_actual_device_status == Dispatch_device_base::DEVICE_READY )
 		{
 			//创建任务单
 			mp_catcher_task = std::shared_ptr<Task_Base>(new Catcher_task);
@@ -275,16 +275,16 @@ Error_manager Dispatch_process::connect_dispatch_device()
 
 			//第一次发送 空的唯一码, 可以和设备建立联系
 			tp_catcher_task->m_request_key = "";
-			tp_catcher_task->m_request_x = mp_catcher->m_actual_x;
-			tp_catcher_task->m_request_y = mp_catcher->m_actual_y;
-			tp_catcher_task->m_request_b = mp_catcher->m_actual_b;
-			tp_catcher_task->m_request_z = mp_catcher->m_actual_z;
-			tp_catcher_task->m_request_d1 = mp_catcher->m_actual_d1;
-			tp_catcher_task->m_request_d2 = mp_catcher->m_actual_d2;
+			tp_catcher_task->m_request_x = tp_catcher->m_actual_x;
+			tp_catcher_task->m_request_y = tp_catcher->m_actual_y;
+			tp_catcher_task->m_request_b = tp_catcher->m_actual_b;
+			tp_catcher_task->m_request_z = tp_catcher->m_actual_z;
+			tp_catcher_task->m_request_d1 = tp_catcher->m_actual_d1;
+			tp_catcher_task->m_request_d2 = tp_catcher->m_actual_d2;
 			tp_catcher_task->m_request_wheelbase = Dispatch_coordinates::get_instance_references().m_default_wheelbase;
-			tp_catcher_task->m_request_clamp_motion = (Catcher_task::Clamp_motion)mp_catcher->m_actual_clamp_motion1;
+			tp_catcher_task->m_request_clamp_motion = (Catcher_task::Clamp_motion)tp_catcher->m_actual_clamp_motion1;
 
-			t_error = mp_catcher->execute_task(mp_catcher_task, Dispatch_device_base::E_ONE_LEVEL);
+			t_error = tp_catcher->execute_task(mp_catcher_task, Dispatch_device_base::E_ONE_LEVEL);
 			if ( t_error != Error_code::SUCCESS )
 			{
 				return t_error;
@@ -297,36 +297,9 @@ Error_manager Dispatch_process::connect_dispatch_device()
 		}
 
 		//设置起点
-		if ( m_dispatch_control_request_msg.dispatch_source() == 0 )
-		{
-			m_source_coordinates.x = 0;
-			m_source_coordinates.y = 0;
-			m_source_coordinates.z = 0;
-		}
-		else if ( m_dispatch_control_request_msg.dispatch_source() > 0 && m_dispatch_control_request_msg.dispatch_source() <= 165)
-		{
-			m_source_coordinates = Dispatch_coordinates::get_instance_references().m_packspace_coordinates[m_dispatch_control_request_msg.dispatch_source()];
-		}
-		else
-		{
-			m_source_coordinates = Dispatch_coordinates::get_instance_references().m_catcher_coordinates[m_dispatch_control_request_msg.dispatch_source()];
-		}
-
+		m_source_coordinates = Dispatch_coordinates::get_instance_references().m_catcher_coordinates[m_dispatch_control_request_msg.dispatch_source()];
 		//设置终点
-		if ( m_dispatch_control_request_msg.dispatch_destination() == 0 )
-		{
-			m_destination_coordinates.x = 0;
-			m_destination_coordinates.y = 0;
-			m_destination_coordinates.z = 0;
-		}
-		else if ( m_dispatch_control_request_msg.dispatch_destination() > 0 && m_dispatch_control_request_msg.dispatch_destination() <= 165)
-		{
-			m_destination_coordinates = Dispatch_coordinates::get_instance_references().m_packspace_coordinates[m_dispatch_control_request_msg.dispatch_destination()];
-		}
-		else
-		{
-			m_destination_coordinates = Dispatch_coordinates::get_instance_references().m_catcher_coordinates[m_dispatch_control_request_msg.dispatch_destination()];
-		}
+		m_destination_coordinates = Dispatch_coordinates::get_instance_references().m_catcher_coordinates[m_dispatch_control_request_msg.dispatch_destination()];
 	}
 		//搬运器的配置 准备工作
 	else if ( m_dispatch_control_request_msg.dispatch_device_type() >= message::Dispatch_device_type::CARRIER_1 &&
@@ -346,10 +319,10 @@ Error_manager Dispatch_process::connect_dispatch_device()
 			mp_carrier = Dispatch_manager::get_instance_references().m_carrier_map[1];
 		}
 
+		Carrier* tp_carrier = (Carrier*)mp_carrier.get();
 		//检查设备状态
-		if ( mp_carrier->check_status() == Error_code::SUCCESS &&
-			 mp_carrier->m_actual_device_status == Dispatch_device_base::DEVICE_READY &&
-			 mp_carrier->m_actual_load_status == Dispatch_device_base::NO_CAR)
+		if ( tp_carrier->check_status() == Error_code::SUCCESS &&
+			 tp_carrier->m_actual_device_status == Dispatch_device_base::DEVICE_READY )
 		{
 			//创建任务单
 			mp_carrier_task = std::shared_ptr<Task_Base>(new Carrier_task);
@@ -358,19 +331,19 @@ Error_manager Dispatch_process::connect_dispatch_device()
 
 			//第一次发送 空的唯一码, 可以和设备建立联系
 			tp_carrier_task->m_request_key = "";
-			tp_carrier_task->m_request_x = mp_carrier->m_actual_x;
-			tp_carrier_task->m_request_y = mp_carrier->m_actual_y;
-			tp_carrier_task->m_request_z = mp_carrier->m_actual_z;
-			tp_carrier_task->m_request_y1 = mp_carrier->m_actual_y1;
-			tp_carrier_task->m_request_y2 = mp_carrier->m_actual_y2;
-			tp_carrier_task->m_request_clamp_motion = (Carrier_task::Clamp_motion)mp_carrier->m_actual_clamp_motion1;
-			tp_carrier_task->m_request_joint_motion_x = (Carrier_task::Joint_motion)mp_carrier->m_actual_joint_motion_x1;
+			tp_carrier_task->m_request_x = tp_carrier->m_actual_x;
+			tp_carrier_task->m_request_y = tp_carrier->m_actual_y;
+			tp_carrier_task->m_request_z = tp_carrier->m_actual_z;
+			tp_carrier_task->m_request_y1 = tp_carrier->m_actual_y1;
+			tp_carrier_task->m_request_y2 = tp_carrier->m_actual_y2;
+			tp_carrier_task->m_request_clamp_motion = (Carrier_task::Clamp_motion)tp_carrier->m_actual_clamp_motion1;
+			tp_carrier_task->m_request_joint_motion_x = (Carrier_task::Joint_motion)tp_carrier->m_actual_joint_motion_x1;
 			tp_carrier_task->m_request_joint_motion_y = Carrier_task::Joint_motion::E_JOINT_NO_ACTION;
 			tp_carrier_task->m_request_space_id = 0;
 			tp_carrier_task->m_request_floor_id = 0;
 			tp_carrier_task->m_request_wheelbase = Dispatch_coordinates::get_instance_references().m_default_wheelbase;
 
-			t_error = mp_carrier->execute_task(mp_catcher_task, Dispatch_device_base::E_ONE_LEVEL);
+			t_error = tp_carrier->execute_task(mp_catcher_task, Dispatch_device_base::E_ONE_LEVEL);
 			if ( t_error != Error_code::SUCCESS )
 			{
 				return t_error;
@@ -383,36 +356,10 @@ Error_manager Dispatch_process::connect_dispatch_device()
 		}
 
 		//设置起点
-		if ( m_dispatch_control_request_msg.dispatch_source() == 0 )
-		{
-			m_source_coordinates.x = 0;
-			m_source_coordinates.y = 0;
-			m_source_coordinates.z = 0;
-		}
-		else if ( m_dispatch_control_request_msg.dispatch_source() > 0 && m_dispatch_control_request_msg.dispatch_source() <= 165)
-		{
-			m_source_coordinates = Dispatch_coordinates::get_instance_references().m_packspace_coordinates[m_dispatch_control_request_msg.dispatch_source()];
-		}
-		else
-		{
-			m_source_coordinates = Dispatch_coordinates::get_instance_references().m_carrier_coordinates[m_dispatch_control_request_msg.dispatch_source()];
-		}
-
+		m_source_coordinates = Dispatch_coordinates::get_instance_references().m_carrier_coordinates[m_dispatch_control_request_msg.dispatch_source()];
 		//设置终点
-		if ( m_dispatch_control_request_msg.dispatch_destination() == 0 )
-		{
-			m_destination_coordinates.x = 0;
-			m_destination_coordinates.y = 0;
-			m_destination_coordinates.z = 0;
-		}
-		else if ( m_dispatch_control_request_msg.dispatch_destination() > 0 && m_dispatch_control_request_msg.dispatch_destination() <= 165)
-		{
-			m_destination_coordinates = Dispatch_coordinates::get_instance_references().m_packspace_coordinates[m_dispatch_control_request_msg.dispatch_destination()];
-		}
-		else
-		{
-			m_destination_coordinates = Dispatch_coordinates::get_instance_references().m_carrier_coordinates[m_dispatch_control_request_msg.dispatch_destination()];
-		}
+		m_destination_coordinates = Dispatch_coordinates::get_instance_references().m_carrier_coordinates[m_dispatch_control_request_msg.dispatch_destination()];
+
 	}
 
 	return Error_code::SUCCESS;
@@ -503,22 +450,50 @@ Error_manager Dispatch_process::check_passageway_task()
 	}
 }
 
+//检查 任务单 是否完成任务, 里面会调整短步骤
+Error_manager Dispatch_process::check_task_ex(std::shared_ptr<Task_Base> p_catcher_task, int& step)
+{
+	if ( p_catcher_task.get() == NULL )
+	{
+		return Error_manager(Error_code::POINTER_IS_NULL, Error_level::MINOR_ERROR,
+							 "Dispatch_process::check_passageway_task  POINTER IS NULL ");
+	}
+	else
+	{
+		if ( p_catcher_task->get_task_statu() == Task_Base::Task_statu::TASK_OVER )
+		{
+			step++;
+			return Error_code::NODATA;	//这里返回nodata 表示任务继续下一步
+		}
+		else if ( p_catcher_task->get_task_statu() == Task_Base::Task_statu::TASK_ERROR )
+		{
+			step = 0;
+			return p_catcher_task->get_task_error_manager();
+		}
+		else if ( p_catcher_task->get_task_statu() == Task_Base::Task_statu::TASK_WORKING &&
+				  p_catcher_task->get_task_statu() == Task_Base::Task_statu::TASK_SIGNED &&
+				  p_catcher_task->get_task_statu() == Task_Base::Task_statu::TASK_CREATED)
+		{
+			//继续等待任务, 直到状态改变
+			return Error_code::NODATA;
+		}
+	}
+}
+
 //执行调度控制指令, 并根据完成情况给答复
 Error_manager Dispatch_process::excute_dispatch_control()
 {
-
+//设备的动作也使用外部的Main()的线程来循环
 	return Error_code::SUCCESS;
 }
 
 //机器手去入口抓车(例如:机器手移动到2号入口上方,然后下降到一楼抓车,最后上升到最上方)
 Error_manager Dispatch_process::excute_robot_catch_car_from_inlet()
 {
-	std::unique_lock<std::mutex> t_lock(m_lock);
 	Error_manager t_error;
-
-	//设备的动作也使用外部的Main()的线程来循环
-	static int s_step = 0;
+	Catcher * tp_catcher = NULL;
 	Catcher_task * tp_catcher_task = NULL;
+	Dispatch_coordinates * tp_dispatch_coordinates = Dispatch_coordinates::get_instance_pointer();
 
 	if ( mp_catcher.get() == NULL || mp_catcher_task.get() == NULL )
 	{
@@ -527,41 +502,436 @@ Error_manager Dispatch_process::excute_robot_catch_car_from_inlet()
 	}
 	else
 	{
+		tp_catcher = (Catcher *)mp_catcher.get();
 		tp_catcher_task = (Catcher_task *)mp_catcher_task.get();
 	}
 
-	if ( s_step == 0 )
+	if ( tp_catcher_task->m_step == 0 )
 	{
-		t_error = check_catcher_task();
-		if ( t_error == Error_code::SUCCESS )
+		return check_task_ex(mp_catcher_task, tp_catcher_task->m_step);
+	}
+	if ( tp_catcher_task->m_step == 1 )//检查姿态
+	{
+		//检查姿态
+		if ( tp_catcher->m_actual_load_status == Dispatch_device_base::Load_status::NO_CAR )
 		{
-			s_step++;//成功完成之后, 并不返回, 直接进入下一步
+			if ( tp_catcher->m_actual_clamp_motion1 != Dispatch_device_base::Clamp_motion::E_CLAMP_LOOSE ||
+			tp_catcher->m_actual_d1 + tp_catcher->m_actual_d2 + tp_dispatch_coordinates->m_catcher_d1_d2_distance >
+			tp_dispatch_coordinates->m_catcher_wheel_base_limit ||
+			tp_catcher->m_catcher_direction == Dispatch_device_base::Catcher_direction::CATCHER_DIRECTION_UNKNOW	)
+			{
+				std::unique_lock<std::mutex> t_lock1(m_lock);
+				std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+				char t_key[50] = {0};
+				sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+				tp_catcher_task->m_respons_key = t_key;
+
+				//调整姿态
+				tp_catcher_task->m_request_clamp_motion = Catcher_task::Clamp_motion::E_CLAMP_LOOSE;
+				tp_catcher_task->m_request_d1 = tp_dispatch_coordinates->m_catcher_d1_min;
+				tp_catcher_task->m_request_d2 = tp_dispatch_coordinates->m_catcher_d2_min;
+				tp_catcher_task->m_request_b = 90;
+
+				tp_catcher_task->m_step++;
+			}
+			else
+			{
+				tp_catcher_task->m_step +=2;
+			}
 		}
-		else if( t_error == Error_code::NODATA )
+		else
 		{
-		    //什么也不做, 继续等待任务完成, 此时Main函数会一直循环.
+		    return Error_manager(Error_code::CATCHER_POSE_ERROR, Error_level::MINOR_ERROR,
+		    					"tp_catcher->m_actual_load_status != Dispatch_device_base::Load_status::NO_CAR fun error ");
+		}
+	}
+	if ( tp_catcher_task->m_step == 2 )
+	{
+		return check_task_ex(mp_catcher_task, tp_catcher_task->m_step);
+	}
+	if ( tp_catcher_task->m_step == 3 )//机器手z轴移到最高点.
+	{
+		std::unique_lock<std::mutex> t_lock1(m_lock);
+		std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+		char t_key[50] = {0};
+		sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+		tp_catcher_task->m_respons_key = t_key;
+
+		//机器手z轴移到最高点.
+		tp_catcher_task->m_request_z = tp_dispatch_coordinates->m_catcher_4th_floor_z;
+
+		tp_catcher_task->m_step++;
+	}
+	if ( tp_catcher_task->m_step == 4 )
+	{
+		return check_task_ex(mp_catcher_task, tp_catcher_task->m_step);
+	}
+	if ( tp_catcher_task->m_step == 5 )//机器手 调整x y b d1 d2, 根据感测模块的定位信息, 调整机器手的姿态, 准备抓车.
+	{
+		std::unique_lock<std::mutex> t_lock1(m_lock);
+		std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+		char t_key[50] = {0};
+		sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+		tp_catcher_task->m_respons_key = t_key;
+
+		//机器手 调整x y b d1 d2, 根据感测模块的定位信息, 调整机器手的姿态, 准备抓车.
+		tp_catcher_task->m_request_x = m_car_measure_information.center_x;
+		tp_catcher_task->m_request_y = m_car_measure_information.center_y;
+		if ( tp_catcher->m_catcher_direction == Dispatch_device_base::Catcher_direction::CATCHER_DIRECTION_NEGATIVE )
+		{
+			//机器手如果旋转反向, 那就+180即可, 没有必要旋转归位.
+			tp_catcher_task->m_request_b = 180 + m_car_measure_information.car_angle;
+		}
+		else
+		{
+			tp_catcher_task->m_request_b = m_car_measure_information.car_angle;
+		}
+		//限制轮距, 在夹车杆松开时, 机器人下降时, 轴距不能超过3000mm, 必须下降到最下面才能调整轴距, 夹车后可以上升.
+		if ( m_car_measure_information.car_wheel_base > tp_dispatch_coordinates->m_catcher_wheel_base_limit )
+		{
+			tp_catcher_task->m_request_d1 = (tp_dispatch_coordinates->m_catcher_wheel_base_limit - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+			tp_catcher_task->m_request_d2 = (tp_dispatch_coordinates->m_catcher_wheel_base_limit - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+			tp_catcher_task->m_request_wheelbase = tp_dispatch_coordinates->m_catcher_wheel_base_limit;
 		}
 		else
 		{
-			s_step = 0;
-			return t_error;
+			tp_catcher_task->m_request_d1 = (m_car_measure_information.car_wheel_base - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+			tp_catcher_task->m_request_d2 = (m_car_measure_information.car_wheel_base - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+			tp_catcher_task->m_request_wheelbase = m_car_measure_information.car_wheel_base;
 		}
+		tp_catcher_task->m_request_clamp_motion = Catcher_task::Clamp_motion::E_CLAMP_LOOSE;
+
+		tp_catcher_task->m_step++;
 	}
-	if ( s_step == 1 )
+	if ( tp_catcher_task->m_step == 6 )
+	{
+		return check_task_ex(mp_catcher_task, tp_catcher_task->m_step);
+	}
+	if ( tp_catcher_task->m_step == 7 )//机器手z轴移到最低点.
 	{
 		std::unique_lock<std::mutex> t_lock1(m_lock);
 		std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
 		char t_key[50] = {0};
-		sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), s_step);
+		sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
 		tp_catcher_task->m_respons_key = t_key;
-		//机器手z轴移到最高点.
-		tp_catcher_task->m_request_z = Dispatch_coordinates::get_instance_references().m_catcher_4th_floor_z;
+
+		//机器手z轴移到最低点.
+		tp_catcher_task->m_request_z = tp_dispatch_coordinates->m_catcher_1th_floor_z;
+
+		tp_catcher_task->m_step++;
+	}
+	if ( tp_catcher_task->m_step == 8 )
+	{
+		return check_task_ex(mp_catcher_task, tp_catcher_task->m_step);
+	}
+	if ( tp_catcher_task->m_step == 9 )//修正轴距, 如果轴距大于3000mm, 那么就要修正轴距.
+	{
+		std::unique_lock<std::mutex> t_lock1(m_lock);
+		std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+		//修正轴距, 如果轴距大于3000mm, 那么就要修正轴距.
+		if ( m_car_measure_information.car_wheel_base > tp_dispatch_coordinates->m_catcher_wheel_base_limit )
+		{
+			std::unique_lock<std::mutex> t_lock1(m_lock);
+			std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+			char t_key[50] = {0};
+			sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+			tp_catcher_task->m_respons_key = t_key;
+			//修正轴距
+			tp_catcher_task->m_request_d1 = (m_car_measure_information.car_wheel_base - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+			tp_catcher_task->m_request_d2 = (m_car_measure_information.car_wheel_base - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+			tp_catcher_task->m_request_wheelbase = m_car_measure_information.car_wheel_base;
+			tp_catcher_task->m_step++;
+		}
+		else
+		{
+			tp_catcher_task->m_step = tp_catcher_task->m_step +2;
+		}
+	}
+	if ( tp_catcher_task->m_step == 10 )
+	{
+		return check_task_ex(mp_catcher_task, tp_catcher_task->m_step);
+	}
+	if ( tp_catcher_task->m_step == 11 )//机器手 夹车
+	{
+		std::unique_lock<std::mutex> t_lock1(m_lock);
+		std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+		char t_key[50] = {0};
+		sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+		tp_catcher_task->m_respons_key = t_key;
+
+		//机器手 夹车
+		tp_catcher_task->m_request_clamp_motion = Catcher_task::Clamp_motion::E_CLAMP_TIGHT;
+
+		tp_catcher_task->m_step++;
+	}
+	if ( tp_catcher_task->m_step == 12 )
+	{
+		return check_task_ex(mp_catcher_task, tp_catcher_task->m_step);
+	}
+	if ( tp_catcher_task->m_step == 13 )//机器手 z轴上升到最高处
+	{
+		std::unique_lock<std::mutex> t_lock1(m_lock);
+		std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+		char t_key[50] = {0};
+		sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+		tp_catcher_task->m_respons_key = t_key;
+
+		//机器手 z轴上升到最高处
+		tp_catcher_task->m_request_z = tp_dispatch_coordinates->m_catcher_4th_floor_z;
+
+		tp_catcher_task->m_step++;
+	}
+	if ( tp_catcher_task->m_step == 14 )
+	{
+		return check_task_ex(mp_catcher_task, tp_catcher_task->m_step);
+	}
+	if ( tp_catcher_task->m_step == 15 )
+	{
+		std::unique_lock<std::mutex> t_lock1(m_lock);
+		std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+		char t_key[50] = {0};
+		sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+		tp_catcher_task->m_respons_key = t_key;
+
+		//机器手 调整x y b d1 d2, 调整机器手的姿态, 准备把车放置到中跑车上.
+		tp_catcher_task->m_request_x = m_destination_coordinates.x;
+		tp_catcher_task->m_request_y = tp_dispatch_coordinates->m_carrier_default_y1_back - (tp_catcher_task->m_request_wheelbase /2);
+		//存车需要反向, 取车不需要
+		if ( tp_catcher->m_catcher_direction == Dispatch_device_base::Catcher_direction::CATCHER_DIRECTION_NEGATIVE )
+		{
+			tp_catcher_task->m_request_b = 90;
+		}
+		else
+		{
+			tp_catcher_task->m_request_b = 270;
+		}
+		tp_catcher_task->m_step++;
+	}
+	if ( tp_catcher_task->m_step == 16 )
+	{
+		return check_task_ex(mp_catcher_task, tp_catcher_task->m_step);
+	}
+	if ( tp_catcher_task->m_step == 17 )
+	{
+		return Error_code::SUCCESS;
 	}
 }
 //机器手把车放到中跑车上面(例如:机器手下降到中跑车上放车,最后上升到最上方)(通过目标点 指定放到哪一个中跑车上)
 Error_manager Dispatch_process::excute_robot_put_car_to_carrier()
 {
 
+}
+//机器手去中跑车上抓车(例如:机器手移动到1号中跑车上方,然后下降到中跑车抓车,最后上升到最上方)
+Error_manager Dispatch_process::excute_robot_catch_car_from_carrier()
+{
+
+}
+//机器手去出口放车(例如:机器手移动到3号出口上方,然后下降到一楼放车,最后上升到最上方)
+Error_manager Dispatch_process::excute_robot_put_car_to_outlet()
+{
+
+}
+//机器手的自由移动(例如:机器手移动到6号出入口的上方4楼处,给其他设备避让)(不进行抓车和放车的操作)
+Error_manager Dispatch_process::excute_robot_move()
+{
+
+}
+//搬运器从机器手上接车(例如:搬运器移动到2号入口的上方,然后等待机器手把车放到中跑车上,小跑车保持松夹杆状态)
+Error_manager Dispatch_process::excute_carrier_receive_car_from_robot()
+{
+	Error_manager t_error;
+	Carrier * tp_carrier = NULL;
+	Carrier_task * tp_carrier_task = NULL;
+	Dispatch_coordinates * tp_dispatch_coordinates = Dispatch_coordinates::get_instance_pointer();
+
+	if ( mp_carrier.get() == NULL || mp_carrier_task.get() == NULL )
+	{
+		return Error_manager(Error_code::POINTER_IS_NULL, Error_level::MINOR_ERROR,
+							 "Dispatch_process::excute_robot_catch_car_from_inlet()  POINTER IS NULL ");
+	}
+	else
+	{
+		tp_carrier = (Carrier *)mp_carrier.get();
+		tp_carrier_task = (Carrier_task *)mp_carrier_task.get();
+	}
+
+	if ( tp_carrier_task->m_step == 0 )
+	{
+		return check_task_ex(mp_carrier_task, tp_carrier_task->m_step);
+	}
+	if ( tp_carrier_task->m_step == 1 )//检查姿态
+	{
+		//检查姿态
+		if ( tp_carrier->m_actual_load_status == Dispatch_device_base::Load_status::NO_CAR )
+		{
+			if ( tp_carrier_task->m_request_clamp_motion != Carrier_task::Clamp_motion::E_CLAMP_LOOSE )
+			{
+				std::unique_lock<std::mutex> t_lock1(m_lock);
+				std::unique_lock<std::mutex> t_lock2(tp_carrier_task->m_lock);
+				char t_key[50] = {0};
+				sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_carrier_task->m_step);
+				tp_carrier_task->m_respons_key = t_key;
+
+				//调整姿态
+				tp_carrier_task->m_request_clamp_motion = Carrier_task::Clamp_motion::E_CLAMP_LOOSE;
+
+				tp_carrier_task->m_step++;
+			}
+			else
+			{
+				tp_carrier_task->m_step +=2;
+			}
+		}
+		else
+		{
+			return Error_manager(Error_code::CARRIER_POSE_ERROR, Error_level::MINOR_ERROR,
+								 "tp_carrier->m_actual_load_status != Dispatch_device_base::Load_status::NO_CAR fun error ");
+		}
+	}
+	if ( tp_carrier_task->m_step == 2 )
+	{
+		return check_task_ex(mp_catcher_task, tp_carrier_task->m_step);
+	}
+	if ( tp_carrier_task->m_step == 3 )//让小跑车回到中跑车上
+	{
+		if ( Common_data::approximate(tp_carrier->m_actual_y, tp_dispatch_coordinates->m_carrier_default_y_back, 0.01) )
+		{
+			tp_carrier_task->m_step +=2;
+		}
+		else
+		{
+			std::unique_lock<std::mutex> t_lock1(m_lock);
+			std::unique_lock<std::mutex> t_lock2(tp_carrier_task->m_lock);
+			char t_key[50] = {0};
+			sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_carrier_task->m_step);
+			tp_carrier_task->m_respons_key = t_key;
+
+			//让小跑车回到中跑车上
+			tp_carrier_task->m_request_y = tp_dispatch_coordinates->m_carrier_default_y_back;
+			tp_carrier_task->m_request_wheelbase = m_car_measure_information.car_wheel_base;
+			tp_carrier_task->m_request_y1 = tp_dispatch_coordinates->m_carrier_default_y1_back;
+			tp_carrier_task->m_request_y2 = tp_carrier_task->m_request_y1 - tp_carrier_task->m_request_wheelbase;
+			tp_carrier_task->m_step++;
+		}
+	}
+	if ( tp_carrier_task->m_step == 4 )
+	{
+		return check_task_ex(mp_catcher_task, tp_carrier_task->m_step);
+	}
+	if ( tp_carrier_task->m_step == 5 )//让中跑车回到电梯井
+	{
+		if ( Common_data::approximate(tp_carrier->m_actual_z, m_destination_coordinates.z, 0.01) )
+		{
+			tp_carrier_task->m_step +=2;
+		}
+		else
+		{
+			std::unique_lock<std::mutex> t_lock1(m_lock);
+			std::unique_lock<std::mutex> t_lock2(tp_carrier_task->m_lock);
+			char t_key[50] = {0};
+			sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_carrier_task->m_step);
+			tp_carrier_task->m_respons_key = t_key;
+
+			if ( mp_carrier->get_device_id() == 0 )
+			{
+				//让中跑车回到电梯井
+				tp_carrier_task->m_request_x = tp_dispatch_coordinates->m_carrier_default_x_left;
+				tp_carrier_task->m_step++;
+			}
+			else if ( mp_carrier->get_device_id() == 1 )
+			{
+				//让中跑车回到电梯井
+				tp_carrier_task->m_request_x = tp_dispatch_coordinates->m_carrier_default_x_right;
+				tp_carrier_task->m_step++;
+			}
+			else
+			{
+				return Error_manager(Error_code::CARRIER_CONRTOL_PARAMETER_ERROR, Error_level::MINOR_ERROR,
+									 " m_destination_coordinates.z PARAMRTER ERROR ");
+			}
+		}
+	}
+	if ( tp_carrier_task->m_step == 6 )
+	{
+		return check_task_ex(mp_catcher_task, tp_carrier_task->m_step);
+	}
+	if ( tp_carrier_task->m_step == 7 )//收回对接,之后中跑车固定在电梯上不能X轴移动,电梯可以Z轴移动
+	{
+		if ( Common_data::approximate(tp_carrier->m_actual_z, m_destination_coordinates.z, 0.01) )
+		{
+			tp_carrier_task->m_step +=2;
+		}
+		else
+		{
+			std::unique_lock<std::mutex> t_lock1(m_lock);
+			std::unique_lock<std::mutex> t_lock2(tp_carrier_task->m_lock);
+			char t_key[50] = {0};
+			sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_carrier_task->m_step);
+			tp_carrier_task->m_respons_key = t_key;
+
+			//收回对接,之后中跑车固定在电梯上不能X轴移动,电梯可以Z轴移动
+			tp_carrier_task->m_request_joint_motion_x = Carrier_task::Joint_motion::E_JOINT_TAKE_BACK;
+			tp_carrier_task->m_step++;
+		}
+	}
+	if ( tp_carrier_task->m_step == 8 )
+	{
+		return check_task_ex(mp_catcher_task, tp_carrier_task->m_step);
+	}
+	if ( tp_carrier_task->m_step == 9 )//收回对接,之后中跑车固定在电梯上不能X轴移动,电梯可以Z轴移动
+	{
+		if ( Common_data::approximate(tp_carrier->m_actual_z, m_destination_coordinates.z, 0.01) )
+		{
+			tp_carrier_task->m_step +=2;
+		}
+		else
+		{
+			std::unique_lock<std::mutex> t_lock1(m_lock);
+			std::unique_lock<std::mutex> t_lock2(tp_carrier_task->m_lock);
+			char t_key[50] = {0};
+			sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_carrier_task->m_step);
+			tp_carrier_task->m_respons_key = t_key;
+
+			//电梯移动到对应的楼层
+			tp_carrier_task->m_request_z = m_destination_coordinates.z;
+			tp_carrier_task->m_step++;
+		}
+	}
+	if ( tp_carrier_task->m_step == 10 )
+	{
+		return check_task_ex(mp_catcher_task, tp_carrier_task->m_step);
+	}
+
+}
+//搬运器把车存到停车位上(例如:小跑车夹车后,搬运器移动到56号停车位,然后小跑车将车存入车位,之后搬运器退回至电梯井)
+Error_manager Dispatch_process::excute_carrier_store_car_to_parkingspace()
+{
+
+}
+//搬运器把车存到停车位上(例如:小跑车夹车后,搬运器移动到56号停车位,然后小跑车将车存入车位,之后搬运器退回至56车位外面即可)
+Error_manager Dispatch_process::excute_carrier_store_car_to_parkingspace_ex()
+{
+
+}
+//搬运器从停车位上取车(例如:搬运器移动到56号停车位,然后小跑车将车从车位取出,之后搬运器退回至电梯井)
+Error_manager Dispatch_process::excute_carrier_pickup_car_from_parkingspace()
+{
+
+}
+//搬运器从停车位上取车(例如:搬运器移动到56号停车位,然后小跑车将车从车位取出,之后搬运器退回至56车位外面即可)
+Error_manager Dispatch_process::excute_carrier_pickup_car_from_parkingspace_ex()
+{
+
+}
+//搬运器把车交付给机器手(例如:搬运器移动到3号入口的上方,小跑车松夹杆,然后等待机器手把车从中跑车上取走)
+Error_manager Dispatch_process::excute_carrier_deliver_car_to_robot()
+{
+
+}
+//搬运器的自由移动(可以提前到2楼来准备接车,或者为了避让就退回至电梯井)(小跑车不进行取车和存车)
+Error_manager Dispatch_process::excute_carrier_move()
+{
+
 }
 
 //执行通道口动作
@@ -606,4 +976,147 @@ Error_manager Dispatch_process::send_dispatch_response_msg()
 Error_manager Dispatch_process::release_resource()
 {
 	return Dispatch_manager::get_instance_references().release_dispatch_process(m_command_key);
-}
+}
+
+//异常处理
+Error_manager Dispatch_process::Exception_handling()
+{
+	return Error_code::SUCCESS;
+}
+
+
+
+
+//机器手调整到正常待机的姿态
+Error_manager Dispatch_process::cartcher_adjust_to_ready(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates)
+{
+	std::unique_lock<std::mutex> t_lock1(m_lock);
+	std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+	char t_key[50] = {0};
+	sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+	tp_catcher_task->m_respons_key = t_key;
+
+	//调整姿态
+	tp_catcher_task->m_request_clamp_motion = Catcher_task::Clamp_motion::E_CLAMP_LOOSE;
+	tp_catcher_task->m_request_d1 = tp_dispatch_coordinates->m_catcher_d1_min;
+	tp_catcher_task->m_request_d2 = tp_dispatch_coordinates->m_catcher_d2_min;
+	tp_catcher_task->m_request_b = 90;
+	return Error_code::SUCCESS;
+}
+
+//机器手 移动z
+Error_manager Dispatch_process::cartcher_move_z(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates, float target)
+{
+	std::unique_lock<std::mutex> t_lock1(m_lock);
+	std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+	char t_key[50] = {0};
+	sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+	tp_catcher_task->m_respons_key = t_key;
+	//机器手 移动z
+	tp_catcher_task->m_request_z = target;
+	return Error_code::SUCCESS;
+}
+
+//机器手调整到 准备从地面抓车前的姿态
+Error_manager Dispatch_process::cartcher_adjust_from_ground(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates)
+{
+	std::unique_lock<std::mutex> t_lock1(m_lock);
+	std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+	char t_key[50] = {0};
+	sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+	tp_catcher_task->m_respons_key = t_key;
+
+	//机器手 调整x y b d1 d2, 根据感测模块的定位信息, 调整机器手的姿态, 准备抓车.
+	tp_catcher_task->m_request_x = m_car_measure_information.center_x;
+	tp_catcher_task->m_request_y = m_car_measure_information.center_y;
+	if ( tp_catcher->m_catcher_direction == Dispatch_device_base::Catcher_direction::CATCHER_DIRECTION_NEGATIVE )
+	{
+		//机器手如果旋转反向, 那就+180即可, 没有必要旋转归位.
+		tp_catcher_task->m_request_b = 180 + m_car_measure_information.car_angle;
+	}
+	else
+	{
+		tp_catcher_task->m_request_b = m_car_measure_information.car_angle;
+	}
+	//限制轮距, 在夹车杆松开时, 机器人下降时, 轴距不能超过3000mm, 必须下降到最下面才能调整轴距, 夹车后可以上升.
+	if ( m_car_measure_information.car_wheel_base > tp_dispatch_coordinates->m_catcher_wheel_base_limit )
+	{
+		tp_catcher_task->m_request_d1 = (tp_dispatch_coordinates->m_catcher_wheel_base_limit - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+		tp_catcher_task->m_request_d2 = (tp_dispatch_coordinates->m_catcher_wheel_base_limit - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+		tp_catcher_task->m_request_wheelbase = tp_dispatch_coordinates->m_catcher_wheel_base_limit;
+	}
+	else
+	{
+		tp_catcher_task->m_request_d1 = (m_car_measure_information.car_wheel_base - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+		tp_catcher_task->m_request_d2 = (m_car_measure_information.car_wheel_base - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+		tp_catcher_task->m_request_wheelbase = m_car_measure_information.car_wheel_base;
+	}
+	tp_catcher_task->m_request_clamp_motion = Catcher_task::Clamp_motion::E_CLAMP_LOOSE;
+
+	return Error_code::SUCCESS;
+}
+
+//机器手 修正轴距, 如果轴距大于3000mm, 那么就要修正轴距.
+Error_manager Dispatch_process::cartcher_adjust_wheel_base(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates)
+{
+	std::unique_lock<std::mutex> t_lock1(m_lock);
+	std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+
+	char t_key[50] = {0};
+	sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+	tp_catcher_task->m_respons_key = t_key;
+	//修正轴距
+	tp_catcher_task->m_request_d1 = (m_car_measure_information.car_wheel_base - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+	tp_catcher_task->m_request_d2 = (m_car_measure_information.car_wheel_base - tp_dispatch_coordinates->m_catcher_d1_d2_distance)/2;
+	tp_catcher_task->m_request_wheelbase = m_car_measure_information.car_wheel_base;
+	return Error_code::SUCCESS;
+}
+
+//机器手 移动c轴 夹杆
+Error_manager Dispatch_process::cartcher_move_c(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates, Catcher_task::Clamp_motion target)
+{
+	std::unique_lock<std::mutex> t_lock1(m_lock);
+	std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+	char t_key[50] = {0};
+	sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+	tp_catcher_task->m_respons_key = t_key;
+
+	//机器手 夹车
+	tp_catcher_task->m_request_clamp_motion = target;
+}
+
+//机器手调整到 准备把车放到搬运器的姿态
+Error_manager Dispatch_process::cartcher_adjust_to_carrier(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates)
+{
+	std::unique_lock<std::mutex> t_lock1(m_lock);
+	std::unique_lock<std::mutex> t_lock2(tp_catcher_task->m_lock);
+	char t_key[50] = {0};
+	sprintf(t_key, "%s+%d+%d", m_dispatch_control_request_msg.command_key().c_str(), m_dispatch_control_request_msg.dispatch_task_type(), tp_catcher_task->m_step);
+	tp_catcher_task->m_respons_key = t_key;
+
+	//机器手 调整x y b d1 d2, 调整机器手的姿态, 准备把车放置到中跑车上.
+	tp_catcher_task->m_request_x = m_destination_coordinates.x;
+	tp_catcher_task->m_request_y = tp_dispatch_coordinates->m_carrier_default_y1_back - (tp_catcher_task->m_request_wheelbase /2);
+	//存车需要反向, 取车不需要
+	if ( tp_catcher->m_catcher_direction == Dispatch_device_base::Catcher_direction::CATCHER_DIRECTION_NEGATIVE )
+	{
+		tp_catcher_task->m_request_b = 90;
+	}
+	else
+	{
+		tp_catcher_task->m_request_b = 270;
+	}
+}
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 43 - 4
dispatch/dispatch_process.h

@@ -110,7 +110,7 @@ protected://member functions
 	//等待控制指令
 	Error_manager wait_dispatch_control_request_msg();
 
-	//连接调度设备
+	//连接调度设备, 后续还需要检查设备姿态, 防止意外.
 	Error_manager connect_dispatch_device();
 
 	//检查机器手任务单
@@ -119,12 +119,36 @@ protected://member functions
 	Error_manager check_carrier_task();
 	//检查通道口任务单
 	Error_manager check_passageway_task();
+	//检查 任务单 是否完成任务, 里面会调整短步骤
+	Error_manager check_task_ex(std::shared_ptr<Task_Base> p_catcher_task, int& step);
 	//执行调度控制指令, 并根据完成情况给答复
 	Error_manager excute_dispatch_control();
+
 	//机器手去入口抓车(例如:机器手移动到2号入口上方,然后下降到一楼抓车,最后上升到最上方)
 	Error_manager excute_robot_catch_car_from_inlet();
 	//机器手把车放到中跑车上面(例如:机器手下降到中跑车上放车,最后上升到最上方)(通过目标点 指定放到哪一个中跑车上)
 	Error_manager excute_robot_put_car_to_carrier();
+	//机器手去中跑车上抓车(例如:机器手移动到1号中跑车上方,然后下降到中跑车抓车,最后上升到最上方)
+	Error_manager excute_robot_catch_car_from_carrier();
+	//机器手去出口放车(例如:机器手移动到3号出口上方,然后下降到一楼放车,最后上升到最上方)
+	Error_manager excute_robot_put_car_to_outlet();
+	//机器手的自由移动(例如:机器手移动到6号出入口的上方4楼处,给其他设备避让)(不进行抓车和放车的操作)
+	Error_manager excute_robot_move();
+	//搬运器从机器手上接车(例如:搬运器移动到2号入口的上方,然后等待机器手把车放到中跑车上,小跑车保持松夹杆状态)
+	Error_manager excute_carrier_receive_car_from_robot();
+	//搬运器把车存到停车位上(例如:小跑车夹车后,搬运器移动到56号停车位,然后小跑车将车存入车位,之后搬运器退回至电梯井)
+	Error_manager excute_carrier_store_car_to_parkingspace();
+	//搬运器把车存到停车位上(例如:小跑车夹车后,搬运器移动到56号停车位,然后小跑车将车存入车位,之后搬运器退回至56车位外面即可)
+	Error_manager excute_carrier_store_car_to_parkingspace_ex();
+	//搬运器从停车位上取车(例如:搬运器移动到56号停车位,然后小跑车将车从车位取出,之后搬运器退回至电梯井)
+	Error_manager excute_carrier_pickup_car_from_parkingspace();
+	//搬运器从停车位上取车(例如:搬运器移动到56号停车位,然后小跑车将车从车位取出,之后搬运器退回至56车位外面即可)
+	Error_manager excute_carrier_pickup_car_from_parkingspace_ex();
+	//搬运器把车交付给机器手(例如:搬运器移动到3号入口的上方,小跑车松夹杆,然后等待机器手把车从中跑车上取走)
+	Error_manager excute_carrier_deliver_car_to_robot();
+	//搬运器的自由移动(可以提前到2楼来准备接车,或者为了避让就退回至电梯井)(小跑车不进行取车和存车)
+	Error_manager excute_carrier_move();
+
 	//执行通道口动作
 	Error_manager excute_passageway_motion();
 
@@ -141,6 +165,21 @@ protected://member functions
 	//异常处理
 	Error_manager Exception_handling();
 
+
+	//机器手调整到 正常待机的姿态
+	Error_manager cartcher_adjust_to_ready(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates);
+	//机器手 移动z
+	Error_manager cartcher_move_z(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates, float target);
+	//机器手调整到 准备从地面抓车前的姿态
+	Error_manager cartcher_adjust_from_ground(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates);
+	//机器手 修正轴距, 如果轴距大于3000mm, 那么就要修正轴距.
+	Error_manager cartcher_adjust_wheel_base(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates);
+	//机器手 移动c轴 夹杆
+	Error_manager cartcher_move_c(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates, Catcher_task::Clamp_motion target);
+	//机器手调整到 准备把车放到搬运器的姿态
+	Error_manager cartcher_adjust_to_carrier(Catcher * tp_catcher, Catcher_task * tp_catcher_task, Dispatch_coordinates * tp_dispatch_coordinates);
+
+
 public://member variable
 	Dispatch_process_status					m_dispatch_process_status;	//调度流程的状态, 控制步骤
 
@@ -153,11 +192,11 @@ public://member variable
 	Common_data::Parkspace_information		m_parkspace_information;	//单个车位基本信息与状态信息,车位信息以及车位上的车辆信息
 
 	//硬件资源
-	std::shared_ptr<Catcher>				mp_catcher;					//抓车器指针, 内存由Dispatch_manager来管理
+	std::shared_ptr<Dispatch_device_base>	mp_catcher;					//抓车器指针, 内存由Dispatch_manager来管理
 	std::shared_ptr<Task_Base>				mp_catcher_task;			//抓车器任务, 内存由本模块管理
-	std::shared_ptr<Carrier>				mp_carrier;					//搬运器指针, 内存由Dispatch_manager来管理
+	std::shared_ptr<Dispatch_device_base>	mp_carrier;					//搬运器指针, 内存由Dispatch_manager来管理
 	std::shared_ptr<Task_Base>				mp_carrier_task;			//搬运器任务, 内存由本模块管理
-	std::shared_ptr<Passageway>				mp_passageway;				//通道口指针, 内存由Dispatch_manager来管理
+	std::shared_ptr<Dispatch_device_base>	mp_passageway;				//通道口指针, 内存由Dispatch_manager来管理
 	std::shared_ptr<Task_Base>				mp_passageway_task;			//通道口任务, 内存由本模块管理
 
 

+ 2 - 0
dispatch/passageway_task.cpp

@@ -13,6 +13,8 @@ Passageway_task::Passageway_task()
 	m_task_statu_information.clear();
 	m_task_error_manager.error_manager_clear_all();
 
+	m_step = 0;
+
 	m_request_inside_door_motion = DOOR_UNKNOWN;
 	m_request_outside_door_motion = DOOR_UNKNOWN;
 	m_request_turntable_direction = TURNTABLE_DIRECTION_UNKNOWN;

+ 1 - 0
dispatch/passageway_task.h

@@ -52,6 +52,7 @@ protected://member functions
 public://member variable
 
 	std::mutex							m_lock;	//锁
+	int 								m_step;//长流程细分为短流程, m_step 控制短流程的步骤
 
 	//调度下发到plc
 	std::string							m_request_key;				//请求唯一码, 用作识别

+ 5 - 1
error_code/error_code.h

@@ -355,7 +355,7 @@ enum Error_code
 	DISPATCH_DEVICE_TASK_NOTHINGNESS,					//调度设备模块,任务不存在
 
 	DISPATCH_PROCESS_ERROR_BASE								= 0x13020000,
-	DISPATCH_PROCESS_DEVICE_TYPE_ERROR,				//调度流程, 设备类型错误
+	DISPATCH_PROCESS_DEVICE_TYPE_ERROR,					//调度流程, 设备类型错误
 	DISPATCH_PROCESS_DEVICE_STATUS_ERROR,				//调度流程, 设备类型错误
 
 
@@ -369,6 +369,8 @@ enum Error_code
 	CARRIER_IS_NOT_READY,						//搬运器模块,不在准备状态
 	CARRIER_RESPONS_ERROR,						//搬运器模块,指令的执行失败
 	CARRIER_TASK_NOTHINGNESS,					//搬运器模块,任务不存在
+	CARRIER_POSE_ERROR,							//搬运器模块,姿态错误
+	CARRIER_CONRTOL_PARAMETER_ERROR,			//搬运器模块,控制参数错误
 
 	CATCHER_ERROR_BASE								= 0x13040000,
 	CATCHER_READ_PROTOBUF_ERROR,				//抓取器模块,读取参数错误
@@ -380,6 +382,8 @@ enum Error_code
 	CATCHER_IS_NOT_READY,						//抓取器模块,不在准备状态
 	CATCHER_RESPONS_ERROR,						//抓取器模块,指令的执行失败
 	CATCHER_TASK_NOTHINGNESS,					//抓取器模块,任务不存在
+	CATCHER_POSE_ERROR,							//抓取器模块,姿态错误
+	CATCHER_CONRTOL_PARAMETER_ERROR,			//抓取器模块,控制参数错误
 
 	PASSAGEWAY_ERROR_BASE								= 0x13050000,
 	PASSAGEWAY_READ_PROTOBUF_ERROR,				//通道口模块,读取参数错误

Разница между файлами не показана из-за своего большого размера
+ 1689 - 195
setting/dispatch_coordinates.prototxt


+ 19 - 1
tool/common_data.cpp

@@ -361,4 +361,22 @@ void Common_data::transform_data(Car_measure_information& car_measure_informatio
 	car_measure_information_out.car_wheel_width = car_wheel_information_in.car_wheel_width;
 	car_measure_information_out.car_front_theta = car_wheel_information_in.car_front_theta;
 	car_measure_information_out.correctness = car_wheel_information_in.correctness;
-}
+}
+
+
+bool Common_data::approximate(float a, float b, float rate)
+{
+	if ( a >= b*(1-rate) && a< b*(1+rate))
+	{
+	    return true;
+	}
+	else
+	{
+	    return false;
+	}
+}
+
+
+
+
+

+ 1 - 0
tool/common_data.h

@@ -140,6 +140,7 @@ public:
 	static void transform_data(Car_measure_information& car_measure_information_out, const Car_wheel_information& car_wheel_information_in);
 
 
+	static bool approximate(float a, float b, float rate);
 
 
 };