bomonike

plc.png This is at https://bomonike.github.io/plc from code within private repo https://github.com/bomonike/bomonike.github.io/blob/master/plc.md

Diagrams such as this Purdue “Automation Pyramid” are from a PowerPoint file here.

This is based on ISA95 (International Society of Automation) which modeles data objects pushed to an enterprise Unified Namespace. ANSI-ISA95 is a large specification with many parts developed over many years.

ignition-pyramid-1833x831.png

InductiveAutomation enables industrial companies to manage

Planning to coordinate minute-by-minute movement of material and work in process on the plant floor is done by a

Overall orchestration is done by “Top Floor” people using an

These systems help with ISO 9001 certification and compliance with FDA CFR 21 Part 11 Medical Device Manufacturing.

At the shop floor or Field Level, RFID tags, barcodes, and weights and other measures are captured and displayed by a

There are also:

Industrial?

“Heavy” industries need uninterruped power for monitoring and controlling real-time status of protected equipment:

These systems need to be hardened” by implementing recommendations at: https://www.cisa.gov/sites/default/files/2024-05/defending-ot-operations-against-ongoing-pro-russia-hacktivist-activity-508c.pdf Controls include strong password, 3FA, VPN, log all access attempts, keep inventory & SBOM updated.

Competition in the MES industry

PLC programming include:

InductiveAutomation.com

https://ia.io/platform redirects to
https://www.InductiveAutomation.com/ in Folsom, CA (Near Sacramento) 800-266-7798

People:

Unlike legacy PLCs which use proprietary Assembly language, Ignition is customized using the Python language.

Unlike older competitors that use 15 inch monitors, InductiveAutomation clients display at HD (1920x1080 pixel) resolution on 22+ inch monitors.

InductiveAutomation charges by the number of servers installed for use by an unlimited number of clients at no additional licensing cost. VIDEO.

References:

Bookmark These Website URLs

NOTE: The Ignition here is not related to the Ignition Gazebo libraries to develop robot and simulation applications.

Security Alerts

America’s Cyber Defense Agency, CISA (Critical Infastructure Security and Resilience) has released security alerts about Ignition as part of its Industrial Control Systems Advisories service for the world.

Ignition servers

InductiveAutomation makes money by selling an annual license for each Ignition server (shown in blue in the middle of this diagram):

ignition-mqtt-3024x1964.png
Click picture for full screen

Ignition servers are called “Gateways” because industrial plants typically take up a lot of territory, so there are both local and remote Ignition servers connected to a central Gateway.

Ignition makes uses of MQTT (Message Queue Telemetry Transport), a lightweight, publish-subscribe, machine-to-machine network protocol for message queuing. MQTTt was created to monitor oil pipelines within the SCADA industrial control system (in SarkplugB format or add-in Vanilla Transmission).

Ignition servers run as containers within Docker using the docker compose command. Licenses are stored within the Docker image along with secrets. An SMTP server using image dockage/mailcatcher on 1080 & 1025.

Ignition Connections

The number of component Connections managed by Ignition servers are displayed the Gateway’s Status GUI

ignition-connections-2088x1308.png

Device PLC Driver modules

The defining attractiveness of InductiveAutomation is that they provide a work-around to vendor lock-in which requires purchase of expensive priprietary solutions (at high profits for the vendor) called DCS (Distributed Control System). This vendor-driven approach requires much effort by each purchaser to integrate machines from among various vendors.

PLC (Programmable Logic Controller) devices control industrial equipment operation.

Each device is input into the database with a unique Tag identifier along with various attributes with values.

Ignition has drivers for each manufacturer, listed at

PROTIP: Don’t select these modules during install unless you know you’ll need them.

Many challenge this VIDEO:

The cost of a license for Ignition depends on whether you want Perspective build, Siemens drivers, and voice notification. See: ignition-licenses.png

Cloud Edition

Iginition is not a SaaS app like Salesforce.

