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:
- Ignition Gateway: Version 8.0 or later
- OPC-UA Module: Enabled with server exposed
- SQL Database: Access to historian database (MySQL, PostgreSQL, or MS SQL)
- 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
- Connect to OPC-UA server
- Browse address space for tag providers
- Recursively discover all tags
- Extract metadata (type, engineering units, description)
- 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:
- Gateway Config → OPC-UA → Security
- 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
- Check if
sqlth_1_datahas appropriate indexes - Enable partition pruning if using partitioned tables
- Reduce query time range or add aggregation
Tag Discovery
Missing Tags
- Verify tag provider is enabled in discovery config
- Check OPC-UA user has browse permissions
- 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
- OPC-UA Adapter - Generic OPC-UA connections
- Architecture - How adapters fit into Conduit
- Deployment Guide - Production deployment