Kaynağa Gözat

20211122, singlechip communicaton

huli 3 yıl önce
ebeveyn
işleme
31c3779221

+ 92 - 0
dispatch/dispatch_communication.cpp

@@ -343,6 +343,88 @@ Error_manager Dispatch_communication::communication_init(int plc_id)
 	t_snap7_buf.init(ANTICOLLISION_LIDAR_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_0 +m_plc_id*100, 0, sizeof(Anticollision_lidar_request_from_plc_to_manager), t_variable_information_vector, Snap7_buf::NO_COMMUNICATION);
 	m_receive_buf_map[4] = t_snap7_buf;
 
+
+
+
+	//单片机指令
+	t_index = 0;
+	t_variable_information_vector.clear();
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_process_status", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_process_control", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_over_border_status", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_car_height_status_current", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_car_height_status_passing", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_outside_door_status", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_outside_door_control", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_dispatch_finish_flag", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_inside_existence_flag", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_outside_existence_flag", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reset_flag", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_stop_flag", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_error_code", typeid(unsigned int).name(), t_index,sizeof(unsigned int), 1 });
+	t_index += sizeof(unsigned int)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved16_35", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 3 });
+	t_index += sizeof(unsigned char)*20;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_gpio_input", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 3 });
+	t_index += sizeof(unsigned char)*16;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_gpio_output", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 3 });
+	t_index += sizeof(unsigned char)*8;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved60_79", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 3 });
+	t_index += sizeof(unsigned char)*20;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_heartbeat", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_communication_mode", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_refresh_command", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_data_validity", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+
+	t_snap7_buf.init(SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_0 +m_plc_id*100, 0, sizeof(Singlechip_response_from_manager_to_plc), t_variable_information_vector, Snap7_buf::LOOP_COMMUNICATION);
+	m_send_buf_map[9] = t_snap7_buf;
+	t_snap7_buf.init(SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_1 +m_plc_id*100, 0, sizeof(Singlechip_response_from_manager_to_plc), t_variable_information_vector, Snap7_buf::LOOP_COMMUNICATION);
+	m_send_buf_map[10] = t_snap7_buf;
+	t_snap7_buf.init(SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_2 +m_plc_id*100, 0, sizeof(Singlechip_response_from_manager_to_plc), t_variable_information_vector, Snap7_buf::LOOP_COMMUNICATION);
+	m_send_buf_map[11] = t_snap7_buf;
+	t_snap7_buf.init(SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_3 +m_plc_id*100, 0, sizeof(Singlechip_response_from_manager_to_plc), t_variable_information_vector, Snap7_buf::LOOP_COMMUNICATION);
+	m_send_buf_map[12] = t_snap7_buf;
+
+
+	t_index = 0;
+	t_variable_information_vector.clear();
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_heartbeat", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_communication_mode", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_refresh_command", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+	t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_data_validity", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
+	t_index += sizeof(unsigned char)*1;
+
+	t_snap7_buf.init(SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_0 +m_plc_id*100, 0, sizeof(Singlechip_request_from_plc_to_manager), t_variable_information_vector, Snap7_buf::NO_COMMUNICATION);
+	m_receive_buf_map[5] = t_snap7_buf;
+	t_snap7_buf.init(SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_1 +m_plc_id*100, 0, sizeof(Singlechip_request_from_plc_to_manager), t_variable_information_vector, Snap7_buf::NO_COMMUNICATION);
+	m_receive_buf_map[6] = t_snap7_buf;
+	t_snap7_buf.init(SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_2 +m_plc_id*100, 0, sizeof(Singlechip_request_from_plc_to_manager), t_variable_information_vector, Snap7_buf::NO_COMMUNICATION);
+	m_receive_buf_map[7] = t_snap7_buf;
+	t_snap7_buf.init(SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_3 +m_plc_id*100, 0, sizeof(Singlechip_request_from_plc_to_manager), t_variable_information_vector, Snap7_buf::NO_COMMUNICATION);
+	m_receive_buf_map[8] = t_snap7_buf;
+
+
+
+
 	return Snap7_communication_base::communication_init();
 }
 
@@ -369,6 +451,11 @@ Error_manager Dispatch_communication::updata_receive_buf()
 
 	memcpy(&m_anticollision_lidar_request_from_plc_to_manager, m_receive_buf_map[4].mp_buf_obverse, m_receive_buf_map[4].m_size);
 
+	memcpy(&m_singlechip_request_from_plc_to_manager[0], m_receive_buf_map[5].mp_buf_obverse, m_receive_buf_map[5].m_size);
+	memcpy(&m_singlechip_request_from_plc_to_manager[1], m_receive_buf_map[6].mp_buf_obverse, m_receive_buf_map[6].m_size);
+	memcpy(&m_singlechip_request_from_plc_to_manager[3], m_receive_buf_map[7].mp_buf_obverse, m_receive_buf_map[7].m_size);
+	memcpy(&m_singlechip_request_from_plc_to_manager[4], m_receive_buf_map[8].mp_buf_obverse, m_receive_buf_map[8].m_size);
+
 
 	return Error_code::SUCCESS;
 }
@@ -389,6 +476,11 @@ Error_manager Dispatch_communication::updata_send_buf()
 	memcpy(m_send_buf_map[7].mp_buf_obverse, &m_anticollision_lidar_response_from_manager_to_plc_for_data, m_send_buf_map[7].m_size);
 	memcpy(m_send_buf_map[8].mp_buf_obverse, &m_anticollision_lidar_response_from_manager_to_plc_for_key, m_send_buf_map[8].m_size);
 
+	memcpy(m_send_buf_map[9].mp_buf_obverse, &m_singlechip_response_from_manager_to_plc[0], m_send_buf_map[9].m_size);
+	memcpy(m_send_buf_map[10].mp_buf_obverse, &m_singlechip_response_from_manager_to_plc[1], m_send_buf_map[10].m_size);
+	memcpy(m_send_buf_map[11].mp_buf_obverse, &m_singlechip_response_from_manager_to_plc[2], m_send_buf_map[11].m_size);
+	memcpy(m_send_buf_map[12].mp_buf_obverse, &m_singlechip_response_from_manager_to_plc[3], m_send_buf_map[12].m_size);
+
 	return Error_code::SUCCESS;
 }
 

+ 59 - 0
dispatch/dispatch_communication.h

@@ -502,6 +502,62 @@ public:
 		unsigned char			m_request_data_validity = 0;						//数据有效性, 0 = 未知, 1 = 有效, 2 = 无效
 	};
 
+
+
+	//单片机给plc
+#define SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_0		9008
+#define SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_1		9018
+#define SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_2		9028
+#define SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_3		9038
+	struct Singlechip_response_from_manager_to_plc
+	{
+		unsigned char					m_process_status;	//流程状态
+		unsigned char					m_process_control;	//流程控制
+
+		unsigned char					m_over_border_status;							//超界状态, 0:未知, 1:正常, 2:前超界, 3:后超界, 4:左超界, 5:右超界
+		unsigned char					m_car_height_status_current;					//车高状态,当前持续的状态, 0:未知, 1:小车, 2:中车, 3:大车, 4:巨大车, 5:故障车
+		unsigned char					m_car_height_status_passing;					//车高状态,经过外门口的状态, 0:未知, 1:小车, 2:中车, 3:大车, 4:巨大车, 5:故障车
+		unsigned char					m_outside_door_status;							//外门的状态, 0:未知, 1:外门开到位, 2:外门关到位, 3:外门运行中, 4:外门故障
+		unsigned char					m_outside_door_control;							//外门的控制, 0:未知, 1:外门开, 2:外门关,
+
+		unsigned char					m_dispatch_finish_flag;			//调度完成标志位,true表示允许终端放下一辆车进入入口
+		unsigned char					m_inside_existence_flag;		//门内是否存在汽车的标志位, true表示有车
+		unsigned char					m_outside_existence_flag;		//门外是否存在汽车的标志位, 门外地感触发停车流程, true表示有车
+		unsigned char					m_reset_flag;					//重启标志, true:控制看门狗重启
+		unsigned char					m_stop_flag;					//急停标志,true:把控制口全部写0,并关闭流程。
+
+		unsigned int					m_error_code;					//错误码
+
+		unsigned char					m_reserved16_35[20] = {0};							//预留
+
+		unsigned char					m_gpio_input[16] = {0};							//gpio输入口原始数据,
+		unsigned char					m_gpio_output[8] = {0};							//gpio输出口原始数据,
+		unsigned char					m_reserved60_79[20] = {0};							//预留
+
+
+		unsigned char			m_response_heartbeat = 0;							//心跳位, 0-255循环
+		unsigned char			m_response_communication_mode = 0;					//通信模式	0 = 未知, 1=自动循环模式,2=手动刷新模式
+		unsigned char			m_response_refresh_command = 0;						//刷新指令 0-255任意数字,与上一次不同即可
+		unsigned char			m_response_data_validity = 0;						//数据有效性, 0 = 未知, 1 = 有效, 2 = 无效
+	};
+
+	//plc给单片机
+#define SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_0		9009
+#define SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_1		9019
+#define SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_2		9029
+#define SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_3		9039
+	struct Singlechip_request_from_plc_to_manager
+	{
+		unsigned char			m_request_heartbeat = 0;							//心跳位, 0-255循环
+		unsigned char			m_request_communication_mode = 0;					//通信模式	0 = 未知, 1=自动循环模式,2=手动刷新模式
+		unsigned char			m_request_refresh_command = 0;						//刷新指令 0-255任意数字,与上一次不同即可
+		unsigned char			m_request_data_validity = 0;						//数据有效性, 0 = 未知, 1 = 有效, 2 = 无效
+	};
+
+
+
+
+
 #pragma pack(pop)		//取消对齐
 
 // 子类必须把父类设定为友元函数,这样父类才能使用子类的私有构造函数。
@@ -571,6 +627,9 @@ public:
 	Anticollision_lidar_response_from_manager_to_plc_for_key	m_anticollision_lidar_response_from_manager_to_plc_for_key;
 	Anticollision_lidar_request_from_plc_to_manager				m_anticollision_lidar_request_from_plc_to_manager;
 
+	//单片机
+	Singlechip_response_from_manager_to_plc					m_singlechip_response_from_manager_to_plc[4];
+	Singlechip_request_from_plc_to_manager					m_singlechip_request_from_plc_to_manager[4];
 private:
 
 };

+ 3 - 3
dispatch/dispatch_ground_lidar.cpp

@@ -15,12 +15,12 @@ Dispatch_ground_lidar::Dispatch_ground_lidar()
 
 Dispatch_ground_lidar::~Dispatch_ground_lidar()
 {
-	dispatch_plc_uninit();
+	dispatch_ground_lidar_uninit();
 }
 
 
 //调度地面雷达 初始化
