Global Data Space data types configuration

Configuration with PLCnext Engineer

You can configure the GDS by connecting IN and OUT ports of programs with the PLCnext Engineer software (see Importing libraries into PLCnext Engineer). 

In PLCnext Engineer, select the desired use as an IN or OUT port in the Data List editor of the PLCnext node for the respective process data. You can see an overview of all IN and OUT ports available in the GDS in the Data List editor . The programs communicate via the IN and OUT ports of the GDS. Communication is also possible between IEC 61131-3 programs and programs that were created using other programming languages (e.g., C++). For this purpose, the IN and OUT ports must be assigned to one another.

Note: IN and OUT ports are only displayed in the Data List editor of the PLCnext node.

PLCnext_PCWE_Data_list.png

A detailed description of the procedure and additional information on GDS configuration with PLCnext Engineer is available in its Online Help.

Tip: Starting with release 2022.0 LTS, the PLCnext Engineer embedded help is also online available.

GDS configuration using configuration files

When a project is downloaded from PLCnext Engineer to the controller, the previous PLCnext Engineer configuration files are overwritten with the new configuration files. The section Manual configuration describes how you can safely store your manually modified configuration in the controller file system, thus preventing the loss of data.

You can also modify the GDS configuration without PLCnext Engineer, using configuration files. All of the important settings can be configured directly in the *.gds.config configuration file on the controller. To modify the configuration, the XML file can be edited using any editor. You will find the file in the /opt/plcnext/projects/.../Plc directory of your controller. The file system is accessed via the SFTP protocol. Use a suitable SFTP client software for this, e.g., WinSCP.

 

Be aware of the XML entities when editing XML configuration files! There are symbols in the XML code that cannot be represented as attribute values because they have a syntactical function. Show detailsShow details

For example, the characters < and > are used for opening and closing XML tags. To be able to use these characters as attribute values in their genuine meaning "less than" or "greater than", entities are required.

The following entities are predefined in the XML specification. Make sure to use these entities in attribute values to avoid XML parsing errors.

