浏览代码

20210517, 调度管理增加空间锁.

huli 4 年之前
父节点
当前提交
b89ce4e7fc

+ 0 - 2
communication/communication_socket_base.cpp

@@ -39,7 +39,6 @@ Error_manager Communication_socket_base::communication_init_from_protobuf(std::s
 		return Error_manager(COMMUNICATION_READ_PROTOBUF_ERROR,MINOR_ERROR,
 		"Communication_socket_base read_proto_param  failed");
 	}
-
 	return communication_init_from_protobuf(t_communication_parameter_all);
 }
 
@@ -67,7 +66,6 @@ Error_manager Communication_socket_base::communication_init_from_protobuf(Commun
 			return t_error;
 		}
 	}
-
 	//启动通信, run thread
 	communication_run();
 

+ 47 - 19
dispatch/carrier.cpp

@@ -3,6 +3,7 @@
 //
 
 #include "carrier.h"
+#include "dispatch_manager.h"
 
 Carrier::Carrier()
 {
@@ -50,6 +51,8 @@ Carrier::Carrier()
 	memset(m_actual_warning_code, 0, 50);	//升降机设备的报警信息位
 
 	m_actual_coordinates_id = 0;
+	m_actual_coordinates_rows = 0;
+	m_actual_coordinates_columns = 0;
 
 }
 
@@ -203,7 +206,8 @@ Error_manager Carrier::update_device_communication()
 	m_actual_load_status = (Dispatch_device_base::Load_status)tp_carrier_status_from_plc_to_dispatch->m_actual_load_status;
 	m_actual_x = tp_carrier_status_from_plc_to_dispatch->m_actual_x;
 	m_actual_y = tp_carrier_status_from_plc_to_dispatch->m_actual_y;
-	if ( m_device_id == 2 )
+	//plc没有 给3楼的中跑车写入z轴, 所以手动写入z轴, 方便后面判断坐标
+	if ( m_device_id == 2 && m_actual_x >1)
 	{
 		m_actual_z = Dispatch_coordinates::get_instance_references().m_carrier_3th_floor_z;
 	}
@@ -365,32 +369,56 @@ Error_manager Carrier::cancel_command()
 Error_manager Carrier::update_actual_coordinates_id()
 {
 	Dispatch_coordinates * tp_dispatch_coordinates = Dispatch_coordinates::get_instance_pointer();
+	float t_distance_min = 999999;
+	float t_distance_current = 0;
+	int t_index_min = 0;
 
-	if ( get_device_id() == 2 )
+	//找出最近的坐标点
+	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_carrier_coordinates.begin(); iter != tp_dispatch_coordinates->m_carrier_coordinates.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);
+		if ( t_distance_current < t_distance_min )
 		{
-			if ( Common_data::approximate_difference(m_actual_x, iter->second.x, 100) &&
-				 Common_data::approximate_difference(m_actual_y, iter->second.y, 500)  &&
-				 Common_data::approximate_difference(tp_dispatch_coordinates->m_carrier_3th_floor_z, iter->second.z, 200) )
-			{
-				m_actual_coordinates_id = iter->first;
-			}
+			t_distance_min = t_distance_current;
+			t_index_min = iter->first;
 		}
 	}
-	else
+	m_actual_coordinates_id = t_index_min;
+
+	//更新空间锁, 只是 覆盖写入加锁.
+	if ( m_actual_coordinates_id != 0 )
 	{
-		for (auto iter = tp_dispatch_coordinates->m_carrier_coordinates.begin(); iter != tp_dispatch_coordinates->m_carrier_coordinates.end(); ++iter)
-		{
-			if ( Common_data::approximate_difference(m_actual_x, iter->second.x, 100) &&
-				 Common_data::approximate_difference(m_actual_y, iter->second.y, 500) &&
-				 Common_data::approximate_difference(m_actual_z, iter->second.z, 200) )
-			{
-				m_actual_coordinates_id = iter->first;
-			}
-		}
+		Dispatch_manager::get_instance_references().set_space_lock_for_carrier(m_actual_coordinates_id, m_device_id);
 	}
 
+
+
+//	if ( get_device_id() == 2 )
+//	{
+//		for (auto iter = tp_dispatch_coordinates->m_carrier_coordinates.begin(); iter != tp_dispatch_coordinates->m_carrier_coordinates.end(); ++iter)
+//		{
+//			if ( Common_data::approximate_difference(m_actual_x, iter->second.x, 100) &&
+//				 Common_data::approximate_difference(m_actual_y, iter->second.y, 500)  &&
+//				 Common_data::approximate_difference(tp_dispatch_coordinates->m_carrier_3th_floor_z, iter->second.z, 200) )
+//			{
+//				m_actual_coordinates_id = iter->first;
+//			}
+//		}
+//	}
+//	else
+//	{
+//		for (auto iter = tp_dispatch_coordinates->m_carrier_coordinates.begin(); iter != tp_dispatch_coordinates->m_carrier_coordinates.end(); ++iter)
+//		{
+//			if ( Common_data::approximate_difference(m_actual_x, iter->second.x, 100) &&
+//				 Common_data::approximate_difference(m_actual_y, iter->second.y, 500) &&
+//				 Common_data::approximate_difference(m_actual_z, iter->second.z, 200) )
+//			{
+//				m_actual_coordinates_id = iter->first;
+//			}
+//		}
+//	}
+
 	return Error_code::SUCCESS;
 }
 

+ 2 - 1
dispatch/carrier.h

@@ -98,7 +98,8 @@ public:
 
 
 	int 								m_actual_coordinates_id;			//搬运器真实 空间位置的id.
-
+	int 								m_actual_coordinates_rows;			//搬运器真实 空间位置的行.
+	int 								m_actual_coordinates_columns;		//搬运器真实 空间位置的列.
 
 private:
 

+ 31 - 6
dispatch/catcher.cpp

@@ -3,6 +3,7 @@
 //
 
 #include "catcher.h"
+#include "dispatch_manager.h"
 
 Catcher::Catcher()
 {
@@ -47,6 +48,8 @@ Catcher::Catcher()
 
 	m_catcher_direction = CATCHER_DIRECTION_UNKNOW;
 	m_actual_coordinates_id = 0;
+	m_actual_coordinates_rows = 0;
+	m_actual_coordinates_columns = 0;
 }
 
 Catcher::~Catcher()
@@ -350,16 +353,38 @@ Error_manager Catcher::cancel_command()
 Error_manager Catcher::update_actual_coordinates_id()
 {
 	Dispatch_coordinates * tp_dispatch_coordinates = Dispatch_coordinates::get_instance_pointer();
-
-	for (auto iter = tp_dispatch_coordinates->m_catcher_coordinates.begin(); iter != tp_dispatch_coordinates->m_catcher_coordinates.end(); ++iter)
+	float t_distance_min = 999999;
+	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)
 	{
-		if ( Common_data::approximate_difference(m_actual_x, iter->second.x, 100) &&
-			 Common_data::approximate_difference(m_actual_y, iter->second.y, 500) &&
-			 Common_data::approximate_difference(m_actual_z, iter->second.z, 200) )
+		//只算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);
+		if ( t_distance_current < t_distance_min )
 		{
-			m_actual_coordinates_id = iter->first;
+			t_distance_min = t_distance_current;
+			t_index_min = iter->first;
 		}
 	}
+	m_actual_coordinates_id = t_index_min;
+
+	//更新空间锁, 只是 覆盖写入加锁.
+	if ( m_actual_coordinates_id != 0 )
+	{
+	    Dispatch_manager::get_instance_references().set_space_lock_for_catcher(m_actual_coordinates_id, m_device_id);
+	}
+
+
+//	for (auto iter = tp_dispatch_coordinates->m_catcher_coordinates.begin(); iter != tp_dispatch_coordinates->m_catcher_coordinates.end(); ++iter)
+//	{
+//		if ( Common_data::approximate_difference(m_actual_x, iter->second.x, 100) &&
+//			 Common_data::approximate_difference(m_actual_y, iter->second.y, 500) &&
+//			 Common_data::approximate_difference(m_actual_z, iter->second.z, 200) )
+//		{
+//			m_actual_coordinates_id = iter->first;
+//		}
+//	}
 
 	return Error_code::SUCCESS;
 }

+ 4 - 1
dispatch/catcher.h

@@ -94,7 +94,10 @@ public:
 
 
 	Catcher_direction 					m_catcher_direction;		//机器手的朝向, true:90度   false:270度
-	int 								m_actual_coordinates_id;			//机器人真实 空间位置的id.
+
+	int 								m_actual_coordinates_id;			//机器人真实 空间位置的id.(1~165)
+	int 								m_actual_coordinates_rows;			//机器人真实 空间位置的行.
+	int 								m_actual_coordinates_columns;		//机器人真实 空间位置的列.
 
 
 private:

+ 3 - 0
dispatch/dispatch_coordinates.cpp

@@ -152,6 +152,9 @@ Error_manager Dispatch_coordinates::dispatch_coordinates_init_from_protobuf(Disp
 							 " Dispatch_coordinates::dispatch_coordinates_init_from_protobuf PARAMRTER ERROR ");
 	}
 
+	m_parkspace_id_min = dispatch_coordinates_parameter_all.parkspace_id_min();
+	m_parkspace_id_max = dispatch_coordinates_parameter_all.parkspace_id_max();
+	m_parkspace_id_total = dispatch_coordinates_parameter_all.parkspace_id_total();
 
 	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();

+ 7 - 0
dispatch/dispatch_coordinates.h

@@ -19,6 +19,7 @@ class Dispatch_coordinates:public Singleton<Dispatch_coordinates>
 	friend class Singleton<Dispatch_coordinates>;
 
 public:
+	//调度坐标参数
 #define DISPATCH_COORDINATES_PARAMETER_PATH "../setting/dispatch_coordinates.prototxt"
 
 	//出入口的功能模式
@@ -108,8 +109,14 @@ public://member variable
 	int										m_passageway_terminal_number;		//通道口终端个数, 默认8
 	std::map<int, Passageway_functioning_pattern>	m_passageway_functioning_pattern_map;//出入口的功能模式
 
+	int										m_parkspace_id_min;			//车位id最小值, 默认1
+	int										m_parkspace_id_max;			//车位id最小值, 默认165
+	int										m_parkspace_id_total;			//车位id总数, 默认165
+
 	int										m_car_wheel_base_min;			//汽车轮距最小值, 默认1000
 	int										m_car_wheel_base_max;			//汽车轮距最大值, 默认4000
+
+
 private:
 
 };

+ 2 - 1
dispatch/dispatch_device_base.cpp

@@ -18,9 +18,10 @@ Dispatch_device_base::~Dispatch_device_base()
 }
 
 //设备 初始化
