IOMOD16DI user manual v1.4


IOMOD 16DI is small sized stand-alone Modbus (RTU) or IEC 60870-5-103 digital input controller. IOMOD is used for industrial applications, where digital signaling is used and robust communication is needed. IOMOD is ideal solution for applications such as data acquisition, observation, process monitoring, testing and measurement at remote places. It is controlled over Modbus or IEC 60870-5-103 protocol, and can be used with any SCADA system.


Device operational information

IOMOD 16DI uses Modbus (RTU) or IEC 60870-5-103 protocol  over RS485 interface. Protocol used by device can be changed by uploading corresponding firmware. Default communication settings are: 9600 baudrate, 8N1, Slave address - 1.

MODBUS operational information

To read all input statuses, send 02 Modbus command (Read Discrete Inputs) 03 Modbus command with resolution of first register (0) and a size of 16. Returned value will show 16 input states.

To read all input registers’ values, send 04 Modbus command (Read input registers) with resolution of first register (0) and size of 80. Returned data will show pulse count (first register) and ON time (2nd and 3rd registers) for each input – pulse count of input #2 will be at register 4th, and so on. ON time will be shown as seconds. ON time and pulse count will increase when input pulse is longer than Filter time, which is configured by user in USB terminal menu. Shorter pulses will be ignored in both pulse and ON time registers. From software version 1.10, as capacity of input counter expanded to 32-bits, additional 32 registers depict such wider values in registers 00048-00079. All these registers can be set by using 06 Modbus command.

To invert input states by software, configure device over USB terminal. Modbus commands one may use are shown in table below. 

Supported MODBUS functions

02 (0x02) Read Discrete Inputs
Reads status of digital inputs (Off or On). IOMOD 16DI has 16 digital inputs from address 0 to address 0xF; These inputs are active-high or active-low according to supply given to reference input. User can turn on logical input inversion (through USB).

03 (0x03) Read Holding Registers
Lets user read counter/timer values dedicated to digital inputs. There are 80 MODBUS registers. Values held in these registers are explained in a table below. There are two types of values - Pulse Counter and On Timer, the latter calculating the time that respective input was held in its active state.

04 (0x04) Read Input Registers
Lets user read counter/timer values dedicated to digital inputs. There are 80 MODBUS registers. Values held in these registers are explained in a table below. There are two types of values - Pulse Counter and On Timer, the latter calculating the time in seconds that respective input was held in its active state. This function is deprecated and mirrors function 0x03 to conform to past versions of IOMOD 16DI.

06 (0x06) Preset Single Register
Sets single register. Register addresses are identical to “Read Input Registers” addresses.

Modbus register mapping table



Value range

Read discrete inputs (02)



Reading digital inputs DI1-DI16


Read holding register (03), Read input register (04), Preset Single Register (06)



Pulse count for DI1, Least Significant Word



On time, in seconds, for DI1, Least Significant Word first





Pulse count for DI16, Least Significant Word



On time, in seconds, for DI16, Least Significant Word first



Pulse count for DI1-DI16, Least Significant Word First


*It is advised to set most significant word of counter/timer first

IEC 60870-5-103 operational information

IOMOD uses standard communication scheme. Initiation, control messages and queries are initiated by master (controlling station), while IOMOD device (controlled station) only answers requests and statuses. First message sent by master is RESET CU to restart communication. When device answers with ACK, master proceeds with acquiring General Interrogation and sending time synchronization.

When this initialization is complete, master polls IOMOD device with class 1 and class 2 requests. Class 2 is used when master polls for a cyclic data. Controlled device responds when spontaneous data exists and master then sends request for Class 1. Controlled station responds with time tagged message.

When input status changes, device filters input glitches with user configurable filter time. When filter is passed device sends “spontaneous” message with “Function type” as input address (default function type of inputs – 160), and “Info number” as input pin number.

IEC 60870-5-103 telegram description

Master (controlling station) sends “Link Reset CU” or “Link Reset FCB” commands, which is function code “0” or “7” within fixed frame telegram.

Example: | 0x10 | 0x40 | 0x01 | 0x41 | 0x16 |

Device (controlled station) responds with ACK.

Master, requesting Link status must send fixed frame telegram with function code “9”. Device then responds with “Access Demand” (function code “11”).

On first “Class 1” request, device will send its identification string. If there is spontaneous messages to send, they will be sent first.

