readmodbus.cpp 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #include "readmodbus.h"
  2. #include "modbus/modbus-private.h"
  3. #include "modbus/modbus.h"
  4. #include "QDebug"
  5. ReadModbus::ReadModbus( QObject *parent) :
  6. QObject(parent)
  7. {
  8. }
  9. void ReadModbus::set_main(MainWindow * parent)
  10. {
  11. m_parent =parent;
  12. }
  13. void ReadModbus::ReadData()
  14. {
  15. uint16_t data[128] = {0};
  16. while(1)
  17. {
  18. if(m_parent->get_suspend_flag())
  19. {
  20. QThread::msleep(1000);
  21. continue;
  22. }
  23. if(m_parent && m_parent->get_mb() && !m_parent->get_suspend_flag())
  24. {
  25. modbus_t *m_md = const_cast<modbus_t *>(m_parent->get_mb());
  26. int ret = modbus_read_registers(m_md,_SWITCH_T_AC_IN_L1_INFO,24,data);
  27. if(ret > 0)
  28. {
  29. m_parent->pdu_all_info.AllVoltage_L1 = ((data[1] << 16) + data[0] )/1000.0f; // Low byte
  30. m_parent->pdu_all_info.AllCurrent_L1 = ((data[3] << 16) + data[2] )/1000.0f; // Low byte
  31. m_parent->pdu_all_info.AllPower_L1 = ((data[5] << 16) + data[4] )/1000.0f; // Low byte
  32. m_parent->pdu_all_info.AllConsumption_L1 = ((data[7] << 16)+ data[6])/1000.0f; // Low byte
  33. m_parent->pdu_all_info.AllVoltage_L2 = ((data[9] << 16) + data[8] )/1000.0f; // Low byte
  34. m_parent->pdu_all_info.AllCurrent_L2 = ((data[11] << 16) + data[10] )/1000.0f; // Low byte
  35. m_parent-> pdu_all_info.AllPower_L2 = ((data[13] << 16) + data[12] )/1000.0f; // Low byte
  36. m_parent-> pdu_all_info.AllConsumption_L2 = ((data[15] << 16)+ data[14])/1000.0f; // Low byte
  37. m_parent-> pdu_all_info.AllVoltage_L3 = ((data[17] << 16) + data[16] )/1000.0f; // Low byte
  38. m_parent-> pdu_all_info.AllCurrent_L3 = ((data[19] << 16) + data[18] )/1000.0f; // Low byte
  39. m_parent-> pdu_all_info.AllPower_L3 = ((data[21] << 16) + data[20] )/1000.0f; // Low byte
  40. m_parent-> pdu_all_info.AllConsumption_L3 = ((data[23] << 16)+ data[22])/1000.0f; // Low byte
  41. //qDebug() << m_parent->pdu_all_info.AllVoltage_L1 << " " << m_parent->pdu_all_info.AllVoltage_L2 << " " << m_parent->pdu_all_info.AllVoltage_L3;
  42. }else
  43. {
  44. m_parent->pdu_all_info.AllVoltage_L1 =0; // Low byte
  45. m_parent->pdu_all_info.AllCurrent_L1 = 0; // Low byte
  46. m_parent->pdu_all_info.AllPower_L1 = 0; // Low byte
  47. m_parent->pdu_all_info.AllConsumption_L1 = 0; // Low byte
  48. m_parent->pdu_all_info.AllVoltage_L2 = 0; // Low byte
  49. m_parent->pdu_all_info.AllCurrent_L2 = 0; // Low byte
  50. m_parent->pdu_all_info.AllPower_L2 = 0; // Low byte
  51. m_parent->pdu_all_info.AllConsumption_L2 = 0; // Low byte
  52. m_parent->pdu_all_info.AllVoltage_L3 = 0; // Low byte
  53. m_parent->pdu_all_info.AllCurrent_L3 = 0; // Low byte
  54. m_parent->pdu_all_info.AllPower_L3 = 0; // Low byte
  55. m_parent->pdu_all_info.AllConsumption_L3 = 0; // Low byte
  56. }
  57. QThread::msleep(30);
  58. }
  59. for(int i = 0; i < MAX_CHANNELS;i++)
  60. {
  61. float VL1 = 0;
  62. float IL1 = 0;
  63. float PL1 = 0;
  64. float CL1 = 0;
  65. float VL2 = 0;
  66. float IL2 = 0;
  67. float PL2 = 0;
  68. float CL2 = 0;
  69. float VL3 = 0;
  70. float IL3 = 0;
  71. float PL3 = 0;
  72. float CL3 = 0;
  73. if(m_parent && m_parent->get_mb() && !m_parent->get_suspend_flag())
  74. {
  75. modbus_t *m_md = const_cast<modbus_t *>(m_parent->get_mb());
  76. int ret = modbus_read_registers(m_md,_SWITCH_T_AC_CH_PHASE_INFO+(i*30),30,data);
  77. if(ret > 0)
  78. {
  79. VL1=((data[1] << 16) + data[0] )/1000.0f;
  80. IL1=((data[3] << 16) + data[2] )/1000.0f;
  81. PL1=((data[5] << 16) + data[4] )/1000.0f;
  82. CL1=((data[7] << 16) + data[6] )/1000.0f;
  83. VL2=((data[11] << 16) + data[10] )/1000.0f;
  84. IL2=((data[13] << 16) + data[12] )/1000.0f;
  85. PL2=((data[15] << 16) + data[14] )/1000.0f;
  86. CL2=((data[17] << 16) + data[16] )/1000.0f;
  87. VL3=((data[21] << 16) + data[20] )/1000.0f;
  88. IL3=((data[23] << 16) + data[22] )/1000.0f;
  89. PL3=((data[25] << 16) + data[24] )/1000.0f;
  90. CL3=((data[27] << 16) + data[26] )/1000.0f;
  91. }
  92. if(VL1>=VL2 && VL1>=VL3)
  93. {
  94. m_parent->pdu_ch_info[i].CHVoltage=VL1;
  95. m_parent->pdu_ch_info[i].CHCurrent=IL1;
  96. m_parent->pdu_ch_info[i].CHPower=PL1;
  97. m_parent->pdu_ch_info[i].CHConsumption=CL1;
  98. }
  99. if(VL2>=VL1 && VL2>=VL3)
  100. {
  101. m_parent->pdu_ch_info[i].CHVoltage=VL2;
  102. m_parent->pdu_ch_info[i].CHCurrent=IL2;
  103. m_parent->pdu_ch_info[i].CHPower=PL2;
  104. m_parent->pdu_ch_info[i].CHConsumption=CL2;
  105. }
  106. if(VL3>=VL1 && VL3>=VL2)
  107. {
  108. m_parent->pdu_ch_info[i].CHVoltage=VL3;
  109. m_parent->pdu_ch_info[i].CHCurrent=IL3;
  110. m_parent->pdu_ch_info[i].CHPower=PL3;
  111. m_parent->pdu_ch_info[i].CHConsumption=CL3;
  112. }
  113. }
  114. QThread::msleep(20);
  115. }
  116. if(m_parent && m_parent->get_mb() && !m_parent->get_suspend_flag())
  117. {
  118. modbus_t *m_md = const_cast<modbus_t *>(m_parent->get_mb());
  119. int ret = modbus_read_registers(m_md,_SWITCH_T_AC_CH_STATUS,MAX_CHANNELS,data);
  120. if(ret > 0)
  121. {
  122. for(int i = 0; i < MAX_CHANNELS;i++)
  123. m_parent->pdu_ch_info[i].CHStatus= data[i] & 0xFFFF; // Low byte
  124. }else
  125. {
  126. for(int i = 0; i < MAX_CHANNELS;i++)
  127. m_parent->pdu_ch_info[i].CHStatus= 0; // Low byte
  128. }
  129. }
  130. QThread::msleep(30);
  131. if(m_parent && m_parent->get_mb() && !m_parent->get_suspend_flag())
  132. {
  133. modbus_t *m_md = const_cast<modbus_t *>(m_parent->get_mb());
  134. int ret = modbus_read_registers(m_md,_SWITCH_T_AC_SENSOR_INFO,16,data);
  135. if(ret > 0)
  136. {
  137. m_parent->pdu_all_info.Sensor_Temperature = ((data[1] << 16) + data[0] )/1000.0f;
  138. m_parent->pdu_all_info.Sensor_Humidity = ((data[3] << 16) + data[2] )/1000.0f;
  139. m_parent->pdu_all_info.Sensor_LeakFlag=((data[5] << 16) + data[4] );
  140. m_parent->pdu_all_info.Sensor_INTemperature = ((data[9] << 16)+ data[8])/1000.0f;
  141. m_parent->pdu_all_info.Sensor_IN_Pressure = ((data[11] << 16)+ data[10])/1000.0f;
  142. m_parent->pdu_all_info.Sensor_OUTTemperature = ((data[13] << 16)+ data[12])/1000.0f;
  143. m_parent->pdu_all_info.Sensor_OUT_Pressure = ((data[11] << 16)+ data[10])/1000.0f;
  144. }else
  145. {
  146. m_parent->pdu_all_info.Sensor_Temperature = 0;
  147. m_parent->pdu_all_info.Sensor_Humidity = 0;
  148. m_parent->pdu_all_info.Sensor_LeakFlag=0;
  149. m_parent->pdu_all_info.Sensor_INTemperature = 0;
  150. m_parent->pdu_all_info.Sensor_IN_Pressure = 0;
  151. m_parent->pdu_all_info.Sensor_OUTTemperature = 0;
  152. m_parent->pdu_all_info.Sensor_OUT_Pressure = 0;
  153. }
  154. }
  155. QThread::msleep(1000);
  156. }
  157. }