Переглянути джерело

20210618, 调度流程 over

huli 4 роки тому
батько
коміт
efdbb61025

+ 54 - 22
dispatch/dispatch_device_base.cpp

@@ -8,8 +8,16 @@ Dispatch_device_base::Dispatch_device_base()
 {
 	m_dispatch_device_status = DISPATCH_DEVICE_UNKNOW;
 	m_device_id = -1;
+	m_device_key = -1;
+	m_dispatch_device_type = DISPATCH_DEVICE_UNKNOWN;
 
 	mp_execute_thread = NULL;
+
+	m_device_one_level_process_type = Common_data::Dispatch_process_type::DISPATCH_PROCESS_TYPE_UNKNOW;
+	m_device_two_level_process_type = Common_data::Dispatch_process_type::DISPATCH_PROCESS_TYPE_UNKNOW;
+	m_device_three_level_process_type = Common_data::Dispatch_process_type::DISPATCH_PROCESS_TYPE_UNKNOW;
+
+	m_break_flag = false;
 }
 
 Dispatch_device_base::~Dispatch_device_base()
@@ -90,8 +98,14 @@ Error_manager Dispatch_device_base::execute_task(std::shared_ptr<Task_Base> p_ta
 		m_dispatch_device_status = DISPATCH_DEVICE_THREE_LEVEL_WORK;
 		m_execute_condition.notify_all(true);
 		//通知 thread_work 子线程启动。
-
 		//只签收,并不一定进入工作状态, 在线程真正的执行的时候,才改为工作中, (执行线程可能会先处理更高优先级的任务单)
+
+		//当接受2级任务时, 标记位改为true
+		if ( dispatch_task_level == DISPATCH_TASK_TWO_LEVEL )
+		{
+			m_break_flag = true;
+		}
+
 	}
 
 	if ( t_result != Error_code::SUCCESS )
