Libs/Prescriptions - OpenSCADAWiki

# Libs/Prescriptions

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

Name | Version | License | Source | Languages | Author | Icon | Description
--- | --- | --- | --- | --- | --- | --- | ---
Prescriptions | 1.1, 1.1 | GPLv2 | OscadaLibs.db (SQL, GZip) > DAQ.tmplb_PrescrTempl vcaBase.db (SQL, GZip) > VCA.wlb_prescr | en, uk, ru | Roman Savochenko |  | Library of elements of scenarios of the technological operations — prescriptions. Founded: September 2011 Sponsored by: Vassily Grigoriev, the Laboratory of Vacuum Technologies Sponsored by, about the controller templateization: Magomed, SAVTECH Initially created: in the old Wiki Used by: Automated control system for vacuum processing unit To Do: - move the graphical part items to all work through the prescription manager, for the possibility to distribute the parts remotely.

The library is created to provide an environment of execution of scenarios of the technological operations — prescriptions, and frames of the user interface about them, including the frame of creation/edition the prescriptions and two frames of the execution control and reporting — "Prescription — run" and "Prescription — run, simple". The library is built on the basis primitives of the widgets and the internal programming language JavaLikeCalc, including templates and commands.

The element's names and their parameters are available in languages: English, Ukrainian and mRussian. Their source code wrote in human-language independent mode with calls for the translations by the function tr() and the message's translation also allowed for English, Ukrainian and mRussian.

## 1 Conception

The scenario of technological operations — prescription, is a sequentially call of the function's blocks — commands, which taking up to five arguments and return string with the result code at the begin: "Working (0)", "Finished (>0)" and "Error (<0)". Calling the step command is made in a loop until the "Working (0)" result is returned. Jump to the next step is made in the case of the "Finished (>0)" result and the command "Pass (2)". In the case of an error, the "Error (<0)" result, the prescription execution is terminated.

The commands sequence, by the user of the final interface, are formed on the frame of creation/editing and are controlled for their execution on the frame "Prescription — run" and "Prescription — run, simple", when, the prescriptions data is stored in the programs-prescriptions DB table. The prescriptions-programs table is placed into the accessible OpenSCADA specific configuration database, as an example, currently such table is placed in the library database as "PrescrProgs = (name, prgTxt)", where:

- name — the prescription-program name;
- prgTxt — the program text as an XML-tree.

The prescriptions-programs XML-tree starts with the "prg" tag that contains the command end tags "com" with attributes:

- id — identifier-name-type of the command in the step base;
- name — personal name of the step, may be missing;
- descr — personal description of the step, taken from the appropriate field of the command and may be missing;
- backgrnd — sign of the step execution in the background, or a series of steps with that sign;
- arg{N} — user defined values of the arguments from 1 to 5.

For example, for a four-step prescription we will have:

    <prg>
      <com arg1="10" id="Timer" />
      <com arg1="10" id="Vacuum" />
      <com arg1="20" id="Timer" />
      <com arg1="34" id="Enable coils" />
    </prg>

The prescription execution making through the prescription manager's parameter, which support two modes of the prescription commands execution:

- command-parameter — are placed as parameters of the logical controller and given their context, if the logical controller specified in the prescription manager;
- command-macro — directly into the prescription manager object, by commands stored into the table "PrescrComs".

The execution mode "command-parameter"
The commands-parameters of the logical level are formed by the programmer of SCADA-system under the specific application area as templates of parameters of the subsystem "Data acquisition", which next used into the logical controller of the prescriptions, include series of mandatory, service and internal attributes:

- rez — command: result the execution; the command should return a string of the view "{rezCode}:{TextMess}", where rezCode has states:
  - <0 — error;
  - =0 — running;
  - >0 — running finished;
  - =10 — running into the background with the indication to update the running state.
- run — command: execution;
- pause — command: pause the execution, can be paused itself by setting that attribute to TRUE;
- start — prescription: start;
- stop — prescription: correct finish;
- error — prescription: prescription finish by error;
- abort — prescription: execution abort by operator;
- arg{1...5} — arguments 1...5, into the argument name you can set the minimal and maximal borders of the numerical value as "{name}|{min}|{max}".

