From 40939880272e963303885af7c068e7c7a09ee030 Mon Sep 17 00:00:00 2001 From: Peter M. Groen Date: Wed, 16 Nov 2022 00:06:07 +0100 Subject: [PATCH] Fixed TCP Connection --- src/CMakeLists.txt | 4 ++-- src/modbusbase.cpp | 46 +++++++++++++++++++++++----------------------- src/modbusbase.h | 6 +++--- src/modbustcp.cpp | 12 +++++------- 4 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2553b10..7aac9df 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -11,8 +11,8 @@ set(SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/modbusbase.cpp ${CMAKE_CURRENT_SOURCE_DIR}/modbustcp.h ${CMAKE_CURRENT_SOURCE_DIR}/modbustcp.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/modbusrtu.h - ${CMAKE_CURRENT_SOURCE_DIR}/modbusrtu.cpp + #${CMAKE_CURRENT_SOURCE_DIR}/modbusrtu.h + #${CMAKE_CURRENT_SOURCE_DIR}/modbusrtu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/connectionconfig.h ${CMAKE_CURRENT_SOURCE_DIR}/connectionconfig.cpp ) diff --git a/src/modbusbase.cpp b/src/modbusbase.cpp index 74727ba..ae0a36b 100644 --- a/src/modbusbase.cpp +++ b/src/modbusbase.cpp @@ -20,7 +20,7 @@ int ModbusBase::readCoils(uint16_t address, uint16_t amount, bool *buffer) } modbusRead(address, amount, READ_COILS); - uint8_t to_rec[MAX_MSG_LENGTH]; + uint8_t to_rec[m_max_message_length]; ssize_t result = modbusReceive(to_rec); if (result == -1) { @@ -29,9 +29,9 @@ int ModbusBase::readCoils(uint16_t address, uint16_t amount, bool *buffer) } modbusErrorHandle(to_rec, READ_COILS); - if (err) + if (m_error) { - return err_no; + return m_error_number; } for (auto i = 0; i < amount; i++) @@ -58,7 +58,7 @@ int ModbusBase::readInputBits(uint16_t address, uint16_t amount, bool *buffer) } modbusRead(address, amount, READ_INPUT_BITS); - uint8_t to_rec[MAX_MSG_LENGTH]; + uint8_t to_rec[m_max_message_length]; ssize_t result = modbusReceive(to_rec); if (result == -1) { @@ -66,9 +66,9 @@ int ModbusBase::readInputBits(uint16_t address, uint16_t amount, bool *buffer) return BAD_CON; } - if (err) + if (m_error) { - return err_no; + return m_error_number; } for (auto i = 0; i < amount; i++) @@ -89,7 +89,7 @@ int ModbusBase::readHoldingRegisters(uint16_t address, uint16_t amount, uint16_t if (m_connected) { modbusRead(address, amount, READ_REGS); - uint8_t to_rec[MAX_MSG_LENGTH]; // <-- Transport layer dependent .. ? + uint8_t to_rec[m_max_message_length]; // <-- Transport layer dependent .. ? ssize_t result = modbusReceive(to_rec); if (result == -1) { @@ -97,9 +97,9 @@ int ModbusBase::readHoldingRegisters(uint16_t address, uint16_t amount, uint16_t return BAD_CON; } modbusErrorHandle(to_rec, READ_REGS); - if (err) + if (m_error) { - return err_no; + return m_error_number; } for (auto i = 0; i < amount; i++) { @@ -120,7 +120,7 @@ int ModbusBase::readInputRegisters(uint16_t address, uint16_t amount, uint16_t * if (m_connected) { modbusRead(address, amount, READ_INPUT_REGS); - uint8_t to_rec[MAX_MSG_LENGTH]; + uint8_t to_rec[m_max_message_length]; ssize_t result = modbusReceive(to_rec); if (result == -1) { @@ -129,9 +129,9 @@ int ModbusBase::readInputRegisters(uint16_t address, uint16_t amount, uint16_t * } modbusErrorHandle(to_rec, READ_INPUT_REGS); - if (err) + if (m_error) { - return err_no; + return m_error_number; } for (auto i = 0; i < amount; i++) @@ -154,7 +154,7 @@ int ModbusBase::writeCoil(uint16_t address, const bool &to_write) { int value = to_write * 0xFF00; modbusWrite(address, 1, WRITE_COIL, reinterpret_cast(&value)); - uint8_t to_rec[MAX_MSG_LENGTH]; + uint8_t to_rec[m_max_message_length]; ssize_t result = modbusReceive(to_rec); if (result == -1) { @@ -163,9 +163,9 @@ int ModbusBase::writeCoil(uint16_t address, const bool &to_write) } modbusErrorHandle(to_rec, WRITE_COIL); - if (err) + if (m_error) { - return err_no; + return m_error_number; } return 0; } @@ -181,7 +181,7 @@ int ModbusBase::writeRegister(uint16_t address, const uint16_t &value) if (m_connected) { modbusWrite(address, 1, WRITE_REG, &value); - uint8_t to_rec[MAX_MSG_LENGTH]; + uint8_t to_rec[m_max_message_length]; ssize_t result = modbusReceive(to_rec); if (result == -1) { @@ -190,9 +190,9 @@ int ModbusBase::writeRegister(uint16_t address, const uint16_t &value) } modbusErrorHandle(to_rec, WRITE_COIL); - if (err) + if (m_error) { - return err_no; + return m_error_number; } return 0; } @@ -216,7 +216,7 @@ int ModbusBase::writeCoils(uint16_t address, uint16_t amount, const bool *value) modbusWrite(address, amount, WRITE_COILS, temp); delete[] temp; - uint8_t to_rec[MAX_MSG_LENGTH]; + uint8_t to_rec[m_max_message_length]; ssize_t result = modbusReceive(to_rec); if (result == -1) { @@ -225,9 +225,9 @@ int ModbusBase::writeCoils(uint16_t address, uint16_t amount, const bool *value) } modbusErrorHandle(to_rec, WRITE_COILS); - if (err) + if (m_error) { - return err_no; + return m_error_number; } return 0; } @@ -252,9 +252,9 @@ int ModbusBase::writeRegisters(uint16_t address, uint16_t amount, const uint16_t } modbusErrorHandle(to_rec, WRITE_COILS); - if (err) + if (m_error) { - return err_no; + return m_error_number; } return 0; } diff --git a/src/modbusbase.h b/src/modbusbase.h index da250fe..29b72cd 100644 --- a/src/modbusbase.h +++ b/src/modbusbase.h @@ -20,9 +20,6 @@ #define LOG(...) (void)0 #endif -#define MAX_MSG_LENGTH_TCP 260 -#define MAX_MSG_LENGTH_RTU 252 - // Function Codes #define READ_COILS 0x01 #define READ_INPUT_BITS 0x02 @@ -150,6 +147,8 @@ public: bool getError() const { return m_error; } int getErrorNumber() const { return m_error_number; } std::string getErrorMessage() const { return m_error_message;} + void setMaxMessageLength(unsigned int max_message_length) { m_max_message_length = max_message_length; } + unsigned int getMaxMessageLength() const { return m_max_message_length; } private: // Methods /*! @@ -212,6 +211,7 @@ private: // Members (Giggity!) bool m_error{}; int m_error_number{}; std::string m_error_message; + unsigned int m_max_message_length; }; diff --git a/src/modbustcp.cpp b/src/modbustcp.cpp index e84e237..7ad285f 100644 --- a/src/modbustcp.cpp +++ b/src/modbustcp.cpp @@ -50,20 +50,18 @@ bool ModbusTCP::Connect() void ModbusTCP::Close() { - -} - -bool ModbusTCP::isConnected() const -{ - + X_CLOSE_SOCKET(m_socket); } ssize_t ModbusTCP::modbusSend(uint8_t *to_send, size_t length) { + uint32_t message_id = getMessageId(); + setMessageId(message_id++); + return send(m_socket, reinterpret_cast(to_send), static_cast(length), 0); } ssize_t ModbusTCP::modbusReceive(uint8_t *buffer) const { - + return recv(m_socket, reinterpret_cast(buffer), getMaxMessageLength(), 0); } -- libgit2 0.21.4