VIDEO: The Ignition Cloud Edition obtained from the AWS Marketplace or Azure installs on Ubuntu Linux servers from an (EC2 AMI) image, not as “serverless” functions.

IU

“Auto-scaling” within a standalone AWS archicture requires configuration of Auto Scaling Group (ASG) within a Bastion host in each of two Availability Zones. Configurations need to be specified in shell scripts to define Security Groups, Public & Private subnets, NAT gateways, AWS KMS, CloudWatch, Amazon SNS, etc.

ignition-aws-standalone-asg.png

QUESTION: Can HashiCorp Terraform be used to stand up servers? That would enable identification of security and misconfiguration issues before resources are created.

OPC (Open Platform Connect)

VIDEO: A big part of InductiveAutomation’s value proposition is that they provide a way to obtain plant-wide visibility of the gamut of PLCs under various brands.

Ignition’s OPC-UA (Open Platform Communication United Architecture) module VIDEO:

Visibility from each and every location

InducativeAutomation enables the design of all PLC interactions to be defined from a single central Designer location by starting the Inductive Ignition Design Launcher app on their workstations (laptops).

QUESTION: What is “WrapperSimpleApp” that has a Java icon?

IU:“Perspective” is Induction’s design IDE.

VIDEO: Touch panels provide a “HMI” (Human-Machine Interface) to PLCs (Programmable Logic Controllers).

There is less mistakes and waste when operators are assisted with a control panel such as this: ignition-fill-828x485.png

Ignition Edge Edition

InductiveAutomation provides a “Touch Panel” that communicates with PLCs in their manufacturer’s native protocol to access a 1-week data buffer.

ignition-panel-727x374.png

Maker Edition

InductiveAutomation provides a free-forever edition for home automation.

Store and Forward

Store and Forward engines are automatically created for configured database connections and remote history providers.

  1. The Store and Forward Status page is at:

    http://localhost:8088/web/config/database.sandf?7#/

    It’s where its Memory Buffer size and Disk Cache size can be edited. Actions include “Archive Disk Cache” and “Load Disk Cache”.

  2. Click “Details for

    http://localhost:8088/web/status/con.history?10

Industrial Demo

Turn off Dark Reader on your browser.

This does not require installation locally.

https://demo.inductiveautomation.com works 2 hours at a time.

View source to see that it uses React, Mobx, Moment, XHR. All HTML on the page is loaded dynamically.

The app can be configured to VIDEO: add a tint to an svg image.

Ignition Modules

Modules selected for install and listed in the Gateway (alphabetically):

There are also PLC Driver modules and Communication protocol modules (such as OPC-UA).

IU: Modules displayed (filtered) are determined by the docker-compose.yml under services: gateway: enviornment: GATEWAY_MODULES_ENABLES=opc-ua,tag-historian,alarm-notification,logix-driver

https://inductiveuniversity.com/video/basic-structure-of-an-ignition-sdk-module

Custom module development

IU: Dev custom modules using the Ignition SDK written in Kotlin (developed by JetBrains) and Java run by the Azul.com OpenJDK Zulu JDK.

Use Git to clone https://github.com/inductiveautomation/ignition-sdk-training

The IDE recommended is IntelliJ IDEA free Community Edition.

The IMDC (Ignition Module Development Community) has code to Azure at https://github.com/IgnitionModuleDevelopmentCommunity

The build.gradle.kts config. file defines what project scope the module has. A letter defines each scope, such as “G” to com.inductiveautomation.ignition.examples.scripting.gateway.GatewayHook, C to ClientHook, D to DesignerHook, CDG to common.

IU: To build/generate SDK modules into a .modl file, Gradle.org is installed using: https://github.com/inductiveautomation/ignition-module-tools

gradlew.bat clean build
gradlew.bat runCli --console plain

Each .modl file is actually a zip file containing a jar SNAPSHOT file for each scope, plus a XML manifest file named “module”.