-Error_manager Dispatch_device_base::dispatch_device_base_init(int device_id)
+Error_manager Dispatch_device_base::dispatch_device_base_init(int device_id, int device_key)
 {
 	m_device_id = device_id;
+	m_device_key = device_key;
 	//	线程默认开启
 	m_execute_condition.reset(false, true, false);
 	mp_execute_thread = new std::thread(&Dispatch_device_base::execute_thread_fun, this);

+ 24 - 1
dispatch/dispatch_device_base.h

@@ -26,6 +26,26 @@ public:
 //调度默认 差值 2mm (运动过程中进行比较, 对精度要求较高)
 #define DISPATCH_DEFAULT_DIFFERENCE							2
 
+//调度设备类型
+	enum Dispatch_device_type
+	{
+		DISPATCH_DEVICE_ROBOT_1 = 							101,
+		DISPATCH_DEVICE_ROBOT_2 = 							102,
+		DISPATCH_DEVICE_CARRIER_1 = 						200,
+		DISPATCH_DEVICE_CARRIER_2 = 						207,
+		DISPATCH_DEVICE_CARRIER_3 = 						203,
+		DISPATCH_DEVICE_PASSAGEWAY_0 = 						300,
+		DISPATCH_DEVICE_PASSAGEWAY_1 = 						301,
+		DISPATCH_DEVICE_PASSAGEWAY_2 = 						302,
+		DISPATCH_DEVICE_PASSAGEWAY_3 = 						303,
+		DISPATCH_DEVICE_PASSAGEWAY_4 = 						304,
+		DISPATCH_DEVICE_PASSAGEWAY_5 = 						305,
+		DISPATCH_DEVICE_PASSAGEWAY_6 = 						306,
+		DISPATCH_DEVICE_PASSAGEWAY_7 = 						307,
+	};
+
+
+
 	//设备状态,这个类的总状态,这里指工作任务流程
 	enum Dispatch_device_status
 	{
@@ -154,7 +174,7 @@ public:
 	~Dispatch_device_base();
 public://API functions
 	//设备 初始化
-	virtual Error_manager dispatch_device_base_init(int device_id);
+	virtual Error_manager dispatch_device_base_init(int device_id, int device_key);
 	//设备 反初始化
 	virtual Error_manager dispatch_device_base_uninit();
 
@@ -212,6 +232,9 @@ protected://member functions
 protected://member variable
 	std::atomic<Dispatch_device_status>			m_dispatch_device_status;			//设备总状态, 控制任务流程(长流程)
 	int 								m_device_id;				//设备id, 索引
+	int 								m_device_key;				//设备唯一码, 自定义
+
+	Dispatch_device_type				m_dispatch_device_type;
 	std::mutex							m_lock;	//锁
 
 

+ 346 - 42
dispatch/dispatch_manager.cpp

@@ -3,12 +3,14 @@
 //
 
 #include "dispatch_manager.h"
+#include "../tool/proto_tool.h"
+
 #include <cstdlib>
 
 Dispatch_manager::Dispatch_manager()
 {
 	m_dispatch_manager_status = E_DISPATCH_MANAGER_UNKNOW;
-	m_dispatch_id = -1;
+	m_dispatch_manager_id = -1;
 
 	m_catcher_size = 0;
 	m_carrier_size = 0;
@@ -17,6 +19,10 @@ Dispatch_manager::Dispatch_manager()
 	m_process_thread_queue = nullptr;
 	m_dispatch_manager_thread = nullptr;
 
+	mpp_space_lock = nullptr;
+	m_space_lock_rows = 0;
+	m_space_lock_columns = 0;
+	m_space_lock_total = 0;
 }
 
 Dispatch_manager::~Dispatch_manager()
@@ -27,39 +33,144 @@ Dispatch_manager::~Dispatch_manager()
 
 
 //调度管理 初始化
-Error_manager Dispatch_manager::dispatch_manager_init(int dispatch_id)
+Error_manager Dispatch_manager::dispatch_manager_init(int dispatch_manager_id)
 {
-	LOG(INFO) << " ----Dispatch_manager::dispatch_manager_init----- "<< this;
+	m_dispatch_manager_id = dispatch_manager_id;
+	return  dispatch_manager_init_from_protobuf(DISPATCH_DEVICE_PARAMETER_PATH);
+}
 
-	m_dispatch_id = dispatch_id;
+//调度管理 初始化
+Error_manager Dispatch_manager::dispatch_manager_init()
+{
+	return  dispatch_manager_init_from_protobuf(DISPATCH_DEVICE_PARAMETER_PATH);
+}
+
+//初始化 调度管理 模块。从文件读取
+Error_manager Dispatch_manager::dispatch_manager_init_from_protobuf(std::string prototxt_path)
+{
+	Dispatch_proto::Dispatch_device_parameter_all t_dispatch_device_parameter_all;
+	if(!  proto_tool::read_proto_param(prototxt_path,t_dispatch_device_parameter_all) )
+	{
+		return Error_manager(DISPATCH_MANAGER_READ_PROTOBUF_ERROR,MINOR_ERROR,
+							 "Dispatch_manager read_proto_param  failed");
+	}
+	return dispatch_manager_init_from_protobuf(t_dispatch_device_parameter_all);
+}
+//初始化 调度管理 模块。从protobuf读取
+Error_manager Dispatch_manager::dispatch_manager_init_from_protobuf(Dispatch_proto::Dispatch_device_parameter_all& dispatch_device_parameter_all)
+{
+	LOG(INFO) << " ----Dispatch_manager::dispatch_manager_init_from_protobuf----- "<< this;
 
-	m_catcher_size = 2;
-	for (int i = 1; i < m_catcher_size; ++i)
+	Error_manager t_error;
+	m_catcher_size = dispatch_device_parameter_all.catcher_parameters_size();
+	for (int i = 0; i < m_catcher_size; ++i)
 	{
 		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_dispatch_device_base;
+		int t_id = dispatch_device_parameter_all.catcher_parameters(i).id();
+		int t_key = dispatch_device_parameter_all.catcher_parameters(i).key();
+		tp_catcher->dispatch_device_base_init(t_id, t_key);
+		m_catcher_map[t_id] = tp_dispatch_device_base;
 	}
 
-	m_carrier_size = 3;
+	m_carrier_size = dispatch_device_parameter_all.carrier_parameters_size();
 	for (int i = 0; i < m_carrier_size; ++i)
 	{
 		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_dispatch_device_base;
+
+		int t_id = dispatch_device_parameter_all.carrier_parameters(i).id();
+		int t_key = dispatch_device_parameter_all.carrier_parameters(i).key();
+		tp_carrier->dispatch_device_base_init(t_id, t_key);
+		m_carrier_map[t_id] = tp_dispatch_device_base;
 	}
 
-//	m_passageway_size = 8;
-//	for (int i = 0; i < m_passageway_size; ++i)
+	m_passageway_size = dispatch_device_parameter_all.passageway_parameters_size();
+	for (int i = 0; i < m_passageway_size; ++i)
+	{
+		std::shared_ptr<Dispatch_device_base> tp_dispatch_device_base(new Passageway);
+		Passageway* tp_passageway = (Passageway*)tp_dispatch_device_base.get();
+		int t_id = dispatch_device_parameter_all.passageway_parameters(i).id();
+		int t_key = dispatch_device_parameter_all.passageway_parameters(i).key();
+		tp_passageway->dispatch_device_base_init(t_id, t_key);
+		m_passageway_map[t_id] = tp_dispatch_device_base;
+	}
+
+	m_space_lock_rows = dispatch_device_parameter_all.parkspace_number().rows();
+	m_space_lock_columns = dispatch_device_parameter_all.parkspace_number().columns();
+	m_space_lock_total = dispatch_device_parameter_all.parkspace_number().total();
+	mpp_space_lock = new space_device*[m_space_lock_rows];
+	for (int i = 0; i < m_space_lock_rows; ++i)
+	{
+		mpp_space_lock[i] = new space_device[m_space_lock_columns];
+		for (int j = 0; j < m_space_lock_columns; ++j)
+		{
+			//注意了, 这里一定要初始化为-1, 因为设备id=0 是有效设备
+			mpp_space_lock[i][j].m_catcher_id = -1;
+			mpp_space_lock[i][j].m_carrier_id = -1;
+		}
+	}
+
+	//等待和plc建立通信后, 标定初始位置, 并加锁. (初始位置可能不标准, 要把左右的都加锁)
+//	auto t_time = std::chrono::system_clock::now();
+//	bool t_flag = false;
+//	int t_rows_index = 0;
+//	int t_columns_index = 0;
+//	while ( std::chrono::system_clock::now() - t_time < std::chrono::seconds(5) || t_flag == false)
+//	{
+//		t_flag = true;
+//		//先判断搬运器的
+//
+//		for (auto iter = m_catcher_map.begin(); iter != m_catcher_map.end(); ++iter)
+//		{
+//			Catcher* tp_catcher = (Catcher*)iter->second.get();
+//			int coordinates_id = tp_catcher->m_actual_coordinates_id;
+//			if ( coordinates_id == 0 )
+//			{
+//				t_flag = false;
+//			}
+//			else if(coordinates_id>0 && coordinates_id<=dispatch_device_parameter_all.parkspace_number().total())
+//			{
+//				t_rows_index = coordinates_id/columns;
+//				t_columns_index = coordinates_id%columns;
+//				mpp_space_lock[t_rows_index][t_columns_index].catcher_id = tp_catcher->get_device_id();
+//				t_rows_index = (coordinates_id+1)/columns;
+//				t_columns_index = (coordinates_id+1)%columns;
+//				mpp_space_lock[t_rows_index][t_columns_index].catcher_id = tp_catcher->get_device_id();
+//				t_rows_index = (coordinates_id-1)/columns;
+//				t_columns_index = (coordinates_id-1)%columns;
+//				mpp_space_lock[t_rows_index][t_columns_index].catcher_id = tp_catcher->get_device_id();
+//			}
+//			else if ( coordinates_id>PASSAGEWAY_ID_BASE )
+//			{
+//				coordinates_id
+//			}
+//		}
+//		std::this_thread::sleep_for(std::chrono::microseconds(1));
+//	}
+//	if ( t_flag == false )
 //	{
-//		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_dispatch_device_base;
+//	    return Error_manager(Error_code::DISPATCH_MANAGER_SPACE_LOCK_ERROR, Error_level::MINOR_ERROR,
+//	    					" Dispatch_manager::dispatch_manager_init_from_protobuf error ");
 //	}
 
+	std::cout << " huli test :::: " << " m_catcher_size = " << m_catcher_size << std::endl;
+	std::cout << " huli test :::: " << " m_catcher_map.size() = " << m_catcher_map.size() << std::endl;
+	std::cout << " huli test :::: " << " m_carrier_size = " << m_carrier_size << std::endl;
+	std::cout << " huli test :::: " << " m_carrier_map.size() = " << m_carrier_map.size() << std::endl;
+	std::cout << " huli test :::: " << " m_passageway_size = " << m_passageway_size << std::endl;
+	std::cout << " huli test :::: " << " m_passageway_map.size() = " << m_passageway_map.size() << std::endl;
+
+	std::cout << " huli test :::: " << " m_space_lock_rows = " << m_space_lock_rows << std::endl;
+	std::cout << " huli test :::: " << " m_space_lock_columns = " << m_space_lock_columns << std::endl;
+
+	//调度管理 设备复位
+	t_error = dispatch_manager_device_reset();
+	if ( t_error != Error_code::SUCCESS )
+	{
+		return t_error;
+	}
+
 	//创建线程池
 	if (m_process_thread_queue == nullptr) {
 		m_process_thread_queue = tq::TQFactory::CreateDefaultQueue();
@@ -70,6 +181,7 @@ Error_manager Dispatch_manager::dispatch_manager_init(int dispatch_id)
 	m_dispatch_manager_status = E_DISPATCH_MANAGER_READY;
 	return Error_code::SUCCESS;
 }
+
 //调度管理 反初始化
 Error_manager Dispatch_manager::dispatch_manager_uninit()
 {
@@ -92,7 +204,7 @@ Error_manager Dispatch_manager::dispatch_manager_uninit()
 	}
 
 	m_dispatch_manager_status = E_DISPATCH_MANAGER_UNKNOW;
-	m_dispatch_id = -1;
+	m_dispatch_manager_id = -1;
 
 
 //	for (int i = 0; i < m_catcher_size; ++i)
@@ -123,6 +235,13 @@ Error_manager Dispatch_manager::dispatch_manager_uninit()
 	return Error_code::SUCCESS;
 }
 
+//调度管理 设备复位
+Error_manager Dispatch_manager::dispatch_manager_device_reset()
+{
+	//以后再写
+	return Error_code::SUCCESS;
+}
+
 //对外的接口函数,负责接受并处理任务单,
 Error_manager Dispatch_manager::execute_task(Dispatch_manager::Dispatch_motion_direction dispatch_motion_direction)
 {
@@ -256,30 +375,36 @@ Error_manager Dispatch_manager::execute_for_dispatch_request_msg(message::Dispat
 		if (tp_dispatch_process->m_dispatch_process_type ==
 			Dispatch_process::Dispatch_process_type::DISPATCH_PROCESS_STORE)
 		{
-			if (m_key_to_dispatch_process_store_map.find(tp_dispatch_process->m_command_key) !=
-				m_key_to_dispatch_process_store_map.end())
-			{
-				t_error = Error_manager(Error_code::DISPATCH_PROCESS_COMMAND_KEY_REPEAT, Error_level::MINOR_ERROR,
-										" tp_dispatch_process->m_command_key is repeat ");
-			}
-			else
-			{
-				m_key_to_dispatch_process_store_map[tp_dispatch_process->m_command_key] = tp_dispatch_process;
-			}
+			m_process_store_list.push_back(tp_dispatch_process);
+			//这里就不查重了, 需要主控保证不会重复发送...
+
+//			if (m_key_to_dispatch_process_store_map.find(tp_dispatch_process->m_command_key) !=
+//				m_key_to_dispatch_process_store_map.end())
+//			{
+//				t_error = Error_manager(Error_code::DISPATCH_PROCESS_COMMAND_KEY_REPEAT, Error_level::MINOR_ERROR,
+//										" tp_dispatch_process->m_command_key is repeat ");
+//			}
+//			else
+//			{
+//				m_key_to_dispatch_process_store_map[tp_dispatch_process->m_command_key] = tp_dispatch_process;
+//			}
 		}
 		else if (tp_dispatch_process->m_dispatch_process_type ==
 				 Dispatch_process::Dispatch_process_type::DISPATCH_PROCESS_PICKUP)
 		{
-			if (m_key_to_dispatch_process_pickup_map.find(tp_dispatch_process->m_command_key) !=
-				m_key_to_dispatch_process_pickup_map.end())
-			{
-				t_error = Error_manager(Error_code::DISPATCH_PROCESS_COMMAND_KEY_REPEAT, Error_level::MINOR_ERROR,
-										" tp_dispatch_process->m_command_key is repeat ");
-			}
-			else
-			{
-				m_key_to_dispatch_process_pickup_map[tp_dispatch_process->m_command_key] = tp_dispatch_process;
-			}
+			m_process_pickup_list.push_back(tp_dispatch_process);
+			//这里就不查重了, 需要主控保证不会重复发送...
+
+//			if (m_key_to_dispatch_process_pickup_map.find(tp_dispatch_process->m_command_key) !=
+//				m_key_to_dispatch_process_pickup_map.end())
+//			{
+//				t_error = Error_manager(Error_code::DISPATCH_PROCESS_COMMAND_KEY_REPEAT, Error_level::MINOR_ERROR,
+//										" tp_dispatch_process->m_command_key is repeat ");
+//			}
+//			else
+//			{
+//				m_key_to_dispatch_process_pickup_map[tp_dispatch_process->m_command_key] = tp_dispatch_process;
+//			}
 		}
 		else
 		{
@@ -423,6 +548,151 @@ Error_manager Dispatch_manager::execute_for_dispatch_control_request_msg(message
 	return Error_code::SUCCESS;
 }
 
+//定时发送 调度管理的状态
+Error_manager Dispatch_manager::encapsulate_send_dispatch_manager_status()
+{
+	Error_manager t_error;
+
+	int t_dispatch_manager_id = get_dispatch_manager_id();
+	std::string t_msg;
+
+	//创建一条 调度管理总管理的状态
+	message::Dispatch_manager_status_msg t_dispatch_manager_status_msg;
+	t_dispatch_manager_status_msg.mutable_base_info()->set_msg_type(message::Message_type::eDispatch_manager_status_msg);
+	t_dispatch_manager_status_msg.mutable_base_info()->set_timeout_ms(5000);
+	t_dispatch_manager_status_msg.mutable_base_info()->set_sender(message::Communicator::eDispatch_manager);
+	t_dispatch_manager_status_msg.mutable_base_info()->set_receiver(message::Communicator::eEmpty);
+
+	t_dispatch_manager_status_msg.set_dispatch_id(t_dispatch_manager_id);
+	Dispatch_manager::Dispatch_manager_status t_dispatch_manager_status = get_dispatch_manager_status();
+	t_dispatch_manager_status_msg.set_dispatch_manager_status((message::Dispatch_manager_status)t_dispatch_manager_status);
+
+	for (auto iter = m_catcher_map.begin(); iter != m_catcher_map.end(); ++iter)
+	{
+		Catcher* tp_catcher = (Catcher*)iter->second.get();
+		message::Catcher_data * tp_catcher_data = t_dispatch_manager_status_msg.mutable_catcher_data_map()->Add();
+
+		switch ( tp_catcher->get_device_id() )
+		{
+			case 0:
+			{
+				tp_catcher_data->set_dispatch_device_type(message::Dispatch_device_type::ROBOT_1);
+				break;
+			}
+			case 1:
+			{
+				tp_catcher_data->set_dispatch_device_type(message::Dispatch_device_type::ROBOT_2);
+				break;
+			}
+			default:
+			{
+
+				break;
+			}
+		}
+		if ( tp_catcher->get_dispatch_device_status() >= Dispatch_device_base::Dispatch_device_status::DISPATCH_DEVICE_BUSY &&
+			 tp_catcher->get_dispatch_device_status() <= Dispatch_device_base::Dispatch_device_status::DISPATCH_DEVICE_THREE_LEVEL_WORK)
+		{
+			tp_catcher_data->set_dispatch_device_status(message::Dispatch_device_status::DISPATCH_DEVICE_BUSY);
+
+		}
+		else
+		{
+			tp_catcher_data->set_dispatch_device_status((message::Dispatch_device_status)tp_catcher->get_dispatch_device_status());
+		}
+
+		tp_catcher_data->set_device_id(tp_catcher->get_device_id());
+		tp_catcher_data->set_actual_device_status((message::Hardware_device_status)tp_catcher->m_actual_device_status);
+		tp_catcher_data->set_actual_load_status((message::Load_status)tp_catcher->m_actual_load_status);
+
+
+		tp_catcher_data->set_actual_coordinates_id(tp_catcher->m_actual_coordinates_id);
+		tp_catcher_data->set_actual_x(tp_catcher->m_actual_x);
+		tp_catcher_data->set_actual_y(tp_catcher->m_actual_y);
+		tp_catcher_data->set_actual_b(tp_catcher->m_actual_b);
+		tp_catcher_data->set_actual_z(tp_catcher->m_actual_z);
+		tp_catcher_data->set_actual_d1(tp_catcher->m_actual_d1);
+		tp_catcher_data->set_actual_d2(tp_catcher->m_actual_d2);
+		tp_catcher_data->set_actual_clamp_motion1((message::Clamp_motion)tp_catcher->m_actual_clamp_motion1);
+		tp_catcher_data->set_actual_clamp_motion2((message::Clamp_motion)tp_catcher->m_actual_clamp_motion2);
+		tp_catcher_data->set_actual_clamp_motion3((message::Clamp_motion)tp_catcher->m_actual_clamp_motion3);
+		tp_catcher_data->set_actual_clamp_motion4((message::Clamp_motion)tp_catcher->m_actual_clamp_motion4);
+
+		std::string t_actual_error_code((char*)tp_catcher->m_actual_error_code, 50);
+		tp_catcher_data->set_actual_error_code(t_actual_error_code);
+		std::string t_actual_warning_code((char*)tp_catcher->m_actual_warning_code, 50);
+		tp_catcher_data->set_actual_error_code(t_actual_warning_code);
+		tp_catcher_data->set_actual_error_code(tp_catcher->m_actual_error_description);
+	}
+	for (auto iter = m_carrier_map.begin(); iter != m_carrier_map.end(); ++iter)
+	{
+		Carrier* tp_carrier = (Carrier*)iter->second.get();
+		message::Carrier_data * tp_carrier_data = t_dispatch_manager_status_msg.mutable_carrier_data_map()->Add();
+
+		switch ( tp_carrier->get_device_id() )
+		{
+			case 0:
+			{
+				tp_carrier_data->set_dispatch_device_type(message::Dispatch_device_type::CARRIER_1);
+				break;
+			}
+			case 1:
+			{
+				tp_carrier_data->set_dispatch_device_type(message::Dispatch_device_type::CARRIER_2);
+				break;
+			}
+			case 2:
+			{
+				tp_carrier_data->set_dispatch_device_type(message::Dispatch_device_type::CARRIER_3);
+				break;
+			}
+			default:
+			{
+
+				break;
+			}
+		}
+		if ( tp_carrier->get_dispatch_device_status() >= Dispatch_device_base::Dispatch_device_status::DISPATCH_DEVICE_BUSY &&
+			 tp_carrier->get_dispatch_device_status() <= Dispatch_device_base::Dispatch_device_status::DISPATCH_DEVICE_THREE_LEVEL_WORK)
+		{
+			tp_carrier_data->set_dispatch_device_status(message::Dispatch_device_status::DISPATCH_DEVICE_BUSY);
+
+		}
+		else
+		{
+			tp_carrier_data->set_dispatch_device_status((message::Dispatch_device_status)tp_carrier->get_dispatch_device_status());
+		}
+		tp_carrier_data->set_device_id(tp_carrier->get_device_id());
+		tp_carrier_data->set_actual_device_status((message::Hardware_device_status)tp_carrier->m_actual_device_status);
+		tp_carrier_data->set_actual_load_status((message::Load_status)tp_carrier->m_actual_load_status);
+
+		tp_carrier_data->set_actual_coordinates_id(tp_carrier->m_actual_coordinates_id);
+		tp_carrier_data->set_actual_x(tp_carrier->m_actual_x);
+		tp_carrier_data->set_actual_y(tp_carrier->m_actual_y);
+		tp_carrier_data->set_actual_z(tp_carrier->m_actual_z);
+		tp_carrier_data->set_actual_y1(tp_carrier->m_actual_y1);
+		tp_carrier_data->set_actual_y2(tp_carrier->m_actual_y2);
+		tp_carrier_data->set_actual_clamp_motion1((message::Clamp_motion)tp_carrier->m_actual_clamp_motion1);
+		tp_carrier_data->set_actual_clamp_motion2((message::Clamp_motion)tp_carrier->m_actual_clamp_motion2);
+		tp_carrier_data->set_actual_small_sports_car_motion((message::Small_sports_car_motion)tp_carrier->m_actual_small_sports_car_motion);
+		tp_carrier_data->set_actual_joint_motion_x1((message::Joint_motion)tp_carrier->m_actual_joint_motion_x1);
+		tp_carrier_data->set_actual_joint_motion_x2((message::Joint_motion)tp_carrier->m_actual_joint_motion_x2);
+
+		std::string t_actual_error_code((char*)tp_carrier->m_actual_error_code, 50);
+		tp_carrier_data->set_actual_error_code(t_actual_error_code);
+		std::string t_actual_warning_code((char*)tp_carrier->m_actual_warning_code, 50);
+		tp_carrier_data->set_actual_error_code(t_actual_warning_code);
+		tp_carrier_data->set_actual_error_code(tp_carrier->m_actual_error_description);
+	}
+
+
+	t_msg = t_dispatch_manager_status_msg.SerializeAsString();
+	System_communication::get_instance_references().encapsulate_msg(t_msg);
+//	std::cout << " huli test :::: " << " 12312312312312 = " << t_dispatch_manager_status_msg.DebugString() << std::endl;
+//	std::cout << " huli test :::: " << " 123123ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg12312312 = " << 123 << std::endl;
+
+	return Error_code::SUCCESS;
+}
 
 //在流程的map 里面释放指定的流程
 Error_manager Dispatch_manager::release_dispatch_process(std::string command_key)
@@ -455,12 +725,46 @@ Dispatch_manager::Dispatch_manager_status Dispatch_manager::get_dispatch_manager
 	return m_dispatch_manager_status;
 }
 
-int Dispatch_manager::get_dispatch_id()
+int Dispatch_manager::get_dispatch_manager_id()
 {
-	return m_dispatch_id;
+	return m_dispatch_manager_id;
 }
-void Dispatch_manager::set_dispatch_id(int dispatch_id)
+void Dispatch_manager::set_dispatch_manager_id(int dispatch_manager_id)
 {
-	m_dispatch_id = dispatch_id;
+	m_dispatch_manager_id = dispatch_manager_id;
 }
 
+void Dispatch_manager::set_space_lock(int space_rows, int space_columns, int catcher_id, int carrier_id)
+{
+	std::unique_lock<std::mutex> t_lock(m_lock);
+	mpp_space_lock[space_rows][space_columns].m_catcher_id = catcher_id;
+	mpp_space_lock[space_rows][space_columns].m_carrier_id = carrier_id;
+}
+void Dispatch_manager::set_space_lock_for_catcher(int space_rows, int space_columns, int catcher_id)
+{
+	std::unique_lock<std::mutex> t_lock(m_lock);
+	mpp_space_lock[space_rows][space_columns].m_catcher_id = catcher_id;
+}
+void Dispatch_manager::set_space_lock_for_carrier(int space_rows, int space_columns, int carrier_id)
+{
+	std::unique_lock<std::mutex> t_lock(m_lock);
+	mpp_space_lock[space_rows][space_columns].m_carrier_id = carrier_id;
+}
+void Dispatch_manager::set_space_lock(int space_id, int catcher_id, int carrier_id)
+{
+	int space_rows = (space_id-1) / m_space_lock_columns;
+	int space_columns = (space_id-1) % m_space_lock_columns;
+	set_space_lock(space_rows, space_columns, catcher_id, carrier_id);
+}
+void Dispatch_manager::set_space_lock_for_catcher(int space_id, int catcher_id)
+{
+	int space_rows = (space_id-1) / m_space_lock_columns;
+	int space_columns = (space_id-1) % m_space_lock_columns;
+	set_space_lock_for_catcher(space_rows, space_columns, catcher_id);
+}
+void Dispatch_manager::set_space_lock_for_carrier(int space_id, int carrier_id)
+{
+	int space_rows = (space_id-1) / m_space_lock_columns;
+	int space_columns = (space_id-1) % m_space_lock_columns;
+	set_space_lock_for_carrier(space_rows, space_columns, carrier_id);
+}

+ 52 - 11
dispatch/dispatch_manager.h

@@ -48,6 +48,10 @@ class Dispatch_manager:public Singleton<Dispatch_manager>
    friend class Singleton<Dispatch_manager>;
 
 public:
+//调度设备参数
+#define DISPATCH_DEVICE_PARAMETER_PATH "../setting/dispatch_device.prototxt"
+
+
 	//调度管理 的状态
 	enum Dispatch_manager_status
 	{
@@ -65,6 +69,13 @@ public:
 		E_STORE_CAR             =0,         //停车, 出入口 -> 停车位
 		E_PICKUP_CAR            =1,         //取车, 停车位 -> 出入口
 	};
+
+	//调度设备的id集合
+	struct space_device
+	{
+	    int m_catcher_id;
+	    int m_carrier_id;
+	};
 private:
  // 父类的构造函数必须保护,子类的构造函数必须私有。
    Dispatch_manager();
@@ -75,10 +86,18 @@ public:
     ~Dispatch_manager();
 public://API functions
 	//调度管理 初始化
-	Error_manager dispatch_manager_init(int dispatch_id);
+	Error_manager dispatch_manager_init(int dispatch_manager_id);
+	Error_manager dispatch_manager_init();
+	//初始化 调度管理 模块。从文件读取
+	Error_manager dispatch_manager_init_from_protobuf(std::string prototxt_path);
+	//初始化 调度管理 模块。从protobuf读取
+	Error_manager dispatch_manager_init_from_protobuf(Dispatch_proto::Dispatch_device_parameter_all& dispatch_device_parameter_all);
 	//调度管理 反初始化
 	Error_manager dispatch_manager_uninit();
 
+	//调度管理 设备复位
+	Error_manager dispatch_manager_device_reset();
+
 	//对外的接口函数,负责接受并处理任务单,
 	Error_manager execute_task(Dispatch_manager::Dispatch_motion_direction dispatch_motion_direction);
 
@@ -92,34 +111,50 @@ public://API functions
 	//调度模块 答复数据异常
 	Error_manager send_dispatch_response_msg_with_error(message::Dispatch_request_msg &dispatch_request_msg, Error_manager error);
 
-
-
-
 	//调度模块 //调度总规划的答复(调度算法->调度管理)
 	Error_manager execute_for_dispatch_plan_response_msg(message::Dispatch_plan_response_msg &dispatch_plan_response_msg);
 	//调度模块 //调度控制的任务请求(调度算法->调度管理)
 	Error_manager execute_for_dispatch_control_request_msg(message::Dispatch_control_request_msg &dispatch_control_request_msg);
-
+	//定时发送 调度管理的状态
+	Error_manager encapsulate_send_dispatch_manager_status();
 
 	//在流程的map 里面释放指定的流程
 	Error_manager release_dispatch_process(std::string command_key);
 
+
+
+
+
+
 public://get or set member variable
 	Dispatch_manager_status get_dispatch_manager_status();
-	int get_dispatch_id();
-	void set_dispatch_id(int dispatch_id);
+	int get_dispatch_manager_id();
+	void set_dispatch_manager_id(int dispatch_id);
+
+	void set_space_lock(int space_rows, int space_columns, int catcher_id, int carrier_id);
+	void set_space_lock_for_catcher(int space_rows, int space_columns, int catcher_id);
+	void set_space_lock_for_carrier(int space_rows, int space_columns, int carrier_id);
+
+	void set_space_lock(int space_id, int catcher_id, int carrier_id);
+	void set_space_lock_for_catcher(int space_id, int catcher_id);
+	void set_space_lock_for_carrier(int space_id, int carrier_id);
+
 public://member variable
 
 	Dispatch_manager_status						m_dispatch_manager_status;			//调度管理 的状态
-	int 										m_dispatch_id;						//调度模块的id, (楚天项目就是单元号, 0~2)
+	int 										m_dispatch_manager_id;						//调度模块的id, (楚天项目就是单元号, 0~2)
 
 	//流程控制
 	std::mutex                              	m_lock;        						//线程池的锁, 增删流程时要加锁.
 	tq::IQueue*                         		m_process_thread_queue;         	//指令流程线程池, 管理线程内存, 负责启动和回收线程内存资源,不负责控制流程.
 
-	//流程管理
-	std::map<std::string, Dispatch_process*>	m_key_to_dispatch_process_store_map;	//存车流程的map
-	std::map<std::string, Dispatch_process*>	m_key_to_dispatch_process_pickup_map;	//取车流程的map
+	//流程管理, 注释
+	std::map<std::string, Dispatch_process*>	m_key_to_dispatch_process_store_map;	//存车流程的map 注释
+	std::map<std::string, Dispatch_process*>	m_key_to_dispatch_process_pickup_map;	//取车流程的map 注释
+
+	//流程的list, 按照创建顺序排序, 先来后到, 停车和停车不能插队, 但是停车和取车可以插队.
+	std::list<Dispatch_process*>				m_process_store_list;					//存车流程的list, 内存由线程池管理
+	std::list<Dispatch_process*>				m_process_pickup_list;					//取车流程的list, 内存由线程池管理
 
 
 	//硬件资源
@@ -134,6 +169,12 @@ public://member variable
 	std::thread*                        		m_dispatch_manager_thread;        	//调度总管理的线程, 总控全局, 控制每个流程的先后顺序, 并合理的分配资源.
 	Thread_condition				    		m_dispatch_manager_condition;		//调度总管理的条件变量, 总控全局, 控制每个流程的先后顺序, 并合理的分配资源.
 
+	//空间锁, 防撞. (存放着调度设备的id集合, 交接过程中, 允许两个个设备占有同一个空间)
+	space_device**										mpp_space_lock;						//空间锁, 二维数组, 存放着调度设备的id集合, 内存由本模块管理, (默认11*15=165)
+	int													m_space_lock_rows;					//空间锁, 行
+	int													m_space_lock_columns;				//空间锁, 列
+	int													m_space_lock_total;					//空间锁, 总数
+
 private:
 
 };

文件差异内容过多而无法显示
+ 1079 - 274
dispatch/dispatch_parameter.pb.cc


文件差异内容过多而无法显示
+ 614 - 118
dispatch/dispatch_parameter.pb.h


+ 20 - 3
dispatch/dispatch_parameter.proto

@@ -5,19 +5,29 @@ package Dispatch_proto;
 message Catcher_parameter
 {
     required int32                  id = 1;
+    required int32                  key = 2;
 }
 
 message Carrier_parameter
 {
     required int32                  id = 1;
+    required int32                  key = 2;
 }
 
 message Passageway_parameter
 {
     required int32                  id = 1;
+    required int32                  key = 2;
 }
 
-message Laser_parameter_all
+message Parkspace_number
+{
+    required int32                  rows = 1;
+    required int32                  columns = 2;
+    required int32                  total = 3;
+}
+
+message Dispatch_device_parameter_all
 {
     required int32                  catcher_size=1;
     repeated Catcher_parameter      catcher_parameters=2;
@@ -25,6 +35,8 @@ message Laser_parameter_all
     repeated Carrier_parameter      carrier_parameters=4;
     required int32                  passageway_size=5;
     repeated Passageway_parameter   passageway_parameters=6;
+
+    required Parkspace_number       parkspace_number=7;
 }
 
 
@@ -180,8 +192,13 @@ message Dispatch_coordinates_parameter_all
     optional int32                                      passageway_terminal_number = 33;
     repeated Passageway_functioning_pattern             passageway_functioning_patterns = 34;
 
-    optional int32                                      car_wheel_base_min = 35;
-    optional int32                                      car_wheel_base_max = 36;
+    optional int32                                      parkspace_id_min = 35;
+    optional int32                                      parkspace_id_max = 36;
+    optional int32                                      parkspace_id_total = 37;
+
+
+    optional int32                                      car_wheel_base_min = 38;
+    optional int32                                      car_wheel_base_max = 39;
 
 
 }

+ 2 - 1
dispatch/dispatch_process.cpp

@@ -93,7 +93,8 @@ Error_manager Dispatch_process::Dispatch_process_init(message::Dispatch_request_
 		m_dispatch_process_type = DISPATCH_PROCESS_PICKUP;
 		m_dispatch_source = dispatch_request_msg.parkspace_info().parkingspace_index_id() + PARKSPACE_ID_BASE;
 		//终点在运动过程中动态分配
-//		m_dispatch_destination = dispatch_request_msg.terminal_id() + PASSAGEWAY_ID_BASE ;
+		//目前不控制门, 所以出口有主控决定. 如果后续控制门, 那么出口可以由调度决定.
+		m_dispatch_destination = dispatch_request_msg.terminal_id() + PASSAGEWAY_ID_BASE ;
 		Common_data::copy_data(m_parkspace_information, dispatch_request_msg.parkspace_info_ex(0));
 		Common_data::scaling(m_parkspace_information, 1000);
 		m_wheel_base = m_parkspace_information.car_information.car_wheel_base;

+ 15 - 6
dispatch/dispatch_process.h

@@ -95,20 +95,25 @@ public:
 		DISPATCH_CONTROL_FAULT					= 10,	//故障
 		DISPATCH_CONTROL_MOTION_FAILED			= 11,	//单个小动作执行失败
 	};
-	//调度控制节点, 对应一个dispatch_control的长流程
+	//调度控制节点, 对应一个设备
 	struct Dispatch_control_node
 	{
 		Dispatch_control_status					m_dispatch_control_status;			//调度控制的状态, 控制步骤(对于一个设备的长流程的控制)
 		std::shared_ptr<Dispatch_device_base>	mp_dispatch_device;					//调度设备指针, 内存由Dispatch_manager来管理
 		std::shared_ptr<Task_Base>				mp_dispatch_task;					//调度任务指针, 内存由本模块管理
 
-		message::Dispatch_control_request_msg	m_dispatch_control_request_msg;		//3调度控制的任务请求(调度算法->调度管理)
-		message::Dispatch_control_response_msg	m_dispatch_control_response_msg;	//4调度控制的任务答复(调度管理->调度算法)
-		Point3D_tool::Point3D					m_source_coordinates;				//起点 的坐标 (Dispatch_control 长流程的起点)
-		Point3D_tool::Point3D					m_destination_coordinates;			//终点 的坐标 (Dispatch_control 长流程的终点)
+
+
+
+
+		//注释
+		message::Dispatch_control_request_msg	m_dispatch_control_request_msg;		//3调度控制的任务请求(调度算法->调度管理) 注释
+		message::Dispatch_control_response_msg	m_dispatch_control_response_msg;	//4调度控制的任务答复(调度管理->调度算法) 注释
+		Point3D_tool::Point3D					m_source_coordinates;				//起点 的坐标 (Dispatch_control 长流程的起点) 注释
+		Point3D_tool::Point3D					m_destination_coordinates;			//终点 的坐标 (Dispatch_control 长流程的终点) 注释
 
 		Error_manager							m_error;							//错误码
-		std::chrono::system_clock::time_point	m_time_to_send_control_response;		//发送 控制的任务答复 的时间
+		std::chrono::system_clock::time_point	m_time_to_send_control_response;		//发送 控制的任务答复 的时间 注释
 
 	};
 
@@ -249,6 +254,10 @@ public://member variable
 	float 									m_wheel_base;						//轮距
 
 
+	//调度控制的节点
+
+
+
 
 
 	//调度控制的长流程节点map

+ 2 - 2
dispatch/passageway.h

@@ -55,12 +55,12 @@ public:
 	//硬件状态, 目前只做显示判断
 	std::chrono::system_clock::time_point	m_status_updata_time;	//状态更新时间点
 	unsigned char						m_last_heartbeat;			//上一次的心跳
-	//搬运器的设备状态数据,
+	//通道口的设备状态数据,
 	Hardware_device_status				m_actual_device_status;			//通道口的硬件设备状态
 	Load_status							m_actual_inside_load_status;	//通道口的内部负载状态, 门内地感是否有车.
 	Load_status							m_actual_outside_load_status;	//通道口的外部负载状态, 门外地感是否有车.
 	Overstep_the_boundary				m_actual_front_overstep_the_boundary;	//通道口 汽车前边界
-	Overstep_the_boundary				m_actual_back_overstep_the_boundary;	//通道口 汽车边界
+	Overstep_the_boundary				m_actual_back_overstep_the_boundary;	//通道口 汽车边界
 	Overstep_the_boundary				m_actual_height_overstep_the_boundary;	//通道口 车辆是否超高
 	Load_status							m_actual_outside_door_sensor;	//通道口 的外门处的传感器, 判断是否有车经过外门
 	//通道口的真实状态, 可能是路径中间的坐标

+ 2 - 0
error_code/error_code.h

@@ -342,6 +342,8 @@ enum Error_code
 	DISPATCH_MANAGER_STATUS_ERROR,						//调度管理模块,状态错误
 	DISPATCH_MANAGER_TASK_TYPE_ERROR,					//调度管理模块,任务类型错误
 	DISPATCH_MANAGER_IS_NOT_READY,						//调度管理模块,不在准备状态
+	DISPATCH_MANAGER_SPACE_LOCK_ERROR,					//调度管理模块,空间锁错误
+
 
 	DISPATCH_PROCESS_ERROR_BASE								= 0x13020000,
 	DISPATCH_PROCESS_IS_NOT_READY,						//调度流程, 不在准备状态

+ 24 - 52
main.cpp

@@ -54,54 +54,6 @@ GOOGLE_GLOG_DLL_DECL void shut_down_logging(const char* data, int size)
 using namespace std;
 
 
-std::string sendMsg(int terminal_id,int parkingspace_index_id, float x, std::string key, message::Dispatch_motion_direction direction)
-{
-
-	message::Locate_information locateInformation;
-	message::Dispatch_request_msg dispatchRequestMsg;
-	message::Base_info t_base_info;
-	message::Car_info car_info;
-	message::Parkspace_info parkspace_info;
-	t_base_info.set_msg_type(message::eDispatch_request_msg);
-	t_base_info.set_sender(message::eMain);
-	t_base_info.set_receiver(message::eDispatch_manager);
-	t_base_info.set_timeout_ms(100000000);
-
-	car_info.set_car_height(1.6);
-	car_info.set_car_width(1.8);
-	car_info.set_license("鄂Awk123");
-	car_info.set_car_wheel_width(1.8);
-	car_info.set_car_wheel_base(2.8);
-
-	locateInformation.set_locate_x(x);
-	locateInformation.set_locate_y(3);
-	locateInformation.set_locate_angle(90);
-	locateInformation.set_locate_length(3.2);
-	locateInformation.set_locate_height(1.6);
-	locateInformation.set_locate_width(1.8);
-	locateInformation.set_locate_correct(true);
-	locateInformation.set_locate_wheel_width(1.8);
-	locateInformation.set_locate_wheel_base(2.8);
-
-	parkspace_info.set_parkingspace_index_id(parkingspace_index_id);
-	parkspace_info.set_parkingspace_room_id(1);
-	parkspace_info.set_parkingspace_direction(message::Direction::eForward);
-	parkspace_info.set_parkingspace_floor_id(3);
-	parkspace_info.set_parkingspace_height(1.5);
-	parkspace_info.set_parkingspace_width(1.5);
-	parkspace_info.set_parkingspace_status(message::Parkspace_status::eParkspace_empty);
-	parkspace_info.mutable_car_info()->CopyFrom(car_info);
-
-	dispatchRequestMsg.mutable_base_info()->CopyFrom(t_base_info);
-	dispatchRequestMsg.mutable_locate_information()->CopyFrom(locateInformation);
-	dispatchRequestMsg.set_command_key(key);
-	dispatchRequestMsg.set_dispatch_motion_direction(direction);
-	dispatchRequestMsg.set_terminal_id(terminal_id);
-	dispatchRequestMsg.mutable_parkspace_info()->CopyFrom(parkspace_info);
-
-	LOG(INFO) << dispatchRequestMsg.DebugString();
-	return dispatchRequestMsg.SerializeAsString();
-}
 int main(int argc,char* argv[])
 {
 	Error_manager t_error;
@@ -139,7 +91,27 @@ int main(int argc,char* argv[])
 
 	while (1)
 	{
+		Dispatch_manager::space_device** tpp = Dispatch_manager::get_instance_references().mpp_space_lock;
+		for (int i = 0; i < 11; ++i)
+		{
+			for (int j = 0; j < 15; ++j)
+			{
+				if ( tpp[i][j].m_catcher_id  != -1 )
+				{
+					std::cout << " huli test :::: " << " tpp[i][j].m_catcher_id = " << tpp[i][j].m_catcher_id << std::endl;
+					std::cout << " huli test :::: " << " i = " << i << std::endl;
+					std::cout << " huli test :::: " << " j = " << j << std::endl;
+				}
+				if ( tpp[i][j].m_carrier_id  != -1 )
+				{
+					std::cout << " huli test :::: " << " tpp[i][j].m_carrier_id = " << tpp[i][j].m_carrier_id << std::endl;
+					std::cout << " huli test :::: " << " i = " << i << std::endl;
+					std::cout << " huli test :::: " << " j = " << j << std::endl;
+				}
+			}
+		}
 
+		std::this_thread::sleep_for(std::chrono::seconds(1));
 	}
 	return 0;
 #endif
@@ -178,7 +150,7 @@ int main(int argc,char* argv[])
 
 
 	Catcher t_catcher;
-	t_error = t_catcher.dispatch_device_base_init(1);
+	t_error = t_catcher.dispatch_device_base_init(1, 102);
 	std::cout << " huli test :::: " << " t_error = " << t_error << std::endl;
 	std::this_thread::sleep_for(std::chrono::seconds(2));
 
@@ -268,7 +240,7 @@ int main(int argc,char* argv[])
 
 
 	Carrier t_carrier20;
-	t_error = t_carrier20.dispatch_device_base_init(0);
+	t_error = t_carrier20.dispatch_device_base_init(0, 200);
 	std::cout << " huli test :::: " << " t_error = " << t_error << std::endl;
 	std::this_thread::sleep_for(std::chrono::seconds(2));
 
@@ -364,7 +336,7 @@ int main(int argc,char* argv[])
 
 
 	Carrier t_carrier21;
-	t_error = t_carrier21.dispatch_device_base_init(1);
+	t_error = t_carrier21.dispatch_device_base_init(1, 207);
 	std::cout << " huli test :::: " << " t_error = " << t_error << std::endl;
 	std::this_thread::sleep_for(std::chrono::seconds(2));
 
@@ -460,7 +432,7 @@ int main(int argc,char* argv[])
 
 
 	Carrier t_carrier22;
-	t_error = t_carrier22.dispatch_device_base_init(2);
+	t_error = t_carrier22.dispatch_device_base_init(2, 203);
 	std::cout << " huli test :::: " << " t_error = " << t_error << std::endl;
 	std::this_thread::sleep_for(std::chrono::seconds(2));
 

+ 15 - 46
message/dispatch_control.pb.cc

@@ -135,7 +135,7 @@ void InitDefaultsDispatch_control_response_msg() {
 }
 
 ::google::protobuf::Metadata file_level_metadata[4];
-const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[4];
+const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[3];
 
 const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Dispatch_plan_request_msg, _has_bits_),
@@ -312,26 +312,20 @@ void AddDescriptorsImpl() {
       "_CARRIER\020\031\022)\n%PASSAGEWAY_ROTATE_TURNTABL"
       "E_TO_OUTLET\020\032\022\023\n\017DISPATCH_FINISH\020\036\022\023\n\017DI"
       "SPATCH_CANCEL\020\037\022\022\n\016DISPATCH_PAUSE\020(\022\025\n\021D"
-      "ISPATCH_RESERVED\0202*\370\001\n\024Dispatch_device_t"
-      "ype\022\013\n\007ROBOT_1\020e\022\013\n\007ROBOT_2\020f\022\016\n\tCARRIER"
-      "_1\020\310\001\022\016\n\tCARRIER_2\020\317\001\022\016\n\tCARRIER_3\020\313\001\022\021\n"
-      "\014PASSAGEWAY_0\020\254\002\022\021\n\014PASSAGEWAY_1\020\255\002\022\021\n\014P"
-      "ASSAGEWAY_2\020\256\002\022\021\n\014PASSAGEWAY_3\020\257\002\022\021\n\014PAS"
-      "SAGEWAY_4\020\260\002\022\021\n\014PASSAGEWAY_5\020\261\002\022\021\n\014PASSA"
-      "GEWAY_6\020\262\002\022\021\n\014PASSAGEWAY_7\020\263\002*\244\001\n\035Dispat"
-      "ch_device_target_status\022\032\n\026E_TARGET_STAT"
-      "US_UNKNOW\020\000\022\030\n\024E_TARGET_STATUS_IDLE\020\001\022\030\n"
-      "\024E_TARGET_STATUS_BUSY\020\002\022\031\n\025E_TARGET_STAT"
-      "US_READY\020\003\022\030\n\024E_TARGET_STATUS_WAIT\020\004*\350\001\n"
-      "\033Dispatch_device_task_status\022\022\n\016E_TASK_C"
-      "REATED\020\000\022\020\n\014E_TASK_ISSUE\020\001\022\021\n\rE_TASK_SIG"
-      "NED\020\002\022\022\n\016E_TASK_WORKING\020\003\022\017\n\013E_TASK_OVER"
-      "\020\004\022\017\n\013E_TASK_STOP\020\005\022\020\n\014E_TASK_ERROR\020\013\022\021\n"
-      "\rE_TASK_CANCEL\020\025\022\017\n\013E_TASK_DEAD\020\026\022\023\n\017E_T"
-      "ASK_WITHDRAW\020\037\022\017\n\013E_TASK_FREE\020 "
+      "ISPATCH_RESERVED\0202*\244\001\n\035Dispatch_device_t"
+      "arget_status\022\032\n\026E_TARGET_STATUS_UNKNOW\020\000"
+      "\022\030\n\024E_TARGET_STATUS_IDLE\020\001\022\030\n\024E_TARGET_S"
+      "TATUS_BUSY\020\002\022\031\n\025E_TARGET_STATUS_READY\020\003\022"
+      "\030\n\024E_TARGET_STATUS_WAIT\020\004*\350\001\n\033Dispatch_d"
+      "evice_task_status\022\022\n\016E_TASK_CREATED\020\000\022\020\n"
+      "\014E_TASK_ISSUE\020\001\022\021\n\rE_TASK_SIGNED\020\002\022\022\n\016E_"
+      "TASK_WORKING\020\003\022\017\n\013E_TASK_OVER\020\004\022\017\n\013E_TAS"
+      "K_STOP\020\005\022\020\n\014E_TASK_ERROR\020\013\022\021\n\rE_TASK_CAN"
+      "CEL\020\025\022\017\n\013E_TASK_DEAD\020\026\022\023\n\017E_TASK_WITHDRA"
+      "W\020\037\022\017\n\013E_TASK_FREE\020 "
   };
   ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-      descriptor, 2951);
+      descriptor, 2700);
   ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
     "dispatch_control.proto", &protobuf_RegisterTypes);
   ::protobuf_message_5fbase_2eproto::AddDescriptors();
