From OpenSCADAWiki
Jump to: navigation, search
This page contains changes which are not marked for translation.

Other languages:
Constr.png Common revision and translation

Author: Roman Savochenko

Maxim Lysenko (2012) — the page initial translation

Contents

This document is a manual of the "open source" program called "OpenSCADA". OpenSCADA represents a SCADA system built on the principles of modularity, multiplatformity and scalability.

As a policy of the development of the program there uses "open source" principle. This choice was done at needs of creation of a free, reliable and publicly available SCADA system. This policy allows to bring together a significant number of developers, enthusiasts and other interested persons to develop, test, improve, distribute and use the program, thus minimizing and distribution of efforts and financial costs.

OpenSCADA is designed for acquisition, archiving, visualization of information, performing of control actions and for other related operations charactered for full-featured SCADA systems. Due to the high level of abstraction and modularization the program can be used in a variety of related industries.

OpenSCADA can be and used now at:

  • industrial facilities as a full featured SCADA system or telemechanics;
  • dynamic models, imitators and training apparatus of technological processes into the real-time;
  • machine tools and industrial robots;
  • agricultural dispatching and control systems, poultry-yards;
  • embedded and mobile systems — environments of execution Programming Logical Controllers (PLC), robots, ...;
  • server equipment monitoring;
  • smart houses and home automation.

In the role of the common operating system (program platform) for development and using there was selected Linux OS, which is an optimal solution of the following issues:

  • reliability — a large part of servers and clusters running on GNU/Linux OS;
  • flexibility/scalability — due to its openness and modularity Linux allows to build solutions to meet any requirements;
  • availability — due to being under the license GPL the software is a fully free (libre) operational system and for high qualified users it can be also a non-cost one;
  • popularity, advancement, support and prevalence — the system is in active development by many enthusiasts, firms and government agencies throughout the world, and is gaining wide support on the personal and the corporate marketplace.

While the project currently develops under the principles of multiplatformity then there is no most problem for porting the project to other operational systems (program platforms) and hardware platforms. That is planned to future and mostly already done for some platforms.

At the heart of the program is a modular core. And depending on what modules are installed the program can be configured to operate in role of variety servers, clients and both clients and servers in the same time and into the same program. It allows for implementation of the client-server architecture on the same components/modules, saving machine memory, disk space and expensive programming time.

Server configurations of the program were designed for issuing control actions and acquisition, processing, archiving, logging information from different sources and this information providing also to clients (UI, GUI, TUI ...). The modular architecture allows for expanding of server's functionality without it restarting.

Client configurations can be built on different graphics libraries (GUI/TUI ToolKits), as using the program core and its modules (by adding to it an user interface module), or as an independent application connected the OpenSCADA core as a library.

The flexible configuration of the program allows for user to build solutions to meet specific requirements of reliability, functionality and capacity-complexity.

1 Functions of the program

Fig. 1. Block scheme of OpenSCADA.

1.1 Modularity

In order to achieve flexibility and a high degree of scalability OpenSCADA is constructed in a modular fashion. Tight integration the modules with the core improves the program stability in whole due to repeat of using the well-tuned code. But same process of developing of self code of the modules OpenSCADA imposes greater responsibility — possible errors introduce an element of instability into the program. The ability to create distributed configurations smooths this danger.

OpenSCADA modules are stored within dynamic libraries and each shared library can contain modules of various types. The filling of dynamic libraries by modules is determined by the functional connectivity of the modules itself. Dynamic libraries are hot swappable which allows to update certain parts of the program during the operation. This method of storing of modules' code in dynamic libraries is essential for OpenSCADA, because it is supported by practically all modern operating systems (OS). However, this does not exclude the possibility of developing other methods of storing of the modules' code.

OpenSCADA has the following functional parts implemented in modules:

  • databases;
  • communication interfaces, transports;
  • protocols of the communication interfaces;
  • data sources and data acquisition;
  • archives-history (messages and values);
  • user interfaces (GUI, TUI, WebGUI, speech, signal ...);
  • additional modules, special.

Management of the modules is carried out by the "Module scheduler" subsystem. The subsystem functions are: connection, switching off, updating and other operations concerned with the modules and their libraries.

1.2 Subsystems

Architecturally OpenSCADA is divided into subsystems. Subsystems can be two types: regular and modular. Modular subsystem have the ability of expanding by modules. Each the modular subsystem can contain many of modular objects. For example, the modular subsystem "Databases" contains modular objects of types of databases. Modular object is the root of the module.

Summary OpenSCADA contains nine subsystems with seven being modular. These nine subsystems of OpenSCADA are base ones and their present at every configuration. To the list of these nine subsystems can be added new ones, through the modules themselves. OpenSCADA subsystems:

  • Security.
  • Modules Scheduler.
  • Data Bases (modular).
  • Transports (modular).
  • Transport Protocols (modular).
  • Data Acquisition (modular).
  • Archives-Histories (modular).
  • User Interfaces (modular).
  • Specials (modular).

1.3 PLC and other sources of dynamic data, the subsystem "Data acquisition"

The subsystem "DAQ" (Data Acquisition) (Fig. 1.3) provides to support dynamic data sources whether: PLC, MOD, virtual sources and other. The function of this subsystem is to provide the received data in structured form and to provide management of these data, for example, these are data modification.

Fig. 1.3. Hierarchical structure of the subsystem "DAQ".

The subsystem "DAQ" is a modular one and it contains modular objects of types of sources of dynamic data. For example OpenSCADA provides now more than twenty modules and libraries items by sources of the logical level. Most significant and developed from them are:

Each non-logical source type is implemented into a separate module, which can contain many sources (controller objects), and each source is usually executed in a separate thread-task.

Separately taken object controller may contain parameters specified by module types. For example, the parameters of the analog type, the basic information of which is the value of the integer or the real type. Structurally, the parameter is a list of attributes that contain data. Attributes can have five basic types: logical, integer, real, character string (text) and object. Structures of controller objects, parameters and their types are contained in the subsystem "DAQ" so that the module objects carry out their filling in accordance with their own specifics.

Certain types of data sources themselves can generate data as they generate them entirely, as well as processing physical data, and even fully implement the gathering of these data into OpenSCADA environment and its internal language. Such data sources are called logical. Fully logical data sources are represented by modules: LogicLev and BlockCalc. There are several modules that combine logical data as a result of direct physical ones processing: ModBus and Siemens.

Dynamic data sources can be remote, that is, they can be generated or received at the remote OpenSCADA station. To communicate with such data sources, the DAQGate gateway module is used. The function of this type of data sources is to display the data sources of the remote OpenSCADA station to the local one.

You can read in detail the key subsystem "DAQ" and its functions in a separate document "Data acquisition in OpenSCADA".

1.4 Databases, the subsystem of "Databases"

To store data of the program are constantly used databases (DB). In order to unify access and manage databases, OpenSCADA has a subsystem called "Databases" (Fig. 1.4). To support different DB/DBMS the subsystem implemented as a modular one.

Fig. 1.4. Hierarchical structure of the subsystem "DB".

In the role of modular object contained in the subsystem, the type of DB/DBMS acts, that is, any module of the subsystem "Databases" practically contain the implementation of access to a specific type of database. OpenSCADA provides that most significant and developed modules: SQLite, MySQL, PostgreSQL, FireBird.

Type of the DB/DBMS in its turn contains a list of objects of separate DB of this type, and the database object contains a list of table objects, which contain data in tabular form.

Practically all OpenSCADA data is stored in one or another database. The program's toolkit allows you to easily transfer data from one type of database to another, and, as a result, optimally select a database type for a specific scope of application OpenSCADA. Transferring information from one database to another can be done in two ways. The first one is to change the address of the working DB and to save the whole configuration of the program to it, the second one — it is direct copying information between the database. Except of copying the function of direct editing of content of tables of DB is supported also.

There are two ways to organize the centralized access of a distributed program to a single database. The first is the use of network databases, for example — MySQL. The second way is to use a transport type database on local stations to access one central database of another OpenSCADA station, by sending requests to the database at that remote station — not yet implemented in OpenSCADA.

Data can also be stored in the configuration file of the program. The mechanism of full mapping of the DB structure to the structure of the configuration file is implemented. That is, the standard configuration can be placed in the configuration file. The essence of the mechanism is that the typical (by default) data of programs can be described in the configuration file, for example — when starting without a DB. In the future, these data can be redefined in the DB. In addition, for cases of impossibility to run any DB in general, all data can be stored in the configuration file.

To access databases, a DB registration mechanism is used. Registered DBs in the program are accessible to all OpenSCADA subsystems and can be used in their work. Thanks to this mechanism, you can ensure the distribution of data storage. For example, different libraries can be stored and distributed independently, and connecting a library will be simple registration of the desired DB.

1.5 Archives and history, the subsystem "Archives-History"

Any SCADA system should provide the ability to archive the gathered data, that is, to form the history of the change (dynamics) of the process. Archives can be divided into two types: messages and values archives.

Fig. 1.5. Hierarchical structure of the subsystem "Archives-History".

The peculiarity of message archives is the very archiving of so-called program messages, that is logging. A characteristic sign of a message is the time of its occurrence. Depending on the source the messages can be classified according to different criteria. For example, it can be emergency reports, operator logs, communication failure protocols, and more.

The peculiarity of the value archives is their periodicity, which is determined by the time interval between two adjacent values. Value archives are used to archive the history of continuous processes. Since the process is continuous, it can be archived only by introducing the concept of quantization of the acquired values, otherwise we will receive archives of infinite sizes, in accordance with the continuity of the nature of the process itself. Besides, we can practically get values with a period limited by the data sources themselves. For example, rather high-quality data sources in industry rarely allow data to be received at frequencies above 1 kHz, without taking into account the sensors themselves, which have less qualitative frequency characteristics.

To solve the problems of archiving data streams in OpenSCADA provides a subsystem "Archives-History" (Fig. 1.5), which is modular and allows you to maintain archives of messages and values. Modular object, which is contained in the subsystem "Archives-History", is the type of archiver. The type of archiver determines a way of data storing ie the storage — file system, DBMS. Each module of the "Archives-History" subsystem, respectively, can implement the archiving of messages and values, and the subsystem itself can contain many archives that are processed by different modules.

Messages in OpenSCADA are characterized by the date, level of importance, category, and directly the message text. Date of a message indicates the date and time of his creation. Level of importance points to importance of the message. Category defines address or identifier-key of the message source. Often, category contains full path to a source of the message in the program. Text of a message, respectively, has the main meaning of the message.

When archiving messages, they are passed through a filter that works according to importance level and category of messages. Messages level in a filter indicates that you must skip messages with specified or higher levels of importance. For filtering by category, templates or regular expressions are used to determine which messages to pass. Each archiver has its own filter settings, therefore, it is easy to create various specialized archivers for the archive of messages. For example, archivers of messages can be directed to:

  • logs, to store debugging information and other working information of servers;
  • different protocols (users action protocol, protocol of violations and exceptions, messages protocol ...).

In accordance with the nature of messages and violations the subsystem "Archives-History" contains a buffer of current violations, which contains these most actual ones with category of the messages as the key-ID. Access to the buffer-list of current violations is done by indicating the negative value of the message level. Thus, formation of a message with a negative level -2 causes the location of this message in the buffer of active violations with level 2, as well as duplicate it directly in the message archive (the general messages buffer). At forming a message in the same category, but at a positive level — say 1, this violation will be removed from the buffer of violations, and the message will also fall into the message archive (the general messages buffer). Such a mechanism allows simultaneous accounting of active violations and logging of their passage in the message archive. When requesting an archive of messages, the definition of the positive level requests the archive of messages (through the general messages buffer), and the negative to the buffer-list of current violations.

OpenSCADA values archives act as independent components that include buffers processed by archivers. The main parameter of the values archives is data source, in the role of which may be attributes of the parameters of the subsystem "DAQ", as well as other external data sources (passive mode). Other data sources may be network archivers of remote OpenSCADA stations, OpenSCADA programming environment, and more.

A key component of archiving the values of continuous processes is the value buffer, which is intended for intermediate storing of an array of values obtained with a defined periodicity (time quantum). The values buffer is used to directly store large values of arrays in the value archives both before the direct "flushing" on the physical storage, and for manipulating the value frames, that is, in the functions of the frame-by-frame query of the values and their location in the archive buffer.

To organize remote archivers in distributed configurations, the transport type of archivers is used, which is currently not implemented in OpenSCADA. The function of the transport type of archivers is to display the remote central archiver of OpenSCADA in the local configuration. As a result, the transport-type archiver performs data transfer between the local configuration and the archiver of the remote configuration of the program, by hiding from the subsystems of the local configuration the real nature of the archiver.

1.6 Communications, the subsystem "Transports" and "Transport protocols"

Since OpenSCADA is highly scalable, communication support should be sufficiently flexible, for which it is implemented in the "Transports" and "Transport protocols" subsystems (fig. 1.6), which are modular ones.

Fig. 1.6. Hierarchical structure of the subsystem "Transports" and "Protocols".

The "Transport" subsystem is intended to provide for the exchange of unstructured data between OpenSCADA and external systems, in the role of which remote stations OpenSCADA may also serve. Under unstructured data means the stream of characters of a certain length. Modular object contained in the "Transport" subsystem is a type of transport that determines the mechanism for the transmission of unstructured data. For example, their may be and are:

The subsystem "Transport" includes support for ingoing and outgoing transports. Ingoing transports are designed to serve external requests and send replies. Outgoing transports, by contrast, are designed to send messages and wait for a responses. Therefore, ingoing transports contain configuration of local station as a server, and outgoing transports contain configuration of a remote server. That sort of specialization is typical for the "request-response" mechanism, however, currently ingoing and outgoing transports support the independent transmission and reception of data. Modules of the subsystem "Transports" implement support for both ingoing and outgoing transports.

The "Transport protocols" subsystem is designed to structure data received from the "Transports" subsystem, is a continuation of the subsystem "Transports" and performs functions of checking structure and integrity of received data. A special configuration field is provided to determine protocol with which transport must operate. Modular object contained in the "Protocols" subsystem is protocol itself. For example, transport protocols can be and are:

The full sequence of incoming communication session for typical "request-response" protocols can be written as follows:

  • a message from an external system comes to a transport;
  • the transport transmits the message to a relating protocol by creating a new protocol object;
  • the protocol checks the integrity of the data;
  • if all the data came, then notify the transport about stopping of data waiting and send it an answer, otherwise tell that it should expect more;
  • the transport, receiving confirmation, sends the answer and deletes the object of the protocol;
  • if there is no confirmation, the transport continues to wait for the data, and in case of its receipt, it transmits to the saved object of the protocol.

