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;