A specific of using commands-parameters is their independent execution and the ability to leave the execution of a number of commands in the background, such as regulators. These commands can also be directly connected to a data source through links, or even implemented in the same template-parameter.

This mode is now the main one, and it has implemented many mechanisms of interaction with visualization and control frames, which may not work or work erroneously with the old "command-macro" mode!

The execution mode "command-macro" (old)
The commands-macros, which user can choose during the formation of a prescription-program, are formed by the programmer of SCADA-system under the specific application area by editing a commands table in OpenSCADA. The commands table is placed into the accessible OpenSCADA specific configuration database, as an example, currently such table is placed in the library database as "PrescrComs = (name, proc, arg1, arg2, arg3, arg4, arg5)", where:

- name — the command name;
- proc — text of the command procedure, in the first line it contains the program language name, at the moment it is "JavaLikeCalc.JavaScript", and the program text directly after the language; in the command procedure the following context parameters are available:
  - rez — result of the command execution, by default it returns "Work" ("0:Waiting now for ...");
  - f_start — sign of the first procedure execution;
  - f_frq — frequency of the procedure periodic executions;
  - arg{1...5} — argument's 1..5 value;
  - tmp{1...10} — temporary parameter's (the execution context) 1...10 value;

    An example of the program code for the "Timer" command, which does not depend on the application area:

    JavaLikeCalc.JavaScript
    if(f_start) tmp1 = arg1;
    var curTm = tmp1.toReal();
    if(curTm <= 0) { rez = "1:Waiting is elapsed for "+arg1+"s"; return; }
    curTm -= 1/f_frq;
    tmp1 = max(0, curTm);
    rez = "0:Waiting now for "+curTm+"s";

- arg{1...5} — label of the 1..5 argument, only arguments with the label will be displayed when editing the prescription step; into the label you can set the minimum and maximum borders of the numeric values of the argument into the format "{Label}|{min}|{max}".

The several command names are reserved for the special purposes:

- "Error" — is called after an error at execution the prescription step;
- "Stop" — is called on stopping the prescription, on successful prescription finish and on forced termination by the user.

## 2 Part of processing and executing

The section contains DAQ-templates of the prescription manager and commands of the "command-template" mode, which are intended to be connected to the logic level controller, by creating related parameters of the prescription manager and commands, which available for the user to choose from, and which will carry out all the work with the prescriptions-programs for their processing and execution.

For connection the library part to a project of the OpenSCADA station you can obtain the database file as:

- supplied with a ready and proper package of the Linux distribution like to "openscada-libdb-main", "openscada-LibDB.Main";
- directly taken for most actual one from the subversion repository and converted to the DB SQLite file in the way:

    wget http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql
    sqlite3 -init OscadaLibs.sql OscadaLibs.db .exit

- downloaded for the one attached here.

This obtained file next you can place into the project directory of the station and create the database object for the DB module "SQLite", registering the database file in the configuration.

### 2.1 Prescriptions manager (manager) | 2.2 | GPLv2 | * | en, uk, ru | Roman Savochenko

Basic, representative and unified template of a manager and a controller of the prescriptions, of their processing and direct execution in the "command-macro" mode. The template forms a structure of the prescription manager parameter which can be easily connected to all frames of this library.

The representative structure of the prescription manager is:

- "DB: DB name with the tables (dbDB)" — DB, like to "SQLite.vcaBase", where stored or must be stored the prescription-program tables.
- "DB: Table with programs (dbProgs)" — name of the prescriptions-programs table, typically "PrescrProgs".
- "Commands list (comLs)" — the allowed to use commands list.
- "Name of the selected program (prog)" — state and setting of the selected program name in processing by the manager.
- "Mode (mode)", "Current mode (curMode)" — the setting and the current manager mode of the selected prescription-program execution: Finish(-2), Error(-1), Stop(0), Run(1), Pause(2), Pass command(3).
- "Start time (startTm)" — the start time in seconds.
- "Current command-step (curCom)" — the currently processing command.
- "Work program (work)" — the actual and processing now program in an object.

