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