Développement Modbus CC (suite)

- Implémentation des stats de ZT1 et ZT2 (compo et type de train)
provenant de Modbus CC.
- Implémentation de l'inhibition ZT1 et ZT2 par la CC via Modbus.
- Dégradation des données Modbus lors de la perte du Watchdog SACL.
This commit is contained in:
zonetest 2017-08-30 11:03:53 -04:00
parent 69ca721ef7
commit 0efe9b3e8d
13 changed files with 225 additions and 72 deletions

View File

@ -71,7 +71,7 @@ ENGLOG=3
#STATION=HONORE_BEAUGRAND #STATION=HONORE_BEAUGRAND
#STATION=ANGRIGNON #STATION=ANGRIGNON
#STATION=HENRI_BOURASSA #STATION=HENRI_BOURASSA
#STATION=COTE_VERTU STATION=COTE_VERTU
#STATION=BERRI_UQAM #STATION=BERRI_UQAM
#STATION=LONGUEIL #STATION=LONGUEIL
#STATION=SAINT_MICHEL #STATION=SAINT_MICHEL
@ -79,4 +79,4 @@ ENGLOG=3
#STATION=MONTMORENCY #STATION=MONTMORENCY
#STATION=MONTMORENCY_10_12 #STATION=MONTMORENCY_10_12
#STATION=MONTMORENCY_10_22 #STATION=MONTMORENCY_10_22
STATION=DU_COLLEGE #STATION=DU_COLLEGE

View File

@ -1 +0,0 @@
exit

View File

