diff --git a/Configuration/ZT.cfg b/Configuration/ZT.cfg index a6d4926..c54d661 100644 --- a/Configuration/ZT.cfg +++ b/Configuration/ZT.cfg @@ -48,7 +48,6 @@ SONDE_LASER_EXT_1=ttyS1 #Changer cette valeur à OUI, NON ou AUTO pour sélectionner la communication Modbus avec la CC. # OUI: force l'utilisation de la communication Modbus avec la CC. # NON: force la désactivation du lien Modbus avec la CC (utilisation des TC/TK discrètes) -# AUTO: détection du lien Modbus au démarrage de la ZT et autoconfiguration de l'interface. UTILISER_MODBUS_CC=OUI #Adresse modbus de la ZT MODBUS_CC_DEVID=1 @@ -57,6 +56,14 @@ MODBUS_CC_PORT=502 #Interface Ethernet MODBUS_CC_ETH_IF=eth2 +#---------------------------------- +#Paramètres de communication Modbus avec le SEI (Serveur NetTrac). +#Adresse modbus de la ZT +MODBUS_SEI_DEVID=1 +#Port Modbus/TCP +MODBUS_SEI_PORT=502 + + #---------------------------------- #Changer cette valeur à OUI ou NON pour activer le SIMULATEUR=OUI diff --git a/Configuration/ZTSettings.ztc b/Configuration/ZTSettings.ztc index 080b8f7..b160524 100644 Binary files a/Configuration/ZTSettings.ztc and b/Configuration/ZTSettings.ztc differ diff --git a/ZT.pro b/ZT.pro index f5bf4f1..34ed711 100644 --- a/ZT.pro +++ b/ZT.pro @@ -111,14 +111,14 @@ SOURCES += \ sources/TKTransportInterface.cpp \ sources/DiscreteTKTransport.cpp \ sources/Modbus/ModbusBackend.cpp \ - sources/Modbus/ModbusMaster.cpp \ sources/Modbus/ModbusRepository.cpp \ sources/Modbus/ModbusCCMgr.cpp \ sources/Modbus/ModbusTKTransport.cpp \ sources/Stations/DuCollege.cpp \ sources/GuiElements/EthConnWidget.cpp \ sources/GuiElements/ModbusSettingsPage.cpp \ - sources/Modbus/NetworkCfgMgr.cpp + sources/Modbus/NetworkCfgMgr.cpp \ + sources/Modbus/ModbusSEIMgr.cpp HEADERS += \ sources/MainPanel.h \ @@ -228,7 +228,6 @@ HEADERS += \ sources/TKTransportInterface.h \ sources/DiscreteTKTransport.h \ sources/Modbus/ModbusBackend.h \ - sources/Modbus/ModbusMaster.h \ sources/Modbus/ModbusRepository.h \ sources/Modbus/ModbusCCMgr.h \ sources/Modbus/ModbusCCDefs.h \ @@ -236,7 +235,9 @@ HEADERS += \ sources/Stations/DuCollege.h \ sources/GuiElements/EthConnWidget.h \ sources/GuiElements/ModbusSettingsPage.h \ - sources/Modbus/NetworkCfgMgr.h + sources/Modbus/NetworkCfgMgr.h \ + sources/Modbus/ModbusSEIMgr.h \ + sources/Modbus/ModbusSEIDefs.h #QMAKE_LIBDIR += ./ExtLib #QT += network diff --git a/sources/Modbus/ModbusSEIDefs.h b/sources/Modbus/ModbusSEIDefs.h new file mode 100644 index 0000000..de2f3cf --- /dev/null +++ b/sources/Modbus/ModbusSEIDefs.h @@ -0,0 +1,150 @@ +#ifndef MODBUSSEIDEFS_H +#define MODBUSSEIDEFS_H + + +#define SEI_MODBUS_ZT_DATA_BASE_REG 2000 +#define SEI_MODBUS_ZT_TABLE_DATA_SIZE 28 + +#define SEI_MODBUS_SEI_DATA_BASE_REG 2037 +#define SEI_MODBUS_SEI_TABLE_DATA_SIZE 2 + +#define SEI_MODBUS_ZT_WATCHDOG_REG 2027 +#define SEI_MODBUS_SEI_WATCHDOG_REG 2038 + +#define SEI_MODBUS_SEI_ZT1_ALARM_RESET_MASK 0X0001 +#define SEI_MODBUS_SEI_ZT2_ALARM_RESET_MASK 0X0002 + + +////Flags definitions for HR2000 +//#define SEI_ZT1_PP_INT_FLAG_MASK_1 0x0001 +//#define SEI_ZT1_PP_INT_FLAG_MASK_2 0x0002 +//#define SEI_ZT1_PP_INT_FLAG_MASK_3 0x0004 +//#define SEI_ZT1_PP_INT_FLAG_MASK_4 0x0008 +//#define SEI_ZT1_PP_EXT_FLAG_MASK_1 0x0010 +//#define SEI_ZT1_PP_EXT_FLAG_MASK_2 0x0020 +//#define SEI_ZT1_PP_EXT_FLAG_MASK_3 0x0040 +//#define SEI_ZT1_PP_EXT_FLAG_MASK_4 0x0080 +//#define SEI_ZT1_PG_FLAG_MASK_1 0x0100 +//#define SEI_ZT1_PG_FLAG_MASK_2 0x0200 +//#define SEI_ZT1_PG_FLAG_MASK_3 0x0400 +//#define SEI_ZT1_PG_FLAG_MASK_4 0x0800 +//#define SEI_ZT1_FN_FLAG_MASK_1 0x1000 +//#define SEI_ZT1_FN_FLAG_MASK_2 0x2000 +//#define SEI_ZT1_FN_FLAG_MASK_3 0x4000 +//#define SEI_ZT1_FN_FLAG_MASK_4 0x8000 + +////Flags definitions for HR2017 +//#define SEI_ZT2_PP_INT_FLAG_MASK_1 0x0001 +//#define SEI_ZT2_PP_INT_FLAG_MASK_2 0x0002 +//#define SEI_ZT2_PP_INT_FLAG_MASK_3 0x0004 +//#define SEI_ZT2_PP_INT_FLAG_MASK_4 0x0008 +//#define SEI_ZT2_PP_EXT_FLAG_MASK_1 0x0010 +//#define SEI_ZT2_PP_EXT_FLAG_MASK_2 0x0020 +//#define SEI_ZT2_PP_EXT_FLAG_MASK_3 0x0040 +//#define SEI_ZT2_PP_EXT_FLAG_MASK_4 0x0080 + +//// +//// ///UNUSED FLAGS NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define ZT2_PG_DUMMY_MASK_1 0x0100 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define ZT2_PG_DUMMY_MASK_2 0x0200 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define ZT2_PG_DUMMY_MASK_3 0x0400 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define ZT2_PG_DUMMY_MASK_4 0x0800 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define ZT2_FN_DUMMY_MASK_5 0x1000 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define ZT2_FN_DUMMY_MASK_6 0x2000 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define ZT2_FN_DUMMY_MASK_7 0x4000 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define ZT2_FV_DUMMY_MASK_8 0x8000 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +//// //////////////////////////////////////////////////////////////////// + +////Flags definitions for HR2026 +//#define SEI_ZT1_V00_ALARM_FLAG_MASK 0x0001 +//#define SEI_ZT1_PEQ1_ALARM_FLAG_MASK 0x0002 +//#define SEI_ZT1_ALARM_ITI_FLAG_MASK 0x8000 +//#define SEI_ZT2_V02_ALARM_FLAG_MASK 0x0004 +//#define SEI_ZT2_PEQ2_ALARM_FLAG_MASK 0x0008 +//#define SEI_ZT2_ACTIVATED_ITI_DUMMY_MASK 0x4000 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +//#define SEI_ZT_ACTIVATED_ITI_FLAG_MASK 0x8000 + +////Flags definitions for HR2027 +//#define ZT_WATCHDOG_ON_VALUE 0x8000 +//#define ZT_WATCHDOG_OFF_VALUE 0x0000 + + +////Register addressing +////Outgoing +//#define SEI_MODBUS_ZT_DATA_BASE_REG 2000 +//#define SEI_MODBUS_ZT_TABLE_DATA_SIZE 36 //Taille de la table en écriture = 36 registres (2000 à 2035) //28 //Taille de la table en écriture = 28 registres (2000 à 2027) + +//#define SEI_MODBUS_ZT1_ALARM_DATA_BASE_REG_ADD 2000 +//#define SEI_MODBUS_ZT2_ALARM_DATA_BASE_REG_ADD 2017 +//#define SEI_MODBUS_MISC_DATA_BASE_REG_ADD 2026 +//#define SEI_MODBUS_ZT_WATCHDOG_REG_ADD 2027 + +//#define MODBUS_ZT1_ALARM_RANKS_BASE_ADD 2001 +//#define MODBUS_ZT1_RANK_PP_INT_1_REG_ADD 2001 +//#define MODBUS_ZT1_RANK_PP_INT_2_REG_ADD 2002 +//#define MODBUS_ZT1_RANK_PP_INT_3_REG_ADD 2003 +//#define MODBUS_ZT1_RANK_PP_INT_4_REG_ADD 2004 +//#define MODBUS_ZT1_RANK_PP_EXT_1_REG_ADD 2005 +//#define MODBUS_ZT1_RANK_PP_EXT_2_REG_ADD 2006 +//#define MODBUS_ZT1_RANK_PP_EXT_3_REG_ADD 2007 +//#define MODBUS_ZT1_RANK_PP_EXT_4_REG_ADD 2008 +//#define MODBUS_ZT1_RANK_PG_1_REG_ADD 2009 +//#define MODBUS_ZT1_RANK_PG_2_REG_ADD 2010 +//#define MODBUS_ZT1_RANK_PG_3_REG_ADD 2011 +//#define MODBUS_ZT1_RANK_PG_4_REG_ADD 2012 +//#define MODBUS_ZT1_RANK_FN_1_REG_ADD 2013 +//#define MODBUS_ZT1_RANK_FN_2_REG_ADD 2014 +//#define MODBUS_ZT1_RANK_FN_3_REG_ADD 2015 +//#define MODBUS_ZT1_RANK_FN_4_REG_ADD 2016 + +//#define MODBUS_ZT2_ALARM_RANKS_BASE_ADD 2018 +//#define MODBUS_ZT2_RANK_PP_INT_1_REG_ADD 2018 +//#define MODBUS_ZT2_RANK_PP_INT_2_REG_ADD 2019 +//#define MODBUS_ZT2_RANK_PP_INT_3_REG_ADD 2020 +//#define MODBUS_ZT2_RANK_PP_INT_4_REG_ADD 2021 +//#define MODBUS_ZT2_RANK_PP_EXT_1_REG_ADD 2022 +//#define MODBUS_ZT2_RANK_PP_EXT_2_REG_ADD 2023 +//#define MODBUS_ZT2_RANK_PP_EXT_3_REG_ADD 2024 +//#define MODBUS_ZT2_RANK_PP_EXT_4_REG_ADD 2025 + + +///////UNUSED FLAGS NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define MODBUS_ZT2_DUMMY_RK_PG_1_REG_ADD 2028 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define MODBUS_ZT2_DUMMY_RK_PG_2_REG_ADD 2029 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define MODBUS_ZT2_DUMMY_RK_PG_3_REG_ADD 2030 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define MODBUS_ZT2_DUMMY_RK_PG_4_REG_ADD 2031 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define MODBUS_ZT2_DUMMY_FN_PG_1_REG_ADD 2032 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define MODBUS_ZT2_DUMMY_FN_PG_2_REG_ADD 2033 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define MODBUS_ZT2_DUMMY_FN_PG_3_REG_ADD 2034 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +////#define MODBUS_ZT2_DUMMY_FN_PG_4_REG_ADD 2035 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0 +//// /////////////////////////////////////////////////////////////////// + + +////Incoming +//#define MODBUS_CC_FCYCLE_ZT1_FLAG_MASK 0x0001 +//#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 2036//2028 +//#define MODBUS_CC_TABLE_DATA_SIZE 15 //Taille de la table en lecture = 15 registres (2036 à 2050 ///(2028 à 2042) + + +//#define MODBUS_CC_WATCHDOG_BASE_REG_ADD 2036 +//#define MODBUS_CC_AN_BASE_REG_ADD 2037 +//#define MODBUS_CC_ZT1_TRAIN_TYPE_REG_ADD 2038 +//#define MODBUS_CC_ZT2_TRAIN_TYPE_REG_ADD 2039 +//#define MODBUS_CC_ZT1_TRAIN_ID_1_REG_ADD 2040 +//#define MODBUS_CC_ZT1_TRAIN_ID_2_REG_ADD 2041 +//#define MODBUS_CC_ZT1_TRAIN_ID_3_REG_ADD 2042 +//#define MODBUS_CC_ZT2_TRAIN_ID_1_REG_ADD 2043 +//#define MODBUS_CC_ZT2_TRAIN_ID_2_REG_ADD 2044 +//#define MODBUS_CC_ZT2_TRAIN_ID_3_REG_ADD 2045 +//#define MODBUS_CC_CLK_UPDATE_BASE_REG_ADD 2046 +//#define MODUBS_CC_CLK_SEC_BASE_REG_ADD 2047 +//#define MODUBS_CC_CLK_HR_MIN_BASE_REG_ADD 2048 +//#define MODUBS_CC_CLK_MNT_DAY_BASE_REG_ADD 2049 +//#define MODUBS_CC_CLK_YEAR_BASE_REG_ADD 2050 + +#endif // MODBUSSEIDEFS_H diff --git a/sources/Modbus/ModbusMaster.cpp b/sources/Modbus/ModbusSEIMgr.cpp similarity index 78% rename from sources/Modbus/ModbusMaster.cpp rename to sources/Modbus/ModbusSEIMgr.cpp index d2cf9fe..4402fb6 100644 --- a/sources/Modbus/ModbusMaster.cpp +++ b/sources/Modbus/ModbusSEIMgr.cpp @@ -1,8 +1,8 @@ -#include "ModbusMaster.h" +#include "ModbusSEIMgr.h" #include #include "ModbusCCDefs.h" -CModbusMaster::CModbusMaster(CModbusRepository *Repo, int ModbusPort, int DevID): +CModbusSEIMgr::CModbusSEIMgr(CModbusRepository *Repo, int ModbusPort, int DevID): CModbusBackend(Repo) { // connect(mModbusTCPSocketHandle,SIGNAL(readyRead()),this,SLOT(ModbusDataReady())); @@ -16,7 +16,7 @@ CModbusMaster::CModbusMaster(CModbusRepository *Repo, int ModbusPort, int DevID) connect(mModbusTCPSocketHandle,SIGNAL(connected()),this,SLOT(SocketConnected())); } -CModbusMaster::~CModbusMaster() +CModbusSEIMgr::~CModbusSEIMgr() { if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState) { @@ -26,7 +26,7 @@ CModbusMaster::~CModbusMaster() delete mModbusTCPSocketHandle; } -int CModbusMaster::ConnectToSlave(QString SlaveIP, int SlavePort) +int CModbusSEIMgr::ConnectToSlave(QString SlaveIP, int SlavePort) { if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState) { @@ -38,7 +38,7 @@ int CModbusMaster::ConnectToSlave(QString SlaveIP, int SlavePort) return RET_OK; } -int CModbusMaster::DisconnectFromSlave() +int CModbusSEIMgr::DisconnectFromSlave() { if(mModbusTCPSocketHandle->state() != QAbstractSocket::ConnectedState) { @@ -52,26 +52,26 @@ int CModbusMaster::DisconnectFromSlave() return 1; } -void CModbusMaster::SocketConnected() +void CModbusSEIMgr::SocketConnected() { emit ModbusMasterConnected(this); qDebug("Master: Connection established with slave"); } -void CModbusMaster::SocketDisconnected() +void CModbusSEIMgr::SocketDisconnected() { ModbusLinkDisconnected(); emit ModbusMasterDisconnected(this); } -int CModbusMaster::ReadModbusRegisters() +int CModbusSEIMgr::ReadModbusRegisters() { //return SendReadHoldingRegistersRequest(ZT_DATA_BASE_REGISTER_ADDRESS,4); //Read all 3 registers from ZT (2000 - 2003) return RET_OK; } -void CModbusMaster::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length) +void CModbusSEIMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length) { Q_UNUSED(StartAddress) Q_UNUSED(Length) @@ -80,19 +80,19 @@ void CModbusMaster::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Lengt qDebug("Database updated with ZT data..."); } -void CModbusMaster::ModbusResponseException(quint8 ExceptionCode, quint8 FctCode) +void CModbusSEIMgr::ModbusResponseException(quint8 ExceptionCode, quint8 FctCode) { qDebug("Modbus MASTER exception: code:%d Fct:%d",ExceptionCode,FctCode); } -int CModbusMaster::SendAN1ToZT() +int CModbusSEIMgr::SendAN1ToZT() { //return SendWriteHoldingRegistersRequest(CC_AN1_REGISTER_ADDRESS,1); //return SendWriteSingleRegisterRequest(CC_AN1_REGISTER_ADDRESS); return RET_OK; } -int CModbusMaster::SendAN2ToZT() +int CModbusSEIMgr::SendAN2ToZT() { //return SendWriteHoldingRegistersRequest(CC_AN2_REGISTER_ADDRESS,1); //return SendWriteSingleRegisterRequest(CC_AN2_REGISTER_ADDRESS); diff --git a/sources/Modbus/ModbusMaster.h b/sources/Modbus/ModbusSEIMgr.h similarity index 62% rename from sources/Modbus/ModbusMaster.h rename to sources/Modbus/ModbusSEIMgr.h index 9db5564..55631eb 100644 --- a/sources/Modbus/ModbusMaster.h +++ b/sources/Modbus/ModbusSEIMgr.h @@ -1,5 +1,5 @@ -#ifndef CMODBUSMASTER_H -#define CMODBUSMASTER_H +#ifndef CMODBUSSEIMGR_H +#define CMODBUSSEIMGR_H #include #include "ModbusBackend.h" @@ -7,12 +7,12 @@ -class CModbusMaster : public CModbusBackend +class CModbusSEIMgr : public CModbusBackend { Q_OBJECT public: - explicit CModbusMaster(CModbusRepository *Repo, int ModbusPort, int DevID); - ~CModbusMaster(); + explicit CModbusSEIMgr(CModbusRepository *Repo, int ModbusPort, int DevID); + ~CModbusSEIMgr(); int ConnectToSlave(QString SlaveIP, int SlavePort); int DisconnectFromSlave(); @@ -27,8 +27,8 @@ private: int mModbusPort; signals: - void ModbusMasterConnected(CModbusMaster *); - void ModbusMasterDisconnected(CModbusMaster *); + void ModbusMasterConnected(CModbusSEIMgr *); + void ModbusMasterDisconnected(CModbusSEIMgr *); void ModbusMasterRepositoryUpdated(); public slots: @@ -36,4 +36,4 @@ public slots: void SocketDisconnected(); }; -#endif // CMODBUSMASTER_H +#endif // CMODBUSSEIMGR_H diff --git a/sources/Modbus/ModbusTKTransport.cpp b/sources/Modbus/ModbusTKTransport.cpp index 2e02270..82ae9fd 100644 --- a/sources/Modbus/ModbusTKTransport.cpp +++ b/sources/Modbus/ModbusTKTransport.cpp @@ -6,7 +6,7 @@ CModbusTKTransport::CModbusTKTransport(CModbusRepository *Repo) { - mModbusRepo = Repo; + mMCCodbusRepo = Repo; mZT1CDVState = mZT2CDVState = false; mMaintenanceMode = mForceZT1Clear = mForceZT2Clear = false; mZT1TKDataList.clear(); @@ -50,7 +50,7 @@ int CModbusTKTransport::ClearTK(int ZT) //Clear pannes & itineraire flags bool OK = false; - quint16 PannesReg = mModbusRepo->GetSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,&OK); + quint16 PannesReg = mMCCodbusRepo->GetSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,&OK); if(OK == false) { @@ -65,8 +65,8 @@ int CModbusTKTransport::ClearTK(int ZT) // //Clear repo now... - mModbusRepo->WriteMultipleRegs(MODBUS_ZT1_ALARM_DATA_BASE_REG_ADD,Data); - mModbusRepo->WriteSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,PannesReg); + mMCCodbusRepo->WriteMultipleRegs(MODBUS_ZT1_ALARM_DATA_BASE_REG_ADD,Data); + mMCCodbusRepo->WriteSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,PannesReg); } @@ -81,7 +81,7 @@ int CModbusTKTransport::ClearTK(int ZT) //Clear pannes bool OK = false; - quint16 PannesReg = mModbusRepo->GetSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,&OK); + quint16 PannesReg = mMCCodbusRepo->GetSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,&OK); if(OK == false) { @@ -92,8 +92,8 @@ int CModbusTKTransport::ClearTK(int ZT) PannesReg &= ~ZT2_PEQ2_ALARM_FLAG_MASK; //Clear repo now... - mModbusRepo->WriteMultipleRegs(MODBUS_ZT2_ALARM_DATA_BASE_REG_ADD,Data); - mModbusRepo->WriteSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,PannesReg); + mMCCodbusRepo->WriteMultipleRegs(MODBUS_ZT2_ALARM_DATA_BASE_REG_ADD,Data); + mMCCodbusRepo->WriteSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,PannesReg); } else { @@ -115,7 +115,7 @@ int CModbusTKTransport::SendTKToCC(int ZT) //Get a local buffer of the repo... bool OK; - DataBuf = mModbusRepo->GetRegs(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE,&OK); + DataBuf = mMCCodbusRepo->GetRegs(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE,&OK); if(OK == false) { CEngLog::instance()->AddLogString("Erreur de logique. ModbusTkTransport::SendTKToCC() ZT1 -> Lecture repository invalide."); @@ -262,7 +262,7 @@ int CModbusTKTransport::SendTKToCC(int ZT) //Update the modbus repo to send the alarms... DataBuf[RegOffset(MODBUS_ZT1_ALARM_DATA_BASE_REG_ADD)] = FlagsReg; DataBuf[RegOffset(MODBUS_MISC_DATA_BASE_REG_ADD)] = PannesReg; - mModbusRepo->WriteMultipleRegs(MODBUS_ZT_DATA_BASE_REG,DataBuf); + mMCCodbusRepo->WriteMultipleRegs(MODBUS_ZT_DATA_BASE_REG,DataBuf); } else if(ZT == ZT2_TYPE_ID) @@ -275,7 +275,7 @@ int CModbusTKTransport::SendTKToCC(int ZT) //Get a local buffer of the repo... bool OK; - DataBuf = mModbusRepo->GetRegs(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE,&OK); + DataBuf = mMCCodbusRepo->GetRegs(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE,&OK); if(OK == false) { CEngLog::instance()->AddLogString("Erreur de logique. ModbusTkTransport::SendTKToCC() ZT2 -> Lecture repository invalide."); @@ -364,7 +364,7 @@ int CModbusTKTransport::SendTKToCC(int ZT) //Update the modbus repo to send the alarms... DataBuf[RegOffset(MODBUS_ZT2_ALARM_DATA_BASE_REG_ADD)] = FlagsReg; DataBuf[RegOffset(MODBUS_MISC_DATA_BASE_REG_ADD)] = PannesReg; - mModbusRepo->WriteMultipleRegs(MODBUS_ZT_DATA_BASE_REG,DataBuf); + mMCCodbusRepo->WriteMultipleRegs(MODBUS_ZT_DATA_BASE_REG,DataBuf); } else @@ -726,7 +726,7 @@ void CModbusTKTransport::ExecZT2SM() void CModbusTKTransport::ModbusCCUpdated() { - qint16 ClearReg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD); + qint16 ClearReg = mMCCodbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD); mZT1Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT1_FLAG_MASK)) != 0; mZT2Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT2_FLAG_MASK)) != 0; // qDebug("ZT1Clr = %d",mZT1Clear); diff --git a/sources/Modbus/ModbusTKTransport.h b/sources/Modbus/ModbusTKTransport.h index 2994604..45f591e 100644 --- a/sources/Modbus/ModbusTKTransport.h +++ b/sources/Modbus/ModbusTKTransport.h @@ -67,7 +67,7 @@ public: virtual unsigned int EnterMaintenance(); private: - CModbusRepository *mModbusRepo; + CModbusRepository *mMCCodbusRepo; QList mZT1TKDataList,mZT2TKDataList; bool mZT1CDVState, mZT2CDVState; bool mMaintenanceMode, mForceZT1Clear, mForceZT2Clear; diff --git a/sources/ZTVersion.h b/sources/ZTVersion.h index d684e54..dd7832f 100644 --- a/sources/ZTVersion.h +++ b/sources/ZTVersion.h @@ -1,4 +1,5 @@ -/******************************************************************************* + + /******************************************************************************* * * * Société de Transports de Montréal. * * 2012 - 2013 * diff --git a/sources/ZTconfigmgr.cpp b/sources/ZTconfigmgr.cpp index da9a617..cbd5e98 100644 --- a/sources/ZTconfigmgr.cpp +++ b/sources/ZTconfigmgr.cpp @@ -205,6 +205,28 @@ ZTConfigResult CZTConfigMgr::LoadZTConfig() mModbusCCIFName = (string.mid(pos)); CEngLog::instance()->AddLogString(QString("Interface Modbus CC = %1").arg(mModbusCCIFName),1); } + else if(string.contains("MODBUS_SEI_DEVID")) + { + bool OK; + mModbusSEIDevID = (string.mid(pos).toInt(&OK)); + if(OK == false) + { + CEngLog::instance()->AddLogString(QString().sprintf("Invalid MODBUS_SEI_DEVID parameter: %s",string.mid(pos).toUtf8().constData())); + mModbusSEIDevID = 0; + } + CEngLog::instance()->AddLogString(QString().sprintf("Port DevID SEI = %d",mModbusSEIDevID)); + } + else if(string.contains("MODBUS_SEI_PORT")) + { + bool OK; + mModbusSEIPort = (string.mid(pos).toInt(&OK)); + if(OK == false) + { + CEngLog::instance()->AddLogString(QString().sprintf("Invalid MODBUS_SEI_PORT parameter: %s",string.mid(pos).toUtf8().constData())); + mModbusSEIPort = 6060; + } + CEngLog::instance()->AddLogString(QString().sprintf("Port DevID SEI = %d",mModbusSEIPort)); + } //Station configuration parameters else if(string.contains("STATION")) @@ -299,6 +321,16 @@ int CZTConfigMgr::GetModbusCCPort() return mModbusCCPort; } +int CZTConfigMgr::GetModbusSEIPort() +{ + return mModbusSEIPort; +} + +int CZTConfigMgr::GetModbusSEIDevID() +{ + return mModbusSEIDevID; +} + QString CZTConfigMgr::GetDataQIPAddress() { return mDataQIPAddr; diff --git a/sources/ZTconfigmgr.h b/sources/ZTconfigmgr.h index 386292c..0e2e400 100644 --- a/sources/ZTconfigmgr.h +++ b/sources/ZTconfigmgr.h @@ -93,6 +93,8 @@ public: ZTConfigModbusEnableMode GetModbusCCEnabled(); int GetModbusCCPort(); int GetModbusCCDevID(); + int GetModbusSEIPort(); + int GetModbusSEIDevID(); QString GetModbusCCIFName(); // int GetLaserSensorCalib(){return mConfig_Station_LaserSensorCalib;} @@ -109,12 +111,15 @@ private: QString mConfig_Station_StationName; QString mModbusCCIFName; + // int mConfig_Station_LaserSensorCalib; int mEngLogVerbosity; bool mUseSimulator; ZTConfigModbusEnableMode mUseModbusCCMode; int mModbusCCDevID; int mModbusCCPort; + int mModbusSEIPort; + int mModbusSEIDevID; }; diff --git a/sources/Zonetest.cpp b/sources/Zonetest.cpp index 2a389db..1a5fdb6 100644 --- a/sources/Zonetest.cpp +++ b/sources/Zonetest.cpp @@ -58,8 +58,10 @@ #include "ZTVersion.h" #include "ModbusCCDefs.h" #include "ModbusTKTransport.h" +#include "ModbusSEIDefs.h" #include + #ifdef USE_NETWORKING #include "NetworkManager.h" #endif @@ -84,6 +86,7 @@ CZoneTest::CZoneTest(): mTKTransportInterface = 0; mCCModbusRepository = 0; mModbusCCMgr = 0; + mModbusSEIMgr = 0; mSimulationON = false; mWatchdogEnabled = true; @@ -127,6 +130,11 @@ CZoneTest::~CZoneTest() delete mModbusCCMgr; } + if(mModbusSEIMgr != 0) + { + delete mModbusSEIMgr; + } + if(mAnalogModule != 0) delete mAnalogModule; } @@ -554,14 +562,24 @@ unsigned int CZoneTest::InitZT() if(UseModbusInterface == true) { - int ModbusPort = CZTConfigMgr::instance()->GetModbusCCPort(); - int DevID = CZTConfigMgr::instance()->GetModbusCCDevID(); + int ModbusCCPort = CZTConfigMgr::instance()->GetModbusCCPort(); + int CCDevID = CZTConfigMgr::instance()->GetModbusCCDevID(); + int ModbusSEIPort = CZTConfigMgr::instance()->GetModbusSEIPort(); + int SEIDevID = CZTConfigMgr::instance()->GetModbusSEIDevID(); mWatchdogEnabled=false; - if(DevID >= 255) + if(CCDevID >= 255) { - mWelcomePagePtr->InsertTextBoxString(QString("Valeur DevID Modbus CC invalide (%1)").arg(DevID)); - CEngLog::instance()->AddLogString(QString("Valeur DevID Modbus CC invalide (%1)").arg(DevID),1); + mWelcomePagePtr->InsertTextBoxString(QString("Valeur DevID Modbus CC invalide (%1)").arg(CCDevID)); + CEngLog::instance()->AddLogString(QString("Valeur DevID Modbus CC invalide (%1)").arg(CCDevID),1); + EnterDeadlockState(); + return RET_ERROR; + } + + if(SEIDevID >= 255) + { + mWelcomePagePtr->InsertTextBoxString(QString("Valeur DevID Modbus SEI invalide (%1)").arg(SEIDevID)); + CEngLog::instance()->AddLogString(QString("Valeur DevID Modbus SEI invalide (%1)").arg(SEIDevID),1); EnterDeadlockState(); return RET_ERROR; } @@ -571,10 +589,18 @@ unsigned int CZoneTest::InitZT() mCCModbusRepository->AddHRDataMap(MODBUS_CC_DATA_BASE_REG_ADD,MODBUS_ZT_TABLE_DATA_SIZE); //Add the CC data map if(mModbusCCMgr == 0) { - mModbusCCMgr = new CModbusCCMgr(mCCModbusRepository,ModbusPort,DevID); + mModbusCCMgr = new CModbusCCMgr(mCCModbusRepository,ModbusCCPort,CCDevID); } mModbusCCMgr->StartModbusCCServer(); + mSEIModbusRepository = new CModbusRepository; + mSEIModbusRepository->AddHRDataMap(SEI_MODBUS_ZT_DATA_BASE_REG,SEI_MODBUS_ZT_TABLE_DATA_SIZE); //Add the ZT data map + mSEIModbusRepository->AddHRDataMap(SEI_MODBUS_SEI_DATA_BASE_REG,SEI_MODBUS_SEI_TABLE_DATA_SIZE); //Add the SEI data map + if(mModbusSEIMgr == 0) + { + mModbusSEIMgr = new CModbusSEIMgr(mSEIModbusRepository,ModbusSEIPort,SEIDevID); + } + CModbusTKTransport *TransportInterface = new CModbusTKTransport(mCCModbusRepository); mTKTransportInterface = (CTKTransportInterface*)TransportInterface; connect(mModbusCCMgr,SIGNAL(RepoHasChanged()),TransportInterface,SLOT(ModbusCCUpdated())); diff --git a/sources/Zonetest.h b/sources/Zonetest.h index c26414a..5cc90c7 100644 --- a/sources/Zonetest.h +++ b/sources/Zonetest.h @@ -57,6 +57,7 @@ #include "DiscreteTKTransport.h" #include "ModbusRepository.h" #include "ModbusCCMgr.h" +#include "ModbusSEIMgr.h" #include "NetworkCfgMgr.h" #include "TCPProtocol.h" @@ -189,8 +190,9 @@ private: CWatchdogCtrl *mInternalWatchdog; bool mWatchdogEnabled; CTKTransportInterface *mTKTransportInterface; - CModbusRepository *mCCModbusRepository; + CModbusRepository *mCCModbusRepository, *mSEIModbusRepository; CModbusCCMgr *mModbusCCMgr; + CModbusSEIMgr *mModbusSEIMgr; CNetworkCfgMgr mNetworkCfgMgr; QLocalSocket mACPISocket;