QUESTION: How sign custom modules?

Logger objects and messages for each scope.

Module debugging makes use of a JDWP connection configured in /data/ignition.conf.

Communication Protocol Modules

Scaling with MQTT

The Enterprise Administration Module (EAM) enables management of many Ignition installations from one location.

ignition-arch-3024x1964.png

Ignition communicates using the MQTT with central administration of permissions.

Ignition uses JDBC to store and retrieve data in SQL databases which use compression algorithms (called “Historian”).

Ignition’s Reporting Engine creates dynamic PDF files.

Ignition’s Alarming system sends out notifications via voice, SMS, email.

Customer usage

https://inductiveautomation.com/resources/customerproject

VIDEO Raspberry Pi Ignition Edge Install

Using ChatGPT

ChatGPT to create Views

Software Stack

ignition-SoftwareStack-3200x1800.png from here

Ignition Modules

https://inductiveautomation.com/ignition/modules

ignition-flow-2070x1304.png

Dev Build

The current and prior releases (once per month) by QA Engineer Garth Gross are at: https://github.com/inductiveautomation/ignition-automation-tools/tags

Notice there is a different version for Ignition (8.1.39) and Perspective (2.1.39).

https://github.com/inductiveautomation/ignition-sdk-training

Tutorials

https://inductiveuniversity.com/

  1. Begin with first lesson at https://inductiveuniversity.com/courses/ignition/ignition-overview/8.1

    https://inductiveuniversity.com/videos/what-is-ignition/8.1

  2. Create Account and verify email.
  3. Take Topic Challenge
  1. Watch overview https://www.inductiveuniversity.com/video/what-is-ignition/8.1

    Ignition Designer tool

https://inductiveuniversity.com/courses/elective-studies

https://www.youtube.com/watch?v=ZkYZ1xTtzsg Learning to Code Using Ignition!

Install

The below is based on: https://docs.inductiveautomation.com/docs/8.1/getting-started/quick-start-guide/download-and-install

Ignition module skeletons work on Windows, Linux, macOS.

