# SPS

Nach Hochlauf der Steuerung erhält das SPS-Run-Time-System Zugriff auf die gemeinsamen Speicherbereiche für V.E.-Variablen zwischen CNC und SPS. Diese werden in kanalspezifische und einen globalen Speicherbereich unterschieden.

gpVE[iChannelndex]r

gpVEGlob

Um die Nachbildung des Speicherbereiches für die SPS zu vereinfachen wird empfohlen diesen nach Anlegen mit dem #EXPORT VE –Befehl zu exportieren.
Weitere Informationen siehe [FCT-C22// Beschreibung]

## Manuelles Nachbilden der Variablenstruktur in der SPS

Das nachfolgende SPS-Beispiel zeigt, wie die V.E.-Variablen durch manuelles Nachbilden der Variablenstrukturen in der SPS verwendet werden können.

## Programmierbeispiel

Zugriff V.E.-Variablen in der SPS

Definition der Variablenstrukturen für die V.E.-Variablen:

TYPE VECTOR_T :

STRUCT

x : LREAL;

y : LREAL;

z : LREAL;

END_STRUCT

END_TYPE

TYPE TARGET_POINT_T :

STRUCT

point : VECTOR_T;

valid : BOOL;

END_STRUCT

END_TYPE

TYPE TRAJEKTORIE_T :

STRUCT

nbr_points : DINT;

name : STRING(127);

points : ARRAY [0..9] OF TARGET_POINT_T;

END_STRUCT

END_TYPE

Definition der Strukturen für den kompletten, belegten V.E.-Speicherbereich:

TYPE VE_GLOBAL:

STRUCT

var_global_1 : DINT;

END_STRUCT

END_TYPE

TYPE VE_CHAN_1:

STRUCT

var_chan_1 : DINT;

array_chan_1 : ARRAY [0..19] OF INT;

name : STRING(127);

Trajektorie : TRAJEKTORIE_T;

END_STRUCT

END_TYPE

PLC-Programm zum Zugriff auf die V.E.-Variablen von Kanal 1:

PROGAM V_E

VAR

p_ve_chan_1 : POINTER TO VE_CHAN_1;

END_VAR

(* Kanal 1 mit Index 0 - gpVECh[0]*)

p_ve_chan_1 := ADR (gpVECh[0]^.ext_var32[0]);

IF (p_ve_chan_1^.name = ‚’)

THEN

p_ve_chan_1^.trajektorie.name := ‚My Path!’;

p_ve_chan_1^.trajektorie.nbr_points := 2;

p_ve_chan_1^.trajektorie.points[0].valid := TRUE;

p_ve_chan_1^.trajektorie.points[0].point.x := 100.0;

p_ve_chan_1^.trajektorie.points[0].point.y := 200.0;

p_ve_chan_1^.trajektorie.points[0].point.z := 300.0;

p_ve_chan_1^.trajektorie.points[1].valid := TRUE;

p_ve_chan_1^.trajektorie.points[1].point.x := 200.0;

p_ve_chan_1^.trajektorie.points[1].point.y := 400.0;

p_ve_chan_1^.trajektorie.points[1].point.z := 600.0;

END_IF;