Changements reliés au Modbus CC
-Possibilité d'émettre des rangs invalide en mode entretien (compilation spéciale seulement avec #define COMPILE_MODBUS_TEST_MODE). -Correction de la valeur du flag de mise à jour de l'heure. -Implémentation du flag d'itinéraire principal/secondaire dans la trame Modbus -Possibilité d'inhiber le watchdog Modbus à partir du mode entretien.
This commit is contained in:
@@ -41,6 +41,7 @@
|
||||
#define ZT1_ALARM_ITI_FLAG_MASK 0x8000
|
||||
#define ZT2_V02_ALARM_FLAG_MASK 0x0004
|
||||
#define ZT2_PEQ2_ALARM_FLAG_MASK 0x0008
|
||||
#define ZT_ACTIVATED_ITI_FLAG_MASK 0x8000
|
||||
|
||||
//Flags definitions for HR2027
|
||||
#define ZT_WATCHDOG_ON_VALUE 0x8000
|
||||
@@ -92,6 +93,7 @@
|
||||
#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_CLK_UPDATE_FLAG_MASK 0x8000
|
||||
|
||||
#define MODBUS_CC_DATA_BASE_REG_ADD 2028
|
||||
#define MODBUS_CC_TABLE_DATA_SIZE 15 //Taille de la table en lecture = 15 registres (2028 à 2042)
|
||||
|
||||
@@ -11,6 +11,7 @@ CModbusCCMgr::CModbusCCMgr(CModbusRepository *Repo, int ModbusPort, int DevID) :
|
||||
mModbusServer = new QTcpServer();
|
||||
mDeviceID = DevID;
|
||||
mModbusPort = ModbusPort;
|
||||
mZTWatchdogEnabled = true;
|
||||
|
||||
connect(mModbusServer,SIGNAL(newConnection()),this,SLOT(NewModbusConnection()));
|
||||
mModbusMode = MODBUS_SLAVE_MODE;
|
||||
@@ -131,7 +132,7 @@ void CModbusCCMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length
|
||||
if(mCCLinkState == true) //Ignore incoming data if the link is not healty (Watchdog).
|
||||
{
|
||||
qint16 NTPWrite = mModbusRepo->GetSingleReg(MODBUS_CC_CLK_UPDATE_BASE_REG_ADD);
|
||||
if(NTPWrite == 1)
|
||||
if((NTPWrite & MODBUS_CC_CLK_UPDATE_FLAG_MASK) != 0)
|
||||
{
|
||||
//Update date & time...
|
||||
bool OK;
|
||||
@@ -185,16 +186,19 @@ void CModbusCCMgr::ModbusCCWatchdogTimeout()
|
||||
void CModbusCCMgr::ModbusZTWatchdogTimeout()
|
||||
{
|
||||
|
||||
quint16 WD = mZTWatchdog;
|
||||
// qDebug("WD = 0x%x",WD);
|
||||
mModbusRepo->WriteSingleReg(MODBUS_ZT_WATCHDOG_REG_ADD,WD);
|
||||
if(mZTWatchdog == ZT_WATCHDOG_ON_VALUE)
|
||||
if(mZTWatchdogEnabled)
|
||||
{
|
||||
mZTWatchdog = ZT_WATCHDOG_OFF_VALUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
mZTWatchdog = ZT_WATCHDOG_ON_VALUE;
|
||||
quint16 WD = mZTWatchdog;
|
||||
// qDebug("WD = 0x%x",WD);
|
||||
mModbusRepo->WriteSingleReg(MODBUS_ZT_WATCHDOG_REG_ADD,WD);
|
||||
if(mZTWatchdog == ZT_WATCHDOG_ON_VALUE)
|
||||
{
|
||||
mZTWatchdog = ZT_WATCHDOG_OFF_VALUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
mZTWatchdog = ZT_WATCHDOG_ON_VALUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -401,3 +405,32 @@ qint16 CModbusCCMgr::GetZT2TrainType()
|
||||
}
|
||||
return Type;
|
||||
}
|
||||
|
||||
int CModbusCCMgr::SetZTWatchdogEnabled(bool Enabled)
|
||||
{
|
||||
mZTWatchdogEnabled = Enabled;
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CModbusCCMgr::SetActivatedITI(int ITI)
|
||||
{
|
||||
bool OK = false;
|
||||
quint16 Reg = mModbusRepo->GetSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,&OK);
|
||||
if(OK == true)
|
||||
{
|
||||
if(ITI == ZT_SECONDARY_ITI)
|
||||
{
|
||||
Reg |= ZT_ACTIVATED_ITI_FLAG_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
Reg &= ~ZT_ACTIVATED_ITI_FLAG_MASK;
|
||||
}
|
||||
|
||||
return mModbusRepo->WriteSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,Reg);
|
||||
}
|
||||
else
|
||||
{
|
||||
return RET_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,6 +49,8 @@ public:
|
||||
int ClearZT2InhibitionFlag();
|
||||
qint16 GetZT1TrainType();
|
||||
qint16 GetZT2TrainType();
|
||||
int SetZTWatchdogEnabled(bool Enabled);
|
||||
int SetActivatedITI(int ITI);
|
||||
|
||||
private:
|
||||
QTcpServer *mModbusServer;
|
||||
@@ -58,6 +60,7 @@ private:
|
||||
qint16 mCCWatchdogState;
|
||||
bool mCCLinkState;
|
||||
QDateTime *mLastDateTime;
|
||||
bool mZTWatchdogEnabled;
|
||||
|
||||
int ResetCCRepository();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user