diff --git a/setztexecutable b/setztexecutable index 7425e20..612a320 100755 --- a/setztexecutable +++ b/setztexecutable @@ -1,3 +1,4 @@ #!/bin/bash -sudo chown root:root ZT +#sudo chown root:root ZT #sudo chmod +s ZT +sudo -n ./SetPortCap.sh %1 diff --git a/sources/GuiElements/StatusBar.cpp b/sources/GuiElements/StatusBar.cpp index 9e897d8..f4d0305 100644 --- a/sources/GuiElements/StatusBar.cpp +++ b/sources/GuiElements/StatusBar.cpp @@ -51,17 +51,17 @@ CStatusBar::CStatusBar(QGraphicsItem *Parent): mHistoModbusState = SB_MODBUS_CONNECTED; mCCModbusONOFF.setParentItem(this); - mCCModbusONOFF.setPos(730,0); + mCCModbusONOFF.setPos(730,3); mCCModbusONOFF.EthOFF(); mCCModbusONOFF.hide(); mSEIModbusONOFF.setParentItem(this); - mSEIModbusONOFF.setPos(765,0); + mSEIModbusONOFF.setPos(765,3); mSEIModbusONOFF.EthOFF(); mSEIModbusONOFF.hide(); mHistorienModbusONOFF.setParentItem(this); - mHistorienModbusONOFF.setPos(800,0); + mHistorienModbusONOFF.setPos(800,3); mHistorienModbusONOFF.EthOFF(); mHistorienModbusONOFF.hide(); diff --git a/sources/Modbus/ModbusCCMgr.cpp b/sources/Modbus/ModbusCCMgr.cpp index a97989f..e62b531 100644 --- a/sources/Modbus/ModbusCCMgr.cpp +++ b/sources/Modbus/ModbusCCMgr.cpp @@ -54,6 +54,27 @@ int CModbusCCMgr::StartModbusCCServer() return 1; } + +bool CModbusCCMgr::CheckForCCPartner(const int msTimeout, const int port) +{ + QTcpServer *DummyServer = new QTcpServer(); + DummyServer->listen(QHostAddress::Any,port); + + if(DummyServer->waitForNewConnection(msTimeout) == true) + { + QTcpSocket* DummySocket = DummyServer->nextPendingConnection(); + DummySocket->disconnectFromHost(); + DummySocket->waitForDisconnected(1000); + delete DummySocket; + DummyServer->close(); + delete DummyServer; + return true; + } + DummyServer->close(); + delete DummyServer; + return false; +} + int CModbusCCMgr::CloseModbusCCServer() { mModbusServer->close(); @@ -74,7 +95,7 @@ int CModbusCCMgr::CloseModbusCCServer() delete mModbusTCPSocketHandle; } - CZTLog::instance()->AddLogString(QString("Serveur Modbus Commande Centralisée démarré sur le port %1").arg(mModbusPort),true); + CZTLog::instance()->AddLogString(QString("Serveur Modbus Commande Centralisée fermé"),true); return 1; } diff --git a/sources/Modbus/ModbusCCMgr.h b/sources/Modbus/ModbusCCMgr.h index 766df70..fea6f12 100644 --- a/sources/Modbus/ModbusCCMgr.h +++ b/sources/Modbus/ModbusCCMgr.h @@ -32,6 +32,7 @@ public: int StartModbusCCServer(); int CloseModbusCCServer(); bool IsModbusConnected(); + static bool CheckForCCPartner(const int msTimeout, const int port); diff --git a/sources/Zonetest.cpp b/sources/Zonetest.cpp index 1e64d55..1df14bf 100644 --- a/sources/Zonetest.cpp +++ b/sources/Zonetest.cpp @@ -493,34 +493,46 @@ unsigned int CZoneTest::InitZT() } else { - //autodetect modbus interface... - CEngLog::instance()->AddLogString("Auto-Détection de l'interface Modbus",1); - QString IFName = CZTConfigMgr::instance()->GetModbusCCIFName(); - if(IFName != "INVALID") +// //autodetect modbus interface... + int ModbusPort = CZTConfigMgr::instance()->GetModbusCCPort(); + mWelcomePagePtr->InsertTextBoxString(QString("Détection Modbus CC...")); + if(CModbusCCMgr::CheckForCCPartner(3000,ModbusPort) == true) { - QString CarrierFile = QString("/sys/class/net/%1/carrier").arg(IFName); - QFile *EthIfStateFile = new QFile(CarrierFile); - if(EthIfStateFile) - { - CEngLog::instance()->AddLogString(QString("Ouverture du fichier %1 ...").arg(IFName),3); - if(EthIfStateFile->open(QIODevice::ReadOnly | QIODevice::Text) == true) - { - QByteArray val = EthIfStateFile->readAll(); - QString State(val); - if(State.contains("1")) - { - CZTLog::instance()->AddLogString(QString("Connexion Ethernet CC détectée sur %1").arg(IFName),true); - UseModbusInterface = true; - } - else - { - CZTLog::instance()->AddLogString(QString("Connexion Ethernet CC inactive ou non-détectée sur %1").arg(IFName),true); - } - EthIfStateFile->close(); - } - delete EthIfStateFile; - } + UseModbusInterface = true; + mWelcomePagePtr->InsertTextBoxString(QString("Modbus CC détecté et activé")); } + else + { + mWelcomePagePtr->InsertTextBoxString(QString("Modbus CC non-détecté")); + } + +// CEngLog::instance()->AddLogString("Auto-Détection de l'interface Modbus",1); +// QString IFName = CZTConfigMgr::instance()->GetModbusCCIFName(); +// if(IFName != "INVALID") +// { +// QString CarrierFile = QString("/sys/class/net/%1/carrier").arg(IFName); +// QFile *EthIfStateFile = new QFile(CarrierFile); +// if(EthIfStateFile) +// { +// CEngLog::instance()->AddLogString(QString("Ouverture du fichier %1 ...").arg(IFName),3); +// if(EthIfStateFile->open(QIODevice::ReadOnly | QIODevice::Text) == true) +// { +// QByteArray val = EthIfStateFile->readAll(); +// QString State(val); +// if(State.contains("1")) +// { +// CZTLog::instance()->AddLogString(QString("Connexion Ethernet CC détectée sur %1").arg(IFName),true); +// UseModbusInterface = true; +// } +// else +// { +// CZTLog::instance()->AddLogString(QString("Connexion Ethernet CC inactive ou non-détectée sur %1").arg(IFName),true); +// } +// EthIfStateFile->close(); +// } +// delete EthIfStateFile; +// } +// } } } @@ -541,7 +553,10 @@ unsigned int CZoneTest::InitZT() mCCModbusRepository = new CModbusRepository; mCCModbusRepository->AddHRDataMap(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE); //Add the ZT data map mCCModbusRepository->AddHRDataMap(MODBUS_CC_DATA_BASE_REG_ADD,MODBUS_ZT_TABLE_DATA_SIZE); //Add the CC data map - mModbusCCMgr = new CModbusCCMgr(mCCModbusRepository,ModbusPort,DevID); + if(mModbusCCMgr == 0) + { + mModbusCCMgr = new CModbusCCMgr(mCCModbusRepository,ModbusPort,DevID); + } mModbusCCMgr->StartModbusCCServer(); CModbusTKTransport *TransportInterface = new CModbusTKTransport(mCCModbusRepository);