VIDEO: MQTT demo project on Raspberry Pi with Debian

  1. JDK does not need to be installed separately.
  2. Install Python.
  3. https://inductiveautomation.com/downloads/

    • macOS ignition-8.1.43-macos-64-installer.dmg Sep 17, 2024 was 1,644,383,679 bytes (1.64 GB on disk)
    • Linux https://www.inductiveuniversity.com/videos/installing-ignition-on-linux/8.1
    • Windows https://www.inductiveuniversity.com/videos/installing-ignition-on-windows/8.1

    CAUTION: On Windows, the path contains a space, so:
    C:\Program Files\Inductive Automation\ignition

  4. Installation Location on macOS:

    /usr/local/ignition

  5. Installation Options: Custom (to install additional modules and adjust the default modules to install). Select from the list of modules above.
  6. Install
  7. Start Ignition Now
  8. Uncheck Install Service.

    PROTIP: If on Windows, automatic start-up of the service is controlled at Start > Control Panel > Administrative Tools > Services > Ignition Gateway.

  9. Finish and wait for the browser to pop-up.
  10. Click “Standard Edition”.
  11. Click “I have read and agree with the terms and conditions”.
  12. In “Create a User”, make up a Username and Password. Rootme

    PROTIP: Password Reset with GWCMD using ./gwcmd.sh -p which restarts Gateway for new user/password entry.

  13. Configure Ports Defaults:
    • HTTP Port: 8088
    • HTTPS Port: 8043
    • Gateway Network Port: 8060
  14. Finish Setup.

    User Manual

    Gateway LogIn & Status

  15. Start Gateway. Wait.
  16. Click “Yes, Enable Quick Start” for

    http://localhost:8088/web/home?3

  17. Click the “Status” icon on the left menu.
  18. Click “Log In”.
  19. Type the (Admin) Username you specified during install.

    Designer Launcher install

  20. Get/Download the Designer Launcher,
  21. Click blue “Download for macOS” : file designerlauncher.dmg.
  22. Do not click green “Activate Ignition” unless you have purchased a license.
  23. Switch to the macOS Finder.
  24. Locate the file and double-click to open it.
  25. Drag “Designer Launcher” and drop on the Applications folder icon.
  26. Switch to Finder and right-click to Move it to “Move to Trash”.
  27. Navigate within the $HOME/Applications folder. Click the “Name” heading to sort by that. Type D. Notice its “Date Modified” is the date created, not the current date installed.

  28. Double-click on “Designer Launcher” icon.
  29. Click “Open” to confirm “downloaded from the internet”.

  30. Switch to click the red X at the upper-left to dismiss it.
  31. Scroll down to Locations section and click the unmount icon to “Designer Launcher”.

    Launch the Gateway

    Designer

    Vision Client Launcher

    Perspective Workstation

    Perspective Session Launcher

    Upgrade

    VIDEO: At the Gateway:

  32. Click the cog icon to “Config”.
  33. Login.
  34. Modules

    https://localhost:8088/web/config/system.modules?5

    PROTIP: Module file names end with “.modi”.

    The module is automatically signed with a certificate.

    QUESTION: Is there automatic upgrade of security patches?

    PROTIP: Upgrade of Ignition to several (not just the most recent) version.

  35. Click “Backup/Restore” to Download Backup.
  36. Some licenses do not permit major upgrade.

    Connect to a Device

    User Manual

    Programmable Device Simulator

    Connect to a Database

    database MariaDB 4306

    Open the Designer

    Create Tags

    Add History to Tags

    Add Components - Perspective Session

  37. Switch to the “My Designers” dialog.

  38. https://docs.inductiveautomation.com/docs/8.1/getting-started/quick-start-guide

  39. VIDEO: Select the “Maker Edition”, a “free, limited version of Ignition for personal, non-commercial projects.

  40. Create a User
  41. Start Gateway.
  42. Don’t save password on browser.
  43. “Get Started” web page on Localhost.

  44. Download Launchers.
  45. Create a project.
  46. Download add-on extensions.

    Stop & Start

    PROTIP: Add an alias for these commands in the OS CLI.

  47. Stop the Gateway server.

    docker compose down -v

  48. To start the Gateway server

    docker compose up -d

  49. To stop the Gateway from starting upon startup, ???

Config

  1. Define the restore.gwbk file for backup.

Dev

VIDEO: Learning to code in Ignition

https://github.com/inductiveautomation organization by Perry Arellano-Jones and Kevin Collins

https://github.com/orgs/ignition-devs/repositories?type=all

OPC

Real-time OPC (Open Process Control) servers.

https://www.wikiwand.com/en/articles/Open_Platform_Communications

Object Linking and Embedding OPC

https://www.udemy.com/course/mastering-opc-ole-for-process-control/

Sensors and Actuators

Several vendors provide industrial-strength sensors that monitor and actuators that control.

Low-cost microprocessors such as Arduino, Raspberry Pi, Intel NUC, Zima, etc. provide a good way to train about general concepts. But they don’t have the weather, security, power-level proofing provided by industrial equipment.

Projects

https://www.linkedin.com/pulse/mcu-iiot-inductiveautomation-ignition-wilson-mar-msc–azpic/

VIDEO: Arduino PID Controller - From Scratch! by Ian Car

VIDEO: How PID Control Works (the best explanation)

Add-on packages

inductiveautomation’s Exchange website provides (at time of writing) 442 add-ons for download.

Look for “Maker Edition Compatible” if you’re running that.

A sample package is a zip file containing a README.md and MANIFEST file containing this example:

{
	"$schema": "http://json-schema.org/draft-07/schema#",
	"name": "Next Generation Dashboard",
	"ignition-version": "8.1.10",
	"version": "1.0.0",
	"modules": [{"name": "com.inductiveautomation.perspective"},{"name": "com.inductiveautomation.webdev"},{"name": "com.inductiveautomation.opcua"}]
}

