diff --git a/sources/GuiElements/ModbusSettingsPage.cpp b/sources/GuiElements/ModbusSettingsPage.cpp index c51077b..bdebf9f 100644 --- a/sources/GuiElements/ModbusSettingsPage.cpp +++ b/sources/GuiElements/ModbusSettingsPage.cpp @@ -75,7 +75,7 @@ CModbusSettingsPage::CModbusSettingsPage(QGraphicsWidget *Parent) Dot->setFont(font); - int IpSettingsPosx = 120, IpSettingsPosy = 200; + int IpSettingsPosx = 100, IpSettingsPosy = 200; Title = new QGraphicsTextItem("Adresse IP",this); font.setPointSize(16); Title->setFont(font); @@ -127,23 +127,28 @@ CModbusSettingsPage::CModbusSettingsPage(QGraphicsWidget *Parent) Proxy->setWidget(mUseModbusChkBox); Proxy->setPos(100,100); + IpSettingsPosx = 100; + IpSettingsPosy += 50; + font.setPointSize(14); + mModbusCCLinkState = new QGraphicsTextItem("Lien Modbus CC: Non établi",this); + mModbusCCLinkState->setFont(font); + mModbusCCLinkState->setPos(IpSettingsPosx+30,IpSettingsPosy); + mCCModbusLinkLED = new QGraphicsPixmapItem(QPixmap("./Images/red-led-on-md.png").scaled(25,25),this); + mCCModbusLinkLED->setPos(IpSettingsPosx,IpSettingsPosy+5); + + IpSettingsPosy += 30; + mModbusCCConnectionState = new QGraphicsTextItem("Connection HPC: DÉCONNECTÉE",this); + mModbusCCConnectionState->setFont(font); + mModbusCCConnectionState->setPos(IpSettingsPosx+30,IpSettingsPosy); + mCCConnectionLED = new QGraphicsPixmapItem(QPixmap("./Images/red-led-on-md.png").scaled(25,25),this); + mCCConnectionLED->setPos(IpSettingsPosx,IpSettingsPosy+5); -// mCalendarWidget = new QCalendarWidget(); -// Proxy->setWidget(mCalendarWidget); -// Proxy->setPos(100,150); QGraphicsRectItem *Frame = new QGraphicsRectItem(80,70,600,400,this); QPen FramePen; FramePen.setWidth(3); Frame->setPen(FramePen); - - -// Title = new QGraphicsTextItem("Seuil Pneu de Guidage",this); -// Title->setFont(font); -// Title->setPos(270,400); -// Frame = new QGraphicsRectItem(80,405,600,175,this); -// Frame->setPen(FramePen); } @@ -214,6 +219,31 @@ int CModbusSettingsPage::SetActualSettings(bool UseModbus, QHostAddress CCHostAd } +void CModbusSettingsPage::ModbusCCConnected(qint32 LocalIP, qint32 RemoteIP) +{ + mCCConnectionLED->setPixmap(QPixmap("./Images/green-led-on-md.png").scaled(25,25)); + mModbusCCConnectionState->setPlainText(QString("Connection HPC: Connectée. \nIP: Local[%1] - HPC[%2]").arg(QHostAddress(LocalIP).toString()).arg(QHostAddress(RemoteIP).toString())); +} + +void CModbusSettingsPage::ModbusCCDisconnected() +{ + mCCConnectionLED->setPixmap(QPixmap("./Images/red-led-on-md.png").scaled(25,25)); + mModbusCCConnectionState->setPlainText("Connection HPC: DÉCONNECTÉE"); +} + +void CModbusSettingsPage::ModbusCCLinkUP() +{ + mCCModbusLinkLED->setPixmap(QPixmap("./Images/green-led-on-md.png").scaled(25,25)); + mModbusCCLinkState->setPlainText("Lien Modbus CC: Établi"); +} + +void CModbusSettingsPage::ModbusCCLinkDown() +{ + mCCModbusLinkLED->setPixmap(QPixmap("./Images/red-led-on-md.png").scaled(25,25)); + mModbusCCLinkState->setPlainText("Lien Modbus CC: Non établi"); +} + + //Grab the mouse if the user clicks outside buttons void CModbusSettingsPage::mousePressEvent(QGraphicsSceneMouseEvent *event) { diff --git a/sources/GuiElements/ModbusSettingsPage.h b/sources/GuiElements/ModbusSettingsPage.h index 04ec3a9..d3032b9 100644 --- a/sources/GuiElements/ModbusSettingsPage.h +++ b/sources/GuiElements/ModbusSettingsPage.h @@ -39,6 +39,7 @@ #include #include #include +#include class CZoneTest; @@ -65,11 +66,17 @@ private: QSpinBox *mIPChunk1, *mIPChunk2, *mIPChunk3, *mIPChunk4; QString mCurIP; QCheckBox *mUseModbusChkBox; + QGraphicsTextItem *mModbusCCConnectionState, *mModbusCCLinkState; + QGraphicsPixmapItem *mCCConnectionLED, *mCCModbusLinkLED; public slots: void ButtonClicked(CTextButtonWidget *); + void ModbusCCConnected(qint32 LocalIP, qint32 RemoteIP); + void ModbusCCDisconnected(); + void ModbusCCLinkUP(); + void ModbusCCLinkDown(); }; diff --git a/sources/Modbus/ModbusCCMgr.cpp b/sources/Modbus/ModbusCCMgr.cpp index 93450e5..a942747 100644 --- a/sources/Modbus/ModbusCCMgr.cpp +++ b/sources/Modbus/ModbusCCMgr.cpp @@ -111,9 +111,11 @@ void CModbusCCMgr::NewModbusConnection() CZTLog::instance()->AddLogString(QString("Connection Modbus avec la CC établie. IP locale [%1] - IP HPC [%2]").arg(mModbusTCPSocketHandle->localAddress().toString()).arg(mModbusTCPSocketHandle->peerAddress().toString()),true); mZTWatchdogTimer->start(); mCCWatchdogTimer->start(MODBUS_CC_WATCHDOG_TIMEOUT*2); //Allow twice the time for the first watchdog reset. - mCCLinkState = true; + mCCLinkState = false; + mCCWatchdogState = 0xBEEF; - emit ModbusCCConnected(); + emit ModbusCCConnected(mModbusTCPSocketHandle->localAddress().toIPv4Address(),mModbusTCPSocketHandle->peerAddress().toIPv4Address()); + //emit ModbusCCLinkRecovered(); } } @@ -123,6 +125,7 @@ void CModbusCCMgr::ConnectionLost() mZTWatchdogTimer->stop(); mCCWatchdogTimer->stop(); emit ModbusCCDisconnected(); + emit ModbusCCLinkLost(); ResetCCRepository(); CZTLog::instance()->AddLogString(QString("Connection Modbus (Ethernet) avec la CC rompue."),true); } @@ -147,7 +150,7 @@ void CModbusCCMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length if(mCCLinkState == false) { mCCLinkState = true; - emit ModbusCCConnected(); + emit ModbusCCLinkRecovered(); CZTLog::instance()->AddLogString("Lien de communication (Watchdog) avec la CC rétabli",true); } } @@ -166,22 +169,22 @@ void CModbusCCMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length quint8 Secs, Minutes, Hours, Month, Day; quint8 temp; temp = (quint8)(DateTime.at(0) >> 8); - Secs = BCDToIntByte(temp); + Secs = BCDToDecByte(temp); temp = (quint8)(DateTime.at(1) & 0x00FF); - Minutes = BCDToIntByte(temp); + Minutes = BCDToDecByte(temp); temp = (qint8)(DateTime.at(1) >> 8); - Hours = BCDToIntByte(temp); + Hours = BCDToDecByte(temp); temp = (quint8)(DateTime.at(2) & 0x00FF); - Day = BCDToIntByte(temp); + Day = BCDToDecByte(temp); temp = (quint8)(DateTime.at(2) >> 8); - Month = BCDToIntByte(temp); + Month = BCDToDecByte(temp); quint16 Year = DateTime.at(3); - Year = BCDToIntWord(Year); + Year = BCDToDecWord(Year); qDebug("Secs [%d], Minutes[%d], Hours[%d], Month[%d], Day[%d], Year[%d]",Secs,Minutes,Hours,Month,Day,Year); @@ -225,7 +228,7 @@ void CModbusCCMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length emit RepoHasChanged(); } -quint8 CModbusCCMgr::BCDToIntByte(const quint8 byte) +quint8 CModbusCCMgr::BCDToDecByte(const quint8 byte) { quint8 out = 0; quint8 temp = 0; @@ -238,7 +241,7 @@ quint8 CModbusCCMgr::BCDToIntByte(const quint8 byte) } -quint16 CModbusCCMgr::BCDToIntWord(const quint16 word) +quint16 CModbusCCMgr::BCDToDecWord(const quint16 word) { quint16 out = 0; quint16 temp = 0; @@ -265,8 +268,10 @@ void CModbusCCMgr::ModbusCCWatchdogTimeout() { CZTLog::instance()->AddLogString("Perte du lien de communication avec la CC: Watchdog CC Expiré",true); ResetCCRepository(); - emit ModbusCCDisconnected(); +// emit ModbusCCDisconnected(); + emit ModbusCCLinkLost(); mCCLinkState = false; + mCCWatchdogState = 0xBEEF; } void CModbusCCMgr::ModbusZTWatchdogTimeout() @@ -303,9 +308,6 @@ int CModbusCCMgr::ResetCCRepository() mModbusRepo->WriteMultipleRegs(MODBUS_CC_ZT1_TRAIN_ID_1_REG_ADD,ResetValues); //Do not clear the TK (write) regisers, they will clear themselves when needed. - - - return RET_OK; } diff --git a/sources/Modbus/ModbusCCMgr.h b/sources/Modbus/ModbusCCMgr.h index fea6f12..79f4689 100644 --- a/sources/Modbus/ModbusCCMgr.h +++ b/sources/Modbus/ModbusCCMgr.h @@ -64,12 +64,12 @@ private: bool mZTWatchdogEnabled; int ResetCCRepository(); - quint8 BCDToIntByte(const quint8 byte); - quint16 BCDToIntWord(const quint16 word); + quint8 BCDToDecByte(const quint8 byte); + quint16 BCDToDecWord(const quint16 word); signals: void RepoHasChanged(); - void ModbusCCConnected(); + void ModbusCCConnected(qint32 LocalIP, qint32 RemoteIP); void ModbusCCDisconnected(); void ModbusCCLinkLost(); void ModbusCCLinkRecovered(); diff --git a/sources/Zonetest.cpp b/sources/Zonetest.cpp index c370e9d..537e73b 100644 --- a/sources/Zonetest.cpp +++ b/sources/Zonetest.cpp @@ -576,9 +576,13 @@ unsigned int CZoneTest::InitZT() mZTStateMachine->BindModbusCCMgrPtr(mModbusCCMgr); // connect(mModbusCCMgr,SIGNAL(RepoHasChanged()),mZTStateMachine,SLOT(ModbusCCANUpdate())); - connect(mModbusCCMgr,SIGNAL(ModbusCCConnected()),panel.mZTMainPage,SLOT(ModbusCCConnected())); - connect(mModbusCCMgr,SIGNAL(ModbusCCDisconnected()),panel.mZTMainPage,SLOT(ModbusCCDisconnected())); + connect(mModbusCCMgr,SIGNAL(ModbusCCLinkRecovered()),panel.mZTMainPage,SLOT(ModbusCCConnected())); + connect(mModbusCCMgr,SIGNAL(ModbusCCLinkLost()),panel.mZTMainPage,SLOT(ModbusCCDisconnected())); connect(mModbusCCMgr,SIGNAL(ModbusDateTimeReceived(QDateTime*)),this,SLOT(ModbusDateTimeUpdate(QDateTime*))); + connect(mModbusCCMgr,SIGNAL(ModbusCCConnected(qint32,qint32)),panel.mModbusSettingsPage,SLOT(ModbusCCConnected(qint32,qint32))); + connect(mModbusCCMgr,SIGNAL(ModbusCCDisconnected()),panel.mModbusSettingsPage,SLOT(ModbusCCDisconnected())); + connect(mModbusCCMgr,SIGNAL(ModbusCCLinkLost()),panel.mModbusSettingsPage,SLOT(ModbusCCLinkDown())); + connect(mModbusCCMgr,SIGNAL(ModbusCCLinkRecovered()),panel.mModbusSettingsPage,SLOT(ModbusCCLinkUP())); panel.mZTMainPage->ModbusCCDisconnected(); panel.mZTMainPage->mZT1Stats->Init(true); panel.mZTMainPage->mZT2Stats->Init(true);