diff --git a/sources/GuiElements/StatusBar.cpp b/sources/GuiElements/StatusBar.cpp index e7e7082..40f7e50 100644 --- a/sources/GuiElements/StatusBar.cpp +++ b/sources/GuiElements/StatusBar.cpp @@ -31,7 +31,9 @@ #include #include -CStatusBar::CStatusBar(QGraphicsItem *Parent) +CStatusBar::CStatusBar(QGraphicsItem *Parent): + mCCModbusONOFF("",this), + mSEIModbusONOFF("",this) { setParentItem(Parent); @@ -45,6 +47,16 @@ CStatusBar::CStatusBar(QGraphicsItem *Parent) mZT1Status = mZT2Status = SB_ZT_INACTIVE_STATUS; mCCModbusState = SB_MODBUS_NOT_PRESENT; mSEIModbusState = SB_MODBUS_NOT_PRESENT; + + mCCModbusONOFF.setParentItem(this); + mCCModbusONOFF.setPos(760,0); + mCCModbusONOFF.LedOFF(); + mCCModbusONOFF.hide(); + + mSEIModbusONOFF.setParentItem(this); + mSEIModbusONOFF.setPos(845,0); + mSEIModbusONOFF.LedOFF(); + mSEIModbusONOFF.hide(); // QGraphicsRectItem *temprect = new QGraphicsRectItem(this); // temprect->setRect(boundingRect()); // temprect->show(); @@ -173,7 +185,7 @@ void CStatusBar::paint(QPainter *painter, const QStyleOptionGraphicsItem *option { painter->setPen(Qt::darkGreen); Text.clear(); - Text.sprintf("CC[Connecté]"); + Text.sprintf("CC:"); TextRect.adjust(5,0,0,0); painter->drawText(TextRect, Qt::AlignLeft, Text); TextRect.adjust(painter->fontMetrics().width(Text),0,0,0); @@ -182,7 +194,7 @@ void CStatusBar::paint(QPainter *painter, const QStyleOptionGraphicsItem *option { painter->setPen(Qt::red); Text.clear(); - Text.sprintf("CC[Déconnecté]"); + Text.sprintf("CC:"); TextRect.adjust(5,0,0,0); painter->drawText(TextRect, Qt::AlignLeft, Text); TextRect.adjust(painter->fontMetrics().width(Text),0,0,0); @@ -192,8 +204,8 @@ void CStatusBar::paint(QPainter *painter, const QStyleOptionGraphicsItem *option { painter->setPen(Qt::darkGreen); Text.clear(); - Text.sprintf("SEI[Connecté]"); - TextRect.adjust(20,0,0,0); + Text.sprintf("SEI:"); + TextRect.adjust(50,0,0,0); painter->drawText(TextRect, Qt::AlignLeft, Text); TextRect.adjust(painter->fontMetrics().width(Text),0,0,0); } @@ -201,8 +213,8 @@ void CStatusBar::paint(QPainter *painter, const QStyleOptionGraphicsItem *option { painter->setPen(Qt::red); Text.clear(); - Text.sprintf("SEI[Déconnecté]"); - TextRect.adjust(20,0,0,0); + Text.sprintf("SEI:"); + TextRect.adjust(50,0,0,0); painter->drawText(TextRect, Qt::AlignLeft, Text); TextRect.adjust(painter->fontMetrics().width(Text),0,0,0); } @@ -241,12 +253,43 @@ unsigned int CStatusBar::SetZT2Status(unsigned int Status) unsigned int CStatusBar::SetCCModbusState(unsigned int State) { mCCModbusState = State; + if(State == SB_MODBUS_CONNECTED) + { + mCCModbusONOFF.LedON(); + mCCModbusONOFF.show(); + } + else if(State == SB_MODBUS_DISCONNECTED) + { + mCCModbusONOFF.LedOFF(); + mCCModbusONOFF.show(); + } + else if(State == SB_MODBUS_NOT_PRESENT) + { + mCCModbusONOFF.hide(); + } + update(boundingRect()); + return RET_OK; } unsigned int CStatusBar::SetSEIModbusState(unsigned int State) { mSEIModbusState = State; + if(State == SB_MODBUS_CONNECTED) + { + mSEIModbusONOFF.LedON(); + mSEIModbusONOFF.show(); + } + else if(State == SB_MODBUS_DISCONNECTED) + { + mSEIModbusONOFF.LedOFF(); + mSEIModbusONOFF.show(); + } + else if(State == SB_MODBUS_NOT_PRESENT) + { + mSEIModbusONOFF.hide(); + } + update(boundingRect()); return RET_OK; } diff --git a/sources/GuiElements/StatusBar.h b/sources/GuiElements/StatusBar.h index f4e7125..68b65f4 100644 --- a/sources/GuiElements/StatusBar.h +++ b/sources/GuiElements/StatusBar.h @@ -30,6 +30,7 @@ #include "GlobalDefine.h" #include +#include "LedWidget.h" enum eZTStatus { @@ -66,6 +67,7 @@ private: unsigned int mZT1Status, mZT2Status; unsigned int mNbTrainsPass, mNbTriggers; unsigned int mCCModbusState, mSEIModbusState; + CLedWidget mCCModbusONOFF, mSEIModbusONOFF; }; #endif // STATUSBAR_H diff --git a/sources/Modbus/ModbusCCDefs.h b/sources/Modbus/ModbusCCDefs.h index e0e04d5..8e96464 100644 --- a/sources/Modbus/ModbusCCDefs.h +++ b/sources/Modbus/ModbusCCDefs.h @@ -84,10 +84,10 @@ //Incoming -#define MODBUS_CC_ZTC_ZT1_FLAG_MASK 0x0001 -#define MODBUS_CC_ZTC_ZT2_FLAG_MASK 0x0002 -#define MODBUS_CC_FCYCLE_ZT1_FLAG_MASK 0x0004 -#define MODBUS_CC_FCYCLE_ZT2_FLAG_MASK 0x0008 +#define MODBUS_CC_FCYCLE_ZT1_FLAG_MASK 0x0001 +#define MODBUS_CC_FCYCLE_ZT2_FLAG_MASK 0x0002 +#define MODBUS_CC_INHIBIT_ZT1_FLAG_MASK 0x0004 +#define MODBUS_CC_INHIBIT_ZT2_FLAG_MASK 0x0008 #define MODBUS_CC_DATA_BASE_REG_ADD 2028 #define MODBUS_CC_TABLE_DATA_SIZE 13 //Taille de la table = 28 registres @@ -95,11 +95,11 @@ #define MODBUS_CC_WATCHDOG_BASE_REG_ADD 2028 #define MODBUS_CC_AN_BASE_REG_ADD 2029 -#define MODBUS_CC_CLK_UPDATE_BASE_REG_ADD 2036 -#define MODUBS_CC_CLK_SEC_BASE_REG_ADD 2037 -#define MODUBS_CC_CLK_HR_MIN_BASE_REG_ADD 2038 -#define MODUBS_CC_CLK_MNT_DAY_BASE_REG_ADD 2039 -#define MODUBS_CC_CLK_YEAR_BASE_REG_ADD 2040 +#define MODBUS_CC_CLK_UPDATE_BASE_REG_ADD 2038 +#define MODUBS_CC_CLK_SEC_BASE_REG_ADD 2039 +#define MODUBS_CC_CLK_HR_MIN_BASE_REG_ADD 2040 +#define MODUBS_CC_CLK_MNT_DAY_BASE_REG_ADD 2041 +#define MODUBS_CC_CLK_YEAR_BASE_REG_ADD 2042 #endif // PROTOCOLDEFS_H diff --git a/sources/Modbus/ModbusRepository.cpp b/sources/Modbus/ModbusRepository.cpp index cb1c3d8..775ff49 100644 --- a/sources/Modbus/ModbusRepository.cpp +++ b/sources/Modbus/ModbusRepository.cpp @@ -116,6 +116,8 @@ int CModbusRepository::WriteHRData(quint16 StartAddress, quint16 Length, QByteAr } mMutex.unlock(); + emit RepoChanged(StartAddress,Length); + return RET_OK; } @@ -133,6 +135,8 @@ int CModbusRepository::WriteSingleReg(quint16 Address, quint16 Value) mHoldingRegisters[RegisterIndex].mRegistersData[DataIndex] = Value; mMutex.unlock(); + emit RepoChanged(Address,1); + return RET_OK; } @@ -152,6 +156,8 @@ int CModbusRepository::WriteMultipleRegs(quint16 StartAddress, QList Dat mHoldingRegisters[RegisterIndex].mRegistersData[DataIndex++] = Data.at(i); } mMutex.unlock(); + + emit RepoChanged(StartAddress,Data.size()); return RET_OK; } diff --git a/sources/Modbus/ModbusRepository.h b/sources/Modbus/ModbusRepository.h index 3c7acf9..d8ff6f4 100644 --- a/sources/Modbus/ModbusRepository.h +++ b/sources/Modbus/ModbusRepository.h @@ -14,8 +14,9 @@ public: }; -class CModbusRepository +class CModbusRepository : public QObject { + Q_OBJECT public: CModbusRepository(); @@ -28,11 +29,15 @@ public: int WriteHRData(quint16 StartAddress, quint16 Length, QByteArray Data); int WriteSingleReg(quint16 Address, quint16 Value); int WriteMultipleRegs(quint16 StartAddress, QList Data); + const QList *GetRepo(){return &mHoldingRegisters;} private: QList mHoldingRegisters; QReadWriteLock mMutex; +signals: + void RepoChanged(quint16 StartAddress, quint16 Length); + }; #endif // MODBUSREPOSITORY_H diff --git a/sources/Modbus/ModbusTKTransport.cpp b/sources/Modbus/ModbusTKTransport.cpp index 1cc51ea..1d525df 100644 --- a/sources/Modbus/ModbusTKTransport.cpp +++ b/sources/Modbus/ModbusTKTransport.cpp @@ -701,6 +701,6 @@ void CModbusTKTransport::ExecZT2SM() void CModbusTKTransport::ModbusCCUpdated() { qint16 ClearReg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD); - mZT1Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT1_FLAG_MASK | MODBUS_CC_ZTC_ZT1_FLAG_MASK)) != 0; - mZT2Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT2_FLAG_MASK | MODBUS_CC_ZTC_ZT2_FLAG_MASK)) != 0; + mZT1Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT1_FLAG_MASK)) != 0; + mZT2Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT2_FLAG_MASK)) != 0; }