Lokaldatenbereich L: Darf der benutzt werden vom Anwender?

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Zuviel Werbung?
->Hier kostenlos registrieren
Hi Leute,

immer wieder sehe ich bei einem Kollegen, das er die Lokaldaten vergewaltigt. Also:
Code:
 L     LB     0
U L0.0
usw.
Ist das überhaupt legitim? Oder chrashed das irgendwann unter umständen mal mit dem System, welches ja diesen Bereich für die Wandlung von FUP/KOP in AWL nutzt.?

Ich nutze diese nie. Man kann ja noch nicht mal eine Symbolik hinterlegen.

Gruß pt
 
OP
P

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Wenn wir dann gerade dabei sind, wer kennt denn "VL" (Vorgänger-Lokaldaten des aufrufenden Bausteins)

Kann ich da also auf die Lokaldaten eines FCs zurückgreifen, aus dem zum Beispiel ein FB aufgerufen wurde?

:?: pt
 

Markus

Administrator
Teammitglied
Beiträge
5.272
Punkte Reaktionen
1.305
in den lokaldaten steht das gleiche wie in den temp variablen.

hast du zb eine temp variable #plc_tippser als word am anfang des temp bereiches deklariert, dann kannst du auf diese im programm mit #plc_tippser oder mit LW 0 zugreifen.

man sollte aber immer bei der symbolischen adressierung bleiben, da es sonst zu verschiebungen kommt wenn variablen eingefügt werden....

wobei der simatic manager eine warnung ausgibt wenn man variablen einfügen/löschen will und bereits absolut auf den lokaldatenbereich zugegriffen wird.


ich finde die funktion ganz praktisch zum basteln von anypointern oder date_time.

du legst die anyvariable die einen aufgerufenen baustein einen pointer übergibt als temp an, und beschreibst die einzelen bytes in ihr mit LB 0...
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.410
Punkte Reaktionen
3.378
Die kann man benutzen, manchmal kommt man nicht drumherum, wenn du z.Bsp ein Word an einen FC übergibst und dann ein bestimmtes Bit benötigst ist der Zugriff über U L0.0 am einfachsten. Wenn du immer AWL programmierst, kann auch nichts durcheinandergeraten, wenn du FUP oder KOP verwendest heißt es aufpassen beim Einfügen einr neuen Funktion, da hier u.U. Lokaldaten als Platzhalter und Zwischenspeicher verwendet werden, evtl. mußt du dann deine Lokaldaten-Zugriffe korrigieren. Immer korrigieren mußt du, wenn du neue Lokaldaten definierst, dann wird alles danach stehende nach unten verschoben! Ich finde auch, es ist besser die definierten Variablen zu benutzen.

Was wirklich grausam ist, ist das Verändern von statischen Variablen eines Instanz-DB's aus einem andern Baustein heraus, zum totsuchen :x !

Von VL hab ich noch nichts gehört, mal testen, aber dann wirds mit dem Wiederfinden im Programm echt kriminell ! 8)

Gruß Ralle !
 
A

Anonymous

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
nur indirekt

Hallo Tippser,

Zugriff auf die Lokaldaten des Vorgängers (V) hast du nur indirekt über Pointer und Adressregister. Du kannst z.Bsp. eine Lokalvariable als Pointer übergeben und dann auf die Lokaldaten des aufrufenden Bausteins adressieren. Ein direkter Zugriff wie "L VW10" ist nicht möglich. Prinzipiell könnte man sich den Pointer auch selbst in einem DW zusammenstellen, wäre aber bei Veränderung des Lokaldatenbereiches auch wieder strafbar.



Code:
      L     P##P1                       //IN-Pointer
      LAR2  
      L     W [AR2,P#0.0]
      T     #TEMP_INT
      AUF   DB [#TEMP_INT]
      L     D [AR2,P#2.0]
      LAR2  
      L     W [AR2,P#6.0]

Meinst du das?


Gruß, Onkel
 

Balou

Well-known member
Beiträge
221
Punkte Reaktionen
0
Moin

aber Vorsicht man hat bei Voller schachtelungstiefe nur 256 byte an Lokaldaten zur Verfügung (zumindest bei der 300) .
Bei der 400 waren es 512 byte wenn ich mich recht endsinne.

Ich nutze die Dinger immer als Schmiermerker da muss ich dann keine Merker verbraten

MfG Balou
 
OP
P

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Das mit den Lokaldaten gefällt mir gar nicht.
Gerade habe ich das System mal geärgert:
Beschreibung:

Ihre eingegebene Deklarationszeile aus dem VAR_TEMP kollidiert mit einem absoluten Zugriff auf den L-Stack im Programmrumpf des aktuellen Bausteins. In Ansicht AWL könnte das bedeuten, daß vom KOP/FUP Compiler angelegte compiler-interne Lokaldaten zu Anwender-Lokaldaten werden. Dann ist die Umschaltung in Sicht KOP/FUP nicht mehr möglich.

Behebung:

Wenn Sie nur AWL-Sicht interessiert, können Sie diese Meldung ignorieren.
Als KOP/FUP Programmierer sollten Sie solche Deklarationen nur in Ansicht KOP/FUP durchführen.

Also, die L x packe ich nicht an. Es wird ja auch nicht automatisch auf den symbolischen Namen zugegriffen, macht also auch keinen übersichtlichen Sinn. Mit den Temp, was ja das gleiche ist, werde ich weiter arbeiten, muss aber aufpassen, das der FUP/KOP Compiler mir nicht in die Quere kommt.

Gruß üt
 
OP
P

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
Zuviel Werbung?
->Hier kostenlos registrieren
Mit dem VL das habe ich zufällig im Operationslistenbuch für S7 300 (EWA 4NEB 710 6070-01b) Seite 16 gesehen, konnte es aber noch nicht nachvollziehen wie es geht. Gast hat ja das schon geschrieben.

Gruß pt
 

Similar threads

Oben