Commit 1a88ea50 authored by Claes Sjofors's avatar Claes Sjofors

Doc updates

parent 0bf6ea5d
......@@ -31,6 +31,7 @@
<hr>
......@@ -123,6 +124,7 @@ The Spreadsheet Editor<link> spreadsheeteditor_refman
The Plc Editor<link> plceditor_refman
The Class Editor<link> classeditor
Administration <link> administrator
Tools <link> dg_tools
OPC <link> opc_intro
Commands <link> help command
Script <link> script
......@@ -222,7 +224,7 @@ information of various objects that are stored in the realtime database, or in d
systems.
<h1>Process graphics
Process graphics are build in a graphical editor. The graphics are vector based, which makes all
Process graphics are built in a graphical editor. The graphics are vector based, which makes all
graphs and components unlimitedly scalable. Components have a preprogrammed dynamic to change
color and shape, depending of signals in the realtime database, or to respond to mouse clicks
and set values in the database. In each component that is sensible to mouse click or input,
......@@ -623,25 +625,20 @@ Once the configuring of the project is done, next step is to configure the plant
configuration is done in the Configuration Editor. The plant is a logical description of the
reality, which is to be controlled and supervised.
The plant is structured hierarchically. Examples of levels in the plant can be plant, process,
process part, component, and signal. These are the logical signals represented by signal objects
which will be connected to physical channels.
<h2>The Process Station
The major part of the configuration is done in the volume of the process station, VolTrafficCross1.
This because all physical hardware is configured here (the I/O), all the signals and the
PLC-programs that work with the signals.
The plant is structured hierarchically. Examples of levels in the plant can be plant, process,
process part, component, and signal. These are the logical signals represented by signal
objects which will be connected to physical channels.
process part, component, and signal. These are the logical signals represented by signal objects
which will be connected to physical channels.
Sometimes it can be difficult to configure each signal in an initial stage, but it must at any
rate be decided how possible signals shall be grouped.
The figure below illustrates how a plant has been configured. We see how signals have been
configured on different levels, and even how the PLC programs are configured in the plant.
configured on different levels, and also how the PLC programs are configured in the plant.
<image> dg_fig3.gif
<b>Fig An Example of a Plant Configuration
......@@ -1098,7 +1095,7 @@ plant. The following attribute must be given a value:
- ThreadObject indicates the plc thread where the program is executed. It references a
PlcThread object in the node configuration.
- If the program contains a GRAFCET sequence, the ResetObject must be given. This is a Dv, Di
- If the program contains a Grafcet sequence, the ResetObject must be given. This is a Dv, Di
or Do that resets the sequence to its initial state.
<bookmark> backup_object
......@@ -1174,8 +1171,8 @@ Pb_Ao, Pb_Di, Pb_Do etc, that are placed on the card level. Below the module obj
the channels are configured with the channel objects ChanDi, ChanDo etc.
<b>Process and thread for I/O objects
I/O objects of the card level, often contains the attributes Process and ThreadObject. Which process
that shall handle the card is defined in Process.
I/O objects of the card level, often contains the attributes Process and ThreadObject. Which
process that shall handle the card is defined in Process.
The card can be handled by the PLC program, that is, reading and writing is made synchronized
with the execution of the PLC. You can also specify a thread in the PLC that should handle the
......@@ -1194,8 +1191,8 @@ The MessageHandler object configures the server process rt_emon, that handles th
objects (DSup, ASup, CycleSup). When an event is detected by the server, a message is sent
to the outunits that have interests in this specific event.
In the object is indicated for example the number of events that are stored in the node. The object
is automatically created below a $Node object.
In the object is indicated for example the number of events that are stored in the node. The
object is automatically created below a $Node object.
See MessageHandler in the Object Reference Manual <classlink>messagehandler,"",$pwr_lang/pwrb_xtthelp.dat
<h2>IOHandler object
......@@ -1263,7 +1260,7 @@ buttons. Buttons that are not used become invisible.
See OpPlace in Object Reference Manual <classlink>opplace,"",$pwr_lang/pwrb_xtthelp.dat
<image> dg_fig45.gif
<image> dg_fig45.png
<b>Fig Operator Window
<h2>The Plant Graphics Object - the XttGraph Object
......@@ -1280,6 +1277,20 @@ window.
- Action. States a Ge graph to open, or an Xtt command to execute.
See XttGraph in Object Reference Manual <classlink>xttgraph,"",$pwr_lang/pwrb_xtthelp.dat
<h2>Multiview object
Multiview is an operator window organized as table where each cell can contain a graph,
trend, sev history curve, alarm list, event list or another multview window. The example
below displays a multiview window with one column and two rows. The first cell contains
another multiview with two columns and tree rows, and the second cell contain an alarm window.
The different alarm windows show alarms from different parts of the plant, specified by
AlarmView objects. An multiview window is configured by a XttMultiView object. The Action
array contains the specifications for each cell.
It is also possible to exchange a graph or curve in a cell with the 'set subwindow' command.
<image> dg_fig115.png
<b>Fig Multiview window
</topic>
</chapter>
......@@ -1308,8 +1319,8 @@ The figure below shows a project structure of the directory tree.
<image> dg_psfig1.png
This directory structure is new to Proview v4.6. The reason for this is to make it more clear
what the sources and configuration files of the project are, and what is generated content.
This directory structure was modified in Proview V4.7. The reason for this was to make it more
clear what the sources and configuration files of the project are, and what is generated content.
Earlier versions did not make this clear and the idea is that everything that resides in
the build tree can be regenerated from the source tree.
......@@ -1322,9 +1333,9 @@ For example $pwrp_exe for the directory <project_root>/bld/x86_linux/exe.
<topic> source_tree
The source tree
The source tree contains all the files that are the sources and configuration files of the projects.
The top level only contains subdirectories and no source or configuration files. In the
following the contents and purpose of the subdirectories are described.
The source tree contains all the files that are the sources and configuration files of the
projects. The top level $pwrp_src only contains subdirectories and no source or configuration
files. In the following the contents and purpose of the subdirectories are described.
<option> printdisable
The login directory
......@@ -1400,11 +1411,16 @@ One file of special interest that should be kept here is the
This file will by default be included when you compile the plc-code. It is however included
from a directory in the build-tree (<project_root>/bld/common/inc).
All header-files located here or in subdirectories and which should be included with the
plc-program must be distributed to the $pwrp_inc-directory (<project_root>/bld/common/inc).
Note that the ra_plc_user.h is automatically generated on $pwrp_inc when the first PlcPgm
is compiled. If you need to modify ra_plc_user.h, you should copy it to $pwrp_applcode and
keep the original there.
All header-files located $pwrp_appl or in subdirectories and which should be included with the
plc-program must be copied to the $pwrp_inc-directory (<project_root>/bld/common/inc).
If you have some small functions that you only link with the plc-program and nothing else
then you typically place this code in a file called:
<c>ra_plc_user.c
</topic>
......@@ -1536,7 +1552,8 @@ Proview's main log-file is named
<c>pwr_<nodename>.log
If you restart simulation, logging will be appended to this file. Remove it if you want a fresh one.
If you restart simulation, logging will be appended to this file. Remove it if you want a fresh
one.
</topic>
<topic> project_tmp
......@@ -1567,8 +1584,9 @@ documented your classes, a help-file will also be created. The files are named:
<topic> project_web
$pwrp_web
This directory contains all files for the web-interface. For example xtt-helpfiles that you generate
as html-files. Also if you create java-pictures from your ge-graphs they will be created here.
This directory contains all files for the web-interface. For example xtt-helpfiles that you
generate as html-files. Also if you create java-pictures from your ge-graphs they will be created
here.
</topic>
</headerlevel>
......@@ -1729,6 +1747,8 @@ want this application to interfere with the kernel applications and they run bet
<topic> file_plc_opt
plc_<node>_<bus_no>_<plc_name>.opt
Note! This file is deprecated since V4.8.2. A BuildOptions object should be used instead.
This file (if it exists) will be used as the link options when I build the plc-program.
Proview by default links against some libraries and object-files. If you have your own
opt-file you need to include these. A default opt-file would look like:
......@@ -1819,7 +1839,7 @@ webDirectory <t><t>Directory where the web files are placed and accessed by the
<b>Parameters in the storage environment
sevDatabaseType <t><t>Database type, mysql or sqlite.
sevXttDefaultPriv <t><t>Default privileges for access of the sev databse from sev_xtt.
sevXttDefaultPriv <t><t>Default privileges for access of the sev database from sev_xtt.
sevMysqlEngine <t><t>Mysql engine for created tables, innodb or myisam.
......@@ -1869,9 +1889,9 @@ working area.
<h2>Modify the object
The object is modified from the object editor. This is opened by selecting the object and
activating 'Functions/Open Objects' in the menu. Values of the object attributes are modified
with 'Functions/Change value' in the object editor menu. If an input or output is not used, it
can be removed with a checkbox. There is also a checkbox which states that the value of a
digital input should be inverted.
with 'Functions/Change value' in the object editor menu, or by pressing the Arrow Right key.
If an input or output is not used, it can be removed with a checkbox. There is also a
checkbox which states that the value of a digital input should be inverted.
<h2>Connect function objects
A output pin and a input pin is connected by
......@@ -2027,6 +2047,13 @@ The above figure shows the sub sequence of a SubStep. A sub sequence always star
SsBegin object, and ends with an SsEnd object. In its turn a subsequence can contain
subsequences.
<h2>Building Grafcet sequences
Grafcet sequences are easily built in the plc editor by starting with a Step or InitStep
object. By drawing a connection from the lower connection point of the step, and releasing
the connection in an empty space in the work area, a connected Trans object will be created.
In the same way Order objects are created from the right connection point, and from the Trans
object, new Step objects will be created from the upper and lower connections points.
<h1>An Introduction to Function Block Programming
<h2>Blocks to fetch and store values
......@@ -2144,8 +2171,9 @@ the plc should run. Open the volume attributes editor from the navigator menu:
system can be chosen. The volume can at the same time be run in the production system, in a
simulation system and in a educational system, and the systems can have different platforms.
Now, the plcgpm is compiled, by choosing 'File/Build' in the plc editor. Any warning or error
messages will be displayed in the message window.
The plcgpm is compiled by activating 'File/Build' in the plc editor menu. Any warning or error
messages will be displayed in the message window. When building the node, any new or modified
plcpgm will also be compiled.
</topic>
</chapter>
<chapter>
......@@ -2155,11 +2183,11 @@ Call functions from the plc program
The functionobject programming in the plc editor has its limitations, and some tasks can
be done much easier and nicer in c-code. c programming can be achieved in CArithm and
DataArihm where you can put an amount of c-code, but the number of characters are limited
to 1023, and occasionally this is not enough. Then you have two possibilities; to write a
detached application, or to call a c-function from a CArithm or DataArithm. The advantage
with calling a c-function is that all initialization and linking to objects and attributes
are handled by the plc program. The execution of the function is also synchronous with the
execution of the plc thread calling the function.
to 1023 (8191 for the DataArithmL), and occasionally this is not enough. Then you have two
possibilities; to write a detached application, or to call a c-function from a CArithm or
DataArithm. The advantage with calling a c-function is that all initialization and linking
to objects and attributes are handled by the plc program. The execution of the function is
also synchronous with the execution of the plc thread calling the function.
<h1>Write the code
The code is put into a c file, created somewhere under $pwrp_src. We create the file
......@@ -2227,22 +2255,19 @@ The function is called from a CArithm or DataArithm.
<b>Link the plc program
When the source code of the function was compiled, the object module
$pwrp_obj/ra_myfunction.o was created. This has to be added to the link command when the
plc program is built, which is achieved by adding the objectmodule to an option file that
is input to the linker. The optionfile resides on the directory $pwrp_exe and is named
plc_'nodename'_'qbus'_'plcname'.opt, for example
<c>$pwrp_exe/plc_mynode_0999_plc.opt
plc program is built, which is achieved by creating a BuildOptions object in the
directory volume under the NodeConfig object. Insert the name of the object module in
the ObjectModules array. When the directory volume is saved, an opt-file is created on
$pwrp_exe that will be included by the linker when the node is built.
The following line is inserted into this file
<c>$pwr_obj/rt_io_user.o $pwrp_obj/ra_myfunction.o -lpwr_rt -lpwr_usbio_dummy
<c> -lpwr_usb_dummy -lpwr_pnak_dummmy -lpwr_cifx_dummy -lpwr_nodave_dummy -lpwr_epl_dummy
<image> dg_fig116.png
<b>Fig The object module inserted in BuildOptions
We can now build the node and startup Proview runtime.
<b>Debug
One disadvantage when you leave the graphic programming and call c-functions is that you
can not use trace any more for debugging. If you suspect some error in the function code,
can't use trace any more for debugging. If you suspect some error in the function code,
you occasionally have to start the plc program in debug, set a breakpoint in the function
and step forward in the code.
......@@ -2254,12 +2279,12 @@ starting gdb with the pid for the process. pid is viewed by 'ps x'
<c>> ps x
<c>...
<c>5473 pts/0 Sl 0:18 plc_mynode_0999_00003
<c>5473 pts/0 Sl 0:18 plc_mynode_0999_plc
where 5473 is pid for the plc process, and we start the debugger, set a breakpoint in the
function and let the program continue to execute
<c>> gdb -p 5473 plc_mynode_0999_00003
<c>> gdb -p 5473 plc_mynode_0999_plc
<c>(gdb) b MyFunction
<c>(gdb) c
......@@ -2268,12 +2293,12 @@ examine the content in variables (x) etc.
If the plc program is terminated immediately after start, you can restart in debug.
<c>> gdb plc_mynode_0999_00003
<c>> gdb plc_mynode_0999_plc
You can also kill the current plc process and start a new one in debug.
<c>> killall plc_mynode_0999_00003
<c>> gdb plc_mynode_0999_00003
<c>> killall plc_mynode_0999_plc
<c>> gdb plc_mynode_0999_plc
</topic>
</chapter>
......@@ -2935,6 +2960,84 @@ From the simulate graph various events can be simulated.
<topic>communication
Communication
<option> printdisable
Internal communication with Qcom <link>com_intern
External communication with Remote <link>com_remote
<option> printenable
</topic>
<headerlevel>
<topic>com_intern
Internal communication
The internal communication in Proview sends information about volumes, objects,
alarms, events, history data etc. between processes and nodes. There are three
different protocols for alarm handling, net handling and history data, the all are
based on Qcom.
<h1>Qcom
Qcom is a message bus that sends queued messages between processes. Communicating
nodes all have to share the QCom bus, and a node can only attach one bus. The bus
is configured in the BusConfig object by stating the bus identity, a value between
1 and 999.
You also have to configure which nodes are to communicate with each other. With the
default configuration, all nodes in the same project will communicate, and additional
nodes in other project is configured with FriendNodeConfig objects. This can for example
be process stations that are mounted by operator stations.
If you have a project with several nodes, and don't want them all to communicate with
each other, you can set QComAutoConnectDisable in the BusConfig object, and specify
the communcation links with FriendNodeConfig objects.
All Qcom messages are sent with acknowlegement. If the acknowlege doesn't arrive, the
message is resent with double timeout. After a number of resends without reply the link
is regarded to be down. Dependent on the type of net and transmission speed, the timeouts
might have to be adjusted. This can be done with the ResendTime attributes in the
NodeConfig and FriendNodeConfig objects.
See the document QCOM for more information about Qcom.
<h1>Nethandler
The nethandler sends information about volumes and objects between nodes, for example
the volumes in a node, the parent, children or siblings of an object, or the content
of an object or attribute. Also subscriptions are set up via the nethandler, that is
data cyclically sent from one node to another, usually from process stations to operator
stations. The processes for the net handling are rt_neth, rt_neth_acp and rt_tmon.
<h1>Eventhandler
The event handler scans all the supervision object in a node and sends alarms and
events to outunits, for example to the alarm and event lists in the operator enviroment.
They send acknowlegdements back to the event handler. Exactly which alarms and event that
is sent to an outunit is configured in the select list. The select list for the operator
environment is found in the the OpPlace object. Only events and alarms below the stated
hierachies are sent. The process of the event handling, rt_emon, is configured with a
MessageHandler object.
<h1>Historical data storage
The historical data storage means that data is sent from process stations and stored in
a database in a storage server. The server process rt_sevhistmon in the process station
scans all attributes marked for storage, fetches the corresponding values and sends them
to the sev_server process that stores them into the database. When curves of historical data
are to be displayed, a request is sent from the operator environment and a suitable
selection of points are fetched from the database and sent to the operator environment.
See chapter Data Storage <link> dg_sev
<h1>Web and app communication
The web interface and Andriod application fetches information from the Proview realtime
database through the server processes rt_webmon, rt_webmonmh and rt_webmonelog. This
communication is configured by the WebHandler object.
<h1>Status server
The Runtime monitor and Supervision center fetches information from the Status server.
This communication is based on http and soap, and is configured with the StatusServerConfig
object.
</topic>
<topic>com_remote
Remote
The Remote concept in Proview is a way to standardize the methods of communication with other
systems. It describes a number of transport programs and Proview objects used to implement
a variety of different communication protocols and to handle incoming and outgoing messages.
......@@ -2992,6 +3095,12 @@ Function object used in a plc-program for sending messages.
<h2>RemTransRcv
Function object used in a plc-program for receiving messages.
<h2>Logging of transactions
Remote transactions can be logged to text file. The extent of the logging is configured
in the LoggLevel attribute of the RemTrans object. The log file is configured with a
LoggConfig object.
</topic>
<topic> protocols
......@@ -3260,8 +3369,6 @@ file is automatically included when you compile the plc-code. The structures loo
<c> pwr_tUInt32 Id;
<c>} d_a_RequestData;
<c>
<c>#define pwr_sClass_d_a_RequestData d_a_RequestData
<c>
<c>typedef struct {
<c> pwr_tUInt32 Id;
<c> pwr_tFloat32 data_1;
......@@ -3270,8 +3377,6 @@ file is automatically included when you compile the plc-code. The structures loo
<c> pwr_tInt32 data_4;
<c>} d_a_Report;
<c>
<c>#define pwr_sClass_d_a_Report d_a_Report
<c>
<c>typedef struct {
<c> pwr_tUInt32 Id;
<c> pwr_tFloat32 data_1;
......@@ -3280,15 +3385,11 @@ file is automatically included when you compile the plc-code. The structures loo
<c> pwr_tInt32 data_xx;
<c>} a_d_Data;
<c>
<c>#define pwr_sClass_a_d_Data a_d_Data
<c>
<c>typedef struct {
<c> pwr_tUInt32 Id;
<c> pwr_tInt32 func_no;
<c> pwr_tInt16 err_code;
<c>} a_d_Data;
<c>
<c>#define pwr_sClass_a_d_Error a_d_Error
<h2>The plc code
......@@ -3313,9 +3414,8 @@ After execution the flag will be reset.
<h2>Send subwindow
In the send subwindow we fill in the data in the send-buffer. The send-buffer for the message to send
is connected to a DataArithm. The special 'classdef'-syntax casts Da1 to be a pointer to a
d_a_RequestData-struct (or actually it will cast this pointer to a pwr_sClass_d_a_RequestData,
therefore the define-statement as described above).
is connected to a DataArithm. The special 'structdef'-syntax casts Da1 to be a pointer to a
d_a_RequestData-struct.
<image> dg_fig74.png
......@@ -3328,6 +3428,7 @@ the parameters we just add more DataArithm's and continue in the same way.
<image> dg_fig75.png
</topic>
</headerlevel>
</chapter>
<chapter>
......@@ -3579,6 +3680,18 @@ sizes by adding these lines in /etc/mysql/my.cnf
<c>innodb_buffer_pool_size=1G
<c>innodb_additional_mem_pool_size=20M
For large databases the log file size has to be increased, and the one file per table
option will give more information and control of the disk space.
<c>innodb_log_file_size=128M
<c>innodb_log_buffer_size=16M
<c>innodb_file_per_table
For calculation of disk space for innodb about 47 bytes per stored value is needed.
The storage of one signal with 10 s cycletime in one year requires about
6 * 60 * 24 * 365 * 47 bytes = 148 Mb. The UseDeadBand option in the SevHist object
will reduce this figure.
<h2>SQLite
Install libsqlite3-0 on the storage station.
......@@ -4306,7 +4419,7 @@ setting several bits in the mask. If you, for example, have several cards in a r
of the cards should be handled by the plc-process and some by an application, the rack unit
has to be handled by both the plc and the application. Whether it works, to handle a
unit from several processes, depends on how the I/O methods for the unit are written.
For example for Profibus, you can not divide the handling of slaves into different
For example for Profibus, you can't divide the handling of slaves into different
processes.
<c>#include rt_io_base.h
......@@ -4369,7 +4482,7 @@ The makefile is executed by positioning on the directory and writing make
You can also insert the build command into the Application object for the application
in the attribute BuildCmd. In this case the build command is
<c>make -f $pwrp_src/myappl/makefile
<c>make --directory $pwrp_src/myappl -f makefile
This command is executed when the node is built from the configurator. This is a
way to ensure that all applications are updated when the node is built.
......@@ -4726,7 +4839,7 @@ IsJavaFrame has to be set in GraphAttributes in the Ge editor.
A java applet is opened from a html file. It is not scalable, and the privileges are fetched
from the DefaultWebPriv of the Security object, and are not affected of the logged in user.
Java applets can not be viewed in the local java environment. To be able to export a graph as
Java applets can't be viewed in the local java environment. To be able to export a graph as
a java applet, IsJavaApplet has to be set in GraphAttributes in the Ge editor.
<image> dg_fig102.png
......@@ -4764,7 +4877,7 @@ in with hierarchies from which alarms and events should be displayed.
<h2>Help texts
The help texts for the project in the file xtt_help.dat, is exported to html files on
$pwrp_web by the build method of the WebHandler object. The start page for the help texts are
$wprp_web/xtt_help_index.html. This is showed as default in the right frame of the home page
$pwrp_web/xtt_help_index.html. This is showed as default in the right frame of the home page
if no other URL is stated in the StartURL attribute of the WebHandler.
If the helptext contains image tags, the png or gif files have to be copied to $pwrp_web.
......@@ -4825,6 +4938,120 @@ at installation of the pwrrt package, would be
</topic>
</chapter>
<chapter>
<topic>android_app
Android application
<image>dg_fig119.png
<b>Android application
The Android application can be installed on cell phones and tablet computers with operating
system Android. The application connects to a process or operator station and can show
- the runtime navigator.
- process graphs.
- plc trace.
- alarm and event lists.
- cross references.
To install the app, download PwrXtt.apk from the Proview download page on Source Forge and
install on your device.
<h1>Configuration
The app uses the same server processes as the web interface, rt_webmon and rt_webmonmh, that
is configured by the WebHandler object. See chapter Java Operator Environment for more info.
<h2>Start menu
When the application is started a startmenu is displayed, or if this is not configured, the
runtime navigator is displayed.
The start menu is configured with AppGraph and AppLink objects under the WebHandler object.
The AppGraph is used to open Ge graphs, and the AppLink is a link to a web page or document.
If you want to separate the App objects from the Web object under the WebHandler object, you
can create a sub hierarchy with a $NodeHier object.
In the AppGraph object, the name of the pwg-file is specified, an image file for the icon,
and a text that is written below the icon. In the AppLink object, an URL is specified,
together with image file and text.
<image>dg_fig117.png
<b>Configuration of start menu
<image>dg_fig118.png
<b>Fig Start menu
<h2>Distribution
The attribute AppUseWebDir in the WebHandler object specifies if all files are fetched from
the $pwrp_web directory, or if com files are fetched from $pwrp_exe and $pwrp_load. If
AppUseWebDir is set, the app works analogous with the web interface and pwg and flw files
has to be copied to $pwrp_web.
Table over files that are used by the application. If AppUseWebDir is set, these files
should be distributed to $pwrp_web.
<b>Function <t>Filetype <t>Directory
Ge graphs <t>pwg <t>$pwrp_exe
Plc trace <t>flw <t>$pwrp_load
Crossreferenser <t>rtt_crr*.dat <t>$pwrp_load
Helpfiles <t>html <t>$pwrp_web
Icons <t>png, gif etc <t>$pwrp_exe
<h2>Web server
The app reads files through a web server, eg apache, that has to be started. As for the web
interface, there is an alias pwrp_web defined, that points to $pwrp_web. For apache this is
specified in the file /etc/apache2/apache2.conf.
<c>Alias /pwrp_web/ /pwrp/common/web/
<c><Directory /pwrp/common/web>
<c> Options Indexes MultiViews
<c> AllowOverride None
<c> Order allow,deny
<c> Allow from all
<c></Directory>
If AppUserWebDir is zero, aliases also have to be defined for pwrp_exe and pwrp_load. In
this case the files doesn't need to be copied to $pwrp_web, but are read from $pwrp_load or
$pwrp_exe where they normally reside. flw-files and crossreferences files are read from
$pwrp_load, and other files, pwg, png etc, from $pwrp_exe.
Note the the pwrp_exe directory is platform dependent.
<c>Alias /pwrp_load/ /pwrp/common/load/
<c><Directory /pwrp/common/load>
<c> Options Indexes MultiViews
<c> AllowOverride None
<c> Order allow,deny
<c> Allow from all
<c></Directory>
<c>Alias /pwrp_exe/ /pwrp/x86_linux/exe/
<c><Directory /pwrp/x86_linux/exe>
<c> Options Indexes MultiViews
<c> AllowOverride None
<c> Order allow,deny
<c> Allow from all
<c></Directory>
To display Proview help texts there also has to be an alias for pwr_doc that points at
$pwr_doc. Normally this is added at installation of the pwrrt package.
<c>Alias /pwr_doc/ /usr/pwrrt/doc/
<c><Directory /usr/pwrrt/doc>
<c> Options Indexes MultiViews
<c> AllowOverride None
<c> Order allow,deny
<c> Allow from all
<c></Directory>
<image>dg_fig120.png
<b>Fig Plc trace reads flw-filer from $pwrp_load
</topic>
</chapter>
<chapter>
<topic>conf_test
......@@ -4847,7 +5074,7 @@ The methods of the signals objects check for example that they are connected to
the method for a PlcPgm checks that it is connected to a plc thread object etc. The syntax methods
captures a great deal of errors, but does not guarantee that everything will work faultlessly.
The syntax methods are executed from 'Functions/Sytax Check' in the Configurator menu.
The syntax methods are executed from 'Functions/Syntax Check' in the Configurator menu.
</topic>
......@@ -5335,8 +5562,8 @@ As 'advanced user' you can open the input field with 'ArrowRight', as a faster a
<bookmark> symbol_file
<h1>Symbol file
The symbolfile is a command-file that is executed at wtt startup.
It can contain definitions of symbols and other wtt commands.
The symbolfile is a command-file that is executed at configurator startup.
It can contain definitions of symbols and other configurator commands.
The default filename of the symbolfile is $pwrp_login/wtt_symbols.pwr_com.
Here are some examples of useful commands.
......@@ -5468,7 +5695,7 @@ By clicking the arrow, the object is displayed.
<topic> utilities_refman
Utilities
The utilities window is a graphic interface to different commands in wtt.
The utilities window is a graphic interface to different configurator commands.
For more information about the commands, see chapter Commands.
</topic>
</chapter>
......@@ -5800,7 +6027,7 @@ multiline text with max 1023 characters. The objects are found under 'Edit' in t
The point object is a free connection point that is used to branch a connection or to control
the layout of a connection. Point is found under 'Edit' in the menu.
<b>GRAFCET
<b>Grafcet
Grafcet sequences are built with specific Grafcet objects as InitStep, Step, Trans and Order.
The connections between the objects follow specific rules. The vertical pins in a Step object
are for example connected to Trans objects, and the horizontal pin is connected to an order
......@@ -5974,6 +6201,7 @@ index <t>List of topics<link> helpindex
h1 <t>Header 1 <link> header1
h2 <t>Header 2 <link> header2
b <t>Bold text <link> bold
c <t>Code <link> helpcode
t <t>Tab <link> helptab
hr <t>Horizontal line<link> hr
include <t>Include other helpfiles<link> include
......@@ -5986,8 +6214,11 @@ headerlevel <t>Increase or decrease header level <link> headerlevel
pagebreak <t>New page<link> pagebreak
option <t>Options<link> option
style <t>Specific text style <link> style
Titlepage and document info<link> special_topics
<option> disable
<b>Example <link> helpfile example
<option> enable
</topic>
<headerlevel>
......@@ -6101,6 +6332,18 @@ will be displayed as
<b>This is a bold line
</topic>
<topic> helpcode
Code
<ib><c>
<i>The <c> tag will display a line with the code font Courier.
<i>The tag should be placed at the beginning of the line.
<b>Example
<i><c>for ( i = 0; i < 10; i++)
will be displayed as
<c>for ( i = 0; i < 10; i++)
</topic>
<topic> helptab
Tab
<ib><t>
......@@ -6201,6 +6444,25 @@ function <t>Style used for functions and commands. Large title and pagebreak aft
<i></topic>
</topic>
<topic> special_topics
Title page and document info
The title page and page for document info can be created with two special topics.
<h2>__DocumentTitlePage
Topic for title page. Is place first in a help file.
<i><topic> __DocumentTitlePage
<i>...
<i></topic>
<h2>__DocumentInfoPage
Topic for document information, eg copyright. Is placed after the titlepage.
<i><topic> __DocumentInfoPage
<i>...
<i></topic>
</topic>
<topic> helpfile example
Helpfile example
<i><topic> helpfile_example
......@@ -6419,282 +6681,116 @@ he is denied access.
From the runtime navigator, you can with the login/logut command, login as another user and
thereby change your privileges.
<h1>Process graphics on the intranet
<h1>Web access
For process graphics on the web there is a special login frame that can be added to the
start menu of a system page. The login frame checks the username and password.
</topic>
<topic> pwr_user
pwr_user
start menu of the project home page. This is enabled in WebHandler.EnableLogin attribute.
The login frame checks the username and password.
You use pwr_user to create systemgroups and users in the user database.
The configuration is performed with commands.
pwr_user is started from the command prompt.
It's possible to specify a specific system group for web users in the WebSystemGroup
attribute in the $Security object. The default group is common.web, which doesn't exist in
the template user database. The first existing parent group, common, is then used instead
and the users in this group has access to the web. If you want to restrict the web access,
either create the common.web group without UserInherit, or create another group and insert
this into the $Security object. Also create proper users in the group.
Below is a description of the different commands available to create, modify and list
systemgroups and users.
<h1>Edit the user database
The user database is edited from the adminstrator or configurator. It is opened from
File/Open/UserDatabase in the menu.
See chapter Administration <link>adm_user
add group <t>Add a system group <link> pwr_user add group
add user <t>Add a user <link> pwr_user add user
get <t>Get a user<link> pwr_user get
list <t>List systemgroups and users <link> pwr_user list
load <t>Load the latest saved database <link> pwr_user load
modify group <t>Modify a system group <link> pwr_user modify group
modify user <t>Modify a user <link> pwr_user modify user
remove group <t>Remove a system group <link> pwr_user remove group
remove user <t>Remove a user <link> pwr_user remove user
save <t>Save <link> pwr_user save
su <t>Login as super user <link> pwr_user su
You can also edit the database by commands in pwr_user,
Man kan även editera databasen med kommandon i pwr_user, see pwr_user in chapter Tools. <link>pwr_user
</topic>
<headerlevel>
<topic>pwr_user add
add
</chapter>
add group <link> pwr_user add group
add user <link> pwr_user add user
</topic>
<chapter>
<topic> classeditor
Class Editor
<headerlevel>
<topic> pwr_user add group
add group
This section describes how to create new classes in Proview.
There are a number of different cases when you might consider creating a new class.
Create a systemgroup
<h2>Data objects
You want to store data in a data structure, for example to easy gain access to the data from
applications. You can also create data objects that describe material that passes through
a plant, where the data object contains properites for one material, e.g. length, width etc.
The material can be moved between NMps cells to indicate the position of a material in the
plant.
<c>pwr_user> add group 'name' [/nouserinherit]
<h2>Plc function object
A function object used in plc programming consists of a class that defines the input and
output pins of the function object, and possible internal attributes. This type of objects
also consist of codes that are executed by the plc program. You can choose to create the code
as plc code or c code.
/nouserinherit <t>The attribute UserInherit is not set for the systemgroup.
<t>As default UserInherit is set.
</topic>
<topic> pwr_user add user
add user
Create a user.
<h2>Components
A component object reflects a component in the plant, and is often divided into two or three
different classes, a main object, a function object and a bus object, possibly also a
simulate object. The main object is placed in the plant hierarchy and contains the signals
that are connected to the component, in addition to other configuration data. A function
object, placed in a plc program, is connected to the main object and works partly with data
from its own inputs and outputs, and partly with signals and other parameters in the main
object. If the signal exchange is made via Profibus, you kan also create a special module
object that contains channel objects for the data transported on the Profibus. It is
sufficient to make one connection between the main and the module object, to connect all
signals and channels in the component. The simulation object is a function object, that is
connected to the main object, and that simulates the component when the system is run in
simulation mode.
pwr_user> add user 'name' /group= /password= [/privilege=]
[/rtread][/rtwrite][/system][/maintenance][/process]
[/instrument][/operator1][/operator2]...[oper10][/devread]
[/devplc][/devconfig][/devclass]
<h2>Subclasses of components
Proview contains a number of basecomponent classes for valves, motors etc. These are designed
in a general fashion to cover a large number of components. Often, you create a subclass that
is adapted to a specific component, and that, for example, contains a link to a data sheet,
helptext etc. for this component. By creating a subclass of a basecomponent you inherit all
the methods and attributes from this, but you also have the possibility to increase the
functionality with more attributes and more plc-code.
/group <t>Systemgroup of the user
/password <t>Password of the user
/privilege <t>Privileges if this is supplied as a mask, i.e an integer value
/rtread <t>The user is granted RtRead
/rtwrite <t>The user is granted RtWrite
/system <t>The user is granted System
/maintenance <t>The user is granted Maintenance
/process <t>The user is granted Process
/operator1 <t>The user is granted Operator1
...
/operator9 <t>The user is granted Operator9
/operator10 <t>The user is granted Operator10
/devread <t>The user is granted DevRead
/devplc <t>The user is granted DevPlc
/devconfig <t>The user is granted DevConfig
/devclass <t>The user is granted DevClass
</topic>
</headerlevel>
<h2>Aggregates
An aggregate reflects a plant part that contains a number of components. In this case, you can
create an aggregate class that contains the different components in shape of attribute
objects. To the aggregate, there is also a function object, that calls the functions objects
for the present components. Aggregates can also contain other aggregates and give rise to
quite extensive object structures. In principle, you could build a plant is one single object,
but in practice it is appropriate to keep the object structure on a fairly low level. It is
mainly when you have several identical aggregates that you benefit by creating an aggregate
object of a plant part.
<topic> pwr_user get
get
<option> printdisable
<b>Database structure <link> ced_databasestructure
<b>Class description <link> ced_classdescription
<b>Type description <link> ced_typedescription
<b>Create classes <link> ced_createclasses
<b>Build classvolume <link> ced_build
<b>Documentation of classes<link> class docblock
<option> printenable
Fetches a user with an algorithm used in runtime.
pwr_user> get 'username' /group= /password=
</topic>
<topic> pwr_user list
list
Lists systemgroups and users.
pwr_user> list
</topic>
<headerlevel>
<topic>ced_databasestructure
Database structure
<h1>Object
In the chapter Database structure there is a description of how objects are constructed. Now there is
reason to go a little further in the subject.
<topic> pwr_user load
load
An object consists of an object head and an object body. The object head contains information
about the object name, class and relation to other objects. The object body contains the data
of the object.
Loads the latest saved database and reverts the current session.
</topic>
<topic> pwr_user modify
modify
<h2>Object header
An object has a name with a maximum size of 31 characters that is stored in the object header.
modify group <link> pwr_user modify group
modify user <link> pwr_user modify user
</topic>
In the object header there is also a link to the class description of the object. The class
description contains information of how to interpret the data of the object, how it is divided
into different attributes, and the type of the attributes. You also find the methods that work
on the object.
<headerlevel>
<topic> pwr_user modify group
modify group
An object is placed in a tree structure and the object head contains pointer to the closest
relatives: father, backward sibling, forward sibling and first child.
Modify a systemgroup.
<c>pwr_user> modify group 'name' /[no]userinherit
/userinherit <t>Sets the attribute UserInherit that states that the systemgroup
<t>inherits users form its parent in the systemgroup hierarchy.
<t>Negated with /nouserinherit
</topic>
<topic> pwr_user modify user
modify user
Modify a user.
<c>pwr_user> modify user 'name' /group= [/password=][/privilege=]
<c> [/rtread][/rtwrite][/system][/maintenance][/process]
<c> [/instrument][/operator1][/operator2]...[oper10][/devread]
<c> [/devplc][/devconfig][/devclass]
/group <t>Systemgroup of the user
/password <t>Password of the user
/privilege <t>Privileges if this is supplied as a mask, i.e an integer value
/rtread <t>The user is granted RtRead
/rtwrite <t>The user is granted RtWrite
/system <t>The user is granted System
/maintenance <t>The user is granted Maintenance
/process <t>The user is granted Process
/operator1 <t>The user is granted Operator1
...
/operator9 <t>The user is granted Operator9
/operator10 <t>The user is granted Operator10
/devread <t>The user is granted DevRead
/devplc <t>The user is granted DevPlc
/devconfig <t>The user is granted DevConfig
/devclass <t>The user is granted DevClass
</topic>
</headerlevel>
<topic> pwr_user remove
remove
remove group <link> pwr_user remove group
remove user <link> pwr_user remove user
</topic>
<headerlevel>
<topic> pwr_user remove group
remove group
Remove a system group.
<c>pwr_user> remove group 'name'
</topic>
<topic> pwr_user remove user
remove user
Remove a user.
<c>pwr_user> remove user 'name' /group=
</topic>
</headerlevel>
<topic> pwr_user save
save
Save the current session.
<c>pwr_user> save
</topic>
<topic> pwr_user su
su
Login as super user. As super user you can see passwords for users when listing the database.
su requires password.
<c>pwr_user> su 'password'
</topic>
</headerlevel>
</headerlevel>
</chapter>
<chapter>
<topic> classeditor
Class Editor
This section describes how to create new classes in Proview.
There are a number of different cases when you might consider creating a new class.
<h2>Data objects
You want to store data in a data structure, for example to easy gain access to the data from
applications. You can also create data objects that describe material that passes through
a plant, where the data object contains properites for one material, e.g. length, width etc.
The material can be moved between NMps cells to indicate the position of a material in the
plant.
<h2>Plc function object
A function object used in plc programming consists of a class that defines the input and
output pins of the function object, and possible internal attributes. This type of objects
also consist of codes that are executed by the plc program. You can choose to create the code
as plc code or c code.
<h2>Components
A component object reflects a component in the plant, and is often divided into two or three
different classes, a main object, a function object and a bus object, possibly also a
simulate object. The main object is placed in the plant hierarchy and contains the signals
that are connected to the component, in addition to other configuration data. A function
object, placed in a plc program, is connected to the main object and works partly with data
from its own inputs and outputs, and partly with signals and other parameters in the main
object. If the signal exchange is made via Profibus, you kan also create a special module
object that contains channel objects for the data transported on the Profibus. It is
sufficient to make one connection between the main and the module object, to connect all
signals and channels in the component. The simulation object is a function object, that is
connected to the main object, and that simulates the component when the system is run in
simulation mode.
<h2>Subclasses of components
Proview contains a number of basecomponent classes for valves, motors etc. These are designed
in a general fashion to cover a large number of components. Often, you create a subclass that
is adapted to a specific component, and that, for example, contains a link to a data sheet,
helptext etc. for this component. By creating a subclass of a basecomponent you inherit all
the methods and attributes from this, but you also have the possibility to increase the
functionality with more attributes and more plc-code.
<h2>Aggregates
An aggregate reflects a plant part that contains a number of components. In this case, you can
create an aggregate class that contains the different components in shape of attribute
objects. To the aggregate, there is also a function object, that calls the functions objects
for the present components. Aggregates can also contain other aggregates and give rise to
quite extensive object structures. In principle, you could build a plant is one single object,
but in practice it is appropriate to keep the object structure on a fairly low level. It is
mainly when you have several identical aggregates that you benefit by creating an aggregate
object of a plant part.
<option> printdisable
<b>Database structure <link> ced_databasestructure
<b>Class description <link> ced_classdescription
<b>Type description <link> ced_typedescription
<b>Create classes <link> ced_createclasses
<b>Build classvolume <link> ced_build
<b>Documentation of classes<link> class docblock
<option> printenable
</topic>
<headerlevel>
<topic>ced_databasestructure
Database structure
<h1>Object
In the chapter Database structure there is a description of how objects are constructed. Now there is
reason to go a little further in the subject.
An object consists of an object head and an object body. The object head contains information
about the object name, class and relation to other objects. The object body contains the data
of the object.
<h2>Object header
An object has a name with a maximum size of 31 characters that is stored in the object header.
In the object header there is also a link to the class description of the object. The class
description contains information of how to interpret the data of the object, how it is divided
into different attributes, and the type of the attributes. You also find the methods that work
on the object.
An object is placed in a tree structure and the object head contains pointer to the closest
relatives: father, backward sibling, forward sibling and first child.
The structure of an object head are common for all types of objects.
The structure of an object head are common for all types of objects.
<h2>Object body
An object can have two bodies, one body that contains the data that is needed in runtime.
......@@ -7318,7 +7414,7 @@ in the plc code for the object, you have to consider that the attribute is a poi
fetch the value with GetIpPtr.
<b>SequenceReset
It is possible to use GRAFCET sequences in a component. One difference from an ordinary
It is possible to use Grafcet sequences in a component. One difference from an ordinary
sequence are that the reset object should be defined as an attribute of class Dv in the
main object, with the name 'SequenceReset'. SubSteps can not be used in the sequence.
......@@ -7788,17 +7884,18 @@ Documentation of classes
For $ClassDef and $Attribute objects, there is a documentation block, that is filled in from
the object editor. The documentations block, together with the class description, is used
when class documentation is generated to xtthelp or html format.
when class documentation is generated to xtthelp or html format when the class volume is
built.
The documentation block for the $ClassDef object should contain a description of the class,
and the documentation block for the $Attribute object a description of the attribute.
<option> printdisable
Genererate Xtt helpfiles <link> class generate xtthelp
Genererate html documentation <link> class generate html
ClassDef <link> docblock classdef
Attribute <link> docblock attribute
c- and h-files <link> docblock ccode
Genererate Xtt helpfiles <link> class generate xtthelp
Genererate html documentation <link> class generate html
<option> printenable
</topic>
......@@ -8185,104 +8282,379 @@ The path is the root directory of this tree.
</chapter>
<chapter>
<topic>opc_intro
OPC
Proview has implemented the OPC XML/DA protocol for data exchange with other automation
software. For more information about OPC see www.opcfoundation.org.
<topic> dg_tools
Verktyg
<option> printdisable
OPC Server <link> opc_server
OPC Client <link> opc_client
<option> printenable
pwrc <t>Command interface to development database. <link> dg_pwrc
wb_ge <t>Ge editor <link> wb_ge
co_help <t>Help window. <link> co_help
pwr_user <t>Command line interface to user database. <link> pwr_user
wb_ldlist <t>Check loadfile versions. <link> wb_ldlist
</topic>
<headerlevel>
<topic>opc_server
OPC XML/DA Server
An OPC XML/DA Server is a web service from which an OPC XML/DA Client can get information of a
Proview system. A opc client can, for example, browse the object hierachy, read and write
attribute value, and subscribe to attributes.
<topic> dg_pwrc
pwrc
The opc server implements the http protocol as well and is not connected to a web server. The
port number of the opc_server is set to 80, the URI for the web service is on node 'mynode' is
Command interface to development database.
<c>http://mynode
<c>pwrc Proview workbench commands
If a web server is present, this normally has allocated the port 80, and another port has to be
chosen for the opc_sever. If port 8080 is chosen, the URI will be
<c>Arguments:
<c> -v 'volume' Load volume 'volume'.
<c> -h Print usage.
<c>http://mynode:8080
<c> Other arguments are treated as a command and passed to the command parser
<c> If a command is given as an argument, the command will be executed and the
<c> program is then terminated.
<c> If no command is given, pwrc will prompt for a command.
<h1>Browsing
The OPC XML/DA browsing supports branches and items. The item contains a value, while the
branch is an hierarchical component without a value. There is no support for objects, so an
object has to be implemented as a branch, while an attribute is implemented as an item. Also
arrays are implemented as branches, while array elements (that is not a class) is implemented
as an item.
<c>Examples:
<c> $ pwrc -v MyVolume
<c> pwrc>
<h1>Threads
If the opc client uses the HoldTime and WaitTime attributes in the SubscriptionPolledRefresh
request, the opc server has to be multi threaded, that is, for every request, a new thread is
created. If the HoldTime and WaitTime is not used (as in the Proview opc client), all requests
can be handled in a single thread, which is less time consuming. Multithreads or not are
configured in the configuration object for the opc server. The default value is 'IfNeeded'
which turns on the multithreading for a client if HoldTime or WaitTime are detected.
<c> $ pwrc -a show volume
<c> directory Attached Db $DirectoryVolume 254.254.254.253
<c> MyVolume Db $RootVolume 0.1.99.20
<h1>Client access
To gain access to a Proview opc server, the ip address of the client has to be configured in
the configuration object for the opc server. Here you can also choose if the client has
ReadWrite or ReadOnly access, where ReadOnly allows the client to read and subscribe to
attribute values, while ReadWrite also is allowed to write attribute values.
</topic>
<h1>Buffering of subscriptions
The server does not support buffering of subscriptions.
<topic> co_help
co_help Help window
Open a Proview help file. By default the project help file is opened.
<h1>Configuration
The opc server is configured with a Opc_ServerConfig object that is placed in the Node
hierarchy. The configuration object will cause a server process (opc_server) to start at
Proview startup.
</topic>
</headerlevel>
<c>>co_help
<headerlevel>
<topic> opc_client
OPC XML/DA Client
<c>Usage:
The Proview opc client is implemented as an extern volume, which is mounted somewhere in the
object tree of the root volume. Under the mount object, the branches and items of the server
are displayed with special opc objects. An Opc_Hier object represents a branch and Opc_Int an
item with an integer value, Opc_Boolean an item with a boolean value etc. If an item object is
opened, the item values are displayed in a Value attribute, and some other properties as
description, lowEU, highEU, engineeringUnit, lowIR and highIR are displayed. When the object is
opened a subscription is started, and the value is continuously updated. For integer and float
items there is also an object graph that displays a trend of the value.
<c> co_help [-t 'topic'] [-s 'sourcefile'] [-b 'bookmark']
With the opc client you can
<c>Arguments:
- browse the branches and items in Xtt, and also display item values and set item values.
- subscribe item values and display them in a Ge graph.
- fetch item values into the plc logic and also write values to items.
<c> -t Help topic, default 'index'
<c> -s Source helpfile
<c> -b Bookmark
<c> -l Language, e.g sv_se
<c> -c Open Configuration help
<c> -d Open Designer's Guide
<c> -g Open Ge Reference Manual
<c> -o Open Operator Help
</topic>
The opc client requires that name browsing is implemented in the opc server.
<topic> wb_ge
wb_ge Ge editor
Start the Ge editor without opening a database.
Useful when you fast want to open a Ge graph, but will not make any database
connections.
<h1>Ge
An item value can be displayed in a Ge graph by using the name in the extern volume. For
example, if the mount object for the extern volume is 'Ext-P1', and the local name of the item
is
<c>> wb_ge ['pwg-file']
</topic>
<c> /P1/Signals/Ai22
<topic> pwr_user
pwr_user
the signal name in Ge will probably be (this is dependent of the browsing function of the
server)
You use pwr_user to create systemgroups and users in the user database.
The configuration is performed with commands.
<c> Ext-P1-P1-Signals-Ai22.Value##Float32
pwr_user is started from the command prompt.
presuming that it is a float datatype.
Below is a description of the different commands available to create, modify and list
systemgroups and users.
<h1>Plc
Item values can also be handled in the plc program, using the GetExt... and CStoExt... objects.
The objects normally used for getting and storing attributes GetDp, GetAp, StoDp, StoAp etc.
add group <t>Add a system group <link> pwr_user add group
add user <t>Add a user <link> pwr_user add user
get <t>Get a user<link> pwr_user get
list <t>List systemgroups and users <link> pwr_user list
load <t>Load the latest saved database <link> pwr_user load
modify group <t>Modify a system group <link> pwr_user modify group
modify user <t>Modify a user <link> pwr_user modify user
remove group <t>Remove a system group <link> pwr_user remove group
remove user <t>Remove a user <link> pwr_user remove user
save <t>Save <link> pwr_user save
su <t>Login as super user <link> pwr_user su
</topic>
<headerlevel>
<topic>pwr_user add
add
add group <link> pwr_user add group
add user <link> pwr_user add user
</topic>
<headerlevel>
<topic> pwr_user add group
add group
Create a systemgroup
<c>pwr_user> add group 'name' [/nouserinherit]
/nouserinherit <t>The attribute UserInherit is not set for the systemgroup.
<t>As default UserInherit is set.
</topic>
<topic> pwr_user add user
add user
Create a user.
pwr_user> add user 'name' /group= /password= [/privilege=]
[/rtread][/rtwrite][/system][/maintenance][/process]
[/instrument][/operator1][/operator2]...[oper10][/devread]
[/devplc][/devconfig][/devclass]
/group <t>Systemgroup of the user
/password <t>Password of the user
/privilege <t>Privileges if this is supplied as a mask, i.e an integer value
/rtread <t>The user is granted RtRead
/rtwrite <t>The user is granted RtWrite
/system <t>The user is granted System
/maintenance <t>The user is granted Maintenance
/process <t>The user is granted Process
/operator1 <t>The user is granted Operator1
...
/operator9 <t>The user is granted Operator9
/operator10 <t>The user is granted Operator10
/devread <t>The user is granted DevRead
/devplc <t>The user is granted DevPlc
/devconfig <t>The user is granted DevConfig
/devclass <t>The user is granted DevClass
</topic>
</headerlevel>
<topic> pwr_user get
get
Fetches a user with an algorithm used in runtime.
pwr_user> get 'username' /group= /password=
</topic>
<topic> pwr_user list
list
Lists systemgroups and users.
pwr_user> list
</topic>
<topic> pwr_user load
load
Loads the latest saved database and reverts the current session.
</topic>
<topic> pwr_user modify
modify
modify group <link> pwr_user modify group
modify user <link> pwr_user modify user
</topic>
<headerlevel>
<topic> pwr_user modify group
modify group
Modify a systemgroup.
<c>pwr_user> modify group 'name' /[no]userinherit
/userinherit <t>Sets the attribute UserInherit that states that the systemgroup
<t>inherits users form its parent in the systemgroup hierarchy.
<t>Negated with /nouserinherit
</topic>
<topic> pwr_user modify user
modify user
Modify a user.
<c>pwr_user> modify user 'name' /group= [/password=][/privilege=]
<c> [/rtread][/rtwrite][/system][/maintenance][/process]
<c> [/instrument][/operator1][/operator2]...[oper10][/devread]
<c> [/devplc][/devconfig][/devclass]
/group <t>Systemgroup of the user
/password <t>Password of the user
/privilege <t>Privileges if this is supplied as a mask, i.e an integer value
/rtread <t>The user is granted RtRead
/rtwrite <t>The user is granted RtWrite
/system <t>The user is granted System
/maintenance <t>The user is granted Maintenance
/process <t>The user is granted Process
/operator1 <t>The user is granted Operator1
...
/operator9 <t>The user is granted Operator9
/operator10 <t>The user is granted Operator10
/devread <t>The user is granted DevRead
/devplc <t>The user is granted DevPlc
/devconfig <t>The user is granted DevConfig
/devclass <t>The user is granted DevClass
</topic>
</headerlevel>
<topic> pwr_user remove
remove
remove group <link> pwr_user remove group
remove user <link> pwr_user remove user
</topic>
<headerlevel>
<topic> pwr_user remove group
remove group
Remove a system group.
<c>pwr_user> remove group 'name'
</topic>
<topic> pwr_user remove user
remove user
Remove a user.
<c>pwr_user> remove user 'name' /group=
</topic>
</headerlevel>
<topic> pwr_user save
save
Save the current session.
<c>pwr_user> save
</topic>
<topic> pwr_user su
su
Login as super user. As super user you can see passwords for users when listing the database.
su requires password.
<c>pwr_user> su 'password'
</topic>
</headerlevel>
<topic> wb_ldlist
wb_ldlist
Display version of volumes in dbs-files.
Used to investigate version mismatch.
> wb_ldlist <dbs-file>
<b>Example
<c>wb_ldlist $pwrp_load/volpwrdemo.dbs
<c>Volume VolPwrDemo 27-MAR-2014 11:06:48.67 0.254.254.200 RootVolume
<c>VolRef VolPwrDemo 27-MAR-2014 11:06:48.67 0.254.254.200 RootVolume
<c>VolRef pwrs 14-FEB-2014 16:57:21.19 0.0.0.1 ClassVolume
<c>VolRef pwrb 14-FEB-2014 16:57:24.82 0.0.0.2 ClassVolume
<c>VolRef BaseComponent 14-FEB-2014 16:57:52.68 0.0.0.10 ClassVolume
<c>VolRef OtherManufacturer 14-FEB-2014 16:58:22.73 0.0.250.1 ClassVolume
<c>VolRef ABB 14-FEB-2014 16:58:10.44 0.0.250.2 ClassVolume
<c>VolRef Profibus 14-FEB-2014 16:57:34.40 0.0.250.7 ClassVolume
<c>VolRef Inor 14-FEB-2014 16:58:16.18 0.0.250.8 ClassVolume
<c>VolRef OtherIO 14-FEB-2014 16:57:55.31 0.0.250.10 ClassVolume
</topic>
</headerlevel>
</chapter>
<chapter>
<topic>opc_intro
OPC
Proview has implemented the OPC XML/DA protocol for data exchange with other automation
software. For more information about OPC see www.opcfoundation.org.
<option> printdisable
OPC Server <link> opc_server
OPC Client <link> opc_client
<option> printenable
</topic>
<headerlevel>
<topic>opc_server
OPC XML/DA Server
An OPC XML/DA Server is a web service from which an OPC XML/DA Client can get information of a
Proview system. A opc client can, for example, browse the object hierachy, read and write
attribute value, and subscribe to attributes.
The opc server implements the http protocol as well and is not connected to a web server. The
port number of the opc_server is set to 80, the URI for the web service is on node 'mynode' is
<c>http://mynode
If a web server is present, this normally has allocated the port 80, and another port has to be
chosen for the opc_sever. If port 8080 is chosen, the URI will be
<c>http://mynode:8080
<h1>Browsing
The OPC XML/DA browsing supports branches and items. The item contains a value, while the
branch is an hierarchical component without a value. There is no support for objects, so an
object has to be implemented as a branch, while an attribute is implemented as an item. Also
arrays are implemented as branches, while array elements (that is not a class) is implemented
as an item.
<h1>Threads
If the opc client uses the HoldTime and WaitTime attributes in the SubscriptionPolledRefresh
request, the opc server has to be multi threaded, that is, for every request, a new thread is
created. If the HoldTime and WaitTime is not used (as in the Proview opc client), all requests
can be handled in a single thread, which is less time consuming. Multithreads or not are
configured in the configuration object for the opc server. The default value is 'IfNeeded'
which turns on the multithreading for a client if HoldTime or WaitTime are detected.
<h1>Client access
To gain access to a Proview opc server, the ip address of the client has to be configured in
the configuration object for the opc server. Here you can also choose if the client has
ReadWrite or ReadOnly access, where ReadOnly allows the client to read and subscribe to
attribute values, while ReadWrite also is allowed to write attribute values.
<h1>Buffering of subscriptions
The server does not support buffering of subscriptions.
<h1>Configuration
The opc server is configured with a Opc_ServerConfig object that is placed in the Node
hierarchy. The configuration object will cause a server process (opc_server) to start at
Proview startup.
</topic>
</headerlevel>
<headerlevel>
<topic> opc_client
OPC XML/DA Client
The Proview opc client is implemented as an extern volume, which is mounted somewhere in the
object tree of the root volume. Under the mount object, the branches and items of the server
are displayed with special opc objects. An Opc_Hier object represents a branch and Opc_Int an
item with an integer value, Opc_Boolean an item with a boolean value etc. If an item object is
opened, the item values are displayed in a Value attribute, and some other properties as
description, lowEU, highEU, engineeringUnit, lowIR and highIR are displayed. When the object is
opened a subscription is started, and the value is continuously updated. For integer and float
items there is also an object graph that displays a trend of the value.
With the opc client you can
- browse the branches and items in Xtt, and also display item values and set item values.
- subscribe item values and display them in a Ge graph.
- fetch item values into the plc logic and also write values to items.
The opc client requires that name browsing is implemented in the opc server.
<h1>Ge
An item value can be displayed in a Ge graph by using the name in the extern volume. For
example, if the mount object for the extern volume is 'Ext-P1', and the local name of the item
is
<c> /P1/Signals/Ai22
the signal name in Ge will probably be (this is dependent of the browsing function of the
server)
<c> Ext-P1-P1-Signals-Ai22.Value##Float32
presuming that it is a float datatype.
<h1>Plc
Item values can also be handled in the plc program, using the GetExt... and CStoExt... objects.
The objects normally used for getting and storing attributes GetDp, GetAp, StoDp, StoAp etc.
can not be used, as they require that the referenced name is known in the development
environment, which is not the case for most extern volumes. In the Ext objects, the reference
is made with a name string, making it possible to enter the item name. To get the value of the
......@@ -8341,7 +8713,7 @@ where nodename is the name of the node, and busnumber the qcom bus number. If th
<chapter>
<TOPIC> help command
Wtt commands
Commands
<b>build <t>Build node, volume or object <LINK> build
<b>check classes <t>Check if any classes need update <LINK> check classes
......@@ -9423,11 +9795,15 @@ symbolfile <LINK> configurator_refman,symbol_file
<TOPIC> script
Wtt script
execute script <LINK> execute script
datatypes <LINK> datatypes
datatype conversions <LINK> datatype conversions
variable declarations <LINK> variable declarations
operators <LINK> operators
Execute script <LINK> execute script
<h2>Datatypes and declarations
Datatypes <LINK> datatypes
Datatype conversions <LINK> datatype conversions
Variable declarations <LINK> variable declarations
Operators <LINK> operators
<h2>Statements
main-endmain <LINK> main-endmain
function-endfunction <LINK> function-endfunction
if-else-endif <LINK> if-else-endif
......@@ -9437,22 +9813,35 @@ break <LINK> break
continue <LINK> continue
goto <LINK> goto
include <LINK> include
<h2>Input/output functions
ask() <LINK> ask()
printf() <LINK> printf()
say() <LINK> say()
scanf() <LINK> scanf()
fprintf() <LINK> fprintf()
<h2>File handling functions
fclose() <LINK> fclose()
felement() <LINK> felement()
fgets() <LINK> fgets()
fopen() <LINK> fopen()
fclose() <LINK> fclose()
exit() <LINK> exit()
verify() <LINK> verify()
time() <LINK> time()
fprintf() <LINK> fprintf()
fscanf() <LINK> fscanf()
translate_filename() <LINK> translate_filename()
<h2>String functions
edit() <LINK> edit()
extract() <LINK> extract()
element() <LINK> element()
extract() <LINK> extract()
sprintf() <LINK> sprintf()
strchr() <LINK> strchr()
strrchr() <LINK> strrchr()
strlen() <LINK> strlen()
strstr() <LINK> strstr()
toupper() <LINK> toupper()
tolower() <LINK> tolower()
translate_filename() <LINK> translate_filename()
wtt-commands <LINK> wtt-commands
<h2>Database functions
GetAttribute() <LINK> getattribute()
GetChild() <LINK> getchild()
GetParent() <LINK> getparent()
......@@ -9468,6 +9857,14 @@ GetRootList() <LINK> getrootlist()
GetVolumeClass() <LINK> getvolumeclass()
GetVolumeList() <LINK> getvolumelist()
SetAttribute() <LINK> setattribute()
<h2>System functions
exit() <LINK> exit()
system() <LINK> system()
time() <LINK> time()
verify() <LINK> verify()
<h2>Miscellaneous functions
GetProjectName() <LINK> getprojectname()
CheckSystemGroup() <LINK> checksystemgroup()
CutObjectName() <LINK> cutobjectname()
......@@ -9488,6 +9885,12 @@ CloseGraph() <LINK> closegraph()
SetSubwindow() <LINK> setsubwindow()
GetIoDeviceData() <LINK> getiodevicedata()
SetIoDeviceData() <LINK> setiodevicedata()
pwr_get_config() <LINK> pwr_get_config()
get_node_name() <LINK> get_node_name()
<h2>wtt-commands
wtt-commands <LINK> wtt-commands
</TOPIC>
<TOPIC> execute script
......@@ -9600,6 +10003,21 @@ Operator <t>Description <t>Datatypes
|= <t>logical or and assign <t>int
</TOPIC>
<TOPIC> sc_statements <style> function
Script statements
main-endmain <t>Main function.<LINK> main-endmain
function-endfunction <t>Function declaration.<LINK> function-endfunction
if-else-endif <t>Conditional execution.<LINK> if-else-endif
while-endwhile <t>While loop.<LINK> while-endwhile
for-endfor <t>For loop.<LINK> for-endfor
break <t>Terminate while or for loop.<LINK> break
continue <t>Continue while or for loop.<LINK> continue
goto <t>Jump to label.<LINK> goto
include <t>Include script file.<LINK> include
</TOPIC>
<headerlevel>
<TOPIC> main-endmain <style> function
main-endmain
......@@ -9754,6 +10172,44 @@ An script include-file containing functions can be included with the
<c>#include <my_functions>
</TOPIC>
</headerlevel>
<TOPIC> sc_input_output_functions <style> function
Input/Output functions
<b>Function <t>Description
ask <t>Print a question an read an answer.<link> ask()
printf <t>Formatted print. <link> printf()
say <t>Print a text. <link> say()
scanf <t>Formatted read. <link> scanf()
</TOPIC>
<headerlevel>
<TOPIC> ask() <style> function
ask()
int ask( string question, (arbitrary type) reply)
<b>Description
Prompts for input with supplied string.
Returns number of read tokens, 1 or 0.
<b>Arguments
string <t>question <t>Prompt.
arbitrary type <t>reply <t>Entered reply. Can be int,
<t> <t>float or string.
<b>Example
<c> string reply;
<c> ask( "Do you want to continue? [y/n] ", reply);
<c> if ( reply != "y")
<c> exit();
<c> endif
</TOPIC>
<TOPIC> printf() <style> function
printf()
......@@ -9780,6 +10236,23 @@ arbitrary type <t>arg2 <t>Value argument. Optional. Can be int,
<c> printf( "a = %d and str = %s", a, str);
</TOPIC>
<TOPIC> say() <style> function
say()
int say( string text)
<b>Description
Prints a string.
<b>Arguments
string <t>text <t>Text to print.
<b>Example
<c> say( "Three quarks for Muster Mark!");
</TOPIC>
<TOPIC> scanf() <style> function
scanf()
......@@ -9787,7 +10260,7 @@ int scanf( string format , (arbitrary type) arg1)
<b>Description
Formatted input. C-syntax
Formatted input. C-syntax.
Returns number of read characters.
<b>Arguments
......@@ -9800,6 +10273,129 @@ arbitrary type <t>arg1 <t>Value argument. Returned. Can be int,
<c> scanf( "%d", i);
</TOPIC>
</headerlevel>
<TOPIC> sc_input_output_functions <style> function
Input/Output functions
<b>Function <t>Description
fclose <t>Close a file <link> fclose()
felement <t>Extract one element from the last read line. <link> felement()
fgets <t>Read a line from a file. <link> fgets()
fopen <t>Open a file. <link> fopen()
fprintf <t>Formatted write to file. <link> fprintf()
fscanf <t>Formatted read from file. <link> fscanf()
translate_filename <t>Replace environment variables in a file name. <link> translate_filename()
</TOPIC>
<headerlevel>
<TOPIC> fclose() <style> function
fclose()
int fclose( int file)
<b>Description
Closes an opened file.
<b>Arguments
int <t>file <t>file-id returned by fopen.
<b>Example
<c> int infile;
<c> infile = fopen("some_file.txt","r");
<c> ...
<c> fclose( infile);
</TOPIC>
<TOPIC> felement() <style> function
felement()
string felement( int number, string delimiter)
<b>Description
Extracts one element from a string of elements read from a file with the
fgets() function. felement() can be used in favour of element() when the read
string is larger than the string size 256. felement() can parse lines up to
1023 characters.
<b>Arguments
int <t>number <t>the number of the element.
string <t>delimiter <t>delimiter character.
<b>Returns
string <t><t>The extracted element.
<b>Example
<c> string elem1;
<c> int file;
<c> string line;
<c> file = fopen( "my_file.txt", "r");
<c> while( fgets( line, file))
<c> elem1 = felement( 1, " ");
<c> endwhile
</TOPIC>
<TOPIC> fgets() <style> function
fgets()
int fgets( string str, int file)
<b>Description
Reads a line from a specified file.
Returns zero if end of file.
<b>Arguments
string <t>str <t>Read line. Returned.
int <t>file <t>file returned by fopen.
<b>Example
<c> file = fopen("some_file.txt","r");
<c> while( fgets( str, file))
<c> say( str);
<c> endwhile
<c> fclose( file);
</TOPIC>
<TOPIC> fopen() <style> function
fopen()
int fopen( string filespec, string mode)
<b>Description
Opens a file for read or write.
Returns a file identifier. If the file could not be opened, zero is returned.
<b>Arguments
string <t>filespec <t>Name of file.
string <t>mode <t>Access mode
<b>Returns
int <t><t>File identifier, or zero on error.
<b>Example
<c> int infile;
<c> int outfile;
<c> infile = fopen("some_file.txt","r");
<c> outfile = fopen("another_file.txt","w");
<c> ...
<c> fclose( infile);
<c> fclose( outfile);
</TOPIC>
<TOPIC> fprintf() <style> function
fprintf()
......@@ -9833,190 +10429,268 @@ arbitrary type <t>arg2 <t>Value argument. Optional. Can be int,
<c> fclose( outfile);
</TOPIC>
<TOPIC> fgets() <style> function
fgets()
<TOPIC> fscanf() <style> function
fscanf()
int fgets( string str, int file)
int fscanf( int file, string format , (arbitrary type) arg1)
<b>Description
Reads a line from a specified file.
Returns zero if end of file.
Formatted read from file. C-syntax.
Returns number of read characters.
<b>Arguments
string <t>str <t>Read line. Returned.
int <t>file <t>file returned by fopen.
int <t>file <t>File id.
string <t>format <t>Format.
arbitrary type <t>arg1 <t>Value argument. Returned. Can be int,
<t> <t>float or string.
<b>Example
<c> int file;
<c> int i;
<c> file = fopen( "my_file.txt", "r");
<c> if (file)
<c> fscanf( file, "%d", i);
<c> fclose( file);
<c> endif
</TOPIC>
<TOPIC> translate_filename() <style> function
translate_filename()
string translate_filename( string fname)
<b>Description
Replace environment variables in filename.
<b>Arguments
string <t>fname <t>A filename.
<b>Returns
string <t><t>String with expanded env variables.
<b>Example
<c> file = fopen("some_file.txt","r");
<c> while( fgets( str, file))
<c> say( str);
<c> endwhile
<c> fclose( file);
<c> string fname1 = "$pwrp_db/a.wb_load";
<c> string fname2;
<c> fname2 = translate_filename( fname1);
</TOPIC>
</headerlevel>
<TOPIC> fopen() <style> function
fopen()
<TOPIC> string_functions <style> function
String functions
int fopen( string filespec, string mode)
<b>Function <t>Description
edit <t>Remove superfluous spaces and tabs. <link> edit()
element <t>Extract one element from a string. <link> element()
extract <t>Extract a substring from a string. <link> extract()
sprintf <t>Formatted print to a string. <link> sprintf()
strchr <t>Return the first occurence of a character in a string. <link> strchr()
strrchr <t>Return the last occurence of a character in a string. <link> strrchr()
strlen <t>Calculate the length of a string. <link> strlen()
strstr <t>Return the first occurence of a substring in a string. <link> strstr()
tolower <t>Convert string to lower case. <link> tolower()
toupper <t>Convert string to upper case. <link> toupper()
</TOPIC>
<headerlevel>
<TOPIC> edit() <style> function
edit()
string edit( string str)
<b>Description
Opens a file for read or write.
Returns a file identifier. If the file could not be opened, zero is returned.
Removes leading and trailing spaces and tabs, and replaces multiple tabs and
spaces with a single space.
Returns the edited string.
<b>Arguments
string <t>filespec <t>Name of file.
string <t>mode <t>Access mode
string <t>str <t>string to be edited.
<b>Example
<c> int infile;
<c> int outfile;
<c> infile = fopen("some_file.txt","r");
<c> outfile = fopen("another_file.txt","w");
<c> ...
<c> fclose( infile);
<c> fclose( outfile);
<c> collapsed_str = edit(str);
</TOPIC>
<TOPIC> fclose() <style> function
fclose()
<TOPIC> element() <style> function
element()
int fclose( int file)
string element( int number, string delimiter, string str)
<b>Description
Closes an opened file.
Extracts one element from a string of elements.
Returns the extracted element.
<b>Arguments
int <t>file <t>file-id returned by fopen.
int <t>number <t>the number of the element.
string <t>delimiter <t>delimiter character.
string <t>str <t>string of elements.
<b>Example
<c> int infile;
<c> infile = fopen("some_file.txt","r");
<c> ...
<c> fclose( infile);
<c> string str = "mary, lisa, anna, john";
<c> string elem1;
<c> elem1 = element( 1, ",", str);
</TOPIC>
<TOPIC> exit() <style> function
exit()
<TOPIC> extract() <style> function
extract()
int exit()
string extract( int start, int length, string str)
<b>Description
Terminates executions of the file.
Extracts the specified characters from the specified string.
Returns the extracted characters as a string.
<b>Arguments
int <t>start <t>start position of the first character.
<t><t>First character has position 1.
int <t>length <t>number of characters to be extracted.
string <t>str <t>string from which characters should be extracted.
<b>Example
<c> exit();
<c> extracted_str = extract( 5, 7, str);
</TOPIC>
<TOPIC> verify() <style> function
verify()
<TOPIC> sprintf() <style> function
sprintf()
int verify( [int mode])
int sprintf( string str, string format [, (arbitrary type) arg1, (arbitrary type) arg2])
<b>Description
Sets or shows verification mode. If verification is on all executed lines will
be displayed on the screen.
Returns the current verification mode.
Formatted print to buffer. C-syntax. Format argument and non, one or two value arguments.
Returns number of printed characters.
<b>Arguments
int <t>mode <t>verification on (1) or off (0). Optional.
string <t>str <t>String to print to.
string <t>format <t>Format.
arbitrary type <t>arg1 <t>Value argument. Optional. Can be int,
<t> <t>float or string.
arbitrary type <t>arg2 <t>Value argument. Optional. Can be int,
<t> <t>float or string.
<b>Example
<c> verify(1);
<c> string str;
<c> int items;
<c> sprintf( str, "Number of items: %d", items);
</TOPIC>
<TOPIC> time() <style> function
time()
<TOPIC> strchr() <style> function
strchr()
string time()
int strchr( string str, string c)
<b>Description
Returns the current time in string format.
Return the first occurence of a character in a string.
<b>Arguments
string <t>str <t>String to search in.
string <t>c <t>Character to search for.
<b>Returns
int <t><t>Index for first occurence of character.
<t><t>First character has index 1. Returns
<t><t>zero if the character is not found.
<b>Example
<c> string t;
<c> t = time();
<c> string str = "index.html";
<c> int idx;
<c> idx = strchr( str, ".");
</TOPIC>
<TOPIC> edit() <style> function
edit()
<TOPIC> strrchr() <style> function
strrchr()
string edit( string str)
int strrchr( string str, string c)
<b>Description
Removes leading and trailing spaces and tabs, and replaces multiple tabs and
spaces with a single space.
Returns the edited string.
Return the last occurence of a character in a string.
<b>Arguments
string <t>str <t>string to be edited.
string <t>str <t>String to search in.
string <t>c <t>Character to search for.
<b>Returns
int <t><t>Index for last occurence of character.
<t><t>First character has index 1. Returns
<t><t>zero if the character is not found.
<b>Example
<c> collapsed_str = edit(str);
<c> string str = "/usr/local/pwrrt";
<c> int idx;
<c> idx = strrchr( str, "/");
</TOPIC>
<TOPIC> extract() <style> function
extract()
<TOPIC> strlen() <style> function
strlen()
string extract( int start, int length, string str)
int strlen( string str, string c)
<b>Description
Extracts the specified characters from the specified string.
Returns the extracted characters as a string.
Calculates the length of a string.
<b>Arguments
int <t>start <t>start position of the first character.
<t><t>First character has position 1.
int <t>length <t>number of characters to be extracted.
string <t>str <t>string from which characters should be extracted.
string <t>str <t>String to calculate length for.
<b>Returns
int <t><t>Length of string.
<b>Example
<c> extracted_str = extract( 5, 7, str);
<c> string str = "/usr/local/pwrrt";
<c> int len;
<c> len = strlen( str);
</TOPIC>
<TOPIC> element() <style> function
element()
<TOPIC> strstr() <style> function
strchr()
string element( int number, string delimiter, string str)
int strstr( string str, string substr)
<b>Description
Extracts one element from a string of elements.
Returns the extracted element.
Return the first occurence of a substring in a string.
<b>Arguments
int <t>number <t>the number of the element.
string <t>delimiter <t>delimiter character.
string <t>str <t>string of elements.
string <t>str <t>String to search in.
string <t>substr <t>Substring to search for.
<b>Returns
int <t><t>Index for first occurence of substring.
<t><t>First character has index 1. Returns
<t><t>zero if the substring is not found.
<b>Example
<c> string str = "mary, lisa, anna, john";
<c> string elem1;
<c> elem1 = element( 1, ",", str);
<c> string str = "index.html";
<c> int idx;
<c> idx = strstr( str, ".html");
</TOPIC>
<TOPIC> toupper() <style> function
......@@ -10030,10 +10704,10 @@ Convert string to upper case.
<b>Arguments
string <t>str <t>string to convert.
string <t>str <t>String to convert.
<b>Returns
string <t><t>string in upper case.
string <t><t>String in upper case.
<b>Example
......@@ -10043,7 +10717,7 @@ string <t><t>string in upper case.
</TOPIC>
<TOPIC> tolower() <style> function
toupper()
tolower()
string tolower( string str)
......@@ -10065,58 +10739,116 @@ string <t><t>string in lower case.
<c> str2 = tolower( str);
</TOPIC>
<TOPIC> translate_filename() <style> function
translate_filename()
</headerlevel>
string translate_filename( string fname)
<TOPIC> system_functions <style> function
System functions
<b>Function <t>Description
exit <t>Exit script. <link> exit()
system <t>Execute shell command. <link> system()
time <t>Get system time. <link> time()
verify <t>Print executed lines. <link> verify()
</TOPIC>
<headerlevel>
<TOPIC> exit() <style> function
exit()
int exit()
<b>Description
Replace environment variables in filename.
Terminates executions of the file.
<b>Example
<c> exit();
</TOPIC>
<TOPIC> system() <style> function
system()
int system( string cmd)
<b>Description
Execute a shell command.
<b>Arguments
string <t>fname <t>A filename.
string <t>cmd <t>Shell command to execute.
<b>Returns
string <t><t>String with expanded env variables.
int <t><t>The return value is -1 on error and the
<t><t>return status of the command otherwise.
<b>Example
<c> string fname1 = "$pwrp_db/a.wb_load";
<c> string fname2;
<c> fname2 = translate_filename( fname1);
<c> string cmd;
<c> cmd = "firefox http://www.proview.se";
<c> system( cmd);
</TOPIC>
<TOPIC> wtt-commands <style> function
Wtt commands
<TOPIC> time() <style> function
time()
All the wtt-commands is available in the script code. An wtt-command line
should NOT be ended with a semicolon. Variables can be substituted in the
command line by surrounding them with apostrophes.
string time()
<b>Description
Returns the current time in string format.
<b>Example
<c> string name = "PUMP-VALVE-Open";
<c> string value = "The valve is open";
<c> set attribute/name='name'/attr="Description"/value='value'
<c> string t;
<c> t = time();
</TOPIC>
<TOPIC> verify() <style> function
verify()
int verify( [int mode])
<b>Description
Sets or shows verification mode. If verification is on all executed lines will
be displayed on the screen.
Returns the current verification mode.
<b>Arguments
int <t>mode <t>verification on (1) or off (0). Optional.
<b>Example
<c> string name;
<c> string parname;
<c> int j;
<c> int i;
<c> for ( i = 0; i < 3; i++)
<c> parname = "vkv-test-obj" + (i+1);
<c> create obj/name='parname'
<c> for ( j = 0; j < 3; j++)
<c> name = parname + "-obj" + (j+1);
<c> create obj/name='name'
<c> endfor
<c> endfor
<c> verify(1);
</TOPIC>
</headerlevel>
<TOPIC> database_functions <style> function
Database functions
<b>Function <t>Description
GetAttribute() <t>Get attribute value. <LINK> getattribute()
GetChild() <t>Get object child. <LINK> getchild()
GetParent() <t>Get object parent. <LINK> getparent()
GetNextSibling()<t>Get object sibling. <LINK> getnextsibling()
GetNextVolume() <t>Get next volume. <LINK> getnextvolume()
GetClassList() <t>Get first instance of a class. <LINK> getclasslist()
GetNextObject() <t>Get next instance of a class. <LINK> getnextobject()
GetClassListAttrRef() <t>Get first instance of a class, attribute objects included. <LINK> getclasslistattrref()
GetNextAttrRef() <t>Get next instance of a class, attribute objects included. <LINK> getnextattrref()
GetObjectClass() <t>Get class of an object. <LINK> getobjectclass()
GetNodeObject() <t>Get node object. <LINK> getnodeobject()
GetRootList() <t>Get first object in root list. <LINK> getrootlist()
GetVolumeClass() <t>Get class of a volume. <LINK> getvolumeclass()
GetVolumeList() <t>Get fist volume. <LINK> getvolumelist()
SetAttribute() <t>Set attribute value. <LINK> setattribute()
</TOPIC>
<headerlevel>
<TOPIC> getattribute() <style> function
GetAttribute()
......@@ -10460,7 +11192,37 @@ arbitrary type value attribute value.
<c> SetAttribute( "Pump-V1-Switch.Description", "Valve switch open");
</TOPIC>
</headerlevel>
<TOPIC> misc_functions <style> function
Miscellaneous functions
<b>Function <t>Description
GetProjectName() <t>Get project name. <LINK> getprojectname()
CheckSystemGroup() <t>Check that system group exist. <LINK> checksystemgroup()
CutObjectName() <t>Cut off an object name. <LINK> cutobjectname()
MessageError() <t>Print error message. <LINK> messageerror()
MessageInfo() <t>Print info message. <LINK> messageinfo()
GetCurrentText() <t>Get the text of the current item. <LINK> getcurrenttext()
GetCurrentObject() <t>Get the object associated with the current item. <LINK> getcurrentobject()
GetCurrentVolume() <t>Get the attached volume. <LINK> getcurrentvolume()
IsW1() <t>Check if Plant hierarchy has focus. <LINK> isw1()
IsW2() <t>Check if Node hierarchy has focus. <LINK> isw2()
EditMode() <t>Check if in edit mode. <LINK> editmode()
MessageDialog() <t>Open a message dialog. <LINK> messagedialog()
ConfirmDialog() <t>Open a confirm dialog. <LINK> confirmdialog()
ContinueDialog() <t>Open a Continue/Quit dialog. <LINK> continuedialog()
PromptDialog() <t>Open an input dialog. <LINK> promptdialog()
OpenGraph() <t>Open a Ge graph. <LINK> opengraph()
CloseGraph() <t>Close a Ge graph. <LINK> closegraph()
SetSubwindow() <t>Open a graph in a window object. <LINK> setsubwindow()
GetIoDeviceData() <t>Get data from IO configuration. <LINK> getiodevicedata()
SetIoDeviceData() <t>Set data in IO configuration. <LINK> setiodevicedata()
pwr_get_config() <t>Get configuration values. <LINK> pwr_get_config()
get_node_name() <t>Get node name. <LINK> get_node_name()
</TOPIC>
<headerlevel>
<TOPIC> getprojectname() <style> function
GetProjectName()
......@@ -10861,7 +11623,7 @@ int SetIoDeviceData( string object, string parameter, string value)
<b>Description
Set data from IO configuration.
Set data to IO configuration.
Returns status of operation, odd if success and even is error.
This command uses methods and has to be executed in pwrs. It does not
......@@ -10889,6 +11651,37 @@ string <t>value <t>Value to set.
<c> sts = SetIoDeviceData( "Nodes-MyNode-PN-D1", "NetworkSettings-DeviceName", "ET200M-D1");
</TOPIC>
</headerlevel>
<TOPIC> wtt-commands <style> function
Wtt commands
All the wtt-commands is available in the script code. An wtt-command line
should NOT be ended with a semicolon. Variables can be substituted in the
command line by surrounding them with apostrophes.
<b>Example
<c> string name = "PUMP-VALVE-Open";
<c> string value = "The valve is open";
<c> set attribute/name='name'/attr="Description"/value='value'
<b>Example
<c> string name;
<c> string parname;
<c> int j;
<c> int i;
<c> for ( i = 0; i < 3; i++)
<c> parname = "vkv-test-obj" + (i+1);
<c> create obj/name='parname'
<c> for ( j = 0; j < 3; j++)
<c> name = parname + "-obj" + (j+1);
<c> create obj/name='name'
<c> endfor
<c> endfor
</TOPIC>
</chapter>
......
......@@ -4734,11 +4734,22 @@ create <link>gecmd_create
<t>create rectangle <link>gecmd_create_rect
<t>create text <link>gecmd_create_text
<t>create subgraph <link>gecmd_create_subgraph
exit <link>gecmd_exit
group <link>gecmd_group
move <link>gecmd_move
<t>move currentobject <link>gecmd_move_currentobject
<t>move selectedobject <link>gecmd_move_selectedobject
new <link>gecmd_new
open <link>gecmd_open
quit <link>gecmd_quit
replace <link>gecmd_replace
rotate <link>gecmd_rotate
<t>rotate currentobject <link>gecmd_rotate_current
<t>rotate selectedobject <link>gecmd_rotate_selected
save <link>gecmd_save
scale <link>gecmd_scale
<t>scale currentobject <link>gecmd_scale_current
<t>scale selectedobject <link>gecmd_scale_selected
select <link>gecmd_select
<t>select currentobject <link>gecmd_select_currentobject
<t>select clear <link>gecmd_select_clear
......@@ -4773,16 +4784,6 @@ set <link>gecmd_set
<t>set currentobject attr2 <link>gecmd_set_current_attr1
<t>set currentobject annotation <link>gecmd_set_current_annotation
<t>set graphattributes <link>gecmd_set_graphattributes
rotate <link>gecmd_rotate
<t>rotate currentobject <link>gecmd_rotate_current
<t>rotate selectedobject <link>gecmd_rotate_selected
scale <link>gecmd_scale
<t>scale currentobject <link>gecmd_scale_current
<t>scale selectedobject <link>gecmd_scale_selected
save <link>gecmd_save
exit <link>gecmd_exit
quit <link>gecmd_quit
open <link>gecmd_open
show <link>gecmd_show
<t>show version <link>gecmd_show_version
</topic>
......@@ -4915,6 +4916,16 @@ Create a subgraph object.
/y2
</topic>
<topic>gecmd_exit
exit
Save the current graph and close Ge.
<b>Syntax
<c>ge> exit ['filename']
</topic>
<topic>gecmd_group <style>function
group
......@@ -4969,6 +4980,112 @@ new
Clear and reset the working area.
</topic>
<topic>gecmd_open
open
Open a graph.
<b>Syntax
<c>ge> open ['filename']
</topic>
<topic>gecmd_quit
quit
Close without save.
<b>Syntax
<c>ge> quit
</topic>
<topic>gecmd_replace
replace attribute
String replacement in dynamic and action properties for selected objects.
<b>Syntax
<c>ge> replace attribute /from= /to= [/strict]
/from <t>String that is to be replaced.
/to <t>Replacement string.
/strict <t>Search of from string is case sensitive.
</topic>
<topic>gecmd_rotate
rotate
</topic>
<topic>gecmd_rotate_current
rotate currentobject
Rotates the current object around the center of the object.
<b>Syntax
<c>ge> rotate currentobject /angle=
/angle <t>Angle in degrees that the object is rotated.
</topic>
<topic>gecmd_rotate_selected
rotate selectedobject
Rotates the selected object around the center of the object.
<b>Syntax
<c>ge> rotate selectedobject /angle=
/angle <t>Angle in degrees that the object is rotated.
</topic>
<topic>gecmd_save
save
Save a graph.
<b>Syntax
<c>ge> save ['filename']
</topic>
<topic>gecmd_scale
scale
</topic>
<topic>gecmd_scale_current
scale currentobject
Scale the current object.
<b>Syntax
<c>ge> scale currentobject /scalex= /scaley= [/x= /y=]
/scalex <t>Scale factor in x direction.
/scaley <t>Scale factor in y direction.
/x <t>x coordinate for the reference point of the scaling.
/y <t>y coordinate for the reference point of the scaling.
</topic>
<topic>gecmd_scale_selected
scale selectedobject
Scale the selected object.
<b>Syntax
<c>ge> scale selectedobject /scalex= /scaley= [/x= /y=]
/scalex <t>Scalefactor in x direction.
/scaley <t>Scalefactor in y direction.
/x <t>x coordinate for the reference point of the scaling.
/y <t>y coordinate for the reference point of the scaling.
</topic>
<topic>gecmd_select <style>function
select
</topic>
......@@ -5347,108 +5464,6 @@ AnimationCount <t>Int
<c>ge> set graphattributes 'name' 'value'
</topic>
<topic>gecmd_rotate
rotate
</topic>
<topic>gecmd_rotate_current
rotate currentobject
Rotates the current object around the center of the object.
<b>Syntax
<c>ge> rotate currentobject /angle=
/angle <t>Angle in degrees that the object is rotated.
</topic>
<topic>gecmd_rotate_selected
rotate selectedobject
Rotates the selected object around the center of the object.
<b>Syntax
<c>ge> rotate selectedobject /angle=
/angle <t>Angle in degrees that the object is rotated.
</topic>
<topic>gecmd_scale
scale
</topic>
<topic>gecmd_scale_current
scale currentobject
Scale the current object.
<b>Syntax
<c>ge> scale currentobject /scalex= /scaley= [/x= /y=]
/scalex <t>Scale factor in x direction.
/scaley <t>Scale factor in y direction.
/x <t>x coordinate for the reference point of the scaling.
/y <t>y coordinate for the reference point of the scaling.
</topic>
<topic>gecmd_scale_selected
scale selectedobject
Scale the selected object.
<b>Syntax
<c>ge> scale selectedobject /scalex= /scaley= [/x= /y=]
/scalex <t>Scalefactor in x direction.
/scaley <t>Scalefactor in y direction.
/x <t>x coordinate for the reference point of the scaling.
/y <t>y coordinate for the reference point of the scaling.
</topic>
<topic>gecmd_save
save
Save a graph.
<b>Syntax
<c>ge> save ['filename']
</topic>
<topic>gecmd_exit
exit
Save the current graph and close Ge.
<b>Syntax
<c>ge> exit ['filename']
</topic>
<topic>gecmd_quit
quit
Close without save.
<b>Syntax
<c>ge> quit
</topic>
<topic>gecmd_open
open
Open a graph.
<b>Syntax
<c>ge> open ['filename']
</topic>
<topic>gecmd_show
show
</topic>
......@@ -5503,6 +5518,7 @@ fgets <t>Read a line from a file.
fopen <t>Open a file.
fprintf <t>Formatted write to file.
fscanf <t>Formatted read from file.
translate_filename <t>Replace environment variables in a file name.
<h2>Handling of strings
<b>Function <t>Description
......@@ -5515,6 +5531,7 @@ strchr <t>Find the first occurrence of a character in a string.
strlen <t>The length of a string.
strrchr <t>Find the last occurrence of a character in a string.
strstr <t>Find the first occurrence of a character sequence in a string.
tolower <t>Convert a string to lower case.
toupper <t>Convert a string to upper case.
<h2>Database functions
......
......@@ -1235,15 +1235,18 @@ rt_bck <t>Backup process <t>Handles backup of attributes and objects.
rt_linksup <t>Link supervision <t>Supervision of links to other nodes.
rt_trend <t>Trend process <t>Handles storing of trend curves.
rt_fast <t>Fast process <t>Handles storing of fast curves.
rt_elog <t>Event log <t>Handles event logging.
rt_elog <t>Event log process <t>Logging of events.
rt_webmon <t>Web monitor <t>Supplies the web interface with database information.
rt_webmonmh <t>Web mh monitor <t>Supplies the web interface with alarms and events.
rt_sysmon <t>System monitor <t>Supervises the system.
plc <t>Plc process <t>Handles I/O and executes the plc code.
rs_remote <t>Remote process <t>Handles remote communication.
opc_server <t>Opc server process.
opc_server <t>Opc server process <t>Handles Opc server communication.
rt_statussrv <t>Status server <t>Webservice for the runtime monitor and supervision center.
rt_post <t>Post server <t>Sends alarms via email or sms.
rt_report <t>Report server <t>Generates reports.
rt_sevhistmon <t>Storage monitor <t>Collects and sends process history data to storage server.
rt_powerlink <t>Ethernet powerlink server <t>Handles Powerlink communication.
</topic>
<topic> opg_nav_volumes
......@@ -2633,11 +2636,16 @@ Write the content of an object to file.
<TOPIC> script
Xtt script
execute script <LINK> execute script
datatypes <LINK> datatypes
datatype conversions <LINK> datatype conversions
variable declarations <LINK> variable declarations
operators <LINK> operators
Execute script <LINK> execute script
<h2>Datatypes and declarations
Datatypes <LINK> datatypes
Datatype conversions <LINK> datatype conversions
Variable declarations <LINK> variable declarations
Operators <LINK> operators
<h2>Statements
main-endmain <LINK> main-endmain
function-endfunction <LINK> function-endfunction
if-else-endif <LINK> if-else-endif
......@@ -2647,23 +2655,35 @@ break <LINK> break
continue <LINK> continue
goto <LINK> goto
include <LINK> include
<h2>Input/output functions
ask() <LINK> ask()
printf() <LINK> printf()
say() <LINK> say()
scanf() <LINK> scanf()
fprintf() <LINK> fprintf()
<h2>File handling functions
fclose() <LINK> fclose()
felement() <LINK> felement()
fgets() <LINK> fgets()
fopen() <LINK> fopen()
fclose() <LINK> fclose()
exit() <LINK> exit()
verify() <LINK> verify()
time() <LINK> time()
fprintf() <LINK> fprintf()
fscanf() <LINK> fscanf()
translate_filename() <LINK> translate_filename()
<h2>String functions
edit() <LINK> edit()
extract() <LINK> extract()
element() <LINK> element()
extract() <LINK> extract()
sprintf() <LINK> sprintf()
strchr() <LINK> strchr()
strrchr() <LINK> strrchr()
strlen() <LINK> strlen()
strstr() <LINK> strstr()
toupper() <LINK> toupper()
tolower() <LINK> tolower()
get_language() <LINK> get_language()
translate_filename() <LINK> translate_filename()
xtt-commands <LINK> xtt-commands
<h2>Database functions
GetAttribute() <LINK> getattribute()
GetChild() <LINK> getchild()
GetParent() <LINK> getparent()
......@@ -2673,14 +2693,28 @@ GetNextObject() <LINK> getnextobject()
GetObjectClass() <LINK> getobjectclass()
GetNodeObject() <LINK> getnodeobject()
GetRootList() <LINK> getrootlist()
<h2>System functions
exit() <LINK> exit()
system() <LINK> system()
time() <LINK> time()
verify() <LINK> verify()
<h2>Miscellaneous functions
CutObjectName() <LINK> cutobjectname()
MessageError() <LINK> messageerror()
MessageInfo() <LINK> messageinfo()
GetCurrentText() <LINK> getcurrenttext()
GetCurrentObject() <LINK> getcurrentobject()
pwr_get_config() <LINK> pwr_get_config()
get_node_name() <LINK> get_node_name()
get_language() <LINK> get_language()
<h2>xtt-commands
xtt-commands <LINK> xtt-commands
</TOPIC>
<headerlevel>
<TOPIC> execute script
Execute a script
......@@ -2702,7 +2736,7 @@ string <t>80 character string (null terminated).
There are three different tables in which a variable can be declared: local,
global and extern. A local variable is known inside a function, a global is
known in all functions in a file (with include-files), an external is known
for all files executed in an rtt session.
for all files executed in a session.
</TOPIC>
......@@ -2711,16 +2745,16 @@ Datatype conversions
If an expression consists of variables and functions of different datatypes
the variables will be converted with the precedence string, float, int. If
two operands in an expression are of type int and float, the result will be float
If two operands are of type float and string, or int and string, the result will
two operands in an expression is of type int and float, the result will be float
If two operands is of type float and string, or int and string, the result will
be string. In an assignment the value of an expression will be converted to the
type of the assignment variable, even if the result is a string and the
variable is of type float or int.
<b>Example
<c>string str;
<c>int i = 35;
<c>string str;
<c>int i = 35;
<c>str = "Luthor" + i;
The value in str will be "Luthor35".
......@@ -2739,17 +2773,22 @@ A declaration consists of
- the table (global or extern, if local the table is suppressed)
- the datatype (int, float or string)
- the variable name (case sensitive)
- if array, number of elements
- equal mark followed by an init value, if omitted the init value is zero or
null-string
- semicolon
Example
An extern variable should be deleted (by the delete statement).
int i;
float flow = 33.4;
string str = "Hello";
extern int jakob;
global float ferdinand = 1234;
<b>Example
<c>int i;
<c>float flow = 33.4;
<c>string str = "Hello";
<c>extern int jakob[20];
<c>global float ferdinand = 1234;
<c>...
<c>delete jakob[20];
</TOPIC>
<TOPIC> operators
......@@ -2768,8 +2807,8 @@ Operator <t>Description <t>Datatypes
-- <t>decrement, postfix only <t>int, float
>> <t>bits right-shifted <t>int
<< <t>bits left-shifted <t>int
< <t>less then <t>int, float
> <t>greater then <t>int, float
< <t>less than <t>int, float
> <t>greater than <t>int, float
<= <t>less equal <t>int, float
>= <t>greater equal <t>int, float
== <t>equal <t>int, float, string
......@@ -2786,11 +2825,26 @@ Operator <t>Description <t>Datatypes
|= <t>logical or and assign <t>int
</TOPIC>
<TOPIC> sc_statements <style> function
Script statements
main-endmain <t>Main function.<LINK> main-endmain
function-endfunction <t>Function declaration.<LINK> function-endfunction
if-else-endif <t>Conditional execution.<LINK> if-else-endif
while-endwhile <t>While loop.<LINK> while-endwhile
for-endfor <t>For loop.<LINK> for-endfor
break <t>Terminate while or for loop.<LINK> break
continue <t>Continue while or for loop.<LINK> continue
goto <t>Jump to label.<LINK> goto
include <t>Include script file.<LINK> include
</TOPIC>
<headerlevel>
<TOPIC> main-endmain <style> function
main-endmain
The main and endmain statements control where the execution starts and stops
If no main and endmain statements are found, the execution will start
The main and endmain statements controls where the execution starts and stops
If no main and endmain statements will be found, the execution will start
att the beginning of the file and stop at the end.
<b>Example
......@@ -2812,12 +2866,12 @@ A function declaration consists of
- an argumentlist delimited by comma and surrounded by parenthesis. The
argumentlist must include a typedeclaration and a name for each argument.
The arguments supplied by the caller will be converted to the type declared in
the argument list. If an argument is changed inside the function, the new value
will be transferred to the caller. In this way it is possible to return values
other than the return value of the function.A function can contain one or several
return statements. The return will hand over the execution to the caller and
return the supplied value.
The arguments supplied by the caller will be converted to the type of the
to the type declared in the argument list. If an argument is changed inside
the function, the new value will be transferred to the caller. In this way
it is possible to return other values then the return value of the function.
A function can contain one or several return statements. The return will hand
over the execution to the caller and return the supplied value.
<b>Example
......@@ -2827,7 +2881,7 @@ return the supplied value.
<c> return c;
<c>endfunction
...
<c>...
<c>flow = korr * calculate_flow( v, 35.2);
</TOPIC>
......@@ -2871,10 +2925,10 @@ for-endfor
The lines between a for-endfor statement will be executed as long as the
middle expression in the for-statement is true. The for expression consists
of three expressions, delimited by semicolon and surrounded by parentheses.
The first expression will be executed before the first loop, the third
of three expression, delimited by semicolon and surrounded by parentheses.
The first expression will be executed the before the first loop, the third
will be executed after every loop, the middle is executed before every loop
and if true another loop is done, if false the loop is left.
and if it is true, another loop is done, if false the loop is leaved.
<b>Example
......@@ -2934,12 +2988,50 @@ The label line is terminated with colon.
include
An script include-file containing functions can be included with the
#include statement. The default file extension is '.rtt_com'
#include statement. The default file extention is '.pwr_com'
<b>Example
<c>#include <my_functions>
</TOPIC>
</headerlevel>
<TOPIC> sc_input_output_functions <style> function
Input/Output functions
<b>Function <t>Description
ask <t>Print a question an read an answer.<link> ask()
printf <t>Formatted print. <link> printf()
say <t>Print a text. <link> say()
scanf <t>Formatted read. <link> scanf()
</TOPIC>
<headerlevel>
<TOPIC> ask() <style> function
ask()
int ask( string question, (arbitrary type) reply)
<b>Description
Prompts for input with supplied string.
Returns number of read tokens, 1 or 0.
<b>Arguments
string <t>question <t>Prompt.
arbitrary type <t>reply <t>Entered reply. Can be int,
<t> <t>float or string.
<b>Example
<c> string reply;
<c> ask( "Do you want to continue? [y/n] ", reply);
<c> if ( reply != "y")
<c> exit();
<c> endif
</TOPIC>
<TOPIC> printf() <style> function
printf()
......@@ -2948,7 +3040,7 @@ int printf( string format [, (arbitrary type) arg1, (arbitrary type) arg2])
<b>Description
Formatted print. C-syntax. Format argument and none, one or two value arguments.
Formatted print. C-syntax. Format argument and non, one or two value arguments.
Returns number of printed characters.
<b>Arguments
......@@ -2963,7 +3055,24 @@ arbitrary type <t>arg2 <t>Value argument. Optional. Can be int,
<c> printf( "Watch out!");
<c> printf( "a = %d", a);
<c> printf( "a = %d och str = %s", a, str);
<c> printf( "a = %d and str = %s", a, str);
</TOPIC>
<TOPIC> say() <style> function
say()
int say( string text)
<b>Description
Prints a string.
<b>Arguments
string <t>text <t>Text to print.
<b>Example
<c> say( "Three quarks for Muster Mark!");
</TOPIC>
<TOPIC> scanf() <style> function
......@@ -2973,7 +3082,7 @@ int scanf( string format , (arbitrary type) arg1)
<b>Description
Formatted input. C-syntax
Formatted input. C-syntax.
Returns number of read characters.
<b>Arguments
......@@ -2986,37 +3095,74 @@ arbitrary type <t>arg1 <t>Value argument. Returned. Can be int,
<c> scanf( "%d", i);
</TOPIC>
</headerlevel>
<TOPIC> fprintf() <style> function
fprintf()
<TOPIC> sc_input_output_functions <style> function
Input/Output functions
int fprintf( int file, string format [, (arbitrary type) arg1,
(arbitrary type) arg2])
<b>Function <t>Description
fclose <t>Close a file <link> fclose()
felement <t>Extract one element from the last read line. <link> felement()
fgets <t>Read a line from a file. <link> fgets()
fopen <t>Open a file. <link> fopen()
fprintf <t>Formatted write to file. <link> fprintf()
fscanf <t>Formatted read from file. <link> fscanf()
translate_filename <t>Replace environment variables in a file name. <link> translate_filename()
</TOPIC>
<headerlevel>
<TOPIC> fclose() <style> function
fclose()
int fclose( int file)
<b>Description
Formatted print on file. C-syntax. Format argument and none, one or two value
arguments.
Returns number of printed characters.
Closes an opened file.
<b>Arguments
int <t>file <t>File id returned by fopen.
string <t>format <t>Format.
arbitrary type <t>arg1 <t>Value argument. Optional. Can be int,
<t> <t>float or string.
arbitrary type <t>arg2 <t>Value argument. Optional. Can be int,
<t> <t>float or string.
int <t>file <t>file-id returned by fopen.
<b>Example
<c> int outfile;
<c> outfile = fopen( "my_file.txt", "w");
<c> if (!outfile)
<c> exit();
<c> fprintf( outfile, "Some text");
<c> fprintf( outfile, "a = %d", a);
<c> fclose( outfile);
<c> int infile;
<c> infile = fopen("some_file.txt","r");
<c> ...
<c> fclose( infile);
</TOPIC>
<TOPIC> felement() <style> function
felement()
string felement( int file, int number, string delimiter, string str)
<b>Description
Extracts one element from a string of elements read from a file with the
fgets() function. felement() can be used in favor of element() when the read
string is larger than the string size 256. felement() can parse lines up to
1023 characters.
<b>Arguments
int <t>number <t>the number of the element.
string <t>delimiter <t>delimiter character.
<b>Returns
string <t><t>The extracted element.
<b>Example
<c> string elem1;
<c> int file;
<c> string line;
<c> file = fopen( "my_file.txt", "r");
<c> while( fgets( line, file))
<c> elem1 = felement( 1, " ");
<c> endwhile
</TOPIC>
<TOPIC> fgets() <style> function
......@@ -3058,6 +3204,9 @@ Returns a file identifier. If the file could not be opened, zero is returned.
string <t>filespec <t>Name of file.
string <t>mode <t>Access mode
<b>Returns
int <t><t>File identifier, or zero on error.
<b>Example
<c> int infile;
......@@ -3070,76 +3219,108 @@ string <t>mode <t>Access mode
<c> fclose( outfile);
</TOPIC>
<TOPIC> fclose() <style> function
fclose()
<TOPIC> fprintf() <style> function
fprintf()
int fclose( int file)
int fprintf( int file, string format [, (arbitrary type) arg1,
(arbitrary type) arg2])
<b>Description
Closes an opened file.
Formatted print on file. C-syntax. Format argument and non, one or two value
arguments.
Returns number of printed characters.
<b>Arguments
int <t>file <t>file-id returned by fopen.
int <t>file <t>File id returned by fopen.
string <t>format <t>Format.
arbitrary type <t>arg1 <t>Value argument. Optional. Can be int,
<t> <t>float or string.
arbitrary type <t>arg2 <t>Value argument. Optional. Can be int,
<t> <t>float or string.
<b>Example
<c> int infile;
<c> infile = fopen("some_file.txt","r");
<c> ...
<c> fclose( infile);
<c> int outfile;
<c> outfile = fopen( "my_file.txt", "w");
<c> if (!outfile)
<c> exit();
<c> fprintf( outfile, "Some text");
<c> fprintf( outfile, "a = %d", a);
<c> fclose( outfile);
</TOPIC>
<TOPIC> exit() <style> function
exit()
<TOPIC> fscanf() <style> function
fscanf()
int exit()
int fscanf( int file, string format , (arbitrary type) arg1)
<b>Description
Terminates executions of the file.
Formatted read from file. C-syntax.
Returns number of read characters.
<b>Arguments
int <t>file <t>File id.
string <t>format <t>Format.
arbitrary type <t>arg1 <t>Value argument. Returned. Can be int,
<t> <t>float or string.
<b>Example
<c> exit();
<c> int file;
<c> int i;
<c> file = fopen( "my_file.txt", "r");
<c> if (file)
<c> fscanf( file, "%d", i);
<c> fclose( file);
<c> endif
</TOPIC>
<TOPIC> verify() <style> function
verify()
<TOPIC> translate_filename() <style> function
translate_filename()
int verify( [int mode])
string translate_filename( string fname)
<b>Description
Sets or shows verification mode. If verification is on, all executed lines will
be displayed on the screen.
Returns the current verification mode.
Replace environment variables in filename.
<b>Arguments
int <t>mode <t>verification on (1) or off (0). Optional.
string <t>fname <t>A filename.
<b>Returns
string <t><t>String with expanded env variables.
<b>Example
<c> verify(1);
<c> string fname1 = "$pwrp_db/a.wb_load";
<c> string fname2;
<c> fname2 = translate_filename( fname1);
</TOPIC>
</headerlevel>
<TOPIC> time() <style> function
time()
string time()
<b>Description
Returns the current time in string format.
<b>Example
<TOPIC> string_functions <style> function
String functions
<c> string t;
<c> t = time();
<b>Function <t>Description
edit <t>Remove superfluous spaces and tabs. <link> edit()
element <t>Extract one element from a string. <link> element()
extract <t>Extract a substring from a string. <link> extract()
sprintf <t>Formatted print to a string. <link> sprintf()
strchr <t>Return the first occurence of a character in a string. <link> strchr()
strrchr <t>Return the last occurence of a character in a string. <link> strrchr()
strlen <t>Calculate the length of a string. <link> strlen()
strstr <t>Return the first occurence of a substring in a string. <link> strstr()
tolower <t>Convert string to lower case. <link> tolower()
toupper <t>Convert string to upper case. <link> toupper()
</TOPIC>
<headerlevel>
<TOPIC> edit() <style> function
edit()
......@@ -3160,6 +3341,29 @@ string <t>str <t>string to be edited.
<c> collapsed_str = edit(str);
</TOPIC>
<TOPIC> element() <style> function
element()
string element( int number, string delimiter, string str)
<b>Description
Extracts one element from a string of elements.
Returns the extracted element.
<b>Arguments
int <t>number <t>the number of the element.
string <t>delimiter <t>delimiter character.
string <t>str <t>string of elements.
<b>Example
<c> string str = "mary, lisa, anna, john";
<c> string elem1;
<c> elem1 = element( 1, ",", str);
</TOPIC>
<TOPIC> extract() <style> function
extract()
......@@ -3173,6 +3377,7 @@ Returns the extracted characters as a string.
<b>Arguments
int <t>start <t>start position of the first character.
<t><t>First character has position 1.
int <t>length <t>number of characters to be extracted.
string <t>str <t>string from which characters should be extracted.
......@@ -3181,27 +3386,133 @@ string <t>str <t>string from which characters should be extracted.
<c> extracted_str = extract( 5, 7, str);
</TOPIC>
<TOPIC> element() <style> function
element()
<TOPIC> sprintf() <style> function
sprintf()
string element( int number, string delimiter, string str)
int sprintf( string str, string format [, (arbitrary type) arg1, (arbitrary type) arg2])
<b>Description
Extracts one element from a string of elements.
Returns the extracted element.
Formatted print to buffer. C-syntax. Format argument and non, one or two value arguments.
Returns number of printed characters.
<b>Arguments
int <t>number <t>the number of the element.
string <t>delimiter <t>delimiter character.
string <t>str <t>string of elements.
string <t>str <t>String to print to.
string <t>format <t>Format.
arbitrary type <t>arg1 <t>Value argument. Optional. Can be int,
<t> <t>float or string.
arbitrary type <t>arg2 <t>Value argument. Optional. Can be int,
<t> <t>float or string.
<b>Example
<c> string str = "mary, lisa, anna, john";
<c> string elem1;
<c> elem1 = element( 1, ",", str);
<c> string str;
<c> int items;
<c> sprintf( str, "Number of items: %d", items);
</TOPIC>
<TOPIC> strchr() <style> function
strchr()
int strchr( string str, string c)
<b>Description
Return the first occurence of a character in a string.
<b>Arguments
string <t>str <t>String to search in.
string <t>c <t>Character to search for.
<b>Returns
int <t><t>Index for first occurence of character.
<t><t>First character has index 1. Returns
<t><t>zero if the character is not found.
<b>Example
<c> string str = "index.html";
<c> int idx;
<c> idx = strchr( str, ".");
</TOPIC>
<TOPIC> strrchr() <style> function
strrchr()
int strrchr( string str, string c)
<b>Description
Return the last occurence of a character in a string.
<b>Arguments
string <t>str <t>String to search in.
string <t>c <t>Character to search for.
<b>Returns
int <t><t>Index for last occurence of character.
<t><t>First character has index 1. Returns
<t><t>zero if the character is not found.
<b>Example
<c> string str = "/usr/local/pwrrt";
<c> int idx;
<c> idx = strrchr( str, "/");
</TOPIC>
<TOPIC> strlen() <style> function
strlen()
int strlen( string str, string c)
<b>Description
Calculates the length of a string.
<b>Arguments
string <t>str <t>String to calculate length for.
<b>Returns
int <t><t>Length of string.
<b>Example
<c> string str = "/usr/local/pwrrt";
<c> int len;
<c> len = strlen( str);
</TOPIC>
<TOPIC> strstr() <style> function
strchr()
int strstr( string str, string substr)
<b>Description
Return the first occurence of a substring in a string.
<b>Arguments
string <t>str <t>String to search in.
string <t>substr <t>Substring to search for.
<b>Returns
int <t><t>Index for first occurence of substring.
<t><t>First character has index 1. Returns
<t><t>zero if the substring is not found.
<b>Example
<c> string str = "index.html";
<c> int idx;
<c> idx = strstr( str, ".html");
</TOPIC>
<TOPIC> toupper() <style> function
......@@ -3215,10 +3526,10 @@ Convert string to upper case.
<b>Arguments
string <t>str <t>string to convert.
string <t>str <t>String to convert.
<b>Returns
string <t><t>string in upper case.
string <t><t>String in upper case.
<b>Example
......@@ -3228,7 +3539,7 @@ string <t><t>string in upper case.
</TOPIC>
<TOPIC> tolower() <style> function
toupper()
tolower()
string tolower( string str)
......@@ -3250,83 +3561,110 @@ string <t><t>string in lower case.
<c> str2 = tolower( str);
</TOPIC>
<TOPIC> get_language() <style> function
translate_filename()
</headerlevel>
string get_language()
<TOPIC> system_functions <style> function
System functions
<b>Description
<b>Function <t>Description
exit <t>Exit script. <link> exit()
system <t>Execute shell command. <link> system()
time <t>Get system time. <link> time()
verify <t>Print executed lines. <link> verify()
</TOPIC>
Get the current language.
<headerlevel>
<TOPIC> exit() <style> function
exit()
<b>Returns
string <t><t>The current langage, e.g en_us, sv_se, de_de.
int exit()
<b>Example
<b>Description
<c> string lng;
Terminates executions of the file.
<c> lng = get_language();
<c> if ( lng == "sv_se")
<c> create opmenu/name="Funktioner-Bilder-Översikt"/command="open graph overview"
<c> endif
<c> if ( lng == "en_us")
<c> create opmenu/name="Functions-ProcessGraphs-Overview"/command="open graph overview"
<c> endif
<b>Example
<c> exit();
</TOPIC>
<TOPIC> translate_filename() <style> function
translate_filename()
<TOPIC> system() <style> function
system()
string translate_filename( string fname)
int system( string cmd)
<b>Description
Replace environment variables in filename.
Execute a shell command.
<b>Arguments
string <t>fname <t>A filename.
string <t>cmd <t>Shell command to execute.
<b>Returns
string <t><t>String with expanded env variables.
int <t><t>The return value is -1 on error and the
<t><t>return status of the command otherwise.
<b>Example
<c> string fname1 = "$pwrp_db/a.wb_load";
<c> string fname2;
<c> fname2 = translate_filename( fname1);
<c> string cmd;
<c> cmd = "firefox http://www.proview.se";
<c> system( cmd);
</TOPIC>
<TOPIC> xtt-commands <style> function
Xtt commands
<TOPIC> time() <style> function
time()
All the xtt-commands is available in the script code. An rtt-command line
should NOT be ended with a semicolon. Variables can be substituted in the
command line by surrounding them with apostrophes.
string time()
<b>Description
Returns the current time in string format.
<b>Example
<c> string name = "PUMP-VALVE-Open.ActualValue";
<c> float value = 2.2;
<c> set parameter/name='name'/value='value'
<c> string t;
<c> t = time();
</TOPIC>
<TOPIC> verify() <style> function
verify()
int verify( [int mode])
<b>Description
Sets or shows verification mode. If verification is on all executed lines will
be displayed on the screen.
Returns the current verification mode.
<b>Arguments
int <t>mode <t>verification on (1) or off (0). Optional.
<b>Example
<c> string name;
<c> string parname;
<c> int j;
<c> int i;
<c> for ( i = 0; i < 3; i++)
<c> parname = "vkv-test-obj" + (i+1);
<c> create obj/name='parname'
<c> for ( j = 0; j < 3; j++)
<c> name = parname + "-obj" + (j+1);
<c> create obj/name='name'
<c> endfor
<c> endfor
<c> verify(1);
</TOPIC>
</headerlevel>
<TOPIC> database_functions <style> function
Database functions
<b>Function <t>Description
GetAttribute() <t>Get attribute value. <LINK> getattribute()
GetChild() <t>Get object child. <LINK> getchild()
GetParent() <t>Get object parent. <LINK> getparent()
GetNextSibling()<t>Get object sibling. <LINK> getnextsibling()
GetClassList() <t>Get first instance of a class. <LINK> getclasslist()
GetNextObject() <t>Get next instance of a class. <LINK> getnextobject()
GetObjectClass() <t>Get class of an object. <LINK> getobjectclass()
GetNodeObject() <t>Get node object. <LINK> getnodeobject()
GetRootList() <t>Get first object in root list. <LINK> getrootlist()
</TOPIC>
<headerlevel>
<TOPIC> getattribute() <style> function
GetAttribute()
......@@ -3539,7 +3877,23 @@ fetched with GetNextSibling().
<c> name = GetNextSibling(name);
<c> endwhile
</TOPIC>
</headerlevel>
<TOPIC> misc_functions <style> function
Miscellaneous functions
<b>Function <t>Description
CutObjectName() <t>Cut off an object name. <LINK> cutobjectname()
MessageError() <t>Print error message. <LINK> messageerror()
MessageInfo() <t>Print info message. <LINK> messageinfo()
GetCurrentText() <t>Get selected text. <LINK> getcurrenttext()
GetCurrentObject() <t>Get selected object. <LINK> getcurrentobject()
pwr_get_config() <t>Get configuration values <LINK> pwr_get_config()
get_node_name() <t>Get node name <LINK> get_node_name()
get_language() <t>Get the current language <LINK> get_language()
</TOPIC>
<headerlevel>
<TOPIC> cutobjectname() <style> function
CutObjectName()
......@@ -3625,6 +3979,61 @@ If no object is associated, a null-string i returned.
<c> object = GetCurrentObject();
</TOPIC>
<TOPIC> get_language() <style> function
get_language()
string get_language()
<b>Description
Get the current language.
<b>Returns
string <t><t>The current langage, e.g en_us, sv_se, de_de.
<b>Example
<c> string lng;
<c> lng = get_language();
<c> if ( lng == "sv_se")
<c> create opmenu/name="Funktioner-Bilder-Översikt"/command="open graph overview"
<c> endif
<c> if ( lng == "en_us")
<c> create opmenu/name="Functions-ProcessGraphs-Overview"/command="open graph overview"
<c> endif
</TOPIC>
</headerlevel>
<TOPIC> xtt-commands <style> function
Xtt commands
All the xtt-commands is available in the script code. An rtt-command line
should NOT be ended with a semicolon. Variables can be substituted in the
command line by surrounding them with apostrophes.
<b>Example
<c> string name = "PUMP-VALVE-Open.ActualValue";
<c> float value = 2.2;
<c> set parameter/name='name'/value='value'
<b>Example
<c> string name;
<c> string parname;
<c> int j;
<c> int i;
<c> for ( i = 0; i < 3; i++)
<c> parname = "vkv-test-obj" + (i+1);
<c> create obj/name='parname'
<c> for ( j = 0; j < 3; j++)
<c> name = parname + "-obj" + (j+1);
<c> create obj/name='name'
<c> endfor
<c> endfor
</TOPIC>
</chapter>
......@@ -8,7 +8,7 @@
<h1> Designer's Guide
<h1> Process station
......@@ -370,17 +370,20 @@ Check the busnumber
<c>> echo $PWR_BUS_ID
If it is not correct, change the busnumber in /etc/proview.cnf
Check that the bootfile $pwrp_load/ld_boot_'nodename'_'busid'.dat exists with the correct bus number. If the busnumber in the name is not correct, change it in the directory volume.
Check that the bootfile $pwrp_load/ld_boot_'nodename'_'busid'.dat exists with the correct bus
number. If the busnumber in the name is not correct, change it in the directory volume.
<c>W Version mismatch for volume: ...
Usually a change is made in a classvolume, but the rootvolume for the node is not rebuilt.
Update the classes and build the rootvolume for the node.
If the volume is a Proview base volume, check that the installed pwrrt version corresponds to the version in the development environment
If the volume is a Proview base volume, check that the installed pwrrt version corresponds to
the version in the development environment
<c>> cat $pwr_exe/rt_version.dat
If this doesn't help, the versions for the loadfiles can be viewed with wb_ldlist in the development environment. Check the versions of the .dbs files on $pwrp_load
If this doesn't help, the versions for the loadfiles can be viewed with wb_ldlist in the
development environment. Check the versions of the .dbs files on $pwrp_load
<c>> wb_ldlist $pwrp_load/volsaturnus7.dbs
<c>Volume VolSaturnus7 13-FEB-2009 16:16:51.59 (1234538211,592936184) 65796
......@@ -391,7 +394,9 @@ If this doesn't help, the versions for the loadfiles can be viewed with wb_ldlis
<c>VolRef CVolSaturnus7 13-FEB-2009 16:09:38.61 (1234537778,610918602) 25372
<c>VolRef Profibus 09-OCT-2008 12:00:00.00 (1223546400,0) 64007
Here the volume rootvolume VolSaturnus7 references the class volume CVolSaturnus7. The time for CvolSaturnus7 has to equal the VolRef time. By listing the .dbs file for the classvolume we can compare the times.
Here the volume rootvolume VolSaturnus7 references the class volume CVolSaturnus7. The time for
CvolSaturnus7 has to equal the VolRef time. By listing the .dbs file for the classvolume we can
compare the times.
<c>> wb_ldlist $pwrp_load/cvolsaturnus7.dbs
<c>Volume CVolSaturnus7 22-APR-2009 08:12:08.22 (1240380728,222698031) 25372
......
src/doc/man/src/dg_fig74.png

