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:
jfmartel
2017-09-26 11:28:50 -04:00
parent 945f4ccb6b
commit a4df2627b3
14 changed files with 137 additions and 34 deletions
+2
View File
@@ -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)
+43 -10
View File
@@ -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;
}
}
+3
View File
@@ -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();