-Error_manager Dispatch_ground_lidar::dispatch_plc_init(int plc_id, int ground_lidar_id)
+Error_manager Dispatch_ground_lidar::dispatch_ground_lidar_init(int plc_id, int ground_lidar_id)
 {
 	m_plc_id =	plc_id;
 	m_ground_lidar_id = ground_lidar_id;
@@ -37,7 +37,7 @@ Error_manager Dispatch_ground_lidar::dispatch_plc_init(int plc_id, int ground_li
 	return Error_code::SUCCESS;
 }
 //调度地面雷达 反初始化
-Error_manager Dispatch_ground_lidar::dispatch_plc_uninit()
+Error_manager Dispatch_ground_lidar::dispatch_ground_lidar_uninit()
 {
 	if (mp_execute_thread)
 	{

+ 2 - 2
dispatch/dispatch_ground_lidar.h

@@ -39,9 +39,9 @@ public:
 	~Dispatch_ground_lidar();
 public://API functions
 	//调度地面雷达 初始化
-	Error_manager dispatch_plc_init(int plc_id, int ground_lidar_id);
+	Error_manager dispatch_ground_lidar_init(int plc_id, int ground_lidar_id);
 	//调度地面雷达 反初始化
-	Error_manager dispatch_plc_uninit();
+	Error_manager dispatch_ground_lidar_uninit();
 	//调度地面雷达 执行状态消息
 	Error_manager execute_for_ground_status_msg(message::Ground_status_msg &ground_status_msg);
 public://get or set member variable

+ 28 - 4
dispatch/dispatch_manager.cpp

@@ -57,8 +57,12 @@ Error_manager Dispatch_manager::dispatch_manager_init_from_protobuf(Dispatch_pro
 	Error_manager t_error;
 
 	m_dispatch_plc.dispatch_plc_init(m_dispatch_manager_id);
-	m_dispatch_ground_lidar[0].dispatch_plc_init(m_dispatch_manager_id, 0);
-	m_dispatch_ground_lidar[1].dispatch_plc_init(m_dispatch_manager_id, 1);
+	m_dispatch_ground_lidar[0].dispatch_ground_lidar_init(m_dispatch_manager_id, 0);
+	m_dispatch_ground_lidar[1].dispatch_ground_lidar_init(m_dispatch_manager_id, 1);
+	m_dispatch_singlechip[0].dispatch_singlechip_init(m_dispatch_manager_id, 0, 1);
+	m_dispatch_singlechip[1].dispatch_singlechip_init(m_dispatch_manager_id, 1, 1);
+	m_dispatch_singlechip[2].dispatch_singlechip_init(m_dispatch_manager_id, 0, 2);
+	m_dispatch_singlechip[3].dispatch_singlechip_init(m_dispatch_manager_id, 1, 2);
 
 	m_dispatch_motion_direction_next = Common_data::Dispatch_motion_direction::DISPATCH_MOTION_DIRECTION_PICKUP;
 
@@ -89,8 +93,12 @@ Error_manager Dispatch_manager::dispatch_manager_uninit()
 	m_dispatch_manager_id = -1;
 
 	m_dispatch_plc.dispatch_plc_uninit();
-	m_dispatch_ground_lidar[0].dispatch_plc_uninit();
-	m_dispatch_ground_lidar[1].dispatch_plc_uninit();
+	m_dispatch_ground_lidar[0].dispatch_ground_lidar_uninit();
+	m_dispatch_ground_lidar[1].dispatch_ground_lidar_uninit();
+	m_dispatch_singlechip[0].dispatch_singlechip_uninit();
+	m_dispatch_singlechip[1].dispatch_singlechip_uninit();
+	m_dispatch_singlechip[2].dispatch_singlechip_uninit();
+	m_dispatch_singlechip[3].dispatch_singlechip_uninit();
 
 
 	return Error_code::SUCCESS;
@@ -327,7 +335,23 @@ Error_manager Dispatch_manager::execute_for_ground_status_msg(message::Ground_st
 	return Error_code::SUCCESS;
 }
 
+//调度模块 ///单片机的状态消息
+Error_manager Dispatch_manager::execute_for_singlechip_data_msg(message::Singlechip_data singlechip_data_msg, bool validity)
+{
+	if ( singlechip_data_msg.has_terminalid() && singlechip_data_msg.has_dispatchdirection() )
+	{
+		if ( singlechip_data_msg.terminalid() >=0 &&
+		singlechip_data_msg.terminalid() <=5 &&
+		singlechip_data_msg.dispatchdirection() >=1 &&
+		singlechip_data_msg.dispatchdirection() <=2 )
+		{
+			int t_temp = (singlechip_data_msg.terminalid() %2) + (singlechip_data_msg.dispatchdirection()-1)*2;
+			return	m_dispatch_singlechip[t_temp].execute_for_singlechip_data_msg(singlechip_data_msg, validity);
+		}
+	}
 
+	return Error_code::SUCCESS;
+}
 
 
 

+ 4 - 2
dispatch/dispatch_manager.h

@@ -26,6 +26,7 @@
 #include "../dispatch/dispatch_parameter.pb.h"
 #include "../dispatch/dispatch_plc.h"
 #include "../dispatch/dispatch_ground_lidar.h"
+#include "../dispatch/dispatch_singlechip.h"
 #include "../message/measure_message.pb.h"
 
 
@@ -128,8 +129,8 @@ public://API functions
 
 	//调度模块 ///地面雷达的状态消息(地面雷达->null)
 	Error_manager execute_for_ground_status_msg(message::Ground_status_msg ground_status_msg);
-
-
+	//调度模块 ///单片机的状态消息
+	Error_manager execute_for_singlechip_data_msg(message::Singlechip_data singlechip_data_msg, bool validity);
 
 
 
@@ -155,6 +156,7 @@ public://member variable
 	//调度plc
 	Dispatch_plc								m_dispatch_plc;						//调度plc
 	Dispatch_ground_lidar						m_dispatch_ground_lidar[2];			//调度地面雷达
+	Dispatch_singlechip							m_dispatch_singlechip[4];			//调度单片机
 
 
 	//请求指令的list, 按照创建顺序排序, 先来后到, 停车和停车不能插队, 但是停车和取车可以插队.

+ 219 - 0
dispatch/dispatch_singlechip.cpp

@@ -0,0 +1,219 @@
+//
+// Created by huli on 2021/11/18.
+//
+
+#include "dispatch_singlechip.h"
+
+
+
+Dispatch_singlechip::Dispatch_singlechip()
+{
+	m_dispatch_singlechip_status = DISPATCH_SINGLECHIP_UNKNOW;
+	m_plc_id = 0;
+	m_singlechip_id = 0;
+	m_singlechip_data_msg_updata_flag = false;
+	m_validity = false;
+
+}
+
+Dispatch_singlechip::~Dispatch_singlechip()
+{
+	dispatch_singlechip_uninit();
+}
+
+
+//调度单片机 初始化
+Error_manager Dispatch_singlechip::dispatch_singlechip_init(int plc_id, int singlechip_id, int singlechip_direction)
+{
+	m_plc_id =	plc_id;
+	m_singlechip_id = singlechip_id;
+	m_singlechip_direction = singlechip_direction;
+	mp_execute_thread = nullptr ;
+	m_singlechip_data_msg_updata_time = std::chrono::system_clock::now();
+	m_singlechip_data_msg_updata_flag = false;
+
+	//	线程默认开启
+	m_execute_condition.reset(false, true, false);
+	mp_execute_thread = new std::thread(&Dispatch_singlechip::execute_thread_fun, this);
+
+	m_dispatch_singlechip_status = DISPATCH_SINGLECHIP_READY;
+
+	return Error_code::SUCCESS;
+}
+//调度单片机 反初始化
+Error_manager Dispatch_singlechip::dispatch_singlechip_uninit()
+{
+	if (mp_execute_thread)
+	{
+		m_execute_condition.kill_all();
+	}
+	if (mp_execute_thread)
+	{
+		mp_execute_thread->join();
+		delete mp_execute_thread;
+		mp_execute_thread = NULL;
+	}
+
+	m_dispatch_singlechip_status = Dispatch_singlechip::DISPATCH_SINGLECHIP_UNKNOW;
+
+	return Error_code::SUCCESS;
+}
+//调度单片机 执行状态消息
+Error_manager Dispatch_singlechip::execute_for_singlechip_data_msg(message::Singlechip_data &singlechip_data_msg, bool validity)
+{
+	std::unique_lock<std::mutex> t_lock2(m_lock);
+	m_singlechip_data_msg = singlechip_data_msg;
+	m_validity = validity;
+	m_singlechip_data_msg_updata_time = std::chrono::system_clock::now();
+	m_singlechip_data_msg_updata_flag = true;
+
+	return Error_code::SUCCESS;
+}
+
+Dispatch_singlechip::Dispatch_singlechip_status Dispatch_singlechip::get_dispatch_singlechip_status()
+{
+	return m_dispatch_singlechip_status;
+}
+
+
+
+
+
+//执行外界任务的执行函数
+void Dispatch_singlechip::execute_thread_fun()
+{
+	LOG(INFO) << " Dispatch_singlechip::execute_thread_fun() start " << this;
+	Error_manager t_error;
+
+	while (m_execute_condition.is_alive())
+	{
+		m_execute_condition.wait();
+		if (m_execute_condition.is_alive())
+		{
+			std::this_thread::sleep_for(std::chrono::milliseconds(1));
+//			std::this_thread::sleep_for(std::chrono::seconds(1));
+
+			std::this_thread::yield();
+
+//			std::cout << " huli test :::: " << " m_singlechip_data_msg = " << m_singlechip_data_msg.DebugString() << std::endl;
+
+
+			if (m_singlechip_data_msg_updata_flag)
+			{
+
+				std::cout << " huli test :::: " << " m_singlechip_data_msg = " << m_singlechip_data_msg.DebugString() << std::endl;
+
+
+				std::unique_lock<std::mutex> t_lock(Dispatch_communication::get_instance_references().m_data_lock);
+				std::unique_lock<std::mutex> t_lock2(m_lock);
+
+				//将nnxx的protobuf 转化为 snap7的DB块,  把店面雷达数据转发给plc
+				int t_temp = (m_singlechip_data_msg.terminalid() % 2) + (m_singlechip_data_msg.dispatchdirection()-1)*2;
+				Dispatch_communication::Singlechip_response_from_manager_to_plc *p_response = &Dispatch_communication::get_instance_references().m_singlechip_response_from_manager_to_plc[t_temp];
+				Dispatch_communication::Singlechip_request_from_plc_to_manager *p_request = &Dispatch_communication::get_instance_references().m_singlechip_request_from_plc_to_manager[t_temp];
+
+
+				if (p_request->m_request_communication_mode != 2)
+				{
+					p_response->m_response_heartbeat = 1-p_response->m_response_heartbeat;
+					p_response->m_response_communication_mode = p_request->m_request_communication_mode;
+					p_response->m_response_refresh_command = p_request->m_request_refresh_command;
+					p_response->m_response_data_validity = m_validity;
+
+					p_response->m_process_status = m_singlechip_data_msg.processstatus();
+					p_response->m_process_control = m_singlechip_data_msg.processcontrol();
+					p_response->m_over_border_status = m_singlechip_data_msg.overborderstatus();
+					p_response->m_car_height_status_current = m_singlechip_data_msg.carheightstatuscurrent();
+					p_response->m_car_height_status_passing = m_singlechip_data_msg.carheightstatuspassing();
+					p_response->m_outside_door_status = m_singlechip_data_msg.outsidedoorstatus();
+					p_response->m_outside_door_control = m_singlechip_data_msg.outsidedoorcontrol();
+					p_response->m_dispatch_finish_flag = m_singlechip_data_msg.dispatchfinishflag();
+					p_response->m_inside_existence_flag = m_singlechip_data_msg.insideexistenceflag();
+					p_response->m_outside_existence_flag = m_singlechip_data_msg.outsideexistenceflag();
+					p_response->m_reset_flag = m_singlechip_data_msg.resetflag();
+					p_response->m_stop_flag = m_singlechip_data_msg.stopflag();
+					p_response->m_error_code = 0;
+
+					p_response->m_gpio_input[0] = m_singlechip_data_msg.inputdi().di0();
+					p_response->m_gpio_input[1] = m_singlechip_data_msg.inputdi().di1();
+					p_response->m_gpio_input[2] = m_singlechip_data_msg.inputdi().di2();
+					p_response->m_gpio_input[3] = m_singlechip_data_msg.inputdi().di3();
+					p_response->m_gpio_input[4] = m_singlechip_data_msg.inputdi().di4();
+					p_response->m_gpio_input[5] = m_singlechip_data_msg.inputdi().di5();
+					p_response->m_gpio_input[6] = m_singlechip_data_msg.inputdi().di6();
+					p_response->m_gpio_input[7] = m_singlechip_data_msg.inputdi().di7();
+					p_response->m_gpio_input[8] = m_singlechip_data_msg.inputdi().di8();
+					p_response->m_gpio_input[9] = m_singlechip_data_msg.inputdi().di9();
+					p_response->m_gpio_input[10] = m_singlechip_data_msg.inputdi().di10();
+					p_response->m_gpio_input[11] = m_singlechip_data_msg.inputdi().di11();
+					p_response->m_gpio_input[12] = m_singlechip_data_msg.inputdi().di12();
+					p_response->m_gpio_input[13] = m_singlechip_data_msg.inputdi().di13();
+					p_response->m_gpio_input[14] = m_singlechip_data_msg.inputdi().di14();
+					p_response->m_gpio_input[15] = m_singlechip_data_msg.inputdi().di15();
+				}
+				else if (p_response->m_response_refresh_command == p_request->m_request_refresh_command)
+				{
+					p_response->m_response_heartbeat = 1-p_response->m_response_heartbeat;
+					p_response->m_response_communication_mode = p_request->m_request_communication_mode;
+					p_response->m_response_refresh_command = p_request->m_request_refresh_command;
+				}
+				else
+				{
+					p_response->m_response_heartbeat = 1-p_response->m_response_heartbeat;
+					p_response->m_response_communication_mode = p_request->m_request_communication_mode;
+					p_response->m_response_refresh_command = p_request->m_request_refresh_command;
+					p_response->m_response_data_validity = m_validity;
+
+					p_response->m_process_status = m_singlechip_data_msg.processstatus();
+					p_response->m_process_control = m_singlechip_data_msg.processcontrol();
+					p_response->m_over_border_status = m_singlechip_data_msg.overborderstatus();
+					p_response->m_car_height_status_current = m_singlechip_data_msg.carheightstatuscurrent();
+					p_response->m_car_height_status_passing = m_singlechip_data_msg.carheightstatuspassing();
+					p_response->m_outside_door_status = m_singlechip_data_msg.outsidedoorstatus();
+					p_response->m_outside_door_control = m_singlechip_data_msg.outsidedoorcontrol();
+					p_response->m_dispatch_finish_flag = m_singlechip_data_msg.dispatchfinishflag();
+					p_response->m_inside_existence_flag = m_singlechip_data_msg.insideexistenceflag();
+					p_response->m_outside_existence_flag = m_singlechip_data_msg.outsideexistenceflag();
+					p_response->m_reset_flag = m_singlechip_data_msg.resetflag();
+					p_response->m_stop_flag = m_singlechip_data_msg.stopflag();
+					p_response->m_error_code = 0;
+
+					p_response->m_gpio_input[0] = m_singlechip_data_msg.inputdi().di0();
+					p_response->m_gpio_input[1] = m_singlechip_data_msg.inputdi().di1();
+					p_response->m_gpio_input[2] = m_singlechip_data_msg.inputdi().di2();
+					p_response->m_gpio_input[3] = m_singlechip_data_msg.inputdi().di3();
+					p_response->m_gpio_input[4] = m_singlechip_data_msg.inputdi().di4();
+					p_response->m_gpio_input[5] = m_singlechip_data_msg.inputdi().di5();
+					p_response->m_gpio_input[6] = m_singlechip_data_msg.inputdi().di6();
+					p_response->m_gpio_input[7] = m_singlechip_data_msg.inputdi().di7();
+					p_response->m_gpio_input[8] = m_singlechip_data_msg.inputdi().di8();
+					p_response->m_gpio_input[9] = m_singlechip_data_msg.inputdi().di9();
+					p_response->m_gpio_input[10] = m_singlechip_data_msg.inputdi().di10();
+					p_response->m_gpio_input[11] = m_singlechip_data_msg.inputdi().di11();
+					p_response->m_gpio_input[12] = m_singlechip_data_msg.inputdi().di12();
+					p_response->m_gpio_input[13] = m_singlechip_data_msg.inputdi().di13();
+					p_response->m_gpio_input[14] = m_singlechip_data_msg.inputdi().di14();
+					p_response->m_gpio_input[15] = m_singlechip_data_msg.inputdi().di15();
+				}
+
+				m_singlechip_data_msg_updata_flag = false;
+			}
+
+
+			//判断超时
+			{
+				std::unique_lock<std::mutex> t_lock3(m_lock);
+				if (std::chrono::system_clock::now() - m_singlechip_data_msg_updata_time > std::chrono::seconds(5))
+				{
+					m_dispatch_singlechip_status = DISPATCH_SINGLECHIP_DISCONNECT;
+				}
+				else
+				{
+					m_dispatch_singlechip_status = DISPATCH_SINGLECHIP_READY;
+				}
+			}
+		}
+
+	}
+}
+

+ 75 - 0
dispatch/dispatch_singlechip.h

@@ -0,0 +1,75 @@
+//
+// Created by huli on 2021/11/18.
+//
+
+#ifndef NNXX_TESTS_DISPATCH_SINGLECHIP_H
+#define NNXX_TESTS_DISPATCH_SINGLECHIP_H
+
+#include "../error_code/error_code.h"
+#include <glog/logging.h>
+#include <thread>
+#include <mutex>
+#include "../tool/thread_condition.h"
+#include "../tool/common_data.h"
+#include "../tool/time_tool.h"
+#include "../task/task_base.h"
+#include "../message/dispatch_message.pb.h"
+#include "../message/singlechip_msg.pb.h"
+#include "../dispatch/dispatch_communication.h"
+
+//调度单片机通信
+class Dispatch_singlechip
+{
+public:
+	//调度plc状态
+	enum Dispatch_singlechip_status
+	{
+		DISPATCH_SINGLECHIP_UNKNOW               	= 0,    //未知
+		DISPATCH_SINGLECHIP_READY               	= 1,    //准备,待机
+		
+		DISPATCH_SINGLECHIP_FAULT					= 10,	//故障
+		DISPATCH_SINGLECHIP_DISCONNECT			= 11, 	//断连
+
+	};
+public:
+	Dispatch_singlechip();
+	Dispatch_singlechip(const Dispatch_singlechip& other)= default;
+	Dispatch_singlechip& operator =(const Dispatch_singlechip& other)= default;
+	~Dispatch_singlechip();
+public://API functions
+	//调度单片机 初始化
+	Error_manager dispatch_singlechip_init(int plc_id, int singlechip_id, int singlechip_direction);
+	//调度单片机 反初始化
+	Error_manager dispatch_singlechip_uninit();
+	//调度单片机 执行状态消息
+	Error_manager execute_for_singlechip_data_msg(message::Singlechip_data &singlechip_data_msg, bool validity);
+public://get or set member variable
+	Dispatch_singlechip_status get_dispatch_singlechip_status();
+protected://member functions
+	//执行外界任务的执行函数
+	void execute_thread_fun();
+protected://member variable
+	std::atomic<Dispatch_singlechip_status>				m_dispatch_singlechip_status;//调度单片机的状态
+
+
+	int 										m_plc_id;					//设备id, 索引, 就是楚天车库的单元号.
+	int 										m_singlechip_id;			//单片机id
+	int 										m_singlechip_direction;		//单片机方向, 1是入口, 2是出口
+	std::mutex									m_lock;	//锁
+
+	//任务执行线程
+	std::thread*        						mp_execute_thread;   			//执行的线程指针,内存由本类管理
+	Thread_condition							m_execute_condition;			//执行的条件变量
+
+	//数据缓存
+	message::Singlechip_data 						m_singlechip_data_msg;		//单片机消息
+	bool 											m_validity;					//有效性
+	std::chrono::system_clock::time_point			m_singlechip_data_msg_updata_time;	//状态更新时间点
+	std::atomic<bool>								m_singlechip_data_msg_updata_flag;
+
+private:
+
+};
+
+
+#endif //NNXX_TESTS_DISPATCH_SINGLECHIP_H

+ 209 - 130
message/message_base.pb.cc

@@ -253,14 +253,16 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Car_info, car_width_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Car_info, car_height_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Car_info, license_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Car_info, car_numberplate_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Car_info, car_wheel_base_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Car_info, car_wheel_width_),
-  1,
   2,
   3,
-  0,
   4,
+  0,
+  1,
   5,
+  6,
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Parkspace_info, _has_bits_),
   GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::message::Parkspace_info, _internal_metadata_),
   ~0u,  // no _extensions_
@@ -306,8 +308,8 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROT
   { 13, 19, sizeof(::message::Base_msg)},
   { 20, 28, sizeof(::message::Error_manager)},
   { 31, 48, sizeof(::message::Locate_information)},
-  { 60, 71, sizeof(::message::Car_info)},
-  { 77, 99, sizeof(::message::Parkspace_info)},
+  { 60, 72, sizeof(::message::Car_info)},
+  { 79, 101, sizeof(::message::Parkspace_info)},
 };
 
 static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -359,102 +361,109 @@ void AddDescriptorsImpl() {
       "idth\030\010 \001(\002:\0010\022\035\n\016locate_correct\030\t \001(\010:\005f"
       "alse\022\035\n\022locate_front_theta\030\n \001(\002:\0010\022\027\n\017u"
       "niformed_car_x\030\013 \001(\002\022\027\n\017uniformed_car_y\030"
-      "\014 \001(\002\"\230\001\n\010Car_info\022\025\n\ncar_length\030\001 \001(\002:\001"
+      "\014 \001(\002\"\263\001\n\010Car_info\022\025\n\ncar_length\030\001 \001(\002:\001"
       "0\022\024\n\tcar_width\030\002 \001(\002:\0010\022\025\n\ncar_height\030\003 "
-      "\001(\002:\0010\022\021\n\007license\030\004 \001(\t:\000\022\031\n\016car_wheel_b"
-      "ase\030\005 \001(\002:\0010\022\032\n\017car_wheel_width\030\006 \001(\002:\0010"
-      "\"\375\004\n\016Parkspace_info\022\035\n\025parkingspace_inde"
-      "x_id\030\001 \001(\005\0222\n\021parkingspace_type\030\002 \001(\0162\027."
-      "message.Parkspace_type\022\034\n\024parkingspace_u"
-      "nit_id\030\003 \001(\005\022\035\n\025parkingspace_label_id\030\004 "
-      "\001(\005\022\034\n\024parkingspace_room_id\030\005 \001(\005\0222\n\026par"
-      "kingspace_direction\030\006 \001(\0162\022.message.Dire"
-      "ction\022\035\n\025parkingspace_floor_id\030\007 \001(\005\022\032\n\022"
-      "parkingspace_width\030\010 \001(\002\022\033\n\023parkingspace"
-      "_height\030\t \001(\002\0226\n\023parkingspace_status\030\n \001"
-      "(\0162\031.message.Parkspace_status\022#\n\010car_inf"
-      "o\030\013 \001(\0132\021.message.Car_info\022\022\n\nentry_time"
-      "\030\014 \001(\t\022\022\n\nleave_time\030\r \001(\t\022/\n\016parkspace_"
-      "path\030\016 \001(\0162\027.message.Parkspace_path\022\032\n\022p"
-      "ath_estimate_time\030\017 \001(\002\022:\n\027parkspace_sta"
-      "tus_target\030\020 \001(\0162\031.message.Parkspace_sta"
-      "tus\022#\n\010car_type\030\021 \001(\0162\021.message.Car_type"
-      "*\345\n\n\014Message_type\022\r\n\teBase_msg\020\000\022\020\n\014eCom"
-      "mand_msg\020\001\022\026\n\022eLocate_status_msg\020\021\022\027\n\023eL"
-      "ocate_request_msg\020\022\022\030\n\024eLocate_response_"
-      "msg\020\023\022\034\n\030eLocate_sift_request_msg\020\024\022\035\n\031e"
-      "Locate_sift_response_msg\020\025\022\030\n\024eDispatch_"
-      "status_msg\020!\022\031\n\025eDispatch_request_msg\020\"\022"
-      "\032\n\026eDispatch_response_msg\020#\022$\n eParkspac"
-      "e_allocation_status_msg\0201\022%\n!eParkspace_"
-      "allocation_request_msg\0202\022&\n\"eParkspace_a"
-      "llocation_response_msg\0203\022!\n\035eParkspace_s"
-      "earch_request_msg\0204\022\"\n\036eParkspace_search"
-      "_response_msg\0205\022\"\n\036eParkspace_release_re"
-      "quest_msg\0206\022#\n\037eParkspace_release_respon"
-      "se_msg\0207\022\'\n#eParkspace_force_update_requ"
-      "est_msg\0208\022(\n$eParkspace_force_update_res"
-      "ponse_msg\0209\022(\n$eParkspace_confirm_alloc_"
-      "request_msg\020:\022)\n%eParkspace_confirm_allo"
-      "c_response_msg\020;\022\"\n\036eParkspace_allocatio"
-      "n_data_msg\020<\022+\n\'eParkspace_allocation_da"
-      "ta_response_msg\020=\022\036\n\032eStore_command_requ"
-      "est_msg\020A\022\037\n\033eStore_command_response_msg"
-      "\020B\022\037\n\033ePickup_command_request_msg\020C\022 \n\034e"
-      "Pickup_command_response_msg\020D\022\037\n\032eStorin"
-      "g_process_statu_msg\020\220\001\022\037\n\032ePicking_proce"
-      "ss_statu_msg\020\221\001\022\"\n\035eCentral_controller_s"
-      "tatu_msg\020\240\001\022#\n\036eEntrance_manual_operatio"
-      "n_msg\020\260\001\022\"\n\035eProcess_manual_operation_ms"
-      "g\020\261\001\022\037\n\032eDispatch_plan_request_msg\020\340\001\022 \n"
-      "\033eDispatch_plan_response_msg\020\341\001\022\"\n\035eDisp"
-      "atch_control_request_msg\020\342\001\022#\n\036eDispatch"
-      "_control_response_msg\020\343\001\022!\n\034eDispatch_ma"
-      "nager_status_msg\020\352\001\022\037\n\032eDispatch_manager"
-      "_data_msg\020\353\001\022\037\n\032eGround_detect_request_m"
-      "sg\020\360\001\022 \n\033eGround_detect_response_msg\020\361\001\022"
-      "\027\n\022eGround_status_msg\020\362\001*\271\001\n\014Communicato"
-      "r\022\n\n\006eEmpty\020\000\022\t\n\005eMain\020\001\022\016\n\teTerminor\020\200\002"
-      "\022\017\n\neParkspace\020\200\004\022\016\n\teMeasurer\020\200\006\022\032\n\025eMe"
-      "asurer_sift_server\020\201\006\022\026\n\021eDispatch_manag"
-      "er\020\200\010\022\026\n\021eDispatch_control\020\201\010\022\025\n\020eGround"
-      "_measurer\020\200\036**\n\014Process_type\022\014\n\010eStoring"
-      "\020\001\022\014\n\010ePicking\020\002*e\n\013Error_level\022\n\n\006NORMA"
-      "L\020\000\022\024\n\020NEGLIGIBLE_ERROR\020\001\022\017\n\013MINOR_ERROR"
-      "\020\002\022\017\n\013MAJOR_ERROR\020\003\022\022\n\016CRITICAL_ERROR\020\004*"
-      "\245\001\n\020Parkspace_status\022\034\n\030eParkspace_statu"
-      "s_unknow\020\000\022\024\n\020eParkspace_empty\020\001\022\027\n\023ePar"
-      "kspace_occupied\020\002\022\027\n\023eParkspace_reserved"
-      "\020\003\022\025\n\021eParkspace_locked\020\004\022\024\n\020eParkspace_"
-      "error\020\005*\?\n\tDirection\022\025\n\021eDirection_unkno"
-      "w\020\000\022\014\n\010eForward\020\001\022\r\n\teBackward\020\002*l\n\016Park"
-      "space_path\022\017\n\013UNKNOW_PATH\020\000\022\020\n\014OPTIMAL_P"
-      "ATH\020\001\022\r\n\tLEFT_PATH\020\002\022\016\n\nRIGHT_PATH\020\003\022\030\n\024"
-      "TEMPORARY_CACHE_PATH\020\004*m\n\016Parkspace_type"
-      "\022\031\n\025UNKNOW_PARKSPACE_TYPE\020\000\022\024\n\020MIN_PARKI"
-      "NGSPACE\020\001\022\024\n\020MID_PARKINGSPACE\020\002\022\024\n\020BIG_P"
-      "ARKINGSPACE\020\003*F\n\010Car_type\022\023\n\017UNKNOW_CAR_"
-      "TYPE\020\000\022\013\n\007MIN_CAR\020\001\022\013\n\007MID_CAR\020\002\022\013\n\007BIG_"
-      "CAR\020\003*\335\002\n\tStep_type\022\017\n\013eAlloc_step\020\000\022\021\n\r"
-      "eMeasure_step\020\001\022\021\n\reCompare_step\020\002\022\022\n\016eD"
-      "ispatch_step\020\003\022\021\n\reConfirm_step\020\004\022\020\n\014eSe"
-      "arch_step\020\005\022\016\n\neWait_step\020\006\022\021\n\reRelease_"
-      "step\020\007\022\r\n\teComplete\020\010\022\025\n\021eBackConfirm_st"
-      "ep\020\t\022\026\n\022eBack_compare_step\020\n\022\025\n\021eBackMea"
-      "sure_step\020\013\022\023\n\017eBackAlloc_step\020\014\022\022\n\016eBac"
-      "kWait_step\020\r\022\026\n\022eBackDispatch_step\020\016\022\024\n\020"
-      "eBackSearch_step\020\017\022\021\n\reBackComplete\020\020*C\n"
-      "\nStep_statu\022\014\n\010eWaiting\020\000\022\014\n\010eWorking\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\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\014PASSAGEWAY_2\020\256\002\022\021\n\014PASSAGEWAY_3\020\257"
-      "\002\022\021\n\014PASSAGEWAY_4\020\260\002\022\021\n\014PASSAGEWAY_5\020\261\002\022"
-      "\021\n\014PASSAGEWAY_6\020\262\002\022\021\n\014PASSAGEWAY_7\020\263\002"
+      "\001(\002:\0010\022\021\n\007license\030\004 \001(\t:\000\022\031\n\017car_numberP"
+      "late\030\005 \001(\t:\000\022\031\n\016car_wheel_base\030\006 \001(\002:\0010\022"
+      "\032\n\017car_wheel_width\030\007 \001(\002:\0010\"\375\004\n\016Parkspac"
+      "e_info\022\035\n\025parkingspace_index_id\030\001 \001(\005\0222\n"
+      "\021parkingspace_type\030\002 \001(\0162\027.message.Parks"
+      "pace_type\022\034\n\024parkingspace_unit_id\030\003 \001(\005\022"
+      "\035\n\025parkingspace_label_id\030\004 \001(\005\022\034\n\024parkin"
+      "gspace_room_id\030\005 \001(\005\0222\n\026parkingspace_dir"
+      "ection\030\006 \001(\0162\022.message.Direction\022\035\n\025park"
+      "ingspace_floor_id\030\007 \001(\005\022\032\n\022parkingspace_"
+      "width\030\010 \001(\002\022\033\n\023parkingspace_height\030\t \001(\002"
+      "\0226\n\023parkingspace_status\030\n \001(\0162\031.message."
+      "Parkspace_status\022#\n\010car_info\030\013 \001(\0132\021.mes"
+      "sage.Car_info\022\022\n\nentry_time\030\014 \001(\t\022\022\n\nlea"
+      "ve_time\030\r \001(\t\022/\n\016parkspace_path\030\016 \001(\0162\027."
+      "message.Parkspace_path\022\032\n\022path_estimate_"
+      "time\030\017 \001(\002\022:\n\027parkspace_status_target\030\020 "
+      "\001(\0162\031.message.Parkspace_status\022#\n\010car_ty"
+      "pe\030\021 \001(\0162\021.message.Car_type*\307\014\n\014Message_"
+      "type\022\r\n\teBase_msg\020\000\022\020\n\014eCommand_msg\020\001\022\026\n"
+      "\022eLocate_status_msg\020\021\022\027\n\023eLocate_request"
+      "_msg\020\022\022\030\n\024eLocate_response_msg\020\023\022\034\n\030eLoc"
+      "ate_sift_request_msg\020\024\022\035\n\031eLocate_sift_r"
+      "esponse_msg\020\025\022\030\n\024eDispatch_status_msg\020!\022"
+      "\031\n\025eDispatch_request_msg\020\"\022\032\n\026eDispatch_"
+      "response_msg\020#\022$\n eParkspace_allocation_"
+      "status_msg\0201\022%\n!eParkspace_allocation_re"
+      "quest_msg\0202\022&\n\"eParkspace_allocation_res"
+      "ponse_msg\0203\022!\n\035eParkspace_search_request"
+      "_msg\0204\022\"\n\036eParkspace_search_response_msg"
+      "\0205\022\"\n\036eParkspace_release_request_msg\0206\022#"
+      "\n\037eParkspace_release_response_msg\0207\022\'\n#e"
+      "Parkspace_force_update_request_msg\0208\022(\n$"
+      "eParkspace_force_update_response_msg\0209\022("
+      "\n$eParkspace_confirm_alloc_request_msg\020:"
+      "\022)\n%eParkspace_confirm_alloc_response_ms"
+      "g\020;\022\"\n\036eParkspace_allocation_data_msg\020<\022"
+      "+\n\'eParkspace_allocation_data_response_m"
+      "sg\020=\022(\n$eParkspace_manual_search_request"
+      "_msg\020>\022)\n%eParkspace_manual_search_respo"
+      "nse_msg\020\?\022\036\n\032eStore_command_request_msg\020"
+      "A\022\037\n\033eStore_command_response_msg\020B\022\037\n\033eP"
+      "ickup_command_request_msg\020C\022 \n\034ePickup_c"
+      "ommand_response_msg\020D\022\030\n\024eTerminal_statu"
+      "s_msg\020P\022\037\n\032eStoring_process_statu_msg\020\220\001"
+      "\022\037\n\032ePicking_process_statu_msg\020\221\001\022\"\n\035eCe"
+      "ntral_controller_statu_msg\020\240\001\022#\n\036eEntran"
+      "ce_manual_operation_msg\020\260\001\022\"\n\035eProcess_m"
+      "anual_operation_msg\020\261\001\022\030\n\023eNotify_reques"
+      "t_msg\020\300\001\022\031\n\024eNotify_response_msg\020\301\001\022\027\n\022e"
+      "Notify_status_msg\020\302\001\022#\n\036eUnNormalized_mo"
+      "dule_statu_msg\020\320\001\022\037\n\032eDispatch_plan_requ"
+      "est_msg\020\340\001\022 \n\033eDispatch_plan_response_ms"
+      "g\020\341\001\022\"\n\035eDispatch_control_request_msg\020\342\001"
+      "\022#\n\036eDispatch_control_response_msg\020\343\001\022!\n"
+      "\034eDispatch_manager_status_msg\020\352\001\022\037\n\032eDis"
+      "patch_manager_data_msg\020\353\001\022\037\n\032eGround_det"
+      "ect_request_msg\020\360\001\022 \n\033eGround_detect_res"
+      "ponse_msg\020\361\001\022\027\n\022eGround_status_msg\020\362\001*\307\001"
+      "\n\014Communicator\022\n\n\006eEmpty\020\000\022\t\n\005eMain\020\001\022\016\n"
+      "\teTerminor\020\200\002\022\017\n\neParkspace\020\200\004\022\016\n\teMeasu"
+      "rer\020\200\006\022\032\n\025eMeasurer_sift_server\020\201\006\022\026\n\021eD"
+      "ispatch_manager\020\200\010\022\026\n\021eDispatch_control\020"
+      "\201\010\022\014\n\007eNotify\020\201\n\022\025\n\020eGround_measurer\020\200\036*"
+      "*\n\014Process_type\022\014\n\010eStoring\020\001\022\014\n\010ePickin"
+      "g\020\002*e\n\013Error_level\022\n\n\006NORMAL\020\000\022\024\n\020NEGLIG"
+      "IBLE_ERROR\020\001\022\017\n\013MINOR_ERROR\020\002\022\017\n\013MAJOR_E"
+      "RROR\020\003\022\022\n\016CRITICAL_ERROR\020\004*\245\001\n\020Parkspace"
+      "_status\022\034\n\030eParkspace_status_unknow\020\000\022\024\n"
+      "\020eParkspace_empty\020\001\022\027\n\023eParkspace_occupi"
+      "ed\020\002\022\027\n\023eParkspace_reserved\020\003\022\025\n\021eParksp"
+      "ace_locked\020\004\022\024\n\020eParkspace_error\020\005*\?\n\tDi"
+      "rection\022\025\n\021eDirection_unknow\020\000\022\014\n\010eForwa"
+      "rd\020\001\022\r\n\teBackward\020\002*l\n\016Parkspace_path\022\017\n"
+      "\013UNKNOW_PATH\020\000\022\020\n\014OPTIMAL_PATH\020\001\022\r\n\tLEFT"
+      "_PATH\020\002\022\016\n\nRIGHT_PATH\020\003\022\030\n\024TEMPORARY_CAC"
+      "HE_PATH\020\004*m\n\016Parkspace_type\022\031\n\025UNKNOW_PA"
+      "RKSPACE_TYPE\020\000\022\024\n\020MIN_PARKINGSPACE\020\001\022\024\n\020"
+      "MID_PARKINGSPACE\020\002\022\024\n\020BIG_PARKINGSPACE\020\003"
+      "*F\n\010Car_type\022\023\n\017UNKNOW_CAR_TYPE\020\000\022\013\n\007MIN"
+      "_CAR\020\001\022\013\n\007MID_CAR\020\002\022\013\n\007BIG_CAR\020\003*\335\002\n\tSte"
+      "p_type\022\017\n\013eAlloc_step\020\000\022\021\n\reMeasure_step"
+      "\020\001\022\021\n\reCompare_step\020\002\022\022\n\016eDispatch_step\020"
+      "\003\022\021\n\reConfirm_step\020\004\022\020\n\014eSearch_step\020\005\022\016"
+      "\n\neWait_step\020\006\022\021\n\reRelease_step\020\007\022\r\n\teCo"
+      "mplete\020\010\022\025\n\021eBackConfirm_step\020\t\022\026\n\022eBack"
+      "_compare_step\020\n\022\025\n\021eBackMeasure_step\020\013\022\023"
+      "\n\017eBackAlloc_step\020\014\022\022\n\016eBackWait_step\020\r\022"
+      "\026\n\022eBackDispatch_step\020\016\022\024\n\020eBackSearch_s"
+      "tep\020\017\022\021\n\reBackComplete\020\020*C\n\nStep_statu\022\014"
+      "\n\010eWaiting\020\000\022\014\n\010eWorking\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\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\014PASS"
+      "AGEWAY_0\020\254\002\022\021\n\014PASSAGEWAY_1\020\255\002\022\021\n\014PASSAG"
+      "EWAY_2\020\256\002\022\021\n\014PASSAGEWAY_3\020\257\002\022\021\n\014PASSAGEW"
+      "AY_4\020\260\002\022\021\n\014PASSAGEWAY_5\020\261\002\022\021\n\014PASSAGEWAY"
+      "_6\020\262\002\022\021\n\014PASSAGEWAY_7\020\263\002"
   };
   ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-      descriptor, 4437);
