According to my observations, most intelligent ACS specialists working with SCADA go through several stages of “emotional growth”: mastering some kind of SCADA, searching for something better, ideas and attempts to write one’s own version, developing a philosophical attitude to the problem and using one of the existing products.
Yes, there are exceptions. For example, there are highly enthusiastic and persistent enthusiasts who create something working, but they don’t completely change the pictures.
Let's try to figure out why this is happening and whether there can be a way out of this vicious circle. Note: further reasoning will concern mainly commercial products, but in many respects are also valid for open source projects, which will be discussed separately. ')
In the first approximation, the process of working with SCADA-system is reduced to several actions: the choice of parameters for data exchange with the PLC, the development of mnemonic circuits in a special editor, setting up logging of events and status of parameters. To ensure the complex behavior of graphic elements of mnemonic diagrams and simple mathematical calculations, scripting is used or it is generally assumed that there are enough simple animation tools that can be configured in the editor.
This approach is largely justified - easy to learn, you can quickly implement simple projects. By and large, you can not even have a minimum knowledge of programming to get started.
Today, there is a fairly large number of SCADA-systems, differing in their capabilities, cost, ease of development, etc. It would seem, choose the appropriate option and start doing good, bright, eternal ... But then it turns out that everything is not so simple.
As soon as there is a need to create a large project with a large number of elements on mimic diagrams or the need for any noticeable amounts of calculations, a very low speed of operation immediately catches the eye. Especially funny is the situation when you have to shift the calculations to the PLC, although its speed is incomparably lower than modern PCs. Most often, it is also possible to forget about organizing the execution of several threads.
Attempting to do something that is not envisaged by the developers of SCADA easily translates into very nontrivial solutions with huge labor costs.
Closeness of internal mechanisms and incomplete documentation. For example, try to find for commercial SCADA a complete description of the data storage formats and database structure.
Many authors of articles on modern software development strategies speak negatively about the common approach, when incomparably more attention is paid to creating new functionality than to code optimization and testing. Unfortunately, it is often observed in the world of SCADA. Sometimes in the development process, you have to spend more time searching for the undocumented behavior of the system than actually developing it. But these are industrial systems with increased requirements for reliability.
High cost - when creating a large industrial facility with a cost of several million to allocate 5-10 thousand euros, the problem is not big, but if we are talking about relatively inexpensive equipment produced in large quantities, the cost of even 200 euros per copy can be an unaffordable luxury.
A few words about open source systems. With sincere respect to the developers, it seems to me that the idea, despite all the attractiveness, is practically not feasible. The reason - the huge labor costs in the absence of a visible community. There are too few people interested in such a product and at the same time able to write high-quality code in an object-oriented language, ready to spend their free time on such a project. Actually, awareness of the amount of work to create something that can compete with existing commercial products, and makes them give up.
Now, having got an idea of the difficulties, we will try to formulate the requirements for an ideal SCADA and see if the problem can be solved if we slightly go beyond the traditional paradigm.
High speed required. This means that there should be no interpreters; you need to get executable machine code at the output.
The ability to easily and without significant risks to change the behavior of existing components or add your own.
Transparency of storage formats settings and historical data. For example, the need to make a specific selection from the archives for building reports should not result in a lengthy re-engineering of the tools that make up the SCADA.
Simplicity and speed of development. It is necessary to minimize writing code and use visual programming to the maximum. If it will be necessary to expend noticeably greater efforts to work on an automation project as compared to commercial SCADAs, then who will need all this?
Comfortable and modern development environment (IDE). You need the usual tools of any programmer: code completion, version control, etc.
Low cost of third-party software, and ideally free and open source code.
All these requirements must be implemented with the minimum possible effort of several developers.
This suggests a solution - we need to take the existing good environment for visual programming and create a library of components for it, sharpened for the specific tasks of SCADA-systems. Reasoning in this way, I chose Qt. Here and the mass of ready-made components, and a great IDE, and a huge community of developers.
When I first met Qt, I was just amazed at the internal logic and richness of this library. As soon as there is a task to do something, it often turns out that it is already practically implemented in Qt and you just need to adapt it to your needs.
When the task is correctly formulated, it remains to be realized simply, which I started doing some time ago. To date, managed to implement a minimal gentlemanly set of components.
The created set can be divided into several groups.
Components designed to communicate with the PLC
Tag system In fact, there is a buffer between drivers and other parts of the library, which provides access to data from various program components.
Driver Client for OPC DA2. In my opinion, at the moment this is the most popular way to exchange data with a PLC and it is rather difficult to find at least some common device without an OPC server.
Ensuring recording and access to archived information
Alarm system.
Logs of technological parameters.
A set of graphic components (widgets).
Construction of graphs and trends from technological parameter journals. It's all classic - the choice and setting of the display of accumulated data.
Work with alarm messages - output active messages, confirmation by the operator (handshaking), access to archived information.
Display of various elements of mnemonic schemes. As the polls showed, in most companies they use their own icons to show the state of technological equipment. For this reason, a component was created that allows you to display graphic images (including those with a blinking effect) depending on the values of the tags.
Construction of large animated piping schemes. I have never seen ready-made analogs in any SCADA, and the need is obvious - try to lay a route in an extensive system with two to three hundred valves.
A set of components to facilitate the creation of custom elements.
Of course, there is still a long way to go, but now there are several possible directions for application, in addition to actually all kinds of classical industrial automation tasks:
Creation of utilities for solving side problems in existing systems. For example, I happened to write an analogue of Matrikon OPC Data Manager with richer functionality, spending only about four hours on this and saving quite substantial funds.
Development of applications for working with scientific instruments.
Systems "smart home".
Somehow imperceptibly for me, my hobby turned into something more, causing interest in other people. There was a thought to turn this creativity into a startup, but so far everything depends on the lack of people who are ready to share this work with me. If you have a desire to take part in the development of a startup, stand at the origins of a new company or try yourself as a co-founder, write me in a personal.