Début implémentation de la communcation Modbus avec le SEI

Début implémentation de la communcation Modbus avec le SEI
This commit is contained in:
jfmartel 2019-09-16 13:35:52 -04:00
parent d235255053
commit 0d48aa67fd
13 changed files with 270 additions and 46 deletions

View File

@ -48,7 +48,6 @@ SONDE_LASER_EXT_1=ttyS1
#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=OUI
#Adresse modbus de la ZT
MODBUS_CC_DEVID=1
@ -57,6 +56,14 @@ MODBUS_CC_PORT=502
#Interface Ethernet
MODBUS_CC_ETH_IF=eth2
#----------------------------------
#Paramètres de communication Modbus avec le SEI (Serveur NetTrac).
#Adresse modbus de la ZT
MODBUS_SEI_DEVID=1
#Port Modbus/TCP
MODBUS_SEI_PORT=502
#----------------------------------
#Changer cette valeur à OUI ou NON pour activer le
SIMULATEUR=OUI

Binary file not shown.

9
ZT.pro
View File

@ -111,14 +111,14 @@ SOURCES += \
sources/TKTransportInterface.cpp \
sources/DiscreteTKTransport.cpp \
sources/Modbus/ModbusBackend.cpp \
sources/Modbus/ModbusMaster.cpp \
sources/Modbus/ModbusRepository.cpp \
sources/Modbus/ModbusCCMgr.cpp \
sources/Modbus/ModbusTKTransport.cpp \
sources/Stations/DuCollege.cpp \
sources/GuiElements/EthConnWidget.cpp \
sources/GuiElements/ModbusSettingsPage.cpp \
sources/Modbus/NetworkCfgMgr.cpp
sources/Modbus/NetworkCfgMgr.cpp \
sources/Modbus/ModbusSEIMgr.cpp
HEADERS += \
sources/MainPanel.h \
@ -228,7 +228,6 @@ HEADERS += \
sources/TKTransportInterface.h \
sources/DiscreteTKTransport.h \
sources/Modbus/ModbusBackend.h \
sources/Modbus/ModbusMaster.h \
sources/Modbus/ModbusRepository.h \
sources/Modbus/ModbusCCMgr.h \
sources/Modbus/ModbusCCDefs.h \
@ -236,7 +235,9 @@ HEADERS += \
sources/Stations/DuCollege.h \
sources/GuiElements/EthConnWidget.h \
sources/GuiElements/ModbusSettingsPage.h \
sources/Modbus/NetworkCfgMgr.h
sources/Modbus/NetworkCfgMgr.h \
sources/Modbus/ModbusSEIMgr.h \
sources/Modbus/ModbusSEIDefs.h
#QMAKE_LIBDIR += ./ExtLib
#QT += network

View File

