Changes to Be Aware Of
Ignition 8 has many additional changes and improvements that system administrators should be aware of. Although none of them present a significant issue, some may directly affect end users (for example, launching clients), and some can be leveraged to improve the security and performance of your system.
Third-Party Modules
Please consult individual module authors concerning upgraded module availability. Modules built for Ignition 7 will not work in Ignition 8 without modification.
Tag Historian Licensing
See the Tag History Licensing changes under the Upgrading from 8.0 to 8.1 section.
Default Security Certificate
Ignition installations no long come with initial security certificates.
Native Client Launchers Replaced
The Native Client Launcher has been replaced by the Designer Launcher and Vision Client Launcher, which offer similar functionality. Due to the aforementioned "Default Security Certificate" change, secure connections between the launchers and Gateway will require valid certificates are in place.
Java Web Start Discontinued
Support for Java Web Start has been discontinued by Oracle and the OpenJDK community as of Java 11. This technology has been used in Ignition since its original release to launch the Designer and Vision clients, though we have also offered alternative launching tools for years.
In anticipation of this change, the designer and client launching tools have been greatly improved in Ignition 8. In addition to a fresh and more functional UI, the launch tools now manage the Java runtime environment used by the client (see next point), and can help you track many projects and Gateways. There are separate launchers for Vision Clients and the Designer, representing the natural distinction between the target users of these products, and the launchers can be downloaded for Windows, Mac, and Linux directly from the Gateway homepage.
Java Web Start is no longer supported, please use the Designer and Client launchers to launch those applications.
Embedded Java
Ignition no longer requires Java to be installed on the Gateway or client machines. Native versions of the Ignition installer and launchers have been made available for 64-bit Windows, Mac, and Linux, as well as ARM, for use in edge devices. These distributions include embedded JREs (Java Runtime Environment) that are provided by Inductive Automation and managed by Ignition.
The native client launchers manage retrieving the current version of the JRE as necessary for the client and designer runtimes. Updates to the embedded JREs are managed by Inductive Automation and are made available through updates to Ignition. The client launchers will automatically update their local versions as necessary, ensuring that Vision Clients and the Designer are always running the latest version available on the Gateway.
Ignition no longer requires Java to be installed on server or client machines. System administrators should monitor Inductive Automation for important system and security updates, and can sign up for important notifications at http://support.inductiveautomation.com
Project Inheritance & “Global” Upgrade Logic
The project system in Ignition 8 has been improved and now features a more flexible inheritance model. Each project may have a “parent” project, and will inherit all of the resources of that parent project. That project may in turn have its own parent project, and so in this way complex hierarchies of re-usable resources may be designed. Within each project, inherited resources may be used by other, “local” resources. For example, an inherited Vision template could be embedded in a window, or an inherited script could be executed by a button. Inherited resources may also be overridden, allowing them to be re-defined when needed. Conversely, resources in parent projects may be marked as “not overridable” to ensure that children cannot alter them, when appropriate.
This new inheritance system makes Ignition 7’s “global” project concept obsolete. In order to maintain backwards compatibility, the following will happen when an Ignition 7 Gateway is upgraded to Ignition 8:
The resources from the Ignition 7 special “[global]” project will be copied into an Ignition 8 standard, inheritable project called “global”.
All other projects will have their parent project set to this new “global” project.
All “shared” scripts are now simply project-level scripts in a top-level script package called “shared”, stored in the new “global” project. This allows all existing scripts to function without edits.
All “project” scripts are now simply project-level scripts in a top-level script package called “project”.
All Vision templates stored in the old global area are moved into a folder called “SharedTemplates/” in the new global project. The Vision module will automatically convert a template path like “[shared]MyTemplate” as “SharedTemplates/MyTemplate” so that no further action is needed.
If any run-always sequential function charts are present in the global area, a new project called “run-always-charts” will automatically be created upon upgrade, and these charts will be moved into this project. This is because resource types that execute automatically like run always SFCs and Transaction Groups do not run in inheritable projects.
If any alarm pipelines exist, a project called “alarm-pipelines” will be created and all alarm pipelines will be moved into this project. Tags can target pipelines in any project, but in the absence of a specific project, the pipeline is assumed to be in this special upgrade project.
There is a new Gateway-wide setting called “Gateway Scripting Project”. This setting lets you specify one project which all scripts that are outside the scope of a project will execute against. For example: Tag Change Scripts and Tag expressions using the runScript expression. On upgrade, this will be set to the new “global” project so that Tag scripts can continue to access shared.* scripting functions.
- In addition to Tag scripts, this can potentially impact other features, such as expression items in a Transaction Group using the runScript function.
Deprecated system.tag Functions
The system.tag.read and system.tag.readAll functions were deprecated. They has been replaced by system.tag.readBlocking.
The system.tag.write and system.tag.writeAll functions were deprecated. They have been replaced by system.tag.writeAsync.
The system.tag.writeSynchronous and system.tag.writeAllSynchronous functions were deprecated. They have been replaced by system.tag.writeBlocking.
The Tag system has undergone significant changes in Ignition 8. The majority of these changes should go unnoticed upon upgrade (apart from obvious UI changes), and most systems should immediately benefit from improved performance, faster edits, and expanded functionality. To summarize:
- "Scan Classes" have been renamed to "Tag Groups". Functionally they're identical. Scan Classes on Ignition 7 systems will gracefully migrate to Tag Groups upon upgrade.
- "LastChanged" has been renamed to "Timestamp". Like Scan Classes, LastChanged values will migrate to Timestamp upon upgrade.
- The Tag Editor has been gone through a major UI rework, but remains as easy-to-use as ever.
- Tags are fundamentally defined via JSON structure now. A new right-click menu has been added to the Tag Browser, allowing you to edit the raw JSON of a given Tag. Additionally, Tag exports/import files now support a JSON format.
The upgrade process will attempt to convert older tags to the new system. Should this process fail, log files will be generated in the installation directory: /logs/legacy-tag-conversion
(as of 8.1.11+)
The Tag system has been redesigned to optimize for UDT oriented design. In Ignition 7, certain aspects of UDT performance led some system designers to favor standard Tags over UDTs for some applications. Such systems should be re-evaluated in Ignition 8, as use of User Defined Types will lead to more efficient memory usage and lighter weight change processing.
UDT Parameter Usage
The way that Parameter references are applied to Tags has changed. Instead of being replaced in a “pre-compilation” stage of Tag execution, they are now treated as true property references. This means that they can be modified, and those modifications propagate dynamically to referencing properties, causing those to be updated in turn.
An important consequence of these changes is that syntax for parameter references in Expressions has changed in a subtle, but crucial way. In Ignition 7, due to the replacement strategy, the following would have been a valid expression:
Code Block |
---|
|
“The value of the parameter is: {ParamRef}” |
In Ignition 8, this value would no longer be a valid reference. It is counter-intuitive to all other uses of reference in Ignition, and has been replaced with a more familiar syntax:
Code Block |
---|
|
concat(“The value of the parameter is: “, {ParamRef}) |
All existing references will be upgraded automatically to the new syntax upon system upgrade. Designers should be aware of this change when creating new Tags.
Note_friendly |
---|
Due to a change in 8.0.3 that "Improved mathematical operator support for UDT parameters", using operators such as + or - in your UDT Parameter is not recommended, as this can lead to Ignition executing a mathematical equation instead. |
Quotes Taken Literally in String UDT Parameters
In addition, string UDT parameters that contained quotation marks in 7.9 will now be represented literally. In 7.9 the quotation marks were omitted. After upgrading, the quotation marks will be included in the UDT parameter value.
The instanceName UDT Parameter
The built-in instanceName
UDT parameter works differently in nested UDTs. Referencing the parameter in a nested UDT will return the name of the nested UDT. In 7.9 the parameter would always return the name of the root UDT.
The UDTParentType Property
The UDT property UDTParentType
has been renamed in Ignition 8 to TypeId.
Script Based Tag Editing
The various scripting functions for editing Tags ( system.tag.editTag
, system.tag.addTag
, etc.) have been deprecated and replaced by system.tag.configure . The previous functions will continue to work, but designers should learn the new function, which is far more intuitive and powerful than the previous functions.
Tags are now defined as JSON objects, which consist of properties, arrays, and sub-objects. The system.tag.configure function can take either a String document definition, or a JSON object that defines one or more Tags. Overrides for UDTs are created by simple redefinition of properties, and complex structures like Event Scripts and Alarm configurations will be merged with inherited definitions.
OPC UA Default Configuration Changes
New installations have some new OPC UA related defaults:
The server binds only to localhost (i.e. no remote connections allowed)
The server uses port 62541 instead of 4096
The server only allows secured connections (SecurityPolicy Basic256Sha256)
The default “loopback” connection is called “Ignition OPC UA Server” (there is no longer a “-” between “OPC” and “UA”)
Upgrades are not affected by these changes; they retain their existing configuration.
OPC UA Discovery with Third-Party Clients
Ignition's OPC UA server disallows anonymous access on new installations, which can make the server endpoint difficult to discover by UA clients. To help with this, Ignition's UA server runs a separate unsecured endpoint to allow discovery. The discovery endpoint is accessible by appending /discovery
to the end of the URL:
Code Block |
---|
opc.tcp://1.2.3.4:62541/discovery |
When using the OPC UA Exposed Tags feature, the NodeId returned by the browse has changed slightly. In prior versions the NodeId would follow a pattern like: [prov]Path/To/Tag
As of 8.0+ the pattern now includes a slash after the provider: [prov]/Path/To/Tag.
Both patterns still function as expected for the purposes of Reads, Writes, and Subscriptions. However a NodeId returned by a browse will always use the newer pattern.
Changes to system.alarm.listPipelines
The listPipelines function was changed to search a single project for pipelines. Upgrading from Ignition 7 to Ignition 8 will migrate all alarm pipelines into a project named "alarm-pipelines". To maintain backwards comparability, system.alarm.listPipelines() will check for a project named "alarm-pipelines", but now accepts a project name as a parameter, allowing the function to check for pipelines in any project.
SQLite Storage
Gateways can now create SQLite databases, or "Internal databases" for many of the storage subsystems (Database Connections, Historian, Alarm Journal, and Auditing), allowing your gateway to store and retrieve data without needing to connect to a remote SQL database, which is useful for development systems and demonstrations.
Note_friendly |
---|
We still recommend external SQL databases are used in production systems, as they generally offer a level of performance and redundancy not available to SQLite databases. |
TLSv1.0 and TLSv1.1 No Longer Supported
Ignition version 8.1.6 started embedding Java version 11.0.11. This version of Java drops support for TLS v1.0 and v1.1. This could impact connections the gateway makes to external systems and applications, especially so if those external systems cannot support a more recent version of TLS. The following items could be effected:
- Database connections: This can generally be resolved by simply updating the JDBC driver that the gateway uses. Check your database vendor's JDBC driver recommendations.
- HTTP calls from Ignition (such as those generated by scripting): This is highly unlikely since modern browsers and services already deprecated older versions of TLS. If this is an issue then you'd need to update the service (if the endpoint is an internally hosted service) or check the documentation for the service.
JDBC Drivers May Need Updating
Ignition ships with an embed JRE 11, which means JDBC drivers for existing installations may need to be updated to work with Java 11. See the JDBC Drivers and Translators page for more details.
SFCs
Due to the tag system changes, SFC parameters are no longer able to store entire QualifiedValue objects, such as those returned by the system.tag.readBlocking function. However fields of a QualifiedValue, such as the value, can still be stored in parameter.
Code Block |
---|
# No longer supported
chart.new_param = system.tag.readBlocking(["[default]myTag"])
# Supported
chart.new_param = system.tag.readBlocking(["[default]myTag"]).value |
Webdev Endpoints
In 7.9, Webdev resource endpoints resembled the following:
Code Block |
---|
|
host:port/main/system/webdev/projectname |
In 8.1, Webdev endpoints no longer contain "main":
Code Block |
---|
|
host:port/system/webdev/projectname |
Note that requests using the legacy endpoint will simply be redirected to the 8.1 endpoint, so endpoints created in 7.9 will still function after upgrading.
Tag Paths in Expressions
Expressions that make use of a tag path will need to be updated to include either a tag provider or "[~]".
Code Block |
---|
{Path/To/Tag} // paths that look like this...
{[~]Path/To/Tag} // ...should be changed to this.
{[MyProvider]Path/To/Tag} // You could always explicitly state the provider too. |