Master, initiating time synchronization, must send variable frame, with function code “User data with ACK” , ASDU type “6” and Cause of Transmission “8”. Info elements must contain 7-byte time structure.

GI is initiated by master with variable frame, including function code “3” (User data with ACK) , ASDU type “7” and Cause of Transmission “9”. Slave device then responds with ACK. Master gets GI data by polling with Class 2 request till slave transmits “End of GI” (Cause of Transmission – “10”). IOMOD device responds with time tagged message, including DPI states of inputs. Input numbers is represented by “Info number” in protocol.

Device configuration of IEC-60870-5-103

Input inverting and polarity selection

Input polarity selection (active signal selection) is done by connecting appropriate supply to COM pin. Further explained in section Mounting and installation guide.

Input inversion does logic inversion of signals.

Input grouping

Sometimes two inputs must be captured as one double point input (DPI). Inputs can be grouped into pairs of two. Only two neighbor pins can be grouped into pair, while first pin in pair must be odd number pin. When grouped, second pin in the pair is not used anymore – all approaches to this pin generates an error. For example – IN1 and IN2 can be grouped, after that IN2 is not used; IN2 and IN3 cannot be grouped; IN3 and IN4 can be grouped, but IN4 is not used, etc.

Fig. 3.1 shows inputs ungrouped and controlled independently. In this mode, General Interrogation will be composed of 16 input states. Notice +VIO and –VIO connection: when COM is connected to negative power supply voltage, inputs are controlled by positive voltage.

image-1623934229900.pngFig. 3.1

In addition to this, Fig. 3.2 shows 1st + 2nd and 11th + 12th inputs are grouped into pair. Now, General Interrogation will be composed of 14 input states (with IN2 and IN12 missing). Input numbers are represented by Info number in protocol. Here, COM is connected to positive voltage of power supply and inputs are controlled by negative voltage.


Fig. 3.2

Input filter

Input filter is simple glitch filter with time input. This filter time corresponds to stable time that input must achieve before sending status change.

Addressing configuration

Devices Input address is configurable. This addresses in IEC 60870-5-103 protocol is considered as “Function Type”. Input address is 160 by default.

Device is addressed by “Link address”, which is 1 by default.

Testing With “THE VINCI” software

To test IOMOD with default settings, user connects device through RS485 to Modbus master. Example using “The Vinci Expert” device as serial interface converter and adapter to PC with “The Vinci” software. Default settings for Modbus – 9600 baudrate; 8 data, no parity, 1 stop bit. When opening “The Vinci” software, choose Modbus serial – Master mode. In settings tab, choose station number (default – 1); configure tags (as described in section 2. Device working information); Press start and go to “Statistic” tab:

image-1623934325077.pngFig. 3.1. Statistic tab in “The Vinci” application for Modbus communication

As seen in Fig. 3.5, Inputs are shown with info numbers 1-16, and function type - 160.

GI, time synchronization options can be found at right side of the program, in “System” tab.

Fig. 3.6 shows 1st + 2nd , 5th + 6th  and 11th + 12th  Inputs grouped (notice order of info numbers). These pairs is shown INTERM (00) because both inputs of pair are off (giving binary representation of 00b).


Fig.3.2. Statistic tab in “The Vinci” application for IEC-60870-5-103

Technical information





101 x 119 x 17.5, mm



ABS, black


Working environment



Working temperature

-30 ⎟ +70°C


Recommended operating conditions

 5 – 60°C and 20 – 80%RH;





Firmware upgrade

USB – mass storage device



Electrical specifications




16 X 2kV isolated 12-24VDC;

ESD protected;
Selectable inversion.






Power Supply

9V to 33V



Current consumption

50mA @ 12VDC, 25mA @ 24VDC


Mounting and installation guide

IOMOD 16DI RS485 interface

IOMOD 16DI has integrated 120Ω termination resistor which can be enabled or disabled over USB configuration. It is recommended to use termination at each end of the RS485 cable. See typical connection diagram on Fig. 5.1.


Fig. 5.1. Connection example

IOMOD 16DI has 1/8 Unit load receiver which allows to have up to 256 units on line (compared to standard 32 units). To reduce reflections, keep the stubs (cable distance from main RS485 bus line) as short as possible when connecting device.

IOMOD 16DI inputs

Typical application of IOMOD 16DI inputs is shown on Fig. 5.2. When default configuration for inputs is applied, user will see inputs connected to +12/24V as “high” or state “1” and input status LED will glow.