Protocols are also supported for outgoing transports and assume the function of communication with transport and implementation of features of these protocols, when preparing data for the transmission and analysis of responses. The external interface for accessing protocols, from code of other modules and the OpenSCADA programming environment, implements in an XML tree with its own structure for each protocol module. Such a mechanism allows for transparent access to external systems through transports, simply by specifying the name of the protocol by which to serve transmission.

Thanks to the standard access (API) to transports in OpenSCADA, it's easy to change the way data is exchanged without affecting the exchanging programs themselves. For example, in the case of a local exchange, you can use faster transport based on UNIX sockets or shared memory, and in the case of exchanging over the Internet and local network using TCP or UDP sockets.

1.7 User interfaces, the subsystem "User Interfaces"

SCADA systems, as a class, provide for user interfaces presence. In OpenSCADA for user interfaces, the subsystem "User Interfaces" is provided, which means not only the visualization environment that the end user must work with, but all that is relevant to the user, for example:

The subsystem "User interfaces" is a modular one and its modular object is concrete that user interface itself. Modularity of the subsystem allows you to create different user interfaces in different GUI/TUI libraries and use the most optimal solution in a particular case, for example, you can use Web-based configurators and visualizers (WebCfg, WebCfgD, WebVision, WebUser), and in the case of stationary workstations, use the same configurators and visualizers, but on the basics libraries like Qt (QTCfg, Vision).

1.8 Security of the program, the subsystem "Security"

OpenSCADA is a ramified program that consists of a dozen subsystems and can include many modules. Therefore, providing all unrestricted access to these resources is least rash. In order to differentiate access, OpenSCADA provides the subsystem "Security" whose main functions are:

  • storing user accounts and user groups;
  • authentication of users;
  • verifying access rights to a particular resource.

1.9 Management of modules, the subsystem "Modules scheduler"

OpenSCADA is built on the modular principle, which involves the presence of many modules that need to be controled and scheduled for availability, which is provided for the subsystem "Modules Scheduler". All modules are currently provided to the program through shared libraries (containers) or embedded directly into the OpenSCADA core library according to their logical connection. Each container can contain many different types of modules.

The subsystem "Modules scheduler" controls the state of the containers and allows "hot" plugging, deletion, and updating of the containers and modules it contains.

1.10 Unforeseen opportunities, the subsystem "Specials"

Obviously, it is impossible to predict all need functions and functions that may be needed in the future so OpenSCADA has the subsystem "Specials" that is modular and designed to provide unpredictable functions through modular extensions. For example, using this subsystem may be implemented:

1.11 Functions, object model and programming environment of the user

Modern SCADA system should include mechanisms that enable programming at the user level, that is, the user programming environment. OpenSCADA contains this environment and can be used to:

  • algorithms of control of technological processes;
  • large dynamic real-time models and simulators of technological, chemical, physical and other processes;
  • adaptive control mechanisms by models;
  • user procedures for managing the internal functions of the program, its subsystems and modules;
  • flexible formation of parameters of the subsystem "DAQ" in order to create parameters of a non-standard structure and fill them with the algorithm of the user; procedures and protocols for data acquisition on the user level;
  • auxiliary calculations.

The programming environment is a set of tools that organize the user's computing area and includes

Modules of function libraries provide static functions of a defined orientation, which extend the object model of the program and represent an user interface for accessing module resources. For example, "Visualization Control Area" can provide functions for issuing various messages, using which the user can implement interactive algorithms for interaction with the program. Function libraries can generally be implemented as a set of fixed-type functions — static ones, and functions that allow free modification and additions — dynamic ones.

Free-style function libraries (dynamic) provide the user-defined writing environment in one of the programming languages; at present, this language is similar to Java implemented by the module DAQ.JavaLikeCalc. In this way you can create libraries of devices of technological processes and many others, and then use them by binding.

On the basis of the functions given by the object model constructs objects of calculating controllers that carry out the binding of functions with the program parameters and the calculation mechanism. Also there construct procedures and protocols of data acquisition of the user level, Widget procedures of "the Visual Control Area" and much more.

2 SCADA systems and their structure

Fig. 2. Hierarchical SCADA-system.

SCADA (Supervisory Control And Data Acquisition), in a general view, have the allocated architecture like represented on Figure 2. Elements of SCADA systems, in sense of the software, carry out following functions:
The acquisition server: represents a task or group of tasks engaged in data acquisition from sources of data, or act in a role as a source of data. Into tasks of the server enters:

  • reception and-or formation of data;
  • data processing;
  • serving of requests about access to data;
  • serving of requests about updating of data.

The server of archiving: represents a task or group of tasks engaged in archiving of data or their history maintenance. Into tasks of the server enters:

  • archiving of data or their history maintenance of SCADA-systems;
  • serving of requests for access to archival or history data;
  • import/export of archives-history.

The logging server: represents a task or group of tasks engaged in archiving of messages or their history maintenance. Into tasks of the server enters:

  • archiving of messages or their history maintenance of SCADA-systems;
  • serving of requests about access to archival or history messages;
  • import/export of archives-history.

The alarm server: represents a task or group of tasks carrying out functions of the server of logging concerning a narrow category of signaling-alarm messages.
The working place of operator: represents constantly functioning GUI (Grafical User Interface) application executed in an one-monitor, multimonitor or panel mode and carrying out functions:

  • provision of an user interface for control over a condition of technological process;
  • provision of an opportunity of formation of operating acts;
  • provision of an opportunity of studying and analysis of history of technological process;
  • provision of a toolkit for forming of reporting documentation.

The working place of engineer: represents GUI application used for configuration of SCADA systems. Into tasks of the application enters:

  • provision of a toolkit for manipulation with system functions of the program;
  • provision of a toolkit of a workplace of operator;
  • provision of a toolkit for manipulation with distributed network architectures of SCADA systems as a whole (distribution of functions between stations, creation and removing of stations...).

The working place of chief: represents GUI application, executed in an one-monitor mode as a rule, and carrying out functions:

  • provision of an user interface for control over a condition of technological processes;
  • provision of a toolkit for studying and analysis of history of technological processes as directly from active servers, and on basis of separate archives;
  • provision of a toolkit for forming of reporting documentations.

The working place of technologist: completely includes functions of workplace of operator plus models of technological processes (without direct communication with the technological processes).
The working place of technologist-programmer: completely includes functions of workplace of technologist plus a toolkit for creation of models of technological processes.

3 Ways of configuration and using of OpenSCADA

3.1 Simple server connection

In the elementary case OpenSCADA can be configured in a server mode (fig. 3.1) for acquisition and archiving of data. The given configuration allows to carry out following functions:

  • interrogation of data sources (controllers);
  • archiving of values of parameters of data sources;
  • service of client requests about getting of various data of the server;
  • granting of the configuration WEB-interface;
  • the remote configuration from OpenSCADA by means of the Qt or other local interface.
  • secondary regulation — regulation in objects of the computing controllers;
  • simulating, correcting and appending calculations in objects of the computing controllers.
Fig. 3.1. Simple server connection.

3.2 Duplicated server connection

For increasing of reliability and productivity OpenSСADA supposes plural reservation (fig. 3.2) at which data sources (controllers) and archives-history of one copy are reflected in other. At use of a similar configuration there is possible distribution of loading of interrogation/calculation at various stations. The given configuration allows to carry out functions:

  • interrogation of data sources (controllers);
  • archiving of values of parameters of data sources;
  • service of client requests about getting of various data of the server;
  • reservation of parameters of the data sources;
  • reservation of archives-history;
  • distribution of loading of interrogation on servers;
  • granting of the configuration WEB-interface;
  • secondary regulation — regulation in objects of the computing controllers;
  • simulating, correcting and appending calculations in objects of the computing controllers with an opportunity of distribution of loading on servers.
Fig. 3.2. Duplicated server connection.

3.3 Duplicated server connection on one server

Special case of the duplicated connection is the duplicated connection within one server (fig. 3.3), that is starting of several stations at one machine with their parameters crossing. The purpose of the given configuration is increase of reliability and fault tolerance of the configuration by reservation of software.

Fig. 3.3. Duplicated server connection on one server.

3.4 Client access by means of the Web-interface. A place of the manager

For visualization of data containing on a server, the good decision is to use the user WEB-interface (fig. 3.4). The given decision allows to use a standard WEB-browser at the client side and therefore is the most flexible as it is not related to one platform, i.e. is multiplatform. However this decision has essential imperfections — that is low productivity and reliability. In this connection it is recommended to use the given method for visualization of noncritical data or data having a reserve highly reliable way of visualization. For example, the good decision will be using of this method in the management of industrial plants where always exists an operator station with a reliable way of visualization. The given configuration allows to carry out following functions:

  • interrogation of the server for acquisition of visualization data and configurations;
  • visualization of data in a kind accessible to understanding;
  • formation of protocols, reports;
  • manipulation with parameters supposing change.
Fig. 3.4. Client access by means of the Web-interface. A place of the manager.

3.5 Automated workplace (place of the manager/operator)

For visualization of critical data, and also in case of if high quality and productivity is required, it is possible to use visualization on the basis of OpenSCADA configured with a GUI module (fig. 3.5). The given configuration allows to carry out following functions:

  • interrogation of the server for updating current values;
  • visualization of the gathered data in a kind accessible to understanding;
  • formation of protocols and reports;
  • manipulation with parameters supposing changes.
Fig. 3.5. Automated workplace (a place of the manager/operator).

3.6 AWP with a server of acquisition and archiving on single machine (place of the operator, simulator ...)

The full-function client-server configuration on single machine (fig. 3.6) can be used for increasing of reliability of the configuration as a whole by start of a client and a server in different processes. The given configuration allows, without consequences for the server, to stop the client and to do with it various preventive works. It is recommended for use at stations of the operator by installation of two machines combining in itself a station of the operator and a redundant server. The given configuration allows to carry out following functions:

  • interrogation of data sources (controllers);
  • service of client requests;
  • visualization;
  • performing of control actions;
  • generation of protocols and reports;
  • secondary regulation;
  • simulating, correcting and appending calculations in objects of the computing controllers;
  • acquisition and visualization of the information about the personal computer, the server....
Fig. 3.6. Automated workplace with a server of acquisition and archiving on the single machine (a place of the operator, simulator...).

3.7 Elementary mixed connection (simulator, demonstration, configurator ...)

The mixed connection combines functions of a server and a client (fig. 3.7). It can be used for test, demonstration functions, and also for granting simulators of technological processes as a unit. In this mode following functions can be carried out:

  • interrogation of controllers;
  • service of client requests;
  • visualization;
  • delivery of operating influences;
  • performing of control actions;
  • secondary regulation;
  • simulating, correcting and appending calculations in objects of the computing controllers;
  • acquisition and visualization of the current information about the personal computer, the server, the simulator ...;
  • configuration of databases, connections, etc.
Fig. 3.7. Elementary mixed connection (simulator, demonstration, configurator...).

3.8 Robust Distributed Configuration

The given configuration is one of variants of robust/reliable connection (fig. 3.8). Stability is reached by distribution of functions on:

  • to servers of acquisition;
  • to the central server of archiving and service of client requests;
  • to clients: AWPs and WEB-clients.
Fig. 3.8. Robust Distributed Configuration.

The acquisition server is configured on the basis of OpenSCADA and represents a task or a group of data collection tasks — acquisition of a controller or a group of controllers of the same type. Obtained values are available to the central server through any transport which support is added by connecting the corresponding transport module. To reduce the polling frequency and the value of network traffic, the polling server can be equipped with a small archive of values. Configuration of the acquisition server is stored in one of the available databases.

The central server of archiving and maintaining customer requests performs the centralized acquisition and processing of parameters of the polling servers and their values. Access to the polling servers is performed through one of transport + protocols available into OpenSCADA (for example, these Sockets). The module DAQGate is used to provide a single interface for accessing parameters and controllers, which reflects polling server data into the structure of local parameters of data acquisition.

To perform internal computations and additional analysis of parameters, objects of computing controllers are used.

Various archive-history modules are used for versatile and deep archiving.

For access of clients to the server are used accessible for OpenSCADA network transports, for example — Sockets, and transport protocols, for an example — the protocol OpenSCADA "SelfSystem".

The configuration of the central server is stored in one of accessible DB (for example it is network DBMS MySQL).

For granting the user WEB-interface the module WebCfgD by means of the transport protocol "HTTP" is used.

Various clients, including AWPs and WEB clients, are executed on separate machines in the right amount. AWP implements on OpenSCADA basis. Its function is to acquire the values of parameters from the central server and their visualization on the GUI interface(s). To obtain data acquisition parameters the DAQGate remote display parameters module is also used in the AWP. A network-type archive module can be used to provide access to archive-history. The AWP configuration can be stored in one of the available databases (for example, this is a network MySQL database located on the central archiving server machine).

4 Configuration and settings of the program

As you can see in the section above, OpenSCADA provides possibility of configuration for execution in different roles. Support for this feature is provided by advanced configuration mechanisms, storage of configuration data and organization of projects of these configurations. This section contains a description of these mechanisms and is intended to give a presentment of flexibility and diversity, thus allowing OpenSCADA to be used for all 100 percent.

When describing the configuration mechanisms and storage methods in this section, emphasis will be placed on the common mechanisms. The specific of configuration and use of modules of OpenSCADA subsystems are provided in their own documentation of these modules.

OpenSCADA uses a formalized approach to describing the configuration interfaces based on the XML language. In fact, specifics of configuration of component of the program are provided by the component itself, thereby running through the entire program, as the nervous system of organism. In terms of OpenSCADA, this is called the OpenSCADA control interface (Control interface). Based on the control interface, graphical user configuring interfaces are created through the use of the OpenSCADA modules. This approach has the following important benefits:

  • Scalability: you can only connect necessary configuration modules or only use remote mechanisms at all.
  • Excluding of the need to update the configurators with the addition of new module functions, and exclusion of its "swelling" through the need of the direct support of the entire history of already unnecessary and obsolete functions-modules.
  • Relative ease of creating graphical configuration interfaces on variety of the bases due to the clear formalization.
  • Providing the possibility of dynamic configuration, that is, the configuration can be performed directly when the program is running both locally and remotely, directly controlling the result.
  • Simple and targeted extensibility of configuration interface by adding configuration fields in the language of the description of the control interface only in components that need it.

To simplify the configuration process and storing its results, OpenSCADA version 0.9 provides projects of OpenSCADA which self provide a separate OpenSCADA project folder to save there configuration and all files that have a relationship with it. Thus, the OpenSCADA core employs the project selection mechanism and provides a script "openscada_start" for initial implementation of projects these install working folder and configuration file address according to the specified project. See "OpenSCADA Projects" for more details.

