dispatch_communication.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. //往map通信缓存里面添加所需要的buf
  15. {
  16. std::unique_lock<std::mutex> t_lock(m_receive_buf_lock);
  17. Snap7_buf t_response(RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER, 0, sizeof(Response_from_plc_to_dispatch), Snap7_buf::LOOP_COMMUNICATION);
  18. m_receive_buf_map[0] = t_response;
  19. Snap7_buf t_plc_status(STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER, 0, sizeof(Status_from_plc_to_dispatch), Snap7_buf::LOOP_COMMUNICATION);
  20. m_receive_buf_map[1] = t_plc_status;
  21. }
  22. {
  23. std::unique_lock<std::mutex> t_lock(m_send_buf_lock);
  24. Snap7_buf t_request(REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER, 0, sizeof(Request_from_dispatch_to_plc), Snap7_buf::NO_COMMUNICATION);
  25. m_send_buf_map[0] = t_request;
  26. Snap7_buf t_dispatch_status(STATUS_FROM_DISPATCH_TO_PLC_DBNUMBER, 0, sizeof(Status_from_dispatch_to_plc), Snap7_buf::NO_COMMUNICATION);
  27. m_send_buf_map[1] = t_dispatch_status;
  28. }
  29. return Snap7_communication_base::communication_init();
  30. }
  31. //反初始化 通信 模块。
  32. Error_manager Dispatch_communication::communication_uninit()
  33. {
  34. return Snap7_communication_base::communication_uninit();
  35. }
  36. //更新数据
  37. Error_manager Dispatch_communication::updata_receive_buf()
  38. {
  39. std::unique_lock<std::mutex> t_lock1(m_receive_buf_lock);
  40. std::unique_lock<std::mutex> t_lock2(m_data_lock);
  41. memcpy(&m_response_from_plc_to_dispatch, m_receive_buf_map[0].mp_buf_obverse, m_receive_buf_map[0].m_size);
  42. memcpy(&m_status_from_plc_to_dispatch, m_receive_buf_map[1].mp_buf_obverse, m_receive_buf_map[1].m_size);
  43. std::cout << " huli test :::: " << " m_status_from_plc_to_dispatch.m_heartbeat = " << (int)m_status_from_plc_to_dispatch.m_heartbeat << std::endl;
  44. std::cout << " huli test :::: " << " m_response_from_plc_to_dispatch.m_command_key = " << m_response_from_plc_to_dispatch.m_command_key << std::endl;
  45. std::cout << " huli test :::: " << " m_status_from_plc_to_dispatch.m_elevator_coordinates = " << m_status_from_plc_to_dispatch.m_elevator_coordinates << std::endl;
  46. std::cout << " huli test :::: " << " m_status_from_plc_to_dispatch.m_carrier_coordinates = " << m_status_from_plc_to_dispatch.m_carrier_coordinates << std::endl;
  47. return Error_code::SUCCESS;
  48. }
  49. Error_manager Dispatch_communication::updata_send_buf()
  50. {
  51. std::unique_lock<std::mutex> t_lock1(m_send_buf_lock);
  52. std::unique_lock<std::mutex> t_lock2(m_data_lock);
  53. memcpy(m_request_from_dispatch_to_plc.m_command_key, "from_dispatch_to_plc_123", 20);
  54. m_status_from_dispatch_to_plc.m_year = (unsigned short)20;
  55. m_status_from_dispatch_to_plc.m_day = 20;
  56. m_status_from_dispatch_to_plc.m_heartbeat = 20;
  57. memcpy(m_send_buf_map[0].mp_buf_obverse, &m_request_from_dispatch_to_plc, m_send_buf_map[0].m_size);
  58. m_send_buf_map[0].set_communication_mode(Snap7_buf::ONCE_COMMUNICATION);
  59. memcpy(m_send_buf_map[1].mp_buf_obverse, &m_status_from_dispatch_to_plc, m_send_buf_map[1].m_size);
  60. m_send_buf_map[1].set_communication_mode(Snap7_buf::ONCE_COMMUNICATION);
  61. return Error_code::SUCCESS;
  62. }