Documents/FAQ - OpenSCADAWiki

# Documents/FAQ

English • ‎mRussian • ‎Українська

## 1 Political and conceptual

Q: OpenSCADA is unclear and hard to understand one. Why is this, and are available the manuals quickstart and advanced "How to ..."?
Re: OpenSCADA has described in detail, maximum structured and formalized. But the unclarity and the complexity impression is expected. Based on the project objectives, the program is extremely modular, which means that there are a lot of configuration and usage options. On the one hand, it complicates perception, but on the other - it increases the chances of "coverage" of your particular task. In addition, you must always remember that the complex and incomprehensible are all the unknown, which is really not necessarily so. And this psychological barrier must be overcome when studying anything new. The quick start manual is available here and the advanced "How to ..." also here.

Q: Does OpenSCADA work under QNX, FreeBSD, MS Windows, ...?
Re: OpenSCADA is developed in accordance with the principles of multiplatformity, based on the recognized world standard of POSIX and multiplatform libraries. However, due to resource constraints and the interests of the author and developers, the project is being run only on Linux. Further adaptation to other platforms is scheduled after the release of version 1.0 and at this time OpenSCADA is running on the hardware platforms x86, x86_64, ARM, MIPS and the software Android platform. Support for a platform will depend on the community's interest and the availability of a separate hardware and software platform maintainer.

Q: Is it possible to operate OpenSCADA by means of a usual WEB-browser?
Re: Yes, it is possible. For configuration of OpenSCADA from a WEB-browser there were created the modules UI.WebCfg and UI.WebCfgD; for the operational interfaces execution there was created the module UI.WebVision and for users HTML pages creation there was created the module UI.WebUser. Which all are called by the module Protocol.HTTP of the subsystem "Transport Protocols".

Q: Does the program support adding/removing/updating of modules while they are working (without a stop)?
Re: This feature is incorporated in the program and provided by the subsystem "Modules scheduler". In fact, updating modules can occur automatically after the detection of a new version of the module.

## 2 Architectural, using and short "How to ..."

### 2.1 OpenSCADA core

Q: How is multilingual support provided? Can I perform localisation in my native language?
Re: Multilingual support is provided on the basis of the standard of internationalisation I18n. And files of internationalisation of the modules are separated from a file of internationalisation of the program core, what provides high-grade support of independent distribution and development of the modules to OpenSCADA. Translation of the program in whole and modules in particular can be performed regardless of the availability of their source texts. For translation it is enough to receive *.po or *.pot files of the necessary component and to make translation of messages in the files in usual text editors, or some specialised program, from English to the necessary language. The actual files you can get from the source texts repository of the project in the program core folder "src/po" and folders "src/moduls/{subsys}/{module}/po" of the modules, and at the finish propose the results of the new translation for their including to the source texts repository of the project, writing to the project forum or the project author and main developer directly. PO-files are not used by the program directly, so you can use the command msgfmt -vo [openscada|oscd_{ModId}].mo {lang}.po to quickly check the translation result and correct formatting errors, then place the obtained MO-file [openscada|oscd_{ModId}].mo to the folder "/usr/share/locale/{lang}/LC_MESSAGES" of the actual OpenSCADA installation for the language lang.

Q: Can I create my own module for any subsystem?
Re: Yes, certainly. For the help in this task the document was created, where the architecture of the program core is practically completely described, its functions and API of the modules of various subsystems. In addition, a manual of the modules of OpenSCADA creation was created and for each subsystem created a module template for you can quickly create a new module.

Q: How is the sharing of access organized?
Re: A security scheme similar to the UNIX OS is used. Thus, the required components are the owner, members of the group and have access triad "rwxrwxrwx". In addition, this security mechanism is integrated in the OpenSCADA Control Interface, which in turn infiltrates the entire program.

Q: In which way in OpenSCADA possible to realize inter-modular connections?
Re: Inter-modular connections can be of the following types:

- The standard interface of access — is made by means of the virtual interface of the modular subsystems.
- The expanded interface of access — provides export of functions of the external interface by means of the exporter module, and the subsequent connection of the importer module to these functions by means of the functions "TModule::modFunc()".
- The user functions — any component of the program can register its own user functions ("TCntrNode::objFuncCall()"), which can be used further in an environment of the user programming of OpenSCADA.

