Frage zu lokaler Deklaration

jessymindy

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allemal,

Warum ist das (nicht) so ?

Ich habe folgendes Programm in FC 1 geschrieben
U E 0.0
= L 0.0
U L 0.0
= A 1.0

In FC 2 steht
U L 0.0
= A 1.1

Wenn ich jetzt E 0.0 setze ist A 1.0 und A 1.1 hoch
L 0.0 ist doch eine lokale Deklaration, warum wird A1.1 in FC2 dann auch hoch?

Vielen dank schon im voraus für eure Hilfe. Gruß, Mike
 
Weil die Daten nur Local im Baustein für einen Zyklus verwendbar sind.

Im Fc2 lädst Du den Inhalt von L0.0, dieser ist z.B. auf 1, wenn Du wie hier nur diese zwei Bausteine verwendest, er kann aber einen beliebigen Zustand annehmen.

Lokale Variabeln in den Bausteinen müßen immer initialisiert bzw. beschrieben werden bevor diese im Programmbaustein abgefragt werden !
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jabba,
Danke für Deine schnellen Antwort, nur verstehe ich es immer noch nicht.
Der zustand von L 0.0 aus FC1 dürfte in FC2 doch überhaupt nicht bekannt sein
weil dieser ja lokal in FC1 ist.
In meinem Beispiel sollte er doch den zustand 0 müssen haben.

Gruß, Mike
 
Nein, der Lokaldatenbereich ist immer derselbe Speicherbereich, egal in welchen Baustein. L 0.0 belegt immer dieselbe Speicherzelle.
 
Der Lokaldatenbereich wird von der CPU zur Laufzeit je Prioritätsklasse dynamisch zugewiesen.

Wenn du L0.0 im FC2 also nur lesend verwendest, dann ist der Zustand im FC2 per Definition der Lokaldaten reiner Zufall,
die Anmerkung von "190B" ist allerdings nicht korrekt, wie man im folgenden FAQ sieht.

Als Beispiel zu Untermauerung sei gesagt, das man in der Praxis nicht wenig Programme findet,
wo Flankenmerker also z.B. "FP L0.0", im Lokaldatenbereich liegen, und diese Programme oftmals
viele Jahre funktionieren, bis halt irgendwer an einer völlig anderen Stelle was ändert.

Hier etwas Input von Siemens:
http://support.automation.siemens.com/WW/view/de/291495

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, der Lokaldatenbereich ist immer derselbe Speicherbereich, egal in welchen Baustein. L 0.0 belegt immer dieselbe Speicherzelle.

Na, dann bin ich mal auf deine Antwort gespannt, wie es "S" schafft, mit einem Pointer im Speicherbereich V die vorherigen Lokaldaten (Code b#16#87) eines vorangegangenen Bausteins adressieren zu können, obwohl die gem. deinem Zitat überschrieben werden :confused:
 
Sollte nicht vielmehr darauf hingewiesen werden, dass es Sinn macht die Bezeichnung Lokal zu beachten?
Der lokale Stack ist ein Speicherbereich, der überschrieben wird, wenn es notwendig ist.
Der Bereich ist nicht geschützt, daher kann es so funktionieren wie es der TE schreibt, muss es aber nicht.


bike

bte LOkal ist nicht nur die Kneipe um die Ecke ;-)
 
Der Lokaldatenbereich wird von der CPU zur Laufzeit je Prioritätsklasse dynamisch zugewiesen.

Wenn du L0.0 im FC2 also nur lesend verwendest, dann ist der Zustand im FC2 per Definition der Lokaldaten reiner Zufall,
die Anmerkung von "190B" ist allerdings nicht korrekt, wie man im folgenden FAQ sieht.
[/QOUTE]

Hallo MSB,

Danke für das Richtigstellen und den Link.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstmal ein danke an alle für eure antworten.
Habe ich es jetzt richtig verstanden das
Solang ich diesen Speicherbereich nicht überschreibe er seinen Wert behält.
Rufe ich in FC2 die gleiche Speicherzelle ( L0.0) auf und frage diese nur ab, diese den zustand aus FC1 zugewiesen bekommt.

……..Richtig ? Gruß, Mike
 
Erstmal ein danke an alle für eure antworten.
Habe ich es jetzt richtig verstanden das
Solang ich diesen Speicherbereich nicht überschreibe er seinen Wert behält.
Rufe ich in FC2 die gleiche Speicherzelle ( L0.0) auf und frage diese nur ab, diese den zustand aus FC1 zugewiesen bekommt.

……..Richtig ? Gruß, Mike

Es kann sein oder auch nicht.
Doch warum über so etwas nachdenkst, verschliesst sich meinem Verständnis.
Willst du ein Programm das immer funktioniert oder willst du spielen? :rolleyes:


bike
 
Na, dann bin ich mal auf deine Antwort gespannt, wie es "S" schafft, mit einem Pointer im Speicherbereich V die vorherigen Lokaldaten (Code b#16#87) eines vorangegangenen Bausteins adressieren zu können, obwohl die gem. deinem Zitat überschrieben werden :confused:

Es ist nicht der vorangegangene Baustein, sondern der aufrufende Baustein.
Die Lokaldaten des aufgerufenden Bausteins werden in den Stack on Top gepackt. Wenn dieser abgearbeitet ist, hat der aufrufenden Baustein ja noch seine Lokaldaten.

p.s. jetzt sehe ich grade, dass es gar nicht deine Frage ist...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, der Lokaldatenbereich ist immer derselbe Speicherbereich, egal in welchen Baustein. L 0.0 belegt immer dieselbe Speicherzelle.

Das mit den "Lokaldaten" bezog sich auf den unterstrichenen Teil des Zitats von 190B, dies ist schlichtweg falsch, wie Manuel hier bereits bemerkt und mit seinem Link untermauert hat:

...

die Anmerkung von "190B" ist allerdings nicht korrekt, wie man im folgenden FAQ sieht.

http://support.automation.siemens.com/WW/view/de/291495

Mfg
Manuel

Trotzdem Danke für den Hinweis auf die leider schlechte Wortwahl wie vorherig, vorangegangen oder aufrufend !:cool:
 
Zuletzt bearbeitet:
Zurück
Oben