{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "model": "MNO", "models": [ "MNO" ], "description": "Oil level monitor (Monitor de Nível de Óleo): float level, alarm and shutdown thresholds, four relays, analog output and 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 RTU, MNO – Monitor de Nível de Óleo, v3.0.2", "sources": [ { "title": "Mapa de Registradores Modbus RTU, MNO – Monitor de Nível de Óleo", "version": "3.0.2", "url": "https://electron.com.br/api/downloads/file/mapa_de_registradores_modbus_rtu_mno_v3-0-2.pdf", "note": "linked in issue #135" } ], "notes": [ "All registers are holding registers. The document numbers them 1 to 38 and calls the type Read Holding Register (40.000), so the addresses are 1-based (address on the wire = number minus 1). The document does not say so explicitly: if a read fails, try address_base 0.", "The document allows 2400 to 57600 bps, 8 data bits, 1 stop bit and no, even or odd parity. It gives no default baud rate or slave address: 9600 N and 1 are placeholders; the slave address is in register 25.", "Levels are shown in the document with one decimal and a scale of -1000:10, which it does not explain. They are given as raw values: check against the display before applying a scale. The shutdown delay has no unit in the document.", "Registers 7, 9, 12, 18, 19 and 20 are bit fields, one entry per bit. The command bits are write-only. The baud rate, parity and protocol registers (22 to 24) are read-only in this document. Registers 26, 29 and 33 to 34 are not in the document.", "The serial number is 48 bits in registers 35 to 37; it is given as a 16-bit register and a 32-bit one, so it has no serial role.", "Written from the manufacturer's document; not tested on a device." ], "protocol": "rtu", "unit_id": 1, "baudrate": 9600, "parity": "N", "databits": 8, "stopbits": 1, "address_base": 1, "byte_order": "big", "word_order": "big", "x_status": "official", "enums": { "analog_range": {"0": "0 to 1 mA", "1": "0 to 5 mA", "2": "0 to 10 mA", "3": "0 to 20 mA", "4": "4 to 20 mA"}, "relay_logic": {"0": "Normal", "1": "Inverse"}, "signal": {"0": "Resistive", "1": "4 to 20 mA"}, "rs485_write": {"0": "Enabled", "1": "Disabled"}, "baudrate": {"0": "Automatic", "1": "2400", "2": "4800", "3": "9600", "4": "19200", "5": "38400", "6": "57600"}, "parity": {"0": "No parity", "1": "Even", "2": "Odd"}, "protocol": {"0": "DNP 3 L1", "1": "Modbus RTU"} }, "registers": [ {"name": "High level alarm", "group": "Settings", "area": "holding", "address": 1, "type": "uint16", "access": "RW", "description": "Range 0.1 to 100.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Low level alarm", "group": "Settings", "area": "holding", "address": 2, "type": "uint16", "access": "RW", "description": "Range 0.1 to 100.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "High level shutdown", "group": "Settings", "area": "holding", "address": 3, "type": "uint16", "access": "RW", "description": "Range 0.1 to 100.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Low level shutdown", "group": "Settings", "area": "holding", "address": 4, "type": "uint16", "access": "RW", "description": "Range 0.1 to 100.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Alarm reset hysteresis", "group": "Settings", "area": "holding", "address": 5, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 0.1, "write_max": 30, "description": "Range 0.1 to 30.0"}, {"name": "Shutdown delay", "group": "Settings", "area": "holding", "address": 6, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 20, "description": "Range 0 to 20; the unit is not stated"}, {"name": "Low level shutdown enabled", "group": "Settings", "area": "holding", "address": 7, "type": "bool", "bit": 0, "access": "RW"}, {"name": "High level shutdown enabled", "group": "Settings", "area": "holding", "address": 7, "type": "bool", "bit": 1, "access": "RW"}, {"name": "Analog output range", "group": "Analog output", "area": "holding", "address": 8, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 4, "enum": "analog_range"}, {"name": "Reset minimum level reached", "group": "Commands", "area": "holding", "address": 9, "type": "bool", "bit": 1, "access": "W", "description": "Write 1"}, {"name": "Reset maximum level reached", "group": "Commands", "area": "holding", "address": 9, "type": "bool", "bit": 2, "access": "W", "description": "Write 1"}, {"name": "Reset equipment", "group": "Commands", "area": "holding", "address": 9, "type": "bool", "bit": 3, "access": "W", "description": "Write 1"}, {"name": "Float initial resistance", "group": "Settings", "area": "holding", "address": 10, "type": "uint16", "access": "RW", "description": "Range 0.0 to 999.9; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Float final resistance", "group": "Settings", "area": "holding", "address": 11, "type": "uint16", "access": "RW", "description": "Range 0.0 to 1000.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Relay 1 logic", "group": "Settings", "area": "holding", "address": 12, "type": "bool", "bit": 0, "access": "RW", "enum": "relay_logic"}, {"name": "Relay 2 logic", "group": "Settings", "area": "holding", "address": 12, "type": "bool", "bit": 1, "access": "RW", "enum": "relay_logic"}, {"name": "Relay 3 logic", "group": "Settings", "area": "holding", "address": 12, "type": "bool", "bit": 2, "access": "RW", "enum": "relay_logic"}, {"name": "Relay 4 logic", "group": "Settings", "area": "holding", "address": 12, "type": "bool", "bit": 3, "access": "RW", "enum": "relay_logic"}, {"name": "Level reading offset", "group": "Settings", "area": "holding", "address": 13, "type": "int16", "access": "RW", "description": "Range -10.0 to 10.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Reading signal type", "group": "Settings", "area": "holding", "address": 14, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 1, "enum": "signal"}, {"name": "Float level", "group": "Measurements", "area": "holding", "address": 15, "type": "int16", "access": "RW", "description": "Range -10.0 to 10.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Maximum level reached", "group": "Measurements", "area": "holding", "address": 16, "type": "int16", "access": "RW", "description": "Range -50.0 to 250.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Minimum level reached", "group": "Measurements", "area": "holding", "address": 17, "type": "int16", "access": "RW", "description": "Range -50.0 to 250.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Minimum level alarm", "group": "Status", "area": "holding", "address": 18, "type": "bool", "bit": 0, "access": "R"}, {"name": "Maximum level alarm", "group": "Status", "area": "holding", "address": 18, "type": "bool", "bit": 1, "access": "R"}, {"name": "Alarm active", "group": "Status", "area": "holding", "address": 18, "type": "bool", "bit": 2, "access": "R"}, {"name": "Counting to shutdown, minimum level", "group": "Status", "area": "holding", "address": 19, "type": "bool", "bit": 0, "access": "R"}, {"name": "Counting to shutdown, maximum level", "group": "Status", "area": "holding", "address": 19, "type": "bool", "bit": 1, "access": "R"}, {"name": "Shutdown by minimum level", "group": "Status", "area": "holding", "address": 19, "type": "bool", "bit": 2, "access": "R"}, {"name": "Shutdown by maximum level", "group": "Status", "area": "holding", "address": 19, "type": "bool", "bit": 3, "access": "R"}, {"name": "Shutdown active", "group": "Status", "area": "holding", "address": 19, "type": "bool", "bit": 4, "access": "R"}, {"name": "Sensor reading failure", "group": "Status", "area": "holding", "address": 20, "type": "bool", "bit": 0, "access": "R"}, {"name": "RS-485 write protection", "group": "Settings", "area": "holding", "address": 21, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 1, "enum": "rs485_write"}, {"name": "Baud rate", "group": "Device", "area": "holding", "address": 22, "type": "uint16", "access": "R", "enum": "baudrate"}, {"name": "Parity", "group": "Device", "area": "holding", "address": 23, "type": "uint16", "access": "R", "enum": "parity"}, {"name": "Protocol", "group": "Device", "area": "holding", "address": 24, "type": "uint16", "access": "R", "enum": "protocol"}, {"name": "Serial network address", "group": "Device", "area": "holding", "address": 25, "type": "uint16", "access": "R", "description": "Range 1 to 254"}, {"name": "Current output offset correction", "group": "Settings", "area": "holding", "address": 27, "type": "int16", "access": "RW", "description": "Range -1.00 to 1.00; the document's scale column (-1000:100) is not explained, so the value is raw (check against the display)"}, {"name": "Current resistance reading", "group": "Measurements", "area": "holding", "address": 28, "type": "uint16", "scale": 0.1, "unit": "Ω", "access": "R", "description": "Range 0.0 to 1000.0"}, {"name": "Calibration day", "group": "Device", "area": "holding", "address": 30, "type": "uint16", "access": "R", "description": "Range 1 to 31"}, {"name": "Calibration month", "group": "Device", "area": "holding", "address": 31, "type": "uint16", "access": "R", "description": "Range 1 to 12"}, {"name": "Calibration year", "group": "Device", "area": "holding", "address": 32, "type": "uint16", "access": "R", "description": "Range 0 to 99"}, {"name": "Serial number (high word)", "group": "Device", "area": "holding", "address": 35, "type": "uint16", "access": "R", "description": "Bits 32 to 47 of the 48-bit serial number"}, {"name": "Serial number (low part)", "group": "Device", "area": "holding", "address": 36, "type": "uint32", "access": "R", "description": "Registers 36 (bits 16 to 31) and 37 (bits 0 to 15)"}, {"name": "Password reminder", "group": "Device", "area": "holding", "address": 38, "type": "uint16", "access": "R", "description": "Range 0 to 9999"} ] }