Advantech ADAM-4117 Modbus register map
8-channel analog input module, RS485 Modbus RTU
- Official
- 36 registers
- Modbus RTU
- Revision 2 · 2026-10-17
- Identity: model
Official: Written from the manufacturer's documentation, but not tested on a device yet. Check the map against the manufacturer's documentation before you write to a live device. Tested it? Report a test.
Communication
- Protocol
- Modbus RTU
- Unit ID
- 1
- Serial
- 9600 8N1 · 9600 baud, 8 data bits, none parity, 1 stop bit
- Byte / word order
- ABCD · bytes big-endian, words high first
- Addresses
- 1-based · wire address = address − 1
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 28 holding registers, 8 discrete inputs
- Groups
- 3
- Translation tables
- 1
- Revision
- 2 · 2026-10-17
- Added
- ()
- File
- maps/advantech/adam-4117.mbmap.json · 6 KB · history
- SHA-256
- b4baac9a4fdcd4d81539bf1fc1561bd3db254d60858d05c8828caedadd180322
- Manufacturer
- advantech.com
Device identity
What a tool can read to check that this map fits the connected device (SPEC.md section 4.7). Registers with a role are read like any other register.
| Role | Register | Address | Type | Values |
|---|---|---|---|---|
| Model | Module name 1 | holding 211 | uint16 | 0x4117 = ADAM-4117 |
Sources and notes
- ADAM-4100 Series User's Manual · version Edition 1.3 Appendix B.1; type codes from table 4-1
Source: Advantech, "ADAM-4100 Series User's Manual", Edition 1.3, Appendix B.1 (I/O Modbus mapping table)
- Addresses are the Modicon numbers of the manual (00001 = coil 1, 10001 = discrete input 1, 40001 = holding register 1).
- The module ships with the ADAM ASCII protocol; the manual's appendix explains how to switch it to Modbus RTU.
- Channel values are raw 16-bit values of the range chosen by each channel's type code; the manual gives the conversion for the ASCII protocol only.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| DI | 1 | bool | R | ||||
| DI | 2 | bool | R | ||||
| DI | 3 | bool | R | ||||
| DI | 4 | bool | R | ||||
| DI | 5 | bool | R | ||||
| DI | 6 | bool | R | ||||
| DI | 7 | bool | R | ||||
| DI | 8 | bool | R | ||||
| HR | 1 | int16 | R | Raw value of the range set by the type code | |||
| HR | 2 | int16 | R | ||||
| HR | 3 | int16 | R | ||||
| HR | 4 | int16 | R | ||||
| HR | 5 | int16 | R | ||||
| HR | 6 | int16 | R | ||||
| HR | 7 | int16 | R | ||||
| HR | 8 | int16 | R | ||||
| HR | 201 | uint16 | RW | ||||
| HR | 202 | uint16 | RW | ||||
| HR | 203 | uint16 | RW | ||||
| HR | 204 | uint16 | RW | ||||
| HR | 205 | uint16 | RW | ||||
| HR | 206 | uint16 | RW | ||||
| HR | 207 | uint16 | RW | ||||
| HR | 208 | uint16 | RW | ||||
| HR | 211 | uint16 | R | ||||
| HR | 212 | uint16 | R | ||||
| HR | 213 | uint16 | R | ||||
| HR | 214 | uint16 | R | ||||
| HR | 221 | bool bit 0 | RW | ||||
| HR | 221 | bool bit 1 | RW | ||||
| HR | 221 | bool bit 2 | RW | ||||
| HR | 221 | bool bit 3 | RW | ||||
| HR | 221 | bool bit 4 | RW | ||||
| HR | 221 | bool bit 5 | RW | ||||
| HR | 221 | bool bit 6 | RW | ||||
| HR | 221 | bool bit 7 | RW |
No registers match
Try part of the name, an address (decimal or 0x hex) or clear the filters.
Help improve this map
- I tested it on a deviceReport whether it worked, even if you did not write the map.
- Suggest a correctionEdit the file on GitHub; it opens a pull request.
- Report a problemA wrong address, type, scale or byte order.
- Read the formatWhat each key of the file means (SPEC.md).