TIA SCL Zuweisung fehlerhaft

B_Blau

Level-2
Beiträge
20
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe ein Verhalten, das ich jetzt einen Tag lang untersucht habe, aber ich kann einfach keinen Fehler finden.
Einfach erklärt wird der Wert einer Variablen eines UDTs an machen stellen des Programms falsch ausgelsen:

SCL_Fehler_2.PNG

"Modus" wird von mir nur auf 1 gesetzt. Aus irgendeinem Grund wird es aber an einigen Stellen im Programm als 2 ausgelesen. Immer dann, wenn in der Beobachtung diese drei gelb hinterlegten Fragezeichen ??? erscheinen.
Ich weiß, dass die Variable in verschiedenen CASE-Abschnitten ausgelesen wird. Wenn ich ein Trace mitlaufen lasse bleibt "Modus" jedoch jeden Zyklus immer 1.
Die gesamte UDT "#statRezept" wird nur an einer Stelle für einen Zyklus im FB geschrieben und ansonsten nur ausgelesen.
Die Variablen "tmpTestview" und "Debugger" sind nur zur fehlersuche da, um den Zustand von "Modus" an vielen Stellen im Programm sichtbar zu machen.

Das gleiche Problem hatte ich auch mit der INT "Ziel" des gleichen Static-UDT. Diese war 1, obwohl sie 2 sein sollte, also genau vertauscht. Als ich jedoch die Variable mehrmals ausgelesen habe, um den Fehler einzugrenzen, verschwand der Fehler. Das fehlerhafte Auslesen der Variable " Modus " bleibt jedoch reproduzierbar.
Es wird nur eine Instanz dieses FBs ausgeführt.

System Information: Win10, TIA V19 Upd2 lokal installiert. CPU ist eine S7-1512SP-F FW2.9 Simuliert mit PLCSIM Advanced V6 Upd1 mit WinCC Unified V19.
Auch ein Upgrade auf neue Hardware mit FW3.1 brachte keine Änderung.

Ein Test mit einer realen CPU steht noch aus, wäre aber auch keine Lösung, da wir die komplette Entwicklung mit SIMIT und PLCSIM Advanced machen müssen. Da unsere Anlagen die Größe und den Stromverbrauch unseres Firmengebäudes um ein zigfaches übersteigen würden ->Steinbruch ;)

Ich habe nur einen Beitrag gefunden mit einem Ähnlichen fehler: threads/merkw%C3%BCrdiges-verhalten-schnittstelle-out.75069/ Dort gab es auch diese gelb hinterlegten Fragezeichen und es wurde ein Optimierungsproblem des Compilers vermutet.
Aber eine statische Variable muss doch ohne Wenn und Aber immer korrekt auslesbar sein, meiner Meinung nach.

Am liebsten wäre es mir noch, wenn der Fehler bei mir läge, aber die Hoffnung schwindet immer mehr.
Ich bin für jede Anregung dankbar, wie man einen solchen Fehler beheben oder umgehen kann. Denn ein System, das anders reagiert als es programmiert wurde, ist einfach nicht akzeptabel.

Beste Grüße Steffen
 
Also ... mit dem bißchen Code und dann noch als Screenshot läßt sich gar nichts sagen.
Eine Vermutung, die ich habe ist die bedingte Verwendung des Timers in deiner Schrittkette. Was macht übrigens RESET_TIMER und was ist das ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die ganzen Aktualwerte wirken hellgrau, anders gesagt: Deine Online-Ansicht ist offenbar nicht aktuell, sondern die Wiedergabe eines früheren Durchlaufs. Kann das sein?
 
Also ... mit dem bißchen Code und dann noch als Screenshot läßt sich gar nichts sagen.
Eine Vermutung, die ich habe ist die bedingte Verwendung des Timers in deiner Schrittkette. Was macht übrigens RESET_TIMER und was ist das ?
Ja, es wird ein Timer in der Schrittkette verwendet, durch RESET_TIMER kann ich im Nächsten schritt wieder den selben Timer Jungfreudig nutzen.
So reicht mir ein Timer für die ganze Schrittkette, es kann ja nur ein Schritt gleichzeitig aktiv sein bei CASE. Hatte damit seit TIA V11 nie Probleme. Wie soll sich das auf eine Zuweisung von anderen Variable Auswirken?