@ -228,7 +228,7 @@ unsigned int CZT1StatsZone::Reset()
mS2CountText->setPlainText("Compte S2: 0"); mS2CountText->setPlainText("Compte S2: 0");
mFNCountText->setPlainText("Compte FN: 0"); mFNCountText->setPlainText("Compte FN: 0");
mActualRankText->setPlainText("Rang: 0"); mActualRankText->setPlainText("Rang: 0");
mTrainTypeText->setPlainText("Train Détecté: Aucun"); mTrainTypeText->setPlainText("Type de train: Inconnu");
if(mTrainCompositionText != 0) if(mTrainCompositionText != 0)
{ {
mTrainCompositionText->setPlainText("Composition : Inconnue"); mTrainCompositionText->setPlainText("Composition : Inconnue");
@ -244,10 +244,7 @@ unsigned int CZT1StatsZone::SetTrainParameters(int TrainType, QList<qint16> Trai
if(mTrainType != (unsigned)TrainType) if(mTrainType != (unsigned)TrainType)
{ {
mTrainType = TrainType; mTrainType = TrainType;
// temp.clear(); mTrainTypeText->setPlainText(QString("Type de train : %1").arg(CZTData::GetTrainTypeString(mTrainType)));
// temp = "Train détecté: ";
// temp += CZTData::GetTrainTypeString(mTrainType);
mTrainTypeText->setPlainText(QString("Train détecté : %1").arg(CZTData::GetTrainTypeString(mTrainType)));
} }
if(TrainComposition.size() != 3) if(TrainComposition.size() != 3)
@ -264,7 +261,6 @@ unsigned int CZT1StatsZone::SetTrainParameters(int TrainType, QList<qint16> Trai
} }
else else
{ {
int toto = TrainComposition[0];
mTrainCompositionText->setPlainText(QString("Composition : %1-%2-%3").arg((int)TrainComposition[0],3,10,QChar('0')).arg(TrainComposition[1],3,10,QChar('0')).arg(TrainComposition[2],3,10,QChar('0'))); mTrainCompositionText->setPlainText(QString("Composition : %1-%2-%3").arg((int)TrainComposition[0],3,10,QChar('0')).arg(TrainComposition[1],3,10,QChar('0')).arg(TrainComposition[2],3,10,QChar('0')));
} }

View File

@ -35,33 +35,57 @@
CZT2StatsZone::CZT2StatsZone(QGraphicsItem *Parent) CZT2StatsZone::CZT2StatsZone(QGraphicsItem *Parent)
{ {
setParentItem(Parent); setParentItem(Parent);
mTrainCompoText = mTrainTypeText = 0;
mTrainType = TRAIN_TYPE_UNKNOWN;
}
QFont font; unsigned int CZT2StatsZone::Init(bool ModbusEnabled)
//font.setPixelSize(15); {
font.setPointSize(15); mModbusEnabled = ModbusEnabled;
mBogieCountText = new QGraphicsTextItem(this);
mBogieCountText->setPos(0,12);
// mBogieCountText->setPlainText("Compte Bogie: 0");
mBogieCountText->setFont(font);
mS1CountText = new QGraphicsTextItem(this); QFont font;
mS1CountText->setPos(0,34); font.setPointSize(15);
// mS1CountText->setPlainText("Compte S1: 0"); int TextPos = 22;
mS1CountText->setFont(font);
mActualRankText = new QGraphicsTextItem(this); mBogieCountText = new QGraphicsTextItem(this);
mActualRankText->setPos(0,56); mBogieCountText->setPos(0,TextPos);
// mActualRankText->setPlainText("Rang: 0"); mBogieCountText->setFont(font);
mActualRankText->setFont(font);
mLastActivationDateTime = new QGraphicsTextItem(this); TextPos += 22;
mLastActivationDateTime->setPos(0,78); mS1CountText = new QGraphicsTextItem(this);
mLastActivationDateTime->setFont(font); mS1CountText->setPos(0,TextPos);
mLastActivationDateTime->setPlainText("Dernier passage : "); mS1CountText->setFont(font);
Reset(); TextPos += 22;
mActualRankText = new QGraphicsTextItem(this);
mActualRankText->setPos(0,TextPos);
mActualRankText->setFont(font);
if(ModbusEnabled)
{
TextPos += 22;
mTrainCompoText = new QGraphicsTextItem(this);
mTrainCompoText->setPos(0,TextPos);
mTrainCompoText->setFont(font);
TextPos += 22;
mTrainTypeText = new QGraphicsTextItem(this);
mTrainTypeText->setPos(0,TextPos);
mTrainTypeText->setFont(font);
}
TextPos += 22;
mLastActivationDateTime = new QGraphicsTextItem(this);
mLastActivationDateTime->setPos(0,TextPos);
mLastActivationDateTime->setFont(font);
mLastActivationDateTime->setPlainText("Dernier passage : ");
Reset();
return RET_OK;
} }
unsigned int CZT2StatsZone::SetLastActivationDateTime() unsigned int CZT2StatsZone::SetLastActivationDateTime()
@ -113,7 +137,43 @@ unsigned int CZT2StatsZone::Reset()
mBogieCountText->setPlainText("Compte Bogie: 0"); mBogieCountText->setPlainText("Compte Bogie: 0");
mS1CountText->setPlainText("Compte S1: 0"); mS1CountText->setPlainText("Compte S1: 0");
mActualRankText->setPlainText("Rang: 0"); mActualRankText->setPlainText("Rang: 0");
if(mTrainTypeText != 0)
{
mTrainTypeText->setPlainText("Type de train: Inconnu");
}
if(mTrainCompoText != 0)
{
mTrainCompoText->setPlainText("Composition du train: Inconnue");
}
return RET_OK; return RET_OK;
} }
unsigned int CZT2StatsZone::SetTrainParameters(int TrainType, QList<qint16> TrainComposition)
{
if(mTrainType != (unsigned)TrainType)
{
mTrainType = TrainType;
mTrainTypeText->setPlainText(QString("Type de train : %1").arg(CZTData::GetTrainTypeString(mTrainType)));
}
if(TrainComposition.size() != 3)
{
//Invalid composition
mTrainCompoText->setPlainText("Composition: Inconnue");
}
else if((TrainComposition[0] == 0) ||
(TrainComposition[1] == 0) ||
(TrainComposition[2] == 0))
{
//Composition invalide...
mTrainCompoText->setPlainText("Composition: Inconnue");
}
else
{
mTrainCompoText->setPlainText(QString("Composition : %1-%2-%3").arg((int)TrainComposition[0],3,10,QChar('0')).arg(TrainComposition[1],3,10,QChar('0')).arg(TrainComposition[2],3,10,QChar('0')));
}
return RET_OK;
}

View File

