ZT/sources/Modbus/ModbusCCMgr.cpp

68 lines
2.1 KiB
C++

#include "ModbusCCMgr.h"
#include "ZTLog.h"
#include "EngLog.h"
CModbusCCMgr::CModbusCCMgr(CModbusRepository *Repo, int ModbusPort, int DevID) :
CModbusBackend(Repo)
{
mModbusServer = new QTcpServer();
mDeviceID = DevID;
mModbusPort = ModbusPort;
connect(mModbusServer,SIGNAL(newConnection()),this,SLOT(NewModbusConnection()));
mModbusMode = MODBUS_SLAVE_MODE;
}
CModbusCCMgr::~CModbusCCMgr()
{
delete mModbusServer;
}
int CModbusCCMgr::StartModbusCCServer()
{
mModbusServer->listen(QHostAddress::Any,mModbusPort);
CZTLog::instance()->AddLogString(QString("Serveur Modbus Commande Centralisée démarré sur le port %1").arg(mModbusPort),true);
return 1;
}
void CModbusCCMgr::NewModbusConnection()
{
mModbusTCPSocketHandle = mModbusServer->nextPendingConnection();
if(mModbusTCPSocketHandle != 0)
{
mDataLinkValid = true;
connect(mModbusTCPSocketHandle,SIGNAL(readyRead()),this,SLOT(ModbusDataReady()));
connect(mModbusTCPSocketHandle,SIGNAL(disconnected()),this,SLOT(ConnectionLost()));
//qDebug("ModbusCC: Connection with CC established");
CZTLog::instance()->AddLogString(QString("Connection Modbus avec la CC établie. IP[%1]").arg(mModbusTCPSocketHandle->peerAddress().toString()),true);
emit ModbusCCConnected();
}
}
void CModbusCCMgr::ConnectionLost()
{
ModbusLinkDisconnected();
emit ModbusCCDisconnected();
CZTLog::instance()->AddLogString(QString("Connection Modbus avec la CC rompue."),true);
}
bool CModbusCCMgr::IsModbusConnected()
{
return mDataLinkValid;
}
void CModbusCCMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length)
{
Q_UNUSED(StartAddress)
Q_UNUSED(Length)
emit RepoHasChanged();
}
void CModbusCCMgr::ModbusRequestException(quint8 ExceptionCode, quint8 FctCode)
{
//qDebug("Modbus CC: Request exception occured. ExceptCode: [%d], FctCode: [%d]",ExceptionCode,FctCode);
CEngLog::instance()->AddLogString(QString("Modbus CC: Exception de requête. ExceptionCode[%1], FctCode[%2]").arg(ExceptionCode).arg(FctCode));
}