@@ -386,34 +380,9 @@ bool Dispatch_task_type_IsValid(int value) {
   }
 }
 
-const ::google::protobuf::EnumDescriptor* Dispatch_device_type_descriptor() {
-  protobuf_dispatch_5fcontrol_2eproto::protobuf_AssignDescriptorsOnce();
-  return protobuf_dispatch_5fcontrol_2eproto::file_level_enum_descriptors[1];
-}
-bool Dispatch_device_type_IsValid(int value) {
-  switch (value) {
-    case 101:
-    case 102:
-    case 200:
-    case 203:
-    case 207:
-    case 300:
-    case 301:
-    case 302:
-    case 303:
-    case 304:
-    case 305:
-    case 306:
-    case 307:
-      return true;
-    default:
-      return false;
-  }
-}
-
 const ::google::protobuf::EnumDescriptor* Dispatch_device_target_status_descriptor() {
   protobuf_dispatch_5fcontrol_2eproto::protobuf_AssignDescriptorsOnce();
-  return protobuf_dispatch_5fcontrol_2eproto::file_level_enum_descriptors[2];
+  return protobuf_dispatch_5fcontrol_2eproto::file_level_enum_descriptors[1];
 }
 bool Dispatch_device_target_status_IsValid(int value) {
   switch (value) {
@@ -430,7 +399,7 @@ bool Dispatch_device_target_status_IsValid(int value) {
 
 const ::google::protobuf::EnumDescriptor* Dispatch_device_task_status_descriptor() {
   protobuf_dispatch_5fcontrol_2eproto::protobuf_AssignDescriptorsOnce();
-  return protobuf_dispatch_5fcontrol_2eproto::file_level_enum_descriptors[3];
+  return protobuf_dispatch_5fcontrol_2eproto::file_level_enum_descriptors[2];
 }
 bool Dispatch_device_task_status_IsValid(int value) {
   switch (value) {

+ 0 - 35
message/dispatch_control.pb.h

@@ -117,36 +117,6 @@ inline bool Dispatch_task_type_Parse(
   return ::google::protobuf::internal::ParseNamedEnum<Dispatch_task_type>(
     Dispatch_task_type_descriptor(), name, value);
 }
-enum Dispatch_device_type {
-  ROBOT_1 = 101,
-  ROBOT_2 = 102,
-  CARRIER_1 = 200,
-  CARRIER_2 = 207,
-  CARRIER_3 = 203,
-  PASSAGEWAY_0 = 300,
-  PASSAGEWAY_1 = 301,
-  PASSAGEWAY_2 = 302,
-  PASSAGEWAY_3 = 303,
-  PASSAGEWAY_4 = 304,
-  PASSAGEWAY_5 = 305,
-  PASSAGEWAY_6 = 306,
-  PASSAGEWAY_7 = 307
-};
-bool Dispatch_device_type_IsValid(int value);
-const Dispatch_device_type Dispatch_device_type_MIN = ROBOT_1;
-const Dispatch_device_type Dispatch_device_type_MAX = PASSAGEWAY_7;
-const int Dispatch_device_type_ARRAYSIZE = Dispatch_device_type_MAX + 1;
-
-const ::google::protobuf::EnumDescriptor* Dispatch_device_type_descriptor();
-inline const ::std::string& Dispatch_device_type_Name(Dispatch_device_type value) {
-  return ::google::protobuf::internal::NameOfEnum(
-    Dispatch_device_type_descriptor(), value);
-}
-inline bool Dispatch_device_type_Parse(
-    const ::std::string& name, Dispatch_device_type* value) {
-  return ::google::protobuf::internal::ParseNamedEnum<Dispatch_device_type>(
-    Dispatch_device_type_descriptor(), name, value);
-}
 enum Dispatch_device_target_status {
   E_TARGET_STATUS_UNKNOW = 0,
   E_TARGET_STATUS_IDLE = 1,
@@ -2096,11 +2066,6 @@ template <>
 inline const EnumDescriptor* GetEnumDescriptor< ::message::Dispatch_task_type>() {
   return ::message::Dispatch_task_type_descriptor();
 }
-template <> struct is_proto_enum< ::message::Dispatch_device_type> : ::google::protobuf::internal::true_type {};
-template <>
-inline const EnumDescriptor* GetEnumDescriptor< ::message::Dispatch_device_type>() {
-  return ::message::Dispatch_device_type_descriptor();
-}
 template <> struct is_proto_enum< ::message::Dispatch_device_target_status> : ::google::protobuf::internal::true_type {};
 template <>
 inline const EnumDescriptor* GetEnumDescriptor< ::message::Dispatch_device_target_status>() {

+ 1 - 19
message/dispatch_control.proto

@@ -72,25 +72,7 @@ enum Dispatch_task_type
     //同时释放  搬运器和机器手的资源
 }
 
-//调度设备的类型
-enum Dispatch_device_type
-{
-    ROBOT_1                                 = 101;      //一号出口的专用机器手(只能负责1号出口的取车)(目前没有安装,暂时不考虑)
-    ROBOT_2                                 = 102;      //中间的大型机器手   (可以负责1~6号出入口的停车和取车)
-
-    CARRIER_1                               = 200;      //左侧0号电梯井的搬运器(升降电梯 中跑车 小跑车 三合一为搬运器)
-    CARRIER_2                               = 207;      //右侧7号电梯井的搬运器(升降电梯 中跑车 小跑车 三合一为搬运器)
-    CARRIER_3                               = 203;      //中间3楼的搬运器(中跑车 小跑车 二合一为搬运器)(没有电梯, 只能在3楼活动)
-
-    PASSAGEWAY_0                            = 300;      //0号出口(在左侧电梯井, 只能取车)(暂时不存在)
-    PASSAGEWAY_1                            = 301;      //1号出入口
-    PASSAGEWAY_2                            = 302;      //2号出入口
-    PASSAGEWAY_3                            = 303;      //3号出入口
-    PASSAGEWAY_4                            = 304;      //4号出入口
-    PASSAGEWAY_5                            = 305;      //5号出入口
-    PASSAGEWAY_6                            = 306;      //6号出入口
-    PASSAGEWAY_7                            = 307;      //7号出口(在右侧电梯井, 只能取车)
-}
+
 
 //调度设备的目标状态, 设备完成 调度控制的任务请求 之后 将设备状态改为这个
 enum Dispatch_device_target_status

文件差异内容过多而无法显示
+ 1395 - 221
message/dispatch_message.pb.cc


+ 893 - 4
message/dispatch_message.pb.h

@@ -31,7 +31,6 @@
 #include <google/protobuf/generated_enum_reflection.h>
 #include <google/protobuf/unknown_field_set.h>
 #include "message_base.pb.h"
-#include "dispatch_control.pb.h"
 // @@protoc_insertion_point(includes)
 
 namespace protobuf_dispatch_5fmessage_2eproto {
@@ -39,7 +38,7 @@ namespace protobuf_dispatch_5fmessage_2eproto {
 struct TableStruct {
   static const ::google::protobuf::internal::ParseTableField entries[];
   static const ::google::protobuf::internal::AuxillaryParseTableField aux[];
-  static const ::google::protobuf::internal::ParseTable schema[7];
+  static const ::google::protobuf::internal::ParseTable schema[8];
   static const ::google::protobuf::internal::FieldMetadata field_metadata[];
   static const ::google::protobuf::internal::SerializationTable serialization_table[];
   static const ::google::protobuf::uint32 offsets[];
@@ -55,6 +54,8 @@ void InitDefaultsCatcher_dataImpl();
 void InitDefaultsCatcher_data();
 void InitDefaultsCarrier_dataImpl();
 void InitDefaultsCarrier_data();
+void InitDefaultsPassageway_dataImpl();
+void InitDefaultsPassageway_data();
 void InitDefaultsDispatch_manager_status_msgImpl();
 void InitDefaultsDispatch_manager_status_msg();
 void InitDefaultsDispatch_manager_data_msgImpl();
@@ -65,6 +66,7 @@ inline void InitDefaults() {
   InitDefaultsDispatch_response_msg();
   InitDefaultsCatcher_data();
   InitDefaultsCarrier_data();
+  InitDefaultsPassageway_data();
   InitDefaultsDispatch_manager_status_msg();
   InitDefaultsDispatch_manager_data_msg();
 }
@@ -91,6 +93,9 @@ extern Dispatch_response_msgDefaultTypeInternal _Dispatch_response_msg_default_i
 class Dispatch_terminal_status_msg;
 class Dispatch_terminal_status_msgDefaultTypeInternal;
 extern Dispatch_terminal_status_msgDefaultTypeInternal _Dispatch_terminal_status_msg_default_instance_;
+class Passageway_data;
+class Passageway_dataDefaultTypeInternal;
+extern Passageway_dataDefaultTypeInternal _Passageway_data_default_instance_;
 }  // namespace message
 namespace message {
 
@@ -1551,6 +1556,303 @@ class Carrier_data : public ::google::protobuf::Message /* @@protoc_insertion_po
 };
 // -------------------------------------------------------------------
 
+class Passageway_data : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:message.Passageway_data) */ {
+ public:
+  Passageway_data();
+  virtual ~Passageway_data();
+
+  Passageway_data(const Passageway_data& from);
+
+  inline Passageway_data& operator=(const Passageway_data& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  Passageway_data(Passageway_data&& from) noexcept
+    : Passageway_data() {
+    *this = ::std::move(from);
+  }
+
+  inline Passageway_data& operator=(Passageway_data&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
+    return _internal_metadata_.unknown_fields();
+  }
+  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
+    return _internal_metadata_.mutable_unknown_fields();
+  }
+
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const Passageway_data& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const Passageway_data* internal_default_instance() {
+    return reinterpret_cast<const Passageway_data*>(
+               &_Passageway_data_default_instance_);
+  }
+  static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
+    5;
+
+  void Swap(Passageway_data* other);
+  friend void swap(Passageway_data& a, Passageway_data& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline Passageway_data* New() const PROTOBUF_FINAL { return New(NULL); }
+
+  Passageway_data* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL;
+  void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
+  void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL;
+  void CopyFrom(const Passageway_data& from);
+  void MergeFrom(const Passageway_data& from);
+  void Clear() PROTOBUF_FINAL;
+  bool IsInitialized() const PROTOBUF_FINAL;
+
+  size_t ByteSizeLong() const PROTOBUF_FINAL;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL;
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL;
+  int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; }
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const PROTOBUF_FINAL;
+  void InternalSwap(Passageway_data* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // optional string actual_error_code = 15;
+  bool has_actual_error_code() const;
+  void clear_actual_error_code();
+  static const int kActualErrorCodeFieldNumber = 15;
+  const ::std::string& actual_error_code() const;
+  void set_actual_error_code(const ::std::string& value);
+  #if LANG_CXX11
+  void set_actual_error_code(::std::string&& value);
+  #endif
+  void set_actual_error_code(const char* value);
+  void set_actual_error_code(const char* value, size_t size);
+  ::std::string* mutable_actual_error_code();
+  ::std::string* release_actual_error_code();
+  void set_allocated_actual_error_code(::std::string* actual_error_code);
+
+  // optional string actual_warning_code = 16;
+  bool has_actual_warning_code() const;
+  void clear_actual_warning_code();
+  static const int kActualWarningCodeFieldNumber = 16;
+  const ::std::string& actual_warning_code() const;
+  void set_actual_warning_code(const ::std::string& value);
+  #if LANG_CXX11
+  void set_actual_warning_code(::std::string&& value);
+  #endif
+  void set_actual_warning_code(const char* value);
+  void set_actual_warning_code(const char* value, size_t size);
+  ::std::string* mutable_actual_warning_code();
+  ::std::string* release_actual_warning_code();
+  void set_allocated_actual_warning_code(::std::string* actual_warning_code);
+
+  // optional string actual_error_description = 17;
+  bool has_actual_error_description() const;
+  void clear_actual_error_description();
+  static const int kActualErrorDescriptionFieldNumber = 17;
+  const ::std::string& actual_error_description() const;
+  void set_actual_error_description(const ::std::string& value);
+  #if LANG_CXX11
+  void set_actual_error_description(::std::string&& value);
+  #endif
+  void set_actual_error_description(const char* value);
+  void set_actual_error_description(const char* value, size_t size);
+  ::std::string* mutable_actual_error_description();
+  ::std::string* release_actual_error_description();
+  void set_allocated_actual_error_description(::std::string* actual_error_description);
+
+  // required .message.Dispatch_device_status dispatch_device_status = 2;
+  bool has_dispatch_device_status() const;
+  void clear_dispatch_device_status();
+  static const int kDispatchDeviceStatusFieldNumber = 2;
+  ::message::Dispatch_device_status dispatch_device_status() const;
+  void set_dispatch_device_status(::message::Dispatch_device_status value);
+
+  // required int32 device_id = 3;
+  bool has_device_id() const;
+  void clear_device_id();
+  static const int kDeviceIdFieldNumber = 3;
+  ::google::protobuf::int32 device_id() const;
+  void set_device_id(::google::protobuf::int32 value);
+
+  // optional .message.Hardware_device_status actual_device_status = 4;
+  bool has_actual_device_status() const;
+  void clear_actual_device_status();
+  static const int kActualDeviceStatusFieldNumber = 4;
+  ::message::Hardware_device_status actual_device_status() const;
+  void set_actual_device_status(::message::Hardware_device_status value);
+
+  // optional .message.Load_status actual_inside_load_status = 5;
+  bool has_actual_inside_load_status() const;
+  void clear_actual_inside_load_status();
+  static const int kActualInsideLoadStatusFieldNumber = 5;
+  ::message::Load_status actual_inside_load_status() const;
+  void set_actual_inside_load_status(::message::Load_status value);
+
+  // optional .message.Load_status actual_outside_load_status = 6;
+  bool has_actual_outside_load_status() const;
+  void clear_actual_outside_load_status();
+  static const int kActualOutsideLoadStatusFieldNumber = 6;
+  ::message::Load_status actual_outside_load_status() const;
+  void set_actual_outside_load_status(::message::Load_status value);
+
+  // optional .message.Overstep_the_boundary actual_front_overstep_the_boundary = 7;
+  bool has_actual_front_overstep_the_boundary() const;
+  void clear_actual_front_overstep_the_boundary();
+  static const int kActualFrontOverstepTheBoundaryFieldNumber = 7;
+  ::message::Overstep_the_boundary actual_front_overstep_the_boundary() const;
+  void set_actual_front_overstep_the_boundary(::message::Overstep_the_boundary value);
+
+  // optional .message.Overstep_the_boundary actual_back_overstep_the_boundary = 8;
+  bool has_actual_back_overstep_the_boundary() const;
+  void clear_actual_back_overstep_the_boundary();
+  static const int kActualBackOverstepTheBoundaryFieldNumber = 8;
+  ::message::Overstep_the_boundary actual_back_overstep_the_boundary() const;
+  void set_actual_back_overstep_the_boundary(::message::Overstep_the_boundary value);
+
+  // optional .message.Overstep_the_boundary actual_height_overstep_the_boundary = 9;
+  bool has_actual_height_overstep_the_boundary() const;
+  void clear_actual_height_overstep_the_boundary();
+  static const int kActualHeightOverstepTheBoundaryFieldNumber = 9;
+  ::message::Overstep_the_boundary actual_height_overstep_the_boundary() const;
+  void set_actual_height_overstep_the_boundary(::message::Overstep_the_boundary value);
+
+  // optional .message.Load_status actual_outside_door_sensor = 10;
+  bool has_actual_outside_door_sensor() const;
+  void clear_actual_outside_door_sensor();
+  static const int kActualOutsideDoorSensorFieldNumber = 10;
+  ::message::Load_status actual_outside_door_sensor() const;
+  void set_actual_outside_door_sensor(::message::Load_status value);
+
+  // optional .message.Door_motion actual_inside_door_motion = 11;
+  bool has_actual_inside_door_motion() const;
+  void clear_actual_inside_door_motion();
+  static const int kActualInsideDoorMotionFieldNumber = 11;
+  ::message::Door_motion actual_inside_door_motion() const;
+  void set_actual_inside_door_motion(::message::Door_motion value);
+
+  // optional .message.Door_motion actual_outside_door_motion = 12;
+  bool has_actual_outside_door_motion() const;
+  void clear_actual_outside_door_motion();
+  static const int kActualOutsideDoorMotionFieldNumber = 12;
+  ::message::Door_motion actual_outside_door_motion() const;
+  void set_actual_outside_door_motion(::message::Door_motion value);
+
+  // optional .message.Load_status actual_turntable_load_status = 13;
+  bool has_actual_turntable_load_status() const;
+  void clear_actual_turntable_load_status();
+  static const int kActualTurntableLoadStatusFieldNumber = 13;
+  ::message::Load_status actual_turntable_load_status() const;
+  void set_actual_turntable_load_status(::message::Load_status value);
+
+  // optional .message.Turntable_direction actual_turntable_direction = 14;
+  bool has_actual_turntable_direction() const;
+  void clear_actual_turntable_direction();
+  static const int kActualTurntableDirectionFieldNumber = 14;
+  ::message::Turntable_direction actual_turntable_direction() const;
+  void set_actual_turntable_direction(::message::Turntable_direction value);
+
+  // required .message.Dispatch_device_type dispatch_device_type = 1;
+  bool has_dispatch_device_type() const;
+  void clear_dispatch_device_type();
+  static const int kDispatchDeviceTypeFieldNumber = 1;
+  ::message::Dispatch_device_type dispatch_device_type() const;
+  void set_dispatch_device_type(::message::Dispatch_device_type value);
+
+  // @@protoc_insertion_point(class_scope:message.Passageway_data)
+ private:
+  void set_has_dispatch_device_type();
+  void clear_has_dispatch_device_type();
+  void set_has_dispatch_device_status();
+  void clear_has_dispatch_device_status();
+  void set_has_device_id();
+  void clear_has_device_id();
+  void set_has_actual_device_status();
+  void clear_has_actual_device_status();
+  void set_has_actual_inside_load_status();
+  void clear_has_actual_inside_load_status();
+  void set_has_actual_outside_load_status();
+  void clear_has_actual_outside_load_status();
+  void set_has_actual_front_overstep_the_boundary();
+  void clear_has_actual_front_overstep_the_boundary();
+  void set_has_actual_back_overstep_the_boundary();
+  void clear_has_actual_back_overstep_the_boundary();
+  void set_has_actual_height_overstep_the_boundary();
+  void clear_has_actual_height_overstep_the_boundary();
+  void set_has_actual_outside_door_sensor();
+  void clear_has_actual_outside_door_sensor();
+  void set_has_actual_inside_door_motion();
+  void clear_has_actual_inside_door_motion();
+  void set_has_actual_outside_door_motion();
+  void clear_has_actual_outside_door_motion();
+  void set_has_actual_turntable_load_status();
+  void clear_has_actual_turntable_load_status();
+  void set_has_actual_turntable_direction();
+  void clear_has_actual_turntable_direction();
+  void set_has_actual_error_code();
+  void clear_has_actual_error_code();
+  void set_has_actual_warning_code();
+  void clear_has_actual_warning_code();
+  void set_has_actual_error_description();
+  void clear_has_actual_error_description();
+
+  // helper for ByteSizeLong()
+  size_t RequiredFieldsByteSizeFallback() const;
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::HasBits<1> _has_bits_;
+  mutable int _cached_size_;
+  ::google::protobuf::internal::ArenaStringPtr actual_error_code_;
+  ::google::protobuf::internal::ArenaStringPtr actual_warning_code_;
+  ::google::protobuf::internal::ArenaStringPtr actual_error_description_;
+  int dispatch_device_status_;
+  ::google::protobuf::int32 device_id_;
+  int actual_device_status_;
+  int actual_inside_load_status_;
+  int actual_outside_load_status_;
+  int actual_front_overstep_the_boundary_;
+  int actual_back_overstep_the_boundary_;
+  int actual_height_overstep_the_boundary_;
+  int actual_outside_door_sensor_;
+  int actual_inside_door_motion_;
+  int actual_outside_door_motion_;
+  int actual_turntable_load_status_;
+  int actual_turntable_direction_;
+  int dispatch_device_type_;
+  friend struct ::protobuf_dispatch_5fmessage_2eproto::TableStruct;
+  friend void ::protobuf_dispatch_5fmessage_2eproto::InitDefaultsPassageway_dataImpl();
+};
+// -------------------------------------------------------------------
+
 class Dispatch_manager_status_msg : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:message.Dispatch_manager_status_msg) */ {
  public:
   Dispatch_manager_status_msg();
@@ -1593,7 +1895,7 @@ class Dispatch_manager_status_msg : public ::google::protobuf::Message /* @@prot
                &_Dispatch_manager_status_msg_default_instance_);
   }
   static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
-    5;
+    6;
 
   void Swap(Dispatch_manager_status_msg* other);
   friend void swap(Dispatch_manager_status_msg& a, Dispatch_manager_status_msg& b) {
@@ -1664,6 +1966,18 @@ class Dispatch_manager_status_msg : public ::google::protobuf::Message /* @@prot
   const ::google::protobuf::RepeatedPtrField< ::message::Carrier_data >&
       carrier_data_map() const;
 
+  // repeated .message.Passageway_data passageway_data_map = 6;
+  int passageway_data_map_size() const;
+  void clear_passageway_data_map();
+  static const int kPassagewayDataMapFieldNumber = 6;
+  const ::message::Passageway_data& passageway_data_map(int index) const;
+  ::message::Passageway_data* mutable_passageway_data_map(int index);
+  ::message::Passageway_data* add_passageway_data_map();
+  ::google::protobuf::RepeatedPtrField< ::message::Passageway_data >*
+      mutable_passageway_data_map();
+  const ::google::protobuf::RepeatedPtrField< ::message::Passageway_data >&
+      passageway_data_map() const;
+
   // required .message.Base_info base_info = 1;
   bool has_base_info() const;
   void clear_base_info();
@@ -1704,6 +2018,7 @@ class Dispatch_manager_status_msg : public ::google::protobuf::Message /* @@prot
   mutable int _cached_size_;
   ::google::protobuf::RepeatedPtrField< ::message::Catcher_data > catcher_data_map_;
   ::google::protobuf::RepeatedPtrField< ::message::Carrier_data > carrier_data_map_;
+  ::google::protobuf::RepeatedPtrField< ::message::Passageway_data > passageway_data_map_;
   ::message::Base_info* base_info_;
   ::google::protobuf::int32 dispatch_id_;
   int dispatch_manager_status_;
@@ -1754,7 +2069,7 @@ class Dispatch_manager_data_msg : public ::google::protobuf::Message /* @@protoc
                &_Dispatch_manager_data_msg_default_instance_);
   }
   static PROTOBUF_CONSTEXPR int const kIndexInFileMessages =
-    6;
+    7;
 
   void Swap(Dispatch_manager_data_msg* other);
   friend void swap(Dispatch_manager_data_msg& a, Dispatch_manager_data_msg& b) {
@@ -3655,6 +3970,548 @@ inline void Carrier_data::set_allocated_actual_error_description(::std::string*
 
 // -------------------------------------------------------------------
 
+// Passageway_data
+
+// required .message.Dispatch_device_type dispatch_device_type = 1;
+inline bool Passageway_data::has_dispatch_device_type() const {
+  return (_has_bits_[0] & 0x00010000u) != 0;
+}
+inline void Passageway_data::set_has_dispatch_device_type() {
+  _has_bits_[0] |= 0x00010000u;
+}
+inline void Passageway_data::clear_has_dispatch_device_type() {
+  _has_bits_[0] &= ~0x00010000u;
+}
+inline void Passageway_data::clear_dispatch_device_type() {
+  dispatch_device_type_ = 101;
+  clear_has_dispatch_device_type();
+}
+inline ::message::Dispatch_device_type Passageway_data::dispatch_device_type() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.dispatch_device_type)
+  return static_cast< ::message::Dispatch_device_type >(dispatch_device_type_);
+}
+inline void Passageway_data::set_dispatch_device_type(::message::Dispatch_device_type value) {
+  assert(::message::Dispatch_device_type_IsValid(value));
+  set_has_dispatch_device_type();
+  dispatch_device_type_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.dispatch_device_type)
+}
+
+// required .message.Dispatch_device_status dispatch_device_status = 2;
+inline bool Passageway_data::has_dispatch_device_status() const {
+  return (_has_bits_[0] & 0x00000008u) != 0;
+}
+inline void Passageway_data::set_has_dispatch_device_status() {
+  _has_bits_[0] |= 0x00000008u;
+}
+inline void Passageway_data::clear_has_dispatch_device_status() {
+  _has_bits_[0] &= ~0x00000008u;
+}
+inline void Passageway_data::clear_dispatch_device_status() {
+  dispatch_device_status_ = 0;
+  clear_has_dispatch_device_status();
+}
+inline ::message::Dispatch_device_status Passageway_data::dispatch_device_status() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.dispatch_device_status)
+  return static_cast< ::message::Dispatch_device_status >(dispatch_device_status_);
+}
+inline void Passageway_data::set_dispatch_device_status(::message::Dispatch_device_status value) {
+  assert(::message::Dispatch_device_status_IsValid(value));
+  set_has_dispatch_device_status();
+  dispatch_device_status_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.dispatch_device_status)
+}
+
+// required int32 device_id = 3;
+inline bool Passageway_data::has_device_id() const {
+  return (_has_bits_[0] & 0x00000010u) != 0;
+}
+inline void Passageway_data::set_has_device_id() {
+  _has_bits_[0] |= 0x00000010u;
+}
+inline void Passageway_data::clear_has_device_id() {
+  _has_bits_[0] &= ~0x00000010u;
+}
+inline void Passageway_data::clear_device_id() {
+  device_id_ = 0;
+  clear_has_device_id();
+}
+inline ::google::protobuf::int32 Passageway_data::device_id() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.device_id)
+  return device_id_;
+}
+inline void Passageway_data::set_device_id(::google::protobuf::int32 value) {
+  set_has_device_id();
+  device_id_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.device_id)
+}
+
+// optional .message.Hardware_device_status actual_device_status = 4;
+inline bool Passageway_data::has_actual_device_status() const {
+  return (_has_bits_[0] & 0x00000020u) != 0;
+}
+inline void Passageway_data::set_has_actual_device_status() {
+  _has_bits_[0] |= 0x00000020u;
+}
+inline void Passageway_data::clear_has_actual_device_status() {
+  _has_bits_[0] &= ~0x00000020u;
+}
+inline void Passageway_data::clear_actual_device_status() {
+  actual_device_status_ = 0;
+  clear_has_actual_device_status();
+}
+inline ::message::Hardware_device_status Passageway_data::actual_device_status() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_device_status)
+  return static_cast< ::message::Hardware_device_status >(actual_device_status_);
+}
+inline void Passageway_data::set_actual_device_status(::message::Hardware_device_status value) {
+  assert(::message::Hardware_device_status_IsValid(value));
+  set_has_actual_device_status();
+  actual_device_status_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_device_status)
+}
+
+// optional .message.Load_status actual_inside_load_status = 5;
+inline bool Passageway_data::has_actual_inside_load_status() const {
+  return (_has_bits_[0] & 0x00000040u) != 0;
+}
+inline void Passageway_data::set_has_actual_inside_load_status() {
+  _has_bits_[0] |= 0x00000040u;
+}
+inline void Passageway_data::clear_has_actual_inside_load_status() {
+  _has_bits_[0] &= ~0x00000040u;
+}
+inline void Passageway_data::clear_actual_inside_load_status() {
+  actual_inside_load_status_ = 0;
+  clear_has_actual_inside_load_status();
+}
+inline ::message::Load_status Passageway_data::actual_inside_load_status() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_inside_load_status)
+  return static_cast< ::message::Load_status >(actual_inside_load_status_);
+}
+inline void Passageway_data::set_actual_inside_load_status(::message::Load_status value) {
+  assert(::message::Load_status_IsValid(value));
+  set_has_actual_inside_load_status();
+  actual_inside_load_status_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_inside_load_status)
+}
+
+// optional .message.Load_status actual_outside_load_status = 6;
+inline bool Passageway_data::has_actual_outside_load_status() const {
+  return (_has_bits_[0] & 0x00000080u) != 0;
+}
+inline void Passageway_data::set_has_actual_outside_load_status() {
+  _has_bits_[0] |= 0x00000080u;
+}
+inline void Passageway_data::clear_has_actual_outside_load_status() {
+  _has_bits_[0] &= ~0x00000080u;
+}
+inline void Passageway_data::clear_actual_outside_load_status() {
+  actual_outside_load_status_ = 0;
+  clear_has_actual_outside_load_status();
+}
+inline ::message::Load_status Passageway_data::actual_outside_load_status() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_outside_load_status)
+  return static_cast< ::message::Load_status >(actual_outside_load_status_);
+}
+inline void Passageway_data::set_actual_outside_load_status(::message::Load_status value) {
+  assert(::message::Load_status_IsValid(value));
+  set_has_actual_outside_load_status();
+  actual_outside_load_status_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_outside_load_status)
+}
+
+// optional .message.Overstep_the_boundary actual_front_overstep_the_boundary = 7;
+inline bool Passageway_data::has_actual_front_overstep_the_boundary() const {
+  return (_has_bits_[0] & 0x00000100u) != 0;
+}
+inline void Passageway_data::set_has_actual_front_overstep_the_boundary() {
+  _has_bits_[0] |= 0x00000100u;
+}
+inline void Passageway_data::clear_has_actual_front_overstep_the_boundary() {
+  _has_bits_[0] &= ~0x00000100u;
+}
+inline void Passageway_data::clear_actual_front_overstep_the_boundary() {
+  actual_front_overstep_the_boundary_ = 0;
+  clear_has_actual_front_overstep_the_boundary();
+}
+inline ::message::Overstep_the_boundary Passageway_data::actual_front_overstep_the_boundary() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_front_overstep_the_boundary)
+  return static_cast< ::message::Overstep_the_boundary >(actual_front_overstep_the_boundary_);
+}
+inline void Passageway_data::set_actual_front_overstep_the_boundary(::message::Overstep_the_boundary value) {
+  assert(::message::Overstep_the_boundary_IsValid(value));
+  set_has_actual_front_overstep_the_boundary();
+  actual_front_overstep_the_boundary_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_front_overstep_the_boundary)
+}
+
+// optional .message.Overstep_the_boundary actual_back_overstep_the_boundary = 8;
+inline bool Passageway_data::has_actual_back_overstep_the_boundary() const {
+  return (_has_bits_[0] & 0x00000200u) != 0;
+}
+inline void Passageway_data::set_has_actual_back_overstep_the_boundary() {
+  _has_bits_[0] |= 0x00000200u;
+}
+inline void Passageway_data::clear_has_actual_back_overstep_the_boundary() {
+  _has_bits_[0] &= ~0x00000200u;
+}
+inline void Passageway_data::clear_actual_back_overstep_the_boundary() {
+  actual_back_overstep_the_boundary_ = 0;
+  clear_has_actual_back_overstep_the_boundary();
+}
+inline ::message::Overstep_the_boundary Passageway_data::actual_back_overstep_the_boundary() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_back_overstep_the_boundary)
+  return static_cast< ::message::Overstep_the_boundary >(actual_back_overstep_the_boundary_);
+}
+inline void Passageway_data::set_actual_back_overstep_the_boundary(::message::Overstep_the_boundary value) {
+  assert(::message::Overstep_the_boundary_IsValid(value));
+  set_has_actual_back_overstep_the_boundary();
+  actual_back_overstep_the_boundary_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_back_overstep_the_boundary)
+}
+
+// optional .message.Overstep_the_boundary actual_height_overstep_the_boundary = 9;
+inline bool Passageway_data::has_actual_height_overstep_the_boundary() const {
+  return (_has_bits_[0] & 0x00000400u) != 0;
+}
+inline void Passageway_data::set_has_actual_height_overstep_the_boundary() {
+  _has_bits_[0] |= 0x00000400u;
+}
+inline void Passageway_data::clear_has_actual_height_overstep_the_boundary() {
+  _has_bits_[0] &= ~0x00000400u;
+}
+inline void Passageway_data::clear_actual_height_overstep_the_boundary() {
+  actual_height_overstep_the_boundary_ = 0;
+  clear_has_actual_height_overstep_the_boundary();
+}
+inline ::message::Overstep_the_boundary Passageway_data::actual_height_overstep_the_boundary() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_height_overstep_the_boundary)
+  return static_cast< ::message::Overstep_the_boundary >(actual_height_overstep_the_boundary_);
+}
+inline void Passageway_data::set_actual_height_overstep_the_boundary(::message::Overstep_the_boundary value) {
+  assert(::message::Overstep_the_boundary_IsValid(value));
+  set_has_actual_height_overstep_the_boundary();
+  actual_height_overstep_the_boundary_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_height_overstep_the_boundary)
+}
+
+// optional .message.Load_status actual_outside_door_sensor = 10;
+inline bool Passageway_data::has_actual_outside_door_sensor() const {
+  return (_has_bits_[0] & 0x00000800u) != 0;
+}
+inline void Passageway_data::set_has_actual_outside_door_sensor() {
+  _has_bits_[0] |= 0x00000800u;
+}
+inline void Passageway_data::clear_has_actual_outside_door_sensor() {
+  _has_bits_[0] &= ~0x00000800u;
+}
+inline void Passageway_data::clear_actual_outside_door_sensor() {
+  actual_outside_door_sensor_ = 0;
+  clear_has_actual_outside_door_sensor();
+}
+inline ::message::Load_status Passageway_data::actual_outside_door_sensor() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_outside_door_sensor)
+  return static_cast< ::message::Load_status >(actual_outside_door_sensor_);
+}
+inline void Passageway_data::set_actual_outside_door_sensor(::message::Load_status value) {
+  assert(::message::Load_status_IsValid(value));
+  set_has_actual_outside_door_sensor();
+  actual_outside_door_sensor_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_outside_door_sensor)
+}
+
+// optional .message.Door_motion actual_inside_door_motion = 11;
+inline bool Passageway_data::has_actual_inside_door_motion() const {
+  return (_has_bits_[0] & 0x00001000u) != 0;
+}
+inline void Passageway_data::set_has_actual_inside_door_motion() {
+  _has_bits_[0] |= 0x00001000u;
+}
+inline void Passageway_data::clear_has_actual_inside_door_motion() {
+  _has_bits_[0] &= ~0x00001000u;
+}
+inline void Passageway_data::clear_actual_inside_door_motion() {
+  actual_inside_door_motion_ = 0;
+  clear_has_actual_inside_door_motion();
+}
+inline ::message::Door_motion Passageway_data::actual_inside_door_motion() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_inside_door_motion)
+  return static_cast< ::message::Door_motion >(actual_inside_door_motion_);
+}
+inline void Passageway_data::set_actual_inside_door_motion(::message::Door_motion value) {
+  assert(::message::Door_motion_IsValid(value));
+  set_has_actual_inside_door_motion();
+  actual_inside_door_motion_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_inside_door_motion)
+}
+
+// optional .message.Door_motion actual_outside_door_motion = 12;
+inline bool Passageway_data::has_actual_outside_door_motion() const {
+  return (_has_bits_[0] & 0x00002000u) != 0;
+}
+inline void Passageway_data::set_has_actual_outside_door_motion() {
+  _has_bits_[0] |= 0x00002000u;
+}
+inline void Passageway_data::clear_has_actual_outside_door_motion() {
+  _has_bits_[0] &= ~0x00002000u;
+}
+inline void Passageway_data::clear_actual_outside_door_motion() {
+  actual_outside_door_motion_ = 0;
+  clear_has_actual_outside_door_motion();
+}
+inline ::message::Door_motion Passageway_data::actual_outside_door_motion() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_outside_door_motion)
+  return static_cast< ::message::Door_motion >(actual_outside_door_motion_);
+}
+inline void Passageway_data::set_actual_outside_door_motion(::message::Door_motion value) {
+  assert(::message::Door_motion_IsValid(value));
+  set_has_actual_outside_door_motion();
+  actual_outside_door_motion_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_outside_door_motion)
+}
+
+// optional .message.Load_status actual_turntable_load_status = 13;
+inline bool Passageway_data::has_actual_turntable_load_status() const {
+  return (_has_bits_[0] & 0x00004000u) != 0;
+}
+inline void Passageway_data::set_has_actual_turntable_load_status() {
+  _has_bits_[0] |= 0x00004000u;
+}
+inline void Passageway_data::clear_has_actual_turntable_load_status() {
+  _has_bits_[0] &= ~0x00004000u;
+}
+inline void Passageway_data::clear_actual_turntable_load_status() {
+  actual_turntable_load_status_ = 0;
+  clear_has_actual_turntable_load_status();
+}
+inline ::message::Load_status Passageway_data::actual_turntable_load_status() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_turntable_load_status)
+  return static_cast< ::message::Load_status >(actual_turntable_load_status_);
+}
+inline void Passageway_data::set_actual_turntable_load_status(::message::Load_status value) {
+  assert(::message::Load_status_IsValid(value));
+  set_has_actual_turntable_load_status();
+  actual_turntable_load_status_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_turntable_load_status)
+}
+
+// optional .message.Turntable_direction actual_turntable_direction = 14;
+inline bool Passageway_data::has_actual_turntable_direction() const {
+  return (_has_bits_[0] & 0x00008000u) != 0;
+}
+inline void Passageway_data::set_has_actual_turntable_direction() {
+  _has_bits_[0] |= 0x00008000u;
+}
+inline void Passageway_data::clear_has_actual_turntable_direction() {
+  _has_bits_[0] &= ~0x00008000u;
+}
+inline void Passageway_data::clear_actual_turntable_direction() {
+  actual_turntable_direction_ = 0;
+  clear_has_actual_turntable_direction();
+}
+inline ::message::Turntable_direction Passageway_data::actual_turntable_direction() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_turntable_direction)
+  return static_cast< ::message::Turntable_direction >(actual_turntable_direction_);
+}
+inline void Passageway_data::set_actual_turntable_direction(::message::Turntable_direction value) {
+  assert(::message::Turntable_direction_IsValid(value));
+  set_has_actual_turntable_direction();
+  actual_turntable_direction_ = value;
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_turntable_direction)
+}
+
+// optional string actual_error_code = 15;
+inline bool Passageway_data::has_actual_error_code() const {
+  return (_has_bits_[0] & 0x00000001u) != 0;
+}
+inline void Passageway_data::set_has_actual_error_code() {
+  _has_bits_[0] |= 0x00000001u;
+}
+inline void Passageway_data::clear_has_actual_error_code() {
+  _has_bits_[0] &= ~0x00000001u;
+}
+inline void Passageway_data::clear_actual_error_code() {
+  actual_error_code_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  clear_has_actual_error_code();
+}
+inline const ::std::string& Passageway_data::actual_error_code() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_error_code)
+  return actual_error_code_.GetNoArena();
+}
+inline void Passageway_data::set_actual_error_code(const ::std::string& value) {
+  set_has_actual_error_code();
+  actual_error_code_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_error_code)
+}
+#if LANG_CXX11
+inline void Passageway_data::set_actual_error_code(::std::string&& value) {
+  set_has_actual_error_code();
+  actual_error_code_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:message.Passageway_data.actual_error_code)
+}
+#endif
+inline void Passageway_data::set_actual_error_code(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  set_has_actual_error_code();
+  actual_error_code_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:message.Passageway_data.actual_error_code)
+}
+inline void Passageway_data::set_actual_error_code(const char* value, size_t size) {
+  set_has_actual_error_code();
+  actual_error_code_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:message.Passageway_data.actual_error_code)
+}
+inline ::std::string* Passageway_data::mutable_actual_error_code() {
+  set_has_actual_error_code();
+  // @@protoc_insertion_point(field_mutable:message.Passageway_data.actual_error_code)
+  return actual_error_code_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* Passageway_data::release_actual_error_code() {
+  // @@protoc_insertion_point(field_release:message.Passageway_data.actual_error_code)
+  clear_has_actual_error_code();
+  return actual_error_code_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void Passageway_data::set_allocated_actual_error_code(::std::string* actual_error_code) {
+  if (actual_error_code != NULL) {
+    set_has_actual_error_code();
+  } else {
+    clear_has_actual_error_code();
+  }
+  actual_error_code_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), actual_error_code);
+  // @@protoc_insertion_point(field_set_allocated:message.Passageway_data.actual_error_code)
+}
+
+// optional string actual_warning_code = 16;
+inline bool Passageway_data::has_actual_warning_code() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Passageway_data::set_has_actual_warning_code() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Passageway_data::clear_has_actual_warning_code() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Passageway_data::clear_actual_warning_code() {
+  actual_warning_code_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  clear_has_actual_warning_code();
+}
+inline const ::std::string& Passageway_data::actual_warning_code() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_warning_code)
+  return actual_warning_code_.GetNoArena();
+}
+inline void Passageway_data::set_actual_warning_code(const ::std::string& value) {
+  set_has_actual_warning_code();
+  actual_warning_code_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_warning_code)
+}
+#if LANG_CXX11
+inline void Passageway_data::set_actual_warning_code(::std::string&& value) {
+  set_has_actual_warning_code();
+  actual_warning_code_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:message.Passageway_data.actual_warning_code)
+}
+#endif
+inline void Passageway_data::set_actual_warning_code(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  set_has_actual_warning_code();
+  actual_warning_code_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:message.Passageway_data.actual_warning_code)
+}
+inline void Passageway_data::set_actual_warning_code(const char* value, size_t size) {
+  set_has_actual_warning_code();
+  actual_warning_code_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:message.Passageway_data.actual_warning_code)
+}
+inline ::std::string* Passageway_data::mutable_actual_warning_code() {
+  set_has_actual_warning_code();
+  // @@protoc_insertion_point(field_mutable:message.Passageway_data.actual_warning_code)
+  return actual_warning_code_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* Passageway_data::release_actual_warning_code() {
+  // @@protoc_insertion_point(field_release:message.Passageway_data.actual_warning_code)
+  clear_has_actual_warning_code();
+  return actual_warning_code_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void Passageway_data::set_allocated_actual_warning_code(::std::string* actual_warning_code) {
+  if (actual_warning_code != NULL) {
+    set_has_actual_warning_code();
+  } else {
+    clear_has_actual_warning_code();
+  }
+  actual_warning_code_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), actual_warning_code);
+  // @@protoc_insertion_point(field_set_allocated:message.Passageway_data.actual_warning_code)
+}
+
+// optional string actual_error_description = 17;
+inline bool Passageway_data::has_actual_error_description() const {
+  return (_has_bits_[0] & 0x00000004u) != 0;
+}
+inline void Passageway_data::set_has_actual_error_description() {
+  _has_bits_[0] |= 0x00000004u;
+}
+inline void Passageway_data::clear_has_actual_error_description() {
+  _has_bits_[0] &= ~0x00000004u;
+}
+inline void Passageway_data::clear_actual_error_description() {
+  actual_error_description_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  clear_has_actual_error_description();
+}
+inline const ::std::string& Passageway_data::actual_error_description() const {
+  // @@protoc_insertion_point(field_get:message.Passageway_data.actual_error_description)
+  return actual_error_description_.GetNoArena();
+}
+inline void Passageway_data::set_actual_error_description(const ::std::string& value) {
+  set_has_actual_error_description();
+  actual_error_description_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:message.Passageway_data.actual_error_description)
+}
+#if LANG_CXX11
+inline void Passageway_data::set_actual_error_description(::std::string&& value) {
+  set_has_actual_error_description();
+  actual_error_description_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:message.Passageway_data.actual_error_description)
+}
+#endif
+inline void Passageway_data::set_actual_error_description(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  set_has_actual_error_description();
+  actual_error_description_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:message.Passageway_data.actual_error_description)
+}
+inline void Passageway_data::set_actual_error_description(const char* value, size_t size) {
+  set_has_actual_error_description();
+  actual_error_description_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:message.Passageway_data.actual_error_description)
+}
+inline ::std::string* Passageway_data::mutable_actual_error_description() {
+  set_has_actual_error_description();
+  // @@protoc_insertion_point(field_mutable:message.Passageway_data.actual_error_description)
+  return actual_error_description_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* Passageway_data::release_actual_error_description() {
+  // @@protoc_insertion_point(field_release:message.Passageway_data.actual_error_description)
+  clear_has_actual_error_description();
+  return actual_error_description_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void Passageway_data::set_allocated_actual_error_description(::std::string* actual_error_description) {
+  if (actual_error_description != NULL) {
+    set_has_actual_error_description();
+  } else {
+    clear_has_actual_error_description();
+  }
+  actual_error_description_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), actual_error_description);
+  // @@protoc_insertion_point(field_set_allocated:message.Passageway_data.actual_error_description)
+}
+
+// -------------------------------------------------------------------
+
 // Dispatch_manager_status_msg
 
 // required .message.Base_info base_info = 1;
@@ -3816,6 +4673,36 @@ Dispatch_manager_status_msg::carrier_data_map() const {
   return carrier_data_map_;
 }
 
+// repeated .message.Passageway_data passageway_data_map = 6;
+inline int Dispatch_manager_status_msg::passageway_data_map_size() const {
+  return passageway_data_map_.size();
+}
+inline void Dispatch_manager_status_msg::clear_passageway_data_map() {
+  passageway_data_map_.Clear();
+}
+inline const ::message::Passageway_data& Dispatch_manager_status_msg::passageway_data_map(int index) const {
+  // @@protoc_insertion_point(field_get:message.Dispatch_manager_status_msg.passageway_data_map)
+  return passageway_data_map_.Get(index);
+}
+inline ::message::Passageway_data* Dispatch_manager_status_msg::mutable_passageway_data_map(int index) {
+  // @@protoc_insertion_point(field_mutable:message.Dispatch_manager_status_msg.passageway_data_map)
+  return passageway_data_map_.Mutable(index);
+}
+inline ::message::Passageway_data* Dispatch_manager_status_msg::add_passageway_data_map() {
+  // @@protoc_insertion_point(field_add:message.Dispatch_manager_status_msg.passageway_data_map)
+  return passageway_data_map_.Add();
+}
+inline ::google::protobuf::RepeatedPtrField< ::message::Passageway_data >*
+Dispatch_manager_status_msg::mutable_passageway_data_map() {
+  // @@protoc_insertion_point(field_mutable_list:message.Dispatch_manager_status_msg.passageway_data_map)
+  return &passageway_data_map_;
+}
+inline const ::google::protobuf::RepeatedPtrField< ::message::Passageway_data >&
+Dispatch_manager_status_msg::passageway_data_map() const {
+  // @@protoc_insertion_point(field_list:message.Dispatch_manager_status_msg.passageway_data_map)
+  return passageway_data_map_;
+}
+
 // -------------------------------------------------------------------
 
 // Dispatch_manager_data_msg
@@ -3835,6 +4722,8 @@ Dispatch_manager_status_msg::carrier_data_map() const {
 
 // -------------------------------------------------------------------
 
+// -------------------------------------------------------------------
+
 
 // @@protoc_insertion_point(namespace_scope)
 

+ 26 - 1
message/dispatch_message.proto

@@ -1,7 +1,6 @@
 syntax = "proto2";
 package message;
 import "message_base.proto";
-import "dispatch_control.proto";
 
 
 
@@ -257,7 +256,31 @@ message Carrier_data
     optional string							    actual_error_description=19;    //搬运器设备的错误描述
 }
 
+//出入口的状态
+message Passageway_data
+{
+    required Dispatch_device_type               dispatch_device_type=1;         //调度设备的类型
+    required Dispatch_device_status             dispatch_device_status=2;       //设备总状态, 控制任务流程(长流程)
 
+    required int32                              device_id=3;                    //设备id,
+    //通道口的设备状态数据,
+	optional Hardware_device_status				actual_device_status=4;			//通道口的硬件设备状态(短流程)
+	optional Load_status						actual_inside_load_status=5;	        //通道口的内部负载状态, 门内地感是否有车.
+	optional Load_status						actual_outside_load_status=6;	        //通道口的外部负载状态, 门外地感是否有车.
+	optional Overstep_the_boundary				actual_front_overstep_the_boundary=7;	//通道口 汽车前边界
+	optional Overstep_the_boundary				actual_back_overstep_the_boundary=8;	//通道口 汽车后边界
+	optional Overstep_the_boundary				actual_height_overstep_the_boundary=9;	//通道口 车辆是否超高
+	optional Load_status						actual_outside_door_sensor=10;	//通道口 的外门处的传感器, 判断是否有车经过外门
+	//通道口的真实状态, 可能是路径中间的坐标
+    optional Door_motion						actual_inside_door_motion=11;	//通道口 内门动作
+	optional Door_motion						actual_outside_door_motion=12;	//通道口 外门动作
+	optional Load_status						actual_turntable_load_status=13;	//通道口 转盘负载状态, 是否有车.
+	optional Turntable_direction				actual_turntable_direction=14;	//通道口 转台方向
+
+    optional string                             actual_error_code=15;	        //通道口设备的故障信息位
+    optional string                             actual_warning_code=16;	        //通道口设备的警告信息位
+    optional string							    actual_error_description=17;    //通道口设备的错误描述
+}
 
 
 //调度管理总管理的状态
@@ -270,6 +293,8 @@ message Dispatch_manager_status_msg
 
     repeated Catcher_data               catcher_data_map = 4;           //机器手的数据
     repeated Carrier_data               carrier_data_map = 5;           //搬运器的数据
+    repeated Passageway_data            passageway_data_map = 6;           //出入口的数据
+
 }
 
 

+ 35 - 3
message/message_base.pb.cc

@@ -181,7 +181,7 @@ void InitDefaultsParkspace_info() {
 }
 
 ::google::protobuf::Metadata file_level_metadata[6];
-const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[10];
+const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[11];
 
 const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Base_info, _has_bits_),
@@ -428,10 +428,17 @@ void AddDescriptorsImpl() {
       "\020\014\022\022\n\016eBackWait_step\020\r\022\026\n\022eBackDispatch_"
       "step\020\016\022\024\n\020eBackSearch_step\020\017\022\021\n\reBackCom"
       "plete\020\020*C\n\nStep_statu\022\014\n\010eWaiting\020\000\022\014\n\010e"
-      "Working\020\001\022\n\n\006eError\020\002\022\r\n\teFinished\020\003"
+      "Working\020\001\022\n\n\006eError\020\002\022\r\n\teFinished\020\003*\370\001\n"
+      "\024Dispatch_device_type\022\013\n\007ROBOT_1\020e\022\013\n\007RO"
+      "BOT_2\020f\022\016\n\tCARRIER_1\020\310\001\022\016\n\tCARRIER_2\020\317\001\022"
+      "\016\n\tCARRIER_3\020\313\001\022\021\n\014PASSAGEWAY_0\020\254\002\022\021\n\014PA"
+      "SSAGEWAY_1\020\255\002\022\021\n\014PASSAGEWAY_2\020\256\002\022\021\n\014PASS"
+      "AGEWAY_3\020\257\002\022\021\n\014PASSAGEWAY_4\020\260\002\022\021\n\014PASSAG"
+      "EWAY_5\020\261\002\022\021\n\014PASSAGEWAY_6\020\262\002\022\021\n\014PASSAGEW"
+      "AY_7\020\263\002"
   };
   ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-      descriptor, 3836);
+      descriptor, 4087);
   ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
     "message_base.proto", &protobuf_RegisterTypes);
 }
@@ -659,6 +666,31 @@ bool Step_statu_IsValid(int value) {
   }
 }
 
+const ::google::protobuf::EnumDescriptor* Dispatch_device_type_descriptor() {
+  protobuf_message_5fbase_2eproto::protobuf_AssignDescriptorsOnce();
+  return protobuf_message_5fbase_2eproto::file_level_enum_descriptors[10];
+}
+bool Dispatch_device_type_IsValid(int value) {
+  switch (value) {
+    case 101:
+    case 102:
+    case 200:
+    case 203:
+    case 207:
+    case 300:
+    case 301:
+    case 302:
+    case 303:
+    case 304:
+    case 305:
+    case 306:
+    case 307:
+      return true;
+    default:
+      return false;
+  }
+}
+
 
 // ===================================================================
 

+ 35 - 0
message/message_base.pb.h

@@ -347,6 +347,36 @@ inline bool Step_statu_Parse(
   return ::google::protobuf::internal::ParseNamedEnum<Step_statu>(
     Step_statu_descriptor(), name, value);
 }
+enum Dispatch_device_type {
+  ROBOT_1 = 101,
+  ROBOT_2 = 102,
+  CARRIER_1 = 200,
+  CARRIER_2 = 207,
+  CARRIER_3 = 203,
+  PASSAGEWAY_0 = 300,
+  PASSAGEWAY_1 = 301,
+  PASSAGEWAY_2 = 302,
+  PASSAGEWAY_3 = 303,
+  PASSAGEWAY_4 = 304,
+  PASSAGEWAY_5 = 305,
+  PASSAGEWAY_6 = 306,
+  PASSAGEWAY_7 = 307
+};
+bool Dispatch_device_type_IsValid(int value);
+const Dispatch_device_type Dispatch_device_type_MIN = ROBOT_1;
+const Dispatch_device_type Dispatch_device_type_MAX = PASSAGEWAY_7;
+const int Dispatch_device_type_ARRAYSIZE = Dispatch_device_type_MAX + 1;
+
+const ::google::protobuf::EnumDescriptor* Dispatch_device_type_descriptor();
+inline const ::std::string& Dispatch_device_type_Name(Dispatch_device_type value) {
+  return ::google::protobuf::internal::NameOfEnum(
+    Dispatch_device_type_descriptor(), value);
+}
+inline bool Dispatch_device_type_Parse(
+    const ::std::string& name, Dispatch_device_type* value) {
+  return ::google::protobuf::internal::ParseNamedEnum<Dispatch_device_type>(
+    Dispatch_device_type_descriptor(), name, value);
+}
 // ===================================================================
 
 class Base_info : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:message.Base_info) */ {
@@ -2639,6 +2669,11 @@ template <>
 inline const EnumDescriptor* GetEnumDescriptor< ::message::Step_statu>() {
   return ::message::Step_statu_descriptor();
 }
+template <> struct is_proto_enum< ::message::Dispatch_device_type> : ::google::protobuf::internal::true_type {};
+template <>
+inline const EnumDescriptor* GetEnumDescriptor< ::message::Dispatch_device_type>() {
+  return ::message::Dispatch_device_type_descriptor();
+}
 
 }  // namespace protobuf
 }  // namespace google

+ 20 - 0
message/message_base.proto

@@ -247,4 +247,24 @@ enum Step_statu
     eWorking=1;
     eError=2;
     eFinished=3;
+}
+
+//调度设备的类型
+enum Dispatch_device_type
+{
+    ROBOT_1                                 = 101;      //一号出口的专用机器手(只能负责1号出口的取车)(目前没有安装,暂时不考虑)
+    ROBOT_2                                 = 102;      //中间的大型机器手   (可以负责1~6号出入口的停车和取车)
+
+    CARRIER_1                               = 200;      //左侧0号电梯井的搬运器(升降电梯 中跑车 小跑车 三合一为搬运器)
+    CARRIER_2                               = 207;      //右侧7号电梯井的搬运器(升降电梯 中跑车 小跑车 三合一为搬运器)
+    CARRIER_3                               = 203;      //中间3楼的搬运器(中跑车 小跑车 二合一为搬运器)(没有电梯, 只能在3楼活动)
+
+    PASSAGEWAY_0                            = 300;      //0号出口(在左侧电梯井, 只能取车)(暂时不存在)
+    PASSAGEWAY_1                            = 301;      //1号出入口
+    PASSAGEWAY_2                            = 302;      //2号出入口
+    PASSAGEWAY_3                            = 303;      //3号出入口
+    PASSAGEWAY_4                            = 304;      //4号出入口
+    PASSAGEWAY_5                            = 305;      //5号出入口
+    PASSAGEWAY_6                            = 306;      //6号出入口
+    PASSAGEWAY_7                            = 307;      //7号出口(在右侧电梯井, 只能取车)
 }

+ 1 - 1
setting/communication.prototxt

@@ -25,7 +25,7 @@ communication_parameters
     connect_string_vector:"tcp://192.168.2.127:30000"
 
     connect_string_vector:"tcp://192.168.2.165:30000"
-    bind_string:"tcp://192.168.2.168:30009"
+    bind_string:"tcp://192.168.2.173:30009"
 
 }
 

+ 5 - 0
setting/dispatch_coordinates.prototxt

@@ -3316,6 +3316,11 @@ passageway_functioning_patterns:PASSAGEWAY_FUNCTIONING_PATTERN_BIDIRECTION
 passageway_functioning_patterns:PASSAGEWAY_FUNCTIONING_PATTERN_BIDIRECTION
 passageway_functioning_patterns:PASSAGEWAY_FUNCTIONING_PATTERN_OUTLET
 
+parkspace_id_min:1
+parkspace_id_max:165
+parkspace_id_total:165
+
+
 car_wheel_base_min:1000
 car_wheel_base_max:4000
 

+ 38 - 0
setting/dispatch_device.prototxt

@@ -0,0 +1,38 @@
+
+
+
+catcher_size:1
+catcher_parameters
+{
+    id:1
+    key:102
+}
+
+carrier_size:3
+carrier_parameters
+{
+    id:0
+    key:200
+}
+carrier_parameters
+{
+    id:1
+    key:207
+}
+carrier_parameters
+{
+    id:2
+    key:203
+}
+
+passageway_size:0
+
+parkspace_number
+{
+    rows:11
+    columns:15
+    total:165
+}
+
+
+

+ 9 - 149
system/system_executor.cpp

@@ -205,7 +205,7 @@ Error_manager System_executor::encapsulate_send_status()
 {
 	Error_manager t_error;
 
-	int t_dispatch_id = Dispatch_manager::get_instance_references().get_dispatch_id();
+	int t_dispatch_manager_id = Dispatch_manager::get_instance_references().get_dispatch_manager_id();
 	std::string t_msg;
 /*
 	//创建一条 调度管理总管理的状态
@@ -231,7 +231,7 @@ Error_manager System_executor::encapsulate_send_status()
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_timeout_ms(5000);
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_sender(message::Communicator::eDispatch_manager);
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_receiver(message::Communicator::eMain);
-	t_dispatch_terminal_status_msg.set_terminal_id(t_dispatch_id*2+0);
+	t_dispatch_terminal_status_msg.set_terminal_id(t_dispatch_manager_id*2+0);
 	t_dispatch_terminal_status_msg.set_terminal_status(message::Terminal_status::E_TERMINAL_READY);
 	t_dispatch_terminal_status_msg.set_passageway_direction(message::Passageway_direction::E_INLET);
 	t_msg = t_dispatch_terminal_status_msg.SerializeAsString();
@@ -241,7 +241,7 @@ Error_manager System_executor::encapsulate_send_status()
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_timeout_ms(5000);
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_sender(message::Communicator::eDispatch_manager);
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_receiver(message::Communicator::eMain);
-	t_dispatch_terminal_status_msg.set_terminal_id(t_dispatch_id*2+0);
+	t_dispatch_terminal_status_msg.set_terminal_id(t_dispatch_manager_id*2+0);
 	t_dispatch_terminal_status_msg.set_terminal_status(message::Terminal_status::E_TERMINAL_READY);
 	t_dispatch_terminal_status_msg.set_passageway_direction(message::Passageway_direction::E_OUTLET);
 	t_msg = t_dispatch_terminal_status_msg.SerializeAsString();
@@ -251,7 +251,7 @@ Error_manager System_executor::encapsulate_send_status()
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_timeout_ms(5000);
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_sender(message::Communicator::eDispatch_manager);
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_receiver(message::Communicator::eMain);
-	t_dispatch_terminal_status_msg.set_terminal_id(t_dispatch_id*2+1);
+	t_dispatch_terminal_status_msg.set_terminal_id(t_dispatch_manager_id*2+1);
 	t_dispatch_terminal_status_msg.set_terminal_status(message::Terminal_status::E_TERMINAL_READY);
 	t_dispatch_terminal_status_msg.set_passageway_direction(message::Passageway_direction::E_INLET);
 	t_msg = t_dispatch_terminal_status_msg.SerializeAsString();
@@ -261,7 +261,7 @@ Error_manager System_executor::encapsulate_send_status()
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_timeout_ms(5000);
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_sender(message::Communicator::eDispatch_manager);
 	t_dispatch_terminal_status_msg.mutable_base_info()->set_receiver(message::Communicator::eMain);
-	t_dispatch_terminal_status_msg.set_terminal_id(t_dispatch_id*2+1);
+	t_dispatch_terminal_status_msg.set_terminal_id(t_dispatch_manager_id*2+1);
 	t_dispatch_terminal_status_msg.set_terminal_status(message::Terminal_status::E_TERMINAL_READY);
 	t_dispatch_terminal_status_msg.set_passageway_direction(message::Passageway_direction::E_OUTLET);
 	t_msg = t_dispatch_terminal_status_msg.SerializeAsString();
@@ -272,147 +272,7 @@ Error_manager System_executor::encapsulate_send_status()
 //定时发送 调度管理的状态
 Error_manager System_executor::encapsulate_send_dispatch_manager_status()
 {
-	Error_manager t_error;
-
-	int t_dispatch_id = Dispatch_manager::get_instance_references().get_dispatch_id();
-	std::string t_msg;
-
-	//创建一条 调度管理总管理的状态
-	message::Dispatch_manager_status_msg t_dispatch_manager_status_msg;
-	t_dispatch_manager_status_msg.mutable_base_info()->set_msg_type(message::Message_type::eDispatch_manager_status_msg);
-	t_dispatch_manager_status_msg.mutable_base_info()->set_timeout_ms(5000);
-	t_dispatch_manager_status_msg.mutable_base_info()->set_sender(message::Communicator::eDispatch_manager);
-	t_dispatch_manager_status_msg.mutable_base_info()->set_receiver(message::Communicator::eEmpty);
-
-	t_dispatch_manager_status_msg.set_dispatch_id(t_dispatch_id);
-	Dispatch_manager::Dispatch_manager_status t_dispatch_manager_status = Dispatch_manager::get_instance_references().get_dispatch_manager_status();
-	t_dispatch_manager_status_msg.set_dispatch_manager_status((message::Dispatch_manager_status)t_dispatch_manager_status);
-
-	for (auto iter = Dispatch_manager::get_instance_references().m_catcher_map.begin(); iter != Dispatch_manager::get_instance_references().m_catcher_map.end(); ++iter)
-	{
-		Catcher* tp_catcher = (Catcher*)iter->second.get();
-		message::Catcher_data * tp_catcher_data = t_dispatch_manager_status_msg.mutable_catcher_data_map()->Add();
-
-		switch ( tp_catcher->get_device_id() )
-		{
-		    case 0:
-		    {
-				tp_catcher_data->set_dispatch_device_type(message::Dispatch_device_type::ROBOT_1);
-		        break;
-		    }
-		    case 1:
-		    {
-				tp_catcher_data->set_dispatch_device_type(message::Dispatch_device_type::ROBOT_2);
-		        break;
-		    }
-		    default:
-		    {
-
-		        break;
-		    }
-		}
-		if ( tp_catcher->get_dispatch_device_status() >= Dispatch_device_base::Dispatch_device_status::DISPATCH_DEVICE_BUSY &&
-		tp_catcher->get_dispatch_device_status() <= Dispatch_device_base::Dispatch_device_status::DISPATCH_DEVICE_THREE_LEVEL_WORK)
-		{
-			tp_catcher_data->set_dispatch_device_status(message::Dispatch_device_status::DISPATCH_DEVICE_BUSY);
-
-		}
-		else
-		{
-			tp_catcher_data->set_dispatch_device_status((message::Dispatch_device_status)tp_catcher->get_dispatch_device_status());
-		}
-
-		tp_catcher_data->set_device_id(tp_catcher->get_device_id());
-		tp_catcher_data->set_actual_device_status((message::Hardware_device_status)tp_catcher->m_actual_device_status);
-		tp_catcher_data->set_actual_load_status((message::Load_status)tp_catcher->m_actual_load_status);
-
-
-		tp_catcher_data->set_actual_coordinates_id(tp_catcher->m_actual_coordinates_id);
-		tp_catcher_data->set_actual_x(tp_catcher->m_actual_x);
-		tp_catcher_data->set_actual_y(tp_catcher->m_actual_y);
-		tp_catcher_data->set_actual_b(tp_catcher->m_actual_b);
-		tp_catcher_data->set_actual_z(tp_catcher->m_actual_z);
-		tp_catcher_data->set_actual_d1(tp_catcher->m_actual_d1);
-		tp_catcher_data->set_actual_d2(tp_catcher->m_actual_d2);
-		tp_catcher_data->set_actual_clamp_motion1((message::Clamp_motion)tp_catcher->m_actual_clamp_motion1);
-		tp_catcher_data->set_actual_clamp_motion2((message::Clamp_motion)tp_catcher->m_actual_clamp_motion2);
-		tp_catcher_data->set_actual_clamp_motion3((message::Clamp_motion)tp_catcher->m_actual_clamp_motion3);
-		tp_catcher_data->set_actual_clamp_motion4((message::Clamp_motion)tp_catcher->m_actual_clamp_motion4);
-
-		std::string t_actual_error_code((char*)tp_catcher->m_actual_error_code, 50);
-		tp_catcher_data->set_actual_error_code(t_actual_error_code);
-		std::string t_actual_warning_code((char*)tp_catcher->m_actual_warning_code, 50);
-		tp_catcher_data->set_actual_error_code(t_actual_warning_code);
-		tp_catcher_data->set_actual_error_code(tp_catcher->m_actual_error_description);
-	}
-	for (auto iter = Dispatch_manager::get_instance_references().m_carrier_map.begin(); iter != Dispatch_manager::get_instance_references().m_carrier_map.end(); ++iter)
-	{
-		Carrier* tp_carrier = (Carrier*)iter->second.get();
-		message::Carrier_data * tp_carrier_data = t_dispatch_manager_status_msg.mutable_carrier_data_map()->Add();
-
-		switch ( tp_carrier->get_device_id() )
-		{
-			case 0:
-			{
-				tp_carrier_data->set_dispatch_device_type(message::Dispatch_device_type::CARRIER_1);
-				break;
-			}
-			case 1:
-			{
-				tp_carrier_data->set_dispatch_device_type(message::Dispatch_device_type::CARRIER_2);
-				break;
-			}
-			case 2:
-			{
-				tp_carrier_data->set_dispatch_device_type(message::Dispatch_device_type::CARRIER_3);
-				break;
-			}
-			default:
-			{
-
-				break;
-			}
-		}
-		if ( tp_carrier->get_dispatch_device_status() >= Dispatch_device_base::Dispatch_device_status::DISPATCH_DEVICE_BUSY &&
-		tp_carrier->get_dispatch_device_status() <= Dispatch_device_base::Dispatch_device_status::DISPATCH_DEVICE_THREE_LEVEL_WORK)
-		{
-			tp_carrier_data->set_dispatch_device_status(message::Dispatch_device_status::DISPATCH_DEVICE_BUSY);
-
-		}
-		else
-		{
-			tp_carrier_data->set_dispatch_device_status((message::Dispatch_device_status)tp_carrier->get_dispatch_device_status());
-		}
-		tp_carrier_data->set_device_id(tp_carrier->get_device_id());
-		tp_carrier_data->set_actual_device_status((message::Hardware_device_status)tp_carrier->m_actual_device_status);
-		tp_carrier_data->set_actual_load_status((message::Load_status)tp_carrier->m_actual_load_status);
-
-		tp_carrier_data->set_actual_coordinates_id(tp_carrier->m_actual_coordinates_id);
-		tp_carrier_data->set_actual_x(tp_carrier->m_actual_x);
-		tp_carrier_data->set_actual_y(tp_carrier->m_actual_y);
-		tp_carrier_data->set_actual_z(tp_carrier->m_actual_z);
-		tp_carrier_data->set_actual_y1(tp_carrier->m_actual_y1);
-		tp_carrier_data->set_actual_y2(tp_carrier->m_actual_y2);
-		tp_carrier_data->set_actual_clamp_motion1((message::Clamp_motion)tp_carrier->m_actual_clamp_motion1);
-		tp_carrier_data->set_actual_clamp_motion2((message::Clamp_motion)tp_carrier->m_actual_clamp_motion2);
-		tp_carrier_data->set_actual_small_sports_car_motion((message::Small_sports_car_motion)tp_carrier->m_actual_small_sports_car_motion);
-		tp_carrier_data->set_actual_joint_motion_x1((message::Joint_motion)tp_carrier->m_actual_joint_motion_x1);
-		tp_carrier_data->set_actual_joint_motion_x2((message::Joint_motion)tp_carrier->m_actual_joint_motion_x2);
-
-		std::string t_actual_error_code((char*)tp_carrier->m_actual_error_code, 50);
-		tp_carrier_data->set_actual_error_code(t_actual_error_code);
-		std::string t_actual_warning_code((char*)tp_carrier->m_actual_warning_code, 50);
-		tp_carrier_data->set_actual_error_code(t_actual_warning_code);
-		tp_carrier_data->set_actual_error_code(tp_carrier->m_actual_error_description);
-	}
-
-
-	t_msg = t_dispatch_manager_status_msg.SerializeAsString();
-	System_communication::get_instance_references().encapsulate_msg(t_msg);
-//	std::cout << " huli test :::: " << " 12312312312312 = " << t_dispatch_manager_status_msg.DebugString() << std::endl;
-//	std::cout << " huli test :::: " << " 123123ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg12312312 = " << 123 << std::endl;
-
-	return Error_code::SUCCESS;
+	return Dispatch_manager::get_instance_references().encapsulate_send_dispatch_manager_status();
 }
 
 
@@ -521,7 +381,7 @@ void System_executor::execute_for_dispatch_request_msg(message::Dispatch_request
 	t_error = Dispatch_manager::get_instance_references().execute_for_dispatch_request_msg(dispatch_request_msg);
 	if ( t_error != Error_code::SUCCESS )
 	{
-		LOG(INFO) << " System_executor::execute_for_dispatch_request_msg "<< this;
+		LOG(INFO) << " System_executor::execute_for_dispatch_request_msg fun error "<< this;
 		LOG(INFO) << t_error.to_string() << "   "<< this;
 	}
 	return;
@@ -533,7 +393,7 @@ void System_executor::execute_for_dispatch_plan_response_msg(message::Dispatch_p
 	t_error = Dispatch_manager::get_instance_references().execute_for_dispatch_plan_response_msg(dispatch_plan_response_msg);
 	if ( t_error != Error_code::SUCCESS )
 	{
-		LOG(INFO) << " System_executor::execute_for_dispatch_request_msg "<< this;
+		LOG(INFO) << " System_executor::execute_for_dispatch_request_msg fun error "<< this;
 		LOG(INFO) << t_error.to_string() << "   "<< this;
 	}
 	return;
@@ -545,7 +405,7 @@ void System_executor::execute_for_dispatch_control_request_msg(message::Dispatch
 	t_error = Dispatch_manager::get_instance_references().execute_for_dispatch_control_request_msg(dispatch_control_request_msg);
 	if ( t_error != Error_code::SUCCESS )
 	{
-		LOG(INFO) << " System_executor::execute_for_dispatch_request_msg "<< this;
+		LOG(INFO) << " System_executor::execute_for_dispatch_request_msg fun error "<< this;
 		LOG(INFO) << t_error.to_string() << "   "<< this;
 	}
 	return;