#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=100){ powerCtrlComm_OK = false; powerCtrlReadErrorCount = 0; memset(&modTestData,0x00,sizeof(modTestData));; emit sendModTestDataSignal(modTestData); } } msleep(100); unlock_RS485(); msleep(500); } }