OpenSCADA provides three configuration modules on different basis of visualization. Let's observe them and their configuration options:

  • Configuration module on the GUI library QtUI.QTCfg. Provides an advanced configuration interface, allowing to operate as local stations and remote ones in local and global networks, including secure connection.
  • Configuration module based on the dynamic WEB-technologies (DHTML) — UI.WebCfgD. Provides an advanced configuration interface, allowing to operate as local server's stations, and remote stations in local and global networks, including work on the secure connection. Client connection is provided through the usual Web-browser.
  • Configuration module based on the static WEB-technologies (XHTML) — UI.WebCfg. Provides an adequate configuration interface that allows to manage local server's stations via the usual Web-browser.

Configuration values, changed in the configurators, as well as most of data are stored in databases (DB). Given the modularity of the subsystems "DB", them can be different databases. Moreover, there is a possibility of storing different OpenSCADA parts in different databases of the same type and in databases of different types as well.

In addition to the database configuration information may be contained in the OpenSCADA configuration file, and passed through the command line parameter's when you call OpenSCADA. Saving configuration in the configuration file is the same as the database. Standard name of the OpenSCADA configuration file is /etc/oscada.xml, for configurations besides of the OpenSCADA projects, and {Proj}/oscada.xml for the project "Proj". Format of the configuration file and command line parameters we'll examine in the separate section.

Changing of some node's configuration will set the modification flag for the node, and also will set to active for buttons "Load from DB", for loading the initial configuration, and "Save to DB" for the changes saving. The modification flag also rises to parent node, which allows to restore-save from the root node, but really into the operations with DB will participate only modified nodes. At.png A node removing causes to removing it from the storage-DB and the modification mechanism does not work for this operation.

Many of settings and configurations of the objects OpenSCADA, which are executed or already enabled, are not applied immediately as for changes, because the configuration is read/apply usually only when turn on or start. Therefore to apply the changes, in such cases, it is enough to enable/disable the enabled object or to restart the running one — start/stop. At this time, most settings that do not provide direct application are simply not allowed to be edited.

Further examining of configuration of OpenSCADA will be based on the interface of the configurator UI.QTCfg, but the principles of work will be fully consistent with the rest of the configurators owing to the generality in the used control interface of OpenSCADA.

We will start examining with the configuration of program parameters of OpenSCADA, which is located in the six tabs at the root page of the station:

  • Tab "Station" contains basic information and configuration field of the station, Fig.4a. Here are the provided fields and comments on them:
    • ID — contains information about the station's identifier. It is specified by the command line parameter "--station". When loading it is sought the section in the configuration file appropriate to the station identifier, and if not detected, it uses the first available one.
    • Station name — indicates the localized station's name. It is specified by the command line parameter "--statName".
    • Program — contains information on the program name. Usually it is OpenSCADA or name of solution based on OpenSCADA.
    • Version — contains the information on the current version of the programme.
    • Host name — contains the information on the name of the machine that runs the station.
    • System user — contains the information about the user on whose behalf the program is executed in the system (OS).
    • Operation system — contains the information about the name and version of operation system, operation system kernel on which the program is executed.
    • CPU — contains the CPU operative information specifically that is accessible CPU/core number and frequency of the CPU, which runs the program. The value of frequency is checked every 10 seconds, for X86, and allows you to monitor its change, for example, by the power management mechanisms.
    • Main CPUs set — indicates main list CPUs for use by OpenSCADA tasks. Into round brackets contains list of used CPUs currently.
    • Tasks planning clock — contains information about the used tasks planning clock and it's resolution on the operation system. It allows you to orient with the minimum interval of time of periodic tasks, for example, for task of data acquisition.
    • Internal charset — contains information about the charset in which text messages are stored within the program.
    • Config file — contains information about the configuration file used by the program. Set by the command-line parameter "--config".
    • Work directory — indicates the working directory of the station. It is used in relative addressing of the objects in the file system, for example, database files. It allows the user to save the modified program data to another database. The value of this field is not stored in the database, but can be changed only in the "WorkDB" section of the configuration file.
    • Modules directory — indicates the directories of modules for OpenSCADA, separated by ';', they can include a files' template into the end (/my/modules/path/lib*.so). If the value of this field is incorrect, then at start you will not see any graphical interface, but the only information in the console on the correct running of the OpenSCADA core.
    • Icons directory — indicates the directory containing the program icons. If the configuration navigation tree have no icons, then you have incorrectly entered the value of this field.
    • Documents directory — indicates the directory containing the program documents. If you can not to call local documents then you have incorrectly entered the value of this field or no the documents installed.
    • Work DB — indicates the working database (DB), namely, the database used to store basic data of the program. Changing of this field notes all objects as modified that allows you to save or to load station's data from the specified main database.
    • Save the program at exit — points to the need to save the changed data at finishing of the program.
    • Save the program period — indicates the frequency in seconds with which to save the changed station's data.
    • Language — indicates the language of messages of the program. Changing of this field is acceptable, but leads to a change of messages' language only for the interface and dynamic messages!
    • Messages — section of the parameters' group that are processing by the work and messages of the stations:
      • Least level — indicates the level of messages beginning from which they are to be processed. Messages below this level will be ignored. The level "Debug (0)" have special sense, it set will enable debug messages generation by different parts of the program. For the parts debug messages generation control you can use tab "Debug" (fig.4d).
      • To syslog — indicates the need of sending the message to the system logger, the mechanism of operation system for work with system messages and software. When this option is enabled the possibility appears to manage and control the OpenSCADA messages by the mechanisms of OS.
      • To stdout — indicates the using as a standard mechanism to display the message the output to the console. Disabling of this feature will eliminate the entire output in the console, unless you specify the following parameter.
      • To stderr — indicated the using as a standard mechanism to display the message the error output, it is also usually sent to the console.
      • To archive — indicated the need for output of the messages in the messages' archive of OpenSCADA. This option is usually enabled and its disabling leads to the actual disabling of the archiving at the station.
  • Tab "Subsystems" tab contains the list of subsystems (Fig. 4b) and allows you to jump directly to them using the context menu.
  • Tab "Redundancy" (Fig. 4c) contains the configuration of redundancy of the station with the following settings:
    • Status — contains information on redundancy scheme, at the moment this time spent on the execution of one cycle of the task of reserve processing.
    • Station level — indicates the level of the station in an arrangement (0-255).
    • Redundant task period (s) — indicates the period of execution of the redundancy task in seconds (1-255).
    • Restore connection timeout (s) — indicates over the which period of time to attempt to reconnect with a lost redundant station in seconds (0-255).
    • Local primary commands transfer — enables of local primary commands transfer to the redundant stations for the local changes automatic sync.
    • Stations — contains the table with information about the redundant stations. Stations can be added and removed via contextual menu. Id of the added stations is to be chosen from the list of available OpenSCADA stations. Presence into the table at last one enables the redundancy in whole and opens access to pages of the redundancy configuration at level of subsystems, in condition of the subsystem supports the redundancy. The table provides the following information about the station:
      • ID — ID of the OpenSCADA station, should be changed after the addition by choosing from the list of available ones;
      • Name — name of the OpenSCADA station;
      • Live — sign of the connection with the redundant station;
      • Level — level of the remote station in the redundancy scheme;
      • Counter — requests' counter to the redundant station or waiting time, in the case of the absence of connection.
    • Go to remote stations list configuration — command to go to the configuration page of the remote OpenSCADA stations in the subsystem "Transports".
  • Tab "Tasks" contains the table with opened tasks by OpenSCADA components (Fig.4d). From table you can get several information about the tasks, and also set CPUs for tasks of multi-processors systems.
  • Tab "Debug" contains elements for control to debug (Fig.4e) and activates at select the messages level "Debug (0)" or at the objects counters using.
  • Tab "Translations" contains elements of the manager of central translations text messages of the program (Fig.4f) and activates at the multi-language mode enabling by base language of text variables set. Elements of the translations manager:
    • Text variable's base language — is used to activate the support of multilingual text variables by specifying a non-empty basic language. The value of the basic language is selected from the list of bi-character language code, usually only the current and the base language is in the list. Further for the text variables in the non basic language in the tables of the database it will be created the separate columns. Under the text variables the all text fields of configurator, which can be translated into another language are meant. Numbers and other symbolic values are not in their number and are not translated.
    • Dynamic translation — current state and plan the dynamic text messages translation. The dynamic text messages translation causes the text messages translation cache enabling and requests to the translations to the DB depends to the OpenSCADA part's language, mostly for multi-language dynamic user interfaces when user has self-preferred language.
    • Enable manager — enabling the translation manager. Cause the program reloading to forming an index of built translations, however this do not doing to forming full the messages index by deny to reloading some objects into an execution. For full the messages index loading you ought the manager save into enable mode and OpenSCADA restart. Ongoing the program next start will forming full the messages index.
    • Languages — the translations languages list from base, controls the manager. The language column will contain a data if set language present into source or will not else.
    • Source filter — the messages filter by substring into the source.
    • Check for mismatch — toggle checking and indicating to mismatch messages' translation into different places, needs more time for that.
    • Messages — same the messages table with columns: the base language, selected translation languages, the messages sources. To modify there are allowed the languages columns and at result the changes will set to the messages sources.

To modify the fields of this page it may be required the super user's rights. Get these rights you can by means of including your user into the superuser's group "root", or by entering the station from the superuser "root".

We must mention another one important point: the fields of the identifiers of all OpenSCADA objects are unacceptable for direct editing, because they are keys for storage of objects' data in the database. However, to change the object's identifier you can by the command of cutting and the further pasting of the object (Cut-> Paste) in the configurator.

Fig. 4a. The tab "Station" of the main page of the configuration of station.
Fig 4b. The tab "Subsystems" of the main page of the configuration of station.

The service task of the redundancy mechanism is always running and executed at intervals which are prescribed in the appropriate configuration field. The real work on implementing the redundancy is carried out in the presence of at least one redundant station in the list of stations, and implies:

  • Monitoring of the connection with external stations. In the monitoring process the requests to remote stations are made to get the information about them updated and to check connection. In the case of loss of connection with the station the repeat of connection to it is made through interval specified in the configuration field "Restore connection timeout". In the "Live" field of the station the current state of communication is displayed. In the "Counter" field the number of requests carried to the remote station, or the time remaining for the next connection attempt to the lost station is displayed. In the "Run" field there is a list of active controllers at the remote station with a sign of the local execution.
  • Local planning of the objects' execution in reserve. Planning is carried out in accordance with the station's level and preferences of execution of objects: controllers, messages archivators.
  • Calling the data synchronization function for the local objects of the redundant subsystems working in the mode of synchronization of data from the external stations.

There is recommended the redundancy configure in way for DBs of the redundant stations save equal and that will allow you to copy its painlessly to each the station and then to backup only one the DBs set. And the configurations specified to the different stations will save into the configuration file and you can simply configure and change the needed station by the proper configuration file select.

The redundancy configuration start from the redundant stations appending to list of OpenSCADA stations in tab "Subsystem" of the subsystem "Transports" (Fig.4.3b). And to add here needs not only the redundant stations to the current one but the same current one with its external IP, that is some loop. Further this configurations will have been stored into the generic DB of the redundant station, and from this time the DBs will be used for that all redundant station creation. Then there is important to make on that stage all needed changes into the generic DB and about this project in general!

Next for the concrete station, with copy of the generic DB, we configure its specific parameters into the tab "Redundancy" of the main page (Fig.4c), which will be stored into the configuration file.

After that all next configurations of redundancy perform into the tab "Redundancy" of proper subsystem, "Data acquisition" (Fig.4.5b) or "Archives" (Fig.4.6b). If you will set the parameter "Local primary commands transfer" (Fig.4c) then the configurations, like to any other generic configurations, can be performed at any one from the stations and all the performed changes will be transferred to all other ones, sure if its are available.

Fig 4c. The tab "Redundancy" of the main page of the configuration of station.
Fig 4d. The tab "Tasks" of the main page of the configuration of station.

For OpenSCADA different working specific debug you may be necessary to enable addition-debugging messages generation, which you can set by select minimal messages level, into tab "Station", to "Debug (0)". As a result of this will emerge tab "Debug" (fig.4e) where available the objects counters for control to leaks, and also the table with incoming debug messages' categories list. Into the table you can select only needed debug messages sources and omit to overload the archiving messages subsystem and overall the system performance decrease. You can also select higher categories, up to root system category, that will disable detailed selection and enable all messages generation by the level or by overall system. For the debug messages observing you need to go subsystem "Archives" (fig. 4.6c), and for this provided button "See to messages". Selected debug mode and debug categories list can be standard stored to configuration file and on next boot the debug mode will be activated, this important primarily for the objects counters.

Fig. 4e. The tab "Debug" of the main page of the configuration of station.
Fig. 4f. The tab "Translations" of the main page of the configuration of station.

While examining the configuration pages of modular subsystems there will be described the general for all modules properties. However, it should be noted that each module can provide both: the additional tabs, and separate fields for the configuration of their own functioning for the pages, objects of which are inherited by modules. Information on the features and additions of the modules can be found in separate documentation for each of them.

4.1 Subsystem "DB"

The subsystem is the modular one and contains a hierarchy of objects shown in Figure 1.4. To configure the subsystem the root page of the subsystem "DB" containing the tab "Modules". Tab "Modules" (Fig. 4.1a) contains the list of modules in subsystem "DB", available at the station.

To modify the page's fields of this subsystem it may be required the super user's rights or the inclusion of your user to the "DB" group.

Fig. 4.1a. The tab "Modules" of the root page of the subsystem "DB".

Each module of the "DB" subsystem provides the configuration page with the following tabs: "DB" and "Module". "DB" tab (Fig. 4.1b) contains the list of databases registered in the module and the flag of the sign of full deleting of the database when making the delete command. In the context menu of the databases' list the user is provided with an opportunity to add, delete and move to the desired database. The "Module" tab contains information about the module of the "DB" subsystem (Fig.4.1c):

  • Module — module's identifier.
  • Name — module's name.
  • Type — module's type, subsystem's identifier, which contains the module.
  • Source — shared library — the source of the module.
  • Version — module's version.
  • Author — module's author.
  • Description — module's short description.
  • License — license agreement of module's distribution.
Fig. 4.1b. Tab "DB" of the module of the subsystem "DB".
Fig. 4.1c. Tab "Module" of the module of the subsystem "DB".

Each database contains its own configuration page with the tabs "Data base", "Tables" and "SQL", in case SQL-requests support. Besides the basic operations you can copy the contents of the DB by means of the standard function for the copying the objects in the configurator. The copying operation the DB contents involves the copying of the original database to the destination database, and the contents of the destination database is not cleared before the copy operation. Copying the contents of database is made only when the both databases are enabled, otherwise it will run a simple copy of the object of the database.

