TIA Misteriösitäten im Bausteinkopf eines FC bei Temp-Variable

Outrider

Level-1
Beiträge
745
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe eine 1515-F CPU
in der befindet sich ein FC mit Temp-Variablen.
Habe folgendes Problem, die Bool-Variable mit dem Offset 10.2 im Kopf ist auf True gesetzt ohne dass im Programm diese Variable bearbeitet wird, den es gibt gar kein Code in diesem FC.
Frage, wer setzt diese Variable, und wie kann ich das ausfindig machen?
Kann man nicht irgendwie Generell durch einen Befehl alle Temp-Werte auf Null setzen bevor man in den FC einsteigt ?
Ich könnte sicherlich per Hand jeden Wert Null-setzen !
Danke
 

Anhänge

  • temp.GIF
    temp.GIF
    115,1 KB · Aufrufe: 62
Zuviel Werbung?
-> Hier kostenlos registrieren
Was mich bei TIA und vor allem bei den 1500er wundert dass das so ist, dabei ist doch alles "durchdachter" und mann kann nicht mal eben.... was auch immer (Pfuschen)
 
Das ist aber auch bei anderen SPS-Herstellern so, das nicht initilisierte Variablen "Zufallswerte" enthalten. Die Temp-Variablen sollen ja temporäre (Daher der Name) Zwischenergebnisse enthalten und die überschreiben dann ja eh den bisherigen Inhalt, so das es egal ist, ob und was da vorher drin stand.

Von irgendwas mit Internetzugang gesendet
 
Gefährlich wirds aber wenn man die Temp-Variable direkt abfragt ohne sie vorher gesetzt zu haben und damit z.B. ein Ventil steuert.

Ja, dies ist ein bekanntes Verhalten, auch schon zu Step 7 Zeiten. Daher wie bereits weiter oben beschrieben, wenn man diese Temp Variablen
nutzen möchte, zuerst Werte zuweisen oder rücksetzen.
 
Wobei es bei 1500 zwei Fälle gibt...

Bei "optimierten" Bausteinen wird der L-Stack sehr wohl mit 0 initialisiert.
Bei "nicht optimierten" Bausteinen wird das Verhalten der 300/400 nachgestellt und nicht initialisiert... Schöner Blödsinn....

Der Lokaldatenspeicher ist ein einfacher Stack-Speicher der bei 300/400 nicht initialisiert wird, deshalb bekommt man dort quasi die Werte die andere Bausteine dort abgelegt haben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wobei es bei 1500 zwei Fälle gibt...

Bei "optimierten" Bausteinen wird der L-Stack sehr wohl mit 0 initialisiert.
Bei "nicht optimierten" Bausteinen wird das Verhalten der 300/400 nachgestellt und nicht initialisiert... Schöner Blödsinn....

Hat man vermutlich aus kompatiblitätsgründen beibehalten. Gibt sicher Programme wo der Programmierer besonders gewitzt sein wollte und sich auf den inhalt des Lokaldatenstacks verlässt. Also in einem Baustein Temporäre Variablen beschreibt und im nächsten Baustein genau die Daten erwartet.

mfG René
 
Gefährlich wirds aber wenn man die Temp-Variable direkt abfragt ohne sie vorher gesetzt zu haben und damit z.B. ein Ventil steuert.
Dann nutzt man sie aber auch falsch und das Problem hat man dann, wie schon erwähnt, auch bei anderen SPS-Herstellern. Nochmals, eine Temp-Variable ist zur Aufnahme von Zwischenergebnissen dar, und Dein Beispiel mit dem Ventil ist kein Zwischenergebnis, sondern je nach vorliegender Bedingung, schon am Anfang das Endergebnis und somit kein Kandidat für eine Temp-Variable.
 
Bei mir ist der Fehler aufgetreten als ich in diesem Baustein einen FB aufgerufen habe, der hatte eine INOUT Variable, und gerade diese habe ich mit einer Temp-Variable belegt, diese sollte dann paar Netzwerke später benutzt werden. :-(
Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei mir ist dieser Fehler aufgetreten, als ich einen FB aufgerufen habe der eine INOUT Variable hatte. Diese Variable wurde aus dem FC mit Temp-Variablen belegt, die dann paar Netzwerke später benutzt werden :-(
Gruß
 
Bei "optimierten" Bausteinen wird der L-Stack sehr wohl mit 0 initialisiert.
Bei "nicht optimierten" Bausteinen wird das Verhalten der 300/400 nachgestellt und nicht initialisiert... Schöner Blödsinn....
Ich meine eher, das "Schöner Blödsinn" gehört an den ersten Punkt: das eigentlich völlig unnötige generelle Initialisieren des L-Stack. Ich glaube das wurde extra eingeführt eben weil so viele Programmierer nicht wissen wie sich temporäre Variablen verhalten... das war offensichtlich ein Punkt ganz oben auf der Liste der notwendigen "Innovationen", damit jeder Idiot ;) ein Programm für eine S7-1200/1500 zusammenklicken kann.

Harald
 
Bei mir ist der Fehler aufgetreten als ich in diesem Baustein einen FB aufgerufen habe, der hatte eine INOUT Variable, und gerade diese habe ich mit einer Temp-Variable belegt, diese sollte dann paar Netzwerke später benutzt werden. :-(
INOUT heißt nunmal das der Wert zuerst gelesen wird... Wenn da dann nix gültiges drin steht...

Ich meine eher, das "Schöner Blödsinn" gehört an den ersten Punkt: das eigentlich völlig unnötige generelle Initialisieren des L-Stack...
Da bin ich eh voll bei dir. Blödsinn ist nur weil man es nicht uniform gemacht hat.
Aber da hätte man möglicherweise irgendwelche crazy KnowHow-Schutz-Temp-Übergabe-Konzepte aus Step5 Zeit zerschossen...
 
Zurück
Oben