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.
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
ERP (Enterprise Resource Planning) system that does long-range planning (in industries with long lead time items) or complex bills of materials (BoM) needed on the shop floor, along with some form of associated shop orders in manufacturing industries.
MRP includes most accounting functions, including general ledger, as well as inventory management, and resource and inventory planning.
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:
“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.
PLC programming include:
iFix
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:
https://account.inductiveautomation.com/
https://docs.inductiveautomation.com/docs/8.1/intro Ignition User Manual
NOTE: The Ignition here is not related to the Ignition Gazebo libraries to develop robot and simulation applications.
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.
InductiveAutomation makes money by selling an annual license for each Ignition server (shown in blue in the middle of this diagram):
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.
The number of component Connections managed by Ignition servers are displayed the Gateway’s Status GUI
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
Yokogawa
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:
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.
“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.
QUESTION: Can HashiCorp Terraform be used to stand up servers? That would enable identification of security and misconfiguration issues before resources are created.
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:
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:
InductiveAutomation provides a “Touch Panel” that communicates with PLCs in their manufacturer’s native protocol to access a 1-week data buffer.
InductiveAutomation provides a free-forever edition for home automation.
Store and Forward engines are automatically created for configured database connections and remote history providers.
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”.
Click “Details for
http://localhost:8088/web/status/con.history?10
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.
Modules selected for install and listed in the Gateway (alphabetically):
SQL Bridge (defined in the Designer to support Transaction Groups : units of execution that perform actions such as storing data historically, synchronizing database values to OPC, or loading recipe values)
Serial Support Gateway (not selected at install)
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
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.
TCP (using the HSMS standard, SEMI E37)
MODBUS is a protocol published by Modicon in 1979 (now owned by Schneider) when ASCII was used. It now make use of several media: RS-232 & RS485 serial, RS-422 TCP/IP Ethernet. It is called open becuase it is used by different PLCs. A master send sends requests for slaves to respond. A CRC error check in is added.
RS-232 based protocol (using the SECS-I standard, SEMI E4), SECS/GEM is the Equipment Communications Standard E5 / Generic Equipment Model (standard E30) protocol defined by SEMI (Semiconductor Equipment and Materials International) for equipment-to-host data communications. In an automated fab, the interface can start and stop equipment processing, collect measurement data, change variables and select recipes for products.
SMS (mobile) text notifications
BACnet - a communication protocol for building automation and control (BAC) networks that use the ASHRAE, ANSI, and ISO 16484-5 standards protocol used by building automation and control systems for applications such as heating, ventilating, and air-conditioning control (HVAC), lighting control, access control, and fire detection systems and their associated equipment. The BACnet protocol provides mechanisms for computerized building automation devices to exchange information, regardless of the particular building service they perform.
Send message to Lark
The Enterprise Administration Module (EAM) enables management of many Ignition installations from one location.
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.
https://inductiveautomation.com/resources/customerproject
VIDEO Raspberry Pi Ignition Edge Install
from here
https://inductiveautomation.com/ignition/modules
Database connections use utility code to reach databases using the JDBC (Java Database Communications) protocol. Python programs use a library to mimic how Java programs communicate.
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
https://inductiveuniversity.com/
Begin with first lesson at https://inductiveuniversity.com/courses/ignition/ignition-overview/8.1
https://inductiveuniversity.com/videos/what-is-ignition/8.1
3 hr 49 min course “Building in Perspective” to create your first Perspective project.
1 hr 28 min course “Design Fundamentals” takes a deep dive into the world of visual design - common design patterns and philosophies.
46 min course “Advanced Styling in Perspective” for tips and tricks to take your Perspective projects to the next level.
1 hr 15 min course “Module Development with the Ignition SDK” opens up Ignition to user/organization extensions and customizations with SDK module development.
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!
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
https://inductiveautomation.com/downloads/
CAUTION: On Windows, the path contains a space, so:
C:\Program Files\Inductive Automation\ignition
Installation Location on macOS:
/usr/local/ignition
Uncheck Install Service.
PROTIP: If on Windows, automatic start-up of the service is controlled at Start > Control Panel > Administrative Tools > Services > Ignition Gateway.
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.
Finish Setup.
Click “Yes, Enable Quick Start” for
http://localhost:8088/web/home?3
Type the (Admin) Username you specified during install.
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.
Click “Open” to confirm “downloaded from the internet”.
Scroll down to Locations section and click the unmount icon to “Designer Launcher”.
VIDEO: At the Gateway:
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.
Some licenses do not permit major upgrade.
database MariaDB 4306
Switch to the “My Designers” dialog.
https://docs.inductiveautomation.com/docs/8.1/getting-started/quick-start-guide
VIDEO: Select the “Maker Edition”, a “free, limited version of Ignition for personal, non-commercial projects.
“Get Started” web page on Localhost.
Download add-on extensions.
PROTIP: Add an alias for these commands in the OS CLI.
Stop the Gateway server.
docker compose down -v
To start the Gateway server
docker compose up -d
VIDEO: Learning to code in Ignition
https://github.com/inductiveautomation organization by Perry Arellano-Jones and Kevin Collins
https://github.com/inductiveautomation/ignition-sdk-training uses Gradle processing Java and Kotlin
https://github.com/orgs/ignition-devs/repositories?type=all
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/
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.
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)
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:
com.inductiveautomation.webdev
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.
Unzip
Folders in the bundle:
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