28 using namespace modbus_api::v3;
32 : api_spec_(read_api_spec)
33 , reg_idx_cont_(getRegisters(write_api_spec))
34 , reg_start_idx_(getMinRegisterIdx(reg_idx_cont_))
35 , reg_block_size_(getRegisterBlockSize(reg_idx_cont_))
36 , write_modbus_register_func_(write_modbus_register_func)
61 std::ostringstream os;
62 os <<
"Registers of BRAKETEST_PERFORMED and BRAKETEST_RESULT need to be 1 apart";
63 os <<
" (distance: " <<
abs(reg_idx_cont.cbegin()->second - reg_idx_cont.cend()->second) <<
")";
75 if (
msg.isDisconnect())
82 msg.checkStructuralIntegrity();
92 std::ostringstream os;
93 os <<
"Received Modbus message of unsupported API Version: " <<
msg.getVersion()
96 os <<
"Can not determine from Modbus message if brake-test is required.";
109 last_brake_test_flag != pilz_msgs::IsBrakeTestRequiredResult::REQUIRED)
119 res.error_msg =
"No callback available to send brake test result to FS control";
132 res.error_msg =
"Resetting of modus registers failed";
144 res.error_msg =
"Sending of brake test result to FS control failed";
const TRegIdx reg_start_idx_
static const std::string BRAKETEST_PERFORMED
std::vector< uint16_t > RegCont
Convenience data type defining the data type for a collection of registers.
unsigned short getRegisterDefinition(const std::string &key) const
ModbusAdapterBrakeTest(TWriteModbusRegister &&write_modbus_register_func, const ModbusApiSpec &read_api_spec, const ModbusApiSpec &write_api_spec)
static const std::string BRAKETEST_RESULT
static constexpr uint16_t MODBUS_BRAKE_TEST_PERFORMED
TWriteModbusRegister write_modbus_register_func_
TBrakeTestRequired brake_test_required_
Store the current state of whether a brake test is required.
const TRegIdxCont reg_idx_cont_
Exception thrown by the ModbusAdapterBrakeTest class.
const ModbusApiSpec api_spec_
static constexpr uint16_t MODBUS_API_VERSION_REQUIRED
bool sendBrakeTestResult(SendBrakeTestResult::Request &req, SendBrakeTestResult::Response &res)
Sends the brake test result data to the modbus client.
void updateBrakeTestRequiredState(TBrakeTestRequired brake_test_required)
static constexpr uint16_t MODBUS_BRAKE_TEST_PASSED
const RegCont::size_type reg_block_size_
std::map< std::string, TRegIdx > TRegIdxCont
Wrapper class to add semantic to a raw ModbusMsgInStamped.
INLINE Rall1d< T, V, S > abs(const Rall1d< T, V, S > &x)
void modbusMsgCallback(const ModbusMsgInStampedConstPtr &msg_raw)
Called whenever a new modbus message arrives.
static constexpr uint16_t MODBUS_BRAKE_TEST_NOT_PERFORMED
Expection thrown upon construction of ModbusMsgWrapperBase of the message does not contain the requir...
std::function< bool(const uint16_t &, const RegCont &)> TWriteModbusRegister
#define ROS_ERROR_STREAM(args)
static TRegIdxCont getRegisters(const ModbusApiSpec &write_api_spec)
static constexpr uint16_t MODBUS_BRAKE_TEST_NOT_PASSED
bool hasRegisterDefinition(const std::string &key) const
pilz_msgs::IsBrakeTestRequiredResult::_value_type TBrakeTestRequired
Specifies the meaning of the holding registers.