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
|
SONDE_LASER_EXT_1=ttyS1
|
||||||
|
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
#Changer cette valeur à OUI ou NON pour sélectionner la communication Modbus
|
#Changer cette valeur à OUI, NON ou AUTO pour sélectionner la communication Modbus avec la CC.
|
||||||
#avec la CC
|
# OUI: force l'utilisation de la communication Modbus avec la CC.
|
||||||
UTILISER_MODBUS_CC=OUI
|
# 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
|
#Adresse modbus de la ZT
|
||||||
MODBUS_CC_DEVID=1
|
MODBUS_CC_DEVID=1
|
||||||
#Port Modbus/TCP
|
#Port Modbus/TCP
|
||||||
MODBUS_CC_PORT=502
|
MODBUS_CC_PORT=502
|
||||||
|
#Interface Ethernet
|
||||||
|
MODBUS_CC_ETH_IF=eth2
|
||||||
|
|
||||||
#----------------------------------
|
#----------------------------------
|
||||||
#Changer cette valeur à OUI ou NON pour activer le
|
#Changer cette valeur à OUI ou NON pour activer le
|
||||||
|
|||||||
@ -82,7 +82,7 @@ void CZTLog::AddLogString(QString string,bool AddToEngLog)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if(AddToEngLog)
|
if(AddToEngLog)
|
||||||
CEngLog::instance()->AddLogString(string);
|
CEngLog::instance()->AddLogString(string,1);
|
||||||
|
|
||||||
if(string.at(string.length()-1) != '\n')
|
if(string.at(string.length()-1) != '\n')
|
||||||
string.append('\n');
|
string.append('\n');
|
||||||
|
|||||||
@ -57,7 +57,8 @@ CZTConfigMgr::CZTConfigMgr()
|
|||||||
mUseSimulator = false;
|
mUseSimulator = false;
|
||||||
|
|
||||||
//Modbus communication with CC
|
//Modbus communication with CC
|
||||||
mUseModbusCC = false;
|
mUseModbusCCMode = ZT_CONFIG_MODBUS_ENABLE_AUTODETECT;
|
||||||
|
mModbusCCIFName = "INVALID";
|
||||||
}
|
}
|
||||||
|
|
||||||
ZTConfigResult CZTConfigMgr::LoadZTConfig()
|
ZTConfigResult CZTConfigMgr::LoadZTConfig()
|
||||||
@ -157,13 +158,22 @@ ZTConfigResult CZTConfigMgr::LoadZTConfig()
|
|||||||
else if(string.contains("UTILISER_MODBUS_CC"))
|
else if(string.contains("UTILISER_MODBUS_CC"))
|
||||||
{
|
{
|
||||||
if(string.mid(pos) == "OUI")
|
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")
|
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
|
else
|
||||||
CEngLog::instance()->AddLogString(QString().sprintf("Invalid MODBUS_CC parameter: %s",string.mid(pos).toUtf8().constData()));
|
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"))
|
else if(string.contains("MODBUS_CC_DEVID"))
|
||||||
{
|
{
|
||||||
@ -190,6 +200,11 @@ ZTConfigResult CZTConfigMgr::LoadZTConfig()
|
|||||||
}
|
}
|
||||||
CEngLog::instance()->AddLogString(QString().sprintf("Port Modbus CC = %d",mModbusCCPort));
|
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
|
//Station configuration parameters
|
||||||
else if(string.contains("STATION"))
|
else if(string.contains("STATION"))
|
||||||
@ -265,15 +280,20 @@ bool CZTConfigMgr::GetSimulatorEnabled()
|
|||||||
return mUseSimulator;
|
return mUseSimulator;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CZTConfigMgr::GetModbusCCEnabled()
|
ZTConfigModbusEnableMode CZTConfigMgr::GetModbusCCEnabled()
|
||||||
{
|
{
|
||||||
return mUseModbusCC;
|
return mUseModbusCCMode;
|
||||||
}
|
}
|
||||||
int CZTConfigMgr::GetModbusCCDevID()
|
int CZTConfigMgr::GetModbusCCDevID()
|
||||||
{
|
{
|
||||||
return mModbusCCDevID;
|
return mModbusCCDevID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CZTConfigMgr::GetModbusCCIFName()
|
||||||
|
{
|
||||||
|
return mModbusCCIFName;
|
||||||
|
}
|
||||||
|
|
||||||
int CZTConfigMgr::GetModbusCCPort()
|
int CZTConfigMgr::GetModbusCCPort()
|
||||||
{
|
{
|
||||||
return mModbusCCPort;
|
return mModbusCCPort;
|
||||||
|
|||||||
@ -44,6 +44,13 @@ typedef enum eZTConfigResult
|
|||||||
ZT_CONFIG_PARAMETER_ERROR
|
ZT_CONFIG_PARAMETER_ERROR
|
||||||
}ZTConfigResult;
|
}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
|
typedef struct stExtModulesConfig
|
||||||
{
|
{
|
||||||
@ -83,9 +90,10 @@ public:
|
|||||||
QList<stLazerProbesConfig_t> *GetLazerProbesConfigList(void);
|
QList<stLazerProbesConfig_t> *GetLazerProbesConfigList(void);
|
||||||
int GetEngLog(void);
|
int GetEngLog(void);
|
||||||
bool GetSimulatorEnabled();
|
bool GetSimulatorEnabled();
|
||||||
bool GetModbusCCEnabled();
|
ZTConfigModbusEnableMode GetModbusCCEnabled();
|
||||||
int GetModbusCCPort();
|
int GetModbusCCPort();
|
||||||
int GetModbusCCDevID();
|
int GetModbusCCDevID();
|
||||||
|
QString GetModbusCCIFName();
|
||||||
// int GetLaserSensorCalib(){return mConfig_Station_LaserSensorCalib;}
|
// int GetLaserSensorCalib(){return mConfig_Station_LaserSensorCalib;}
|
||||||
|
|
||||||
|
|
||||||
@ -100,10 +108,11 @@ private:
|
|||||||
QList<stLazerProbesConfig_t> mConfig_LazerProbeModulesConfigList;
|
QList<stLazerProbesConfig_t> mConfig_LazerProbeModulesConfigList;
|
||||||
|
|
||||||
QString mConfig_Station_StationName;
|
QString mConfig_Station_StationName;
|
||||||
|
QString mModbusCCIFName;
|
||||||
// int mConfig_Station_LaserSensorCalib;
|
// int mConfig_Station_LaserSensorCalib;
|
||||||
int mEngLogVerbosity;
|
int mEngLogVerbosity;
|
||||||
bool mUseSimulator;
|
bool mUseSimulator;
|
||||||
bool mUseModbusCC;
|
ZTConfigModbusEnableMode mUseModbusCCMode;
|
||||||
int mModbusCCDevID;
|
int mModbusCCDevID;
|
||||||
int mModbusCCPort;
|
int mModbusCCPort;
|
||||||
|
|
||||||
|
|||||||
@ -483,7 +483,48 @@ unsigned int CZoneTest::InitZT()
|
|||||||
|
|
||||||
mExtIOThread->start(QThread::NormalPriority);
|
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 ModbusPort = CZTConfigMgr::instance()->GetModbusCCPort();
|
||||||
int DevID = CZTConfigMgr::instance()->GetModbusCCDevID();
|
int DevID = CZTConfigMgr::instance()->GetModbusCCDevID();
|
||||||
@ -492,6 +533,7 @@ unsigned int CZoneTest::InitZT()
|
|||||||
if(DevID >= 255)
|
if(DevID >= 255)
|
||||||
{
|
{
|
||||||
mWelcomePagePtr->InsertTextBoxString(QString("Valeur DevID Modbus CC invalide (%1)").arg(DevID));
|
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();
|
EnterDeadlockState();
|
||||||
return RET_ERROR;
|
return RET_ERROR;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user