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

prg_example

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;