18.7 KB | W: | H:

src/doc/man/src/dg_fig74.png

19.7 KB | W: | H:

src/doc/man/src/dg_fig74.png
src/doc/man/src/dg_fig74.png
src/doc/man/src/dg_fig74.png
src/doc/man/src/dg_fig74.png
  • 2-up
  • Swipe
  • Onion skin
src/doc/man/src/dg_fig75.png

24.4 KB | W: | H:

src/doc/man/src/dg_fig75.png

28.5 KB | W: | H:

src/doc/man/src/dg_fig75.png
src/doc/man/src/dg_fig75.png
src/doc/man/src/dg_fig75.png
src/doc/man/src/dg_fig75.png
  • 2-up
  • Swipe
  • Onion skin
src/doc/man/src/dg_psfig1.png

6.53 KB | W: | H:

src/doc/man/src/dg_psfig1.png

9.2 KB | W: | H:

src/doc/man/src/dg_psfig1.png
src/doc/man/src/dg_psfig1.png
src/doc/man/src/dg_psfig1.png
src/doc/man/src/dg_psfig1.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -101,13 +101,16 @@ Konstrukt
Översikt <link> design_overview
Databas struktur <link> database_structure
En fallstudie <link> case_study
Administration <link> administrator
Navigera i projeketet <link> project_structure
Konfigurera direktoryvolymen <link> configure_directoryvolume
Konfigurera rotvolymen <link> configure_rootvolume
Plc programmering <link>plc_programming
Komponenter och aggregat <link>dg_components
Kommunikation <link> communication
Datalagring <link> dg_datastorage
Applikations-programmering <link>dg_application
Skapa processbilder <link> ge_man
Java operatörsmiljö <link> dg_web_iterface
Datalagring <link> dg_datastorage
Starta och testa systemet <link> conf_test
<b>Referens manualer
......@@ -116,6 +119,7 @@ Objektseditorn Referensmanual<link> objecteditor_refman
Spreadsheeteditorn Referensmanual<link> spreadsheeteditor_refman
Plceditorn Referensmanual <link> plceditor_refman
Klasseditorn Referensmanual <link> classeditor
Verktyg <link> dg_tools
OPC <link> opc_intro
Commands <link> help command
Script <link> script
......@@ -1250,7 +1254,7 @@ upp till 15 tryckknappar. Oanv
Se OpPlace i Objektshandboken <classlink>opplace,"",$pwr_lang/pwrb_xtthelp.dat
<b>Operator Window
<image> dg_fig45.gif
<image> dg_fig45.png
<h2>XttGraph objekt
XttGraph objekt används främst för att visa processbilder. I objektet pekar man ut den graf
......@@ -1266,6 +1270,21 @@ I XttGraph objektet ska f
- Action. Här anges en Ge graph, eller ett Xtt kommando.
Se XttGraph i Objektshandboken <classlink>xttgraph,"",$pwr_lang/pwrb_xtthelp.dat
<h2>Multiview objekt
Multiview är ett operatörs-fönster som är organiserat som en tabell, där varje cell kan
innehålla en graf, trend, historisk kurva, larmlista, händelselista eller ett annat
multiview fönster. Figuren nedan visar ett multiview fönster med en kolumn och två rader.
The första cellen innehåller ett annat multiview fönster med två kolumner och tree rader,
där den andra cellen innehåller en larmlista. De olika larmlistorna visar larm från olika
delar av anläggningen, specificerade av AlarmView objekt. En multiview konfigureras med
ett XttMultiView objekt. Action-vektorn innehåller specifikationerna för varje cell.
Det är också möjlig att byta ut en graf eller kurve i en cell med xtt-kommandot
'set subwindow'.
<image> dg_fig115.png
<b>Fig Multiview window
</topic>
</chapter>
......@@ -1294,7 +1313,7 @@ Figuren nedan visar filkatalogstrukturen f
<image> dg_psfig1.png
Katalogstrukturen är ny i Proview V4.7. Orsaken till detta är att mer särskilja källkods/
Katalogstrukturen ändrades till Proview V4.7. Orsaken till detta var att mer särskilja källkods/
konfigureringsfiler och gerenerade filer i projektet. Idén är att att allt som finns i
byggträdet ska kunna återskapas från källkodsträdet.
......@@ -1309,7 +1328,7 @@ Till exempel $pwrp_exe f
<topic> source_tree
Källkodsträdet
Källkodsträdet innehåller alla filer som utgör projektets källkod och konfigureringsfiler.
Topnivån innehåller enbart två underkataloger och inga källkods eller konfigureringsfiler.
Topnivån $pwrp_src innehåller enbart underkataloger och inga källkods eller konfigureringsfiler.
Nedan beskrivs innehållet och funktionen för underkatalogerna.
<option> printdisable
......@@ -1387,8 +1406,12 @@ En fil av speciellt intressen som ska finnas h
Den här filen kommer att inkluderas när plc-koden kompileras. Den är dock inkluderad från
en katalog i byggträdet (<project_root>/bld/common/inc).
Observera att ra_plc_user.h automatiskt genereras på $pwrp_inc första gången ett PlcPgm
kompileras. Om du behöver modifera ra_plc_user.h bör du först kopiera filen till $pwrp_appl
och lagra orginalet där.
Alla header filer som ligger här eller på underkataloger, och som ska inkluderas av
plc-programmet måste distributeras till $pwrp_inc katalogen (<project_root>/bld/common/inc).
plc-programmet måste kopieras till $pwrp_inc katalogen (<project_root>/bld/common/inc).
Om man har någon mindre funktion som man enbart länkar med plc-programmet och inte används
någon annanstans, placerar men koden i filen
......@@ -1715,6 +1738,8 @@ har mellan 17 och 19.
<topic> file_plc_opt
plc_<node>_<bus_no>_<plc_name>.opt
OBS! Den här filen är ersatt av BuildOptions objektet sen V4.8.2
Den är filen (om den existerar) används för att addera bibliotek och objektsmoduler vid
länkningen av plc-programmet. Några bibliotek och objektsmoduler måste finnas med, och
en default option-fil ska se ut så här:
......@@ -1822,7 +1847,7 @@ Det h
<h1>Editorn
Man startar editorn från ett PlcPgm objekt i anläggningshierarkin. Välj ut objektet och
aktivera 'Functions/Open Program' i menyn. Den första gången programmet öppnas, finns där
ett tomt dokument objekt. Programmet består av funktionsobjekt och GRAFCET sekvenser.
ett tomt dokument objekt. Programmet består av funktionsobjekt och Grafcet sekvenser.
Programmering med funktionsblock görs i ett horisontellt nät av noder och förbindningar, från
vänster till höger i dokumentet. Värden på signaler och attribut hämtas upp på den vänstra
......@@ -1830,8 +1855,8 @@ sidan av n
pinnar på funktionsblocken. Funktionsblocken opererar på signalvärdena och i den högra
sidan av nätet lagras värdena i signaler eller attribut.
GRAFCET sekvenser består av ett vertikalt nät av noder och förbindningar. Ett tillstånd
överförs mellan stegen i sekvensen via förbindningarna. Nät av GRAFCET och funktionsblock
Grafcet sekvenser består av ett vertikalt nät av noder och förbindningar. Ett tillstånd
överförs mellan stegen i sekvensen via förbindningarna. Nät av Grafcet och funktionsblock
kan samverka med varandra och kombineras till ett nät.
......@@ -1840,7 +1865,7 @@ kan samverka med varandra och kombineras till ett n
PLCeditorn består av
- en arbetsarea.
- en palett med GRAFCET objekt och funktionsblock, och en palette med förbindningar.
- en palett med Grafcet objekt och funktionsblock, och en palette med förbindningar.
- ett navigationsfönster, från vilket arbetsarean kan skrollas och zoomas.
......@@ -1852,10 +1877,10 @@ Ett funktionsobjekt skapas genom att man v
<h2>Modifiera ett objekt
Ett objekt kan modifieras från objektseditorn. Denna öppnas genom att välja ut objektet
och aktivera 'Functions/Open Object' i menyn. Värden på objektets attribut kan ändras med
'Functions/Change value' i objekteditorns meny. Om en in- eller ut-gångspinne inte används
kan den tas bort med en checkbox. Det finns också en checkbox som avgör om en digital ingång
ska vara inverterad.
och aktivera 'Functions/Open Object' i menyn. Värden på objektets attribut kan ändras med
'Functions/Change value' i objekteditorns meny, eller trycka på tangenten Pil Vänster. Om
en in- eller ut-gångspinne inte används kan den tas bort med en checkbox. Det finns också
en checkbox som avgör om en digital ingång ska vara inverterad.
<h2>Koppla ihop funktionsobjekt
En utgångspinne och en ingångspinne kopplas ihop genom att
......@@ -2007,6 +2032,13 @@ I figuren ovan visas subsekvensen f
SsBegin objekt och slutar med ett SsEnd objekt. En subsekvens kan i sin tur innehålla
subsekvenser.
<h2>Att bygga Grafcet sekvenser
Grafcet sekvenser byggs enkelt genom att starta med ett Step eller InitStep objekt.
Genom att dra ut en koppling från den nedre kopplingspunkten, och släppa den i ett tomt
område i arbetsarean, skapas ett förbundet Trans objekt. På samma sätt skapas Order objekt
från den högra kopplingspunkten, och från Trans objektets övre och undre kopplingspunkter
skapas nya Step objekt.
<h1>Introduktion till funktionsblocks programmering
<h2>Block för att hämta och lagra värden
......@@ -2122,7 +2154,8 @@ operativsystem kan v
simulerings-system och i ett utbildnings-system, och alla kan ha olika plattform.
Nu kompileras plcprogrammet genom att välja 'File/Build' i plceditorns meny. Eventuella
fel och varningar visas i meddelandefönstret.
fel och varningar visas i meddelandefönstret. Även när man bygger noden, kommer alla
nya eller modifierade plcpgm att kompileras.
</topic>
</chapter>
......@@ -2132,12 +2165,12 @@ Anropa funktioner fr
Den funktions-blocks programmering som plc-programmet utgörs av har sina begränsningar, och
vissa saker kan göras mycket enklare och snyggare med c-kod. För detta finns funktionsblocken
CArithm och DataArithm där man kan lägga in en viss mängd c-kod, men antal tecken är 1023, och
ibland räcker det inte till. Då har man två möjligheter, att skriva en fristående applikation,
vilket finns beskrivet i kapitlet Applikationsprogrammering, eller att anropa en c-funktion
från en CArithm eller DataArithm. Fördelen med att anropa en funktion är att all initiering och
knytning till objekt sköts av plc-programmet. Dessutom sker anropen synkront med exekveringen
av den plc-tråd som anropar funktionen.
CArithm och DataArithm där man kan lägga in en viss mängd c-kod, men antal tecken är 1023
(8191 för DataArithmL), och ibland räcker det inte till. Då har man två möjligheter, att
skriva en fristående applikation, vilket finns beskrivet i kapitlet Applikationsprogrammering,
eller att anropa en c-funktion från en CArithm eller DataArithm. Fördelen med att anropa en
funktion är att all initiering och knytning till objekt sköts av plc-programmet. Dessutom
sker anropen synkront med exekveringen av den plc-tråd som anropar funktionen.
<h1>Skriva koden
Koden läggs i en c-fil, som läggs någonstans under $pwrp_src. Vi skapar filen
......@@ -2204,16 +2237,13 @@ Anropet av funktionen sker fr
<b>Länka plc-programmet
Vid kompileringen skapades objektsmodulen $pwrp_obj/ra_myfunction.o. Denna måste länkas med
när plcprogrammet byggs, och det sker genom att objektsmodulen läggs in i en option fil som
skickas med som indata till länkaren. Optionfilen ligger på $pwrp_exe och har namnet
plc_'nodename'_'qbus'_'plcname'.opt, t ex
när plcprogrammet byggs, och det sker genom att skapa ett BuildOptions objekt i directory
volymen under NodeConfig objektet. Lägg in namnet på objektsmodulen i ObjectModule vektorn.
När direktory volymen sparas genereras en opt-fil på $pwrp_exe som inkludeas av länkaren
när noden byggs.
<c>$pwrp_exe/plc_mynode_0999_plc.opt
I denna läggs följande rad in
<c>$pwr_obj/rt_io_user.o $pwrp_obj/ra_myfunction.o -lpwr_rt -lpwr_usbio_dummy -lpwr_usb_dummy
<c> -lpwr_pnak_dummy -lpwr_cifx_dummy -lpwr_nodave_dummy -lpwr_epl_dummy
<image> dg_fig116.png
<b>Fig Objektsmodulen inlagd i BuildOptions
Vi kan nu bygga noden och starta Proview runtime.
......@@ -2231,12 +2261,12 @@ att skicka med pid f
<c>> ps x
<c>...
<c>5473 pts/0 Sl 0:18 plc_mynode_0999_00003
<c>5473 pts/0 Sl 0:18 plc_mynode_0999_plc
5473 är pid för plcprogrammet och vi startar debuggern, sätter en brytpunkt i funktionen
och låter programmet exekvera vidare
<c>> gdb -p 5473 plc_mynode_0999_00003
<c>> gdb -p 5473 plc_mynode_0999_plc
<c>(gdb) b MyFunction
<c>(gdb) c
......@@ -2245,12 +2275,12 @@ inneh
Om plcprogrammet terminerar direkt efter start, kan man starta om det i debug.
<c>> gdb plc_mynode_0999_00003
<c>> gdb plc_mynode_0999_plc
Det går också bra att döda den gående plc-processen och starta en ny i debug
<c>> killall plc_mynode_0999_00003
<c>> gdb plc_mynode_0999_00003
<c>> killall plc_mynode_0999_plc
<c>> gdb plc_mynode_0999_plc
</topic>
</chapter>
......@@ -2896,7 +2926,83 @@ I simuleringsbilden kan olika h
<topic>communication
Kommunikation
Remote-konceptet i Proview är ett sätt att standardisera kommuniktionen med andra system.
<option> printdisable
Intern kommunikation med QCom <link>com_intern
Extern kommunikation med Remote <link>com_remote
<option> printenable
</topic>
<headerlevel>
<topic>com_intern
Intern kommunikation
Den interna kommunikationen i Proview skickar information om volymer, objekt, larm,
händelser, historisk data mm mellan olika processer och noder. Det finns tre olika
protokoll för larmhantering, näthantering och historisk lagring, som alla basera på
Qcom.
<h1>Qcom
Qcom är en meddelande buss som skickar köade meddelanden mellan processer. Alla noder
som ska kommunicera med varandra måste ligga på samma buss. Vilken buss man använder
konfigureras i BusConfig objekt genom att ange buss-identiteten, ett tal mellan 1 och 999.
Man måste även konfigurera vilka noder som ska kommunicera med varandra. Med standard-
inställningen kommera alla noder i samma projekt att kommunicera med varandra. Dessutom
kan man ange noder i andra projekt med FriendNodeConfig objekt. Det kan vara process-
stationer som ska monteras av operatörs-stationer eller historiska logg-servrar.
Om man har projekt med flera noder, och inte vill att alla ska kommunicera med varandra,
kan man sätta QComAutoConnectDisable i BusConfig och använda FriendNodeConfig objekt för
definiera länkar mellan noder i projektet.
Alla Qcom meddelanden sker med kvittens. Om kvittensen uteblir skickas meddelandet om
med fördubblad timeout tid. Efter ett visst antal omsändningar utan svar betraktas
länken som nere. Beroende på typen av nät och nätets hastighet kan timeout tiderna behöva
korrigeras. Det görs med ResendTime attributen in NodeConfig och FriendNodeConfig objekten.
Se dokumentet QCOM för mer info.
<h1>Näthanterare
Näthanteraren skickar information om volymer och objekt mellan noder, det can t ex gälla
vilka volymer som en node äger, vilka föräldrar, barn eller syskon ett objekt har, eller
innehållet i object och attribut. Via näthanterare läggs även upp prenumationer, dvs data
som cyklisk skickas från en nod till en annan, vanligtvis från process-noder till
operatörs-stationer för bildvisning. Processerna för näthanteraren är rt_neth, rt_neth_acp
och rt_tmon.
<h1>Larmhanterare
Larmhanteraren skannar alla övervaknings-objekt på en nod, och skickar larm och händelser
till olika utenheter, t ex larm och händelselista i operatörsmiljön. Dessa i sin tur skicka
meddelanden med larm-kvittens tillbaka till larmhanteraren. Exakt vilka larm och händlser
som skickas till en utenhet beror på en urvalslista, som för operatörsmiljön anges i OpPlace
objektet. Endast larm och händelser under angivna hierarkier skickas.
Processen för larmhantering, rt_emon, konfigureras med MessageHandler objektet.
<h1>Historisk datalagring
Den historiska datalagringen innebär att data skickas från process-noder och lagras i en
databas som ofta ligger på en dedikerad server. På process-noden skannar rt_sevhistmon
alla attribut som markeras för lagring, hämtar upp aktuella värden och skickar över dem
till processen sev_server, som lagrar dem i en databas. När kurvor på historiska data
ska visas, skickas en förfrågan för operatörsmiljön, och ett lämpligt urval av punkter
hämtas upp ur databasen och skickas tillbaka till operatörsmiljön.
Se kapitel Datalagring <link> dg_sev
<h1>Web och app kommunikation
Web gränssnittet och Android applikationen hämtar information från realtidsdatabasen i
Proview med hjälp av server-processerna rt_webmon, rt_webmonmh och rt_webmonelog. Den
här kommunikationen konfigureras med WebHandler objektet.
<h1>Status server
Runtime monitorn och Supervision center hämtar information från status servern. Den
här kommunikationen bygger på http och soap, och konfigureras med StatusSeverConfig
objektet.
</topic>
<topic>com_remote
Remote
Remote-konceptet i Proview är ett sätt att standardisera kommunikationen med andra system.
Det utgörs av ett antal transport program och Proview objekt som används för att
implementera ett antal olika kommunikations-protokoll och hantera inkommande och utgående
meddedanden. Remote är designat för att använda olika transport protokoll som TCP/IP eller
......@@ -2955,8 +3061,13 @@ Funktions-objekt som anv
<h2>RemTransRcv
Funktions-objekt som används i plc-program för att ta emot meddelanden.
<h2>Loggning av transaktioner
Remote transaktioner kan loggas på en text-fil. Hur mycket som ska loggas konfigureras
i RemTrans objektets LoggLevel attribut, och logfilen konfigureras med ett LoggConfig
objekt.
</topic>
</headerlevel>
<topic> protocols
Protokoll
......@@ -3148,7 +3259,7 @@ Om man inte har kontakt med den andra noden kommer meddelandet att buffras, f
finns fria buffrar för meddelandet.
</topic>
<topic> modbus-serial
<topic> modbus_serial
Modbus Serial
MODBUS formatet som är implementerat är RTU. För att identifiera meddelanden används fälten för
slav-adress och funktions-kod i MODBUS headern. I RemTrans[0] och [1] anges dessa värden i
......@@ -3222,8 +3333,6 @@ h
<c> pwr_tUInt32 Id;
<c>} d_a_RequestData;
<c>
<c>#define pwr_sClass_d_a_RequestData d_a_RequestData
<c>
<c>typedef struct {
<c> pwr_tUInt32 Id;
<c> pwr_tFloat32 data_1;
......@@ -3232,8 +3341,6 @@ h
<c> pwr_tInt32 data_4;
<c>} d_a_Report;
<c>
<c>#define pwr_sClass_d_a_Report d_a_Report
<c>
<c>typedef struct {
<c> pwr_tUInt32 Id;
<c> pwr_tFloat32 data_1;
......@@ -3242,15 +3349,11 @@ h
<c> pwr_tInt32 data_xx;
<c>} a_d_Data;
<c>
<c>#define pwr_sClass_a_d_Data a_d_Data
<c>
<c>typedef struct {
<c> pwr_tUInt32 Id;
<c> pwr_tInt32 func_no;
<c> pwr_tInt16 err_code;
<c>} a_d_Data;
<c>
<c>#define pwr_sClass_a_d_Error a_d_Error
<h2>Plc-koden
......@@ -3275,9 +3378,8 @@ buffer-objektet med meddelandet och s
<h2>Underfönstret för sändning
I send underfönstret fyller man i data för sänd-bufferten. Buffer-objektet för meddelandet kopplas
till en DataArithm. Den speciella 'classdef'-syntaxen castar Da1 till en pekare till en
d_a_RequestData struct (eller närmare bestämt till en pekare till pwr_sClass_d_a_RequestData,
därför finns define-satsen för denna i inkludefilen ovan).
till en DataArithm. Den speciella 'structdef'-syntaxen castar Da1 till en pekare till en
d_a_RequestData struct.
<image> dg_fig74.png
......@@ -3290,6 +3392,7 @@ r
<image> dg_fig75.png
</topic>
</headerlevel>
</chapter>
<chapter>
......@@ -3533,6 +3636,17 @@ innodb poolen genom att addera f
<c>innodb_buffer_pool_size=1G
<c>innodb_additional_mem_pool_size=20M
För stora databaser måste storleken på log-filen ökas, och genom att konfigurera
en fil per tabell får man mer information on kontroll över disk-utrymmet.
<c>innodb_log_file_size=128M
<c>innodb_log_buffer_size=16M
<c>innodb_file_per_table
För beräkning av diskutrymme för innodb krävs ca 47 bytes per värde. Lagringen av
en signal med 10 s cykeltid under ett år använder ca 6 * 60 * 24 * 365 * 47 byte =
148 Mb. SevHist objektets UseDeadBand option kommer att minska den siffran.
<h2>SQLite
Installera libsqlite3-0 på lagringsstationen.
......@@ -4318,10 +4432,10 @@ Makefilen kan exekveras genom att man st
Man kan även lägga in byggkommandot i Application objektet för applikationen i attributet
BuildCmd. I det här fallet blir byggkommandot
<c>make -f $pwrp_src/myappl/makefile
<c>make --directory $pwrp_src/myappl -f makefile
Det här kommandot exekveras då i samband med att nod byggs från konfiguratören. På det här
sättet kan man försäkra sig om att alla applikationer uppdateras när nod byggs om.
Det här kommandot exekveras då i samband med att noden byggs från konfiguratören. På det här
sättet kan man försäkra sig om att alla applikationer uppdateras när noden byggs om.
</topic>
......@@ -4774,7 +4888,121 @@ l
</topic>
</chapter>
<chapter>
<topic>android_app
Android application
<image>dg_fig119.png
<b>Android application
Android applikationen kan köras på mobiltelefoner och surfplattor med operativsystemet
Android. Applikationen kopplar upp sig mot en process- eller operatörsstation och kan bl a
visa
- Runtima navigatorn.
- Operatörsbilder.
- Plc trace.
- Larm och händelselista.
- Korsreferenser.
För att installera applikationen, ladda ner PwrXtt.apk från Proview's nedladdings-sida på
Source Forge och installera på plattan eller mobilen.
Applikationen använder samma server processer som web-gränssninttet, rt_webmon och
rt_webmonmh, som konfigureras med ett WebHandler objekt. Se Kapitlet Java Operatörsmiljö för
mer info.
<h1>Start meny
När man startar applikationen visas först en startmeny, eller om denna inte är konfigurerad
runtime navigatorn.
Start menyn konfigureras under WebHandler objektet med AppGraph och AppLink objekt. AppGraph
används för att öppna Ge grafer, och AppLink är en länk till en hemsida eller ett dokument.
Om man vill separera App-objekten från Web-objekten under WebHandler objektet kan man skapa
en under hierarki men ett $NodeHier-objekt.
I AppGraph objeket anges namnet på pwg-filen, en bild-fil för ikonen och en text som skrivs
under ikonen. I AppLink objektet anges en URL, samt bild-fil och text.
<image>dg_fig117.png
<b>Konfigurering av startmeny
<image>dg_fig118.png
<b>Fig Start meny
<h1>Distribution
Attributet AppUseWebDir i WebHandler-objektet anger om alla filer ska hämtas från pwrp_web
katalogen, eller om vissa filer ska hämtas från $pwrp_exe och $pwrp_load. Om AppUseWebDir
är satt fungerar appen analogt med webgränssnittet och pwg och flw filer måste kopieras till
$pwrp_web.
Tabell över filer som används av applikationen. Om AppUseWebDir är satt, ska dessa
distribueras till $pwrp_web.
<b>Funktion <t>filtyp <t>katalog
Ge grafer <t>pwg <t>$pwrp_exe
Plc trace <t>flw <t>$pwrp_load
Korsreferenser <t>rtt_crr*.dat <t>$pwrp_load
Hjälpfiler <t>html <t>$pwrp_web
Ikoner <t>png, gif etc <t>$pwrp_exe
<h2>Web server
Appen läser filer via en webserver, t ex apache, som måste vara startad. Liksom för
Web-gränssnittet ska det finnas en alias pwrp_web definerad, som pekar på $pwrp_web. För
apache specificeras det i filen /etc/apache2/apache2.conf.
<c>Alias /pwrp_web/ /pwrp/common/web/
<c><Directory /pwrp/common/web>
<c> Options Indexes MultiViews
<c> AllowOverride None
<c> Order allow,deny
<c> Allow from all
<c></Directory>
Om AppUseWebDir inte är satt, måste det dessutom finnas alias för pwrp_exe och pwrp_load. I
det här fallet behöver man inte kopiera filer till $pwrp_web utan de läses på pwrp_load eller
pwrp_exe där de normalt förekommmer. flw-filer och korsreferensfiler läses från $pwrp_load
och övriga filer, pwg, png etc, från $pwrp_exe.
Notera att pwrp_exe katalogen olika beroende på plattform.
<c>Alias /pwrp_load/ /pwrp/common/load/
<c><Directory /pwrp/common/load>
<c> Options Indexes MultiViews
<c> AllowOverride None
<c> Order allow,deny
<c> Allow from all
<c></Directory>
<c>Alias /pwrp_exe/ /pwrp/x86_linux/exe/
<c><Directory /pwrp/x86_linux/exe>
<c> Options Indexes MultiViews
<c> AllowOverride None
<c> Order allow,deny
<c> Allow from all
<c></Directory>
För att kunna visa Proview hjälp texter ska det även finnas ett alias för pwr_doc som pekar
på $pwr_doc. Den adderas normalt vid installationen av pwrrt paketet.
<c>Alias /pwr_doc/ /usr/pwrrt/doc/
<c><Directory /usr/pwrrt/doc>
<c> Options Indexes MultiViews
<c> AllowOverride None
<c> Order allow,deny
<c> Allow from all
<c></Directory>
<image>dg_fig120.png
<b>Fig Plc trace läser flw-filer från $pwrp_load
</topic>
</chapter>
<chapter>
<topic>conf_test
Starta och testa ett Proview system
......@@ -4837,7 +5065,7 @@ ClassVolume <t>Genererar include-filer med c-struct'ar f
Node <t>Anropar byggmetoden för rotvolymen om volymen är tillgänglig. Skapar en bootfil
<t>med info om vilka volymer som ska laddas in och länkar plc-programmet för noden.
Normalt kontrollera byggmetoderna först om något är ändrat, och utför endast bygget om den
Normalt kontrollerar byggmetoderna först om något är ändrat, och utför endast bygget om den
hittar någon förändring. I vissa fall vill man tvinga ett bygge, och sätter då 'Force' i
Build kolumnen i options som öppnas från 'Options/Settings' i menyn. Här kan man även markera
om man vill skapa korsreferens-filer vid bygge av en volym, eller om man vill kompilera och
......@@ -5279,8 +5507,9 @@ till 'Change value'.
<bookmark>symbol_file
<h1>Symbol fil
Symbol filen är en kommando fil som exekveras vid wtt startup. Det kan innehålla definitioner
av symboler och andra wtt kommandon. Här följer några exempel på användbara kommandon.
Symbol filen är en kommando fil som exekveras vid startup av konfiguratören. Det kan innehålla
definitioner av symboler och andra wtt kommandon. Här följer några exempel på användbara
kommandon.
Genväg till objekt i objektsträdet:
......@@ -5406,7 +5635,7 @@ klicka p
<topic> utilities_refman
Utilities fönstret
Utilities fönstret är ett grafiskt gränssnitt till olika kommandon i wtt.
Utilities fönstret är ett grafiskt gränssnitt till olika kommandon i konfiguratören.
För en närmare beskrivning av respektive kommando, se avsnittet Kommandon.
</topic>
</chapter>
......@@ -5423,8 +5652,8 @@ sidan av n
ingångs-pinnar på funktionsblocken. Funktionsblocken opererar på värdena och på nätets
högra sida, lagras värdena i signaler eller attribut.
GRAFCET sekvenser består av ett vertikalt nät av noder och förbindningar. Ett tillstånd
förflyttas mellan olika steg i sekvensen via förbindningarna. GRAFCET och funktionsblock
Grafcet sekvenser består av ett vertikalt nät av noder och förbindningar. Ett tillstånd
förflyttas mellan olika steg i sekvensen via förbindningarna. Grafcet och funktionsblock
kan samverka med varandra och kombineras till ett enda nät.
<h2>Start
......@@ -5726,7 +5955,7 @@ automatiskt. Dokument objekt finns under mappen 'Edit' i objektspaletten.
<b>ShowPlcAttr
ShowPlcAttr kan användas som som en utökning av dokumenthuvudet. I detta objekt skriv info
om volym, scantid och resetobjekt för GRAFCET ut.
om volym, scantid och resetobjekt för Grafcet ut.
<b>Head, Title, Text och BodyText
Dessa objekt används för att skriva förklarande texter i dokumenten. Head, Title och Text
......@@ -5737,11 +5966,11 @@ flerradig text p
Point objektet är en fri kopplingspunkt som kan användas som förgrening av förbindningar
eller för att styra layouten på förbindningar. Point finns under 'Edit' i objektspaletten.
<b>GRAFCET
GRAFCET sekvenser är uppbyggda med speciella GRAFCET objekt som InitStep, Step, Trans och
<b>Grafcet
Grafcet sekvenser är uppbyggda med speciella Grafcet objekt som InitStep, Step, Trans och
Order. Kopplingarna mellan objektet följer bestämda regler. De vertikala pinnarna på ett
Step objekt ska t ex kopplas till Trans objekt, och den horisontella pinnen ska kopplas
till ett Order objekt. Här följer ett exempel på hur men enkelt skapar en GRAFCET sekvens.
till ett Order objekt. Här följer ett exempel på hur men enkelt skapar en Grafcet sekvens.
Börja med att skapa ett InitStep objekt. Dra ut en förbindning från den undre pinnen och
släpp den i arbetsarean under InitStep objektet. Nu skapas ett Trans objekt som är
......@@ -5888,7 +6117,7 @@ En hj
<c>co_convert -n [-d outputdirectory] 'helpfile'
<b>Exampel
<b>Exempel
<c>co_convert -n -d $pwrp_lis $pwrp_exe/xtt_help.dat
<h2>Konvertering till PDF
......@@ -5896,7 +6125,7 @@ En hj
<c>co_convert -f [-d outputdirectory] 'helpfile'
<b>Exampel
<b>Exempel
<c>co_convert -f -d $pwrp_lis $pwrp_exe/xtt_help.dat
</topic>
......@@ -5911,6 +6140,7 @@ index <t>Lista
h1 <t>Rubrik 1 <link> header1
h2 <t>Rubrik 2 <link> header2
b <t>Fet text <link> bold
c <t>Kod <link>helpcode
t <t>Tab <link> helptab
hr <t>Horisontell linje<link> hr
include <t>Inkludera andra hjälpfiler<link> include
......@@ -5924,8 +6154,9 @@ headerlevel <t>
pagebreak <t>Ny sida<link> pagebreak
option <t>Optioner<link> option
style <t>Specifik text stil <link> style
Titelsida och dokument info <link> special_topics
<b>Exampel <link> helpfile example
<b>Exempel <link> helpfile example
</topic>
<headerlevel>
......@@ -6035,6 +6266,18 @@ kommer att visas som
<b>This is a bold line
</topic>
<topic> helpcode
Kod
<ib><c>
<i><c> taggen visar en rade med teckensnittet Courier. Taggen ska placeras i början
på raden.
<b>Exempel
<i><c>for ( i = 0; i < 10; i++)
kommer att visas som
<c>for ( i = 0; i < 10; i++)
</topic>
<topic> helptab
Tab
<ib><t>
......@@ -6112,7 +6355,7 @@ printdisable <t>Ignorera alla taggar och all text till n
<t>och PostScript.
printenable <t>Återställ 'printdisable'.
<b>Example
<b>Exempel
<i><option> disable
<i>Some text
<i>...
......@@ -6133,6 +6376,25 @@ function <t>Stilmall anv
<i></topic>
</topic>
<topic> special_topics
Titelsidan och dokument info
Titelsida och sida för dokument info kan skapas med två speciella topic.
<h2>__DocumentTitlePage
Topic för titelsidan. Placeras först i en hjälp-fil.
<i><topic> __DocumentTitlePage
<i>...
<i></topic>
<h2>__DocumentInfoPage
Topic för dokument information, t ex copyright. Placeras efter titelsidan.
<i><topic> __DocumentInfoPage
<i>...
<i></topic>
</topic>
<topic> helpfile example
Exempel på hälpfil
<i><topic> helpfile_example
......@@ -6350,287 +6612,115 @@ och om han inte har n
Från xtt kan man med login/logout kommandot logga in som en annan användare och därmed ändra
sina privilegier.
<h1>Operatörsbilder på intranätet
För operatörbilder på webben finns en speciellt inloggningsfönster som kan öppnas om detta
är konfigurerat i WebHandler objektet. Man kan ange default privileger och även en speciell
systemgrupp fpr
</topic>
<topic> pwr_user
pwr_user
<h1>Behöriget på web
För operatörbilder på webben finns en speciellt inloggningsfönster som kan öppnas från
web menyn, om detta är konfigurerat i WebHandler objektets EnableLogin attribut. Default
gruppen är common.web, som inte exsisterar i template användar-databasen. Istället används
då den första existerande föräldergruppen, dvs common, och användarna i denna grupp får
tillgång till hemsidan. Om man vill begränsa tillgången, skapar man antingen common.web
gruppen utan UserInherit, eller en annan grupp och lägger in den i $Security objektet.
Man skapar också lämpliga användare i gruppen.
pwr_user används för att skapa systemgrupper och användare i användar-databasen.
Konfigureringen sker mha kommandon.
<h1>Editera användar-databasen
User-databasen editeras från administratören eller konfiguratören. Det öppnas från
File/Open/UserDatabase i menyn.
Se kapitel Administration <link>adm_user
pwr_user startas från kommando-prompten.
Man kan även editera databasen med kommandon i pwr_user, se pwr_user i kapitlet Verktyg. <link>pwr_user
</topic>
</chapter>
Här beskrivs de olika kommandon som finns för att skapa, modifiera och lista systemgrupper
och användare.
<chapter>
<topic> classeditor
Klasseditor
add group <t>Addera en systemgrupp <link> pwr_user add group
add user <t>Addera en användare <link> pwr_user add user
get <t>Hämta en användare <link> pwr_user get
list <t>Lista systemgrupper och användare <link> pwr_user list
load <t>Ladda in senaste sparade databas <link> pwr_user load
modify group <t>Ändra en systemgrupp <link> pwr_user modify group
modify user <t>Ändra en användare <link> pwr_user modify user
remove group <t>Ta bort en systemgrupp <link> pwr_user remove group
remove user <t>Ta bort en användare <link> pwr_user remove user
save <t>Spara <link> pwr_user save
su <t>Logga in som super user <link> pwr_user su
</topic>
Det här avsnittet beskriver hur man skapar nya klasser i Proview.
Det finns ett antal olika fall när det kan vara idé att skapa en ny klass.
<headerlevel>
<topic>pwr_user add
add
<h2>Data objekt
Man vill lagra en mängd data i en datastruktur, t ex för att smidigare kunna få tillgång till
datamängden från applikationer. Man kan även skapa dataobjekt som beskriver material som
passerar genom en anläggning, där ett dataobjekt innehåller egenskaper för ett material, t ex
längd, bredd, vikt etc. Material objekt kan flyttas runt i NMps celler för att beskriva läget
av ett material i anläggningen, och låta detta styra processen.
add group <link> pwr_user add group
add user <link> pwr_user add user
</topic>
<h2>Plc funktionsobjekt
Funktionsobjekt som används i plc programmeringen består av en klass som definierar in- och
utgångs pinnar på funktionsobjektet samt eventuella interna attribut. Det här typen av objekt
består även av kod, som exekveras av plcprogrammet. Man kan välja att skapa koden i
form av plc-kod eller c-kod.
<headerlevel>
<topic> pwr_user add group
add group
<h2>Komponenter
Ett komponent-objekt speglar en komponent i anläggningen och är ofta uppdelad i två eller tre
olika klasser, ett huvudobjekt, ett funktionsobjekt och ett bussobjekt, ibland även ett
simuleringsobjekt. Huvudobjektet läggs i anläggningshierarkin och innehåller de signaler som
är kopplade till komponenten, jämte andra konfigureringsdata. I ett plcprogram läggs ett
funktionsobjekt som kopplas till huvudobjektet och som arbetar dels med data från sina egna
ingångar, och dels med signaler och andra parametrar som finns i huvudobjektet. Om
signalutbytet med komponenten sker via Profibus, kan man även skapa ett speciellt Profibus
modulobjekt som innehåller kanalobjekt för de data som transporteras på Profbus. Här räcker
det med att göra en koppling mellan huvudobjekt och modulobjekt, för att koppla ihop alla
kanaler och signaler. Simuleringsobjektet är ett funktionsobjekt som kopplas till
huvudobjektet och som simulerar komponenten när systemet körs i simuleringsmod.
Skapa en systemgrupp
<h2>Subklasser av komponenter
Proview innehåller ett antal baskomponent-klasser för ventiler, motorer mm. Dessa är byggda
mycket generalla för att täcka in ett stort antal komponenter. Ofta gör man en subklass som
är anpassad till en specifik komponent, och som t ex innehåller länk till datablad,
hjälptext mm. för just denna komponent. Genom att göra en subklass av en baskomponent ärver
man alla metoder och attribut från denna, men har även möjligheten att utöka funktionaliteten
med fler attribut och mer plc-kod.
<c>pwr_user> add group 'name' [/nouserinherit]
<h2>Aggregat
Ett aggregat speglar ett anläggningsdel som består av ett antal komponenter. Här kan man göra
en aggregats-klass som innehåller de olika komponenterna i form av attributobjekt.
Till aggregatet finns även ett funktionsobjekt som anropar funktionsobjekten för ingående
komponenter. Aggregat kan även inehålla andra aggregat och ge upphov till ganska omfattande
objektsstrukturer. I princip skulle man kunna bygga en anläggning i form att ett enda
aggregatsobjekt, men praktiken är det lämpligt att hålla objektsstrukturen på en ganska låg
nivå. Det är framför allt när man har flera identiska aggregat som man har nytta av att göra
ett aggregatsobjekt av anläggningsdelen.
/nouserinherit <t>Attributet UserInherit ska inte vara satt för systemgruppen.
<t>UserInherit är default.
</topic>
<topic> pwr_user add user
add user
Skapa en användare.
<option> printdisable
<b>Databasstruktur <link> ced_databasestructure
<b>Klassbeskrivning <link> ced_classdescription
<b>Typbeskrivning <link> ced_typedescription
<b>Skapa klasser <link> ced_createclasses
<b>Bygga klassvolym <link> ced_build
<b>Dokumentation av klasser <link> class docblock
<option> printenable
pwr_user> add user 'name' /group= /password= [/privilege=]
[/rtread][/rtwrite][/system][/maintenance][/process]
[/instrument][/operator1][/operator2]...[oper10][/devread]
[/devplc][/devconfig][/devclass]
/group <t>Systemgrupp som användaren ska tillhöra.
/password <t>Användarens passerord.
/privilege <t>Privilegier om denna anges anges som en mask, dvs ett heltalsvärde.
/rtread <t>Användaren tilldelas RtRead.
/rtwrite <t>Användaren tilldelas RtWrite.
/system <t>Användaren tilldelas System.
/maintenance <t>Användaren tilldelas Maintenance.
/process <t>Användaren tilldelas Process.
/operator1 <t>Användaren tilldelas Operator1.
...
/operator9 <t>Användaren tilldelas Operator9.
/operator10 <t>Användaren tilldelas Operator10.
/devread <t>Användaren tilldelas DevRead.
/devplc <t>Användaren tilldelas DevPlc.
/devconfig <t>Användaren tilldelas DevConfig.
/devclass <t>Användaren tilldelas DevClass.
</topic>
</headerlevel>
<topic> pwr_user get
get
<headerlevel>
<topic>ced_databasestructure
Databasstruktur
<h1>Objekt
I avsnittet Databas struktur ges en beskrivning av hur objekt är uppbyggda. Här finns
anledning att gå lite djupare i det ämnet.
Hämtar en användare med en algorithm som används i runtime.
Ett objekt består av ett objektshuvud och en objektskropp. Objekshuvudet innehåller
information om objektets namn, klass och relation till andra objekt. Objektskroppen innehåller
objektets datamängd.
pwr_user> get 'username' /group= /password=
</topic>
<h2>Objektshuvud
Ett objekt har ett namn på maximalt 31 tecken som finns lagrat i objekthuvudet.
<topic> pwr_user list
list
I objektshuvudet finns även en länk till objekts klassbeskrivning. I klassbeskrivningen finns
information som gör att man kan tolka objektets datamängd, hur den är uppdela i olika
attribut och vilken typ de olika attributen har. Vidare finns här även de olika metoder som
kan verka på objektet.
Lista systemgrupper och användare.
Ett objekt ligger i en trädstruktur och i objektshuvudet finns pekare till närmsta anhöriga:
förälder, föregående syskon, nästa syskon och första barn.
pwr_user> list
</topic>
Strukturen på ett objekthuvud är gemensamt för alla olika typer av objekt.
<topic> pwr_user load
load
Laddar in den senaste sparade databasen och raderar eventuella ändringar sen senaste save.
</topic>
<topic> pwr_user modify
modify
modify group <link> pwr_user modify group
modify user <link> pwr_user modify user
</topic>
<headerlevel>
<topic> pwr_user modify group
modify group
Ändra data för en systemgrupp.
<c>pwr_user> modify group 'name' /[no]userinherit
/userinherit <t>Sätter attributet UserInherit som anger att systemgruppen ska
<t>ärva användare från från sin förälder i systemgrupps-hierakin.
<t>Negeras med /nouserinherit
</topic>
<topic> pwr_user modify user
modify user
Ändra data för en användare.
<c>pwr_user> modify user 'name' /group= [/password=][/privilege=]
<c> [/rtread][/rtwrite][/system][/maintenance][/process]
<c> [/instrument][/operator1][/operator2]...[oper10][/devread]
<c> [/devplc][/devconfig][/devclass]
/group <t>Systemgrupp som användaren tillhör.
/password <t>Användarens passerord.
/privilege <t>Privilegie om denna anges anges som en mask, dvs ett heltalsvärde.
/rtread <t>Användaren tilldelas RtRead.
/rtwrite <t>Användaren tilldelas RtWrite.
/system <t>Användaren tilldelas System.
/maintenance <t>Användaren tilldelas Maintenance.
/process <t>Användaren tilldelas Process.
/operator1 <t>Användaren tilldelas Operator1.
...
/operator9 <t>Användaren tilldelas Operator9.
/oper10 <t>Användaren tilldelas Operator10.
/devread <t>Användaren tilldelas DevRead.
/devplc <t>Användaren tilldelas DevPlc.
/devconfig <t>Användaren tilldelas DevConfig.
/devclass <t>Användaren tilldelas DevClass.
</topic>
</headerlevel>
<topic> pwr_user remove
remove
remove group <link> pwr_user remove group
remove user <link> pwr_user remove user
</topic>
<headerlevel>
<topic> pwr_user remove group
remove group
Ta bort en systemgrupp.
<c>pwr_user> remove group 'name'
</topic>
<topic> pwr_user remove user
remove user
Ta bort en användare.
<c>pwr_user> remove user 'name' /group=
</topic>
</headerlevel>
<topic> pwr_user save
save
Spara.
<c>pwr_user> save
</topic>
<topic> pwr_user su
su
Logga in som super-user. Som super-user kan man se se password för användare vid listning.
su kräver password.
<c>pwr_user> su 'password'
</topic>
</headerlevel>
</headerlevel>
</chapter>
<chapter>
<topic> classeditor
Klasseditor
Det här avsnittet beskriver hur man skapar nya klasser i Proview.
Det finns ett antal olika fall när det kan vara idé att skapa en ny klass.
<h2>Data objekt
Man vill lagra en mängd data i en datastruktur, t ex för att smidigare kunna få tillgång till
datamängden från applikationer. Man kan även skapa dataobjekt som beskriver material som
passerar genom en anläggning, där ett dataobjekt innehåller egenskaper för ett material, t ex
längd, bredd, vikt etc. Material objekt kan flyttas runt i NMps celler för att beskriva läget
av ett material i anläggningen, och låta detta styra processen.
<h2>Plc funktionsobjekt
Funktionsobjekt som används i plc programmeringen består av en klass som definierar in- och
utgångs pinnar på funktionsobjektet samt eventuella interna attribut. Det här typen av objekt
består även av kod, som exekveras av plcprogrammet. Man kan välja att skapa koden i
form av plc-kod eller c-kod.
<h2>Komponenter
Ett komponent-objekt speglar en komponent i anläggningen och är ofta uppdelad i två eller tre
olika klasser, ett huvudobjekt, ett funktionsobjekt och ett bussobjekt, ibland även ett
simuleringsobjekt. Huvudobjektet läggs i anläggningshierarkin och innehåller de signaler som
är kopplade till komponenten, jämte andra konfigureringsdata. I ett plcprogram läggs ett
funktionsobjekt som kopplas till huvudobjektet och som arbetar dels med data från sina egna
ingångar, och dels med signaler och andra parametrar som finns i huvudobjektet. Om
signalutbytet med komponenten sker via Profibus, kan man även skapa ett speciellt Profibus
modulobjekt som innehåller kanalobjekt för de data som transporteras på Profbus. Här räcker
det med att göra en koppling mellan huvudobjekt och modulobjekt, för att koppla ihop alla
kanaler och signaler. Simuleringsobjektet är ett funktionsobjekt som kopplas till
huvudobjektet och som simulerar komponenten när systemet körs i simuleringsmod.
<h2>Subklasser av komponenter
Proview innehåller ett antal baskomponent-klasser för ventiler, motorer mm. Dessa är byggda
mycket generalla för att täcka in ett stort antal komponenter. Ofta gör man en subklass som
är anpassad till en specifik komponent, och som t ex innehåller länk till datablad,
hjälptext mm. för just denna komponent. Genom att göra en subklass av en baskomponent ärver
man alla metoder och attribut från denna, men har även möjligheten att utöka funktionaliteten
med fler attribut och mer plc-kod.
<h2>Aggregat
Ett aggregat speglar ett anläggningsdel som består av ett antal komponenter. Här kan man göra
en aggregats-klass som innehåller de olika komponenterna i form av attributobjekt.
Till aggregatet finns även ett funktionsobjekt som anropar funktionsobjekten för ingående
komponenter. Aggregat kan även inehålla andra aggregat och ge upphov till ganska omfattande
objektsstrukturer. I princip skulle man kunna bygga en anläggning i form att ett enda
aggregatsobjekt, men praktiken är det lämpligt att hålla objektsstrukturen på en ganska låg
nivå. Det är framför allt när man har flera identiska aggregat som man har nytta av att göra
ett aggregatsobjekt av anläggningsdelen.
<option> printdisable
<b>Databasstruktur <link> ced_databasestructure
<b>Klassbeskrivning <link> ced_classdescription
<b>Typbeskrivning <link> ced_typedescription
<b>Skapa klasser <link> ced_createclasses
<b>Bygga klassvolym <link> ced_build
<b>Dokumentation av klasser <link> class docblock
<option> printenable
</topic>
<headerlevel>
<topic>ced_databasestructure
Databasstruktur
<h1>Objekt
I avsnittet Databas struktur ges en beskrivning av hur objekt är uppbyggda. Här finns
anledning att gå lite djupare i det ämnet.
Ett objekt består av ett objektshuvud och en objektskropp. Objekshuvudet innehåller
information om objektets namn, klass och relation till andra objekt. Objektskroppen innehåller
objektets datamängd.
<h2>Objektshuvud
Ett objekt har ett namn på maximalt 31 tecken som finns lagrat i objekthuvudet.
I objektshuvudet finns även en länk till objekts klassbeskrivning. I klassbeskrivningen finns
information som gör att man kan tolka objektets datamängd, hur den är uppdela i olika
attribut och vilken typ de olika attributen har. Vidare finns här även de olika metoder som
kan verka på objektet.
Ett objekt ligger i en trädstruktur och i objektshuvudet finns pekare till närmsta anhöriga:
förälder, föregående syskon, nästa syskon och första barn.
Strukturen på ett objekthuvud är gemensamt för alla olika typer av objekt.
<h2>Objektskropp
Ett objekt kan ha två olika kroppar, en kropp som innehåller den datamänd som behövs i
runtime, dessutom kan ett objekt ha ytterligare en kropp med en datamängd som enbart finns
i utvecklingsmiljön.
<h2>Objektskropp
Ett objekt kan ha två olika kroppar, en kropp som innehåller den datamänd som behövs i
runtime, dessutom kan ett objekt ha ytterligare en kropp med en datamängd som enbart finns
i utvecklingsmiljön.
En kropp är uppdelad i attribut som innehåller data av en viss typ, det kan t ex vara en
Boolean, Float32 eller Int32. Men ett attribut kan även vara en mer komplex datatyp, som en
......@@ -7208,7 +7298,7 @@ objektet, m
GetIpPtr.
<b>SequenceReset
Det är möjligt att använda GRAFCET sekvenser i en komponent. En skillnad från en ordinär
Det är möjligt att använda Grafcet sekvenser i en komponent. En skillnad från en ordinär
sekvens är att resetobjektet ska vara definierat med ett attribut av klass Dv med namnet
'SequenceReset'i huvudobjektet. SubStep kan inte användas if sekvensen.
......@@ -7673,18 +7763,18 @@ Dokumentation av klasser
För $ClassDef och $Attribute objekt finns ett dokumentationsblock, som fylls i från
objektseditorn. Från dokumentationsblocken och klassbeskrivningen genereras dokumentation
för klasserna på xtthjälp och html format.
för klasserna på xtthjälp och html format när klassvolymen byggs.
Dokumentationsblocket för $ClassDef objektet bör innehålla en beskrivning
av klassens funktion och användningsområde, documentationsblocket för $Attribut en beskrivning
av det aktuella attributets funktion.
<option> printdisable
Genererering av Xtt hjälpfiler <link> class generate xtthelp
Generering av html dokumentation <link> class generate html
ClassDef <link> docblock classdef
Attribute <link> docblock attribute
c- och h-filer <link> docblock ccode
Genererering av Xtt hjälpfiler <link> class generate xtthelp
Generering av html dokumentation <link> class generate html
<option> printenable
</topic>
......@@ -8073,91 +8163,370 @@ Path
</chapter>
<chapter>
<topic>opc_intro
OPC
Proview har implementerat OPC XML/DA protokollet för datautbyte med andra typer av
automationenheter. För mer information om OPC, se www.opcfoundation.org.
<topic> dg_tools
Verktyg
<option> printdisable
OPC Server <link> opc_server
OPC Client <link> opc_client
<option> printenable
pwrc <t>Kommando gränssnitt till utvecklingsdatabasen.<link> dg_pwrc
wb_ge <t>Ge editor <link> wb_ge
co_help <t>Hjälp fönster. <link> co_help
pwr_user <t>Command line interface to user database. <link> pwr_user
wb_ldlist <t>Check loadfile versions. <link> wb_ldlist
</topic>
<headerlevel>
<topic>opc_server
OPC XML/DA Server
<topic> dg_pwrc
pwrc
En OPC XML/DA Server är en web service från vilken an OPC XML/DA Client kan hämta information
om ett Proview-system. En opc klient kan t ex visa objektshierarkin, läsa och skriva
attributvärden, och lägga upp prenumerationer på attribut.
Kommando gränssnitt till utvecklingsdatabasen.
Opc servern implementerar även http protokollet och är inte kopplad till en webserver.
Portnummret till opc_server är satt till 80, och URI'n för webservicen på noden 'mynode' blir
<c>pwrc Proview workbench commands
<c>http://mynode
<c>Arguments:
<c> -v 'volume' Load volume 'volume'.
<c> -h Print usage.
Om en webserver är installerad, använder den vanligtvis port 80, och en annan port måste
väljas för opc_server. Om man stället väljer 8080, blir URI'n
<c> Other arguments are treated as a command and passed to the command parser
<c> If a command is given as an argument, the command will be executed and the
<c> program is then terminated.
<c> If no command is given, pwrc will prompt for a command.
<c>http://mynode:8080
<c>Examples:
<c> $ pwrc -v MyVolume
<c> pwrc>
<h1>Browsing
Browsing funktionen i OPC XML/DA stödjer grenar (branches) och punkter (item). En punkt
innehåller ett värde, medan en gren är en hierarkikomponent utan värde. Det finns inte något
stöd för objekt, så ett Proview objekt är implementerat som en gren, och varje attribut är
en punkt under grenen. Även arrayer är implementerade som grenar, med varje element som en
punkt. Om ett element är ett attributobjekt är även detta en gren.
<c> $ pwrc -a show volume
<c> directory Attached Db $DirectoryVolume 254.254.254.253
<c> MyVolume Db $RootVolume 0.1.99.20
<h1>Trådar
Om opc klienten använder HoldTime och WaitTime attributen i SubscriptionPollledRefresh
förfrågan, måste opcservern vara multitrådad, dvs skapa en ny tråd för varje förfrågan. Om
HoldTime och Waittime inte används (som i Proview's opc klient), kan alla förfrågningar
hanteras i en enda tråd, vilket sparar cpu-tid. Multitrådning eller inte, konfigureras i
konfigurationsobjektet för opc servern. Defaultvärdet är 'IfNeeded' som slår på multitrådning
för en klient om HoldTime eller WaitTime upptäcks.
</topic>
<h1>Kient åtkomst
För att få åtkomst till en Proview opc server, måste ip-adressen för klienten konfigureras i
konfigurationsobjektet för opc servern. Här kan man också välja om klienten ska a läs- eller
skriv-rättigheter (ReadOnly resp ReadWrite). ReadOnly tillåter klienten att läsa och
prenumerera på värden, medan ReadWrite även tillåter skrivning av attributvärden.
<topic> co_help
co_help hjälp fönster
<h1>Buffring av prenumerationer
Servern stödjer inte buffring av prenumerationer.
Open a Proview help file. By default the project help file is opened.
<h1>Konfigurering
Opc servern konfigureras med ett Opc_ServerConfig objekt, som placeras i nodhierarkin.
Konfigurationsobjektet medför att en serverprocess (opc_server) startas vid Proview startup.
<c>>co_help
</topic>
</headerlevel>
<c>Usage:
<headerlevel>
<topic> opc_client
OPC XML/DA Client
<c> co_help [-t 'topic'] [-s 'sourcefile'] [-b 'bookmark']
Proveiw's opc klient är implementerad som en extern volym, som monteras i rotvolymens
objektsträd. Under monteringsobjektet visas de grenar och punkter som opc servern innehåller
med speciella opc objekt. Ett Opc_Hier objekt representerar en gren, ett Opc_Int objekt en
punkt med ett heltalsvärde, ett Opc_Boolean objekt en punkt med ett boolskt värde etc.
Om ett punktobjekt öppnas, visas punkvärdet i Value attributet, och en del andra egenskaper
som beskrivning, lowEU, highEU, ingenjörsenhet, lowIR och highIR visas också. När objektet
öppnas startas en prenumeration, och värdet uppdateras kontinuerligt. För heltal- och
flyttalsvärden finns även en objektsbild som visar en kurva på värdet.
<c>Arguments:
Med en opc klient kan man
<c> -t Help topic, default 'index'
<c> -s Source helpfile
<c> -b Bookmark
<c> -l Language, e.g sv_se
<c> -c Open Configuration help
<c> -d Open Designer's Guide
<c> -g Open Ge Reference Manual
<c> -o Open Operator Help
</topic>
- visa grenar och punkter i Xtt, och även visa punkvärden och sätta punktvärden.
- prenumerera på värden och visa dem i en Ge bild.
- hämta upp punktvärden i ett plcprogram, och även skriva punktvärden.
<topic> wb_ge
wb_ge Ge editor
Startar Ge editorn utan att öppna någon databas.
Användbart om man snabbt vill öppna en Ge graph, men inte ska göra några databas
knytningar.
Opc klienten kräver att namn browsing är implementerat i opc servern.
<c>> wb_ge ['pwg-file']
</topic>
<h1>Ge
Ett punkvärde kan visas i en Ge bild genom att använda namnet på punkten i den externa volymen.
Till exempel, om monteringsobjektet för den externa volyment är 'Ext-P1', och det lokala
namnet för punkten är
<topic> pwr_user
pwr_user
pwr_user används för att skapa systemgrupper och användare i användar-databasen.
Konfigureringen sker mha kommandon.
pwr_user startas från kommando-prompten.
<c>> pwr_user
Här beskrivs de olika kommandon som finns för att skapa, modifiera och lista systemgrupper
och användare.
add group <t>Addera en systemgrupp <link> pwr_user add group
add user <t>Addera en användare <link> pwr_user add user
get <t>Hämta en användare <link> pwr_user get
list <t>Lista systemgrupper och användare <link> pwr_user list
load <t>Ladda in senaste sparade databas <link> pwr_user load
modify group <t>Ändra en systemgrupp <link> pwr_user modify group
modify user <t>Ändra en användare <link> pwr_user modify user
remove group <t>Ta bort en systemgrupp <link> pwr_user remove group
remove user <t>Ta bort en användare <link> pwr_user remove user
save <t>Spara <link> pwr_user save
su <t>Logga in som super user <link> pwr_user su
</topic>
<headerlevel>
<topic>pwr_user add
add
add group <link> pwr_user add group
add user <link> pwr_user add user
</topic>
<headerlevel>
<topic> pwr_user add group
add group
Skapa en systemgrupp
<c>pwr_user> add group 'name' [/nouserinherit]
/nouserinherit <t>Attributet UserInherit ska inte vara satt för systemgruppen.
<t>UserInherit är default.
</topic>
<topic> pwr_user add user
add user
Skapa en användare.
pwr_user> add user 'name' /group= /password= [/privilege=]
[/rtread][/rtwrite][/system][/maintenance][/process]
[/instrument][/operator1][/operator2]...[oper10][/devread]
[/devplc][/devconfig][/devclass]
/group <t>Systemgrupp som användaren ska tillhöra.
/password <t>Användarens passerord.
/privilege <t>Privilegier om denna anges anges som en mask, dvs ett heltalsvärde.
/rtread <t>Användaren tilldelas RtRead.
/rtwrite <t>Användaren tilldelas RtWrite.
/system <t>Användaren tilldelas System.
/maintenance <t>Användaren tilldelas Maintenance.
/process <t>Användaren tilldelas Process.
/operator1 <t>Användaren tilldelas Operator1.
...
/operator9 <t>Användaren tilldelas Operator9.
/operator10 <t>Användaren tilldelas Operator10.
/devread <t>Användaren tilldelas DevRead.
/devplc <t>Användaren tilldelas DevPlc.
/devconfig <t>Användaren tilldelas DevConfig.
/devclass <t>Användaren tilldelas DevClass.
</topic>
</headerlevel>
<topic> pwr_user get
get
Hämtar en användare med en algorithm som används i runtime.
pwr_user> get 'username' /group= /password=
</topic>
<topic> pwr_user list
list
Lista systemgrupper och användare.
pwr_user> list
</topic>
<topic> pwr_user load
load
Laddar in den senaste sparade databasen och raderar eventuella ändringar sen senaste save.
</topic>
<topic> pwr_user modify
modify
modify group <link> pwr_user modify group
modify user <link> pwr_user modify user
</topic>
<headerlevel>
<topic> pwr_user modify group
modify group
Ändra data för en systemgrupp.
<c>pwr_user> modify group 'name' /[no]userinherit
/userinherit <t>Sätter attributet UserInherit som anger att systemgruppen ska
<t>ärva användare från från sin förälder i systemgrupps-hierakin.
<t>Negeras med /nouserinherit
</topic>
<topic> pwr_user modify user
modify user
Ändra data för en användare.
<c>pwr_user> modify user 'name' /group= [/password=][/privilege=]
<c> [/rtread][/rtwrite][/system][/maintenance][/process]
<c> [/instrument][/operator1][/operator2]...[oper10][/devread]
<c> [/devplc][/devconfig][/devclass]
/group <t>Systemgrupp som användaren tillhör.
/password <t>Användarens passerord.
/privilege <t>Privilegie om denna anges anges som en mask, dvs ett heltalsvärde.
/rtread <t>Användaren tilldelas RtRead.
/rtwrite <t>Användaren tilldelas RtWrite.
/system <t>Användaren tilldelas System.
/maintenance <t>Användaren tilldelas Maintenance.
/process <t>Användaren tilldelas Process.
/operator1 <t>Användaren tilldelas Operator1.
...
/operator9 <t>Användaren tilldelas Operator9.
/oper10 <t>Användaren tilldelas Operator10.
/devread <t>Användaren tilldelas DevRead.
/devplc <t>Användaren tilldelas DevPlc.
/devconfig <t>Användaren tilldelas DevConfig.
/devclass <t>Användaren tilldelas DevClass.
</topic>
</headerlevel>
<topic> pwr_user remove
remove
remove group <link> pwr_user remove group
remove user <link> pwr_user remove user
</topic>
<headerlevel>
<topic> pwr_user remove group
remove group
Ta bort en systemgrupp.
<c>pwr_user> remove group 'name'
</topic>
<topic> pwr_user remove user
remove user
Ta bort en användare.
<c>pwr_user> remove user 'name' /group=
</topic>
</headerlevel>
<topic> pwr_user save
save
Spara.
<c>pwr_user> save
</topic>
<topic> pwr_user su
su
Logga in som super-user. Som super-user kan man se se password för användare vid listning.
su kräver password.
<c>pwr_user> su 'password'
</topic>
</headerlevel>
<topic> wb_ldlist
wb_ldlist
Visar version för volymer i dbs-filer.
Används för att reda ut version mismatch.
> wb_ldlist <dbs-file>
<b>Exempel
<c>wb_ldlist $pwrp_load/volpwrdemo.dbs
<c>Volume VolPwrDemo 27-MAR-2014 11:06:48.67 0.254.254.200 RootVolume
<c>VolRef VolPwrDemo 27-MAR-2014 11:06:48.67 0.254.254.200 RootVolume
<c>VolRef pwrs 14-FEB-2014 16:57:21.19 0.0.0.1 ClassVolume
<c>VolRef pwrb 14-FEB-2014 16:57:24.82 0.0.0.2 ClassVolume
<c>VolRef BaseComponent 14-FEB-2014 16:57:52.68 0.0.0.10 ClassVolume
<c>VolRef OtherManufacturer 14-FEB-2014 16:58:22.73 0.0.250.1 ClassVolume
<c>VolRef ABB 14-FEB-2014 16:58:10.44 0.0.250.2 ClassVolume
<c>VolRef Profibus 14-FEB-2014 16:57:34.40 0.0.250.7 ClassVolume
<c>VolRef Inor 14-FEB-2014 16:58:16.18 0.0.250.8 ClassVolume
<c>VolRef OtherIO 14-FEB-2014 16:57:55.31 0.0.250.10 ClassVolume
</topic>
</headerlevel>
</chapter>
<chapter>
<topic>opc_intro
OPC
Proview har implementerat OPC XML/DA protokollet för datautbyte med andra typer av
automationenheter. För mer information om OPC, se www.opcfoundation.org.
<option> printdisable
OPC Server <link> opc_server
OPC Client <link> opc_client
<option> printenable
</topic>
<headerlevel>
<topic>opc_server
OPC XML/DA Server
En OPC XML/DA Server är en web service från vilken an OPC XML/DA Client kan hämta information
om ett Proview-system. En opc klient kan t ex visa objektshierarkin, läsa och skriva
attributvärden, och lägga upp prenumerationer på attribut.
Opc servern implementerar även http protokollet och är inte kopplad till en webserver.
Portnummret till opc_server är satt till 80, och URI'n för webservicen på noden 'mynode' blir
<c>http://mynode
Om en webserver är installerad, använder den vanligtvis port 80, och en annan port måste
väljas för opc_server. Om man stället väljer 8080, blir URI'n
<c>http://mynode:8080
<h1>Browsing
Browsing funktionen i OPC XML/DA stödjer grenar (branches) och punkter (item). En punkt
innehåller ett värde, medan en gren är en hierarkikomponent utan värde. Det finns inte något
stöd för objekt, så ett Proview objekt är implementerat som en gren, och varje attribut är
en punkt under grenen. Även arrayer är implementerade som grenar, med varje element som en
punkt. Om ett element är ett attributobjekt är även detta en gren.
<h1>Trådar
Om opc klienten använder HoldTime och WaitTime attributen i SubscriptionPollledRefresh
förfrågan, måste opcservern vara multitrådad, dvs skapa en ny tråd för varje förfrågan. Om
HoldTime och Waittime inte används (som i Proview's opc klient), kan alla förfrågningar
hanteras i en enda tråd, vilket sparar cpu-tid. Multitrådning eller inte, konfigureras i
konfigurationsobjektet för opc servern. Defaultvärdet är 'IfNeeded' som slår på multitrådning
för en klient om HoldTime eller WaitTime upptäcks.
<h1>Kient åtkomst
För att få åtkomst till en Proview opc server, måste ip-adressen för klienten konfigureras i
konfigurationsobjektet för opc servern. Här kan man också välja om klienten ska a läs- eller
skriv-rättigheter (ReadOnly resp ReadWrite). ReadOnly tillåter klienten att läsa och
prenumerera på värden, medan ReadWrite även tillåter skrivning av attributvärden.
<h1>Buffring av prenumerationer
Servern stödjer inte buffring av prenumerationer.
<h1>Konfigurering
Opc servern konfigureras med ett Opc_ServerConfig objekt, som placeras i nodhierarkin.
Konfigurationsobjektet medför att en serverprocess (opc_server) startas vid Proview startup.
</topic>
</headerlevel>
<headerlevel>
<topic> opc_client
OPC XML/DA Client
Proveiw's opc klient är implementerad som en extern volym, som monteras i rotvolymens
objektsträd. Under monteringsobjektet visas de grenar och punkter som opc servern innehåller
med speciella opc objekt. Ett Opc_Hier objekt representerar en gren, ett Opc_Int objekt en
punkt med ett heltalsvärde, ett Opc_Boolean objekt en punkt med ett boolskt värde etc.
Om ett punktobjekt öppnas, visas punkvärdet i Value attributet, och en del andra egenskaper
som beskrivning, lowEU, highEU, ingenjörsenhet, lowIR och highIR visas också. När objektet
öppnas startas en prenumeration, och värdet uppdateras kontinuerligt. För heltal- och
flyttalsvärden finns även en objektsbild som visar en kurva på värdet.
Med en opc klient kan man
- visa grenar och punkter i Xtt, och även visa punkvärden och sätta punktvärden.
- prenumerera på värden och visa dem i en Ge bild.
- hämta upp punktvärden i ett plcprogram, och även skriva punktvärden.
Opc klienten kräver att namn browsing är implementerat i opc servern.
<h1>Ge
Ett punkvärde kan visas i en Ge bild genom att använda namnet på punkten i den externa volymen.
Till exempel, om monteringsobjektet för den externa volyment är 'Ext-P1', och det lokala
namnet för punkten är
<c> /P1/Signals/Ai22
......@@ -8230,7 +8599,7 @@ d
<chapter>
<TOPIC> help command
Wtt kommandon
Kommandon
<b>build <t>Bygg nod, volym eller objekt <LINK> build
<b>check classes <t>Kontrollera om några klasser behöver updateras <LINK> check classes
......@@ -9289,11 +9658,15 @@ symbolfile <LINK> configurator_refman,symbol_file
<TOPIC> script
Wtt script
execute script <LINK> execute script
datatypes <LINK> datatypes
datatype conversions <LINK> datatype conversions
variable declarations <LINK> variable declarations
operators <LINK> operators
Exekvera ett script <LINK> execute script
<h2>Datatyper och declarationer
Datatyper <LINK> datatypes
Datatyps konvertering <LINK> datatype conversions
Variabel deklarationer <LINK> variable declarations
Operatorer <LINK> operators
<h2>Uttryck
main-endmain <LINK> main-endmain
function-endfunction <LINK> function-endfunction
if-else-endif <LINK> if-else-endif
......@@ -9303,22 +9676,35 @@ break <LINK> break
continue <LINK> continue
goto <LINK> goto
include <LINK> include
<h2>In och utmatnings funktioner
ask() <LINK> ask()
printf() <LINK> printf()
say() <LINK> say()
scanf() <LINK> scanf()
fprintf() <LINK> fprintf()
<h2>Filhanterings funktioner
fclose() <LINK> fclose()
felement() <LINK> felement()
fgets() <LINK> fgets()
fopen() <LINK> fopen()
fclose() <LINK> fclose()
exit() <LINK> exit()
verify() <LINK> verify()
time() <LINK> time()
fprintf() <LINK> fprintf()
fscanf() <LINK> fscanf()
translate_filename() <LINK> translate_filename()
<h2>Sträng funktioner
edit() <LINK> edit()
extract() <LINK> extract()
element() <LINK> element()
extract() <LINK> extract()
sprintf() <LINK> sprintf()
strchr() <LINK> strchr()
strrchr() <LINK> strrchr()
strlen() <LINK> strlen()
strstr() <LINK> strstr()
toupper() <LINK> toupper()
tolower() <LINK> tolower()
translate_filename() <LINK> translate_filename()
wtt-commands <LINK> wtt-commands
<h2>Databas funktioner
GetAttribute() <LINK> getattribute()
GetChild() <LINK> getchild()
GetParent() <LINK> getparent()
......@@ -9334,6 +9720,14 @@ GetRootList() <LINK> getrootlist()
GetVolumeClass() <LINK> getvolumeclass()
GetVolumeList() <LINK> getvolumelist()
SetAttribute() <LINK> setattribute()
<h2>System funktioner
exit() <LINK> exit()
system() <LINK> system()
time() <LINK> time()
verify() <LINK> verify()
<h2>Diverse funktioner
GetProjectName() <LINK> getprojectname()
CheckSystemGroup() <LINK> checksystemgroup()
CutObjectName() <LINK> cutobjectname()
......@@ -9352,9 +9746,15 @@ PromptDialog() <LINK> promptdialog()
OpenGraph() <LINK> opengraph()
CloseGraph() <LINK> closegraph()
SetSubwindow() <LINK> setsubwindow()
GetIoDeviceData() <LINK> getiodevicedata()
SetIoDeviceData() <LINK> setiodevicedata()
pwr_get_config() <LINK> pwr_get_config()
get_node_name() <LINK> get_node_name()
</TOPIC>
<h2>wtt-kommandon
wtt-kommandon <LINK> wtt-commands
</TOPIC>
<TOPIC> execute script
Exekvera ett script
......@@ -9463,6 +9863,21 @@ Operator <t>Beskrivning <t>Datatyper
|= <t>logisk eller och tilldelning <t>int
</TOPIC>
<TOPIC> sc_statements <style> function
Script uttryck
main-endmain <t>Main funktion.<LINK> main-endmain
function-endfunction <t>Funktions deklaration.<LINK> function-endfunction
if-else-endif <t>Villkorlig exekvering.<LINK> if-else-endif
while-endwhile <t>While loop.<LINK> while-endwhile
for-endfor <t>For loop.<LINK> for-endfor
break <t>Avsluta while eller for loop.<LINK> break
continue <t>Fortsätt while eller for loop.<LINK> continue
goto <t>Hoppa till label.<LINK> goto
include <t>Inkludera script fil.<LINK> include
</TOPIC>
<headerlevel>
<TOPIC> main-endmain <style> function
main-endmain
......@@ -9615,6 +10030,44 @@ En script include-fil xom inneh
<c>#include <my_functions>
</TOPIC>
</headerlevel>
<TOPIC> sc_input_output_functions <style> function
In och utmatnings funktioner
<b>Funktion <t>Beskrivning
ask <t>Skriv en fråga och läs ett svar.<link> ask()
printf <t>Formaterad utskrift. <link> printf()
say <t>Skriv en text. <link> say()
scanf <t>Formaterad läsning. <link> scanf()
</TOPIC>
<headerlevel>
<TOPIC> ask() <style> function
ask()
int ask( string question, (arbitrary type) reply)
<b>Beskrivning
Promptar för inmatning med den angivna strängen.
Returnerar antal lästa element, 1 or 0.
<b>Arguments
string <t>question <t>Prompt.
godtycklig typ <t>reply <t>Inmatat svar. Kan vara int,
<t> <t>float eller string.
<b>Exempel
<c> string reply;
<c> ask( "Do you want to continue? [y/n] ", reply);
<c> if ( reply != "y")
<c> exit();
<c> endif
</TOPIC>
<TOPIC> printf() <style> function
printf()
......@@ -9642,6 +10095,23 @@ godtycklig typ <t>arg2 <t>V
<c> printf( "a = %d och str = %s", a, str);
</TOPIC>
<TOPIC> say() <style> function
say()
int say( string text)
<b>Beskrivning
Skriver ut en sträng.
<b>Argument
string <t>text <t>Text att skriva ut.
<b>Exempel
<c> say( "Three quarks for Muster Mark!");
</TOPIC>
<TOPIC> scanf() <style> function
scanf()
......@@ -9663,36 +10133,71 @@ godtycklig typ <t>arg1 <t>V
<c> scanf( "%d", i);
</TOPIC>
<TOPIC> fprintf() <style> function
fprintf()
</headerlevel>
int fprintf( int file, string format [, (godtycklig typ) arg1,
(godtycklig typ) arg2])
<TOPIC> sc_file_handling_functions <style> function
Filhanterings funktioner
<b>Funktion <t>Beskrivning
fclose <t>Stäng en fil. <link> fclose()
felement <t>Extrahera ett element från senaste lästa rad. <link> felement()
fgets <t>Läs en rad från en fil. <link> fgets()
fopen <t>Öppna en fil. <link> fopen()
fprintf <t>Formaterad utskrift till fil. <link> fprintf()
fscanf <t>Formaterad läsning från fil. <link> fscanf()
translate_filename <t>Översätt omgivnings-variabler i ett filnamn. <link> translate_filename()
</TOPIC>
<headerlevel>
<TOPIC> fclose() <style> function
fclose()
int fclose( int file)
<b>Beskrivning
Formaterad utskrift på fil. C-syntax. Format argument och inget, ett eller två
värde argument.
Returnerarn antal utskrivna tecken.
Stänger en öppnad fil.
<b>Argument
int <t>file <t>Fil id returnerat av fopen.
string <t>format <t>Format.
godtycklig typ <t>arg1 <t>Värde argument. Valfritt. Kan vara int,
<t> <t>float eller string.
godtycklig typ <t>arg2 <t>Värde argument. Valfritt. Kan vara int,
<t> <t>float eller string.
int <t>file <t>fil-id returnerad av fopen.
<b>Exempel
<c> int outfile;
<c> outfile = fopen( "my_file.txt", "w");
<c> if (!outfile)
<c> exit();
<c> fprintf( outfile, "Some text");
<c> fprintf( outfile, "a = %d", a);
<c> fclose( outfile);
<c> int infile;
<c> infile = fopen("some_file.txt","r");
<c> ...
<c> fclose( infile);
</TOPIC>
<TOPIC> felement() <style> function
felement()
string felement( int file int number, string delimiter, string str)
<b>Beskrivning
Extraherar ett element från en sträng av element läst från en file med
fgets() funktionen. felement() kan användas istället för element() när den
lästa strängen är längre än sträng-storleken 256. felement() kan hantera rader
upp till 1023 tecken.
<b>Argument
int <t>number <t>elementets nummer.
string <t>delimiter <t>avgränsnings tecken.
<b>Exempel
<c> string elem1;
<c> int file;
<c> string line;
<c> file = fopen( "my_file.txt", "r");
<c> while( fgets( line, file))
<c> elem1 = felement( 1, " ");
<c> endwhile
</TOPIC>
<TOPIC> fgets() <style> function
......@@ -9746,139 +10251,324 @@ string <t>mode <t>Access mod
<c> fclose( outfile);
</TOPIC>
<TOPIC> fclose() <style> function
fclose()
<TOPIC> fprintf() <style> function
fprintf()
int fclose( int file)
int fprintf( int file, string format [, (godtycklig typ) arg1,
(godtycklig typ) arg2])
<b>Beskrivning
Stänger en öppnad fil.
Formaterad utskrift på fil. C-syntax. Format argument och inget, ett eller två
värde argument.
Returnerarn antal utskrivna tecken.
<b>Argument
int <t>file <t>fil-id returnerad av fopen.
int <t>file <t>Fil id returnerat av fopen.
string <t>format <t>Format.
godtycklig typ <t>arg1 <t>Värde argument. Valfritt. Kan vara int,
<t> <t>float eller string.
godtycklig typ <t>arg2 <t>Värde argument. Valfritt. Kan vara int,
<t> <t>float eller string.
<b>Exempel
<c> int infile;
<c> infile = fopen("some_file.txt","r");
<c> ...
<c> fclose( infile);
<c> int outfile;
<c> outfile = fopen( "my_file.txt", "w");
<c> if (!outfile)
<c> exit();
<c> fprintf( outfile, "Some text");
<c> fprintf( outfile, "a = %d", a);
<c> fclose( outfile);
</TOPIC>
<TOPIC> exit() <style> function
exit()
<TOPIC> fscanf() <style> function
fscanf()
int exit()
int fscanf( int file, string format, (godtycklig typ) arg1)
<b>Beskrivning
Avslutar exekveringen av en fil.
Formaterad läsning från fil. C-syntax.
Returnerar antal inlästa tecken.
<b>Argument
int <t>file <t>Fil id.
string <t>format <t>Format.
godtycklig typ <t>arg1 <t>Värde argument. Returnerat. Kan vara int,
<t> <t>float eller string.
<b>Exempel
<c> exit();
<c> int file;
<c> int i;
<c> file = fopen( "my_file.txt", "r");
<c> if (file)
<c> fscanf( file, "%d", i);
<c> fclose( file);
<c> endif
</TOPIC>
<TOPIC> verify() <style> function
verify()
<TOPIC> translate_filename() <style> function
translate_filename()
int verify( [int mode])
string translate_filename( string fname)
<b>Beskrivning
Sätter eller visar verifikatione mod. Om verifiering är till, visas alla
exekverade rader på skärmen.
Returnerar nuvarande verifikations mod.
Byter ut omgivnings variabler i ett filnamn.
<b>Argument
string <t>fname <t>Ett filnamn.
<b>Returns
string <t><t>Sträng med utbytta omgivningsvariabler.
<b>Exempel
<c> string fname1 = "$pwrp_db/a.wb_load";
<c> string fname2;
<c> fname2 = translate_filename( fname1);
</TOPIC>
</headerlevel>
<TOPIC> string_functions <style> function
Sträng funktioner
<b>Funktion <t>Beskrivning
edit <t>Ta bort överfödiga mellanslag och tab. <link> edit()
element <t>Extrahera ett element från en sträng. <link> element()
extract <t>Extrahera en delsträng från en sträng. <link> extract()
sprintf <t>Formaterad utskrift till en sträng. <link> sprintf()
strchr <t>Returnera första förekomsten av ett tecken i en sträng. <link> strchr()
strrchr <t>Returnera sista förekomsten av ett tecken i en sträng. <link> strrchr()
strlen <t>Beräkna längden på en sträng. <link> strlen()
strstr <t>Returnera första förekomsten av en delsträng i en sträng. <link> strstr()
tolower <t>Konvertera till små bokstäver. <link> tolower()
toupper <t>Konveretra till stora bokstäver. <link> toupper()
</TOPIC>
<headerlevel>
<TOPIC> edit() <style> function
edit()
string edit( string str)
<b>Beskrivning
Tar bort inledande och avslutande blanktecken och tabbar, och ersätter flera
tabbar och blanktecken med ett blanktecken.
Returnerar den editerade stängen.
<b>Argument
string <t>str <t>sträng som ska editeras.
<b>Exempel
<c> collapsed_str = edit(str);
</TOPIC>
<TOPIC> element() <style> function
element()
string element( int number, string delimiter, string str)
<b>Beskrivning
Extraherar ett element från en sträng av element.
Returnerar det extraherade elementet.
<b>Argument
int <t>number <t>elementets nummer.
string <t>delimiter <t>avgränsnings tecken.
string <t>str <t>sträng med element.
<b>Exempel
<c> string str = "mary, lisa, anna, john";
<c> string elem1;
<c> elem1 = elment( 1, ",", str);
</TOPIC>
<TOPIC> extract() <style> function
extract()
string extract( int start, int length, string str)
<b>Beskrivning
Extraherar de angivna tecknen från angiven sträng.
Returnerar de extraherade tecknen som en sträng.
<b>Argument
int <t>start <t>start positionen för första tecknet.
<t><t>Första tecknet har position 1.
int <t>length <t>antalet tecken som ska extraheras.
string <t>str <t>sträng som tecknen ska extraheras från.
<b>Exempel
<c> extracted_str = extract( 5, 7, str);
</TOPIC>
<TOPIC> sprintf() <style> function
sprintf()
int sprintf( string str, string format [, (arbitrary type) arg1, (arbitrary type) arg2])
<b>Beskrivning
Formaterad utskrift. C-syntax. Format argument och inget, ett eller två
värde argument.
Returnerar antal utskrivna tecken.
<b>Argument
string <t>str <t>Sträng att skriva till.
string <t>format <t>Format.
godtycklig typ <t>arg1 <t>Värde argument. Valfritt, Kan vara int,
<t> <t>float eller string.
godtycklig typ <t>arg2 <t>Värde argument. Valfritt. Kan vara int,
<t> <t>float eller string.
<b>Exempel
<c> string str;
<c> int items;
<c> sprintf( str, "Number of items: %d", items);
</TOPIC>
<TOPIC> strchr() <style> function
strchr()
int strchr( string str, string c)
<b>Beskrivning
Returnerar första förekomsten av ett tecken in en sträng.
<b>Argument
int <t>mode <t>verifikaion till (1) eller från (0). Valfri.
string <t>str <t>Sträng att söka i.
string <t>c <t>Tecken att söka efter.
<b>Returns
int <t><t>Index för första förekomsen av ett tecken.
<t><t>Första tecknet har index 1. Returnerar
<t><t>noll om tecknet inte hittas.
<b>Exempel
<c> verify(1);
<c> string str = "index.html";
<c> int idx;
<c> idx = strchr( str, ".");
</TOPIC>
<TOPIC> time() <style> function
time()
<TOPIC> strrchr() <style> function
strrchr()
string time()
int strrchr( string str, string c)
<b>Beskrivning
Returnerar nuvarande tid i strängformat.
Returnerar sista förekomsten av ett tecken in en sträng.
<b>Argument
string <t>str <t>Sträng att söka i.
string <t>c <t>Tecken att söka efter.
<b>Returns
int <t><t>Index för den sista förekomsten av tecknet.
<t><t>Första tecknet har index 1. Returnerar
<t><t>noll om tecknet inte hittas.
<b>Exempel
<c> string t;
<c> t = time();
<c> string str = "/usr/local/pwrrt";
<c> int idx;
<c> idx = strrchr( str, "/");
</TOPIC>
<TOPIC> edit() <style> function
edit()
<TOPIC> strlen() <style> function
strlen()
string edit( string str)
int strlen( string str, string c)
<b>Beskrivning
Tar bort inledande och avslutande blanktecken och tabbar, och ersätter flera
tabbar och blanktecken med ett blanktecken.
Returnerar den editerade stängen.
Beräknar längden av en sträng.
<b>Argument
string <t>str <t>sträng som ska editeras.
string <t>str <t>Sträng att beräkna längden för.
<b>Returns
int <t><t>Strängens längd.
<b>Exempel
<c> collapsed_str = edit(str);
<c> string str = "/usr/local/pwrrt";
<c> int len;
<c> len = strlen( str);
</TOPIC>
<TOPIC> extract() <style> function
extract()
<TOPIC> strstr() <style> function
strchr()
string extract( int start, int length, string str)
int strstr( string str, string substr)
<b>Beskrivning
Extraherar de angivna tecknen från angiven sträng.
Returnerar de extraherade tecknen som en sträng.
Returnar första förekomsten av en delsträng i en sträng.
<b>Argument
<b>Arguments
int <t>start <t>start positionen för första tecknet.
<t><t>Första tecknet har position 1.
int <t>length <t>antalet tecken som ska extraheras.
string <t>str <t>sträng som tecknen ska extraheras från.
string <t>str <t>Sträng att söka i.
string <t>substr <t>Delsträng att söka efter.
<b>Returns
int <t><t>Index för första förekomsten av delsträngen.
<t><t>Första tecknet har index 1. Returnerar
<t><t>noll om delsträngen inte hittas.
<b>Exempel
<c> extracted_str = extract( 5, 7, str);
<c> string str = "index.html";
<c> int idx;
<c> idx = strstr( str, ".html");
</TOPIC>
<TOPIC> element() <style> function
element()
<TOPIC> tolower() <style> function
tolower()
string element( int number, string delimiter, string str)
string tolower( string str)
<b>Beskrivning
Extraherar ett element från et sträng av element.
Returnerar det extraherade elementet.
Konverterar en sträng till små bokstäver.
<b>Argument
int <t>number <t>elementets nummer.
string <t>delimiter <t>avgränsnings tecken.
string <t>str <t>sträng med element.
string <t>str <t>sträng som ska konverteras.
<b>Returns
string <t><t>sträng med små bokstäver.
<b>Exempel
<c> string str = "mary, lisa, anna, john";
<c> string elem1;
<c> elem1 = elment( 1, ",", str);
<c> string str1 = "Buster Wilson";
<c> string str2;
<c> str2 = tolower( str);
</TOPIC>
<TOPIC> toupper() <style> function
......@@ -9904,81 +10594,116 @@ string <t><t>str
<c> str2 = toupper( str);
</TOPIC>
<TOPIC> tolower() <style> function
toupper()
</headerlevel>
string tolower( string str)
<TOPIC> system_functions <style> function
System funktioner
<b>Beskrivning
<b>Funktion <t>Beskrivning
exit <t>Avsluta scriptet. <link> exit()
system <t>Exekvera ett shell kommando. <link> system()
time <t>Hämta systemtiden. <link> time()
verify <t>Skriv ut exekverade rader. <link> verify()
</TOPIC>
Konverterar en sträng till små bokstäver.
<headerlevel>
<TOPIC> exit() <style> function
exit()
<b>Argument
int exit()
string <t>str <t>sträng som ska konverteras.
<b>Beskrivning
<b>Returns
string <t><t>sträng med små bokstäver.
Avslutar exekveringen av en fil.
<b>Exempel
<c> string str1 = "Buster Wilson";
<c> string str2;
<c> str2 = tolower( str);
<c> exit();
</TOPIC>
<TOPIC> translate_filename() <style> function
translate_filename()
<TOPIC> system() <style> function
system()
string translate_filename( string fname)
int system( string cmd)
<b>Beskrivning
Byter ut omgivnings variabler i ett filnamn.
Exekvera ett shell kommando.
<b>Argument
string <t>fname <t>A filnamn.
string <t>cmd <t>Shell kommando att exekvera.
<b>Returns
string <t><t>Sträng med utbytta omgivningsvariabler.
int <t><t>Returvärdet är -1 vid fel eller annars returstatus
<t><t>för kommandot.
<b>Exempel
<c> string fname1 = "$pwrp_db/a.wb_load";
<c> string fname2;
<c> fname2 = translate_filename( fname1);
<c> string cmd;
<c> cmd = "firefox http://www.proview.se";
<c> system( cmd);
</TOPIC>
<TOPIC> wtt-commands <style> function
Wtt kommandon
<TOPIC> time() <style> function
time()
Alla wtt kommandon finns tillgängliga i script koden. En wtt-kommando rad
ska INTE avslutas med semikolon. Variabler kan substitueras i kommandot
genom add omges av apostrofer.
string time()
<b>Beskrivning
Returnerar nuvarande tid i strängformat.
<b>Exempel
<c> string name = "PUMP-VALVE-Open";
<c> string value = "The valve is open";
<c> set attribute/name='name'/attr="Description"/value='value'
<c> string t;
<c> t = time();
</TOPIC>
<TOPIC> verify() <style> function
verify()
int verify( [int mode])
<b>Beskrivning
Sätter eller visar verifikatione mod. Om verifiering är till, visas alla
exekverade rader på skärmen.
Returnerar nuvarande verifikations mod.
<b>Argument
int <t>mode <t>verifikaion till (1) eller från (0). Valfri.
<b>Exempel
<c> string name;
<c> string parname;
<c> int j;
<c> int i;
<c> for ( i = 0; i < 3; i++)
<c> parname = "vkv-test-obj" + (i+1);
<c> create obj/name='parname'
<c> for ( j = 0; j < 3; j++)
<c> name = parname + "-obj" + (j+1);
<c> create obj/name='name'
<c> endfor
<c> endfor
<c> verify(1);
</TOPIC>
</headerlevel>
<TOPIC> database_functions <style> function
Databas funktioner
<b>Funktion <t>Beskrivning
GetAttribute() <t>Hämta värde för ett attribut. <LINK> getattribute()
GetChild() <t>Hämta barn till ett objekt. <LINK> getchild()
GetParent() <t>Hämta föräder till ett objekt. <LINK> getparent()
GetNextSibling()<t>Hämta syskon för ett objekt. <LINK> getnextsibling()
GetNextVolume() <t>Hämta nästa volym. <LINK> getnextvolume()
GetClassList() <t>Hämta första instansen av en klass. <LINK> getclasslist()
GetNextObject() <t>Hämta nästa instans av en klass. <LINK> getnextobject()
GetClassListAttrRef() <t>Hämta första instansen av en klass, attribut-object inkluderade. <LINK> getclasslistattrref()
GetNextAttrRef() <t>Hämta nästa instans av en klass, attribut-objekt inkluderade. <LINK> getnextattrref()
GetObjectClass() <t>Hämta klassen för ett objekt. <LINK> getobjectclass()
GetNodeObject() <t>Hämta nod-objektet. <LINK> getnodeobject()
GetRootList() <t>Hämta första objektet i rot-listan. <LINK> getrootlist()
GetVolumeClass() <t>Hämta klassen för en volym. <LINK> getvolumeclass()
GetVolumeList() <t>Hämta första volymen. <LINK> getvolumelist()
SetAttribute() <t>Sätt värde på ett attribut. <LINK> setattribute()
</TOPIC>
<headerlevel>
<TOPIC> getattribute() <style> function
GetAttribute()
......@@ -10087,6 +10812,22 @@ string <t>name <t>objektets namn.
<c> MessageError("No objects found");
</TOPIC>
<TOPIC> getnextvolume() <style> function
GetNextVolume()
string GetNextVolume( string name)
<b>Beskrivning
Hämta nästa volym. Den första volymen hämtas med GetVolumeList().
Returnerar namnet på volymen. Om det inte finns någon nästa volym,
returneras en null-sträng.
Argument
string name volymens hamn.
</TOPIC>
<TOPIC> getclasslist() <style> function
GetClassList()
......@@ -10245,22 +10986,6 @@ GetNextSibling().
<c> endwhile
</TOPIC>
<TOPIC> getnextvolume() <style> function
GetNextVolume()
string GetNextVolume( string name)
<b>Beskrivning
Hämta nästa volym. Den första volymen hämtas med GetVolumeList().
Returnerar namnet på volymen. Om det inte finns någon nästa volym,
returneras en null-sträng.
Argument
string name volymens hamn.
</TOPIC>
<TOPIC> getvolumeclass() <style> function
GetVolumeClass()
......@@ -10309,7 +11034,7 @@ SetAttribute()
int SetAttribute( string name, (godtycklig typ) value)
<b>Description
<b>Beskrivning
Sätt värde på ett attribut.
Attributet specificeras med fullt objekts och attributnamn.
......@@ -10324,7 +11049,37 @@ godtycklig typ value attributets v
<c> SetAttribute( "Pump-V1-Switch.Description", "Valve switch open");
</TOPIC>
</headerlevel>
<TOPIC> misc_functions <style> function
Diverse funktioner
<b>Funktion <t>Beskrivning
GetProjectName() <t>Hämta projektnamnet. <LINK> getprojectname()
CheckSystemGroup() <t>Kontrollera att en systemgrupp existerar. <LINK> checksystemgroup()
CutObjectName() <t>Klipp av ett objektsnamn. <LINK> cutobjectname()
MessageError() <t>Skriv ett felmeddelande. <LINK> messageerror()
MessageInfo() <t>Skriv ett informationsmeddelande. <LINK> messageinfo()
GetCurrentText() <LINK> getcurrenttext()
GetCurrentObject() <LINK> getcurrentobject()
GetCurrentVolume() <LINK> getcurrentvolume()
IsW1() <LINK> isw1()
IsW2() <LINK> isw2()
EditMode() <LINK> editmode()
MessageDialog() <LINK> messagedialog()
ConfirmDialog() <LINK> confirmdialog()
ContinueDialog() <LINK> continuedialog()
PromptDialog() <LINK> promptdialog()
OpenGraph() <LINK> opengraph()
CloseGraph() <LINK> closegraph()
SetSubwindow() <LINK> setsubwindow()
GetIoDeviceData() <LINK> getiodevicedata()
SetIoDeviceData() <LINK> setiodevicedata()
pwr_get_config() <LINK> pwr_get_config()
get_node_name() <LINK> get_node_name()
</TOPIC>
<headerlevel>
<TOPIC> getprojectname() <style> function
GetProjectName()
......@@ -10681,6 +11436,110 @@ int <t>modal <t>Modal mod.
<c> SetSubwindow( "pwr_wizard_frame", "Window1", "MyGraph", 1);
</TOPIC>
<TOPIC> getiodevicedata() <style> function
GetIoDeviceData()
int GetIoDeviceData( string object, string parameter, string value)
<b>Beskrivning
Hämta data från IO konfigurationen.
Returnerar status för operatione,. udda vid framgång, jämn vid fel.
Kommandot använder metoder och måste exekveras i pwrs. Det fungerar inte
i pwrc.
De supportade parametrarna för Profinet enheter är
NetworkSettings-DeviceName
NetworkSettings-IP Address
NetworkSettings-Subnet Mask
NetworkSettings-MAC Address
NetworkSettings-SendClock
NetworkSettings-ReductionRatio
NetworkSettings-Phase
NetworkSettings-API
<b>Argument
string <t>object <t>Namn på device objekt.
string <t>parameter <t>Parameter namn för data.
string <t>value <t>Returnerat parametervärde.
<b>Exempel
<c> sts = SetIoDeviceData( "Nodes-MyNode-PN-D1", "NetworkSettings-DeviceName", "ET200M-D1");
</TOPIC>
<TOPIC> setiodevicedata() <style> function
SetIoDeviceData()
int SetIoDeviceData( string object, string parameter, string value)
<b>Beskrivning
Sätt data i IO konfigurationen.
Returnerar status för operationen, udda för framgång, jämn för fel.
Kommandot använder metoder och måste exekveras i pwrs. Det fungerar inte
i pwrc.
De supportade parametrarna för Profinet enheter är
NetworkSettings-DeviceName
NetworkSettings-IP Address
NetworkSettings-Subnet Mask
NetworkSettings-MAC Address
NetworkSettings-SendClock
NetworkSettings-ReductionRatio
NetworkSettings-Phase
NetworkSettings-API
<b>Argument
string <t>object <t>Namn på device objekt.
string <t>parameter <t>Parameter namn för data.
string <t>value <t>Värde att sätta.
<b>Exempel
<c> sts = SetIoDeviceData( "Nodes-MyNode-PN-D1", "NetworkSettings-DeviceName", "ET200M-D1");
</TOPIC>
</headerlevel>
<TOPIC> wtt-commands <style> function
Wtt kommandon
Alla wtt kommandon finns tillgängliga i script koden. En wtt-kommando rad
ska INTE avslutas med semikolon. Variabler kan substitueras i kommandot
genom add omges av apostrofer.
<b>Exempel
<c> string name = "PUMP-VALVE-Open";
<c> string value = "The valve is open";
<c> set attribute/name='name'/attr="Description"/value='value'
<b>Exempel
<c> string name;
<c> string parname;
<c> int j;
<c> int i;
<c> for ( i = 0; i < 3; i++)
<c> parname = "vkv-test-obj" + (i+1);
<c> create obj/name='parname'
<c> for ( j = 0; j < 3; j++)
<c> name = parname + "-obj" + (j+1);
<c> create obj/name='name'
<c> endfor
<c> endfor
</TOPIC>
</chapter>
......
......@@ -4698,11 +4698,22 @@ create <link>gecmd_create
<t>create rectangle <link>gecmd_create_rect
<t>create text <link>gecmd_create_text
<t>create subgraph <link>gecmd_create_subgraph
exit <link>gecmd_exit
group <link>gecmd_group
move <link>gecmd_move
<t>move currentobject <link>gecmd_move_currentobject
<t>move selectedobject <link>gecmd_move_selectedobject
new <link>gecmd_new
open <link>gecmd_open
quit <link>gecmd_quit
replace <link>gecmd_replace
rotate <link>gecmd_rotate
<t>rotate currentobject <link>gecmd_rotate_current
<t>rotate selectedobject <link>gecmd_rotate_selected
save <link>gecmd_save
scale <link>gecmd_scale
<t>scale currentobject <link>gecmd_scale_current
<t>scale selectedobject <link>gecmd_scale_selected
select <link>gecmd_select
<t>select currentobject <link>gecmd_select_currentobject
<t>select clear <link>gecmd_select_clear
......@@ -4737,16 +4748,6 @@ set <link>gecmd_set
<t>set currentobject attr2 <link>gecmd_set_current_attr1
<t>set currentobject annotation <link>gecmd_set_current_annotation
<t>set graphattributes <link>gecmd_set_graphattributes
rotate <link>gecmd_rotate
<t>rotate currentobject <link>gecmd_rotate_current
<t>rotate selectedobject <link>gecmd_rotate_selected
scale <link>gecmd_scale
<t>scale currentobject <link>gecmd_scale_current
<t>scale selectedobject <link>gecmd_scale_selected
save <link>gecmd_save
exit <link>gecmd_exit
quit <link>gecmd_quit
open <link>gecmd_open
show <link>gecmd_show
<t>show version <link>gecmd_show_version
</topic>
......@@ -4877,6 +4878,16 @@ Skapar ett subgraf-objekt.
/y2
</topic>
<topic>gecmd_exit
exit
Avsluta ge och spara aktuell graf först.
<b>Syntax
<c>ge> exit ['filename']
</topic>
<topic>gecmd_group <style>function
group
......@@ -4927,6 +4938,112 @@ new
Rensar arbetsarean.
</topic>
<topic>gecmd_open
open
Öppna en graf.
<b>Syntax
<c>ge> open ['filename']
</topic>
<topic>gecmd_quit
quit
Avsluta utan att spara.
<b>Syntax
<c>ge> quit
</topic>
<topic>gecmd_replace
replace attribute
Sträng utbyte i dynamic och actino för utvalda object.
<b>Syntax
<c>ge> replace attribute /from= /to= [/strict]
/from <t>Sträng som ska bytas ut.
/to <t>Ersättnings sträng.
/strict <t>Sökning efter 'from' sträng skiljer mellan stora och små bokstäver.
</topic>
<topic>gecmd_rotate
rotate
</topic>
<topic>gecmd_rotate_current
rotate currentobject
Roterar senast skapade objekt runt objektets mittpunkt.
<b>Syntax
<c>ge> rotate currentobject /angle=
/angle <t>Vinkel i grader som objektet ska roteras.
</topic>
<topic>gecmd_rotate_selected
rotate selectedobject
Roterar utvalt objekt runt objektets mittpunkt.
<b>Syntax
<c>ge> rotate selectedobject /angle=
/angle <t>Vinkel i grader som objektet ska roteras.
</topic>
<topic>gecmd_save
save
Sparar en graf.
<b>Syntax
<c>ge> save ['filename']
</topic>
<topic>gecmd_scale
scale
</topic>
<topic>gecmd_scale_current
scale currentobject
Skalar om senast skapade objekt.
<b>Syntax
<c>ge> scale currentobject /scalex= /scaley= [/x= /y=]
/scalex <t>Skalfaktor i x-led
/scaley <t>Skalfaktor i y-led.
/x <t>x-koordinat för skalningens referenspunkt.
/y <t>y-koordinat för skalningens referenspunkt.
</topic>
<topic>gecmd_scale_selected
scale selectedobject
Skalar om utvalt objekt.
<b>Syntax
<c>ge> scale selectedobject /scalex= /scaley= [/x= /y=]
/scalex <t>Skalfaktor i x-led
/scaley <t>Skalfaktor i y-led.
/x <t>x-koordinat för skalningens referenspunkt.
/y <t>y-koordinat för skalningens referenspunkt.
</topic>
<topic>gecmd_select <style>function
select
</topic>
......@@ -5305,108 +5422,6 @@ AnimationCount <t>Int
<c>ge> set graphattributes 'name' 'value'
</topic>
<topic>gecmd_rotate
rotate
</topic>
<topic>gecmd_rotate_current
rotate currentobject
Roterar senast skapade objekt runt objektets mittpunkt.
<b>Syntax
<c>ge> rotate currentobject /angle=
/angle <t>Vinkel i grader som objektet ska roteras.
</topic>
<topic>gecmd_rotate_selected
rotate selectedobject
Roterar utvalt objekt runt objektets mittpunkt.
<b>Syntax
<c>ge> rotate selectedobject /angle=
/angle <t>Vinkel i grader som objektet ska roteras.
</topic>
<topic>gecmd_scale
scale
</topic>
<topic>gecmd_scale_current
scale currentobject
Skalar om senast skapade objekt.
<b>Syntax
<c>ge> scale currentobject /scalex= /scaley= [/x= /y=]
/scalex <t>Skalfaktor i x-led
/scaley <t>Skalfaktor i y-led.
/x <t>x-koordinat för skalningens referenspunkt.
/y <t>y-koordinat för skalningens referenspunkt.
</topic>
<topic>gecmd_scale_selected
scale selectedobject
Skalar om utvalt objekt.
<b>Syntax
<c>ge> scale selectedobject /scalex= /scaley= [/x= /y=]
/scalex <t>Skalfaktor i x-led
/scaley <t>Skalfaktor i y-led.
/x <t>x-koordinat för skalningens referenspunkt.
/y <t>y-koordinat för skalningens referenspunkt.
</topic>
<topic>gecmd_save
save
Sparar en graf.
<b>Syntax
<c>ge> save ['filename']
</topic>
<topic>gecmd_exit
exit
Avsluta ge och spara aktuell graf först.
<b>Syntax
<c>ge> exit ['filename']
</topic>
<topic>gecmd_quit
quit
Avsluta utan att spara.
<b>Syntax
<c>ge> quit
</topic>
<topic>gecmd_open
open
Öppna en graf.
<b>Syntax
<c>ge> open ['filename']
</topic>
<topic>gecmd_show
show
</topic>
......@@ -5461,6 +5476,7 @@ fgets <t>L
fopen <t>Öppna en fil
fprintf <t>Formaterad skrivning på fil
fscanf <t>Formaterad läsning frän fil
translate_filename <t>Byt ur miljövariabler i ett filnamn.
<h2>Hantering av strängar
<b>Funktion <t>Beskrivning
......@@ -5473,6 +5489,7 @@ strchr <t>Leta efter f
strlen <t>Längden av en sträng
strrchr <t>Leta efter sista förekomsten av ett tecken i en sträng
strstr <t>Leta efter första förekomsten av en teckensekvens i en sträng
tolower <t>Konvertera till gemener
toupper <t>Konvertera till versaler
<h2>Databas funktioner
......
......@@ -1235,6 +1235,10 @@ plc <t>Plc processen <t>Hanterar I/O och exekverar plc-koden.
rs_remote <t>Remote processen <t>Hanterar remote kommunikation.
opc_server <t>Opc server process.
rt_statussrv <t>Status server <t>Webservice för runtime monitorn och övervakningscentralen.
rt_post <t>Post server <t>Sänder larm via email eller sms.
rt_report <t>Report server <t>Genererar rapporter.
rt_sevhistmon <t>Storage monitor <t>Samlar och sänder historisk data till lagringsserver.
rt_powerlink <t>Ethernet powerlink server <t>Hanterar Powerlink kommunikation.
</topic>
......@@ -2402,11 +2406,15 @@ Skriv inneh
<TOPIC> script
Xtt script
execute script <LINK> execute script
datatypes <LINK> datatypes
datatype conversions <LINK> datatype conversions
variable declarations <LINK> variable declarations
operators <LINK> operators
Exekvera ett script <LINK> execute script
<h2>Datatyper och declarationer
Datatyper <LINK> datatypes
Datatyps konvertering <LINK> datatype conversions
Variabel deklarationer <LINK> variable declarations
Operatorer <LINK> operators
<h2>Uttryck
main-endmain <LINK> main-endmain
function-endfunction <LINK> function-endfunction
if-else-endif <LINK> if-else-endif
......@@ -2416,23 +2424,35 @@ break <LINK> break
continue <LINK> continue
goto <LINK> goto
include <LINK> include
<h2>In och utmatnings funktioner
ask() <LINK> ask()
printf() <LINK> printf()
say() <LINK> say()
scanf() <LINK> scanf()
fprintf() <LINK> fprintf()
<h2>Filhanterings funktioner
fclose() <LINK> fclose()
felement() <LINK> felement()
fgets() <LINK> fgets()
fopen() <LINK> fopen()
fclose() <LINK> fclose()
exit() <LINK> exit()
verify() <LINK> verify()
time() <LINK> time()
fprintf() <LINK> fprintf()
fscanf() <LINK> fscanf()
translate_filename() <LINK> translate_filename()
<h2>Sträng funktioner
edit() <LINK> edit()
extract() <LINK> extract()
element() <LINK> element()
extract() <LINK> extract()
sprintf() <LINK> sprintf()
strchr() <LINK> strchr()
strrchr() <LINK> strrchr()
strlen() <LINK> strlen()
strstr() <LINK> strstr()
toupper() <LINK> toupper()
tolower() <LINK> tolower()
get_language() <LINK> get_language()
translate_filename() <LINK> translate_filename()
xtt-commands <LINK> xtt-commands
<h2>Databas funktioner
GetAttribute() <LINK> getattribute()
GetChild() <LINK> getchild()
GetParent() <LINK> getparent()
......@@ -2442,14 +2462,28 @@ GetNextObject() <LINK> getnextobject()
GetObjectClass() <LINK> getobjectclass()
GetNodeObject() <LINK> getnodeobject()
GetRootList() <LINK> getrootlist()
<h2>System funktioner
exit() <LINK> exit()
system() <LINK> system()
time() <LINK> time()
verify() <LINK> verify()
<h2>Diverse funktioner
CutObjectName() <LINK> cutobjectname()
MessageError() <LINK> messageerror()
MessageInfo() <LINK> messageinfo()
GetCurrentText() <LINK> getcurrenttext()
GetCurrentObject() <LINK> getcurrentobject()
pwr_get_config() <LINK> pwr_get_config()
get_node_name() <LINK> get_node_name()
get_language() <LINK> get_language()
<h2>xtt-commands
xtt-commands <LINK> xtt-commands
</TOPIC>
<headerlevel>
<TOPIC> execute script
Exekvera ett script
......@@ -2556,6 +2590,21 @@ Operator <t>Beskrivning <t>Datatyper
|= <t>logisk eller och tilldelning <t>int
</TOPIC>
<TOPIC> sc_statements <style> function
Script uttryck
main-endmain <t>Main funktion.<LINK> main-endmain
function-endfunction <t>Funktions deklaration.<LINK> function-endfunction
if-else-endif <t>Villkorlig exekvering.<LINK> if-else-endif
while-endwhile <t>While loop.<LINK> while-endwhile
for-endfor <t>For loop.<LINK> for-endfor
break <t>Avsluta while eller for loop.<LINK> break
continue <t>Fortsätt while eller for loop.<LINK> continue
goto <t>Hoppa till label.<LINK> goto
include <t>Inkludera script fil.<LINK> include
</TOPIC>
<headerlevel>
<TOPIC> main-endmain <style> function
main-endmain
......@@ -2708,6 +2757,44 @@ En script include-fil xom inneh
<c>#include <my_functions>
</TOPIC>
</headerlevel>
<TOPIC> sc_input_output_functions <style> function
In och utmatnings funktioner
<b>Funktion <t>Beskrivning
ask <t>Skriv en fråga och läs ett svar.<link> ask()
printf <t>Formaterad utskrift. <link> printf()
say <t>Skriv en text. <link> say()
scanf <t>Formaterad läsning. <link> scanf()
</TOPIC>
<headerlevel>
<TOPIC> ask() <style> function
ask()
int ask( string question, (arbitrary type) reply)
<b>Beskrivning
Promptar för inmatning med den angivna strängen.
Returnerar antal lästa element, 1 or 0.
<b>Arguments
string <t>question <t>Prompt.
godtycklig typ <t>reply <t>Inmatat svar. Kan vara int,
<t> <t>float eller string.
<b>Exempel
<c> string reply;
<c> ask( "Do you want to continue? [y/n] ", reply);
<c> if ( reply != "y")
<c> exit();
<c> endif
</TOPIC>
<TOPIC> printf() <style> function
printf()
......@@ -2735,6 +2822,23 @@ godtycklig typ <t>arg2 <t>V
<c> printf( "a = %d och str = %s", a, str);
</TOPIC>
<TOPIC> say() <style> function
say()
int say( string text)
<b>Beskrivning
Skriver ut en sträng.
<b>Argument
string <t>text <t>Text att skriva ut.
<b>Exempel
<c> say( "Three quarks for Muster Mark!");
</TOPIC>
<TOPIC> scanf() <style> function
scanf()
......@@ -2755,37 +2859,71 @@ godtycklig typ <t>arg1 <t>V
<c> scanf( "%d", i);
</TOPIC>
</headerlevel>
<TOPIC> fprintf() <style> function
fprintf()
<TOPIC> sc_file_handling_functions <style> function
Filhanterings funktioner
int fprintf( int file, string format [, (godtycklig typ) arg1,
(godtycklig typ) arg2])
<b>Funktion <t>Beskrivning
fclose <t>Stäng en fil. <link> fclose()
felement <t>Extrahera ett element från senaste lästa rad. <link> felement()
fgets <t>Läs en rad från en fil. <link> fgets()
fopen <t>Öppna en fil. <link> fopen()
fprintf <t>Formaterad utskrift till fil. <link> fprintf()
fscanf <t>Formaterad läsning från fil. <link> fscanf()
translate_filename <t>Översätt omgivnings-variabler i ett filnamn. <link> translate_filename()
</TOPIC>
<headerlevel>
<TOPIC> fclose() <style> function
fclose()
int fclose( int file)
<b>Beskrivning
Formaterad utskrift på fil. C-syntax. Format argument och inget, ett eller två
värde argument.
Returnerarn antal utskrivna tecken.
Stänger en öppnad fil.
<b>Argument
int <t>file <t>Fil id returnerat av fopen.
string <t>format <t>Format.
godtycklig typ <t>arg1 <t>Värde argument. Valfritt. Kan vara int,
<t> <t>float eller string.
godtycklig typ <t>arg2 <t>Värde argument. Valfritt. Kan vara int,
<t> <t>float eller string.
int <t>file <t>fil-id returnerad av fopen.
<b>Exempel
<c> int outfile;
<c> outfile = fopen( "my_file.txt", "w");
<c> if (!outfile)
<c> exit();
<c> fprintf( outfile, "Some text");
<c> fprintf( outfile, "a = %d", a);
<c> fclose( outfile);
<c> int infile;
<c> infile = fopen("some_file.txt","r");
<c> ...
<c> fclose( infile);
</TOPIC>
<TOPIC> felement() <style> function
felement()
string felement( int file int number, string delimiter, string str)
<b>Beskrivning
Extraherar ett element från en sträng av element läst från en file med
fgets() funktionen. felement() kan användas istället för element() när den
lästa strängen är längre än sträng-storleken 256. felement() kan hantera rader
upp till 1023 tecken.
<b>Argument
int <t>number <t>elementets nummer.
string <t>delimiter <t>avgränsnings tecken.
<b>Exempel
<c> string elem1;
<c> int file;
<c> string line;
<c> file = fopen( "my_file.txt", "r");
<c> while( fgets( line, file))
<c> elem1 = felement( 1, " ");
<c> endwhile
</TOPIC>
<TOPIC> fgets() <style> function
......@@ -2839,75 +2977,108 @@ string <t>mode <t>Access mod
<c> fclose( outfile);
</TOPIC>
<TOPIC> fclose() <style> function
fclose()
<TOPIC> fprintf() <style> function
fprintf()
int fclose( int file)
int fprintf( int file, string format [, (godtycklig typ) arg1,
(godtycklig typ) arg2])
<b>Beskrivning
Stänger en öppnad fil.
Formaterad utskrift på fil. C-syntax. Format argument och inget, ett eller två
värde argument.
Returnerarn antal utskrivna tecken.
<b>Argument
int <t>file <t>fil-id returnerad av fopen.
int <t>file <t>Fil id returnerat av fopen.
string <t>format <t>Format.
godtycklig typ <t>arg1 <t>Värde argument. Valfritt. Kan vara int,
<t> <t>float eller string.
godtycklig typ <t>arg2 <t>Värde argument. Valfritt. Kan vara int,
<t> <t>float eller string.
<b>Exempel
<c> int infile;
<c> infile = fopen("some_file.txt","r");
<c> ...
<c> fclose( infile);
<c> int outfile;
<c> outfile = fopen( "my_file.txt", "w");
<c> if (!outfile)
<c> exit();
<c> fprintf( outfile, "Some text");
<c> fprintf( outfile, "a = %d", a);
<c> fclose( outfile);
</TOPIC>
<TOPIC> exit() <style> function
exit()
<TOPIC> fscanf() <style> function
fscanf()
int exit()
int fscanf( int file, string format, (godtycklig typ) arg1)
<b>Beskrivning
Avslutar exekveringen av en fil.
Formaterad läsning från fil. C-syntax.
Returnerar antal inlästa tecken.
<b>Argument
int <t>file <t>Fil id.
string <t>format <t>Format.
godtycklig typ <t>arg1 <t>Värde argument. Returnerat. Kan vara int,
<t> <t>float eller string.
<b>Exempel
<c> exit();
<c> int file;
<c> int i;
<c> file = fopen( "my_file.txt", "r");
<c> if (file)
<c> fscanf( file, "%d", i);
<c> fclose( file);
<c> endif
</TOPIC>
<TOPIC> verify() <style> function
verify()
<TOPIC> translate_filename() <style> function
translate_filename()
int verify( [int mode])
string translate_filename( string fname)
<b>Beskrivning
Sätter eller visar verifikatione mod. Om verifiering är till, visas alla
exekverade rader på skärmen.
Returnerar nuvarande verifikations mod.
Byter ut omgivnings variabler i ett filnamn.
<b>Argument
int <t>mode <t>verifikaion till (1) eller från (0). Valfri.
string <t>fname <t>Ett filnamn.
<b>Returns
string <t><t>Sträng med utbytta omgivningsvariabler.
<b>Exempel
<c> verify(1);
<c> string fname1 = "$pwrp_db/a.wb_load";
<c> string fname2;
<c> fname2 = translate_filename( fname1);
</TOPIC>
</headerlevel>
<TOPIC> time() <style> function
time()
string time()
<b>Beskrivning
Returnerar nuvarande tid i strängformat.
<b>Exempel
<TOPIC> string_functions <style> function
Sträng funktioner
<c> string t;
<c> t = time();
<b>Funktion <t>Beskrivning
edit <t>Ta bort överfödiga mellanslag och tab. <link> edit()
element <t>Extrahera ett element från en sträng. <link> element()
extract <t>Extrahera en delsträng från en sträng. <link> extract()
sprintf <t>Formaterad utskrift till en sträng. <link> sprintf()
strchr <t>Returnera första förekomsten av ett tecken i en sträng. <link> strchr()
strrchr <t>Returnera sista förekomsten av ett tecken i en sträng. <link> strrchr()
strlen <t>Beräkna längden på en sträng. <link> strlen()
strstr <t>Returnera första förekomsten av en delsträng i en sträng. <link> strstr()
tolower <t>Konvertera till små bokstäver. <link> tolower()
toupper <t>Konveretra till stora bokstäver. <link> toupper()
</TOPIC>
<headerlevel>
<TOPIC> edit() <style> function
edit()
......@@ -2928,6 +3099,29 @@ string <t>str <t>str
<c> collapsed_str = edit(str);
</TOPIC>
<TOPIC> element() <style> function
element()
string element( int number, string delimiter, string str)
<b>Beskrivning
Extraherar ett element från en sträng av element.
Returnerar det extraherade elementet.
<b>Argument
int <t>number <t>elementets nummer.
string <t>delimiter <t>avgränsnings tecken.
string <t>str <t>sträng med element.
<b>Exempel
<c> string str = "mary, lisa, anna, john";
<c> string elem1;
<c> elem1 = elment( 1, ",", str);
</TOPIC>
<TOPIC> extract() <style> function
extract()
......@@ -2950,54 +3144,138 @@ string <t>str <t>str
<c> extracted_str = extract( 5, 7, str);
</TOPIC>
<TOPIC> element() <style> function
element()
<TOPIC> sprintf() <style> function
sprintf()
string element( int number, string delimiter, string str)
int sprintf( string str, string format [, (arbitrary type) arg1, (arbitrary type) arg2])
<b>Beskrivning
Extraherar ett element från et sträng av element.
Returnerar det extraherade elementet.
Formaterad utskrift. C-syntax. Format argument och inget, ett eller två
värde argument.
Returnerar antal utskrivna tecken.
<b>Argument
int <t>number <t>elementets nummer.
string <t>delimiter <t>avgränsnings tecken.
string <t>str <t>sträng med element.
string <t>str <t>Sträng att skriva till.
string <t>format <t>Format.
godtycklig typ <t>arg1 <t>Värde argument. Valfritt, Kan vara int,
<t> <t>float eller string.
godtycklig typ <t>arg2 <t>Värde argument. Valfritt. Kan vara int,
<t> <t>float eller string.
<b>Exempel
<c> string str = "mary, lisa, anna, john";
<c> string elem1;
<c> elem1 = elment( 1, ",", str);
<c> string str;
<c> int items;
<c> sprintf( str, "Number of items: %d", items);
</TOPIC>
<TOPIC> toupper() <style> function
toupper()
<TOPIC> strchr() <style> function
strchr()
string toupper( string str)
int strchr( string str, string c)
<b>Beskrivning
Konverterar en sträng till stora bokstäver.
Returnerar första förekomsten av ett tecken in en sträng.
<b>Argument
string <t>str <t>sträng som ska konverteras.
string <t>str <t>Sträng att söka i.
string <t>c <t>Tecken att söka efter.
<b>Returns
string <t><t>sträng med stora bokstäver.
int <t><t>Index för första förekomsen av ett tecken.
<t><t>Första tecknet har index 1. Returnerar
<t><t>noll om tecknet inte hittas.
<b>Exempel
<c> string str = "index.html";
<c> int idx;
<c> idx = strchr( str, ".");
</TOPIC>
<TOPIC> strrchr() <style> function
strrchr()
int strrchr( string str, string c)
<b>Beskrivning
Returnerar sista förekomsten av ett tecken in en sträng.
<b>Argument
string <t>str <t>Sträng att söka i.
string <t>c <t>Tecken att söka efter.
<b>Returns
int <t><t>Index för den sista förekomsten av tecknet.
<t><t>Första tecknet har index 1. Returnerar
<t><t>noll om tecknet inte hittas.
<b>Exempel
<c> string str1 = "Buster Wilson";
<c> string str2;
<c> str2 = toupper( str);
<c> string str = "/usr/local/pwrrt";
<c> int idx;
<c> idx = strrchr( str, "/");
</TOPIC>
<TOPIC> strlen() <style> function
strlen()
int strlen( string str, string c)
<b>Beskrivning
Beräknar längden av en sträng.
<b>Argument
string <t>str <t>Sträng att beräkna längden för.
<b>Returns
int <t><t>Strängens längd.
<b>Exempel
<c> string str = "/usr/local/pwrrt";
<c> int len;
<c> len = strlen( str);
</TOPIC>
<TOPIC> strstr() <style> function
strchr()
int strstr( string str, string substr)
<b>Beskrivning
Returnar första förekomsten av en delsträng i en sträng.
<b>Arguments
string <t>str <t>Sträng att söka i.
string <t>substr <t>Delsträng att söka efter.
<b>Returns
int <t><t>Index för första förekomsten av delsträngen.
<t><t>Första tecknet har index 1. Returnerar
<t><t>noll om delsträngen inte hittas.
<b>Exempel
<c> string str = "index.html";
<c> int idx;
<c> idx = strstr( str, ".html");
</TOPIC>
<TOPIC> tolower() <style> function
toupper()
tolower()
string tolower( string str)
......@@ -3019,82 +3297,132 @@ string <t><t>str
<c> str2 = tolower( str);
</TOPIC>
<TOPIC> get_language() <style> function
translate_filename()
<TOPIC> toupper() <style> function
toupper()
string get_language()
string toupper( string str)
<b>Beskrivning
Returnerar nuvarande språk.
Konverterar en sträng till stora bokstäver.
<b>Argument
string <t>str <t>sträng som ska konverteras.
<b>Returns
string <t><t>Aktuellt språk, t ex en_us, sv_se eller de_de.
string <t><t>sträng med stora bokstäver.
<b>Exempel
<c> string lng;
<c> string str1 = "Buster Wilson";
<c> string str2;
<c> str2 = toupper( str);
</TOPIC>
<c> lng = get_language();
<c> if ( lng == "sv_se")
<c> create opmenu/name="Funktioner-Bilder-Översikt"/command="open graph overview"
<c> endif
<c> if ( lng == "en_us")
<c> create opmenu/name="Functions-ProcessGraphs-Overview"/command="open graph overview"
<c> endif
</headerlevel>
<TOPIC> system_functions <style> function
System funktioner
<b>Funktion <t>Beskrivning
exit <t>Avsluta scriptet. <link> exit()
system <t>Exekvera ett shell kommando. <link> system()
time <t>Hämta systemtiden. <link> time()
verify <t>Skriv ut exekverade rader. <link> verify()
</TOPIC>
<TOPIC> translate_filename() <style> function
translate_filename()
<headerlevel>
<TOPIC> exit() <style> function
exit()
string translate_filename( string fname)
int exit()
<b>Beskrivning
Byter ut omgivnings variabler i ett filnamn.
Avslutar exekveringen av en fil.
<b>Exempel
<c> exit();
</TOPIC>
<TOPIC> system() <style> function
system()
int system( string cmd)
<b>Beskrivning
Exekvera ett shell kommando.
<b>Argument
string <t>fname <t>A filnamn.
string <t>cmd <t>Shell kommando att exekvera.
<b>Returns
string <t><t>Sträng med utbytta omgivningsvariabler.
int <t><t>Returvärdet är -1 vid fel eller annars returstatus
<t><t>för kommandot.
<b>Exempel
<c> string fname1 = "$pwrp_db/a.wb_load";
<c> string fname2;
<c> fname2 = translate_filename( fname1);
<c> string cmd;
<c> cmd = "firefox http://www.proview.se";
<c> system( cmd);
</TOPIC>
<TOPIC> xtt-commands <style> function
Xtt kommandon
<TOPIC> time() <style> function
time()
Alla xtt kommandon finns tillgängliga i script koden. En xtt-kommando rad
ska INTE avslutas med semikolon. Variabler kan substitueras i kommandot
genom add omges av apostrofer.
string time()
<b>Beskrivning
Returnerar nuvarande tid i strängformat.
<b>Exempel
<c> string name = "PUMP-VALVE-Open.ActualValue";
<c> float value = 2.2;
<c> set parameter/name='name'/value='value'
<c> string t;
<c> t = time();
</TOPIC>
<TOPIC> verify() <style> function
verify()
int verify( [int mode])
<b>Beskrivning
Sätter eller visar verifikatione mod. Om verifiering är till, visas alla
exekverade rader på skärmen.
Returnerar nuvarande verifikations mod.
<b>Argument
int <t>mode <t>verifikaion till (1) eller från (0). Valfri.
<b>Exempel
<c> string name;
<c> string parname;
<c> int j;
<c> int i;
<c> for ( i = 0; i < 3; i++)
<c> parname = "vkv-test-obj" + (i+1);
<c> create obj/name='parname'
<c> for ( j = 0; j < 3; j++)
<c> name = parname + "-obj" + (j+1);
<c> create obj/name='name'
<c> endfor
<c> endfor
<c> verify(1);
</TOPIC>
</headerlevel>
<TOPIC> database_functions <style> function
Databas funktioner
<b>Function <t>Description
GetAttribute() <t>Hämta värde för ett attribut. <LINK> getattribute()
GetChild() <t>Hämta barn till ett objekt. <LINK> getchild()
GetParent() <t>Hämta föräder till ett objekt. <LINK> getparent()
GetNextSibling()<t>Hämta syskon för ett objekt. <LINK> getnextsibling()
GetClassList() <t>Hämta första instansen av en klass. <LINK> getclasslist()
GetNextObject() <t>Hämta nästa instans av en klass. <LINK> getnextobject()
GetObjectClass() <t>Hämta klassen för ett objekt. <LINK> getobjectclass()
GetNodeObject() <t>Hämta nod-objektet. <LINK> getnodeobject()
GetRootList() <t>Hämta första objektet i rot-listan. <LINK> getrootlist()
</TOPIC>
<headerlevel>
<TOPIC> getattribute() <style> function
GetAttribute()
......@@ -3310,6 +3638,21 @@ GetNextSibling().
<c> name = GetNextSibling(name);
<c> endwhile
</TOPIC>
</headerlevel>
<TOPIC> misc_functions <style> function
Diverse funktioner
CutObjectName() <t>Klipp av ett objektsnamn. <LINK> cutobjectname()
MessageError() <t>Skriv ett felmeddelande. <LINK> messageerror()
MessageInfo() <t>Skriv ett informationsmeddelande. <LINK> messageinfo()
GetCurrentText() <t>Hämta text för utvalt alternativ. <LINK> getcurrenttext()
GetCurrentObject() <t>Hämta utvalt objekt. <LINK> getcurrentobject()
pwr_get_config() <t>Hämta konfigurations-värden <LINK> pwr_get_config()
get_node_name() <t>Hämta nodnamn <LINK> get_node_name()
get_language() <t>Hämta nuvarande språk <LINK> get_language()
</TOPIC>
<headerlevel>
<TOPIC> cutobjectname() <style> function
CutObjectName()
......@@ -3371,7 +3714,7 @@ string GetCurrentText()
<b>Beskrivning
Hämta texten på det utvalde menyalternativet.
Hämta texten på det utvalda menyalternativet.
<b>Exempel
......@@ -3396,6 +3739,61 @@ returneras en null-str
<c> object = GetCurrentObject();
</TOPIC>
<TOPIC> get_language() <style> function
get_language()
string get_language()
<b>Beskrivning
Hämta nuvarande språk.
<b>Returns
string <t><t>Nuvarande språk, t.ex. en_us, sv_se, de_de.
<b>Exempel
<c> string lng;
<c> lng = get_language();
<c> if ( lng == "sv_se")
<c> create opmenu/name="Funktioner-Bilder-Översikt"/command="open graph overview"
<c> endif
<c> if ( lng == "en_us")
<c> create opmenu/name="Functions-ProcessGraphs-Overview"/command="open graph overview"
<c> endif
</TOPIC>
</headerlevel>
<TOPIC> xtt-commands <style> function
Xtt kommandon
Alla xtt kommandon finns tillgängliga i script koden. En xtt-kommando rad
ska INTE avslutas med semikolon. Variabler kan substitueras i kommandot
genom add omges av apostrofer.
<b>Exempel
<c> string name = "PUMP-VALVE-Open.ActualValue";
<c> float value = 2.2;
<c> set parameter/name='name'/value='value'
<b>Exempel
<c> string name;
<c> string parname;
<c> int j;
<c> int i;
<c> for ( i = 0; i < 3; i++)
<c> parname = "vkv-test-obj" + (i+1);
<c> create obj/name='parname'
<c> for ( j = 0; j < 3; j++)
<c> name = parname + "-obj" + (j+1);
<c> create obj/name='name'
<c> endfor
<c> endfor
</TOPIC>
</chapter>
......@@ -71,7 +71,7 @@ static void usage()
{
printf( "Usage: co_convert -wxsoc -d target_directory source_files\n");
printf( " -w: Create html from wb_load-files\n");
printf( " -x: Create xtthelp from wb_load-filesfiles\n");
printf( " -x: Create xtthelp from wb_load-files\n");
printf( " -c: Create html files from c- and -h-files\n");
printf( " -s: Create h files from wb_load-files\n");
printf( " -so: Create one common h file from wb_load-files\n");
......
......@@ -39,7 +39,7 @@ SObject pwrb:Class
!/**
! @Version 1.0
! @Group NodeConfiguration
! @Summary Configures the an application
! @Summary Configures an application
! Configures an application.
!*/
Object Application $ClassDef 363
......@@ -52,11 +52,18 @@ SObject pwrb:Class
Body SysBody
Attr StructName = "Application"
EndBody
!/**
! Optional description.
!*/
Object Description $Attribute 1
Body SysBody
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
!/**
! Application index.
! Should be set by the application with a call to errh_Init().
!*/
Object Anix $Attribute 3
Body SysBody
Attr TypeRef = "pwrs:Type-$Int32"
......@@ -66,6 +73,13 @@ SObject pwrb:Class
EndObject
EndObject
Object DevBody $ObjBodyDef 2
!/**
! Build command. The command is executed when the node is built from
! the configurator. This is a way to ensure that the application is updated
! when the node is built. Example
!
! make --directory $pwrp_src/myappl -f makefile
!*/
Object BuildCmd $Attribute 2
Body SysBody
Attr TypeRef = "pwrs:Type-$String80"
......
......@@ -263,7 +263,7 @@ GeBuild Ge graph built. Built graph displayed in item.\n\
GeExport Ge graph exported to java. Exported graph displayed in item.\n\
UpdateClasses Classes updated.\n\
CreatePackage Distribution package created. Created package displayed in item.\n\
&CopyPackage Package distributed to process or operator station. Package displayed in item.\n\
CopyPackage Package distributed to process or operator station. Package displayed in item.\n\
</XMP>\n\
</body>\n\
</html>\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment