#include "ModbusMaster.h" #include #include "ProtocolDefs.h" CModbusMaster::CModbusMaster(CModbusRepository *Repo): CModbusBackend(Repo) { // connect(mModbusTCPSocketHandle,SIGNAL(readyRead()),this,SLOT(ModbusDataReady())); mModbusMode = MODBUS_MASTER_MODE; mModbusTCPSocketHandle = new QTcpSocket(); connect(mModbusTCPSocketHandle,SIGNAL(readyRead()),this,SLOT(ModbusDataReady())); connect(mModbusTCPSocketHandle,SIGNAL(disconnected()),this,SLOT(SocketDisconnected())); connect(mModbusTCPSocketHandle,SIGNAL(connected()),this,SLOT(SocketConnected())); } CModbusMaster::~CModbusMaster() { if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState) { mModbusTCPSocketHandle->disconnectFromHost(); mModbusTCPSocketHandle->waitForDisconnected(1000); } delete mModbusTCPSocketHandle; } int CModbusMaster::ConnectToSlave(QString SlaveIP, int SlavePort) { if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState) { return RET_ERROR; } mModbusTCPSocketHandle->connectToHost(SlaveIP,SlavePort); return RET_OK; } int CModbusMaster::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 CModbusMaster::SocketConnected() { emit ModbusMasterConnected(this); qDebug("Master: Connection established with slave"); } void CModbusMaster::SocketDisconnected() { ModbusLinkDisconnected(); emit ModbusMasterDisconnected(this); mModbusTCPSocketHandle->flush(); } int CModbusMaster::ReadModbusRegisters() { return SendReadHoldingRegistersRequest(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE); //Read all registers from ZT (2000 - 2027) } void CModbusMaster::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length) { emit ModbusMasterRepositoryUpdated(); // qDebug("Database updated with ZT data..."); } void CModbusMaster::ModbusResponseException(quint8 ExceptionCode, quint8 FctCode) { qDebug("Modbus MASTER exception: code:%d Fct:%d",ExceptionCode,FctCode); } int CModbusMaster::SendAN1ToZT() { //return SendWriteHoldingRegistersRequest(CC_AN1_REGISTER_ADDRESS,1); return SendWriteSingleRegisterRequest(MODBUS_CC_AN_BASE_REG_ADD); } int CModbusMaster::SendAN2ToZT() { //return SendWriteHoldingRegistersRequest(CC_AN2_REGISTER_ADDRESS,1); return SendWriteSingleRegisterRequest(MODBUS_CC_AN_BASE_REG_ADD); } int CModbusMaster::SendWatchdog() { return SendWriteSingleRegisterRequest(MODBUS_CC_WATCHDOG_BASE_REG_ADD); } int CModbusMaster::SendDateTime() { return SendWriteHoldingRegistersRequest(MODBUS_CC_CLK_UPDATE_BASE_REG_ADD,5); } int CModbusMaster::SendTrainData() { return SendWriteHoldingRegistersRequest(MODBUS_CC_ZT1_TRAIN_TYPE_REG_ADD,8); } int CModbusMaster::SendZTInhibitionData() { return SendWriteSingleRegisterRequest(MODBUS_CC_AN_BASE_REG_ADD); }