Die ganzen Aktualwerte wirken hellgrau, anders gesagt: Deine Online-Ansicht ist offenbar nicht aktuell, sondern die Wiedergabe eines früheren Durchlaufs. Kann das sein?
Genau, die Schrittkette wird pro Anlagenstart einmal durchlaufen, Das geht natürlich schneller als man schauen kann. Aber so "falsch" wie man es an diesem "Nachleuchten" sehen kann wurden die Werte geschrieben.
 
Ja, es wird ein Timer in der Schrittkette verwendet, durch RESET_TIMER kann ich im Nächsten schritt wieder den selben Timer Jungfreudig nutzen.
So reicht mir ein Timer für die ganze Schrittkette, es kann ja nur ein Schritt gleichzeitig aktiv sein bei CASE. Hatte damit seit TIA V11 nie Probleme. Wie soll sich das auf eine Zuweisung von anderen Variable Auswirken?
Tja ... wenn wir dieses Thema mit all seinen Nebenwirkungen hier nicht ständig hätten würde ich dir Recht geben, So ist es aber nun, dass zumindestens ich jetzt ja auch deinen Code nicht sehen kann und von daher deine Schrittkette nicht wirklich beurteilen kann.
In jedem Fall ist es aber immer keine tolle Idee einen IEC-Timer in eine bedingte Bearbeitung zu packen - naja ... und da er sich ja irgendwie auf deine Schrittkette auswirkt kann das ja schon der Grund sein.
Vielleicht postest du ja dann doch noch mal ein bisschen Code ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wird Case 7 gerade bearbeitet in deinem Screenshot?
Wenn nicht wird die Temp-Variable nicht beschrieben und bei TIA werden die Temp Speicher ja nicht gelöscht sondern es stehen die Werte von einer vorherigen Verwendung drin.
Wenn du ne Fangschaltung machen willst dann über nen DB und nicht über Temp Variablen.
 
Wird Case 7 gerade bearbeitet in deinem Screenshot?
Wenn nicht wird die Temp-Variable nicht beschrieben und bei TIA werden die Temp Speicher ja nicht gelöscht sondern es stehen die Werte von einer vorherigen Verwendung drin.
Wenn du ne Fangschaltung machen willst dann über nen DB und nicht über Temp Variablen.
Nein, der schritt ist nur einen Zyklus aktiv. Das Array "Fehlersucher" ist ein globaler DB als Fangschaltung. Das Beobachten funktioniert aber in diesem Fall immer richtig und zeigt die Dinge genau so falsch an wie sie passieren. Egal ob mit Globaler oder Temp-Variable.

Tja ... wenn wir dieses Thema mit all seinen Nebenwirkungen hier nicht ständig hätten würde ich dir Recht geben, So ist es aber nun, dass zumindestens ich jetzt ja auch deinen Code nicht sehen kann und von daher deine Schrittkette nicht wirklich beurteilen kann.
In jedem Fall ist es aber immer keine tolle Idee einen IEC-Timer in eine bedingte Bearbeitung zu packen - naja ... und da er sich ja irgendwie auf deine Schrittkette auswirkt kann das ja schon der Grund sein.
Vielleicht postest du ja dann doch noch mal ein bisschen Code ...
Wenn dann der Timer Spinnen würde, gehe ich da mit, aber das ist nicht der Fall. Ich könnte versuchen den Fehler ohne Timer nachzustellen, aber wenn ich noch mehr Zeit mit dem Fehler verbringe, steigt mir hier jemand aufs Dach.
Die Komplette Schrittkette auf dem fehlerhaften Stand aber noch ohne extra Beobachtungsvariablen habe ich in den Anhang. Hier in den Beitrag passt sie nicht.
 

Anhänge

  • Case Schrittkette.txt
    14,5 KB · Aufrufe: 48
Wenn das eine S7-300/400 wäre, dann würde ich vermuten, dass da vielleicht am AR2 gefummelt wird. Aber bei S7-1500?

statRezept liegt im Static des FB? Liegt vor dem #statRezept in Static oder in den Übergabeparametern ein Array, wo mit zu großem Index geschrieben wird oder eine Varriable, die indirekt adressiert wird?
Ist der FB "optimiert" oder Standard-Zugriff?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@PN/DP Ja #statRezept ist ein Static des FBs. Nein #statRezept ist die erste Static-Variable des FBs.
Der UDT von #statRezept ist relativ umfangreich und beinhalten weitere UDTs welche wiederum Arrays nutzen.
Wenn ich falsche Array zugriffe machen geht die Steuerung aber eh auf Stop.
Das ganze Projekt nutzt wie voreingestellt die Optimierten Bausteinzugriffe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
.. Immer dann, wenn in der Beobachtung diese drei gelb hinterlegten Fragezeichen ??? erscheinen...
Überprüfe doch mal die Einstellung "Erweiterte Statusinformation erstellen". Falls diese Option nicht aktiv war, neu übersetzen und laden. Dann sollten zumindest schon mal diese drei Fragezeichen verschwinden.

