{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Alfa Instrumentos",
  "model": "3000C / 3000C.S",
  "models": [
    "3101C.S",
    "3102C.S",
    "3103C.S",
    "3104C",
    "3104C.S",
    "3105C",
    "3105C.S",
    "3107C",
    "3107C.S"
  ],
  "vendor_website": "alfainstrumentos.com.br",
  "description": "Weighing indicators with Modbus RTU",
  "revision": 1,
  "revised": "2026-10-20",
  "source": "Alfa Instrumentos, Comandos para Indicadores de Pesagem no Protocolo Modbus-RTU, Linha 3000C / 3000C.S, revision 4.3",
  "sources": [
    {
      "title": "Comandos para Indicadores de Pesagem no Protocolo Modbus-RTU - Linha 3000C / 3000C.S",
      "version": "4.3",
      "date": "2009-08-13",
      "note": "Section 6.3, commands available in the indicators"
    }
  ],
  "notes": [
    "Registers are numbered as in the manual, which counts from 1 (address_base 1): register 81 is sent on the wire as address 80. The manual's own examples show this (reading 6 registers from register 81 sends 0 80).",
    "Supported functions: 0x03 read, 0x06 write one register, 0x10 write several registers.",
    "Each block must be read or written whole: a request that covers only part of a block fails with an exception. The blocks are: 21; write 31 to 39 (9 registers); read 41 to 49 (9); write 51 to 56 (6); read 61 to 66 (6); 71; read 81 to 86 (6); 91; write 101 to 105 (5); read 111 to 115 (5); read 141 to 147 (7); write 161 to 166 (6); read 171 to 177 (7); read 181 and 182 (2); 231; 251; 271; write 851 and 852 (2); read 811 to 819 (9).",
    "The level (SetPoint) and clock blocks are written at one address and read at another, so the write registers are marked W and the read registers R. The level write block holds the levels of one bank (HI: levels 4 to 7, LO: levels 0 to 3) chosen in register 31, and all four values must be sent together.",
    "Weight, tare and the other 32-bit values are a high register followed by a low one: (register n x 65536) + register n+1, which is the default big word order. The manual gives the sign of the weight as a flag (bit 3 of register 81) and does not state a signed type, so they are read as unsigned. Divide by 10 to the power of the decimal places in bits 0 to 2 of register 81.",
    "The 3105 has a different layout of registers 81, 85 and 86 (manual section 6.3.20): bit 7 of register 81 is setup mode, bit 6 compression, bit 5 traction, bit 4 overload or saturation, and registers 85 and 86 hold the compression/traction value instead of the tare. This map follows the layout of section 6.3.7.",
    "The manual gives the response of the status block as 12 bytes in section 6.3.7 and 18 bytes in section 6.3.20; six registers are 12 bytes.",
    "Registers 231, 251, 271 and 851 are documented for writing only (the response repeats the value sent), so they are marked W. The device address is limited to 0 to 99 when programmed, while the protocol allows 0 to 247.",
    "Serial defaults: 19200 baud, 8 data bits, no parity, 2 stop bits. Retries must be at least 100 ms apart."
  ],
  "protocol": "rtu",
  "baudrate": 19200,
  "parity": "N",
  "data_bits": 8,
  "stop_bits": 2,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 1,
  "x_status": "official",
  "enums": {
    "zero": {"0": "Automatic and manual zero off", "1": "Automatic zero", "2": "Manual zero", "3": "Automatic and manual zero"},
    "tare": {"0": "Single", "10": "Single and stored", "20": "Successive", "30": "Successive and stored", "40": "Editable", "50": "Editable and stored", "60": "Disabled", "70": "Automatic and stored", "80": "Automatic"},
    "filter": {"0": "R1", "1": "R2", "2": "R3", "3": "P1", "4": "P2", "5": "P3", "6": "P4", "7": "G1", "8": "G2", "9": "LN"},
    "weekday": {"1": "Monday", "2": "Tuesday", "3": "Wednesday", "4": "Thursday", "5": "Friday", "6": "Saturday", "7": "Sunday"},
    "analog_reference": {"0x42": "Gross weight", "0x4C": "Net weight"},
    "zero_cal": {"0": "Manual and automatic zero off", "1": "Automatic zero", "2": "Manual zero", "3": "Manual and automatic zero"},
    "speed": {"0": "Fast, platforms under 120 kg", "1": "Fast, platforms under 120 kg", "2": "Fast, platforms under 120 kg", "3": "Fast, platforms over 120 kg", "4": "Fast, platforms over 120 kg", "5": "Fast, platforms over 120 kg", "6": "Fast, platforms over 120 kg", "7": "Moving loads", "8": "Moving loads", "9": "High vibration"},
    "tare_cal": {"0": "Single", "1": "Single and stored", "2": "Successive", "3": "Successive and stored", "4": "Editable", "5": "Editable and stored", "6": "Disabled", "7": "Automatic and stored", "8": "Automatic"}
  },
  "registers": [
    {"name": "Overload", "group": "Weight", "area": "holding", "address": 81, "type": "bool", "access": "R", "bit": 6},
    {"name": "Saturation", "group": "Weight", "area": "holding", "address": 81, "type": "bool", "access": "R", "bit": 5},
    {"name": "Scale in motion", "group": "Weight", "area": "holding", "address": 81, "type": "bool", "access": "R", "bit": 4},
    {"name": "Negative weight", "group": "Weight", "area": "holding", "address": 81, "type": "bool", "access": "R", "bit": 3},
    {"name": "Decimal places", "group": "Weight", "area": "holding", "address": 81, "type": "uint16", "access": "R", "bit": 0, "bits": 3, "description": "Bits 0 to 2: position of the decimal point of the weight and tare"},
    {"name": "Level 7 crossed", "group": "Levels", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 11},
    {"name": "Level 6 crossed", "group": "Levels", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 10},
    {"name": "Level 5 crossed", "group": "Levels", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 9},
    {"name": "Level 4 crossed", "group": "Levels", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 8},
    {"name": "Level 0 crossed", "group": "Levels", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 3},
    {"name": "Level 3 crossed", "group": "Levels", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 2},
    {"name": "Level 2 crossed", "group": "Levels", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 1},
    {"name": "Level 1 crossed", "group": "Levels", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 0},
    {"name": "Parameters changed locally", "group": "Weight", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 6},
    {"name": "Gross weight shown", "group": "Weight", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 5, "description": "0 = net, 1 = gross"},
    {"name": "Fixed zero", "group": "Weight", "area": "holding", "address": 82, "type": "bool", "access": "R", "bit": 4},
    {"name": "Weight", "group": "Weight", "area": "holding", "address": 83, "type": "uint32", "access": "R", "description": "Count shown on the display, with the decimals of register 81"},
    {"name": "Tare", "group": "Weight", "area": "holding", "address": 85, "type": "uint32", "access": "R", "description": "Current tare as a count, with the decimals of register 81 (on the 3105 these registers hold the compression/traction value, see notes)"},
    {"name": "Level write control", "group": "Levels", "area": "holding", "address": 31, "type": "uint16", "access": "W", "description": "Write before the level values: bit 6 = store, bits 9 and 10 select the bank"},
    {"name": "Level 1 or 4 new value", "group": "Levels", "area": "holding", "address": 32, "type": "uint32", "access": "W", "description": "Level 1 for the HI bank, level 4 for the LO bank, as the manual names them"},
    {"name": "Level 2 or 5 new value", "group": "Levels", "area": "holding", "address": 34, "type": "uint32", "access": "W"},
    {"name": "Level 3 or 6 new value", "group": "Levels", "area": "holding", "address": 36, "type": "uint32", "access": "W"},
    {"name": "Level empty or 7 new value", "group": "Levels", "area": "holding", "address": 38, "type": "uint32", "access": "W", "description": "EMPTY level (VAZIA) or level 7, depending on the bank"},
    {"name": "Level bank shown", "group": "Levels", "area": "holding", "address": 41, "type": "bool", "access": "R", "bit": 7, "description": "0 = LO (levels 0 to 3), 1 = HI (levels 4 to 7)"},
    {"name": "Number of levels", "group": "Levels", "area": "holding", "address": 41, "type": "uint16", "access": "R", "bit": 0, "bits": 6, "description": "Bits 0 to 5"},
    {"name": "Level 1 or 4 value", "group": "Levels", "area": "holding", "address": 42, "type": "uint32", "access": "R"},
    {"name": "Level 2 or 5 value", "group": "Levels", "area": "holding", "address": 44, "type": "uint32", "access": "R"},
    {"name": "Level 3 or 6 value", "group": "Levels", "area": "holding", "address": 46, "type": "uint32", "access": "R"},
    {"name": "Level empty or 7 value", "group": "Levels", "area": "holding", "address": 48, "type": "uint32", "access": "R"},
    {"name": "Hysteresis new value", "group": "Levels", "area": "holding", "address": 51, "type": "uint16", "access": "W", "bit": 0, "bits": 7, "write_min": 1, "write_max": 99, "unit": "%", "description": "Bits 0 to 6"},
    {"name": "Output logic new value", "group": "Levels", "area": "holding", "address": 52, "type": "bool", "access": "W", "bit": 0, "description": "0 = normally open, 1 = normally closed"},
    {"name": "Level count new value", "group": "Levels", "area": "holding", "address": 53, "type": "uint16", "access": "W", "bit": 0, "bits": 6, "description": "Bits 0 to 5: 3 = levels EMPTY, 1, 2, 3; 4 = levels 0, 1, 2, 3"},
    {"name": "Store level configuration", "group": "Levels", "area": "holding", "address": 53, "type": "bool", "access": "W", "bit": 6, "description": "0 = do not store, 1 = store"},
    {"name": "Level 1 latch new value", "group": "Levels", "area": "holding", "address": 54, "type": "bool", "access": "W", "bit": 0, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 4 latch new value", "group": "Levels", "area": "holding", "address": 54, "type": "bool", "access": "W", "bit": 1, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 2 latch new value", "group": "Levels", "area": "holding", "address": 55, "type": "bool", "access": "W", "bit": 0, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 5 latch new value", "group": "Levels", "area": "holding", "address": 55, "type": "bool", "access": "W", "bit": 1, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 3 latch new value", "group": "Levels", "area": "holding", "address": 56, "type": "bool", "access": "W", "bit": 0, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 6 latch new value", "group": "Levels", "area": "holding", "address": 56, "type": "bool", "access": "W", "bit": 1, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 7 latch new value", "group": "Levels", "area": "holding", "address": 56, "type": "bool", "access": "W", "bit": 2, "description": "0 = does not latch, 1 = latches"},
    {"name": "Hysteresis", "group": "Levels", "area": "holding", "address": 61, "type": "uint16", "access": "R", "bit": 0, "bits": 7, "unit": "%", "description": "Bits 0 to 6"},
    {"name": "Output logic", "group": "Levels", "area": "holding", "address": 62, "type": "bool", "access": "R", "bit": 0, "description": "0 = normally open, 1 = normally closed"},
    {"name": "Level count", "group": "Levels", "area": "holding", "address": 63, "type": "uint16", "access": "R", "bit": 0, "bits": 6, "description": "Bits 0 to 5: 3 = levels EMPTY, 1, 2, 3; 4 = levels 0, 1, 2, 3"},
    {"name": "Level 1 latches", "group": "Levels", "area": "holding", "address": 64, "type": "bool", "access": "R", "bit": 0, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 4 latches", "group": "Levels", "area": "holding", "address": 64, "type": "bool", "access": "R", "bit": 1, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 2 latches", "group": "Levels", "area": "holding", "address": 65, "type": "bool", "access": "R", "bit": 0, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 5 latches", "group": "Levels", "area": "holding", "address": 65, "type": "bool", "access": "R", "bit": 1, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 3 latches", "group": "Levels", "area": "holding", "address": 66, "type": "bool", "access": "R", "bit": 0, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 6 latches", "group": "Levels", "area": "holding", "address": 66, "type": "bool", "access": "R", "bit": 1, "description": "0 = does not latch, 1 = latches"},
    {"name": "Level 7 latches", "group": "Levels", "area": "holding", "address": 66, "type": "bool", "access": "R", "bit": 2, "description": "0 = does not latch, 1 = latches"},
    {"name": "Initialization", "group": "Commands and settings", "area": "holding", "address": 21, "type": "uint16", "access": "W", "write_min": 0, "write_max": 0, "description": "Write 0 to put the indicator in weight indication mode"},
    {"name": "Indicator address", "group": "Commands and settings", "area": "holding", "address": 71, "type": "uint16", "access": "W", "write_min": 0, "write_max": 99, "description": "New network address of the indicator, 0 to 99"},
    {"name": "Zero command", "group": "Commands and settings", "area": "holding", "address": 91, "type": "bool", "access": "W", "bit": 0, "description": "Write 1 to run (bit 0 of the remote key register)"},
    {"name": "Tare command", "group": "Commands and settings", "area": "holding", "address": 91, "type": "bool", "access": "W", "bit": 1, "description": "Write 1 to run (bit 1 of the remote key register)"},
    {"name": "Clear accumulated total command", "group": "Commands and settings", "area": "holding", "address": 91, "type": "bool", "access": "W", "bit": 2, "description": "Write 1 to run (bit 2 of the remote key register)"},
    {"name": "Untare command", "group": "Commands and settings", "area": "holding", "address": 91, "type": "bool", "access": "W", "bit": 3, "description": "Write 1 to run (bit 3 of the remote key register)"},
    {"name": "Unlock levels command", "group": "Commands and settings", "area": "holding", "address": 91, "type": "bool", "access": "W", "bit": 4, "description": "Write 1 to run (bit 4 of the remote key register)"},
    {"name": "Print command", "group": "Commands and settings", "area": "holding", "address": 91, "type": "bool", "access": "W", "bit": 5, "description": "Write 1 to run (bit 5 of the remote key register)"},
    {"name": "Accumulate command", "group": "Commands and settings", "area": "holding", "address": 91, "type": "bool", "access": "W", "bit": 6, "description": "Write 1 to run (bit 6 of the remote key register)"},
    {"name": "Zero configuration", "group": "Commands and settings", "area": "holding", "address": 231, "type": "uint16", "access": "W", "bit": 0, "bits": 3, "enum": "zero", "description": "Bits 0 to 2: zero operating mode"},
    {"name": "Initial zero enabled", "group": "Commands and settings", "area": "holding", "address": 231, "type": "bool", "access": "W", "bit": 8},
    {"name": "Tare mode", "group": "Commands and settings", "area": "holding", "address": 251, "type": "uint16", "access": "W", "enum": "tare"},
    {"name": "Filter", "group": "Commands and settings", "area": "holding", "address": 271, "type": "uint16", "access": "W", "bit": 0, "bits": 4, "enum": "filter", "description": "Bits 0 to 3: digital filter type"},
    {"name": "Editable tare value", "group": "Commands and settings", "area": "holding", "address": 851, "type": "uint32", "access": "W", "description": "Value used when the tare mode is editable"},
    {"name": "Target weight capture", "group": "Commands and settings", "area": "holding", "address": 181, "type": "uint32", "access": "R", "description": "Registers 181 and 182 of the over/under application; the manual marks them as reserved"},
    {"name": "Analog output configuration", "group": "Analog output", "area": "holding", "address": 101, "type": "uint16", "access": "W", "bit": 0, "bits": 8, "enum": "analog_reference", "description": "Bits 0 to 7: weight reference"},
    {"name": "Analog output HI configuration", "group": "Analog output", "area": "holding", "address": 101, "type": "bool", "access": "W", "bit": 10, "description": "Bit 10 of register 101: configures A1 / A2"},
    {"name": "Analog output LO configuration", "group": "Analog output", "area": "holding", "address": 101, "type": "bool", "access": "W", "bit": 9, "description": "Bit 9 of register 101: configures P1 / P2"},
    {"name": "Analog output P1 or A1 new value", "group": "Analog output", "area": "holding", "address": 102, "type": "uint32", "access": "W"},
    {"name": "Analog output P2 or A2 new value", "group": "Analog output", "area": "holding", "address": 104, "type": "uint32", "access": "W"},
    {"name": "Analog output reference", "group": "Analog output", "area": "holding", "address": 111, "type": "uint16", "access": "R", "bit": 0, "bits": 8, "enum": "analog_reference", "description": "Bits 0 to 7"},
    {"name": "Analog output P1 or A1", "group": "Analog output", "area": "holding", "address": 112, "type": "uint32", "access": "R"},
    {"name": "Analog output P2 or A2", "group": "Analog output", "area": "holding", "address": 114, "type": "uint32", "access": "R"},
    {"name": "Accumulation decimal places", "group": "Accumulation", "area": "holding", "address": 141, "type": "uint16", "access": "R", "bit": 0, "bits": 3, "description": "Bits 0 to 2"},
    {"name": "Accumulated total", "group": "Accumulation", "area": "holding", "address": 142, "type": "uint32", "access": "R"},
    {"name": "Number of accumulations", "group": "Accumulation", "area": "holding", "address": 144, "type": "uint32", "access": "R"},
    {"name": "Accumulated average", "group": "Accumulation", "area": "holding", "address": 146, "type": "uint32", "access": "R"},
    {"name": "Set clock day", "group": "Clock", "area": "holding", "address": 161, "type": "uint16", "access": "W", "description": "Write the six registers 161 to 166 together (function 0x10)", "write_min": 1, "write_max": 31},
    {"name": "Set clock month", "group": "Clock", "area": "holding", "address": 162, "type": "uint16", "access": "W", "description": "Write the six registers 161 to 166 together (function 0x10)", "write_min": 1, "write_max": 12},
    {"name": "Set clock year", "group": "Clock", "area": "holding", "address": 163, "type": "uint16", "access": "W", "description": "Write the six registers 161 to 166 together (function 0x10). Last two digits of the year"},
    {"name": "Set clock hour", "group": "Clock", "area": "holding", "address": 164, "type": "uint16", "access": "W", "description": "Write the six registers 161 to 166 together (function 0x10)", "write_max": 24},
    {"name": "Set clock minute", "group": "Clock", "area": "holding", "address": 165, "type": "uint16", "access": "W", "description": "Write the six registers 161 to 166 together (function 0x10)", "write_max": 59},
    {"name": "Set clock second", "group": "Clock", "area": "holding", "address": 166, "type": "uint16", "access": "W", "description": "Write the six registers 161 to 166 together (function 0x10)", "write_max": 59},
    {"name": "Clock day", "group": "Clock", "area": "holding", "address": 171, "type": "uint16", "access": "R"},
    {"name": "Clock month", "group": "Clock", "area": "holding", "address": 172, "type": "uint16", "access": "R"},
    {"name": "Clock year", "group": "Clock", "area": "holding", "address": 173, "type": "uint16", "access": "R", "description": "Last two digits of the year"},
    {"name": "Clock hour", "group": "Clock", "area": "holding", "address": 174, "type": "uint16", "access": "R"},
    {"name": "Clock minute", "group": "Clock", "area": "holding", "address": 175, "type": "uint16", "access": "R"},
    {"name": "Clock second", "group": "Clock", "area": "holding", "address": 176, "type": "uint16", "access": "R"},
    {"name": "Clock weekday", "group": "Clock", "area": "holding", "address": 177, "type": "uint16", "access": "R", "enum": "weekday"},
    {"name": "Decimal places (calibration)", "group": "Calibration", "area": "holding", "address": 811, "type": "uint16", "access": "R", "bit": 0, "bits": 3, "description": "Bits 0 to 2: number of decimal places"},
    {"name": "Step", "group": "Calibration", "area": "holding", "address": 812, "type": "uint16", "access": "R", "bit": 0, "bits": 3, "description": "Bits 0 to 2: scale division, 1, 2 or 5"},
    {"name": "Calibration weight", "group": "Calibration", "area": "holding", "address": 813, "type": "uint32", "access": "R", "description": "PECAL"},
    {"name": "Capacity", "group": "Calibration", "area": "holding", "address": 815, "type": "uint32", "access": "R", "description": "CAPAC, maximum capacity"},
    {"name": "Zero mode (calibration)", "group": "Calibration", "area": "holding", "address": 817, "type": "uint16", "access": "R", "enum": "zero_cal"},
    {"name": "Response speed", "group": "Calibration", "area": "holding", "address": 818, "type": "uint16", "access": "R", "enum": "speed"},
    {"name": "Tare mode (calibration)", "group": "Calibration", "area": "holding", "address": 819, "type": "uint16", "access": "R", "enum": "tare_cal"}
  ]
}
