{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Korenix",
  "model": "JetI/O 6520",
  "models": ["JetI", "O 6520"],
  "vendor_website": "beijerelectronics.com",
  "description": "4-CH analog output Ethernet I/O server, Modbus/TCP. Output range set globally at addr 9 (0=0~+10V, 1=-10V~+10V, 2=0~20mA). Output values at addr 22-25 (s16; 0-10000=0-10V, ±10000=±10V, 0-20000=0-20mA). Slew rate at addr 8 (4-bit code per channel). Power-on values at addr 10-13. Calibration offset/span at addr 14-21.",
  "revision": 2,
  "source": "Omni Console device library (OmniCoreST), modbus-library/korenix-jetio-6520.toml; Source: JetI/O 6520 User's Manual V0.1 (Jan. 2008). Not verified against the manufacturer's documentation",
  "notes": [
    "Korenix JetI/O 6520.",
    "Converted automatically from the Omni Console device library (OmniCoreST).",
    "Not verified against the manufacturer's documentation.",
    "Corrections are welcome (CONTRIBUTING.md). Change x_status once this table has been checked against the manual.",
    "| Korenix JetI/O 6520 Industrial Intelligent Ethernet I/O Server",
    "|",
    "| Source: JetI/O 6520 User's Manual V0.1 (Jan. 2008)",
    "| Protocol: Modbus/TCP (Ethernet port 502); FC03 read holding, FC06 write single",
    "| Module: 4-channel analog output, 16-bit",
    "| Output ranges (set globally at addr 9):",
    "| 0 = 0~+10V  (0~10000 = 0~10V)",
    "| 1 = -10V~+10V  (-10000~10000 = -10V~+10V)",
    "| 2 = 0~20mA  (0~20000 = 0~20mA)",
    "| Slew rate (addr 8): 4-bit code per channel packed into one register (ABCD = ch3,ch2,ch1,ch0).",
    "| Power-on DA values (addr 10-13): stored output value applied on power-up."
  ],
  "byte_order": "big",
  "word_order": "big",
  "address_base": 0,
  "x_status": "unofficial",
  "x_origin": "omniconsole",
  "registers": [
    {"name": "Watchdog enable (0x0000=disable 0xFF00=enable)", "area": "holding", "address": 0, "type": "uint16", "access": "R"},
    {"name": "Watchdog cycle count (BB×0.1s, range 1-255)", "area": "holding", "address": 1, "type": "uint16", "access": "R"},
    {"name": "Host-watchdog status (R: 0x0000=OK 0xFF00=fail; W: 0xFF00=reset)", "area": "holding", "address": 2, "type": "uint16", "access": "R"},
    {"name": "Firmware version (reads 0xF20A = 6520 firmware)", "area": "holding", "address": 3, "type": "uint16", "access": "R"},
    {"name": "Module name (reads 0x6520)", "area": "holding", "address": 4, "type": "uint16", "access": "R"},
    {"name": "Reset status (0x0000 after read; 0x0001 after reset)", "area": "holding", "address": 5, "type": "uint16", "access": "R"},
    {"name": "Reserved (always 0) (6)", "area": "holding", "address": 6, "type": "uint16", "access": "R"},
    {"name": "Reserved (always 0) (7)", "area": "holding", "address": 7, "type": "uint16", "access": "R"},
    {"name": "DA slew rate code (4-bit per ch: ABCD=ch3,ch2,ch1,ch0; 0=immediate)", "area": "holding", "address": 8, "type": "uint16", "access": "R"},
    {"name": "Output range per channel (ABCD bits; 0=0~+10V 1=-10~+10V 2=0~20mA)", "area": "holding", "address": 9, "type": "uint16", "access": "R"},
    {"name": "Power-on DA value channel 0", "area": "holding", "address": 10, "type": "uint16", "access": "R"},
    {"name": "Power-on DA value channel 1", "area": "holding", "address": 11, "type": "uint16", "access": "R"},
    {"name": "Power-on DA value channel 2", "area": "holding", "address": 12, "type": "uint16", "access": "R"},
    {"name": "Power-on DA value channel 3", "area": "holding", "address": 13, "type": "uint16", "access": "R"},
    {"name": "DA offset calibration channel 0 (write 0xFF00)", "area": "holding", "address": 14, "type": "uint16", "access": "R"},
    {"name": "DA span calibration channel 0 (write 0xFF00)", "area": "holding", "address": 15, "type": "uint16", "access": "R"},
    {"name": "DA offset calibration channel 1 (write 0xFF00)", "area": "holding", "address": 16, "type": "uint16", "access": "R"},
    {"name": "DA span calibration channel 1 (write 0xFF00)", "area": "holding", "address": 17, "type": "uint16", "access": "R"},
    {"name": "DA offset calibration channel 2 (write 0xFF00)", "area": "holding", "address": 18, "type": "uint16", "access": "R"},
    {"name": "DA span calibration channel 2 (write 0xFF00)", "area": "holding", "address": 19, "type": "uint16", "access": "R"},
    {"name": "DA offset calibration channel 3 (write 0xFF00)", "area": "holding", "address": 20, "type": "uint16", "access": "R"},
    {"name": "DA span calibration channel 3 (write 0xFF00)", "area": "holding", "address": 21, "type": "uint16", "access": "R"},
    {"name": "Analog output channel 0 value", "area": "holding", "address": 22, "type": "int16", "access": "R"},
    {"name": "Analog output channel 1 value", "area": "holding", "address": 23, "type": "int16", "access": "R"},
    {"name": "Analog output channel 2 value", "area": "holding", "address": 24, "type": "int16", "access": "R"},
    {"name": "Analog output channel 3 value", "area": "holding", "address": 25, "type": "int16", "access": "R"},
    {"name": "Positive trim channel N (write 0ABB: A=ch 0-3, BB=trim count 0-FF)", "area": "holding", "address": 26, "type": "uint16", "access": "R"},
    {"name": "Negative trim channel N (write 0ABB: A=ch 0-3, BB=trim count 0-FF)", "area": "holding", "address": 27, "type": "uint16", "access": "R"}
  ]
}
