#include "rs485_powerctrl.h"
|
|
RS485_PowerCtrl::RS485_PowerCtrl(const char *dev)
|
{
|
int ret = this->OpenDev(dev);
|
|
if (-1 == ret)
|
qDebug("Can't Open Port %s!!!\n", dev);
|
else qDebug("Open Port %s OK!\n", dev);
|
|
this->SetDevAttr(9600,8,2,'N');
|
|
fd = this->FD;
|
|
dev_addr = 1;
|
}
|
|
void RS485_PowerCtrl::setPowerCtrlCommParam(const quint8 devaddr)
|
{
|
dev_addr = devaddr;
|
}
|
|
void RS485_PowerCtrl::lock_RS485()
|
{
|
RS485_mutex.lock();
|
}
|
|
void RS485_PowerCtrl::unlock_RS485()
|
{
|
RS485_mutex.unlock();
|
}
|
|
void RS485_PowerCtrl::run()
|
{
|
RS485_RUN_EN = true;
|
|
if(fd < 0)
|
RS485_RUN_EN = false;
|
|
quint16 databuff[48] = {0};
|
quint16 realReadRegNum = MOD_TEST_DATA_REG_NUM; //实际读取寄存器数
|
|
MOD_TEST_DATA modTestData;
|
|
memset(&modTestData,0x00,sizeof(modTestData));
|
|
quint16 powerCtrlReadErrorCount = 0;
|
|
powerCtrlComm_OK = false;
|
|
while(true == RS485_RUN_EN)
|
{
|
lock_RS485();
|
|
if (CommOK == ModBusRead(dev_addr, MOD_TEST_DATA_ADDR_START, realReadRegNum, databuff, 300))
|
{
|
powerCtrlReadErrorCount = 0;
|
powerCtrlComm_OK = true;
|
|
quint16 tmpdata = 0;
|
for(quint16 j=0;j<realReadRegNum;j++)
|
{
|
tmpdata = databuff[j];
|
databuff[j] = Swap16(tmpdata);
|
}
|
|
memcpy(&modTestData,databuff,realReadRegNum*sizeof(quint16));
|
|
emit sendModTestDataSignal(modTestData);
|
|
/*
|
qDebug("ADCVdc:%.3f, ADCIdc:%.3f, ADCVref:%.3f, ADCTemp1:%.1f,ADCTemp2:%.1f",
|
(float)(modTestData.ADCVdc)/1000,(float)(modTestData.ADCIdc)/1000,
|
(float)(modTestData.ADCVref)/1000,(float)(modTestData.ADCTemp1)/10,
|
(float)(modTestData.ADCTemp2)/10);
|
*/
|
}
|
else{
|
if(powerCtrlReadErrorCount < 1000){
|
powerCtrlReadErrorCount++;
|
}
|
|
if(powerCtrlReadErrorCount>=100){
|
|
powerCtrlComm_OK = false;
|
|
powerCtrlReadErrorCount = 0;
|
|
memset(&modTestData,0x00,sizeof(modTestData));;
|
|
emit sendModTestDataSignal(modTestData);
|
}
|
}
|
|
msleep(100);
|
|
unlock_RS485();
|
|
msleep(500);
|
}
|
}
|