Tab "Data base" (Fig.4.1d) contains the main configuration options of the DB as follows:

  • Section "State" — contains the properties which characterize the DB status:
    • Enable — DB status "Enable".
    • Accessible tables — list of tables that are in the database. Context menu of the property gives the opportunity to physically remove the tables from the database.
    • Load program from this DB — command to make load from this database. Can be used when transferring data in the database between stations. For example, you can save the section of one station in the export database, physically to move the DB to another station and connect it in this subsystem, and call this command.
  • Section "Config" — contains the following configuration fields:
    • ID — contains the information on the DB identifier.
    • Name — specifies the DB name.
    • Description — short description of the DB and it's appointment.
    • Address — DB address in the specific for the database type (module) in the format. Format Description of the DB address recording format is usually available in the tooltip for this field.
    • Code page — indicates the code page, in which the text values of database are stored and provided. The value of the code page of database in conjunction with the internal code page of the station is used for clear transcoding of the text message while exchange between the station and the database.
    • To enable — indicates the state "Enable", in which to set the DB when start.

Tab "Tables" (Fig.4.1e) contains the list of the opened pages. In normal mode of the program operation this tab is empty, because after the completion of working with tables the program closes them. The presence of opened tables tells that the program is now working with tables or tables are opened by the user to examine their contents. In the context menu of list of opened tables you can open the table for study (the command "Add"), close the opened page (the command "Delete") and proceed to examination of the contents of the table.

Tab "SQL" (Fig.4.1f) allow only for data bases which support SQL-requests, and contains field to request enter, button to request send and table to result. To control the request transaction context provided by separate configuration field.

Fig. 4.1d. Tab "Data base" of a DB of the module of the subsystem "DB".
Fig. 4.1e. Tab "Tables" of a DB of the module of the subsystem "DB".
Fig. 4.1f. Tab "SQL" of a DB of the module of the subsystem "DB".

Page of the examination of the contents of the table contains only one tab, "Table". Tab "Table" (Figure 4.1g) contains the field of the name of the table and the table with the contents. Table of contents provides the following functions:

  • table's cells content redaction;
  • addition of the line;
  • deleting of the line.
Fig. 4.1g. Tab "Table" of a DB table of the module of the subsystem "DB".

4.2 Subsystem "Security"

The subsystem is not modular one. To configure the subsystem the root page of the subsystem "Security" is provided, which contains the tab "Users and Groups". Tab "Users and Groups" (Figure 4.2a) contains the list of users and users' groups. Users in the group "Security" and with the rights of the privileged user can add, delete the user or group of users. All other users can go to the page the user or the users' group.

Fig. 4.2a. Tab "Users and Groups" of the root page of the subsystem "Security".

To configure the user it is provided the page containing only the tab "User" (Fig.4.2b). Tab contains the configuration data of the user's profile, which can be changed by the user itself, the user of the "Security" group or the privileged user:

  • Name — information about the name (identifier) of the user.
  • Full name — specifies the full name of the user.
  • Description — description and random information about the user.
  • Password — the field to change the user's password. It always displays "*'*".
  • Language — user's language for the dynamic messages context and for text to speech of the user interface. Empty to the system language.
  • User picture — specifies the user's picture. Picture can be loaded and saved.
  • Groups — the table with a list of user groups of the station and with the sign of identity of the user to the groups.
  • User DB — DB address for the user's data storage.
Fig. 4.2b. Tab "User" of the user's page of the subsystem "Security".

To configure the user's group it is provided the page containing only the tab "Group" (Fig.4.2c). Tab contains the configuration data of the group's profile, which can be changed only by the privileged use:

  • Name — information about the name (identifier) of the user's group.
  • Full name — specifies the full name of the user's group.
  • Description — description and random information about the users group.
  • Users — list of users included in this group. With the context menu of the list you can add or remove the user in the group.
  • User group DB — DB address for the user group's data storage.
Fig. 4.2c. Tab "Group" of the user's group page of the subsystem "Security".

4.3 Subsystem "Transports"

The subsystem is the modular one and contains the hierarchy of objects shown in Figure 1.6. To configure the subsystem it is provided the root page of the subsystem "Transports", containing the tabs "Subsystem" and "Modules".

The tab "Subsystem" (Figure 4.3a) contains the configuration table of the external stations for a given OpenSCADA. External stations can be the system, user and both ones that is selected by the appropriate column. System's external stations are available only to the super user and are used by the components of the system purpose, for example, the mechanism of the horizontal redundancy and module DAQ.DAQGate. User's external stations are tied to the user who created them, and thus the list of user's external stations is individual for each user. User's external stations are used by the components of graphical interface, for example, UI.QTCfg, UI.WebCfgD and UI.Vision. In the table of the external stations it is possible to add and delete records about the station, as well as their modification. Each station contains the following fields:

  • Id — identifier of the external station.
  • Name — the name of the external host.
  • Transport — the combobox of the subsystem's module "Transports" for the using of it when access to the external station.
  • Address — address of the external station if the format, specific to the chosen in the previous field of the module of the subsystem "Transports".
  • User — the name/identifier of the user of the external station on behalf of whom to perform the connection.
  • Password — password of the user of the external station.
  • Mode — The host mode: "User", "System", "User and System".
  • Uprising level — Uprising hosts level of the pointed host for possibility of the requests re-transmission.

Tab "Moules" tab (fig. 4.1b) contains the list of modules in subsystem "Transports" and it is identical for all modular subsystems.

Fig. 4.3a. Tab "Subsystem" of the root page of the subsystem "Transports".

Each module of the subsystem "Transports" provides the configuration page with the tabs "Transports" and "Module". The tab "Transports" (Fig.4.3b) contains the list of incoming and outgoing transports registered in the module. The context menu of lists of transports provides the user with the possibility to add, delete and move to the desired transport. On the "Module" tab it is provided the information about the module of subsystem "Transports" (Fig. 4.1d), whose structure is identical for all modules.

Fig. 4.3b. Tab "Transports" of the module of the subsystem "Transports".

Incoming transport (fig.4.3c) includes:

  • Section "State" — contains the settings that characterize the state of the transport:
    • Status — information on the current transport's status and statistics of its work.
    • Running — state of the transport "Running".
    • Transport DB — DB address to store the transport's data.
    • Active connections — active and actual connections list of the input transport.
  • Section "Config" — directly contains the configuration fields:
    • ID — information on the transport's identifier.
    • Name — specifies the transport's name.
    • Description — brief description of the transport and its appointment.
    • Address — transport's address in the specific for the type of transport (module) format. Description of the record format addresses transport, as a rule, is available in the tooltip for this field.
    • Transport protocol — indicates the transport protocol module (subsystem "Transport protocols") that should work in conjunction with the input transport. Ie the received unstructured data this module will sent to the structuring and processing to the specified module of the transport protocol.
    • To start — indicates the status of "Running", in which to transfer the transport at startup.
Fig. 4.3c. Tab "Transport" of the page of an incoming transport of the module of the subsystem "Transports".

Outgoing transport (Fig. 4.3d) contains:

  • Section "State" — contains the settings that characterize the state of the transport:
    • Status — information on the current transport's status and statistics of its work.
    • Running — state of the transport "Running".
    • Transport DB — DB address to store the transport's data.
  • Section "Config" — directly contains the configuration fields:
    • ID — information on the transport's identifier.
    • Name — specifies the transport's name.
    • Description — brief description of the transport and its appointment.
    • Address — transport's address in the specific for the type of transport (module) format. Description of the record format addresses transport, as a rule, is available in the tooltip for this field.
    • To start — indicates the status of "Running", in which to transfer the transport at startup.
Fig. 4.3d. Tab "Transport" of the page of an outgoing transport of the module of the subsystem "Transports".

Outgoing transport, in addition, provides the tab for forming the user request via this transport (Fig.4.3e). The tab is provided for setting communication, as well as for debugging the protocols and includes:

  • Time (ms) — information about the time taken for request and receiving the answer.
  • Mode — indicates the regime of data from the following list: "Binary", "Text(LF)", "Text(CR)", "Text(CR/LF)", in which the request will be formed and the answer will be provided. In binary mode data is recorded in pairs of numbers in hex, ie bytes, separated by spaces.
  • Timeout wait — sign for expect by timeout when a response is received. Many systems in response to various protocols (HTTP) are send the response data in several pieces. Without this flag will be received and displayed only the first piece. When this flag will be set all the pieces awaiting an answer, until the lack of data during the timeout the transport elapsed .
  • Input buffer size, bytes — control of the input buffer size and the reading disabling (0) at all, only writing.
  • Send — command to send a request.
  • Request — contains the request in the selected mode of data representing.
  • Answer — provides the answer in the selected mode of data representing.
Fig. 4.3e. Tab "Request" of the page of an outgoing transport of the module of the subsystem "Transports".

Both incoming and outgoing transports also contain tab "IO log" (Fig.4.3f). The tab is provided for generic control, observing and learning the traffic through the transports and includes the log length field and the same text area of the log. For the log disable you can the log length field set to zero.

Fig. 4.3f. Tab "IO log" of the page of an incoming transport of the module of the subsystem "Transports".

4.4 Subsystem "Transport protocols"

The subsystem is modular. To configure the subsystem the root page of the subsystem "Transport Protocols" is provided, it contains tab "Modules". The tab "Modules" (Fig. 4.1b) contains the list of modules in subsystem "Transport Protocols" and is identical for all modular subsystems.

Each module of subsystem "Transport Protocols" provides configuration page with the only one tab — "Module". On the tab "Module" there is the information on the module of subsystem "Transport Protocols" (Fig. 4.1d), which structure is identical for all modules.

4.5 Subsystem "Data acquisition"

The subsystem is modular one and contains the hierarchy of objects shown in Fig.1.3. To configure the subsystem the root page of subsystem "Data acquisition" is provided, which contains the tabs "Redundancy", "Template libraries" and "Modules".

To obtain access to modify the objects of this subsystem the user of the group "DAQ" or the rights of the privileged user are required.

As a redundancy object of the subsystem "Data Acquisition" there used the object of controller for which the redundancy process performs that functions:

  • Redundancy of the data acquisition mechanism. Typically, this function is realized without special arrangements by simply running of the parallel redundancy stations with the same configuration and working independently. However, in the case at the station, which works as PLC, such approach is unacceptable because of the simultaneous making of control actions and the absence of synchronization of calculators' data.
  • Compensation of the data loss on the time of the node stop with the redundant node archive. There are two mechanisms of compensation. The first and the main mechanism implements the loading of the sections of the archive from the redundant station at the time of the station startup in general or of individual controller's objects. The section of the archive is requested from the moment of the last record in the local archive and till the current time. The depth of the request is limited by the indicating of the limit time in the configuration of the redundancy. The second, complementary mechanism, performs the filling of the "holes" in the archive at the time of the actual user's request to the data. Such an approach on the one hand allows to make the predictable in time synchronization at startup and on the other hand it's actually eliminates the data loss in the case of working at least one station during the entire time.
  • Load distribution of data acquisition between the nodes. When creating complex allocated systems there can be an important question of predicting and optimizing of the overall system performance. Taking into account these problems the redundancy mechanism provides the execution of tasks of data acquisition of individual sources (OpenSCADA controllers) only at one station. The other stations' tasks would go to data synchronization mode with the executive station. In the case of loss of the connection with the executive station the task of the local data acquisition is started. It's also provided the possibility of optimal the load distribution of the execution of data acquisition task's of the controllers' group between the stations.
  • Optimization of the load on the external data sources through the data request from an external source by the only one node. In practice, we often meet highly loaded data sources or interfaces of access to the data sources, for which even the data acquisition by one station can be a problem and would require reducing the acquisition periodicity, i.e. data quality. The mechanism of redundancy, besides the load distribution between the stations as described above allows you to remove an additional load form the data source and its interfaces, thereby improving the quality of data. Writing to attributes of the controller's object under redundancy causes to the modification request sending to the master one, that is through it.
  • Prevention of some differences of data on different nodes associated with the mismatch of moments of time at the independent acquisition of data by individual nodes by means of receiving the data from the station with an active controller. In systems of high accountability under the redundancy there should be excluded or minimized the differences in the data at different stations, that means the real acquisition of data by one station and synchronization with these data of other ones.

Tab "Redundancy" (Fig. 4.5a) presented only if at last one station pointed into the redundancy and contains the configuration of redundancy of data sources of subsystem "Data acquisition" with the following settings:

  • Restore data depth time (hours) — indicates the maximum depth of archival data to restore from the archive of the remote station when start up in hours (0-12).
  • Controllers — contains the table with the list of controllers, available for redundancy, and their current status:
    • Controller — full controller's ID;
    • Name — controller's name;
    • Started — the sign of the controller's execution on the local station;
    • Redundant — redundancy mode of the controller, you can select it from the list:
      • "Off" — absolutely independent working of the controller's object.
      • "Asymmetric" — full redundancy with the allowed controller's object configuration of the remote station and without tries to generalize its.
      • "Only alarms" — in fact it is working without a redundancy, but with alarms oppressing from the reserve controller's object to exclude a duple messages into the alarms.
    • Preferable run — configuration of the preferred execution at the specified station can be changed; reserved values:
      • <High Level> — execution at the station with the highest level.
      • <Low Level> — execution at the station with the lowest level.
      • <Optimal> — the choice for the execution of the least loaded station.
    • Remoted — sign indicating the execution of the controller on the remote station and work the local station in mode with a remote data synchronization.
Fig. 4.5a. Tab "Redundancy" of the subsystem "Data acquisition".

The tab "Template libraries" (Fig.4.5b) contains the list of libraries of templates for the parameters of this subsystem. In the context menu of the list of template libraries the user can add, delete and move to the desired library. The tab "Modules" (Fig. 4.1b) contains the list of modules in the subsystem "Transports" and is identical for all modular subsystems.

Fig. 4.5b. Tab "Template libraries" of the subsystem "Data acquisition".

Each template library of subsystem "Data acquisition" provides the configuration page with the tabs "Library" and "Parameter templates". Tab "Library" (fig. 4.5d) contains the basic settings of the library:

  • Section "State" — contains properties that characterize the state of the library:
    • Accessing — state of library "Accessing".
    • Library DB — address of the database for data storage of the library and templates.
    • Date of modification — date and time for the object last modification.
  • Section "Config" — directly contains the configuration fields:
    • ID — information on the ID of the library.
    • Name — specifies the name of the library.
    • Description — short description of the library and its purpose.

Tab "Parameter templates" (Fig.4.5d) contains the list of templates in the library. In the context menu of the list the user can add, delete and move to the desired template.

