Step 7 Startwert Temporäre Variablen

Januar

Level-2
Beiträge
687
Reaktionspunkte
289
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Gemeinde,

ich habe eine Frage zum Verhalten von temporären Variablen in Step 7 Classic. In einer S7-414, deren Programm ich in eine S7-1515 migrieren soll, habe ich folgende wilde Konstellation gefunden:

1765293681408.png

HM1 ist als temporäre Variable (Bool) definiert. Mir ist bewusst, dass eine ähnliche Konstruktion "früher" (TM) genutzt wurde, um ein Dauer-TRUE zu erzeugen, allerdings fehlt hier die dafür übliche Negation des zweiten ODER-Eingangs.

Im aufrufenden Baustein ist die Adresse von HM1 ebenfalls mit HM1 belegt und dort auch richtig zugewiesen:
1765293882197.png

Meine Frage an der Stelle ist jetzt:
Wird der Zustand aus dem aufrufenden Baustein "vererbt", da es sich um die gleiche Speicheradresse handelt (L0.0)? Oder gibt es absolut keinen Weg, den Zustand von HM1 im FC147 zu bestimmen?

Gruß, Januar
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Alle Bausteine teilen sich den TEMP-Speicher, adressieren den aber nicht unbedingt gleich (abhängig von Parameterübergaben und Schachtelungstiefe und Anzahl/Größe der TEMP-Variablen und ...). L0.0 in einem Baustein ist nicht dieselbe Adresse wie L0.0 in einem anderen Baustein.
Im TEMP-Speicher steht das drin, was irgendein Baustein da vorher hineingeschrieben hat - also prinzipiell unbestimmter Inhalt, quasi "zufällig". Mit viel Glück kann das das sein, was ein Baustein beim letzten Durchlauf selbst hineingeschrieben hat - daher fallen solche Programmierfehler oft nicht auf, sondern erst wenn irgendwas am Programm geändert wird ...

habe ich folgende wilde Konstellation gefunden:

Anhang anzeigen 92957
Wie du schon erkannt hast: der Code im Bild ist sinnfrei und bewirkt gar nichts - vermutlich ein Flüchtigkeitsfehler? Jedenfalls bewirkt er nicht, dass #HM1 danach garantiert TRUE ist.
Wenn man ein lokales Always-TRUE haben will, reicht im Grunde ein
Code:
UN #tmpAlwaysTRUE
S  #tmpAlwaysTRUE
 
Noch als Addon: Den TEMP Speicher teilen sich alle Bausteine, die in der gleichen Priorität laufen. Wenn ein höherpriorer OB einen niederprioren OB unterbricht dann hat dieser seinen eigenen TEMP Speicher. Ändert aber niggs an der Aussage von PN/DP, der Inhalt ist von dem vorausgegangenen Bausteinstack mit seinen Lokaldatenzugriffen abhängig. Also immer schön initialisieren.
 
Zurück
Oben