2024-06-29_110311.jpg
 
Das aktivieren der Option "Erweiterte Statusinformation erstellen" wurde auch in dem bereits in Beitrag #1 vom OP verlinkten anderen Thema als Workaround zur Umgehung des dortigen Bugs genannt.

@B_Blau
Hast du auch schon den Siemens Support kontaktiert?
 
@PN/DP @Onkel Dagobert Danke für den Tipp. In meinem FB gibt es den Eintrag aber nicht. Das oben gezeigte sind ja nur die Voreinstellungen für neue Bausteine, aber nicht für bestehende. Oder?
 

Anhänge

  • ErweiterteFehlt.PNG
    ErweiterteFehlt.PNG
    16,9 KB · Aufrufe: 16
Zuviel Werbung?
-> Hier kostenlos registrieren
@PN/DP @Onkel Dagobert Danke für den Tipp. In meinem FB gibt es den Eintrag aber nicht. Das oben gezeigte sind ja nur die Voreinstellungen für neue Bausteine, aber nicht für bestehende. Oder?
Die Einstellung die Onkel-Dagobert zeigt findest du in den TIA-Portal-Einstellungen - Extras/Einstellungen (glaube ich).
Die Option "erweiterte Statusinformation" generieren ist eine Einstellung für den Compiler. Dabei wird bei der der Generation zusätzliche Diagnoseinformation in den Code generiert. Nach dem Anhaken musst du nur den jeweiligen Baustein (oder alles) neu übersetzen damit diese Einstellung in Effekt kommt.
 
@PN/DP @Onkel Dagobert Danke für den Tipp. In meinem FB gibt es den Eintrag aber nicht. Das oben gezeigte sind ja nur die Voreinstellungen für neue Bausteine, aber nicht für bestehende. Oder?
Richtig. Also mindestens von TIA V15.1 bis V19 steht in der Hilfe zu der Option:
Voreinstellung für neue Bausteine
Wenn Sie Bausteine neu anlegen, werden die folgenden Einstellungen als Standardwerte gesetzt. Sie können diese zu einem späteren Zeitpunkt innerhalb der Bausteineigenschaften ändern.
In den Bausteineigenschaften gibt es das Attribut "Erweiterte Statusinformation erstellen" allerdings nur für S7-300/400.
Vielleicht weil man nur da sehen kann, was der Compiler für einen Mist üersetzt? ;)
 
@PN/DP @Onkel Dagobert Danke für den Tipp. In meinem FB gibt es den Eintrag aber nicht. Das oben gezeigte sind ja nur die Voreinstellungen für neue Bausteine, aber nicht für bestehende. Oder?

Ich habe natürlich auch in der Onlinehilfe gelesen. Ich glaube, diese Funktion ist dort etwas nachlässig und missverständlich erklärt worden. Alleine die Tatsache, dass im Bezug auf die 1500 von Einstellungen in den Bausteineigenschaften geredet wird, sollte ein Hinweis auf Nachlässigkeit sein. Man hätte korrekterweise alle Varianten erklären müssen, was für Miss Lewinsky aber ziemlich viel Arbeit bedeutet hätte.

Definiere "Neuer Baustein"!
Was ist ein neuer Baustein? Wenn ich ihn in ein Projekt neu anlege? Wenn ich ihn aus einer Bibliothek in das Projekt kopiere? Wenn ich ihn aus einer externen Quelle generiere? In allen Fällen ist der Baustein neu im Projekt und muss vor der Verwendung übersetzt werden.

Ich selbst habe noch keine drei Fragezeichen auf gelben Grund gesehen, sehe nur manchmal Sternchen 🤪. Ich habe die Einstellung "Erweiterte Statusinformation erstellen" aber auch noch nie abgewählt.

An deiner Stelle würde ich es ganz einfach mal probieren und berichten.


