{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Novus",
  "model": "NP785",
  "models": [
    "NP785",
    "NP785-50",
    "NP785-100",
    "NP785-05",
    "NP785-20",
    "NP785-68",
    "NP785-400",
    "NP785-1000"
  ],
  "vendor_website": "novus.com.br",
  "description": "Ultra-low differential pressure transmitter (±50 Pa to ±1000 mbar) with 4-20 mA / 0-10 V output, one alarm output and Modbus RTU over RS485: pressure, min/max, unit, filter, offset and autozero, output, alarm, forcing and diagnostics",
  "revision": 1,
  "revised": "2026-10-31",
  "firmware": "V2.1x or later",
  "firmware_min": "2.1",
  "source": "Novus NP785 instruction manual V2.1x (Portuguese), chapter 7",
  "sources": [
    {
      "title": "Transmissor de Pressão Diferencial Ultra Baixa NP785 - Manual de Instruções",
      "version": "V2.1x",
      "url": "https://github.com/user-attachments/files/34218905/Manual_NP785_PT.pdf",
      "note": "linked in issue #91; tables 1 and 5-14"
    }
  ],
  "notes": [
    "Functions 03, 05, 06 and 16; writes with address 0 are broadcast.",
    "Serial defaults: address 1, 19200 bit/s, no parity (registers 137-139). The manual does not give the stop bits; 1 is assumed.",
    "32-bit values take two registers, low word first (HR_PRESS at 0, HR_PRESS_H at 1). The manual says the floats are 'little-endian with byte inversion'; this map reads them with the low word first and big-endian bytes in each word. Both registers of a 32-bit value must be read or written together.",
    "The integer pressure registers carry the decimal places of the selected unit (mbar 3, mpsi 2, inH2O 3, mmH2O 2, Pa 1), so they have no fixed scale; the float registers 6-11 give the value directly.",
    "Settings that take a pressure are written to an input register pair (103-106, 157-158, 179-185, 142-143); when the value is in range the device copies it to the working pair (108-111, 159-160, 186-194, 144-145). Out-of-range inputs are flagged in register 343.",
    "Sensor type 9 (5 mbar) needs firmware V2.1x or later.",
    "Written from the manufacturer's manual; not tested on a device."
  ],
  "protocol": "rtu",
  "unit_id": 1,
  "baudrate": 19200,
  "databits": 8,
  "parity": "N",
  "stopbits": 1,
  "byte_order": "big",
  "word_order": "little",
  "address_base": 0,
  "x_status": "official",
  "enums": {
    "sensor_type": {
      "0": "NP785-05",
      "1": "NP785-20",
      "3": "NP785-68",
      "4": "NP785-400",
      "5": "NP785-1000",
      "6": "NP785-50",
      "7": "NP785-100",
      "9": "NP785-05"
    },
    "unit": {
      "0": "mbar",
      "1": "mpsi",
      "2": "inH2O",
      "3": "mmH2O",
      "4": "Pa"
    },
    "no_yes": {
      "0": "No",
      "1": "Yes"
    },
    "alarm_function": {
      "0": "Off",
      "1": "Sensor error",
      "2": "Below setpoint",
      "3": "Above setpoint",
      "4": "Inside band",
      "5": "Outside band"
    },
    "baud_rate": {
      "0": "1200",
      "1": "2400",
      "2": "4800",
      "3": "9600",
      "4": "19200",
      "5": "38400",
      "6": "57600",
      "7": "115200"
    }
  },
  "registers": [
    {"name": "Differential pressure", "group": "Measurements", "area": "holding", "address": 6, "type": "float32", "access": "R", "description": "In the selected unit (register 115)"},
    {"name": "Differential pressure minimum", "group": "Measurements", "area": "holding", "address": 8, "type": "float32", "access": "R"},
    {"name": "Differential pressure maximum", "group": "Measurements", "area": "holding", "address": 10, "type": "float32", "access": "R"},
    {"name": "Differential pressure (integer)", "group": "Measurements", "area": "holding", "address": 0, "type": "int32", "access": "R", "description": "Integer with the decimal places of the selected unit: mbar 3, mpsi 2, inH2O 3, mmH2O 2, Pa 1"},
    {"name": "Differential pressure minimum (integer)", "group": "Measurements", "area": "holding", "address": 2, "type": "int32", "access": "R", "description": "Integer with the decimal places of the selected unit: mbar 3, mpsi 2, inH2O 3, mmH2O 2, Pa 1"},
    {"name": "Differential pressure maximum (integer)", "group": "Measurements", "area": "holding", "address": 4, "type": "int32", "access": "R", "description": "Integer with the decimal places of the selected unit: mbar 3, mpsi 2, inH2O 3, mmH2O 2, Pa 1"},
    {"name": "Reset min and max", "group": "Measurements", "area": "holding", "address": 161, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 1, "description": "Write 1 to reset every minimum and maximum"},
    {"name": "Sensor type", "group": "Configuration", "area": "holding", "address": 100, "type": "uint16", "access": "R", "enum": "sensor_type", "role": "model"},
    {"name": "Pressure unit", "group": "Configuration", "area": "holding", "address": 115, "type": "uint16", "access": "RW", "enum": "unit", "write_min": 0, "write_max": 4, "description": "Changing it resets the retransmission limits to the operating limits"},
    {"name": "Pressure filter", "group": "Configuration", "area": "holding", "address": 113, "type": "uint16", "unit": "s", "access": "RW", "write_min": 0, "write_max": 300, "description": "Time constant of the first-order filter"},
    {"name": "Pressure high limit", "group": "Configuration", "area": "holding", "address": 359, "type": "int32", "access": "R", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0"},
    {"name": "Pressure low limit", "group": "Configuration", "area": "holding", "address": 361, "type": "int32", "access": "R", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0"},
    {"name": "Offset setting", "group": "Offset and autozero", "area": "holding", "address": 142, "type": "float32", "access": "RW", "description": "Within ±20 % of the range; the device copies it to register 144 when valid"},
    {"name": "Offset", "group": "Offset and autozero", "area": "holding", "address": 144, "type": "float32", "access": "R"},
    {"name": "Autozero clears offset", "group": "Offset and autozero", "area": "holding", "address": 147, "type": "uint16", "access": "RW", "enum": "no_yes", "write_min": 0, "write_max": 1},
    {"name": "Run autozero", "group": "Offset and autozero", "area": "holding", "address": 148, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 1, "description": "Write 1 to zero the reading"},
    {"name": "Autozero value", "group": "Offset and autozero", "area": "holding", "address": 149, "type": "float32", "access": "R"},
    {"name": "Output type", "group": "Analog output", "area": "holding", "address": 101, "type": "uint16", "access": "RW", "enum": {"0": "4-20 mA", "1": "0-10 V"}, "write_min": 0, "write_max": 1},
    {"name": "Retransmission high limit setting", "group": "Analog output", "area": "holding", "address": 103, "type": "int32", "access": "RW", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0; the device copies it to register 108 when valid"},
    {"name": "Retransmission low limit setting", "group": "Analog output", "area": "holding", "address": 105, "type": "int32", "access": "RW", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0; the device copies it to register 110 when valid"},
    {"name": "Output on error", "group": "Analog output", "area": "holding", "address": 107, "type": "uint16", "access": "RW", "enum": {"0": "Low", "1": "High", "2": "Low/high"}, "write_min": 0, "write_max": 2},
    {"name": "Retransmission high limit", "group": "Analog output", "area": "holding", "address": 108, "type": "int32", "access": "R", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0"},
    {"name": "Retransmission low limit", "group": "Analog output", "area": "holding", "address": 110, "type": "int32", "access": "R", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0"},
    {"name": "Alarm function", "group": "Alarm", "area": "holding", "address": 178, "type": "uint16", "access": "RW", "enum": "alarm_function", "write_min": 0, "write_max": 5},
    {"name": "Alarm high setpoint setting", "group": "Alarm", "area": "holding", "address": 179, "type": "int32", "access": "RW", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0; the device copies it to register 191 when valid"},
    {"name": "Alarm low setpoint setting", "group": "Alarm", "area": "holding", "address": 181, "type": "int32", "access": "RW", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0; the device copies it to register 193 when valid"},
    {"name": "Alarm initial block", "group": "Alarm", "area": "holding", "address": 183, "type": "uint16", "access": "RW", "enum": "no_yes", "write_min": 0, "write_max": 1},
    {"name": "Alarm hysteresis setting", "group": "Alarm", "area": "holding", "address": 184, "type": "int32", "access": "RW", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0; up to 20 % of the range"},
    {"name": "Alarm hysteresis", "group": "Alarm", "area": "holding", "address": 186, "type": "int32", "access": "R", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0"},
    {"name": "Alarm on time", "group": "Alarm", "area": "holding", "address": 188, "type": "uint16", "unit": "s", "access": "RW", "write_min": 0, "write_max": 6500},
    {"name": "Alarm off time", "group": "Alarm", "area": "holding", "address": 189, "type": "uint16", "unit": "s", "access": "RW", "write_min": 0, "write_max": 6500},
    {"name": "Alarm on sensor error", "group": "Alarm", "area": "holding", "address": 190, "type": "uint16", "access": "RW", "enum": {"0": "Off", "1": "On"}, "write_min": 0, "write_max": 1},
    {"name": "Alarm high setpoint", "group": "Alarm", "area": "holding", "address": 191, "type": "int32", "access": "R", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0"},
    {"name": "Alarm low setpoint", "group": "Alarm", "area": "holding", "address": 193, "type": "int32", "access": "R", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0"},
    {"name": "Output forcing enabled", "group": "Forcing", "area": "holding", "address": 152, "type": "uint16", "access": "RW", "enum": "no_yes", "write_min": 0, "write_max": 1},
    {"name": "Forced output value", "group": "Forcing", "area": "holding", "address": 153, "type": "uint16", "access": "RW", "description": "0.00-10.00 V or 3.60-21.00 mA; the manual does not give the encoding"},
    {"name": "Alarm forcing enabled", "group": "Forcing", "area": "holding", "address": 154, "type": "uint16", "access": "RW", "enum": "no_yes", "write_min": 0, "write_max": 1},
    {"name": "Forced alarm state", "group": "Forcing", "area": "holding", "address": 155, "type": "uint16", "access": "RW", "enum": {"0": "Off", "1": "On"}, "write_min": 0, "write_max": 1},
    {"name": "Pressure forcing enabled", "group": "Forcing", "area": "holding", "address": 156, "type": "uint16", "access": "RW", "enum": "no_yes", "write_min": 0, "write_max": 1},
    {"name": "Forced pressure setting", "group": "Forcing", "area": "holding", "address": 157, "type": "int32", "access": "RW", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0; the device copies it to register 159 when valid"},
    {"name": "Forced pressure", "group": "Forcing", "area": "holding", "address": 159, "type": "int32", "access": "R", "description": "The manual does not give the data type of this pair; read here as a 32-bit integer like the pressure in register 0"},
    {"name": "Unit configuration error", "group": "Diagnostics", "area": "holding", "address": 341, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Alarm output overload", "group": "Diagnostics", "area": "holding", "address": 341, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Alarm forced state", "group": "Diagnostics", "area": "holding", "address": 341, "type": "bool", "bit": 3, "access": "R"},
    {"name": "Alarm state", "group": "Diagnostics", "area": "holding", "address": 341, "type": "bool", "bit": 5, "access": "R"},
    {"name": "Alarm forcing on", "group": "Diagnostics", "area": "holding", "address": 341, "type": "bool", "bit": 10, "access": "R"},
    {"name": "Output forcing on", "group": "Diagnostics", "area": "holding", "address": 341, "type": "bool", "bit": 12, "access": "R"},
    {"name": "Pressure sensor error", "group": "Diagnostics", "area": "holding", "address": 342, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Retransmission limit setting out of range", "group": "Diagnostics", "area": "holding", "address": 343, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Alarm setpoint setting out of range", "group": "Diagnostics", "area": "holding", "address": 343, "type": "bool", "bit": 3, "access": "R"},
    {"name": "Forced pressure setting out of range", "group": "Diagnostics", "area": "holding", "address": 343, "type": "bool", "bit": 6, "access": "R"},
    {"name": "Below range", "group": "Diagnostics", "area": "holding", "address": 344, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Above range", "group": "Diagnostics", "area": "holding", "address": 344, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Baud rate", "group": "Communication", "area": "holding", "address": 137, "type": "uint16", "access": "RW", "enum": "baud_rate", "write_min": 0, "write_max": 7},
    {"name": "Parity", "group": "Communication", "area": "holding", "address": 138, "type": "uint16", "access": "RW", "enum": {"0": "None", "1": "Odd", "2": "Even"}, "write_min": 0, "write_max": 2},
    {"name": "Modbus address", "group": "Communication", "area": "holding", "address": 139, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 247},
    {"name": "Device tag", "group": "Identity", "area": "holding", "address": 166, "type": "string", "length": 10, "byte_order": "little", "access": "RW", "description": "Up to 20 characters, first character in the low byte"}
  ]
}