@@ -118,81 +132,78 @@ Error_manager Dispatch_device_base::check_task_type(std::shared_ptr<Task_Base> p
 //判断能否执行任务
 Error_manager Dispatch_device_base::check_task_level(Dispatch_task_level dispatch_task_level)
 {
-	std::cout << " huli test ::::79798798798798 " << " m_dispatch_device_status = " << m_dispatch_device_status << std::endl;
 	//加锁
 	std::unique_lock<std::mutex> t_lock(m_lock);
-	std::cout << " huli test ::::1312312312312312 " << " m_dispatch_device_status = " << m_dispatch_device_status << std::endl;
-std::cout << " huli test :::: " << " 123123123213 = " << 123123123213 << std::endl;
 	//只有当状态 不是正在执行当前等级的任务,并且当前等级的任务为空. 此时返回成功, 才能接受新的任务
 	if ( m_dispatch_device_status >= DISPATCH_DEVICE_READY && m_dispatch_device_status <= DISPATCH_DEVICE_THREE_LEVEL_WORK )
-	{std::cout << " huli test :::: " << " 123123123213 = " << 1 << std::endl;
+	{
 		switch ( dispatch_task_level )
-		{std::cout << " huli test :::: " << " 123123123213 = " << 2 << std::endl;
+		{
 			case DISPATCH_TASK_ONE_LEVEL:
-			{std::cout << " huli test :::: " << " 123123123213 = " << 3 << std::endl;
+			{
 				if ( mp_device_one_level_task.get() == NULL )
-				{std::cout << " huli test :::: " << " 123123123213 = " << 4 << std::endl;
+				{
 					//一级任务直接插入
 					if (  m_dispatch_device_status == DISPATCH_DEVICE_READY ||
 						  m_dispatch_device_status == DISPATCH_DEVICE_TWO_LEVEL_OVER ||
 						  m_dispatch_device_status == DISPATCH_DEVICE_TWO_LEVEL_WORK ||
 						  m_dispatch_device_status == DISPATCH_DEVICE_THREE_LEVEL_OVER ||
 						  m_dispatch_device_status == DISPATCH_DEVICE_THREE_LEVEL_WORK )
-					{std::cout << " huli test :::: " << " 123123123213 = " << 5 << std::endl;
+					{
 						return Error_code::SUCCESS;
 					}
 					else
-					{std::cout << " huli test :::: " << " 123123123213 = " << 6 << std::endl;
+					{
 						return Error_manager(Error_code::DISPATCH_DEVICE_TASK_LEVEL_ERROR, Error_level::MINOR_ERROR,
 											 " Dispatch_device_base::check_task_level 1 error ");
 					}
 				}
 				else
-				{std::cout << " huli test :::: " << " 123123123213 = " << 7 << std::endl;
+				{
 					return Error_manager(Error_code::DISPATCH_DEVICE_TASK_REPEAT, Error_level::MINOR_ERROR,
 										 " Dispatch_device_base::check_task_level 2 error ");
 				}
 				break;
 			}
 			case DISPATCH_TASK_TWO_LEVEL:
-			{std::cout << " huli test :::: " << " 123123123213 = " << 8 << std::endl;
+			{
 				if ( mp_device_two_level_task.get() == NULL )
-				{std::cout << " huli test :::: " << " 123123123213 = " << 9 << std::endl;
+				{
 					//二级任务如果打断了一级任务, 那么要通知一级任务暂停, 后续一级任务会重新执行
 					if (  m_dispatch_device_status == DISPATCH_DEVICE_READY )
-					{std::cout << " huli test :::: " << " 123123123213 = " << 10 << std::endl;
+					{
 						return Error_code::SUCCESS;
 					}
 					else if ( ( m_dispatch_device_status == DISPATCH_DEVICE_ONE_LEVEL_WORK ||
 								m_dispatch_device_status == DISPATCH_DEVICE_ONE_LEVEL_OVER ) && mp_device_one_level_task.get() != NULL)
-					{std::cout << " huli test :::: " << " 123123123213 = " << 11 << std::endl;
+					{
 						mp_device_one_level_task->set_task_statu(Task_Base::Task_statu::TASK_STOP);
 						return Error_code::SUCCESS;
 					}
 					else
-					{std::cout << " huli test :::: " << " 123123123213 = " << 12 << std::endl;
+					{
 						return Error_manager(Error_code::DISPATCH_DEVICE_TASK_LEVEL_ERROR, Error_level::MINOR_ERROR,
 											 " Dispatch_device_base::check_task_level 3  error ");
 					}
 				}
 				else
-				{std::cout << " huli test :::: " << " 123123123213 = " << 13 << std::endl;
+				{
 					return Error_manager(Error_code::DISPATCH_DEVICE_TASK_REPEAT, Error_level::MINOR_ERROR,
 										 " Dispatch_device_base::check_task_level 4 error ");
 				}
 				break;
 			}
 			case DISPATCH_TASK_THREE_LEVEL:
-			{std::cout << " huli test :::: " << " 123123123213 = " << 14 << std::endl;
+			{
 				if ( ( m_dispatch_device_status == DISPATCH_DEVICE_READY ||
 					 m_dispatch_device_status == DISPATCH_DEVICE_ONE_LEVEL_OVER ) && mp_device_three_level_task.get() == NULL)
-				{std::cout << " huli test :::: " << " 123123123213 = " << 15 << std::endl;
+				{
 					return Error_code::SUCCESS;
 				}
 				break;
 			}
 			default:
-			{std::cout << " huli test :::: " << " 123123123213 = " << 16 << std::endl;
+			{
 				return Error_manager(Error_code::PARAMETER_ERROR, Error_level::MINOR_ERROR,
 									 "  Dispatch_device_base::check_task 5 PARAMETER_ERROR ");
 				break;
@@ -202,14 +213,14 @@ std::cout << " huli test :::: " << " 123123123213 = " << 123123123213 << std::en
 							 " Dispatch_device_base::check_task is busy 6 ");
 	}
 	else
-	{std::cout << " huli test :::: " << " 123123123213 = " << 17 << std::endl;
+	{
 //		std::cout << " huli test :::: " << " 777777777777777777777777777777777777 = " << 777 << std::endl;
 //		std::cout << " huli test :::: " << " m_dispatch_device_status = " << m_dispatch_device_status << std::endl;
 //		std::cout << " huli test :::: " << " id = " << m_device_id << std::endl;
 	    return Error_manager(Error_code::DISPATCH_DEVICE_STATUS_ERROR, Error_level::MINOR_ERROR,
 	    					" Dispatch_device_base::check_task 7 error ");
 	}
-	std::cout << " huli test :::: " << " 123123123213 = " << 18 << std::endl;
+
 	return Error_code::SUCCESS;
 }
 
@@ -509,10 +520,15 @@ Error_manager Dispatch_device_base::change_task_level(Dispatch_task_level dispat
 	    					" Dispatch_device_base::change_task_level PARAMRTER ERROR ");
 	}
 	std::unique_lock<std::mutex> t_lock(m_lock);
+	//只能在原任务结束的时候升级, 否则返回 return Error_code::NODATA; 通知上级重试
 	switch ( dispatch_task_level_source )
 	{
 	    case DISPATCH_TASK_ONE_LEVEL:
 	    {
+	    	if ( m_dispatch_device_status != DISPATCH_DEVICE_ONE_LEVEL_OVER )
+	    	{
+	    	    return Error_code::NODATA;
+	    	}
 			tp_command_key_source = & m_device_one_level_command_key;
 			tp_process_type_source = & m_device_one_level_process_type;
 			tp_task_source = & mp_device_one_level_task;
@@ -520,6 +536,10 @@ Error_manager Dispatch_device_base::change_task_level(Dispatch_task_level dispat
 	    }
 	    case DISPATCH_TASK_TWO_LEVEL:
 	    {
+			if ( m_dispatch_device_status != DISPATCH_DEVICE_TWO_LEVEL_OVER )
+			{
+				return Error_code::NODATA;
+			}
 			tp_command_key_source = & m_device_two_level_command_key;
 			tp_process_type_source = & m_device_two_level_process_type;
 			tp_task_source = & mp_device_two_level_task;;
@@ -527,6 +547,10 @@ Error_manager Dispatch_device_base::change_task_level(Dispatch_task_level dispat
 	    }
 		case DISPATCH_TASK_THREE_LEVEL:
 		{
+			if ( m_dispatch_device_status != DISPATCH_DEVICE_THREE_LEVEL_OVER )
+			{
+				return Error_code::NODATA;
+			}
 			tp_command_key_source = & m_device_three_level_command_key;
 			tp_process_type_source = & m_device_three_level_process_type;
 			tp_task_source = & mp_device_three_level_task;;
@@ -607,6 +631,14 @@ int Dispatch_device_base::get_device_id()
 	return m_device_id;
 }
 
+bool Dispatch_device_base::get_break_flag()
+{
+	return m_break_flag;
+}
+void Dispatch_device_base::set_break_flag(bool break_flag)
+{
+	m_break_flag = break_flag;
+}
 
 
 //执行外界任务的执行函数

+ 6 - 0
dispatch/dispatch_device_base.h

@@ -29,6 +29,7 @@ public:
 //调度设备类型
 	enum Dispatch_device_type
 	{
+		DISPATCH_DEVICE_UNKNOWN = 							0,
 		DISPATCH_DEVICE_ROBOT_1 = 							101,
 		DISPATCH_DEVICE_ROBOT_2 = 							102,
 		DISPATCH_DEVICE_CARRIER_1 = 						200,
@@ -217,6 +218,9 @@ public://get or set member variable
 	virtual Hardware_device_status get_actual_device_status();
 	int get_device_id();
 
+	bool get_break_flag();
+	void set_break_flag(bool break_flag);
+
 protected://member functions
 
 
@@ -269,6 +273,8 @@ protected://member variable
 	//task任务的流程由Dispatch_process来管理
 
 
+	std::atomic<bool>					m_break_flag;				//打断标记位, 当接受2级任务时, 标记位改为true
+
 private:
 
 };

Різницю між файлами не показано, бо вона завелика
+ 863 - 309
dispatch/dispatch_process.cpp


+ 104 - 16
dispatch/dispatch_process.h

@@ -1,5 +1,5 @@
 
-#define MAIN_TEST 1
+//#define MAIN_TEST 1
 //#define PROCESS_TEST 1
 #define TIME_TEST 1
 
@@ -248,6 +248,59 @@ public:
 		DISPATCH_CARRIER_STORE_7				= 407,
 		DISPATCH_CARRIER_STORE_8				= 408,
 		DISPATCH_CARRIER_STORE_9				= 409,
+		DISPATCH_CARRIER_STORE_10				= 410,
+		DISPATCH_CARRIER_STORE_11				= 411,
+		DISPATCH_CARRIER_STORE_12				= 412,
+		DISPATCH_CARRIER_STORE_13				= 413,
+		DISPATCH_CARRIER_STORE_14				= 414,
+		DISPATCH_CARRIER_STORE_15				= 415,
+		DISPATCH_CARRIER_STORE_16				= 416,
+		DISPATCH_CARRIER_STORE_17				= 417,
+		DISPATCH_CARRIER_STORE_18				= 418,
+		DISPATCH_CARRIER_STORE_19				= 419,
+		DISPATCH_CARRIER_STORE_20				= 420,
+		DISPATCH_CARRIER_STORE_21				= 421,
+		DISPATCH_CARRIER_STORE_22				= 422,
+		DISPATCH_CARRIER_STORE_23				= 423,
+		DISPATCH_CARRIER_STORE_24				= 424,
+		DISPATCH_CARRIER_STORE_25				= 425,
+		DISPATCH_CARRIER_STORE_26				= 426,
+		DISPATCH_CARRIER_STORE_27				= 427,
+		DISPATCH_CARRIER_STORE_28				= 428,
+		DISPATCH_CARRIER_STORE_29				= 429,
+		DISPATCH_CARRIER_STORE_30				= 430,
+		DISPATCH_CARRIER_STORE_31				= 431,
+		DISPATCH_CARRIER_STORE_32				= 432,
+		DISPATCH_CARRIER_STORE_33				= 433,
+		DISPATCH_CARRIER_STORE_34				= 434,
+		DISPATCH_CARRIER_STORE_35				= 435,
+		DISPATCH_CARRIER_STORE_36				= 436,
+		DISPATCH_CARRIER_STORE_37				= 437,
+		DISPATCH_CARRIER_STORE_38				= 438,
+		DISPATCH_CARRIER_STORE_39				= 439,
+		DISPATCH_CARRIER_STORE_40				= 440,
+		DISPATCH_CARRIER_STORE_41				= 441,
+		DISPATCH_CARRIER_STORE_42				= 442,
+		DISPATCH_CARRIER_STORE_43				= 443,
+		DISPATCH_CARRIER_STORE_44				= 444,
+		DISPATCH_CARRIER_STORE_45				= 445,
+		DISPATCH_CARRIER_STORE_46				= 446,
+		DISPATCH_CARRIER_STORE_47				= 447,
+		DISPATCH_CARRIER_STORE_48				= 448,
+		DISPATCH_CARRIER_STORE_49				= 449,
+		DISPATCH_CARRIER_STORE_50				= 450,
+		DISPATCH_CARRIER_STORE_51				= 451,
+		DISPATCH_CARRIER_STORE_52				= 452,
+		DISPATCH_CARRIER_STORE_53				= 453,
+		DISPATCH_CARRIER_STORE_54				= 454,
+		DISPATCH_CARRIER_STORE_55				= 455,
+		DISPATCH_CARRIER_STORE_56				= 456,
+		DISPATCH_CARRIER_STORE_57				= 457,
+		DISPATCH_CARRIER_STORE_58				= 458,
+		DISPATCH_CARRIER_STORE_59				= 459,
+		DISPATCH_CARRIER_STORE_60				= 460,
+		DISPATCH_CARRIER_STORE_61				= 461,
+		DISPATCH_CARRIER_STORE_END				= 499,
 
 		DISPATCH_CATCHER_STORE_START			= 500, 	//取车流程 开始
 		DISPATCH_CATCHER_STORE_1				= 501,
@@ -259,6 +312,37 @@ public:
 		DISPATCH_CATCHER_STORE_7				= 507,
 		DISPATCH_CATCHER_STORE_8				= 508,
 		DISPATCH_CATCHER_STORE_9				= 509,
+		DISPATCH_CATCHER_STORE_10				= 510,
+		DISPATCH_CATCHER_STORE_11				= 511,
+		DISPATCH_CATCHER_STORE_12				= 512,
+		DISPATCH_CATCHER_STORE_13				= 513,
+		DISPATCH_CATCHER_STORE_14				= 514,
+		DISPATCH_CATCHER_STORE_15				= 515,
+		DISPATCH_CATCHER_STORE_16				= 516,
+		DISPATCH_CATCHER_STORE_17				= 517,
+		DISPATCH_CATCHER_STORE_18				= 518,
+		DISPATCH_CATCHER_STORE_19				= 519,
+		DISPATCH_CATCHER_STORE_20				= 520,
+		DISPATCH_CATCHER_STORE_21				= 521,
+		DISPATCH_CATCHER_STORE_22				= 522,
+		DISPATCH_CATCHER_STORE_23				= 523,
+		DISPATCH_CATCHER_STORE_24				= 524,
+		DISPATCH_CATCHER_STORE_25				= 525,
+		DISPATCH_CATCHER_STORE_26				= 526,
+		DISPATCH_CATCHER_STORE_27				= 527,
+		DISPATCH_CATCHER_STORE_28				= 528,
+		DISPATCH_CATCHER_STORE_29				= 529,
+		DISPATCH_CATCHER_STORE_30				= 530,
+		DISPATCH_CATCHER_STORE_31				= 531,
+		DISPATCH_CATCHER_STORE_32				= 532,
+		DISPATCH_CATCHER_STORE_33				= 533,
+		DISPATCH_CATCHER_STORE_34				= 534,
+		DISPATCH_CATCHER_STORE_35				= 535,
+		DISPATCH_CATCHER_STORE_36				= 536,
+		DISPATCH_CATCHER_STORE_37				= 537,
+		DISPATCH_CATCHER_STORE_38				= 538,
+		DISPATCH_CATCHER_STORE_39				= 539,
+		DISPATCH_CATCHER_STORE_END				= 599,
 
 		DISPATCH_CONTROL_DISCONNECT_DEVICE		= 7, 	//流程 解除设备
 		DISPATCH_CONTROL_OVER					= 8, 	//流程完成
@@ -288,33 +372,37 @@ public:
 	//调度设备机器人节点
 	struct Dispatch_catcher_node
 	{
-		Dispatch_control_status					m_dispatch_control_status;			//调度控制的状态, 控制步骤
-		bool									m_dispatch_control_start_flag =false;		//调度设备机器人启动标志位
+		Dispatch_control_status						m_dispatch_control_status;			//调度控制的状态, 控制步骤
+		bool										m_dispatch_control_start_flag =false;		//调度设备机器人启动标志位
 		// 核心机器人, 2号
-		std::shared_ptr<Dispatch_device_base>	mp_main_catcher;						//调度设备指针, 内存由Dispatch_manager来管理
-		std::shared_ptr<Task_Base>				mp_main_catcher_task;					//调度任务指针, 内存由本模块管理
+		std::shared_ptr<Dispatch_device_base>		mp_main_catcher;						//调度设备指针, 内存由Dispatch_manager来管理
+		std::shared_ptr<Task_Base>					mp_main_catcher_task;					//调度任务指针, 内存由本模块管理
+		Dispatch_device_base::Dispatch_task_level 	m_main_catcher_task_level;
+
 		//跟随搬运器, 3号搬运器
-		bool									m_following_flag;						//3号搬运器是否跟随机器人, 如果车位在3楼, 则为false
-		std::shared_ptr<Dispatch_device_base>	mp_following_carrier;					//调度设备指针, 内存由Dispatch_manager来管理
-		std::shared_ptr<Task_Base>				mp_following_carrier_task;				//调度任务指针, 内存由本模块管理
+		bool										m_following_flag;						//3号搬运器是否跟随机器人, 如果车位在3楼, 则为false
+		std::shared_ptr<Dispatch_device_base>		mp_following_carrier;					//调度设备指针, 内存由Dispatch_manager来管理
+		std::shared_ptr<Task_Base>					mp_following_carrier_task;				//调度任务指针, 内存由本模块管理
 		//目前没有让别人避让的功能
 
-		Error_manager							m_error;							//错误码
+		Error_manager								m_error;							//错误码
 	};
 
 	//调度设备搬运器节点
 	struct Dispatch_carrier_node
 	{
-		Dispatch_control_status					m_dispatch_control_status;			//调度控制的状态, 控制步骤
-		bool									m_dispatch_control_start_flag =false;		//调度设备机器人启动标志位
+		Dispatch_control_status						m_dispatch_control_status;			//调度控制的状态, 控制步骤
+		bool										m_dispatch_control_start_flag =false;		//调度设备机器人启动标志位
 		//核心搬运器, 搬运汽车的搬运器
-		std::shared_ptr<Dispatch_device_base>	mp_main_carrier;					//调度设备指针, 内存由Dispatch_manager来管理
-		std::shared_ptr<Task_Base>				mp_main_carrier_task;				//调度任务指针, 内存由本模块管理
+		std::shared_ptr<Dispatch_device_base>		mp_main_carrier;					//调度设备指针, 内存由Dispatch_manager来管理
+		std::shared_ptr<Task_Base>					mp_main_carrier_task;				//调度任务指针, 内存由本模块管理
+		Dispatch_device_base::Dispatch_task_level 	m_main_carrier_task_level;
+
 		//给机器人发送避让指令, 2号机器人(可选)
-		std::shared_ptr<Dispatch_device_base>	mp_avoid_catcher;						//调度设备指针, 内存由Dispatch_manager来管理
-		std::shared_ptr<Task_Base>				mp_avoid_catcher_task;					//调度任务指针, 内存由本模块管理
+		std::shared_ptr<Dispatch_device_base>		mp_avoid_catcher;						//调度设备指针, 内存由Dispatch_manager来管理
+		std::shared_ptr<Task_Base>					mp_avoid_catcher_task;					//调度任务指针, 内存由本模块管理
 
-		Error_manager							m_error;							//错误码
+		Error_manager								m_error;							//错误码
 	};