Fig. 4.5c. Main tab of the configuration of a template library of the subsystem "Data acquisition".
Fig. 4.5d. Tab of the list of templates of a template library of the subsystem "Data acquisition".

Each template of the template library provides the configuration page with the tabs "Template" and "IO". The tab "Template" (Figure 4.5e) contains the basic settings of the template:

  • Section "State" — contains properties that characterize the state of the template:
    • Accessing — state of template "Accessing".
    • Used — counter of the template's using. Allows you to determine whether the template is used and, consequently, the ability to edit the template.
    • Date of modification — date and time for the object last modification.
  • Section "Config" — directly contains the configuration fields:
    • ID — information on the ID of the template.
    • Name — specifies the name of the template.
    • Description — short description of the template and its purpose.
Fig. 4.5e. Main configuration tab of a parameters template of the subsystem "Data acquisition".

The tab "IO" (Fig.4.5f) contains the configuration of attributes (IO) of templates and the program of template on the one of languages of the user programming of OpenSCADA, for example, DAQ.JavaLikeCalc.JavaScript. To the table of attributes of template user can, through the context menu, add, insert, delete, move up or down the record of attribute, as well as edit the attribute's fields:

  • Id — ID of the attribute.
  • Name — the name of the attribute.
  • Type — select the value's type of the attribute from the following: "Real", "Integer", "Boolean", "String", "Text", "Object".
  • Mode — select the mode from list: "Input", "Output". Typically used to indicate the direction of data transmission through link. Ie, values for "Input" data link will only be obtained, and for the "Output" will also be transferred, in the case of modification.
  • Attribute — mode of the parameter's attribute, implemented based on a template from the list: "No attribute" ,"Read Only","Full access". For the attributes of a template, in which this field is set, it will be created an appropriate attribute in the controller's parameter of this subsystem.
  • Configure — configuration mode of the attribute in the configuration tab of a template of the controller's parameter of this subsystem from the list: "Variable", "Constant", "Link". In "Constant" and "Link" modes tab in the configuration tab of the template will be added these attributes to set the constant or specify an external link of the parameter.
  • Value — attribute's default value or template of the links to access by the link. The format of the link's template depends on the component that uses it. Usually for the module DAQ.LogicLev the link's template is written the following way: {Parameter}|{attribute}. Field {Parameter} — specifies the parameter's name as the attribute's container. Attributes with the equal value {Parameter} will be grouped and will be appointed only by the indication of attributes' container, and individual attributes will be associated with the attributes of the container in accordance with the field {attribute}.

The syntax of the language of the template's program you can see in the documentation of the module, providing an interpreter of the chosen language. For example, a typical user programming language of OpenSCADA — DAQ.JavaLikeCalc.JavaScript.

Fig. 4.5f. Configuration tab of attributes and a template's program of the subsystem "Data acquisition".

Each module of the subsystem "Data acquisition" provides the configuration page with the tabs "Controllers" and "Module". The tab "Controllers" (Fig.4.5g) contains the list of controllers, registered in the module. In the context menu user can add, delete and move to the desired controller. The tab "Module" provides information about the module of the subsystem "Data acquisition" (Fig. 4.1d), which structure is identical for all modules.

Fig. 4.5g. Tab "Controllers" of the module of the subsystem "Data acquisition".

Each controller contains its own configuration page with the tabs "Controller" and "Parameters".

The tab "Controller" (Fig.4.5h) contains the basic settings. The structure of these settings may differ slightly from one module of this subsystem to another, as you can find in the own documentation of modules. As an example, let's examine the settings of the controller in the module of the controller of logic DAQ.LogicLev:

  • Section "State" — contains the properties, which characterize the state of the controller:
    • Status — specifies the controller's status. In our case, the controller is running and the computation time is 425 microseconds.
    • Enable — the state of the controller "Enable". When enabled, the controller provides the possibility of creating the parameters and their configuration.
    • Run — the state of the controller "Run". The running controller performs the physical data acquisition and/or includes mechanisms for access to these data.
    • Controller DB — the address of the database for data storage of the controller and its parameters.
  • Section "Config" — directly contains the configuration fields:
    • ID — information on the controller's identifier.
    • Name — specifies the controller's name.
    • Description — brief description of the controller and its purpose.
    • To enable — indicates the status of "Enable" in which to transfer the controller at startup.
    • To start — indicates the status of "Run" in which to transfer the controller at startup.
    • Parameters tables — names of tables that store the parameters of different types (refers to parameter objects of data acquisition).
    • Calc schedule — defines a periodic or scheduled character of calculations. In our example this one second of calculation template.
    • Request task priority — sets the priority of data acquisition of this controller. It is used when scheduling the operating system tasks. In the case of proper access availability this field includes the planning of the controller's task in real time and with the specified priority otherwise it modifies parameter "nice" of the task.
Fig. 4.5h. Main configuration tab of a controller of the subsystem "Data acquisition".

"Parameters" tab (Fig.4.5i) contains a list of parameters in the controller, select the type of parameters that are created by default, as well as information on the total number and the number of enabled parameters. In the context menu user can add, delete and move to the desired parameter.

Fig. 4.5i. Tab "Parameters" of the configuration page of a controller of the subsystem "Data acquisition".

"Diagnostic" tab (Fig.4.5j) contains diagnostic messages form by the data source. More data sources is external devices with accessing to the data by a network connection or a system bus then there possible different emergency situation on access to the data. Print all its to field "State" of controller object impossible due it display only current access data state. Due the diagnostic you can trace all emergency situation at messages view, which forming by the controller object for specified period of time and by selected messages level. Besides to certain diagnostic information some modules of data sources can provide here debug exchange dumps, on messages level "Debug (0)".

Fig. 4.5j. Tab "Diagnostic" of the configuration page of a controller of the subsystem "Data acquisition".

Parameters of the controllers of subsystem "Data acquisition" provides the configuration page with the tabs "Parameters", "Attributes", "Archiving" and "Template config". The tab "Template config" is not standard, but it is present only in the parameters of modules of subsystem "Data acquisition", which implement the mechanisms of working under the template in the context of the data source, which they are served, for logical type. In this review this tab is included for logical completeness of the review of the configuration of templates of parameters of subsystem "Data acquisition" and as the final stage — using.

The tab "Parameter" (Fig.4.5k) contains the main settings:

  • Section "State" — contains the properties, which characterize the state of the parameter:
    • Type — specifies the type parameter. Type of disabled parameter can be changed if there are multiple types.
    • Enable — the state of the parameter "Enable". Enabled parameter is used by the controller fro data acquisition.
  • Section "Config" — directly contains the configuration fields:
    • ID — information on the parameter's identifier.
    • Name — specifies the parameter's name.
    • Description — brief description of the parameter and its purpose.
    • To enable — indicates the status of "Run" in which to transfer the parameter at startup.
    • Parameter template — the address of the previously discussed template.

The tab "Attributes" (Fig.4.5l) contains the parametr's attributes and their values in accordance with the configuration of the used template and calculation of its program.

The "Archiving" tab (Fig.4.5m) contains the table with the attributes of a parameter in the columns and the archivers in rows. The user can set the archiving for the desired attribute with the required archiver simply by changing the cell at the intersection.

The "Template config" tab (Figure 4.5n) contains the configuration fields in accordance with the template. In this example it is the group link on the external parameter. This link can be set simply by pointing the way to the parameter if the flag "Only attributes are to be shown" is not set, or to set the addresses of the attributes separately in the case if the flag is set. Sign "(+)", at the end of the address signals about successful linking and presence of the target.

Fig. 4.5k. Main configuration tab of a parameter of a controller of the subsystem "Data acquisition".
Fig. 4.5l. Tab "Attributes" of a parameter of a controller of the subsystem "Data acquisition".
Fig. 4.5m. Tab "Archiving" of a parameter of a controller of the subsystem "Data acquisition".
Fig. 4.5n. Tab "Template config" of a parameter of a controller of the subsystem "Data acquisition".

4.6 Subsystem "Archives"

The subsystem is modular and contains the hierarchy of objects shown in Fig.1.5. To configure the subsystem the root page of the subsystem "Archives" is provided, it contains tabs: "Redundancy", "Messages archive", "Value archives" and "Modules".

To gain the access to modify the objects of this subsystem the user of the group "Archive" or the privileged user rights are required.

As a redundancy object of the subsystem "Archives" there used the object of messages archivator for which the redundancy process performs that functions:

  • Redundancy of the data acquisition mechanism. It's means of messages combination from the redundant stations by the three mechanisms:
    • in the main cycle of redundancy there performs a request for new messages of the archivator on the master station from a last message time of the redundant object;
    • writing messages to the redundant archivator causes to redirection of the writing request to to the master station both for new and rewriting messages (also the messages write locally);
    • rewriting messages to the master archivator causes to the messages sending for all redundant stations.
  • Compensation of the data loss on the time of the node stop with the redundant node archive. There provides only an initial synchronization by loading/reloading of parts of the archive from the redundant station, at the station starting in general. The archive's part requested from the moment of the last record into the local archive minus value of the parameter of the depth of the forced reloading and till the current time. Changed messages to more depth from the pointed should be lost on the started station!
  • Load distribution of data acquisition between the nodes. When creating complex allocated systems there can be an important question of predicting and optimizing of the overall system performance. Taking into account these problems the redundancy mechanism provides the execution of tasks of archivation of individual archivators only at one station. The other stations' tasks would go to data synchronization mode with the executive station. In the case of loss of the connection with the executive station the task of the local archivation is started. It's also provided the possibility of optimal the load distribution of the execution of archivation task's of the archivators' group between the stations.
  • Restoring of the alarms primacy. For alarming messages, negative level, at its writing performs an additional processing for the active alarms, that is only old — original ones allow for rewriting.

Redundancy of the value archivators doesn't provided directly but that process does through data sources and the subsystem of "Data acquisition".

Tab "Redundancy" (Fig. 4.6a) presented only if at last one station pointed into the redundancy and contains the configuration of redundancy of messages archvators with the following settings:

  • Overtime of the reserve history reload at start, hours — points to the messages requesting depth from time of the last message into the local archive. Sometime that can be usable for reloading last messages if its can be potential changed-updated at the station down.
  • Message archivators — contains the table with the list of message archivators, available for redundancy, and their current status:
    • Archivator — full archivator's ID;
    • Name — archivator's name;
    • Started — the sign of the archivator's execution on the local station;
    • Redundant — redundancy mode of the archivator, enabling;
    • Preferable run — configuration of the preferred execution at the specified station can be changed; reserved values:
      • <High Level> — execution at the station with the highest level.
      • <Low Level> — execution at the station with the lowest level.
      • <Optimal> — the choice for the execution of the least loaded station.
    • Remoted — sign indicating the execution of the archivator on the remote station and work the local station in mode with a remote data synchronization.
Fig. 4.6a. Tab "Redundancy" of the subsystem "Archives".

The "Messages" tab (Fig.4.6b) contains the configuration of messages archive and the request form of messages from the archive.

Configuration of the messages archive is represented by the fields:

  • Messages buffer size — indicates the dimension of the area of memory reserved for the interim buffer of messages. Messages from the buffer are requested for viewing and archived with the messages archivers.
  • Archiving period (s) — the periodicity with which the archivers select messages from the buffer for their archiving.

The messages request form contains the configuration fields of the request and the table of results. Configuration fields of the request are:

  • Time, size (s) and level — specifies the request time, the size or the depth (in seconds) and the minimum level of messages (more than or equal).
  • Category pattern — specifies the category of the requested messages. In the category you can specify the elements of a sample of the template, namely, the characters '*' — for any string and '?' — for any character, as well as a regular expression enclosed between '/' (/mod_(System|LogicLev)/).
  • Archivators — indicates the messages archivators (separated by symbol ';'), for which the request is to be processed. If the value is missing, the request will be processed for the buffer and all archivers. If "<buffer>" is specified, then the request will be processed for the messages buffer.

The result table contains rows of messages with the following columns:

  • Time — message's time.
  • Category — message's category.
  • Level — message's level.
  • Message — message's text.
Fig. 4.6b. Tab "Messages" of the subsystem "Archives".

Tab "Value" (Fig.4.6c) contains the general configuration of value's archiving and the list of archives of values. In the context menu of the list of values the user has the opportunity to add, delete and move to the desired archive. The general configuration of archiving is represented by the fields:

  • Get data period (ms) — indicates the periodicity of the active archiving task. In fact, the highest level of detail or the minimum period of active archives is determined by this value.
  • Get data task priority level — sets the priority of task of active archiving. It is used when scheduling the operating system tasks. In the case of proper access availability this field includes the planning of the archiving task in real time and with the specified priority otherwise it modifies parameter "nice" of the task.
  • Variable timestamp force to current time — time-stamp of values, received on the active archivation, forces to current time, replaces the data source time.

The "Modules" tab (Fig. 4.1b) contains a list of modules in subsystem "Archives" and it is identical for all modular subsystems.

Fig. 4.6c. Tab "Values" of the subsystem "Archives".

Archive of values of subsystem "Archives" provides the configuration page with the tabs "Archive", "Archivators" and "Values".

Tab "Archive" (Fig.4.6d) contains the basic settings of the archive:

  • Section "State" — Contains the properties, which characterize the state of the archive:
    • Running — The state of the parameter "Running". Running archive collects data in the buffer and is served by the archivators.
    • Buffer start and end — Time of values begin and end into the buffer.
    • Archive DB — Database address for storing the archive's data.
  • Section "Config" — Directly contains the configuration fields:
    • ID — Information on the archive's identifier.
    • Name — Specifies the archive's name.
    • Description — Brief description of the archive and its purpose.
    • To start — Indicates the state "Running" in which to transfer the archive at startup.
    • Source — Indicates the type and address of the source. Type of source is indicated from the list: "Passive", "Passive param. attribute" or "Active param. attribute". Passive archive does not have an associated source of values, the data to the such archive the source transfers by itself, for example from users' calculate procedures on internal programming language. Types with the attribute of the parameter in the address field indicate the parameter of the subsystem "Data acquisition" as the source. Passive attribute of the parameter sends data to the archive by itself with its own period of data acquisition. Active attribute of the parameter is queried by the archiving task of this subsystem. Virtually all sources of real data process into passive mode of archiving as the data at once placed in the attribute parameter, sometimes by time stamp. But calculators (DAQ.JavaLikeCalc, DAQ.LogicLev, DAQ.BlockCalc) can only operate in active mode, archiving, because the data in the attribute parameter is updated only with their direct request, and are taken from the execution context. In the case of real data sources, the difference between active and passive mode of archiving by the fact that in the passive mode the source can put data into the archive by timestamp, and in active mode, the timestamp is always set to the current system time.
    • Data combining mode — Sets combining mode for data writing from highresolution buffer (for example, 1s) to lowresolution archivator (for example, 1min.), when into single point of the archivator placed several values from buffer (for example, 60). The modes implemented: "Moving average", "Single", "Minimum" and "Maximum".
    • Value type — Indicates the type of values which are stored in the archive from the list: "Boolean", "Integer", "Real", "String", "Int16", "Int32", "Int64", "Real(Float)" and "Real(Double)".
    • Buffer period (s) — Indicates the periodicity of values in the archive's buffer.
    • Buffer size (items) — Indicates the dimension and depth of the archive's buffer. The dimension is usually set in terms of 60 sec of the periodicity of the archiving task with the reserve.
    • Buffer hard time grid — Indicates the mode of the buffer. The hard grid mode involves the memory reservation for each value, but without the timestamp. This mode eliminates the possibility of packaging the adjacently-identical values, but also saves on storage of the timestamp. Otherwise, the buffer operates in the mode of storage the value and timestamp and supports the packaging of adjacently-identical values.
    • Buffer high time resolution — indicates the possibility of storing values at intervals up to 1 microsecond, differently the values can be stored at intervals up to 1 second.
    • Fill pass points to a last value — mostly the pass values fill by EVAL but sometime the source's data periodicity greater to the archive's one and it is normal.
