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. #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. # 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) # 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 UTILISER_MODBUS_CC=OUI
#Adresse modbus de la ZT #Adresse modbus de la ZT
MODBUS_CC_DEVID=1 MODBUS_CC_DEVID=1
@ -57,6 +56,14 @@ MODBUS_CC_PORT=502
#Interface Ethernet #Interface Ethernet
MODBUS_CC_ETH_IF=eth2 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 #Changer cette valeur à OUI ou NON pour activer le
SIMULATEUR=OUI SIMULATEUR=OUI

Binary file not shown.

9
ZT.pro
View File

@ -111,14 +111,14 @@ SOURCES += \
sources/TKTransportInterface.cpp \ sources/TKTransportInterface.cpp \
sources/DiscreteTKTransport.cpp \ sources/DiscreteTKTransport.cpp \
sources/Modbus/ModbusBackend.cpp \ sources/Modbus/ModbusBackend.cpp \
sources/Modbus/ModbusMaster.cpp \
sources/Modbus/ModbusRepository.cpp \ sources/Modbus/ModbusRepository.cpp \
sources/Modbus/ModbusCCMgr.cpp \ sources/Modbus/ModbusCCMgr.cpp \
sources/Modbus/ModbusTKTransport.cpp \ sources/Modbus/ModbusTKTransport.cpp \
sources/Stations/DuCollege.cpp \ sources/Stations/DuCollege.cpp \
sources/GuiElements/EthConnWidget.cpp \ sources/GuiElements/EthConnWidget.cpp \
sources/GuiElements/ModbusSettingsPage.cpp \ sources/GuiElements/ModbusSettingsPage.cpp \
sources/Modbus/NetworkCfgMgr.cpp sources/Modbus/NetworkCfgMgr.cpp \
sources/Modbus/ModbusSEIMgr.cpp
HEADERS += \ HEADERS += \
sources/MainPanel.h \ sources/MainPanel.h \
@ -228,7 +228,6 @@ HEADERS += \
sources/TKTransportInterface.h \ sources/TKTransportInterface.h \
sources/DiscreteTKTransport.h \ sources/DiscreteTKTransport.h \
sources/Modbus/ModbusBackend.h \ sources/Modbus/ModbusBackend.h \
sources/Modbus/ModbusMaster.h \
sources/Modbus/ModbusRepository.h \ sources/Modbus/ModbusRepository.h \
sources/Modbus/ModbusCCMgr.h \ sources/Modbus/ModbusCCMgr.h \
sources/Modbus/ModbusCCDefs.h \ sources/Modbus/ModbusCCDefs.h \
@ -236,7 +235,9 @@ HEADERS += \
sources/Stations/DuCollege.h \ sources/Stations/DuCollege.h \
sources/GuiElements/EthConnWidget.h \ sources/GuiElements/EthConnWidget.h \
sources/GuiElements/ModbusSettingsPage.h \ sources/GuiElements/ModbusSettingsPage.h \
sources/Modbus/NetworkCfgMgr.h sources/Modbus/NetworkCfgMgr.h \
sources/Modbus/ModbusSEIMgr.h \
sources/Modbus/ModbusSEIDefs.h
#QMAKE_LIBDIR += ./ExtLib #QMAKE_LIBDIR += ./ExtLib
#QT += network #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 <QTcpSocket>
#include "ModbusCCDefs.h" #include "ModbusCCDefs.h"
CModbusMaster::CModbusMaster(CModbusRepository *Repo, int ModbusPort, int DevID): CModbusSEIMgr::CModbusSEIMgr(CModbusRepository *Repo, int ModbusPort, int DevID):
CModbusBackend(Repo) CModbusBackend(Repo)
{ {
// connect(mModbusTCPSocketHandle,SIGNAL(readyRead()),this,SLOT(ModbusDataReady())); // 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())); connect(mModbusTCPSocketHandle,SIGNAL(connected()),this,SLOT(SocketConnected()));
} }
CModbusMaster::~CModbusMaster() CModbusSEIMgr::~CModbusSEIMgr()
{ {
if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState) if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState)
{ {
@ -26,7 +26,7 @@ CModbusMaster::~CModbusMaster()
delete mModbusTCPSocketHandle; delete mModbusTCPSocketHandle;
} }
int CModbusMaster::ConnectToSlave(QString SlaveIP, int SlavePort) int CModbusSEIMgr::ConnectToSlave(QString SlaveIP, int SlavePort)
{ {
if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState) if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState)
{ {
@ -38,7 +38,7 @@ int CModbusMaster::ConnectToSlave(QString SlaveIP, int SlavePort)
return RET_OK; return RET_OK;
} }
int CModbusMaster::DisconnectFromSlave() int CModbusSEIMgr::DisconnectFromSlave()
{ {
if(mModbusTCPSocketHandle->state() != QAbstractSocket::ConnectedState) if(mModbusTCPSocketHandle->state() != QAbstractSocket::ConnectedState)
{ {
@ -52,26 +52,26 @@ int CModbusMaster::DisconnectFromSlave()
return 1; return 1;
} }
void CModbusMaster::SocketConnected() void CModbusSEIMgr::SocketConnected()
{ {
emit ModbusMasterConnected(this); emit ModbusMasterConnected(this);
qDebug("Master: Connection established with slave"); qDebug("Master: Connection established with slave");
} }
void CModbusMaster::SocketDisconnected() void CModbusSEIMgr::SocketDisconnected()
{ {
ModbusLinkDisconnected(); ModbusLinkDisconnected();
emit ModbusMasterDisconnected(this); 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 SendReadHoldingRegistersRequest(ZT_DATA_BASE_REGISTER_ADDRESS,4); //Read all 3 registers from ZT (2000 - 2003)
return RET_OK; return RET_OK;
} }
void CModbusMaster::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length) void CModbusSEIMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length)
{ {
Q_UNUSED(StartAddress) Q_UNUSED(StartAddress)
Q_UNUSED(Length) Q_UNUSED(Length)
@ -80,19 +80,19 @@ void CModbusMaster::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Lengt
qDebug("Database updated with ZT data..."); 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); qDebug("Modbus MASTER exception: code:%d Fct:%d",ExceptionCode,FctCode);
} }
int CModbusMaster::SendAN1ToZT() int CModbusSEIMgr::SendAN1ToZT()
{ {
//return SendWriteHoldingRegistersRequest(CC_AN1_REGISTER_ADDRESS,1); //return SendWriteHoldingRegistersRequest(CC_AN1_REGISTER_ADDRESS,1);
//return SendWriteSingleRegisterRequest(CC_AN1_REGISTER_ADDRESS); //return SendWriteSingleRegisterRequest(CC_AN1_REGISTER_ADDRESS);
return RET_OK; return RET_OK;
} }
int CModbusMaster::SendAN2ToZT() int CModbusSEIMgr::SendAN2ToZT()
{ {
//return SendWriteHoldingRegistersRequest(CC_AN2_REGISTER_ADDRESS,1); //return SendWriteHoldingRegistersRequest(CC_AN2_REGISTER_ADDRESS,1);
//return SendWriteSingleRegisterRequest(CC_AN2_REGISTER_ADDRESS); //return SendWriteSingleRegisterRequest(CC_AN2_REGISTER_ADDRESS);

View File

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

View File

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

View File

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

View File

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

View File

@ -205,6 +205,28 @@ ZTConfigResult CZTConfigMgr::LoadZTConfig()
mModbusCCIFName = (string.mid(pos)); mModbusCCIFName = (string.mid(pos));
CEngLog::instance()->AddLogString(QString("Interface Modbus CC = %1").arg(mModbusCCIFName),1); 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 //Station configuration parameters
else if(string.contains("STATION")) else if(string.contains("STATION"))
@ -299,6 +321,16 @@ int CZTConfigMgr::GetModbusCCPort()
return mModbusCCPort; return mModbusCCPort;
} }
int CZTConfigMgr::GetModbusSEIPort()
{
return mModbusSEIPort;
}
int CZTConfigMgr::GetModbusSEIDevID()
{
return mModbusSEIDevID;
}
QString CZTConfigMgr::GetDataQIPAddress() QString CZTConfigMgr::GetDataQIPAddress()
{ {
return mDataQIPAddr; return mDataQIPAddr;

View File

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

View File

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

View File

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