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
|
||||
/ING/IngLog.txt
|
||||
/sources/TKGenerator.cpp.autosave
|
||||
|
||||
@ -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: <Illegal modbus backend mode...>"); //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());
|
||||
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -30,6 +30,7 @@ public:
|
||||
virtual ~CModbusCCMgr();
|
||||
|
||||
int StartModbusCCServer();
|
||||
int CloseModbusCCServer();
|
||||
bool IsModbusConnected();
|
||||
|
||||
|
||||
|
||||
@ -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++)
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user