Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

114 righe
3.1 KiB

  1. #include "ModbusMaster.h"
  2. #include <QTcpSocket>
  3. #include "ProtocolDefs.h"
  4. CModbusMaster::CModbusMaster(CModbusRepository *Repo):
  5. CModbusBackend(Repo)
  6. {
  7. // connect(mModbusTCPSocketHandle,SIGNAL(readyRead()),this,SLOT(ModbusDataReady()));
  8. mModbusMode = MODBUS_MASTER_MODE;
  9. mModbusTCPSocketHandle = new QTcpSocket();
  10. connect(mModbusTCPSocketHandle,SIGNAL(readyRead()),this,SLOT(ModbusDataReady()));
  11. connect(mModbusTCPSocketHandle,SIGNAL(disconnected()),this,SLOT(SocketDisconnected()));
  12. connect(mModbusTCPSocketHandle,SIGNAL(connected()),this,SLOT(SocketConnected()));
  13. }
  14. CModbusMaster::~CModbusMaster()
  15. {
  16. if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState)
  17. {
  18. mModbusTCPSocketHandle->disconnectFromHost();
  19. mModbusTCPSocketHandle->waitForDisconnected(1000);
  20. }
  21. delete mModbusTCPSocketHandle;
  22. }
  23. int CModbusMaster::ConnectToSlave(QString SlaveIP, int SlavePort)
  24. {
  25. if(mModbusTCPSocketHandle->state() != QAbstractSocket::UnconnectedState)
  26. {
  27. return RET_ERROR;
  28. }
  29. mModbusTCPSocketHandle->connectToHost(SlaveIP,SlavePort);
  30. return RET_OK;
  31. }
  32. int CModbusMaster::DisconnectFromSlave()
  33. {
  34. if(mModbusTCPSocketHandle->state() != QAbstractSocket::ConnectedState)
  35. {
  36. qDebug("Trying to disconnect a non connected socket");
  37. mModbusTCPSocketHandle->disconnectFromHost();
  38. return 0;
  39. }
  40. qDebug("Requesting Disconnection...");
  41. mModbusTCPSocketHandle->disconnectFromHost();
  42. return 1;
  43. }
  44. void CModbusMaster::SocketConnected()
  45. {
  46. emit ModbusMasterConnected(this);
  47. qDebug("Master: Connection established with slave");
  48. }
  49. void CModbusMaster::SocketDisconnected()
  50. {
  51. ModbusLinkDisconnected();
  52. emit ModbusMasterDisconnected(this);
  53. mModbusTCPSocketHandle->flush();
  54. }
  55. int CModbusMaster::ReadModbusRegisters()
  56. {
  57. return SendReadHoldingRegistersRequest(MODBUS_ZT_DATA_BASE_REG,MODBUS_ZT_TABLE_DATA_SIZE); //Read all registers from ZT (2000 - 2027)
  58. }
  59. void CModbusMaster::RegistersDatabaseUpdated(quint16 StartAddress, quint16 Length)
  60. {
  61. emit ModbusMasterRepositoryUpdated();
  62. // qDebug("Database updated with ZT data...");
  63. }
  64. void CModbusMaster::ModbusResponseException(quint8 ExceptionCode, quint8 FctCode)
  65. {
  66. qDebug("Modbus MASTER exception: code:%d Fct:%d",ExceptionCode,FctCode);
  67. }
  68. int CModbusMaster::SendAN1ToZT()
  69. {
  70. //return SendWriteHoldingRegistersRequest(CC_AN1_REGISTER_ADDRESS,1);
  71. return SendWriteSingleRegisterRequest(MODBUS_CC_AN_BASE_REG_ADD);
  72. }
  73. int CModbusMaster::SendAN2ToZT()
  74. {
  75. //return SendWriteHoldingRegistersRequest(CC_AN2_REGISTER_ADDRESS,1);
  76. return SendWriteSingleRegisterRequest(MODBUS_CC_AN_BASE_REG_ADD);
  77. }
  78. int CModbusMaster::SendWatchdog()
  79. {
  80. return SendWriteSingleRegisterRequest(MODBUS_CC_WATCHDOG_BASE_REG_ADD);
  81. }
  82. int CModbusMaster::SendDateTime()
  83. {
  84. return SendWriteHoldingRegistersRequest(MODBUS_CC_CLK_UPDATE_BASE_REG_ADD,5);
  85. }
  86. int CModbusMaster::SendTrainData()
  87. {
  88. return SendWriteHoldingRegistersRequest(MODBUS_CC_ZT1_TRAIN_TYPE_REG_ADD,8);
  89. }
  90. int CModbusMaster::SendZTInhibitionData()
  91. {
  92. return SendWriteSingleRegisterRequest(MODBUS_CC_AN_BASE_REG_ADD);
  93. }