Functions

- Forms the "Commands list (comLs)", allowed to use in the user prescriptions-programs.
- Process the "Name of the selected program (prog)", modifying it will either load its command sequence to the "Work program (work)" or create a new program.
- Execute the program in the "Name of the selected program (prog)" after receiving the command "Run(1)" in the "Mode (mode)" and indicate this process in: the "Current mode (curMode)", the "Start time (startTm)", the "Current command-step (curCom)" and the "Work program (work)".
- Generate the action messages during the prescription execution for:

  CATEGORY: defines the user prescription-program ID ProgNM in the form "uprg{ProgNM}", where:
  - "uprg*" — the typical template-sign of a user prescription-program, that can be directly used in the category filter to determine in the messages only the user prescriptions-programs;
  - ProgNM — the prescription-program name.
  TEXT: the action description in the form "{ActDescr} "{ProgNM}" : {StartTm} : {ActTm}", where:
  - ActDescr — the action description:
    - "No current node present";
    - "Terminated program session by the user";
    - "Terminated program session by the error";
    - "Successful session of the program".
  - ProgNM — the prescription-program name;
  - StartTm — start time of the prescription-program, in the form "2020-03-14 16:05:01";
  - ActTm — action time of the prescription-program, in the form "2020-03-14 16:05:52".

Template IOs

Identifier | Name | Type | Mode | Attribute | Configuration | Value
--- | --- | --- | --- | --- | --- | ---
dbDB | DB: DB name with the tables | String | Input | Read only | Constant |
dbComs | DB: Table with commands | String | Input | Not attribute | Constant | PrescrComs
dbProgs | DB: Table with programs | String | Input | Read only | Constant | PrescrProgs
comsCntr | Commands controller, <empty> - for commands into the table, '*' - this parameter's controller | String | Input | Not attribute | Constant | *
mode | Mode | Integer numbers selection | Input | Full access | Variable | -2 -2;-1;0;1;2;3 Finish;Error;Stop;Run;Pause;Pass com
curMode | Current mode | Integer numbers selection | Input | Read only | Variable | -2 -2;-1;0;1;2;3 Finish;Error;Stop;Run;Pause;Pass com
prog | Name of the selected program | String | Input | Full access | Variable |
startTm | Start time, seconds | Integer | Input | Read only | Variable |
curCom | Current command-step | String | Input | Read only | Variable |
work | Work program | Object | Input | Read only | Variable |
comLs | Commands list | Object | Input | Read only | Variable |
clcCnt | Cycles counter | Integer | Input | Not attribute | Variable |
this | The object | Object | Input | Not attribute | Variable |
f_err | Function error | String | Input | Not attribute | Variable | 0
f_frq | Frequency of calculation of the function, Hz | Real | Input | Not attribute | Variable | 1000
f_start | Function start flag | Boolean | Input | Not attribute | Variable | 0
f_stop | Function stop flag | Boolean | Input | Not attribute | Variable | 0

Configuring and using

  1. Create and start a logical controller object with the needed scheduling properties.
  - [JavaLikeCalc] or a JavaLikeCalc controller object directly.
  2. Create a logical parameter object, for the case of using the logical controller, and select this template for it. Enable the parameter.
  - [JavaLikeCalc] or select this template for the JavaLikeCalc controller; enable the controller; create a parameter "manager" of reflection the representative attributes:

    dbDB
    dbProgs
    comLs
    prog
    mode
    curMode
    startTm
    curCom
    work

  3. Into the tab "Template configuration" of the object of the logical parameter, or the controller for [JavaLikeCalc], you need to set:
    - DB: DB name with the tables — to DB, like to "SQLite.vcaBase", where stored or must be stored the prescription-program tables. The empty value is not allowed and will cause an error!
    - DB: Table with programs — to name of the prescriptions-programs table, by default it is "PrescrProgs".
    - Commands controller — left it in the default value "*", to use this parameter's controller for the commands also. You must change this field if you run the manager controller object in a separate logical controller for the commands!
  - [JavaLikeCalc] or and additionally:
    - Commands controller — change this field in a separate logical controller for the commands!
  - [Command-macro] or and additionally:
    - DB: Table with commands — to name of the commands table, by default it is "PrescrComs";
    - Commands controller — set to <empty>.
  4. Place the required parameters of the commands together to the manager parameter.
  - [Command-macro] or prepare the required commands in "DB: Table with commands" according to the conception; the empty commands table must be created automatically after starting the object of the logical parameter, or the controller for [JavaLikeCalc]!
  5. RESULT: Launching the controller object (where this parameter is created), we must get the operational data in the tab "Attributes" for the: allowed commands list, current mode, work program, current command-step and start time.
  - [JavaLikeCalc] or the JavaLikeCalc controller object directly.
  6. In the process of the working, through the tab "Attributes" of operational data, in addition to obtaining the result, it is possible to perform operative setup and control on:
  - Name of the selected program — to set of the selected program name in processing by the manager;
  - Mode — to set the manager mode of the selected prescription-program execution: Finish(-2), Error(-1), Stop(0), Run(1), Pause(2), Pass command(3).