Q: How to build OpenSCADA from the source code?
Re: Compilation of any software project from the source code, in the system language like C/C++ and the complexity above the average level, is a non-trivial task, especially for specific environments and environments for which adaptation has not yet been completed. To do this, you need the appropriate training and previous compilation experience. If you have the opportunity to get OpenSCADA assembled and in the form of ready-made packages for your environment, be sure to use it! If there are no packages in your environment or you deliberately want to build the program from the source to an adapted environment then use the manual for build from source. Adapting to assembly and work in other environments is a much more non-trivial task, especially for those very far away from POSIX or the concept of interplatform compatibility in general, it is a separate sub-project of OpenSCADA and involves a long process such as adaptation to Android, so you do not need to confuse it complexity with the simple compilation under an adapted environment!

### 2.2 DB

Q: Can I get data from DB directly?
Re: Yes, you can. For data bases (DB) that support SQL you can use the function SQLReq() of the related DB. Generically and for not SQL DBs you can use the access API to the DB layer of OpenSCADA in functions fieldStruct(), fieldSeek(), fieldGet(), fieldSet(), fieldDel() of the table of the DB.

### 2.3 Physical and logical-virtual data acquisition

Q: Where and how to perform additional logical processing of the attributes of parameters, including logical linking in one object?
Re: Any mathematical processing of the parameter attributes can be performed in the computing objects of the controller (modules of the "Data acquisition" subsystem), for example, in the block controller (DAQ.BlockCalc) and the object Controller based on the Java-like language (DAQ.JavaLikeCalc). In addition, the processing can be done at the logical level of the parameters (DAQ.LogicLev) in the subsystem "Data acquisition" modules specially designed for this (which work according to the parameter templates) or which contain the built-in realization of the mechanism of template parameters. That is, the user can form parameters with the required structure and algorithm of post-processing, forming logically related objects. The processing part can be executed directly at visualization (UI.VCAEngine). For data acquisition as a whole, see the document.

Q: Where are the scales of parameters and different signaling settings checked?
Re: Checking of scales and settings can be implemented by the controller itself, with signaling through the appropriate parameter attributes, as well as at the logical level of parameters, for "raw" data sources. In addition, this analysis can be done directly in the visual control area (VCA).

Q: Can I get (read and write) the value of the attribute of the data acquisition parameter, for example, from the UI procedure?
Re: The main interface for sharing the values of the data acquisition parameters with the elements or attributes of the corresponding part of OpenSCADA is the static link that is fastest. However, the internal language and the dynamic object model of the nodes of OpenSCADA allow you to dynamically access the objects of the attributes of the data acquisition parameters, for example, you can get the value of the attribute by the function get().

Q: How can I save-restore the modified data at the logical level?
Re: Indeed, it may sometimes be necessary to save and then recover, preferably at restart, some of the modified dynamic data, such as equipment mileage meters. In general, the processing of this type of data and equipment needs to be done on the logical level of the subsystem "Data acquisition", but it can be implemented in many ways, which involves storing data in a certain repository and further restoration of them, however, the more well-known methods are:

- Periodic, or when stop, to save the context of the template parameters by requesting the OpenSCADA user API via cntrReq(), where "force" for force saving not modified parameters:

    SYS.cntrReq(SYS.XMLNode("save").setAttr("path",this.nodePath()+"/%2fobj").setAttr("force","1"));

- If the attribute of the template with the counter is archived then at the start of the parameter you can get the last value from this archive, for example, as follows:

    if(f_start)    prevArchRestore = false;
    if(!prevArchRestore && (archEnd=this.cntr.arch().end("FSArch.1s"))) {
        SYS.messInfo("testArch", "val="+this.cntr.arch().getVal(archEnd)+"; "
                   "val1="+this.cntr.arch().getVal(archEnd,false,"FSArch.1s")+"; "
                   "val2="+this.cntr.get(archEnd/1000000,archEnd%1000000));
        cntr = this.cntr.arch().getVal(archEnd);
        prevArchRestore = true;
    }

- Create a custom database table and write/read this data directly into this table through SQL-queries by SQLReq().

