From 32a2e9bccd0907e5d9161fa263cf12ecaca5b623 Mon Sep 17 00:00:00 2001 From: zonetest Date: Wed, 23 Aug 2017 14:41:35 -0400 Subject: [PATCH] Implement train type & info --- sources/Modbus/ModbusCCDefs.h | 12 +++- sources/Modbus/ModbusCCMgr.cpp | 86 +++++++++++++++++++++++++++++ sources/Modbus/ModbusCCMgr.h | 10 ++++ sources/Modbus/ModbusRepository.cpp | 3 + sources/Modbus/ModbusRepository.h | 1 + sources/ZTData.cpp | 2 +- sources/ZTData.h | 2 + sources/ZTStateMachine.h | 2 + 8 files changed, 115 insertions(+), 3 deletions(-) diff --git a/sources/Modbus/ModbusCCDefs.h b/sources/Modbus/ModbusCCDefs.h index f03fa71..c484b62 100644 --- a/sources/Modbus/ModbusCCDefs.h +++ b/sources/Modbus/ModbusCCDefs.h @@ -47,7 +47,7 @@ //Register addressing //Outgoing #define MODBUS_ZT_DATA_BASE_REG 2000 -#define MODBUS_ZT_TABLE_DATA_SIZE 28 //Taille de la table = 28 registres +#define MODBUS_ZT_TABLE_DATA_SIZE 28 //Taille de la table en écriture = 28 registres (2000 à 2027) #define MODBUS_ZT1_ALARM_DATA_BASE_REG_ADD 2000 #define MODBUS_ZT2_ALARM_DATA_BASE_REG_ADD 2017 @@ -91,11 +91,19 @@ #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 +#define MODBUS_CC_TABLE_DATA_SIZE 15 //Taille de la table en lecture = 15 registres (2028 à 2042) #define MODBUS_CC_WATCHDOG_BASE_REG_ADD 2028 #define MODBUS_CC_AN_BASE_REG_ADD 2029 +#define MODBUS_CC_ZT1_TRAIN_TYPE_REG_ADD 2030 +#define MODBUS_CC_ZT2_TRAIN_TYPE_REG_ADD 2031 +#define MODBUS_CC_ZT1_TRAIN_ID_1_REG_ADD 2032 +#define MODBUS_CC_ZT1_TRAIN_ID_2_REG_ADD 2033 +#define MODBUS_CC_ZT1_TRAIN_ID_3_REG_ADD 2034 +#define MODBUS_CC_ZT2_TRAIN_ID_1_REG_ADD 2035 +#define MODBUS_CC_ZT2_TRAIN_ID_2_REG_ADD 2036 +#define MODBUS_CC_ZT2_TRAIN_ID_3_REG_ADD 2037 #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 diff --git a/sources/Modbus/ModbusCCMgr.cpp b/sources/Modbus/ModbusCCMgr.cpp index 65aec0e..5f7a7cd 100644 --- a/sources/Modbus/ModbusCCMgr.cpp +++ b/sources/Modbus/ModbusCCMgr.cpp @@ -132,6 +132,8 @@ void CModbusCCMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length } + + emit RepoHasChanged(); } @@ -160,3 +162,87 @@ void CModbusCCMgr::ModbusZTWatchdogTimeout() mZTWatchdog = 1; } } + +bool CModbusCCMgr::GetZT1InhibitionFlag() +{ + bool OK = false; + qint16 Reg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD,&OK); + + if(OK) + { + if((Reg & MODBUS_CC_INHIBIT_ZT1_FLAG_MASK) != 0) + { + return true; + } + } + + return false; +} + +bool CModbusCCMgr::GetZT2InhibitionFlag() +{ + bool OK = false; + qint16 Reg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD,&OK); + + if(OK) + { + if((Reg & MODBUS_CC_INHIBIT_ZT2_FLAG_MASK) != 0) + { + return true; + } + } + + return false; +} + + +QList CModbusCCMgr::GetZT1TrainComposition() +{ + bool OK = false; + QList Compo; + Compo = mModbusRepo->GetRegs(MODBUS_CC_ZT1_TRAIN_ID_1_REG_ADD,3,&OK); + + if(OK == false) + { + Compo << 0 << 0 << 0; + } + + return Compo; +} + +QList CModbusCCMgr::GetZT2TrainComposition() +{ + bool OK = false; + QList Compo; + Compo = mModbusRepo->GetRegs(MODBUS_CC_ZT2_TRAIN_ID_1_REG_ADD,3,&OK); + + if(OK == false) + { + Compo << 0 << 0 << 0; + } + + return Compo; +} + + +qint16 CModbusCCMgr::GetZT1TrainType() +{ + bool OK = false; + qint16 Reg = mModbusRepo->GetSingleReg(MODBUS_CC_ZT1_TRAIN_TYPE_REG_ADD,&OK); + if(OK) + { + return Reg; + } + return 0; +} + +qint16 CModbusCCMgr::GetZT2TrainType() +{ + bool OK = false; + qint16 Reg = mModbusRepo->GetSingleReg(MODBUS_CC_ZT2_TRAIN_TYPE_REG_ADD,&OK); + if(OK) + { + return Reg; + } + return 0; +} diff --git a/sources/Modbus/ModbusCCMgr.h b/sources/Modbus/ModbusCCMgr.h index 10b8b49..9eec3dd 100644 --- a/sources/Modbus/ModbusCCMgr.h +++ b/sources/Modbus/ModbusCCMgr.h @@ -21,6 +21,16 @@ public: virtual void RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length); virtual void ModbusRequestException(quint8 ExceptionCode, quint8 FctCode); + + + + //Helper functions + QList GetZT1TrainComposition(); + QList GetZT2TrainComposition(); + bool GetZT1InhibitionFlag(); + bool GetZT2InhibitionFlag(); + qint16 GetZT1TrainType(); + qint16 GetZT2TrainType(); private: QTcpServer *mModbusServer; diff --git a/sources/Modbus/ModbusRepository.cpp b/sources/Modbus/ModbusRepository.cpp index 775ff49..7326280 100644 --- a/sources/Modbus/ModbusRepository.cpp +++ b/sources/Modbus/ModbusRepository.cpp @@ -204,6 +204,7 @@ quint16 CModbusRepository::GetSingleReg(quint16 Address, bool *OK) return Data; } + CHRDataMap::CHRDataMap(quint16 StartAddress, quint16 Length) { mStartAddress = StartAddress; @@ -215,3 +216,5 @@ CHRDataMap::CHRDataMap(quint16 StartAddress, quint16 Length) mEndAddress = StartAddress + Length - 1; } + + diff --git a/sources/Modbus/ModbusRepository.h b/sources/Modbus/ModbusRepository.h index d8ff6f4..5ef5116 100644 --- a/sources/Modbus/ModbusRepository.h +++ b/sources/Modbus/ModbusRepository.h @@ -31,6 +31,7 @@ public: int WriteMultipleRegs(quint16 StartAddress, QList Data); const QList *GetRepo(){return &mHoldingRegisters;} + private: QList mHoldingRegisters; QReadWriteLock mMutex; diff --git a/sources/ZTData.cpp b/sources/ZTData.cpp index 6b8b5e1..2670f9b 100644 --- a/sources/ZTData.cpp +++ b/sources/ZTData.cpp @@ -28,7 +28,7 @@ #include "ZTData.h" -const char * CZTData::TrainTypeString[] = {"Inconnu","MR63/73", "MPM10"}; +const char * CZTData::TrainTypeString[] = {"Inconnu","MR63/73", "MPM10", "MR63", "MR73"}; CZTData::CZTData() { } diff --git a/sources/ZTData.h b/sources/ZTData.h index dfff449..855c40d 100644 --- a/sources/ZTData.h +++ b/sources/ZTData.h @@ -113,6 +113,8 @@ enum eTrainTypeID TRAIN_TYPE_UNKNOWN, TRAIN_TYPE_MR63_MR73, TRAIN_TYPE_MPM10, + TRAIN_TYPE_MR63, + TRAIN_TYPE_MR73, TRAIN_TYPE_MAX_ID diff --git a/sources/ZTStateMachine.h b/sources/ZTStateMachine.h index e2d9150..4b0db81 100644 --- a/sources/ZTStateMachine.h +++ b/sources/ZTStateMachine.h @@ -210,6 +210,8 @@ private: bool mZT2Present; //Flag qui indique si la station possède une ZT2 bool mAutoExportZT1CSV,mAutoExportZT2CSV; //Flags qui indiquent s'il faut créer des fichiers CSV pour chaque log. Configurable dans la page ingénierie. unsigned int mZT1PEQType; //Type de la dernière panne équipement lorsqu'il y en a une. + QList mZT1TrainComposition; //Composition du train franchissant ZT1 (obtenue par Modbus) + QList mZT2TrainComposition; //Composition du train franchissant ZT2 (obtenue par Modbus) CZT1Log mZT1Log; //Les données du log ZT1 du passage courant (un seul train) CZT2Log mZT2Log;