### 2.2 Templates of the commands

#### 2.2.1 Command — Timer (timer) | 2.0 | GPLv2 | * | en, uk, ru | Roman Savochenko

Template of a command of the prescription typical timer. The timer is only designed to hold time between other action steps and for example, so it only has one attribute, "Time" in seconds.

Template IOs

Identifier | Name | Type | Mode | Attribute | Configuration | Value
--- | --- | --- | --- | --- | --- | ---
start | Prescription: start | Boolean | Input | Full access | Variable | 0
stop | Prescription: stop | Boolean | Input | Full access | Variable | 0
error | Prescription: error | Boolean | Input | Full access | Variable | 0
abort | Prescription: abort | Boolean | Input | Full access | Variable | 0
run | Command: run | Boolean | Input | Full access | Variable | 0
pause | Command: pause | Boolean | Input | Full access | Variable | 0
rez | Command: result | String | Input | Full access | Variable | 1
arg1 | Time, seconds | Real | Input | Full access | Variable |
tmp1 | Temporary 1 | Real | Output | Not attribute | Variable | 0
f_stop | Function stop flag | Boolean | Input | Not attribute | Variable | 0
f_frq | Frequency of calculation of the function, Hz | Real | Input | Not attribute | Variable | 1000
f_err | Function error | String | Input | Not attribute | Variable | 0
f_start | Function start flag | Boolean | Input | Not attribute | Variable | 0

Configuring and using

  1. Create and start a logical controller object with the needed scheduling properties, or use created one for the prescription engine.
  2. Create a logical parameter object and select this template for it. Enable the parameter.
  3. RESULT: Launching, we must get the operational data in the tab "Attributes" for the command result.
  4. In the process of the working, through the tab "Attributes" of operational data, in addition to obtaining the result, it is possible to perform operative setup and control on the representative attributes of the prescription commands and the additional ones:
  - Time — to set time of the timer in seconds.

#### 2.2.2 Command — Background timer (backTimer) | 2.0 | GPLv2 | * | en, uk, ru | Roman Savochenko

Template of a command of the prescription background timer. The timer designed only for hold a time in the background to an example, then it contains only one attribute, it is "Time" in seconds.

Template IOs

Identifier | Name | Type | Mode | Attribute | Configuration | Value
--- | --- | --- | --- | --- | --- | ---
start | Prescription: start | Boolean | Input | Full access | Variable | 0
stop | Prescription: stop | Boolean | Input | Full access | Variable | 0
error | Prescription: error | Boolean | Input | Full access | Variable | 0
abort | Prescription: abort | Boolean | Input | Full access | Variable | 0
run | Command: run | Boolean | Input | Full access | Variable | 0
pause | Command: pause | Boolean | Input | Full access | Variable | 0
rez | Command: result | String | Input | Full access | Variable | 1
arg1 | Time, seconds | Real | Input | Full access | Variable |
tmp1 | Temporary 1 | Real | Output | Not attribute | Variable | 0
f_stop | Function stop flag | Boolean | Input | Not attribute | Variable | 0
f_frq | Frequency of calculation of the function, Hz | Real | Input | Not attribute | Variable | 1000
f_err | Function error | String | Input | Not attribute | Variable | 0
f_start | Function start flag | Boolean | Input | Not attribute | Variable | 0

