plc_data.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //
  2. // Created by zx on 2019/12/9.
  3. //
  4. #ifndef PLC_DATA_H
  5. #define PLC_DATA_H
  6. #include <iostream>
  7. #include <string.h>
  8. #include <mutex>
  9. #include <atomic>
  10. #include "../tool/StdCondition.h"
  11. #include <thread>
  12. #include "../tool/s7_plc.h"
  13. #include "unistd.h"
  14. #include "define.h"
  15. #include "glog/logging.h"
  16. #define MAX_REGIONS 6
  17. #define ELE_FENCE_BOUNDARY_START_ADDR 3
  18. #define ELE_FENCE_DB_NUM 95
  19. #define ELE_FENCE_OFFSET 7
  20. #define ELE_FENCE_COUNT 6
  21. #define CENTRAL_CONTROLLER_DB_NUM 41
  22. #define DOOR_STATUS_OFFSET 18
  23. class Plc_data
  24. {
  25. public:
  26. // 获取plc通信类单例
  27. static Plc_data *get_instance(std::string ip = "");
  28. // static void Release();
  29. // 更新区域状态数据
  30. void update_data(int state_code, int border_status, int id);
  31. // plc更新线程
  32. static void plc_update_thread(Plc_data *p);
  33. // 获取plc实时状态
  34. bool get_plc_status();
  35. public:
  36. std::atomic<bool> mb_is_ready; // 状态正常与否
  37. private:
  38. static Plc_data *g_ins; // 全局Plc_data实例
  39. static std::mutex g_lock; // 全局Plc_data实例访问互斥锁
  40. StdCondition m_cond_exit; // 系统关闭标志
  41. std::thread *mp_update_thread; // plc更新线程
  42. S7PLC m_plc; // S7协议句柄
  43. const int m_update_interval_milli = 100; // plc更新频率
  44. // 有参构造函数
  45. Plc_data(std::string ip);
  46. // class CGarbo
  47. // {
  48. // public:
  49. // ~CGarbo() {
  50. // if (g_ins)
  51. // {
  52. // delete g_ins;
  53. // g_ins = 0;
  54. // }
  55. // }
  56. // };
  57. // static CGarbo Garbo; //--->1
  58. protected:
  59. short m_data[MAX_REGIONS*2];
  60. short m_last_data[MAX_REGIONS*2];
  61. std::string m_ip_str;
  62. };
  63. #endif //PLC_DATA_H