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;