@ -39,15 +39,18 @@ public:
CZT2StatsZone(QGraphicsItem *Parent); CZT2StatsZone(QGraphicsItem *Parent);
// unsigned int UpdateStats(unsigned int BogieCount, unsigned int S1Count, unsigned int S2Count, unsigned int FNCount, unsigned int Rank, unsigned int Bogie, unsigned int TrainType, float TrainSpeed); // unsigned int UpdateStats(unsigned int BogieCount, unsigned int S1Count, unsigned int S2Count, unsigned int FNCount, unsigned int Rank, unsigned int Bogie, unsigned int TrainType, float TrainSpeed);
unsigned int Init(bool ModbusEnabled);
unsigned int UpdateStats(CZT2ThreadData *DataPtr); unsigned int UpdateStats(CZT2ThreadData *DataPtr);
unsigned int Reset(); unsigned int Reset();
unsigned int SetLastActivationDateTime(); unsigned int SetLastActivationDateTime();
unsigned int SetTrainParameters(int TrainType, QList<qint16> TrainComposition);
private: private:
unsigned int mBogieCount,mS1Count,mActualRank; unsigned int mBogieCount,mS1Count,mActualRank, mTrainType;
int mPIValue, mPEValue; int mPIValue, mPEValue;
bool mModbusEnabled;
QGraphicsTextItem *mBogieCountText, *mS1CountText,*mActualRankText, *mLastActivationDateTime; QGraphicsTextItem *mBogieCountText, *mS1CountText,*mActualRankText, *mLastActivationDateTime, *mTrainCompoText, *mTrainTypeText;
}; };
#endif // ZT2STATSZONE_H #endif // ZT2STATSZONE_H

View File

@ -358,6 +358,13 @@ unsigned int CZTPage::SetZT2Data(CZT2ThreadData *Data)
return RET_OK; return RET_OK;
} }
unsigned int CZTPage::SetZT2TrainData(int TrainType, QList<qint16> TrainComposition)
{
//This is a low frequency stats update (only once for every train), so no timer filtering is necessary.
mZT2Stats->SetTrainParameters(TrainType,TrainComposition);
return RET_OK;
}
unsigned int CZTPage::SetZT1ActivationState(bool ZT1Activated) unsigned int CZTPage::SetZT1ActivationState(bool ZT1Activated)
{ {
if(ZT1Activated) if(ZT1Activated)

View File

@ -71,6 +71,7 @@ public:
unsigned int SetZT1Data(CZT1ThreadData *Data, bool ForceDisplay = false); unsigned int SetZT1Data(CZT1ThreadData *Data, bool ForceDisplay = false);
unsigned int SetZT1TrainData(int TrainType, QList<qint16> TrainComposition); unsigned int SetZT1TrainData(int TrainType, QList<qint16> TrainComposition);
unsigned int SetZT2Data(CZT2ThreadData *Data); unsigned int SetZT2Data(CZT2ThreadData *Data);
unsigned int SetZT2TrainData(int TrainType, QList<qint16> TrainComposition);
unsigned int SetZT1ActivationState(bool ZT1Activated); unsigned int SetZT1ActivationState(bool ZT1Activated);
unsigned int SetZT2ActivationSTate(bool ZT2Activated); unsigned int SetZT2ActivationSTate(bool ZT2Activated);
unsigned int ResetZT1Stats(); unsigned int ResetZT1Stats();

View File

@ -70,6 +70,7 @@ void CModbusCCMgr::ConnectionLost()
mZTWatchdogTimer->stop(); mZTWatchdogTimer->stop();
mCCWatchdogTimer->stop(); mCCWatchdogTimer->stop();
emit ModbusCCDisconnected(); emit ModbusCCDisconnected();
ResetCCRepository();
CZTLog::instance()->AddLogString(QString("Connection Modbus (Ethernet) avec la CC rompue."),true); CZTLog::instance()->AddLogString(QString("Connection Modbus (Ethernet) avec la CC rompue."),true);
} }
@ -97,39 +98,42 @@ void CModbusCCMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length
} }
} }
qint16 NTPWrite = mModbusRepo->GetSingleReg(MODBUS_CC_CLK_UPDATE_BASE_REG_ADD); if(mCCLinkState == true) //Ignore incoming data if the link is not healty (Watchdog).
if(NTPWrite == 1)
{ {
//Update date & time... qint16 NTPWrite = mModbusRepo->GetSingleReg(MODBUS_CC_CLK_UPDATE_BASE_REG_ADD);
bool OK; if(NTPWrite == 1)
QList<qint16> DateTime = mModbusRepo->GetRegs(MODUBS_CC_CLK_SEC_BASE_REG_ADD,4,&OK);
if(OK)
{ {
qint8 Secs, Minutes, Hours, Month, Day; //Update date & time...
Secs = (qint8)(DateTime.at(0) >> 8); bool OK;
Minutes = (qint8)(DateTime.at(1) & 0x00FF); QList<qint16> DateTime = mModbusRepo->GetRegs(MODUBS_CC_CLK_SEC_BASE_REG_ADD,4,&OK);
Hours = (qint8)(DateTime.at(1) >> 8); if(OK)
Day = (qint8)(DateTime.at(2) & 0x00FF);
Month = (qint8)(DateTime.at(2) >> 8);
qint16 Year = DateTime.at(3);
QDateTime NetworkTime;
NetworkTime.setTimeSpec(Qt::UTC);
NetworkTime.setDate(QDate(Year,Month,Day));
NetworkTime.setTime(QTime(Hours,Minutes,Secs));
// QDateTime MyTime = NetworkTime.toLocalTime();
if(mLastDateTime != 0)
{ {
delete mLastDateTime; qint8 Secs, Minutes, Hours, Month, Day;
Secs = (qint8)(DateTime.at(0) >> 8);
Minutes = (qint8)(DateTime.at(1) & 0x00FF);
Hours = (qint8)(DateTime.at(1) >> 8);
Day = (qint8)(DateTime.at(2) & 0x00FF);
Month = (qint8)(DateTime.at(2) >> 8);
qint16 Year = DateTime.at(3);
QDateTime NetworkTime;
NetworkTime.setTimeSpec(Qt::UTC);
NetworkTime.setDate(QDate(Year,Month,Day));
NetworkTime.setTime(QTime(Hours,Minutes,Secs));
// QDateTime MyTime = NetworkTime.toLocalTime();
if(mLastDateTime != 0)
{
delete mLastDateTime;
}
mLastDateTime = new QDateTime(NetworkTime.toLocalTime());
emit ModbusDateTimeReceived(mLastDateTime);
qDebug("Date & Heure reçue du SACL: %s",mLastDateTime->toString("yyyy-MM-dd hh:mm:ss").toAscii().data());
mModbusRepo->WriteSingleReg(MODBUS_CC_CLK_UPDATE_BASE_REG_ADD,0);
} }
mLastDateTime = new QDateTime(NetworkTime.toLocalTime());
emit ModbusDateTimeReceived(mLastDateTime);
qDebug("Date & Heure reçue du SACL: %s",mLastDateTime->toString("yyyy-MM-dd hh:mm:ss").toAscii().data());
mModbusRepo->WriteSingleReg(MODBUS_CC_CLK_UPDATE_BASE_REG_ADD,0);
} }
} }
emit RepoHasChanged(); emit RepoHasChanged();
@ -144,6 +148,7 @@ void CModbusCCMgr::ModbusRequestException(quint8 ExceptionCode, quint8 FctCode)
void CModbusCCMgr::ModbusCCWatchdogTimeout() void CModbusCCMgr::ModbusCCWatchdogTimeout()
{ {
CZTLog::instance()->AddLogString("Perte du lien de communication avec la CC: Watchdog CC Expiré",true); CZTLog::instance()->AddLogString("Perte du lien de communication avec la CC: Watchdog CC Expiré",true);
ResetCCRepository();
mCCLinkState = false; mCCLinkState = false;
} }
@ -161,9 +166,36 @@ void CModbusCCMgr::ModbusZTWatchdogTimeout()
} }
} }
int CModbusCCMgr::ResetCCRepository()
{
//Clear read registers
mModbusRepo->WriteSingleReg(MODBUS_CC_WATCHDOG_BASE_REG_ADD,0);
mModbusRepo->WriteSingleReg(MODBUS_CC_AN_BASE_REG_ADD,0);
mModbusRepo->WriteSingleReg(MODBUS_CC_ZT1_TRAIN_TYPE_REG_ADD, MODBUS_CC_TRAIN_TYPE_INVALID_SACL_OFFLINE);
mModbusRepo->WriteSingleReg(MODBUS_CC_ZT2_TRAIN_TYPE_REG_ADD, MODBUS_CC_TRAIN_TYPE_INVALID_SACL_OFFLINE);
QList<qint16> ResetValues;
ResetValues << 0 << 0 << 0 //Train compo ZT1
<< 0 << 0 << 0 //Train compo ZT2
<< 0 << 0 << 0 << 0 << 0; //Date & Time update registers
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;
}
bool CModbusCCMgr::GetZT1InhibitionFlag() bool CModbusCCMgr::GetZT1InhibitionFlag()
{ {
bool OK = false; bool OK = false;
if(mCCLinkState == false)//Ignore registers data if link is with SACL is not healthy
{
return false;
}
qint16 Reg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD,&OK); qint16 Reg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD,&OK);
if(OK) if(OK)
@ -180,6 +212,12 @@ bool CModbusCCMgr::GetZT1InhibitionFlag()
bool CModbusCCMgr::GetZT2InhibitionFlag() bool CModbusCCMgr::GetZT2InhibitionFlag()
{ {
bool OK = false; bool OK = false;
if(mCCLinkState == false)//Ignore registers data if link is with SACL is not healthy
{
return false;
}
qint16 Reg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD,&OK); qint16 Reg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD,&OK);
if(OK) if(OK)
@ -200,7 +238,7 @@ QList<qint16> CModbusCCMgr::GetZT1TrainComposition()
QList<qint16> Compo; QList<qint16> Compo;
Compo = mModbusRepo->GetRegs(MODBUS_CC_ZT1_TRAIN_ID_1_REG_ADD,3,&OK); Compo = mModbusRepo->GetRegs(MODBUS_CC_ZT1_TRAIN_ID_1_REG_ADD,3,&OK);
if(OK == false) if(OK == false || mCCLinkState == false) //Ignore registers data if link is with SACL is not healthy
{ {
Compo << 0 << 0 << 0; Compo << 0 << 0 << 0;
} }
@ -214,7 +252,7 @@ QList<qint16> CModbusCCMgr::GetZT2TrainComposition()
QList<qint16> Compo; QList<qint16> Compo;
Compo = mModbusRepo->GetRegs(MODBUS_CC_ZT2_TRAIN_ID_1_REG_ADD,3,&OK); Compo = mModbusRepo->GetRegs(MODBUS_CC_ZT2_TRAIN_ID_1_REG_ADD,3,&OK);
if(OK == false) if(OK == false || mCCLinkState == false)//Ignore registers data if link is with SACL is not healthy
{ {
Compo << 0 << 0 << 0; Compo << 0 << 0 << 0;
} }
@ -230,28 +268,36 @@ qint16 CModbusCCMgr::GetZT1TrainType()
int Type = TRAIN_TYPE_UNKNOWN; int Type = TRAIN_TYPE_UNKNOWN;
if(OK) if(OK)
{ {
if(Reg == 63) if(Reg == MODBUS_CC_TRAIN_TYPE_MR63)
{ {
Type = TRAIN_TYPE_MR63; Type = TRAIN_TYPE_MR63;
} }
else if(Reg == 73) else if(Reg == MODBUS_CC_TRAIN_TYPE_MR73)
{ {
Type = TRAIN_TYPE_MR73; Type = TRAIN_TYPE_MR73;
} }
else if(Reg == 10) else if(Reg == MODBUS_CC_TRAIN_TYPE_MPM10)
{ {
Type = TRAIN_TYPE_MPM10; Type = TRAIN_TYPE_MPM10;
} }
else if(Reg == 0) else if(Reg == MODBUS_CC_TRAIN_TYPE_MAINTENANCE)
{ {
Type = TRAIN_TYPE_MAINTENANCE_VEHICLE; Type = TRAIN_TYPE_MAINTENANCE_VEHICLE;
} }
else if(Reg == MODBUS_CC_TRAIN_TYPE_INVALID_SACL_OFFLINE)
{
Type = TRAIN_TYPE_UNKNOWN;
}
else else
{ {
CEngLog::instance()->AddLogString(QString("MODBUS: Réception d'un type de train ZT1 invalide du SACL [%1]").arg(Reg)); CEngLog::instance()->AddLogString(QString("MODBUS: Réception d'un type de train ZT1 invalide du SACL [%1]").arg(Reg));
Type = TRAIN_TYPE_UNKNOWN; Type = TRAIN_TYPE_UNKNOWN;
} }
} }
if(mCCLinkState == false)//Ignore registers data if link is with SACL is not healthy
{
Type = TRAIN_TYPE_UNKNOWN;
}
return Type; return Type;
} }
@ -262,27 +308,36 @@ qint16 CModbusCCMgr::GetZT2TrainType()
int Type = TRAIN_TYPE_UNKNOWN; int Type = TRAIN_TYPE_UNKNOWN;
if(OK) if(OK)
{ {
if(Reg == 63) if(Reg == MODBUS_CC_TRAIN_TYPE_MR63)
{ {
Type = TRAIN_TYPE_MR63; Type = TRAIN_TYPE_MR63;
} }
else if(Reg == 73) else if(Reg == MODBUS_CC_TRAIN_TYPE_MR73)
{ {
Type = TRAIN_TYPE_MR73; Type = TRAIN_TYPE_MR73;
} }
else if(Reg == 10) else if(Reg == MODBUS_CC_TRAIN_TYPE_MPM10)
{ {
Type = TRAIN_TYPE_MPM10; Type = TRAIN_TYPE_MPM10;
} }
else if(Reg == 0) else if(Reg == MODBUS_CC_TRAIN_TYPE_MAINTENANCE)
{ {
Type = TRAIN_TYPE_MAINTENANCE_VEHICLE; Type = TRAIN_TYPE_MAINTENANCE_VEHICLE;
} }
else if(Reg == MODBUS_CC_TRAIN_TYPE_INVALID_SACL_OFFLINE)
{
Type = TRAIN_TYPE_UNKNOWN;
}
else else
{ {
CEngLog::instance()->AddLogString(QString("MODBUS: Réception d'un type de train ZT2 invalide du SACL [%1]").arg(Reg)); CEngLog::instance()->AddLogString(QString("MODBUS: Réception d'un type de train ZT2 invalide du SACL [%1]").arg(Reg));
Type = TRAIN_TYPE_UNKNOWN; Type = TRAIN_TYPE_UNKNOWN;
} }
} }
if(mCCLinkState == false) //Ignore registers data if link is with SACL is not healthy
{
Type = TRAIN_TYPE_UNKNOWN;
}
return Type; return Type;
} }

View File

@ -7,6 +7,21 @@
#include "ModbusRepository.h" #include "ModbusRepository.h"
#include <QTimer> #include <QTimer>
enum eModbusCCTrainTypes
{
MODBUS_CC_TRAIN_TYPE_MR63 = 63,
MODBUS_CC_TRAIN_TYPE_MR73 = 73,
MODBUS_CC_TRAIN_TYPE_MPM10 = 10,
MODBUS_CC_TRAIN_TYPE_MAINTENANCE = 0,
MODBUS_CC_TRAIN_TYPE_INVALID_ATS_OFFLINE = 98,
MODBUS_CC_TRAIN_TYPE_INVALID_SERVICE_REBOOT = 97,
MODBUS_CC_TRAIN_TYPE_INVALID_NOT_UPDATED = 99,
MODBUS_CC_TRAIN_TYPE_INVALID_SACL_OFFLINE = 96,
MODBUS_CC_TRAIN_TYPE_MAX_VALUE
};
class CModbusCCMgr : public CModbusBackend class CModbusCCMgr : public CModbusBackend
{ {
Q_OBJECT Q_OBJECT
@ -41,6 +56,8 @@ private:
bool mCCLinkState; bool mCCLinkState;
QDateTime *mLastDateTime; QDateTime *mLastDateTime;
int ResetCCRepository();
signals: signals:
void RepoHasChanged(); void RepoHasChanged();
void ModbusCCConnected(); void ModbusCCConnected();

View File

@ -703,5 +703,5 @@ void CModbusTKTransport::ModbusCCUpdated()
qint16 ClearReg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD); qint16 ClearReg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD);
mZT1Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT1_FLAG_MASK)) != 0; mZT1Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT1_FLAG_MASK)) != 0;
mZT2Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT2_FLAG_MASK)) != 0; mZT2Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT2_FLAG_MASK)) != 0;
qDebug("ZT1Clr = %d",mZT1Clear); // qDebug("ZT1Clr = %d",mZT1Clear);
} }

View File

@ -346,8 +346,15 @@ unsigned int CZTStateMachine::ZT1StateMachine(unsigned int Event, unsigned int S
if(mModbusCCMgr->GetZT1InhibitionFlag() == true) //Check if the CC wants us to analyze the passage if(mModbusCCMgr->GetZT1InhibitionFlag() == true) //Check if the CC wants us to analyze the passage
{ {
abort = true; abort = true;
CZTLog::instance()->AddLogString("Passage de train inhibé par le SACL"); CZTLog::instance()->AddLogString("Passage de train inhibé par le SACL",true);
mZT1State = ZT1_WAIT_FOR_SUBSEQUENT_LIBERATION; //Wait for the train to leave the ZT mZT1State = ZT1_WAIT_FOR_SUBSEQUENT_LIBERATION; //Wait for the train to leave the ZT
if(mModbusCCMgr != 0)
{
//update train info received from the CC Modbus interface
mTrainTypeDetected = (unsigned)mModbusCCMgr->GetZT1TrainType();
mZT1TrainComposition = mModbusCCMgr->GetZT1TrainComposition();
mZTPagePTr->SetZT1TrainData(mTrainTypeDetected,mZT1TrainComposition);
}
} }
} }
@ -1107,6 +1114,13 @@ unsigned int CZTStateMachine::ZT2StateMachine(unsigned int Event, unsigned int S
mZT2ActiveStatus = SB_ZT_ACTIVE_STATUS; mZT2ActiveStatus = SB_ZT_ACTIVE_STATUS;
mZTPagePTr->SetZTStatus(mNbPassages,mNbTriggers,mZT1ActiveStatus,mZT2ActiveStatus); mZTPagePTr->SetZTStatus(mNbPassages,mNbTriggers,mZT1ActiveStatus,mZT2ActiveStatus);
mZTPagePTr->ResetZT2Stats(); 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(); InsertZT2LogItem();
mZT2WorkerThread->UpdateDetectionConfig(mZTDetectionConfig); mZT2WorkerThread->UpdateDetectionConfig(mZTDetectionConfig);
mTKGenerator->UpdateDetectionConfig(mZTDetectionConfig); mTKGenerator->UpdateDetectionConfig(mZTDetectionConfig);

View File

@ -204,7 +204,7 @@ private:
unsigned int mNbPassages; //Nombre de passages unsigned int mNbPassages; //Nombre de passages
unsigned int mNbTriggers; //Nombre de déclenchements unsigned int mNbTriggers; //Nombre de déclenchements
unsigned int mTrainTypeDetected; //Type de train unsigned int mTrainTypeDetected, mZT2TrainType; //Type de train
unsigned int mCalibrationPassagesCount; //Nombre de passages lors de la calibration unsigned int mCalibrationPassagesCount; //Nombre de passages lors de la calibration
unsigned int mPGNbTotalPassages; //Nombre de passages requis lors de la calibration unsigned int mPGNbTotalPassages; //Nombre de passages requis lors de la calibration
unsigned int mZT1ActiveStatus; //état de la ZT1 (Active ou pas) unsigned int mZT1ActiveStatus; //état de la ZT1 (Active ou pas)

View File

@ -511,6 +511,7 @@ unsigned int CZoneTest::InitZT()
connect(mModbusCCMgr,SIGNAL(ModbusDateTimeReceived(QDateTime*)),this,SLOT(ModbusDateTimeUpdate(QDateTime*))); connect(mModbusCCMgr,SIGNAL(ModbusDateTimeReceived(QDateTime*)),this,SLOT(ModbusDateTimeUpdate(QDateTime*)));
panel.mZTMainPage->ModbusCCDisconnected(); panel.mZTMainPage->ModbusCCDisconnected();
panel.mZTMainPage->mZT1Stats->Init(true); panel.mZTMainPage->mZT1Stats->Init(true);
panel.mZTMainPage->mZT2Stats->Init(true);
} }
else else
{ {
@ -518,6 +519,7 @@ unsigned int CZoneTest::InitZT()
mTKTransportInterface = (CTKTransportInterface*)TransportInterface; mTKTransportInterface = (CTKTransportInterface*)TransportInterface;
TransportInterface->BindPointers(mZTStation->GetOutputMasks(),mExtIOWorkerThread); TransportInterface->BindPointers(mZTStation->GetOutputMasks(),mExtIOWorkerThread);
panel.mZTMainPage->mZT1Stats->Init(false); panel.mZTMainPage->mZT1Stats->Init(false);
panel.mZTMainPage->mZT2Stats->Init(false);
} }
connect(mTKTransportInterface,SIGNAL(TKOutputStatesChanged(bool,bool)),panel.mMaintenancePage,SLOT(TKOutputChanged(bool,bool))); connect(mTKTransportInterface,SIGNAL(TKOutputStatesChanged(bool,bool)),panel.mMaintenancePage,SLOT(TKOutputChanged(bool,bool)));
@ -1263,7 +1265,6 @@ void CZoneTest::ApplicationQuit(bool PowerButton)
{ {
qDebug("ExtIOThread wait = false"); qDebug("ExtIOThread wait = false");
} }
} }
void CZoneTest::ACPISocketConnected() void CZoneTest::ACPISocketConnected()