VisXpert Manual

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 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

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.

Uninstallation
Select VisXpert from the Applications Menu in the Windows Control Panel

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"

Set up Performance Monitor

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.

Start Performance Monitor

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:

Default view of the Communication Module

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:

Esta imagen tiene un atributo ALT vaco; su nombre de archivo's Kommodul3.jpg

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:

ButtonCommand
SHIFT + F10Open context menu (corresponds to right mouse button)
F6, TABWindow change forward (clockwise)
SHIFT+ F6, SHIFT + TABWindow change backwards (counterclockwise)
F5Update display in the status window
SHIFT+ ArrowsMoving the window layout
ALT + ENTEREdit properties of the selected object
INSERTCreate new Project
CTRL + ENTFDeleting object
Keyboard Commands

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.
File Menu

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 .
Editing Menu

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.
Start Menu

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.
View Menu

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.
Logbook Menu

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.

variableTypevaluecomment
ActivateModuleStringModule nameBrings the module to the fore. If the module in question is not yet running, it will be started.
CloseGraphPicBooleanTRUEEnds the current project, then the communication module.
CloseModuleStringModule name
': ALL:'
Ends the specified module.
Ends all modules.
CloseProjectBooleanTRUEEnds and closes the current project.
LoadProjectStringFilenameLoads the specified project. The currently loaded project is ended.
ReloadConfigStringModule nameForwards the command "Reload configuration" to the relevant module.
ReloadModuleStringModule nameTerminates the module in question and restarts it.
System Commands

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.
Status| Variables

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:

Edit Graphics dialog

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.TextModule NumberModul NummerModule NumberNumero del Modulo
FCInfo.Panel_1836. Text Symbol/TagSymbol/TagSymbol/TagSymbol/Tag
FCInfo.Panel_1990. Text DescriptionBeschreibungDescriptiondescripcion
FCInfo.Panel_2018. Text PeripheryPeriferiePeripheryperiferia
Example of heading with project languages German, English and French

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

VisXpert Translation Editor

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

In this menu you have the possibility to change the screen view in the editor.

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)
In particular, you can use classes, elements, windows, scripts, and function
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. 

