dispatch_singlechip.h 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // Created by huli on 2021/11/18.
  3. //
  4. #ifndef NNXX_TESTS_DISPATCH_SINGLECHIP_H
  5. #define NNXX_TESTS_DISPATCH_SINGLECHIP_H
  6. #include "../error_code/error_code.h"
  7. #include <glog/logging.h>
  8. #include <thread>
  9. #include <mutex>
  10. #include "../tool/thread_condition.h"
  11. #include "../tool/common_data.h"
  12. #include "../tool/time_tool.h"
  13. #include "../task/task_base.h"
  14. //#include "../message/dispatch_message.pb.h"
  15. //#include "../message/singlechip_msg.pb.h"
  16. #include "../message/message.pb.h"
  17. #include "../dispatch/dispatch_communication.h"
  18. //调度单片机通信
  19. class Dispatch_singlechip
  20. {
  21. public:
  22. //调度plc状态
  23. enum Dispatch_singlechip_status
  24. {
  25. DISPATCH_SINGLECHIP_UNKNOW = 0, //未知
  26. DISPATCH_SINGLECHIP_READY = 1, //准备,待机
  27. DISPATCH_SINGLECHIP_FAULT = 10, //故障
  28. DISPATCH_SINGLECHIP_DISCONNECT = 11, //断连
  29. };
  30. public:
  31. Dispatch_singlechip();
  32. Dispatch_singlechip(const Dispatch_singlechip& other)= default;
  33. Dispatch_singlechip& operator =(const Dispatch_singlechip& other)= default;
  34. ~Dispatch_singlechip();
  35. public://API functions
  36. //调度单片机 初始化, 单片机id, 0或者1, 单片机方向, 1是入口, 2是出口
  37. Error_manager dispatch_singlechip_init(int plc_id, int singlechip_id, int singlechip_direction);
  38. //调度单片机 反初始化
  39. Error_manager dispatch_singlechip_uninit();
  40. //调度单片机 执行状态消息
  41. // Error_manager execute_for_singlechip_data_msg(message::Singlechip_data &singlechip_data_msg, bool validity);
  42. //调度单片机 执行状态消息
  43. Error_manager execute_for_singlechip_data_msg_new(in_mcpu_statu &t_in_mcpu_statu, bool validity);
  44. //调度单片机 执行状态消息
  45. Error_manager execute_for_singlechip_data_msg_new(out_mcpu_statu &t_out_mcpu_statu, bool validity);
  46. //判断出口是否空闲
  47. bool is_outlet_ready();
  48. public://get or set member variable
  49. Dispatch_singlechip_status get_dispatch_singlechip_status();
  50. protected://member functions
  51. //执行外界任务的执行函数
  52. void execute_thread_fun();
  53. protected://member variable
  54. std::atomic<Dispatch_singlechip_status> m_dispatch_singlechip_status;//调度单片机的状态
  55. int m_plc_id; //设备id, 索引, 就是楚天车库的单元号.
  56. int m_singlechip_id; //单片机id, 0或者1
  57. int m_singlechip_direction; //单片机方向, 1是入口, 2是出口
  58. std::mutex m_lock; //锁
  59. //任务执行线程
  60. std::thread* mp_execute_thread; //执行的线程指针,内存由本类管理
  61. Thread_condition m_execute_condition; //执行的条件变量
  62. //数据缓存
  63. // message::Singlechip_data m_singlechip_data_msg; //旧版单片机消息
  64. in_mcpu_statu m_in_mcpu_statu; //新版入口单片机消息
  65. out_mcpu_statu m_out_mcpu_statu; //新版出口单片机消息
  66. bool m_validity; //有效性
  67. std::chrono::system_clock::time_point m_singlechip_data_msg_updata_time; //状态更新时间点
  68. std::atomic<bool> m_singlechip_data_msg_updata_flag;
  69. private:
  70. };
  71. #endif //NNXX_TESTS_DISPATCH_SINGLECHIP_H