{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Unipi Technology", "model": "Extension xG18", "models": [ "Extension xG18" ], "vendor_website": "www.unipi.technology", "description": "Modbus RTU extension with 8 temperature measurement channels", "x_status": "official", "revision": 3, "revised": "2026-11-10", "source": "Extension xG18 Modbus map v1.1, Unipi technology", "sources": [ { "title": "Extension xG18 Modbus map", "version": "1.1", "url": "https://kb.unipi.technology/_media/files:products:extensions:unipi-extension-xg18-modbus-map-v1.0.pdf", "note": "Holding registers, Coils and Description sheets" } ], "notes": [ "The sheets inside the document are marked v1.1 although the file name says v1.0.", "Registers are 0-based. 32-bit values use word order CDAB (low word first). Defaults: slave address 15, 19200 bps, 8N1.", "Registers marked Reserved in the manual are left out." ], "protocol": "rtu", "unit_id": 15, "baudrate": 19200, "parity": "N", "databits": 8, "stopbits": 1, "byte_order": "big", "word_order": "little", "address_base": 0, "enums": { "baud_rate": {"11": "2400", "12": "4800", "13": "9600", "14": "19200", "15": "38400", "4097": "57600", "4098": "115200"}, "parity": {"0": "Even", "1": "Odd"} }, "sentinels": {"int16": {"-32768": "Sensor unconnected or faulty"}}, "registers": [ {"name": "MWD enable", "group": "Watchdog", "area": "holding", "address": 0, "type": "bool", "bit": 0, "access": "RW"}, {"name": "MWD reboot detected", "group": "Watchdog", "area": "holding", "address": 0, "type": "bool", "bit": 1, "access": "RW"}, {"name": "Temperature CH1", "group": "Temperatures", "area": "holding", "address": 1, "type": "int16", "scale": 0.01, "unit": "°C", "access": "R", "description": "Reads -32768 when the sensor is unconnected or faulty"}, {"name": "Temperature CH2", "group": "Temperatures", "area": "holding", "address": 2, "type": "int16", "scale": 0.01, "unit": "°C", "access": "R", "description": "Reads -32768 when the sensor is unconnected or faulty"}, {"name": "Temperature CH3", "group": "Temperatures", "area": "holding", "address": 3, "type": "int16", "scale": 0.01, "unit": "°C", "access": "R", "description": "Reads -32768 when the sensor is unconnected or faulty"}, {"name": "Temperature CH4", "group": "Temperatures", "area": "holding", "address": 4, "type": "int16", "scale": 0.01, "unit": "°C", "access": "R", "description": "Reads -32768 when the sensor is unconnected or faulty"}, {"name": "Temperature CH5", "group": "Temperatures", "area": "holding", "address": 5, "type": "int16", "scale": 0.01, "unit": "°C", "access": "R", "description": "Reads -32768 when the sensor is unconnected or faulty"}, {"name": "Temperature CH6", "group": "Temperatures", "area": "holding", "address": 6, "type": "int16", "scale": 0.01, "unit": "°C", "access": "R", "description": "Reads -32768 when the sensor is unconnected or faulty"}, {"name": "Temperature CH7", "group": "Temperatures", "area": "holding", "address": 7, "type": "int16", "scale": 0.01, "unit": "°C", "access": "R", "description": "Reads -32768 when the sensor is unconnected or faulty"}, {"name": "Temperature CH8", "group": "Temperatures", "area": "holding", "address": 8, "type": "int16", "scale": 0.01, "unit": "°C", "access": "R", "description": "Reads -32768 when the sensor is unconnected or faulty"}, {"name": "Temperature CH1 valid", "group": "Temperatures", "area": "holding", "address": 9, "type": "bool", "bit": 0, "access": "RW", "description": "Validity flag of the channel reading"}, {"name": "Temperature CH2 valid", "group": "Temperatures", "area": "holding", "address": 9, "type": "bool", "bit": 1, "access": "RW", "description": "Validity flag of the channel reading"}, {"name": "Temperature CH3 valid", "group": "Temperatures", "area": "holding", "address": 9, "type": "bool", "bit": 2, "access": "RW", "description": "Validity flag of the channel reading"}, {"name": "Temperature CH4 valid", "group": "Temperatures", "area": "holding", "address": 9, "type": "bool", "bit": 3, "access": "RW", "description": "Validity flag of the channel reading"}, {"name": "Temperature CH5 valid", "group": "Temperatures", "area": "holding", "address": 9, "type": "bool", "bit": 4, "access": "RW", "description": "Validity flag of the channel reading"}, {"name": "Temperature CH6 valid", "group": "Temperatures", "area": "holding", "address": 9, "type": "bool", "bit": 5, "access": "RW", "description": "Validity flag of the channel reading"}, {"name": "Temperature CH7 valid", "group": "Temperatures", "area": "holding", "address": 9, "type": "bool", "bit": 6, "access": "RW", "description": "Validity flag of the channel reading"}, {"name": "Temperature CH8 valid", "group": "Temperatures", "area": "holding", "address": 9, "type": "bool", "bit": 7, "access": "RW", "description": "Validity flag of the channel reading"}, {"name": "Firmware version", "group": "Info", "area": "holding", "address": 1000, "type": "uint16", "access": "R", "role": "firmware", "description": "Firmware version of the extension (raw number)"}, {"name": "Number of digital outputs", "group": "Info", "area": "holding", "address": 1001, "type": "uint16", "bit": 0, "bits": 8, "access": "R"}, {"name": "Number of digital inputs", "group": "Info", "area": "holding", "address": 1001, "type": "uint16", "bit": 8, "bits": 8, "access": "R"}, {"name": "Number of internal RS485 lines", "group": "Info", "area": "holding", "address": 1002, "type": "uint16", "bit": 0, "bits": 4, "access": "R"}, {"name": "Number of analog outputs", "group": "Info", "area": "holding", "address": 1002, "type": "uint16", "bit": 4, "bits": 4, "access": "R"}, {"name": "Number of analog inputs", "group": "Info", "area": "holding", "address": 1002, "type": "uint16", "bit": 8, "bits": 8, "access": "R"}, {"name": "Firmware ID", "group": "Info", "area": "holding", "address": 1003, "type": "uint16", "access": "R"}, {"name": "Hardware ID", "group": "Info", "area": "holding", "address": 1004, "type": "uint16", "access": "R"}, {"name": "PCB serial number", "group": "Info", "area": "holding", "address": 1005, "type": "uint32", "access": "R", "role": "serial"}, {"name": "MWD timeout", "group": "Settings", "area": "holding", "address": 1008, "type": "uint16", "unit": "ms", "access": "RW", "description": "MasterWatchDog timeout; default 5000 ms"}, {"name": "MCU VRef", "group": "Info", "area": "holding", "address": 1009, "type": "uint16", "access": "R", "description": "Reference voltage of the MCU (raw)"}, {"name": "Measuring interval CH1", "group": "Settings", "area": "holding", "address": 1010, "type": "uint16", "unit": "s", "access": "RW", "description": "Default 2 s"}, {"name": "Measuring interval CH2", "group": "Settings", "area": "holding", "address": 1011, "type": "uint16", "unit": "s", "access": "RW", "description": "Default 2 s"}, {"name": "Measuring interval CH3", "group": "Settings", "area": "holding", "address": 1012, "type": "uint16", "unit": "s", "access": "RW", "description": "Default 2 s"}, {"name": "Measuring interval CH4", "group": "Settings", "area": "holding", "address": 1013, "type": "uint16", "unit": "s", "access": "RW", "description": "Default 2 s"}, {"name": "Measuring interval CH5", "group": "Settings", "area": "holding", "address": 1014, "type": "uint16", "unit": "s", "access": "RW", "description": "Default 2 s"}, {"name": "Measuring interval CH6", "group": "Settings", "area": "holding", "address": 1015, "type": "uint16", "unit": "s", "access": "RW", "description": "Default 2 s"}, {"name": "Measuring interval CH7", "group": "Settings", "area": "holding", "address": 1016, "type": "uint16", "unit": "s", "access": "RW", "description": "Default 2 s"}, {"name": "Measuring interval CH8", "group": "Settings", "area": "holding", "address": 1017, "type": "uint16", "unit": "s", "access": "RW", "description": "Default 2 s"}, {"name": "RS485 baud rate", "group": "Settings", "area": "holding", "address": 1018, "type": "uint16", "bit": 0, "bits": 13, "access": "RW", "enum": "baud_rate", "description": "Applied after saving the configuration and restarting"}, {"name": "RS485 parity enable", "group": "Settings", "area": "holding", "address": 1018, "type": "bool", "bit": 13, "access": "RW"}, {"name": "RS485 parity", "group": "Settings", "area": "holding", "address": 1018, "type": "bool", "bit": 14, "access": "RW", "enum": "parity"}, {"name": "Modbus address", "group": "Settings", "area": "holding", "address": 1019, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 254, "description": "Slave address, 1-254; default 15"}, {"name": "MWD reset indication", "group": "Commands", "area": "coil", "address": 1000, "type": "bool", "access": "RW", "description": "Clears the MWD reboot indication"}, {"name": "Reset MCU group", "group": "Commands", "area": "coil", "address": 1002, "type": "bool", "access": "RW"}, {"name": "Save configuration", "group": "Commands", "area": "coil", "address": 1003, "type": "bool", "access": "RW", "description": "Stores the current configuration so it is used at startup"} ] }