@ -0,0 +1,150 @@
#ifndef MODBUSSEIDEFS_H
#define MODBUSSEIDEFS_H
#define SEI_MODBUS_ZT_DATA_BASE_REG 2000
#define SEI_MODBUS_ZT_TABLE_DATA_SIZE 28
#define SEI_MODBUS_SEI_DATA_BASE_REG 2037
#define SEI_MODBUS_SEI_TABLE_DATA_SIZE 2
#define SEI_MODBUS_ZT_WATCHDOG_REG 2027
#define SEI_MODBUS_SEI_WATCHDOG_REG 2038
#define SEI_MODBUS_SEI_ZT1_ALARM_RESET_MASK 0X0001
#define SEI_MODBUS_SEI_ZT2_ALARM_RESET_MASK 0X0002
////Flags definitions for HR2000
//#define SEI_ZT1_PP_INT_FLAG_MASK_1 0x0001
//#define SEI_ZT1_PP_INT_FLAG_MASK_2 0x0002
//#define SEI_ZT1_PP_INT_FLAG_MASK_3 0x0004
//#define SEI_ZT1_PP_INT_FLAG_MASK_4 0x0008
//#define SEI_ZT1_PP_EXT_FLAG_MASK_1 0x0010
//#define SEI_ZT1_PP_EXT_FLAG_MASK_2 0x0020
//#define SEI_ZT1_PP_EXT_FLAG_MASK_3 0x0040
//#define SEI_ZT1_PP_EXT_FLAG_MASK_4 0x0080
//#define SEI_ZT1_PG_FLAG_MASK_1 0x0100
//#define SEI_ZT1_PG_FLAG_MASK_2 0x0200
//#define SEI_ZT1_PG_FLAG_MASK_3 0x0400
//#define SEI_ZT1_PG_FLAG_MASK_4 0x0800
//#define SEI_ZT1_FN_FLAG_MASK_1 0x1000
//#define SEI_ZT1_FN_FLAG_MASK_2 0x2000
//#define SEI_ZT1_FN_FLAG_MASK_3 0x4000
//#define SEI_ZT1_FN_FLAG_MASK_4 0x8000
////Flags definitions for HR2017
//#define SEI_ZT2_PP_INT_FLAG_MASK_1 0x0001
//#define SEI_ZT2_PP_INT_FLAG_MASK_2 0x0002
//#define SEI_ZT2_PP_INT_FLAG_MASK_3 0x0004
//#define SEI_ZT2_PP_INT_FLAG_MASK_4 0x0008
//#define SEI_ZT2_PP_EXT_FLAG_MASK_1 0x0010
//#define SEI_ZT2_PP_EXT_FLAG_MASK_2 0x0020
//#define SEI_ZT2_PP_EXT_FLAG_MASK_3 0x0040
//#define SEI_ZT2_PP_EXT_FLAG_MASK_4 0x0080
////
//// ///UNUSED FLAGS NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define ZT2_PG_DUMMY_MASK_1 0x0100 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define ZT2_PG_DUMMY_MASK_2 0x0200 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define ZT2_PG_DUMMY_MASK_3 0x0400 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define ZT2_PG_DUMMY_MASK_4 0x0800 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define ZT2_FN_DUMMY_MASK_5 0x1000 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define ZT2_FN_DUMMY_MASK_6 0x2000 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define ZT2_FN_DUMMY_MASK_7 0x4000 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define ZT2_FV_DUMMY_MASK_8 0x8000 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
//// ////////////////////////////////////////////////////////////////////
////Flags definitions for HR2026
//#define SEI_ZT1_V00_ALARM_FLAG_MASK 0x0001
//#define SEI_ZT1_PEQ1_ALARM_FLAG_MASK 0x0002
//#define SEI_ZT1_ALARM_ITI_FLAG_MASK 0x8000
//#define SEI_ZT2_V02_ALARM_FLAG_MASK 0x0004
//#define SEI_ZT2_PEQ2_ALARM_FLAG_MASK 0x0008
//#define SEI_ZT2_ACTIVATED_ITI_DUMMY_MASK 0x4000 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
//#define SEI_ZT_ACTIVATED_ITI_FLAG_MASK 0x8000
////Flags definitions for HR2027
//#define ZT_WATCHDOG_ON_VALUE 0x8000
//#define ZT_WATCHDOG_OFF_VALUE 0x0000
////Register addressing
////Outgoing
//#define SEI_MODBUS_ZT_DATA_BASE_REG 2000
//#define SEI_MODBUS_ZT_TABLE_DATA_SIZE 36 //Taille de la table en écriture = 36 registres (2000 à 2035) //28 //Taille de la table en écriture = 28 registres (2000 à 2027)
//#define SEI_MODBUS_ZT1_ALARM_DATA_BASE_REG_ADD 2000
//#define SEI_MODBUS_ZT2_ALARM_DATA_BASE_REG_ADD 2017
//#define SEI_MODBUS_MISC_DATA_BASE_REG_ADD 2026
//#define SEI_MODBUS_ZT_WATCHDOG_REG_ADD 2027
//#define MODBUS_ZT1_ALARM_RANKS_BASE_ADD 2001
//#define MODBUS_ZT1_RANK_PP_INT_1_REG_ADD 2001
//#define MODBUS_ZT1_RANK_PP_INT_2_REG_ADD 2002
//#define MODBUS_ZT1_RANK_PP_INT_3_REG_ADD 2003
//#define MODBUS_ZT1_RANK_PP_INT_4_REG_ADD 2004
//#define MODBUS_ZT1_RANK_PP_EXT_1_REG_ADD 2005
//#define MODBUS_ZT1_RANK_PP_EXT_2_REG_ADD 2006
//#define MODBUS_ZT1_RANK_PP_EXT_3_REG_ADD 2007
//#define MODBUS_ZT1_RANK_PP_EXT_4_REG_ADD 2008
//#define MODBUS_ZT1_RANK_PG_1_REG_ADD 2009
//#define MODBUS_ZT1_RANK_PG_2_REG_ADD 2010
//#define MODBUS_ZT1_RANK_PG_3_REG_ADD 2011
//#define MODBUS_ZT1_RANK_PG_4_REG_ADD 2012
//#define MODBUS_ZT1_RANK_FN_1_REG_ADD 2013
//#define MODBUS_ZT1_RANK_FN_2_REG_ADD 2014
//#define MODBUS_ZT1_RANK_FN_3_REG_ADD 2015
//#define MODBUS_ZT1_RANK_FN_4_REG_ADD 2016
//#define MODBUS_ZT2_ALARM_RANKS_BASE_ADD 2018
//#define MODBUS_ZT2_RANK_PP_INT_1_REG_ADD 2018
//#define MODBUS_ZT2_RANK_PP_INT_2_REG_ADD 2019
//#define MODBUS_ZT2_RANK_PP_INT_3_REG_ADD 2020
//#define MODBUS_ZT2_RANK_PP_INT_4_REG_ADD 2021
//#define MODBUS_ZT2_RANK_PP_EXT_1_REG_ADD 2022
//#define MODBUS_ZT2_RANK_PP_EXT_2_REG_ADD 2023
//#define MODBUS_ZT2_RANK_PP_EXT_3_REG_ADD 2024
//#define MODBUS_ZT2_RANK_PP_EXT_4_REG_ADD 2025
///////UNUSED FLAGS NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define MODBUS_ZT2_DUMMY_RK_PG_1_REG_ADD 2028 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define MODBUS_ZT2_DUMMY_RK_PG_2_REG_ADD 2029 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define MODBUS_ZT2_DUMMY_RK_PG_3_REG_ADD 2030 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define MODBUS_ZT2_DUMMY_RK_PG_4_REG_ADD 2031 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define MODBUS_ZT2_DUMMY_FN_PG_1_REG_ADD 2032 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define MODBUS_ZT2_DUMMY_FN_PG_2_REG_ADD 2033 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define MODBUS_ZT2_DUMMY_FN_PG_3_REG_ADD 2034 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
////#define MODBUS_ZT2_DUMMY_FN_PG_4_REG_ADD 2035 //UNUSED FLAG NECESSARY FOR CC IMPLEMENTATION. MUST ALWAYS BE 0
//// ///////////////////////////////////////////////////////////////////
////Incoming
//#define MODBUS_CC_FCYCLE_ZT1_FLAG_MASK 0x0001
//#define MODBUS_CC_FCYCLE_ZT2_FLAG_MASK 0x0002
//#define MODBUS_CC_INHIBIT_ZT1_FLAG_MASK 0x0004
//#define MODBUS_CC_INHIBIT_ZT2_FLAG_MASK 0x0008
//#define MODBUS_CC_CLK_UPDATE_FLAG_MASK 0x8000
//#define MODBUS_CC_DATA_BASE_REG_ADD 2036//2028
//#define MODBUS_CC_TABLE_DATA_SIZE 15 //Taille de la table en lecture = 15 registres (2036 à 2050 ///(2028 à 2042)
//#define MODBUS_CC_WATCHDOG_BASE_REG_ADD 2036
//#define MODBUS_CC_AN_BASE_REG_ADD 2037
//#define MODBUS_CC_ZT1_TRAIN_TYPE_REG_ADD 2038
//#define MODBUS_CC_ZT2_TRAIN_TYPE_REG_ADD 2039
//#define MODBUS_CC_ZT1_TRAIN_ID_1_REG_ADD 2040
//#define MODBUS_CC_ZT1_TRAIN_ID_2_REG_ADD 2041
//#define MODBUS_CC_ZT1_TRAIN_ID_3_REG_ADD 2042
//#define MODBUS_CC_ZT2_TRAIN_ID_1_REG_ADD 2043
//#define MODBUS_CC_ZT2_TRAIN_ID_2_REG_ADD 2044
//#define MODBUS_CC_ZT2_TRAIN_ID_3_REG_ADD 2045
//#define MODBUS_CC_CLK_UPDATE_BASE_REG_ADD 2046
//#define MODUBS_CC_CLK_SEC_BASE_REG_ADD 2047
//#define MODUBS_CC_CLK_HR_MIN_BASE_REG_ADD 2048
//#define MODUBS_CC_CLK_MNT_DAY_BASE_REG_ADD 2049
//#define MODUBS_CC_CLK_YEAR_BASE_REG_ADD 2050
#endif // MODBUSSEIDEFS_H