Character Entity
Ampersand (& &amp;
Single quote (') &apos;
Double quote (") &quot;
Less than (<) &lt;
Greater than (>) &gt;

 

The individual connections with their respective IN and OUT ports are defined between the <Connectors> and </Connectors> tags. A connector is a directed connection from startPort to endPort. An OUT port is entered as a startPort attribute and an IN port as an endPort attribute. Within the *.gds.config, each of the ports has its own unique name that has the following structure:

ComponentInstanceName/GroupName.VariableName

Attribute

Explanation

ComponentInstanceName

Components of a PLCnext Technology application can be either of these:

  • Programs
  • PROFINET controllers (e.g., Arp.Io.PnC or Arp.Io.PnD)
  • the IEC 61131-3 runtime (e.g., Arp.Plc.Eclr.EclrComponent)
  • a C++ application, (e.g., Counters.CppCounterComponent)

Names that start with Arp... are specified by the PLCnext Technology firmware.
The names of the C++ applications are specified by the user during instantiation.
Exception: When instantiating C++ or Matlab® Simulink® programs in PLCnext Engineer, the name of the component instance is specified by PLCnext Engineer.

There can be one or multiple instances of each component.

In the case of a PROFINET device, it is possible to gain access by entering the node ID (for more information, please refer to the online help within PLCnext Engineer).

  • Enter the name of the instance here.

GroupName

With program instances, the name is specified. The name of a program instance must be unique within the controller.

  • Enter the name of the program instance.

A local bus device is defined based on the position of the device in the local bus. Position numbering starts with digit 0.

  • Enter the position number instead of GroupName.

VariableName

Enter the name of the IN and OUT ports or the process data here, depending on the component type.

 

Examples:

  • Program port: 
    startPort/endPort="Namespace.ComponentInstance/ProgramInstanceA.Release"
  • Fieldbus port:
    startPort/endPort="Arp.Io.AxlC/0.~DO16"
  • Component port:
    startPort/endPort="ComponentInstance/Release"

There are various types of ports that can be used for data exchange. The port concept can be used with the following process data:

Description

Code with example

Data of the runtime system of the controller

Enter the name of the program instance and the variable name as the port in the following format:
runtime system/program instance.variable name
(e.g.: Arp.Plc.Eclr/MainInstance.OUT_PORT_A)

You can use global variables as well as IN and OUT ports.

Data of a high-language project on the controller

Enter the name of the program instance as the port and the variable name in the following format (in accordance with the format in the *.acf.config file):
library name.component instance/program instance.variable name
(e.g.: CppCounterLibrary.CppCounterComponent-1/CppCounterProgram1.IP_CppEnable)

PROFINET process data

Enter the name of the PROFINET controller as the port and the process data name in the following format:
PROFINET Controller/Node-ID.process data name
(e.g.: Arp.Io.PnC/46.~DI8)

Local bus process data

Enter the name of the local bus controller as the port and the process data name in the following format:
Local bus controller/module position.process data name
(e.g.: Arp.Io.AxlC/0.~DO8)

The cycle for updating system variables can also be configured. Resource-global variables (IEC 61131-3) can be connected with fieldbus variables or variables of other ARP components. As these are connections of component-global variables, the events of a permanently defined task (update task) are used for the cyclic update of variable values. You can configure the update time in PLCnext Engineer:

  • Open the respective node in the PLANT area for this.
  • From the Update task drop-down list in the Settings editor, select the desired update task:

PLCE_UpdateTask.png

You can select an update task for the following variables:

Component

Variables

component tag (config file)

Controller

ESM system variables

Arp.Plc.Esm

HMI web server

HMI system variables

Arp.Services.Ehmi

Axioline

  • Axioline system variables
  • Global variables linked to I/O

Arp.Plc.AxlC

INTERBUS

  • INTERBUS system variables
  • Global variables linked to I/O

Arp.Io.IbM

PROFINET

  • PROFINET device system variables
  • PROFINET controller system variables
  • GlobVars linked to I/O

Arp.Io.PnD

Arp.Io.PnC

SPNS

Safety and PROFIsafe system variables

Arp.Services.SpnsProxy

 

If you do not explicitly select a task for a component, the Globals task is used with a cycle time of 50 ms (default)

 

Note: GLOBALS task update behavior

If no update task is selected that triggers the update cycle, the GLOBALS task is used (low priority and update rate of 50 ms). You can set one update task each for the groups fieldbusses, the ESM system variables and the system variables of the web server (PLCnext Engineer) HMIs.

 

The settings made in PLCnext Engineer  are saved to a *.gds.config file and downloaded to the controller.

The assignment of variables to an update task is made between the <ComponentTaskRelations> and </ComponentTaskRelations> tags.

 

See the following example excerpt from a *.gds.config file:  here, the IN and OUT ports of an application are assigned to each other:

<?xml version="1.0" encoding="utf-8"?>
<GdsConfigurationDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" schemaVersion="1.0" xmlns="http://www.phoenixcontact.com/schema/gdsconfig">
<ComponentTaskRelations>
   <ComponentTaskRelation component="Arp.Plc.Esm" task="Cyclic100" />
   <ComponentTaskRelation component="Arp.Plc.AxlC" task ="Task100ms" />
   <ComponentTaskRelation component="Arp.Services.SpnsProxy" task ="Task100ms" />
</ComponentTaskRelations>
<Connectors>
   <Connector startPort="Arp.Plc.Eclr/SquareWave.OP_Signal1" 
    endPort="CPP_Counter.CPP_Counter_C-1/CPP_Counter.IP_CppEnable_bit" />
   <Connector startPort="Arp.Plc.Eclr/SquareWave.OP_Signal2" endPort="Arp.Plc.Eclr/PCWE_Counter.IP_CounterEnable" />
   <Connector startPort="Arp.Plc.Eclr/SquareWave.OP_Signal2" endPort="Arp.Io.PnC/20.OUT00" />
   <Connector startPort="Arp.Io.PnD/PND_S1_PLC_RUN" endPort="Arp.Plc.Eclr/PND_S1_PLC_RUN" />
   <Connector startPort="Arp.Io.PnD/PND_S1_VALID_DATA_CYCLE" endPort="Arp.Plc.Eclr/PND_S1_VALID_DATA_CYCLE" />
   <Connector startPort="Arp.Io.PnD/PND_S1_OUTPUT_STATUS_GOOD" endPort="Arp.Plc.Eclr/PND_S1_OUTPUT_STATUS_GOOD" />
   <Connector startPort="Arp.Io.PnD/PND_S1_INPUT_STATUS_GOOD" endPort="Arp.Plc.Eclr/PND_S1_INPUT_STATUS_GOOD" />
   <Connector startPort="Arp.Io.PnD/PND_S1_DATA_LENGTH" endPort="Arp.Plc.Eclr/PND_S1_DATA_LENGTH" />
   <Connector startPort="Arp.Plc.Eclr/PND_S1_OUTPUTS" endPort="Arp.Io.PnD/PND_S1_OUTPUTS" />
   <Connector startPort="Arp.Io.PnD/PND_S1_INPUTS" endPort="Arp.Plc.Eclr/PND_S1_INPUTS" />
   <Connector startPort="Arp.Io.AxlC/AXIO_DIAG_STATUS_REG_HI" endPort="Arp.Plc.Eclr/AXIO_DIAG_STATUS_REG_HI" />
   <Connector startPort="Arp.Io.AxlC/AXIO_DIAG_STATUS_REG_LOW" endPort="Arp.Plc.Eclr/AXIO_DIAG_STATUS_REG_LOW" />
   <Connector startPort="Arp.Io.AxlC/AXIO_DIAG_PARAM_REG_HI" endPort="Arp.Plc.Eclr/AXIO_DIAG_PARAM_REG_HI" />
   <Connector startPort="Arp.Io.AxlC/AXIO_DIAG_PARAM_REG_LOW" endPort="Arp.Plc.Eclr/AXIO_DIAG_PARAM_REG_LOW" />
   <Connector startPort="Arp.Io.AxlC/AXIO_DIAG_PARAM_2_REG_HI" endPort="Arp.Plc.Eclr/AXIO_DIAG_PARAM_2_REG_HI" />
   <Connector startPort="Arp.Io.AxlC/AXIO_DIAG_PARAM_2_REG_LOW" endPort="Arp.Plc.Eclr/AXIO_DIAG_PARAM_2_REG_LOW" />
   <Connector startPort="Arp.Io.AxlC/AXIO_DIAG_STATUS_REG_PF" endPort="Arp.Plc.Eclr/AXIO_DIAG_STATUS_REG_PF" />
   <Connector startPort="Arp.Io.AxlC/AXIO_DIAG_STATUS_REG_BUS" endPort="Arp.Plc.Eclr/AXIO_DIAG_STATUS_REG_BUS" />
   <Connector startPort="Arp.Io.AxlC/AXIO_DIAG_STATUS_REG_RUN" endPort="Arp.Plc.Eclr/AXIO_DIAG_STATUS_REG_RUN" />
   <Connector startPort="Arp.Io.AxlC/AXIO_DIAG_STATUS_REG_ACT" endPort="Arp.Plc.Eclr/AXIO_DIAG_STATUS_REG_ACT" />
...

 

 


• Published/reviewed: 2024-10-30   ☀  Revision 074 •