terminal_command_executor.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. //
  2. // Created by zx on 2019/12/27.
  3. //
  4. #ifndef TERMINOR_H
  5. #define TERMINOR_H
  6. #include "../plc/plc_communicator.h"
  7. #include "../plc/plc_task.h"
  8. #include "../laser/Laser.h"
  9. #include "../locate/locater.h"
  10. #include "../verify/Verify_result.h"
  11. #include "../wj_lidar/fence_controller.h"
  12. #include "Terminor_parameter.pb.h"
  13. #include <thread>
  14. /*
  15. * 终端指令执行状态,枚举
  16. * 列举终端指令从进入流程到测量完成过程中的进度状态
  17. */
  18. enum TerminorStatu
  19. {
  20. TERMINOR_READY=0, //终端空闲
  21. TERMINOR_BUSY, //接收到指令/被占用
  22. TERMINOR_SCANNING, //终端指令一启动扫描,扫描中
  23. TERMINOR_MEASURING, //终端指令进入测量中
  24. TERMINOR_POSTING, //终端测量完成, 正在上传数据
  25. TERMINOR_INVALID //终端指令执行异常,当出现硬件故障,功能模块bug严重错误时,时为异常状态,
  26. };
  27. /*
  28. * 终端指令执行类,执行指令,监控指令执行进度
  29. * 输入雷达数组,plc对象,测量算法对象,执行扫描测量任务
  30. */
  31. class Terminor_Command_Executor
  32. {
  33. public:
  34. /*
  35. * 构造函数
  36. * parameter:该终端指令配置参数(待定)
  37. */
  38. Terminor_Command_Executor(Terminal::Terminor_parameter parameter);
  39. ~Terminor_Command_Executor();
  40. /*
  41. * 获取终端进度状态
  42. */
  43. TerminorStatu get_terminor_statu();
  44. /*
  45. * 执行扫描,测量任务,阻塞知道任务完成或超时(单位秒)
  46. * 函数体只检测指令是否能执行,并启动线程执行指令,不等待指令完成.
  47. *lasers:需要启动的雷达
  48. * wj_lidar:万集雷达测量模块
  49. * plc:上传结果工具
  50. * locater:测量算法对象
  51. * verify_tool:结果检验工具,当该参数为NULL时,测量结果不作检验
  52. * 返回指令是否启动成功
  53. */
  54. Error_manager execute_command(std::vector<Laser_base*> lasers,float timeout=15);
  55. /*
  56. * 强制正在执行的中断指令
  57. */
  58. Error_manager force_stop_command();
  59. /*
  60. * 设置保存文件的root路径
  61. * 执行指令时会在此路径下,生成日期文件夹,格式为:/root_path/year/month/day/YYYYMMDD-HHMMSS文件夹
  62. */
  63. void set_save_root_path(std::string root);
  64. protected:
  65. static void thread_command_working(Terminor_Command_Executor* terminor);
  66. /*
  67. * 执行指令流程函数
  68. * 扫描
  69. * 测量,保存测量结果到成员变量
  70. */
  71. Error_manager scanning_measuring();
  72. /*
  73. * 根据长宽,角度,生成cv::RotateRect
  74. */
  75. static cv::RotatedRect create_rotate_rect(float length,float width,float angle,float x,float y);
  76. protected:
  77. TerminorStatu m_terminor_statu;
  78. //指令流程线程
  79. std::thread* mp_command_thread;
  80. //
  81. std::mutex m_mutex_lock;
  82. //保存输入进来的雷达指针
  83. std::vector<Laser_base*> mp_laser_vector;
  84. //配置参数
  85. Terminal::Terminor_parameter m_terminor_parameter;
  86. //本次指令超时时间 单位秒
  87. float m_timeout_second;
  88. //强制退出标示
  89. bool mb_force_quit;
  90. //保存当前指令测量结果
  91. Locate_information m_measure_information;
  92. //保存文件的root目录
  93. std::string m_save_root_path;
  94. };
  95. #endif //TERMINOR_H