Once again the Qt World Summit is over. basysKom presented on a number of topics – ranging from Qt Quick on low end hardware, Qt and its place in a world that has been heavily influenced by web-technology as well as an introduction to the Qt OPC UA module.
Please find the PDFs for the presentations attached to this page. Get in contact if you are interested in these topics.
After initiating Qt OPC UA in 2015 and significant effort in research and development, first customer solutions were successfully realized in 2019. A good point in time to have a closer look into the usage of the API.
Industrial integration out of the box – Qt OPC UA, to be presented by Frank Meerkötter (4/4)
OPC UA is a standard for data modeling and machine to machine communication originating from the industrial automation space. Nowadays it is used in a diverse, growing set of industries. Its mission statement is to enable easy integration and interoperability between machines, components and applications of different vendors. OPC UA is an important building block of the Industry 4.0 story. This presentation will highlight how Qt fits into the picture – by presenting the Qt OPC UA API, its features and capabilities.
The core goal of Qt OPC UA is to make it easy to integrate OPC UA services into Qt applications. It first entered the scene as a contribution by basysKom which became a technology preview with Qt 5.11. Since then, The Qt Company and basysKom invested significantly to mature the API and to add missing features. Most prominently are the addition of support for secure connections, service discovery, events and a brand new QML API.
The presentation provides a starting point to develop OPC UA enabled Qt applications and will walk the audience through a number of scenarios and how to handle them with Qt OPC UA using both the C++ and the QML API.
Basic API concepts
Connecting to a server
Access to nodes
Monitoring values changes
The presentation provides the audience with a starting point to develop own OPC UA enabled Qt applications.
Not a ten year jubilee, but close – join Jeremias on a nine year Qt Quick retrospective (Nov. 6th).
Qt Quick -what could possibly go wrong…”, to be presented by Jeremias Bosch (3/4)
The last nine years basysKom provided “rescue services” for numerous Qt Quick projects. This talk presents a moody retrospective – offering the audience the unique opportunity to learn from the failure of others.
Once upon a time we all started our first QML project. The first impression being “wow, that was easy!”. We were full of joy, believing in the quickness and broad simplification that Qt Quick would bring into our lifes. Widgets were so outdated that most of us forgot that they even existed. The future was touchable, quick, bright and shiny. Qt Quick projects grew from a first small patch of code into green gardens, prospered into parks, … and sometimes they grew into wild jungles ruled by darkness; where wild roots and thick undergrowth stopped every movement, where the trees of objects grew so heavy on the memory of our targets that shipping down the river of production was as unlikely as seeing the sun at the north pole in winter times …
Based on our project experience this talk will present a sightseeing tour of several close encounters for projects involving Qt Quick. It will dig for the root causes and apart from a good laugh we will provide the audience with sustainable solutions. Those can be adapted or adopted to avoid growing a jungle.
The web and its immense success over the last 20 years had a major influence on technology. It has shaped how we serialize data, consume and provide services and how we develop HMIs. The next talk presented by basysKom will provide a survey on how this challenge is addressed by Qt.
Qt and the web – where are we today, to be presented by Frank Meerkötter
The presentation is split into three parts.
1) Consuming and interfacing with web-centric services and APIs from a Qt application. Applications that download additional information from a cloud-service or upload the result of their work into such a service are todays norm. We will look into how REST/WebSocket-APIs can be used, also covering topics such as SSL, authentication and authorization.
2) Implementing services and APIs to be consumed by other – web-centric systems – with Qt. There are a number of scenarios where a Qt application is providing (web)services itself. These include Qt being used headless on an embedded system to implement the backend for a web-based HMI, Qt being used on the server to make an established application accessible to the web, or giving testers (which prefer scripting languages) access to the internals of a Qt HMI. We will look at the upcoming QHttpServer module and the QWebSocketServer module provided by Qt.
3) HMI development. There are a number of scenarios where an HMI needs to run a web browser. This can either mean an HMI that is implemented using Web-technologies (by preference) or a Qt HMI needs to be run in a web browser. Scenarios include embedded devices without a display, giving remote access to HMIs and having an embedded web browser to display a web-based HMI, while the backend is implemented using Qt. We will look at Qt’s webgl-streaming, how to get an application to output VNC (which can be streamed into a browser) as well as what can be done with Qt for WebAssemby. For the embedded web browser scenario we will look at the Qt WebEngine and how to integrate business logic via QWebChannel.
For each of these three areas we will look into typical scenarios/problems and how to solve them with Qt. We will highlight where Qt really shines and where additional work is left to be done.
This year’s Qt World Summit is just around the corner and basysKom will present four talks in Berlin. Follow us for more details until the event starts.
Qt Quick on low-end i.MX6 devices, to be presented by Jeremias Bosch
Embedded Linux in combination with Qt and Qt Quick are a widespread combination for the development of modern, complex and animated touch HMIs. This technology mixture is used for applications such as in-car infotainment, industrial controls, portable measurement devices or medical systems.
In an ideal world the embedded board is a power house, allowing smooth user experience, small startup time and low latency without the need of spending time and effort into optimization. But not all products can afford a high end i.MX6 with a dual or even quad core CPU with a powerful GPU. Price sensitive applications are often implemented with more affordable, but at the same time less powerful variants such as an i.MX6 dual lite or even smaller. With the consequence, that implementing a top of the line, complex HMI on a small i.MX6 can be a challenge.
The lecture will reflect best practises using Qt Quick on small devices, in particular the i.MX6 dual lite and SoloX. The audience will get a first set of do’s and don’ts, kick starting own Qt Quick projects on low end hardware.
Starting with the Qt 5.13 release, due end of May, the Qt OPC UA API in combination with the Unified Automation backend officially supports secure connections to servers (Sign or SignAndEncrypt message security mode). The following article outlines the changes to the Qt OPC UA API and shows how to get secure connections also with the open62541 backend.
Security related QOpcUaClient API changes
To enable secure connections a number of changes to the API of the QOpcUaClient were necessary – some of them preventing existing code from compiling. In summary:
The connectToEndpoint() method which takes a QUrl parameter has been removed. The only supported way to specify which server to connect to is now via an endpoint description retrieved using requestEndpoints().
supportedSecurityPolicies() returns a list with the OPC UA security policies supported by the current backend.
setPkiConfiguration() is used to configure QOpcUaClient with a client certificate, a corresponding private key and the necessary data to verify server certificates.
setIdentity() configures the identity information QOpcUaClient provides to the server during the connect. This information can also be initialized from the client certificate.
Up to Qt 5.12, login credentials were supplied to QOpcUaClient by encoding username and password in the URL. setAuthenticationInformation() replaces this by a clean API which can be used to select anonymous, username and password or X509 certificate based authentication.
The connectError() signal is emitted when a connection to a server fails. Depending on the error, the connected slot is able to override it (for example an untrusted or no longer valid server certificate).
If the private key is protected with a password, the passwordForPrivateKeyRequired() signal is emitted. The user can then supply the password in the connected slot.
19 June 2018, basysKom Development Lead Frank Meerkötter and Michele Rossi from The Qt Company presented a webinar: Qt OPC UA – An Overview
Driven by topics such as Industry 4.0 and IoT, OPC UA has established itself as the de facto standard for the communication of industrial devices and applications. Qt 5.11 ships with Qt OPC UA, a new module which has been developed by basysKom, together with The Qt Company. Qt OPC UA enables out of the box integration of OPC UA enabled devices with Qt applications.
People who use Qt for many different projects on many different platforms have a lot of kits configured in their Qt Creator. For those people the “New Project Wizard” contains an annoyance. Picking the right kit from a list of twenty-something possible kits means quite a bit of searching. But no more! For the newly released Qt Creator 4.6 we added a filter widget to quickly select the right one. Enjoy!
OPC UA is a central element of the Industry 4.0 story providing seamless communication between IT and industrial production systems. basysKom has initiated Qt OPC UA in 2015 with the goal of providing an out of the box Qt API for OPC UA. In 2017 basysKom, together with The Qt Company, has finished up a Technology Preview of that API. It will be available with the upcoming Qt 5.11 release end of May.
The focus of Qt OPC UA is on HMI/application development and ease of use for client-side development. The Tech Preview implements a subset of the OPC UA standard. It allows to connect to servers, read and write attributes, call methods on the server, monitor values for data changes and browse nodes. All this functionality is provided by asynchronous APIs which integrate nicely into Qt applications.
Qt OPC UA is primarily an API and not a whole OPC UA stack. A plugin interface allows to integrate existing OPC UA stacks as API backends. Currently, plugins for the following stacks are available:
Unified Automation C++ SDK 1.5
Qt OPC UA will be available directly from the Qt installer for those holding a Qt for Automation license. The source code itself is triple licensed (GPL, LGPL and commercial) with the exception of the Unified Automation backend which is only available under a commercial license. Users of one of the Open Source licenses will need to compile Qt OPC UA themselves. See here for a list of build recipes.
The backends for FreeOpcUa and open62541 are available under an Open Source license. When going for an Open Source solution, we recommend the open62541 plugin as it is the more complete implementation with an active community and a good momentum. It also has less dependencies, making usage on platforms such as Android or iOS much easier.
On the platform side, the technology preview will by available for
Windows with Visual Studio 2015 & 2017 as well as MinGW
Linux (Desktop and Embedded)
Android and iOS
Please note that not every backend is available on every platform.
On top of what is part of the Tech Preview, there are already a number of additions planned. Among them support for transport security, the discovery service, event support and filters.
We are looking forward to feedback and questions on this new module.