Auto détection du réseau Modbus
Ajout d'une fonction d'aut détection d'une connexion Ethernet sur le port Modbus au démarrage.
This commit is contained in:
parent
36e387b152
commit
a6683e2058
@ -45,13 +45,17 @@ SONDE_LASER_INT_1=ttyS2
|
||||
SONDE_LASER_EXT_1=ttyS1
|
||||
|
||||
#----------------------------------
|
||||
#Changer cette valeur à OUI ou NON pour sélectionner la communication Modbus
|
||||
#avec la CC
|
||||
UTILISER_MODBUS_CC=OUI
|
||||
#Changer cette valeur à OUI, NON ou AUTO pour sélectionner la communication Modbus avec la CC.
|
||||
# OUI: force l'utilisation de la communication Modbus avec la CC.
|
||||
# NON: force la désactivation du lien Modbus avec la CC (utilisation des TC/TK discrètes)
|
||||
# AUTO: détection du lien Modbus au démarrage de la ZT et autoconfiguration de l'interface.
|
||||
UTILISER_MODBUS_CC=AUTO
|
||||
#Adresse modbus de la ZT
|
||||
MODBUS_CC_DEVID=1
|
||||
#Port Modbus/TCP
|
||||
MODBUS_CC_PORT=502
|
||||
#Interface Ethernet
|
||||
MODBUS_CC_ETH_IF=eth2
|
||||
|
||||
#----------------------------------
|
||||
#Changer cette valeur à OUI ou NON pour activer le
|
||||
|
||||
@ -82,7 +82,7 @@ void CZTLog::AddLogString(QString string,bool AddToEngLog)
|
||||
return;
|
||||
|
||||
if(AddToEngLog)
|
||||
CEngLog::instance()->AddLogString(string);
|
||||
CEngLog::instance()->AddLogString(string,1);
|
||||
|
||||
if(string.at(string.length()-1) != '\n')
|
||||
string.append('\n');
|
||||
|
||||
@ -57,7 +57,8 @@ CZTConfigMgr::CZTConfigMgr()
|
||||
mUseSimulator = false;
|
||||
|
||||
//Modbus communication with CC
|
||||
mUseModbusCC = false;
|
||||
mUseModbusCCMode = ZT_CONFIG_MODBUS_ENABLE_AUTODETECT;
|
||||
mModbusCCIFName = "INVALID";
|
||||
}
|
||||
|
||||
ZTConfigResult CZTConfigMgr::LoadZTConfig()
|
||||
@ -157,13 +158,22 @@ ZTConfigResult CZTConfigMgr::LoadZTConfig()
|
||||
else if(string.contains("UTILISER_MODBUS_CC"))
|
||||
{
|
||||
if(string.mid(pos) == "OUI")
|
||||
mUseModbusCC = true;
|
||||
{
|
||||
mUseModbusCCMode = ZT_CONFIG_MODBUS_ENABLE_FORCE_ON;
|
||||
CEngLog::instance()->AddLogString(QString().sprintf("Comm. Modbus avec la CC activée (forcée)"),1);
|
||||
}
|
||||
else if(string.mid(pos) == "NON")
|
||||
mUseSimulator = false;
|
||||
{
|
||||
mUseModbusCCMode = ZT_CONFIG_MODBUS_ENABLE_FORCE_OFF;
|
||||
CEngLog::instance()->AddLogString(QString().sprintf("Comm. Modbus avec la CC désactivée (forcée)"),1);
|
||||
}
|
||||
else if(string.mid(pos) == "AUTO")
|
||||
{
|
||||
mUseModbusCCMode = ZT_CONFIG_MODBUS_ENABLE_AUTODETECT;
|
||||
CEngLog::instance()->AddLogString(QString().sprintf("Comm. Modbus avec la CC = détection automatique"),1);
|
||||
}
|
||||
else
|
||||
CEngLog::instance()->AddLogString(QString().sprintf("Invalid MODBUS_CC parameter: %s",string.mid(pos).toUtf8().constData()));
|
||||
|
||||
CEngLog::instance()->AddLogString(QString().sprintf("Comm. Modbus avec la CC = %d",mUseModbusCC));
|
||||
}
|
||||
else if(string.contains("MODBUS_CC_DEVID"))
|
||||
{
|
||||
@ -190,6 +200,11 @@ ZTConfigResult CZTConfigMgr::LoadZTConfig()
|
||||
}
|
||||
CEngLog::instance()->AddLogString(QString().sprintf("Port Modbus CC = %d",mModbusCCPort));
|
||||
}
|
||||
else if(string.contains("MODBUS_CC_ETH_IF"))
|
||||
{
|
||||
mModbusCCIFName = (string.mid(pos));
|
||||
CEngLog::instance()->AddLogString(QString("Interface Modbus CC = %1").arg(mModbusCCIFName),1);
|
||||
}
|
||||
|
||||
//Station configuration parameters
|
||||
else if(string.contains("STATION"))
|
||||
@ -265,15 +280,20 @@ bool CZTConfigMgr::GetSimulatorEnabled()
|
||||
return mUseSimulator;
|
||||
}
|
||||
|
||||
bool CZTConfigMgr::GetModbusCCEnabled()
|
||||
ZTConfigModbusEnableMode CZTConfigMgr::GetModbusCCEnabled()
|
||||
{
|
||||
return mUseModbusCC;
|
||||
return mUseModbusCCMode;
|
||||
}
|
||||
int CZTConfigMgr::GetModbusCCDevID()
|
||||
{
|
||||
return mModbusCCDevID;
|
||||
}
|
||||
|
||||
QString CZTConfigMgr::GetModbusCCIFName()
|
||||
{
|
||||
return mModbusCCIFName;
|
||||
}
|
||||
|
||||
int CZTConfigMgr::GetModbusCCPort()
|
||||
{
|
||||
return mModbusCCPort;
|
||||
|
||||
@ -44,6 +44,13 @@ typedef enum eZTConfigResult
|
||||
ZT_CONFIG_PARAMETER_ERROR
|
||||
}ZTConfigResult;
|
||||
|
||||
typedef enum eZTConfigModbusEnableMode
|
||||
{
|
||||
ZT_CONFIG_MODBUS_ENABLE_FORCE_ON,
|
||||
ZT_CONFIG_MODBUS_ENABLE_FORCE_OFF,
|
||||
ZT_CONFIG_MODBUS_ENABLE_AUTODETECT
|
||||
}ZTConfigModbusEnableMode;
|
||||
|
||||
|
||||
typedef struct stExtModulesConfig
|
||||
{
|
||||
@ -83,9 +90,10 @@ public:
|
||||
QList<stLazerProbesConfig_t> *GetLazerProbesConfigList(void);
|
||||
int GetEngLog(void);
|
||||
bool GetSimulatorEnabled();
|
||||
bool GetModbusCCEnabled();
|
||||
ZTConfigModbusEnableMode GetModbusCCEnabled();
|
||||
int GetModbusCCPort();
|
||||
int GetModbusCCDevID();
|
||||
QString GetModbusCCIFName();
|
||||
// int GetLaserSensorCalib(){return mConfig_Station_LaserSensorCalib;}
|
||||
|
||||
|
||||
@ -100,10 +108,11 @@ private:
|
||||
QList<stLazerProbesConfig_t> mConfig_LazerProbeModulesConfigList;
|
||||
|
||||
QString mConfig_Station_StationName;
|
||||
QString mModbusCCIFName;
|
||||
// int mConfig_Station_LaserSensorCalib;
|
||||
int mEngLogVerbosity;
|
||||
bool mUseSimulator;
|
||||
bool mUseModbusCC;
|
||||
ZTConfigModbusEnableMode mUseModbusCCMode;
|
||||
int mModbusCCDevID;
|
||||
int mModbusCCPort;
|
||||
|
||||
|
||||
@ -483,7 +483,48 @@ unsigned int CZoneTest::InitZT()
|
||||
|
||||
mExtIOThread->start(QThread::NormalPriority);
|
||||
|
||||
if(CZTConfigMgr::instance()->GetModbusCCEnabled() == true)
|
||||
bool UseModbusInterface = false;
|
||||
if(CZTConfigMgr::instance()->GetModbusCCEnabled() != ZT_CONFIG_MODBUS_ENABLE_FORCE_OFF)
|
||||
{
|
||||
if(CZTConfigMgr::instance()->GetModbusCCEnabled() == ZT_CONFIG_MODBUS_ENABLE_FORCE_ON)
|
||||
{
|
||||
CEngLog::instance()->AddLogString("Interface Modbus activée (forcée)",1);
|
||||
UseModbusInterface = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//autodetect modbus interface...
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(UseModbusInterface == true)
|
||||
{
|
||||
int ModbusPort = CZTConfigMgr::instance()->GetModbusCCPort();
|
||||
int DevID = CZTConfigMgr::instance()->GetModbusCCDevID();
|
||||
@ -492,6 +533,7 @@ unsigned int CZoneTest::InitZT()
|
||||
if(DevID >= 255)
|
||||
{
|
||||
mWelcomePagePtr->InsertTextBoxString(QString("Valeur DevID Modbus CC invalide (%1)").arg(DevID));
|
||||
CEngLog::instance()->AddLogString(QString("Valeur DevID Modbus CC invalide (%1)").arg(DevID),1);
|
||||
EnterDeadlockState();
|
||||
return RET_ERROR;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user