22 #include <std_msgs/MultiArrayDimension.h> 39 RegCont tab_reg(last_index_to_read - first_index_to_read + 1);
42 tab_reg[reg.first - first_index_to_read] = reg.second;
46 msg->header.stamp = time;
51 const std_msgs::MultiArrayLayout::_data_offset_type& offset,
52 const RegCont::size_type& size)
54 if (size > std::numeric_limits<std_msgs::MultiArrayDimension::_size_type>::max())
56 throw std::invalid_argument(
"Argument \"size\" must not exceed max value of type \"std_msgs::MultiArrayDimension::_size_type\"");
59 layout->data_offset = offset;
60 layout->dim.push_back(std_msgs::MultiArrayDimension());
61 layout->dim.back().size =
static_cast<std_msgs::MultiArrayDimension::_size_type
>(size);
62 layout->dim.back().stride = 1;
63 layout->dim.back().label =
"Data in holding register";
67 const RegCont& holding_register)
69 ModbusMsgInStampedPtr
msg {
new ModbusMsgInStamped() };
71 msg->holding_registers.data = holding_register;
72 msg->disconnect.data =
false;
ModbusMsgInStampedPtr build(const ros::Time &time) const
std::vector< uint16_t > RegCont
Convenience data type defining the data type for a collection of registers.
ModbusMsgInBuilder(const ModbusApiSpec &api_spec)
static ModbusMsgInStampedPtr createDefaultModbusMsgIn(const std_msgs::MultiArrayLayout::_data_offset_type &offset, const RegCont &holding_register)
Creates a standard ModbusMsgIn which contains default values for all essential elements of the messag...
std::map< unsigned int, uint16_t > register_values_
static void setDefaultLayout(std_msgs::MultiArrayLayout *layout, const std_msgs::MultiArrayLayout::_data_offset_type &offset, const RegCont::size_type &size)
Specifies the meaning of the holding registers.