Design Like A Pro: 25+ Hidden Gems That Make Your Project Shine

Thank you to all that attended the recent Design Like A Pro: 25+ Hidden Gems That Make Your Project Shine webinar. You can find the webinar recording here.


Here are the answers to some of the common questions asked during the webinar:

Can we integrate Ignition SCADA with other SCADA systems?

  • Yes, Ignition is built around open standards, purposefully, to play well in most environments. Common ways to connect to other platforms are OPC UA, RESTful APIs, and common databases among others

If using Docker do you need an internet connection?

  • If using Docker in a production environment or where a license needs to be applied. You currently will need to have access to our licensing servers to keep Ignition licensed.

What is the use case for having Ignition in a docker? When would it be useful?

  • Using Docker is great for containerizing the implementation. It's very useful for development environments when you are trying out new features or want full test/dev environments that include other applications and can be easily (and quickly) spun up or down. Also if you want to start implementing container orchestration platforms like Kubernetes, or you want to take more of an infrastructure as code approach to your deployment.

Is it a good approach to use Docker for production environments or only for development environments?

  • Docker is a perfectly fine implementation for production environments. We have many folks using Docker in production today. It really boils down to supporting the deployment. If Docker is going to and another layer on top that folks supporting the implementation aren't as familiar with, it may not make as much sense to go that route.

Is there a way to not have to unlicense, delete/update/create a docker license, and then relicense when using a Docker container.

  • You can use the IGNITION_LICENSE_KEY and IGNITION_ACTIVATION_TOKEN environment variables in your compose file to automatically apply your license

How to size a server running Docker?

  • This really depends on how much you are looking to run on it. But basically it should have enough resources for each containerized application you have running. Containers have full access to their hosts resources just like any application running on it would unless you specifically put limits on them. For Ignition specifically the same basic guidelines for resources that are laid out in our server sizing and architecture guide would be a good place to look. The Ignition containers themselves can use a -m command to set the max Java heap size in the config file.

What is your guys Database of choice to pair with Ignition?

  • Reese's favorite database is MSSQL for larger production systems because of previous experience around it. However, he typically uses Postgres for his dev environments because of how lightweight it is. Adam's favorite database is PostgreSQL in his test and development setups.
  • A beneficial feature of Ignition is that customers can work with their preferred database. Supported databases are Microsoft SQL Server, Oracle, MySQL, MariaDB, PostgreSQL, and any database with a JDBC driver.

How is basis auto different from grow=1?

  • Basis set to auto will automatically size to the content within the component. Grow set to 1 will grow as large as it can based on the container that the component is within.

Do you recommend keeping restful script calls on the screen calling it or in a gateway event?

  • It depends on the application. If the RESTful call is looking up corresponding information that an end user is requesting on demand, I would run that in the client. If it is more of an automated process, it makes the most sense to put that in a project script that could be called by a tag event change script, for example.

What are the best practices for string formatting in loggers?

  • String formatting in Ignition is based on python string formatting. See this W3 schools page on formatting string in Python. Additionally, here is a section in our user manual on String Formatting. If you would like to log messages only under certain conditions, you could certainly use conditional statements in your code, such as an if else statement, to achieve that.

Does creating a custom property duplicate the data?

  • Great callout! Yes, it would duplicate the dataset within the session. So you did have a large dataset Reese and Adam would recommend putting that binding directly on the component to visualize that. A lot of times that type of thing is coming from a database, so Reese and Adam would recommend implementing the named query binding, script binding, etc. on the component rather than at the page level. You may, however, still use some of the custom props on the view as parameters in the binding, and these would certainly be best placed as a view prop rather than a direct binding.

Can we configure a time series DB like Influx DB or ApacheIOTDB to the Ignition docker container setup for DEV purposes?

  • Yes! Absolutely. Influx DB has an official docker image on Docker Hub. So you could use that along with Ignition in a development environment to test out functionality.

What is best practice for the link parameter where the view is opened by independent users in different sessions? Can it still be stored in the UDT?

  • You can put a binding on the link parameter if you would like to make it more dynamic. The source of that link could be a UDT, script, query, etc.

How do you obtain a one stop shop package with encryption security and scalability from small to large processes.

  • There is a shared responsibility of implementing Ignition in a secure manner. Ignition has many capabilities for a secure deployment that you can choose to implement. See the security hardening guide for more information on best practices with deploying Ignition within a secure environment.

Any tips on converting a project over from other HMI, especially with mass tag conversion?

Can one import an svg file to the map function, using it as a background, and then dynamically change the different components color with a binding or a script.

  • Yes you could do that, You would need to use a coordinate container to achieve this. The individual components of the SVG can be bound to other properties, tag values, queries, etc to change the color.

You can find the Docker Compose YAML and a backup of the project referenced during the webinar on the Ignition Exchange here.

4 Likes

Actually, no, not for datasets. A Perspective wrapper for a Dataset instance does not create another dataset instance. The original java dataset object is propagated without inner duplication through both property bindings and through simple expression bindings with just a property reference.

Bindings that manipulate a dataset to return some massaged information do duplicate selected inner data, just not the dataset object itself.

I highly recommend using datasets in Perspective, with access set to private when in a custom property.

1 Like