{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "model": "GRIDSCAN 6000", "models": [ "GRIDSCAN 6000" ], "description": "Multi-sensor transformer monitor for dissolved hydrogen, moisture, pressure and temperature with Modbus RTU", "vendor": "Electron do Brasil", "vendor_website": "electron.com.br", "revision": 1, "revised": "2026-11-10", "source": "Electron do Brasil, Mapa de Registradores MODBUS, GRIDSCAN 6000, v1.0", "sources": [ { "title": "Mapa de Registradores MODBUS, GRIDSCAN 6000", "version": "1.0", "url": "https://electron.com.br/api/downloads/file/mapa_de_registradores_modbus_rtu_gdscan_6000_v1-0_pt-br.pdf", "note": "linked in issue #132" } ], "notes": [ "Addresses are the register numbers of the document, which starts at 0 (hydrogen at registers 0 and 1), so address_base is 0. The document lists them as holding registers (function 03).", "Default connection from the document: 19200 baud, 8 data bits, no parity, 1 stop bit (the framing register also allows 2 stop bits, even and odd parity), RS-485 two-wire, unit ID 1. Set the master timeout to 10 seconds or more.", "32-bit values (hydrogen, rates, calibration values) are read with the high word first. The document asks to read the high word before the low word: read both registers in one request.", "Strings are ASCII, two characters per register, up to 19 characters, null-terminated. Dates are packed as month and day in one register (high and low byte) and the year in the next.", "The issue asked for the GRIDSCAN 6200. The linked document is the Modbus map of the GRIDSCAN 6000 and does not mention the 6200, so this file is named after the 6000.", "The document also describes discrete inputs (function 02, addresses 0 to 74) that repeat the status bits and mark which values are valid; they are not mapped here.", "The input registers (function 04) are taken from the table at the end of the document, which lists 32-bit and floating-point values. The rate-of-change input registers are not mapped because the document does not say how they are encoded there.", "Written from the manufacturer's document; not tested on a device." ], "protocol": "rtu", "unit_id": 1, "baudrate": 19200, "parity": "N", "databits": 8, "stopbits": 1, "address_base": 0, "byte_order": "big", "word_order": "big", "x_status": "official", "enums": { "activity": {"1": "Measuring hydrogen", "2": "Measuring liquid temperature", "3": "Self-calibration", "4": "Liquid temperature too high"}, "edit_command": {"1": "Open for editing", "2": "Save and close", "3": "Abort editing"}, "mode": {"0": "Field", "1": "Laboratory"}, "liquid_type": {"0": "Mineral", "1": "Silicone", "2": "Natural ester", "3": "Synthetic ester"}, "framing": {"1": "8N1", "2": "8N2", "3": "8E1", "4": "8E2", "5": "8O1", "6": "8O2"}, "baud": {"1": "9600", "2": "14400", "3": "19200", "4": "38400", "5": "57600", "6": "115200"}, "pressure_unit": {"0": "Not clear in the document", "1": "psi", "2": "bar", "3": "kPa", "4": "inH2O"}, "termination": {"0": "Disabled", "1": "Enabled"} }, "registers": [ {"name": "Hydrogen", "group": "Measurements", "area": "holding", "address": 0, "type": "uint32", "unit": "ppm", "access": "R", "description": "Dissolved hydrogen in ppm H2, unscaled. Read the high word (register 0) first; the value is 0 until the ready bit of the unit status is set"}, {"name": "PCB temperature", "group": "Measurements", "area": "holding", "address": 7, "type": "uint16", "scale": 0.01, "offset": -100, "unit": "°C", "access": "R", "description": "Internal temperature of the electronics; above 105 °C can damage the device"}, {"name": "Liquid temperature", "group": "Measurements", "area": "holding", "address": 8, "type": "uint16", "scale": 0.01, "offset": -100, "unit": "°C", "access": "R", "description": "0 until the first measurement; the sensor is calibrated up to 105 °C"}, {"name": "Hydrogen rate of change per day", "group": "Measurements", "area": "holding", "address": 13, "type": "uint32", "offset": -20000000, "unit": "ppm/day", "access": "R", "description": "Raw value is stored with an offset of 20,000,000; negative means falling hydrogen. Trends reset to zero after a power cycle"}, {"name": "Hydrogen rate of change per week", "group": "Measurements", "area": "holding", "address": 15, "type": "uint32", "offset": -20000000, "unit": "ppm/week", "access": "R", "description": "Raw value is stored with an offset of 20,000,000; negative means falling hydrogen. Trends reset to zero after a power cycle"}, {"name": "Hydrogen rate of change per month", "group": "Measurements", "area": "holding", "address": 17, "type": "uint32", "offset": -20000000, "unit": "ppm/month", "access": "R", "description": "Raw value is stored with an offset of 20,000,000; negative means falling hydrogen. Trends reset to zero after a power cycle"}, {"name": "Humidity", "group": "Measurements", "area": "holding", "address": 22, "type": "uint16", "scale": 0.1, "unit": "%RH", "access": "R"}, {"name": "Gauge pressure", "group": "Measurements", "area": "holding", "address": 23, "type": "uint16", "scale": 0.001, "unit": "atm", "access": "R"}, {"name": "Water content", "group": "Measurements", "area": "holding", "address": 24, "type": "uint16", "unit": "ppm", "access": "R"}, {"name": "Gauge pressure in selected unit", "group": "Measurements", "area": "holding", "address": 25, "type": "uint16", "scale": 0.01, "access": "R", "description": "Gauge pressure in the unit chosen in register 153; the document lists it as PSI"}, {"name": "Model number", "group": "Information", "area": "holding", "address": 31, "type": "string", "length": 10, "access": "R"}, {"name": "Product serial number", "group": "Information", "area": "holding", "address": 41, "type": "string", "length": 10, "access": "R", "role": "serial"}, {"name": "Sensor serial number", "group": "Information", "area": "holding", "address": 51, "type": "string", "length": 10, "access": "R"}, {"name": "Sensor board serial number", "group": "Information", "area": "holding", "address": 61, "type": "string", "length": 10, "access": "R"}, {"name": "Manufacturing date month", "group": "Information", "area": "holding", "address": 81, "type": "uint16", "bit": 8, "bits": 8, "access": "R"}, {"name": "Manufacturing date day", "group": "Information", "area": "holding", "address": 81, "type": "uint16", "bit": 0, "bits": 8, "access": "R"}, {"name": "Manufacturing date year", "group": "Information", "area": "holding", "address": 82, "type": "uint16", "access": "R"}, {"name": "Factory calibration date month", "group": "Information", "area": "holding", "address": 83, "type": "uint16", "bit": 8, "bits": 8, "access": "R"}, {"name": "Factory calibration date day", "group": "Information", "area": "holding", "address": 83, "type": "uint16", "bit": 0, "bits": 8, "access": "R"}, {"name": "Factory calibration date year", "group": "Information", "area": "holding", "address": 84, "type": "uint16", "access": "R"}, {"name": "Dissolved gas calibration date month", "group": "Information", "area": "holding", "address": 87, "type": "uint16", "bit": 8, "bits": 8, "access": "R"}, {"name": "Dissolved gas calibration date day", "group": "Information", "area": "holding", "address": 87, "type": "uint16", "bit": 0, "bits": 8, "access": "R"}, {"name": "Dissolved gas calibration date year", "group": "Information", "area": "holding", "address": 88, "type": "uint16", "access": "R"}, {"name": "Firmware revision", "group": "Information", "area": "holding", "address": 89, "type": "string", "length": 10, "access": "R", "description": "Text in the form x:y:z (major, minor, product designator), for example 3:7:A"}, {"name": "Unit ready", "group": "Status", "area": "holding", "address": 111, "type": "bool", "bit": 15, "access": "R", "description": "Hydrogen readings are valid"}, {"name": "New measurement available", "group": "Status", "area": "holding", "address": 111, "type": "bool", "bit": 14, "access": "R", "description": "Cleared by reading the register"}, {"name": "Error", "group": "Status", "area": "holding", "address": 111, "type": "bool", "bit": 12, "access": "R", "description": "An unrecoverable error occurred; see registers 112 and 113"}, {"name": "Sensor activity", "group": "Status", "area": "holding", "address": 111, "type": "uint16", "bit": 3, "bits": 3, "access": "R", "enum": "activity"}, {"name": "Heater fault", "group": "Status", "area": "holding", "address": 112, "type": "bool", "bit": 15, "access": "R"}, {"name": "Temperature sensor fault", "group": "Status", "area": "holding", "address": 112, "type": "bool", "bit": 14, "access": "R"}, {"name": "Hydrogen sensor fault", "group": "Status", "area": "holding", "address": 112, "type": "bool", "bit": 13, "access": "R"}, {"name": "RTC date and time invalid", "group": "Status", "area": "holding", "address": 113, "type": "bool", "bit": 8, "access": "R", "description": "Cleared by setting the clock or cycling the power"}, {"name": "PCB temperature above 105 C", "group": "Status", "area": "holding", "address": 113, "type": "bool", "bit": 4, "access": "R"}, {"name": "Required data not available", "group": "Status", "area": "holding", "address": 113, "type": "bool", "bit": 1, "access": "R"}, {"name": "Configuration data invalid", "group": "Status", "area": "holding", "address": 113, "type": "bool", "bit": 0, "access": "R"}, {"name": "Command DA", "group": "Calibration", "area": "holding", "address": 121, "type": "uint16", "access": "RW", "description": "First step of the DGA adjustment: write when an oil sample is taken. Not within 24 hours of installation or of the last DC command. The document gives no value to write"}, {"name": "Command DB", "group": "Calibration", "area": "holding", "address": 122, "type": "uint16", "access": "RW", "description": "Second step: write after registers 126 to 129 are set. Needs a prior DA and takes up to 10 seconds to answer. The document gives no value to write"}, {"name": "Command DC", "group": "Calibration", "area": "holding", "address": 125, "type": "uint16", "access": "RW", "description": "Clears the DGA adjustment. The document gives no value to write"}, {"name": "DGA calibration hydrogen", "group": "Calibration", "area": "holding", "address": 126, "type": "uint32", "unit": "ppm", "access": "RW", "write_min": 0, "write_max": 1000000, "description": "Laboratory hydrogen result, written before command DB"}, {"name": "DGA calibration month", "group": "Calibration", "area": "holding", "address": 128, "type": "uint16", "bit": 8, "bits": 8, "access": "RW", "description": "The date must match the internal clock for command DB to be accepted"}, {"name": "DGA calibration day", "group": "Calibration", "area": "holding", "address": 128, "type": "uint16", "bit": 0, "bits": 8, "access": "RW"}, {"name": "DGA calibration year", "group": "Calibration", "area": "holding", "address": 129, "type": "uint16", "access": "RW"}, {"name": "User-defined liquid type name", "group": "Configuration", "area": "holding", "address": 136, "type": "string", "length": 8, "access": "RW", "description": "Up to 15 characters, null-terminated"}, {"name": "Ostwald slope m", "group": "Configuration", "area": "holding", "address": 144, "type": "uint32", "scale": 1e-06, "offset": -0.001, "access": "RW", "description": "Stored as m x 1,000,000 + 1,000 (default 1093 for synthetic ester). A wrong value disables hydrogen measurement"}, {"name": "Ostwald offset b", "group": "Configuration", "area": "holding", "address": 146, "type": "uint32", "scale": 1e-06, "offset": -0.001, "access": "RW", "description": "Stored as b x 1,000,000 + 1,000 (default 40739 for synthetic ester). A wrong value disables hydrogen measurement"}, {"name": "Liquid type edit command", "group": "Configuration", "area": "holding", "address": 148, "type": "uint16", "access": "RW", "enum": "edit_command", "description": "Write 1 to open the user-defined type for editing, then 2 to save or 3 to abort"}, {"name": "Modbus unit ID", "group": "Device", "area": "holding", "address": 150, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 247, "description": "Writing to unit 0 reaches every connected device. The new ID applies without a power cycle"}, {"name": "Operation mode", "group": "Device", "area": "holding", "address": 151, "type": "uint16", "access": "RW", "enum": "mode", "description": "Laboratory mode runs the self-calibration every 4 hours instead of every 12"}, {"name": "Liquid type selection", "group": "Configuration", "area": "holding", "address": 152, "type": "uint16", "access": "RW", "enum": "liquid_type"}, {"name": "Pressure unit", "group": "Configuration", "area": "holding", "address": 153, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 4, "enum": "pressure_unit"}, {"name": "RS-485 termination", "group": "Device", "area": "holding", "address": 158, "type": "uint16", "access": "RW", "enum": "termination", "description": "0 disables, any other value enables"}, {"name": "Parity and stop bits", "group": "Device", "area": "holding", "address": 159, "type": "uint16", "access": "RW", "enum": "framing", "description": "Applies when the baud rate register is written"}, {"name": "Baud rate", "group": "Device", "area": "holding", "address": 160, "type": "uint16", "access": "RW", "enum": "baud"}, {"name": "Pressure calibration offset", "group": "Calibration", "area": "holding", "address": 164, "type": "uint16", "scale": 0.01, "offset": -100, "access": "RW", "description": "Stored as (offset + 100) x 100, in the selected pressure unit"}, {"name": "Clock month", "group": "Clock", "area": "holding", "address": 175, "type": "uint16", "bit": 8, "bits": 8, "access": "RW", "description": "Read register 175 first; write 175 to 178 in order, the clock is saved when 178 is written"}, {"name": "Clock year", "group": "Clock", "area": "holding", "address": 175, "type": "uint16", "bit": 0, "bits": 8, "offset": 2000, "access": "RW", "description": "Year minus 2000 in the register"}, {"name": "Clock hour", "group": "Clock", "area": "holding", "address": 176, "type": "uint16", "bit": 8, "bits": 8, "access": "RW"}, {"name": "Clock day", "group": "Clock", "area": "holding", "address": 176, "type": "uint16", "bit": 0, "bits": 8, "access": "RW"}, {"name": "Clock second", "group": "Clock", "area": "holding", "address": 177, "type": "uint16", "bit": 8, "bits": 8, "access": "RW"}, {"name": "Clock minute", "group": "Clock", "area": "holding", "address": 177, "type": "uint16", "bit": 0, "bits": 8, "access": "RW"}, {"name": "Clock millisecond", "group": "Clock", "area": "holding", "address": 178, "type": "uint16", "access": "RW", "description": "Write 0"}, {"name": "Owner ID", "group": "Device", "area": "holding", "address": 201, "type": "string", "length": 10, "access": "RW", "description": "Up to 19 characters; read from the lowest address, write all registers to save"}, {"name": "Substation ID", "group": "Device", "area": "holding", "address": 211, "type": "string", "length": 10, "access": "RW"}, {"name": "Transformer ID", "group": "Device", "area": "holding", "address": 221, "type": "string", "length": 10, "access": "RW"}, {"name": "Unit status (input)", "group": "Input registers", "area": "input", "address": 0, "type": "uint16", "access": "R", "description": "Same bit layout as holding register 111"}, {"name": "Error status (input)", "group": "Input registers", "area": "input", "address": 1, "type": "uint32", "access": "R", "description": "Same bit layout as holding registers 112 and 113"}, {"name": "Hydrogen (input)", "group": "Input registers", "area": "input", "address": 3, "type": "uint32", "unit": "ppm", "access": "R"}, {"name": "PCB temperature (input)", "group": "Input registers", "area": "input", "address": 11, "type": "float32", "unit": "°C", "access": "R", "description": "Floating point; the unit is not stated in the document and degrees Celsius is assumed"}, {"name": "Liquid temperature (input)", "group": "Input registers", "area": "input", "address": 13, "type": "float32", "unit": "°C", "access": "R", "description": "Floating point; the unit is not stated in the document and degrees Celsius is assumed"}, {"name": "Humidity (input)", "group": "Input registers", "area": "input", "address": 17, "type": "float32", "unit": "%RH", "access": "R", "description": "Floating point; the unit is assumed from the holding register"}, {"name": "Gauge pressure (input)", "group": "Input registers", "area": "input", "address": 19, "type": "float32", "access": "R", "description": "Floating point, in the selected pressure unit"}, {"name": "Water content (input)", "group": "Input registers", "area": "input", "address": 21, "type": "float32", "unit": "ppm", "access": "R", "description": "Floating point; the unit is assumed from the holding register"}, {"name": "Pressure unit (input)", "group": "Input registers", "area": "input", "address": 45, "type": "uint16", "access": "R", "enum": "pressure_unit"}, {"name": "Pressure calibration offset (input)", "group": "Input registers", "area": "input", "address": 46, "type": "float32", "access": "R"} ] }