dispatch_singlechip.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. #include <google/protobuf/message.h>
  19. #include <google/protobuf/util/json_util.h>
  20. #include <google/protobuf/text_format.h>
  21. //调度单片机通信
  22. class Dispatch_singlechip
  23. {
  24. public:
  25. //调度plc状态
  26. enum Dispatch_singlechip_status
  27. {
  28. DISPATCH_SINGLECHIP_UNKNOW = 0, //未知
  29. DISPATCH_SINGLECHIP_READY = 1, //准备,待机
  30. DISPATCH_SINGLECHIP_FAULT = 10, //故障
  31. DISPATCH_SINGLECHIP_DISCONNECT = 11, //断连
  32. };
  33. public:
  34. Dispatch_singlechip();
  35. Dispatch_singlechip(const Dispatch_singlechip& other)= default;
  36. Dispatch_singlechip& operator =(const Dispatch_singlechip& other)= default;
  37. ~Dispatch_singlechip();
  38. public://API functions
  39. //调度单片机 初始化, 单片机id, 0或者1, 单片机方向, 1是入口, 2是出口
  40. Error_manager dispatch_singlechip_init(int plc_id, int singlechip_id, int singlechip_direction);
  41. //调度单片机 反初始化
  42. Error_manager dispatch_singlechip_uninit();
  43. //调度单片机 执行状态消息
  44. // Error_manager execute_for_singlechip_data_msg(message::Singlechip_data &singlechip_data_msg, bool validity);
  45. //调度单片机 执行状态消息
  46. Error_manager execute_for_singlechip_data_msg_new(in_mcpu_statu &t_in_mcpu_statu, bool validity);
  47. //调度单片机 执行状态消息
  48. Error_manager execute_for_singlechip_data_msg_new(out_mcpu_statu &t_out_mcpu_statu, bool validity);
  49. //单片机消息, 数据处理, 去头,去尾 //删除头部 @501, 删除尾部 $,
  50. Error_manager data_processing(std::string & put_in, std::string & put_out);
  51. //调度单片机 执行状态消息, 单片机通过tcp发过来的原始字符串
  52. Error_manager execute_for_singlechip_data_msg_new(std::string singlechip_data);
  53. //判断出口是否空闲, 没有车就是空闲, 返回true
  54. bool is_outlet_ready();
  55. //判断入口是否空闲, 没有车就是空闲, 返回true
  56. bool is_inlet_ready();
  57. public://get or set member variable
  58. Dispatch_singlechip_status get_dispatch_singlechip_status();
  59. //获取外门状态, 0表示未知, 1表示外门开到位, 2表示外门关到位, 3表示外门运行中 4表示外门故障
  60. message::Outside_door_status get_outside_door_status();
  61. //获取内部是否有车, 0表示无车, 1表示有车. -1表示未知
  62. int get_inside_existence_flag();
  63. protected://member functions
  64. //任务执行线程, 负责门控和数据库操作
  65. void execute_thread_fun();
  66. //入口外门控制函数
  67. Error_manager inlet_outsidedoor_control();
  68. //出口外门控制函数
  69. Error_manager outlet_outsidedoor_control();
  70. //发送开门指令
  71. Error_manager open_outside_door();
  72. //发送关门指令
  73. Error_manager close_outside_door();
  74. //任务执行线程, 负责数据管理, 和通信转化, tcp rabbitmq snap7
  75. void updata_thread_fun();
  76. //数据同步更新, tcp->rabbitmq, tcp->snap7
  77. void updata_singlechip_data();
  78. protected://member variable
  79. std::atomic<Dispatch_singlechip_status> m_dispatch_singlechip_status;//调度单片机的状态
  80. int m_plc_id; //设备id, 索引, 就是楚天车库的单元号.
  81. int m_singlechip_id; //单片机id, 0或者1
  82. int m_singlechip_direction; //单片机方向, 1是入口, 2是出口
  83. std::mutex m_lock; //锁
  84. //任务执行线程, 负责门控和数据库操作
  85. std::thread* mp_execute_thread; //执行的线程指针,内存由本类管理
  86. Thread_condition m_execute_condition; //执行的条件变量
  87. //任务执行线程, 负责数据管理, 和通信转化, tcp rabbitmq snap7
  88. std::thread* mp_updata_thread; //数据更新的线程指针,内存由本类管理
  89. Thread_condition m_updata_condition; //数据更新的条件变量
  90. //数据缓存
  91. message::Singlechip_data m_singlechip_data_msg; //单片机的数据, proto格式, 直连单片机tcp
  92. in_mcpu_statu m_in_mcpu_statu; //新版入口单片机消息
  93. out_mcpu_statu m_out_mcpu_statu; //新版出口单片机消息
  94. bool m_validity; //有效性
  95. std::chrono::system_clock::time_point m_singlechip_data_msg_updata_time; //状态更新时间点
  96. std::atomic<bool> m_singlechip_data_msg_updata_flag;
  97. std::string m_primary_key_last;//入口存车流程的唯一码
  98. bool m_close_outsidedoor_flag;//入口外门关闭标志位
  99. private:
  100. };
  101. #endif //NNXX_TESTS_DISPATCH_SINGLECHIP_H