Scripts menu --- 

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
  • Default values for dynamic dialogs: If additional values are required for scaling when dynam
    izing individual elements, the values set here are suggested as default settings.
  • Flashing rate: Various graphic elements can be displayed flashing. The flashing rate indicates the time interval of the flashing clock in milliseconds.
  • Selection width: Specifies the width of the area where the outline of an element must be clicked to select it.
  • Move item immediately: When the checkbox is activated, an element selected by means of a left mouse button can be moved immediately by "drag". Without this option, the mouse button is required to press again.
    The move takes effect only after a movement around the value "Minimum Shift".
  • Minimum Displacement: To avoid unintentional movement of elements, a minimum value in pixels
    can be specified here. Only after this value does the item actually move.
  • Marker size: Specifies the size of the marker points for items in pixels.
  • Grid as a drawing help: For more precise arrangement of elements, a grid can be displayed in the editor
    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.
  • Test project integrity: When the checkbox is activated, a project integrity test is automatically performed when saved.
  • Library path: Here you can set the base path for import, export and update.
  • Script Editor: Here you can set the colors for the script editor.
  •  

    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.

    Variable output via flashing

    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

    operatoroperationOperand typeResult type
    +additionLong, doubleLong, double
    -subtractionLong, doubleLong, double
    *multiplicationLong, doubleLong, double
    /divisionLong, doubleLong, double
    ModModuloLongLong

    Mod calculates the integer remainder of a divisionExample:       3 Mod 2 => 1
    4 Mod 2 => 0
    10 Mod 3 => 1 

    Boolean operators

    operatoroperationOperand typeResult type
    NotBoolean negationBoolBool
    AndBoolean ANDBoolBool
    OrBoolean ORBoolBool
    Xorboolean antivalenceBoolBool

    Logical operators

    operatoroperationOperand typeResult type
    Notbitwise negationLongLong
    Andbitwise ANDLongLong
    Orbitwise ORLongLong
    Xorbitwise antivalenceLongLong
    <var> Shl xSlide leftLongLong
    <var> Shr xSlide rightLongLong

    X = number of places to be moved

    Relational operators

    operatoroperationOperand typeResult type
    =equalcompatible typesBool
    <>unequalcompatible typesBool
    <smallercompatible typesBool
    >greatercompatible typesBool
    <=less than / equalcompatible typesBool
    > =greater or equalcompatible typesBool

    String operators

    operatoroperationOperand typeResult type
    +additionStringString

    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:

    sequencevaluecharacterimportance
    \ a0x07BELAlarm tone
    \ b0x08BSBackspace
    \ f0x0CFFForm feed
    \ n0x0ALFLine feed
    \ r0x0DCRCarriage return
    \ t0x09HTHorizontal tab
    \ v0x0BVTVertical 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:

    1. Create an new block by calling "NewBlock(<blocklength>)
    2. Manipulate this new block by calling any of the functions below
    3. Write the block that was created by "NewBlock" to the controller via assigning it to an VisXpert Varaible or by calling SetGPBlock

    Blocksize

    Declarationlong Blocksize (block b)
    FunctionReturns the length of block b.
    Cross NewBlock
    Exampleblock b
    long size
    b := newblock(1024)
    size := blocksize(b)

     BlockToStr

    Declarationstring BlockToStr(block b)
    FunctionConverts the b bytewise to a string (hexadecimal representation).
    Cross StrToBlock
    Exampleblock b
    string s
     
    b := NewBlock(2)
    SetBlockNum(b, 0, 1, false, 1)
    SetBlockNum(b, 1, 1, false, 2)
    s := BlockToStr(b)

    GetBlockNum

    Declarationlong 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)
    SizeSignType
    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
    Data Formats

    GetBlockStr

    Declaration string GetBlockStr(block b, long pos, long size)
    FunctionReads 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
    Exampleblock b
    b := newblock(128)
    setblocknum(b, 0, 1, false, 6)
    setblockstr(b, 1, 6, 'ABCDEF')
    SizeSignType
    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
    Data Formats

    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
    Exampleblock 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
    ConstantValueDescription
    vbKeyLButton0x1Left mouse button
    vbKeyRButton0x2Right mouse button
    vbKeyCancel0x3CANCEL BUTTON 
    vbKeyMButton0x4Middle Mouse Button
    vbKeyBack0x8BACKSPACE  
    vbKeyTab0x9TAB key 
    vbKeyClear0xCDELETE key 
    vbKeyReturn0xDENTER  
    vbKeyShift0x10SHIFT  
    vbKeyControl0x11CTRL key 
    vbKeyMenu0x12MENU BUTTON 
    vbKeyPause0x13PAUSE KEY 
    vbKeyCapital0x14 CAPS Lock key
    vbKeyEscape0x1BESC KEY 
    vbKeySpace0x20SPACEBAR  
    vbKeyPageUp0x21PAGE UP KEY
    vbKeyPageDown0x22PAGE DOWN KEY
    vbKeyEnd0x23END KEY 
    vbKeyHome0x24HOME KEY 
    vbKeyLeft0x25LEFTARROW KEY 
    vbKeyRight0x26RIGHT ARROW KEY
    vbKeyUp0x27UP KEY 
    vbKeyDown0x28DOWN KEY 
    vbKeySelect0x29SELECTION KEY 
    vbKeyPrint0x2APrint key 
    vbKeyExecute0x2BRun button 
    vbKeySnapshot0x2Csnapshot button 
    vbKeyInsert0x2DINSERT key 
    vbKeyDelete0x2Edelete button 
    vbKeyHelp0x2FHELP BUTTON 
    vbKeyNumlock0x90NUM LOCK 
    Key Codes

    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 referenceGetScriptLineText
    examplelong 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:    

    valuemeaning
    0x0001two buttons: OK, CANCEL
    0x0002three buttons: ABORT, RETRY, IGNORE
    0x0003three buttons: YES, NO, CANCEL
    0x0004two buttons: YES, NO
    0x0005two buttons: RETRY, CANCEL
    0x0010Icon: STOP
    0x0020Icon: QUESTION
    0x0030Icon: EXCLAMATION
    0x0040Icon: INFORMATION
    0x0100Default: button 2
    0x0200Default: button 3
    0x1000System modal
    0x2000Task modal

    Style

    The return value of the function depends on the button pressed: 

    valuemeaning
    1OK button pressed
    2CANCEL button pressed
    3ABORT button pressed
    4thRETRY button pressed
    5IGNORE button pressed
    6thYES button pressed
    7thNO 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

    declarationSetUser (string User, string Pwd, long tm)
    functionLogs 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
    exampleSetUser ('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
    LanguageID
    English9
    Spanish10
    German7
    French12
    Russian25
    Italian16
    Chinese4
    Dutch19
    Greek8
    Portuguese22
    Polish21
    Turkish31
    Cyrilic5
    Default Language ID's

    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
    Examplelong 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:

    GetNow, TsToA

    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:

    WeekDay

    Example:

    string d

    d := getdatestr

     

    GetNow

    Declaration:

    double GetNow

    Function:

    Returns the timestamp of the current time.

    Cross:

    TsToA, AToTs

    Example:

    double ts

    ts := GetNow

     

    Gettime

    Declaration:

    long GetTime

    Function:

    The function returns the seconds since midnight for the current time.

    Cross:

    TimeStr

    Example:

    long s

    s := gettime

      

    LocalTimeToUTC

    Declaration:

    double LocalTimeToUTC(double dftLocalTime)

    Function:

    Converts the specified timestamp dftLocalTime from local time to UTC time.

    Cross:

    UTCToLocalTime

    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:

    GetNow

    Example:

    string t

                t := timestr(36000)

     

    TsToA

    Declaration:

    string TsToA(double ts)

    Function:

    Returns the time as a string of the specified timestamp.

    Cross:

    GetNow, AToTs

    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:

    LocalTimeToUTC

    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 nWeek 

    nWeek := 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.

    ConstantColor Value
    clBlack0x000000
    clMaroon0x000080
    clGreen0x008000
    clOlive0x008080
    clNavy0x800000
    clPurple0x800080
    clTeal0x808000
    clRed0x0000FF
    clLime0x00FF00
    clYellow0x00FFFF
    clBlue0xFF0000
    clFuchsia0xFF00FF
    clAqua0xFFFF00
    clLtGray0xC0C0C0
    clDkGray0x808080
    clWhite0xFFFFFF
    Color constants

    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
    Examplelong 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

    SetPropPosLeft

    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

    SetPropPosRight

    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

    SetPropPosTop

    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

    SetPropBrushBitmap

    Example

    bool fValid
    fValid := IsPropBitmapValid('Fenster_1', 'Bitmap_1')

    IsPropBrushColorValid

    Declarationbool IsPropBrushColorValid(string szWin, string szObj)
    FunctionWhether the property fill color of the specified element szObj can be set in the szWin window.

    Cross

    GetPropBrushColor, SetPropBrushColor

    Examplebool 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
    Examplebool 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
    ExampleSetPropBrushColor('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:

    1Unknown Error
    0Status O.K.
    <0Connection error. Number corresponds to error number
    Valores de @ConnectStatus

    @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-TypBoolIntegerFloatStringData blockComment
    VT_I2R/WR/WR/WR/WR/W2 Byte signed integer
    VT_I4R/WR/WR/WR/WR/W4 Byte signed integer
    VT_R4R/WR/WR/WR/WR/W4 Byte Floating point
    VT_R8R/WR/WR/WR/WR/W8 Byte Floating point
    VT_BSTRR/WR/WR/WR/WR/WString (UNICODE)
    VT_BOOLR/WR/WR/WR/WR/WBoolean
    VT_UI1R/WR/WR/WR/WR/W1 Byte unsigned integer
    VT_ARRAY |
    VT_BSTR
       R/WR/WArray of Strings (UNICODE)
    VT_ARRAY
    einfacher Typ
        R/WArray of VT_I2, -I4, -R4, -R8 etc.
    VT_ARRAY
    VT_VARIANT
        RArray, 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 ControlLogixCompactLogix 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.
    DB Tools

    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:

    https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/backup-restore/schedule-automate-backup-database

    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.  
    Manually Attach the Database
    • 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
    Custom Database
    • 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).

    Processing Messages

    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.

    Invoking an Message Event

    At the lowest level, the message handling is implemented by calling an Stored Procedure on the database. You can invoke this stored procedure by an variety of different methods, for example by using an SQL server script

    Please keep in mind that you have to make an Message configuration first, which defines the actual text of the message. When calling this Stored Procedure, you give it the "Operand" of your message and applies the "action" on it.

    TSql

    DECLARE @RC int
    DECLARE @time datetime
    DECLARE @source nvarchar(50)
    DECLARE @algrp int
    DECLARE @operand nvarchar(16)
    DECLARE @action char(1)
    
    set @time = GETUTCDATE()       --The time the event happened, usually "Now"
    set @source = 'My Application' --Your Application name
    set @algrp = 1                 --The id of the alarm group you want to record the message to
    set @operand = 'Fault0001_Ext' --This is the Message Identifier of the message to activate
    set @action = 'K'              --K = Incoming alarm
    
    EXECUTE @RC = [dbo].[al_new_action] 
       @time
      ,@source
      ,@algrp
      ,@operand
      ,@action

    C# without VisXpert SDK

    using (SqlConnection conn = new SqlConnection("Server=(local);DataBase=xxxx;Integrated Security=SSPI")) {
        conn.Open();
    
        // 1.  create a command object identifying the stored procedure
        SqlCommand cmd  = new SqlCommand("al_new_action", conn);
    
        // 2. set the command object so it knows to execute a stored procedure
        cmd.CommandType = CommandType.StoredProcedure;
    
        // 3. add parameter to command, which will be passed to the stored procedure
        cmd.Parameters.Add(new SqlParameter("@time", DateTime.Now));
        cmd.Parameters.Add(new SqlParameter("@source", "My Application"));
        cmd.Parameters.Add(new SqlParameter("@algrp", 1));
        cmd.Parameters.Add(new SqlParameter("@operand ", "Fault0001_Ext"));
        cmd.Parameters.Add(new SqlParameter("@action", "K"));
    
        // execute the command
        cmd.ExecuteReader()
    }

    Parameters of the Stored Procedure

    ParameterData typeDescription
    @timeDateTimeThe date and time when the event happened
    @sourceStringThe Source where the event originated from. usually your application name
    @algrpIntThe ID of the Alarm group where the Operand belongs to
    @operandStringThe Operand of the message where the action should be performed
    @actionStringThe identifier of the action to perform on the operando. See table below
    Parameters of Stored Procedure
    ActionDescription
    KMessage 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.
    GMessage gone: This marks the end of a message. The posting module will then complete the corresponding current message, i.e. re-enact the "gone" time for the message and calculate the duration of the fault.
    FAcknowledge: All current messages of the specified controller are completed, i.e. receive the "Gone" time
    PProtocol The message does not appear in the current table, but is immediately posted to the archive
    EMessage detected This marks the corresponding current message as recognized
    QMessage acknowledged Corresponds to the manual acknowledgment of a message
    Values for @action

    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 Supported.
    • UserName/Password authentication
    • OAuth and OAuth2 not supported
    • Two Factor Authentication not supported

    The configuration for each Mail Provider can be obtained from the Mail Provider.

    Please keep in mind that many Mail Providers will impose Mail sending Limits on your account, which ultimately limits the amounts of Mails you can send per day. Please adjust your "Mail Sending Interval Accordingly"

    As of 2024 Google limits applications that do not use OAuth or Two factor authentication and the "Enable unsafe Application" option MUST be enabled in the google developer panel. As of 2025 Google does not allow the "Enable unsafe Application" anymore, which makes google mail accounts unsuitable to be used here.
    Microsoft Changed its SMTP server name for Outlook and Hotmail accounts in 2023. Please update your configuration to "smtp-mail.outlook.com" according to the Microsoft documentation.
    We Recommend to use an Microsoft Outlook Account instead. which can also be created free of charge.

    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:

    1. Menu bar: Channels can be created, archived or the configuration saved via the menu bar.
    2. Tableiste: Here you can choose between channel and archive view.
    3. Item List: Displays all items in the active view.
    4. 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:

    1. Always book the first value.
    2. Wait for three values.
    3. Put a straight line through first and last point.
    4. 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.
      1. 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.
      2. 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

    Access to databases (tables)

    Using the Standard document type

    The easiest way to create a report for a database table is to use a standard report when you cr
    eate 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.
    The report documents are displayed page by page in the main area of the designer. Changes are made with File| save
    " 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 Module

    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)

    Command-Line integration

    This Module allows you to read and also write variable values and statuses from an command-line utility. This command line utility can be invoked as an ordinary command line utility, such as "cmd.exe" or "Powershell", by giving it command line arguments.

    This module allows you to write external scripts that retrieve or write data from/to VisXpert variables. The variables that can be read or written, are not restricted to an driver, and thus also PLC bound variables can easily be written to the respective Controllers.

    This allows you for example to use scripts to fetch data from custom data sources and then write them into VisXpert variables where they can be written to the respective logical controllers (Plc).

    The Functionality can be integrated into Shell-Scripts, Powershell-Scripts or any other Scripting language that is able to invoke executables.

    If you need better integration and control, you can look into the .Net Libraries that are also available.

    Adding to the Project

    To be able to use this ability, the "CmdLine" module must be added to the configuration first. If this module is not configured, all Command line accesses will be denied.

    Running an Command

    To run an command you have to invoke the "VxVar.exe" command line tool, found in the binary directory inside you VisXpert installation directory. For example: "D:\Program Files (x86)\VisXpert\bin\VxVar.exe"

    This path is NOT automatically added to the global "PATH" Environment variable, so you have to specify the fully qualified Path name to be able to invoke the executable.

    The "VxVar.exe" is only available locally on the computer where VisXpert is installed and is running on. It is not available via Network communication or as stand alone application.

    Command Line Arguments

    The "VxVar.exe" has several arguments that can or must be passed to determine what action is requested. For this the tool implements the following arguments:

    • -Verbose: Print more information to the Console. Only for debugging. Allows you to see what is happening
    • -Get: Retrieve the Value of an VisXpert variable and return it to StdOut
    • -Set: Set the Value of an VisXpert variable
    • -Name: The "Group:VarName" VisXpert variable to be Set or Get
    • -Value: the Value of an VisXpert variable

    The Name and Values must be enclosed in double quotes

    Examples

    Read and write an value using the built-in windows Cmd.exe

    Read and write an value using the built-in windows Powershell

    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.

    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”

    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.

    Scheduler

    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.

    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.

    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
     Switching commands:

    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.

    At the beginning of the shift, the shift name and the planned end of the shift are entered for the variable, and the variable is reset to the value ('---') at the end of the shift.

    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:

    1.  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)
  • Current layer
    • 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)
  • The following layer
    • 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)
  • Current pause
    • 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)
  • The following pause
    • 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)
  • Durations, etc.
    • 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

    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

    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.

    Runtime

    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.

    On the left side, all archive variables are displayed, the values of which are saved via the VarArchiver module. In the right pane, each variable returns its variable type and indicates whether a valid variable value exists for that variable after the last backup (Valid = True).  

    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.
    • Hide: Makes the VarArchiver invisible.
    • Minimize: Minimizes the VarArchiver.
    • StartBackup: Starts the automatic backup cycle with the parameterized time interval.
    • StopBackup: Ends the automatic backup cycle.
    • Backup: Saves the current variable values.
    • Restore: Loads the most recently backed variable values to the variables.

    Varsniffer

    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.

    • 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.

    User Interface

     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.

    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

     

     

    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: Individually adjustable monitoring times and actions to be performed (start, stop, restart) for timeouts for programs and services Logging: message of individual statistics (programs, services) and overall status of the computer system in connection with message entry and call forwarding

    Editor

    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 Entries By 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 configuration With 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 again. Save Configuration The 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.

    Basic Configuration

    Test intervalSpecifies the check interval in minutes. Floating-point values are also allo
    wed. 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

    Application a running Windows application can be selected via the Drop Down 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 String The 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

    Group Specifies the group in which the variable resides. It can be selected from the Drop Down menu or entered by hand. Variable Specifies the variable within the group. It can also be entered via the Drop Down 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 address Specifies the host name (NetBIOS name, domain name) or IP address.

    Watchdogs

    Hostname/IP address Specifies the host name (NetBIOS name, domain name) or IP address. Port Specifies the port through which the watchdog is reachable.

    Runtime

    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

    Print Friendly, PDF & Email