Ignition Adapter

Connect Conduit to Inductive Automation's Ignition platform - OPC-UA for real-time data and SQL for historian queries.

Ignition Adapter

The Ignition adapter connects Conduit to Inductive Automation's Ignition platform, one of the most popular SCADA/HMI systems in industrial automation.

Overview

The Ignition adapter provides:

  • OPC-UA Connection: Real-time tag reads via Ignition's OPC-UA server
  • SQL Historian: Historical data queries against sqlth_* tables
  • Tag Provider Discovery: Automatic discovery of all tag providers
  • Alarm Integration: Access to alarm and event history

Prerequisites

Before configuring the Ignition adapter:

  1. Ignition Gateway: Version 8.0 or later
  2. OPC-UA Module: Enabled with server exposed
  3. SQL Database: Access to historian database (MySQL, PostgreSQL, or MS SQL)
  4. Network Access: Edge connector can reach both OPC-UA port (default 62541) and database port

Configuration

Basic Configuration

adapter:
  type: ignition
  name: ignition-plant-1

  opcua:
    endpoint: opc.tcp://ignition-server:62541/discovery
    security:
      mode: SignAndEncrypt
      policy: Basic256Sha256
    credentials:
      type: username
      username: ${OPCUA_USER}
      password: ${OPCUA_PASS}

  historian:
    type: mysql
    host: ignition-db.internal
    port: 3306
    database: ignition
    username: ${DB_USER}
    password: ${DB_PASS}

OPC-UA Settings

| Setting | Description | Default | |---------|-------------|---------| | endpoint | OPC-UA server endpoint URL | Required | | security.mode | Security mode: None, Sign, SignAndEncrypt | SignAndEncrypt | | security.policy | Security policy: None, Basic256, Basic256Sha256 | Basic256Sha256 | | credentials.type | Auth type: anonymous, username, certificate | anonymous | | applicationUri | Client application URI | Auto-generated | | keepAliveInterval | Connection keep-alive interval | 5000 ms |

Historian Settings

| Setting | Description | Default | |---------|-------------|---------| | type | Database type: mysql, postgresql, mssql | Required | | host | Database host | Required | | port | Database port | DB-specific default | | database | Database name | ignition | | schema | Schema name (PostgreSQL/MSSQL) | public | | connectionPool.min | Min pool connections | 2 | | connectionPool.max | Max pool connections | 10 |

Tag Discovery

The adapter automatically discovers tags from Ignition:

discovery:
  enabled: true
  interval: 300  # seconds
  providers:
    - name: default
      enabled: true
    - name: MQTT Engine
      enabled: true
  excludePatterns:
    - "_*"  # System tags
    - "Diagnostics/*"

Discovery Process

  1. Connect to OPC-UA server
  2. Browse address space for tag providers
  3. Recursively discover all tags
  4. Extract metadata (type, engineering units, description)
  5. Report to Control Plane

Historian Queries

Table Structure

Ignition stores historical data in the sqlth_1_data table (and partitions):

| Column | Type | Description | |--------|------|-------------| | tagid | INT | Tag identifier | | intvalue | INT | Integer value (if applicable) | | floatvalue | FLOAT | Float value (if applicable) | | stringvalue | VARCHAR | String value (if applicable) | | datevalue | DATETIME | Date value (if applicable) | | dataintegrity | INT | Data quality | | t_stamp | BIGINT | Timestamp (ms since epoch) |

Query Translation

NQE Query:

Show temperature for Tank1 over the last hour

Generated NQE:

Show value by timestamp during last 1 hour, where tag is Tank1_Temperature

Translated to Ignition SQL:

SELECT
  FROM_UNIXTIME(d.t_stamp / 1000) as timestamp,
  COALESCE(d.floatvalue, d.intvalue) as value
FROM sqlth_1_data d
JOIN sqlth_te t ON d.tagid = t.id
WHERE t.tagpath = 'default/Tank1/Temperature'
  AND d.t_stamp >= UNIX_TIMESTAMP(NOW() - INTERVAL 1 HOUR) * 1000
ORDER BY d.t_stamp ASC

Real-Time Reads

For current values, the adapter uses OPC-UA reads:

opcua:
  readBatchSize: 100  # Max tags per read
  readTimeout: 5000   # Timeout in ms
  subscriptions:
    enabled: true
    publishingInterval: 1000  # ms

Subscription Mode

For frequently-accessed tags, enable subscriptions:

opcua:
  subscriptions:
    enabled: true
    tags:
      - "Tank*/Temperature"
      - "Line*/Speed"
    publishingInterval: 500
    queueSize: 10

Alarm & Event Integration

Access Ignition's alarm history:

alarms:
  enabled: true
  table: alarm_events
  filters:
    - priority: ["Critical", "High"]
    - source: ["Production/*"]

Query alarms via NQE:

Show critical alarms for Production area in the last 24 hours

Performance Tuning

Connection Pool

historian:
  connectionPool:
    min: 5
    max: 20
    idleTimeout: 300000
    connectionTimeout: 10000

Query Optimization

optimizer:
  partitionPruning: true    # Use partitioned tables
  indexHints: true          # Add index hints
  parallelQueries: 4        # Parallel partition queries
  maxRowsPerQuery: 100000   # Limit per query

Caching

cache:
  tagMetadata:
    enabled: true
    ttl: 3600  # seconds
  recentValues:
    enabled: true
    ttl: 60
    maxTags: 1000

Troubleshooting

Connection Issues

OPC-UA Certificate Rejected

Error: BadSecurityChecksFailed

Solution: Import Conduit's certificate into Ignition's trusted certificates:

  1. Gateway Config → OPC-UA → Security
  2. Add Conduit certificate to trusted list

Database Connection Timeout

Error: Connection timed out after 30000ms

Solution: Check network connectivity and firewall rules. Ensure the historian database port is accessible.

Query Performance

Slow Historian Queries

  1. Check if sqlth_1_data has appropriate indexes
  2. Enable partition pruning if using partitioned tables
  3. Reduce query time range or add aggregation

Tag Discovery

Missing Tags

  1. Verify tag provider is enabled in discovery config
  2. Check OPC-UA user has browse permissions
  3. Review exclude patterns

Example Deployment

Docker Compose

version: '3.8'
services:
  conduit-ignition-adapter:
    image: conduit/adapter-ignition:latest
    environment:
      - CONDUIT_CONTROL_PLANE=mqtt://control-plane:1883
      - OPCUA_ENDPOINT=opc.tcp://ignition:62541/discovery
      - DB_HOST=ignition-db
      - DB_USER=conduit
      - DB_PASS=${DB_PASSWORD}
    volumes:
      - ./config/ignition-adapter.yaml:/etc/conduit/adapter.yaml
    networks:
      - plant-network

Next Steps