Modbus dev
Add modbus server closing capability before exiting application Add some pointers cleanup and fix memory leaks
This commit is contained in:
parent
9029432d46
commit
7a35241f76
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
|
/Escape.ZT
|
||||||
/LOG/LogZT.txt
|
/LOG/LogZT.txt
|
||||||
/ING/IngLog.txt
|
/ING/IngLog.txt
|
||||||
/sources/TKGenerator.cpp.autosave
|
/sources/TKGenerator.cpp.autosave
|
||||||
|
|||||||
@ -46,7 +46,11 @@ CModbusBackend::CModbusBackend(CModbusRepository *Repo)
|
|||||||
|
|
||||||
CModbusBackend::~CModbusBackend()
|
CModbusBackend::~CModbusBackend()
|
||||||
{
|
{
|
||||||
|
for(int i= 0; i < mRequestsList.size(); i++)
|
||||||
|
{
|
||||||
|
delete mRequestsList[i];
|
||||||
|
}
|
||||||
|
mRequestsList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CModbusBackend::ModbusDataReady()
|
void CModbusBackend::ModbusDataReady()
|
||||||
@ -62,6 +66,7 @@ void CModbusBackend::ModbusDataReady()
|
|||||||
*TransactionDataStrm >> Transaction.mHeader;
|
*TransactionDataStrm >> Transaction.mHeader;
|
||||||
*TransactionDataStrm >> Transaction.mPDU.mFunctionCode;
|
*TransactionDataStrm >> Transaction.mPDU.mFunctionCode;
|
||||||
Transaction.mPDU.mData = InData.right(Transaction.mHeader.mMessageLength - 2); //-2 to remove Device ID and Function Code.
|
Transaction.mPDU.mData = InData.right(Transaction.mHeader.mMessageLength - 2); //-2 to remove Device ID and Function Code.
|
||||||
|
//
|
||||||
|
|
||||||
// qDebug("---------------------------------------");
|
// qDebug("---------------------------------------");
|
||||||
// qDebug("modbus data received %s",InData.toHex().data());
|
// qDebug("modbus data received %s",InData.toHex().data());
|
||||||
@ -85,6 +90,8 @@ void CModbusBackend::ModbusDataReady()
|
|||||||
{
|
{
|
||||||
CEngLog::instance()->AddLogString("Erreur Modbus: <Illegal modbus backend mode...>"); //Erreur de logique interne. Ne doit pas survenir normalement
|
CEngLog::instance()->AddLogString("Erreur Modbus: <Illegal modbus backend mode...>"); //Erreur de logique interne. Ne doit pas survenir normalement
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete TransactionDataStrm;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CModbusBackend::ModbusLinkDisconnected()
|
void CModbusBackend::ModbusLinkDisconnected()
|
||||||
@ -432,9 +439,11 @@ int CModbusBackend::SendModbusRequest(CModbusRequest *Request)
|
|||||||
Buffer.close();
|
Buffer.close();
|
||||||
ModbusPacket.append(Request->mPDU.mData);
|
ModbusPacket.append(Request->mPDU.mData);
|
||||||
|
|
||||||
|
|
||||||
qDebug("Request packet: %s",ModbusPacket.toHex().data());
|
qDebug("Request packet: %s",ModbusPacket.toHex().data());
|
||||||
|
|
||||||
mModbusTCPSocketHandle->write(ModbusPacket);
|
mModbusTCPSocketHandle->write(ModbusPacket);
|
||||||
|
delete PacketDataStrm;
|
||||||
return RET_OK;
|
return RET_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -457,6 +466,7 @@ int CModbusBackend::SendErrorResponse(CModbusTransaction RequestTransaction, qui
|
|||||||
ModbusPacket.append(ErrorCode);
|
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()));
|
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());
|
// qDebug("Sending error code %d. Error packet: %s",ErrorCode,ModbusPacket.toHex().data());
|
||||||
|
|
||||||
|
|||||||
@ -39,6 +39,10 @@ CModbusCCMgr::~CModbusCCMgr()
|
|||||||
|
|
||||||
delete mZTWatchdogTimer;
|
delete mZTWatchdogTimer;
|
||||||
delete mCCWatchdogTimer;
|
delete mCCWatchdogTimer;
|
||||||
|
if(mLastDateTime != 0)
|
||||||
|
{
|
||||||
|
delete mLastDateTime;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int CModbusCCMgr::StartModbusCCServer()
|
int CModbusCCMgr::StartModbusCCServer()
|
||||||
@ -48,6 +52,30 @@ int CModbusCCMgr::StartModbusCCServer()
|
|||||||
return 1;
|
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()
|
void CModbusCCMgr::NewModbusConnection()
|
||||||
{
|
{
|
||||||
mModbusTCPSocketHandle = mModbusServer->nextPendingConnection();
|
mModbusTCPSocketHandle = mModbusServer->nextPendingConnection();
|
||||||
@ -128,7 +156,7 @@ void CModbusCCMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length
|
|||||||
{
|
{
|
||||||
delete mLastDateTime;
|
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);
|
emit ModbusDateTimeReceived(mLastDateTime);
|
||||||
|
|
||||||
qDebug("Date & Heure reçue du SACL: %s",mLastDateTime->toString("yyyy-MM-dd hh:mm:ss").toAscii().data());
|
qDebug("Date & Heure reçue du SACL: %s",mLastDateTime->toString("yyyy-MM-dd hh:mm:ss").toAscii().data());
|
||||||
|
|||||||
@ -30,6 +30,7 @@ public:
|
|||||||
virtual ~CModbusCCMgr();
|
virtual ~CModbusCCMgr();
|
||||||
|
|
||||||
int StartModbusCCServer();
|
int StartModbusCCServer();
|
||||||
|
int CloseModbusCCServer();
|
||||||
bool IsModbusConnected();
|
bool IsModbusConnected();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -117,6 +117,7 @@ int CModbusTKTransport::SendTKToCC(int ZT)
|
|||||||
CEngLog::instance()->AddLogString("Erreur de logique. ModbusTkTransport::SendTKToCC() ZT1 -> Lecture repository invalide.");
|
CEngLog::instance()->AddLogString("Erreur de logique. ModbusTkTransport::SendTKToCC() ZT1 -> Lecture repository invalide.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PannesReg = DataBuf.at(RegOffset(MODBUS_MISC_DATA_BASE_REG_ADD));
|
PannesReg = DataBuf.at(RegOffset(MODBUS_MISC_DATA_BASE_REG_ADD));
|
||||||
|
|
||||||
for(int i = 0; i < mZT1TKDataList.size(); i++)
|
for(int i = 0; i < mZT1TKDataList.size(); i++)
|
||||||
|
|||||||
@ -1254,10 +1254,18 @@ void CZoneTest::ApplicationQuit(bool PowerButton)
|
|||||||
else
|
else
|
||||||
mZtState = ZT_POWER_BUTTON_EXIT_STATE;
|
mZtState = ZT_POWER_BUTTON_EXIT_STATE;
|
||||||
|
|
||||||
|
if(mModbusCCMgr != 0)
|
||||||
|
{
|
||||||
|
if(mModbusCCMgr->CloseModbusCCServer() != 0)
|
||||||
|
{
|
||||||
|
qDebug("Modbus server closed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// qDebug("Creating escape file...");
|
// 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");
|
system("sync");
|
||||||
|
|
||||||
mExtIOThread->quit();
|
mExtIOThread->quit();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user