TIA HMI und SPS Interaktion: Blockieren von Steueraktionen bei Schlüsselverwendung

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Fred,

erst einmal vielen Dank für deine Geduld und Hilfe. Ich muss zugeben, dass ich nicht genau weiß, wie ich eine Meldeanzeige im TIA Portal korrekt konfiguriere. Deine Hinweise klingen aber sehr plausibel und ich werde mich nächste Woche damit intensiver auseinandersetzen.

Ich werde auch versuchen, den ScriptDebugger nach dem Wochenende zu installieren und hoffe, damit weitere Erkenntnisse zu gewinnen.

Was ich jedoch immer noch nicht ganz nachvollziehen kann, ist, warum das fehlende Auswerten der Systemmeldung dazu führen sollte, dass die Rezeptur in Zeile 34 nicht online geschaltet werden kann. Gibt es hier eine Abhängigkeit, die mir bisher nicht bewusst war?

Vielen Dank im Voraus für weitere Hinweise und ein schönes Wochenende!

Viele Grüße
Nethiros
 
Hallo Nethiros.

Nicht durcheinander bringen:
Die Systemmeldungen kannst du zu Informations- oder Debug-Zwecken anzeigen lassen.

Der Rückgabewert von "SetRecipeTags" (bei dir mit NULL besetzt) dient zur Synchronisierung mit folgenden Systemfunktionen. Das Vorhandensein dieses Wertes zeigt dir, dass Siemens die Funktion anstösst, aber nicht automatisch auf das Resultat der vollständigen Bearbeitung wartet.

Bezogen auf deinen Fall:
Siemens lässt nur die Abarbeitung EINER Rezept-Systemfunktion GLEICHZEITIG zu. Wenn du -wie du es in Zeile 34 getan hast- "SetRecipeTags" ein zweites Mal aufrufst, dann erhälst du eine Systemmeldung "Eine Rezepturfunktion läuft bereits" (oder so ähnlich), und dieser zweite Aufruf wird NICHT bearbeitet!

Gruß, Fred
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Nethiros.

Nicht durcheinander bringen:
Die Systemmeldungen kannst du zu Informations- oder Debug-Zwecken anzeigen lassen.

Der Rückgabewert von "SetRecipeTags" (bei dir mit NULL besetzt) dient zur Synchronisierung mit folgenden Systemfunktionen. Das Vorhandensein dieses Wertes zeigt dir, dass Siemens die Funktion anstösst, aber nicht automatisch auf das Resultat der vollständigen Bearbeitung wartet.

Bezogen auf deinen Fall:
Siemens lässt nur die Abarbeitung EINER Rezept-Systemfunktion GLEICHZEITIG zu. Wenn du -wie du es in Zeile 34 getan hast- "SetRecipeTags" ein zweites Mal aufrufst, dann erhälst du eine Systemmeldung "Eine Rezepturfunktion läuft bereits" (oder so ähnlich), und dieser zweite Aufruf wird NICHT bearbeitet!

Gruß, Fred
Moin nochmal,

nun habe ich dich glaube ich verstanden. Ich kann also pro Skriptabarbeitung nur ein Rezept Online/Offline schalten. Weil ich probiere gleichzeitig mehrere Rezepte zu schalten, kommt es zu dem Problem, dass nur das erste Rezept bearbeitet wird. Wie kann ich dann trotzdem mehrere Rezepte bearbeiten? Wäre es eine Möglichkeit einfach mehrere Skripte, jeweils eins Pro Rezept, zu schreiben?

Liebe Grüße
 
ohne jetzt mal alles durchgelesen zu haben, ich löse sowas immer mit transparenten Rechtecken, welche über das ganze Bild gelegt werden. Dann ist darunter nichts mehr bedienbar. Bei gewünschter Bedienbarkeit das Rechteck unsichtbar schalten...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin nochmal,

ich habe mit Hilfe von Fred, nun tatsächlich das Problem identifizieren und lösen können. Die Funktionen "SetRecipeTags" wurden teilweise nicht vollständig abgearbeitet und somit kam es zu Fehlern. Das Problem konnte durch eine While-Schleife gelöst werden, welche überprüft, wann die Funktion fertig abgearbeitet wurde. Nun funktioniert das Programm.

Skript3.PNG

Liebe Grüße
Nethiros
 
Es stürzt nicht ab, es bleibt halt endlos in der Schleife. Andere Skripte können nicht mehr gestartet werden.
Ja, habe abstürzen mit einer Endlosschleife gleichgesetzt. Aber du hast recht, es ist kein wirklicher "Absturz". Es kann dann kein anderes Skript mehr aufgerufen werden. Natürlich könnte man da jetzt irgendwas mit Timern machen oder drauf pokern, dass so ein Fall so selten eintritt, dass dies kein Problem ist. Oder gibt es da eine elegante Lösung dieses Problems?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kenne mich nicht sehr gut mit den Rückgabewerten von Funktionen in Skripten aus, aber man könnte doch ansonsten auch statt nur auf "2", auch auf die Zahl "12" abfragen (12 = Systemfunktion wurde nicht ausgeführt, weil ein Fehler aufgetreten ist). Die Frage ist, ob die Funktion selbst auch so Loopen kann, dass die 12 nie zurückgegeben wird. Wirkt für mich aber wie eine Lösung.
 
Auf das Ende einer Rezeptur-Systemfunktion warten im Skript mache ich gewöhnlich so:
(...) Man kann im Skript auf die Fertigmeldung warten (solange werden aber keine anderen Skripte ausgeführt!) oder besser die Wertänderung der Fertigmeldevariable triggern.

Beispiel: alle Variablen einer Rezeptur lesen und auf Fertigmeldung warten:
Code:
Dim rdStat

' Variablen aus SPS lesen mit Fertigmeldung
GetDataRecordTagsFromPLC "meineRezeptur", SmartTags("Lesestatus")
' in Schleife auf Ende Var-Lesen warten
Do
    rdStat = SmartTags("Lesestatus")
Loop While (rdStat And 4) = 0 ' 4=fertig OK / 12=abgebrochen mit Fehler

If rdStat = 4 Then
    ' gerade gelesene Variablen verarbeiten
    ' ...
End If

Harald
 
Hallo zusammen.

Die jeweilige Warteschleife "While ... Wend" bleibt ja nur solange "aktiv", wie der Wert 2 ist. Alle anderen Werte führen zum sofortigen Verlassen der Schleife.
Dieser Mechanismus ist bei mir jetzt seit Jahren (exsessiv?) im Einsatz, eine Endlosschleife hatte ich bis jetzt nie!


Gruß, Fred
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Warteschleife ist aber auch NICHT für eine Fehlerbehandlung zuständig, diese muss separat -im Allgemeinen unmittelbar danach- implementiert werden.
 
@PN/DP:
Gibt es einen Grund, warum du innerhalb der "Do...Loop"-Schleife die HMI-Variable "Lesestatus" noch einmal auf eine skriptinterne (lokale) Hilfsvariable umkopierst?
 
Zurück
Oben