From 36a735db068321624d50c58642b647233414b47c Mon Sep 17 00:00:00 2001 From: zonetest Date: Thu, 31 Aug 2017 14:50:55 -0400 Subject: [PATCH] ZT2 Inhibit Implementation de l'inhibition Modbus de la ZT2 --- sources/GuiElements/ZT2StatsZone.cpp | 2 +- sources/Modbus/ModbusBackend.cpp | 4 +- sources/Modbus/ModbusCCMgr.cpp | 2 + sources/ZTStateMachine.cpp | 61 +++++++++++++++++++--------- 4 files changed, 46 insertions(+), 23 deletions(-) diff --git a/sources/GuiElements/ZT2StatsZone.cpp b/sources/GuiElements/ZT2StatsZone.cpp index 97a0b52..0488041 100644 --- a/sources/GuiElements/ZT2StatsZone.cpp +++ b/sources/GuiElements/ZT2StatsZone.cpp @@ -152,7 +152,7 @@ unsigned int CZT2StatsZone::Reset() unsigned int CZT2StatsZone::SetTrainParameters(int TrainType, QList TrainComposition) { - if(mTrainType != (unsigned)TrainType) + // if(mTrainType != (unsigned)TrainType) { mTrainType = TrainType; mTrainTypeText->setPlainText(QString("Type de train : %1").arg(CZTData::GetTrainTypeString(mTrainType))); diff --git a/sources/Modbus/ModbusBackend.cpp b/sources/Modbus/ModbusBackend.cpp index 2101db4..4e6123b 100644 --- a/sources/Modbus/ModbusBackend.cpp +++ b/sources/Modbus/ModbusBackend.cpp @@ -197,8 +197,8 @@ int CModbusBackend::AnalyzeModbusRequest(CModbusTransaction Transaction) //Write register data mModbusRepo->WriteHRData(StartAdress,NbRegisters,data); - // qDebug("Slave Rx Write Multiple Registers. Address: %d, Nb Reg: %d",StartAdress, NbRegisters); - // qDebug("Data: %s",data.toHex().data()); + qDebug("Slave Rx Write Multiple Registers. Address: %d, Nb Reg: %d",StartAdress, NbRegisters); + qDebug("Data: %s",data.toHex().data()); data = Transaction.mPDU.mData.left(4); //The response corresponds to the Start Adress and Nb of Regs. Which is the first 4 bytes of the initial request. SendModbusResponse(Transaction, data); diff --git a/sources/Modbus/ModbusCCMgr.cpp b/sources/Modbus/ModbusCCMgr.cpp index c07b047..0f0d787 100644 --- a/sources/Modbus/ModbusCCMgr.cpp +++ b/sources/Modbus/ModbusCCMgr.cpp @@ -29,6 +29,8 @@ CModbusCCMgr::CModbusCCMgr(CModbusRepository *Repo, int ModbusPort, int DevID) : mCCWatchdogState = 0; mCCLinkState = false; mLastDateTime = 0; + + ResetCCRepository(); } CModbusCCMgr::~CModbusCCMgr() diff --git a/sources/ZTStateMachine.cpp b/sources/ZTStateMachine.cpp index ecd0ff1..f46e091 100644 --- a/sources/ZTStateMachine.cpp +++ b/sources/ZTStateMachine.cpp @@ -346,7 +346,7 @@ unsigned int CZTStateMachine::ZT1StateMachine(unsigned int Event, unsigned int S 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",true); + CZTLog::instance()->AddLogString("Passage de train ZT1 inhibé par le SACL",true); mZT1State = ZT1_WAIT_FOR_SUBSEQUENT_LIBERATION; //Wait for the train to leave the ZT if(mModbusCCMgr != 0) { @@ -1106,31 +1106,52 @@ unsigned int CZTStateMachine::ZT2StateMachine(unsigned int Event, unsigned int S { mZT2State = ZT2_WAIT_FOR_CI_STATE; } - else if(mZTStationPtr->IsZT2ApproachCDVOccupied()) + else if(mZTStationPtr->IsZT2ApproachCDVOccupied()) //À certaines stations, la ZT2 doit être activée à l'occupation du CDV d'approche. { - DestroyZT2Log(); - mEventsRefTimer.start(); - mZTPagePTr->SetZT2ActivationSTate(true); - mZT2ActiveStatus = SB_ZT_ACTIVE_STATUS; - mZTPagePTr->SetZTStatus(mNbPassages,mNbTriggers,mZT1ActiveStatus,mZT2ActiveStatus); - mZTPagePTr->ResetZT2Stats(); + bool abort = false; + if(mModbusCCMgr != 0) { - //update train info received from the CC Modbus interface - mZT2TrainType = (unsigned)mModbusCCMgr->GetZT2TrainType(); - mZT2TrainComposition = mModbusCCMgr->GetZT2TrainComposition(); - mZTPagePTr->SetZT2TrainData(mZT2TrainType,mZT2TrainComposition); + if(mModbusCCMgr->GetZT2InhibitionFlag() == true) //Check if the CC wants us to analyze the passage + { + abort = true; + CZTLog::instance()->AddLogString("Passage de train ZT2 inhibé par le SACL",true); + mZT2State = ZT2_WAIT_FOR_CDV_LIBERATION_STATE; //Wait for the train to leave the ZT + + //update train info received from the CC Modbus interface + mZT2TrainType = (unsigned)mModbusCCMgr->GetZT2TrainType(); + mZT2TrainComposition = mModbusCCMgr->GetZT2TrainComposition(); + mZTPagePTr->SetZT2TrainData(mZT2TrainType,mZT2TrainComposition); + } } - InsertZT2LogItem(); - mZT2WorkerThread->UpdateDetectionConfig(mZTDetectionConfig); - mTKGenerator->UpdateDetectionConfig(mZTDetectionConfig); - mZT2SMThread->start(QThread::NormalPriority); - mZT2PassageTimeLimitTimer.start(); - mZT2State = ZT2_ANALYZE_TRAIN_STATE; - CZTLog::instance()->ClearBufferString(); - CZTLog::instance()->AddBufferString("ZT2 activée",true); + if(abort == false) + { + DestroyZT2Log(); + mEventsRefTimer.start(); + mZTPagePTr->SetZT2ActivationSTate(true); + mZT2ActiveStatus = SB_ZT_ACTIVE_STATUS; + mZTPagePTr->SetZTStatus(mNbPassages,mNbTriggers,mZT1ActiveStatus,mZT2ActiveStatus); + mZTPagePTr->ResetZT2Stats(); + if(mModbusCCMgr != 0) + { + //update train info received from the CC Modbus interface + mZT2TrainType = (unsigned)mModbusCCMgr->GetZT2TrainType(); + mZT2TrainComposition = mModbusCCMgr->GetZT2TrainComposition(); + mZTPagePTr->SetZT2TrainData(mZT2TrainType,mZT2TrainComposition); + } + InsertZT2LogItem(); + mZT2WorkerThread->UpdateDetectionConfig(mZTDetectionConfig); + mTKGenerator->UpdateDetectionConfig(mZTDetectionConfig); + mZT2SMThread->start(QThread::NormalPriority); + + mZT2PassageTimeLimitTimer.start(); + mZT2State = ZT2_ANALYZE_TRAIN_STATE; + + CZTLog::instance()->ClearBufferString(); + CZTLog::instance()->AddBufferString("ZT2 activée",true); + } } break; }