Fig. 4.6d. Main configuration tab of a values archive of the subsystem "Archives".

Tab Archivators' (Fig.4.6e) contains the table with the configuration of the processing of the archive by the available archivers. Lines are available archivers, and the columns are the following parameters:

  • Archivator — information on the archiver's address.
  • Start — information on the archiver's state "Started".
  • Process — sign of the processing this archive be the archiver. The field is available for modification by the user.
  • Period (s) — information on the periodicity of the archiver.
  • Begin — date and time of the archive beginning in the archiver.
  • End — date and time of the archive ending in the archiver.
Fig. 4.6e. Tab "Archivators" of a values archive of the subsystem "Archives".

Tab "Values" (Fig.4.6f) contains the values request in the archive and the result as a table of values or image of the trend. Values request contains the fields:

  • Time — indicates the time of request. It contains two fields: the field of date + time and microseconds.
  • Size (s) — specifies the size or depth of the request in seconds.
  • Archivator — indicates values archiver for which the request is to be processed. If the value is missing, the request will be processed for the buffer and for all archivers. If the <buffer> is specified, then the request will be processed only for the archive's buffer.
  • Show trend — indicates the necessity for presentation of the archive's data in the form of a graph (trend), otherwise the result is presented in a table that contains only time and value. In the case of installation of this field the schedule is formed and displayed, in addition additional configuration fields of the image settings are appeared:
    • Picture size — indicates the width and height of the generated image in pixels.
    • Value scale — indicates the lower and upper limit of the scale of value. If both values are set to 0 or equal, then the scale will be determined automatically depending on the values.
Fig. 4.6f. Tab "Values" of a values archive of the subsystem "Archives".

Each module of the "Archives" subsystem provides configuration page with the tabs "Archivators" and "Module". The "Archivators" tab (Fig.4.6g) contains a list of messages and values archivers registered in the module. The context menu of the list provides user with possibility to add, delete and move to the desired controller. The "Module" tab contains information about the module of subsystem "Archives" (Fig. 4.1d), whose structure is identical for all modules.

Fig. 4.6g. Tab "Archivators" of the module of the subsystem "Archives".

Messages archivators contains their own configuration page with tabs "Archivator" and "Messages".

The "Archivator" tab (Fig.4.6h) contains the basic settings. The structure of these settings may differ slightly from one module of this subsystem to another as you can find in the own documentation of modules. As an example we shall examine the settings of the messages archiver from the module of the archive on the file system Arch.FSArch Settings:

  • Section "State" — contains the properties, hich characterize the archivers' state:
    • Running — archivers' state "Running". The running archiver processes the messages archive buffer and puts his data in its repository, but also it processes requests for access to data in the repository.
    • Archivator DB — database address for storing the archiver's data.
    • End — date + time of the last data in the archiver's repository.
    • Begin — date + time of the first data in the archiver's repository.
    • Archivator files size (kB) — information about the total size of the archiver's files with the data.
    • Archiving time (ms) — time spent on the archiving of messages archive data.
  • Section "Config" — directly contains the configuration fields:
    • ID — information on the archiver's identifier.
    • Name — indicates the archiver's name.
    • Description — brief description of the archiver and its purpose.
    • To start — indicates the status "Running", in which to transfer archiver at startup.
    • Message categories — list of categories of messages, separated by ';'. Messages matched with the templates or regular expressions of categories will be processed by the archiver. In the category you can specify the elements of a sample of the template, namely, the characters '*' — for any string and '?' — for any character, as well as a regular expression enclosed between '/' (/mod_ (System|LogicLev)/).
    • Message level — indicates the level of archiver's messages. Messages with a level greater than or equal to the specified one are processed by the archiver.
    • Address — address of the storage in the specific for the type of archiver (module) format. Format description usually available in the tooltip for this field. In the example it is the relative path to the storage directory.
  • Section "Additional options" — specialized section for module about the contents of which you can read in the documentation on the module.
Fig. 4.6h. Main tab of the configuration of a messages archiver of the subsystem "Archives".

The "Messages" tab (Fig.4.6i) contains the form of the messages request from the archive of the archiver:

  • Time, size (s) and level — specifies the request time, the size or the depth (in seconds) and the minimum level of messages (more than or equal).
  • Category pattern — indicates the category of the requested messages. In the category you can specify the elements of a sample of the template, namely, the characters '*' — for any string and '?' — for any character, as well as a regular expression enclosed between '/' (/mod_ (System|LogicLev)/).

The result table contains messages rows with the following columns:

  • Time — message time.
  • Category — message category.
  • Level — message level.
  • Message — message text.
Fig. 4.6i. Tab "Messages" of a messages requesting of a messages archiver of the subsystem "Archives".

Values archivers contains their own configuration page with tabs "Archivator" and "Archives".

The "Archivator" tab (Fig.4.6j) contains the basic settings. The structure of these settings may differ slightly from one module of this subsystem to another as you can find in the own documentation of modules. As an example we shall examine the settings of the messages archiver from the module of the archive on the file system Arch.FSArch Settings:

  • Section "State" — contains the properties, hich characterize the archivers' state:
    • Running — archivers' state "Running". The running archiver processes the messages archive buffer and puts his data in its repository, but also it processes requests for access to data in the repository.
    • Archiving time (ms) — information about the time spent on archiving data of the archives buffers. Periodicity of archiving is set in the field "Period archiving" in the section "Config" of the tab.
    • Archivator DB — database address for storing the archiver's data.
  • Section "Config" — directly contains the configuration fields:
    • ID — information on the archiver's identifier.
    • Name — indicates the archiver's name.
    • Description — brief description of the archiver and its purpose.
    • To start — indicates the status "Running", in which to transfer archiver at startup.
    • Address — address of the storage in the specific for the type of archiver (module) format. Format description usually available in the tooltip for this field. In the example it is the relative path to the storage directory.
    • Value period (s) — indicates the periodicity of values that are contained in the archiver's repository.
    • Period archiving (s) — indicates the periodicity of the archives buffers data archiving task. The dimension of the archives buffers in the time expression must not be less, and preferably somewhat greater then the periodicity of the of archiving task. Set zero period for disable using the archiver for buffer processing, only for direct write.
    • Selection priority — selection the archiver priority for "All" sources using mode. Set to zero for full the selection disable.
  • Section "Additional options" — specialized section for module about the contents of which you can read in the documentation on the module.
Fig. 4.6j. Main tab of the configuration of a values archiver of the subsystem "Archives".

The "Archives" tab (Fig.4.6k) contains a table with information about the archives being processed by the archiver. In the rows the table contains archives, and in the columns — the following information:

  • Archive — archive's name.
  • Period (s) — archive's periodicity in seconds.
  • Buffer size — buffer's dimension in units.
  • Files size (Mb) — specific to the module Arch.FSArch field with information about the total size of the files of the archiver's storage for the archive.

In the case of the module Arch.FSArch in this tab you can find the form of export the archiver's data.

Fig. 4.6k. Tab "Archives" of a values archiver of the subsystem "Archives".

4.7 Subsystem "User interfaces"

The subsystem is modular. To configure the subsystem the root page of the subsystem "User Interfaces" is provided, it contains the tab "Modules". The "Modules" tab (Fig. 4.1b) contains a list of modules of subsystem and it is identical for all modular subsystems.

Each module of the subsystem "User Interfaces" provides configuration page with the tabs "User Interface" and "Module". The "User Interface" tab (Fig.4.7a) provides the parameter for monitoring the "Running" status of the module, as well as the configuration sections specialized for the modules of this subsystem. On the "Module" tab there is an information about the module of the subsystem "User Interfaces" (Fig. 4.1d), which structure is identical for all modules.

Fig. 4.7a. Tab "User Interface" of the module of the subsystem "User Interfaces".

4.8 Subsystem "Specials"

The subsystem is modular. To configure the subsystem the root page of the subsystem "User Interfaces" is provided, it contains the tab "Modules". The "Modules" tab (Fig. 4.1b) contains a list of modules of subsystem and it is identical for all modular subsystems.

Each module of the subsystem "Specials" provides configuration page with the tabs "Special" and "Module". The "Special" tab (Fig.4.8a) provides the parameter for monitoring the "Running" status of the module, as well as the configuration sections specialized for the modules of this subsystem. On the "Module" tab there is an information about the module of the subsystem "Specials" (Fig. 4.1d), which structure is identical for all modules.

Fig. 4.8a. Tab "Special" of the module of the subsystems "Specials".

4.9 Subsystem "Modules scheduler"

The subsystem is not modular. To configure the subsystem the subsystem's page "Modules scheduler" is provided, it contains tab "Subsystem". The "Subsystem" tab (Fig.4.9a) contains the basic settings of the subsystem. The structure of the tab "Subsystem":

  • Path to shared libs (modules) — information about the location of the directory with the modules of OpenSCADA. It is set by the parameter <ModDir> of the station, of the configuration file.
  • Denied modules — the list, separated by ';' of modules that are denied for automatically connection and updating. It is set by the parameter <ModDeny> of the section of subsystem "sub_ModSched" of station of configuration file. List of denied modules has higher priority than allowed.
  • Allowed modules — the list, separated by ',', of modules that are authorized for automatic connection and renewal. The value of '*' is used to resolve all the modules. It is set by the parameter <ModAllow> of the section of subsystem, sub_ModSched, of the station of the configuration file.
  • Check modules period (sec) — indicates the periodicity of testing modules on the fact of their updating. Modules that are allowed for automatically connection and updating will be automatically updated.
  • Check modules now — command to check the modules on the fact of their updating. Modules that are allowed for automatically connection and updating will be automatically updated.
  • Shared libs (modules) — table with the list of shared libraries with the modules detected by OpenSCADA. Rows are modules, and in the columns there is an information about them:
    • Path — information on the full path to the shared library.
    • Time — information about the time the of last modification of a shared library.
    • Modules — information about the list of modules in a shared library.
    • Enable — state "Enable" of the shared library. Privileged users are provided with an opportunity to manually enable/disable the shared libraries by changing this field.
Fig. 4.9a. Main configuration tab of the subsystem "Modules scheduler".

4.10 Configuration file of OpenSCADA and parameters of command-line OpenSCADA execution

Configuration file of OpenSCADA is provided to store the program and general configuration of OpenSCADA-station. Only in the configuration file and through the command-line options you can specify the part of the key system parameters of the station, so familiarity with the structure of the configuration file is necessary for professionals who make solutions based on OpenSCADA.

The configuration file of OpenSCADA can be called somehow, but the oscada.xml name and derived from it are accepted. The configuration file is usually indicated when you start the station by the command-line option "--config=/home/roman/roman/work/OScadaD/etc/oscada_demo.xml". For the convenience of the calling the startup scripts of the station are created with the correct configuration file or used the project manager at start script openscada_start. For example script (openscada_demo) uses for the demo station execution:

#!/bin/sh
openscada --config=/etc/oscada_demo.xml $@

If the configuration file is not specified then the standard configuration file /etc/oscada.xml is used.

Structure of the configuration file based on the extensible markup language XML. Therefore the strict adherence to the rules of XML syntax is required. An example of the configuration file of OpenSCADA, with configuration nodes of most of the OpenASCADA components, is given below:

<?xml version="1.0" encoding="UTF-8" ?>
<OpenSCADA>
    <!--
    This is the OpenSCADA configuration file.
    -->
    <station id="AGLKS">
        <!--
        Describe internal parameters for station.
        The station is OpenSCADA program.
        -->
        <prm id="StName">AGLKS</prm>
        <prm id="StName_ru">АГЛКС</prm>
        <prm id="StName_uk">АГЛКС</prm>
        <prm id="WorkDB">SQLite.GenDB</prm>
        <prm id="LogTarget">10</prm>
        <prm id="Lang2CodeBase">en</prm>
        <prm id="SaveAtExit">0</prm>
        <prm id="SavePeriod">0</prm>

        <node id="sub_BD">
            <prm id="SYSStPref">0</prm>
            <tbl id="DB">
                <fld ID="GenDB" TYPE="SQLite" NAME="Generic DB" NAME_ru="Основная БД" NAME_uk="Основна БД" ADDR="St.db" CODEPAGE="UTF-8"/>
            </tbl>
        </node>

        <node id="sub_Security">
            <!--
            <tbl id="Security_user">
                <fld
                    NAME="root"
                    DESCR="Super user"
                    DESCR_ru="Супер пользователь"
                    DESCR_uk="Супер користувач"
                    PASS="openscada"/>
                <fld
                    NAME="user"
                    DESCR="System user"
                    DESCR_ru="Системный пользователь"
                    DESCR_uk="Системний користувач"
                    PASS=""/>
            </tbl>
            <tbl id="Security_grp">
                <fld
                    NAME="root"
                    DESCR="Super users groups"
                    DESCR_ru="Группа суперпользователей"
                    DESCR_uk="Група суперкористувачів"
                    USERS="root;user"/>
            </tbl>-->
        </node>

        <node id="sub_ModSched">
            <prm id="ModAllow">*</prm>
            <prm id="ModDeny"></prm>
            <prm id="ChkPer">0</prm>
        </node>

        <node id="sub_Transport">
            <!--
            <tbl id="Transport_in">
                <fld
                    ID="WEB_1"
                    MODULE="Sockets"
                    NAME="Generic WEB interface"
                    NAME_ru="Основной WEB интерфейс"
                    NAME_uk="Основний WEB інтерфейс"
                    DESCRIPT="Generic transport for WEB interface."
                    DESCRIPT_ru="Основной транспорт для WEB интерфейса."
                    DESCRIPT_uk="Основний транспорт для WEB інтерфейсу."
                    ADDR="TCP::10002:0"
                    PROT="HTTP"
                    START="1"/>
                <fld
                    ID="WEB_2"
                    MODULE="Sockets"
                    NAME="Reserve WEB interface"
                    NAME_ru="Резервный WEB интерфейс"
                    NAME_uk="Резервний WEB інтерфейс"
                    DESCRIPT="Reserve transport for WEB interface."
                    DESCRIPT_ru="Резервный транспорт для WEB интерфейса."
                    DESCRIPT_uk="Резервний транспорт для WEB інтерфейсу."
                    ADDR="TCP::10004:0"
                    PROT="HTTP"
                    START="1"/>
            </tbl>
            <tbl id="Transport_out">
                <fld
                    ID="testModBus"
                    MODULE="Sockets"
                    NAME="Test ModBus"
                    NAME_ru="Тест ModBus"
                    NAME_uk="Тест ModBus"
                    DESCRIPT="Data exchange by protocol ModBus test."
                    DESCRIPT_ru="Тест обмена по протоколу ModBus."
                    DESCRIPT_uk="Тест обміну за протоколом ModBus."
                    ADDR="TCP:localhost:10502"
                    START="1"/>
            </tbl>-->
        </node>

        <node id="sub_DAQ">
            <!--
            <tbl id="tmplib">
                <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" DB="tmplib_test2"/>
            </tbl>
            <tbl id="tmplib_test2">
                <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk=""
                    PROGRAM="JavaLikeCalc.JavaScript
