Nochmal Lokaldaten

Ralle

Supermoderator
Teammitglied
Beiträge
14.410
Punkte Reaktionen
3.378
Zuviel Werbung?
->Hier kostenlos registrieren
Wenn ich in einem FB statische und temporäre Variablen definiere und dann den Befehl L LW40 ausführe, woher werden die Daten genommen ?


Hier ein Ausschnitt der Deklaration:

Code:
VAR
  Stepcounter : BYTE ;	
  Anlauf_Stat : BOOL ;	
  Aktiv_Stat : BOOL ;	
  fn_Busy : BOOL ;	
  fn_Error : INT ;	
  Res01 : ARRAY  [0 .. 6 ] OF BYTE ;	
  Send : STRUCT 	
   Zustand : "PNOZMULTI_O";	
   Tabellennummer : BYTE ;	
   Segmentnummer : BYTE ;	
   Byte_0 : BYTE ;	
   Byte_1 : BYTE ;	
   Byte_2 : BYTE ;	
   Byte_3 : BYTE ;	
   Byte_4 : BYTE ;	
   Byte_5 : BYTE ;	
   Byte_6 : BYTE ;	
   Byte_7 : BYTE ;	
   Byte_8 : BYTE ;	
   Byte_9 : BYTE ;	
   Byte_10 : BYTE ;	
   Byte_11 : BYTE ;	
   Byte_12 : BYTE ;	
   Byte_13_reserviert : BYTE ;	
  END_STRUCT ;	
  
  .
  .  mehrere Struct-Var (ca. 180 Byte)
  .
  	
END_VAR
VAR_TEMP
  Ret_Val_Temp : INT ;	
END_VAR

Eigentlich gibt es das LW 40 nicht, oder? Es sei denn, die statischen Variablen liegen auch im Lokaldaten-Bereich ???

Es gibt aber keine Fehlermeldung etc., also keine Prüfung, ob der FB überhaupt diesen Bereich soweit belegt ?


Gruß Ralle !
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Vom Word ab Byte [40+Position des Stackpointers] des Stacks :)
Es hindert dich keiner daran, einen Baustein aufzurufen, der dahin schreibt und einen nächsten, der davon iiest.
Um es gut zu verstehen, probier mal fogendes:
FC1
L KF1
L LW0
L KF2
L LW2
L KF3
L LW2
L KF4
L LW2

FC3
L KF11
L LW0
L KF12
L LW2
L KF13
L LW2
L KF14
L LW2

FC2
L LW0
T DB1DW0
L LW2
T DB1DW2
L LW4
T DB1DW4
L LW6
T DB1DW6

FC2
L LW0
T DB1DW0
L LW2
T DB1DW2
L LW4
T DB1DW4
L LW6
T DB1DW6

FC4
Temp word in
L LW0
T DB2DW0
L LW2
T DB2DW2
L LW4
T DB2DW4
L LW6
T DB2DW6

nun kannst du FC1 oder 3 aufrufen, danach FC2 (ohne Parameter) oder FC4 (mit einem Parameter) und durch beobachten der Werte in DB1 und DB2 sehen, wo deine Daten bleiben.
 

man_of_luck

Member
Beiträge
22
Punkte Reaktionen
1
@Ralle

L LW40 - temporaere Variable, wird aus dem lokalen Stack geladen, Variable liegt im lokalen Speicher, der dem Funktionsbaustein fuer die Zeit seiner Bearbeitung zugeordnet ist und nach der Bearbeitung des FB's geloescht und wieder anderen Bausteinen zur Verfuegung gestellt wird.

L DIW40 -statische Variable, wird aus dem jeweiligen Instanz-Datenbaustein geladen, der dem FB zugeordnet ist.. :)

Viel Spass beim Ausprobieren..:)
 
Oben