{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Unipi Technology", "model": "Axon S215", "models": [ "S215", "Axon S215" ], "vendor_website": "www.unipi.technology", "description": "Unipi Axon S215 PLC: 8 digital inputs, 8 relay outputs", "revision": 3, "revised": "2026-11-10", "source": "unipi-axon-s215-modbus-registers.xlsx, Unipi knowledge base page https://kb.unipi.technology/en:hw:04-extensions:downloads", "sources": [ { "title": "Axon S215 Modbus registers (unipi-axon-s215-modbus-registers.xlsx)", "url": "https://kb.unipi.technology/_media/en:files:products:unipi-axon-s215-modbus-registers.xlsx", "note": "Sheets Registers - group 1, Coils - group 1, Description; listed on https://kb.unipi.technology/en:hw:04-extensions:downloads" } ], "notes": [ "Addresses are those of the column 'Via Unit 0' (Modbus TCP unit id 0); the column 'Via Unit 1' gives the same addresses for this single-group model.", "Unipi Axon and Neuron use Modbus TCP. By default the Modbus server listens only on the loopback interface; it can be opened to other interfaces by changing its systemd script (Description sheet). The TCP port and the unit id used here are not stated in the spreadsheet: 502 is the Modbus default.", "Registers marked Reserved or Obsolete in the spreadsheet, and those named (Internal), are left out. Multi-register values are big-endian (most significant register first). The spreadsheet types Real as a two-register floating point value, read here as float32; its Description sheet text about half and single precision is ambiguous.", "Coils (suffix (coil)) repeat digital inputs, outputs and some settings that also appear as bits of holding registers. Analog values are in the unit selected by the analog input or output configuration register; the spreadsheet gives no unit for them." ], "protocol": "tcp", "port": 502, "unit_id": 0, "byte_order": "big", "word_order": "big", "address_base": 0, "x_status": "official", "registers": [ { "name": "Digital Input 1.1", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 0 }, { "name": "Digital Input 1.2", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 1 }, { "name": "Digital Input 1.3", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 2 }, { "name": "Digital Input 1.4", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 3 }, { "name": "Digital Input 1.5", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 4 }, { "name": "Digital Input 1.6", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 5 }, { "name": "Digital Input 1.7", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 6 }, { "name": "Digital Input 1.8", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 7 }, { "name": "Relay Output 1.1", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 0, "access": "RW" }, { "name": "Relay Output 1.2", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 1, "access": "RW" }, { "name": "Relay Output 1.3", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 2, "access": "RW" }, { "name": "Relay Output 1.4", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 3, "access": "RW" }, { "name": "Relay Output 1.5", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 4, "access": "RW" }, { "name": "Relay Output 1.6", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 5, "access": "RW" }, { "name": "Relay Output 1.7", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 6, "access": "RW" }, { "name": "Relay Output 1.8", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 7, "access": "RW" }, { "name": "MWD Enable", "group": "Watchdog", "area": "holding", "address": 2, "type": "bool", "bit": 0, "access": "RW" }, { "name": "MWD Reboot Detected", "group": "Watchdog", "area": "holding", "address": 2, "type": "bool", "bit": 1, "access": "RW" }, { "name": "Counter of Digital Input 1.1", "group": "Counters", "area": "holding", "address": 3, "type": "uint32", "access": "RW" }, { "name": "Counter of Digital Input 1.2", "group": "Counters", "area": "holding", "address": 5, "type": "uint32", "access": "RW" }, { "name": "Counter of Digital Input 1.3", "group": "Counters", "area": "holding", "address": 7, "type": "uint32", "access": "RW" }, { "name": "Counter of Digital Input 1.4", "group": "Counters", "area": "holding", "address": 9, "type": "uint32", "access": "RW" }, { "name": "Counter of Digital Input 1.5", "group": "Counters", "area": "holding", "address": 11, "type": "uint32", "access": "RW" }, { "name": "Counter of Digital Input 1.6", "group": "Counters", "area": "holding", "address": 13, "type": "uint32", "access": "RW" }, { "name": "Counter of Digital Input 1.7", "group": "Counters", "area": "holding", "address": 15, "type": "uint32", "access": "RW" }, { "name": "Counter of Digital Input 1.8", "group": "Counters", "area": "holding", "address": 17, "type": "uint32", "access": "RW" }, { "name": "Synchronised DO/RO 1.1", "group": "Synchronised outputs", "area": "holding", "address": 23, "type": "bool", "bit": 0, "access": "RW" }, { "name": "Synchronised DO/RO 1.2", "group": "Synchronised outputs", "area": "holding", "address": 23, "type": "bool", "bit": 1, "access": "RW" }, { "name": "Synchronised DO/RO 1.3", "group": "Synchronised outputs", "area": "holding", "address": 23, "type": "bool", "bit": 2, "access": "RW" }, { "name": "Synchronised DO/RO 1.4", "group": "Synchronised outputs", "area": "holding", "address": 23, "type": "bool", "bit": 3, "access": "RW" }, { "name": "Synchronised DO/RO 1.5", "group": "Synchronised outputs", "area": "holding", "address": 23, "type": "bool", "bit": 4, "access": "RW" }, { "name": "Synchronised DO/RO 1.6", "group": "Synchronised outputs", "area": "holding", "address": 23, "type": "bool", "bit": 5, "access": "RW" }, { "name": "Synchronised DO/RO 1.7", "group": "Synchronised outputs", "area": "holding", "address": 23, "type": "bool", "bit": 6, "access": "RW" }, { "name": "Synchronised DO/RO 1.8", "group": "Synchronised outputs", "area": "holding", "address": 23, "type": "bool", "bit": 7, "access": "RW" }, { "name": "Synchronised DO/RO Lock 1.1", "group": "Synchronised outputs", "area": "holding", "address": 24, "type": "bool", "bit": 0, "access": "RW" }, { "name": "Synchronised DO/RO Lock 1.2", "group": "Synchronised outputs", "area": "holding", "address": 24, "type": "bool", "bit": 1, "access": "RW" }, { "name": "Synchronised DO/RO Lock 1.3", "group": "Synchronised outputs", "area": "holding", "address": 24, "type": "bool", "bit": 2, "access": "RW" }, { "name": "Synchronised DO/RO Lock 1.4", "group": "Synchronised outputs", "area": "holding", "address": 24, "type": "bool", "bit": 3, "access": "RW" }, { "name": "Synchronised DO/RO Lock 1.5", "group": "Synchronised outputs", "area": "holding", "address": 24, "type": "bool", "bit": 4, "access": "RW" }, { "name": "Synchronised DO/RO Lock 1.6", "group": "Synchronised outputs", "area": "holding", "address": 24, "type": "bool", "bit": 5, "access": "RW" }, { "name": "Synchronised DO/RO Lock 1.7", "group": "Synchronised outputs", "area": "holding", "address": 24, "type": "bool", "bit": 6, "access": "RW" }, { "name": "Synchronised DO/RO Lock 1.8", "group": "Synchronised outputs", "area": "holding", "address": 24, "type": "bool", "bit": 7, "access": "RW" }, { "name": "Firmware Version", "group": "Device information", "area": "holding", "address": 1000, "type": "uint16" }, { "name": "Number of DIs", "group": "Device information", "area": "holding", "address": 1001, "type": "uint16", "bit": 0, "bits": 8 }, { "name": "Number of DOs", "group": "Device information", "area": "holding", "address": 1001, "type": "uint16", "bit": 8, "bits": 8 }, { "name": "Number of internal RS485 lines", "group": "RS485 and Modbus configuration", "area": "holding", "address": 1002, "type": "uint16", "bit": 0, "bits": 4 }, { "name": "Number of AOs", "group": "Device information", "area": "holding", "address": 1002, "type": "uint16", "bit": 4, "bits": 4 }, { "name": "Number of AIs", "group": "Device information", "area": "holding", "address": 1002, "type": "uint16", "bit": 8, "bits": 8 }, { "name": "Firmware ID", "group": "Device information", "area": "holding", "address": 1003, "type": "uint16" }, { "name": "Hardware ID", "group": "Device information", "area": "holding", "address": 1004, "type": "uint16" }, { "name": "PCB Serial Number", "group": "Device information", "area": "holding", "address": 1005, "type": "uint32" }, { "name": "RS485 RX queue not empty", "group": "Interrupt mask", "area": "holding", "address": 1007, "type": "bool", "bit": 0, "access": "RW" }, { "name": "RS485 TX queue empty", "group": "Interrupt mask", "area": "holding", "address": 1007, "type": "bool", "bit": 1, "access": "RW" }, { "name": "RS485 ModBus RX frame finished", "group": "Interrupt mask", "area": "holding", "address": 1007, "type": "bool", "bit": 2, "access": "RW" }, { "name": "Digital Input changed state", "group": "Interrupt mask", "area": "holding", "address": 1007, "type": "bool", "bit": 3, "access": "RW" }, { "name": "Group MasterWatchDog (MWD) Timeout (in 1ms)", "group": "Watchdog", "area": "holding", "address": 1008, "type": "uint16", "access": "RW", "unit": "ms" }, { "name": "VRef of MCU", "group": "Device information", "area": "holding", "address": 1009, "type": "uint16" }, { "name": "Debounce time (in 100us) for DI 1.1", "group": "DirectSwitch and debounce", "area": "holding", "address": 1010, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs" }, { "name": "Debounce time (in 100us) for DI 1.2", "group": "DirectSwitch and debounce", "area": "holding", "address": 1011, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs" }, { "name": "Debounce time (in 100us) for DI 1.3", "group": "DirectSwitch and debounce", "area": "holding", "address": 1012, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs" }, { "name": "Debounce time (in 100us) for DI 1.4", "group": "DirectSwitch and debounce", "area": "holding", "address": 1013, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs" }, { "name": "Debounce time (in 100us) for DI 1.5", "group": "DirectSwitch and debounce", "area": "holding", "address": 1014, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs" }, { "name": "Debounce time (in 100us) for DI 1.6", "group": "DirectSwitch and debounce", "area": "holding", "address": 1015, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs" }, { "name": "Debounce time (in 100us) for DI 1.7", "group": "DirectSwitch and debounce", "area": "holding", "address": 1016, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs" }, { "name": "Debounce time (in 100us) for DI 1.8", "group": "DirectSwitch and debounce", "area": "holding", "address": 1017, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs" }, { "name": "Enable DirectSwitch on DI 1.1", "group": "DirectSwitch and debounce", "area": "holding", "address": 1018, "type": "bool", "bit": 0, "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.2", "group": "DirectSwitch and debounce", "area": "holding", "address": 1018, "type": "bool", "bit": 1, "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.3", "group": "DirectSwitch and debounce", "area": "holding", "address": 1018, "type": "bool", "bit": 2, "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.4", "group": "DirectSwitch and debounce", "area": "holding", "address": 1018, "type": "bool", "bit": 3, "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.5", "group": "DirectSwitch and debounce", "area": "holding", "address": 1018, "type": "bool", "bit": 4, "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.6", "group": "DirectSwitch and debounce", "area": "holding", "address": 1018, "type": "bool", "bit": 5, "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.7", "group": "DirectSwitch and debounce", "area": "holding", "address": 1018, "type": "bool", "bit": 6, "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.8", "group": "DirectSwitch and debounce", "area": "holding", "address": 1018, "type": "bool", "bit": 7, "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.1", "group": "DirectSwitch and debounce", "area": "holding", "address": 1019, "type": "bool", "bit": 0, "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.2", "group": "DirectSwitch and debounce", "area": "holding", "address": 1019, "type": "bool", "bit": 1, "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.3", "group": "DirectSwitch and debounce", "area": "holding", "address": 1019, "type": "bool", "bit": 2, "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.4", "group": "DirectSwitch and debounce", "area": "holding", "address": 1019, "type": "bool", "bit": 3, "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.5", "group": "DirectSwitch and debounce", "area": "holding", "address": 1019, "type": "bool", "bit": 4, "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.6", "group": "DirectSwitch and debounce", "area": "holding", "address": 1019, "type": "bool", "bit": 5, "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.7", "group": "DirectSwitch and debounce", "area": "holding", "address": 1019, "type": "bool", "bit": 6, "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.8", "group": "DirectSwitch and debounce", "area": "holding", "address": 1019, "type": "bool", "bit": 7, "access": "RW" }, { "name": "Enable DirectSwitch Toggle on DI 1.1", "group": "DirectSwitch and debounce", "area": "holding", "address": 1020, "type": "bool", "bit": 0, "access": "RW" }, { "name": "Enable DirectSwitch Toggle on DI 1.2", "group": "DirectSwitch and debounce", "area": "holding", "address": 1020, "type": "bool", "bit": 1, "access": "RW" }, { "name": "Enable DirectSwitch Toggle on DI 1.3", "group": "DirectSwitch and debounce", "area": "holding", "address": 1020, "type": "bool", "bit": 2, "access": "RW" }, { "name": "Enable DirectSwitch Toggle on DI 1.4", "group": "DirectSwitch and debounce", "area": "holding", "address": 1020, "type": "bool", "bit": 3, "access": "RW" }, { "name": "Enable DirectSwitch Toggle on DI 1.5", "group": "DirectSwitch and debounce", "area": "holding", "address": 1020, "type": "bool", "bit": 4, "access": "RW" }, { "name": "Enable DirectSwitch Toggle on DI 1.6", "group": "DirectSwitch and debounce", "area": "holding", "address": 1020, "type": "bool", "bit": 5, "access": "RW" }, { "name": "Enable DirectSwitch Toggle on DI 1.7", "group": "DirectSwitch and debounce", "area": "holding", "address": 1020, "type": "bool", "bit": 6, "access": "RW" }, { "name": "Enable DirectSwitch Toggle on DI 1.8", "group": "DirectSwitch and debounce", "area": "holding", "address": 1020, "type": "bool", "bit": 7, "access": "RW" }, { "name": "Relay Output 1.1 (coil)", "group": "Relay outputs", "area": "coil", "address": 0, "type": "bool", "access": "RW" }, { "name": "Relay Output 1.2 (coil)", "group": "Relay outputs", "area": "coil", "address": 1, "type": "bool", "access": "RW" }, { "name": "Relay Output 1.3 (coil)", "group": "Relay outputs", "area": "coil", "address": 2, "type": "bool", "access": "RW" }, { "name": "Relay Output 1.4 (coil)", "group": "Relay outputs", "area": "coil", "address": 3, "type": "bool", "access": "RW" }, { "name": "Relay Output 1.5 (coil)", "group": "Relay outputs", "area": "coil", "address": 4, "type": "bool", "access": "RW" }, { "name": "Relay Output 1.6 (coil)", "group": "Relay outputs", "area": "coil", "address": 5, "type": "bool", "access": "RW" }, { "name": "Relay Output 1.7 (coil)", "group": "Relay outputs", "area": "coil", "address": 6, "type": "bool", "access": "RW" }, { "name": "Relay Output 1.8 (coil)", "group": "Relay outputs", "area": "coil", "address": 7, "type": "bool", "access": "RW" }, { "name": "Digital Input 1.1 (coil)", "group": "Digital inputs", "area": "coil", "address": 8, "type": "bool" }, { "name": "Digital Input 1.2 (coil)", "group": "Digital inputs", "area": "coil", "address": 9, "type": "bool" }, { "name": "Digital Input 1.3 (coil)", "group": "Digital inputs", "area": "coil", "address": 10, "type": "bool" }, { "name": "Digital Input 1.4 (coil)", "group": "Digital inputs", "area": "coil", "address": 11, "type": "bool" }, { "name": "Digital Input 1.5 (coil)", "group": "Digital inputs", "area": "coil", "address": 12, "type": "bool" }, { "name": "Digital Input 1.6 (coil)", "group": "Digital inputs", "area": "coil", "address": 13, "type": "bool" }, { "name": "Digital Input 1.7 (coil)", "group": "Digital inputs", "area": "coil", "address": 14, "type": "bool" }, { "name": "Digital Input 1.8 (coil)", "group": "Digital inputs", "area": "coil", "address": 15, "type": "bool" }, { "name": "MWD reset indication (coil)", "group": "Watchdog", "area": "coil", "address": 1000, "type": "bool", "access": "RW" }, { "name": "Reset group MCU (coil)", "group": "Device information", "area": "coil", "address": 1002, "type": "bool" }, { "name": "Save current configuration and use on startup (coil)", "group": "Device information", "area": "coil", "address": 1003, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.1 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1007, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.2 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1008, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.3 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1009, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.4 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1010, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.5 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1011, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.6 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1012, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.7 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1013, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch on DI 1.8 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1014, "type": "bool", "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.1 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1015, "type": "bool", "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.2 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1016, "type": "bool", "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.3 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1017, "type": "bool", "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.4 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1018, "type": "bool", "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.5 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1019, "type": "bool", "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.6 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1020, "type": "bool", "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.7 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1021, "type": "bool", "access": "RW" }, { "name": "Invert DirectSwitch Polarity on DI 1.8 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1022, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch Toggle Mode on DI 1.1 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1023, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch Toggle Mode on DI 1.2 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1024, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch Toggle Mode on DI 1.3 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1025, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch Toggle Mode on DI 1.4 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1026, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch Toggle Mode on DI 1.5 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1027, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch Toggle Mode on DI 1.6 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1028, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch Toggle Mode on DI 1.7 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1029, "type": "bool", "access": "RW" }, { "name": "Enable DirectSwitch Toggle Mode on DI 1.8 (coil)", "group": "DirectSwitch and debounce", "area": "coil", "address": 1030, "type": "bool", "access": "RW" } ] }