dispatch_process.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /*
  2. dispatch_source 和 dispatch_destination 的表示含义
  3. 1~165 2楼~12楼的停车位
  4. 1100 0号出口(在一楼)(目前没有)
  5. 1101~1106 1~6号出入口 (在一楼)
  6. 1107 7号出口(在一楼)
  7. 1201~1206 1~6号出入口上方2楼处
  8. 1301~1306 1~6号出入口上方3楼处
  9. 1401~1406 1~6号出入口上方4楼处
  10. 2101~2112 左侧电梯井(1楼~12楼)(一号搬运器的待机点)
  11. 2201~2212 右侧电梯井(1楼~12楼)(二号搬运器的待机点)
  12. */
  13. #ifndef NNXX_TESTS_DISPATCH_PROCESS_H
  14. #define NNXX_TESTS_DISPATCH_PROCESS_H
  15. #include <error_code.h>
  16. #include "../tool/thread_condition.h"
  17. #include "../tool/TaskQueue/BaseTask.h"
  18. #include "../tool/common_data.h"
  19. #include <glog/logging.h>
  20. #include "../dispatch/carrier.h"
  21. #include "../dispatch/catcher.h"
  22. #include "../dispatch/passageway.h"
  23. #include "../message/dispatch_message.pb.h"
  24. #include "../message/dispatch_control.pb.h"
  25. //调度流程 存车
  26. class Dispatch_process : public tq::BaseTask
  27. {
  28. public:
  29. //调度指令超时时间 300000ms = 5min
  30. #define DISPATCH_PROCESS_TIMEOUT_MS 300000
  31. //调度指令超时时间 衰减值 在原有的基础上减少30秒
  32. #define DISPATCH_PROCESS_ATTENUATION_TIMEOUT_MS 30000
  33. //调度流程的状态, 控制步骤
  34. enum Dispatch_process_status
  35. {
  36. DISPATCH_PROCESS_STATUS_UNKNOW = 0, //未知
  37. DISPATCH_PROCESS_CREATED = 1, //流程创建,
  38. DISPATCH_PROCESS_READY = 2, //流程准备,待机
  39. DISPATCH_PROCESS_WORKING = 3, //流程工作正忙
  40. DISPATCH_PROCESS_OVER = 4, //流程完成
  41. DISPATCH_PROCESS_RELEASE = 5, //流程释放
  42. DISPATCH_PROCESS_FAULT = 10, //故障
  43. DISPATCH_PROCESS_MOTION_FAILED = 11, //单个小动作执行失败
  44. };
  45. //调度任务类型
  46. enum Dispatch_process_type
  47. {
  48. DISPATCH_PROCESS_TYPE_UNKNOW = 0, //未知
  49. DISPATCH_PROCESS_STORE = 101, //存车
  50. DISPATCH_PROCESS_PICKUP = 102, //取车
  51. };
  52. public:
  53. Dispatch_process();
  54. Dispatch_process(const Dispatch_process& other)= default;
  55. Dispatch_process& operator =(const Dispatch_process& other)= default;
  56. ~Dispatch_process();
  57. public://API functions
  58. //初始化, 就把主控发送的请求传入即可.
  59. Error_manager Dispatch_process_init(message::Dispatch_request_msg dispatch_request_msg);
  60. //反初始化
  61. Error_manager Dispatch_process_uninit();
  62. public://get or set member variable
  63. protected://member functions
  64. //主线程
  65. virtual void Main();
  66. //检查调度请求
  67. Error_manager check_dispatch_request_msg();
  68. //发送调度总计划
  69. Error_manager send_dispatch_plan_request_msg();
  70. //等待控制指令
  71. Error_manager wait_dispatch_control_request_msg();
  72. //执行调度控制指令, 并根据完成情况给答复
  73. Error_manager excute_dispatch_control();
  74. //等待调度总计划答复
  75. Error_manager wait_dispatch_plan_response_msg();
  76. //发送调度答复, 发给主控的
  77. Error_manager send_dispatch_response_msg();
  78. //通知调度管理, 释放资源,
  79. Error_manager release_resource();
  80. //异常处理
  81. Error_manager Exception_handling();
  82. public://member variable
  83. Dispatch_process_status m_dispatch_process_status; //调度流程的状态, 控制步骤
  84. //流程总规划数据, 外部指令
  85. std::mutex m_lock;
  86. Dispatch_process_type m_dispatch_process_type; //调度任务类型
  87. int m_dispatch_source; //调度的起点,源头
  88. int m_dispatch_destination; //调度的终点,目的地
  89. Common_data::Car_measure_information m_car_measure_information; //整车的测量信息
  90. Common_data::Parkspace_information m_parkspace_information; //单个车位基本信息与状态信息,车位信息以及车位上的车辆信息
  91. //硬件资源
  92. std::shared_ptr<Catcher> mp_catcher; //抓车器指针, 内存由Dispatch_manager来管理
  93. std::shared_ptr<Task_Base> mp_catcher_task; //抓车器任务, 内存由本模块管理
  94. std::shared_ptr<Carrier> mp_carrier; //搬运器指针, 内存由Dispatch_manager来管理
  95. std::shared_ptr<Task_Base> mp_carrier_task; //搬运器任务, 内存由本模块管理
  96. std::shared_ptr<Passageway> mp_passageway; //通道口指针, 内存由Dispatch_manager来管理
  97. std::shared_ptr<Task_Base> mp_passageway_task; //通道口任务, 内存由本模块管理
  98. std::string m_command_key; //任务唯一码
  99. int m_timeout_ms; //超时时间,单位ms
  100. std::chrono::system_clock::time_point m_start_time; //流程开始时间
  101. Error_manager m_result; //流程的执行结果
  102. //通信缓存
  103. message::Dispatch_request_msg m_dispatch_request_msg; //1执行搬运请求(主控->调度管理)
  104. message::Dispatch_plan_request_msg m_dispatch_plan_request_msg; //2调度总规划的请求, 用于启动整个调度算法(调度管理->调度算法)
  105. message::Dispatch_control_request_msg m_dispatch_control_request_msg; //3调度控制的任务请求(调度算法->调度管理)
  106. message::Dispatch_control_response_msg m_dispatch_control_response_msg; //4调度控制的任务答复(调度管理->调度算法)
  107. message::Dispatch_plan_response_msg m_dispatch_plan_response_msg; //5调度总规划的答复(调度算法->调度管理)
  108. message::Dispatch_response_msg m_dispatch_response_msg; //6搬运动作执行完成后反馈结果(调度管理->主控)
  109. //流程通信顺序为 收1->发2->收3->发4->收3->发4->收3->发4->收5->发6
  110. private:
  111. };
  112. #endif //NNXX_TESTS_DISPATCH_PROCESS_H