From 69ca721ef75f97b1d83583e13c3efac5032818de Mon Sep 17 00:00:00 2001 From: zonetest Date: Fri, 25 Aug 2017 14:47:08 -0400 Subject: [PATCH] dev modbus --- sources/Modbus/ModbusCCMgr.cpp | 30 +++++++++++++- sources/ZTData.cpp | 2 +- sources/ZTData.h | 1 + sources/ZTStateMachine.cpp | 72 ++++++++++++++++++++-------------- 4 files changed, 73 insertions(+), 32 deletions(-) diff --git a/sources/Modbus/ModbusCCMgr.cpp b/sources/Modbus/ModbusCCMgr.cpp index 252cd5e..49b8954 100644 --- a/sources/Modbus/ModbusCCMgr.cpp +++ b/sources/Modbus/ModbusCCMgr.cpp @@ -242,8 +242,13 @@ qint16 CModbusCCMgr::GetZT1TrainType() { Type = TRAIN_TYPE_MPM10; } + else if(Reg == 0) + { + Type = TRAIN_TYPE_MAINTENANCE_VEHICLE; + } else { + CEngLog::instance()->AddLogString(QString("MODBUS: Réception d'un type de train ZT1 invalide du SACL [%1]").arg(Reg)); Type = TRAIN_TYPE_UNKNOWN; } } @@ -254,9 +259,30 @@ qint16 CModbusCCMgr::GetZT2TrainType() { bool OK = false; qint16 Reg = mModbusRepo->GetSingleReg(MODBUS_CC_ZT2_TRAIN_TYPE_REG_ADD,&OK); + int Type = TRAIN_TYPE_UNKNOWN; if(OK) { - return Reg; + if(Reg == 63) + { + Type = TRAIN_TYPE_MR63; + } + else if(Reg == 73) + { + Type = TRAIN_TYPE_MR73; + } + else if(Reg == 10) + { + Type = TRAIN_TYPE_MPM10; + } + else if(Reg == 0) + { + Type = TRAIN_TYPE_MAINTENANCE_VEHICLE; + } + else + { + CEngLog::instance()->AddLogString(QString("MODBUS: Réception d'un type de train ZT2 invalide du SACL [%1]").arg(Reg)); + Type = TRAIN_TYPE_UNKNOWN; + } } - return 0; + return Type; } diff --git a/sources/ZTData.cpp b/sources/ZTData.cpp index 2670f9b..c2b1ccc 100644 --- a/sources/ZTData.cpp +++ b/sources/ZTData.cpp @@ -28,7 +28,7 @@ #include "ZTData.h" -const char * CZTData::TrainTypeString[] = {"Inconnu","MR63/73", "MPM10", "MR63", "MR73"}; +const char * CZTData::TrainTypeString[] = {"Inconnu","MR63/73", "MPM10", "MR63", "MR73", "Véhicule Travaux"}; CZTData::CZTData() { } diff --git a/sources/ZTData.h b/sources/ZTData.h index 855c40d..534c715 100644 --- a/sources/ZTData.h +++ b/sources/ZTData.h @@ -115,6 +115,7 @@ enum eTrainTypeID TRAIN_TYPE_MPM10, TRAIN_TYPE_MR63, TRAIN_TYPE_MR73, + TRAIN_TYPE_MAINTENANCE_VEHICLE, TRAIN_TYPE_MAX_ID diff --git a/sources/ZTStateMachine.cpp b/sources/ZTStateMachine.cpp index da04e61..9f0075f 100644 --- a/sources/ZTStateMachine.cpp +++ b/sources/ZTStateMachine.cpp @@ -303,17 +303,16 @@ unsigned int CZTStateMachine::ZT1StateMachine(unsigned int Event, unsigned int S mZT1Log.mZT1Flags.mPGCalibrationON = (mIsPGCalibON == true); mZT1State = ZT1_TRAIN_ON_APPROACH_CDV_STATE; } - } else if(mZTStationPtr->IsZT1ApproachCDVOccupied() && !mZTStationPtr->IsZT1CDVOccupied()) //Normal situation { - DestroyZT1Log(); + DestroyZT1Log(); mEventsRefTimer.start(); - mNbPassages++; + mNbPassages++; InsertZT1LogItem(); - mZT1Log.mZT1Flags.mPGCalibrationON = (mIsPGCalibON == true); - mZT1State = ZT1_TRAIN_ON_APPROACH_CDV_STATE; - } + mZT1Log.mZT1Flags.mPGCalibrationON = (mIsPGCalibON == true); + mZT1State = ZT1_TRAIN_ON_APPROACH_CDV_STATE; + } break; } case ZT1_WAIT_FOR_SUBSEQUENT_LIBERATION: //Subsequent CDV should never be occupied before ZT CDV. @@ -340,38 +339,53 @@ unsigned int CZTStateMachine::ZT1StateMachine(unsigned int Event, unsigned int S mZT1State = ZT1_WAIT_FOR_TRAIN_STATE; } else if(mZTStationPtr->IsZT1CDVOccupied()) - { - mZT1ActiveStatus = SB_ZT_ACTIVE_STATUS; - mZTPagePTr->SetZTStatus(mNbPassages,mNbTriggers,mZT1ActiveStatus,mZT2ActiveStatus); - mZTPagePTr->SetZT1ActivationState(true); - - mZTPagePTr->ResetZT1Stats(); + { + bool abort = false; if(mModbusCCMgr != 0) { - //update train info received from the CC Modbus interface - mTrainTypeDetected = (unsigned)mModbusCCMgr->GetZT1TrainType(); - mZT1TrainComposition = mModbusCCMgr->GetZT1TrainComposition(); - mZTPagePTr->SetZT1TrainData(mTrainTypeDetected,mZT1TrainComposition); + if(mModbusCCMgr->GetZT1InhibitionFlag() == true) //Check if the CC wants us to analyze the passage + { + abort = true; + CZTLog::instance()->AddLogString("Passage de train inhibé par le SACL"); + mZT1State = ZT1_WAIT_FOR_SUBSEQUENT_LIBERATION; //Wait for the train to leave the ZT + } } - InsertZT1LogItem(); + if(abort == false) + { + mZT1ActiveStatus = SB_ZT_ACTIVE_STATUS; + mZTPagePTr->SetZTStatus(mNbPassages,mNbTriggers,mZT1ActiveStatus,mZT2ActiveStatus); + mZTPagePTr->SetZT1ActivationState(true); - mZT1WorkerThread->UpdateDetectionConfig(mZTDetectionConfig); - mTKGenerator->UpdateDetectionConfig(mZTDetectionConfig); - mZT1SMThread->start(QThread::NormalPriority); + mZTPagePTr->ResetZT1Stats(); + if(mModbusCCMgr != 0) + { + //update train info received from the CC Modbus interface + mTrainTypeDetected = (unsigned)mModbusCCMgr->GetZT1TrainType(); + mZT1TrainComposition = mModbusCCMgr->GetZT1TrainComposition(); + mZTPagePTr->SetZT1TrainData(mTrainTypeDetected,mZT1TrainComposition); + } - mZT1PassageTimeLimitTimer.start(); - //CZTLog::instance()->AddLogString("ZT1 activée",true); + InsertZT1LogItem(); + + mZT1WorkerThread->UpdateDetectionConfig(mZTDetectionConfig); + mTKGenerator->UpdateDetectionConfig(mZTDetectionConfig); + mZT1SMThread->start(QThread::NormalPriority); + + mZT1PassageTimeLimitTimer.start(); + //CZTLog::instance()->AddLogString("ZT1 activée",true); - CZTLog::instance()->ClearBufferString(); - CZTLog::instance()->AddBufferString("ZT1 activée",true); + CZTLog::instance()->ClearBufferString(); + CZTLog::instance()->AddBufferString("ZT1 activée",true); + + if(mIsPGCalibON) + { + emit PGCalibrationStatus(mCalibrationPassagesCount+1,mPGNbTotalPassages); + } + mZT1State = ZT1_ANALYZE_TRAIN_STATE; + } - if(mIsPGCalibON) - { - emit PGCalibrationStatus(mCalibrationPassagesCount+1,mPGNbTotalPassages); - } - mZT1State = ZT1_ANALYZE_TRAIN_STATE; } break; }