Ignition 8.1.8: Visualization Updates, Expression Language, OPC UA, Docker and Much More
Important Update: After publishing this blog post, we found a notable issue in 8.1.8 and removed that build from our downloads page. We have released 8.1.9, which contains the newest features in 8.1.8 as well as the fix for the reported issue. More information is available here.
Moving at a steady pace, the release train has been on the go since Ignition 8.0 was introduced to the world. With all the far reaches the train has traveled, occasionally it needs to come in for maintenance and get a tune-up. Ignition 8.1.8 brings some maintenance updates and "fit and polish" to Ignition, helping to improve stability, quality-of-life, and workflow. Many of the updates in 8.1.8 range widely, touching upon visualization, expressions, and OPC UA, just to name a few.
Visualization Updates
Alarm Journal Profiles
Alarm Journal Profiles allow you to configure and store alarm data into a SQL database. Currently alarm journals log each alarm event along with pertinent information, such as an alarm trigger or resolution. In Ignition 8.1.8, we've added the ability in the Alarm Journal Profile to log events related to enabling and disabling alarms. So now in addition to your normal alarm events, records will include when alarms have been enabled and disabled, improving data used for auditing purposes. Also, the Alarm Journal Table components in both the Perspective Module and the Vision Module received new properties that allow them to show these enabling and disabling events.
Vision Module Progress Bar
The Progress Bar component for the Vision Module got some attention this time around. In addition to some bug fixes and visual improvements, we added the ability to customize the text color. Rather than using separate label components to add text with a custom color, you can now do so within the component properties.
Perspective Module Updates
Rather than getting a new component, the Perspective Module got some small improvements that our users will definitely enjoy.
The first improvement deals with the menu tree component. Many users have requested a way for the menu tree to reset to the root menu after an item is clicked. To make this happen, we added a resetOnClick property. When enabled, this property is especially useful for complex or elaborate menu trees.
Another user requested improvement focuses on session properties. During a session, there are a set of properties running. Some of these include the location of the session and who signed in, just to name a few. We added a lastActive session property which takes a timestamp of the last action a user has taken. For example, when a user clicks on a button or a tab, this property will update the timestamp of that action. You can then write an expression or script to compare the current time to the last active time and run an event based on that.
We've also added the ability to customize a logout message via scripting. We included a new argument to system.perspective.logout that allows you to define a custom message. This gives you greater control over logout messages presented to users based on logout scripting events.
Perspective’s Theme session property and Report Viewer component received some quality-of-life improvements. First, let's take a look at Themes. The Themes session property allows you to set a theme for a session, such as dark mode. Currently to set this, you have to type them into the property, which can be cumbersome. In 8.1.8, we've added a dropdown so you can now select a theme rather than typing it in. Custom themes that you create will also appear here as well.
The Report Viewer component gets a similar treatment but with the source property. Before, when selecting a source, you would need to type in a string path to the source data. With the dropdown update, you can now easily select the source for your report.
Last but not least, we addressed an issue our users had with views that briefly display a quality overlay. Tag values have quality codes associated with them so when a tag obtains a new value, it comes with a quality code, and in all cases you want to have a good quality value. If a new tag value is deemed poor in quality, any view that has a tag value bound to it will display a quality overlay.
When you have views that you are switching to, overlays will briefly appear, then the new value will be displayed. This overlay flash represents an initial uncertain value. Components with bound values know they have to check for a new value, yet there is a period of time where there is an initial uncertain value and so the component will briefly show an overlay before updating to a real value. In 8.1.8, we added a new feature that allows you to opt out of seeing the overlay. So when you switch views, the overlay is not shown, providing users with a cleaner experience. The feature opts out by default for new bindings, while existing bindings can get the feature retroactively.
In the GIF below, notice that the right column has overlays when I switch views. This new setting allows you to opt out of those overlays, as shown in the left column.
New Updates to Expressions
The Expression language received several new updates starting with two new functions: char and ordinal. The char function allows you to use an integer code to retrieve a character, which becomes especially useful when using special characters. The ordinal function is the opposite, where it will take a character and provide the integer code.
Prior to 8.1.8, certain functions did not work with arrays, lists, and JSON objects. Customers would have to create script transforms to run calculations on complex data types. We provided an update where you can now use the following functions with arrays, lists and JSON objects.
- indexOf
- lastIndexOf
- sum
- stdDev
- mean
- median
- max
- min
- groupConcat
- len
- jsonGet
- jsonSet
This will definitely save our users a lot of time.
To round out our updates to the Expression language, you now have the ability to use subscript operators to access specific element/keys within collection/mapping data types. In other words, you use {myArray}[#] to access elements in an array and {myMap}[“someKey”] to access keys in dictionaries and JSON objects.
Updates to OPC UA
In 8.1.8, OPC UA got a lot of scripting attention. We added a system.device.restart system function which only applies to our connections using our drivers and OPC UA server. It is common for developers to want to restart a device connection, like when a developer is programming against a device, for example. In many cases, before the new programming takes effect, the connection needs to be restarted. Normally you would edit the device and click the save button and that would restart the connection. Many of you wanted to be able to do this using a script, so we added a restart function that can be executed from a script.
We added two additional functions system.opcua.addConnection and system.opcua.removeConnection. These new functions allow you to use a gateway-scoped script to add or remove OPC UA connections without having to go into the gateway administration page.
Regenerating security certificates for OPC UA connections just got better. You can now set the duration of a certificate, as well as set the DNS and IP addresses, which were not available prior to 8.1.8.
As for OPC UA drivers, several of them received a new “Local Address” property, that allows you to set the local address a device connection will bind to. The following device connections get the new property:
- Legacy CompactLogix
- Legacy ControlLogix
- MicroLogix
- vPLC5
- SLC
- Logix
- TCP
- DNP3
- Omron NJ
- Omron FINS (TCP only)
- Modbus TCP
- Modbus RTU over TCP
Additional Updates
There are many more minor updates and improvements beyond what was discussed above. These include updates to alarm notifications, the Designer, EAM, expressions, identity providers, installers, launchers, OPC UA, Perspective, scripting, tags, and the WebDev Module. You can learn more about these updates and improvements by visiting our release notes and user manual (updates coming soon).
There is one additional item that I want to touch upon and that is our Docker Hub image. With the release of Ignition 8.1, we introduced support for containerization and an official image on Docker Hub. I am also excited to share that there is new documentation in our user manual with additional information on our official Docker image. To learn more, please visit https://docs.inductiveautomation.com/display/DOC81/Docker+Image.
As always, we encourage you to offer feedback and let us know what you’d like to see in upcoming releases. The release train is keeping pace and Ignition 8.1.9 is steaming ahead to a station near you!