+      descriptor, 4704);
   ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
     "message_base.proto", &protobuf_RegisterTypes);
 }
@@ -500,15 +509,22 @@ bool Message_type_IsValid(int value) {
     case 59:
     case 60:
     case 61:
+    case 62:
+    case 63:
     case 65:
     case 66:
     case 67:
     case 68:
+    case 80:
     case 144:
     case 145:
     case 160:
     case 176:
     case 177:
+    case 192:
+    case 193:
+    case 194:
+    case 208:
     case 224:
     case 225:
     case 226:
@@ -538,6 +554,7 @@ bool Communicator_IsValid(int value) {
     case 769:
     case 1024:
     case 1025:
+    case 1281:
     case 3840:
       return true;
     default:
@@ -2403,6 +2420,7 @@ const int Car_info::kCarLengthFieldNumber;
 const int Car_info::kCarWidthFieldNumber;
 const int Car_info::kCarHeightFieldNumber;
 const int Car_info::kLicenseFieldNumber;
+const int Car_info::kCarNumberPlateFieldNumber;
 const int Car_info::kCarWheelBaseFieldNumber;
 const int Car_info::kCarWheelWidthFieldNumber;
 #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
@@ -2425,6 +2443,10 @@ Car_info::Car_info(const Car_info& from)
   if (from.has_license()) {
     license_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.license_);
   }
+  car_numberplate_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.has_car_numberplate()) {
+    car_numberplate_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.car_numberplate_);
+  }
   ::memcpy(&car_length_, &from.car_length_,
     static_cast<size_t>(reinterpret_cast<char*>(&car_wheel_width_) -
     reinterpret_cast<char*>(&car_length_)) + sizeof(car_wheel_width_));
