{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Bosch Rexroth", "model": "Smart Flex Effector", "models": [ "Smart Flex Effector", "SFE" ], "vendor_website": "boschrexroth.com", "description": "Smart Flex Effector with pose and acceleration readout and a motor lock, over Modbus RTU", "revision": 1, "revised": "2026-10-18", "source": "Bosch Rexroth Smart Flex Effector Modbus Documentation, firmware version 1.41.0 (updated 2023-05-24)", "sources": [ { "title": "Modbus Documentation - Smart Flex Effector (sfe_customer_documentation.html), firmware 1.41.0", "url": "https://www.boschrexroth.com/media/cbb995e7-d4ac-45b8-8704-e27dac63dcf2", "date": "2023-05-24" } ], "notes": [ "Input registers are read-only (function 04); holding registers are read and write (function 03, 06, 16, 23); write-only holding registers are actions that do something when 1 is written. Function 20 (read file record, for the error log and logger data) and function 43 (read device identification) are not register reads and are not mapped.", "Multi-register values are big-endian with the high word first (UINT32 2974880010 is [45393, 4362]); floats are IEEE 754 in two registers. The manual shows 'BOOL' registers as 0 or 1.", "The device identification (function 43) objects are: 0 vendor name, 1 serial number, 2 firmware version, 3 vendor URL, 4 product name, 5 model name, 128 bootloader version.", "Writes can be refused without a Modbus exception: the cause (wrong mode, storage protection against frequent EEPROM writes, invalid value, processing error) is then in 'Last command status' (input 51). A rejected value also discards the other registers of the same Write Multiple Registers frame.", "Only quality threshold set 0 is listed; there are ten sets of 12 floats (24 registers) from 1010 to 1249. The 36 RGB LED registers at 1262 to 1369 (3 per LED) and the logger data and error log records are described in the manual.", "The manual gives no factory serial format (data bits, parity, stop bits) or default address and baud rate; baud rates 9600, 38400, 115200 and 921600 are accepted. Set the connection to match the device. The motor timeout and velocity units are not stated in the manual.", "The documentation is for firmware 1.41.0. The Modbus RTU interface only answers when 'Protocol mode' is MODBUS; the device also speaks a text protocol." ], "protocol": "rtu", "unit_id": 1, "byte_order": "big", "word_order": "big", "address_base": 0, "x_status": "official", "enums": { "bool": {"0": "False", "1": "True"}, "calc_status": {"0": "OK", "1": "Error", "2": "Trapped", "3": "Max iterations", "4": "Failed ftol", "5": "Failed xtol", "6": "Failed gtol", "7": "Plausibility error"}, "lock_state": {"0": "Unlocked", "1": "Locked", "2": "Timeout", "3": "Running", "4": "Error"}, "target_lock": {"0": "Unlocked", "1": "Locked"}, "lock_mode": {"0": "Digital inputs", "1": "Serial interface"}, "quality_mode": {"0": "Trigger", "1": "Peak", "2": "Continuous", "3": "Off"}, "cmd_status": {"0": "OK", "1": "Invalid value", "2": "Wrong mode", "3": "Memory write protection", "4": "Processing error"}, "io_config": {"0": "Error", "1": "Lock state", "2": "Lock", "3": "Quality in range", "4": "Quality trigger", "5": "Off", "6": "Input", "7": "Output", "8": "Logger trigger"}, "led_mode": {"0": "Off", "1": "Status", "2": "IO", "3": "Quality", "4": "Graph XYZ", "5": "Sensor", "6": "Custom"}, "logger_trigger": {"0": "None", "1": "IO", "2": "Quality"}, "baud": {"9600": "9600 bit/s", "38400": "38400 bit/s", "115200": "115200 bit/s", "921600": "921600 bit/s"}, "protocol": {"0": "Text", "1": "Modbus"} }, "registers": [ {"name": "Position X", "group": "Pose", "area": "input", "address": 0, "type": "float32", "access": "R", "unit": "mm", "description": "Deflection of the adapter plate"}, {"name": "Position Y", "group": "Pose", "area": "input", "address": 2, "type": "float32", "access": "R", "unit": "mm", "description": "Deflection of the adapter plate"}, {"name": "Position Z", "group": "Pose", "area": "input", "address": 4, "type": "float32", "access": "R", "unit": "mm", "description": "Deflection of the adapter plate"}, {"name": "Position Rx", "group": "Pose", "area": "input", "address": 6, "type": "float32", "access": "R", "unit": "°", "description": "Rotation of the adapter plate"}, {"name": "Position Ry", "group": "Pose", "area": "input", "address": 8, "type": "float32", "access": "R", "unit": "°", "description": "Rotation of the adapter plate"}, {"name": "Position Rz", "group": "Pose", "area": "input", "address": 10, "type": "float32", "access": "R", "unit": "°", "description": "Rotation of the adapter plate"}, {"name": "Pose calculation time", "group": "Pose", "area": "input", "address": 12, "type": "uint16", "access": "R", "unit": "ms", "description": "Time needed to calculate the deflection"}, {"name": "Position calculation status", "group": "Pose", "area": "input", "address": 13, "type": "uint16", "access": "R", "enum": "calc_status"}, {"name": "Motor current lock state", "group": "Lock", "area": "input", "address": 26, "type": "uint16", "access": "R", "enum": "lock_state"}, {"name": "Acceleration X", "group": "Acceleration", "area": "input", "address": 27, "type": "float32", "access": "R", "unit": "g", "description": "1 g = 9.81 m/s2"}, {"name": "Acceleration Y", "group": "Acceleration", "area": "input", "address": 29, "type": "float32", "access": "R", "unit": "g", "description": "1 g = 9.81 m/s2"}, {"name": "Acceleration Z", "group": "Acceleration", "area": "input", "address": 31, "type": "float32", "access": "R", "unit": "g", "description": "1 g = 9.81 m/s2"}, {"name": "Acceleration absolute", "group": "Acceleration", "area": "input", "address": 33, "type": "float32", "access": "R", "unit": "g", "description": "Corrected by the acceleration due to gravity"}, {"name": "Quality in range", "group": "Quality", "area": "input", "address": 35, "type": "uint16", "access": "R", "enum": "bool", "description": "Pose values within the quality thresholds (quality mode on)"}, {"name": "Logger running", "group": "Logger", "area": "input", "address": 36, "type": "uint16", "access": "R", "enum": "bool"}, {"name": "Logger start timestamp", "group": "Logger", "area": "input", "address": 37, "type": "uint64", "access": "R", "unit": "ms", "description": "Based on the system up time"}, {"name": "Logger data length", "group": "Logger", "area": "input", "address": 41, "type": "uint16", "access": "R", "description": "Number of records in the logger data"}, {"name": "System up time", "group": "System", "area": "input", "address": 42, "type": "uint64", "access": "R", "unit": "ms"}, {"name": "System temperature", "group": "System", "area": "input", "address": 46, "type": "float32", "access": "R", "unit": "°C"}, {"name": "System lock count", "group": "System", "area": "input", "address": 48, "type": "uint32", "access": "R", "description": "Total lock/unlock operations"}, {"name": "Error log count", "group": "System", "area": "input", "address": 50, "type": "uint16", "access": "R", "description": "0 to 100 errors in the error log"}, {"name": "Last command status", "group": "System", "area": "input", "address": 51, "type": "uint16", "access": "R", "enum": "cmd_status"}, {"name": "System boot count", "group": "System", "area": "input", "address": 4000, "type": "uint32", "access": "R"}, {"name": "System odometer", "group": "System", "area": "input", "address": 4002, "type": "float32", "access": "R", "unit": "m", "description": "Total distance moved by deflection"}, {"name": "Motor target lock state", "group": "Lock", "area": "holding", "address": 1000, "type": "uint16", "access": "RW", "enum": "target_lock", "description": "Read Motor current lock state to check that it was reached"}, {"name": "Motor velocity temporary", "group": "Lock", "area": "holding", "address": 1001, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 100, "description": "Non-persistent; used while the temporary flag is set; changing it recalculates the temporary timeout"}, {"name": "Motor velocity temporary flag", "group": "Lock", "area": "holding", "address": 1002, "type": "uint16", "access": "RW", "enum": "bool"}, {"name": "Motor timeout temporary", "group": "Lock", "area": "holding", "address": 1003, "type": "uint16", "access": "RW", "write_min": 200, "write_max": 2000, "description": "Non-persistent lock/unlock timeout used while the temporary timeout flag is set"}, {"name": "Motor timeout temporary flag", "group": "Lock", "area": "holding", "address": 1004, "type": "uint16", "access": "RW", "enum": "bool"}, {"name": "Motor velocity", "group": "Lock", "area": "holding", "address": 1005, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 100, "description": "Persistent; changing it recalculates the motor timeout"}, {"name": "Motor timeout", "group": "Lock", "area": "holding", "address": 1006, "type": "uint16", "access": "RW", "write_min": 200, "write_max": 2000, "description": "Persistent lock timeout used by default"}, {"name": "Lock mode", "group": "Lock", "area": "holding", "address": 1007, "type": "uint16", "access": "RW", "enum": "lock_mode"}, {"name": "Quality mode", "group": "Quality", "area": "holding", "address": 1008, "type": "uint16", "access": "RW", "enum": "quality_mode"}, {"name": "Quality active threshold", "group": "Quality", "area": "holding", "address": 1009, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 9, "description": "Which of the ten threshold sets is in use"}, {"name": "Quality threshold set 0, lower limit x", "group": "Quality", "area": "holding", "address": 1010, "type": "float32", "access": "RW", "unit": "mm", "write_min": -3.0, "write_max": 3.0, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, lower limit y", "group": "Quality", "area": "holding", "address": 1012, "type": "float32", "access": "RW", "unit": "mm", "write_min": -3.0, "write_max": 3.0, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, lower limit z", "group": "Quality", "area": "holding", "address": 1014, "type": "float32", "access": "RW", "unit": "mm", "write_min": -3.0, "write_max": 0.2, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, lower limit rotation x", "group": "Quality", "area": "holding", "address": 1016, "type": "float32", "access": "RW", "unit": "°", "write_min": -3.4, "write_max": 3.4, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, lower limit rotation y", "group": "Quality", "area": "holding", "address": 1018, "type": "float32", "access": "RW", "unit": "°", "write_min": -3.4, "write_max": 3.4, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, lower limit rotation z", "group": "Quality", "area": "holding", "address": 1020, "type": "float32", "access": "RW", "unit": "°", "write_min": -6.8, "write_max": 6.8, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, upper limit x", "group": "Quality", "area": "holding", "address": 1022, "type": "float32", "access": "RW", "unit": "mm", "write_min": -3.0, "write_max": 3.0, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, upper limit y", "group": "Quality", "area": "holding", "address": 1024, "type": "float32", "access": "RW", "unit": "mm", "write_min": -3.0, "write_max": 3.0, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, upper limit z", "group": "Quality", "area": "holding", "address": 1026, "type": "float32", "access": "RW", "unit": "mm", "write_min": -3.0, "write_max": 0.2, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, upper limit rotation x", "group": "Quality", "area": "holding", "address": 1028, "type": "float32", "access": "RW", "unit": "°", "write_min": -3.4, "write_max": 3.4, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, upper limit rotation y", "group": "Quality", "area": "holding", "address": 1030, "type": "float32", "access": "RW", "unit": "°", "write_min": -3.4, "write_max": 3.4, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality threshold set 0, upper limit rotation z", "group": "Quality", "area": "holding", "address": 1032, "type": "float32", "access": "RW", "unit": "°", "write_min": -6.8, "write_max": 6.8, "description": "Set 0 of 10; set s starts at 1010 + 24 x s"}, {"name": "Quality trigger", "group": "Quality", "area": "holding", "address": 1250, "type": "uint16", "access": "W", "write_min": 1, "write_max": 1, "description": "Action: triggers a quality check when the quality mode is QUALITY_TRIGGER"}, {"name": "Quality reset", "group": "Quality", "area": "holding", "address": 1251, "type": "uint16", "access": "W", "write_min": 1, "write_max": 1, "description": "Action: resets the quality check result"}, {"name": "IO config pin 0", "group": "Inputs and outputs", "area": "holding", "address": 1252, "type": "uint16", "access": "RW", "enum": "io_config", "description": "Pin function"}, {"name": "IO config pin 1", "group": "Inputs and outputs", "area": "holding", "address": 1253, "type": "uint16", "access": "RW", "enum": "io_config", "description": "Pin function"}, {"name": "IO config pin 2", "group": "Inputs and outputs", "area": "holding", "address": 1254, "type": "uint16", "access": "RW", "enum": "io_config", "description": "Pin function; pin 2 accepts only LOCK, QUALITY_TRIGGER, OFF, INPUT and LOGGER_TRIGGER"}, {"name": "IO state pin 0", "group": "Inputs and outputs", "area": "holding", "address": 1255, "type": "uint16", "access": "RW", "enum": "bool", "description": "Logical level of the pin (high = 1)"}, {"name": "IO state pin 1", "group": "Inputs and outputs", "area": "holding", "address": 1256, "type": "uint16", "access": "RW", "enum": "bool", "description": "Logical level of the pin (high = 1)"}, {"name": "IO state pin 2", "group": "Inputs and outputs", "area": "holding", "address": 1257, "type": "uint16", "access": "RW", "enum": "bool", "description": "Logical level of the pin (high = 1)"}, {"name": "LED mode", "group": "LED", "area": "holding", "address": 1258, "type": "uint16", "access": "RW", "enum": "led_mode"}, {"name": "LED single colour red", "group": "LED", "area": "holding", "address": 1259, "type": "uint16", "access": "W", "write_min": 0, "write_max": 255, "description": "Sets all LEDs and switches the LED mode to CUSTOM"}, {"name": "LED single colour green", "group": "LED", "area": "holding", "address": 1260, "type": "uint16", "access": "W", "write_min": 0, "write_max": 255, "description": "Sets all LEDs and switches the LED mode to CUSTOM"}, {"name": "LED single colour blue", "group": "LED", "area": "holding", "address": 1261, "type": "uint16", "access": "W", "write_min": 0, "write_max": 255, "description": "Sets all LEDs and switches the LED mode to CUSTOM"}, {"name": "Logger interval", "group": "Logger", "area": "holding", "address": 1370, "type": "uint16", "access": "RW", "unit": "ms", "write_min": 5, "write_max": 100, "description": "Recording interval in steps of 5 ms"}, {"name": "Logger max count", "group": "Logger", "area": "holding", "address": 1371, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 2000}, {"name": "Logger single shot", "group": "Logger", "area": "holding", "address": 1372, "type": "uint16", "access": "RW", "enum": "bool", "description": "1 = stop when the maximum count is reached"}, {"name": "Logger trigger source", "group": "Logger", "area": "holding", "address": 1373, "type": "uint16", "access": "RW", "enum": "logger_trigger"}, {"name": "Logger pre-trigger records", "group": "Logger", "area": "holding", "address": 1374, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 2000, "description": "Records kept from before the trigger; below the maximum count"}, {"name": "Logger start", "group": "Logger", "area": "holding", "address": 1375, "type": "uint16", "access": "W", "write_min": 1, "write_max": 1, "description": "Action"}, {"name": "Logger stop", "group": "Logger", "area": "holding", "address": 1376, "type": "uint16", "access": "W", "write_min": 1, "write_max": 1, "description": "Action"}, {"name": "Position filter", "group": "Pose", "area": "holding", "address": 1377, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 128, "description": "Moving average length; 0 = off"}, {"name": "Baud rate", "group": "Serial interface", "area": "holding", "address": 1378, "type": "uint32", "access": "RW", "enum": "baud"}, {"name": "Reboot", "group": "System", "area": "holding", "address": 1380, "type": "uint16", "access": "W", "write_min": 1, "write_max": 1, "description": "Action"}, {"name": "Command delay", "group": "Serial interface", "area": "holding", "address": 1381, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 10, "description": "Response delay in pause characters; the time depends on the baud rate"}, {"name": "Compensation enabled", "group": "Pose", "area": "holding", "address": 1382, "type": "uint16", "access": "RW", "enum": "bool", "description": "Temperature compensation; keep on for an accurate pose"}, {"name": "Zero position", "group": "Pose", "area": "holding", "address": 1383, "type": "uint16", "access": "W", "write_min": 1, "write_max": 1, "description": "Action: sets the pose to zero in the locked state; only with compensation off"}, {"name": "Protocol mode", "group": "Serial interface", "area": "holding", "address": 1384, "type": "uint16", "access": "RW", "enum": "protocol"}, {"name": "Settings reset", "group": "System", "area": "holding", "address": 1385, "type": "uint16", "access": "W", "write_min": 1, "write_max": 1, "description": "Action: restores the default settings"}, {"name": "Modbus address", "group": "Serial interface", "area": "holding", "address": 1386, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 247} ] }