| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- #include "readmodbus.h"
- #include "modbus/modbus-private.h"
- #include "modbus/modbus.h"
- #include "QDebug"
- ReadModbus::ReadModbus( QObject *parent) :
- QObject(parent)
- {
- }
- void ReadModbus::set_main(MainWindow * parent)
- {
- m_parent =parent;
- }
- void ReadModbus::ReadData()
- {
- uint16_t data[128] = {0};
- while(1)
- {
- if(m_parent->get_suspend_flag())
- {
- QThread::msleep(1000);
- continue;
- }
- if(m_parent && m_parent->get_mb() && !m_parent->get_suspend_flag())
- {
- modbus_t *m_md = const_cast<modbus_t *>(m_parent->get_mb());
- int ret = modbus_read_registers(m_md,_SWITCH_T_AC_IN_L1_INFO,24,data);
- if(ret > 0)
- {
- m_parent->pdu_all_info.AllVoltage_L1 = ((data[1] << 16) + data[0] )/1000.0f; // Low byte
- m_parent->pdu_all_info.AllCurrent_L1 = ((data[3] << 16) + data[2] )/1000.0f; // Low byte
- m_parent->pdu_all_info.AllPower_L1 = ((data[5] << 16) + data[4] )/1000.0f; // Low byte
- m_parent->pdu_all_info.AllConsumption_L1 = ((data[7] << 16)+ data[6])/1000.0f; // Low byte
- m_parent->pdu_all_info.AllVoltage_L2 = ((data[9] << 16) + data[8] )/1000.0f; // Low byte
- m_parent->pdu_all_info.AllCurrent_L2 = ((data[11] << 16) + data[10] )/1000.0f; // Low byte
- m_parent-> pdu_all_info.AllPower_L2 = ((data[13] << 16) + data[12] )/1000.0f; // Low byte
- m_parent-> pdu_all_info.AllConsumption_L2 = ((data[15] << 16)+ data[14])/1000.0f; // Low byte
- m_parent-> pdu_all_info.AllVoltage_L3 = ((data[17] << 16) + data[16] )/1000.0f; // Low byte
- m_parent-> pdu_all_info.AllCurrent_L3 = ((data[19] << 16) + data[18] )/1000.0f; // Low byte
- m_parent-> pdu_all_info.AllPower_L3 = ((data[21] << 16) + data[20] )/1000.0f; // Low byte
- m_parent-> pdu_all_info.AllConsumption_L3 = ((data[23] << 16)+ data[22])/1000.0f; // Low byte
- //qDebug() << m_parent->pdu_all_info.AllVoltage_L1 << " " << m_parent->pdu_all_info.AllVoltage_L2 << " " << m_parent->pdu_all_info.AllVoltage_L3;
- }else
- {
- m_parent->pdu_all_info.AllVoltage_L1 =0; // Low byte
- m_parent->pdu_all_info.AllCurrent_L1 = 0; // Low byte
- m_parent->pdu_all_info.AllPower_L1 = 0; // Low byte
- m_parent->pdu_all_info.AllConsumption_L1 = 0; // Low byte
- m_parent->pdu_all_info.AllVoltage_L2 = 0; // Low byte
- m_parent->pdu_all_info.AllCurrent_L2 = 0; // Low byte
- m_parent->pdu_all_info.AllPower_L2 = 0; // Low byte
- m_parent->pdu_all_info.AllConsumption_L2 = 0; // Low byte
- m_parent->pdu_all_info.AllVoltage_L3 = 0; // Low byte
- m_parent->pdu_all_info.AllCurrent_L3 = 0; // Low byte
- m_parent->pdu_all_info.AllPower_L3 = 0; // Low byte
- m_parent->pdu_all_info.AllConsumption_L3 = 0; // Low byte
- }
- QThread::msleep(30);
- }
- for(int i = 0; i < MAX_CHANNELS;i++)
- {
- float VL1 = 0;
- float IL1 = 0;
- float PL1 = 0;
- float CL1 = 0;
- float VL2 = 0;
- float IL2 = 0;
- float PL2 = 0;
- float CL2 = 0;
- float VL3 = 0;
- float IL3 = 0;
- float PL3 = 0;
- float CL3 = 0;
- if(m_parent && m_parent->get_mb() && !m_parent->get_suspend_flag())
- {
- modbus_t *m_md = const_cast<modbus_t *>(m_parent->get_mb());
- int ret = modbus_read_registers(m_md,_SWITCH_T_AC_CH_PHASE_INFO+(i*30),30,data);
- if(ret > 0)
- {
- VL1=((data[1] << 16) + data[0] )/1000.0f;
- IL1=((data[3] << 16) + data[2] )/1000.0f;
- PL1=((data[5] << 16) + data[4] )/1000.0f;
- CL1=((data[7] << 16) + data[6] )/1000.0f;
- VL2=((data[11] << 16) + data[10] )/1000.0f;
- IL2=((data[13] << 16) + data[12] )/1000.0f;
- PL2=((data[15] << 16) + data[14] )/1000.0f;
- CL2=((data[17] << 16) + data[16] )/1000.0f;
- VL3=((data[21] << 16) + data[20] )/1000.0f;
- IL3=((data[23] << 16) + data[22] )/1000.0f;
- PL3=((data[25] << 16) + data[24] )/1000.0f;
- CL3=((data[27] << 16) + data[26] )/1000.0f;
- }
- if(VL1>=VL2 && VL1>=VL3)
- {
- m_parent->pdu_ch_info[i].CHVoltage=VL1;
- m_parent->pdu_ch_info[i].CHCurrent=IL1;
- m_parent->pdu_ch_info[i].CHPower=PL1;
- m_parent->pdu_ch_info[i].CHConsumption=CL1;
- }
- if(VL2>=VL1 && VL2>=VL3)
- {
- m_parent->pdu_ch_info[i].CHVoltage=VL2;
- m_parent->pdu_ch_info[i].CHCurrent=IL2;
- m_parent->pdu_ch_info[i].CHPower=PL2;
- m_parent->pdu_ch_info[i].CHConsumption=CL2;
- }
- if(VL3>=VL1 && VL3>=VL2)
- {
- m_parent->pdu_ch_info[i].CHVoltage=VL3;
- m_parent->pdu_ch_info[i].CHCurrent=IL3;
- m_parent->pdu_ch_info[i].CHPower=PL3;
- m_parent->pdu_ch_info[i].CHConsumption=CL3;
- }
- }
- QThread::msleep(20);
- }
- if(m_parent && m_parent->get_mb() && !m_parent->get_suspend_flag())
- {
- modbus_t *m_md = const_cast<modbus_t *>(m_parent->get_mb());
- int ret = modbus_read_registers(m_md,_SWITCH_T_AC_CH_STATUS,MAX_CHANNELS,data);
- if(ret > 0)
- {
- for(int i = 0; i < MAX_CHANNELS;i++)
- m_parent->pdu_ch_info[i].CHStatus= data[i] & 0xFFFF; // Low byte
- }else
- {
- for(int i = 0; i < MAX_CHANNELS;i++)
- m_parent->pdu_ch_info[i].CHStatus= 0; // Low byte
- }
- }
- QThread::msleep(30);
- if(m_parent && m_parent->get_mb() && !m_parent->get_suspend_flag())
- {
- modbus_t *m_md = const_cast<modbus_t *>(m_parent->get_mb());
- int ret = modbus_read_registers(m_md,_SWITCH_T_AC_SENSOR_INFO,16,data);
- if(ret > 0)
- {
- m_parent->pdu_all_info.Sensor_Temperature = ((data[1] << 16) + data[0] )/1000.0f;
- m_parent->pdu_all_info.Sensor_Humidity = ((data[3] << 16) + data[2] )/1000.0f;
- m_parent->pdu_all_info.Sensor_LeakFlag=((data[5] << 16) + data[4] );
- m_parent->pdu_all_info.Sensor_INTemperature = ((data[9] << 16)+ data[8])/1000.0f;
- m_parent->pdu_all_info.Sensor_IN_Pressure = ((data[11] << 16)+ data[10])/1000.0f;
- m_parent->pdu_all_info.Sensor_OUTTemperature = ((data[13] << 16)+ data[12])/1000.0f;
- m_parent->pdu_all_info.Sensor_OUT_Pressure = ((data[11] << 16)+ data[10])/1000.0f;
- }else
- {
- m_parent->pdu_all_info.Sensor_Temperature = 0;
- m_parent->pdu_all_info.Sensor_Humidity = 0;
- m_parent->pdu_all_info.Sensor_LeakFlag=0;
- m_parent->pdu_all_info.Sensor_INTemperature = 0;
- m_parent->pdu_all_info.Sensor_IN_Pressure = 0;
- m_parent->pdu_all_info.Sensor_OUTTemperature = 0;
- m_parent->pdu_all_info.Sensor_OUT_Pressure = 0;
- }
- }
- QThread::msleep(1000);
- }
- }
|