cnt=5*i;"/>
            </tbl>
            <tbl id="tmplib_test2_io">
                <fld TMPL_ID="test2" ID="i" NAME="I" NAME_ru="I" NAME_uk="I" TYPE="4" FLAGS="160" VALUE="" POS="0"/>
                <fld TMPL_ID="test2" ID="cnt" NAME="Cnt" NAME_ru="Cnt" NAME_uk="Cnt" TYPE="4" FLAGS="32" VALUE="" POS="0"/>
            </tbl>-->

            <node id="mod_LogicLev">
                <!--
                <tbl id="DAQ">
                    <fld
                        ID="test2"
                        NAME="Test 2"
                        NAME_ru="Тест 2"
                        NAME_uk="Тест 2"
                        DESCR=""
                        DESCR_ru=""
                        DESCR_uk=""
                        ENABLE="1"
                        START="1"
                        PRM_BD="test2prm"
                        PERIOD="1000"
                        PRIOR="0"/>
                </tbl>
                <tbl id="test2prm">
                    <fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk=""
                        EN="1" MODE="2" PRM="test2.test2"/>
                </tbl>-->
            </node>

            <node id="mod_System">
                <!--
                <tbl id="DAQ">
                    <fld
                        ID="DataOS"
                        NAME="Data OS"
                        NAME_ru="Даные ОС"
                        NAME_uk="Дані ОС"
                        DESCR="Data of services and subsystems OS."
                        DESCR_ru="Данные сервисов и подсистем ОС."
                        DESCR_uk="Дані сервісів та підсистем ОС."
                        ENABLE="1"
                        START="1"
                        AUTO_FILL="0"
                        PRM_BD="DataOSprm"
                        PERIOD="1000"
                        PRIOR="0"/>
                </tbl>
                <tbl id="DataOSprm">
                    <fld SHIFR="CPU" NAME="CPU load" NAME_ru="Нагрузка CPU" NAME_uk="Навантаження CPU" DESCR="" DESCR_ru="" DESCR_uk=""
                        EN="1" TYPE="CPU" SUBT="gen"/>
                    <fld SHIFR="MEM" NAME="Memory" NAME_ru="Память" NAME_uk="Пам'ять" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" TYPE="MEM"/>
                </tbl>
                -->
            </node>

            <node id="mod_DiamondBoards">
                <!--
                <tbl id="DAQ">
                    <fld ID="Athena" NAME="Athena board" NAME_ru="Плата Athena" NAME_uk="Плата Athena" DESCR="" DESCR_ru="" DESCR_uk=""
                        ENABLE="1" START="0" BOARD="25" PRM_BD_A="AthenaAnPrm" PRM_BD_D="AthenaDigPrm" ADDR="640" INT="5"
                        DIO_CFG="0" ADMODE="0" ADRANGE="0" ADPOLAR="0" ADGAIN="0" ADCONVRATE="1000"/>
                </tbl>
                <tbl id="AthenaAnPrm">
                    <fld SHIFR="ai0" NAME="AI 0" NAME_ru="AI 0" NAME_uk="AI 0" DESCR="" DESCR_ru="" DESCR_uk="" EN="0" TYPE="0" CNL="0" GAIN="0"/>
                </tbl>
                <tbl id="AthenaDigPrm">
                    <fld SHIFR="di0" NAME="DI 0" NAME_ru="DI 0" NAME_uk="DI 0" DESCR="" DESCR_ru="" DESCR_uk="" EN="0" TYPE="0" PORT="0" CNL="0"/>
                </tbl>
                -->
            </node>

            <node id="mod_BlockCalc">
                <!--
                <tbl id="DAQ">
                    <fld ID="Model" NAME="Model" NAME_ru="Модель" NAME_uk="Модель" DESCR="" DESCR_ru="" DESCR_uk=""
                        ENABLE="1" START="1" PRM_BD="Model_prm" BLOCK_SH="Model_blcks" PERIOD="1000" PRIOR="0" PER_DB="0" ITER="1"/>
                </tbl>
                <tbl id="Model_blcks">
                    <fld ID="Klap" NAME="Klapan" NAME_ru="Клапан" NAME_uk="Клапан" DESCR="" DESCR_ru="" DESCR_uk=""
                        FUNC="DAQ.JavaLikeCalc.lib_techApp.klap" EN="1" PROC="1"/>
                </tbl>
                <tbl id="Model_blcks_io">
                    <fld BLK_ID="Klap" ID="l_kl1" TLNK="0" LNK="" VAL="50"/>
                    <fld BLK_ID="Klap" ID="l_kl2" TLNK="0" LNK="" VAL="20"/>
                </tbl>
                <tbl id="Model_prm">
                    <fld SHIFR="l_kl" NAME="Klap lev" NAME_ru="Полож. клапана" NAME_uk="Полож. клапана" DESCR="" DESCR_ru="" DESCR_uk=""
                        EN="1" IO="Klap.l_kl1"/>
                </tbl>
                -->
            </node>

            <node id="mod_JavaLikeCalc">
                <!--
                <tbl id="DAQ">
                    <fld ID="CalcTest" NAME="Calc Test" NAME_ru="Тест вычисл." NAME_uk="Тест обчисл." DESCR="" DESCR_ru="" DESCR_uk=""
                        ENABLE="1" START="1" PRM_BD="CalcTest_prm" FUNC="TemplFunc.d_alarm" SCHEDULE="1" PRIOR="0" ITER="1"/>
                </tbl>
                <tbl id="CalcTest_val">
                    <fld ID="in" VAL="0"/>
                    <fld ID="alrm" VAL=""/>
                    <fld ID="alrm_md" VAL="1"/>
                    <fld ID="alrm_mess" VAL="Error present."/>
                </tbl>
                <tbl id="CalcTest_prm">
                    <fld SHIFR="alrm" NAME="Alarm" NAME_ru="Авария" NAME_uk="Аварія" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" FLD="alrm"/>
                </tbl>
                <tbl id="lib">
                    <fld ID="TemplFunc" NAME="" NAME_ru="" NAME_uk="" DESCR="" ESCR_ru="" DESCR_uk="" DB="lib_TemplFunc"/>
                </tbl>
                <tbl id="lib_TemplFunc">
                    <fld ID="d_alarm" NAME="Digit alarm" NAME_ru="Авария по дискр." NAME_uk="Аварія за дискр" DESCR=""
                        FORMULA="alrm=(in==alrm_md)?"1:"+alrm_mess:"0";"/>
                </tbl>
                <tbl id="lib_TemplFunc_io">
                    <fld F_ID="d_alarm" ID="in" NAME="Input" NAME_ru="Вход" NAME_uk="Вхід" TYPE="3" MODE="0" DEF="" HIDE="0" POS="0"/>
                    <fld F_ID="d_alarm" ID="alrm" NAME="Alarm" NAME_ru="Авария" NAME_uk="Аварія" TYPE="0" MODE="1" DEF="" HIDE="0" POS="1"/>
                    <fld F_ID="d_alarm" ID="alrm_md" NAME="Alarm mode" NAME_ru="Режим аварии" NAME_uk="Режим аварії"
                        TYPE="3" MODE="0" DEF="" HIDE="0" POS="2"/>
                    <fld F_ID="d_alarm" ID="alrm_mess" NAME="Alarm message" NAME_ru="Сообщ. аварии" NAME_uk="Повід. аварії"
                        TYPE="0" MODE="0" DEF="" HIDE="0" POS="3"/>
                </tbl>-->
            </node>

            <node id="mod_Siemens">
                <!--
                <tbl id="DAQ">
                    <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
                        PRM_BD="test2prm" PERIOD="1000" PRIOR="0" CIF_DEV="0" ADDR="5" ASINC_WR="0"/>
                </tbl>
                <tbl id="test2prm">
                    <fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" TMPL="S7.ai_man"/>
                </tbl>-->
            </node>

            <node id="mod_SNMP">
                <!--
                <tbl id="DAQ">
                    <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk=""
                        ENABLE="1" START="1" PRM_BD="test2prm" PERIOD="1000" PRIOR="0" ADDR="localhost" COMM="public" PATTR_LIM="20"/>
                </tbl>
                <tbl id="test2prm">
                    <fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" OID_LS="system"/>
                </tbl>-->
            </node>

            <node id="mod_ModBus">
                <!--
                <tbl id="DAQ">
                    <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
                        PRM_BD="test2prm" PERIOD="1000" PRIOR="0" TRANSP="Sockets" ADDR="exlar.diya.org" NODE="1"/>
                </tbl>
                <tbl id="test2prm">
                    <fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1"
                        ATTR_LS="321:0:tst:Test"/>
                </tbl>-->
            </node>

            <node id="mod_DAQGate">
                <!--
                <tbl id="DAQ">
                    <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
                        PRM_BD="test2prm" PERIOD="1000" PRIOR="0" SYNCPER="60" STATIONS="loop" CNTRPRM="System.AutoDA"/>
                </tbl>-->
            </node>

            <node id="mod_DCON">
                <!--<tbl id="DAQ">
                    <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
                        PRM_BD="test2prm" PERIOD="1" PRIOR="0" ADDR="" REQ_TRY="1"/>
                </tbl>
                <tbl id="test2prm">
                    <fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" MOD_TP="0"
                        MOD_ADDR="1" CRC_CTRL="1"/>
                </tbl>-->
            </node>

            <node id="mod_ICP_DAS">
                <!--<tbl id="DAQ">
                    <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
                        PRM_BD="test2prm" PERIOD="1" PRIOR="0" BUS="1" BAUD="115200" LP_PRMS="" REQ_TRY="3"/>
                </tbl>
                <tbl id="test2prm">
                    <fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1"
                        MOD_TP="552985" MOD_ADDR="0" MOD_SLOT="1" MOD_PRMS="0"/>
                </tbl>-->
            </node>

            <node id="mod_OPC_UA">
                <!--<tbl id="DAQ">
                    <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
                        PRM_BD="test2prm" SCHEDULE="1" PRIOR="0" SYNCPER="60" ADDR="" EndPoint="opc.tcp://localhost:4841" SecPolicy="None"
                        SecMessMode="1" Cert="" PvKey="" AttrsLimit="100"/>
                </tbl>
                <tbl id="test2prm">
                    <fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" ND_LS=""/>
                </tbl>-->
            </node>

            <node id="mod_SoundCard">
                <!--<tbl id="DAQ">
                    <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" ENABLE="1" START="1"
                        PRM_BD="test2prm" CARD="" SMPL_RATE="8000" SMPL_TYPE="1"/>
                </tbl>
                <tbl id="test2prm">
                    <fld SHIFR="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" EN="1" CHANNEL="0"/>
                </tbl>-->
            </node>
        </node>

        <node id="sub_Archive">
            <prm id="MessBufSize">1000</prm>
            <prm id="MessPeriod">5</prm>
            <prm id="ValPeriod">1000</prm>
            <prm id="ValPriority">10</prm>
            <!--
            <tbl id="Archive_mess_proc">
                <fld
                    ID="StatErrors"
                    MODUL="FSArch"
                    NAME="Errors"
                    NAME_ru="Ошибки"
                    NAME_uk="Помилки"
                    DESCR="Local errors' archive"
                    DESCR_ru="Архив локальных ощибок"
                    DESCR_uk="Архів локальних помилок"
                    START="1"
                    CATEG="/DemoStation*"
                    LEVEL="4"
                    ADDR="ARCHIVES/MESS/stError/"/>
                <fld
                    ID="NetRequsts"
                    MODUL="FSArch"
                    NAME="Net requests"
                    NAME_ru="Сетевые запросы"
                    NAME_uk="Мережеві запити"
                    DESCR="Requests to server through transport Sockets."
                    DESCR_ru="Запросы к серверу через транспорт Sockets."
                    DESCR_uk="Запити до сервера через транспорт Sockets."
                    START="1"
                    CATEG="/DemoStation/Transport/Sockets*"
                    LEVEL="1"
                    ADDR="ARCHIVES/MESS/Net/"/>
            </tbl>
            <tbl id="Archive_val_proc">
                <fld
                    ID="1h"
                    MODUL="FSArch"
                    NAME="1hour"
                    NAME_ru="1час"
                    NAME_uk="1год"
                    DESCR="Averaging for hour"
                    DESCR_ru="Усреднение за час"
                    DESCR_uk="Усереднення за годину"
                    START="1"
                    ADDR="ARCHIVES/VAL/1h/"
                    V_PER="360"
                    A_PER="60"/>
            </tbl>
            <tbl id="Archive_val">
                <fld
                    ID="test1"
                    NAME="Test 1"
                    NAME_ru="Тест 1"
                    NAME_uk="Тест 1"
                    DESCR="Test 1"
                    DESCR_ru="Тест 1"
                    DESCR_uk="Тест 1"
                    START="1"
                    VTYPE="1"
                    BPER="1"
                    BSIZE="200"
                    BHGRD="1"
                    BHRES="0"
                    SrcMode="0"
                    Source=""
                    ArchS=""/>
            </tbl>-->
        </node>

        <node id="sub_Protocol">
        </node>

        <node id="sub_UI">
            <node id="mod_QTStarter">
                <prm id="StartMod">QTCfg</prm>
            </node>
            <node id="mod_WebCfg">
                <prm id="SessTimeLife">20</prm>
            </node>
            <node id="mod_VCAEngine">
                <!--
                <tbl id="LIB">
                    <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk=""
                        DB_TBL="wlib_test2" ICO="" USER="root" GRP="UI" PERMIT="436"/>
                </tbl>
                <tbl id="wlib_test2">
                    <fld ID="test2" ICO="" PARENT="/wlb_originals/wdg_Box" PROC="" PROC_ru="" PROC_uk="" PROC_PER="-1"
                        USER="root" GRP="UI" PERMIT="436"/>
                </tbl>
                <tbl id="wlib_test2_io">
                    <fld IDW="test2" ID="name" IO_VAL="Test 2" IO_VAL_ru="Тест 2" IO_VAL_uk="Тест 2" SELF_FLG=""
                        CFG_TMPL="" CFG_TMPL_ru="" CFG_TMPL_uk="" CFG_VAL=""/>
                    <fld IDW="test2" ID="dscr" IO_VAL="Test module 2" IO_VAL_ru="Тест модуля 2" IO_VAL_uk="Тест модуля 2" SELF_FLG=""
                        CFG_TMPL="" CFG_TMPL_ru="" CFG_TMPL_uk="" CFG_VAL=""/>
                </tbl>
                <tbl id="PRJ">
                    <fld ID="test2" NAME="Test 2" NAME_ru="Тест 2" NAME_uk="Тест 2" DESCR="" DESCR_ru="" DESCR_uk="" DB_TBL="prj_test2"
                        ICO="" USER="root" GRP="UI" PERMIT="436"/>
                </tbl>
                <tbl id="prj_test2">
                    <fld OWNER="/test2" ID="pg1" ICO="" PARENT="/wlb_originals/wdg_Box" PROC="" PROC_ru="" PROC_uk="" PROC_PER="-1"
                        USER="root" GRP="UI" PERMIT="436" FLGS="1"/>
                    <fld OWNER="/test2/pg1" ID="pg2" ICO="" PARENT="/wlb_originals/wdg_Box" PROC="" PROC_ru="" PROC_uk="" PROC_PER="-1"
                        USER="root" GRP="UI" PERMIT="436" FLGS="0"/>
                </tbl>
                <tbl id="prj_test2_incl">
                    <fld IDW="/prj_test2/pg_pg1" ID="wdg1" PARENT="/wlb_originals/wdg_Box"/>
                </tbl>-->
            </node>
        </node>

        <node id="sub_Special">
            <node id="mod_SystemTests">
                <prm id="Param" on="0" per="5" name="LogicLev.experiment.F3"/>
                <prm id="XML" on="0" per="10" file="/etc/oscada.xml"/>
                <prm id="Mess" on="0" per="10" categ="" arhtor="DBArch.test3" depth="10"/>
                <prm id="SOAttach" on="0" per="20" name="../../lib/openscada/daq_LogicLev.so" mode="0" full="1"/>
                <prm id="Val" on="0" per="1" name="LogicLev.experiment.F3.var" arch_len="5" arch_per="1000000"/>
                <prm id="Val" on="0" per="1" name="System.AutoDA.CPULoad.load" arch_len="10" arch_per="1000000"/>
                <prm id="DB" on="0" per="10" type="MySQL" addr="server.diya.org;roman;123456;oscadaTest" table="test" size="1000"/>
                <prm id="DB" on="0" per="10" type="DBF" addr="./DATA/DBF" table="test.dbf" size="1000"/>
                <prm id="DB" on="0" per="10" type="SQLite" addr="./DATA/test.db" table="test" size="1000"/>
                <prm id="DB" on="0" per="10" type="FireBird" addr="server.diya.org:/var/tmp/test.fdb;roman;123456" table="test" size="1000"/>
                <prm id="TrOut" on="0" per="1" addr="TCP:127.0.0.1:10001" type="Sockets" req="time"/>
                <prm id="TrOut" on="0" per="1" addr="UDP:127.0.0.1:10001" type="Sockets" req="time"/>
                <prm id="TrOut" on="0" per="1" addr="UNIX:./oscada" type="Sockets" req="time"/>
                <prm id="TrOut" on="0" per="1" addr="UDP:127.0.0.1:daytime" type="Sockets" req="time"/>
                <prm id="SysContrLang" on="0" per="10" path="/Archive/FSArch/mess_StatErrors/%2fprm%2fst"/>
                <prm id="ValBuf" on="0" per="5"/>
                <prm id="Archive" on="0" per="30" arch="test1" period="1000000"/>
                <prm id="Base64Code" on="0" per="10"/>
            </node>
        </node>
  </station>

