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:
parent
6500e25bd5
commit
cd943fea9e
@ -1,3 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
sudo chown root:root ZT
|
#sudo chown root:root ZT
|
||||||
#sudo chmod +s ZT
|
#sudo chmod +s ZT
|
||||||
|
sudo -n ./SetPortCap.sh %1
|
||||||
|
|||||||
@ -51,17 +51,17 @@ CStatusBar::CStatusBar(QGraphicsItem *Parent):
|
|||||||
mHistoModbusState = SB_MODBUS_CONNECTED;
|
mHistoModbusState = SB_MODBUS_CONNECTED;
|
||||||
|
|
||||||
mCCModbusONOFF.setParentItem(this);
|
mCCModbusONOFF.setParentItem(this);
|
||||||
mCCModbusONOFF.setPos(730,0);
|
mCCModbusONOFF.setPos(730,3);
|
||||||
mCCModbusONOFF.EthOFF();
|
mCCModbusONOFF.EthOFF();
|
||||||
mCCModbusONOFF.hide();
|
mCCModbusONOFF.hide();
|
||||||
|
|
||||||
mSEIModbusONOFF.setParentItem(this);
|
mSEIModbusONOFF.setParentItem(this);
|
||||||
mSEIModbusONOFF.setPos(765,0);
|
mSEIModbusONOFF.setPos(765,3);
|
||||||
mSEIModbusONOFF.EthOFF();
|
mSEIModbusONOFF.EthOFF();
|
||||||
mSEIModbusONOFF.hide();
|
mSEIModbusONOFF.hide();
|
||||||
|
|
||||||
mHistorienModbusONOFF.setParentItem(this);
|
mHistorienModbusONOFF.setParentItem(this);
|
||||||
mHistorienModbusONOFF.setPos(800,0);
|
mHistorienModbusONOFF.setPos(800,3);
|
||||||
mHistorienModbusONOFF.EthOFF();
|
mHistorienModbusONOFF.EthOFF();
|
||||||
mHistorienModbusONOFF.hide();
|
mHistorienModbusONOFF.hide();
|
||||||
|
|
||||||
|
|||||||
@ -54,6 +54,27 @@ int CModbusCCMgr::StartModbusCCServer()
|
|||||||
return 1;
|
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()
|
int CModbusCCMgr::CloseModbusCCServer()
|
||||||
{
|
{
|
||||||
mModbusServer->close();
|
mModbusServer->close();
|
||||||
@ -74,7 +95,7 @@ int CModbusCCMgr::CloseModbusCCServer()
|
|||||||
delete mModbusTCPSocketHandle;
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -32,6 +32,7 @@ public:
|
|||||||
int StartModbusCCServer();
|
int StartModbusCCServer();
|
||||||
int CloseModbusCCServer();
|
int CloseModbusCCServer();
|
||||||
bool IsModbusConnected();
|
bool IsModbusConnected();
|
||||||
|
static bool CheckForCCPartner(const int msTimeout, const int port);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -493,34 +493,46 @@ unsigned int CZoneTest::InitZT()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//autodetect modbus interface...
|
// //autodetect modbus interface...
|
||||||
CEngLog::instance()->AddLogString("Auto-Détection de l'interface Modbus",1);
|
int ModbusPort = CZTConfigMgr::instance()->GetModbusCCPort();
|
||||||
QString IFName = CZTConfigMgr::instance()->GetModbusCCIFName();
|
mWelcomePagePtr->InsertTextBoxString(QString("Détection Modbus CC..."));
|
||||||
if(IFName != "INVALID")
|
if(CModbusCCMgr::CheckForCCPartner(3000,ModbusPort) == true)
|
||||||
{
|
{
|
||||||
QString CarrierFile = QString("/sys/class/net/%1/carrier").arg(IFName);
|
UseModbusInterface = true;
|
||||||
QFile *EthIfStateFile = new QFile(CarrierFile);
|
mWelcomePagePtr->InsertTextBoxString(QString("Modbus CC détecté et activé"));
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
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 = new CModbusRepository;
|
||||||
mCCModbusRepository->AddHRDataMap(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE); //Add the ZT data map
|
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
|
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();
|
mModbusCCMgr->StartModbusCCServer();
|
||||||
|
|
||||||
CModbusTKTransport *TransportInterface = new CModbusTKTransport(mCCModbusRepository);
|
CModbusTKTransport *TransportInterface = new CModbusTKTransport(mCCModbusRepository);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user