snap7_clamp.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. //
  2. // Created by huli on 2020/9/25.
  3. //
  4. #include "snap7_clamp.h"
  5. Snap7Clamp::Snap7Clamp() = default;
  6. Snap7Clamp::~Snap7Clamp() = default;
  7. //初始化 通信 模块。如下三选一
  8. Error_manager Snap7Clamp::communication_init()
  9. {
  10. int t_index = 0;
  11. std::vector<Snap7_buf::Variable_information> t_variable_information_vector;
  12. //往map通信缓存里面添加所需要的buf
  13. std::unique_lock<std::mutex> t_lock1(m_receive_buf_lock);
  14. std::unique_lock<std::mutex> t_lock2(m_send_buf_lock);
  15. Snap7_buf t_snap7_buf;
  16. // plcData
  17. t_index = 0;
  18. t_variable_information_vector.clear();
  19. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"pingpong", typeid(unsigned short ).name(), t_index,sizeof(unsigned short), 1 });
  20. t_index += sizeof(unsigned short)*1;
  21. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"wheel_exist", typeid(unsigned short ).name(), t_index,sizeof(unsigned short), 1 });
  22. t_index += sizeof(unsigned short)*1;
  23. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"offset", typeid(float ).name(), t_index,sizeof(float), 1 });
  24. t_index += sizeof(float)*1;
  25. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"gap", typeid(float ).name(), t_index,sizeof(float), 1 });
  26. t_index += sizeof(float)*1;
  27. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"clamp_completed", typeid(unsigned short ).name(), t_index,sizeof(unsigned short), 1 });
  28. t_index += sizeof(unsigned short)*1;
  29. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"wheel_exist", typeid(unsigned short ).name(), t_index,sizeof(unsigned short), 1 });
  30. t_index += sizeof(unsigned short)*1;
  31. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"offset", typeid(float ).name(), t_index,sizeof(float), 1 });
  32. t_index += sizeof(float)*1;
  33. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"gap", typeid(float ).name(), t_index,sizeof(float), 1 });
  34. t_index += sizeof(float)*1;
  35. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"clamp_completed", typeid(unsigned short ).name(), t_index,sizeof(unsigned short), 1 });
  36. t_index += sizeof(unsigned short)*1;
  37. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"wheel_exist", typeid(unsigned short ).name(), t_index,sizeof(unsigned short), 1 });
  38. t_index += sizeof(unsigned short)*1;
  39. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"offset", typeid(float ).name(), t_index,sizeof(float), 1 });
  40. t_index += sizeof(float)*1;
  41. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"gap", typeid(float ).name(), t_index,sizeof(float), 1 });
  42. t_index += sizeof(float)*1;
  43. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"clamp_completed", typeid(unsigned short ).name(), t_index,sizeof(unsigned short), 1 });
  44. t_index += sizeof(unsigned short)*1;
  45. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"wheel_exist", typeid(unsigned short ).name(), t_index,sizeof(unsigned short), 1 });
  46. t_index += sizeof(unsigned short)*1;
  47. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"offset", typeid(float ).name(), t_index,sizeof(float), 1 });
  48. t_index += sizeof(float)*1;
  49. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"gap", typeid(float ).name(), t_index,sizeof(float), 1 });
  50. t_index += sizeof(float)*1;
  51. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"clamp_completed", typeid(unsigned short ).name(), t_index,sizeof(unsigned short), 1 });
  52. t_index += sizeof(unsigned short)*1;
  53. LOG(INFO) << t_index;
  54. t_snap7_buf.init(CLAMP_SAFETY_PLC_DBNUMBER , 0, sizeof(PLCData), t_variable_information_vector, Snap7_buf::LOOP_COMMUNICATION);
  55. m_send_buf_map[0] = t_snap7_buf;
  56. // t_index = 0;
  57. // t_variable_information_vector.clear();
  58. // t_variable_information_vector.push_back(Snap7_buf::Variable_information{"heart", typeid(unsigned short).name(), t_index,sizeof(unsigned short), 1 });
  59. //
  60. // t_snap7_buf.init(CLAMP_SAFETY_PLC_DBNUMBER , 50, sizeof(unsigned short), t_variable_information_vector, Snap7_buf::LOOP_COMMUNICATION);
  61. // m_receive_buf_map[0] = t_snap7_buf;
  62. plcJsonConfig config(ETC_PATH"/ClampSafety/plc.json");
  63. return Snap7_communication_base::communication_init(config.ip());
  64. return SUCCESS;
  65. }
  66. //反初始化 通信 模块。
  67. Error_manager Snap7Clamp::communication_uninit()
  68. {
  69. return Snap7_communication_base::communication_uninit();
  70. }
  71. //更新数据
  72. Error_manager Snap7Clamp::updata_receive_buf()
  73. {
  74. // std::unique_lock<std::mutex> t_lock1(m_receive_buf_lock);
  75. // std::unique_lock<std::mutex> t_lock2(m_data_lock);
  76. // static unsigned short heart;
  77. // memcpy(&heart, m_receive_buf_map[0].mp_buf_obverse, m_receive_buf_map[0].m_size);
  78. Error_manager ret = Error_code::SUCCESS;
  79. // if (heart == m_heart) {
  80. // printf("---Debug %s %d : heart not change %d ---> %d\n", __func__, __LINE__, m_heart, heart);
  81. // ret = Error_code::FAILED;
  82. // }
  83. // m_heart = heart;
  84. return ret;
  85. }
  86. Error_manager Snap7Clamp::updata_send_buf()
  87. {
  88. std::unique_lock<std::mutex> t_lock1(m_send_buf_lock);
  89. std::unique_lock<std::mutex> t_lock2(m_data_lock);
  90. if (plcData.pingpong != 0) {
  91. plcData.info();
  92. }
  93. memcpy(m_send_buf_map[0].mp_buf_obverse, &plcData, m_send_buf_map[0].m_size);
  94. return Error_code::SUCCESS;
  95. }