terminal_command_executor.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. protected:
  57. static void thread_command_working(Terminor_Command_Executor* terminor);
  58. /*
  59. * 执行指令流程函数
  60. * 扫描
  61. * 测量
  62. * 上传数据
  63. */
  64. Error_manager working();
  65. protected:
  66. TerminorStatu m_terminor_statu;
  67. //指令流程线程
  68. std::thread* mp_command_thread;
  69. //
  70. std::mutex m_mutex_lock;
  71. //保存输入进来的雷达指针
  72. std::vector<Laser_base*> mp_laser_vector;
  73. //plc
  74. Plc_Communicator* mp_plc;
  75. //locater*
  76. Locater* mp_locater;
  77. //配置参数
  78. Terminal::Terminor_parameter m_terminor_parameter;
  79. //本次指令超时时间 单位秒
  80. float m_timeout_second;
  81. };
  82. #endif //TERMINOR_H