diff --git a/.gitignore b/.gitignore index b0795ff..cb11402 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/Escape.ZT /LOG/LogZT.txt /ING/IngLog.txt /sources/TKGenerator.cpp.autosave diff --git a/sources/Modbus/ModbusBackend.cpp b/sources/Modbus/ModbusBackend.cpp index 2d5f4cd..afd7bf5 100644 --- a/sources/Modbus/ModbusBackend.cpp +++ b/sources/Modbus/ModbusBackend.cpp @@ -46,7 +46,11 @@ CModbusBackend::CModbusBackend(CModbusRepository *Repo) CModbusBackend::~CModbusBackend() { - + for(int i= 0; i < mRequestsList.size(); i++) + { + delete mRequestsList[i]; + } + mRequestsList.clear(); } void CModbusBackend::ModbusDataReady() @@ -62,6 +66,7 @@ void CModbusBackend::ModbusDataReady() *TransactionDataStrm >> Transaction.mHeader; *TransactionDataStrm >> Transaction.mPDU.mFunctionCode; Transaction.mPDU.mData = InData.right(Transaction.mHeader.mMessageLength - 2); //-2 to remove Device ID and Function Code. + // // qDebug("---------------------------------------"); // qDebug("modbus data received %s",InData.toHex().data()); @@ -85,6 +90,8 @@ void CModbusBackend::ModbusDataReady() { CEngLog::instance()->AddLogString("Erreur Modbus: "); //Erreur de logique interne. Ne doit pas survenir normalement } + + delete TransactionDataStrm; } void CModbusBackend::ModbusLinkDisconnected() @@ -432,9 +439,11 @@ int CModbusBackend::SendModbusRequest(CModbusRequest *Request) Buffer.close(); ModbusPacket.append(Request->mPDU.mData); + qDebug("Request packet: %s",ModbusPacket.toHex().data()); mModbusTCPSocketHandle->write(ModbusPacket); + delete PacketDataStrm; return RET_OK; } @@ -457,6 +466,7 @@ int CModbusBackend::SendErrorResponse(CModbusTransaction RequestTransaction, qui ModbusPacket.append(ErrorCode); + CEngLog::instance()->AddLogString(QString("Modbus: Envoi d'un code d'un code d'erreur. Error Code %1, Error Packet: %2").arg(ErrorCode).arg(ModbusPacket.toHex().data())); // qDebug("Sending error code %d. Error packet: %s",ErrorCode,ModbusPacket.toHex().data()); diff --git a/sources/Modbus/ModbusCCMgr.cpp b/sources/Modbus/ModbusCCMgr.cpp index 0f0d787..addb993 100644 --- a/sources/Modbus/ModbusCCMgr.cpp +++ b/sources/Modbus/ModbusCCMgr.cpp @@ -39,6 +39,10 @@ CModbusCCMgr::~CModbusCCMgr() delete mZTWatchdogTimer; delete mCCWatchdogTimer; + if(mLastDateTime != 0) + { + delete mLastDateTime; + } } int CModbusCCMgr::StartModbusCCServer() @@ -48,6 +52,30 @@ int CModbusCCMgr::StartModbusCCServer() return 1; } +int CModbusCCMgr::CloseModbusCCServer() +{ + mModbusServer->close(); + if(mModbusTCPSocketHandle != 0) + { + mModbusTCPSocketHandle->flush(); + + if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState) + { + // qDebug("Disconnecting socket"); + mModbusTCPSocketHandle->disconnectFromHost(); + if(mModbusTCPSocketHandle->waitForDisconnected(1000) == false) + { + // qDebug("Could not disconnect socket"); + } + } + mModbusTCPSocketHandle->close(); + delete mModbusTCPSocketHandle; + } + + CZTLog::instance()->AddLogString(QString("Serveur Modbus Commande Centralisée démarré sur le port %1").arg(mModbusPort),true); + return 1; +} + void CModbusCCMgr::NewModbusConnection() { mModbusTCPSocketHandle = mModbusServer->nextPendingConnection(); @@ -128,7 +156,7 @@ void CModbusCCMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length { delete mLastDateTime; } - mLastDateTime = new QDateTime(NetworkTime.toLocalTime()); + mLastDateTime = new QDateTime(NetworkTime.toLocalTime()); //The QDateTime object will be deleted by the slot function... emit ModbusDateTimeReceived(mLastDateTime); qDebug("Date & Heure reçue du SACL: %s",mLastDateTime->toString("yyyy-MM-dd hh:mm:ss").toAscii().data()); diff --git a/sources/Modbus/ModbusCCMgr.h b/sources/Modbus/ModbusCCMgr.h index 5a535a1..a6206fd 100644 --- a/sources/Modbus/ModbusCCMgr.h +++ b/sources/Modbus/ModbusCCMgr.h @@ -30,6 +30,7 @@ public: virtual ~CModbusCCMgr(); int StartModbusCCServer(); + int CloseModbusCCServer(); bool IsModbusConnected(); diff --git a/sources/Modbus/ModbusTKTransport.cpp b/sources/Modbus/ModbusTKTransport.cpp index b3a673c..57d248d 100644 --- a/sources/Modbus/ModbusTKTransport.cpp +++ b/sources/Modbus/ModbusTKTransport.cpp @@ -117,6 +117,7 @@ int CModbusTKTransport::SendTKToCC(int ZT) CEngLog::instance()->AddLogString("Erreur de logique. ModbusTkTransport::SendTKToCC() ZT1 -> Lecture repository invalide."); } + PannesReg = DataBuf.at(RegOffset(MODBUS_MISC_DATA_BASE_REG_ADD)); for(int i = 0; i < mZT1TKDataList.size(); i++) diff --git a/sources/Zonetest.cpp b/sources/Zonetest.cpp index 6837c4e..c18153c 100644 --- a/sources/Zonetest.cpp +++ b/sources/Zonetest.cpp @@ -1254,10 +1254,18 @@ void CZoneTest::ApplicationQuit(bool PowerButton) else mZtState = ZT_POWER_BUTTON_EXIT_STATE; + if(mModbusCCMgr != 0) + { + if(mModbusCCMgr->CloseModbusCCServer() != 0) + { + qDebug("Modbus server closed"); + } + } + // qDebug("Creating escape file..."); - system("echo exit > ./Escape.ZT"); //Crée un fichier vide pour informer le script de ne pas redémarrer l'application + system("echo exit > ./Escape.ZT"); //Crée un fichier vide pour informer le script de ne pas redémarrer l'application system("sync"); mExtIOThread->quit();