@@ -2434,6 +2456,7 @@ Car_info::Car_info(const Car_info& from)
 void Car_info::SharedCtor() {
   _cached_size_ = 0;
   license_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  car_numberplate_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
   ::memset(&car_length_, 0, static_cast<size_t>(
       reinterpret_cast<char*>(&car_wheel_width_) -
       reinterpret_cast<char*>(&car_length_)) + sizeof(car_wheel_width_));
@@ -2446,6 +2469,7 @@ Car_info::~Car_info() {
 
 void Car_info::SharedDtor() {
   license_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  car_numberplate_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
 }
 
 void Car_info::SetCachedSize(int size) const {
@@ -2478,11 +2502,17 @@ void Car_info::Clear() {
   (void) cached_has_bits;
 
   cached_has_bits = _has_bits_[0];
-  if (cached_has_bits & 0x00000001u) {
-    GOOGLE_DCHECK(!license_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()));
-    (*license_.UnsafeRawStringPointer())->clear();
+  if (cached_has_bits & 3u) {
+    if (cached_has_bits & 0x00000001u) {
+      GOOGLE_DCHECK(!license_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()));
+      (*license_.UnsafeRawStringPointer())->clear();
+    }
+    if (cached_has_bits & 0x00000002u) {
+      GOOGLE_DCHECK(!car_numberplate_.IsDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()));
+      (*car_numberplate_.UnsafeRawStringPointer())->clear();
+    }
   }
-  if (cached_has_bits & 62u) {
+  if (cached_has_bits & 124u) {
     ::memset(&car_length_, 0, static_cast<size_t>(
         reinterpret_cast<char*>(&car_wheel_width_) -
         reinterpret_cast<char*>(&car_length_)) + sizeof(car_wheel_width_));
@@ -2559,10 +2589,26 @@ bool Car_info::MergePartialFromCodedStream(
         break;
       }
 
-      // optional float car_wheel_base = 5 [default = 0];
+      // optional string car_numberPlate = 5 [default = ""];
       case 5: {
         if (static_cast< ::google::protobuf::uint8>(tag) ==
-            static_cast< ::google::protobuf::uint8>(45u /* 45 & 0xFF */)) {
+            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_car_numberplate()));
+          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
+            this->car_numberplate().data(), static_cast<int>(this->car_numberplate().length()),
+            ::google::protobuf::internal::WireFormat::PARSE,
+            "message.Car_info.car_numberPlate");
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // optional float car_wheel_base = 6 [default = 0];
+      case 6: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(53u /* 53 & 0xFF */)) {
           set_has_car_wheel_base();
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
@@ -2573,10 +2619,10 @@ bool Car_info::MergePartialFromCodedStream(
         break;
       }
 
-      // optional float car_wheel_width = 6 [default = 0];
-      case 6: {
+      // optional float car_wheel_width = 7 [default = 0];
+      case 7: {
         if (static_cast< ::google::protobuf::uint8>(tag) ==
-            static_cast< ::google::protobuf::uint8>(53u /* 53 & 0xFF */)) {
+            static_cast< ::google::protobuf::uint8>(61u /* 61 & 0xFF */)) {
           set_has_car_wheel_width();
           DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                    float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
@@ -2615,17 +2661,17 @@ void Car_info::SerializeWithCachedSizes(
 
   cached_has_bits = _has_bits_[0];
   // optional float car_length = 1 [default = 0];
-  if (cached_has_bits & 0x00000002u) {
+  if (cached_has_bits & 0x00000004u) {
     ::google::protobuf::internal::WireFormatLite::WriteFloat(1, this->car_length(), output);
   }
 
   // optional float car_width = 2 [default = 0];
-  if (cached_has_bits & 0x00000004u) {
+  if (cached_has_bits & 0x00000008u) {
     ::google::protobuf::internal::WireFormatLite::WriteFloat(2, this->car_width(), output);
   }
 
   // optional float car_height = 3 [default = 0];
-  if (cached_has_bits & 0x00000008u) {
+  if (cached_has_bits & 0x00000010u) {
     ::google::protobuf::internal::WireFormatLite::WriteFloat(3, this->car_height(), output);
   }
 
@@ -2639,14 +2685,24 @@ void Car_info::SerializeWithCachedSizes(
       4, this->license(), output);
   }
 
-  // optional float car_wheel_base = 5 [default = 0];
-  if (cached_has_bits & 0x00000010u) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(5, this->car_wheel_base(), output);
+  // optional string car_numberPlate = 5 [default = ""];
+  if (cached_has_bits & 0x00000002u) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
+      this->car_numberplate().data(), static_cast<int>(this->car_numberplate().length()),
+      ::google::protobuf::internal::WireFormat::SERIALIZE,
+      "message.Car_info.car_numberPlate");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      5, this->car_numberplate(), output);
   }
 
-  // optional float car_wheel_width = 6 [default = 0];
+  // optional float car_wheel_base = 6 [default = 0];
   if (cached_has_bits & 0x00000020u) {
-    ::google::protobuf::internal::WireFormatLite::WriteFloat(6, this->car_wheel_width(), output);
+    ::google::protobuf::internal::WireFormatLite::WriteFloat(6, this->car_wheel_base(), output);
+  }
+
+  // optional float car_wheel_width = 7 [default = 0];
+  if (cached_has_bits & 0x00000040u) {
+    ::google::protobuf::internal::WireFormatLite::WriteFloat(7, this->car_wheel_width(), output);
   }
 
   if (_internal_metadata_.have_unknown_fields()) {
@@ -2665,17 +2721,17 @@ void Car_info::SerializeWithCachedSizes(
 
   cached_has_bits = _has_bits_[0];
   // optional float car_length = 1 [default = 0];
-  if (cached_has_bits & 0x00000002u) {
+  if (cached_has_bits & 0x00000004u) {
     target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(1, this->car_length(), target);
   }
 
   // optional float car_width = 2 [default = 0];
-  if (cached_has_bits & 0x00000004u) {
+  if (cached_has_bits & 0x00000008u) {
     target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(2, this->car_width(), target);
   }
 
   // optional float car_height = 3 [default = 0];
-  if (cached_has_bits & 0x00000008u) {
+  if (cached_has_bits & 0x00000010u) {
     target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(3, this->car_height(), target);
   }
 
@@ -2690,14 +2746,25 @@ void Car_info::SerializeWithCachedSizes(
         4, this->license(), target);
   }
 
-  // optional float car_wheel_base = 5 [default = 0];
-  if (cached_has_bits & 0x00000010u) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(5, this->car_wheel_base(), target);
+  // optional string car_numberPlate = 5 [default = ""];
+  if (cached_has_bits & 0x00000002u) {
+    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
+      this->car_numberplate().data(), static_cast<int>(this->car_numberplate().length()),
+      ::google::protobuf::internal::WireFormat::SERIALIZE,
+      "message.Car_info.car_numberPlate");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        5, this->car_numberplate(), target);
   }
 
-  // optional float car_wheel_width = 6 [default = 0];
+  // optional float car_wheel_base = 6 [default = 0];
   if (cached_has_bits & 0x00000020u) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(6, this->car_wheel_width(), target);
+    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(6, this->car_wheel_base(), target);
+  }
+
+  // optional float car_wheel_width = 7 [default = 0];
+  if (cached_has_bits & 0x00000040u) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(7, this->car_wheel_width(), target);
   }
 
   if (_internal_metadata_.have_unknown_fields()) {
@@ -2717,7 +2784,7 @@ size_t Car_info::ByteSizeLong() const {
       ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
         _internal_metadata_.unknown_fields());
   }
-  if (_has_bits_[0 / 32] & 63u) {
+  if (_has_bits_[0 / 32] & 127u) {
     // optional string license = 4 [default = ""];
     if (has_license()) {
       total_size += 1 +
@@ -2725,6 +2792,13 @@ size_t Car_info::ByteSizeLong() const {
           this->license());
     }
 
+    // optional string car_numberPlate = 5 [default = ""];
+    if (has_car_numberplate()) {
+      total_size += 1 +
+        ::google::protobuf::internal::WireFormatLite::StringSize(
+          this->car_numberplate());
+    }
+
     // optional float car_length = 1 [default = 0];
     if (has_car_length()) {
       total_size += 1 + 4;
@@ -2740,12 +2814,12 @@ size_t Car_info::ByteSizeLong() const {
       total_size += 1 + 4;
     }
 
-    // optional float car_wheel_base = 5 [default = 0];
+    // optional float car_wheel_base = 6 [default = 0];
     if (has_car_wheel_base()) {
       total_size += 1 + 4;
     }
 
-    // optional float car_wheel_width = 6 [default = 0];
+    // optional float car_wheel_width = 7 [default = 0];
     if (has_car_wheel_width()) {
       total_size += 1 + 4;
     }
@@ -2781,24 +2855,28 @@ void Car_info::MergeFrom(const Car_info& from) {
   (void) cached_has_bits;
 
   cached_has_bits = from._has_bits_[0];
-  if (cached_has_bits & 63u) {
+  if (cached_has_bits & 127u) {
     if (cached_has_bits & 0x00000001u) {
       set_has_license();
       license_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.license_);
     }
     if (cached_has_bits & 0x00000002u) {
-      car_length_ = from.car_length_;
+      set_has_car_numberplate();
+      car_numberplate_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.car_numberplate_);
     }
     if (cached_has_bits & 0x00000004u) {
-      car_width_ = from.car_width_;
+      car_length_ = from.car_length_;
     }
     if (cached_has_bits & 0x00000008u) {
-      car_height_ = from.car_height_;
+      car_width_ = from.car_width_;
     }
     if (cached_has_bits & 0x00000010u) {
-      car_wheel_base_ = from.car_wheel_base_;
+      car_height_ = from.car_height_;
     }
     if (cached_has_bits & 0x00000020u) {
+      car_wheel_base_ = from.car_wheel_base_;
+    }
+    if (cached_has_bits & 0x00000040u) {
       car_wheel_width_ = from.car_wheel_width_;
     }
     _has_bits_[0] |= cached_has_bits;
@@ -2830,6 +2908,7 @@ void Car_info::Swap(Car_info* other) {
 void Car_info::InternalSwap(Car_info* other) {
   using std::swap;
   license_.Swap(&other->license_);
+  car_numberplate_.Swap(&other->car_numberplate_);
   swap(car_length_, other->car_length_);
   swap(car_width_, other->car_width_);
   swap(car_height_, other->car_height_);

+ 110 - 21
message/message_base.pb.h

@@ -110,15 +110,22 @@ enum Message_type {
   eParkspace_confirm_alloc_response_msg = 59,
   eParkspace_allocation_data_msg = 60,
   eParkspace_allocation_data_response_msg = 61,
+  eParkspace_manual_search_request_msg = 62,
+  eParkspace_manual_search_response_msg = 63,
   eStore_command_request_msg = 65,
   eStore_command_response_msg = 66,
   ePickup_command_request_msg = 67,
   ePickup_command_response_msg = 68,
+  eTerminal_status_msg = 80,
   eStoring_process_statu_msg = 144,
   ePicking_process_statu_msg = 145,
   eCentral_controller_statu_msg = 160,
   eEntrance_manual_operation_msg = 176,
   eProcess_manual_operation_msg = 177,
+  eNotify_request_msg = 192,
+  eNotify_response_msg = 193,
+  eNotify_status_msg = 194,
+  eUnNormalized_module_statu_msg = 208,
   eDispatch_plan_request_msg = 224,
   eDispatch_plan_response_msg = 225,
   eDispatch_control_request_msg = 226,
@@ -153,6 +160,7 @@ enum Communicator {
   eMeasurer_sift_server = 769,
   eDispatch_manager = 1024,
   eDispatch_control = 1025,
+  eNotify = 1281,
   eGround_measurer = 3840
 };
 bool Communicator_IsValid(int value);
@@ -1122,6 +1130,21 @@ class Car_info : public ::google::protobuf::Message /* @@protoc_insertion_point(
   ::std::string* release_license();
   void set_allocated_license(::std::string* license);
 
+  // optional string car_numberPlate = 5 [default = ""];
+  bool has_car_numberplate() const;
+  void clear_car_numberplate();
+  static const int kCarNumberPlateFieldNumber = 5;
+  const ::std::string& car_numberplate() const;
+  void set_car_numberplate(const ::std::string& value);
+  #if LANG_CXX11
+  void set_car_numberplate(::std::string&& value);
+  #endif
+  void set_car_numberplate(const char* value);
+  void set_car_numberplate(const char* value, size_t size);
+  ::std::string* mutable_car_numberplate();
+  ::std::string* release_car_numberplate();
+  void set_allocated_car_numberplate(::std::string* car_numberplate);
+
   // optional float car_length = 1 [default = 0];
   bool has_car_length() const;
   void clear_car_length();
@@ -1143,17 +1166,17 @@ class Car_info : public ::google::protobuf::Message /* @@protoc_insertion_point(
   float car_height() const;
   void set_car_height(float value);
 
-  // optional float car_wheel_base = 5 [default = 0];
+  // optional float car_wheel_base = 6 [default = 0];
   bool has_car_wheel_base() const;
   void clear_car_wheel_base();
-  static const int kCarWheelBaseFieldNumber = 5;
+  static const int kCarWheelBaseFieldNumber = 6;
   float car_wheel_base() const;
   void set_car_wheel_base(float value);
 
-  // optional float car_wheel_width = 6 [default = 0];
+  // optional float car_wheel_width = 7 [default = 0];
   bool has_car_wheel_width() const;
   void clear_car_wheel_width();
-  static const int kCarWheelWidthFieldNumber = 6;
+  static const int kCarWheelWidthFieldNumber = 7;
   float car_wheel_width() const;
   void set_car_wheel_width(float value);
 
@@ -1167,6 +1190,8 @@ class Car_info : public ::google::protobuf::Message /* @@protoc_insertion_point(
   void clear_has_car_height();
   void set_has_license();
   void clear_has_license();
+  void set_has_car_numberplate();
+  void clear_has_car_numberplate();
   void set_has_car_wheel_base();
   void clear_has_car_wheel_base();
   void set_has_car_wheel_width();
@@ -1176,6 +1201,7 @@ class Car_info : public ::google::protobuf::Message /* @@protoc_insertion_point(
   ::google::protobuf::internal::HasBits<1> _has_bits_;
   mutable int _cached_size_;
   ::google::protobuf::internal::ArenaStringPtr license_;
+  ::google::protobuf::internal::ArenaStringPtr car_numberplate_;
   float car_length_;
   float car_width_;
   float car_height_;
@@ -2054,13 +2080,13 @@ inline void Locate_information::set_uniformed_car_y(float value) {
 
 // optional float car_length = 1 [default = 0];
 inline bool Car_info::has_car_length() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
+  return (_has_bits_[0] & 0x00000004u) != 0;
 }
 inline void Car_info::set_has_car_length() {
-  _has_bits_[0] |= 0x00000002u;
+  _has_bits_[0] |= 0x00000004u;
 }
 inline void Car_info::clear_has_car_length() {
-  _has_bits_[0] &= ~0x00000002u;
+  _has_bits_[0] &= ~0x00000004u;
 }
 inline void Car_info::clear_car_length() {
   car_length_ = 0;
@@ -2078,13 +2104,13 @@ inline void Car_info::set_car_length(float value) {
 
 // optional float car_width = 2 [default = 0];
 inline bool Car_info::has_car_width() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
+  return (_has_bits_[0] & 0x00000008u) != 0;
 }
 inline void Car_info::set_has_car_width() {
-  _has_bits_[0] |= 0x00000004u;
+  _has_bits_[0] |= 0x00000008u;
 }
 inline void Car_info::clear_has_car_width() {
-  _has_bits_[0] &= ~0x00000004u;
+  _has_bits_[0] &= ~0x00000008u;
 }
 inline void Car_info::clear_car_width() {
   car_width_ = 0;
@@ -2102,13 +2128,13 @@ inline void Car_info::set_car_width(float value) {
 
 // optional float car_height = 3 [default = 0];
 inline bool Car_info::has_car_height() const {
-  return (_has_bits_[0] & 0x00000008u) != 0;
+  return (_has_bits_[0] & 0x00000010u) != 0;
 }
 inline void Car_info::set_has_car_height() {
-  _has_bits_[0] |= 0x00000008u;
+  _has_bits_[0] |= 0x00000010u;
 }
 inline void Car_info::clear_has_car_height() {
-  _has_bits_[0] &= ~0x00000008u;
+  _has_bits_[0] &= ~0x00000010u;
 }
 inline void Car_info::clear_car_height() {
   car_height_ = 0;
@@ -2187,15 +2213,78 @@ inline void Car_info::set_allocated_license(::std::string* license) {
   // @@protoc_insertion_point(field_set_allocated:message.Car_info.license)
 }
 
-// optional float car_wheel_base = 5 [default = 0];
+// optional string car_numberPlate = 5 [default = ""];
+inline bool Car_info::has_car_numberplate() const {
+  return (_has_bits_[0] & 0x00000002u) != 0;
+}
+inline void Car_info::set_has_car_numberplate() {
+  _has_bits_[0] |= 0x00000002u;
+}
+inline void Car_info::clear_has_car_numberplate() {
+  _has_bits_[0] &= ~0x00000002u;
+}
+inline void Car_info::clear_car_numberplate() {
+  car_numberplate_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  clear_has_car_numberplate();
+}
+inline const ::std::string& Car_info::car_numberplate() const {
+  // @@protoc_insertion_point(field_get:message.Car_info.car_numberPlate)
+  return car_numberplate_.GetNoArena();
+}
+inline void Car_info::set_car_numberplate(const ::std::string& value) {
+  set_has_car_numberplate();
+  car_numberplate_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:message.Car_info.car_numberPlate)
+}
+#if LANG_CXX11
+inline void Car_info::set_car_numberplate(::std::string&& value) {
+  set_has_car_numberplate();
+  car_numberplate_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:message.Car_info.car_numberPlate)
+}
+#endif
+inline void Car_info::set_car_numberplate(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  set_has_car_numberplate();
+  car_numberplate_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:message.Car_info.car_numberPlate)
+}
+inline void Car_info::set_car_numberplate(const char* value, size_t size) {
+  set_has_car_numberplate();
+  car_numberplate_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:message.Car_info.car_numberPlate)
+}
+inline ::std::string* Car_info::mutable_car_numberplate() {
+  set_has_car_numberplate();
+  // @@protoc_insertion_point(field_mutable:message.Car_info.car_numberPlate)
+  return car_numberplate_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* Car_info::release_car_numberplate() {
+  // @@protoc_insertion_point(field_release:message.Car_info.car_numberPlate)
+  clear_has_car_numberplate();
+  return car_numberplate_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void Car_info::set_allocated_car_numberplate(::std::string* car_numberplate) {
+  if (car_numberplate != NULL) {
+    set_has_car_numberplate();
+  } else {
+    clear_has_car_numberplate();
+  }
+  car_numberplate_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), car_numberplate);
+  // @@protoc_insertion_point(field_set_allocated:message.Car_info.car_numberPlate)
+}
+
+// optional float car_wheel_base = 6 [default = 0];
 inline bool Car_info::has_car_wheel_base() const {
-  return (_has_bits_[0] & 0x00000010u) != 0;
+  return (_has_bits_[0] & 0x00000020u) != 0;
 }
 inline void Car_info::set_has_car_wheel_base() {
-  _has_bits_[0] |= 0x00000010u;
+  _has_bits_[0] |= 0x00000020u;
 }
 inline void Car_info::clear_has_car_wheel_base() {
-  _has_bits_[0] &= ~0x00000010u;
+  _has_bits_[0] &= ~0x00000020u;
 }
 inline void Car_info::clear_car_wheel_base() {
   car_wheel_base_ = 0;
@@ -2211,15 +2300,15 @@ inline void Car_info::set_car_wheel_base(float value) {
   // @@protoc_insertion_point(field_set:message.Car_info.car_wheel_base)
 }
 
-// optional float car_wheel_width = 6 [default = 0];
+// optional float car_wheel_width = 7 [default = 0];
 inline bool Car_info::has_car_wheel_width() const {
-  return (_has_bits_[0] & 0x00000020u) != 0;
+  return (_has_bits_[0] & 0x00000040u) != 0;
 }
 inline void Car_info::set_has_car_wheel_width() {
-  _has_bits_[0] |= 0x00000020u;
+  _has_bits_[0] |= 0x00000040u;
 }
 inline void Car_info::clear_has_car_wheel_width() {
-  _has_bits_[0] &= ~0x00000020u;
+  _has_bits_[0] &= ~0x00000040u;
 }
 inline void Car_info::clear_car_wheel_width() {
   car_wheel_width_ = 0;

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1025 - 67
message/parkspace_allocation_message.pb.cc


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1321 - 641
message/parkspace_allocation_message.pb.h


Dosya farkı çok büyük olduğundan ihmal edildi
+ 3561 - 0
message/singlechip_msg.pb.cc


Dosya farkı çok büyük olduğundan ihmal edildi
+ 2596 - 0
message/singlechip_msg.pb.h


+ 211 - 0
message/singlechip_msg.proto

@@ -0,0 +1,211 @@
+syntax = "proto2";
+package message;
+import "message_base.proto";
+//连接口
+message InputDi
+{
+	optional int32	Di0 = 1;  //停车超前光电(0正常,1超界故障)
+	optional int32	Di1 = 2;  //停车超后光电(0正常,1超界故障)
+	optional int32	Di2 = 3;  //停车超左光电(0正常,1超界故障)
+	optional int32	Di3 = 4;  //停车超1550光电(0正常,1超界故障)
+	optional int32	Di4 = 5;  //2050高度(0默认,1被触发)
+	optional int32	Di5 = 6;  //1750高度(0默认,1被触发)
+	optional int32	Di6 = 7;  //2050高度(0默认,1被触发)
+	optional int32	Di7 = 8;  //预留
+	optional int32	Di8 = 9;  //停车库门开到位(1表示开到位)	
+	optional int32	Di9 = 10; //停车库门关到位(1表示关到位)
+	optional int32	Di10 = 11;//预留的门故障位(1表示门故障)
+	optional int32	Di11 = 12;//调度完成标志位,是否允许终端放下一辆车进入入口(0调度正忙,1调度允许下一辆车)
+	optional int32	Di12 = 13;//库内光电,判断门内是否有车(0无车,1有车)
+	optional int32	Di13 = 14;//库外地磁 ,判断门外(0无车,1有车)
+	optional int32	Di14 = 15;//重启
+	optional int32	Di15 = 16;//急停
+}
+//连接口
+message OutputDo
+{
+	optional int32	Do0 = 1;	//外门 开门(1)
+	optional int32	Do1 = 2;    //外门 关门(1)
+	optional int32	Do2 = 3;    //备用
+	optional int32	Do3 = 4;	//备用
+	optional int32	Do4 = 5;	//备用
+	optional int32	Do5 = 6;	//备用
+	optional int32	Do6 = 7;	//备用
+	optional int32	Do7 = 8;	//备用
+
+}
+//流程控制
+enum Process_control
+{
+	PROCESS_CONTROL_UNKNOWN			= 0;//未知
+	PROCESS_CONTROL_FULL_AUTO		= 1;//全自动,
+	PROCESS_CONTROL_MANUAL			= 2;//手动
+	PROCESS_CONTROL_AUTO_CLOSE		= 3;//半自动关门
+	PROCESS_CONTROL_AUTO_OPEN		= 4;//半自动开门
+	PROCESS_CONTROL_TO_READY		= 5;//切换到待机
+
+
+	PROCESS_CONTROL_RESET			= 7;//重启
+	PROCESS_CONTROL_STOP			= 8;//急停
+	PROCESS_CONTROL_FAULT			= 9;//故障
+
+	
+	PROCESS_CONTROL_INLET_0		= 10 ;//未知
+	PROCESS_CONTROL_INLET_1		= 11 ;//未知
+	PROCESS_CONTROL_INLET_2		= 12 ;//未知
+	PROCESS_CONTROL_INLET_3		= 13 ;//未知
+	PROCESS_CONTROL_INLET_4		= 14 ;//未知
+	PROCESS_CONTROL_INLET_5		= 15 ;//未知
+	PROCESS_CONTROL_INLET_6		= 16 ;//未知
+	PROCESS_CONTROL_INLET_7		= 17 ;//未知
+	PROCESS_CONTROL_INLET_8		= 18 ;//未知
+	PROCESS_CONTROL_INLET_9		= 19 ;//未知
+	
+	PROCESS_CONTROL_OUTLET_0		= 30 ;//未知
+	PROCESS_CONTROL_OUTLET_1		= 31 ;//未知
+	PROCESS_CONTROL_OUTLET_2		= 32 ;//未知
+	PROCESS_CONTROL_OUTLET_3		= 33 ;//未知
+	PROCESS_CONTROL_OUTLET_4		= 34 ;//未知
+	PROCESS_CONTROL_OUTLET_5		= 35 ;//未知
+	PROCESS_CONTROL_OUTLET_6		= 36 ;//未知
+	PROCESS_CONTROL_OUTLET_7		= 37 ;//未知
+	PROCESS_CONTROL_OUTLET_8		= 38 ;//未知
+	PROCESS_CONTROL_OUTLET_9		= 39 ;//未知
+	
+};
+//终端给单片机
+message terminal_msg
+{
+    optional    int32		        TerminalID = 1;		// 终端号(单片机号)
+    optional    int32   		    DispatchDirection= 2;	// 方向(1入口,2出口)
+    optional    Process_control 	ProcessControl= 3;	 	// 门控
+    optional    OutputDo       	    OutPutDo= 4; 		// 输入口
+
+}
+//超界状态
+enum Over_border_status
+{
+	OVER_BORDER_STATUS_UNKNOWN		= 0 ;//未知
+	OVER_BORDER_STATUS_NORMAL		= 1 ;//正常
+	OVER_BORDER_STATUS_FRONT		= 2 ;//前超界
+	OVER_BORDER_STATUS_BACK			= 3 ;//后超界
+	OVER_BORDER_STATUS_LEFT			= 4 ;//左超界
+	OVER_BORDER_STATUS_RIGHT		= 5 ;//右超界
+};
+//车高状态
+enum Car_height_status	
+{
+	CAR_HEIGHT_STATUS_UNKNOWN		= 0 ;//未知
+	CAR_HEIGHT_STATUS_SMALL 		= 1 ;//小车
+	CAR_HEIGHT_STATUS_MEDIUM 		= 2 ;//中车
+	CAR_HEIGHT_STATUS_LARGE			= 3 ;//大车
+	CAR_HEIGHT_STATUS_HUGE			= 4 ;//巨大车
+	CAR_HEIGHT_STATUS_FAULT			= 5 ;//故障车
+};
+
+//外门的状态
+enum Outside_door_status
+{
+	OUTSIDE_DOOR_STATUS_UNKNOWN		= 0 ;//未知
+	OUTSIDE_DOOR_STATUS_OPEN		= 1 ;//外门开到位
+	OUTSIDE_DOOR_STATUS_CLOSE		= 2 ;//外门关到位
+	OUTSIDE_DOOR_STATUS_RUN			= 3 ;//外门运行中
+	OUTSIDE_DOOR_STATUS_FAULT		= 4 ;//外门故障
+};
+
+//外门的控制
+enum Outside_door_control
+{
+	OUTSIDE_DOOR_CONTROL_UNKNOWN	= 0 ;//未知
+	OUTSIDE_DOOR_CONTROL_OPEN		= 1 ;//外门开
+	OUTSIDE_DOOR_CONTROL_CLOSE		= 2 ;//外门关
+
+};
+//流程状态
+enum Process_status
+{
+	PROCESS_STATUS_UNKNOWN			= 0;//未知
+	PROCESS_STATUS_FULL_AUTO	    = 1;//全自动,
+	PROCESS_STATUS_MANUAL			= 2;//手动
+	PROCESS_STATUS_AUTO_CLOSE		= 3;//半自动关门
+	PROCESS_STATUS_AUTO_OPEN		= 4;//半自动开门
+	PROCESS_STATUS_TO_READY			= 5;//切换到待机
+	
+	PROCESS_STATUS_RESET			= 7;//重启
+	PROCESS_STATUS_STOP				= 8;//急停
+	PROCESS_STATUS_FAULT			= 9;//故障
+	
+	//自动模式的步骤
+	PROCESS_STATUS_INLET_0		= 10 ;//入口待机, 等待门外地感触发。
+	PROCESS_STATUS_INLET_1		= 11 ;//执行开门
+	PROCESS_STATUS_INLET_2		= 12 ;//等待门开到位
+	PROCESS_STATUS_INLET_3		= 13 ;//等待汽车进入
+	PROCESS_STATUS_INLET_4		= 14 ;//停车完成,统计汽车经过门口的车高。
+	PROCESS_STATUS_INLET_5		= 15 ;//等待终端关门,执行关门
+	PROCESS_STATUS_INLET_6		= 16 ;//等待门关到位
+	PROCESS_STATUS_INLET_7		= 17 ;//等待plc调度,或者终端重置
+	PROCESS_STATUS_INLET_8		= 18 ;//未知
+	PROCESS_STATUS_INLET_9		= 19 ;//未知
+
+	PROCESS_STATUS_INLET_10		= 20 ;//入口待机, 等待门外地感触发。
+	PROCESS_STATUS_INLET_11		= 21 ;//执行开门
+	PROCESS_STATUS_INLET_12		= 22 ;//等待门开到位
+	PROCESS_STATUS_INLET_13		= 23 ;//等待汽车进入
+	PROCESS_STATUS_INLET_14		= 24 ;//停车完成,统计汽车经过门口的车高。
+	PROCESS_STATUS_INLET_15		= 25 ;//等待终端关门,执行关门
+	PROCESS_STATUS_INLET_16		= 26 ;//等待门关到位
+	PROCESS_STATUS_INLET_17		= 27 ;//等待plc调度,或者终端重置
+	PROCESS_STATUS_INLET_18		= 28 ;//未知
+	PROCESS_STATUS_INLET_19		= 29 ;//未知
+	
+	PROCESS_STATUS_OUTLET_0		= 30 ;//出口待机,等待终端开门,执行开门
+	PROCESS_STATUS_OUTLET_1		= 31 ;//等待门开到位
+	PROCESS_STATUS_OUTLET_2		= 32 ;//等待门口的光电产生信号,表示汽车正从车库出去。汽车正在离开中。
+	PROCESS_STATUS_OUTLET_3		= 33 ;//汽车离开后,延迟5秒关门,执行关门
+	PROCESS_STATUS_OUTLET_4		= 34 ;//等待门关到位
+	PROCESS_STATUS_OUTLET_5		= 35 ;//等待plc调度,或者终端重置
+	PROCESS_STATUS_OUTLET_6		= 36 ;//未知
+	PROCESS_STATUS_OUTLET_7		= 37 ;//未知
+	PROCESS_STATUS_OUTLET_8		= 38 ;//未知
+	PROCESS_STATUS_OUTLET_9		= 39 ;//未知
+	
+	PROCESS_STATUS_OUTLET_10		= 40 ;//出口待机,等待终端开门,执行开门
+	PROCESS_STATUS_OUTLET_11		= 41 ;//等待门开到位
+	PROCESS_STATUS_OUTLET_12		= 42 ;//等待门口的光电产生信号,表示汽车正从车库出去。汽车正在离开中。
+	PROCESS_STATUS_OUTLET_13		= 43 ;//汽车离开后,延迟5秒关门,执行关门
+	PROCESS_STATUS_OUTLET_14		= 44 ;//等待门关到位
+	PROCESS_STATUS_OUTLET_15		= 45 ;//等待plc调度,或者终端重置
+	PROCESS_STATUS_OUTLET_16		= 46 ;//未知
+	PROCESS_STATUS_OUTLET_17		= 47 ;//未知
+	PROCESS_STATUS_OUTLET_18		= 48 ;//未知
+	PROCESS_STATUS_OUTLET_19		= 49 ;//未知
+};
+//单片机给终端
+message Singlechip_data
+{
+    optional  int32		            TerminalID= 1;	  	// 终端号(单片机号)
+    optional  int32   		        DispatchDirection= 2;	// 方向(1入口,2出口)
+    optional  Process_status	    ProcessStatus=   3;		//流程状态
+    optional  InputDi		        InPutDi = 4; 		// 输入口
+    optional  int32		            ResetFlag = 5;		//重置标志位
+    optional  Process_control	    ProcessControl = 6;		//流程控制
+    optional  int32		            InsideExistenceFlag = 7;	//内部存在标志
+    optional  Over_border_status	OverBorderStatus = 8;	//边界状态
+    optional  Car_height_status	    CarHeightStatusCurrent = 9;	//当前车高状态--斜角对射光电
+    optional  Car_height_status	    CarHeightStatusPassing = 10;	//车高状态--门口经过式光电
+    optional  int32		            StopFlag = 11;		//停车标志位
+    optional  Outside_door_status	OutsideDoorStatus = 12;	//外门状态
+    optional  Outside_door_control	OutsideDoorControl = 13;	//外门控制
+    optional  int32		            DispatchFinishFlag = 14;	//调度完成标志
+    optional  int32		            OutsideExistenceFlag = 15;	//外部存在标志
+}
+//终端状态消息
+message Terminal_status_msg
+{
+	required Base_info	 	    base_info =1; //消息类型
+	optional int32 	 	        terminal_id=2; //终端号
+	optional Singlechip_data	singlechipData=3; //单片机的数据
+	optional bool		singlechip_validity = 4;//单片机数据有效性
+}
+
+

+ 12 - 5
proto.sh

@@ -1,16 +1,23 @@
-protoc -I=./message message_base.proto --cpp_out=./message
-protoc -I=./message measure_message.proto --cpp_out=./message
 
 protoc -I=./communication communication.proto --cpp_out=./communication
-protoc -I=./message dispatch_message.proto --cpp_out=./message
 protoc -I=./snap7_communication snap7_communication.proto --cpp_out=./snap7_communication
+protoc -I=./dispatch dispatch_parameter.proto --cpp_out=./dispatch
 
 
+protoc -I=./message message_base.proto --cpp_out=./message
+protoc -I=./message measure_message.proto --cpp_out=./message
+protoc -I=./message dispatch_message.proto --cpp_out=./message
 protoc -I=./message dispatch_control.proto --cpp_out=./message
-protoc -I=./dispatch dispatch_parameter.proto --cpp_out=./dispatch
-
 protoc -I=./message parkspace_allocation_message.proto --cpp_out=./message
 
 
+protoc -I=./message central_control_message.proto --cpp_out=./message
+protoc -I=./message log_process.proto --cpp_out=./message
+protoc -I=./message notify_message.proto --cpp_out=./message
+protoc -I=./message process_message.proto --cpp_out=./message
+protoc -I=./message singlechip_msg.proto --cpp_out=./message
+protoc -I=./message terminal_message.proto --cpp_out=./message
+protoc -I=./message UnNormalized_module_message.proto --cpp_out=./message
+
 
 

+ 12 - 0
setting/communication.prototxt

@@ -35,6 +35,18 @@ communication_parameters
     connect_string_vector:"tcp://192.168.1.233:30000"
     connect_string_vector:"tcp://192.168.1.233:30010"
 
+    connect_string_vector:"tcp://192.168.1.180:30009"
+    connect_string_vector:"tcp://192.168.1.181:30009"
+    connect_string_vector:"tcp://192.168.1.182:30009"
+    connect_string_vector:"tcp://192.168.1.183:30009"
+    connect_string_vector:"tcp://192.168.1.184:30009"
+    connect_string_vector:"tcp://192.168.1.185:30009"
+
+    connect_string_vector:"tcp://192.168.1.186:30007"
+    connect_string_vector:"tcp://192.168.1.187:30007"
+
+    connect_string_vector:"tcp://192.168.1.245:30009"
+
 
 }
 

+ 50 - 0
system/system_executor.cpp

@@ -106,6 +106,25 @@ Error_manager System_executor::check_msg(Communication_message* p_msg)
 				}
 				break;
 			}
+			case Communication_message::Message_type::eTerminal_status_msg:
+			{
+				message::Terminal_status_msg t_terminal_status_msg;
+				//针对消息类型, 对消息进行二次解析
+				if (t_terminal_status_msg.ParseFromString(p_msg->get_message_buf()))
+				{
+					if ( t_terminal_status_msg.terminal_id() == Dispatch_manager::get_instance_references().get_dispatch_manager_id()*2 ||
+					t_terminal_status_msg.terminal_id() == Dispatch_manager::get_instance_references().get_dispatch_manager_id()*2+1)
+					{
+						return Error_code::SUCCESS;
+					}
+				}
+				else
+				{
+					return Error_manager(Error_code::SYSTEM_EXECUTOR_PARSE_ERROR, Error_level::MINOR_ERROR,
+										 " message::Dispatch_request_msg  ParseFromString error ");
+				}
+				break;
+			}
 			default :
 				;
 				break;
@@ -242,6 +261,23 @@ Error_manager System_executor::execute_msg(Communication_message* p_msg)
 				}
 				break;
 			}
+			case Communication_message::Message_type::eTerminal_status_msg:
+			{
+				message::Terminal_status_msg t_terminal_status_msg;
+				//针对消息类型, 对消息进行二次解析
+				if (t_terminal_status_msg.ParseFromString(p_msg->get_message_buf()))
+				{
+					//往线程池添加执行任务, 之后会唤醒一个线程去执行他.
+					m_thread_pool.enqueue(&System_executor::execute_for_terminal_status_msg, this,
+										  t_terminal_status_msg	);
+				}
+				else
+				{
+					return Error_manager(Error_code::SYSTEM_EXECUTOR_PARSE_ERROR, Error_level::MINOR_ERROR,
+										 " message::Dispatch_request_msg  ParseFromString error ");
+				}
+				break;
+			}
 			default:
 				break;
 		}
@@ -497,5 +533,19 @@ void System_executor::execute_for_ground_status_msg(message::Ground_status_msg g
 	return ;
 }
 
+//地面雷达的状态消息(地面雷达->null)
+void System_executor::execute_for_terminal_status_msg(message::Terminal_status_msg terminal_status_msg)
+{
+
+	Error_manager t_error;
+	t_error = Dispatch_manager::get_instance_references().execute_for_singlechip_data_msg(terminal_status_msg.singlechipdata(), terminal_status_msg.singlechip_validity());
+	if ( t_error != Error_code::SUCCESS )
+	{
+		LOG(INFO) << " System_executor::execute_for_singlechip_data_msg fun error "<< this;
+		LOG(INFO) << t_error.to_string() << "   "<< this;
+	}
+	return ;
+}
+
 
 

+ 2 - 1
system/system_executor.h

@@ -89,7 +89,8 @@ public:
 
 	//地面雷达的状态消息(地面雷达->null)
 	void execute_for_ground_status_msg(message::Ground_status_msg ground_status_msg);
-
+	//调度模块 ///单片机的状态消息
+	void execute_for_terminal_status_msg(message::Terminal_status_msg terminal_status_msg);
 protected://member variable
 
 	System_executor_status		m_system_executor_status;		//系统执行者的状态