Problem mit S7 Lokalvariablen

Zuviel Werbung?
-> Hier kostenlos registrieren
Zu 1:
Der OB35 dürfte einfach der Problematischte Baustein sein, weil er im Normalfall einfach am häufigsten aufgerufen wird.

Zu 2:
Woher weißt du das er einen anderen (getrennten) Lokaldatenstack hat, kannst du das mit Literatur belegen?

Zu 3:
Davon war hier auch bisher nicht die Rede, die Rede war hier mehr davon, das die Lokaldaten nicht mal den einen Aufruf überlebt haben,
vom nächsten ganz zu schweigen.

Zu 4:
Das hängt davon ab, was "außen" am IN bzw. OUT steht.
Wenn da z.B. Merker, Ausgänge, Eingänge stehen,
dann ist jede IN oder OUT Variable praktisch eine IN/OUT Variable.

Grundsätzlich würde ich derartige Probleme auch auf "lausige" Programmierung zurückführen,
ich persönlich hatte jedenfalls noch kein Probleme.
Sollte das aber unter gewissen (noch zu klärenden) Umständen nicht so sein, dann würde ich das
als größten Bock / Bug bezeichnen der jemals in Step7 entdeckt worden ist.

Mfg
Manuel
 
2) Andererseits läuft jeder dieser anderen OBs in einer anderen Prioebene und hat somit seinen eigenen Lokaldaten-Stack (ok, manche OBs laufen in der gleichen Prio-Ebene, können sich dann aber nicht gegenseitig unterbrechen wie z.B. OB81 bis OB87 bei der 318-2AJ00 auf Prio 25 laufen)
Es gibt nur einen L-Stack, wo pro Baustein-Aufruf Speicher reserviert wird
Aus der Siemens FAQ
Die L-Stack Adressierung beginnt immer bei Adresse "0”
Für jeden Baustein werden auf dem L-Stack Bytes reserviert, genau so viel, wie dieser an statischen bzw. Lokaldaten besitzt.
Wird ein Baustein beendet, so wird dessen Bereich wieder freigegeben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Step7-Onlinehilfe "Lokaldaten-Stack" schrieb:
...Die CPU besitzt einen begrenzten Speicher für die temporären Variablen (Lokaldaten) gerade bearbeiteter Bausteine. Die Größe dieses Speicherbereichs, des Lokaldaten-Stacks, ist CPU-abhängig. Der Lokaldaten-Stack wird zu gleichen Teilen unter den Prioritätsklassen aufgeteilt (Voreinstellung). Das bedeutet, jede Prioritätsklasse verfügt über einen eigenen Lokaldatenbereich. Damit ist gewährleistet, dass auch hochpriore Prioritätsklassen und ihre zugeordneten OBs Platz für ihre Lokaldaten zur Verfügung haben...


Gruß, Onkel
 
Entscheidend für den Lokaldatenbereich ist doch, dass jede Prioritätsklasse ihren eigenen Bereich hat - egal ob das nun aus einem oder verschiedenen Lokaldatenstacks stammt. Jedweder Versuch aus dem eigenen Bereich herauszugreifen wird durch die CPUs auch sehr deutlich mit einem OB121 (der läuft dann in der gleichen PrioKlasse) abgestraft.
Das von Onkel Dagobert zitierte Dokustück gilt so für die 300er (außer 318-2AJ00). Die verfügbare Größe findet sich in den OP-Listen und betrug früher meistens 256 Byte, bei den neueren CPUs 510 Byte je Priolevel, bei 318 und 400ern ist die Größe über die HW-Konfiguration einstellbar.
 
Zurück
Oben