Notice the file specifies the specific Ignition version.

The modules listed correspond to the folders at root:

In the Other folder are icons.zip and themes.zip.

The Projects folder holds a fonts.zip containing font files.

The core of the package is a file such as:

Numbers in the file name is its date of creation.

The sample project.json

{
  "title": "KPI Dashboard",
  "description": "",
  "parent": "",
  "enabled": true,
  "inheritable": false
}

The ignition folder contains:

The script-python contains folders:

In each folder above is a resource.json such as:

{
  "scope": "A",
  "version": 1,
  "restricted": false,
  "overridable": true,
  "files": [
    "code.py"
  ],
  "attributes": {
    "lastModification": {
      "actor": "admin",
      "timestamp": "2021-09-21T21:51:47Z"
    },
    "lastModificationSignature": "bea61bf53cccfb3d2cb5e341bef1278049bd8ac4f44dc4b78bd948029b634872"
  }
}

The Signature is created during the build based on a Private key.

Right below copy and paste the icons from the ha_icons.svg file and save. Now we have new icons to play around with. The dashboard requires a few of these icons for the provided example.

Next, you need to import the project backup and tags provided by the resource. You can easily import both in the Ignition Designer. The tags are required for the example dashboard that is provided to show information.

Project backup and restoring from a project backup is referred to as Project Export and Import. Projects are exported individually, and only include project-specific elements visible in the Project Browser in the Ignition Designer. They do not include Gateway resources, like database connections, Tag Providers, Tags, and images. The exported file (.zip or .proj ) is used to restore / import a project.

.zip = Ignition 8+
..proj = Ignition 7+

There are two primary ways to export and import a project:

Gateway Webpage - exports and imports the entire project.
Designer - exports and imports only those resources that are selected.

When you restore / import a project from an exported file in the Gateway Webpage, it will be merged into your existing Gateway. The import is located in:

Ignition Gateway > Configuration > System > Projects > Import Project Link

If there is a naming collision, you have the option of renaming the project or overwriting the project. Project exports can also be restored / imported in the Designer. Once the Designer is opened you can choose File > Import from the menu. This will even allow you to select which parts of the project import you want to include and will merge them into the currently open project.

The main view is Dashboard/Carousel. You can create a page (in Perspective page configuration) that uses that main view. You can easily configure the dashboard to modify the widgets and tags they point to. Simply open up the Carousel view and take a look at the Carousel component’s “views” property.

Basically, the carousel can have multiple pages since views is an array. Each page uses the Dashboard/Dashboard view. The parameters dictate the widgets shown. The resource provides a set of standard widgets. You can easily create your own. The Standard widget is the most used. There are a ton of configuration options. Play around with the parameters to get an idea. If you want to see what parameters are possible, check out the widget view.

Ignition can export and import Tag configurations to and from the JSON (JavaScript Object Notation) file format. You can import XML (Extensible Markup Language) or CSV (Comma Separated Value) file formats as well, but Ignition will convert them to JSON format. Tag exports are imported in the Designer. Once the Designer is opened you can click on the import button in the Tag Browser panel.


Diagnostic Bundle

  1. Unzip

    Folders in the bundle:

    • gateway-info.json
    • gateway-network-live-diagram.json
    • jetty-server-dump.txt
    • metrics.idb
    • system_logs.idb
    • thread-dump.json
    • wrapper.log

Tutorials

Remote monitoring design tips

https://www.youtube.com/watch?v=z935clBMJYU The IP (ingress Protection) rating of devices is defined by International Standard EN 60529. The 2-digit code defines the result of tested resistance to solids and liquids.

https://www.youtube.com/watch?v=aYltp_iM6VA 6 Key Terms in Upstream Oil and Gas Automation (PLC vs RTU in the Electric/Digital Oilfield) by Kimray