47 ROS_ERROR_STREAM(
"Precheck for connection to " << ip <<
":" << port <<
" failed. " << modbus_strerror(errno)
59 "Could not establish modbus connection. " << modbus_strerror(errno) <<
".");
71 struct timeval response_timeout;
72 response_timeout.tv_sec = timeout_ms / 1000;
73 response_timeout.tv_usec = (timeout_ms % 1000) * 1000;
79 struct timeval response_timeout;
81 return static_cast<unsigned long>(response_timeout.tv_sec * 1000L + (response_timeout.tv_usec / 1000L));
92 RegCont tab_reg(static_cast<RegCont::size_type>(nb));
98 std::ostringstream err_stream;
99 err_stream <<
"Failed to read " << nb;
100 err_stream <<
" registers starting from " << addr;
101 err_stream <<
" with err: " << modbus_strerror(errno);
119 throw std::invalid_argument(
"Argument \"read_nb\" must not be negative");
121 RegCont read_reg(static_cast<RegCont::size_type>(read_nb));
123 if (write_reg.size() > std::numeric_limits<int>::max())
125 throw std::invalid_argument(
"Argument \"write_reg\" must not exceed max value of type \"int\"");
129 rc = modbus_write_and_read_registers(
modbus_connection_, write_addr, static_cast<int>(write_reg.size()),
130 write_reg.data(), read_addr, read_nb, read_reg.data());
131 ROS_DEBUG_NAMED(
"LibModbusClient",
"modbus_write_and_read_registers: writing from %i %i registers\ 132 and reading from %i %i registers",
133 write_addr, static_cast<int>(write_reg.size()), read_addr, read_nb);
136 std::string err =
"Failed to write and read modbus registers: ";
137 err.append(modbus_strerror(errno));
virtual ~LibModbusClient() override
See base class.
#define ROS_ERROR_STREAM_NAMED(name, args)
RegCont readHoldingRegister(int addr, int nb) override
See base class.
std::vector< uint16_t > RegCont
Convenience data type defining the data type for a collection of registers.
void close()
Close connection with server.
bool init(const char *ip, unsigned int port) override
See base class.
RegCont writeReadHoldingRegister(const int write_addr, const RegCont &write_reg, const int read_addr, const int read_nb) override
See base class.
#define ROS_DEBUG_NAMED(name,...)
void setResponseTimeoutInMs(unsigned long timeout_ms) override
See base class.
unsigned long getResponseTimeoutInMs() override
See base class.
bool checkIPConnection(const char *ip, const unsigned int &port)
Test the ip connection by connecting to the modbus server.
modbus_t * modbus_connection_
#define ROS_ERROR_STREAM(args)
Expection thrown by prbt_hardware_support::LibModbusClient::readHoldingRegister if a disconnect from ...