Introduction
Welcome to working with VisXpert. You have chosen to use a high-performance and proven product. This guide is designed to get you started quickly and provide comprehensive guidance on how to use VisXpert.

VisXpert is an Supervisory control and Monitoring (SCADA) system. It is an highly modular and extensible system, that allows the user to easily create complex Human Machine Interface (HMI) applications
VisXpert forms the Visualization backbone of the BatchXpert Process control system, but can provide functionality far beyond the requirements of the BatchXpert system.
Modules

It also provides an very powerful Software Development Kit (SDK), that allows you to develop you own custom modules and leverage The full potential of your automation system
Features
Some of the most important features of VisXpert are:
- No Tag limit on licenses. Let the requirements guide your Engineering, not the license!
- Driver for Simatic and Compatible Plc's (1200, 1500, 300 and 400)
- Driver for Rockwell Allen Bradley Plc's (ControlLogix, CompactLogix and Micrologix)
- Opc UA connectivity
- Alarm Managment with Email notifications
- Trend Recording, viewing and evaluation
- Integrates SQL database
- Integrated OPC UA server
- Software Development Kit that allows you to extend nearly every part of the System
- Modular design with many available modules
- DDE Server to provide direct Real time data access to applications such as Microsoft Excel
Proven and stable, yet Modern
VisXpert is the evolution with the proven SCADA system "GraphPic" from "Gefasoft". This Allows VisXpert to leverage the long experience of its predecessor and build its functionality upon this foundation. GraphPic projects can seamlessly migrated to VisXpert including License compatibility.
It is used mainly in "Food and Beverage" and "Automotive" Industries.
Unlimited License
One of its biggest advantages is, that its licensing does not limit the amount of Process Tags that you can use in the system. Using VisXpert you can finally start engineering without considering the licensed Process tag count and let only your creativity be the limit.
Support
If you have any questions about VisXpert or if you have problems with the handling, please send us an e-mail with all the details below together with your problem description. This procedure makes it easier for us to process and ultimately speeds up problem solving.
In any case, you should provide the following information:
- VisXpert Serial Number
- VisXpert version and build number
- Hardware
In case of problems with PLC pairing, the following information is also important:
- Output levels of the CPU
- output levels of the system software (e.g. firmware, handling modules)
- Output levels of the communication processors
- output booths of the parameterization software (e.g. COM software)








System Requirements
General
VisXpert is fully compatible with Windows 10 and the latest SQL Server versions
To operate VisXpert you need a PC with the following minimum equipment:
- CPU Intel I3 or similar
- 1GB RAM
- 1 Ethernet communication port
Recommended is a:
- Intel I5 or similar
- 2GB RAM
- 2 Ethernet Ports
Touch and Multi Monitor
VisXpert supports Touch Monitors and also the operation with several connected Monitors. If you use touch monitors, it is recommended to use the tool "OnScreenKeyboardManager.exe" which is included in the installation or can be downloaded from here.
To use multiple Monitors it is recommended to use the "MultiMon" module included in the list of VisXpert modules.
Windows
- Windows 11, recommended
- Windows 10
- Windows 8.1
Sql Server
The VisXpert project databases require an Microsoft SQL Server. If you want to use a database server on the network, you can skip this setup. The Installation Center offers the "Express" version of the "Microsoft SQL Server", which is free of charge. If the SQL Server is already installed from an previous installation, or you are using an "Enterprise" version of SQL Server, you can skip the installation of the SQL Server.
VisXpert is compatible with all available SQL Server versions and editions.
- Sql Server 2022 Express, recommended
- Sql Server 2019 Express
- Sql Server 2017 Express, not recommended, soon out of support by vendor
- Sql Server 2016 Express, not recommended, soon out of support by vendor
- Sql Server 2014 Express, not recommended, soon out of support by vendor
- Sql Server 2012 Express, not recommended, soon out of support by vendor
- Sql Server 2008 R2 Express, not recommended out of support by vendor
- Sql Server 2008 Express, not recommended out of support by vendor
- Sql Server 2005 Express, not recommended out of support by vendor
.Net
- Microsoft .Net Framework 4.6 Full
User Rights
The installation requires administrative privileges.
Working with VisXpert requires full access to the GP8base directory, which contains the projects, predefined databases, and templates.
Read rights are required on the program directory (Programs\VisXpert).
On registry entries HK_local_Machine read rights and HK_CurrentUser read and write permissions are required.
Working with VisXpert
Communication module
The communication module ("KM") is the central program for project creation and also for processing in the process, in which all necessary settings are made. You start all editor programs (via the "Configuration" node) and the associated Runtime programs (via the "Stations" node) via the KM.

Module
Any stand-alone VisXpert program, such as Visualization, Messages, or Drivers is called a module. A new module is inserted into the project via the KM under the "Configuration" node via the right mouse button. Each module consists of two components
- An editor for determining the properties and functions of the module
- A sequence program for editing the defined functions in conjunction with variable values
Station
A station is a PC equipped with the Windows 2000/XP operating system, on which the program of a module is operated. The station name is freely selectable and is linked by the KM to the Windows Computer name when the project is created.
Project
A project is a lot of related stations and modules. For each project, a separate subdirectory for all project data is created on one of the stations under the VisXpert directory (with preset installation C:GP8Projects). A project can be used via the KM from the file menu with "Project new..." or "Open project..." be created.
Editor
An editor uses the properties and functions of a module, such as interface with the visualization editor. The editor programs are started via the KM under the "Configuration" node.
Runtime
A Runtime processes the functions defined for the module in question in conjunction with variable values and / or operator inputs. It thus controls the dynamic course of the project. The sequence programs are started via the KM under the "Stations" node.
Variable
A variable affects the functions of an expiration program by its value. The values of variables are read and written through different drivers. Variables are defined by the drivers' editor programs, whereby a group summary is made to increase clarity. VisXpert's flexible variable concept distinguishes three types of variables:
- Project variables have the same value on all stations associated with the project. Variable values between stations are exchanged via the KM via TCP/IP, whereby the station on which the associated driver is installed works as a server and the other stations as clients.
- Station variables can take different values on different stations in a project, or only be present on one station. The group name of station variables starts with the " .
- Groups with system variables are created automatically by different modules. For example, for example, the visualization editor @System a group of variables for date and time and a group @Script once a script variable has been defined in the visualization, or the reporting system creates a group @Meldesy1 with variables to access the shift and pause model. The group name of system variables starts with the name of the system variable.
Group
A group is the logical summary of variables associated with a driver. It is identified by a unique group name, where VisXpert distinguishes three types of groups:
- Groups with project variables: "name"
- Groups with station variables: "$name"
- Groups with system variables: "@name"
Driver
A driver is a module for exchanging data with other programs, databases, or hardware systems. Like the other modules, it consists of an editor for creating groups and variable tables and a sequence program for updating the variable values at run time. The sequence program of a driver, usually a DLL, is automatically loaded by the KM as soon as a module wants to access variable values from a group of the driver.Client
A client is a station that requests and receives variable values from a server. This means that the variable values are routed to the KM of the client via a driver installed on another station (the server) via the KM of that station. This data exchange is carried out automatically by the KM using TCP/IP.
Server
A server is a VisXpert station that provides variable values for other stations. A server typically has a driver installed that returns the variable values. The transmission of variable values between the server and the client is carried out automatically by the communication modules via TCP/IP.
Project Creation
Starting the communication module. After starting the operating system, the KM icon is usually located in the taskbar at the bottom right. With a double click, you open the km window that is required for all further configuration steps.
Operation of the communication module
The most important menu items from the menu bar of the KM are also included in the button bar for quick selection. For these buttons, help texts are displayed via the mouse pointer. The nodes (icons) of the tree structure present in the left window can be operated by a double mouse click: A branch (display "+") opens the next level of the tree structure or this branch is closed again, or the program (editor or drain) arranged at the end of the structure is started. Clicking on a node with the right mouse button opens a menu that includes functions such as B. "Start Editor" contains.
Create a new project
A new project can be created via the file menu via "Project new..." or open via the button bar with the left button:For the new project, three nodes (symbols) appear in the upper left window of the communication module:
- Stations: The stations (PC's) set up for the project and the sequence programs assigned to the stations appear under this node (symbol). In a stand-alone installation, the computer name of your own workstation is automatically inserted.
- Configuration: This node (symbol) displays the modules (expiration and driver programs) configured for the project. A scheduler cannot be assigned to a station until it has been configured for the project via configuration and "Insert new module".
- Values: Displays the status of all variables of the selected group. The online or configuration status of a group (selectable via the button bar) can be displayed.
When setting up the new project, the KM places under the ... GP8Projects a new directory with the selected project name and at the same time a project file projectname.gpp.
Configure a project
Create a new module in the project by right-clicking the "Configuration" node and using "Insert New Module" in the menu window now open (e.g. Visualization): The selected module will then appear in the tree structure in the "Configuration" section. In the "Visualization" example, the corresponding sequence program is also entered simultaneously under the station of your workstation. The module associated with the project can now be configured. To do this, start the editor of the selected module with a double mouse click or from the menu with the right mouse button. In the "Visualization" example, you start the VisXpert Visualization Editor. A driver program opens the associated variable configuration. An exception is module consisting of several programs, such as the reporting system (messages). In the reporting system, a submodule (MessageCapture, MessageView, MessageSimu or MessageControl) must be selected after the module has been created via the right mouse button and "New". The configuration of the submodule is then started again by a double mouse click or the right mouse button.
Open Project
An existing project open from the file menu or the second button from the left of the button bar and select the project file Projectname.gpp.
Driver and variable configuration
The variables of the drivers are grouped together. A new group can be created via the button bar or the edit menu via "Create group". The variable configuration interface allows scrolling in the table via a second button bar, as well as editing, deleting and duplicating the current data set: The memory module shown above is a driver whose function is integrated in the KM. The variable values are not supplied by an external coupling partner, but are read and written exclusively by VisXpert flow programs. In addition to the variable name and type (integer, string, boolean, floating point, or data block), an initialization value (initialization = true and specifying a default value) can be set for each variable.

License Installation
After VisXpert starts it checks for an valid license, and enters into an Demo Mode if no license is Found. The menu item "Help/License Info" provides information about "VisXpert licenses" from the licensed modules that may already be installed and registered. The "Registration" button opens the following dialog for registering modules by introducing an Serial number and its corresponding Registration Key.
After entering the serial number and the associated registry key (hexadecimal), the installation is complete. Both information can be found in the license agreement and on the delivery note for your VisXpert package.
Demo Mode
The Demo Mode is limited to 2 hours of runtime, after which VisXpert has to restart. Network Connections are not available and the station can not connect to other VisXpert stations. The Visualization Editor can be started, for evaluation purposes, but the changes can not be saved.
Installation
Installation Center
VisXpert installation and updates run from the VisXpert/BatchXpert Installation Center. This Installation Center can be downloaded from our Website under the Download section here.
If VisXpert is already installed, the Installation Center is also available from the VisXpert Installation directory, usually "C:\Program Files (x86)\VisXpert\Install". Admin rights are required to install VisXpert.

The Installation Center allows the setup programs required for VisXpert to be downloaded and installed with the correct Settings for an Standard Installation. For each program, the installed version and the available setup version are displayed. The programs should be installed from top to bottom in order. The programs you don't need for your application can be skipped.
System Requirements
Please review the VisXpert System Requirements here.
When installing SQL Server Manually the following Settings have to be chosen for an standard Installation. Please refer to the SQL Server Documentation on how to adjust these settings:
- Instance Name: GRAPHPIC
- Security: Login with integrated credentials
When installing the SQL-Server from the "Installation Center", the above settings are automatically Chosen. If you want to use different Instance Names and or Login Methods, then you must install the SQL-Server Manually with the appropriate settings. During Engineering, the correct settings must then be chosen for the Database settings.
VisXpert
This installs the actual VisXpert SCADA onto your System. Please make sure you fulfill at least the minimum Hardware and Software requirements. The Installation files can be downloaded via the "Installation Center" or directly installed if they are already downloaded.
Follow the on-screen instruction of the VisXpert Installation program. As Part of the installation progress, the GOPS PLC driver will be installed. The installation of the GOPS driver is optional but recommended.






SQL Server Management Studio
The "SQL Server Management Studio" allows the user to Manipulate and observe the data stored in the SQL database files of an VisXpert project. This Package is entirely optional and not necessary for the Operation of the VisXpert Scada system.
The Management Studio can be installed from the "Tools" menu of the "BatchXpert Installation Center" or by downloading it from the official Microsoft Homepage.
Uninstallation
If you want to remove VisXpert from your PC please open the "Applications" menu from the Windows Control panel. From there you can select VisXpert which uninstalls the VisXpert and the GOPS opc server. The SQL Server must be uninstalled manually.

Recording performance data
in the event of performance problems or errors that occur after a long period of time, the performance data can be logged and analyzed.
We recommend recording via logman with the following standard parameters:
Profile name: VisXpert
Recording interval: every 2 minutes
Max protocol size 300MB
Please start a recording with logman. Setup goes via the command line with admin rights:
logman create counter VisXpert -f bincirc -max 300 -si 120 -v mmddhhmm -c "MemoryAvailable MBytes" "Process(*)Private Bytes" "Processor(_Total)% Processor Time" "Processor(*)% Processor Time" "Process(*)% Processor Time" "PhysicalDisk (*)% Idle Time" "LogicalDisk(*)Free Megabytes" "Process(*)Virtual Bytes" "Process(_Total)Virtual Bytes" "MemoryPool Nonpaged Bytes" "MemoryPool Nonpaged Allocs" "MemoryPool Paged Bytes" "MemoryPool Paged Allocs" "MemoryPool Paged Resident Bytes"

Then start the recording via performance monitoring collection sets/Custom/VisXpert right mouse button.
after the error has occurred, stop recording. Reports/Custom can be viewed.
Please send the recording file (default directory for file storage: C:PerfLogsAdmin) to us.

System diagnostics
Detailed information about the computer system is required for a system diagnosis. With systemelements, these can be stored in reports and sent to us by email.
To create the reports, start information + management system 2007 in the communication module via Menu/Tools/SysteminformationSystem and create a detailed report as html format as a file.

User Administration
Overview
With user management, it is possible to allow certain functions of the modules and stations included in the project only for specific users. For this purpose, roles (user groups) are created, which are given certain permissions. The individual users can eventually be included in any of these roles. This gives users all the permissions of the assigned roles.
Enable user management
To enable user management, the User Management module must be included in the project in the configuration. VisXpert User Administration is used to edit the roles and users.

Roles and Permissions
Permissions are always granted for a specific role. Basically, the two roles Administrator and All exist. The administrator role has all rights and cannot be edited or deleted. The All role basically includes all users and it cannot be deleted either. This role defines the minimum permissions that each user has.
In addition to these two roles, any other roles can be created (menu item "Role| New"). To edit the role, just double click on the respective entry in the list (corresponds to the menu item "Role| properties" or the corresponding switch in the toolbar). It then shows the Edit Role window, which allows name changes to the role and allows permissions to be shared. On the left side all modules and stations included in the project are listed. By selecting an entry, the available permissions appear on the right.
With the menu item "Role| Delete" roles can be deleted.
User
As with the roles, the two users Administrator and Nobody basically exist. The administrator is a member of the Administrators role and therefore has all the permissions. The user No one can be assigned to any role. In the basic state of the system (after starting the system or logging out of a user), the user is always logged on.
With the menu item "Users| Delete" users can be deleted.
Communication Module
Overview
The communication module is the central application in VisXpert, both during the configuration and in the course of a VisXpert project. It coordinates all VisXpert modules and their configuration, both on the local computer and, for distributed projects, with other computers on the network.
The communication module manages the central configuration of a project. It launches editor and flow modules, provides you with information about the project configuration, collects expiration messages, and directs process variables from the drivers to all modules you need, both locally and on the network. In addition, it implements the global variables configured as "memory variables" in the main memory, which are often used for preprocessed values or for communication between modules.
Display of the communication module
The display of the communication module consists of two parts: the main window and an icon in the system area of the task bar (right, next to the time). In the list of running applications (when switching with ALT+TAB, in the main area of the task bar and in the list of applications of the task manager) only the main window appears. During the project planning and commissioning of a project, the main window serves as a central interface for interaction with the project. During the process of a completed project, it can be completely switched off, as it is usually no longer needed. In this case, the communication module no longer appears in the list of running applications and it can no longer be switched to it via "ALT+TAB".
When all displays are turned on, the main window has the following appearance:

In this illustration of the sample project, you can see the tree-like project structure in the upper left, consisting of the stations, module configurations and values included in the project.
Next to it is the item list, which displays online or configuration details about the elements of the object selected in the tree. In this case, the Auxiliary Data group is selected and the name, type, and configuration status of the variables of that group are displayed.
The project structure and item list together form the project display. Below is the log window, in which all VisXpert programs can output expiration messages. During the configuration, you will use almost exclusively the project display.
Only during the test and commissioning you will need the log window. You can change the size of each window with the mouse by dragging the separation or using the arrow keys when pressed shift. You can also completely hide individual parts (project display, log window, toolbar and status line) from the View menu.
Even if the display of the main window is off, the communication module always displays its icon in the system area of the task bar: By right-clicking, you can open the menu shown above. It contains the most important commands needed in the use of a completed project.
Note: Windows allows you to operate the system area of the task bar only by mouse. If you have turned off the display of the main window and minimized the communication module, you can only switch to it with the help of the mouse. Starting the communication module
By default, the communication module immediately loads the last loaded project at startup and appears on the screen in the size in which it was also last displayed.
Note: However, there is one exception to this: if the KM was last minimized and the display in the task bar was turned off, it starts in normal size. This behavior is necessary because the icons in the system area of the task bar can only be operated with a mouse, so the communication module would otherwise not be operable after startup on a PC without a mouse.
Options of the commandline
If you want a different behavior at startup, you can achieve this by specifying the appropriate options in the command line (e.g. the destination of the link). The communication module recognizes the following information in its command line:
- /N Start without project <.GPP>Loading of the specified project.</.GPP> If the path or name of the project contains spaces, the specification must be enclosed in quotation marks.
- /S Loading and immediate starting of the project. If no project is specified, the most recently loaded project is started.
- /AN Display in normal window size. /AV display as full screen.
- /AS Display as an icon.
- /AT Display only in the system area of the task bar.
Loading the communication module at the start of Windows
For finished projects at the site, it is usually desirable to start it automatically immediately after booting up the computer. You can determine whether and how this should be done using the "System Settings" of the communication module. After calling the item of the same name in the Edit menu, the following property dialog appears:

On the Startup page, you can set all the options that you could also specify on the command line.
On the Startup page, you can set all the options that you could also specify on the command line.
Plan and create a new project
Overview
This chapter introduces the basic steps for designing and commissioning a VisXpert project, as well as setting up a display station for continuous operation.
If you are planning a distributed project, please refer to the notes in the "Special Arrangements for Distributed Projects" section.
If possible, you should install all the modules that you have intended for the project on the computer used for configuration. The reason for this is that on each computer you are offered only those modules for inclusion in the project, which are also installed there. Also, of course, you can only call up editors that are present on the respective PC.
Creating the new project
You can set a new project via the menu item "File| Project new..." To. The default dialog for selecting a new file appears. Navigate to the desired directory and enter the name for the new project file. It is automatically confirmed when confirming the dialog with the ending ". GPP". So you don't have to enter them.
The communication module now sets a project directory with the same name as the project file (only without the ending ". GPP" creates the project tables in it, and creates the directories for bitmaps and user tables. Organizing all files belonging to a project under a single project directory makes it easier to copy the project to the computer at the site.
In each new project, the communication module immediately creates a station that corresponds to your computer. You can later rename this station (see the "Projecting Stations" section below) and give it the name of the computer it represents at the site.
Even if your project should later include several stations, we recommend that you create the additional stations later in the project planning. As long as a project contains only a single station, the communication module can perform some smaller tasks automatically during configuration (e.g. modules to be assigned to this station immediately). The first tests of the configuration of individual modules are also easier to carry out with a single station.
You should now continue to include the drivers in the project in the project and enter the groups and variables that you provide, because their presence is a prerequisite for the configuration of most other modules.
Projecting modules
You should start with the driver modules, because their configuration hardly depends on that of other modules, but vice versa, other configurations usually use variables defined by driver modules.
Groups, variables, and driver modules
Variables are always grouped into groups in VisXpert. A driver can define multiple groups, but a group is always associated with a single driver. Which station the corresponding driver module is assigned to determines which station is considered a 'server' for a group and its variables.
Groups and variables are created and configured in the editor of the relevant driver. Although it is possible to assign them to another driver via the "Properties" dialog, since the drivers require different configuration data, the group and its variables must then be reworked in the editor of the new module.
Different drivers may require compliance with certain rules and/or restrictions on assigning groups to driver modules or variables to groups. Before you start creating driver modules in your project, we ask you to learn about the configuration of the relevant drivers from the appropriate chapters of this guide.
Creating and configuring modules
You create modules in the "Configuration" section of the project display. Select this entry and then select the "New" submenu in its context menu (right-click or UMSCH+F10) submenu. This contains a list of all VisXpert modules installed on your computer. Select the type of module you want.
The communication module now creates a directory for the configuration data of the new module and inserts an entry under "Configuration" into the project tree that represents this configuration.
To edit the configuration of a module, call the module's editor from the context menu of the corresponding entry in the project tree. Editors are their own programs. You can keep multiple editors open at the same time and switch between the communication module and the communication module as you edit your project.
In the context menu of some configurations you will find a submenu "New", with which you can create additional modules dependent on this and their configuration data. Modules that can have dependent module configurations are called project modules. An example of this would be the reporting system (messages). In the case of the reporting system, the project module represents the data base shared by all submodules (MessageCapture, MessageSimu, MessageView, MessageControl).
Some modules are generally required within the project module or may be present in the same project module at most once. The communication module takes these properties into account and automatically creates a configuration for a module of that type as soon as you create the project module, or prevents the deletion of the last submodule of that type from the project module. The booking module, for example, must be available exactly once per parameterised reporting system. So create a reporting system in your project, automatically create a "MessageControl" module underneath it and do not allow you to delete it or add another posting module to the same reporting system.
The entries created here in the configuration tree represent only configuration data. They do not specify whether, on which station and in what order the modules will run. You define this in a further step when you assign the module configurations you have just defined at stations.
Engineering stations
When you create your project, the communication module has entered your computer as the first and, if only, station in your project. This happens every time you create a new project.
If the entry "Stations" is marked in the project tree, or open the dialog with the properties of the station ("Properties" in the context menu of the station or key combination ALT+ENTERkey), you can see the properties applicable to this station:

- The name of the station is freely adjustable and has no influence on the function of the project.
- The machine name must match the one specified in the configuration of Windows® NT™. In projects with a single station, the communication module automatically adjusts it when the project is loaded.
- The TCP/IP address is only required in multi-station projects to establish the connection between the computers and can otherwise remain empty. You can specify the address numerically (e.g. "192.168.100.64") or as a DNS name (e.g. "gphost1.firma.com) if this name can be resolved through an appropriate name service on the network. After the address, you can also specify a port number, separated by colon, which is then used instead of the usual 1112 (usually only necessary when operating on a terminal server).
- Accepting connections on all IP addresses determines whether the communication module is always based on all addresses or network cards of the computer in question should wait for connection attempts from other stations or only on the above. This option should only be disabled in exceptional cases. If you have specified the IP address of the computer as the DNS name, the communication module ignores this option and always uses all addresses.
If your project contains only one station, the station name is all you should set ("rename" in the station's context menu) to make sense at the site.
Assigning modules to stations
Now that you have created module configurations and set up stations, you still have to determine which modules should be loaded on which station and in which order when the project is started. Under Properties, you can enter a start time to set the wait time.
If your project contains only one station, the communication module assigns each module that has a flow program immediately when you create that station. In this case, you only need to explicitly assign modules to this station if you have previously deleted such an assignment yourself.
The easiest way to map a module is to drag an entry from the project tree configuration branch or from another station to the entry of the desired station. The shape of the mouse pointer lets you see what will happen:
The module would be assigned to this station.
- The module is already assigned to another station and would be assigned to this station in addition.
- The module is already assigned to another station, the assignment would be moved to that station.
- This only happens for modules whose configuration must be unique among the stations (e.g. drivers).
- The module cannot be assigned to this station. This means either that you want to assign a module that has no flow at all (e.g. system project module) or that the module in question is already assigned to this station.
If you drag an entry from the configuration tree to a station, if possible, a new map is created, drag another module map, and by default it is moved to the new station. You can change this by holding the CTRL or UMSCH key as you drag (note: the keys are evaluated only when the mouse is moved and the corresponding mouse pointer is displayed).
Within a station, you can also use drag-and-drop to change the arrangement of the module assignments. This allows you to set the order at the start of the modules on this station.
To make module assignments without a mouse, you can use the station's context menu. However, only those modules for which a new assignment would be created on this station are offered to you in its "New" submenu. To reassign a module from another station in this way, you must first delete the assignment of that module on the other station and then add it to the new station. To change the start sequence of a station without a mouse, you can move the assignments up or down with the CTRL key pressed.
Terminal Server Configuration
With the process visualization VisXpert it is possible to integrate several stations into a "project" and also assign different flow modules to these stations. For example, each of the stations will receive a user interface optimized for their resolution, or only a specific station will load the driver for PLC coupling. This VisXpert property facilitates flexible operation in a traditional client/server environment and can also be used for a terminal server environment.
The Windows Terminal Server is available by default on Windows 2000 Server. Up to 4 terminals are supported, whereby further licenses (terminals) can be retrofitted without any problems.

When operating on a terminal server, all sessions (expiration software for the client stations) now have the same IP address. To enable unique addressing, you must assign a separate port to each configured station (see "Projecting Stations").

Project languages
VisXpert from version 7 has the possibility to configure the application in several languages. The default setting for the languages to be used is set under the menu item "Edit/Project Languages..." Made.
This opens a Select Language window that specifies which languages should be available for the project. This window displays all the languages present in the GrahpPic. You can select one or more languages, with the Shift or Ctrl key to be used to select more project languages.

This selection is stored in the "Language.xml" file from the project path. This file contains all selected languages with the corresponding ID (langIDPrimary). The language selected in the sequence passes the corresponding ID to the system variable "Language". All multilingual flow modules switch their menus to the selected language according to the value of these system variables.
Testing the project
Even during the project planning, it is often desirable to test parts or the entire project. The communication module supports you by displaying log messages and the online status of groups and variables.
A project diagnostics can also be performed for:
- Configuration
- Online testing
- Computer connection
- PLC connection
Log messages
Log messages are output from a wide variety of VisXpert modules. They can be displayed in the communication module log window or written in a log file.
Each module can name up to 32 message classes to which it assigns its messages. For each of these classes, you can choose whether to display the appropriate messages and/or save them to the file.
Under "Logbook| users" you will always receive a list of all logged-in VisXpert modules:

Since modules can log in and out at any time, you can use "Update" to have this list rebuilt. By means of "Default" you can reset the log settings of the module selected in the list to its defaults. Finally, via "Edit" you can open a dialog box with the detailed log settings of the module in question (here the settings of the communication module):

Depending on what you want to test, you can now select the different message classes to display or write to the log file. You can also change the color of the font and background of each message. The selection of messages to be changed is done as usual in Windows.
To take a closer look at the displayed log messages, you can pause the display in the log window at any time (via the menu, the toolbar or by double-clicking in the log window).
Online status
Another tool in testing is to display the online status in the item list of the communication module.
The most useful thing here is to display the status and value of the variable. If you selected a group under Values in the project tree, you can observe the variables of that group in the item list.
In multi-station projects, you can also observe the state of all connected stations in the same way and also have the project reloaded on these stations or start or stop modules or the entire project. Because all this only works with stations connected to the current one, this is best used from the server.
Operation
The project structure window
In the project structure window, the currently loaded project is displayed as a tree. The tree consists of three sections:
- stations, represent the computers contained in the project and the modules configured on them
- configuration, represents the configuration of the modules included in the project
- values, displays the groups and variables contained in the project
Most entries in the project structure window have a context menu that allows you to call the commands that are valid for the entry.
The status window
Group status (online)
- "inactive" - group is not used
- "starts", - responsible server is started
- "is ready" - responsible server is running, but group is not used
- "is logged on" - group is logged on to the server
- "logged in" - server has accepted group
- "is parameterized" - configuration is sent to the server
- "will be connected", - group agreed, connection is established
- "connected" - group ready to read/write variables
- "is disconnected" - connection is broken -- > logged
- "will be logged out" - Agreement will be deleted -- > ready/inactive
- "Error" - an error has occurred
The group must be at least logged in for variable stati to be logged in.The group must be connected for variable stati to be connected or requested.
Variable status (online)
- "Error" - an error has occurred
- "inactive", - is not used
- "is logged in" - is currently being agreed with server
- "logged in" - server has accepted variable
- "is parameterized" - configuration is sent to the server
- "is connected", - variable agreed, connection is established
- "Connected" - Variable ready to read/write/request
- "requested" - request is running, but no value has yet been received
- "requested", - value exists, is updated when changed
Variable Request Status (online)
- "Inactive", - variable is not used
- "Connected" - at least one client wants to have connection
- "Requested" - at least one client wants to have value updated
The log window
The log window offers the possibility to follow the flow of a VisXpert project and helps to find errors in the project.
What does the log window show?
The log window shows the last 1024 messages generated by VisXpert modules on their own station.
There are 32 message classes, which can have different meanings depending on the module that generates the message. The modules do not have to generate messages for each class. Message classes 1-16 are status messages. They do not flag errors and are for tracing only. Message classes 17-32 are error messages. For them, a message box can be output as an error notification.
Each message is issued in the same format:
05.07.24 09:47:38:79 Communication module K01: Network server initialized to "195.30.62.50:1112"
- date and time: (YY.MM.TT HH:MM:SS:Hundredth) 05.07.24 09:47:38:79
- Name of the module that generated the message Communication module
- message class (here: class 1, initialization messages) K01 Message text Network server initialized to "195.30.62.50:1112"
How can I influence the display in the log window?
The display of the log window can be displayed via the menu function "View| log window" on and off.
The message display can be displayed with the menu function "Logbook| stop" are stopped. By selecting the menu function again, the message display is continued. In the meantime, if more than 256 notifications have been received, the oldest ones will be discarded.
The log window shows the messages of all active VisXpert modules. Which messages are issued can be set separately for each module. The setting is either in the corresponding module (see respective chapter), but can also be set centrally from the communication module. For this purpose, the menu function "Logbook| User...". The following window appears:

If a module is selected and the "Edit" button is pressed, the "Log Settings for" window app[Modulname]ears, where you can set which message classes are displayed in the "Display" section. (See also chapter "Functions - Logbook")
Record messages to a log file
If the display of messages in the log window is too fast, or log messages need to be recorded over a longer period of time, it is a good way to output messages to a log file.
The messages are written to a freely selectable text file, which, if the number of messages is not limited (see less), can reach any size.
The format of the messages corresponds to the display in the log window. However, the reporting classes are additionally printed in plain text.
All rows have a uniform length and format. This makes it easier to import the recorded messages into other programs (import format "ASCII fixed").
Via the menu function "Logbook| Log file..." a log file can be selected. By default, no file is selected.

The Suspend Write option is used to temporarily interrupt the message recording. If you want to resume it, you do not need to re-enter the name of the log file.
If the option "Empty file at program start" is selected, all previously recorded messages are discarded when the communication module is restarted and the file is filled with new messages.
If the option "Limit the number of messages to" is selected, the number of messages specified in the input field is recorded. When this number is reached, the oldest message is overwritten. The number of "-1" message counts shown in the figure corresponds to an unlimited number of melds.
File snapshots from the GEFASOFT logbook
Snapshots can be automatically saved to files from the messages visible in the log display. The purpose of this function is to automate the procedure in which, after an error occurs, the user had to paste the contents of the logbook into a text editor via the clipboard and save that text to a file.
Because log classes that contain error messages are typically configured to log to a file, they are also used to trigger snapshots. The logbook can also be set so that the writing of the normal file is off and only snapshots are recorded. To prevent every message from always triggering a snapshot, you can also set a search pattern that must appear in the text of the message.
It usually makes sense not to write the file immediately after triggering a snapshot, but to wait for a few additional messages afterwards to have some follow-up messages in the file ("context" of the message). This is particularly useful because the triggering message can be multi-line and thus prevents subsequent lines from being truncated.
Attempting to capture overlapping snapshots. This means that it tries not to have multiple snapshot files contain the same messages over and over again. This would happen if several triggering messages are logged in quick succession ("follow-up error"). Therefore, triggers are ignored if they are still captured in a previously triggered snapshot that has not yet been written (see "Context" above). Otherwise, the writing of a snapshot is always postponed until it contains no more messages already saved in a previous snapshot. If there is still a snapshot when the logbook is closed, the file will of course still be written, even if it contains some messages that have been saved before.
The snapshot files contain display messages from the logbook. To ensure that they appear in the appropriate colors when reading the file, snapshots can be saved as HTML pages. The HTML code is structured in such a way that the pure text of the messages can be easily extracted from it (e.g. "Delete columns" with a text editor, save the browser as "text only" or convert with an XML parser).
Configuration
This is done via the dialog for configuring the file logging:

The following settings are possible:
- Take a snapshot of the display when file message occurs - only when this option is selected will snapshot files be written at all.
- Triggering message must additionally match this pattern (regular expression) - if this option is selected, messages to be logged into the file are compared with the regular expression specified below and a snapshot is only triggered if the expression appears in the text of the message.
- Number of context messages (after trigger still in the snapshot) - the number of (display) messages that are still waiting for after triggering a snapshot before it is written. The purpose of this information is to also capture the consequences of the triggering event in the snapshot file.
For example, a logbook contains 1024 display messages. Thus, if you set it to 256, there would be 767 messages before the event, the triggering message itself, and 256 messages after the event in the file. - Maximum number of snapshot files - maximum number of snapshot files to keep. Once this is reached, the oldest snapshot files are deleted.
- Save snapshots as HTML - Snapshot files contain colored display messages. Saving in HTML format allows you to keep these colors.
Regular expressions
Regular expressions are search patterns for texts. The syntax used in the GEFASOFT logbook corresponds to the Perl programming language, in whose description it is completely documented and with many good examples. The following short description makes no claim to completeness.
- A "normal" string in the search pattern must also appear in the message text (e.g. fits the pattern "in" the text "leg", but not "Nil")
- Certain characters, the so-called "metacharacters", must be identified in the search pattern by a previous backslash. These are: +?. *^$[](){}| For example,[0] "data" to find "data[0]".
- To search for characters from a specific set, the corresponding characters are noted in square brackets. For example, only messa[xy]ge texts that contain at least one "x" or "y" fit the pattern "" .
- To search for characters that do not belong to a specific set, the set is negated with a "A", e.g. only message[^xy]s that do not contain an "x" or an "y" are suitable for "" only.
- Characters in a specific range can be indicated by the first and last characters associated with the range. "[0-9]" therefore searches for reporting texts in which at least one digit appears. Attention: Umlaute or Ä. unfortunately do not belong to the "" ar[a-z]ea. If "-" is to be one of the characters that is searched for, the minus sign must be removed from its meaning by a backslash befor[a-z]eit: "" searches for messages that contain at least one 'a', a '-' or a 'z'.
For some character sets and their negations, there are abbreviated spellings:
- d: Digits("digits"). Is synonymous with[0-9]
- D: Everything except digits.
- w: Letters, numbers, or underscores ("words"). Is synonymous with[0-9]
- W: Everything except letters, numbers, or underscores. Is synonymous with[0-9]
- N: Line break (does not occur in log lines)
- R: Carriage return does not occur in log lines
- T:Tab
- Q: Page break (does not occur in log lines)
- S: Whitespace. Spaces, line breaks, carriage return, tab, or page break. Is synonymous with[ tnrfv]
- S: Everything except whitespaces. Is synonymous with[^ tnrfv]
- . Any character (except line break).
Some special items can also be specified:
- b: Word limit, e.g. "umb" fits "tree" and "why", but does not "bypass" and "bum" fits "awkward", but not too "barely"
- B: Position of the pattern is not at the word boundary (not at the beginning or end).
- ^: Start of the reporting text. So the message "SPS1 ...", but not "Connection PLC5....." fits the message "SPS1 ...".
- $: End of the reporting text
Keyboard control
A mouse is not always available in industrial environments. Therefore, care has been taken to ensure that the communication module can also be operated by the keyboard alone. The following is a summary of the most important keyboard shortcuts:
Button | Command |
SHIFT + F10 | Open context menu (corresponds to right mouse button) |
F6, TAB | Window change forward (clockwise) |
SHIFT+ F6, SHIFT + TAB | Window change backwards (counterclockwise) |
F5 | Update display in the status window |
SHIFT+ Arrows | Moving the window layout |
ALT + ENTER | Edit properties of the selected object |
INSERT | Create new Project |
CTRL + ENTF | Deleting object |
Functions
File menu
File | Open project | Opens an existing project. |
File | Save project | Saves an existing project. |
File | Copy to | Saves a copy of the current project in a new directory. |
File | Close project | Closes the current project. |
File | Delete | Closes and deletes the current project. |
File | Sign in | Opens the dialog for logging in as a user of the project. |
File | Log out | Logs out the current user of the project. |
File | Change Password | Opens the dialog for changing the password. |
File | Exit | Ends the GraphPic communication module. |
Edit menu
Edit | New | Creates a new element. |
Edit | Delete | Deletes the selected object. |
Edit | Rename | Renames the selected object. |
Edit | Properties | Shows the properties of the selected object. |
Edit | Project Properties | Displays the properties of the current project. You can see from it when, where and by whom the project was created and last edited. On the "Information" page you can enter your own comments and remarks that should be saved with the project. |
Edit | System Preferences | System settings such as the storage location of projects, loading at system start, etc. On the Projects page you can set the directory in which projects are to be saved by default and also specify which actions the communication module should perform before opening a project:Ensure that no files are "read only": All files in the project tree are checked and any "read only" attributes are removed from them. Especially useful if you use CDs to transport the project between computers. In particular, Paradox tables cannot be used properly if the files have this attribute.Make sure that there are no Paradox LCK files left: All directories in the project tree are searched for Paradox lock files and these are removed if necessary. In distributed projects this can cause error messages in the log if the files are in use and therefore cannot be removed. Perform table repair : Performs the GraphPic table repair before loading. You should only activate this option after you have set up table repair for the projects to be started on this computer. You can call up the table repair via the menu item Tools | Table repair.The System start page and the settings it contains are described under Loading the communication module when Windows starts . |
Start menu
Start | Station Start | Starts all sequence modules configured on this station. |
Start | Station Stop | Terminates all active sequence modules. |
Start | Exit editors | Terminates all running editors. |
View menu
View | Online | Switches between displaying the online or configuration status in the list window. |
View | Refresh | Updates the display of the project structure. |
View | project | Shows or hides the display of the project structure. |
View | log window | Shows or hides the display of the log messages. |
View | Toolbar | Shows or hides the toolbar display. |
View | status line | Shows or hides the display of the status line. |
View | in the foreground | Switches the display of the communication module in front of other windows on or off. |
View | in the taskbar | Switches the display of the program icon in the system tray on or off, even when minimized. |
View | Next | Sets the keyboard focus to the next window. |
View | Back | Sets the keyboard focus to the previous window. |
Logbook menu
Logbook | Copy | Copies the contents of the log to the clipboard. |
Log | stop | Pauses or restarts the display in the log window. |
Logbook | User | List of GraphPic modules that use the logbook. (see chapter "How can you influence the display in the log window?") |
Logbook | Settings | Here you can set which messages are displayed that the communication module itself generates. The message classes are selected whose messages are to be displayed in the log window. Under the heading "File", you can specify which messages are to be saved in a log file. Under the heading "Messagebox" you can determine for which messages a message box appears. The display of a message box is only possible for error messages. |
Logbook | log file | See Recording Messages in a Log File. |
Tools menu
This menu gives you quick access to additional tools for project creation (e.g. database explorer).
System variables " $ SystemCommands"
The communication module provides the running GraphPic modules with some system variables , which they can use to read information about the project and to transfer commands to the communication module.
The "$ SystemCommands" group, which is generated automatically when a project is created, contains variables with which the execution of a project can be controlled from its modules. If an application writes to one of these variables, the communication module executes the corresponding command.
Since this control should only take place locally, this is a local group (its name begins with '$'). Because the variables in this group only represent control functions, they do not supply any value.
variable | Type | value | comment |
ActivateModule | String | Module name | Brings the module to the fore. If the module in question is not yet running, it will be started. |
CloseGraphPic | Boolean | TRUE | Ends the current project, then the communication module. |
CloseModule | String | Module name ': ALL:' | Ends the specified module. Ends all modules. |
CloseProject | Boolean | TRUE | Ends and closes the current project. |
LoadProject | String | Filename | Loads the specified project. The currently loaded project is ended. |
ReloadConfig | String | Module name | Forwards the command "Reload configuration" to the relevant module. |
ReloadModule | String | Module name | Terminates the module in question and restarts it. |
Special arrangements for distributed projects
A multi-station project requires some additional considerations and precautions:
- Setting up TCP/IP
- Set up shared access to the project directory
- Set up the Borland Database Engine (BDE) for network access
- Plan global and local groups
- Distribution of modules to stations
Setting up TCP/IP
VisXpert uses only the TCP/IP protocol for communication between stations on the network. If this has not already been done during the installation of Windows, this must be set up later via the Windows Control Panel, the "Network" icon.
If the computers are part of a larger network, the setup of TCP/IP must be agreed with the network administrator to avoid conflicts with existing installations. If the IP addresses are assigned dynamically here (e.g. via DHCP), VisXpert can also use the host names to connect (see "Stations and Connections" for details).
If the computers of the project form an isolated network on their own, the configuration is actually arbitrary. In this case, we recommend that computers assign IP addresses in the range of 192.168.1.1 to 192.168.1.255 (these addresses are reserved by the Internet standards for closed networks without connection to the Internet) and to set a "Subnet Mask" of 255.255.255.0 on all. No other settings (for DNS, WINS, and Routing) are necessary in this case.
Set up shared access to the project files
Furthermore, it is necessary that all computers in the project have access to the project files. We strongly advise against having stations of a project access to different copies of a project at the same time! Not only can this easily cause the stations to use different configurations. Some parts of VisXpert, e.g. the reporting system, require access to common data for all parts to function.
If there is a file server on the network that all stations have access to, you should store both the project and the BDE network control file on it if possible.
If no file server is available, you must select one of the stations in the project to store the project files. It should be a computer that can always stay on (because otherwise the project cannot run on any of the other stations) and which offers enough performance to cope with the load of the other stations on the project files in addition to its tasks in the project.
On this machine, you should share the home directory for VisXpert projects (by default, C:Projects) for network access. It is important that all participating machines have full access to this directory (for sharing drives and directories, see Help for Windows). You can test this by using the Windows editor to store a text file in this directory of the "server" from the other machines.
Whether you connect a network drive to the shared directory of the "server" on the other PCs is not relevant to the functioning of VisXpert.
Set up the Borland Database Engine (BDE) for network access
In order to synchronize the accesses to tables, the BDE also needs a directory, which all participating computers can access. All computers that are supposed to access the tables of a directory at the same time must have the same "network control directory" specified, otherwise access with an error message will be denied.
After installation, this path is generally set to the main directory of drive C:. This setting is not appropriate for access on the network. So you have to change it. We recommend setting up your own directory, e.g. C:NET on the file server or, if no file server is used, on the same machine on which the project files will be located.
We do not recommend that the BDE's "network tax directory" should be a directory in which paradox tables are also located. This has proven problematic in the past under various configurations.
The setting for the "Network Control Directory" can be found under "Configuration| Driver| Native| Paradox" under the name "NET DIR".
Attention: The path for the network control directory must be the same on all computers. This means that you choose, for example, an indication in the form "computer namedirectory name", also on the computer on which the directory is located. In the current version of BDE management, you cannot enter from the selection box.
On the machine where the shared project files are located, you must also set the "LOCAL SHARE" parameter to TRUE in BDE management. This setting can be found in the BDE management under "Configuration| System| INIT".
You can now try to load the sample project supplied with VisXpert once on all computers. To do this, copy the directory of the sample project to the server and start it sequentially on all computers in the project. It is important that you actually boot it everywhere from the server, not from the local hard drive.
Although the sample project contains only one station, the first thing to do is to ensure that all computers can access the project's data tables together, and it is sufficient to check this if all computers can load the project's data tables at the same time.
Global and local groups
In multi-station projects, groups and variables are always known globally. This means that their names are always known on all stations in the project, even if the driver that defines a particular group usually only runs on a single station. At run time, the values of the variables are automatically passed on to the other stations, so that they are also available on all stations.
For some variables, it is undesirable that they always have the same value on all stations of a project. This is especially true for variables that do not represent process values, but represent other functions in the project, e.g. control the image to be displayin the visualization. If the value of these variables were passed on to the network, a change of image on a visualization station would always cause a change of image on all other stations.
For such purposes, you should provide for local groups. Local groups are characterized by the fact that their name begins with a 'A' character. The names of such groups and their variables are also known on all stations, but the values are not passed on between the stations of the project. Instead, the driver module that defines such a group is started on each station where the relevant values are needed.
As a result, you cannot mix local and global groups in a parameterized driver module. If necessary, you must create a second module of the driver for local groups.
For local groups, the memory driver is usually used. This is not a driver in the true sense, but only a function of the communication module, which allows the creation of variables in the main memory of a station. These variables can then be read and written by several applications in the project in order to communicate with each other.
Other drivers, e.g. those that use certain hardware are not designed to manage local groups. On the one hand, only one module per station can usually be configured by such drivers, on the other hand, a driver module configured for local groups would use the same configuration on all stations, e.g. for Arcnet or Profibus, set identical node numbers for all PCs, which is not allowed.
Stations and connections
In order for the required network connections to be established in a distributed project, the required IP addresses and connection options must be available in the project. Also, of course, the current computer must be able to be assigned to one of the stations of the project.
Local station
A project contains information about the IP address as well as the computer name of the PC for each station. In order to assign the computer on which it is running to a station, the communication module uses only the computer name. The reason for this is that the machine name is always present, unique and easily verifiable, which is not the case for the IP addresses in all configurations.
While the communication module always immediately adjusts the computer name of this station to the name of the current PC when it is loaded, for distributed projects, none of the stations can be assigned to the computer on which the project was loaded. On the other hand, you may assign the name of your computer to a second station when editing the station configurations. In both cases, the communication module will alert you and offer you to select the station to configure as the current station:
If you select a specific station here, the communication module sets the computer name in the configuration of that station to the name of your PC and removes it for all other stations that may also contain this computer name. Because the IP addresses are not adjusted and because of possibly deleted computer names, you should check this information in the list of stations.
Indication of IP addresses or Host Names
Even in a multi-station project, there may be stations for which the IP address is not mandatory (e.g. clients in a client/server configuration). Nevertheless, we recommend, as far as possible, always specify all IP addresses.
VisXpert uses the default port: 1112 and the SQL server uses port 1032.
These ports must be shared on the server. With Telnet <Servername padresse="">port number, the client can test whether the program is reachable on the server.</Servername> To do this, VisXpert must be started on the server.
If this port is already in use, it must be adjusted in the registry editor.
Note: If the port has been adjusted in the registry editor, e.g. for example, on 1234, then it must be attached to the IP addresses. Entering the IP address when the port is changed: 123.45.67.8:1234
If IP addresses are assigned dynamically in the target network, you can also use host names instead of numeric IP addresses (i.e. specify "rechner.domain.com" instead of "123.45.67.8" or, depending on the configuration, "Calculator"). In this case, a suitable name resolution service must be available on the network and configured in the Windows Control Panel (e.g. DNS, WINS).
The communication module automatically attempts to convert information that does not represent a correct numeric IP address to a valid IP address by name resolution. However, this can significantly slow down the connection, which is why we recommend that you always use numeric IP addresses.
Connection
In the default settings, the communication module of one station establishes the connection to another when a local program needs any variable values of the other station. If this is no longer the case, it disconnects. In most cases, this behavior is ideal and should not be changed.
Sometimes, however, it may be undesirable, e.g. when the connection in question is made by telephone and thus its construction is slow and the cost of it is high.
It is also adjustable whether the communication module sends so-called life telegrams to another station. These telegrams are used to check the connection status and to reduce the connection by subordinate protocol services (e.g. dial-up network, modem). If switched on, the communication module in question sends such a telegram whenever there has been no traffic on the corresponding connection for an adjustable time (default value 1 minute). If the partner does not respond to this telegram within an equally adjustable time, the connection is disconnected and rebuilt.
You can specify in the properties of each station how this station behaves in the connection to each other station:

There are three options for establishing a connection at the time of the connection:
- automatic: The default behavior. The communication module establishes the connection when it is first needed and de-off when it is no longer in use.
- at startup: The connection is established immediately after the project is loaded and remains in place until the project is closed again. (Note: !!! not yet implemented!!!)
- manual: The connection is made and broken only at the user's request. If variables of the other station are required, the requesting program receives an error message as long as there is no connection.
You can set these options by double-clicking the field in the table, or by selecting the desired connection in the table and then changing the selection in the buttons below.
Distribution of modules to stations
For many modules, the assignment to specific stations is already determined by external conditions or by the requirements for the project. For example, a PLC driver must be always be assigned to the station on which the required hardware is available and the connection to the relevant PLC is possible, a visualization or the display of the reporting system must of course be assigned to all stations on which the relevant display is required.
The assignment of other modules is freer and should be based on availability and performance aspects:
- Modules that provide data to other modules (e.g. drivers), you should assign stations that are always in operation.
- Modules that access files at run time (e.g. post to the reporting system), you should, if possible, run on the same computer on whose data carriers the files are located.
- You should assign modules of the memory driver to the station where most accesses to the corresponding variables take place. Transferring variables over the network takes much longer than their local transmission. If necessary, you can divide the variables into several groups depending on the station and create a separate module of the memory driver for each of these groups.
Client
A client is a station that requests and receives variable values from a server. This means that the variable values are routed to the client's KM via the driver installed on another station (the server) via the KM of that station. This data exchange is carried out automatically by the KM using TCP/IP.
Server
A server is a VisXpert station that provides variable values for other stations. The server typically has a driver installed that returns the variable values.
Read only Station
in VisXpert there is the possibility to set the checkbox "Only Read Station in station properties. This prevents the variables from being written to other stations.
Memory variables located on this station can still be described. The PLC data drivers and OPC client cannot be associated with a Read Station only.
Another way to restrict write permissions is to manage users under Station rights for user roles.

Visualization
Overview
With the visualization module executes an project created with the VisXpert Visualization editor. The VisXpert driver programs provide process values to the Visualization to generate animations on the process graphics and visualize values.
Starting and stopping projects
The visualization process can be started via the communication module under "Stations" with a double mouse click on the desired module. For testing the project, there is also the possibility to use the sequence in the editor via the menu item "File| Test Runtime".
The entire project of the station, incl. of the visualization process, if the station contains such a module, can be started via the context menu with "Start" (click with right mouse button on the desired station). In this case, all modules of the station are started in the order shown in the right pane.
After starting the project, the process image appears with the configured functions. The variables are supplied with current values via the VisXpert driver programs. The objects configured in the windows are displayed with the appropriate dynamics.
To finish the entire project, select "Stop" from the context menu (right-click on the desired station).
For more information about starting and terminating projects, see the "Communication Module" chapter.
Visualization Runtime
Overview
With the visualization module executes an project created with the VisXpert Visualization editor. The VisXpert driver programs provide process values to the Visualization to generate animations on the process graphics and visualize values.
Starting and stopping projects
The visualization process can be started via the communication module under "Stations" with a double mouse click on the desired module. For testing the project, there is also the possibility to use the sequence in the editor via the menu item "File| Test Runtime".
The entire project of the station, incl. of the visualization process, if the station contains such a module, can be started via the context menu with "Start" (click with right mouse button on the desired station). In this case, all modules of the station are started in the order shown in the right pane.
After starting the project, the process image appears with the configured functions. The variables are supplied with current values via the VisXpert driver programs. The objects configured in the windows are displayed with the appropriate dynamics.
To finish the entire project, select "Stop" from the context menu (right-click on the desired station).
For more information about starting and terminating projects, see the "Communication Module" chapter.
Operation during Runtime
Overview
The operating options in the VisXpert visualization program are determined as far as possible by specifications in the VisXpert editor (e.g. activation of the menu in the sequence, password functions...).
Mouse
You can use the mouse to position the mouse pointer on the screen, which is displayed as an arrow.
The following operating functions are possible:
- operate the menu (if the menu is shared)
- Press buttons (and thus trigger the function defined during dynamization)
- Activate input fields
- Bring windows to the foreground
- Move windows
- Resize the window, close, move, shrink to icon, and so on, close, move the Windows window for the VisXpert flow.
Press buttons
In the editor, functions can be assigned to individual elements, which are triggered in the process with the mouse. These elements are:
- Button (as button)
- Slider (for value entry)
- Rectangle (as button)
- Round corner (as button)
- Ellipse (as a button)
- Bitmap (as a button)
- Polygon (as button)
Activate input fields
An input field can be activated directly by clicking in the field. By pressing the Tab key, several fields can be selected in order.
As a second option, activation via a hotkey, in conjunction with the "Edit" system variable, is available.
If the value range is exceeded for input fields, VisXpert reports with a corresponding message. The previous variable value is retained.
Bring windows to the foreground (activate)
As soon as you place the mouse pointer on any window on the screen and click on this window, the window is brought to the foreground.
An exception exists if the active window has the "Modal" option. A modal window can only be deactivated by a switching function and not by activating another window.
All operating functions are only applicable to the active window.
Move windows
If the active window has a title line, it can be positioned to any place on the screen. To do this, hover over the title bar and move the window to the desired location with the left mouse button pressed.
Change the size of the window
If the window has a double frame, it can be resized. To do this, hover over the side of the border that you want to change until the pointer changes the shape of a double-headed arrow. Now drag the frame to the desired size with the left mouse button pressed.
Windows Features
On Windows, you can use the window of an application
- change in size
- Move
- Reduce to symbol size
- switch to other applications
Use these features as described in your Windows documentation. These functions can be partially prevented by presets in the editor.
File menu
File|Login
You can use this command to enter your password. For the time period specified in the editor, you can perform all password-protected functions whose password classes are associated with your password.
After the set time has elapsed, the password is automatically invalidated. To perform password-protected functions, you must re-enter your password.
If you try to perform a password-protected function and no password is valid or the valid password is not assigned the corresponding password class, you will be automatically prompted for a password.
File|Logout
This command immediately invalidates the current password.
File|Stop
This command terminates the VisXpert expiration program and any project that may be started.
Options menu
Options| Frame
If this menu item is selected, input elements that are under the mouse cursor are bordered. The default for this menu item can be specified in the project editor.
Options| Log settings
The system messages of the expiration program can be written to a file and output in the logbook notification window.
Status menu
Status| Groups
You will receive an overview of the
- groups present in the project,
- the active groups and
- the affiliated groups.
You will receive an overview of
- the variables present in the project,
- the active variables,
- the variables associated with the project and the
- the variables requested by the project.
Value transfer of variables
Valid values
- The value of the corresponding VisXpert variable is converted to the new value that the driver returns.
- If you activate the logbook messages of the class "Variables" via the communication module, the message appears in the logbook:
- "Variable <Gruppenname>:<Variablenname> Data: <Wert>"</Wert> </Variablenname> </Gruppenname>
Bad values
- For a string variable, the value of the corresponding VisXpert variable is set to a null string.
- With Bool's integer and floating-point variables, the last value is retained, i.e. the value is not converted.
Additional programmes
Script debugging
The debug function for tracing and analyzing scripts is an important tool for checking script processing and error analysis.
To get the debug function for the programmed scripts, all scripts in the visualization editor with active "Create debug info" have to be translated again.
With this generated debug info, the functions "Script variables" and "Trace scripts" can be used in the sequence of the visualization via the menu item "Status".
Script variables
Via the menu item "Status| Script Variables" opens a window:

View all script variables with the respective number of passes.
For each selected script variable, the read and write variables with the corresponding status are displayed.
The "Automatically update" selection automatically updates the selection display.
Trace Scripts
Via the menu item "Status| Trace Scripts" can be opened to track the scripts.
Tracing can be used to accurately process scripting, write and read to/from variables, and display the values of read, write, and local variables.
Basically, care must be taken to ensure that when tracing is used, the scripts must be traversed, i.e. for e.g. Window timer scripts must be open. The "View" menu item allows you to switch between the "Script List" and the "Tracing".
The script list shows the timing of all active scripts. Tracing represents the timing of the active scripts with the values of the variables.
Messages
"Disconnect: Group "Name" to Driver "Driver Name"
Class: Driver message
Meaning: Group decoupled from driver.
"GPVISU. INI" could not be opened
Class: Configuration error
Meaning: GPVISU. INI file could not be opened.
Fixed:Verify that the file exists in the project eresign.
Unsubscribe Password: "Name"
Class: Password messages
Meaning: The current password has been logged out.
Login Password: "Name"
Class: Password messages
Meaning: The password "Name" has been logged out.
Login invalid password: "Name"
Class: Password messages
Meaning: Attempt to log in invalid password "name".
Bitmap file: "Name" is not a BMP file or is corrupted
Class: Configuration error
Meaning: The specified file is not a BMP file.
Remediation: Check the BMP file and, if necessary, Replace.
Bitmap file: "Name" could not be opened
Class: Configuration error
Meaning: The specified file is not in the specified directory.
Fixed: Move or copy bitmap file to the correct directory.
CONNECT: Group "Name" to driver "Driver name"
Class: Driver message
Meaning: Group connected to driver.
CONNECT: Group "Name" to driver "driver name" failed
Class: Driver error
Meaning: Group with driver not connected.
Fixed: Install appropriate drivers.
File not found
Class: Configuration error
Meaning: Feedback in case of incorrect program call.
The specified "name" file does not exist
Class: Configuration error
Meaning: The file specified on the command line could not be found.
Fix: Check the setting.
VisXpert driver "Name" not installed
Class: Driver error
Meaning: The specified driver is not installed.
Fix: Install drivers.
Group "Name" Error is not in the connection table
Class: Configuration error
Meaning: There is no corresponding module entry in the specified connection table.
Fix: Correct connection table.
INI file for "project name" could not be opened
Class: Configuration error
Meaning: The project INI file could not be opened.
Fix: Move project INI file to the correct directory.
No value: "Name"
Class: Conversion error
Meaning: for example, value from an empty field of a database
Object: "Name" has size and fill degree dynamics
Class: Project Error
Meaning: Object: "Name" has size and fill degree dynamics.
Fixed: Delete dynamics and, if necessary, redefine.
Path not found
Class: Configuration error
Meaning: Feedback in case of incorrect program call.
Write Variable "Group Name:VariableName" Fatal Error:..."
Class: Driver error
Meaning: external error from the driver
Write Variable "Group Name:VariableName" Error:..."
Class: Driver error
Meaning: external error from the driver
Driver "Name" CLOSE ...
Class: Driver message
Meaning: Driver "Name" has been closed.
Driver OPEN "Name" Driver Handle=... Managed
Class: Driver message
Meaning: Driver "Name" could be opened.
Driver OPEN "Name" Driver Handle=... Failed
Class: Driver error
Meaning: Driver "Name" could not be opened.
UNADVISE: "Name" hDrvr = ...
Class: Driver message
Meaning: Driver became 'unadvised'.
Unknown. EXE Type
Class: Configuration error
Meaning: Feedback in case of incorrect program call
Insufficient password to open windows
Class: Password messages
Meaning: The current password has insufficient rights to open the corresponding window.
Fixed: Enter the correct password.
Invalid. EXE File
Class: Configuration error
Meaning: Feedback in case of incorrect program call
Invalid variable connection of object: "Name"
Class: Project Error
Meaning: Dynamics of the object is invalid.
Fixed: Delete dynamics and, if necessary, redefine.
Variable "Group Name:VariableName" Data:...
Class: Variable value change
Meaning: Receive variable value
Variable "Group Name:VariableName" empty value
Class: Variable value change
Meaning: For example, receive value from an empty field of a database
Variable "Group Name:VariableName" Poke:...
Class: Variable value changes
Meaning: Variable value described
Variable "Group Name:VariableName" Fatal Error:..."
Class: Driver error
Meaning: External error from the driver
Variable "Group Name:Variable Name" Error:..."
Class: Driver error
Meaning: External error from the driver
Variable "Group Name:Variable Name" Error: Get value in wrong format
Class: Project Error
Meaning: Driver returns different variable type than expected.
Fix: Check and correct variable.
Connect Group "Name" Error...
Class: Driver error
Meaning: Unable to connect the group to drivers.
Fix: Check driver work tables.
Try to load an application in Real Mode written for Protected Mode"
Class: Configuration error
Meaning: Feedback in case of incorrect program call
Attempting to dynamically integrate a task
Class: Configuration error
Meaning: Feedback in case of incorrect program call
Attempting a second instance of a . EXE file containing multiple wr
itable data segments
Class: Configuration error
Meaning: Feedback in case of incorrect program call
Value of "Name": Range limit when reading over or over undercut
Class: Conversion error
Meaning: Wrong type of reading variable
Value of "Name": Range limit when writing over or undercut"
Class: Conversion error
Meaning: Range limit exceeded
Value of "Name": read from variable without type
Class: Conversion error
Meaning: Variable has no type.
Fix: Check and correct variable.
Value of "Name": write to variable without type
Class: Conversion error
Meaning: Variable has no type.
Fix: Check and correct variable.
Value of "Name": Conversion to Boolean value unsuccessful:
Class: Conversion error
Meaning: Value cannot be converted to Bool's value.
Value of "Name": Conversion to floating point number unsuccessful:
Class: Conversion error
Meaning: Value of a string variable cannot be converted into a flow score.
Value of "Name:" Conversion to integer unsuccessful:
Class: Conversion error
Meaning: Value of a string variable cannot be converted to an integer.
Value of "Name": Conversion to floating score unsuccessful:
Class: Conversion error
Meaning: Value of a string variable cannot be converted to a floating point score.
Too little free memory
Class: Configuration error
Meaning: Feedback in case of incorrect program call
Visualization Editor
The visualization allows you to display a graphical image of your process state. A distinction is made between the visualization editor and the visualization sequence. (The Visualization Editor completes the entire definition of your process images. The visualization process dynamically represents the process image in operation.)
Each process image is made up of different elements (e.g. elements, pointer instruments, bitmaps, etc.) Modeled. For this purpose, the editor provides an extensive item library. Each element has specific properties that determine its appearance on the screen. Basically, such properties can be set statically and dynamically. Static setting means that the property is set during creation and does not change in the flow. Dynamic setting, on the other hand, depends on variables for certain element properties. In the flow, the member properties change depending on the value of the associated variables.
This gives you a moving process image that dynamically changes its appearance during the visualization process, depending on the state of your process. Your visualization project is thus a one-to-one illustration of your process. This means that two steps are required to create this one-to-one image of your process:
- Define all elements and their properties that determine appearance
- Dynamizing the elements, i.e. Definition of how individual elements should change their appearanc
e when certain process events take place, or the effect that user input should have to the outside world.
Create a process image
Drawing and editing elements
The drawing mode of VisXpert can be activated via the toolbar or the edit menu by selecting the desired item type.The element can then be drawn anywhere in a window. To do this, hover over the desired point on the artboard and press the left mouse button. If the mouse button is held, drag the pointer until the element is stretched to the desired size (the dashed outline shows you the momentary size of the element). After letting go of the left mouse button, the new element appears on the screen with preset properties (color, linetype, fill pattern, etc.).
Exception: For bitmaps and pointer instruments, just click on the position where you want the left, upper corner of the element to lie.After drawing an item, it automatically switches to select mode. To suppress this change
(e.g. drawing several elements of the same element type), it is sufficient to press the Shift button before selecting the element type and hold down this key while drawing.
Cursor
Depending on the command selected, the mouse cursor appears
- as an arrow (for selecting elements)
- as a crosshair (for drawing an element of the selected element type)
- as a crosshair over a marker point of the selected element (to scale an element)
- as a quadruple arrow (while moving selected items)
- as a double arrow (above the double frame of a window to resize)
Selecting an item
In order to change the properties of an element, the element must be selected, i.e. "selected".
Select the "Edit| Select" (or the corresponding icon from the tool box). Point to the
desired item and press the left mouse button. The item now appears with marker points.
The following functions can be applied to a selected element:
- Changing size
- Move item
- Change properties (line, color, etc.)
- Cut, copy, delete, duplicate item
- Edit graphics
- Editing dynamics
You can select several items by selecting additional elements with the "Shift" button pressed.
The following functions can be applied to such a selected member set:
- Move items
- Change properties (line, color, etc.)
- Deleting items
- Group items
If several elements have already been selected, individual elements can be deselected by clicking with the
"Shift" button pressed.
Move an item
To move an item, select it, then hover over a location within the marker points of the selected item, and drag the element to the desired location with the left mouse button pressed. Whether the item can be moved immediately with the selection process, or whether a second operation of the mouse button is required, depends on the under "Options| Editor" preset.
If you have selected multiple items, the entire member set is moved.
Scaling Items
You can resize an element by dragging the marker points of a selected element. To do this, hover over a marker point (the mouse pointer is then displayed as a crosshair) and drag the point with the left mouse button pressed until the element reaches the desired size.
To change a dimension, you use the marker points at the side boundaries of the member, and to change both dimensions
at the same time, you use the marker points at the corners of a member. During dragging, the outline of the element is displayed, after the mouse button is released, the element appears in the new size. The footer displays the current scale factor for The X and Y directions.
Grouped items are scaled together. The operation is as with individual elements.
Each selected item has at least 8 filled marker points. Individual elements have additional markers without fill. These marker spointers identify special properties of an element (vertices of a polygon, boundary points of an arc, and so on). You can change these properties by dragging at these marker points. Note: The Pointer Instrument element cannot be scaled.Available items
General
Below is a summary of all available items and their specific properties. It also describes how to create and edit each item in detail. All commands for creating the different items can be found in the "New" menu. Already created elements can be edited later via the menu "Properties" (also accessible via pressing the right mouse button).
Window
Via the menu item "Window| New" you can create a new window. The attributes of the window (frame, size, etc.) are displayed via the "Properties | window" is set.
Once created, a window can be moved on the screen, resized, and activated (brought to the foreground). You move the window with the mouse button in the title bar, resize it by dragging the double border, and select the window by clicking in the window.
Tip: If individual windows need to be opened and closed frequently in the sequence, it is recommended to provide buttons or buttons for this, which are hotkeys provided with "Graphic Editing".
Hotkeys
After clicking on the "Hotkey" button, the "Key Combination" dialog box appears in which you can select a way from the list. in conjunction with The Ctrl, Alt, or Shift keys. Since all hotkeys of the windows visible on the screen are active, it is recommended that you make sure that no hotkeys of the windows on the screen are duplicated during configuration. If the assignment is duplicated, the hotkey of the first open window is active.
Line
After selecting the command, the mouse pointer appears as a crosshair. At the desired starting point of the line, press the left mouse button and move the mouse pointer to the desired end point of the line while the left mouse button is pressed. After the mouse button is released, the line is drawn with the default attributes.
Arc
After selecting the command, the mouse pointer appears as a crosshair. At the desired starting point of the arc, press the left mouse button and move the mouse pointer to the desired end point of the arc when pressed left mouse button. After letting go of the mouse button, an arc (1/4 circumference of an ellipse) is drawn with the default attributes.
In addition to the usual marker points for scaling an element, unfilled marker points also appear. Dragging at these marker points determines the radians.
Polyline
After selecting the command, the mouse pointer appears as a crosshair. At the desired starting point of the line, briefly press the left mouse button. Move the mouse pointer to the other vertices of the line train, and press the left mouse button briefly. The drawing of the line train is terminated by a double click with the left mouse button at the end point of the line move. The line is drawn with the default attributes.
In addition to the usual marker points for scaling an element, unfilled marker points also appear at the vertices. By dragging at these marker points, individual vertices can be moved retrospectively. By dragging at the filled marker points, the line train can be increased proportionally or reduced in size.
Polygon
After selecting the command, the mouse pointer appears as a crosshair. Briefly press the left mouse button at the desired starting point of the polygon. Move the pointer to the other vertices of the polygon, and briefly press the left mouse button. The drawing of the polygon is terminated by a double click with the left mouse button at the last vertex of the polygon. The connection to the starting point is automatically established. The polygon is drawn with the default attributes.
In addition to the usual marker points for scaling an element, unfilled marker points also appear at the vertices. By dragging at these marker points, individual vertices can be moved retrospectively. By dragging at the filled marker points, the polygon can be increased proportionally or reduced in size.
Rectangle
After selecting the command, the mouse pointer appears as a crosshair. At a corner of the rectangle, press the left mouse button and move the mouse pointer to the diagonally opposite corner of the rectangle while pressing the left mouse button. After the mouse button is released, the rectangle is drawn with the default attributes.
From the "Properties| Graphic" can also be defined as a hotkey. In the sequence, the function assigned in the dynamics dialog is executed by pressing the key defined as a hotkey.
Panel
A 3D panel can be created analogously to a rectangle. From the "Properties| Graphic" can be determined some additional features:
By appropriately selecting the edge color left/top and edge color right/bottom, the panel can be displayed "sublime" or "deepened". The degree of "elevation" or "deepening" can be defined by the border width in pixels.
A checkbox can be used to activate an option for rounded corners. The element can also be defined as a hotkey. In the sequence, the function assigned in the dynamics dialog is executed by pressing the key defined as a hotkey.
Rundeck
The round corner corresponds to a rectangle with rounded corners.
Ellipse
After selecting the command, the mouse pointer appears as a crosshair. Imagine a rectangle enclosing the ellipse, and at a corner of this rectangle, press the left mouse button and move the mouse pointer to the diagonally opposite corner of the rectangle while pressing the left mouse button. After the mouse button is released, an ellipse is drawn that touches the sides of the imaginary rectangle. The display is done with the default attributes.
From the "Properties| Graphic" can also be defined as a hotkey. In the sequence, the function assigned in the dynamics dialog is executed by pressing the key defined as a hotkey.
Sector
After selecting the command, the mouse pointer appears as a crosshair. Imagine a rectangle that encloses a quadrant of an ellipse. At a corner of this rectangle, press the left mouse button and move the mouse pointer to the diagonally opposite corner of the rectangle while pressing the left mouse button. After letting go of the mouse button, a quadrant of an ellipse (1/4 ellipse) is drawn. The display is done with the default attributes.
In addition to the usual marker points for scaling an element, unfilled marker points also appear on the ellipse circumference. By dragging at the unfilled marker points, the opening angle of the sector can be changed retrospectively. By dragging at the filled marker points, the sector can increase or increase the size of the reduced in size.
Segment
After selecting the command, the mouse pointer appears as a crosshair. Imagine a rectangle that encloses a quadrant of an ellipse. At a corner of this rectangle, press the left mouse button and move the mouse pointer to the diagonally opposite corner of the rectangle while pressing the left mouse button. After the mouse button is released, a segment of an ellipse is drawn, with the sekante being the diagonal of the imaginary rectangle. The display is done with the default attributes.
In addition to the usual marker points for scaling an element, unfilled marker points also appear at the intersections of the ellipse circumference and the seedge. By dragging at these marker points, these intersections can be moved later. By dragging at the filled marker points, the segment can be increased proportionally or reduced in size.
Text
After selecting the command, the mouse pointer appears as a crosshair. At a corner of the text window, press the left mouse button and move the mouse pointer to the diagonally opposite corner of the text window while pressing the left mouse button. After letting go of the mouse button, the text window is drawn with a dashed border.
In the text window, the text content "TEXT" is displayed with the default attributes. The text content can be used by selecting "Properties| graphic". The text content can be pasted from the clipboard. The text can be aligned to the left or right edge of the text window. The color of the texts can be changed by selecting "Properties| line color". Font type, font (bold, italic) and font size can be used by selecting "Properties| font".
The text content is automatically wrapped in the text window at word boundaries (line break). If the length of a word exceeds the width of the text window, the word is displayed incompletely. Please note that the formatting of the text may change due to the subsequent assignment of a different font or font size.
A line break within the text window can be enforced by entering Ctrl-Return.
The representation of integers can be octal, decimal or hexadecimal. For floating-point numbers, the number of comma digits can be specified.
Bitmap
Externally created graphics can be read into VisXpert as bitmaps in BMP format. Only the file name and access path of the bitmap are stored in the project. Thus, it is possible to change bitmaps with other programs without making changes in the project itself.
Attention: The path under which the bitmaps of the project must be located is fixed to "... GP7ProjectsPROJECTEprojektnameUSER-DATBITMAPS"! That is, all bitmaps of the project must be stored under this path.
After selecting the command "New| Bitmap" appears a selection window with the list of available *. BMP files.
In addition, bitmaps with the following formats can be used:
- Portable Network Graphics Format *.png
- Jpeg *.jpg
- Encapsulated Postscript File Format *.eps
- Graphics Interchange Format *.gif
- ZSoft Paintbrush Format *.pcx
- Tagged Image File Format *.tif
After selecting the desired bitmap, the mouse pointer appears as a crosshair. Move the mouse pointer to the upper left corner of the desired position and briefly press the left mouse button. The bitmap is transferred as an element to the window. Bitmaps can be scaled by dragging at the marker points.
From the "Properties| Graphics" can also be defined as a hotkey. In the sequence, the function assigned in the dynamics dialog is executed by pressing the key defined as a hotkey.
Caution: The use of bitmaps consumes system resources from Windows. Therefore, only a few bitmaps and only bitmaps with a low color resolution (16 or 256 colors) should be integrated into a VisXpert project.
Button
After selecting the command, the mouse pointer appears as a crosshair. At a corner of the button, press the left mouse button and move the mouse pointer to the diagonally opposite corner of the button while pressing the left mouse button. After letting go of the mouse button, the button is drawn with the label "Button". This label can be used via "Properties| graphic". The orientation of the text is definitely centered.
From the "Properties| Graphic" can also be defined as a hotkey. In the sequence, the function assigned in the dynamics dialog is executed by pressing the key defined as a hotkey, and thus corresponds to the clicking of the button with the mouse.
Slider
In VisXpert, horizontal and vertical sliders for variable "in/out" are available. Select the appropriate slider. At a corner of the slider, press the left mouse button and move the mouse pointer to the diagonally opposite corner of the slider while pressing the left mouse button. After letting go of the mouse button, the slider is drawn.
The following properties are available via "Properties| Graphic" selectable:
The range of values identifies the Min and Max values of a slider and is automatically pre-set with MIN=0 and MAX=1000 when creating a slider. Please note that the min values are the controller position at the top (vertical) or on the far left (horizontal). Tracking on determines whether the value is updated continuously (check mark set) or once when the mouse button is released after moving.
Caution: If you use the slider at the same time to output and output external variable values, you should not use "Tracking on" because of the feedback that occurs (no check mark).
Input/output field
After selecting the command "New| input/output field" the mouse pointer appears as a crosshair. At a corner of the input/output field, press the left mouse button and move the mouse pointer to the diagonally opposite corner of the field while pressing the left mouse button. After releasing the mouse button, the input/output field is drawn.
For input/output fields, the font type, font (bold, italic) and size can be changed by selecting "Properties| font".
Via the menu item "Properties| Graphic" opens the "Edit Graphics" window. The text and text background colors can be specified there. Different colors are possible for the input and output mode for better clarity.
Caution: The field height must be a certain minimum height, depending on the font and size you choose. For the default system font, this minimum height is 10 pixels. The field width must also have a minimum width for the input to function correctly.
In/out fields of a window can be protected by passwords. The password class is assigned via the "Properties| Window".
In the process, an input field can be activated via two variants:
- by clicking on the corresponding field
- by setting the system variable "Edit" via hotkey. This function activates the first field (the furthest "front") in the active window.
Switching between the input fields is possible with the <TAB>key.</TAB> The input is completed via <ENTER>.</ENTER>
On Screen Keyboard
In order to be able to operate input/output fields via on-screen keyboard, the following configurations are required in the editor:

If the "Activate on-screen keyboard" check mark is set, the on-screen keyboard is activated in the sequence as soon as the system variable "System:Edit" is "True" and the input/output field receives the focus.
Format Strings
The output of values in text and input/output fields can be formatted by format strings, e.g. with a unit of measurement or with leading zeros. A format string is displayed via the menu item "Properties| graphic" in the Edit Graphic window.
Please note: Depending on the data type of the variables that are used in the dynamics dialog with the text or one/output field, different format settings are allowed in the format string. VisXpert cannot verify the syntax of the specified format string.
Attention: Invalid information in the format string can lead to undefined system states! A format string passed to the string formatting routines can contain two types of elements:
- simple characters
- formatting instructions.
Simple characters are copied to the resulting string without modification, e.g. a unit of measure appended to the output value. Formatting statements are always preceeded by the character '%'. They are edited one at a time to format the output value. Format statement syntax:
[Sign]"%"[Alignment][width]["."Prec]Type[Char]
Prameters in square brackets are optional, but the order must be followed. The formatting statement starts with the "%" character and ends with the type.Characters before the % character and after the type specification are copied into the resulting string.Characters: Any strings, e.g. "°C"%: Start of formatting statement
Allingment
- "+": Numeric output with sign (positive and negative). The output value is always displayed withsign (positive and negative sign)
- "-": Value is displayed left-aligned
- "0" value is filled left-aligned with zeros. The output is filled left-aligned with leading zeros. Width:The width specifier specifies the minimum number of characters thatthe output value contains, including signs and any "simple" characters. Specifying the alignment specifiers "-" and "0" is only useful if a width specifier is also specified as Width. If the output value contains fewer characters than the width specified, the output string is filled with blank characters on the right when the output string is left-aligned, and left-aligned with the character "0" if displayed with leading zeros. If the value contains more characters than is specified in Width, all characters are still output
Width:
Minimum number of characters that are output
Precision:
Precision, is introduced with ".". For integer values, the precision specifier specifies the minimum number of digits that are represented. Contains fewer digits than ". Prec", the rest is filled left-aligned with zeros.
For floating-point values, the precision specifier specifies the number of decimal places that are represented. If the precision specifier is not specified, the default value of 6 applies to the type "e" or "E" to the type "f" of 2 decimal places.
Type:
output type of the resulting string. Permitted are:
- "e" Scientific edition (e.g. "0.123e+123")
- "E" Scientific edition (e.g. "0.123E+123")
- "f" floating-point number
- "ld" integer with sign
- "lu" integer without sign
- "lx" hexadecimal output with small letters
- "lX" hexadecimal output with large letters
- "s" string output
When output as a hexadecimal number, you can choose whether the letters should be displayed
small ("lx") or large ("lX"). For example, the value of the linked variables is 1234.
- %ld €: 1234 € Integer with attached "€
- "€%ld: €1234 integer with leading "€"%+
- 7ld + 1234 unsigned integer, 7 characters
- %+7.5ld + 01234 integer with sign, 7 characters and 5 digits
- %-7ld€ 1234 € Integer left-aligned with attached "€", total 7 characters
- %.4f 4 decimal places
- %07ld 0001234 integer with leading zeros, 7 characters
- %2ld 1234 specified width less than numberof characters
- %lx 4d2 Hex number with small letters
- %lX 4D2 Hex number with large letters The value of the linked variable is -1234.
- %lu 4294966062 integer is interpreted without sign.
When output in the scientific representation exponential form, you can choose whether the exponent should be represented with a small "e" or with a large "E". For example, the value of the linked variable is 1234.56.
Display in exponential form
- %e 1.234560e+03 Standard representation
- %+e +1.234560e+03 Representation with pos. Sign
- %-15e°C 1.234560e+03 °C left-aligned, min. 15 characters
- %-15.2e°C 1.23e+03 °C left-aligned, min. 15 characters 2 decimal places
%010.2e°C 001.23E+03°C leading zeros, min. 10 characters and 2 decimal places Representation as floating point number - %10.2f°C min. 10 characters and 2 decimal places
When Output as String representation, any existing "simple" characters are copied to the string in any case.
- %s€ String€ String variable and simple characters are copied together
- %10s€ String€ right-aligned, min. 10 characters
- %-10s€ String € left-aligned, min. 10 characters
- %5.5€ String€ min. 5 characters, of which max. 5 from thevariable
Escape Sequences
For the representation of the "%" character in the output string, the statement "%%" must be used in the format string, because the simple "%" character indicates that a formatting statement follows. Permissible parameters for variable type "integer"
Sparkline
Sparklines can be used to display temporary historical values. From Visustart, the values are logged with. Edit Graphics allows you to set tooltip, cursor as ruler, and scale. In the tooltip, placeholders such as variable: .!varname can be used to displa
y duration: .!
duration. Additional values using th
e ruler.Value: .!value- Time: .!timestamp. The r
equired resolution corresponds to one value per x-axis pixel. With a width of 120 pixels and a time range of one minute, a value is logged every 500 ms.
Data grid
The DataGrid control in Windows Forms displays data in a group of rows and columns. The simplest case is when the datasheet is bound to a data source that consists of only a single table with no relationships. In this case, the data is represented in simple rows and columns as in a spreadsheet.
Menu
The menu function can be used to create a mask navigation in the style of buttons or menus. The basic elements can be designed graphically freely. The opening direction for menu and submenus are adjustable. The application-wide menu structure is edited via "Properties/Menu". In the menu items, a menu item from the menu structure is specified as the start reference.
You can edit the menu structure via "Properties/Menu".
The menu item "PopupMenu" is similar to a folder on Windows, with "PopupMenu/Next Level" you can create subfolders.
The menu items are similar to the files in the folder.
After selecting the menu item, you can enter the desired functions via "Dynamics" below.
Element Attributes
The commands of the Properties menu can either be applied to selected items or saved as presets for all subsequent operations.
If you have selected one or more items, the commands refer only to changes to the selected items. The selected presets remain unchanged. If no element is selected, use the commands to change the default. The attributes of the preset are applied to all subsequent drawing operations.
The following attributes are used when drawing each element:
- Style
- Color
- Texture
- Fill
- Font
Style
The command calls a selection of different line types. The line thickness (1-32 pixels) can also be selected for the line type "Solid".
For the Invisible line type, the lines in the editor are dotted in red in the line color.

Color
The command calls a color palette with base colors. Define Colors >>expands the dialog box with a color spectrum in which you can define colors yourself. Add Color adds the self-defined color to the palette and allows you to select the base colors at the click of a mouse. The selected color is applied along with the set line style to represent the element boundaries.
Texture
This command offers a selection of available fill patterns. The dialog box displays the combination of the selected fill pattern with the set fill color.
For the Transparent fill pattern, the fill color is hatched in the color red.

Fill
As with "Properties| Line Color" a dialog box appears to select the fill color. Here, too, you can define your own colors. The selected color is applied to the fill of elements along with the set fill pattern.
Font
This command calls a list of all available fonts. A font size can be selected for each font. In addition, the options can be set bold, italic, underlined and crossed out. The font and size you choose appear in the Monitor Fixer, and are applied to text elements along with the pen color you set.
Creating multilingual applications
Exporting and Importing Texts
VisXpert allows you to Edit, Export and Import Texts that are used in the Process Grafics. The texts can be edited via the "File/Translation Editor" menu option. In order to have the texts translated from External, they can also be exported, edited with Excel and imported again.
When you run the text export, all text displays, window texts, as well as button texts, Tooltipes and Format strings are exported to a TSV (Tabulator separated file) file "Visu_Texte.csv" in the project visualization directory. These texts can then be edited for multilingualism and read back into the editor via the import function.
Export file Format
The export file is an Tabulator separated file, that contains one column for the native text, and then one column for each configured project language. All Values are separated by an "Tabulator"
Columns
The first column in the Export file contains the text identifier that identifies the Window and Object where the text belongs to. The second column contains the native text, which is used when no corresponding language text is configured. After that, the export file has a column for each project language containing the Language LCID and Short abreviation:
langid:<id>_<txt> (id contains the unique language Id, txt contains the abbreviation of the language, e.g.</txt> </id> en for German)
element name/winname | Native_Text | langid:7_de | langid:9_en | langid:10_es |
FCInfo.Panel_2019.Text | Module Number | Modul Nummer | Module Number | Numero del Modulo |
FCInfo.Panel_1836. Text | Symbol/Tag | Symbol/Tag | Symbol/Tag | Symbol/Tag |
FCInfo.Panel_1990. Text | Description | Beschreibung | Description | descripcion |
FCInfo.Panel_2018. Text | Periphery | Periferie | Periphery | periferia |
Escape Sequences
Multi-line texts (such as the buttons with the additional hotkey label) by the escape character '|'. Since Tabulator is being used as Value separater, tabultors have to be escaped by '^'.
- New line: |
- Tabulator: ^
Editing Language files

When editing the language files from the Visu Editor, the file is automatically opened by the "VisXpert Translation Editor". This editor allows for basic editing of all language texts. This editor allows for basic filtering, ordering and editing of the csv file.
The files can also be editing manuall by using Microsoft Excel. When opening an exported csv file, Excel usually automatically detects the value separator and directly allows you to edit the content of the file. Of course the files can also easiely edited by using simple text editors such as "Notepad" or any other simple text editing application.
Visu operation
Objects
Objects are instances of classes and can be created in the window designer by the menu item "New| Object" can be inserted. However, only classes that contain at least 1 graphical element can be inserted.
When you insert an object, the variable base name is asked (this is then part of the variable name of the VisXpert variable). The variable base name can be changed later. Changing the variable base name will connect the dynamics and scripts to class variables
For the objects, the class variables must be replaced by VisXpert variables.
The text of the scripts in the object is not accessible (only for the corresponding class).
The dynamics of the graphical elements and the dynamics of the object are not accessible (only for the corresponding class).
Hotkeys in the Editor
- F2 Find a variable
- F3 Find next
- F4 Replace a variable
- F10 Activate menu bar
- F12 Switch between editor and class designer
- Shift-Del, Ctrl-X Cut-ClipBoard
- Ctrl-Ins, Ctrl-C Copy ClipBoard
- Shift-Ins, Ctrl-V Paste from ClipBoard
- Shift- [arrow keys] edit element size
- Shift-A break grouping
- Shift-G group elements
- Shift-H Equal spacing horizontally
- Shift-S Select all elements
- Shift-V Equal vertical distance
- Ctrl-A Align to the grid
- Ctrl-D call dynamic box
- Ctrl-G call graphic box
- Ctrl-L delete all elements
- Ctrl-R Rotate the selected element by 90 °
- Ctrl-S call script box
- Ctrl-T Execute Runtime
- Ctrl+ Selected element one level forward
- Ctrl- Selected element back one level
Toolbar
A number of commonly used functions can be found in both the menus and the toolbar in the form of graphical symbols. The toolbar is used to quickly select these functions and can be displayed and hidden in the "View" menu.
Quick dialing of functions
To quickly select functions, press the right mouse button at any position in the current window. A pop-up menu appears with the available editing functions for the active window or the selected element. The selection of a menu item is done in the usual way with the left mouse button.
File Functions
File| Save
Use this command to save changes to the project you are currently editing.
File| Export
See chapter "Import and Export".
File| Import
See chapter "Import and Export".
File| Update| Window
This allows you to re-date a window that has been edited and exported elsewhere.
File| Update| Class
Can be used to re-date a class that has been edited and exported elsewhere.
File| Update| Scripts
Allows you to re-date scripts that have been edited and exported elsewhere.
File| Implementing project size
This function converts an existing project to operation with a different screen resolution.
This means that a project that, for example, projected for a resolution of 640x480 pixels, can be converted to the resol
ution 800x600. All elements are included in the possibly integrated bitmaps and all scalable fonts (de
pending on the font types used) are enlarged accordingly. Post-processing with the edito
r to correct rounding errors may be necessary.
File| Test procedure
This command starts a test run of the currently edited visualization project.
File| Communication management
This menu selection takes you to the window of the communication module.
File| Project overview
With the project overview you can get a quick overview of your visualization project.
In the project overview, you will find all the windows, elements and variables that are included in your
visualization project listed in tabular form.
The currently selected window is displayed in the foreground on the screen. The current item is selected.
You can choose between two types of representation:
Window->Element->Dynamics->Variable
Variable->Element->Dynamics->Window

The first list ("window") contains all the windows of your project. Select a window from this list (cl
ick with the mouse). You will then receive all the items contained in the corresponding wi
ndow in the second list ("Elements"). To get information about the dynamics of an item
, select an item. In the Dynamics list, you can now see the dynamic properties of this e
lement. The Variable list specifies the variable to which this property is associated.

The variable list shows all variables used in the project. The Elements, Dynami
cs, and Windows lists show the dynamized elements with the selected variable, the ty
pe of dynamization, and the associated window.
File| Testing project integrity
In this dialogue, a review of the entire project is carried out.
This review includes:
- Checking graphical elements for unique names
- Checking dynamics for unique names
- Checking the variable connection of the dynamics
- Checking the connections of variables
- Checking the variable connection of objects
- Checking the configuration of VisXpert variables included in the visualization
If errors are detected during the scan, they are listed:

File| Hotkey overview
In this dialog, all hotkeys used in the project are displayed in a tree structure.
This gives you a quick overview of which graphical elements use the corresponding
hotkey and which dynamics are executed by the hotkey.

File| Overview of the open/close dynamics of the project
In this dialog, all elements of the project that have a "Open Window" and / or "Close Window"
- Dynamics are displayed:

File| Stop
This command allows you to exit the VisXpert editor. If you have made changes to th
e current project and have not saved them, VisXpert will remind you.
View menu
View| class designer, window designer
Allows you to switch between window and class designers.
View| Zoom|100
This allows you to set the zoom factor to 100 percent (normal size).
View| Zoom|200
This allows you to set the zoom factor to 200 percent.
View| Zoom|400
This allows you to set the zoom factor to 400 percent.
View| Zoom|800
This allows you to set the zoom factor to 800 percent.
View| Toolbar
This allows the toolbar to be turned on or off.
View| Status bar
This can be used to turn the status line on or off.
View| Close all windows, close all classes
This allows you to close all windows in the window designer or all classes in the class designer.
Window menu
Window| New
Create a new window.Window| Properties
The Properties| command Window" allows you to set the properties of a window, delete windows, and determine the order in which all windows are represented.
Select a window from the list by selecting the name you want. The following functions and settings then refer to this window.

Name
Here you can change the window name. When creating new windows, they are labeled "Fenster_" and a sequential number. The name appears in the title bar when "With Title" is selected.
Position and dimension
Here you can set the window size and the window position. Please note that the size of windows (with double frame) and the position of windows (with title line) can also be changed via the editor functions on the configuration area. This overwrites the values specified here.
Current status
The current status selects the visibility of a window in the VisXpert editor (not in the flow!). During editing, it is possible to switch individual windows invisibly to speed up image construction and improve clarity. The set values are not saved. When a project is reloaded, all windows are visible.
Interval time
An update of the screen can be achieved in the sequence by changing the value of a variable or cyclically by the interval time.
The following settings are recommended and are therefore set as the default setting:
Items that change with variable values are updated immediately (item "Output when value changes"). This does not initiate a screen update (interval time=0).
For a large number of constantly changing elements, it may be advantageous to make the changes only in the background (do not redraw the element immediately) and to update the entire window by specifying an interval time (interval time <> 0).
The interval time is expressed in milliseconds.
Please note:
Elements with the option "Output when value change" (adjustable via dynamization) are redrawn immediately when an information change is changed, regardless of the set interval time.
Border
The appearance of a window can be affected as follows:
- Frame - no frame, simple frame or double frame
- Title line "With title" On or Off
If the title line option is selected, its name is displayed as the heading of the window.
Attention: Only windows with a title line can be moved by the operator in expiration mode. Double-frame windows can be resized by the operator in expiration mode. If you want to exclude these changes by the operator in the flow, select a simple border (or no border) and not a title line.
Properties
- Modal: This option causes the user to respond to a specific event in the expiration because after opening it, the window in question remains active until it is closed. Other windows cannot be selected while the modal window is open. This setting is intended for dialog boxes where it is essential to provide a defined response or operation.
- Visible at program start: This option determines whether a window is visible in the VisXpert flow module when the project starts.
- Mouse activation: If you want to move the window to the foreground by clicking on the window (in the window area), this option must be activated. If the option is disabled, the window remains in the background. This is for example It is useful to open a smaller window for operating functions in a larger window (no mouse activation). The smaller window then remains visible until it is deliberately closed by the user.
Password class
Password classes can be used to protect access to a window (open window) or input functions in a window. For each window, separate password classes can be specified for opening the window and making changes to it. To enable protection for the window, specify a password class between 1 and 30 for the corresponding function. Password class 0 means that there is no password protection.
To assign the password classes to users, use the User Management module in the communication module.
The password classes 31 and 32 are reserved for intrinsic functions.
For more information, see the "Visualization Flow" chapter.
Delete window
This command deletes the selected window with all the elements defined in it.
Background
As with "Properties| line color," a dialog box is opened to select or define the background color. The default for new windows is always white.
The following settings are only active in expiration mode:
Scripts
This button opens the dialog for editing the scripts. Details are described in the "Scripts" chapter.
Determine the position of the windows in the flow
In the sequence, the windows, if they have the attribute "visible at program start", are displayed on the screen in the order they appear in the window list box. The top window in the list box comes at the top. The arrow keys next to the list box can be used to influence the location of the selected window.
Bring windows in the editor to the foreground
To bring a hidden window in the editor to the foreground, select it in the list (by clicking) and confirm this action by pressing "OK".
Window| Release
Opens the dialog with the version info of the windows.

Import and export
Overview
VisXpert file import and export allows convenient management of the following object types
- Element (name. GPO), any group of graphical elements incl. the connected dynamics
- Window (name. GPW), windows from a VisXpert application incl. of all graphic elements and their dynamics
- Classes (name. GPC)
- Applications (name. GPP), full VisXpert application
- Scripts (name. SCR) and functions (name. FNC)
s to build an extensive library. This allows complex graphical elements,
such as a conveyor line or agitator, with which assigned dynamics are created
once, and later reused in other applications.
File| Import
The import function allows the import of
- Application
- Window
- Class
- Element
- Texts
- Scripts and Functions
Please note that VisXpert automatically reassigns the element and window designations when doubl
e designations occur. To update a window while retaining its name, please use the File| Update".
When you select a function, a file selection dialog appears in which you can select one or more files of the appropriate type.
If the variables associated with an imported item, window, text, or class are not in the
variable list of the current project, VisXpert offers a list of these variables.
You can now replace the original variables with variables from the current project.
If an importing window contains classes, they are searched in the library path and imported as well if necessary.
If there is already another version of such a class in the application (other date of change)
, you can have the relevant classes updated in your application. If the window to be imported contains c
lasses that cannot be found in the application or in the library path, the window fails to import.
Caution: When importing an object that contains scripts, the imported scripts must be retranslated afterwards.
Attention: Application scripts are not imported during application import. However, a simple tran
sfer is possible via the clipboard or a text file.
File| Export
The export function allows the export of
- Application
- Window
- Class
- Element (currently selected element)
- Texts
- Scripts and Functions
When exporting windows, selecting the "Export Related Classes with" option allows you
to export all the classes it contains at the same time. This allows you to ensure that
the import of the relevant windows into other applications does not fail later due to missing class definitions.
File| Update
This feature allows you to update windows, classes, scripts, and functions that you have d
eveloped in other applications. To insert windows, classes, scripts and functions into your a
pplication that do not yet exist in it, please use the "File| Import". Please also read there how
contained variables, scripts and elements are handled.
Attention: The new versions completely replace the versions included in your application: The currently included window, respect
ively the current version of the class is first deleted and then the new versions are inserted.
Class menu
Classes| New...
Create a new class.Classes| Edit
Allows you to select a class and then edit it.
Classes| Copy
Can be used to copy a class.
Classes| Delete
Allows you to select a class and then delete it.
Classes| Properties
Edit the properties of a class.
Classes| Overview
Opens the dialog with the class overview.

Classes| Release
Opens the dialog with the version info of the classes.

Editing scripts
This opens the script overview and editing window:
The left part of the window, the Script Overview, shows all parts of the project hierarchy that can contain scripts.
Scripts are edited whenever the value of a VisXpert variable read in the script changes (data source). In applications, windows, classes or member groups, there are still three special scripts that are edited at special times:
- Start: is edited when the application or window is opened (for element groups and classes: the window with the object or instance).
- Stop: is edited when the application or window is closed (for element groups and classes: the window with the object or instance).
- Timer: is edited in the set time grid as long as the application or window is open (for element groups and classes: the window with the object or instance).
Script variables are scripts that return a value as a result of their execution. They are processed when a VisXpert variable read in it changes the value, but only if its value is also currently used (e.g. output dynamics in an open window).
Functions have a return value and can be called with parameters.

If you have selected an object in the script overview, you can add new scripts to it using its context menu (right mouse or menu button). If a script is selected, you can delete it in the same way.
About the menu items "Scripts| Search" and "Scripts| Search Forward" in the menu of the window, you can search for text in the source code of all scripts. This can be useful for quickly finding a script if you remember a short portion of its source code.
The upper right part of the window serves as a script editor. Here you can view and edit the source code of the selected script. A context menu with frequently required editing and help functions is available in the editor.
If you have changed the source code of a script, you must either translate it before switching to another script, save only the modified text (the script then has no code and cannot run in the flow), or discard the changes to the source code. Please use the commands from the "Scripts" menu.
In the lower right part of the window you can see the variable reference. Lists all VisXpert variables that are read or read in the displayed script. be written. When you select a specific variable in one of the Read Variables or Write Variables lists, you can see where else in the visualization the value of that variable is written ("data sources") or read ("data targets"). If this is a different script, you can switch to it by double-clicking it. (see Help Scripts).
In the context menu, actions such as:
- Create a new script/function
- Create a new folder
- Rename folder
- Copy script/function
- Delete script/function
- Change the type of a script variable
- Edit properties of a function
- Import script/function
- Export Script/Function
- Script/Function update
be carried out.

Translate scripts
In this dialog, all scripts (application windows and class scripts, scripts of member groups, element scripts, script variables and functions) can be translated (see Help Scripts).
Properties Menu
---
Features| Application
Under Menu Item Properties| Application, a dialog appears in which the width and height of the on-screen keyboard as it should appear in the sequence can be parameterized.

Expiration
In the process, the on-screen keyboard is automatically positioned below or above an input field when the variable is set @System:Edit, the input output field receives focus, and the Enable On-Screen Keyboard property of the input/output field is set.

Help menu
VisXpert supports you in your work with detailed help texts.
Content
Use this command to call the table of contents of the VisXpert help system. You can always get context-sensitive help when you click the help button in a dialog box, or press the F1 key, or when you move the menu selection marker bar to a menu item with the arrow keys, and then press F1.
System info
You can use this command to query a number of system data from your PC. Displayed
- About the VisXpert version and serial number
- About the current VisXpert project
- About the Windows environment
- About hardware
You should provide this system information if you are contacting us with any problems.
About
This command gives you the version number of the editor.
The configuration area
On the configuration area, you can create new windows or edit existing windows. Insert your items into these windows. It is not possible to arrange elements on the configuration surface.
The origin of the configuration area is at the top left. From this reference point with coordinates 0.0, the coordinates of each window are calculated.
Window
The "Window| New" creates a new window. The properties of a window can be set from the "Window| Properties". For projects with multiple windows, you can set the display order of the windows. The selected window is activated when the window attributes are applied and brought to the foreground.
On the configuration interface, partially hidden windows can be brought to the foreground by selecting the window anywhere with the cursor. The TAB key activates your windows in the specified order and puts them in the foreground.
Within a window, the individual elements are defined.
The origin of a window is at the top left. From this reference point with the coordinates 0.0, the coordinates of the elements in the window are calculated.
Classes
A class can be saved by the menu item "Classes| new" can be created. Each class is drawn in its own window (class name = window name).
A class consists of n graphical elements. These can be inserted at any time.
In a class, the menu item "New| Class" additional classes are inserted if there are no objects of the class yet.
Class variables can be entered for each class. A class variable can only be deleted if there are no connections to it and there are no instances of it.
Each class can contain a start, stop, and timer script, as well as n other scripts. These scripts can access their own class variables and the class variables of the base class(s).
Class variables can be accessed from the dynamic properties of the graphical elements. If no element is selected in the class, the class dynamics can be edited.
Attention: Changes to dynamics, graphics or scripts of a class lead to changes in all objects of the application!
A class can only be deleted if it is not used in any other class. Deleting a class asks whether the class's objects should be deleted or converted into groups (Note: When you convert to groups, the scripts of the objects are discarded. The conversion can only be performed if there are no more connections to class variables).
Classes can be imported and exported. If a class contains additional classes, it also imports and exports them.
Class and window management
For the creation of a visualization, it is important to have an overview of the application. Especially for distributed projects with a uniform standard, classes or windows can be stored and managed centrally.
These versions stored in the library can be checked for up-to-dateness with the versions used in the visualization editor.
Thus, windows or classes can be easily updated from the library with the help of this version info. Similarly, revised objects can be exported to the library in a visualization.
Due to the color representation of the version info (yellow = editor version is new / red = library version is new / white = the same version status between visualization editor and library) a quick overview of the individual objects is possible.

Presets
Options| Editor
Under the menu item Options| Editor, you can make the general settings of the editor:
- Offset coordinates to duplicate: the offset values set here are used in the editor as follows:
- when "inserting" as offset to the window coordinates of an element
- when "duplicating" as the default for row and column spacing
izing individual elements, the values set here are suggested as default settings.
The move takes effect only after a movement around the value "Minimum Shift".
can be specified here. Only after this value does the item actually move.
as a drawing help. Here, the information is given whether a grid should be used, at whi
ch pixel positions the grid originates (X-grid, Y-grid) and what distance should lie bet
ween the individual grid lines. The elements are aligned with this grid for al
l edit and move actions.
Features| Application
General settings for the current project are made under the Menu item Properties| Application:

- Paths: Here you can set the paths for the reporting system and the databases that are accessed through the scripts.
- Reporting system: The default path .... projectname
USER-DATMeldesy1 contains the tables of the reporting system that are to be accessed from the visualization (e.g. for the reporting line, the DMZ table. DB). This path is stored in the @System:MZTable system variable for easy access via a script. - Databases: The default path .... projektna
meUSER-DATDB is used to access database tables via script.
This means that the database tables used by the user for the application must be in this directory. - Full screen: If this option is selected, the visualization process is started as a "full screen".
- Exclusive: The "Exclusive" setting is only possible if the "Full Screen" option is selected.
Exclusive prevents changing the window display. - Menu: Here it is determined whether the menu bar should be displayed in the visualization flow. Hiding the
menu bar can block unwanted user input. - End dialing: The selected option "End dialing" specifies the menu function File| Exit free. "End dialin
g" is only possible if the menu line is to be displayed, i.e. the "Menu" option is selected.
If one of the above options locks the menu item "Exit" in the flow, a button can be lin
ked to the variable "End" of the group "System" to exit the visualization as defined.
To stop the process, then click this button. To prevent unauthorized terminati
on, this button can be configured in a password-protected window.
- Frame: This determines whether the "Frame" option should be active in the flow module when the project st
arts ("Frame Active" means that an element is framed with the mouse pointer when starting up,
if an input is possible at this point). The setting can be set in the flow module via the
menu item "Option| frame" when the menu bar is displayed in the visualization flow by selecting the
"Menu" option. - Hotkeys: Here you can configure the hotkeys to open the corresponding dialogs in the visualization sequence if
the process does not have a menu. - Scripts: Here you can set the timeout for synchronous read and write, as well as the maximum
lead time of a script. - Scroll area: If a window of the visualization project is larger than the screen boundaries, scroll bars can be displayed using this option to make all parts of the window reachable.
- Editor: For the editor, you can choose the default values of text and background colors of I/O fields. These colors appear when a new I/O field is created.
- Use the "Apply window attributes" checkbox to select the window attributes that are used to create a wi
ndow using "Window| new" to be set. When the checkbox is activated, the attributes of the last edited window are
taken over. If this default is deselected, VisXpert assigns other attributes. - On-screen keyboard: Here you can choose an on-screen keyboard that will be used when the "Activate on-screen k
eyboard" check mark of an input field is set. - BDE functions: Here you can choose whether the BDE functions should still be available in the scripts.
- Buttons Scripts: The "Scripts" button opens the dialog for editing the scripts.
Features| Project language...
In this dialog you have the possibility to switch the project language.

This allows you to test in the editor whether the text boxes for static texts are large enough when switching languages.
Visue Dynamizing A Process Image
Overview
Dynamization links properties of elements to variables. In the sequence, these element properties then change depending on the linked variable values (observe), or variable values are changed (operating) by operating actions (changing element properties).
The elements created with the VisXpert editor can be selected by selecting "Properties| dynamics" are linked to variables. A quick selection of the dynamics dialog is possible for selected elements with the key combination CTRL - D or click the right mouse button in the active window and select the pop-up menu item "Dynamics". In addition, the dynamics dialog can be started by double-clicking on an element (even for unselected elements).
Types
All variables that are present in the configuration tables of the drivers used are available for the dynamization of elements. In addition to the groups associated with a VisXpert driver, there may also be the @System groups (contains VisXpert system variables), @Script (contains user-defined script variables), and @ElementScripts (contains user-defined element scripts).
System variable
These variables are grouped in the @System group and are always available regardless of user definitions:
- Date - current date of the system clock-->String
- Current time - Time of the system clock-->String
- Edit - Status / Activation of input fields-->Boolean
- End of GP_VISU-->Boolean
- MzTable - Path of the Reporting System-->String
Dynamizing elements
The selection of a specific variable is made in the dynamics dialog via group and variable name.
The Dynamics Dialogue
To dynamize an item, select it and start the dynamics dialog by selecting the menu item "Properties| dynamics". The dynamics dialog is the same for all element types. In the left half of the window, all dynamisable properties are shown in black, and all properties that do not apply to that element type are shown in gray font. You can only define dynamics for the properties with black font.
To dynamicify a specific property of the element, click in the appropriate circle box.
For control, a hacking appears in the checkbox in front of the properties that are already provided with a dynamic.
Connecting a property to a variable
After selecting the property (by clicking the circle in the left half of the window), the variable to which the property is connected can be determined in the right half of the dynamic dialog.
The dynamics dialog is shown in the following image:

In the upper right half of the window, one of the offered groups must be selected first with the help of list boxes and then a variable from this group. For a quick find of a specific variable in a large variable table, a quick dialing can be made within the list box by entering the first characters.
Depending on the type of dynamization, the right half of the window offers different choices, which are shown in the following sections.
For control, the type of the selected variables is displayed.
The "Delete" button can be used to undynamise the property. All information associated with the currently edited property is deleted and in the left half of the window the check mark is removed before the property.
Automatic type conversion
When variables are used, the values are automatically converted to the expected format when passed.
If type conversion is not possible, this is detected at run time and logged in the system logbook. One possible error is to assign a string that cannot be interpreted as a number to a numeric value.
Dialogues for dynamization
Special Functions Buttons
Three functions are available via the "Special Functions Buttons" to dynamize a button:
- Open window
- Closing windows
- Start application
For opening and closing windows, a list of all configured windows (left list) is offered. Selecting an entry moves it to the right list. The selected windows are then opened in the visualization sequence or Closed. Selecting an entry in the right list moves it from the selection back to the left to the window overview.
Other applications can be started from VisXpert via "Start Application" or it can be changed to applications that are already running. Depending on the assignment of the fields "title line" and "command line" different functions are possible:
- If only one title line is specified, a task change occurs if the specified application is included in the Windows task list (information about the task manager of Windows).
- If a program is entered only in the command line, the specified program is started each time the button is pressed. In other words, there may be multiple instances of the program.
- If you specify a title line and a command line for the same program, the program starts if it has not already started, and a task change to this program takes place.
Variable input via buttons/switches
Set value or Reset value and enter an associated value determine which value is passed to the variable in expiration mode when the switching element is pressed.
Variables of type "Boolean" can be set ( "1" or true ), reset ("0" or false) or "togged" by "Switch value". For all other numeric variable types, a value can be specified to which the variable should be set when the button is set in the flow.
The "Control Value" option allows bool's variables to realize a "tipping operation". That is, the variable is set to "1" as long as the left mouse button is pressed, and then again to "0". This can, for example, a "hand operation" for a machine in an elegant way.
Variable input via input field
Assign a variable to the input field. In addition, you can use "Value" and "Output Value" to define a standardization of the value.
If the dynamic field is also a display field, the same standardization should be chosen for the display.
The activation of 1:1 conversion causes a direct distribution of the value within the possible value limits.
In the visualization process, the input fields are activated by a mouse click or by setting the system variable "Edit". The values specified under "Value" as minimum and maximum are checked in the flow when they are entered. If these input limits are exceeded, an error message is displayed.
Variable input via sliders
Assign a variable to the slider. A standardization of the value can be performed as with the input field.
Please note that sliders are always left (for vertical arrangement) or above (with horizontal arrangement) have their minimum value.
The function in expiration mode is also controlled by the "Properties| graphic" setting. Please refer to the relevant notes in the chapter "Editor".
Variable output via position
Assign a variable to the selected element. Scaling the displacement can be done with the "Value" to "Move by Pixels" relationship. Please note that if the variable values are corresponding, the element may be outside the visible range in expiration mode.
Variable output via filling level
Assign a variable to the selected element. The scale of the fill level can be scaled with the "Value" relationship to "Fill Level". A min value is assigned to a '%' value of the fill level and a Max value is assigned to a '%' value of the fill level. "Fill from top to bottom" or "fill from bottom to top" can be selected.
Variable output over size
Assign a variable to the selected element. The scale of the element size can be scaled with the Value to Size relationship. The direction of resizing can be defined. When set to both directions, the center axis of the element remains in the same position, regardless of its size, otherwise one of the outer boundary lines.
Variable output via line color
Assign a variable to the selected line. You determine which color the line (or the boundary of the element) should take if the specified limits are exceeded or exceeded in the flow.
Variable output via fill color
The following two variants are available for changing the fill color:
- color change by monitoring value ranges (left display), and
- Color change by a bitmask (right representation).
Activate the "Area" variant by the corresponding checkbox. You get four color changes by entering the appropriate limits, so you can represent an element with a total of five colors. The two limits "small" are monitored for undershoot. That is, as long as the value is less than/equal to 1000 in the example shown. 3000, the corresponding colors are displayed. Between the limits, in the example at values from 3001 to 4999, the element is represented with its original fill color. The "large" limit values are finally monitored for exceeding. This means that in the example, values of 5000 or more are 70000 the corresponding colors.
Variable output via text color
Assign a variable to the selected text. You determine which color the text should take if the specified limits are exceeded or below the specified limits.
Variable output via visibility
Assign a variable to the selected item. You use two limits to determine in which ranges of values (equal to or below the limit value, between the limits, equal to the upper limit, or exceeded) the element becomes visible. Multiple ranges of values can also be selected.
Assign a variable to the selected item. You use two limits to determine in which ranges of values (equal to or below the limit value, between the limits, equal to the upper limit or exceeded) the element is displayed flashing. Multiple ranges of values can also be selected.
Attention: The flashing display of elements is realized with a Windows timer. This means that depending on the load on your PC system, the flashing clock will be different at different speeds, or because the priority of this timer is low. Flashing elements definitely worsen the time behavior.
Variable output via display
Assign a variable to the text or output field. The display can be normalized as described in the input field. For floating-point numbers, you can specify the number of comma digits.
Dialogs for visualization
Import Application
This dialog gives you a list of all scripts that could not be imported when importing an application, as they are already included in the open application.
Edit item group
In this dialog, the selected member group is represented as a tree structure.
You can use it
- Edit the dynamics and graphics of the member group and its subelements (Note: Dynamics and graphics of subelements of an object cannot be edited. This is only possible with the class!)
- Edit the scripts of an item set
- Convert an object to a set of elements
Member groups of a window
In this dialog, you will see a list of all member groups of the active window as a tree structure. The scripts of the selected member group can be edited by selecting an element group and pressing the "Edit Scripts" button.
enter password
In this dialog, a password can be entered to the selected class. The password confirmation must match the password.
Enter password mandatory
In this dialog, the password for the selected class must be entered.
Enter class names
In this dialog, you can enter the name for a class. The name of the class must be unique, which means that no class or window with this name must already exist. An empty class name is not allowed.
The following characters are allowed for the class name:
- Alphanumeric characters
- Spaces
- Underscore
- Hyphen
After pressing the "Infotext" button, the dialog for entering an infotext of a class is opened, the pressing of the "Password" button opens the dialog for entering the class.
Delete class
In this dialog you will get a list of all classes that are included in the application. By selecting a class in the list and pressing the "Delete" button, you can delete the selected class. However, a class can only be deleted if the class does not serve as the base class for other classes. If objects in a class exist, they can either be converted into member groups or deleted.
Choosing class
In this dialog, all classes are displayed in table form. The table contains the following fields:
- Class (class name)
- Infotext
The selection of a class is done by selecting a row in the table and then pressing the OK button.
Class
In this dialog, all classes contained in the application are represented as a tree structure. Setting the Show Classes check mark also displays the base classes that might be included in the class. Setting the Show Objects check mark displays the objects (instances) of the class.
Class variable overview
In this dialog, all variables of the class are displayed in table form. The table contains the following fields:
- Name (name of class variable)
- Type
- Connections (sum of dynamic connections to the class variable and use of the class variable in scripts)
- Instances (number of instances of the class variable in derived classes)
Object Variable Mapping
This dialog displays the variables of one or more objects and their elements in table form.
The table contains the following fields:
- Window
- Element
- Group
- Variable
- Type
- Connections (sum of dynamic connections to the variable and use of the variable in scripts)
After selecting one or more rows in the table, the group of variables can be selected. Furthermore, in this dialog, the variable base name of an object can be changed.
Setting the "Use assignment as template" check mark results in the next time objects of this type are inserted, the variable mapping and variable creation of VisXpert variables will be done according to this template.
Project review
In this dialog, all objects or displays the elements of objects that have a variable connection to class variables instead of VisXpert variables. After selecting one or more rows in the table, the group of variables can be selected.
Infotext for class
In this dialog, an info text about the selected class can be entered.
Class update
In this dialog, all class variables that have been added during a class update are displayed in table form.
The table contains the following fields:
- Class (class name)
- Class variable
- Type (type of class variable)
Class Update Error
In this dialog, all class variables that are not type-consistent in a class update are displayed in table form.
The table contains the following fields:
- Class (class name)
- Class variable
- Type new (new type of class variable)
- Type old (old type of class variable)
Enter variable base name
In this dialog, you can use the variable base name for an object or for a class in a class.
Enter variable names
In this dialog, you can use the name for a class variable or Enter a script variable. The name must be unique, i.e. no variable with this name must already exist. An empty name is not allowed.
The following characters are allowed for the name:
- Alphanumeric characters
- Spaces
- Underscore
- Hyphen
- Slash
Enter script names
In this dialog, you can enter the name for a script. The name must be unique. An empty name is not allowed.
The following characters are allowed for the name:
- Alphanumeric characters
- Spaces
- Underscore
- Hyphen
- Slash
Choose a variable
In this dialog, you can select a VisXpert variable from the list of all variables present in the project.
Select group
In this dialog, you can select a group from the list of all the groups in the project.
Select class variable
In this dialog, you can select a class variable from the list of all class variables.
Select window
In this dialog, you can select a window from the list of all windows included in the application.
Functions through dynamics
Functions through dynamics
An element can be connected to an element script in the dynamics dialog,
in which the group @ElementScripts is selected.

After the group is selected @ElementScripts, the following elements appear:
- Toolbar for translating the script and switching to the script editor
- Display box that shows the type of function
- Input field for editing the text of the function

Translate script
The function can be translated by the button (see Help Script).
Switch to Script Dialog
The button can be used to switch to the script dialog (see Help Script).
Visue Creating a process image
Drawing and editing elements
The drawing mode of VisXpert can be activated via the toolbar or the edit menu by selecting the desired item type.
The element can then be drawn anywhere in a window. To do this, hover over the desired point on the artboard and press the left mouse button. If the mouse button is held, drag the pointer until the element is stretched to the desired size (the dashed outline shows you the momentary size of the element). After letting go of the left mouse button, the new element appears on the screen with preset properties (color, linetype, fill pattern, etc.).
Exception: For bitmaps and pointer instruments, just click on the position where you want the left, upper corner of the ele
ment to lie. After drawing an item, it automatically switches to select mode. To suppress this change
(e.g. drawing several elements of the same element type), it is sufficient to press the Shift button before selecting the element type and hold down this key while drawing.
Cursor
Depending on the command selected, the mouse cursor appears
- as an arrow (for selecting elements)
- as a crosshair (for drawing an element of the selected element type)
- as a crosshair over a marker point of the selected element (to scale an element)
- as a quadruple arrow (while moving selected items)
- as a double arrow (above the double frame of a window to resize)
Selecting an item
In order to change the properties of an element, the element must be selected, i.e. "selected".
Select the "Edit| Select" (or the corresponding icon from the tool box). Point to th
e desired item and press the left mouse button. The item now appears with marker points.
The following functions can be applied to a selected element:
- Changing size
- Move item
- Change properties (line, color, etc.)
- Cut, copy, delete, duplicate item
- Edit graphics
- Editing dynamics
You can select several items by selecting additional elements with the "Shift" button pressed. T
he following functions can be applied to such a selected member set:
- Move items
- Change properties (line, color, etc.)
- Deleting items
- Group items
If several elements have already been selected, individual elements can be deselected by clicking with the
"Shift" button pressed.
Move an item
To move an item, select it, then hover over a location within the marker points of the selected item, and drag the element to the desired location with the left mouse button pressed. Whether the item can be moved immediately with the selection process, or whether a second operation of the mouse button is required, depends on the under "Options| Editor" preset.
If you have selected multiple items, the entire member set is moved.
Scaling Items
You can resize an element by dragging the marker points of a selected element. To do this, hover over a marker point (the mouse pointer is then displayed as a crosshair) and drag the point with the left mouse button pressed until the element reaches the desired size.
To change a dimension, you use the marker points at the side boundaries of the member, and to change both dimensions
at the same time, you use the marker points at the corners of a member. During dragging, the outline of the element is displayed, after the mouse button is released, the element appears in the new size. The footer displays the current scale factor for The X and Y directions.
Grouped items are scaled together. The operation is as with individual elements.
Each selected item has at least 8 filled marker points. Individual elements have additional markers without fill. These marker spointers identify special properties of an element (vertices of a polygon, boundary points of an arc, and so on). You can change these properties by dragging at these marker points. Note: The Pointer Instrument element cannot be scaled.
Arranging elements
Arranging elements
The button, slider, and input/output field element types are represented by standard Windows elements. These elements are always in the foreground. The overlap of standard Windows elements should be avoided because the update is organized by Windows, so the order of representation cannot be affected.
Arrange| Group
Individual elements of a window can be combined into a set of elements. Select the items to be grouped and run the "Arrange| Group" . A member set is identified by a dashed boundary line. Member groups are selected by clicking on the area of the group (that is, within the dashed line). Member groups can be regrouped with single elements or other member groups (nesting). VisXpert treats member groups as individual elements, i.e. a member group can be selected, duplicated, moved to the clipboard, or copied. For elements of an item group, the dynamics and graphics dialog can be used for both the group and individual elements of the group.
Tip: For large projects with many graphical elements in a window, it is recommended that you group related elements whose relative position is fixed to each other. These groups can then be quickly copied or dynamically dynamized together as a group (dynamic position or visibility). Of course, each element of the group still has its element-dependent dynamics at its disposal.
Arrange| Resolve grouping
This command resolves the grouping of items. Select the group by clicking within the dashed boundary line and select the menu item "Arrange | grouping".
The following commands are generally applicable only to a single selected item or member set. These commands also have no effect on the Button, Slider, and Input/Output Field element types, which are always in the foreground.
Arrange| Forward
The selected element is displayed in such a way that no part is covered by other elements. This may obscure all or part of other elements.
Arrange| Backwards
The selected element is displayed in such a way that it does not obscure other elements. The command may remove all or part of the selected item behind other elements.
Arrange| One forward
The selected element is set one level forward in the "representation hierarchy". This may make other parts of the selected element visible and completely or partially obscure other elements.
Arrange| One back
The selected element is set back one level in the "representation hierarchy". The selected item or Parts of it are obscured by other elements.
The following commands are applied to multiple items that are selected at the same time. These commands are also available for standard Windows items.
Arrange| To the left
The left margins of all selected elements are aligned to the left edge of the element that is furthest to the left.
Arrange| To the right
The right margins of all selected elements are aligned to the right edge of the element that is furthest to the right.
Arrange| To the top
The top margins of all selected elements are aligned to the top edge of the top-selected element.
Arrange| down
The bottom margins of all selected elements are aligned to the bottom of the bottom of the selected element.
Arrange| Horizontal center
The horizontal centers of all selected elements are aligned to the center between the top and bottom edges of all selected elements.
Arrange| Vertical center
The vertical centers of all selected elements are aligned to the center between the edges of the elements on the far left and right.
Arrange| Horizontal equal distance
The selected elements are aligned at the same distance in the horizontal plane.
Arrange| Vertical equal distance
The selected elements are aligned at the same distance in the vertical plane.
Arrange| Turn
A selected element can be selected via "Arrange| Rotate" or the hotkey function CTRL-R are rotated 90° in a positive direction (clockwise).
Arrange| Mirror
The "Arrange| Mirror Vertical" or "Arrange| Mirror Horizontal, the element is mirrored accordingly, with the center of the element remaining in the same position and not resizing.
When scaling with the mouse, if a marker point is dragged over the opposite X or Y axis, the element is mirrored vertically or horizontally, and also in its position (may be also in its size).
Working on the clipboard
Working with the clipboard
Some of the following commands use the clipboard. Please note that there can be only one item on the clipboard at a time. This element also contains all the information about the dynamics of the element. Items that are selected from the Arrange| grouping" into a member set is treated as an element.Edit| Undo
The last action is undone.
Edit| Restore
An undone action is performed again.
Edit| Cut
Removes the selected item from the window and transfers it to the clipboard.
Edit| Copy
Copies the selected item to the clipboard without removing it from the window.
Edit| Insert
Inserts a copy of the clipboard content into the current window.
The insertion point of the element in the current window is calculated from the window position from which it was passed to the clipboard, in addition to the offset values set for duplicate. Therefore, the inserted element may well be outside the visible area of the window.
The offset values for duplication are set via the Options| menu Editor".
Edit| Delete
Removes the selected items from the window.
Edit| Duplicate
This command creates one or more copies of the selected item. After selecting the command, a dialog box appears to determine the number and location of the copy(s).
The number of rows and columns determines the number of items to be created (rows*columns). The selected item is counted. The distance between each row (Y) and columns (X) can be freely selected. The default is the options| menu Editor set offset values for duplication.
Again, duplicated elements do not always have to be in the visible area of the window.
Edit| Delete application
Use this command to discard your current visualization project and create a new one.
Edit| Select
Use this function to select individual items. Several elements can be selected at the same time by selecting them with the "Shift" button pressed. In addition, it is possible to stretch a frame around a group of elements when the left mouse button is pressed. When the mouse button is released, all elements that are completely within the frame are selected.
Edit| Select everything
This selects all elements of the current window. Individual elements can be deselected by marking with the "Shift" button pressed.
Find and Replace
Find and Replace
The functions allow you to find and, if necessary, replace variables in the current project. The call is made via the "Edit" menu or the following hotkeys:
- F2 - Searching for Variables
- F3 - Continue searching for variables
- F4 - Replace variable
Edit| Searching for variables
After selecting a group and a variable from the offered list boxes, the variable is searched in the current project. If the function finds the variable in the project, the first element to which the variable is linked is selected and thus selected.
Edit| Continue searching
The most recent about "Edit| Search for variables" entered search criterion is searched from the current position in the project. If the variable is found as a link to another element, this element is selected. Otherwise, the selection mark remains with the last element.
Edit| Replace variable
The function allows you to replace a variable that was previously used by the "Edit| search for variables" or which can be specified directly in the dialog.
In the dialog shown below, you can choose whether the variable
- in the selected element (after a previous, successful search, an element is automatically selected),
- in the active window or
- should be replaced throughout the entire application.

By specifying "*" in the "Variable" dialog boxes, all variables, i.e. replace an entire set of variables. This function is e.g. useful for exchanging a group of test variables created during configuration against the group with the actual process variables.
By inserting the character "*" at the end of a substring to the variable name, all variables with the same name start can also be replaced.
Example: Replace variable "OP10*" with "OP20*"
Visualization Script
Overview
The VisXpert scripts are a flexible tool for program control. Editing a script in the visualization project is event-driven.
Typical applications for using scripts are:
- Mathematical linking of multiple variables
- Program-controlled or timed opening and closing of windows
- Triggering program-controlled or timed functions in the process
- Simple control functions
- Direct or indexed database access, e.g. for voice switching or recipe administrations
- Starting any Windows application
- Access to the VisXpert logbook
The syntax based on Pascal has language elements such as "if ... Then ... "case" and "while". As operands, the scripts have driver variables (and thus all process values), internal variables, and window properties. It also supports reading from text lists, making it easy to create multilingual user interfaces. The editing of a script by the program can be triggered by events such as "Open/close application" or "Open/close window", timer or variable value changes. This, for example, calculations are performed immediately when a process value is changed. A script is edited only if something changes to the data source or if its result is queried. Run Script key dynamics causes the script to work immediately.
Script Types
Because scripts run depending on specific events, different types of scripts exist. The type is accordingly used to determine whether a script, for example, run when a project is started, when a window is opened, or when the variable value changes.
The following types are available:
- Global script of the application that is always executed when the project starts ("Start")
- Global script of the application that runs before the project is finished ("Stop")
- Global script of the application that runs at a specific editing interval during the process ("timer"), as well as n scripts of the application.
- Script of a window that always runs when you open ("Start") of the respective window
- Script of a window that always runs when the window is closed ("Stop")
- Script of a window that is processed at a specific interval, when the window is open ("timer"), as well as n scripts of the window
- Script of a class that always runs when the class instance is opened ("start")
- Script of a class that always runs when closing ("stop") of each class instance
- Script of a class that is processed at a specific interval, with class instances open ("timer"), as well as n scripts of the class
- Script of a member set that always runs when the member set is opened ("start")
- Script of a member set that is always executed when the member set is closed ("stop")
- Script of a member set that is processed at a specific interval when the member set is open ("Timer"), as well as n scripts of the member group
- Variable script: A variable script returns a value to a script variable after editing; The
defined script variables are automatically included in the "@Scripte" group and are available as other variables for the dynamization of the project. - Item scripts: Item scripts are edited in inputs and output dynamics of elements.
- Function: A function can be called with parameters and returns a return value.
Creating scripts
Depending on the script type, the dialog box for editing scripts can be opened by the following ways:
- Menu item "Scripts| Edit scripts"
- global scripts via the "Scripts" button in the Properties| window Application"
- Window scripts using the "Properties| window dialog opened via the "Scripts" button,
or via the menu item "Window Scripts" of the right mouse button menu - Class scripts from the "Class Scripts" menu of the right-hand button menu
- Scripts of member groups via the menu item "Scripts" of the right mouse button menu with selected member group
You create your script using the following dialog:

When you re-enter a script variable, you first assign the name and then select a variable type from the existing checkboxes. A variable of this type must be assigned to the script variable in the script using the Return function. Application, class, window scripts, and character group scripts do not have a variable type.
When working in the text window, clicking the right mouse button opens a menu that provides the following functions:
- Undo: This allows the last edit action to be undone.
- Search: You can specify a term to search for in the script.
- Continue searching: This function can be used to search for a search term that has already been specified.
- Replace: Replace one term with another.
- Window: If the program requires the specification of a window name, a list of all available windows can be called up via this command. By double-clicking a name or selecting a name and pressing the OK button, the desired name is inserted into the text at the cursor position.
- GP_Variable: Here you get a selection list of all available variables. If a group is selected in the left list, all variables contained in that group appear in the right list. The adoption of a variable name is also done here either by double-clicking on the corresponding name or selecting the name and clicking on "OK".
- Element: Here you get a dialog to select an element.
- Element: Here you get a dialog to select a function.
- Help index: This is the help text for the scripts.
- Class variable: This allows you to choose a class variable in class scripts.
- Context help: Context help uses the term at the current cursor position as the search term in the help index.
After editing the script, a translation run must be started by clicking the "Translate" button. Syntactic errors appear in the header of the text window. If the translation is successful, "O.K." will appear.
For syntactic control of all scripts of a project, the editor can use the menu item "Scripts| Scripts Translate" a dialog box. After the translation run starts, all scripts are translated one at a time. The result of the translation is visualized in a list box. All scripts labeled "O.K." could be translated correctly.
Instructions
if … then … else .. endif
The "IF" instruction must be followed by a Boolean expression. The program execution continues depending on the result of this printout. With "true" the statement part between THEN and ELSE is processed, with "false" the statement part between ELSE and ENDIF. The use of ELSE is optional.
Caution: No comparison operators (=,>, <, ..) may be specified when querying Boolean values. The query is made directly on the variable (query for "true") or with the NOT operator (query for "false").
Example:
long a, b
bool c if a > 0 then
b := 1
else
b := 2
endif
if c then
b := 3
endif
switch … case .. default .. end
The "SWITCH" instruction must be followed by an expression of the "integer", "long", "double" or "integer" type. This expression is compared with the constants that each follow a case label. If a comparison is "true", the program part is processed until the next case, default or end. If you don't want any further queries after a fulfilled comparison, the command “break” must appear at the end of the statement block.
As with the IF… THEN… ENDIF statement, no comparison operators (=,>, <, ..) may be specified when querying Boolean values. The query is made directly on the variable (query for "true") or with the NOT operator (query for "false").
Example:
long a
string s
switch a
case 0:
s := ‘NULL’
break
case 1:
s := ‚EINS’
break
default:
s := ‚ZU VIEL’
end
while … do .. enddo
The "WHILE" statement must be followed by a Boolean expression. The instruction part between DO and ENDDO is executed until the result of this expression is "false".
The loop can be broken off with the "break" command. The “continue” command causes program processing to be continued with the query.
Example:
long a, b
while a < 10 Do
a := a + 1
if a mod 2 = 0 then
continue
endif b := b + 3
enddo
Processing during Runtime
Runtime
GP_Visu edits the application and window scripts according to the associated and described events above.
Caution: Variable scripts (scripts that provide a value for a variable from the @Script group) are only edited in the process if their variable value is required in the application. That is, the script variable must be attached to the dynamics of an object in a visible window or linked in another active script for the associated script to be edited.
A variable script (dynamic connection to a visible object) required by the application is processed each time a variable is queried in the script.
Example:
Script variable: SUM, Type: GANZZAHL
long S
S := "SPS1:ISTMENGE" + "SPS2:ISTMENGE"
debug('*** Editing Script SUM ***')
return S
The Script executes when:
- The variable "SKRIPT:SUM" is associated with an object, e.g. a text box with the "Display" dynamic.
- The window with the linked object is visible (in the foreground).
- Value of "SPS1:ISTMENGE" or "SPS2:ISTMENGE" changes.
If you want to check if or how often a script has been executed during Runtime, insert a debug function into the script, as shown in the example. You can then use the logbook of the communication module to observe the editing of the script.
Operators
Arithmetic operators
operator | operation | Operand type | Result type |
+ | addition | Long, double | Long, double |
- | subtraction | Long, double | Long, double |
* | multiplication | Long, double | Long, double |
/ | division | Long, double | Long, double |
Mod | Modulo | Long | Long |
Mod calculates the integer remainder of a divisionExample: 3 Mod 2 => 1
4 Mod 2 => 0
10 Mod 3 => 1
Boolean operators
operator | operation | Operand type | Result type |
Not | Boolean negation | Bool | Bool |
And | Boolean AND | Bool | Bool |
Or | Boolean OR | Bool | Bool |
Xor | boolean antivalence | Bool | Bool |
Logical operators
operator | operation | Operand type | Result type |
Not | bitwise negation | Long | Long |
And | bitwise AND | Long | Long |
Or | bitwise OR | Long | Long |
Xor | bitwise antivalence | Long | Long |
<var> Shl x | Slide left | Long | Long |
<var> Shr x | Slide right | Long | Long |
X = number of places to be moved
Relational operators
operator | operation | Operand type | Result type |
= | equal | compatible types | Bool |
<> | unequal | compatible types | Bool |
< | smaller | compatible types | Bool |
> | greater | compatible types | Bool |
<= | less than / equal | compatible types | Bool |
> = | greater or equal | compatible types | Bool |
String operators
operator | operation | Operand type | Result type |
+ | addition | String | String |
Assignments
Assignments replace the value of a variable with a new value that is specified via an expression.
The expression must be compatible with the type of the variable.
The assignment is identified by the operator ": =".
Variables
variables
Variable names can consist of numbers and letters in any order. A name that consists only of digits is not permitted. No distinction is made between upper and lower case. The length of the name is not mandatory.
The definition is made by specifying the type followed by the variable name. Several variables of the same type can be defined one after the other. The individual names must be separated by commas.Example:
String name, path
long count
window win
Array
Variables can also be defined as an array. The array size is placed after the name in square brackets:
long numarr [16]
Block
A block consists of any sequence of numbers, strings and boolean values. The maximum length of such a block is 65,496 bytes.
Boolean
The “Boolean” type can have two states. All non-zero values are true, the value zero is false. The words true and false are reserved for entering Boolean constants.
Caution: When querying Boolean values, for example with IF ... THEN ... ENDIF, no comparison operators (=,>, <, ..) may be specified. The query is made directly on the variable (e.g. IF BOOL1 THEN ..., query on true) or with the NOT operator (e.g. IF NOT BOOL1 THEN ...., query on false).
Double
Floating point numbers are determined by the type "Double". This is an 8 byte IEEE floating point number with 15-digit precision.
Value range: 1.7 * 10 -308 to 1.7 * 10 +308
The floating point numbers can be specified in decimal or exponential notation. The exponent is introduced by e or E. The number cannot contain any spaces.
Example: 1.234, .015, -1.345E + 3
GraphPic variables
GraphPic variables are specified in plain text within the script and must be delimited by double quotes. First the group name and then the variable name, separated by a colon:
"Internal: Wert1" {Variable Wert1 from the group Internal}
Long
As usual with GraphPic, all integer values are treated as 4 byte numbers with a sign.
Value range: -2,147,483,648 to 2,147,483,647.
All integer numbers can also be specified in hexadecimal (prefixed 0x) or octal (prefixed 0).
Example: 0x1A, 035
Static variables
Script variables only retain their value during a run. The next time the script is called, the variables are set to zero values again. If values are to be retained throughout the project, the type specification must be preceded by the keyword "static" in the variable declaration. Static variables are only initialized to zero values at the start of the project:
static long l1 {retains its value}
long l2 {is set to zero with every run}
String
A string is a sequence of zero or more ASCII characters. The string can have a length of up to 65,498 characters and is terminated with a null character. If a constant string is entered, it must be limited by single quotation marks.
Example: 'I am a string'.
If a string is to contain characters that cannot be displayed (e.g. line feed), escape sequences can be entered. The escape sequences begin with a backslash (\).
A backslash in combination with octal or hexadecimal numbers represents the ASCII or control code that corresponds to this value. A carriage return can be represented by '\ x0D', for example. If a backslash is to be used in the string, it must be doubled (\\). This is necessary, for example, when specifying directory paths. The following table contains all escape sequences:
sequence | value | character | importance |
\ a | 0x07 | BEL | Alarm tone |
\ b | 0x08 | BS | Backspace |
\ f | 0x0C | FF | Form feed |
\ n | 0x0A | LF | Line feed |
\ r | 0x0D | CR | Carriage return |
\ t | 0x09 | HT | Horizontal tab |
\ v | 0x0B | VT | Vertical tab |
l \\ | 0x5C | \ | Backslash |
\ ' | 0x27 | ' | Single apostrophe |
\ ” | 0x22 | " | Double apostrophe |
\? | 0x3F | ? | Question mark |
\ 0 | Octal number | ||
\ x | Hexadecimal number | ||
\ X | Hexadecimal number |
Window
The type "window" occupies 2 bytes of memory and contains an index to a GraphPic window. This must be specified in plain text in the script and must be enclosed by double quotation marks.
Comments
Any number of comments can be added to the script. The comments are separated from the program part by curly brackets. Comments can span several lines and be in the middle of a sequence of instructions. Nesting of comments is possible. Single-line comments are introduced by 2 consecutive slashes.
Script Commands
Commands
The following section provides an overview of all the features of the VisXpert scripting language. All entries have the same shape, but one or the other entry may be missing. The database functions for accessing paradox tables are described in the following chapter.
Example
Declaration:
Describes the formal declaration. If the function has a return value, it precedes the function name. The parameters are described by a type specification and the parameter name.
Function:
Describes the effect of the function.
Cross:
Refers to similar functions or functions related to the described.
Example:
A brief program example that uses the function described.
Internal database functions
VisXpert uses dBase-compliant file structures for the internal database. The tables can be stored on the hard disk or created in the main memory. If the file is created in the main memory, the data is lost after the program ends. Whether a file is created in memory or on the hard disk can be determined by the name. A file in memory starts with the path '$MEM'.
For the table functions, a variable of type DBTBL can be declared in a script. All table functions are then addressed together with the name of the variable, a period, and the name of the function.
Example:
dbtbl tbl
tbl.open('c:filesdata.dbf')
Append
Declaration: bool dbtbl. Append (dbrec record)
Hangs a new record at the end of the file and writes the contents of the record buffer to the record.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
ldbrec re
cbool ok
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
rec.empty
ok := tbl.append(rec)
rec.close
tbl.close
Bufopen
Declaration: bool dbtbl. Bufopen(dbrec record)
Opens the record buffer record and maps it to the table.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
ldbrec re
cbool ok
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
rec.empty
ok := tbl.append(rec)
rec.close
tbl.close
Close
Declaration: bool dbtbl.close
Closes the file. The table variable is set to NULL. All other accesses that are performed before an open will return an error.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
ldbrec re
cbool ok
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
rec.empty
ok := tbl.append(rec)
rec.close
tbl.close
Create
Declaration: bool dbtbl. Create(string name, string descr)
Creates a new file. If the name starts with '$MEM', the file is created only in main memory.
The structure of the file is determined by descr. The field descriptions are separated by semicolon. A field description consists of field name (max. 10 characters), field type, and optional decimal places for numeric fields. The possible field types are:
Field
Description
Field length
Decimal
c
Alphanumeric
1 - 255
-
N
Digital
1 - 19
Max. Field length - 2
D
Date
8
-
l
Logic field
1
-
The function returns true if it could be executed correctly.
Example:
dbtbl tb
ldbrec re
cbool ok
tbl.create('$MEMList.dbf', 'Name,C,10; Value,N,6,2;Date,D,8'
)tbl.bufopen(rec
)rec.empt
yok := tbl.append(rec
)rec.clos
etbl.close
Delete
Declaration: bool dbtbl.delete
Marks the current set as deleted. The set pointer must first be positioned correctly with Goto, First, Last, Next, or Prev. A final deletion of the record is only performed by calling the Pack function.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
lbool ok
tbl.open('c:filesdata.dbf')
tbl.goto(4)
ok := tbl.delete
tbl.pack
tbl.close
First
Declaration: bool dbtbl.first
The sentence pointer is placed on the first sentence.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
lbool ok
tbl.open('c:filesdata.dbf')
tbl.first
ok := tbl.delete
tbl.pack
tbl.close
Goto
Declaration: bool dbtbl.goto(long recnr)
The sentence pointer is set to the set recnr.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
lbool ok
tbl.open('c:filesdata.dbf')
tbl.goto(4)
ok := tbl.delete
tbl.pack
tbl.close
Get
Declaration: bool dbtbl. Get (dbrec record)
Reads the current record set from the file into the record buffer. The set pointer must first be positioned correctly with Goto, First, Last, Next, or Prev.
The function returns true if it could be executed correctly.
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.get(rec)
s := rec.ascii(1)
rec.ascii(1) := '123'
rec.close
tbl.close
GetNumIdx
Declaration: bool dbtbl.
GetNumIdx(dbrec record
, long field, long num)
Finds the first set whose numeric value in the field is num. If a sentence is found, it is read from the file into the record buffer. Because this is an index function, it can only be executed if the SetIndex function for the field has been called before.
It is recommended that you run SetIndex before each call to GetNumIdx (see example).
The function returns true if it could be executed correctly.
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.setindex(1)
tbl.getnumidx(rec, 1, 23)
s := rec.ascii(2)
rec.close
tbl.close
GetNumKey
Declaration: bool dbtbl.
GetNumKey(dbrec record
, long field, long num)
Finds the first set whose numeric value in the field is num. If a sentence is found, it is read from the file into the record buffer.
The function returns true if it could be executed correctly.
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf'
)tbl.bufopen(rec
)if tbl.getnumkey(rec, 1, 23)the
n s := rec.ascii(2)
endif
rec.close
tbl.close
GetStrIdx
Declaration: bool dbtbl.
GetStrIdx(dbrec record,
long field, string str)
Finds the first set whose alphanumeric value in the field field corresponds to the string str. If a sentence is found, it is read from the file into the record buffer. Because this is an index function, it can only be executed if the SetIndex function for the field has been called before.
It is recommended that you run SetIndex before each call to GetStrIdx (see example).
The function returns true if it could be executed correctly.
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.setindex(1)
tbl.getstridx(rec, 1, 'Search for me')
s := rec.ascii(2)
rec.close
tbl.close
GetStrKey
Declaration: bool dbtbl.
GetStrKey(dbrec record,
long field, string str)
Finds the first set whose alphanumeric value in the field field corresponds to the string str. If a sentence is found, it is read from the file into the record buffer.
The function returns true if it could be executed correctly.
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf'
)tbl.bufopen(rec
)if tbl.getstrkey(rec, 1, 'Search for me') the
n s := rec.ascii(2)
endif
rec.close
tbl.close
Import
Declaration: bool dbtbl
. Import (string file,
string delim, bool skip)
Imports the CSV file file into the table. Delim specifies the valid separator, usually comma or semicolon. If skip is true, the column description of the CSV file is ignored and the first column of the CSV file is mapped to the first field, and so on.
If the column description is used, it searches for fields of the same name and only inherits the data whose column description corresponds to a field name.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
lbool ok
tbl.create('$MEMali
st1.dbf', 'Operand,C,
10;' + 'Symbolism,C
,10;' + 'Text,C,40;'
+ 'Class,N,3;'
+ 'Art,C,40;'
+ 'Funk,C,1')
ok := tbl.import('C:filesalarms1.csv', ',', false)
tbl.close
Insert
Declaration: bool dbtbl. Insert (dbrec record)
Inserts a new record to the current location and writes the contents of the record buffer to the record. The set pointer must first be positioned correctly with Goto, First, Last, Next, or Prev.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
ldbrec re
cbool ok
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
rec.empty
tbl.first
ok := tbl.insert(rec)
rec.close
tbl.close
Last
Declaration: bool dbtbl.last
The sentence pointer is set to the last sentence.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
lbool ok
tbl.open('c:filesdata.dbf')
tbl.last
ok := tbl.delete
tbl.pack
tbl.close
Next
Declaration: bool dbtbl.next
The sentence pointer is set to the next sentence.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
lbool ok
tbl.open('c:filesdata.dbf'
)ok := tbl.firs
twhile ok d
o ok := tbl.next
enddo
tbl.close
nRecs
Declaration: long dbtbl.nrecs
Returns the number of existing records.
Example:
dbtbl tb
llong q
tbl.open('c:filesdata.dbf')
q := tbl.nrecs
tbl.close
Open
Declaration: bool dbtbl.open(string File)
Opens an existing file file.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
lbool ok
tbl.open('c:filesdata.dbf')
tbl.first
ok := tbl.delete
tbl.pack
tbl.close
Pack
Declaration: bool dbtbl. Pack
All records previously marked Delete for deletion are permanently deleted from the file. The data sets further back move forward.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
lbool ok
tbl.open('c:filesdata.dbf')
tbl.first
ok := tbl.delete
tbl.pack
tbl.close
Prev
Declaration: bool dbtbl.prev
The sentence pointer is placed on the sentence in front of it.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
lbool ok
tbl.open('c:filesdata.dbf'
)ok := tbl.las
twhile ok d
o ok := tbl.prev
enddo
tbl.close
RecNum
Declaration: long dbtbl.recnum
Returns the number of the current set (position of the sentence pointer).
Example:
dbtbl tb
llong nu
mbool ok
tbl.open('c:filesdata.dbf'
)ok := tbl.last
num := tbl.recnum
tbl.close
Resident
Declaration: bool dbtbl.resident
Leaves a file created in memory even after closing it. It can then be reopened by other scripts. The data will remain in place until the gateway ends or until the project is closed.
Example:
dbtbl tb
llong an
zbool ok
tbl.create('$MEMali
st1.dbf', 'Operand,C,
10;' + 'Symbolism,C
,10;' + 'Text,C,40;'
+ 'Class,N,3;'
+ 'Art,C,40;'
+ 'Funk,C,1')
tbl.resident
tbl.zap
ok := tbl.import('C:filesalarms1.csv', ',', false)
tbl.close
tbl.open('$MEMalist1.dbf')
anz := tbl.nRecs
tbl.close
ResidentEx
Declaration: bool dbtbl. ResidentEx(long type)
Leaves a file created in memory even after closing it. It can then be reopened by other scripts. The data is retained depending on the type:
Value (type)
Description
0
Table not resident
1
Table until project end resident
2
Table resident to gateway end or until the project closes
Example:
dbtbl tb
llong an
zbool ok
tbl.create('$MEMali
st1.dbf', 'Operand,C,
10;' + 'Symbolism,C
,10;' + 'Text,C,40;'
+ 'Class,N,3;'
+ 'Art,C,40;'
+ 'Funk,C,1')
tbl.residentEx(1)
tbl.zap
ok := tbl.import('C:filesalarms1.csv', ',', false)
tbl.close
tbl.open('$MEMalist1.dbf')
anz := tbl.nRecs
tbl.close
Setindex
Declaration: bool dbtbl. SetIndex(long field)
Sets an index to the field. A table can have one index per field.
The function returns true if it could be executed correctly.
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.setindex(1)
tbl.getstridx(rec, 1, 'Search for me')
s := rec.ascii(2)
rec.close
tbl.close
Update
Declaration: bool dbtbl. Update (dbrec record)
Writes the contents of the record record record to the current record. The set pointer must first be positioned correctly with Goto, First, Last, Next, or Prev.
The function returns true if it could be executed correctly.
Example:
dbtbl tb
ldbrec re
cbool ok
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
rec.empty
tbl.first
ok := tbl.update(rec)
rec.close
tbl.close
Zap
Declaration: bool dbtbl. Zap
Deletes all records in the table.
The function returns true if it could be executed correctly.
Example:
dbtbl tbl
tbl.open('c:filesdata.dbf')
tbl.zap
tbl.close
Record functions for the internal database
For the record functions, a variable of type 'DBREC' can be declared in a script. All record functions are then addressed together with the name of the variable, a period, and the name of the function.
Example:
dbtbl tbl
dbrec rec
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
rec.close
Ascii
Declaration: string dbrec. Ascii (long field)
Retrieves or writes the field field from the record buffer or into the record buffer. Regardless of the field type, the field is edited in ASCII.
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.get(rec)
s := rec.ascii(1)
rec.ascii(1) := '123'
rec.close
tbl.close
Alpha
Declaration: string dbrec. Alpha (long field)
Retrieves or writes the field field from the record buffer or into the record buffer. The field must be of type 'C' (character, alphanumeric).
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.get(rec)
s := rec.alpha(1)
rec.alpha(1) := 'writing'
rec.close
tbl.close
Bool
Declaration: bool dbrec. Bool (long field)
Retrieves or writes the field field from the record buffer or into the record buffer. The field must be of type 'L' (Logical).
Example:
dbtbl tb
ldbrec r
ecbool b
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.get(rec)
b := rec.bool(2)
rec.bool(2) := true
rec.close
tbl.close
Close
Declaration: dbrec. Close
Closes the record buffer and frees the memory used.
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.get(rec)
s := rec.ascii(3)
rec.close
tbl.close
Date
Declaration: string dbrec. Date(long field)
Retrieves or writes the field field from the record buffer or into the record buffer. The field must be of type 'D' (Date).
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.get(rec)
s := rec.date(3)
rec.date(3) := '13.04.1961'
rec.close
tbl.close
Empty
Declaration: dbrec. Empty
Deletes the contents of the record buffer.
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
rec.empty
tbl.append(rec)
rec.close
tbl.close
Long
Declaration: long dbrec. Long (long field)
Retrieves or writes the field field from the record buffer or into the record buffer. The field must be of type 'N' (Numeric) without coma places.
Example:
dbtbl tb
ldbrec r
eclong l
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.get(rec)
l := rec.long(4)
rec.long(4) := 455
rec.close
tbl.close
Putblank
Declaration: dbrec. PutBlank (long field)
Writes an empty value to the field in the record buffer.
Example:
dbtbl tbl
dbrec rec
string s
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.get(rec)
s := rec.date(3)
rec.putblank(3)
rec.close
tbl.close
Real
Declaration: double dbrec. Real (long field)
Retrieves or writes the field field from the record buffer or into the record buffer. The field must be of type 'N' (Numeric).
Example:
dbtbl tbl
dbrec rec
double d
tbl.open('c:filesdata.dbf')
tbl.bufopen(rec)
tbl.get(rec)
d := rec.real(5)
rec.real(5) := 123.45
rec.close
tbl.close
DB-Grid Functions
GridSetSqlStmt
Declaration: GridRefresh(string Win, string Elem, string Stmt)
Function: Sets the SQL statement stmt of the data grid specified by Elem in the Win window.
Cross-reference: GridRefresh
Example:
GridSetSqlStmt('Fenster_1', 'Datengrid_1', 'select * from P_VALUES')
GridRefresh('Fenster_1', 'Datengrid_1')
GridRefresh
Declaration: GridRefresh(string Win, string Elem)
Function: Refreshes the data grid specified by Elem in the Win window.
Cross:
Example:
GridRefresh('Fenster_1', 'Datengrid_1')
GridGetCol
Declaration: long GridGetCol(string Win, string Elem)
Function: Returns the currently selected column of the data grid specified by Elem in the Win window (if no column is selected, -1 is supplied ...).
Cross-reference: GridSetCol
Example:
long l
l := GridGetCol('Fenster_1', 'Datengrid_1')
GridGetRow
Declaration: long GridGetRow(string Win, string Elem)
Function: Returns the currently selected data record of the data grid specified by Elem in the Win window (for the first record 0 is supplied ...).
Cross:
Example:
long l
l := GridGetRow('Fenster_1', 'Datengrid_1')
GridGetText
Declaration: string GridGetCol(string Win, string Elem)
Function: Returns the contents of the column where the cursor is located.
Cross-reference: GridSetText
Example:
string s
s := GridGetText('Fenster_1', 'Datengrid_1')
GridSetCol
Declaration: GridSetCol(string Win, string Elem, long Col)
Function: Sets the currently selected column of the data grid specified by Elem to Col in the Win window.
Cross-reference: GridGetCol
Example:
GridSetCol('Fenster_1', 'Datengrid_1', 2)
GridSetRow
Declaration: GridSetRow(string Win, string Elem, long Row)
Function: Sets the currently selected data record of the data grid specified by Elem to Row in the Win window (for the first record 0 must be passed ...).
Cross:
Example:
GridSetRow('Fenster_1', 'Datengrid_1', 5)
GridSetText
Declaration: GridSetText(string Win, string Elem, string Txt)
Function: Sets the contents of the column in which the cursor is located to Txt.
Cross:
Example: GridGetText
GridSetText('Fenster_1', 'Datengrid_1', 'Test')
Block operations
Block operations allow you to manipulate data Blocks from an PLC. An Block is basically an Array of Bytes, that can be manipulated via the functions below. This allows you to write complex data structures into these blocks, that then get sent to the corresponding controllers. This allows you for example to send Strings or other data structures into the controllers.
These functions are usually used in three steps:
- Create an new block by calling "NewBlock(<blocklength>)
- Manipulate this new block by calling any of the functions below
- Write the block that was created by "NewBlock" to the controller via assigning it to an VisXpert Varaible or by calling SetGPBlock
Blocksize
Declaration | long Blocksize (block b) |
Function | Returns the length of block b. |
Cross | NewBlock |
Example | block b long size b := newblock(1024) size := blocksize(b) |
BlockToStr
Declaration | string BlockToStr(block b) |
Function | Converts the b bytewise to a string (hexadecimal representation). |
Cross | StrToBlock |
Example | block b string s b := NewBlock(2) SetBlockNum(b, 0, 1, false, 1) SetBlockNum(b, 1, 1, false, 2) s := BlockToStr(b) |
GetBlockNum
Declaration | long GetBlockNum(block b, long pos, long size, bool sign) |
Function | Reads an integer number from block b from the position pos where the count starts at 0. Size is the number of bytes to be read out and whether the number is signed. Valid formats are: |
Cross | GetBlockStr, SetBlockNum |
Example | block b long l string s b := "SPS1:DATA BLOCK" l := getblocknum(b, 0, 2, false) s := getblockstr(b, 2, l) |
Size | Sign | Type |
1 | true | Bytes -128 - +127 |
1 | False | Bytes 0 - 255 |
2 | true | Integer -32,768 - 32,767 |
2 | False | Word 0 - 65,535 |
4 | true | Long -2,147,483,648 to 2,147,483,647 |
GetBlockStr
Declaration | string GetBlockStr(block b, long pos, long size) |
Function | Reads a string from block b from the position pos where the count starts at 0. Size is the number of bytes to be read out. The string automatically closes with a null character |
Cross | GetBlockNum, SetBlockStr |
Example | block b long l string s b := "SPS1:DATA BLOCK" l := getblocknum(b, 0, 2, false) s := getblockstr(b, 2, l) |
GetBlockStrSwap
Declaration | string GetBlockStrSwap(block b, long pos, long size) |
Function | Reads a string from block b from the position pos where the count starts at 0. Size is the number of bytes (straight-numbered) to be read out. The bytes are exchanged and the string is automatically completed with a zero character. |
Cross | GetBlockStr, SetBlockStr |
Example | block b long l string s b := "SPS1:DATA BLOCK" l := getblocknum(b, 0, 2, false) s := getblockstrswap(b, 2, l) |
NewBlock
Declaration | block NewBlock(long size) |
Function | Creates a new block with size bytes in length. If the desired space cannot be provided, a blank block of 0 length is created. The maximum size of a block is 65,496 bytes. |
Cross | Blocksize, SetBlockNum, SetBlockStr |
Example | block b b := newblock(1024) if blocksize(b) = 0 then debug('Crap, no memory free') Endif |
SetBlockNum
Declaration | SetBlockNum(block b, long pos, long size, bool sign,long x) |
Function | Writes the integer number x to block b from the position pos where the count starts at 0. Size is the number of bytes to be written and whether the number is signed. Valid formats are |
Cross | GetBlockStr, GetBlockNum |
Example | block b b := newblock(128) setblocknum(b, 0, 1, false, 6) setblockstr(b, 1, 6, 'ABCDEF') |
Size | Sign | Type |
1 | true | Bytes -128 - +127 |
1 | False | Bytes 0 - 255 |
2 | true | Integer -32,768 - 32,767 |
2 | False | Word 0 - 65,535 |
4 | true | Long -2,147,483,648 to 2,147,483,647 |
SetBlockStr
Declaration | SetBlockStr(block b, long pos, long size, string x) |
Function | Writes the string x to block b from the position pos where the count starts at 0. Size is the number of bytes to be written |
Cross | GetBlockNum, GetBlockStr |
Example | block b b := newblock(128) setblocknum(b, 0, 1, 6, false) setblockstr(b, 1, 6, 'ABCDEF') |
StrToBlock
Declaration | string BlockToStr(block b) |
Function | Converts the string s (hexadecimal representation) to a block. |
Cross: | BlockToStr |
Example: | block b string s s:= '01020304' b := StrToBlock(s) |
General Functions
AnsiToOem
Declaration: | string AnsiToOem (string text) |
Function: | Reads the string text, carries out a type conversion of the individual characters and returns a string with characters according to the OEM conventions. |
Cross reference: | OemToAnsi |
Example: | string TEXTTEXT: = ansitooem ('Similarities are no coincidence') |
Debug
Declaration: | Debug (string text) |
Function: | Writes the string text in the logbook. |
Example: | if "SPS1: pressure"> 100 then debug ('pressure too high!') endif |
EditCancel
Declaration: | EditCancel |
Function: | Discards the value of the input fields and exits the edit mode. |
Example: | EditCancel |
EditCommit
Declaration: | EditCommit |
Function: | Accepts the value of the input fields in the connected GraphPic variables and exits the edit mode. |
Example: | EditCommit |
Exec
Declaration: | Exec (string command) |
Function: | Starts another application. The file name and optional parameters are passed in the command string. |
Example: | exec ('notepad.exe info.txt') |
GetComputerName
Declaration: | string GetComputerName |
Function: | Returns a string with the computer name |
Cross reference: | |
Example: | string ss: = GetComputerName |
GetEditfeld
Declaration: | string GetEditfeld |
Function: | Returns a string with the name of the active edit field |
Cross reference: | SetEditfeld |
Example: | string ss: = geteditfeld |
GetVisuTitle
Declaration: | string GetVisuTitle |
Function: | Returns the title of the current HMI visu Window. this allows you to distinguish between multiple HMI runtimes. Mostly used in Multi monitor situations |
Example: | string ss: = GetVisuTitle |
GetKeyState
Declaration: | long GetKeyState (long nVirtKey) |
Function: | The nVirtKey parameter specifies the virtual key. The keys A to Z correspond to the ASCII characters A - Z, i.e. the value 0x41 - 0x5A The keys 0 to 9 correspond to the ASCII characters 0 - 9, i.e. the value 0x30 - 0x39 The F key assignment is shown in hex form from F1 0x70 to F24 0x87 return value : If bit 7 is set, the key is pressed. If bit 0 is set, the key has been toggled. A key such as CAPS-LOCK provides the status switched when it is on. The key is not pressed and not toggled when bit 0 is equal to 0. Further functions can be found on the web under “nVirtKey table”. All Virtual key codes can be found here: https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes |
Example: | long l, nVirtKey nVirtKey: = 0x01 l: = GetKeyState (nVirtKey) if ((l and 0x80) = 0x80) then debug ('Left mouse button is pressed') endif nVirtKey: = 0x02 l: = GetKeyState (nVirtKey) if ((( l and 0x80) = 0x80) then debug ('right mouse button is pressed') endif nVirtKey: = 0x04 l: = GetKeyState (nVirtKey) if ((l and 0x80) = 0x80) then debug ('middle mouse button is pressed') endif |
Constant | Value | Description |
vbKeyLButton | 0x1 | Left mouse button |
vbKeyRButton | 0x2 | Right mouse button |
vbKeyCancel | 0x3 | CANCEL BUTTON |
vbKeyMButton | 0x4 | Middle Mouse Button |
vbKeyBack | 0x8 | BACKSPACE |
vbKeyTab | 0x9 | TAB key |
vbKeyClear | 0xC | DELETE key |
vbKeyReturn | 0xD | ENTER |
vbKeyShift | 0x10 | SHIFT |
vbKeyControl | 0x11 | CTRL key |
vbKeyMenu | 0x12 | MENU BUTTON |
vbKeyPause | 0x13 | PAUSE KEY |
vbKeyCapital | 0x14 | CAPS Lock key |
vbKeyEscape | 0x1B | ESC KEY |
vbKeySpace | 0x20 | SPACEBAR |
vbKeyPageUp | 0x21 | PAGE UP KEY |
vbKeyPageDown | 0x22 | PAGE DOWN KEY |
vbKeyEnd | 0x23 | END KEY |
vbKeyHome | 0x24 | HOME KEY |
vbKeyLeft | 0x25 | LEFTARROW KEY |
vbKeyRight | 0x26 | RIGHT ARROW KEY |
vbKeyUp | 0x27 | UP KEY |
vbKeyDown | 0x28 | DOWN KEY |
vbKeySelect | 0x29 | SELECTION KEY |
vbKeyPrint | 0x2A | Print key |
vbKeyExecute | 0x2B | Run button |
vbKeySnapshot | 0x2C | snapshot button |
vbKeyInsert | 0x2D | INSERT key |
vbKeyDelete | 0x2E | delete button |
vbKeyHelp | 0x2F | HELP BUTTON |
vbKeyNumlock | 0x90 | NUM LOCK |
GetLastErrNo
Declaration: | long GetLastErrNo |
Function: | The function returns an error number if it is called after direct access to PLC operands (GETGP…, SETGP…), after an indirect window operation (OpenWinEx…) or after DbQuery / DbExec. If the operation is carried out correctly, 0 is returned, in the event of an error a value> <0. |
Cross reference: | GetGpBlock., SetGpBlock, OpenWinEx, GetLastErrStr |
GetLastErrStr
Declaration: | string GetLastErrStr |
Function: | The function returns an error number if it is called after direct access to PLC operands (GETGP…, SETGP…), after an indirect window operation (OpenWinEx…) or after DbQuery / DbExec. If the operation is carried out correctly, an empty string is returned; in the event of an error, an error text is returned. |
Cross reference: | GetGpBlock, SetGpBlock, OpenWinEx, GetLastErrNo |
GetMousePosX
Declaration: | GetMousePosX (window win) |
Function: | Returns the X value of the mouse cursor when the cursor is in the window designated by win. |
Cross reference: | GetMousePosY, GetMousePosXEx, GetMousePosYEx |
Example: | Long x x: = GetMousePosX ("Window_1") |
GetMousePosXEx
Declaration: | GetMousePosXEx (string win) |
Function: | Returns the X value of the mouse cursor when the cursor is in the window designated by win. |
Cross reference: | GetMousePosYEx, GetMousePosX, GetMousePosY |
Example: | Long x x: = GetMousePosXEx ('Window_1') |
GetMousePosY
Declaration: | GetMousePosY (window win) |
Function: | Returns the Y-value of the mouse cursor when the cursor is in the window designated by win. |
Cross reference: | GetMousePosX, GetMousePosXEx, GetMousePosYEx |
Example: | Long y y: = GetMousePosY ("Window_1") |
GetMousePosYEx
Declaration: | GetMousePosYEx (string win) |
Function: | Returns the Y-value of the mouse cursor when the cursor is in the window designated by win. |
Cross reference: | GetMousePosXEx, GetMousePosX, GetMousePosY |
Example: | Long yy: = GetMousePosYEx ('Window_1') |
GetPrjDir
Declaration: | string GetPrDir |
Function: | Returns the project path. Always returns the directory where the GpMainPj.xml file is located, always terminated with an "\". for example: C:\Projects\HMIArea1\ |
Example: | string prjDirprjDir: = GetPrjDir |
GetScriptLineNo
Declaration: | long GetScriptLineNo |
Function: | Returns the line number of the currently executed script |
Cross reference | GetScriptLineText |
example | long nLineNo string szText nLineNo: = GetScriptLineNo szText: = GetScriptLineText (nLineNo) |
GetScriptLineText
Declaration: | string GetScriptLineText (long nLineNo) |
Function: | Returns the line nLineNo currently executing scripts. |
Cross reference: | GetScriptLineNo |
Example: | long nLineNo string szText nLineNo: = GetScriptLineNo szText: = GetScriptLineText (nLineNo) |
GetScriptName
Declaration: | string GetScriptName |
Function: | Returns the name of the currently executed script. |
Cross reference: | |
Example: | string szScript szScript: = GetScriptName |
GetSystemLanguage
Declaration: | long GetSystemLanguage |
Function: | Returns the language ID of the operating system. |
Cross reference: | |
Example: | long nLangId nLangId: = GetSystemLanguage |
GetUserName
Declaration: | string GetUserName |
Function: | Returns the name of the user who is currently logged in. |
Cross reference: | GetUserPrivs |
Example: | string useruser: = GetUserName |
GetUserPrivs
Declaration: | long GetUserPrivs |
Function: | Returns the rights of the currently logged in user. |
Cross reference: | GetUserName |
Example: | long privsprivs: = GetUserPrivs |
GetVarComment
Declaration: | string GetVarComment (string Var) |
Function: | Returns the variable comment of the variable specified by the string Var (format 'group name: variable name'). |
Cross reference: | |
Example: | string szVarComment szVarComment: = GetVarComment ('Mem: Var1') |
GetVarGroup
Declaration: | string GetVarGroup (string szWin, string szObj) |
Function: | Returns the variable group of the dynamics of the specified element szObj in the szWin window. If the element is bound to different GraphPic variable groups ??? delivered. |
Cross reference: | SetVarGroup |
Example: | string szGrp szGrp: = GetVarGroup ('Window_1', 'Text_1') |
Log in
Declaration: | Log in |
Function: | Opens the dialog box for logging in a user. |
Cross reference: | Logout |
Example: | Log in |
Logout
Declaration: | Logout |
Function: | Logs out the currently logged in user. |
Cross reference: | Log in |
Example: | Logout |
MessageBox
Declaration: | long MessageBox (string text, string title, long style) |
Function: | A message box window with the "title" is generated and displayed. The string text is output in the window. The messagebox can be provided with different buttons and icons. This appearance is defined with the "style" parameter. |
If the value 0 is specified for “style”, an application-modal message box is created without an icon and with an OK button. "Style" can also be a combination of the following values:
value | meaning |
0x0001 | two buttons: OK, CANCEL |
0x0002 | three buttons: ABORT, RETRY, IGNORE |
0x0003 | three buttons: YES, NO, CANCEL |
0x0004 | two buttons: YES, NO |
0x0005 | two buttons: RETRY, CANCEL |
0x0010 | Icon: STOP |
0x0020 | Icon: QUESTION |
0x0030 | Icon: EXCLAMATION |
0x0040 | Icon: INFORMATION |
0x0100 | Default: button 2 |
0x0200 | Default: button 3 |
0x1000 | System modal |
0x2000 | Task modal |
Style
The return value of the function depends on the button pressed:
value | meaning |
1 | OK button pressed |
2 | CANCEL button pressed |
3 | ABORT button pressed |
4th | RETRY button pressed |
5 | IGNORE button pressed |
6th | YES button pressed |
7th | NO button pressed |
Return value
Cross reference: | Debug |
Example: | long res if "SPS1: DB100 D 1.2" = 1 then res: = messagebox ('open window', 'alarm', 0x0034) if res = 6 then openwin ('window_3') endif endif |
OemToAnsi
Declaration: | string OemToAnsi (string text) |
Function: | Reads the string text, carries out a type conversion of the individual characters and returns a string with characters in accordance with the ANSI conventions. |
Cross reference: | AnsiToOem |
Example: | string TEXTTEXT: = oemtoansi ('Similarities are no coincidence') |
return
Declaration: | Return [value] |
Function: | Terminates the script. If the script is a script variable, a return value must be specified that corresponds to the type of the script variable. Application and window scripts have no return value. If Return is called in a conditional sequence of statements, there must still be a return in the absolute statement section. |
Example: | if "intern: bool" then "SPS1: DB100 D 1.2": = 10 return 1 else "SPS1: DB100 D 1.2": = 20 return 0 endif {always required!} |
SetLoginDefaultUser
Declaration: | SetLoginDefaultUser (string user) |
Function: | This means that the user who appears in the login dialog can be pre-assigned. |
Cross reference: | |
Example: | SetLoginDefaultUser ('User_XY') |
ShowPasswordDlg
Declaration: | ShowPasswordDlg (string user) |
Function: | This can be used to change a user's password. The value that appears for the user name in the dialog can be specified in the "user" parameter. |
Cross reference: | |
Example: | ShowPasswordDlg ('User_XY') |
SetEditfeld
Declaration: | SetEditfeld (string) |
Function: | The function places the cursor in the I / O field that was addressed via the string with the content window name I / O field name. At the same time, the EDIT system variable is set to "true". |
Cross reference: | GetEditfeld |
Example: | string s s: = ' Window_1st operand field' seteditfeld (s) |
SetCursor
Declaration: | SetCursor (long cursor) |
Function: | Places the mouse pointer. If 1 is passed as the value, the hourglass appears, otherwise the arrow. |
Cross reference: | |
Example: | SetCursor (1) |
SetUser
declaration | SetUser (string User, string Pwd, long tm) |
function | Logs on the user specified by User with the specified password Pwd. If -1 is transferred for the time tm, the user is not automatically logged off again. Otherwise the user will be logged off again according to the specified time in milliseconds. |
Cross reference | |
example | SetUser ('Scott', 'Tiger', 60000) |
SetVarGroup
Declaration: | long SetVarGroup (string szWin, string szObj, string szGrp) |
Function: | Sets the variable group of the dynamics of the specified element szObj in the szWin window to szGrp. If it is OK, 0 is returned, otherwise a corresponding error number. WARNING! this does not change Script variables |
Cross reference: | GetVarGroup |
Example: | long nResult nResult: = SetVarGroup ('Window_1', 'Text_1', 'SPS2') |
SetLanguage
Declaration | SetLanguage(long LangID) |
Function | Set the current UI Language of the application to the Language indicated by its Language ID. You can also use the global system variable "@SystemCommands:Language" to do the same |
Example | SetLanguage(9) //10 Spanish |
Language | ID |
English | 9 |
Spanish | 10 |
German | 7 |
French | 12 |
Russian | 25 |
Italian | 16 |
Chinese | 4 |
Dutch | 19 |
Greek | 8 |
Portuguese | 22 |
Polish | 21 |
Turkish | 31 |
Cyrilic | 5 |
Translate
Declaration | Translate(string TexttoTranslate) |
Function | Translates an navtive text into an localized text. the native text can be taken from the Language export file that is generated from the VisuEditor by exporting/editing the foreign language texts. Translation texts generally take the following form: <WindowName>.<ObjectName>.Text such as: StartWin.Greeting.Text |
Example | SetPropText("StartWindow", "GreetingsText", Translate("StartWindow.Greetings")) |
KeyDown
Declaration | KeyDown(long KeyCode) |
Function | Sends the indicated key code to the Hmi application and emulates the corresponding Key press. The modifyer Key codes can be taken from the table in function "GetKeyState". All Virtual key codes can be found here: https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes |
Example | KeyDown(0x14) //Caps lock on KeyDown(0x42) //Letter b, now is B KeyDown(0x14) //Release Caps lock agein |
GetBinDir
Declaration | string GetBinDir() |
Function | Get the fully qualified path to the binary directory inside the VisXpert installation directory. The path does NOT terminate with an "\" |
Example | string BinDirPath BinDirPath := GetBinDir //returns "C:\Program Files (x86)\VisXpert\bin" |
IsLoginDlgOpen
Declaration | bool isLoginDlgOpen() |
Function | Returns true if currently any Login dialog is open of any of the login services |
Example |
CancelLoginDlg
Declaration | CancelLoginDlg() |
Function | Closes all currently active login dialogs |
Example |
File function
File functions allow you to manipulate local and remote files. The file functions support UNC Network path (for example "\\Server1\Share1\test.txt"). However it is recommended to write and read only files that reside inside the current project directory. To get the current Project directory you can use the function "GetPrjDir". This function always returns the directory where the GpMainPj.xml file is located, always terminated with an "\".
Please keep in mind that VisXpert uses C-Style string escaping. So you have to use double \ for an single \ in the resulting filename. The first backslash is the escape character, and the second the final character.
CopyDir
Declaration | CopyDir(string src, string dst, bool fMove) |
Function | Copies the files from the source directory src to the destination directory dst if fMove is false, or moves the files from the source directory src to the target directory dst if fMove is true. |
Example | CopyDir('D:\\Data', 'X:\\BackupData', false) |
Copyfile
Declaration | CopyFile(string srcFile, string dstFile) |
Function | Copies the source file srcFile to dstFile (destination file). |
Cross | Deletefile |
Example | CopyFile('C:\\DataLog.txt','C:\\TempProtocol.txt', true) |
CreateDir
Declaration | CreateDir(string dir) |
Function | Creates the directory for you. |
Cross | Removedir |
Example | CreateDir('C:\\Data') |
Deletefile
Declaration | DeleteFile(string file) |
Function | Deletes the file. |
Cross | Copyfile |
Example | DeleteFile('C:\\DataProtocol.txt') |
ExistFile
Declaration | bool ExistFile (string file) |
Function | Determines whether the specified file file exists |
Example | Bool fExist fExist := ExistFile('C:\\DataProtocol.txt') |
GetFileList
Declaration | string GetFileList(string path) |
Function | Returns the files of the specified directory (path) separated with CR LF. |
Cross | GetFileTime |
Example | string s s := GetFileList('C:\\TEMP*.*') |
GetFileTime
Declaration | double ExistFile (string file) |
Function | Gets the timestamp of the last change to the specified file file. |
Example | Double ts ts :=getFileTime('C:\\DataProtocol.txt') |
ReadTxt
Declaration | string ReadTxt(string file) |
Function | Returns the contents of the file file as a string |
Example | String s s := ReadTxt('D:\\Quantities.txt') |
Removedir
Declaration | RemoveDir(string dir) |
Function | Delete the directory to you. The specified directory must be empty. |
Cross | CreateDir |
Example | RemoveDir('C:\\Data') |
WriteTxt
Declaration | WriteTxt(string file, string s, bool fOverwrite) |
Function | Appends the string s to the file file file. If fOverwrite is true, an existing file is overwritten. |
Example | WriteTxt('D:\\Quantities.txt', 'Produced quantity: 230', true) |
SQL Database Functions
These functions allow you to query or modify data on an SQL server. VisXpert comes with an built in SQL-Server database which is usually included in the project. However all functions allow you to specify an custom Connection string, allowing you to connect to any ODBC compatible database, such as SQL-Server or MS-Access Files.
To query data you use DBQuery and then parse the "result" string by functions like "GetRowCnt" and an combination of "GetRow" to get the Row you want to process and then "GetCol" to get the data-field you need. If you leave the "ConnectionString" parameter empty, the project internal database is used.
The result of DBQuery returns the data as an CSV formatted string. The first line hold the names of the columns, the second row hold their datatypes. The actual data starts at the third row
This usually follows this structure:
string result
result := DbQuery('', 'Select TestColumn1, Column2, OtherColumn3 from TestingData')
long rowNo
rowNo := 3 //first row are the field names, second row holds the datatypes
//go through each row, starting at the first row. The first row is row number 1
while rowNo <= GetRowCnt(result)
string row, data
row := GetRow(result, rowNo) //first get the current row we are processing
data := GetCol(row, 2) //then get the column of that row, in our case the second row
data := GetColByName(result, rowNo, 'Column2') //this is equivalent to the previous line
....Process data here....
rowNo := rowNo + 1 //go to the next row
endwhile
Example of usage of SQL Query functions
DbExec
Declaration | long DbExec (string ConnectString, string SqlStmt) |
Function | Runs the specified string SqlStmt on the database specified by the String ConnectString and returns the number of changed records. If the ConnectString is passed empty string, the statement is displayed on the in the file.. USER_DATSQLGP.udl specified database. |
Cross | DbQuery, DbTest, DbClose |
Example | long nRows nRows := DbExec(", 'UPDATE AL_CLASSES SET DESCRIPTION_0 = 'Message class 1' WHERE ID = 1') |
DbQuery
Declaration | string DbQuery<(string ConnectString, string SqlStmt) |
Function | Executes the specified Select statement SqlStmt on the database specified by the String ConnectString and returns the selected records in the CSV form (comma separated, CR LF) (row 1 contains the column names, row 2 contains the column types, and from row 3 the selected records, if any, are returned). If the ConnectString is passed empty string, the statement is displayed on the one in the file.. USER_DATSQLGP.udl specified database. |
Cross | DbExec, DbTest, DbClose |
Example | string szResultSet szResultSet := DbQuery('', 'SELECT * FROM AL_CLASSES') |
DbTest
Declaration | long DbTest (string ConnectString) |
Function | Opens the specified database connection and returns the same as GetLastErrNo ("last error") for the database connection specified by the String ConnectString. If the ConnectString is passed empty string, the "last error" of the one in the file.. USER_DATSQLGP.udl specified database. This function is useful to ensure that an database is connected. If this function is combined with DBTest, you can perform an database Reconnect |
Cross | DbExec, DbQuery, DbClose |
Example | long nResult nResult := DbTest(") |
DbClose
Declaration | DbClose (string ConnectString) |
Function | Closes the database connection specified by the String ConnectString. If the ConnectString is passed empty string, the in the file.. USER_DATSQLGP.udl specified database closed. If this function is combined with DBTest, you can perform an database Reconnect |
Cross | DbExec, DbQuery, DbTest |
Example | DbClose(") |
DbMsg
Declaration | bool DbMsg(long message group, string operand, string action) |
Function | Executes the message transaction specified by the string action with the message group and operand parameters and returns TRUE or FALSE. Message transactions operate on the current active Alarm Message archive and allow you to activate or deactivate alarm messages in the alarm system from within scripts. This function can be used to create Alarm messages not dependent on variables but rather are created via scripts. |
Cross | DbMsgExt |
Example | bool rv rv := DbMsg(1, 'M 3.0', 'K') |
DbMsgExt
Declaration | bool DbMsgExt(long messagegroup, string operand, string action, string timestamp, string symbolik, string text, long messageclass, long messagetype) |
Function | Executes the message transaction specified by the string action with the parameters message group, operand, timestamp, symbolic, test, message class and message type, and returns TRUE or FALSE. |
Cross | DbMsg |
Example | bool rv rv := DbMsgExt(1, 'M 3.1', 'K', '2008-03-12 13:09:11.000', 'SYM', 'TEXT', 1, 2) |
GetRowCnt
Declaration | long GetRowCnt(string s) |
Function | Returns the number of rows of the specified string s. |
Cross | GetColCnt |
Example | long r r := GetRowCnt('"Zeile_1"' + 'rn' + '"Zeile_2"' + 'rn') |
GetColCnt
Declaration | long GetColCnt(string s) |
Function | Returns the number of columns of the specified string s. |
Cross | GetRowCnt |
Example | long c c := GetColCnt('"Spalte_1", "Spalte_2"' + 'rn') |
GetRow
Declaration | string GetRow(string s, long r) |
Function | Returns the row r of the specified string s. |
Cross | GetRowCnt, GetColCnt |
Example | String s s := GetRow('"Zeile_1"' + 'rn' + '"Zeile_2"' + 'rn', 2) |
GetCol
Declaration | string GetCol(string s, long r, long c) |
Declaration | Returns the value of column c of row r of the specified string s. |
Cross | GetColbyName |
Example | String s s := GetCol('"Wert_1_1", " Wert_1_2"' + 'rn' + '"Wert_2_1", " Wert_2_2" + 'rn', 2, 1) |
GetColbyName
Declaration | String GetColByName(string s, long r, string c) |
Function | Returns the value of column c of row r of the specified string s. In the first row, all column names must be present. |
Example | String s s := GetColByName('"Spalte_1", "Spalte_2"' + 'rn' + '"Wert_1_1", "Wert_1_2"' + 'rn' + '"Wert_2_1", "Wert_2_2"' + 'rn', 3, 'Spalte_2') |
Date and time functions
AToTs
Declaration:
double AToTs(string s)
Function:
Returns the timestamp of the specified time.
Cross:
Example:
double ts
ts := AToTs('12:00:00, 01.01.2000'
GetDateStr
Declaration:
string GetDateStr
Function:
The function returns a string with the current system date in the format "TT. MM.YYYY".
Cross:
Example:
string d
d := getdatestr
GetNow
Declaration:
double GetNow
Function:
Returns the timestamp of the current time.
Cross:
Example:
double ts
ts := GetNow
Gettime
Declaration:
long GetTime
Function:
The function returns the seconds since midnight for the current time.
Cross:
Example:
long s
s := gettime
LocalTimeToUTC
Declaration:
double LocalTimeToUTC(double dftLocalTime)
Function:
Converts the specified timestamp dftLocalTime from local time to UTC time.
Cross:
Example:
double dftUtcTime
dftUtcTime := LocalTimeToUTC(GetNow)
Settime
Declaration:
SetTime (long day, long month, long year, long hour, long minute, long second)
Function:
Sets the current time.
Example:
SetTime (31, 12, 2000, 23, 59, 00)
TimeStr
Declaration:
string TimeStr (long seconds)
Function:
The function calculates the time from the value seconds (seconds since midnight) and returns a string in time format (hh:mm:ss).
Cross:
Example:
string t
t := timestr(36000)
TsToA
Declaration:
string TsToA(double ts)
Function:
Returns the time as a string of the specified timestamp.
Cross:
Example:
string s
s := TsToA(GetNow)
UTCToLocalTime
Declaration:
double UTCToLocalTimeToUTC(double dftUtcTime)
Function:
Converts the specified timestamp dftUtcTime from UTC time to local time.
Cross:
Example:
double dftLocalTime
dftLocalTime := UTCToLocalTime(GetNow)
WeekDay
Declaration: long WeekDay(string date)Function: The function is calculated from the string date (TT. MM.YYYY) and returns a value between 0 (Sunday) and 6 (Saturday). Cross-reference: GetDateStrExample: long ww := weekday(31.01.1996)WeekOfYear
Declaration:
long WeekOfYear(double dftTimeStamp, long nFormat)
Function:
The function calculates the corresponding calendar week from the timestamp dftTimeStamp. If format 0 is specified, the calculation is made according to DIN 1366. If specified for format 1, the calculation is based on the UK/US scheme.
Cross:
Example:
long nWeeknWeek := WeekOfYear(GetNow, 0)
Direct access to variable
Overview
With these functions variables from VisXpert can be accessed by passing their name as string to these functions. this allows you to access variables indirectly and also allows you to dynamically build up the variables name. The Write functions exist as Asynchronous and Synchronous versions. Read Functions are always Synchronous.
Caution: The "SetGP..." and "GetGP.." commands described below are handled synchronously, i.e. they cause traffic through the driver addressed. Only after the reading operation (GetGP..) or Write (SetGP..), the script continues execution. This may increase the runtime of the script to be very high and temporarily freeze the HMI (for example the event of a connection error of driver).
Direct data access
VisXpert's driver programs allow direct access to PLC values without first having to define a corresponding variable in the configuration program. To use an direct variable you have to specify the variable group and prepend the variable name with an "#". The form of how to construct the Variable identifier depends on the type of driver used. To use the operand of the following form:
<Group Name>:#<PLC Address>
for Example for Siemens S7:
GetGPLong('PLC01:#DB11.DBD12')
All functions described below can use these direct data access.
To know more about how to construct for the PLCData driver, please read the corresponding article in this documentation.
GetGpBlock
Declaration | block GetGPBlock(string source) |
Function | Reads a block of data by direct driver access from the PLC operand addressed via source (format 'groupname: ....') or from the variable addressed and configured via source (format 'groupname:variablename'). It is read from the specified operand with the length of the specified block. |
Example | block b string q b := newblock(12) q := 'SPS2:#DB100 DW10 TD12' b := getgpblock(q) |
GetGpBool
Declaration | boolean GetGpBool(string source) |
Function | Reads a Boolean value by direct driver access from the PLC operand addressed via source (format 'groupname: ....') or from the variable addressed and configured via source (format 'groupname:variablename'). |
Example | string q q := 'SPS1:#M 15.7' b := getgpbool(q) |
GetGpDouble
Declaration | double GetGpDouble(string source) |
Function | ds a double value by direct driver access from the PLC operand addressed via source (format 'groupname: ....') or from the variable addressed and configured via source (format 'groupname:variablename'). |
Example | Example: double d d := getgpdouble('Steuerung_5:#ED 24') |
GetGpLong
Declaration | long GetGpLong(string source) |
Function | Reads a long value by direct driver access from the PLC operand addressed via source (format 'groupname: ....') or from the variable addressed and configured via source (format 'groupname:variablename'). |
Example | long l l := getgplong('Steuerung_5:#EW 24') |
GetGpText
Declaration | string GetGpText(string source) |
Function | Reads a string by direct driver access from the PLC operand addressed via source (format 'groupname: ....') or from the variable addressed and configured via source (format 'groupname:variablename'). |
Example | string s, q q := 'SPS3:#DB10 DW20 TS8' s := getgptext(q) |
MakeVarList
Declaration | MakeVarList(string Grp, string Vars) |
Function | reates and activates the variable of the Grp group specified by Vars (format 'variablename1: variablename2') (if it does not exist, it is created and activated). |
Example | m', 'Long1:Long2') |
SetGpBlock
Declaration | SetGPBlock(string target, block b) |
Function | Writes a block of data by direct driver access to the PLC operands addressed via target (format 'groupname:'...') or to the variable addressed and configured via target (format 'groupname:variablename'). It is written from the specified operand with the length of the specified block. |
Example | block b string z b := newblock(12) z := 'SPS2:#DB100 DW10 TD12' setgpblock (z, b) |
SetGpBlockAsync
Declaration | SetGPBlockAsync(string Var, block Val) |
Function | Describes the variable specified by the String Var (groupname:variablename format) with the value of the Val asynchronous data block value. |
Example | Block b b := NewBlock(1) SetBlockNum(b, 0, 1, false, 1) SetGpBlockAsync('Mem:Block', b) |
SetGpBool
Declaration | SetGpBool(string target, bool b) |
Function: | Writes a Boolean value by direct driver access to the PLC operand addressed via target (format 'groupname:'...') or to the variable addressed and configured via target (format 'groupname:variablename'). |
Example: | bool b string z b := true z := 'SPS1:#M 15.7' setgpbool (z, b) |
SetGpBoolAsync
Declaration | SetGpBool(string Var, bool Val) |
Function | Describes the variable specified by the String Var (format 'groupname:variablename') with the Boolean value Val asynchronous. |
Example | SetGpBoolAsync('Mem:Bool', true) |
SetGpDouble
Declaration | SetGpDouble(string target, double d) |
Function | Writes a Double_Wert by direct driver access to the PLC operand addressed via target (format 'groupname: ....') or to the variable addressed and configured via target (format 'gruppename:variablename'). |
Example | double d d := 12345678 setgpdouble('Steuerung_5:#ED 24',d) |
SetGpDoubleAsync
Declaration | SetGpDoubleAsync(string Var, double Val) |
Function | Describes the variable specified by the String Var (groupname:variablename format) with the floating-point value Val asynchronous. |
Example | SetGpDoubleAsync('Mem:Double', 123.456) |
SetGpLong
Declaration | SetGpLong(string target, long l) |
Function | Writes a long value by direct driver access to the PLC operand shave addressed via target (format 'groupname: ....') or to the variable addressed and configured via target (format 'groupname:variablename'). |
Example | long l l := 123 setgplong('Steuerung_5:#EW 24',l) |
SetGpLongAsync
Declaration | SetGpLongAsync (string Var, long Val) |
Function | Describes the variable specified by the String Var (groupname:variablename format) with the integer value Val asynchronous. |
Example | SetGpLongAsync('Mem:Long', 4711) |
SetGpText
Declaration | SetGpText(string target, string s) |
Function | Writes a string by direct driver access to the PLC operand addressed via target (format 'groupname: ....') or to the variable addressed and configured via target (format 'gruppename:variablename'). |
Example | string s s := 'jaja' setgptext('SPS3:#DB10 DW20 TS4', s) |
SetGpTextAsync
Declaration | SetGpTextAsync (string Var, string Val) |
Function | Describes the variable specified by the String Var (format 'groupname:variablename') with the string value Val asynchronous. |
Example | SetGpTextAsync('Mem:String', 'Test 123') |
Window operations
Window Functions generally come in two types. Normal and "Ex" versions. The normal versions take an Window Object directly and the "Ex" versions take the Name of the window.
The advantage of the normal functions is, that the "Crossreferences" are maintained, which is not possible with the "Ex" versions. The "Ex" versions on the other hand, allow you to calculate the window name on the fly, using String operations.
CloseWin
Declaration | CloseWin(window win) |
Function | Closes the win window. Caution: Program-controlled and frequent opening and closing of windows may result in to increased telegram traffic (request blocks must be requested or stopped) and error messages. |
Cross | OpenWin, IsWinOpen, IsWinActive |
Example | if "Intern:Wert1" > 100 then openwin('Fenster_1') else if iswinopen('Fenster_1') then closewin('Fenster_1') endif endif |
CloseWinEx
Declaration | CloseWinEx(string windowname) |
Function | Closes the window specified by the window name string. The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. |
Example | string ff := 'Window 1' if "Internal:Value1" > 100 then if iswinopenex(f) then closewinex(f ) endif endif |
GetWinHeight
Declaration | long GetWinHeight(window win) |
Function | Returns the current height of the window designated by "win". |
Example | long x, y, h, w x:= getwinx('Fenster_1') y:= getwiny('Fenster_1') h:= getwinheight('Fenster_1') w:= getwinwidth('Fenster_1') setwinpos('Fenster_1',x + 100,y + 100, h, w) //move it by 100 pixels down and right |
GetWinHeightEx
Declaration | long GetWinHeightEx(string windowname) |
Function | Returns the current height of the window specified by the window name string. The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. |
GetWinWidth
Declaration | long GetWinWidth(window win) |
Function | Returns the current width of the window designated by "win". |
Example | long x, y, h, w x:= getwinx('Fenster_1') y:= getwiny('Fenster_1') h:= getwinheight('Fenster_1') w:= getwinwidth('Fenster_1') setwinpos('Fenster_1', x + 100, y + 100, h, w) |
GetWinWidthEx
Declaration | long GetWinWidthEx(string windowname) |
Function | Returns the current width of the window designated by window name. The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. |
GetWinX
Declaration | long GetWinX(window win) |
Function | Returns the current X position of the window designated by "win". |
Example | long x, y, h, w x:= getwinx('Fenster_1') y:= getwiny('Fenster_1') h:= getwinheight('Fenster_1') w:= getwinwidth('Fenster_1') setwinpos('Fenster_1', x + 100, y + 100, h, w) |
GetWinXEx
Declaration | long GetWinXEx(stirng window) |
Function | Returns the current X position of the window designated by "window". The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. |
GetWiny
Declaration | long GetWinY(window win) |
Function | Returns the current Y position of the window designated by win. |
Example | long x, y, h, w x:= getwinx('Fenster_1') y:= getwiny('Fenster_1') h:= getwinheight('Fenster_1') w:= getwinwidth('Fenster_1') setwinpos('Fenster_1', x + 100, y + 100, h, w) |
GetWinYEx
Declaration | long GetWinYEx(string window) |
Function | Returns the current Y position of the window designated by "window". The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. |
GetWinMouse
Declaration | long GetWinMouse(window win, long x, long y, long width, long height) |
Function | Checks whether the mouse pointer is in the rectangular coordinate range width / height with the starting point x / y (top left) in the win window, and if so, which mouse button or which special key is pressed. All coordinates are in pixels. The return value of the function is bitcoded as follows: Bit 0: 1 - Mouse is in the window Bit 1: 2 - left mouse button is pressed Bit 2: 4 - right mouse button is pressed Bit 8: 256 - Shift button is pressed Bit 9: 512 - Ctrl key is pressed Bit 10: 1024 - Alt button is pressed Therefore, to determine whether the mouse pointer is in the specified range, the return value can be compared to zero. To determine individual keys, the value must be linked to the constants and -linked above (operator AND). The Winow coordinates and size for this function can be obtained via the above functions |
Example | long STATUS1, STATUS2 STATUS1 := getwinmouse('Bedienen_1',104,386,80,30) STATUS2 := getwinmouse('Bedienen_1',191,386,80,30) if STATUS1 <> 0 then "Intern:Hilfe_1" := true else "Intern:Hilfe_1" :=false endif IF STATUS2 <> 0 then "Intern:Hilfe_2" := true else "Intern:Hilfe_2" :=false endif |
GetWinName
Declaration | string GetWinName |
Function | Returns the Name of the window where the current script is running on Works only in scripts associated with a window or item. Can not be used in Functions! If you call it from an function, the funcion always return an empty string. |
GetWinNameList
Declaration | string GetWinNameList |
Function | Returns all window names of the application. The delimiter is the dash. |
Example | string szWins szWins := GetWinNameList |
GetWinTitle
Declaration | string GetWinTitle(window win) |
Function | Returns the title line of the window designated by "win". If the window does not have a title line, an empty string is returned. |
Example | debug('Window name =' + getwintitle('Fenster_1')) |
GetWinTitleEx
Declaration | string GetWinTitleEx(string windowname) |
Function | Returns the title line of the window designated by "window name". If the window does not have a title line, an empty string is returned. The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. |
IsWinActive
Declaration | bool IsWinActive(window win) |
Function | Returns true if the window designated by "win" is active. An active window is the window that currently has the focus |
Example | if iswinactive('Fenster_2') then debug('Window 2 activating'') Endif |
IsWinActiveEx
Declaration | bool IsWinActiveEx(string windowname) |
Function | Returns true if the window designated by "window name" is active. The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. An active window is the window that currently has the focus |
IsWinOpen
Declaration | bool IsWinOpen(window win) |
Function | Returns true if the window designated by "win" is open. |
Example | if "Internal:Value1" > 100 then openwin('Fenster_1') else if iswinopen('Fenster_1') then closewin('Fenster_1') Endif Endif |
IsWinOpenEx
Declaration | bool IsWinOpenEx(string windowname) |
Function | Returns true if the window designated by "window name" is open. The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. |
OpenWin
Declaration | OpenWin(window win) |
Function | Opens an existing window, which is designated by win, or brings it to the foreground |
Example | if "Internal:Value1" > 100 then openwin('Fenster_1') else if iswinopen('Fenster_1') then closewin('Fenster_1') Endif Endif |
OpenWinEx
Declaration | OpenWinEx(string window name) |
Function | Opens the window, which is designated by "window name" or brings it to the fore. In an application, you can switch to a specific window depending on a button. The window needs a string as a parameter. The string can also be created dynamically. The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. Attention: In the application, a window can only be opened once (brought to the foreground). Opening an already opened window, will only bring the window to the foreground again. |
SetWinPos
Declaration | SetWinPos(window win, long x, long y, long width,long heigth) |
Function | Changes the size and position of the window designated by win. |
Example | long x, y, h, w x:= getwinx('Fenster_1') y:= getwiny('Fenster_1') h:= getwinheight('Fenster_1') w:= getwinwidth('Fenster_1') setwinpos('Fenster_1',x + 100,y + 100, h, w) |
SetWinPosEx
Declaration | SetWinPosEx(string windowname, long x, long y, long width,long heigth) |
Function | Changes the size and position of the window designated by window name. The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. |
SetWinTitle
Declaration | SetWinTitle(window win, string text) |
Function | Sets the title line of the window designated by "win" to the string text. |
Example | if iswinactive('Fenster_3') then setwintitle('Fenster_3', 'I'm Active') else setwintile('Fenster_3', 'I'm not active') Endif |
SetWinTitleEx
Declaration | SetWinTitleEx(string windowname, string text) |
Function | Sets the title line of the window designated by "window name" to the string text. The subsequent call to GetLasrErrNo or GetLastErrStr can be used to determine whether the operation was successful. |
Format conversion
If an arithmetic expression uses two operands of different types, the long operand is automatically converted to a double value. The result of the operation is a double value. If the calculation is to provide an integer value (long), the double operand or result must be converted to a long value by the Round function.
There exist various format conversions from/to Simatic specific types. these format conversions are only useful in context of "Block" operations.
Dtostr
Declaration | string DToStr(double x) |
Function | Converts the double value x to a string. The number is displayed either exponential or decimal, depending on the size. |
Cross | StrToL, LToStr, StrToD |
Example | double d d := 125.56 / 37 debug('Result : ' + dtostr(d)) |
Ltostr
Declaration | string LToStr(long x, long radix) |
Function | Converts the long value x to a string. The radix parameter specifies the basis on which the conversion should take place - possible values are in the range of 2 to 36. If radix is 10 and x is less than zero, LToStr precedes the result with a minus sign. For conversion to Decimal use radix 10 |
Cross | DToStr, StrToL, StrToD |
Example | long l string s l := 1247 s := ltostr(l, 10) debug('Decimal : ' + s) s := ltostr(l, 16) debug('Hexadecimal : ' + s) s := ltostr(l, 2) debug('Binary : ' + s) |
StrLower
Declaration | string StrLower(string source) |
Function | Converts all uppercase letters of the source string to lowercase and returns the result. Source is not changed. The letters A - Z are converted. |
Cross | StrUpper |
Example | string s s := 'ABcDEfGH' debug(strlower(s)) |
Strtod
Declaration | double StrToD(string source) |
Function | Converts the source-designated string to a floating-point number and returns the result as a double. |
Cross | Str, StrToL |
Example | double d d := strtod('-1.7567E+02') |
Strtol
Declaration | long StrToL(string source) |
Function | Converts the source-designated string to a long value. |
Cross | DToStr, LToStr, StrToD |
Example | long l l := strtol('-1') |
Strtolex
Declaration | long StrToLEx(string source, long radix) |
Function | Converts a number contained in the source-designated string to a long value (signed). The radix parameter specifies the assumed numerical basis for the number stored in the string. The values 0, as well as 2 to 36, are allowed. If specified as radix 0, the first characters of the string determine the number base to use: 1..9 Decimal Representation 0x Hexadecimal representation 0 Octal representation The conversion ends at the first non-convertible character in the string. Ranges: Dec: -2,147,483,648 to 2,147,483,647 Hex: -80000000 to 7FFFFFFF (values > 7FFFFFFF are converted to 7FFFFFFF!) If a hexadecimal value > 7FFFFFFF is to be converted to a long value without a sign, this is possible as follows: long n1, n2 n1:=substr("$Global:VarString",0,4) n2:=substr("$Global:VarString",4,4) "$Global:VarLong" := (StrToLEx(n1,16) shl 16) + StrToLEx(n2,16) |
Cross | StrToL, LToStr |
Example | long l, k l := StrToLEx('0x1D7F', 0) k := StrToLEx('00011101011111111', 2) |
StrUpper
Declaration | string StrUpper(string source) |
Function | Converts all lowercase letters of the source string to uppercase and returns the result. Source is not changed. The letters A - Z are converted |
Cross | StrLower |
Example | string s s := 'ABcDEfGH' debug(strupper(s)) |
Format conversions for PLC datatypes
these format conversions are only useful in context of "Block" operations.
DToF
Declaration | long DToF (double x) |
Function | Converts the double value x to the floating-point format of the Simatic-S7. The result of this function cannot be further processed in the script, but is only suitable to be entered with SetBlockNum in a data block, which is to be written into an AG of type Simatic S7. |
Cross | SetBlockNum, FToD, DToKG |
Example | block b b := NewBlock(6) SetBlockNum(b, 0, 2, false, Endian("Internal:InputGanz", false)) SetBlockNum(b, 2, 4, false, DToF("Intern:InputFliess"))"S PS:ShouldBlock" := b |
DToKG
Declaration | Long DToKG (double x) |
Function | Converts the double value x to a floating point number with the KG format of the Simatic-S5. |
Cross | KGToD |
Example | double d long l d := sin(pi) l := dtokg(d) "SPS1:WEG" := l |
Endian
Declaration | long Endian(long x, bool all) |
Function | Swaps both high and low bytes of the x argument. If all = true, the high and low words of the x argument are also exchanged. This function facilitates the processing of data that originates from other machines (e.g. Simatic-S5). |
Example | long l l := endian("SPS1:DB100 DD1", true) |
FToD
Declaration | double FToD(long x) |
Function | Converts a value from the floating-point format of the Simatic-S7 to a double value. Only values extracted from a data block read from a Simatic S7 AG using GetBlockNum are useful for entering this function. |
Cross | etBlockNum, DToF, KGToD |
Example | return FToD("SPS:IstBlock", 2, 4, false)) |
KGToD
Declaration | double KGToD(long x) |
Function | Converts a floating point number x with the Simatic-S5 KG format to a double value. |
Cross | DToKG |
Example | long l double d l := "SPS1:DB100 DD1") d := kgtod(l) |
Mathematical Functions
Exp
Declaration | double Exp (double x) |
Function | Calculates the ex exponential function. |
Ln
Declaration | double Ln (double x) |
Function | Calculates the natural logarithm of the x argument. |
Example | double d d := ln(2.718281) |
Log
Declaration | double Log (double x) |
Function | Calculates the logarithm of the x argument to base 10. |
Example | double d d := log(100) |
Pi
Declaration | double Pi |
Function | Returns the number Pi as a double value. |
Example | double d d := 2 * pi |
Pow
Declaration | double Pow (double x, double y) |
Function | Pow returns the result of the calculation xy. |
Example | double d d := kgtod("SPS1:DB100 DD1") d := pow(d, 3) |
Random
Declaration | long Random |
Function | Returns a random number in the range of 0 to 32767. |
Example | long l l := Random |
Round
Declaration: | long Round (double x, bool up) |
Function | Rounds the double value x and returns a long value as a result. Is up true is rounded up, otherwise rounded. |
Example | double d long on, from d := 123.45 on := round(d, true) from := round(d, false) |
Sqrt
Declaration | double Sqrt (double x) |
Function | Calculates the square root of the argument x. |
Example | double d d := kgtod("SPS1:DB100 DD1") d := sqrt(d) |
Arctan
Declaration | double Arctan (double x) |
Function | Calculates the arcustangen of argument x. Arctan returns a double value in the range of -pi to pi. |
Example | double d d := arctan(Pi) |
Cos
Declaration | double Cos (double x) |
Function | Calculates the cosine of argument x (in radians). Cos expects an angle in the rad unit as an argument.Cos returns values in the range of -1 to +1. |
Example | double d d := cos(pi) |
Sin
Declaration | double Sin (double x) |
Function | Calculates the sine of argument x (in radians). Sin expects an angle in the rad unit as an argument.Sin returns values in the range of -1 to +1. |
Example | double d d := sin(pi) |
Object Functions
These functions allow you to modify properties such as Color, Position, size and visibility, of objects visible on an given window. Generally for most functions you have to specify the window name and the object name that you want to modify. These functions are usable in the following script types (basically all of the script types)
- Application Scripts
- Class Scripts
- Window Scripts
- User Functions
- Script Variables
The object functions allow you to build very complex logic in classes that would otherwise not be possible. For example it is possible to build complex visibility conditions that are dependent on multiple variables or even database queries or the filesystem.
Window Name
The Window name can generally retrieved via "string GetWinName()" to get the name of the window that the Script is currently running on. Of course you can also pass in the Window name from any string variable you need, which allows you to construct these names dynamically.
Object Name
The Object name is the name that the object was given in the graphics settings of the corresponding object. These names are generally composed of the object type and an running number separated by an underline. For example ("Text_1234"). In the Script editor you can also right click and open the "Element" selection menu to select an element of the current window. Of course this selection is only possible in Window scripts. In all other functions types, you have to specify the Object name manually.
Object name in Classes
The object functions are also usable in Classes and allow you to build very complex logic in classes that would otherwise not be possible. In order to use these functions you have to know how the Classes are instantiated during runtime. During runtime each used object gets instantiated by using the Class Object's name, this is the Name that is given to the class in the editor (not to be confused with the "VariableBaseName), and then the elements name of the object get appended with an underline "_". If an Class is Instantiated during runtime, it is called an Class Object, or Object.
There is an function you can use to get the current Class Objects name during runtime (string GetObjName()). this function is only usable in Class Scripts, because it does not make sense without classes. In order to modify the element of an Class in an Class script you have to build the final elements name by using this formula:
<Objects Name>_<Elements name inside the Class>
usually you do that by using the following code:
SetPropLineColor(GetWinName,GetObjName + '_Rechteck_1', clBlue)
Note that the elements name is composed of the objects name, followed by an underline and the elements name that is given in the Class editor.
Colors
The following Constants can be used for all functions that receive color values. Of course you can also construct the RBG value yourself by using any graphics software you like. The values are basically integers of the following format:
0xrrggbb where:
- RR is the red value 0-255
- GG is the green value 0-255
- BB is the blue value 0-255
the alpha channel is not supported.
Constant | Color Value |
---|---|
clBlack | 0x000000 |
clMaroon | 0x000080 |
clGreen | 0x008000 |
clOlive | 0x008080 |
clNavy | 0x800000 |
clPurple | 0x800080 |
clTeal | 0x808000 |
clRed | 0x0000FF |
clLime | 0x00FF00 |
clYellow | 0x00FFFF |
clBlue | 0xFF0000 |
clFuchsia | 0xFF00FF |
clAqua | 0xFFFF00 |
clLtGray | 0xC0C0C0 |
clDkGray | 0x808080 |
clWhite | 0xFFFFFF |
ExistObj
Declaration | bool ExistObj(string f, string e) |
Function | Determines whether the specified element e exists in window f. |
Example | bool f f := ExistObj('Fenster_1', 'Taster_1') |
GetClassName
Declaration | string GetClassName |
Function | Returns the class name of an object script. Only usable in Class Scripts. Not to be confused with GetObjName, which gets the objects name that you need for use in Class Scripts. This function is mostly for debugging. |
Cross | GetObjName, GetVarBaseName |
Example | string clsName clsName := GetClassName |
GetObjName
Declaration | string GetObjName |
Function | Provides the object name of item group or Object scripts. Works only in scripts associated with an Class object. Use this function to the the Class objects name to use in Class Scripts |
Cross | GetVarBaseName, GetWinName |
Example | string text1, text2, objname, elename, winname objname := GetObjName winname := GetWinName text1 := GetText(objName, 1, 'Text') text2 := GetText(objName, 2, 'Text') elename := objname + '_' + 'Text_1' SetPropText(winName, elename, text1) elename := objname + '_' + 'Text_2' SetPropText(winName, elename, text2) |
GetObjNameList
Declaration | tring GetObjNameList(string szWin, szObj) |
Function | Returns the object names of the sub-ordinated elements of the szObj element in the szWin window. If the element specifies blank string, the window's object names are supplied. The delimiter is the semi colong ";". |
Cross | GetObjParent |
Example | string szObjs szObjs := GetObjNameList('Fenster_1', 'Text_1') |
GetObjParent
Declaration | string GetObjParent(string szWin, szObj) |
Function | Returns the object name of the parent of the szObj element in the szWin window. If the element does not have a parent, Blank String will return. |
Cross | eList |
Example | string szObjParent szObjParent := GetObjParent('Fenster_1', 'Text_1') |
GetObjType
Declaration | string GetObjType(string szWin, szObj) |
Function | Returns the element type of the szObj element in the szWin window. |
Example | string szObjType szObjType := GetObjType('Fenster_1', 'Text_1') |
GetPropBrushColor
Declaration | long GetPropBrushColor(string f, string e) |
Function | returns the fill color of the specified element e in the window f. |
Cross | SetPropBrushColor |
Example | long clr clr := GetPropBrushColor('Fenster_1', 'Rechteck_1') |
GetPropEnabled
Declaration | bool GetPropEnabled(string f, string e) |
Function | Determines whether the specified element is e enabled or disabled in windows. This function can be used for elements of the type button, or sliders. |
Cross | SetPropEnabled |
Example | bool fEnabled fEnabled := GetPropEnabled('Fenster_1', 'Taster_1') |
GetPropLineColor
Declaration | long GetPropLineColor(string f, string e) |
Function | Determines the line color of the specified element e in the window f. |
Cross | SetPropLineColor |
Example | long clr clr := GetPropLineColor('Fenster_1', 'Rechteck_1') |
GetPropPosbottom
Declaration | long GetPropPosBottom(string f, string e) |
Function | Determines the lower position of the specified element e in the f window |
Cross | SetPropposbottom |
Example | long Pos Pos := GetPropPosbottom('Fenster_1', 'Rechteck_1') |
GetPropPosLeft
Declaration | long GetPropPosLeft(string f, string e) |
Function | Determines the left position of the specified element e in the f window. |
Cross | |
Example | long Pos Pos := GetPropPosLeft('Fenster_1', 'Rechteck_1') |
GetPropPosRight
Declaration | long GetPropPosRight(string f, string e) |
Function | Determines the right position of the specified element e in the f window. |
Cross | |
Example | long Pos Pos := GetPropPosRight('Fenster_1', 'Rechteck_1') |
GetPropPosTop
Declaration | long GetPropPosTop(string f, string e) |
Function | Determines the top position of the specified element e in the window f. |
Cross | |
Example | long Pos Pos := GetPropPosTop('Fenster_1', 'Rechteck_1') |
GetPropText
Declaration | string GetPropText(string f, string e) |
Function | Gets the text of the specified element e in window f. This function can be used for elements of type Text, or one-output field. |
Cross | SetPropText |
Example | string text, objname, elename, winname objname := GetObjName winname := GetWinName elename := objname + '_' + 'Text_1' text := GetPropText(winName, elename) |
GetPropTextColor
Declaration | long GetTextLineColor(string f, string e) |
Function | Determines the text color of the specified element e in the window f. |
Cross | SetPropTextColor |
Example | long clr clr := GetPropTextColor('Fenster_1', 'Text_1') |
GetPropToolTip
Declaration | string GetPropToolTip(string win, string element) |
Function | Returns the tooltip text of the element specified by win and element, provided that the item's Show Tooltip property is set. |
Cross | SetPropToolTip, GetPropToolTipEnabled, SetPropToolTipEnabled |
Example | string s s := GetPropToolTip('Fenster_1', 'Text_1') |
GetPropToolTipEnabled
Declaration | bool GetPropToolTipEnabled(string win, string element) |
Function | Returns the value of the Show Tooltip property of the element specified by win and element. |
Cross | GetPropToolTip, SetPropToolTip, SetPropToolTipEnabled |
Example | bool b b := GetPropToolTipEnabled('Fenster_1', 'Text_1') |
GetPropVisible
Declaration | bool GetPropVisible(string f, string e) |
Function | Determines whether the specified element e is visible or invisible in the f window. This function can be performed on all items |
Cross | SetPropVisible |
Example | bool fVisible fVisible := GetPropVisible('Fenster_1', 'Rechteck_1') |
GetSelectedItem
Declaration | long GetSelectedItem(string f, string e) |
Function | Finds the selected entry of the ListBox of the specified element e in the window f. This function can only be performed on ListBox items. |
Cross | SetSelectedItem SetSelectedItem |
Example | long nItem nItem := GetSelectedItem('Fenster_1', 'Listbox_1') |
GetVarBaseName
Declaration | string GetVarBaseName |
Function | Returns the variable base name of an object script. |
Cross | GetObjName |
Example | string varBaseName varBaseName := GetVarBaseName |
IsPropBitmapValid
Declaration | bool IsPropBitmapColorValid(string szWin, string szObj) |
Function | Whether the property bitmap of the specified element szObj can be set in the szWin window. |
Cross | |
Example | bool fValid |
IsPropBrushColorValid
Declaration | bool IsPropBrushColorValid(string szWin, string szObj) |
Function | Whether the property fill color of the specified element szObj can be set in the szWin window. |
Cross | |
Example | bool fValid fValid := IsPropBrushColorValid('Fenster_1', 'Rect_1') |
IsPropEnabledValid
Declaration | bool IsPropEnabledValid(string szWin, string szObj) |
Function | Whether the Property Enabled of the specified element szObj can be set in the szWin window. |
Cross | GetPropEnabled, SetPropEnabled |
Example | bool fValid fValid := IsPropEnabledValid('Fenster_1', Button_1') |
IsPropLineColorValid
Declaration | bool IsPropLineColorValid(string szWin, string szObj) |
Function | Whether the property line color of the specified element szObj can be set in the szWin window. |
Cross | GetPropLineColor, SetPropLineColor |
Example | bool fValid fValid := IsPropLineColorValid('Fenster_1', 'Line_1') |
IspropPosvalid
Declaration | bool IsPropPosValid(string szWin, string szObj) |
Function | Whether the property position of the specified element szObj can be set in the szWin window. |
Cross | SetProppos |
Example | bool fValid fValid := IsPropBrushColorValid('Fenster_1', 'Rect_1') |
IspropTextValid
Declaration | bool IsPropTextValid(string szWin, string szObj) |
Function | set in the szWin window. |
Cross | GetPropText, SetPropText |
Example | bool fValid fValid := IsPropTextValid('Fenster_1', 'Text_1') |
IsPropTextColorValid
Declaration | bool IsTextLineColorValid(string szWin, string szObj) |
Function | Whether the property line color of the specified element szObj can be set in the szWin window. |
Cross | GetPropTextColor, SetPropTextColor |
Example | bool fValid fValid := IsPropTextColorValid('Fenster_1', 'Text_1') |
IsPropToolTipValid
Declaration | bool IsPropToolTipValid(string szWin, string szObj) |
Function | Whether the Property ToolTip of the specified element szObj can be set in the szWin window. |
Cross | GetPropToolTip, SetPropToolTip |
Example | bool fValid fValid := IsPropToolTipValid('Fenster_1', 'Button_1') |
IsPropToolTipEnabledValid
Declaration | bool IsPropToolTipEnabledValid(string szWin, string szObj) |
Function | Whether the Property ToolTip Enabled of the specified szObj element can be set in the szWin window. |
Cross | GetPropToolTipEnabled, SetPropTooltipEnabled |
Example | bool fValid fValid := IsPropToolTipEnabledValid('Fenster_1', 'Button_1') |
IsPropVisibleValid
Declaration | bool IsPropVisibleValid(string szWin, string szObj) |
Function | Whether the property visibility of the specified element szObj can be set in the szWin window. |
Cross | GetPropVisbible, SetPropVisible |
Example | bool fValid fValid := IsPropVisibleValid('Fenster_1', 'Text_1') |
SetVarBaseName
Declaration | SetVarBaseName (string f, string o, string v) |
Function | Sets the variable base name of the object o in the window f to the value specified in v. |
Example | SetVarBaseName('Fenster_1', 'Ventil_1', 'Inlet') |
SetPropBitmap
Declaration | SetPropBitmap(string f, string e, string filename) |
Function | Sets the graphic file of the specified element e. in the f window. This feature is only available for bitmap elements. The filename must be the fully qualified name of the file. To point to the default Datapath, you can use: GetPrjDir + 'USER_DAT\\Bitmap\\ButtonGreen.bmp' |
Example | SetPropBitmap('Fenster_1', 'Bitmap_1', 'C:\\Silo.bmp') |
SetPropBrushColor
Declaration | SetPropBrushColor(string f, string e, long clr) |
Function | Sets the fill color of the specified element e in the window f with the specified color clr. |
Cross | GetPropLineColor, Colors |
Example | SetPropBrushColor('Fenster_1', 'Rechteck_1', clred) SetPropBrushColor('Fenster_1', 'Rechteck_2', clgreen) SetPropBrushColor('Fenster_1', 'Rechteck_3', clblue) |
SetPropEnabled
Declaration | SetPropEnabled(string f, string e, bool fEnabled) |
Function | Sets the state of the e element in window f to enabled if fEnabled is true, or disabled if fEnabled is false. This function can be used for elements of type buttons, EA fields or sliders. |
Cross | GetPropEnabled |
Example | SetPropEnabled('Fenster_1', 'Taster_1', false) |
SetPropLineColor
Declaration | SetPropLineColor(string f, string e, long clr) |
Function | Sets the line color of the specified element e in the window f with the specified color clr. |
Cross | GetPropBrushColor, GetPropLineColor, Colors |
Example | SetPropLineColor('Fenster_1', 'Rechteck_1', clred) SetPropLineColor('Fenster_1', 'Rechteck_2', clgreen) SetPropLineColor('Fenster_1', 'Rechteck_3', clblue) |
SetProppos
Declaration | SetPropPos(string f, string e, long x1, long y1, long x2, long y2) |
Function | Sets the element e in the f window. This feature is currently only available for line elements! |
Example | SetPropPos('Fenster_1', 'Linie_1', 100, 100, 200, 200) |
SetPropText
Declaration | SetPropText(string f, string e, string text) |
Function | Sets the text of the specified element e in window f. This function can be used for elements of type Text, or in/out field. |
Cross | GetPropText |
Example | See example GetObjName |
SetPropTextColor
Declaration: | SetPropTextColor(string f, string e, long clr) |
Function: | Sets the text color of the specified element e in the window f with the specified color clr. |
Cross: | GetPropTextColor |
Example: | SetPropTextColor('Fenster_1', 'Text_1', clRed) |
SetPropToolTip
Declaration | SetPropToolTip(string win, string element, string text) |
Function | Sets the tooltip text of the element specified by win and element to text, provi |
Cross | GetPropToolTip, GetPropToolTipEnabled, SetPropToolTipEnabled |
Example | SetPropToolTip('Fenster_1', 'Text_1', 'Tooltip Text_1') |
SetPropToolTipEnabled
Declaration | EnablePropToolTip(string win, string element, bool how) |
Function | Sets the 'Show Tooltip' property of the element specified by win and element to how (true / false) |
Cross | GetPropToolTip, SetPropToolTip, GetPropToolTipEnabled |
Example | SetPropToolTipEnabled('Fenster_1', 'Text_1', true) |
SetSelectedItem
Declaration | long SetSelectedItem(string f, string e, long n) |
Function | Selects the entry n of the ListBox of the specified element e in the window f. This function can only be performed on ListBox items. |
Cross | GetSelectedItem |
Example | long nItem nItem := 5 SetSelectedItem('Fenster_1', 'Listbox_1', nItem) |
SetPropVisible
Declaration | SetPropVisible(string f, string e, bool fVisible) |
Function | Sets the state of the specified element e in the window f to visible if fVisible is true, or invisible if fVisible is false. This function can be performed on all items. |
Cross | GetPropVisible |
Example | SetPropVisible('Fenster_1', 'Rechteck_1', false) |
String operations
These functions allow you to manipulate strings and convert various data types to and from strings. The basic functions offer basic functionality inspired by the C string manipulation functions. If you need more advanced functions, you can use the following User defined functions, that can be imported into your project. These contain a lot of useful functions that you can use.
SetBlockStr
Declaration | SetBlockStr(block b, long pos, long size, string x) |
Function | Writes the string x to block b from the position pos where the count starts at 0. Size is the number of bytes to be written. |
Cross | GetBlockNum, GetBlockStr |
Example | block b b := newblock(128) setblocknum(b, 0, 1, 6, false) setblockstr(b, 1, 6, 'ABCDEF') |
Substr
Declaration | string SubStr(string source, long pos, long len) |
Function | Copies from the string source from the position pos len bytes. Source is not changed. |
Cross | StrDel, StrIns, StrLen, StrToken |
Example | string s s := 'AAABBBCCC' debug('The first three are : ' + substr(s, 0, 3)) |
Strdel
Declaration | string StrDel(string source, long pos, long len) |
Function | Deletes from the string source from the position pos len bytes and returns the result. Source is not changed. |
Cross | SubStr, StrIns, StrLen, StrToken |
Example | string s s := 'ABCDxxxEFGH' debug(strdel(s, 4, 3)) |
StrIns
Declaration | string StrIns(string source, string ins, long pos) |
Function | Inserts the string into the string source from the pos position and returns the result. Source is not changed. |
Cross | SubStr, StrLen, StrToken |
Example | string s s := 'ABCFGH' debug(strins(s, 'DE', 3)) |
Strlen
Declaration | long StrLen(string source) |
Function | Returns the length of the source string without the final null character. |
Cross | Token |
Example | string s s := "Internal:String1" while strlen(s)< 20 do s := s + '' enddo |
StrLower
Declaration | string StrLower(string source) |
Function | Converts all uppercase letters of the source string to lowercase and returns the result. Source is not changed. The letters A - Z are converted. |
Cross | StrUpper |
Example | string s s := 'ABcDEfGH' debug(strlower(s)) |
Strpos
Declaration | long StrPos(string source, string find) |
Function | Finds the string source after the first occurrence of the find string. If an occurrence is found, the position is returned, otherwise -1 |
Cross | SubStr, StrToken |
Example | string s s := 'ABCDEFGH' if strpos(s, 'DE') >= 0 then debug('DE is included in string') Endif |
Strtod
Declaration | double StrToD(string source) |
Function | Converts the source-designated string to a floating-point number |
Cross | DToStr, LToStr, StrToL |
Example | double d d := strtod('-1.7567E+02') |
Strtoken
Declaration | string StrToken(string source, string delim, long n) |
Function | Reads the nth word from the string source. All characters found in the delim string are used as separators. |
Cross | SubStr, StrDel, StrPos |
Example | string s s := 'one,two,three,four,fuenf' debug(strtoken(s, ',', 3) |
StrTokenCnt
Declaration | long StrTokenCnt(string source, string delim) |
Function | Determine the number of delimiters delim in the string source. |
Cross | SubStr, StrDel, StrPos, StrToken, StrTokenEx |
Example | string s s := 'one,two,three,four,fuenf' debug(ltostr(strtokencnt(s, ','), 10)) |
StrTokenEx
Declaration | string StrTokenEx(string source, string delim, long n, long cnt) |
Function | Reads from the string source from the nth word cnt words. All characters found in the delim |
Cross | SubStr, StrDel, StrPos, StrToken, StrTokenCnt |
Example | string s s := 'one,two,three,four,fuenf' debug(strtokenex(s, ',', 3, 2)) |
Strtol
Declaration | long StrToL(string source) |
Function | Converts the source-designated string to a long value |
Cross | DToStr, LToStr, StrToD |
Example | long l l := strtol('-1') |
StrTrim
Declaration | string StrTrim(string source) |
Function | Deletes all spaces from the source string and returns the result. Source is not changed. |
Cross | StrLower, StrUpper |
Example | string s s := ' ABC DE FGH ' debug(strtrim(s)) |
StrUpper
Declaration | string StrUpper(string source) |
Function | Converts all lowercase letters of the source string to uppercase and returns the result. Source is not changed. The letters A - Z are converted. |
Cross | StrLower |
Example | string s s := 'ABcDEfGH' debug(strupper(s)) |
Multiple Monitors
The VisXpert "Visualization" module supports multi-Monitor set ups through the "MultiMon"-Module.
Application Scaling
The VisXpert "Visualization" Module supports various scaling options. These options allow you to create process images for one resolution and then execute the application on system with different Resolutions, and the application will scale accordingly.
This function is very useful to use "Touch PC" components in your application together with other Stations. "Touch PC" frequently do not have "Full HD" resolutions, thus the application must be scaled to fit the screen. With the Scaling feature, you can create projects for an "Full HD" resolution and then scale the HMI when it is started to the actual screen resolution.
When does the Scaling get applied
the HMI application will get scaled up or down once when starting up. After that it will retain its scaling factor. If the resolution of the Device is changed, the HMI must be restarted, so it can detect the new resolution and scale accordingly.
How does Scaling work
When the HMI application starts up, it checks if "Scaling" is enabled for this application. if it is enabled it will scale according to the Settings provided. The application calculates x and y scaling factors which get applied to all elements in the Application. Texts are scaled to remain readable.

Scaling according to Project resolution
While Engineering, you set the Project resolution for which the application is intended. When the Application starts up it checks the current resolution and calculates the Scaling factors from that. If you have an application that is intended for Full HD devices, and run it on an lower resolution, the application will scale to remain the same relative Monitor size.
Scaling by fixed factor
This option is intended as an fall back, and allows you to set an fixed scaling factor to always be applied, independed of the current Screen resolution.
Drivers
Introduction
This chapter covers the common features of VisXpert Drivers. In the driver-specific chapters describe only the specific features as well as the required hardware and software installation for the Drivers.
What are drivers In VisXpert?
those modules are referred to as drivers whose main purpose is to exchange data via different interfaces between VisXpert and various devices.
What drivers are there?
VisXpert supports several types of drivers:
- OPC (now called “Classic” by the OPC-Foundation)
- OPC-UA
- Simatic (300, 400, 1200 and 1500 series plc, but only “Non Optimized” blocks)
- Allen Bradley (CompactLogix, ControlLogix, Micrologix, SLC, PLC5 and the new Micro800)
- Modbus (Modbus-TCP)
Setting up drivers
There are four main steps to set up a driver and edit the variable table:
- Create a module "Memory", "OPC Client", "PLC data", or any other available driver
- Call the variable configuration editor.
- Create a group.
- Enter or import the variables into the variable table.
Drivers are generally set up from the communication module. The configuration, new module and driver lead you to select the three possible driver types:
- Memory for internal variables
- OPC Client to address OPC servers
- PLC data for communication with a PLC
By clicking on PLC data, e.g. a module with the name "PLC Data 1". This name can be renamed with Ctrl-U or right mouse button, e.g. B. in ISO_on_TCP.

The variable configuration editor can be started by double-clicking or by right-clicking the context menu on the respective driver module.

The interface of the editors is the same for all driver types:

Creating Groups and Variables
The variables of the drivers are always grouped together. Groups define common properties of t
he variables summarized in them, e.g. the PLC in which they are located or the OPC server that makes them available.
To create and edit variables, a new group must first be created.
A new group can be created via the button bar or the edit menu via "Create group".
In the "Group Properties" window that appears on it, a new group can then be created and edited.
What configuration information is required for a group or is described in detail in the individual drivers.
In the following we will first focus on the common interface and operation of the variable editors.
Operation of the editor
In addition to the menus, the dialog for editing the variable configuration has two button bars for "Quick selection of the main functions" (selectable via the menu "View| toolbar") and "Operating the Database Table".
A status line at the bottom of the dialog can be accessed from the View| status line".
Quick selection of the main functions:
The buttons above are available for creating a new group and deleting a group.
Driver-specific inputs regarding an already created group are made by means of the dialog "Group Properties", which appears after pressing the corresponding button.
Import and export of data to the Variable Editor
For convenient processing of large amounts of data, the variable configuration also has an import and export function to and from CSV. This allows extensive lists to be edited in Excel or other editors and used for documentation or other project areas.

Monitoring of communication
To monitor the communication connection, the drivers automatically provide the status variables @ConnectStatus and @Ufo.
Possible values of the status variables @ConnectStatus:
1 | Unknown Error |
0 | Status O.K. |
<0 | Connection error. Number corresponds to error number |
@Ufo returns the contents of the last telegram sent unsolicited by the PLC. The variable contains the entire telegram as a data block. No bytes are rotated or any telegram headers are removed.
Memory
The memory driver allows you to create and edit VisXpert-internal variables.
External couplings are not possible hereby. The hardware and software requirements correspond to those of the main installation of VisXpert. Special components are not required because it is a driver for internal variables.
Setting up the memory driver
Add according to the fig below. memory driver in your project.
Create a "Memory" module:

In the memory variable configuration editor that you created by inserting the Memory driver, you can now create different groups for the memory variables. These groups will help you, for example, organise your internal variables clearly for large projects.
To create a new group in the Memory module:

Editor for configuring memory variables
The operation of the editor corresponds to the chapter "Variable Configuration (Editor)" in the part "Driver General" and can also be read there.

record in the memory driver variable table consists of the following fields:
- Name: max. 255-character name of the variable; this name will appear later e.g. b. in the editor of the visualization.
- Type: The type of a variable can be selected via a list box in the field.
- Initialization: When the System starts up, Initializes the variable to DefaultValue or not
- Default value: Here, the initialization or value of a variable. Considered only when initialization is True.
VisXpert supports the following types of variables:
- Boolean 0
- Integer 1
- Floating point 2
- String 3
- Data Block 4
- NIL (no value) -1
Example
The name of the group can be chosen as desired (here: "Test").

Opc Client
Introduction
With OLE for Process Control, or OPC for short, the standardization of automation software desired by many users has progressed one step forward. The laborious and cost-intensive driver development for special interface protocols and fieldbus systems is completely eliminated. With OPC, the standardized programming interface for process data, in the future, every hardware, e.g. a special fieldbus card, only an OPC server can be developed. Conversely, an application, e.g. have a process visualization, only one driver in the form of an OPC client, in order to acquire data via various hardware interfaces.
The OPC client is integrated into VisXpert according to the OPC DataAccess specification in version 1.0 -2.04. The OPC client also supports the DCOM standard. However, this is not recommended by GEFASOFT, as a lack of network monitoring by DCOM does not guarantee the security of the communication or very long response times can result.
Installing OPC Servers
Install an OPC server according to the manufacturer's specifications. The installer must make the necessary entries in the registry database.
Setting up the OPC client
Add according to the fig below. the OPC Client driver in your project:

OPC Group Properties
In the editor for configuring the OPC client that you created by inserting the driver, you can now create different groups. To do this, click on the folder with the '+' character in the editor's button bar. The following dialogue opens:

To create the new group, you must provide the following information:
- Name: any group name (here: "Test")
- Calculator: Specifya computer name. Only if you want to use DCOM to access an OPC server installed on another machine. For locally installed servers (usually), leave this field blank. The button next to the input field allows you to open a dialog to select the computer.
- OPC server: The identifier ("ProgID") of the OPC server to be used. The button next to it gives you a list of all installed servers. Select one of them and use OK to apply it to the group's configuration.

- Use OPC version 1 only: This is a troubleshooting option. Please do not activate it w
ithout first reading the "Troubleshooting" section. - Read value after activation: This is an option for troubleshooting. Please do not turn it on wi
thout first reading the "Troubleshooting" section.
Note: You can create multiple VisXpert groups to the same server, e.g. structure the variable tables better.
Regardless, the server is always addressed in the same way. However, if the server in question needs one of the troubleshooting options, be sure to set it the same for all groups.
OPC Variables
The editor largely corresponds to the description from chapter "Variable Configuration (Editor)" in the "Driver General" part.
The variable table contains the following fields:
- Name: The name of the variable
- Type: VisXpert type of the variable. The OPC client will attempt to convert the value supplied by
the server to this type. - OPC item: Name of the OPC item. This is the name after which the OPC server identifies the item.
- OPC-Path: The access path of the OPC item. Used by some servers for additional configuration information about the item.
- ActTime(ms): The update time that VisXpert should request from the OPC server for this item.
For the OPC server, this time only indicates that it cannot deliver the value of this item to VisXpert faster.
It can round up this time according to its configuration or load.
Importing OPC Items
Most OPC servers allow clients to check the list of their OPC items. In VisXpert, you can use this capability to import these items as VisXpert variables.
To do this, select OPC import from the File menu of the editor or press the
The following dialogue appears:
Items for which VisXpert variables have already been created are marked with a + sign on the left.
The type specified for an item indicates which conversion VisXpert would choose by default for that item when imported.
You can change the type in the variable table after import.
You can specify the value with which to pre-set the update time of newly created VisXpert variables.
The names of OPC items are often very long and hierarchical, e.g. "Bus0/Segment1/Control3/Hydraulic Pressure".
You can choose to have the names of the VisXpert variables consist only of the end of the item name.
The information "Apply from 2th / sign from right" would be added to the above item e.g. create a VisXpert variable called "Control3/Hydraulic Pressure". To use the full item names, do not specify a search character.
Note: Even if this is usually not useful, you can create several variables to the same OPC item. If you specify different update times, the item is created multiple times at the server, otherwise the value is assigned to several variables only in VisXpert.
Conversion between OPC and VisXpert data types
When the OPC items are imported, the type of VisXpert variables is automatically derived from the data type of the OPC Item. A change of the VisXpert data types is possible at any time.
OPC- / Var-Typ | Bool | Integer | Float | String | Data block | Comment |
VT_I2 | R/W | R/W | R/W | R/W | R/W | 2 Byte signed integer |
VT_I4 | R/W | R/W | R/W | R/W | R/W | 4 Byte signed integer |
VT_R4 | R/W | R/W | R/W | R/W | R/W | 4 Byte Floating point |
VT_R8 | R/W | R/W | R/W | R/W | R/W | 8 Byte Floating point |
VT_BSTR | R/W | R/W | R/W | R/W | R/W | String (UNICODE) |
VT_BOOL | R/W | R/W | R/W | R/W | R/W | Boolean |
VT_UI1 | R/W | R/W | R/W | R/W | R/W | 1 Byte unsigned integer |
VT_ARRAY | VT_BSTR | R/W | R/W | Array of Strings (UNICODE) | |||
VT_ARRAY einfacher Typ | R/W | Array of VT_I2, -I4, -R4, -R8 etc. | ||||
VT_ARRAY VT_VARIANT | R | Array, of multiple types | ||||
VT_BYREF | --- | --- | --- | --- | --- | Not allowed |
"R" "Read"
"W" "Write".
When converting numbers to Bool's values, all nonzero numbers are considered true. In the reverse case, "false" results in 0 and "true" 1.
When a string is converted to a Bool's value, an attempt is first made to convert the string into a number. If this succeeds, and if the number is not equal to 0, the conversion results in "true", otherwise "false".
When converting a VisXpert integer to a less accurate format (e.g. VT_UI1 or VT_I2) higher-order bits are discarded.
When changing from floating point to integer, it is rounded.
If a string cannot be converted to a number, an error is reported both when reading and writing.
When you convert VT_BSTR to string, UNICODE characters that cannot be converted to the ANSI character set are replaced by the default character set in Windows.
For VisXpert data blocks, no conversions are made, but always the bytes are copied directly.
When writing, all data of the data block is always converted to the format of the item.
It depends on the server how it handles data that is too long or too short.
OPC Errors
Server does not appear in selection list
There may be times when you configure a group that the server you want does not appear in the select list.
If this is a local server, it is likely not installed or registered correctly. In this case, consult the server's documentation on how to correct this. In some cases, it can also help to start the server once, possibly with special parameters in the command line (e.g. "/RegServer").
If you don't see a server that's installed on another machine, there may be several reasons:
- The server conforms to OPC specification 1.0. Such servers cannot be listed over the network.
- On the computer of the server is the program for enumerating the servers OPCENUM. EXE not installed.
You can copy the program from the system directory of the VisXpert machine to the server machine
and register it there (run "OPCENUM /RegServer"). - The DCOM configuration on the server's computer does not allow you to access OPCENUM.
Change this using the DCOM configuration (DCOMCNFG. EXE).
Problems exchanging data with specific OPC 2.0 servers
By default, VisXpert always uses the latest version of the OPC specification that a server supports. It has been shown that some servers are not yet fully implementing the newer features. In this case, there is the option "Use OPC version 1 only" in the "Group Properties" dialog box. This allows you to cause VisXpert to use only version 1 calls.
Note: You should only use this option if you really need it. Communication according to version 2 of the OPC specification is preferable.
Data is being updated too late
Some servers do not immediately send a value to the client (as required by the OPC specification) for a newly logged-on variable (OPC Item), but only after its value has changed. The corresponding values are available in VisXpert® accordingly only then available (e.g. for display).
To work around this error in the server, visXpert has the option "Read value after activation" in the Group Properties dialog. When it is turned on, VisXpert places an explicit read job for it immediately after logging in to an update variable (activating the OPC item).
Note: You should only use this option if it is really unavoidable. It can greatly slow down startup and image setup and even cause some servers that are sensitive to increased load to crash.
Error
OPC Error Messages - Standards
0xC0040001
OPC_E_INVALIDHANDLE
The value of the handle is not valid.
An addressed object does not exist (more).
0xC0040004
OPC_E_BADTYPE
Server cannot convert client's data format.
The configuration of the VisXpert variables is incorrect or out of date.
0xC0040005
OPC_E_PUBLIC
Operation not possible for public groups.
VisXpert does not use public groups of OPC servers, so this message should never occur.
0xC0040006
OPC_E_BADRIGHTS
Insufficient access rights for operation
The OPC item in question can only be read or written. VisXpert attempts the unauthorized operation
0xC0040007
OPC_E_UNKNOWNITEMID
Item not known (more)
The server does not know the OPC item addressed by VisXpert. The configuration of the VisXpert variables is incorrect or out of date.
0xC0040008
OPC_E_INVALIDITEMID
Item name syntax is invalid.
The name of the item does not have the structure required by the server or contains invalid characters from the server's point of view. The configuration of the VisXpert variables is incorrect or out of date.
0xC0040009
OPC_E_INVALIDFILTER
Filter string invalid
Should never occur because VisXpert does not use filters when querying the items.
0xC004000A
OPC_E_UNKNOWNPATH
Access path of the item unknown
The access path is not valid. This can only happen if you have entered one in the configuration of the item in question. Correct or delete the value (an empty access path is always allowed).
0xC004000B
OPC_E_RANGE
Value out of range
The written value is not allowed. This can happen if the server uses a less accurate or large data type than VisXpert (e.g. always uses 64 bits for floating point numbers, but many servers only 32 bits).
0xC004000C
OPC_E_DUPLICATENAME
Duplicate names not allowed
The name signed for the OPC client or group that VisXpert has signed in is not unique. Can only occur as a follow-up error after other problems. Restart VisXpert and, if possible, the OPC server.
0xC004000D
Server can't accurately meet required update time
No mistake. The server simply reports that it will not be able to meet the requested update time.
0xC004000F
OPC_S_INUSE
Operation cannot be completed because the object is still being referenced.
No mistake. The server will finish the operation later.
0xC0040010
OPC_E_INVALIDCONFIGFILE
Bad server configuration file
The server is unable to read its configuration. To resolve this error, consult the server's documentation.
0xC0040011
OPC_E_NOTFOUND
The server could not find the requested object.
The configuration of the VisXpert OPC client and the OPC server does not fit together; possibly as a result of interactions with other clients or changes in the bus structure.
0xC0040203
OPC_E_INVALID_PID
Property ID is unknown to the server
VisXpert does not use properties, so this error should never occur.
Messages derived from OPC quality information
The OPC specification provides that the server provides a quality specification for each value it provides. For servers working according to version 1 of the specification, this is the only way to report certain errors to its clients.
The following messages are generated by VisXpert when it discards a value because the server does not specify sufficient quality for it.
Note: Servers that support version 2 of the OPC specification can provide each value with its own status code (error number). VisXpert then evaluates this more precise specification.
0xC1070008
ERR_VAL_UNCERTAIN
uncertain value, reason: not specified
The server does not specify why it could not reliably determine this value.
0xC1070009
ERR_VAL_INACCURATE
uncertain value, reason: inaccurate
The server indicates that the value is inaccurate.
0xC107000A
ERR_VAL_LOLIMIT
uncertain value, reason: at lower range limit
The value cannot be reliably determined because it has left the range of values at the lower limit.
0xC107000B
ERR_VAL_HILIMIT
uncertain value, reason: at the upper range limit
The value cannot be reliably determined because it has left the range of values at the upper limit.
0xC107000C
ERR_VAL_SUBNORMAL
uncertain value, reason: not reliably determined
The value could not be determined reliably (e.g. conflicting information from several sources).
0xC107000D
ERR_VAL_INVSUBQA
uncertain value, OPC server indicates invalid reason
The server classifies the value as uncertain, but specifies a reason not defined in the specification.
0xC107000E
ERR_BADQ_NONSPEC
no value, reason: not specified
The server cannot determine the value and does not specify a reason for it. Many servers primarily deliver this status while they are still busy getting the first value for an item.
0xC107000F
ERR_BADQ_CFGERR
no value, reason: configuration error
The server cannot determine the value because its configuration for this item is incorrect.
0xC1070010
ERR_BADQ_NOTCONN
no value, reason: not connected
The input from which this value is to be read is not connected
0xC1070011
ERR_BADQ_DEVFAIL
no value, reason: device error
The device from which the server is reading this value is not working properly.
0xC1070012
ERR_BADQ_SENSORFAIL
no value, reason: sensor error
The sensor from which this value is read is not working properly.
0xC1070013
ERR_BADQ_SENSORLOLIM
no value, reason: lower limit of the sensor
The value cannot be read because it is below the measurement range of the sensor.
0xC1070014
ERR_BADQ_SENSORHILIM
no value, reason: upper limit of the sensor
The value cannot be read because it is above the measurement range of the sensor.
0xC1070015
ERR_BADQ_SENSORCONST
no value, reason: Sensor can only provide constant value
The value cannot be determined, the output of the responsible sensor is constant.
0xC1070016
ERR_BADQ_LASTKNOWN
no value, reason: value not current
This is the last known value of this item before communication to the source was interrupted.
0xC1070017
ERR_BADQ_COMMFAIL
no value, reason: communication error
The value cannot be read because of a communication error.
0xC1070018
ERR_BADQ_OUTOFSERVICE
no value, reason: not in access
The value is not in the server's access for some reason.
0xC1070019
ERR_BADQ_INVSUBQA
no value, OPC server specifies invalid reason
The server classifies the value as invalid, but specifies a reason not defined in the specification.
0xC107001A
ERR_VAL_INVQA
no value, quality (status) specification of the OPC server is invalid.
The quality level reported by the server is undefined.
OPC-related messages of the VisXpert communication module
0xC1070007
ERR_OPC_NORESULTRETURN
OPC server did not provide a result
The OPC server did not report an error or produce a result when calling a function where this is not allowed. This is a violation of the OPC specification. Contact the manufacturer of the server for a bug-cleaned version.
0xC107001B
ERR_CNV_OPCTOGP
Conversion OPC to VisXpert unknown
The conversion between the VisXpert data type supplied by the server and the desired VisXpert data type is not possible.
0xC107001C
ERR_CNV_ARREBYREF
Array element passed as reference
The OPC server sent a value that consists of an array of references to other values. Such fields are not generally allowed and are not supported by VisXpert.
0xC107001D
ERR_CNV_ARREARR
Array Elements as Array Elements
The OPC server sent a value consisting of nested arrays. Such fields are not generally allowed and are not supported by VisXpert.
0xC107001E
ERR_CNV_ARREUNK
Unknown type in Varriant array
The server sent a value that consists of an array that contains elements of a VisXpert unknown type.
0xC107001F
ERR_CNV_VARARR
VARIANT array not yet supported
The server sent a value consisting of an array of VARIANTs. Such fields are not generally allowed and are not yet supported by VisXpert.
0xC1070020
ERR_CNV_BYREF
Value transfer as a reference not allowed in OPC
The server has sent a value that must be addressed as a reference. This is not allowed by the OPC specification and is not supported by VisXpert.
0xC1070021
ERR_CNV_GPTOOPC
Conversion VisXpert to OPC unknown
It is not possible to convert the VisXpert variables to the type of The OPC item (when writing).
0xC1070022
ERR_OPC_ZEROTRANSID
Transaction ID 0 prevents job assignment
According to version 1 of the OPC specification, the OPC server assigns transaction identifiers. The ID 0 is not allowed.
0xC2000013
ERR_KOMM_NOTOPCDASRV
COM object is not an OPCDA server
The entry under "OPC Server" in the group configuration refers to a program that is not a server after OPC DA (Data Access) version 1 or 2.
Sps Data (Simatic S7)
Introduction
The module 'PLC data' enables communication with the PLC from the Simatic S7 series.
The configuration is realized under VisXpert "PLC Variable Configuration / Group Properties" and described in detail in the submenus.
Supported PLC's
The SPS-Data driver currently supports the following PLC's:
- Simatic S7-300
- Simatic S7-400
- Simatic S7-1200 (“Non Optimized” blocks)
- Simatic S7-1500 (“Non Optimized” blocks)
Simatic Group Properties

- Name: The name of the group to create.
(Existing Group displays the names of all other groups to help you find a unique name.) - Device: The type of PLC. Determines how each variable is addressed.
- Connection: Most drivers require specific information about how to configure individual connections.
This button opens a dialog of the driver so that you can enter this information.
The respective dialogs are described in more detail in the chapters on the individual drivers.
View Device and Connection Setting
This option opens the detail dialog, that allows you to configure the different devices and the configured connections on each device.
Usually you configure one device "TCP/CP" and then configure all PLC Connection on that device. The AG-Nr corresponds to the Connection Number.
Simatic Variable Properties

The editor largely corresponds to the description from chapter "Variable Configuration (Editor)" in the "Driver General" part.
The variable table contains the following fields:
- Name: max. 255-character name of the variable; this name will appear later e.g. in the editor of the visualization.
- Type: The type of a variable can be selected via a list box in the field. VisXpert supports the following types of variables:
- Integer
- String
- Boolean
- Float
- Block
- Operand: Address or Initial address of the variable in the PLC. The spelling of the respective operands can be found in the PLC-specific part of this manual as well as in the manual of the PLC manufacturer.
- PLC format: Format of the value in the PLC, is required for the correct conversion of the values (e.g. could be a double word in the PLC either as a floating point or as an integer with/without signs).
You can enter the format or choose from a list of formats supported for each PLC type, if you leave the field blank, a default value is entered when you check it. For more details, see chapter on the respective control type. - Byte Count: This specification is only required for the String and Data Block types.
It specifies the length of the variables in bytes.
If you have not made an entry, it is assigned a default value when checking. - Access: Allowed access types to this variable. You can choose between read, write, or read/write in the list (not specified: read/write).
- Read request: How the driver should read the variable from the PLC when it is requested.
You can set the following strategies:- Cyclic: The PC reads data in the given time grid (default setting for new variables).
- Once: PC reads the first variable value, if the value changes, the PLC sends the new value via an active telegram.
Useful e.g. for rarely updated meter readings or similar.
Requires that you write an appropriate program for the PLC that monitors the corresponding values for change and sends them to the PC via the VisXpert modules. - Never: The variable value is sent only actively by the PLC and is not retrieved by the PC.
Useful e.g. for the data blocks of the VisXpert module Recording Block.
- Refresh Time: Required only if you have set the read request to cyclic.
Specifies the time interval, in milliseconds, in which the PC should read this value from the PLC.
Direct variables
It is not always possible to configure all of them in a group or group. variables required by a PLC.
In such cases, the driver provides "PLC data".
Such variables are characterized by the fact that they are not included in the configuration of that group, but instead contain their entire configuration in the name. The communication module and the driver recognize direct variables by the fact that their name begins with a double cross ('').' The complete syntax describes the following rule:
#[([<AktZeit>][r][w][i])]<Adress>[<Typ>][<Length>|<Amount>]
The most important and the only non-optional specification is the address of the value in the PLC. This must also contain any information that may be necessary about the format of the value. Their syntax is the same as that that can also be specified in the variable table under operand and PLC format.
Unless you specify otherwise, the type of variable is derived from the type of value in the PLC.
If you want to explicitly specify the type, specify one of the following abbreviations according to the address and PLC format:
- TB for Bool's value
- TG for integer
- TF for floating point
- TS for String
- TD for data block
For strings and data blocks, you must then specify the length. There are two options for this:
- Length in bytes as a decimal number, as in the editor of the "PLC Data" driver in the Byte Count field. You must ensure that the number of bytes is divisible to the size of the data item addressed by the operand
(e.g. length 10 is not allowed for double words because a double word is 4 bytes long). - Number of elements in square brackets. The length of the string or data block is the number you specify multiplied by the size of the data item addressed by the operand in the PLC.
For example, in the case of a SPS Simatic S7, the following information is equivalent:
#DB 100.DBW 12 WORD TD 10
#DB 100.DBW 12 WORD TD[5]
Tip: You can easily check the correctness of operands, PLC formats, and lengths with the editor of the PLC Data driver by creating a test variable in them and entering the relevant information.
If you leave the line with this variable and the Check Immediately option is turned on, the editor also displays the preferred spelling in the status line (but without VisXpert type).
In general, direct variables are used only with synchronous read or write jobs, but information such as update time, access rights, or read strategy is not relevant.
If you also use direct variables for other purposes, you can enter this information in the address in parentheses:
- Update time in ms as a simple decimal number. Zero means that the variable is actively sent by the PLC, otherwise the variable is read cyclically by the PC in the specified grid.
- 'r' to set read access
- 'w' to set write access
- 'i' to specify 0 at update time, so that the variable should be read once by the PC when logging in.
Examples:
- #MD 10 -> 4-byte signed integer as VisXpert integer
- #MD 10 DWORD -> 4-byte unsigned integer as VisXpert integer
- #MD 10 DWORD TF -> 4-byte unsigned integer as VisXpert floating point
- #MD 10 REAL -> PLC floating point number as VisXpert floating point
- #MB 10 BYTE TD 8 -> 8 bytes from MB 10 as VisXpert data block
- #MW 10 WORD TD 8 -> 4 words (8 bytes) as VisXpert data block (bytes rotated in pairs)
- #MW 10 WORD[4] -> The same as above.
- #(350)MW 10 WORD -> 2-byte unsigned integer, update every 350 ms.
- #(0i)MW 10 WORD TG -> 2-byte unsigned integer as VisXpert integer, once read on request, then update by PLC
- #(0r)DB 121.DBB 58 TD 32 -> 32 bytes as data block, read only, update only by PLC
OPC-UA Driver

VisXpert includes drivers for OPC-UA servers which allows it to connect to any OPC-UA server and load process information from it.
Apart from being able to use OPC-UA server, VisXpert can now also act as an OPC-UA Server, to allow OPC-UA clients to connect to any Variable available in the VisXpert System.
OPC-UA Group Properties

Server URL
This is the Connection URL that defines where the Server is reachable. You can obtain the URL from the OPC-UA Server where you want to connect to, or by "Browsing" available Servers
Timings
This defines the waiting times and Timeout while connecting or when trying to reconnect. The Reconnect Interval defines the time after which the Driver tries to reconnect to the server, after an connection has been lost.
Security
Defines how the Driver will authenticate to the server. Currently only "Anonymous" or "Credentials" are supported. You must configure/obtain the Credentials from the OPC-UA server. The configuration of the servers Credentials, depends on the OPC-Server itself.
Trust
Here you can adjust some certificate trust option.
- Trust all Certificates: Normally you must manually add the Servers Certificated to the "Trusted" Certificates of the driver. If "Trust all Certificates" is active, the Servers certificate will automatically be added to the Trusted Certificates. This means that, if the Server has an valid certificate it will automatically be trusted.
- Accept all: This allows you to also "Trust" invalid or expired Certificates.
OPC-UA Variable Properties

Item ID
Item ID is an identifier for a node in an OPC server’s address space.
OPC Unified Architecture allows the OPC server to choose one or more types of node IDs for representation of its nodes. Node IDs can be numeric (a 32-bit integer), string, a GUID (globally unique identifier, 128 bits), or opaque (a binary data blob).
Usually you will get this from "Importing" variables from the OPC-Server via the Import functionality
Modbus TCP Driver
An new Modbus-TCP driver is now available to connect to any standard Modbus-TCP Slave. This allows you to directly connect to Modbus devices without the use of any intermediate PLC.
VisXpert also Includes an Modbus Server that acts as an Modbus-TCP slave and allows Masters to connect and load variables from the VisXpert system. Since Modbus does not have any concept of “Tag names” or any other method of structure, you must define an Mapping between VisXpert variables and Modbus register.
Modbus TCP Group Properties

Address and Port
This defines how the device is reachable via TCP/IP. The Port is usually always 502, except for some rare situations that involve Firewalls, VPN Tunneling etc.
Modbus ID
This id defines the Devices ID on the configured TCP/IP Address. For "pure" Modbus/TCP this is usually 0, but for "Modbus/TCP-RTU" gateways, this refers to the actual RTU device connected to the Serial Bus.
Timings
This defines the waiting times and Timeout while connecting or when trying to reconnect. The Reconnect Interval defines the time after which the Driver tries to reconnect to the server, after an connection has been lost.
Modbus TCP Variable Properties

Data Area
Defines the data area from where to read the registers. Usually the devices implement the "Holding Registers" area, but sometimes they also implement "Analog Input" areas.
Register Start and Count
This defines the memory range to read. it defines the Offset inside the Data Area and how many registers will be read.
Data Type
the data type defines how the data read from the registers will be interpreted. Modbus Registers are defined as uint16, and there is no direct standardization about how to handle data types that are more than 16 bits wide, such as "real".
Expressions
These Expressions allow you to modify the value before handing it out to the modbus server.
An common use case is to apply an "V*10" before haning it to the Modbus Cliente (OnReadExpression)
and an "V/10" Expression when receiving it from the Modbus Client (OnWriteExpression).
The Variable "V" always refers to the Value (either coming from modbus or going to modbus, depnding on Read/Write).
Available functions include common mathematical functions such as:
*, / , +, -, pow(base, exponent) etc.
Example:
Convert Celsius to Fahrenheit: (V * 9/5) + 32
Convert Fahrenheit to Celsius (V − 32) * 5/9
Allen Bradley Driver
All Allen Bradley PLC’s are now supported through the “Allen Bradley” driver. You can load Tags or Data files from all available Allen Bradley controllers. The driver is available for:
- Compact Logix
- Control Logix
- SLC
- Micrologix
- Micro800
The Allen Bradley driver does only allow Controllers to be connected via "Ethernet" based protocols.
Allen Bradley Group Properties

PLC Address
his defines how the device is reachable via TCP/IP. if you are unsure, you can "Browse" for all available devices.
PLC Path
This defines how the CPU module of the PLC is reachable via the configured IP Address. Usually they are reachable via the "BackPlane" bus.
You have to configure the correct PLC-Type for the PLC, so that the correct communication protocol can be chosen.
Browsing

When browsing, you will be presented with an list of "Interfaces" that are available to be browsed. If you click "+" on the interface, it will be scanned for available "Ethernet IP" devices and for "CIP" devices.
Allen Bradley Variable Properties

Tag Name
This defines the name of the Tag to be read from the PLC. Allen Bradley has two lines of Controllers, that have completely different Tag Name schemes.
The ControlLogix, CompactLogix and FlexLogic PLCs are Tag Based PLC architectures and do not have traditional PLC Addressing like the SLC and MicroLogix series.
Tag based
If the PLC is "Tag based", then the Tag Name corresponds to the name of the Tag in the PLC. For these PLC's you should use the "Import Tags" functionality, to import directly from the Controllers
- PROGRAM:MAIN PROGRAM.DINT_PROGRAM_TAG
- MY_STRUCT_1.DINT_MEMBER.INTARRAY_MEMBER[0].BOOL_MEMBER
Memory Address based
For Memory Address based PLC's the Tag name defines the "Data file Name" with an offset in the file. Such as:
- N1:1 second integer in the N1 integer data file
- T4:11 the 12th (it is 0 based) Timer of the data file
Data Type
Expressions
These Expressions allow you to modify the value before handing it out to the modbus server.
An common use case is to apply an "V*10" before haning it to the Modbus Cliente (OnReadExpression)
and an "V/10" Expression when receiving it from the Modbus Client (OnWriteExpression).
The Variable "V" always refers to the Value (either coming from modbus or going to modbus, depnding on Read/Write).
Available functions include common mathematical functions such as:
*, / , +, -, pow(base, exponent) etc.
Example:
Convert Celsius to Fahrenheit: (V * 9/5) + 32
Convert Fahrenheit to Celsius (V − 32) * 5/9
Data Servers
Data servers are modules that "serve" data from the VisXpert variables to other applications. This allows other applications to connect to VisXpert and extract data via various formats. Data Servers are implemented as Modules and can be added to the project as required. Servers do not produce data, but allow their clients to have access to the VisXpert variables via the specific interface and protocol.
Some Servers will need an "Mapping" table to allow clients to access the VisXpert variables. This "mapping must be created before the Server becomes usable. Other Servers, such as OPC-UA or DDE, Directly allow access without mapping Tables.
Currently the following Servers are available:
- Modbus TCP
- OPC-UA
- DDE (dynamic data exchange) mainly for Excel real time data access
- MQTT
Opc-UA Server
The VisXpert OPC-UA Server allows clients to Connect via OPC-UA to VisXpert and obtain Variable data from the VisXpert Communications module. According to Wikipedia:
OPC Unified Architecture (OPC UA) is a cross-platform, open-source, IEC62541 standard for data exchange from sensors to cloud applications developed by the OPC Foundation. Distinguishing characteristics are:
- Standardized data models freely available for over 60 types of industrial equipment, published by the OPC Foundation via Companion Specifications
- Extensible security profiles, including authentication, authorization, encryption and checksums
- Extensible security key management, including X.509, token and password
- Support for both client-server and publish-subscribe communication patterns
- Communication protocol independent. Mappings to several communication protocols like TCP/IP, UDP/IP, WebSockets, AMQP and MQTT are specified
- Initially successful in standardized data exchange with industrial equipment (discrete manufacturing, process manufacturing, energy) and systems for data collection and control, but now also leveraged in building automation, weighing and kitchen equipment and cloud applications
- Open – open-source reference implementations freely available to OPC Foundation members, non members under GPL 2.0 license[1]
- Binaries (NuGet Packages) available free of charge under redistributable license[2]
- Cross-platform – not tied to one operating system or programming language
- Service-oriented architecture (SOA)
- The specification is freely available on the OPC Foundation website and is split into several parts to ease implementation, but only OPC UA stack vendors need to read them, end users simply leverage existing commercial and/or open-source stacks available in all popular programming languages
Configuration
The server does not require any configuration, apart from being added to the Project. It allows the user to browse the VisXpert variables and Groups and connect to them without any further configuration.
This is possible, because OPC-UA is an Evolution of the older "OPC-Classic" protocol, that is already implemented in VisXpert.
Certificates
Currently, VisXpert OPC-UA Server does not support client authentication via Certificates. It only supports authentication via Username/Password.
User Names and Password
The User Configuration for the OPC-UA server is done via the VisXpert User Administration. Every user that has access to the "OPC-UA Server" module can connect and read/write Variables. To configure the user and password, you have to open the User Administration and configure the access rights for the OPC-UA Server module.

DDE Server
The DDE Server allows for applications such as “Microsoft Excel” to directly access Variables with live data in all their worksheets. No “Plug Ins” or “Macros” are required. The DDE-Mechanism is an Proven Microsoft Technology that allows Applications such as “Excel”, “Word” and others to have access to live data such as Measurement values from an PLC. This allows you to create rich Reports directly inside Excel, that automatically and dynamically update their cell values whenever an PLC Tag changes.
Using with Microsoft Excel
Requirements

The DDE protocol has been supported by Excel since some of the very first versions of Microsoft Excel, and is still being supported in the most recent Versions of Microsoft Excel 2021, Microsoft 365 and probably also in future versions.
This means that there are no additional requirements for Excel to use the DDE real time data connection.
Adding an Data link to an Cell
In order for the data to be available, the Runtime of the VisXpert DDE Server must be running. If it is not running, Excel will not find any data an return "Error" to the cells value.

To display DDE data in Excel, enter the following formula into each cell:
=<Application>|Topic!Item
In VisXpert the Application Name is always "VisXpertDDE", the Topic depends on the configured topics and the Item depends on the Items configured in this Topic.
Vars Topic
The "Vars" topic is an special topic and you can access all Variables of VisXpert by defining the "GroupName:ValueName" syntax.
You can use the following Syntax in Excel, without configuration
=VisXpertDDE|Vars!'PLC01:AIn0001.Val'
The Group and Value are separated by an double period ":", but that is an special character for Excel.
To avoid this, the Item must be put into "Single Quotes" (because Double quotes are also special for Excel)
Something like this: =VisXpertDDE|Vars!'PLC01:AIn0001.Val'
Cell Value Updates
The Cell values will be updated, whenever an value update of the referenced value happens. Excel then displays the new value as soon as it arrives via the DDE data link.
DDE Server Settings

Error Behavior
This allows you to set how the DDE server should send values if the underlying VisXpert variables enters in the Error State. This might happen for example, if the connected PLC is disconnected from the network. In that case you can chose the option that best fits your application:
- Replace Value: an user defined replacement text is sent. This is by default <ERROR>, but can be changed to any other string
- Send Null: Sending null, will cause Excel to display an Cell Value Null error on the Cell, and all Calculations referencing this cell will also result in Null values
- Last Value: The DDE Server does not inform excel about the Error, and just keeps sending the last valid value
Null Value Behavior
This allows you to set how the DDE server should send values if the underlying VisXpert variables return Null Values. This usually happens rarely, but may happen at the startup of Drivers, when they do not yet have data available. In that case you can chose the option that best fits your application:
- Replace Value: an user defined replacement text is sent. This is by default <ERROR>, but can be changed to any other string
- Send Null: Sending null, will cause Excel to display an Cell Value Null error on the Cell, and all Calculations referencing this cell will also result in Null values
Topics and Items
Topics and Items allow you to create "Aliases" to VisXpert variables, that can then be used in Excel. This is mainly be used if you have very long Variable Names, and you want to make them available under shortened names.
Modbus Server
VisXpert can act as an Modbus Server thorough the "MBServer" module. It allows Modbus/TCP clients to connect to VisXpert and obtain variable. Since the Modbus Protocol itself does not have an concept of "Variables" or "Tags" and only works by sending 16 bit registers, you have to create an Mapping Table to map VisXpert variables to Modbus Registers.
Modbus Server Configuration
The Modbus Protocol is an "Memory Range" orientated protocol, but VisXpert implements an "Tag Name" based memory model. To be able to publish variables as memory areas in Modbus, you must create an mapping, where you define which variables are available on the Modbus registers, and what data types they will use.
You will create on e "Mapping Item" for each variable that you want to make available on the Modbus Server. Each Item can then define how it will be made available to the registers.
You have to make sure that the Register offsets and length do NOT overlap!

VisXpert Variable And Group Name
Here you have to select the variable that you want to publish
Read Only
if set to read only, the modbus registers can not be written to, and every write attempt will return an error code
Modbus Address
Defines the Address and data type to use in the Modbus Registers. The Data type will be converted appropriately if the VisXpert variables type does not match.
- Modbus Data Area: the memory area where the data will be made available. Generally you want to use "Hold Registers.
- Modbus Register Offset: Defines the register offset in the selected Data Area. Remember that each Modbus register is defined as uint16.
- Modbus Register Count: the amount of register that the data type will use. Remember that each modbus register is 16 bits wide, so an 32 bit real will occupy 2 register.
Expressions
These Expressions allow you to modify the value before handing it out to the modbus server.
An common use case is to apply an "V*10" before haning it to the Modbus Cliente (OnReadExpression)
and an "V/10" Expression when receiving it from the Modbus Client (OnWriteExpression).
The Variable "V" always refers to the Value (either coming from modbus or going to modbus, depnding on Read/Write).
Available functions include common mathematical functions such as:
*, / , +, -, pow(base, exponent) etc.
Example:
Convert Celsius to Fahrenheit: (V * 9/5) + 32
Convert Fahrenheit to Celsius (V − 32) * 5/9
Project database
Overview
VisXpert can optionally include an SQL database into the project. This Database can be accessed from the Visualization module, and stores Alarm Message data, Scheduling data and optionally Measurement Trending data. This database can also be modified and Project dependent data can easily be added to it via the appropiate tools.
Supported Databases
Currently VisXpert supports all Microsoft SQL server databases from 2005 onwards. it is however recommended that you use the latest version (MS-Sql2019 as of december 2021). VisXpert supports both, enterprise and Express versions of the SQL Server.
By default, the Ms-SQL server 2019 Express version is included by the installer, which installs the default instance called "GRAPHPIC" onto the system.
DB Tool
The DB tool is called from the communication module in the Tools menu and manages the type of database connection of the currently open VisXpert project. In the example, here you can find the settings Save database with project and automatically add project database to the server. This means that the data files are stored in the project directory (these are the two above files .mdf and .ldf), when the project is opened, these files are automatically added to the locally installed MS-SQL server and are then available under the database name Gp8. This allows access to the project database immediately after the project is opened from the SQL server.
There exist the following options:
- No Database: No database is included in the project. No Message module is available as it requires the SQL database
- Attach Database: When the Project is opened, the Database files are automatically added to the default MS-SQL server instance configured. When the Project is closed, this database is detached and closed. The Database is only available, while the project is openend.
- User Database: in Some cases there exists, and external server that hosts the database. If this option is selected, no database will be attached automatically and the provided database will be used instead.

Manage Database
For all database Development, Administration and Management work, we recommend to use the "Microsoft SQL Server Management Studio" which is freely available from Microsoft, or can be installed from the Installation Center.
Project Database Backup
To prevent data loss, you should always consider an solid Backup strategy for you backup. The database is usually part of the VisXpert project directory and the backup of the database depends on you configuration and the type of backup you want to create.
Integrated Database
if you are using an Integrated database, the database files are located inside the VisXpert Project directory. This means that the files are already part of your normal Project backup strategy.
External Database
External databases have to be backed up independently. This is usually managed by you database administrators. If you want to do this locally, you can find helpful information here:
Installation
When visXpert is installed, the two default configurations, Server and Client available, with the main difference that the "Microsoft SQL-Server Express" is installed on the server station as a prerequisite (for stand-alone projects the same as for server stations). This gives you the typical configuration where the SQL server is installed on the VisXpert server station; all client stations access this server (the required database drivers are already available in Windows XP or Vista).
WARNING: The SQL server data files must always be on a local drive of the machine on which the SQL server is running. Unable to access data files over the network.
If you want to use an existing central SQL server, you can do without installing MSSQL on the VisXpert server station. However, the ability to automatically bind the database files to the server at project startup is no longer necessary.
Manual Installation
If the installation fails, the Microsoft SQL-Server Express can also be installed manually. To do this, we go to the "Setup" folder on the CD and run the SQLEXPR32. EXE.
After the start of the installation, the first important place is the "Registration Information", at this point necessarily remove the hoe at the bottom of "Hide advanced configuration options", otherwise the SQLexpress database will be created, and we do not want that. For "instance Name" we then specify the name GRAPHPIC instead of the sQLexpress mentioned above, which is specified as the default in the installation routine.
If you still experience problems after successfully installing VisXpert, we'll check the SQL Server (GRAPHPIC) in SQL Server to see if it's in place.
If everything is okay, we should still enter the first item server name localhost GRAPHPIC in the DB Tool (found under Tool in the title bar of VisXpert) under Database Predefine Computer in the "Connections" tab. The location after "localhost" must match the SQL Server.
The SQL Server VisXpert does not exist in sql Server Configurations Manager? Then we proceed as described in the point above and enter the server that the SQL installation created.
Client/server projects
When creating client/server projects, the database server should be set up on the VisXpert server station and should not be set to "Project". The reason for this is, that the Clients expect the Database to be available, but if the database is set to "Project" then it only becomes available if the Server Station starts up. The database should not be automatically added to the database server to ensure that the database remains available to the clients, even if, for example, the server communication module is stopped or, for example, the server communication module is stopped, another project is loaded for configuration or testing.
- Create a new database and add it to the server: In the DB tool, first select the Project Database option and make the database known to the SQL server with the Add DB button. This attaches the Current Project database to the SQL Server.

- To change the default database name Gp8 in the SQL Server Management Studio to whatever database name you want to use:
- Create a shared database user



- Change the connection type to Custom and adjust the connection properties in the DB tool

- Adjust the Correct Connection settings as adjusted in SQL Server Management Studio

Manage project specific Structures
The VisXpert database can be extended to include any data structure of its own. To do this, use the SQL Server Management Studio Express. In the database, see Tables for a list of all tables. The database contains system tables and data structures of some VisXpert modules. System tables usually carry the prefix "SYS", for example, the VisXpert tables have the prefixes "AL" (reporting system) or "BAS" (basic tables). For clarity, you should use the prefix "USER Data Table" (UDT) or another uniform identifier for project-specific tables, such as "UDT_RECIPE" for a recipe table.
Add your own tables via the Object Inspector (right mouse button on tables, menu item New Table).

Use the table designer to define the structure of the table:
- Column Name: Column name (usually all characters capitalized, underscores as separators, no spaces, e.g. COLUMN_NAME)
- Data Type: Data type—for example, int for integer values, float for floating point. Strings are usually recommended for the type nvarchar (Unicode string), because for nchar columns the strings are generally filled with spaces up to the defined string length.
- Allow Nulls: determines whether empty field values are allowed
- In the Properties window, you can find additional properties for the currently selected column, which are usually left at the default values.
to allow indexed access to table rows over an integer index use the int data type for the first column and right-click the blank field at the very beginning of the row with set primary key to define this column as a primary key, ensuring that the field values used are unique while gaining faster access when searching for a row with a specific ID :

To change the table structure later, select the Modify function for the table in the Object Inspector. With the Open Table you open a data grid to view or edit the contents of the table.
If you need multiple tables or relationships between individual tables, it is a good way to create a new data diagram (in the Object Inspector - Database Diagrams - New Database Diagram entry). Existing tables can be inserted into the new chart—for a new blank chart, close the dialog with Close. Inserting and changing tables in the chart is done using the right-click functions.
Alarms and Events
Alarm and events archives are called "Messages" in the VisXpert system. These are events registered in an database that reflect the occurrence of certain events in an system. The events can be triggered based on signals form an PLC or any other application.
The Message System also includes an customizable "Alarm Viewer" that allows you to view, monitor and evaluate the registered alarm messages. It also allows the user to assign "Causes" and view "Help Messages" about the error and event messages.
View and Archive
The task of the reporting system (messages) is to record faults and messages (e.g. based on a specific bit in the PLC) and processing. "Processing" in the broadest sense means processing, logging, displaying the operator and archiving them in a database. The operator receives a clear description of the message, he can retrieve a help text for the message (e.g. instructions for rectification of a fault) and enter the exact cause (cause).
Messages are always described by coming (start of disturbance) and gone time (end of the fault). New messages are called current messages and can be archived after the fault ends. In the reporting system display, the messages are displayed tabularly. There are the two views Current Messages and Archived Messages.
Depending on the message type, different processing types can be defined. This makes it possible, for example, to require manual message acknowledgment by the user or to automatically acknowledge the message after the fault is finished and thus transfer it from the current table to the archive.
Duration
Based on the coming and outgoing time of a message, the duration of interference is determined. A distinction is made between the gross duration, which is simply the difference between the coming time and the walking time, and the net duration, which takes into account the working time model in the calculation (effective duration of interference). The maintenance of the working time model is carried out with the VisXpert module Scheduler.
The net duration is then determined by the gross duration minus the break times. If, for example, a fault resulted in a production shutdown, the net duration reflects the purely fault-related downtime.
Filters
The reporting system provides powerful filter functions that enable a detailed and meaningful evaluation of the current and archived messages. The evaluations can be printed in custom reports. Setting filters, starting the report output, etc. can also be remotely controlled via scripts, so that automatic report generation can be implemented flexibly.
Architecture overview
The functions of the VisXpert reporting system are divided into three functional areas, which are available as separate modules:
- Capture via MessageCapture (evaluating interference bits in the PLC) or the message simulation (simulation of faults for testing during configuration).
- Processing with the posting module MessageControl (evaluating the message telegrams and posting them to the database tables).
- Viewing with MessageView (displaying current and archived messages).
This functional division makes it possible to run all programs together on a PC or on a network, distributed on multiple PCs. This means that in a client/server environment, for example, a PC can record and edit (post) the messages, and other PCs can display the messages.
Message Configuration
The reporting system consists of several modules that use a common database. In the communication module, therefore, there is a reporting system node (messages) at the lowest level in the configuration hierarchy, to which the basic configuration of the reporting system is stored. This node contains the corresponding modules (registration, posting, display, etc.).
The message control system is created automatically when a reporting system is created. The remaining modules are added as needed:
- MessageSimu: Simulation of messages for a first test of the reporting system
- MessageCapture: Capture messages from bits or bit fields requested from a controller, for example
- MessageView: Display client for messages - a separate module MessageView is required for each station
The following example shows a typical reporting system configuration:
- Message information about the PLC is requested and processed with the MessageCapture module
- The project is running in three stations: one server and two display clients
- The server requests PLC data, collects messages through MessageCapture, and processes message information with MessageControl
- Each display client uses a separate MessageView module to display messages
The basic configuration parameterization editor is started from the common reporting system node. The settings of the basic reporting system configuration are divided into the three categories basic configuration, advanced configuration and help system (switching via the view menu or the corresponding buttons in the toolbar)

After creating a new project database, a reporting system configuration with somereporting groups and texts is already available as an example. These entries can be deleted or customized as desired.
Message Configuration
DB Settings

The DB Settings page in the basic configuration sets specific system settings that apply to the entire reporting system.
- Maximum number of records Archive table / Log table: Limits the number of entries in the tables. A value of 0 does not mean a limit. If the maximum size of a table is exceeded, the oldest entries are discarded.
- Message processing Counts: determines how many message events (posting count) are processed per unit of time (posting interval). The posting interval is expressed in milliseconds.
Message groups

All message definitions are divided into groups. For example, it is a good place to create a message group per PLC. Another example would be the division of the messages into different floors in a building.
A meaningful division of messages into groups is especially useful when in larger systems the messages are displayed on several PCs. Then a station filter can be defined for each PC to display only the messages of a group. For example, in a larger building, a message group could be defined per floor. Finally, in order to display the messages accordingly, a filter can be defined on the display stations on the respective floor, which hides the messages from other floors.
- ID: freely selectable numeric identifier
- Name: Name of the group
- Description: Description of the group
- Ack flag Indication Variable: Assignment of a VisXpert variable (Boolean) - the variable is set as soon as a message from the group is acknowledged. The signal can be used, for example, to switch off a warning signal for interference signaling, which is controlled by the PLC. The receipt flag is set by the reporting system and must be reset by the controller in the case of the example.
- Alarm Present Flag Variable: Mapping a VisXpert variable (Boolean) that indicates the pending of active messages from each group. This flag is set as long as active messages from the group are pending that have not yet been acknowledged. This variable can be used, for example, to control signal lights to indicate the pending of messages. After all messages of the group have been acknowledged, the signaling is reset. This signaling is generated only by messages whose message class has been set to "Signaling = On". See the "Classes" section.
- External Ack Variable: Mapping a VisXpert variable (Boolean) to acknowledge all messages in the group. For example, a hardware-based button for message acknowledgment can be connected via the variable. The variable must be set due to the key press. The reporting system resets the value after the receipt request is detected.
Messages

Enter the message definitions of the selected message group. Each message is indicated by the message group and the operands. The operand can be operated by a PLC operand (e.g. M12.0) or a text number.
- ID: Cross-group unique numeric identifier
- Operand: In the group of unambiguous operand. Depending on the Capture settings, this should be an "number" to be countable. But it can also be any other string
- Symbol: Short name / symbolism of the message
- Text: message text; A s in the message text serves as a placeholder for a accompanying text given during the message recording
- Class: Assignment to a message class (sets processing and display of the message)
- Type: Assignment to a message type
- Help: Assignment of a help text that can be displayed in the alarm view by the user
Alarm Classes

Each message is mapped to a specific class to determine how the message is displayed and processed. Any number of classes can be defined. This makes it easy to color distinguish messages based on class mapping, for example, in the display.
- ID: unique numeric identifier
- Name: Name of the class
- Description: Description of the class
- Color active: background and text color for current messages
- Color gone: Background and text color for messages that are no longer active, which are still listed in the current table due to missing acknowledgment
- Color Acknowledged: Background and text color for current messages marked as "acknowledged"
- Color detected: Background and text color for current messages marked as "recognized"
- Color in the archive: background and text color for archived messages
- Archive: The True setting specifies that the message is applied to the archive. Otherwise, the message is discarded after it is deleted from the current table.
- Sound on Incoming: A beep is emitted when the message is triggered
- Sound file: Audio file (wav file) to be output when the message occurs. The file name can either be an absolute path, or relative to the Alarm View's configuration directory.
- Bring to Front: Determines whether the display is placed in the foreground when messages occur. The setting only affects if the appropriate setting is enabled in the display options.
- Consider for "Alarm Present-Flag": Determines whether class messages affect the signal flag (see Group Settings)
- Request Reason: If this option is set, a acknowledgment of messages is only accepted after entering the cause of the interference
- Request User: If this option is set, a user must be logged on for all user actions (acknowledge, justify, etc.). If no user is logged on, the user is prompted to log in.
- Request Comment: If this option is set, a acknowledgment of messages is only accepted after entering the Comment to the Alarm Message
Alarm Types

Messages can also be classified using the message type. The assignment of types to messages does not affect their processing and is used in particular as a filter criterion, for example, to create alarms of different types of equipment, Areas or any other criteria that can be used to classify Alarm Messages
Message line

A message line displays the status of a group of messages and provides a set of VisXpert variables with the status information. Message lines are maintained in the extended configuration in the corresponding register:
- ID: unique num. Identifier
- Alarm Group, Alarm Class and Alarm Type: Optional specification of filter criteria, the first message line in the example, for example, only considers messages from group 1 with class 1. To avoid taking into account a criterion, the corresponding field remains empty.
- Variable group: Name of a variable group – the group is created automatically and contains a number of state variables, such as Message text, etc.
Help Texts
The Help Texts page enters the available help texts. Each text has a name (keyword) and the detailed text. The assignment of help texts to message definitions is done for each message
Reason Texts
In order to gain further information about which cause actually led to a particular message, a fault justification can be stored in the reporting system display for each message that has occurred. The list of the fault justifications provided in the process can be edited on the page Fault basic texts.
Capture
Capture with MessageCapture
Description
One way to capture messages is to capture bit fields with the MessageCapture Module. The module requests the data in the form of VisXpert variables and monitors the individual data bits. Setting a bit triggers the associated message, and resetting the bit completes the message. It is possible to mask individual bits, i.e. hide them for capture. Similarly, bits can be inverted to handle 0-active message bits.
Configuration
The configuration specifies the VisXpert variables whose individual bits must be monitored for change. MessageCapture can handle the Boolean, Integer, and Data Block data types.
In the table, select the variable by selecting the selection dialog of the Variable field. After selection, the data type and size in bytes is transferred to the table.
It is essential to specify a message group and a start value to set the associated message definition. The remaining fields can be left with the default values in many cases. MessageCapture then posts the messages to the specified message group. The operand is calculated on the basis of the starting value. The starting value indicates the operand that corresponds to the first bit in the data field. For the remaining bits in the field, the operand is incremented accordingly.
If the message definitions are imported from a PLC assignment list, the individual messages are usually replaced by the operand designation (e.g. M10.3) instead of a numeric identifier. In these cases, the Post Operand option is used and the start value is specified as the operand designation of the first operand of the bit field.
Example:
Suppose an integer value is recorded and the starting value is 10: If the variable changes to 1, that is, the first bit in the data field is set, the same corresponds to the operand 10. If the value changes to the value 5 (the third bit is additionally set), the message is entered with the operand 10 + 2 = 12. If bit one is reset (value 4), the message goes with the operand 10, message 12 remains active. Please note that this counting method for the Message Type field retains the NR preset for numeric counting.
The example shows how to post messages using numeric operands. However, when importing assignment lists of an S5 or S7 directly, there are symbolic operands (e.g. M 10.1, E12.5). In this case, the symbolic operand is not specified for the operand, but the symbolic operand.
Example:
A MERKerbyte MB10 is requested using the PLC driver. In the MessageCapture configuration, this byte is requested in the form of an integer. The message group is the group for which the mapping list of this PLC has been read in the basic reporting system configuration. The starting value is the operand that corresponds to the first bit in the data field, i.e. M10.0. In order to achieve a counting method according to the operands in the PLC, the message type field must be set to ST in this case. Here, too, MessageCapture will count according to the operands, so that the message is actually booked with the operand M10.2 as soon as the third data bit is set.
The assignment of data block variables to S5 operands must be given the underlying as byte operand for inputs, outputs and markers, and as word operand for data blocks. For S7 mappings, all base values are specified as byte operands.

Overview of all MessageCapture settings:
- Variable Name: VisXpert variable whose bits are monitored for change
- Variable Type: Type of VisXpert variable
- Variable Length: Number of bytes of bit field to be monitored. This is dependent on the selected variable
- Message group: Message group to which the messages are posted
- Post operand: determines whether the start value is an operand ID (as opposed to purely numeric message IDs)
- Offset: For numeric message Identifiers, the generated message number for the first (lowest value) bit in the data field is set here. When using operand iDs, the associated MC5 code (PLC operand) is set for the first (lowest value) bit in the data field.
- Filter Mask: The mask can be used to hide certain bits from a data field. These bits are no longer taken into account when recording.
- Invert: Inverts the bit field ("zero-active messages")
- Counting method: The settings sequentially (default), byte byte and word wise set the bit range for operand ids (byte wise means that the bit number 0 is used again for the ninth bit, but the byte number is increased)
Capturing via scripts
VisXpert scripts allow a programmatic entry of messages into the reporting system. There is no need to configure this log-in method. Message actions are performed using the DbMsg and DbMsgExt commands.
An example of the programmatic entry is found in the VisXpert sample project for the reporting system (BSP_MS).
Multilingualism
For multilingual projects, the project languages are selected in the communication module. The user can select one of these languages in the process. In addition to the pure switching of the surface language, the reporting system also supports multilingual texts for the names of message groups, classes, assignment texts, etc.
The reporting system database is prepared for a maximum of three languages. The menu item "Options/Language Setting" determines in which many languages the configuration is stored (text columns):

For each of these columns, the underlying language should be specified in order to: to display certain special characters correctly.
The field map determines which text column for the different project languages should be displayed in the flow. In the example, the reporting system configuration is bilingual (German and English). More languages are available in the interface, but with the exception of English for all other languages, the German names are displayed in the reporting system.
Alarm View
With the reporting system display, the current and archived messages are viewed in tabular form. The messages are generally sorted by the coming time. The switching between the two pages takes place via the tabs Current and Archive or the corresponding buttons or menu entries. The messages displayed in the display can be filtered to perform simple evaluations. In addition to the possibility of automatic print logging, the two tables can be printed. The print template for Log, Current, and Archive view is created using the Print Report Editor.
Optionally, a text view can be displayed below the tables, which displays an editing note (help text of the message) for the selected message.
After the messages are sorted in the order of their coming time, new messages always appear at the end of the table. In order to keep the most up-to-date message in the display area when the number of melds is higher, the most recent message can be displayed via the menu item "View| current scan in the display area.

Alarm View Configuration
The basic settings for the display module are set via the communication module for the individual display modules.

- Limit the amount of data in archive view:
Limits the amount of data in the archive view. The latest messages are always displayed and the older data sets are hidden if the amount of data is too large. A value of 0 does not limit the amount of data. - System group: Group of memory variables that contains the string variables command, status, and return. Using these variables, commands can be transferred from the visualization to the display module, for example, to remotely control the print output or to activate filters.
- Switch to module: Application that is brought to the foreground via the Switch button.
- Display options: Frame type and display of the main menu – especially interesting when the application is embedded in a visualization mask.
- Station filter: Limits message display to specific message groups, classes, or types. For example, range-related displays can be realized by dividing the messages of several areas into individual message groups and enabling a filter on the respective group for display. Another option is filtering based on reporting classes or species. The three filter criteria can be used in combination with each other. For example, if a group and type are selected, only messages from the selected group that are of the selected sturgeon type are displayed.
Operations of the Alarm Viewer
Mark and acknowledge the message as recognized
Via the menu items "Message| Acknowledge" and "Message| Detected" the selected current message can be acknowledged or marked as detected. These functions can also be performed via the corresponding buttons of the toolbar and the button bar. The functions "Message| All Acknowledges" and "Message| All Detected" affects all current messages.
Help, fault and comment
The menu item "Message| Help" displays the help texts for the selected message.
Via the menu item "Message| reason" the cause of the selected message can be selected. In addition to selecting a fault reason from the list, any free text can be specified.
Via the menu item "Message| Comment" can be entered any length text about the fault. To view the comment in the Current or Archive table, select the field of the same name in the field selection.
User rights for the reporting system display
In User Management, the following user permissions are available for reporting system display:
- Start Editor: Starting the Reporting System Editor
- Start runtime: Starting the reporting system display
- Stop runtime: Exiting the reporting system display
- Editing filters: Adding, editing, and deleting filter definitions
- Activate filters: Choosing and activating an online filter
- Editing help texts
- Add basic texts
- Change and delete basic texts
- Activate the print function
- Changing printer settings
- Configure display
- Change display settings (display options, table fields, column widths)
- Use debug functions: Display of the Debug menu, which can be used to view the message log and system messages
Changing Viewer Settings
Menu item "File| Options"...

- Show toolbar: Display of the toolbar
- Show status line: Display of the status bar (includes information such as the file. selected filter)
- Display button panel: Button panel - the displayed functions are selected via the button button button panel.
- Show edit note (help window): Displays a display area that displays the help text of the selected message.
- Apply filter only to archive view: Determines whether the filter only works in archive view or current view.
- font: Font for the message tables
- Button panel: Selection of the functions displayed on the button panel; the order of the buttons simultaneously determines their assignment with function keys.
Responding to new messages...
- Play the warning tone: Determines whether the class properties warn tone or audio file.
- Put display to the foreground: Determines whether the BringToFront class property affects.
View

The archive view is usually updated automatically when a message is applied to it. To avoid constant updating, you can use the Update only when switching to Archive view setting to avoid constant updating. In this case, the update takes place as soon as the current view is changed to the archive view. In addition, a Refresh button appears in the toolbar, which redisplays the archive view.
Visible Columns
Via the menu item "View| fields" can be used to define the columns of the current or table (depending on the view currently displayed).
The list contains the fields available for viewing. Fields can be displayed via the check marks in the list. In the Properties section, you can customize the display of the selected field. The field name sets the column heading, and the text can be aligned to the left, right, or center. The column width is the field width in pixels. Different masks can be set for the display format. This option is particularly relevant for the duration of disturbances, as a pure time display without a date is usually desired here. This is achieved with the Format Time. Position can be used to change the column number of the fields. The Apply button updates the field definitions in the display.
Debugging
If the current user has the Use Debug Functions right, the Trace menu item appears, which can be used to view the log table and system message table. The log table contains the last message telegrams that have been evaluated by the posting module. Telegrams that have failed to process (e.g. Going telegram, even though the message is not active, appears in the system message table with the corresponding error text. These two tables are useful for troubleshooting to help you find out about any expiration or configuration errors.
Alarm filters

The messages displayed in the Current and Archive tables can be filtered. The definition of the filters, as well as the selection of a filter, is only possible with the appropriate user rights.
Via the menu item "View| Filter" opens the filter selection. To activate a filter in the display, select the desired filter here and close the dialog with OK. The filter can then be used with "View| filter active" are activated. The currently active filter appears in the status line at the bottom right.
For coming or The walking times of messages can be set absolute limits (e.g. show all messages since 01.01.2008). In addition, relative filters can also be defined (e.g. all messages of the last 12 hours or the last 7 days, etc.).
For the default definition of filters, you first select the required criteria (time, duration of interference, individual messages, fault cause, class, type). Below are the corresponding choices for setting each criteria.
When defined in list form, the criteria are entered and linked line by line. To do this, the respective field is selected and compared with the value according to the operator. Operators are equal, smaller, larger, smaller, equal, and greater. Several filter criteria can be linked via AND or OR. As an input help, an individual dialog is offered for each field, which appears via the button within the value column.
If you switch from the default definition or the list to the extended definition, a filter string is formulated and specified from the criteria selected there. Note that it is not possible to convert extended definitions to a standard or list representation. The changes will be lost.
Exporting Messages
To export the messages of the current view to a file, select the menu item "File| Export messages". In the Save dialog, the file format can be selected. The current filter is taken into account. The export file contains the data fields that are visible in the view.
Command interface
For each display module, a system group can be specified in the configuration, which contains the string variables command, status and return. To create this variable group, it is best to do the following:
- Create a new auxiliary variable group through the Memory module without any entries and exit the variable configuration.
- Entry of the name of the system group (name of the newly created auxiliary variable group) in the configuration of the display module.
- If you then open this system group again, it contains the string variables command, status, and return.
Command strings can be placed on the display using the command variable. The status variable gives information about the status of the currently processed command and takes the state busy during the execution of a command, while the state is otherwise on idle.
Regardless of the state, commands can be passed all the time because the incoming commands are buffered and processed sequentially. The simultaneous transfer of several commands in a string can be done separately by semicolon.
After the string is entered into the buffer, the reporting system resets the command string. Therefore, rewriting the command variables requires waiting until the command string is empty again.
The following commands are processed by the display module:
- BringToFront: Brings the display window to the foreground.
- Hide: Makes the display window invisible.
- Minimize: Minimizes the display window.
- Show: Shows the display window (if the window is as an icon in the taskbar, it will be brought to normal size).
- Close: Ends the module.
- SetStayOnTop(<0>): Determines whether the reporting system display is kept in the foreground.</0>
- SetPos(<Left>, <Top>): Positions the upper-left corner of the display window.</Top> </Left>
- PrintAkt: Starts the printout of the current messages.
- PrintArv: Starts the printout of the archive messages.
- ActivateFilter: Activates the online filter.
- DeactivateFilter: Disables the online filter.
- OpenFilter(<Filtername>): Selects a filter.</Filtername> The filter name is passed as a parameter in hochkommatas. e.g. OpenFilter('SPS, fault duration')
- ExportArchive(<Filename>): Exports the message archive to the specified file.</Filename> The export can be done either to a tab-separated text file (.txt) or CSV (.csv). The file name must be specified with the full path. To restrict the exported data, a message filter can be activated with the OpenFilter and ActivateFilter commands beforehand. Accordingly, only the result set is exported.
Examples for passing commands from the visualization can be found in the VisXpert sample project for the reporting system (BSP_MS).
Process
Processing messages with MessageControl
The MessageControl module is available for each reporting system and usually runs on the server station for distributed projects. In the process, the posting module shows some status information, such as the size of different tables. The following describes the functionality of the processing logic roughly.
Databases
All data from the reporting system is kept in the project database (Sql server). For more information about setting up the project database, see Chapter 4, "Project Database."
The capture modules pass new reporting events to the reporting system via a database procedure and are stored in a log table. The message control system processes all incoming message telegrams and records in the log table the successful processing or any errors that have occurred. Especially during commissioning, it can be helpful to check the message processing against the log table (reporting system display, menu item Tracing).
When a new message is triggered (coming event), a new entry is created in the message archive with the identifier "Message is currently pending". The message retains this status until all conditions for completing the message are met (e.g. message and acknowledged by the user). In the reporting system display, all messages with this identifier are listed in the current display, as soon as the message is completed, it appears in the archive view.
Separate modules are available for capturing, editing and displaying messages. However, all modules use the same database tables for configuration and expiration data. This results in the following scheme:

Signal telegrams
Messages can be collected in a variety of ways. Regardless of the registration type, the message telegrams are transferred via a database procedure. The information passed in is transferred directly to the log table:
A reported Telegram basically contains the following information:
- Timestamp: Time at which the message was triggered
- Message group, operand: message ID
- Action: s. Below...
- Source: Program that triggered the message
- Advanced Properties
- Text (optional)
- Message class (optional)
- Message type (optional)
Message actions:
- K: Message comes: This telegram indicates the beginning of a message. The posting module will enter a new message in the current
table when a comment message is received. - G: Message gone: This marks the end of a message. The posting module will then complete the corresponding current message, i.e. re-enact the walking time for the message and calculate the duration of the fault.
- Q: Acknowledge: All current messages of the specified controller are completed, i.e. receive the walking time.
- P: Protocol The message does not appear in the current table, but is immediately posted to the archive.
- E: Message detected This marks the corresponding current message as recognized.
- Q: Message acknowledged Corresponds to the manual acknowledgment of a message.
Simulate messages with MessageSimu
With the reporting system simulation, random signal telegrams can be generated manually or timer-controlled. Simulation is only important in the configuration phase for testing purposes in order to test the function of the reporting system if no values from the process are available yet.
For automatic simulation, the posting probabilities for coming, going and error-free entries, as well as the posting interval can be selected.
E-Mail Notification
This Module allows you to send E-Mails when certain or any alarm is "incoming", "Gone" or "Acknowledged" in the Alarm system. You can define E-Mail recipients, and group them together in "Groups" to easily manage them. Each group can then be assigned an schedule when they receive Notification.
This allows you to define shifts and send Mails only to the personal in the active shift.

E-Mail Configurations
Each configuration represents an group of recipients, that belong to it, and defines on which alarms it reacts and the schedule when it will send notifications. Each Recipient can belong to multiple configuration groups.
Recipients
Defines the Mail addresses where the Mails will be sent. Each Recipient can belong to multiple configuration groups.
Alarms to Send
You can select which types of alarms will be sent via Mail. You can "Include All Alarms" and then select if the group should send "Incoming", "Gone" etc. alarms
Schedule
The schedule defines when the group will be considered "Active". Mails will only be sent to "Active" groups.
E-Mail Templates
The template defines how the Mail will be formatted. The Template can include "Tokens" that must be enclosed in "<%" and "%>" tags.

Sending Configuration
In order to send Mails, you first must configure the account from which the Mail will be sent. You can use any free user account of any Mail Provider as long as the following is supported:
- SMTP. Only SMTP is currently Supoorted. Pop3 is not yet supported
- UserName/Password Authentification. OAuth is not supported
The configuration for each Mail Provider can be obtained from the Mail Provider.

Debugging
Debugging allows you to Save all Mails to an specific directory. This allows you to inspect the Mails that would have been sent with an Text Editor.
Time Series
Overview
The VisXpert module "Measurements" contains the following four program parts:
- A posting module that can store metrics in files or databases.
- An editor for parameterizing the posting module.
- A display module for displaying both archived and current measurements.
- The editor associated with this module.
The booking module as well as the display can be used completely separately from each other, but of course also together.
Performance overview
General:
- It is possible to control the modules via a VisXpert variable.
- The processing of the measured values is channel-related, i.e. each channel is a VisXpert variable of type Boolean, Integer, or Floating Point.
Recording module:
- For each measurement system, there is exactly one posting module to which exactly one directory is assigned.
- Recording of any VisXpert variable, where all values can be captured, but, depending on the archive type, only a reduced set of values. The optimization is done via a later described algorithm and is easily parameterizable.
- There are three types of archives:
- Ringbuffer: A self-overwriting, persistent data store.
- Follow-up archive: An archive file can be completed and a new one can be started via time, file size or variable triggers.
- SQL Archive: The metrics are posted to a database table.
- The recording of values can be started and stopped at run time. In the same way, the parameterization of the recording can be changed at run time.
- A safety value is always co-written at a parameterizable distance.
Display module:
- You can insert any number of display modules per project, but they all use the same information base.
- The surface of the display is freely customizable. Charts can be arranged as desired, resized and deleted.
- The view of the chart can be changed largely freely. An extended dialogue is available for this purpose.
- There is an X axis and any number of Y axes whose display area can either be defined firmly or automatically scaled with the displayed values.
- Archive and current data are not separated: Data is loaded from the database if necessary.
- Adding and removing channels in a chart is possible at run time.
- A data export to Excel and CSV is possible.
- Charts can be printed.
Definition
The following terms are often used in the programs and also in this help:
- Channel: In the measurement capture, the channel is a construct that encapsulates a VisXpert variable and provides various recording and display settings. Such a channel is unique within a project. This has the following effects, for example: When parameterizing a series (see below) that has a channel as a data source, changes to that channel (e.g. recording active) to all series that have this channel as a data source.
- Series: This is the term for the visual representation of channels as a line in a chart.
- Chart: In this context, a chart is a screen area that is used to represent series.
- Panel or cutout: These rectangular faces are formed by dividing the surface in a horizontal and vertical direction. Charts can be placed on them. They can be resized with the mouse.
- Post: Used as a synonym for storing readings in a data store.
Measurement Logger
The expiration of the posting module itself can only be started and terminated. It inherits the information stored in the mrsConfig.xml file. This file is monitored and, if the change is detected, the new data is transferred to the process. The changes to the configuration file are made through the editor.
General information about the editor
In principle, the editor is structured from the following basic elements:
- Menu bar: Channels can be created, archived or the configuration saved via the menu bar.
- Tableiste: Here you can choose between channel and archive view.
- Item List: Displays all items in the active view.
- Property List: Displays all properties of one (or more) selected objects, sorted by category.
Channels

New channels can be added either from the Channel menu. or by right-clicking on an empty line in the item list. The following dialog appears for variable selection:
This dialog shows all signable variables, grouped by variable groups. By clicking on the + or - Symbol next to the respective group, all associated variables are displayed or Hidden. By setting the check mark next to the respective variables, it is possible to determine for which variables channels should be created. When you place the check mark next to a group, all related variables are selected. Any selection can be cancelled by resetting the respective check mark. By clicking on the OK button, a channel is created for each selected variable. Clicking Cancel will discard the selection and nothing else will happen.
The deletion of a channel takes place by selecting a variable in the item list and then by right-clicking on this variable or via the menu item Channel - Remove. By selecting additional channels with a Ctrl key held, it can also delete several channels at once.
To edit a channel, it must be clicked. All its properties and their current values will then appear in the property list. A selected channel has the following categories and properties:
- Recording
This category contains all the settings related to the recording.
- Sampling interval
In the synchronous scanning mode, the sampling interval determines at which intervals the variable value should be picked up and posted. In asynchronous scanning mode, it specifies the maximum time interval between two incoming values. If no new value occurs within this distance, the last posted value is posted again, with a renewed timestamp. So it's a kind of timeout. The input format is d.hh:mm:ss.f, which is days, hours, minutes, seconds, and fractions of a second (one to seven digits). Specifying days and fractions of a second is optional.
- Scanning mode
There are two sampling modes: Synchronous and Asynchronous. Default is Asynchronous. Synchronized, the current value is posted in the sampling interval. Asynchronous posting any change in value. However, if no value change occurs for the duration of a sampling interval, the last posted value is posted again with a new timestamp. The sampling interval must be selected to be greater than the refresh interval of the VisXpert variables. When you create a channel, the sampling interval is set to 110% of the refresh interval.
- Archive
Here you can select the archive to which the values are to be posted. With a newly created measurement system, there is only the default archive, which is a ring buffer (more on this later).
- Record
Indicates whether the channel should be recorded or not.
- GP Variable
Shows which VisXpert variable the channel contains. This value cannot be changed.
- Hysteresis
Indicates, if optimization is enabled, which tolerance should be applied during optimization. Depending on whether hysteresis mode is set to Absolute or Permille of Min/Max, this value is interpreted as an absolute value or per mille set. If Disabled is selected as Hysteresis Mode, the value is ignored.
- Hysteresis mode
There are three hysteresis modes: Disabled, Absolute, and Permille of Min/Max.
Disabled means that no tolerance is applied during optimization (this does not mean that no optimization can take place!). The measured value curve therefore still corresponds to the original after optimization. Absolutely means that a measured value is only optimized away if the y-coordinate of the resulting measurement curve at the point of the measured value to be optimized is limited to the amount specified in hysteresis from the original. In the case of min/max per mille, instead of the absolute amount, the permille rate of the difference of the lowest and highest reading is taken as a tolerance. Min/Max are recaptured each time recording starts. This approach is more flexible because there is no need to configure the absolute amount attached for each channel. That's why this is the default value.
- Optimize
Specifies whether to optimize the values to be posted to take up less disk space. The optimization is lossy and will be explained in more detail later. When optimization is disabled, the Hysteresis and Hysteresis Mode properties are meaningless and each value is posted. Optimization is currently only possible in combination with the SQL Archive.
- Preprocessing expression
Allows to manipulate incoming readings before posting. The incoming value is referenced as 'x'. The decimal separator is the period '.'. For example, to convert a reading in Kelvin to degrees Celsius, you can use the following expression: (x-32)*5/9
- Look
This category contains all the settings that affect the display.
- Unit
Indicates the unit of the channel. Used to label the Y axis.
- Maximum displayed value
Sets the upper bound of the y-axis to a fixed value. If no value is specified, the axis scales to the highest value to display.
- Minimum displayed value
Sets the lower limit of the y-axis to a fixed value. If no value is specified, the axis scales to the lowest value to display.
- Name
Determines the public name of the channel. This is then visible in the legend, among other things.
- Serial color
Determines the color of the series that represents the channel in the measured value display. If no value is specified, a random color is assigned to the show each time the display is started. To edit property values of multiple channels at once, additional channels can be selected with the Ctrl key held.
Archives
There are three types of archives: ring buffer, follow-up archive, and SQL archive.
The ring buffer records data within a single file until it reaches maximum size. At that time, the data is written back to the beginning of the file, overwriting the oldest data. The ring buffer is interesting if long-term archiving of the data is not required.
In the follow-up archive, however, data in a file is updated until a trigger initiates a split. At this point, the file will be renamed and a new one with the old name will open. Renaming inserts the start and end dates of the sub-archive before the file extension. The times are to be understood as UTC.
The SQL archive allows you to post the data to the database. It can be configured to periodically move old data from the database to an archive file.
New archives can be created either from the Archive menu. or by right-clicking on an empty row in the item list. The following dialogue appears for basic parameterization:
The name must be unique for each archive. The maximum size must be an integer and more than 3 megabytes. It can only be specified here and cannot be changed later. It is only important for the ring buffer.
A selected archive has the following properties:
- Description: Optional description for the archive.
- Maximum size: Displays the maximum size of the archive in bytes. It currently has meaning only for the ring buffer.
- Name: Determines the name of the archive.
- Path
Displays the archive URL. - Write interval: Specifies the interval at which the posted data should be written to disk. A smaller interval is safer in the event of a crash, but a larger one is more performant because the hard drive needs to be accessed less frequently. It should also be noted that if the interval is relatively high, the data accumulates in memory. Therefore, too high an interval is not recommended even from a performanc
e point of view. The input format is d.hh:mm:ss.f, which is days, hours, minutes, seconds, and fractions of a second (one to seven digits). Specifying days and fractions of a second is optional. - Storage Mode: Displays the type of archive.
Follow-up archives have the following additional properties:
- Size: Indicates the size from which the archive file should be completed. The specification is in bytes.
- Mode: Specifies which triggers to use. Size, variable and time or a combination of them are possible.
- Variable: Here you can select a Boolean VisXpert variable that, once set to true, triggers the trigger. It is then automatically set back to false.
- Time: Can be set to day, week or month. The trigger is triggered at 0:00, Monday 0:00, or the first of the month at 0:00. A change of day/week/month is also detected if the registration was not on at the time of the change.
SQL archives also have paging options that are used to limit the archive size by periodically offloading old values into a file that can be reimported if needed:
- Offloading ActiveActivated/disables the swap function.
- Interval Indicates at what interval to offsource.
The input format is d.hh:mm:ss.f, which is days, hours, minutes, seconds, and fractions of a second (one to seven digits). Specifying days and fractions of a second is optional. - Threshold Indicates the minimum amount of data to be considered when swapping. The
input format is d.hh:mm:ss.f, which is days, hours, minutes, seconds, and fractions of a second (one to seven digits). Specifying days and fractions of a second is optional. - Path: Allws you to set a path under which to place the paged data. Otherwise, the normal data directory is used. If the specified path is unreachable, paged data is also temporarily cached in the data directory.
In order to display outsourced data, the data to be imported must be selected under Archive --> Import outsourced data. The times displayed in the dialog are UTC. If the data is no longer needed, it can be deleted from the archive via archive --> Remove imported data again.
Optimized storage
Optimization is according to the following algorithm:
- Always book the first value.
- Wait for three values.
- Put a straight line through first and last point.
- From the penultimate to the second value, it is now checked whether a value differs from the straight line by more than the hysteresis on the y-axis.
- If so, the penultimate value must be posted, because that is always the value where all points are still within the tolerance. The penultimate point becomes a new first point and the last one becomes second. All other points can be forgotten. It will be at 2. Continue.
- However, if all points are within the tolerance of the line, simply wait for the next value and then at 3. Continue.
MeasurementView
Configuration of the measured value display
Designing the surface
The measured value display appears in the default setting with a blank home screen. Pressing the right mouse button, a pop-up menu appears, which provides the following functions:
- Add to chart
Creates a new chart and places it on the clicked panel.
- Sharing - Horizontal
Divides the clicked panel into two superimposed subpanels.
- Sharing - Vertical
Divides the clicked panel into two adjacent subpanels.
- Delete
Deletes the panel you clicked on.
Chart configuration
The chart menu can be accessed by double right-clicking on the chart itself or simply right-clicking in its toolbar. It offers the following options:
- Navigation
Shows or hides the navigation bar.
- Zoom
Shows or hides the zoom bar.
- Date/Time
Shows or hides the date/time bar.
- Time
Shows or hides the time bar.
- Settings
Shows or hides the Settings bar.
- Channel Selection...
Opens the channel selection.
- Settings...
Opens the settings dialog for the chart.
- Delete
Deletes the chart and releases the underlying panel.
The channel selection looks like this:
All archives in the module are displayed and - subordinately - the respective recorded channels are displayed. By setting check marks, it is possible to determine which channels should be displayed in the chart. If a channel has already been recorded in multiple archives, it is automatically selected in all archives. Via the Button Archive... additional, module-external archives can be added. About Adding... the MeasurementLogger editor can be started to add new channels.
The chart options offer the following settings:
- Title
Title for the chart. Displayed above the chart.
- Update
- Interval
Determines the interval at which the chart should be updated (i.e. redrawn). This is for better performance. The higher the value, the less frequently the chart is updated, the lower the CPU usage.
- Draw points immediately
Indicates whether to update each new point. If this setting is active, the refresh interval is ignored. If there are performance issues, this setting should be disabled.
- Legend
- Visible
Determines the visibility of the legend.
- Width
Defines the legend width in pixels. Depending on the length of the channel names, the value must be adjusted accordingly.
- Checkboxes
Determines the visibility of the checkboxes.
- Axis defaults
- Position
Determines whether axes are to the left or right of the chart.
- Grid
Specifies whether to draw horizontal lines from the y-axes in the chart.
Chart operation
In principle, you can move in the chart with the right mouse button pressed and zoom the chart by pressing the left mouse button. In addition, the following bars are available:
- Navigation
With jumping back and forward, you can 'scroll' through the chart. The factor can be specified by the DropDown arrow next to the buttons, where the factor '1' corresponds to a page. Forward and back rewind can be used to scroll through the chart. Scrolls as long as the button is pressed. Here, too, the scroll inge speed can be determined by means of a factor.
With pause or Playing can pause the scrolling of the chart with the current time or be restarted.
- Zoom
Zooming in enlarges the chart, zooms it out. The DropDown arrow can be used to determine whether the zoom should affect only the x-axis, only the y-axis, or both axes. Unzoom restores the original zoom.
- Date/Time

Here you can specify two dates and times between which data to display. The entry can be confirmed with Enter or by clicking on the check mark.
- Time
Here you can set which time range the chart should display. You can either select one of the predefined values in the DropDown list or enter your own value. The input format for a separate value is d.hh.mm.ss.f, which is days, hours, minutes, seconds, and fractions of a second (one to seven digits).
Commands
For the measurement display, a system group can be specified in the editor under . The configuration then automatically creates the string variables command, status and return.
Command strings can be sent to the measured value display via the command variable. The status variable provides information about the status of the currently processed command and enters the busy state during the execution of a command, while the state is otherwise on idle.
Regardless of the state, commands can be passed all the time because the incoming commands are buffered and processed sequentially. The simultaneous transfer of several commands in a string can be done separately by semicolon.
After the string is entered into the buffer, the measured value display resets the command string. Therefore, rewriting the command variable requires waiting until the command string is empty again.
The following commands are processed by the measured value display:
- Bringtofront
Brings the measurement visualization to the foreground.
- Minimize
Minimizes measurement visualization.
- Hide
Hides the measured value visualization.
- Show
Shows the measurement visualization (if the window is as an icon in the taskbar, it will be brought to normal size).
- Close
Stops the measurement visualization.
- StayonTop(Arg)
Sets or resets the attribute "In the foreground"
. Arg: true or false.
- SetAxis (Chart, Axis, LeftTime, RightTime)
Sets the display range of a chart for the selected axis. The parameters have the following meaning (case is not taken into account):
Chart: Name of the chart as it appears in the display.
Axis: Sets the axis to which the command refers (currently only bottom).
LeftTime (RightTime): Sets the left (right) limiting time range. The format corresponds to the VisXpert timestamp ('HH:mm:ss, dd.MM.yyy').
- LoadProject (FileName)
Loads a saved project. In the currently set project directory, it is displayed after a file with the specified name (e.g. chart01.xml) and loaded it, if present and valid.
- Online (ChartName, Status)
Turns automatic scrolling for a chart of the project on or off (status true or false). This covers the first chart whose name matches ChartName. (Case is not considered).
- Print (ChartName)
Prints the specified chart to the default printer.
- PrintDlg (ChartName)
Opens the TeeChart print dialog for the specified chart.
- Export (ChartName, File Name)
Exports the specified chart to the specified file, where the file extension determines the file format. The following are possible: .jpg, .xls, .txt, .csv
- ExportDlg (ChartName)
Opens the TeeChart export dialog for the specified chart.
Print report
Overview
The Print Report module can be used to create report forms and print them out in the process. In addition to general design elements (texts, bitmaps, etc.) and VisXpert variables, these forms can also contain values from database tables and scre
enshots. The Report Designer creates the report forms. In addition to general reports, the report designer
also processes the reporting system reports that are used for printing in the reporting system display. The forms are printed using the report flow. There, the printout or print preview can be started directly.
Another option is to remotely control the expression via a number of command variables, such as from the visualization. This allows the printout to be started via a button click in the visualization or also timed via scripts. In this case, the report module remains in the background.
Editing Report Forms
Editing report forms
The following description shows the general way to edit forms with the designer. The second section describes the available components (design elements and components for accessing data, etc.).
Working with the editor
Each report form has a canvas that represents the page content and, by default, shows a grid with a millimeter unit. Components are arranged on this canvas. Two types of components are distinguished. These are visible components and thus, in a sense, the design elements that appear later in the expression. In addition, there are invisible components that appear as an icon in the designer, but are hidden in the expression. This type of component contains a certain function content, which works in the background and, for example, process and make available data from tables or the reporting system. Certain visible components are then used to represent this processed information.
Each component has a number of properties that determine the behavior and appearance of components. These properties are displayed and edited in the Object Inspector. The Object Inspector is a separate tool window that appears automatically when a new report is created. Via the menu item "View| Object Inspector" can be displayed and hidden from the Object Inspector. The different components have different properties, so they are described separately in the second part of this chapter. The properties of the currently selected component always appear in the Object Inspector. Simply click on the respective component. You can select multiple components by clicking them sequentially while holding down the SHIFT key. Another option is to select all components within an area by pressing the CTRL key and dragging an area within the desktop with the mouse. If multiple components are selected, the Object Inspector displays only common properties of the selected components. Changes to one of these properties are reflected in all selected components.
Some properties offer a property editor as an input help of the value. In these cases, a button appears in the object inspector in the input field for the value of the selected line. Click this button to open the property editor.
Some components have a large number of properties, so multiple properties are grouped under a common property. These properties are indicated by a plus sign on the left edge. When you click this character, the subproperties appear.
A special property is the name of a component. Each component has this property and marks it within a form. Therefore, within a form, the name must be unique for each component. For example, the name is used to make the reference between components for special properties. The name is automatically assigned by the designer, but can be changed to a speaking label in the Object Inspector. To select a component by name, you can also use the list in the Object Inspector.
All available components can be found in the component palette in the toolbar. The component palette is divided into several categories (data access, report). To insert a component into the canvas, click it in the palette, and then click where the component is inserted in the canvas. For visible components, you can also hold down the mouse button and set the size of the component as you insert it by dragging the area you want. To cancel the insertion mode, click the icon with the mouse pointer in the palette.
The position of a component can be changed by clicking it and moving it to the desired position while holding down the mouse button. After you select a component, it is represented by boundary markers that indicate the size of the component. Dragging these boundary marks changes the size of the component. Another way to change the size and position of components is to use the Top and Left properties for the top and left coordinates, as well as Height and Width for width and height. If you change the position of a component with the mouse, the component aligns with a grid that it can use in the Options| Settings" on the Editor page with the grid size X and Y settings. Alignment to the grid can also be switched off at this point.
The Alignment palette can be used to arrange components to each other (e.g. left sides, top edges, etc.). To turn the alignment palette on and off, use the View| menu item Alignment palette".
To copy, paste, or delete components, use the functions from the Edit menu. You can also undo or undo the last actions there. You can also copy components between multiple forms.
Some components serve as containers for other components. An example of this is the individual tapes of a report (areas in the report document) on which, for example, text elements are arranged. When components are placed in containers, their position refers to the upper-left corner of the container. If the position of the container is changed, the child components are moved with . Similarly, when you copy a container, the child components are copied. The same applies to deleting containers. When inserting components into containers, be aware that before inserting the container into which a component is inserted, it is important to note that it is selected.
Creation of report documents
Creation of report documents
In the following, the structure of report documents is described in principle. You will also get to know the common properties of the components. Many properties can be left in their default setting for the default functionality and are not described at this point. A reference of all properties follows in the next chapter.Canvas
The canvas (background of the report form) represents the printable area of the printout. It is treated like a component so that its properties are visible in the Object Inspector and can be edited there. The canvas has the component name Report. The background shows a grid by default in the millimeter unit of measure. Other units of measure can be set with the Units property.
The page layout is pre-set by default and can be customized using the Page property. This property has the following subproperties:
Property
Description
TopMargin, BottomMargin, LeftMargin, RightMargin
Width of the margins (non-printable area)
Papersize
Paper. Default is A4.
Length, Width
Paper size (length and width). These properties are usually set automatically due to the choice of the PaperSize property and cannot be changed. For special formats, however, PaperSize can be set to the value Custom. The page size can then be set as desired.
Orientation
Page orientation: poPortrait for portrait, poLandscape for wide format.
Ruler
Shows and outes the units of measurement and the grid as the page background (the grid does not appear in the printout!).
Columns, ColumnSpace
Divides the page into columns. Columns sets the number of columns, ColumnSpace sets the width.
For printing database tables, the DataSet property is used to specify the data source that is used to connect the printed amount of data (table).
Ribbons (sections)
Basically, graphic elements appear in the printout only when they are arranged on tapes. These bands are to be understood as sections in the expression and are inserted directly on the canvas (report). The type of tape determines where it appears in the expression, whether it is used as a title bar, footer, data row, or table heading. If you use the default report for the output of database tables, a default arrangement of tapes is already suggested, where a document title appears on the first page and a footer appears on each page. The table has a table heading. In this case, you can limit yourself to adjusting the appearance of the tapes.
The following properties define the appearance of a band:
Property
Description
Size, Height
Size, with its two subproperties, Height and Width, specifies the format of the tape in the selected unit of measure, whereby the width cannot be changed so that the band always has the full page or width. column width. Size.Height can be used to adjust the height of the tape. The Height property specifies the height in pixels.
Color
Background color of the tape. Note that the background is obscured by graphic elements. In order to allow the background to shine through for font elements, the Transparent property of these components must be set.
The following properties control where the tape appears in the expression:
Property
Description
ForceNewPage
Set if you want the section to always start on a new page.
ForceNewColumn
Set when you want the section to always start in a new column.
LinkBand
Binds the tape to another band so that they are not separated by a page break, so that they always appear on a page.
Enabled
The property determines whether the tape should appear in the expression.
Inserting new tapes as for all other components by selecting the QRBand component from the component library and inserting it into the form. The BandType property determines the function or position of the band:
Value
Description
rbTitle
Prints on the first page after the header.
rbPageHeader
Appears at the beginning of each page.
rbPageFooter
Appears at the end of each page.
rbColumnHeader
Appears as the column heading of each column or column. Page.
rbDetail
Printed for each record. The amount of data is set with the DataSet property of the report.
rbSummary
Displayed as a total row at the end of a table representation (after all detail sections).
rbGroupHeader
Header for QRGroup components.
rbGroupFooter
Footer for QRGroup components.
RbSubDetail, rbOverlay, rbChild
These values are reserved and should not be used.
Graphics
Components are available to create frames, insert images, and even fixed text to design the print layout. Components exist to represent the actual data, such as VisXpert values or values from a database table. For the graphic elements to appear in the printout, they must be placed on a band.
All graphic elements have the Top and Left properties for the position, and Height and Width for width. This corresponds to the Size property, which sets position and size in the selected unit of measure. All graphic elements can be surrounded by a border determined by the Frame property and by specifying the line style, thickness, and color. This is determined whether the border appears on the left (DrawLeft), right (DrawRight), top (DrawTop) or bottom (DrawBottom). Just like the tapes, Enabled determines whether the element is generally hidden in the expression.
Static Elements
Static text can be inserted using the QRLabel component. The Caption property determines the label of the text. The following properties determined the appearance of the text:
Property
Description
Color
Color
Transparent
When the property is set, the text appears transparent, so that the background is not completely obscured.
The positioning of text elements can be done automatically by aligning the element relative to the section on which it resides. Alignment determines the orientation of the text within the field (taLeftJustify: left, taRightJustify: right, taCenter: center). If the AlignToBand property is also set, this is relative to the section. To automatically adjust the width of the text box to the content, set the AutoSize property. AutoStretch performs the same function for text height.
The QRRichText component is suitable for displaying multicellular text. The text is specified here for the Lines property.
Geometric figures can be represented with the QRShape component. Shape determines the type of shape, Brush the fill color and the fill pattern, and Pen determines the type and color of the border.
Static bitmaps are integrated using the QRImage component. The Picture property loads the bitmap file. When the AutoSize property is set, the component size automatically adjusts to the size of the bitmap. On the other hand, if the Stretch property is set, the bitmap is stretched to fit the specified component size. This does not maintain the original aspect ratio.
With the component QRReloadImage, images can be automatically reloaded before printing. To do this, the image is not stored firmly in the document, but only the file name (FileName property) of the bitmap. This allows screenshots to be built into report forms by saving the current screen content as a bitmap file in the flow, and then loading and printing the form. The screen content is saved using the capture functions, which are described later in the chapter "Remote control from other modules".
Certain system data can be represented with the component QRSysData, wherethe properties for the display correspond exactly to those of the component QRText. The contents of the text box are determined by the Data property:
Value
Description.
qrsDate
Shows the current date.
qrsTime
Shows the current time.
qrsDateTime
Shows date and time.
qrsDetailCount
Total number of detail sections.
qrsDetailNo
Current position in the data set.
qrsPageNumber
Number.
qrsReportTitle
Title of the report (specified by the ReportProperty property).
Printing GrapPic Values
The QRGpValue component requests the current value of the specified VisXpert variable before the expression and represents the value, where the display and orientation of the value exactly corresponds to the settings of the QRText component. In the Report Designer, the variable name is represented as the label of the field. This also applies to the print preview and printout. The values are requested only when the report flow module is printed.
Printing database contents (values from tables)
This section describes how to print table contents, first introducing the components that display each data field. This is followed by a look at the components that can be used to open database tables.
It is possible to display all table fields whose contents can be represented in text form. Use the QRDBText component for normal text boxes and QRDBRichText for multiline text. The properties for the appearance and orientation of the text also correspond to those already described for static text elements.
Both components have the DataSet property, which sets the data source (table), and DataField for the field name.
Access to databases
Using the Standard document type
The easiest way to create a report for a database table is to use a standard report when you create the report document. This report includes a table component for table access. It is therefore s
ufficient to specify the table to be opened for the table component and to display the fields in the header and detail bands accord
ingly (three fields are already present as examples).
To open a Paradox or Dbase table, do the following:
- Select the table component in the designer.
- In the Object Inspector for the DatabaseName property, specify the file path where the table is located.
- For the TableName property, specify the table to print (if the path is specified correctly, this field will give you a list of all the tables that are in that directory).
- In the header and detail tape, adjust the fields you want to print. In the detail volume, the DataField property must be customized for each text box. Again, if the table is correctly specified, a list of available table fields is offered for selection.
Enhanced data access capabilities
For easy access to Paradox or Dbase tables, the functionality of the table component is perfectly sufficient.To access tables in a SQL database (Microsoft SQL, Oracle, etc.), there are other powerful access components that provide a set of data similar to the Table component. On the one hand, this is the Query co
mponent to read data with a SQL statement from a database. There is the StoredProc component, which can be used to call a stored procedure that returns a set of data as a result. In both cases, data access is two-tier.
The common way is to create general access to the database with the Database component.
The next step is not to set a directory specification for the Table, Query, or StoredProc
component for the DatabaseName property, but to connect to the database component.
To create the data connection, do the following:
- Insert a database component into the form.
- Select the database type with the DriverName property.
- Right-click the local menu of the Database component and select the Load Standard Parameters menu item.
- Open the property editor to the Params property.
- The parameters differ from database to database (usually the servername = database server's computer name, the databasename = name of the database being accessed, UserName = username).
- For the DatabaseName property, specify a database label that will be used as a database alias within the print report.
- Reset the LoginPrompt property to avoid displaying a login dialog before printing.
- Test the connection by setting the Connected property.
The internal database alias identifies the database within the print report. Therefore, specify this alias for the access components for the DatabaseName (the alias is offered for selection in the list in the Object Inspector).
In the case of table components, use the table name as usual. For query components, a corresponding SQL string must be formulated before opening the SQL property. When accessed through stored procedures, the StoredProcName property must be named for the procedure. Finally, the display of the fields corresponds exactly to the procedure, as already described for standard reports.
Print report expiration
Printing and print preview
In the process of the report module, the defined report forms can be printed out or previewed. These functions can be found in the file menu. The selected printer is noted in the project settings.Remote control from other modules
For the report module, a system group can be specified in the configuration, which contains the string variables command, status and return. To create this variable group, it is best to do the following:
- Create a new auxiliary variable group in the Memory module without any entries and exit the variable configuration.
- Enter the name of the system group (name of the newly created auxiliary variable group) in the configuration of the
report module. - The system group is then automatically extended by the string variables command, status and return.
Command strings can be sent to the module using the command variable. The status variable provides information about the status of the currently processed command and enters the busy state during the execution of a command, while the state is otherwise on idle.
Regardless of the state, commands can be passed all the time because the incoming commands are buffered and processed sequentially. The simultaneous transfer of several commands in a string can be done separately by semicolon.
After the string is entered into the buffer, the reporting system resets the command string. Therefore, rewriting the command variable requires waiting until the command string is empty again.
The following commands are processed by the report module:
- BringToFront - Brings the display window to the foreground.
- Hide - Makes the display window invisible.
- Minimize - Minimizes the display window.
- Show - Shows the display window (if the window is as an icon in the taskbar, it will be brought to normal size).
- Close - Exits the module.
- Print - Prints the specified report on the printer. E.g.: Print(Report1)
- Preview - Previews the specified report. E.g.: Preview(Report1)
- CaptureScreen - Saves the current screen content to the specified file. The file is specified witho
ut a path. The file is stored in the <projekt>directory user_datbitmap.e.: Cap
tureScreen(Image1)</projekt> - CaptureWindow - Saves the currently active window to the specified file.
- CaptureMdiWindow - Saves the currently active Mdi window to the specified file
(e.g. display window in the measurement value recording).
Examples for passing commands from the visualization can be found in the VisXpert sample project for the report module (BSP_RPT).
Preparing report forms
Working with report files
As soon as the module Print Report is integrated into the project in the communication module, the configuration can be started via the corresponding entry. The designer and a window listing the report documents that are already available are displayed. After the first start, you will only find the reporting system reports (current, archive and protocol) of all the reporting system display modules available in the project. You open a report from the list of report documents by double-clicking the respective entry.
With "File| New" create a new report. Either select a document type to create a blank report document, or open a prepared form from the templates. You can add any report yourself to the templates. Another option is to use "File| Open" to use any report form as a template and include it in the project.
There are currently three types of documents:
- Standard re
portThis document type allows you to quickly create a report to print a database table. The report consists of a title, the actual table with table header and a footer. - Reporting a
rchiveIn addition to the standard report for the reporting archive, which is already available in the reporting system, to create additional reporting system reports, use this document type, which allows very easy access to the message archive. - Blank docum
entThis document type is typically used for reports that display VisXpert values or screenshots.
" with "File| Save As" you place the document in the project under a new name. In addition to the document
name, a short description text is stored for each document to describe the contents of the form.
This text appears in the flow in the list of available report forms.With "File| closes the current document. File| Delete" removes the document from the project.
For the test, the document can be printed or displayed as a print preview using the appropriate menu items. VisXpert values are not requested, but are displayed and printed with your name.
System group
In the system group are the variables that are used to control the flow part of the report module remotely. The system group can be selected from the existing groups as desired. The editor enters the required variables independently into this group. Select the system group in the Options dialog ("Options| Settings") on the Expiration page.Caution: It is important to make sure that multiple modules do not use the same system group.
Modules

It allows you to add an big variety of “Modules” to an application, where each Module provides certain functionality to your applications. There are modules for communication with different data-sources, report generation, Trend acquisition and Alarm management.
It also provides an very powerful Software Development Kit (SDK), that allows you to develop you own custom modules and leverage The full potential of your automation system
Events
The all new Event module allows the definition of Events and their corresponding actions that should be executed when the VisXpert project is executed. VisXpert includes an variety of Events such as
- Specific Application Launches
- System Time Changed
- VisXpert Variable Changed
- An File Changed
- An Application Terminated
- An Calendar Event elapsed
- An Interval Timer elapsed
These Events can then be connected to Actions, that the system should execute. Actions include things like
- Set VisXpert Variables
- Log events
- Log user off
- Start Application
This allows the definition of complex behavior that can be customized to your need. Behaviors such as the following are possible:
- When an specified File changes, update the corresponding VisXpert variables and update the Corresponding Tags in the PLC.
- When an Specific application is launched, set an VisXpert Variable in the PLC to indicate that data is being edited
- Log an event whenever an file in an specific directory is changed.

Event Triggers
The Events module provides an list of various events that can trigger configured actions. When an Event is fired, it will invoke all of its configured actions.
Time and Calendar Events
TimeIntervalEvent
This interval will be triggered periodically after an set time interval.
- Interval: allows you to define the Time period after which the event will be triggered. After the event was triggerd, the period starts again
- ExecuteImmediatly: Allows you to execute the event once when the event is first started, and after that when the Interval is triggered
CalendarEvent
This event will trigger certain calendar events, such as Daily, ever Monday, every first of the month etc.
- RepeatMod: Defines if the event repeats every day, week or Month.}
- Daily: The event will repeat according to "DayOfMonth"
- Weekly: The event will repeat according to "WeekDays"
- Monthly: The event will repeat every month on the first day of the month.
- DayOfMonth: Sets the days of the calendar on which the event will trigger. This is only valid for RepeatMode = Daily
- WeekDays: Sets the days of the Week on which the event will trigger. This is only valid for RepeatMode = Weekly
- TimeOfDay: Defines the time of day when the event will trigger. Applies to all RepeatModes
Variable Events
VariableChangedEvent
This event will trigger, everytime an configured variable changes its value.
- VariableName: The Variable whos value change will trigger the event, if it maches the "CompareMode"
- CompareMode: Defines on which value the event will trigger
- None: The event will trigger on every value change
- <, >, <=, >=, =: The Variable value will be compared against the given "CompareValue" and will trigger if it matches
- CompareValue: If "CompareMode" is set to any value other than "None", this is the value that the variable will be compared against, according to "CompareMode"
ScriptEvent
This event is similar to VariableChangedEvent, but it allows you to use up to 4 different variables and compare them against each other as you see fit. The event then fires, if the "Expression" returns true
- VariableName1: The Variable whos value change will trigger the event evaluation of the expression
- VariableName2: The Variable whos value change will trigger the event evaluation of the expression
- VariableName3: The Variable whos value change will trigger the event evaluation of the expression
- VariableName4: The Variable whos value change will trigger the event evaluation of the expression
- Expression: This expression allows you to use Mathematical expression such as "+,-,*,/" and comparisions such as "<, >, =" to evaluate the "VariablesValues" in the Expression. You can for example write: "<%EventVarValue1%> = <%EventVarValue2%>" to compare two variables against each other.
- EvaluateAfterStartup: Allows you to evaluate the expression once when the event is first started, and after that every time any of the Variables have changed.
System Events
UserChangedEvent
Triggers every time an user has changed in the VisXpert system. This also applies if the current user gets "logged out" since the user changes to user "Nobody".
MachineInactivityEvent
Triggers if the system detects that no user inputs from any Mouse or Keyboard have been received.
- InactivityTime: the Tieme that no user input has been received before the evnet triggers
OperatingSystemEvent
Triggers if certain operating system events have happened.
- OSEvent: Defines the event that will trigger this event
- PowerModeChange: The PC has gone to Sleep, wakes up or similar
- SessionSwitch: the user is changeing the Windows user
- DisplaySettingsChagned: The Screen Resolution has chagned, an new monitor has been conected, etc.
- TimeChanged: The Windows time settings has changed, either by the user or by NTP. WARNING! this will also trigger if the time was changed by NTP Time synchronization.
- SessionEnded: the user is either logging out, or shutting down windows.
ProcessEvents
ProcessStartedEvent
Triggers if an Process of the given name has been started
- ProcessName: the Name of the processs the event should listen for
ProcessTerminatedEvent
Triggers if an Process of the given name has been terminated
- ProcessName: the Name of the processs the event should listen for
ModuleEvents
StartupEvent
Triggers as soon as the Events module has been started up
ShutdownEvent
Triggers as soon as the Events module has been shut down
Data Changed Events
FileSystemChangedEvent
Triggers when an file has been created, changed or been deleted in an specific directory. The event is
- Path: The Directory in which the event should listen. The event is only listening in the specified path, not in its subdirectories.
- Filter: The file filter to trigger this event. You can use wild card characters such as "*.txt" or "*.*" to listen for all text files or all files in general
- Delay: Allows you to delay the event after the file has changed, been created etc.
- FireOnChanged: The event will fire if an file that matches the filter in the given Path has changed
- FireOnCreated: The event will fire if an file that matches the filter in the given Path has been created
- FireOnDeleted: The event will fire if an file that matches the filter in the given Path has been deleted
- FireOnRenamed: The event will fire if an file that matches the filter in the given Path has been renamed
DatabaseChangedEvent
Triggers when any value in an database has been changed. The algorithm uses an tracking table where it stores some data to determine if an database has changed. It does not distinguish what data has changed, just that some data has changed.
- SQLConnectionString: the connection string to the database that should be monitored. The "InitialCatalog" property must hold the name of the database to watch.
- CheckIntervall: the intervall in which the database will be "polled" for changed. This also means, that this event can only be triggered at most after the Check intervall
- Delay: Allows you to delay the event after the database has changed, been created etc.
Event Actions
The events Module allows you to configure various Actions that will be executed when an event fires.
System Actions
LogOutAction
Logs out the current user form VisXpert
LaunchProgramAction
Starts an application with an given command line and command line arguments. The Arguments and Command line may contain "Token Placeholders".
- CommandLine: The command line to execute. Usually this points the the "exe-File" that will be executed, but may also points to files such as "xlsx" files if "ShellExecute = True". The command line may also contain Tokens such as "<%ProjectDir%>".
- Arguments: The arguments that will be passed to the application defined in "CommandLine"
- ShellExecute: The application or file defined in "CommandLine" will be executed as if "double-clicked" from the windows explorer. This is useful if "CommandLine" points for example to pdf files or similar. If so, the associated application registered for the file extension is invoked and the file is opened.
- WaitForExit: Before invoking the next Action, the current action waits until the application has been terminated. DO NOT USE with GUI Applications
LogAction
Writes an log event into an log file. The log file will be written as an Text based log file.
- FileName: The file name of the Log file where all Entries will be written to.
- LogEntry: The text that will be written into the log file. May contain "Tokens" to reference one of the "VariableNames" and also the current Time
- VariableName1: One of the Variable Values that may be referenced in the "LogEntry"
- VariableName2: One of the Variable Values that may be referenced in the "LogEntry"
- VariableName3: One of the Variable Values that may be referenced in the "LogEntry"
- VariableName4: One of the Variable Values that may be referenced in the "LogEntry"
Export data Actions
ExportExcelAction
Takes an Excel file, opens it, waits until all data references have been refreshed, and then saves an "Value Only" version of the file to the "DestinationFileName". The resulting file will not have Value references in it, so it saves as an data file.
This Action is intended to be used together with the VisXpert DDE Server. This server allows Excel to reference Variable Values in its cells. This action then opens the file, updates all references, and then saves the values only, without the references.
This allows you to create templates with variable references via DDE Server and then export them when needed as "Value Only", to represent the variables values references in the file as ta certain point in Time.
- SourceFileName: The source Excel Template file that contains the DDE Server references. The File name may contain Token identifiers such as "<%ProjectDir%>".
- DestinationFileName: the resulting file name to export to. May contains Token identifiers such as "<%Date%>", or "<%ProjectDir%>".
- WaitTime: When the SourceFile is opened, the system waits for this ammount before saving the file to destination. The Action always waits until all DDE references have been resolved, and this WaitTime is only an Additional time to wait.
ExportTrendAction
Allows you to export Trend data. The data exporter will always from the current time up to "TimeToExport" back from the current time.
- DestinationFileName: the resulting file name to export to. May contains Token identifiers such as "<%Date%>", or "<%ProjectDir%>".
- ExportFormat: The export format to be used.
- MdsConfigFileName: This is an "Trend View Configuration" that defines which variables are contained in an TrendView. This files are usually stored in the Project in the "MeasurementView" directory.
- TimeToExport: defines the time to export data starting from the current time
ExportAlarmAction
Allows you to export Alarm data. The data exporter will always from the current time up to "TimeToExport" back from the current time.
- DestinationFileName: the resulting file name to export to. May contains Token identifiers such as "<%Date%>", or "<%ProjectDir%>".
- ExportFormat: The export format to be used.
- TimeToExport: defines the time to export data starting from the current time
Variable Actions
SetValueAction
Sets the value of an variable to an given fixed value.
- VariableName: The name of the Variable whos value will be set
- ValueToSet: The value to set to the Variable defined in "VariableName"
MoveValueAction
Sets the value of an variable to the value of another variable
- VariableNameDestination: The name of the Variable whos value will be set
- VariableNameSource: The name of the Variable whos value will be read and set to the variable defined in "VariableNameDestination"
SetValueScriptAction
Sets the value of an Variable to the value defined by an Expression. An expression can use up to four other variables in its calculation.
- DestinationVariableName: The name of the Variable whos value will be set
- Expression: This expression allows you to use Mathematical expression such as "+,-,*,/" and comparisions such as "<, >, =" to evaluate the "VariablesValues" in the Expression. You can for example write: "<%Value1%> = <%Value2%>" to compare two variables against each other.
- VariableName1: The Variable whos value change will trigger the event evaluation of the expression
- VariableName2: The Variable whos value change will trigger the event evaluation of the expression
- VariableName3: The Variable whos value change will trigger the event evaluation of the expression
- VariableName4: The Variable whos value change will trigger the event evaluation of the expression
Supports the <%Value1%>, <%Value2%>, <%Value3%> and <%Value4%> tokens to reference the VariableNames1, 2, 3 and 4
Script Tokens
Many Properties of Events, and especially Actions, can contain "Script Tokens" in their Filenames, Arguments, and also "Expression" Properties. These Script Tokens allows you to create dynamic filenames, reference the project directory and current time, among other things.
All Script tokens are being replaced during runtime by their respective current values at the time of the event or action being fired.
The available Script Tokens, depend on the specific event/Action, but all have a basic set of Script tokens, that are always available.
All script tokens are always enclosed by "<%" and "%>" tags.
- <% Time %>: The current time formatted as "hh:mm:ss"
- <% Date%>: The current date formatted according to the current UI Culture
- <% Day%>: The current Day of Month
- <% Month%>: the current Month as integer, not the name of the month
- <% Year%>: the Current year as an four digit number
- <% Hour%>: the current Hour of the day
- <% Minute%>: the current Minuteof the day
- <% Second%>: the current Second of the day
- <% Millisecond%>: the current Millisecond of the day
- <% ProjectDir%>: The current directory of the currently active project. This is the base directory where the "GpMainPj.XML" file is locaded.
- <% BinDir%>: the directory of the VisXpert binary executable path of the current Installation
- <% EventName%>: The Name of the event that is currently executing. This is also available for actions, where this is the Name of the triggering Event.
- <% CallCount%>: Returns an running number of how often the Action has been executed since the Module has been started.
Expressions
Some Events and Actions allow you to define Expressions to implement complex calculations or comparisons between values. These Expressions are basically mathematical expressions that can contain any number of arithmetic operations and also comparisons. If comparisons are used, the resulting value is usually an Boolean value.
Arithmetic expressions follow the standard mathematical operation priority, such as Multiplications before additions, etc.
Parentheses can be placed at any point and will be respected by the expression as by mathematical rules.
There are also an number of Functions that can be called in the form of "FuncitonName(parameters)", that can implement more complex functionality, not provided by basic arithmetic, such as "Pow(base, exponent).
Arithmetic Expressions
Basic arithmetical expressions include: +, -, *, /
Basic comparisons include: <, >, =, >=, <=, <>
Examples
Calculate Farenheit: Celsius * 1.8 + 32
Power of two: Pow(2, 10)
MultiMon
Multimon is a module that makes application deployment to multiple monitors easier and more efficient.
It starts together with all other VisXpert Runtime modules and waits for the HMIs configured for each monitor to start. When it detects that one of its HMIs is starting up, it automatically positions the HMI precisely on the corresponding monitor.
Optionally, the application also synchronizes the two HMI projects, so you can only change one and the other is automatically synchronized.
You can also drive the appropriate HMI startup depending on the current count of the monitor. This is useful for using the same project on both single monitor and multi-monitor systems. In that case, multiMon will check how many monitors are connected and then start the correct HMI systems.
Multimon OS Adjustments
Hardware Requirements
To enable a PC station to support multiple monitors, a multi-monitor capable graphics card is required. It does not matter which manufacturer is used as graphics card. Generally speaking, all graphics cards with more than one monitor output are capable of driving multiple monitors.
It is always recommended to use the most recent version of the graphics driver available for the graphics card to be used.
Extended Desktop in the Operating System
Generally, the "Extend desktop" to second monitor feature should be selected in the operating system's graphical settings dialog. The name of this setting and where to set may vary depending on the PC-Station operating system used.

Basically this option extends the main screen monitor by adding the second monitor to the right side of the screen and thus basically doubling the horizontal screen resolution. This forms a virtual screen with the same height but the width of both monitors together. In the example below, the second monitor starts at position: 1920, 0
Adjustments to the Operating System

Once the second monitor is connected, one has to right click on the desktop background, to open the desktop options and select “Display resolution”.

In the following dial record, you need to select “Extend desktop on second screen”
MultiMon Adjustments to the Project
Add to Project
Adding and activating the MultiMon module is done in the same way as adding any other VisXpert module. You must open the appropriate Project and have administrator privileges on the Project to add a new module.

Right click on Settings and add the “MultiMon” tool found under “New Module”->”Tools”. After adding it to the project, the module can be found in the Settings section. It is also automatically added to the "Runtime Modules" as well.

To enable a second Visu Runtime, a new "Visualisierung" module must be added to the configuration. After adding it to the configuration, one must rename it appropriately, such as "HMI2" or similar. After that, the "MultiMon" module can be configured
Settings

Opening the configuration by double-clicking on the MultiMon module icon below the configuration tree opens the configuration dialog. Allows selection of the Module to be started on each monitor. Here you must select the appropriate HMI for each monitor.
In addition, it allows you to activate the “Synchronization” configuration between the two HMI modules. This is useful when both monitors need to run the same HMI configuration. Before starting, the module synchronizes the two selected HMI configurations and then releases them for start.

It is also recommended to activate the option “Handle HMI startup”. In that case, the Multi mon will check how many monitors are actually connected, and then start only HMI 1 or both, depending on the actual monitor count. This allows the same project to be used for single and multi-monitor stations, without adjustments.
Note that if you use the “Handle HMI startup” option (recommended), then you MUST disable autostart of both HMIs during station startup, as they will be started by the Multi mon module. To do this, right click on both HMI 1 modules and uncheck the start ticket for both.

For the synchronization process to work correctly, the MultiMon module must be started before both HMI modules are started. Otherwise, the HMI starts, before the VisXperts can be synchronized and the HMI will continue to show the previous configuration until it is restarted again.
Zp Configuration
Creating the modules in the communication module
The scheduler consists of several modules that share a common database. Therefore, in the communication module, there is a scheduler node at the lowest level in the configuration hierarchy, which has the base configuration of the scheduler stored. This node contains the associated modules (processing and calendar).
The MessageControl module is created automatically when a reporting system is created. The remaining modules are added as needed:
The following example shows a typical configuration:

The basic configuration parameterization editor starts from the shared scheduler node. The settings are divided into three categories basic configuration, timelines and calendar (switching via the View menu or the corresponding buttons in the toolbar).
After creating a new project database, a production section with some timelines and calendar entries already exists as an example. These entries can be deleted or customized as desired.
Basic configuration
Holidays
Public holidays are stored in the Fixed Holidays tables (date entry without year) and Variable Holidays are stored and marked in the calendar.
Types of shifts and breaks
The types entered here are available for selection when defining layers and breaks in order to mark them accordingly. The distinction by type is used, for example, in switching commands, in order to set a value only for certain pauses (e.g. Variable "Maintenance active" = 1 only for maintenance breaks).
Production stages
If different working hours apply in different areas, it is possible to define several production stages. Each production stage has its own time models – the same time section has its own calendar.
- ID: any unique numeric identifier
- Symbolism: unique symbolic designation
- Name: Name of the production section
- Description: Description of the production section
Working time model
Working hours
A shift model describes a complete daily routine and is assigned later in the calendar.
Shift models:
- ID: unique numeric identifier (is automatically assigned continuously)
- Name: Name of the shift model
- Description: Description of the shift model
Any number of shifts can take place in one day, with the last shift of a day being allowed to extend to the following day (e.g. night shift from 22:00 to 06:00 of the following day).
Shift times:
- ID: unique numeric identifier (is automatically assigned continuously)
- Type: Reference to a layer type (as defined above)
- Name: Shift name
- Start: Time at which the shift begins – must not overlap with previous layers, so must not be smaller than the previous layer end. (The start of a shift must always start on the day of production, i.e. the last shift of a production day cannot start after midnight)
- End: Time at which the shift ends (the end of the shift may also be after midnight, i.e., the last shift in the day cannot end until the following day)
A layer can contain any number of pauses, whereby a pause must always be completely within the layer.
Breaks:
- ID: unique numeric identifier (is automatically assigned continuously)
- Type: Reference to a pause type (as defined above)
- Name: Pause name
- Start: Time at which the break begins - must not be before shift start
- End: Time at which the break ends - must not lie after shift end
Depending on the planned working hours, variables can be set to a specific value. For this purpose, switching commands are defined. Execution is always relative to a specific event:
- ID: unique numeric identifier (is automatically assigned continuously)
- Name: Name of the switching command (any identification)
- Event: Event to which the switching command refers, e.g. always execute the switching comm
and at the beginning of the shift - Offset (min): Time offset relative to the event (positive offset: switching command is executed del
ayed after the event / negative offset: Switching command is executed before the event - e.g. 10 minutes
before production starts to turn on compressed air) - Variable: VisXpert variable to change value
- Value: Value on which the variable is set. In addition to fixed values, placeholders can also be
used to enter the current shift name in the variable, for example. - Shift type: Specified if the switching command is to be executed only for certain shift types
(otherwise leave blank) - only relevant, for shift- or pause-related events - Pause type: Specified if the switching command is to be executed only for certain pause types (
otherwise leave blank) - only relevant, for pause-related events - Order: If multiple switching commands are executed at the same time,
an order can be set, otherwise the order is random
Events:
- Shift/pause start, -end: Dispatched when a shift/pause starts or ends in the selected
production area. - Start of production: Triggered when a shift begins after a production-free time.
- End of production: Dispatched to shift end, unless another shift begins afterwards.
- Start of the day: Triggered daily at midnight.
- Start first shift: Triggered at the beginning of the first shift of a day.
- End last shift: Triggered at the end of the last shift of a day.
- Start of the day without production: Dispatched to midnight if no shifts are planned for the day.
- Start of the day with production: Dispatched at midnight if a working time is scheduled on the day.
For example, to set the value of the variable to the name of the current layer, placeholders can be used. These placeholders are marked as follows! Name of the placeholder. Examples...
1.

2. Combination of placeholders and variables "Current layer: "Shift_time_start" - "!shift_time_end" (duration of the layer: dur_currshift_netsec): shows the start of the shift, the end of the shift, and the duration of the shift.
Possible placeholders:
- The most common...
- command_time: Execution time of the switching command
- name_0: Name of the switching command
- name_1, 2...: Name of the switching command (foreign languages)
- shift_time_start: Beginning of the shift to which the switching command refers
- shift_time_end: End of the shift to which the switching command refers
- shift_name_0: Name of the layer
- shift_name_1, 2...: Name of the shift (foreign languages)
- break_time_start: Start of the pause to which the switching command refers
- break_time_end: End of the pause to which the switching command refers
- break_name_0: Name of the pause
- break_name_1, 2...: Name of the pause (foreign languages)
- shift_time_start: Start of shift
- shift_time_end: Layer end
- prod_date: Production day
- shift_id: Layer ID
- shift_type: Layer Type (ID)
- shift_name: Shift name (default language)
- shift_name_0: shift name (default language)
- shift_name_1,2...: Shift name (foreign languages)
- next_shift_time_start: Shift start
- next_shift_time_end: Layer end
- next_prod_date: Production day
- next_shift_id: Layer ID
- next_shift_type: Layer Type (ID)
- next_shift_name: shift name (default language)
- next_shift_name_0: Shift name (default language)
- next_shift_name_1,2...: Shift name (foreign languages)
- break_time_start: Start of breaks
- break_time_end: End of break
- break_id: Pause ID
- break_type: Pause Type (ID)
- break_name: Pause name (default language)
- break_name_0: Pause name (default language)
- break_name_1,2...: Pause name (foreign languages)
- next_break_time_start: Start of breaks
- next_break_time_end: End of break
- next_break_id: Pause ID
- next_break_type: Pause Type (ID)
- next_break_name: Pause name (default language)
- next_break_name_0: Pause name (default language)
- next_break_name_1,2...: Pause name (foreign languages)
- in_work_time: Production is underway
- dur_currshift_gr: Duration of the current shift (gross)
- dur_currshift_net: duration of the current shift (net)
- remtime_shift_gr: Remaining shift duration (gross)
- remtime_shift_net: Remaining shift duration (net)
- elatime_shift_gr: Elapsed shift duration (gross)
- elatime_shift_net: Elapsed shift duration (net)
- remtime_break_gr: Remaining break time (gross)
- elatime_break_gr: Elapsed pause time (gross)
- remtime_next_shift_gr: Time until the start of the next shift (gross)
- remtime_next_shift_net: time until the start of the next shift (net)
- remtime_next_break_gr: Time until the start of the next break (gross)
- remtime_next_break_net: Time until the start of the next break (net)
Starting processes
Similar to switching commands, processes (Windows applications) can be started on a timed manner, whereby the above placeholders are also possible, for example as parameters of the process to be started.
- ID: unique numeric identifier (is automatically assigned continuously)
- Name: any marking
- Event: Event to which the process start refers
- Offset (min): Time offset related to the event (positive offset: process start is delayed after
the event is executed / negative offset: process is started before the event) - Command line: Name of the application incl. parameters — test the specification at this
point, for example, in the Windows prompt - Shift type: Specified if the switching command is to be executed only for certain shift types
(otherwise leave blank) - only relevant, for shift- or pause-related events - Pause type: Specified if the process is to be performed only on certain pause types (ot
herwise leave blank) - only relevant for pause-related events - Order: If multiple processes are started at the same time, an order
can be set, otherwise the order is random
Calendar
In the calendar, the desired working times are defined for each production section by assigning shift models. In the upper section, a selection of the respective time models appears for each production section. The green Ok button assigns the selection for all selected days, the red button deletes all entries of the selected days for the production section. The pop-up menu in the calendar or the "Insert" button take over the selected days for all production stages, respectively. with the "Remove" button.
Multilingualism
For multilingual projects, the project languages are selected in the communication module. The user can select one of these languages in the process. The scheduler supports not only the pure switching of the surface language, but also multilingual texts for the names of time models, shift definitions, etc. in addition to the reporting system.
The database is prepared for a maximum of three languages. The menu item "Options/Language Setting" determines in which many languages the configuration is stored (text columns):
For each of these columns, the underlying language should be specified in order to: to display certain special characters correctly.
The field map determines which text column for the different project languages should be displayed in the flow. In the example, the reporting system configuration is bilingual (German and English). More languages are available in the interface, but with the exception of English for all other languages, the German names are displayed in the reporting system.
Run schedules with SchedControl
The SchedControl module usually runs centrally on the server station for distributed projects. In the process, the module displays status information such as the last or next switching command. The following describes the functionality of the processing logic roughly.
On the one hand, the time sets exist in the database (shift models and assignment per calendar day). From these specifications, a working time archive is created with a lead time of 14 days. In the event of changes to the configuration, all future
Edit calendar
Edit Calendar with SchedCalendar
The SchedCalendar can be used to maintain the calendar during operation.Configuration
The basic settings for the calendar are entered in the communication module via the configuration entry of the calendar.

- Display options: Frame type and window settings- especially interesting when the applicati
on is embedded in a visualization mask - System group: Group of memory variables that contains the string variables command, status, and return.
Using these variables, commands can be transferred from the visualization to the display module in orde
r to control the window, e.g. to the foreground.
Edit calendar
The operation of the calendar works as described above – either per production section via the corresponding buttons or via the pop-up menu in the calendar.
Command interface
For the calendar, a system group can be specified in the configuration, which contains the string variables command, status and return. To create this variable group, it is best to do the following:
- Create a new auxiliary variable group through the Memory module without any entries and exit the
variable configuration. - Entry of the name of the system group (name of the newly created auxiliary variable group) in the configuration o
f the calendar - the command variables are created automatically. - If you then open this system group again, it contains the automatically created string variables co
mmand, status and return.
Command strings can be placed on the display using the command variable. The status variable gives information about the status of the currently processed command and takes the state busy during the execution of a command, while the state is otherwise on idle.
Regardless of the state, commands can be passed all the time because the incoming commands are buffered and processed sequentially. The simultaneous transfer of several commands in a string can be done separately by semicolon.
After the string is applied to the buffer, the command string is reset. Therefore, rewriting the command variables requires waiting until the command string is empty again.
The following commands are processed by the display module:
- Show - Shows the display window (if the window is as an icon in the taskbar, it will be brought to nor
mal size). - Close - Exits the module.
Winlock
Overview
The WinLock module locks the keyboard shortcuts to choose from, which are specified by Windows.

All options are available when configuring a VisXpert project. can be a system restart is not required. The settings made in the configuration are active until the WinLock window is cleared again.
Here you can test the effect of the functions. When the WinLock module is started in the
flow, all settings that were previously made in the configuration become active.
dGina
If the dGina.dll is installed, the DLL can be uninstalled using the "uninstall dGina" device. If dGina.dll is not installed, the menu item "dGina dll Install" appears under File.
Note: the dGina.dll is required to lock the CTRL-ALT-DEL key combination. When dGina.dll is installed, restrictions are to be expected in the user login of the system.
Features of the functions
CTRL ALT DELWindows Taskbars CTRL ESCWindows Desktops ALT TABWindows Start Buttons ALT ESCTray Icons in the Windows Taskbar ALT F4Applications Links in the Windows Taskbar Win KeyA
pplication KeyRight Mouse Button
CTRL ALT DEL (only 32 bits)
Description:
Suppresses the CTRL+ALT+DEL key combination and releases it again. This keyboard shortcut of CTRL, ALT, and DEL will reboot the PC.
CTRL ESC
Description:
Suppresses the CTRL+ESC key combination and releases it again. This keyboard shortcut of CTRL and ESC makes the Windows Start menu appear.
ALT TAB
Description:
Suppresses the ALT+TAB key combination and releases it again. This keyboard shortcut of "ALT" and "TAB" ensures that you can switch between open items.
ALT ESC
Description:
Suppresses the ALT+ESC key combination and releases it again. This keyboard shortcut of "ALT" and "ESC" ensures that you can switch between open items in the order in which they were opened.
ALT F4
Description:
Suppresses the ALT+F4 key combination and releases it again. This keyboard shortcut of "ALT" and "F4" ensures that the active element is gESChlossen or the active program is terminated.
Win Key
Description:
Suppresses the Windows buttons and releases them again.
Note:
When Win Key is activated, the following functions are locked:
- Win button: Show start menu
- Win + M: Minimize all windows
- Win + SHIFT + M: Uncleans the "Minimize All Windows" command
- Win + E: Open Windows Explorer
- Win + F: Show search dialog
- Win + CTRL + F: View search for computers
- Win + F1: View Help and Support Center
- Win + R: Show execution dialog
- Win + Pause: Show system properties
- Win + L: PC Locks
- Win + U: Open Utility Manager
- Win + Q: Switch users
Application Key
Description:
Suppresses the Application Key button (Windows menu key) and the SHIFT+F10 key combination and releases it again.
Note:
The Application Key and SHIFT+F10 correspond to the right mouse button function.
Windows Taskbars
Description:
With this property, the entire Windows Taskbar can be made invisible and visible again.
Windows Desktops
Description:
This feature makes the Windows Desktop invisible and visible again. All icons are hidden on the desktop; the background image remains visible.
Windows Start Buttons
Description:
This property allows the Windows Start button to be hidden and reappeared in the taskbar.
However, the Windows Start menu is still accessible via the CTRL+ESC keyboard shortcuts and the Win Keys.
Tray Icons in the Windows Taskbar
Description:
With this feature, the tray icons can be hidden in the Windows Taskbar and made visible again.
Applications Links in the Windows Taskbar
Description:
This property allows the task links to be hidden and made visible again in the Windows Taskbar.
Right mouse button
Description:
With the help of this property, the right mouse button can be switched off and switched back on system-wide.
Var Archiver
Overview
The VarArchiver is used to back up and back up variable values. Either variable values of VisXpert memory variables or variables from the controllers can be saved and reloaded if necessary. This backup method can therefore also be used if values are not included in e.g. of a PLC or held/stored in the database.
For example, the values to be secured can be PLC data (parameters, setpoints, etc.) as well as manual operator input.
This stand-alone VisXpert module can perform the configured backups cyclically at predetermined intervals during the running application. However, the backup of the data is also manual via a command interface, e.g. by pressing a button in the visualization as well as via the procedure module of the VarArchiver.
Configuration
Configuration
To use the VarArchiver, it must be included in the configuration of the communication module in the project. After that, the editor can be started. Pro VarArchiver module can only be configured for the variable values to be backed up. If several different backup jobs are required, several modules must be integrated into the project accordingly.
Before opening the editor module, the command interface must have a system group for the VarArchiver (e.g. "$VarArchiver1). This can be a local or global group, depending on the requirement and structure of the variable values to be backed up.
Basic
In order to archive variables, the basic settings for the backup must first be created:
- Variable archive: The variable archive specifies the path in which the archive.xml file should be stored. By default, the path is the project path of the application with its VarArchiver module. The Archive.xml file stores the backed-up variables and their values.
- System group: The system group is a variable group in which the system variables are located as a command interface. The system group is "VarArchiver". However, this system group must first be created from the Memory module (see Description "Remote control from other modules)
- Archive interval: Here the time interval can be selected from a drop-down list, whereby the variable values are automatically saved at the appropriate time interval.

Variable selection
In the lower section, all variable groups in the VisXpert are displayed on the left. Selecting a variable group lists the variables associated with the group in the right pane. By selecting a group and pressing the arrow key above it, all variables in the group are selected. To select individual variables, they must be marked in the right area and taken over with the arrow key above.
All variables applied to the backup are listed in the middle pane under "VarName" with group name and variable name. Variables can be removed from this 'backup list' by selecting the record and pressing the key combination 'Ctrl' + 'Delete'.
When the editor exits, the current settings are automatically saved.
Expiration
Expiration
Different information is displayed in the flow module.
The variable values can be loaded, saved or start and stop the backup cycle. These commands can also be executed using the command interface for remote control of other modules.
At the top, the variable archive, system group, and archiving interval entries configured in the editor are displayed in milliseconds.

Manually backup/load variable values
Manual backup or restore (restore) variable values can only be performed if automatic cyclic backup is disabled.
Automatic, cyclic backup
In the VarArchiver, a greyed checkbox "Backup Active" is displayed next to the displayed archiving interval. If automatic backup is active, this checkbox will be hacked.
Remote control from other modules
For the VarArchiver, a system group must be specified in the configuration that contains the string variables command, status, and return. In the editor, the group name "VarArchiver" is displayed as default. To create this variable group, it is best to do the following:
- Create a new auxiliary variable group through the Memory module without any entries and exit the variable configuration.
- Entry of the name of the system group (name of the newly created auxiliary variable group) in the configuration of the VarArchiver.
- If you then open this system group again, it contains the string variables command, status, and return. Check the variable entries with the green hoe.
Command strings can be sent to the module via the command variable. The status variable gives information about the status of the currently processed command and takes the state busy during the execution of a command, while the state is otherwise set to "idle".
It is not possible to pass multiple commands in a string at the same time. The commands must be passed to the interface individually.
The following commands are processed by the VarArchiver:
- BringToFront
Brings the VarArchiver's expiration module to the foreground. - Hid
eMakes the VarArchiver invisible. - Minimize
Minimizes the VarArchiver. - StartBack
upStarts the automatic backup cycle with the parameterized time interval. - StopBac
kupEnds the automatic backup cycle. - Backu
pSaves the current variable values. - Restor
e Loads the most recently backed variable values to the variables.
Varsniffer
Description
The VisXpert module VarSniffer allows you to observe and control variables. Predefined variables of the modules "Memory" and "SPS data" can be accessed. In addition, it is possible to enter so-called direct variables. That is, after defining a group, a variable can be determined by defining a corresponding operand.
Performance overview
- Both predefined and direct variables are possible.
- Several variables can be stored and reloaded in a list.
- Depending on the variable type, different display formats are possible, such as decimal and hexadecimal.
- Blocks can also be observed and controlled.
- Several variables can be changed and then controlled at the same time.
- Disturbances of individual variables are displayed in color.
- Incomplete or incorrect information is marked.
- The entire variable check and connection with the communication module takes place immediately after leaving the currently edited line, i.e. there is no difference between editing and processing.
Description of the surface
The main window of the VarSniffer shows as follows:

Columns
Group
The variable group predefined in a driver.
Name
The variable name from a driver or as a direct variable.
VarType
The VisXpert variable type: There are also the following 5 types to choose from:

For direct variables, the Vartype can be changed depending on other inputs.
Length
Specifies the length (size) of the variable. There are certain conditions to be observed, which are set out in detail in the Annex. An incorrect input is displayed.
Format: (Display format)
The format depends on the VisXpert variable type. For example, an integer number can be represented in dual, decimal, or hexadecimal.
Entering data
In "Group" you select a group from the drop-down box. If this is an S5 or S7 group, you can
enter the operand directly in the "Name" field. Such as. "db200 dw0" is sufficient. Provided that this DB can be controlled (i.e. DB must be present in the AG), and the fact that the VarType and Length columns are filled can be displayed in the values of this so-called "direct variable". You click on the column "Name" and select a variable via the selection dialog that then appears:

The variables listed are the ones predefined in the drivers. In addition, already entered direct variables appear, which are recognizable by the "A". The information is transferred to the VarSniffer main window together with the invisible length.
If you select the Direct Variable tab, the following picture shows:

If an S5 or S7 group is selected, direct variable input is possible.
The check box "from data block" determines whether an entry is possible for "DB-Nr" and fills the combo box at "Address" with the corresponding entries, depending on the PLC type. The remaining Variables Type, Length, and Display Format inputs correspond to the fields in the main window.
After the input is taken, direct variables are always checked for the variable name and any errors are displayed in the main window.

Loading and saving
If you have defined several variables, which are often related to each other, they can be saved in a list and reloaded if necessary. This can be achieved by pressing the buttons with the known symbols.
Observation and Force
Observing and controlling variables
The "current value" field shows the current value of the variable in the respective display format.
The update occurs after the value changes.
For all VisXpert variable types except data blocks, enter the desired value in the Setpoint column and leave the column. If the value is different from the current value, the tax value turns light blue. Now you can enter additional control values or write this value with the "Control" or F2 key for control. If you have changed several values, they can all be changed together with the "Apply all" button or Ctrl+F2. Attention: The plausibility of data entry is not checked.
Since data blocks cannot be clearly displayed in the main window due to their size, you can switch to an extended display with the Detail button: Here blocks can be edited clearly. With "Taxes" the data is written immediately, with "Apply" it is transferred to the main window in the column Tax value. A block length check and valid characters are checked.
"Invalid" variables
If a variable is not (more) valid (e.g. Connection cable disconnected, PLC assembly faulty, etc.), the corresponding variables are colored red:

The "current value" is <nil>displayed because the variable no longer has a defined state.</nil>
WebExplorer
Overview
The VisXpert WebExplorer module allows you to view web pages within a GP project. It has the Microsoft Internet Explorer as its basis and therefore also uses its installed plug-ins (e.g. Adobe svg).Performance overview
Provides the complete range of functions of the Internet Exp
lorer.Interface is partly parameterizab
le. Like other VisXpert modules, it can be embedded in the VisXpert visu and controlled via the command interface.
The flow of WebExplorer

The process essentially offers the most important possibilities, which the IE also offers.
There is a
- Navigation bar
- a bar for entering addresses
- a status bar.
Parameterization of WebExplorer
In order to make only certain parts of the interface accessible to the user, the visibility of the above-mentioned b
ars can be configured with the help of the WebExplorer editor.
Furthermore, a system group can be specified in which the variables for the command interface are created.
If a home page is specified, the expiration after starting attempts to load the specified page.
Commands of the command interface
The WebExplorer process handles the following commands:
- BringToFront - Brings WebExplorer to the foreground
- Hide - Makes the WebExplorer invisible
- Minimize - Minimizes WebExplorer
- Show - Shows the WebExplorer (if the window is as an icon in the taskbar, it will be brought to normal size)
- Close - Exits WebExplorer
- StayOnTop(Arg) - Sets or resets the attribute "In the foreground". Arg:true or false
- url(Arg) - Attempts to load the page specified in Arg: SysGrp:command := 'url(http://dtlegatoweb/ORAaudinu/index.html)
Web Explorer compatibility.
The Web Explorer is based on the Internet Explorer in copy-level mode IE7.
To use Legato from 4.6.0.1, the following Regestry key can be edited.
IE 11
[HKEY_CURRENT_USERSoftwareMicrosoftInternetExplorerMainFeatureControlFEATURE_BROWSER_EMULATION]
"Gp8IER.exe"=dword:00002af8
XP only up to IE 8,
Legato Requires in version 4.6.0.1at least IE 11
[HKEY_CURRENT_USERSoftwareMicrosoftInternetExplorerMainFeatureControlFEATURE_BROWSER_EMULATION]
"Gp8IER.exe"=dword:00001F40
Journal
You can use the change journal to record value changes and enter change comments. Op
tionally, attachment and user are logged as accompanying values.
The change journal consists
of :Module Change Journal Post 1 x per projectModule
Change Journal Comment dialog 1 x per visualization station
Configuration change journal
automatic entry in the change journal af
ter value changes of variables[MUST_COMMENT] without option, are automatically marked as closed after the set time.
Closing the justification dialo
g afterthe justification dialog is open, no value changes are automatically closed. After operating inactivity of the set duration, the dialog is closed and the automatic closing of the change entries is reactivated.
System gro
upCommunication between visualization and change journal is done via VisXpert variable. The system group contains the following change journal variables.
changevalcountMillion Number of changed and uncommented values command String With commands such as "Open_JournalAnzeige" or "Open_GrundDia
log" is opened on the station specified in variable dlgstation. A
s an alternative to specifying the variable dlgstation, the st
ation can be separated with a comma, in the command line. E.g
.: OpenGrundDialog,Computer1
status String current status Change journa
lValues: <> 'DIALOG' -> Entries are automatically justified if allowed.
return String error message from the change journal dlgstation String The change dialog is opened automatically at this station when <changevalcount>increases.</changevalcount>
The change journal cannot automatically determine the source of the change. By describing the VisXpert variables user and station, additional information can be logged in the event of value changes.
user String user s
tation String Station
Station for change dialogT
he station automatically opens the justification dialog after the value change. The specification can be changed at run time or also left blank.
Fixed asset Identifi
cationThe entry is noted in the change journal during the value changes.
Project
DBist Project DB selected, the value changes are stored in the project dat
abase. If Project DB is deselected, any ODBC database and table can be specified for saving the value changes.
The variables to be monitored are entered here. [VARITEM]is selected from the existing GP variables. Changes to variables with the opti[MUST_COMMENT]on must be made. Thi
s informa[DESCRIPTION]tion is included in the change journal.
Here you can create templates for change reasons. the time stamp is used for sorting order in the justification dialog.
Locking at multiple visualization stations
The value changes must be uniquely associated with a user. For several visualization stations on a PLC, the dialog for changes can only be opened at one station at the same time. The change mask can only be opened if the change journal:User variable contains an empty string. After the mask is opened, the variable "Change Journal:User" is set to the currently logged on user. After leaving the change mask, the variable "Change Journal:User" is described with a blank string to release the change mask back to other visualization stations.
Expiration of changes
After detecting one or more changes, a record is appended to the table CL_CHANGE_LOG for each change in value and the user is notified that value changes are [Systemgruppe]present using the VisXpert variable :changevalcount. At
the :Dlgstatio[Systemgruppe]n" station, the change dialog opens automatically when monitored values change. If the v
ariable contains a blank string, the change dialog can be displayed via the command "Open_GrundDialog" Is the dlgstation The changed values are displayed in a list in a new window if desired. In this list, one or more values can be marked and given a reason for change. If no entry is made within a parameterizable time, the value changes are carried into the change journal without comment.
A list of predefined reasons is offered for election. The entries in this list can be edited via a service function. It is also possible to enter any text directly as justification.
After the changes have been commented, they are transferred to the CentralJournal and the record in table CL_CHANGE_LOG marked as closed.
Table structures
* TIME_CHANGE datetime
* TIME_COMMENT datetime
*
* EQUIPMENT nvarchar(50)*
* STATE nvarchar(50)*
* USERNAME nvarchar(50)*
STATION nvarchar(50)*
VARITEMnvarchar(255)*
* DESCRIPTION nvarchar(255)*
* OLD_VALUE nvarchar(200)*
* NEW_VALUE nvarchar(200)*
* MUST_COMMENT bit*
* COMMENT nvarchar(255)*
* USER_COMMENT nvarchar(50)*
* CLOSED bit*
* Mandatory entry *Optional #Create CL_CHANGE_LOG
USE[GP8]G
O/****** Object: Table [dbo].[CL_CHANGE_LOG]Script Date: 11/12/2013 10:09:04 **
****/SET ANSI_
N
ULLS ONGOSET QUOTED_
I
DENTIFIER O[dbo]N[CL_CHANGE_LOG]
GOCR[ID][int]EATE TABLE . ( IDENT
ITY[TIME_CHANGE]([datetime]1,1) NOT
NU[TIME_COMMENT]L[datetime]L, NO
T N[EQUIPMENT]U[nvarchar]LL, (50) COLLATE Latin1_General
_CI_[STATE][nvarchar]AS NULL, (50) COLLATE Latin1_Gen
era[USERNAME]l[nvarchar]_CI_AS NULL, 50 COLLATE Latin1_
Gene[STATION][nvarchar]ral_CI_AS NULL, (50) COLLATE Lat
in1[VARITEM]_[nvarchar]General_CI_AS NULL, (255) COLLAT
E L[DESCRIPTION]a[nvarchar]tin1_General_CI_AS NULL, (255) C
OLLA[OLD_VALUE][nvarchar]TE Latin1_General_CI_AS NULL, (20
0) [NEW_VALUE]C[nvarchar]OLLATE Latin1_General_CI_AS NULL
, ([MUST_COMMENT]2[bit]00) C
OLL[COMMENT]A[nvarchar]TE Latin1_General_CI_AS NULL, NU
LL,[USER_COMMENT] [nvarchar](255) COLLATE Latin1_General_CI_
AS [CLOSED]N[bit]ULL,
(50) COLL[PK_CL_CHANGE_LOG]ATE Latin1_General_
C
I_A[ID]S N
ULL IGNORE_DUP_KEY PAD_INDEX, (50) COLLA[PRIMARY]
TE On[PRIMARY]
CL_CHECK_VARS
Field
DatatypeID int
VARITEM nvarchar(255)
DESCRIPTION nvarchar(255
)MUST_COMMENT bit
Create CL_CHECK_VARS
USE[GP8]G
O/****** Object: Table [dbo].[CL_CHECK_VARS]Script Date: 11/11/2013 17:20:03 ******/
SET ANSI_NULLS
ON
GOSET QUOTED_IDENTIFIE
R
ONGOCREATE T[dbo]A[CL_CHECK_VARS]B
LE [ID].[int] ( NOT NU
LL, [VARITEM]([nvarchar]255) COLLATE Latin1_General_CI_AS NOT NU
LL, [DESCRIPTION]([nvarchar]255) COLLATE Latin1_General_CI_AS NU
LL, [MUST_COMMENT]N[bit]ULL)
ON C[PRIMARY]
L_COMMENT_TEMPLATE
FieldName Datatype
ID int
TIME_CHANGE datetime
CHANGE_NOTICE nvarchar(255)
Create CL_COMMENT_TEMPLATE
USE[GP8]G
O/****** Object: Table [dbo][dbo].[CL_COMMENT_TEMPLATE]Script Date: 11/12/2013 11:16:01 ******
/SET ANSI_NULLS
O
NGOSET QUOTED_IDENTIFI
ER
ONGOCREATE [dbo]T[CL_COMMENT_TEMPLATE]
ABLE[ID] [int]. ( IDENTITY(1,1) NOT
ZER[TIME_CHANGE]O[datetime], ZERO
, ([CHANGE_NOTICE]2[nvarchar]55) NULL)
ON G[PRIMARY]
O
CL_JOURNAL
ID int USERNAME nvarchar
(50) GROUPNAME nvarcha
r(50) VARIABLENAME nv
archar(300) SHORT DESC
RIPTION nvarchar(200
) ALTWERT nvarchar(50) AE
NDERUNGSGRUND nvarch
ar(200) NEUWERT nvarchar
(50) TIME STEMPEL date
time ANLAGE nvarchar(50)
Create CL_JOURNAL
USE
[GP8]Go
/****** Object: Table [dbo].[CL_JOURNAL]Script Date: 11/11/2013 17:24:09 ******/
Set
ANSI_NULLS ONGo
Set
QUOTED_IDENTIFIER ONGo
Create
TABLE [dbo].[CL_JOURNAL] ([ID] [int]
IDENTITY(1,1) NOT NULL,[BENUTZERNAME] [nvarchar]
(50) COLLATE Latin1_General_CI_AS NULL,[GRUPPENNAME] [nvarchar]
(50) COLLATE Latin1_General_CI_AS NULL,[VARIABLENNAME] [nvarchar]
(300) COLLATE Latin1_General_CI_AS NULL,[KURZBESCHREIBUNG] [nvarchar]
(200) COLLATE Latin1_General_CI_AS NULL,[ALTWERT] [nvarchar]
(50) COLLATE Latin1_General_CI_AS NULL,[AENDERUNGSGRUND] [nvarchar]
(200) COLLATE Latin1_General_CI_AS NULL,[NEUWERT] [nvarchar]
(50) COLLATE Latin1_General_CI_AS NULL,[ZEITSTEMPEL] [datetime]
Null[ANLAGE] [nvarchar]
(50) COLLATE Latin1_General_CI_AS NOT NULL,CONSTRAINT[PK_CL_JOURNAL] PRIMARY KEY CLUSTERED(
[ID]
Asc)
WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON[PRIMARY])
On[PRIMARY]Text lists
In a text list, different texts are assigned to the values of a variable. The text lists are created using the Textlist editor module. The System| function Get_TL_Text in the visualization script returns the text of the specified text list and variable value.
Watchdog
This program monitors the process visualization VisXpert® error-free function and can combine up to three computers as a highly available system.
In this system, either all computers run in parallel (e.g. multi-user operation) or correspondingly a computer in active mode, the others in standBY mode.
A "WatchDog" runs per computer, for which the functions for active and standby mode can be parameterized:
Connection monitoring: Check the accessibility of coupling partners (e.g. PLC)and database as well as additional subscribers via Ethernet via ping event list: Individuallyadjustable monitoring times and actions to be performed (start, stop, restart) for timeouts for programs and services Logging: message of individual statis (programs, services) and overall status of the computer system in connection with message entry and call forwarding
Editor
General service
Add entries Clicking on 'Add...' a new entry can be added to the current list. For this purpose, a list-specific dialog opens through which you can configure the object to
be added. Edit EntriesBy clicking on 'Edit...' a previously selected entry can be edited. For this purpose, the same dialog opens as when adding entries.
Delete entries With the click on 'Delete' a previously selected entry can be deleted. Confirmation is requested before deleting
it. Test configurationWith clicking on 'Start Test' the current configuration can be tested. The test is equivalent to starting the module flow. Clicking on 'Stop Test' allows the test to be paused aga
in. Save ConfigurationThe current configuration can be saved using the menu item 'File-->Save'. If there are unsaved changes and an attempt is made to exit the program, the request is made whether the changes should be discarded or saved.
Monitoring Configuration
Basic
Test intervalSpecifies the check interval in minutes. Floating-point values are also allowed. TimeoutIndicates how many erroneous checks the watchdog status is set to errors. When Po
sting message errorIndicates whether a message should be posted during timeout. It is always written to the logboo
k. OperandIndicates under which operand the message should be posted.
Applications

ApplicationA running Windows application can be selected via the DropDown menu. It can also simply be the desired process name (e.g. notepad.exe). In case of R
estart Restart ErrorFor applications with interface, the watchdog can try to exit and restart the application after the timeout.
Databases

Connection StringThe Connection String is used to determine which database server the connection should be monitored to. Click on '...' an editor is opened to create/edit the connection string.
GP Variables

GroupSpecifies the group in which the variable resides. It can be selected from the DropDown menu or entered by hand. Vari
ableSpecifies the variable within the group. It can also be entered via the DropDown menu or by hand. Only variables of type Boolean, integer or floating point are allowed. These variables are actively written and read by the watchdog.
Hosts

Hostname/IP addressSpecifies the host name (NetBIOS name, domain name) or IP address.
Watchdogs

Hostname/IP addressSpecifies the host name (NetBIOS name, domain name) or IP address. Por
tSpecifies the port through which the watchdog is reachable.
Options

PriorityOn priority can be determined which watchdog, in case there are several error-free, master becomes. The watchdog with the highest priority becomes master. If multiple watchdogs have the highest priority, they will all m
aster.Eavesdropping port Specifies the port under which the s
erver should be reachable. Pre-Master EventHere you can specify a program to run as soon as the watchdog m
aster becomes master. Pre-Master EventHere you can specify a program to run when the watchdog is no longer a master.
Expiration

The process represents the configuration the same as the editor, but all editing options are missing. In addition, achievable elements are colored green, unreachable red. In the status bar you can see the overall status of the watchdog ('OK' or 'error') and on the other hand whether it is currently a master. Other watchdogs do not affect the status of the watchdog
.Messages have the message group '-3'. Messages occur when: - the watchdog status changes to errors (Operand WatchdogState) - the watchdog master becomes (operand WachtdogMaster) - an item goes offline and 'Report' is set (operand per element configurable)
Software Development Kit
VisXpert includes an .Net Software development Kit and samples that get installed into "C:\Users\Public\Documents\VisXpert\Visual Studio Examples\".
or you can download it from here:
The SDK allows you to do amongst other things:
- Read and Write Variables
- Create new Data Drivers
- Create new Data Servers
- Read Variable Configurations and Create new Variable Configurations
- Read and Create Alarm Configurations
- Read and Create new Modules in the Project
- Introspect the current Project configuration
- Read Aser Administration data (Passwords can not be read in clear text)
- Implement custom Login Servers
VisXpert API Overview
Main Assemblies and their Function
- MLogics.VisXpert.Online: All "online" functionality, such as getting or setting Variables, Variable Editing and also Base functions for Data Drivers
- MLogics.VisXpert.Project: Facilities to Read the Project configuration, which modules are configured, iterate the User configuration and similar
- MLogics.VisXpert.Utils: Tools and helpers of various types
- MLogics.VisXpert.Alarm: Read Alarm Historical data, and also get notified when Alarms are coming in
- gpMdsCommon: Access to Trend historical data
Visual Studio Requirements
Visual studio Versions and Editions
Generally you can use all Visual Studio versions starting from Version 2017.
It is recommended to use Version 2022.
All editions are compatible, and the Community edition is recommended.
.Net Versions
VisXpert Requires .Net Version 4.5.2 or above to function.
This version is automatically installed on all Windows Versions starting from Windows 8
VisXpert does NOT need .Net 3.5.
Windows
VisXpert requires Windows 8 or above.
Ideally you should use the latest Windows Version, such as Windows 11 or 10
No special "Features" of windows are required.
Additional Software
No additional software is needed, apart from VisXpert.
Set up Develpoment Environment
You need the latest version of VisXpert installed on you Development machine.
This is needed to have access to the VisXpert API assemblies. And of course
to be able to start VisXpert and interact with it.
You just need the normal standard VisXpert installation. All API assemblies
are contained in this installer, since they are also used by the VisXpert
modules them selfs
Install Visual Studio
You also have to install your Preferred Version of Visual studio.
You need to install the ".Net Desktop Development" workload. No other
workloads are required, although you can install any other workload that
you might require for other purposes.
Create Visual Studio Project
You can either create an New blank Project, or copy and modify one of the Example Applications.
Windows Forms, Windows Presentation Foundation (WPF), or Console applications are supported.
Only .Net Framework applications are supported, .Net core applications are not yet fully supported.
Reference VisXpert Assemblies
Once you Crated an new Project, you have to add references to the Required VisXpert API Assemblies,
in order for them to be usable in your Project.
You will find the Assemblies in your Installation directory, usually "C:\Program files (x86)\VisXpert\Bin".
Usually you will want to have at least access to the Online connection, which you will find in the
"MLogics.VisXpert.Online.dll" assembly. Of course you can add any other assembly to your project as required.
Processor Architecture
VisXpert is an 32 bit application, and many libraries are still 32 only. This means that you must
explicitly select "x86" as Processor Architecture. "x64" or "Any" are not supported.
Debug Custom Module
To debug an custom Module, you basically set up the command line and current directory of your debug
target the same way as if it would have been started by the Communication module itself.
You then run the Debug target and it will react the same way as if it would be started during runtime.
Prepare VisXpert
- Register your Custom module to VisXpert using any of the methods of registering an module.
You must register your module type once before running VisXpert. - Start or Restart VisXpert. VisXpert will check the registered modules only during startup.
- Add your newly registered Module to an VisXpert Project where you will do the Debugging.
You will need your Module to be present in the current VisXpert project, otherwise VisXpert
will reject all communication requests.
Prepare Visual Studio
- Set the current directory of your debug Target to the "bin" directory inside the directory
- where you have installed "VisXpert".
this is usually "C:\Program files (x86)\VisXpert\Bin". You can adjust this in your Visual studio
Project settings. - Set the Commandline to an valid commandline that it would get as if it where started from the
VisXpert Communication module. For more information on how to do that, please check the appropriate section. - Run Application in Debug mode. Set Breakpoints debug your module as needed.
Command line
When VisXpert starts an Configured module, it passes Command line to the module, that contains multiple
pieces of information that the Module will need to make an connection to the Communication module.
The Command line arguments are:
- /N="Module Name" : Each module is identified by its Modules name.
- /T="Module Type" : Each module also has an module type
- /A : if the Module is an "Runtime" module
- /E : If the Module is an "Editor" module
- /P="Module Config Directory" : This is the directory where the module can store and read its configuration from
For example you an Commandline would look something like the following.
/N="MessageView 1" /T="MessageView" /A /P="D:\Temp\Austral\Visu\Austral\Message1\Message2\"
The Module name is the name that the your module has in your test VisXpert Project.
The Module type is the Type under which you have registered you Module in VisXpert
The directory is an subdirectory inside the project directory, that is assigned by the VisXpert Communication Module
What to be aware of
when you are communicating with VisXpert, you are using resources of VisXpert.
When you "Stop" debugging from visual studio, the Debugged process gets "killed" immediately, without being
given an chance of freeing any resources.
No Finalizes, disposed event handlers or other Handlers will run if you just "Stop" debugging.
You should properly close your Module to stop debugging. Repeatedly starting and stopping debugging from
Visual studio, can cause instabilities in the VisXpert communication module.
Another thing to be aware of are Tim outs. If you have set an Breakpoint in certain functions, the whole
process will be "frozen" while you are examining the
breakpoint. This also means, that nothing will send "Life Messages" or "Acknowledges" to the Communication module,
possibly causing Timeouts. Keep that in Mind
when setting Breakpoints.
Register Custom Module to VisXpert
All modules that should be used by VisXpert must be registered to
the VisXpert Communication Module. The Registration is done via
the Windows Registry. You need Administration Privileges in order
to Modify the required Registry keys. After you have registered
your Module, you have to restart VisXpert, in order for it to detect the new Module.
After you have registered your Module, you can add it to your project.
Purpose
The Project registration essentially defines the module. It defines
its Type, which executables it uses and also how it appears in
the VisXpert menu.
Structure
Each registered module has an Sub-key under the "Modules" registry key.
This Sub-key has the name of the Module type. This Sub-key holds
different values, that represent different characteristics of the
Module in question.
The Module registration Key is:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GEFASOFT\GraphPic\8.9\Module
it can hold the following sub keys:
"Flags"= Flags that indicate how what function the module uses or provides
"Ablauf"= The Relative OR absolute path to the Runtime Executable
"Editor"= The Relative OR absolute path to the Editor Executable
"Icons"= the Path to the Executable where it should use the Icon from
"Beschreibung_7"= An User description for the Windows Local ID (LCI) 7
"Beschreibung_9"= An User description for the Windows Local ID (LCI) 7
"Menu"= If you add new modules, they appear in sub-menus
Example
Probably the easiest way is to use the following example and start
from there.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GEFASOFT\GraphPic\8.9\Module\Events]
"Flags"=dword:00001042
"Ablauf"="EventsR.exe"
"Editor"="EventsD.exe"
"Icons"="EventsR.exe,1,0,EventsD.exe,1,0,"
"Beschreibung_7"="Create Events and Actions for Cyclic events, when applications are being started etc.
Actions can range from Variables values to Applications"
"Beschreibung_9"="Create Events and Actions for Cyclic events, when applications are being started etc.
Actions can range from Variables values to Applications"
"Menu"="Scheduling and Events"
Deploy Custom Module
First you have to deploy your executables and stuff. Probably the easiest way is to
just xCopy them into the VisXpert Bin directory. Other options include, creating an
Installer or other methods.
Once the Binaries are copied, you have to register the Module using one of the
Methods described.
After that, the module is ready to run.
Of course, do not forget to also install any Dependencies that your module might have