Q: Is it possible, and how is the reservation of parameters implemented?
Re: Like any post-processing, parameter reservation is performed by the logical level by creating a parameter template that implements the ability to describe in a single parameter several typical sensors that will have their own attributes of values. The resultant value of the sensors will fit into the generalizing value attribute.

### 2.4 Archiving-history and Alarms

Q: How is the value of archiving cycles determined?
Re: Archiving is an independent task from the controllers and their parameters, and it is executed by the modular subsystem "Archives-History". What and how to archive is determined personally for each attribute parameter. There are two archiving modes: passive and active. Passive archiving is determined by the cyclicity of obtaining data by the controller — the cycle of the data collection module. Active archiving is provided by the task of the archiving subsystem and regardless of the cycle and method of the data acquisition by the DAQ module.

Q: In the process of development and debugging, I still have inappropriate active alarms. What to do with them?
Re: Thus, given that alarms in the table of active alarms often fall-formed by user procedures, their "sticking" there may occur. Respectively, you can just restart the OpenSCADA project or remove-withdraw such alarms in the main tab "Messages" of the subsystem page "Archives-History": select the level of alarms "Information (1[X]), ALARMS", set the size to 0, then in the table of messages should be all current alarms, some of which can be removed through the context menu, and all visible by the button below the table; for a large group of alarms, but not all, you can set their clear characteristics of time, level and category to see in the table, and accordingly "remove" the group all the necessary.

Q: Is it possible to work with streaming data?
Re: Streaming and packet acquisition work in conjunction with the archive and its buffer. That is, the source, having received a packet/data block, directly places it in the parameter attribute archive, or receives the package from the buffer, in the stream output.

Q: Can I export archived data (history) to a different format, say — CSV, Excel?
Re: In general, you can export archived data, and here are three features, that is: location, formats and export mode. Since the end user for whom this data is being formed is the user of the end visual interface — operator, the built-in export function is provided by these interfaces for the data primitives of the diagram and the document where you can export to CSV, image file and HTML. With regard to other data formats, especially closed and one-platform formats, such as Excel, then their export can be implemented by a user procedure through the common user interface of the visualization as a direct formation, if the format is simple, and the call of the external transformation utility, if available. Exports generally can be in two modes: interactive and flowing. It is the interactive mode embedded in the user interface and it involves determining the range and quality of data (the primitives data) as the limiting factors of the advisable execution time of this operation. The flowing mode provides a background, possibly even with the main processes, exporting both current data and local archive data and is often used to export to a database table with the desired structure. Exporting from the developer environment, like the flowing mode, do not have embedded functions, except for experimental ones such as WAV exports. This can, if necessary, be implemented by service procedure or part of the code of the main process for the flowing mode.

### 2.5 End-user interface

Q: How is the speech signalling carried out and what is needed for its work?
Re: The speech signalling, as well as other methods of the signalling, is an element of the subsystem "User interfaces" and organised in the modules of the visual control area (VCA), and exactly in the VCA engine UI.VCAEngine and visualisers UI.Vision, UI.WebVision. Usually, for synthesis the language you need a synthesizer with the support of the desired language, like to RHVoice, festival, espeak. For playing the synthesised sound you need no specific tools in the typical environments. But for specific environments you need the play program that is typically contained in the sox package, and for precise definition of the dependencies see the relevant external notification methods.

Q: How can I rapid and correct change aspect ratio of the screen of the user visual interface to different one, for example to 16:9?
Re: Yes, the main user visual interface of OpenSCADA based on a conception of signal objects, and its root page, means and was designed to the aspect ration 4:3. For generic VCA projects there have planed implementing for proper styles of the different aspect rations but the mnemonic schemes should be left untouched. Then for manually, rapid and correct changing the aspect ratio to 16:9 you must now do following, in your VCA project tree:

- Set, or multiply to original one, the attribute "Geometry: x scale" (geomX) to value (16/9)/(4/3) = 1.333, for:
  - the root page;
  - all template pages like "Graphics group", only in the page used as the template;
  - all pages of the documents and control panels, individually.
- Due pages of the mnemonic schemes rarely allow for changing the original aspect ratio by using true figures like to circles and squares there we must develop the cadres initially in the size [900*1.333 x 550] = [1199 x 550].

Q: How can I connect the visualiser UI.Vision to a remote visualisation server or PLC with such function?
Re: Yes, you are allowed for creation of visualiser servers and PLCs based on the module UI.VCAEngine with all VCA-data of the user visualisation projects on them and obliviously with OpenSCADA installed there. Next you are allowed for a connection to the remote visualisation servers or PLCs by the module UI.Vision for locally developing and visualisation of the remote user visualisation projects. The detailed instruction you can get in the Quick Start manual's part "Connecting and using remote and background configurations" and here you have get a short instruction. This short instruction also usable to get remote control of the visualiser servers and PLCs. To do that you must follow next procedure on a client station with the module UI.Vision and any configuration include pure-empty one:

- Create a connection to the visualiser server or PLC as an OpenSCADA station on the transports page of any OpenSCADA configurator, in the "System" mode. If you will set also the "User" mode you will be allowed to control the remote station from the configurator and user, after the navigation tree updating.
- Select on the visualiser page of any OpenSCADA configurator: a new connection, start user, user's password of the remote station and a project or projects for their automatic execution, else you will get in the developing mode. Next starting of the module UI.Vision should cause establishing of the remote connection to the visualiser server or PLC with their projects developing or execution. For querying the station together user and password at the module generic call you can select the connection-station "<Select>", useful at presence of many control stations and for opening several of them simultaneously.

Q: How can I start OpenSCADA automatically with a proper user operation interface — a project of supervisory control?
Re: Of course, after the developing process finish you must ensure the program starting together with the operational system starting and in the full-screen execution of the result project of the user operation interface. For these you must follow next procedure:

- Ensure system specific measures for same OpenSCADA starting with your project. There you must pre-create or find a desktop icon of your project of OpenSCADA from the manager of projects OpenSCADA and copy or place its to folder or list of the auto-started programs of your desktop environment. See to documentation of the desktop environment for the details.
- Select the module UI.Vision starting with OpenSCADA generic starting in the "Qt modules for startup" field of the module UI.QTStarter from any OpenSCADA configurator.
- Select your project of VCA to automatic its execution in the field "Run projects list" of the module UI.Vision from any OpenSCADA configurator. Here we also recommend to set a user different from system ones for projects execution, but in the permissions for the project of course.

Q: May I adjust my project for some specific branding?
Re: Most visible branding by the end user is placed in the end user VCA interface but you may want also in some adjustment the splash image, icons and so on:

- icon in the right upper of the frame "Root page (SO)" — just upload your image in the project resources as "logo", in the preferred size 110x55 pixels (2x1);
- icon of the project window-page in it runtime — just upload your project icon, in the preferred size 128x128 pixels or clean up that for use the common project icon image (see below) which can be translated — dependently from current interface language;
- the project starting splash image — prepare a representative image in the preferred size 600x300 and place it to the project's folder of icons with the name "{ProjectID}_splash.[png|gif|jpg|jpeg]" for both start and exit splash and "{ProjectID}_splash_exit.[png|gif|jpg|jpeg]" for the exit splash;
- the project common icon image for the navigation tree of the OpenSCADA configurators — prepare a representative image in the preferred size 128x128 and place it to the project's folder of icons with the name "{ProjectName}.[png|gif|jpg|jpeg]", where ProjectName can be whether the language specific one or on the Basic Language for whole cases or even both if your project is the multilanguage one.

Q: The user operation interface starts in full-screen and I unable to close it for gain access to the system desktop environment!
Re: Of course, OpenSCADA protects the control system from closing and unprivileged access to the system desktop environment. Then, for gain access to the system desktop environment, you must be a privileged user in the user operation interface, change the interface user to your account and in the appeared global menu do needed one: disable the full-screen mode, close or quit the program. If the global menu does not appear then you have a problem of the desktop environment, such as Unity, which "tears off" the window menu; then turn off this function of the environment beforehand!

Q: I can easily connect the analog signals for the trends building by the primitive Diagram, but the discrete-logical signals using here is not such obvious...
Re: Yes, the primitive Diagram is designed mostly for analog signals, but you can also use here the discrete-logical signals as analog ones with the two states [0,1], so they natural scale is [0...1] and if you connect one signal in the automatic-natural scale, you will get it on whole screen with the filled bar for TRUE states. But that is not useful enough and you cannot combine it with other analog or discrete-logical signals even in translucent color, so you must specify the scale manually for positioning the discrete-logical signal tape in the needed screen part. Some examples of the scales:

- [0...5] — you divide the screen vertically on five tapes and display the signal in the bottom;
- [-4...1] — you also divide the screen vertically on five tapes and display the signal in the top;
- [-2...3] — you also divide the screen vertically on five tapes and display the signal in the centre;
- [0...10] — you divide the screen vertically on ten tapes and display the signal in the bottom.

Q: I have a very busy system with many OpenSCADA processes working through the Web interface and I want to decrease the server loading and speed up all those interfaces.
Re: Yes, by default OpenSCADA interface designed for work in some fast enough carrying-live period (100 ms) which suitable mostly for active local Qt-interfaces of the module UI.Vision with high reactivity and on fast enough networks at working with the visualisation server. But currently you can tune your interface to achieve the loading decrease in times:

- the first and an obviously step that is to increase the carrying-life period in the VCA Project configuration, where you can set the "Period of the calculation" in a value up to 500 ms for active local Qt-interfaces of the module UI.Vision and up to 1000 ms for not fast Web-interfaces of the module UI.WebVision;
- the second step that is to set the dynamic data updating period depending on what you mean as enough often or disable the periodic updating in whole by setting the period in -2; and do that for the main-root page in the Widget configuration of your project tree; the same you can do for all panels placed in the group "Control panels (control)" of the project logical structure from the same main-root page, setting the needing period for the group itself;
- the third step that is deepening to your dynamic widgets-cadres adaption for work on big periodicity without loss the reactivity like to the already adapted ones from the standard library as the main-root page and Analog show; and the adaption mostly means:
  - sending user events at need of rapid updation in the next life cycle after the events processing;
  - controlling the widget execution period depending on the activity situation like to blinking the selection cursor and the alarm colors.

## 3 Problems (actual, environmental, fixed)

Q: Why I lost the fractional part in all values of the loaded data of the real type?
Re: You use a locale different from "C" or most English one, which are directly set by the environment variable "LC_NUMERIC" or its generic variant "LC_ALL", which caused to use in system functions like to atof() and sprintf() the fractional part separator symbol different from "." (dot), it is mostly "," (coma).

  !> Then never set directly the environment variables "LC_NUMERIC" and "LC_ALL" but that overrides "LC_NUMERIC" correct setting to "C" internally! For the program language changing use only environment variables "LANG" and "LANGUAGE" which enough anytime.
  +> Currently the problem completely excluded, through checking and clearing the environment variable "LC_ALL"!

Q: "No permission for create real-time policy for '****'. Default thread is created!"
Re: Such an OpenSCADA message is generated when an attempt is made to set a real-time policy for a thread-task, with a priority greater than 0, in the case of starting from the normal user.

  +> Potentially these rights can be provided by editing the file "/etc/security/limits.conf" in the following way:

    user    hard    nice    -20
    user    soft    nice    -15
    user    hard    rtprio  99
    user    soft    rtprio  90

Q: I observe the lack of all text labels on the charts (primitive "Diagram") of the UI.WebVision module interfaces. Why so?
Re: This result is possible on interfaces constructed on the GD library, and if this library is compiled without using the FontConfig library. Currently only UI.WebVision module uses this library for the exclusive construction of the "Elementary Figure" and "Diagram" primitives.

  +> Therefore, to fix this problem, you must install the correct library package or build the library yourself with FontConfig. Currently, there is one such instance of the problem with the "libgd2-noxpm" package of the older versions of the Linux Debian distribution where you must install the correct "libgd2-xpm" package.

Q: I observe the lack of SVG-images in the Qt-interfaces. Why so?
Re: This usually indicates that there in the system is no Qt-module for SVG-graphics, for example, the package "libqt5svg5" in Linux distributions based on Debian.

  +> Install a package or a Qt-plugin directly of the SVG-graphic support.

Documents/FAQ/en - GFDL | July 2026 | OpenSCADA 1+r3070