Configuring and using

  1. Create and start a logical controller object with the needed scheduling properties, or use created one for the prescription engine.
  2. Create a logical parameter object and select this template for it. Enable the parameter.
  3. RESULT: Launching, we must get the operational data in the tab "Attributes" for the command result.
  4. In the process of the working, through the tab "Attributes" of operational data, in addition to obtaining the result, it is possible to perform operative setup and control on the representative attributes of the prescription commands and the additional ones:
  - Time — to set time of the timer in seconds.

## 3 Graphical part

Contains elements-frames of the prescription of the end type and elements-widgets, what intended to be placed in the mnemonic schemes part (the type of view) of the project tree of the pages, built on the concept of the signal objects of the root page "RootPgSo" and to be placed on the other complex frames. However, elements-frames may be located as separate entities or as part of your own concept of the page management, but it should be take in account that frames often refer and call certain control panels of the common usage and related elements!

For connection the library part to a project of the OpenSCADA station you can obtain the database file as:

- supplied with a ready and proper package of the Linux distribution like to "openscada-libdb-vca", "openscada-LibDB.VCA";
- directly taken for most actual one from the subversion repository and converted to the DB SQLite file in the way:

    wget http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaBase.sql
    sqlite3 -init vcaBase.sql vcaBase.db .exit

- downloaded for the one attached here.

This obtained file next you can place into the project directory of the station and create the database object for the DB module "SQLite", registering the database file in the configuration.

### 3.1 Prescription — edit (prescrEdit) | 1.3 | GPLv2 | * | en, uk, ru | Roman Savochenko

The frame, shown in Figure 3.1, is one of the group frames for working with the prescriptions, which serves for the user-editing of the prescriptions-programs. The frame commonly uses and represents the representative structure of the prescription manager.

The frame contains from left to right:

- "Library" — library with a list of programs and library's control tools.
- "Program" — the list of commands-steps of the selected in the library prescription-program with the control tools.
- "Command" — the edit field of the selected step in the prescription, which contains the selection of the command and set the name, description, background execution flag and values of the available attributes, as well as button to save the changes.

Fig.3.1a. The "Prescription — edit" frame in the development mode.

Using — development
The frame is designed to perform the role of page, and should therefore be placed directly in the project's tree. To the frame can be connected one parameter of the prescription manager, by setting the links.

Using — runtime
In the runtime mode, the user can add new prescription-programs, delete, copy and export the existing ones as well as to import prescriptions from other OpenSCADA stations. In the selected prescription-program user can do: add or insert a new step, remove or move the selected step. For the selected steps of the prescription-program the user can set the command and enter the name, description, background execution flag and values for the available arguments of the selected command, and then to save changes of the step.

Removal operations are accompanied by the confirmation dialog.

Fig.3.1b. The "Prescription — edit" frame in the runtime mode.

{Linking and configuring the attributes

Identifier | Name | Type | Configuration | Configuration template
--- | --- | --- | --- | ---
dbDB | DB: Data base | String | Input link | Controller|dbDB
dbProgs | DB: Programs table | String | Input link | Controller|dbProgs
prExtComLs | Available commands list | Object | Input link | Controller|comLs

### 3.2 Prescription — run (prescrRun) | 1.3 | GPLv2 | * | en, uk, ru | Roman Savochenko

The frame, shown in Figure 3.2, is one of the group frames for working with the prescriptions, which serves for control and observing of executing the programs-prescriptions, previously formed in the Prescription — edit frame. The frame commonly uses and represents the representative structure of the prescription manager. In addition to this full-format prescription frame, there is a simplified one — "Prescription — run, simple, that allows you to manage and to track compactly the prescriptions execution in other frames of the technological process.

The frame contains from the left to the right:

- "Start/stop/skip" — two buttons to start and stop the selected program and a button to skip the current step execution.
- "Library" — library with a list of the programs.
- "Program" — document of the commands-steps list of the selected prescription-program in the library. During the execution in this field it is monitored the program execution current state by the appropriate highlight of the steps.

Fig.3.2a. The "Prescription — run" frame in the development mode.

Using — development
The frame is designed to perform the role of page, and should therefore be placed directly in the project's tree. To the frame can be connected one parameter of the prescription manager, by setting the links.

To archive completed sessions while the operator is switching between frames, this full-format frame in the project tree must be set for the parameter "Page: process not opened".

At the end of the prescription-program, messages with session parameters are generated by the prescription manager, as well as archiving of the session document. The messages with the session parameters can be used either simply to view the sessions history or to create a session list, for example, in the graphics group to go to the history at the session time. The reports archive is set to the depth of 10 documents by default, what you can change by setting the "Archive length (n)" attribute of the document widget.

Using — runtime
In the runtime mode, the user can select the desired prescription-program and run-on the execution, and then track the execution progress or switch to other frames. The running program user can pause by pressing the "Pause" button or terminate by pressing "Stop". In addition, the user can skip the current step by clicking the "Skip" button. Also the user can review or print reports of the previously executed prescriptions of this full-format frame, for what it is necessary to press the left mouse button on the document and browse on the navigation bar through the archive of the executed prescriptions.

Fig.3.2b. The "Prescription — run" frame in the runtime mode.

{Linking and configuring the attributes

Identifier | Name | Type | Configuration | Configuration template
--- | --- | --- | --- | ---
dbDB | DB: Data base | String | Input link | Controller|dbDB
dbProgs | DB: Programs table | String | Input link | Controller|dbProgs
prExtCurCom | Controller: current command | String | Input link | Controller|curCom
prExtMode | Controller: mode | Integer | Full link | Controller|mode
prExtProg | Controller: program | String | Full link | Controller|prog
prExtStartTm | Controller: start time | Integer | Input link | Controller|startTm
prExtWork | Controller: work | Object | Input link | Controller|work

### 3.3 Prescription — run, simple (prescrRunSimple) | 1.3 | GPLv2 | * | en, uk, ru | Roman Savochenko

The widget, shown in Figure 3.3, is a simple variant of the frame "Prescription — run", which designed for placing as a widget of the mnemonic schemes and it mostly works together the frame "Prescription — run". The frame commonly uses and represents the representative structure of the prescription manager.

The widget contains from the left to the right and to the bottom:

- "Start/stop/skip" — two buttons to start and stop the selected program and a button to skip the current step execution.
- "Library" — button to display the current prescription-program and call the dialog of selecting item into tree.
- "Program" — document with lines of currently active commands.

Fig.3.3. The "Prescription — run, simple" frame in the development and runtime modes.

Using — development
This widget can be used by the developer to create mnemonic schemes with displaying the prescriptions execution activity and to fast control them. To use it you need to add this widget to a mnemonic scheme, adjust for the horizontal, vertical size, by scaling, and connect to the prescription manager, by setting the links.

Using — runtime
In the runtime mode, the user can select the desired prescription-program, in the dialog of selecting item into tree that appears at the prescription button click, and run-on the execution, and then track the execution progress or switch to other frames. The running program user can pause by pressing the "Pause" button or terminate by pressing "Stop". In addition, the user can skip the current step by clicking the "Skip" button.

{Linking and configuring the attributes

Identifier | Name | Type | Configuration | Configuration template
--- | --- | --- | --- | ---
dbDB | DB: Data base | String | Input link | Controller|dbDB
dbProgs | DB: Programs table | String | Input link | Controller|dbProgs
prExtCurCom | Controller: current command | String | Input link | Controller|curCom
prExtMode | Controller: mode | Integer | Full link | Controller|mode
prExtProg | Controller: program | String | Full link | Controller|prog
prExtStartTm | Controller: start time | Integer | Input link | Controller|startTm
prExtWork | Controller: work | Object | Input link | Controller|work

Libs/Prescriptions/en - GFDL | May 2026 | OpenSCADA 0.9.9