#include "pdu_ctrl.h" #include #include #include #include #include #include #include #include #define READ_INI_STR(key, default_value) (settings.contains(key) ? settings.value(key).toString() : default_value) #define READ_INI_INT(key, default_value) (settings.contains(key) ? settings.value(key).toInt() : default_value) pdu_Ctrl* pdu_Ctrl::m_instance = nullptr; QMutex pdu_Ctrl::mutex; pdu_Ctrl::pdu_Ctrl(QObject *parent) : QObject(parent),m_PowerBoard(nullptr),nPowerBoardSize(0) { m_nModbusSelect=0; m_nModbusAddress=0;//从机地址 m_nModbusMSType=1;//主从 m_nSaveData=0; nViewShowType=widgetType_Main; nSettingType=0; nChidIndex=0; nChidPHIndex=0; m_nAngle=0; isT_ACType=0; pMsgq=nullptr; memset(nButtonStatus,0,sizeof(nButtonStatus)); // } pdu_Ctrl::~pdu_Ctrl() { m_db.close(); } void pdu_Ctrl::slot_setAngel(int nAngle) { if(m_pAngleCtrl&&m_pWidget) { //m_pAngleCtrl->setPos(size().width()/2, size().height()/2); //m_pAngleCtrl->transform(width() / 2, height() / 2); m_pAngleCtrl->setRotation(nAngle); m_nAngle=nAngle; if(nAngle==0||nAngle==180) { m_pWidget->resize(m_nWidth+2, m_nHeight+2); if(nAngle==0) { m_pAngleCtrl->setPos(0,0); }else { m_pAngleCtrl->setPos(m_pWidget->size().width()-2,m_pWidget->size().height()-2); } //QRect pRect=size(); qDebug()<<"x:"<geometry().x()<<"y:"<geometry().y()<<"Width:"<size().width()<<"Height:"<size().height(); }else { m_pWidget->resize(m_nHeight+2,m_nWidth+2); if(nAngle==90) { m_pAngleCtrl->setPos(m_nWidth-2,0); }else { m_pAngleCtrl->setPos(0,m_nHeight-2); } qDebug()<<"x:"<geometry().x()<<"y:"<geometry().y()<<"Width:"<size().width()<<"Height:"<size().height(); } m_pView->update(); } } void pdu_Ctrl::slot_ClickBtn(int nButton) { ButtonDown(nButton,BtnDown_C); } void pdu_Ctrl::slot_DClickBtn(int nButton) { ButtonDown(nButton,BtnDown_C); } void pdu_Ctrl::slot_LClickBtn(int nButton) { ButtonDown(nButton,BtnDown_L); } void pdu_Ctrl::slot_BtnClear(int nButton) { ButtonDown(nButton,BtnDown_Null); } void pdu_Ctrl::InitData(Widget *pWidget, QGraphicsProxyWidget *pProxy, QGraphicsView *pView,int nWidth, int nHeight) { m_pAngleCtrl = pProxy; m_pView = pView; m_pWidget = pWidget; m_nWidth= nWidth; m_nHeight = nHeight; } void pdu_Ctrl::ReadModbusInit() { QSettings settings("./AppConfig.ini",QSettings::IniFormat); m_nModbusAddress=READ_INI_INT("MODBUS/address",0); if(m_nModbusAddress>255||m_nModbusAddress<0) { m_nModbusAddress=0; } m_nModbusMSType=READ_INI_INT("MODBUS/MSType",1);//0:主机,1:从机 qDebug()<<"modbus Config m_nModbusMSType="<>::iterator iters=m_chOverMG.find(pData.nAddrID); if(iters!=m_chOverMG.end()) { QMap::iterator iter=iters.value().find(pData.nAddrCHID); if (iter!=iters.value().end()) { iter.value()=pData; }else { iters.value().insert(pData.nAddrCHID,pData); } }else { QMap mapNew; mapNew.insert(pData.nAddrCHID,pData); m_chOverMG.insert(pData.nAddrID,mapNew); } } PowerWarningInfo *pdu_Ctrl::getWarningData(int nAddrID, int nAddrCHID) { if(m_PowerBoard&&nPowerBoardSize>nAddrID&&nAddrID>=0)//判断在范围内 { if(m_PowerBoard[nAddrID].product_number>0&&AC_SINGLE_S_MAX_CHN_NUM>nAddrCHID&&nAddrCHID>=0) { return &m_PowerBoard[nAddrID]._PowerWarninginfo[nAddrCHID]; } } return nullptr; } void pdu_Ctrl::Main_UPBtnSet(BtnDownType nbtnType) { qDebug()<<"Main_UPBtnSet"; if(!m_pWidget) { return; } if(nbtnType==BtnDown_C) { qDebug()<<"pageUp"; m_pWidget->pageUp(); } } void pdu_Ctrl::Main_FunBtnSet(BtnDownType nbtnType) { qDebug()<<"Main_FunBtnSet"; if(nbtnType==BtnDown_C) { //在通道界面是显示三项通道 if(m_pWidget) { int nNowIndex=m_pWidget->getShowPagIndex(); qDebug()<<"NowIndex="<setShowPHIndex(1); ChangeView(widgetType_Main,4); } } break; case 4://PH通道界面返回CH通道界面 { m_pWidget->setShowPHIndex(0); ChangeView(widgetType_Main,lastACIndex); } break; #endif default://其他界面 //在显示主界面时是旋转窗口 m_nAngle+=90; m_nAngle==360?m_nAngle=0:m_nAngle; qDebug()<<"nAngle:"<CtrlBtnSet(0,m_nModbusAddress); m_pWidget->setSelectStatus(m_nModbusSelect); m_nSaveData=0; } //切换到modbus qDebug()<<"ChangeView"; //nViewShowType=widgetType_Setting; ChangeView(widgetType_Setting,0); } } void pdu_Ctrl::Main_DownBtnSet(BtnDownType nbtnType) { qDebug()<<"Main_DownBtnSet"; if(!m_pWidget) { return; } if(nbtnType==BtnDown_C) { m_pWidget->pageDown(); qDebug()<<"pageDown"; } } void pdu_Ctrl::Setting_UPBtnSet(BtnDownType nbtnType) { switch (nSettingType) { case settingMode_Modbus: { if(nbtnType==BtnDown_C) {//切换select if(m_pWidget) { switch (m_nModbusSelect) { case 0://address { m_nModbusAddress+=1; if(m_nModbusAddress>32)m_nModbusAddress=1; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress); }break; case 1://SAVE { //保存切换 m_nSaveData==0?m_nSaveData=1:m_nSaveData=0; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nSaveData); }break; case 2://主从 { //主从切换 m_nModbusMSType==0?m_nModbusMSType=1:m_nModbusMSType=0; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusMSType); }break; } } }else if(nbtnType==BtnDown_L) { switch (m_nModbusSelect) { case 0://address { m_nModbusAddress+=5; if(m_nModbusAddress>255)m_nModbusAddress=0; if(m_pWidget)m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress); }break; } } }break; case settingMode_IP: { }break; default: break; } } void pdu_Ctrl::Setting_FunBtnSet(BtnDownType nbtnType) { switch (nSettingType) { case settingMode_Modbus: { if(nbtnType==BtnDown_C) {//切换select if(m_pWidget) { if(m_nModbusSelect==1&&m_nSaveData==1)//短按 FUN 保存YES回到前台。 { SaveModbusInit(); ChangeView(widgetType_Main,0); }else { #ifdef RS485Type m_nModbusSelect==0?m_nModbusSelect=1:m_nModbusSelect=0; #endif m_pWidget->setSelectStatus(m_nModbusSelect); } } }else if(nbtnType==BtnDown_L) { ChangeView(widgetType_Main,0); } }break; case settingMode_IP: { }break; default: break; } } void pdu_Ctrl::Setting_DownBtnSet(BtnDownType nbtnType) { switch (nSettingType) { case settingMode_Modbus: { if(nbtnType==BtnDown_C) {//切换select if(m_pWidget) { switch (m_nModbusSelect) { case 0://address { m_nModbusAddress-=1; if(m_nModbusAddress<1)m_nModbusAddress=32; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress); }break; case 1://SAVE { //保存切换 m_nSaveData==0?m_nSaveData=1:m_nSaveData=0; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nSaveData); }break; case 2://主从 { //主从切换 m_nModbusMSType==0?m_nModbusMSType=1:m_nModbusMSType=0; m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusMSType); }break; } } }else if(nbtnType==BtnDown_L) { switch (m_nModbusSelect) { case 0://address { m_nModbusAddress-=5; if(m_nModbusAddress<0)m_nModbusAddress=255; if(m_pWidget)m_pWidget->CtrlBtnSet(m_nModbusSelect,m_nModbusAddress); }break; } } }break; case settingMode_IP: { }break; default: break; } } void pdu_Ctrl::ChangeView(WidgetType widgetType, int nIndex) { if(!m_pWidget) { return; } if(widgetType!=nViewShowType) { qDebug()<<"Widget->ChangeView"; m_pWidget->ChangeView(widgetType,0); nViewShowType=widgetType; }else { m_pWidget->ChangeView(widgetType,nIndex); } } void pdu_Ctrl::ResetAll() { #ifdef RS485IpType system("sh /mnt/UDISK/app/recovery.sh"); #else system("sh /opt/recovery.sh"); #endif } void pdu_Ctrl::RestartSys() { system("reboot"); } void pdu_Ctrl::setCHCtrl(int nCh, int nStatus) { if(pMsgq) { MsgData pMsgData; memset(&pMsgData,0,sizeof(MsgData)); if(nCh<=0) { pMsgData.CtrlType=Msg_All_Ctrl; pMsgData.nValue[0]=nStatus; }else { pMsgData.CtrlType=Msg_Ch_Ctrl; pMsgData.nValue[0]=nCh; pMsgData.nValue[1]=nStatus; } pMsgq->sendResponse(&pMsgData); } } void pdu_Ctrl::ButtonDown(int nButtonID, BtnDownType nDownType) { //规整按钮状态 switch (nButtonID) { case GPIO_KEY1://1按钮 nButtonStatus[0]=nDownType; break; case GPIO_KEY2: nButtonStatus[1]=nDownType; break; case GPIO_KEY3://3按钮 nButtonStatus[2]=nDownType; break; default: break; } qDebug()<<"Key1="<