View File

@ -1,8 +1,8 @@
#include "ModbusMaster.h"
#include "ModbusSEIMgr.h"
#include <QTcpSocket>
#include "ModbusCCDefs.h"
CModbusMaster::CModbusMaster(CModbusRepository *Repo, int ModbusPort, int DevID):
CModbusSEIMgr::CModbusSEIMgr(CModbusRepository *Repo, int ModbusPort, int DevID):
CModbusBackend(Repo)
{
// connect(mModbusTCPSocketHandle,SIGNAL(readyRead()),this,SLOT(ModbusDataReady()));
@ -16,7 +16,7 @@ CModbusMaster::CModbusMaster(CModbusRepository *Repo, int ModbusPort, int DevID)
connect(mModbusTCPSocketHandle,SIGNAL(connected()),this,SLOT(SocketConnected()));
}
CModbusMaster::~CModbusMaster()
CModbusSEIMgr::~CModbusSEIMgr()
{
if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState)
{
@ -26,7 +26,7 @@ CModbusMaster::~CModbusMaster()
delete mModbusTCPSocketHandle;
}
int CModbusMaster::ConnectToSlave(QString SlaveIP, int SlavePort)
int CModbusSEIMgr::ConnectToSlave(QString SlaveIP, int SlavePort)
{
if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState)
{
@ -38,7 +38,7 @@ int CModbusMaster::ConnectToSlave(QString SlaveIP, int SlavePort)
return RET_OK;
}
int CModbusMaster::DisconnectFromSlave()
int CModbusSEIMgr::DisconnectFromSlave()
{
if(mModbusTCPSocketHandle->state() != QAbstractSocket::ConnectedState)
{
@ -52,26 +52,26 @@ int CModbusMaster::DisconnectFromSlave()
return 1;
}
void CModbusMaster::SocketConnected()
void CModbusSEIMgr::SocketConnected()
{
emit ModbusMasterConnected(this);
qDebug("Master: Connection established with slave");
}
void CModbusMaster::SocketDisconnected()
void CModbusSEIMgr::SocketDisconnected()
{
ModbusLinkDisconnected();
emit ModbusMasterDisconnected(this);
}
int CModbusMaster::ReadModbusRegisters()
int CModbusSEIMgr::ReadModbusRegisters()
{
//return SendReadHoldingRegistersRequest(ZT_DATA_BASE_REGISTER_ADDRESS,4); //Read all 3 registers from ZT (2000 - 2003)
return RET_OK;
}
void CModbusMaster::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length)
void CModbusSEIMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length)
{
Q_UNUSED(StartAddress)
Q_UNUSED(Length)
@ -80,19 +80,19 @@ void CModbusMaster::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Lengt
qDebug("Database updated with ZT data...");
}
void CModbusMaster::ModbusResponseException(quint8 ExceptionCode, quint8 FctCode)
void CModbusSEIMgr::ModbusResponseException(quint8 ExceptionCode, quint8 FctCode)
{
qDebug("Modbus MASTER exception: code:%d Fct:%d",ExceptionCode,FctCode);
}
int CModbusMaster::SendAN1ToZT()
int CModbusSEIMgr::SendAN1ToZT()
{
//return SendWriteHoldingRegistersRequest(CC_AN1_REGISTER_ADDRESS,1);
//return SendWriteSingleRegisterRequest(CC_AN1_REGISTER_ADDRESS);
return RET_OK;
}
int CModbusMaster::SendAN2ToZT()
int CModbusSEIMgr::SendAN2ToZT()
{
//return SendWriteHoldingRegistersRequest(CC_AN2_REGISTER_ADDRESS,1);
//return SendWriteSingleRegisterRequest(CC_AN2_REGISTER_ADDRESS);

View File

@ -1,5 +1,5 @@
#ifndef CMODBUSMASTER_H
#define CMODBUSMASTER_H
#ifndef CMODBUSSEIMGR_H
#define CMODBUSSEIMGR_H
#include <QObject>
#include "ModbusBackend.h"
@ -7,12 +7,12 @@
class CModbusMaster : public CModbusBackend
class CModbusSEIMgr : public CModbusBackend
{
Q_OBJECT
public:
explicit CModbusMaster(CModbusRepository *Repo, int ModbusPort, int DevID);
~CModbusMaster();
explicit CModbusSEIMgr(CModbusRepository *Repo, int ModbusPort, int DevID);
~CModbusSEIMgr();
int ConnectToSlave(QString SlaveIP, int SlavePort);
int DisconnectFromSlave();
@ -27,8 +27,8 @@ private:
int mModbusPort;
signals:
void ModbusMasterConnected(CModbusMaster *);
void ModbusMasterDisconnected(CModbusMaster *);
void ModbusMasterConnected(CModbusSEIMgr *);
void ModbusMasterDisconnected(CModbusSEIMgr *);
void ModbusMasterRepositoryUpdated();
public slots:
@ -36,4 +36,4 @@ public slots:
void SocketDisconnected();
};
#endif // CMODBUSMASTER_H
#endif // CMODBUSSEIMGR_H

View File

@ -6,7 +6,7 @@
CModbusTKTransport::CModbusTKTransport(CModbusRepository *Repo)
{
mModbusRepo = Repo;
mMCCodbusRepo = Repo;
mZT1CDVState = mZT2CDVState = false;
mMaintenanceMode = mForceZT1Clear = mForceZT2Clear = false;
mZT1TKDataList.clear();
@ -50,7 +50,7 @@ int CModbusTKTransport::ClearTK(int ZT)
//Clear pannes & itineraire flags
bool OK = false;
quint16 PannesReg = mModbusRepo->GetSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,&OK);
quint16 PannesReg = mMCCodbusRepo->GetSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,&OK);
if(OK == false)
{
@ -65,8 +65,8 @@ int CModbusTKTransport::ClearTK(int ZT)
//
//Clear repo now...
mModbusRepo->WriteMultipleRegs(MODBUS_ZT1_ALARM_DATA_BASE_REG_ADD,Data);
mModbusRepo->WriteSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,PannesReg);
mMCCodbusRepo->WriteMultipleRegs(MODBUS_ZT1_ALARM_DATA_BASE_REG_ADD,Data);
mMCCodbusRepo->WriteSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,PannesReg);
}
@ -81,7 +81,7 @@ int CModbusTKTransport::ClearTK(int ZT)
//Clear pannes
bool OK = false;
quint16 PannesReg = mModbusRepo->GetSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,&OK);
quint16 PannesReg = mMCCodbusRepo->GetSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,&OK);
if(OK == false)
{
@ -92,8 +92,8 @@ int CModbusTKTransport::ClearTK(int ZT)
PannesReg &= ~ZT2_PEQ2_ALARM_FLAG_MASK;
//Clear repo now...
mModbusRepo->WriteMultipleRegs(MODBUS_ZT2_ALARM_DATA_BASE_REG_ADD,Data);
mModbusRepo->WriteSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,PannesReg);
mMCCodbusRepo->WriteMultipleRegs(MODBUS_ZT2_ALARM_DATA_BASE_REG_ADD,Data);
mMCCodbusRepo->WriteSingleReg(MODBUS_MISC_DATA_BASE_REG_ADD,PannesReg);
}
else
{
@ -115,7 +115,7 @@ int CModbusTKTransport::SendTKToCC(int ZT)
//Get a local buffer of the repo...
bool OK;
DataBuf = mModbusRepo->GetRegs(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE,&OK);
DataBuf = mMCCodbusRepo->GetRegs(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE,&OK);
if(OK == false)
{
CEngLog::instance()->AddLogString("Erreur de logique. ModbusTkTransport::SendTKToCC() ZT1 -> Lecture repository invalide.");
@ -262,7 +262,7 @@ int CModbusTKTransport::SendTKToCC(int ZT)
//Update the modbus repo to send the alarms...
DataBuf[RegOffset(MODBUS_ZT1_ALARM_DATA_BASE_REG_ADD)] = FlagsReg;
DataBuf[RegOffset(MODBUS_MISC_DATA_BASE_REG_ADD)] = PannesReg;
mModbusRepo->WriteMultipleRegs(MODBUS_ZT_DATA_BASE_REG,DataBuf);
mMCCodbusRepo->WriteMultipleRegs(MODBUS_ZT_DATA_BASE_REG,DataBuf);
}
else if(ZT == ZT2_TYPE_ID)
@ -275,7 +275,7 @@ int CModbusTKTransport::SendTKToCC(int ZT)
//Get a local buffer of the repo...
bool OK;
DataBuf = mModbusRepo->GetRegs(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE,&OK);
DataBuf = mMCCodbusRepo->GetRegs(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE,&OK);
if(OK == false)
{
CEngLog::instance()->AddLogString("Erreur de logique. ModbusTkTransport::SendTKToCC() ZT2 -> Lecture repository invalide.");
@ -364,7 +364,7 @@ int CModbusTKTransport::SendTKToCC(int ZT)
//Update the modbus repo to send the alarms...
DataBuf[RegOffset(MODBUS_ZT2_ALARM_DATA_BASE_REG_ADD)] = FlagsReg;
DataBuf[RegOffset(MODBUS_MISC_DATA_BASE_REG_ADD)] = PannesReg;
mModbusRepo->WriteMultipleRegs(MODBUS_ZT_DATA_BASE_REG,DataBuf);
mMCCodbusRepo->WriteMultipleRegs(MODBUS_ZT_DATA_BASE_REG,DataBuf);
}
else
@ -726,7 +726,7 @@ void CModbusTKTransport::ExecZT2SM()
void CModbusTKTransport::ModbusCCUpdated()
{
qint16 ClearReg = mModbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD);
qint16 ClearReg = mMCCodbusRepo->GetSingleReg(MODBUS_CC_AN_BASE_REG_ADD);
mZT1Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT1_FLAG_MASK)) != 0;
mZT2Clear = (ClearReg & (MODBUS_CC_FCYCLE_ZT2_FLAG_MASK)) != 0;
// qDebug("ZT1Clr = %d",mZT1Clear);

View File

@ -67,7 +67,7 @@ public:
virtual unsigned int EnterMaintenance();
private:
CModbusRepository *mModbusRepo;
CModbusRepository *mMCCodbusRepo;
QList<CZTDetectionData> mZT1TKDataList,mZT2TKDataList;
bool mZT1CDVState, mZT2CDVState;
bool mMaintenanceMode, mForceZT1Clear, mForceZT2Clear;

View File

@ -1,4 +1,5 @@
/*******************************************************************************
/*******************************************************************************
* *
* Société de Transports de Montréal. *
* 2012 - 2013 *

View File

@ -205,6 +205,28 @@ ZTConfigResult CZTConfigMgr::LoadZTConfig()
mModbusCCIFName = (string.mid(pos));
CEngLog::instance()->AddLogString(QString("Interface Modbus CC = %1").arg(mModbusCCIFName),1);
}
else if(string.contains("MODBUS_SEI_DEVID"))
{
bool OK;
mModbusSEIDevID = (string.mid(pos).toInt(&OK));
if(OK == false)
{
CEngLog::instance()->AddLogString(QString().sprintf("Invalid MODBUS_SEI_DEVID parameter: %s",string.mid(pos).toUtf8().constData()));
mModbusSEIDevID = 0;
}
CEngLog::instance()->AddLogString(QString().sprintf("Port DevID SEI = %d",mModbusSEIDevID));
}
else if(string.contains("MODBUS_SEI_PORT"))
{
bool OK;
mModbusSEIPort = (string.mid(pos).toInt(&OK));
if(OK == false)
{
CEngLog::instance()->AddLogString(QString().sprintf("Invalid MODBUS_SEI_PORT parameter: %s",string.mid(pos).toUtf8().constData()));
mModbusSEIPort = 6060;
}
CEngLog::instance()->AddLogString(QString().sprintf("Port DevID SEI = %d",mModbusSEIPort));
}
//Station configuration parameters
else if(string.contains("STATION"))
@ -299,6 +321,16 @@ int CZTConfigMgr::GetModbusCCPort()
return mModbusCCPort;
}
int CZTConfigMgr::GetModbusSEIPort()
{
return mModbusSEIPort;
}
int CZTConfigMgr::GetModbusSEIDevID()
{
return mModbusSEIDevID;
}
QString CZTConfigMgr::GetDataQIPAddress()
{
return mDataQIPAddr;

View File

@ -93,6 +93,8 @@ public:
ZTConfigModbusEnableMode GetModbusCCEnabled();
int GetModbusCCPort();
int GetModbusCCDevID();
int GetModbusSEIPort();
int GetModbusSEIDevID();
QString GetModbusCCIFName();
// int GetLaserSensorCalib(){return mConfig_Station_LaserSensorCalib;}
@ -109,12 +111,15 @@ private:
QString mConfig_Station_StationName;
QString mModbusCCIFName;
// int mConfig_Station_LaserSensorCalib;
int mEngLogVerbosity;
bool mUseSimulator;
ZTConfigModbusEnableMode mUseModbusCCMode;
int mModbusCCDevID;
int mModbusCCPort;
int mModbusSEIPort;
int mModbusSEIDevID;
};

View File

@ -58,8 +58,10 @@
#include "ZTVersion.h"
#include "ModbusCCDefs.h"
#include "ModbusTKTransport.h"
#include "ModbusSEIDefs.h"
#include <sys/time.h>
#ifdef USE_NETWORKING
#include "NetworkManager.h"
#endif
@ -84,6 +86,7 @@ CZoneTest::CZoneTest():
mTKTransportInterface = 0;
mCCModbusRepository = 0;
mModbusCCMgr = 0;
mModbusSEIMgr = 0;
mSimulationON = false;
mWatchdogEnabled = true;
@ -127,6 +130,11 @@ CZoneTest::~CZoneTest()
delete mModbusCCMgr;
}
if(mModbusSEIMgr != 0)
{
delete mModbusSEIMgr;
}
if(mAnalogModule != 0)
delete mAnalogModule;
}
@ -554,14 +562,24 @@ unsigned int CZoneTest::InitZT()
if(UseModbusInterface == true)
{
int ModbusPort = CZTConfigMgr::instance()->GetModbusCCPort();
int DevID = CZTConfigMgr::instance()->GetModbusCCDevID();
int ModbusCCPort = CZTConfigMgr::instance()->GetModbusCCPort();
int CCDevID = CZTConfigMgr::instance()->GetModbusCCDevID();
int ModbusSEIPort = CZTConfigMgr::instance()->GetModbusSEIPort();
int SEIDevID = CZTConfigMgr::instance()->GetModbusSEIDevID();
mWatchdogEnabled=false;
if(DevID >= 255)
if(CCDevID >= 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);
mWelcomePagePtr->InsertTextBoxString(QString("Valeur DevID Modbus CC invalide (%1)").arg(CCDevID));
CEngLog::instance()->AddLogString(QString("Valeur DevID Modbus CC invalide (%1)").arg(CCDevID),1);
EnterDeadlockState();
return RET_ERROR;
}
if(SEIDevID >= 255)
{
mWelcomePagePtr->InsertTextBoxString(QString("Valeur DevID Modbus SEI invalide (%1)").arg(SEIDevID));
CEngLog::instance()->AddLogString(QString("Valeur DevID Modbus SEI invalide (%1)").arg(SEIDevID),1);
EnterDeadlockState();
return RET_ERROR;
}
@ -571,10 +589,18 @@ unsigned int CZoneTest::InitZT()
mCCModbusRepository->AddHRDataMap(MODBUS_CC_DATA_BASE_REG_ADD,MODBUS_ZT_TABLE_DATA_SIZE); //Add the CC data map
if(mModbusCCMgr == 0)
{
mModbusCCMgr = new CModbusCCMgr(mCCModbusRepository,ModbusPort,DevID);
mModbusCCMgr = new CModbusCCMgr(mCCModbusRepository,ModbusCCPort,CCDevID);
}
mModbusCCMgr->StartModbusCCServer();
mSEIModbusRepository = new CModbusRepository;
mSEIModbusRepository->AddHRDataMap(SEI_MODBUS_ZT_DATA_BASE_REG,SEI_MODBUS_ZT_TABLE_DATA_SIZE); //Add the ZT data map
mSEIModbusRepository->AddHRDataMap(SEI_MODBUS_SEI_DATA_BASE_REG,SEI_MODBUS_SEI_TABLE_DATA_SIZE); //Add the SEI data map
if(mModbusSEIMgr == 0)
{
mModbusSEIMgr = new CModbusSEIMgr(mSEIModbusRepository,ModbusSEIPort,SEIDevID);
}
CModbusTKTransport *TransportInterface = new CModbusTKTransport(mCCModbusRepository);
mTKTransportInterface = (CTKTransportInterface*)TransportInterface;
connect(mModbusCCMgr,SIGNAL(RepoHasChanged()),TransportInterface,SLOT(ModbusCCUpdated()));

View File

@ -57,6 +57,7 @@
#include "DiscreteTKTransport.h"
#include "ModbusRepository.h"
#include "ModbusCCMgr.h"
#include "ModbusSEIMgr.h"
#include "NetworkCfgMgr.h"
#include "TCPProtocol.h"
@ -189,8 +190,9 @@ private:
CWatchdogCtrl *mInternalWatchdog;
bool mWatchdogEnabled;
CTKTransportInterface *mTKTransportInterface;
CModbusRepository *mCCModbusRepository;
CModbusRepository *mCCModbusRepository, *mSEIModbusRepository;
CModbusCCMgr *mModbusCCMgr;
CModbusSEIMgr *mModbusSEIMgr;
CNetworkCfgMgr mNetworkCfgMgr;
QLocalSocket mACPISocket;