dispatch_communication.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. //
  2. // Created by huli on 2020/9/25.
  3. //
  4. #include "dispatch_communication.h"
  5. Dispatch_communication::Dispatch_communication()
  6. {
  7. }
  8. Dispatch_communication::~Dispatch_communication()
  9. {
  10. }
  11. //初始化 通信 模块。如下三选一
  12. Error_manager Dispatch_communication::communication_init()
  13. {
  14. int t_index = 0;
  15. std::vector<Snap7_buf::Variable_information> t_variable_information_vector;
  16. //往map通信缓存里面添加所需要的buf
  17. std::unique_lock<std::mutex> t_lock1(m_receive_buf_lock);
  18. std::unique_lock<std::mutex> t_lock2(m_send_buf_lock);
  19. Snap7_buf t_snap7_buf;
  20. t_index = 0;
  21. t_variable_information_vector.clear();
  22. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  23. t_index += sizeof(unsigned char)*1;
  24. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved257_275", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 19 });
  25. t_index += sizeof(unsigned char)*19;
  26. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_request_x", typeid(float).name(), t_index,sizeof(float), 1 });
  27. t_index += sizeof(float)*1;
  28. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_request_y", typeid(float).name(), t_index,sizeof(float), 1 });
  29. t_index += sizeof(float)*1;
  30. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_request_b", typeid(float).name(), t_index,sizeof(float), 1 });
  31. t_index += sizeof(float)*1;
  32. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_request_z", typeid(float).name(), t_index,sizeof(float), 1 });
  33. t_index += sizeof(float)*1;
  34. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_request_clamp_motion", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  35. t_index += sizeof(unsigned char)*1;
  36. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved293", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  37. t_index += sizeof(unsigned char)*1;
  38. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved294", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  39. t_index += sizeof(unsigned char)*1;
  40. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved295", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  41. t_index += sizeof(unsigned char)*1;
  42. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_request_wheelbase", typeid(float).name(), t_index,sizeof(float), 1 });
  43. t_index += sizeof(float)*1;
  44. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_request_d1", typeid(float).name(), t_index,sizeof(float), 1 });
  45. t_index += sizeof(float)*1;
  46. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_request_d2", typeid(float).name(), t_index,sizeof(float), 1 });
  47. t_index += sizeof(float)*1;
  48. t_snap7_buf.init(CATCHER_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_1, 50, sizeof(Catcher_request_from_dispatch_to_plc_for_data), t_variable_information_vector, Snap7_buf::NO_COMMUNICATION);
  49. m_send_buf_map[0] = t_snap7_buf;
  50. t_snap7_buf.init(CATCHER_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_2, 50, sizeof(Catcher_request_from_dispatch_to_plc_for_data), t_variable_information_vector, Snap7_buf::LOOP_COMMUNICATION);
  51. m_send_buf_map[1] = t_snap7_buf;
  52. t_index = 0;
  53. t_variable_information_vector.clear();
  54. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_request_key", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 50 });
  55. t_index += sizeof(unsigned char)*50;
  56. t_snap7_buf.init(CATCHER_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_1, 0, sizeof(Catcher_request_from_dispatch_to_plc_for_key), t_variable_information_vector, Snap7_buf::NO_COMMUNICATION);
  57. m_send_buf_map[2] = t_snap7_buf;
  58. t_snap7_buf.init(CATCHER_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_2, 0, sizeof(Catcher_request_from_dispatch_to_plc_for_key), t_variable_information_vector, Snap7_buf::LOOP_COMMUNICATION);
  59. m_send_buf_map[3] = t_snap7_buf;
  60. t_index = 0;
  61. t_variable_information_vector.clear();
  62. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_respons_key", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 50 });
  63. t_index += sizeof(unsigned char)*50;
  64. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_respons_status", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  65. t_index += sizeof(unsigned char)*1;
  66. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved257_275", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 19 });
  67. t_index += sizeof(unsigned char)*19;
  68. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_respons_x", typeid(float).name(), t_index,sizeof(float), 1 });
  69. t_index += sizeof(float)*1;
  70. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_respons_y", typeid(float).name(), t_index,sizeof(float), 1 });
  71. t_index += sizeof(float)*1;
  72. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_respons_b", typeid(float).name(), t_index,sizeof(float), 1 });
  73. t_index += sizeof(float)*1;
  74. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_respons_z", typeid(float).name(), t_index,sizeof(float), 1 });
  75. t_index += sizeof(float)*1;
  76. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_respons_clamp_motion", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  77. t_index += sizeof(unsigned char)*1;
  78. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved293", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  79. t_index += sizeof(unsigned char)*1;
  80. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved294", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  81. t_index += sizeof(unsigned char)*1;
  82. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved295", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  83. t_index += sizeof(unsigned char)*1;
  84. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_respons_wheelbase", typeid(float).name(), t_index,sizeof(float), 1 });
  85. t_index += sizeof(float)*1;
  86. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_respons_d1", typeid(float).name(), t_index,sizeof(float), 1 });
  87. t_index += sizeof(float)*1;
  88. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_respons_d2", typeid(float).name(), t_index,sizeof(float), 1 });
  89. t_index += sizeof(float)*1;
  90. t_snap7_buf.init(CATCHER_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_1, 0, sizeof(Catcher_response_from_plc_to_dispatch), t_variable_information_vector, Snap7_buf::NO_COMMUNICATION);
  91. m_receive_buf_map[0] = t_snap7_buf;
  92. t_snap7_buf.init(CATCHER_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_2, 0, sizeof(Catcher_response_from_plc_to_dispatch), t_variable_information_vector, Snap7_buf::LOOP_COMMUNICATION);
  93. m_receive_buf_map[1] = t_snap7_buf;
  94. t_index = 0;
  95. t_variable_information_vector.clear();
  96. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_heartbeat", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  97. t_index += sizeof(unsigned char)*1;
  98. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_safe_status", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  99. t_index += sizeof(unsigned char)*1;
  100. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_work_status", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  101. t_index += sizeof(unsigned char)*1;
  102. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_load_status", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  103. t_index += sizeof(unsigned char)*1;
  104. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved4_37", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 34 });
  105. t_index += sizeof(unsigned char)*34;
  106. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_x", typeid(float).name(), t_index,sizeof(float), 1 });
  107. t_index += sizeof(float)*1;
  108. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_y", typeid(float).name(), t_index,sizeof(float), 1 });
  109. t_index += sizeof(float)*1;
  110. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_b", typeid(float).name(), t_index,sizeof(float), 1 });
  111. t_index += sizeof(float)*1;
  112. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_z", typeid(float).name(), t_index,sizeof(float), 1 });
  113. t_index += sizeof(float)*1;
  114. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_d1", typeid(float).name(), t_index,sizeof(float), 1 });
  115. t_index += sizeof(float)*1;
  116. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_d2", typeid(float).name(), t_index,sizeof(float), 1 });
  117. t_index += sizeof(float)*1;
  118. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_clamp_motion1", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  119. t_index += sizeof(unsigned char)*1;
  120. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_clamp_motion2", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  121. t_index += sizeof(unsigned char)*1;
  122. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_clamp_motion3", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  123. t_index += sizeof(unsigned char)*1;
  124. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_clamp_motion4", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 1 });
  125. t_index += sizeof(unsigned char)*1;
  126. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_reserved66_99", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 34 });
  127. t_index += sizeof(unsigned char)*34;
  128. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_error_code", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 50 });
  129. t_index += sizeof(unsigned char)*50;
  130. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_warning_code", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 50 });
  131. t_index += sizeof(unsigned char)*50;
  132. t_variable_information_vector.push_back(Snap7_buf::Variable_information{"m_actual_error_description", typeid(unsigned char).name(), t_index,sizeof(unsigned char), 256 });
  133. t_index += sizeof(unsigned char)*256;
  134. t_snap7_buf.init(CATCHER_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_1, 0, sizeof(Catcher_status_from_plc_to_dispatch), t_variable_information_vector, Snap7_buf::NO_COMMUNICATION);
  135. m_receive_buf_map[2] = t_snap7_buf;
  136. t_snap7_buf.init(CATCHER_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_2, 0, sizeof(Catcher_status_from_plc_to_dispatch), t_variable_information_vector, Snap7_buf::LOOP_COMMUNICATION);
  137. m_receive_buf_map[3] = t_snap7_buf;
  138. return Snap7_communication_base::communication_init();
  139. }
  140. //反初始化 通信 模块。
  141. Error_manager Dispatch_communication::communication_uninit()
  142. {
  143. return Snap7_communication_base::communication_uninit();
  144. }
  145. //更新数据
  146. Error_manager Dispatch_communication::updata_receive_buf()
  147. {
  148. // return Error_code::SUCCESS;
  149. std::unique_lock<std::mutex> t_lock1(m_receive_buf_lock);
  150. std::unique_lock<std::mutex> t_lock2(m_data_lock);
  151. memcpy(&m_catcher_response_from_plc_to_dispatch[0], m_receive_buf_map[0].mp_buf_obverse, m_receive_buf_map[0].m_size);
  152. memcpy(&m_catcher_response_from_plc_to_dispatch[1], m_receive_buf_map[1].mp_buf_obverse, m_receive_buf_map[1].m_size);
  153. memcpy(&m_catcher_status_from_plc_to_dispatch[0], m_receive_buf_map[2].mp_buf_obverse, m_receive_buf_map[2].m_size);
  154. memcpy(&m_catcher_status_from_plc_to_dispatch[1], m_receive_buf_map[3].mp_buf_obverse, m_receive_buf_map[3].m_size);
  155. // int heat = m_catcher_status_from_plc_to_dispatch[1].m_heartbeat;
  156. // std::cout << " huli test :::: " << " 999999999 = " << heat << std::endl;
  157. return Error_code::SUCCESS;
  158. }
  159. Error_manager Dispatch_communication::updata_send_buf()
  160. {
  161. std::unique_lock<std::mutex> t_lock1(m_send_buf_lock);
  162. std::unique_lock<std::mutex> t_lock2(m_data_lock);
  163. m_catcher_request_from_dispatch_to_plc_for_data[1].m_reserved = 1;
  164. memcpy(m_send_buf_map[0].mp_buf_obverse, &m_catcher_request_from_dispatch_to_plc_for_data[0], m_send_buf_map[0].m_size);
  165. memcpy(m_send_buf_map[1].mp_buf_obverse, &m_catcher_request_from_dispatch_to_plc_for_data[1], m_send_buf_map[1].m_size);
  166. memcpy(m_send_buf_map[2].mp_buf_obverse, &m_catcher_request_from_dispatch_to_plc_for_key[0], m_send_buf_map[2].m_size);
  167. memcpy(m_send_buf_map[3].mp_buf_obverse, &m_catcher_request_from_dispatch_to_plc_for_key[1], m_send_buf_map[3].m_size);
  168. // Dispatch_communication::Catcher_request_from_dispatch_to_plc_for_key * tp_catcher_request_from_dispatch_to_plc_for_key =
  169. // & Dispatch_communication::get_instance_references().m_catcher_request_from_dispatch_to_plc_for_key[1];
  170. // int k1 = tp_catcher_request_from_dispatch_to_plc_for_key->m_request_key[0];
  171. // std::cout << " huli test :::: " << " k1 = " << k1 << std::endl;
  172. // int k2 = tp_catcher_request_from_dispatch_to_plc_for_key->m_request_key[1];
  173. // std::cout << " huli test :::: " << " k2 = " << k2 << std::endl;
  174. // std::cout << " huli test :::: " << " ***************************** = " << std::endl;
  175. return Error_code::SUCCESS;
  176. }