#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(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(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(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(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); } }