</OpenSCADA>

Let's examine in details the structure of the configuration file. A configuration file can contain a configuration of several stations in the sections <station id="AGLKS"/>. To attribute set the identifier of the station. Using one or another section of the station at startup is specified by the command-line option --station=AGLKS. Section of the station directly contains parameters of the station and subsystems' sections. Configuration options of the section are written in the form <prm id="StName">AGLKS</prm>. Where in the attribute <id> the ID of the attribute is specified, and in the tag's body the value of parameter "AGLKS" is specified. The list of available options and their description for the station and all other sections can be obtained from the console by calling OpenSCADA with parameter --help.

Sections of subsystem (<node id="sub_DAQ" />) contains parameters of subsystem, sections of modules and sections of tables of reflections of the data of databases in the configuration file. Sections of modules (<node id="mod_DiamondBoards" />) contain the individual parameters of modules and sections of tables of reflection of the data of databases in the configuration file.

Sections of the tables of reflection of the data of databases are provided for placement in the configuration file records of DB tables for the OpenSCADA components. Let's examine the table of incoming transports "Transport_in" of subsystem transports (<node id="sub_Transport">) from the example of configuration file above. The table contains two records with fields: ID, MODULE, NAME, DESCRIPT, ADDR, PROT, START. After booting with this section and in general without the DB in the subsystem "Transports" of the "Sockets" module you'll see two input transports. Formats of the table's structures of the main components are included in the demo configuration files. For the details of the database's structure you should read the relevant documentation of modules or simple save the object into the configuration file.

The result of the command: # ./openscada_AGLKS --help

***************************************************************************
********** OpenSCADA v0.9 (Linux-3.2.0-4-amd64). *********
***************************************************************************

===========================================================================
==================== Generic options ======================================
===========================================================================
-h, --help              Info message about the program options.
    --config=<file>     The station configuration file.
    --station=<id>      The station identifier.
    --statName=<name>   The station name.
    --demon, --daemon   Start into the daemon mode.
    --pidFile=<file>    The file for the programm process ID place here.
    --coreDumpAllow     Set the limits for a core dump creation allow on the crash.
    --messLev=<level>   Process messages <level> (0-7).
    --log=<direct>      Direct messages to, by bitfield:
                          0x1 - syslogd;
                          0x2 - stdout;
                          0x4 - stderr;
                          0x8 - the messages archive.
----------- The config-file station '/' parameters -----------
StName     <nm> Station name.
WorkDB     <Type.Name> Work DB (type and name).
WorkDir    <path>       Work directory.
ModDir     <path>       Modules directory.
IcoDir     <path>       Icons directory.
DocDir     <path>       Documents directory.
MessLev    <level>     Messages <level> (0-7).
SelDebCats <list>       Debug categories list (separated by ';').
LogTarget  <direction> Direct messages to, by bitfield:
                          0x1 - syslogd;
                          0x2 - stdout;
                          0x4 - stderr;
                          0x8 - the messages archive.
Lang       <lang>       Work-internal language, like "en_US.UTF-8".
Lang2CodeBase <lang>    Base language for variable texts translation, two symbols code.
MainCPUs   <list>       Main used CPUs list (separated by ':').
ClockRT    <false>      Set for use REALTIME (else MONOTONIC) clock, some problematic with the system clock modification.
SaveAtExit <true>       Save the system at exit.
SavePeriod <sec>        Save the system period.
RdStLevel  <lev>        Level of redundancy current station.
RdTaskPer  <s>          Call period of the redundant task.
RdRestConnTm <s>        Restore connection timeout of try to the "dead" reserve stations.
RdStList   <list>       Redundant stations list, separated symbol ';' (st1;st2).
RdPrimCmdTr <0|1>       Enable the primary commands transfering to the redundant stations.

=================== Subsystem "Module scheduler" options =================
    --modPath=<path>   Modules <path> (/var/os/modules/).
------------ Parameters of section '/sub_ModSched/' in config-file -----------
ModPath  <path>        Path to shared libraries(modules).
ModAllow <list>        List of shared libraries allowed for automatic loading, attaching and starting (bd_DBF.so;daq_JavaLikeCalc.so).
                       Use '*' value for allow all modules.
ModDeny  <list>        List of shared libraries deny for automatic loading, attaching and starting (bd_DBF.so;daq_JavaLikeCalc.so).
ChkPer   <sec>         Period of checking at new shared libraries(modules).

========================= Subsystem "DB" options ========================
----------- The config-file station '/sub_BD/' parameters -----------
SYSStPref    <1>   Use station id prefix into generic (SYS) table.

======================= Subsystem "Security" options ====================

======================= Subsystem "Transports" options ==================

=============== Subsystem "Transport protocols" options =================

======================= Module <Protocol:HTTP> options =======================
---------- Parameters of the module section '/sub_Protocol/mod_HTTP/' in config-file ----------
AuthTime <min>      Life time of the authentication, minutes (default 10).

=================== Subsystem "Data acquisition" options ================
------------ Parameters of section '/sub_DAQ/' in config-file -----------
RdRestDtTm   <hour> Restore data archive depth from a reserve station after deadline.

======================== Subsystem "Archives" options ===================
------------ Parameters of section '/sub_Archive/' in config-file -----------
MessBufSize   <items>       Messages buffer size.
MessPeriod    <sec>         Message archiving period.
ValPeriod     <msec>        Values active archiving period.
ValPriority   <level>        Values task priority level of active archiving.
RdRestDtOverTm <hours>      Overtime of the reserve history reload at start in hours.

======================= Module <Archive:FSArch> options =======================
    --noArchLimit        Disable archives limit to the file number. Use for see archives mode, not work.

======================= Subsystem "Special" options =====================

======================= Module <Special:SystemTests> options =======================
---------- Parameters of the module section '/sub_Special/mod_SystemTests/' in config-file ----------
All tests main options:
  id           test's id;
  on           on test's flag;
  per          repeat period (sek).
       *** Test's options ***
1) Param        DAQ parameters test. Make read a parameter's attributes and configuration fields.
  1:name        DAQ parameter address
2) XML  XML file parsing test. Parse and show selected file structure.
  1:file        XML file
3) Mess Messages archive test. Periodic read new messages from archive, for selected archivator.
  1:arhtor      Archivator
  2:categ       Messages category pattern
  3:depth       Messages depth (s)
4) SOAttach     Attach/detach module test.
  1:name        Path to module
  2:mode        Mode (1-attach;-1-detach;0-change)
  3:full        Full attach(to start)
5) Val  Parameter attribute's value test.
Periodic make gathering for last value of selected attribute, and also gathering from archive for selected depth.
  1:name        Parameter attribute path
  2:arch_len    Archive value getting depth (s)
  3:arch_per    Archive value getting period (us)
6) DB   Full database test. Make:
  - make/open DB;
  - make/open table;
  - make multiply records for determined structure;
  - modify multiply records;
  - get and check values for multiply records;
  - modify record and table structure;
  - remove multiply records;
  - close/remove table;
  - close/remove DB.
  1:type        DB type
  2:addr        DB address
  3:table       DB table
  4:size        Records number
7) TrOut        Output and/or input transports test.
Make test for output transport by send the request to selected input transport.
  1:addr        Address
  2:type        Transport module
  3:req Request text
8) SysContrLang System control language test.
Make request to language elements by full path set.
Full path to language element have view </Archive/%2fbd%2fm_per>.
Full path contained two included path.
First </d_Archive/> is path to the node of the control tree.
Second </bd/m_per> is path to concrete node's element.
  1:path        Path to language element
9) ValBuf       Value buffer tests.
Contain 13 tests for all aspects of value buffer (subsystem "Archives").
10) Archive     Value archive allocation tests.
Contain 7(8) tests for value archivator for check to correct working the consecutive pack mechanism.
  1:arch        Value archive
  2:period      Values period (us)
  3:archtor     Archivator
11) Base64Code  Mime Base64 encoding algorithm tests.

===================== Subsystem "User interfaces" options ===============

======================= Module <UI:QTStarter> options =======================
----------- Qt debug commandline options ----------
    --noX11                Prevent Qt start, mostly for pure console.
    --sync                 Switches to synchronous mode X11 for debugging.
    --widgetcount          Prints debug message at the end about number of widgets
                           left undestroyed and maximum number of widgets existed at
                           the same time.
----------- Qt commandline options ----------------
    --qws                  With Qt for Embedded Linux makes this application the server.
    --style=<nm>           Sets GUI style to <nm> (windows, platinum, plastique, ...).
    --stylesheet=<path>    Sets styleSheet by <path> to file that contains.
    --session=<nm>         Restores from an earlier session <nm>.
    --reverse              Sets layout direction to Qt::RightToLeft.
    --graphicssystem=<nm>  Sets the backend to be used for on-screen widgets and QPixmaps (raster, opengl).
    --display=<nm>         Sets the X display name (default it is $DISPLAY).
    --geometry=<geom>      Sets the client geometry of the first window that is shown.
---------- Parameters of the module section '/sub_UI/mod_QTStarter/' in config-file ----------
StartMod  <moduls>    Start modules list (sep - ';').

======================= Module <UI:QTCfg> options =======================
---------- Parameters of the module section '/sub_UI/mod_QTCfg/' in config-file ----------
StartPath  <path>    Configurator start path.
StartUser  <user>    No password requested start user.

======================= Module <UI:Vision> options =======================
---------- Parameters of the module section '/sub_UI/mod_Vision/' in config-file ----------
StartUser   <user>    No password requested start user.
UserPass    <pass>    User password for no local start.
RunPrjs     <list>    Run projects list on the module start.
ExitLstRunPrjCls {0;1}Exit on last run project close (default = 1).
CachePgLife <hours>   Cached pages lifetime.
VCAstation  <id>      VCA station id ('.' - local).
RestoreTime <seconds> Restore connection time.

======================= Module <UI:WebVision> options =======================
---------- Parameters of the module section '/sub_UI/mod_WebVision/' in config-file ----------
SessTimeLife <time>      Time of the session life, minutes (default 10).

4.11 OpenSCADA projects

...

5 Links