Erweiterte Statusinformation erstellen.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also "Erweiterte Statusinformationen erstellen" ist jetzt bei mir angehakt.

Zufällig habe ich gerade einen Fehler in einem FB gesucht, der eigentlich schon fehlerfrei war.
Und schon lachen mich wieder diese drei Fragezeichen an, in einem ganz anderen FB.

Und der Fehler, der eigentlich keiner sein dürfte, war gefunden:
DreiFragezeichen.PNG
Code:
Waage.AktuelleMenge_t := (#tmpWaage↓.SollMenge_t + #tmpSollMengeLetzte) * (DINT_TO_REAL(#Waage.TONR_Volumetrisch.ET) / DINT_TO_REAL(#Waage.LaufzeitTheo));

Bei der Berechnung der aktuellen Menge war das Ergebnis immer doppelt so groß wie es sein sollte. Im DB war die "SollMengeLetzte" immer auf 0.0. In der Berechnung hat die SPS möglicherweise den Wert von "SollMenge_t" als "SollMengeLetzte" ausgelesen. Dies würde zu einem doppelt so großen Ergebnis führen.

Langsam macht es wirklich keinen Spaß mehr nur noch um Siemens-Bugs drum herum zu bauen.

Mein Workaround ist, ich ersetze die falsch ausgelesene statische Variable durch eine temporäre Variable, die ich vor dem Aufruf des Cases mit dem aktuellen Wert der statischen Variable beschreibe. Dann funktioniert es wieder.
 
Ich hab in allen meinen Projekten egal ob V13, V14, V15, V15.1, V17, V18 jemals diese Fragezeichen gesehen.. noch falsch ausgelesene statische Variablen gehabt.. da passt doch irgendwo etwas grobes nicht.

Wieso sollte SollMenege_t denn SollMengeLetzte sein?


Hier ein Beitrag aus dem Siemens Forum von 2012:
When comes to extended status information, this has nothing to do if you are able to show status information while using break points or not. Maybe you have seen when debugging, sometimes the status fields will be displayed with yellow background and question marks, For example values within an array where you use another variable for indexing. If you select to generate extended status information this statuses can be shown as well.

From Manual: Extended status information

'Allows all tags in a block to be monitored. The memory requirements of the program and execution times increase, however, with this option'.


Also from manual: about extended status and status infromation:
'The current values of the tags are displayed in the last column. If no values can be displayed for a tag, the line has a yellow background and three question marks are shown. In this case, select the "Create extended status information" check box in the properties of the block and download the block to the device again. All values are then displayed'

So my answer is that i don't see how it's possible to monitor while using break points. It seems that no block at all can be in monitoring while using breakpoints. It's a shame and i really hope that this will be possible in coming versions. (I'am using S7300 CPU and simulator). See attached file Proofing that, Tia portal wont let you to use breakpoints if manitoring active.

Ok.. erweiterte Statusinformationen hab ich noch nie verwendet gehabt.. deswegen wohl nie gesehen


Edit:
Was ist das bitte für ein Zeichen? Irgendein Sonderzeichen??? Mach das mal weg..
Screenshot 2024-07-02 104339.png

Uuuuund... mach mal die ganzen Umrechnungen nicht in der Zeile wo du zuweist sondern mach die mal schön darüber in einzelnen Zeilen mit Zuweisung zu Temp Variablen..
 
Also "Erweiterte Statusinformationen erstellen" ist jetzt bei mir angehakt.
Du meinst bei den Voreinstellungen für neue Bausteine? Und bringt es irgendwas? :unsure: Zumal es für die S7-1500 dieses Baustein-Attribut gar nicht gibt ...

erweiterte Statusinformationen hab ich noch nie verwendet gehabt.. deswegen wohl nie gesehen
Der Witz ist, dass die "Erweiterten Statusinformationen" gar nicht wirklich dafür sorgen, dass die ??? auf gelbem Grund verhindert werden, sondern mit dieser Option wird der SCL-Compiler "heimlich" davon abgehalten, windige/experimentelle/falsch funktionierende Code-Optimierungen vorzunehmen. Die Option darf nur nicht so heißen ...

Was ist das bitte für ein Zeichen? Irgendein Sonderzeichen??? Mach das mal weg..

Anhang anzeigen 79443
(y)
Das ist ja noch schlimmer als Leerzeichen, wenn man das verwendete Sonderzeichen noch nicht mal über die Tastatur eingeben kann.
 
Zurück
Oben