Détection automatique Modbus

Détection automatique au démarrage de la présence du HPC sur le réseau.
Si oui, le Modbus est activé, si non les I/O discrets sont utilisés.
This commit is contained in:
jfmartel 2017-11-10 14:53:04 -05:00
parent 6500e25bd5
commit cd943fea9e
5 changed files with 70 additions and 32 deletions

View File

@ -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

View File

@ -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();

View File

@ -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;
}

View File

@ -32,6 +32,7 @@ public:
int StartModbusCCServer();
int CloseModbusCCServer();
bool IsModbusConnected();
static bool CheckForCCPartner(const int msTimeout, const int port);

View File

@ -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);