ZT/sources/Modbus/ModbusSEIMgr.cpp
jfmartel 0d48aa67fd Début implémentation de la communcation Modbus avec le SEI
Début implémentation de la communcation Modbus avec le SEI
2019-09-16 13:35:52 -04:00

101 lines
2.9 KiB
C++

#include "ModbusSEIMgr.h"
#include <QTcpSocket>
#include "ModbusCCDefs.h"
CModbusSEIMgr::CModbusSEIMgr(CModbusRepository *Repo, int ModbusPort, int DevID):
CModbusBackend(Repo)
{
// connect(mModbusTCPSocketHandle,SIGNAL(readyRead()),this,SLOT(ModbusDataReady()));
mModbusMode = MODBUS_MASTER_MODE;
mModbusPort = ModbusPort;
mDeviceID = DevID;
mModbusTCPSocketHandle = new QTcpSocket();
connect(mModbusTCPSocketHandle,SIGNAL(readyRead()),this,SLOT(ModbusDataReady()));
connect(mModbusTCPSocketHandle,SIGNAL(disconnected()),this,SLOT(SocketDisconnected()));
connect(mModbusTCPSocketHandle,SIGNAL(connected()),this,SLOT(SocketConnected()));
}
CModbusSEIMgr::~CModbusSEIMgr()
{
if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState)
{
mModbusTCPSocketHandle->disconnectFromHost();
mModbusTCPSocketHandle->waitForDisconnected(1000);
}
delete mModbusTCPSocketHandle;
}
int CModbusSEIMgr::ConnectToSlave(QString SlaveIP, int SlavePort)
{
if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState)
{
return RET_ERROR;
}
mModbusTCPSocketHandle->connectToHost(SlaveIP,SlavePort);
return RET_OK;
}
int CModbusSEIMgr::DisconnectFromSlave()
{
if(mModbusTCPSocketHandle->state() != QAbstractSocket::ConnectedState)
{
qDebug("Trying to disconnect a non connected socket");
mModbusTCPSocketHandle->disconnectFromHost();
return 0;
}
qDebug("Requesting Disconnection...");
mModbusTCPSocketHandle->disconnectFromHost();
return 1;
}
void CModbusSEIMgr::SocketConnected()
{
emit ModbusMasterConnected(this);
qDebug("Master: Connection established with slave");
}
void CModbusSEIMgr::SocketDisconnected()
{
ModbusLinkDisconnected();
emit ModbusMasterDisconnected(this);
}
int CModbusSEIMgr::ReadModbusRegisters()
{
//return SendReadHoldingRegistersRequest(ZT_DATA_BASE_REGISTER_ADDRESS,4); //Read all 3 registers from ZT (2000 - 2003)
return RET_OK;
}
void CModbusSEIMgr::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length)
{
Q_UNUSED(StartAddress)
Q_UNUSED(Length)
emit ModbusMasterRepositoryUpdated();
qDebug("Database updated with ZT data...");
}
void CModbusSEIMgr::ModbusResponseException(quint8 ExceptionCode, quint8 FctCode)
{
qDebug("Modbus MASTER exception: code:%d Fct:%d",ExceptionCode,FctCode);
}
int CModbusSEIMgr::SendAN1ToZT()
{
//return SendWriteHoldingRegistersRequest(CC_AN1_REGISTER_ADDRESS,1);
//return SendWriteSingleRegisterRequest(CC_AN1_REGISTER_ADDRESS);
return RET_OK;
}
int CModbusSEIMgr::SendAN2ToZT()
{
//return SendWriteHoldingRegistersRequest(CC_AN2_REGISTER_ADDRESS,1);
//return SendWriteSingleRegisterRequest(CC_AN2_REGISTER_ADDRESS);
return RET_OK;
}