Knowledge Center
Integrations12 min readSCADAmatic Engineering

Connect Ignition to a Modbus device using SimServe

Stand up a Modbus TCP device in SimServe, wire it into Ignition's OPC UA server, and drive an HMI end-to-end.

Updated 2023-02-27

In this tutorial we'll connect Ignition by Inductive Automation to a Modbus TCP/IP device. We'll set up tags in Ignition to read the Modbus registers and finish by displaying live values on an Ignition Perspective HMI.

SimServe is installed on a separate computer on the same network as Ignition, so the example mirrors a real integration.

Create the SimServe project

Start with a blank project.

SimServe blank project

Click New Network Item and fill in:

  1. Name: Device01
  2. Protocol: MBTCP
  3. IP Address: 0.0.0.0 (listen on every IP)
  4. Leave the rest as default → Save

New device form

If Ignition values don't match SimServe values, revisit bit/byte/word order at the bottom of the SimServe device form.

Double-click Device01 to view its registers, the device is now being simulated.

Device01 registers

Set up the device connection in Ignition

In the Ignition web UI go to Config → OPC UA → Device Connections → Create new Device. Modbus connections are proxied by Ignition's OPC UA server.

Ignition device connections

Select Modbus TCPNext, then fill in:

  • Name: Device01 (matches SimServe)
  • Enabled: checked
  • Hostname: IP of the SimServe host (e.g. 172.31.40.11)
  • Port: 502

New device settings

Confirm the status column shows connected before continuing.

Device connected

Create Ignition tags and test

Create OPC tags in the tag browser (+New Standard Tag → OPC Tag) using the Ignition OPC UA Server. The OPC Item Path syntax is what links each tag to a specific Modbus register.

Tag 1, Boolean in 0x1 (coil)

  • Data Type: Boolean
  • OPC Item Path: [Device01]C1
    • C = Coil (0x), 1 = address 1

Toggle 0x1 in SimServe and confirm the tag flips in Ignition.

Tag 2, Boolean in 1x1 (discrete input)

  • Data Type: Boolean
  • OPC Item Path: [Device01]DI1
    • DI = Discrete Input (1x)

Tag 3, UInt16 in 3x1 (input register)

  • Data Type: Integer
  • OPC Item Path: [Device01]IR1
    • IR = Input Register (3x)

Tag 4, UInt32 in 3x2

  • Data Type: Integer
  • OPC Item Path: [Device01]IRUI2
    • UI = Unsigned Integer (UInt32), spans registers 3x2 and 3x3

Create a matching Tag in SimServe (UInt32, starting address 3x2) for easy verification, since Ignition combines two 16-bit registers into one integer.

Tag 5, Float in 3x4

  • Data Type: Float
  • OPC Item Path: [Device01]IRF4
  • In SimServe: FloatSingle, starting address 3x4.

Tag 6, SInt16 in 4x1 (holding register)

  • Data Type: Integer
  • OPC Item Path: [Device01]HR1
    • HR = Holding Register (4x)

Tag 7, SInt32 in 4x2

  • Data Type: Integer
  • OPC Item Path: [Device01]HRI2
    • I = Signed Integer (SInt32)

Tag 8, FloatDouble in 4x4

  • Data Type: Double
  • OPC Item Path: [Device01]HRD4
  • In SimServe: FloatDouble, starting address 4x4.

Wrap up

Reference for the full Modbus addressing syntax lives in the Ignition user manual under Modbus Addressing. With SimServe standing in for the PLC, you can prove out an Ignition tag map before a single wire is landed in the field.