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.
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 (& ) |
& |
Single quote (' ) |
' |
Double quote (" ) |
" |
Less than (< ) |
< |
Greater than (> ) |
> |
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 |
|
Components of a PLCnext Technology application can be either of these:
Names that start with 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).
|
|
With program instances, the name is specified. The name of a program instance must be unique within the controller.
A local bus device is defined based on the position of the device in the local bus. Position numbering starts with digit
|
|
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: 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): |
|
PROFINET process data |
Enter the name of the PROFINET controller as the port and the process data name in the following format: |
|
Local bus process data |
Enter the name of the local bus controller as the port and the process data name in the following format: |
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:
You can select an update task for the following variables:
Component |
Variables |
|
Controller |
ESM system variables |
|
HMI web server |
HMI system variables |
|
Axioline |
|
|
INTERBUS |
|
|
PROFINET |
|
|
SPNS |
Safety and PROFIsafe system variables |
|
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" />
...