68 lines
2.1 KiB
C++
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));
|
|
}
|