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

Bei einer boolschen Variable kannst du nur auf Wertänderung triggern, da kann nichts anderes eingestellt werden.
Wenn du bei der boolschen Variable bleiben möchtest, könntest könntest du bei Wertänderung ein Skript starten und dann in Abhängigkeit von true/false die RezepturVariablen online oder offline schalten.
Andere Alternative, mach eine Int-Variable draus und dann kannst du 0 oder 1 reinschreiben und direkt über den Wert im HMI die Systemfunktion starten.
Ich habe nun eine Variable (Integer) angelegt, die sobald ein Schlüssel gesteckt wird 1 wird und ansonsten den Wert 0 bekommt. Bei den Ereignissen kann ich jetzt jedoch nur auf "Überschreitung" und "Unterschreitung" triggern. Was heißt das? Überschreitung von welchem Wert? Vielleicht habe ich da etwas falsch verstanden, aber ist das der richtige Ansatz?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Nethiros:
Discord ist ja auch im Browser nutzbar, richtig? Dann können wir es darüber versuchen.
Ja könnten wir machen, falls du am Nachmittag noch Zeit hast. Dann könnte ich dir auch meinen Discordnamen nennen. Falls ich das Problem innerhalb der nächsten 2 Stunden jedoch noch lösen kann, müssen wir das sogar eventuell gar nicht mehr machen. Ich glaube ich bin dem Ziel schon recht nahe. Trotzdem schonmal wieder im Voraus vielen Dank für die Mühen.
 
Moin,

nach dem Gespräch mit Faust habe ich jetzt die beiden Lösungsvarianten von ihm besser verstehen können und auf Basis dessen, konnte ich nun selbst eine Lösung erstellen für mein Problem. Die werde ich jetzt noch einmal zusammenfassen, falls irgendwann jemand anders noch einmal dieses Problem hat :)

1. Erstellung eines Rezeptes. In diesem stehen alle Variablen ("Variable Eintrage" auf Bild), welche Online/Offline geschaltet werden sollen. Die Einstellungen sind dabei die Folgenden:
rezept.PNG

2. Erstellung eines Skriptes. Dieses Skript dient nur dazu, abzufragen welchen Zustand aktuell die Variable hat, die man prüfen möchte. Dies kann z.B. ein Schalter sein, welcher eine Verbindung zu der HMI deaktivieren soll.
Skript.PNG

3. Einstellen der Variable, die bei Wertänderung das Skript aufrufen soll. Hier kann nur auf Zustandsänderung überprüft werden und daher wird die Logik innerhalb des Skriptes verarbeitet. Wichtig ist, dass die Erfassungsart "Zyklisch Fortlaufend" in den Eigenschaften eingestellt wird.
TransponderBestaetigt.PNG

Das ist letztlich die Lösung. Danke an alle, die Ideen und Lösungsansätze geschrieben haben. Ich wünsche noch einen schönen Tag.
LG Nethiros
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mahlzeit Nethiros.

Schön aufbereitet, Danke dir.

Noch ein paar Tipps zur Skript-Syntax und Namengebung, wenn es erlaubt ist:

+ Die Wertzuweisung zu plcVar kannst du einfacher projektieren:
Code:
plcVar = SmartTags("TransponderBestaetigt")
Eine Zuweisung mit "SET" ist nur nötig, wenn du mit anderen Eigenschaften als "Value" arbeiten möchtest

+ Dementsprechend reicht im Folgenden diese If-Abfrage:
Code:
If Not(plcVar) Then

+ Ich würde mich bei der Namensgebung für die einzelnen Projektelemente (Bilder, Variablen, Rezepturen etc.) auf eine Sprache festlegen, erleichtert die Lesbarkeit.


Gruß, Fred
 
Ob für sowas die Rezepturen zu missbrauchen der richtige Weg ist? Ich würde zumindest die Augenbrauen hochziehen, wenn ich sowas sehen würde.
Können denn wenn die Rezeptur offline geschaltet ist, noch die zuletzt eingestellten Werte angezeigt werden, oder gibt es dann überall Rauten ###? Wie erklärst du das dem Kunden?
Ich deaktiviere lediglich die Variable, die nur dafür da ist im Funktionsbaustein auf den Tastendruck zu reagieren. Also es wird NUR das Bit von der Kommunikation geblockt, welches im FB abgefragt wird. Da gibt es zumindest in meinem Fall keine Probleme mit Rauten oder anderen Dingen, weil eben nur dieser kleine Teil der Kommunikation weg fällt. Aktuelle Zustände und dergleichen wird ja alles weiterhin zwischen HMI und SPS kommuniziert.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ob für sowas die Rezepturen zu missbrauchen der richtige Weg ist?
Sicherlich ist es nicht der richtige oder besser ideale Weg. Allerdings bei der Ausgangssituation (SPS + HMI kann/darf nicht grundlegend geändert werden) wohl der einzige Weg diesen Schlüsselschalter nachzurüsten.
 
Also darin sind nur Variablen, die beispielsweise bei Klicken einer Schaltfläche gesetzt werden, also ohne irgendwo gelesen zu werden? Da könnte man da ja noch durchgehen lassen, aber schöner und für jeden (und auch den Bediener) nachvollziehbarer wäre m.M.n. die Variante mit der Deaktivierung der Bedienbarkeit.
 
Sicherlich ist es nicht der richtige oder besser ideale Weg. Allerdings bei der Ausgangssituation (SPS + HMI kann/darf nicht grundlegend geändert werden) wohl der einzige Weg diesen Schlüsselschalter nachzurüsten.
Das HMI wird hier doch grundlegend geändert, indem Variablen in vorher nicht vorhandene Rezepturen verfrachtet werden. Gerade wenn hier Sivarc zum Einsatz kommt, hätte man doch eigentlich die Funktion zentral nachbilden können mit einem entsprechenden Freigabebit, das bei Bedarf mit einer Variable verschaltet werden kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Leider habe ich festgestellt, dass die vorgeschlagene Methode in meinem Fall leider doch nicht funktioniert. Die HMI in meinem Projekt wird mit einer Bildbaustein-Instanz gesteuert, bei der es keinen Reiter "Bedienbarkeit" gibt. Die Bildbaustein-Instanz hat lediglich die Einstellungen: Variablenanbindungen und Bewegungen.
Also darin sind nur Variablen, die beispielsweise bei Klicken einer Schaltfläche gesetzt werden, also ohne irgendwo gelesen zu werden? Da könnte man da ja noch durchgehen lassen, aber schöner und für jeden (und auch den Bediener) nachvollziehbarer wäre m.M.n. die Variante mit der Deaktivierung der Bedienbarkeit.
Wie Nethiros ja im Beitrag #8 schon geschrieben hat, besteht diese Möglichkeit eben nicht.
 
Also darin sind nur Variablen, die beispielsweise bei Klicken einer Schaltfläche gesetzt werden, also ohne irgendwo gelesen zu werden? Da könnte man da ja noch durchgehen lassen, aber schöner und für jeden (und auch den Bediener) nachvollziehbarer wäre m.M.n. die Variante mit der Deaktivierung der Bedienbarkeit.
Die Variablen werden einmalig gelesen. Aber nur ein mal im FB und genau dort setze ich mit dieser Methode an. Zustände der Anlage und andere wichtige Verbindungen werden nicht blockiert, lediglich das "Klicken" der Bediener. Es ist sicher keine optimale Lösung, aber ich bin mir auch nicht sicher ob es diese überhaupt gibt, mit meinen Vorgaben.
 
Wie Nethiros ja im Beitrag #8 schon geschrieben hat, besteht diese Möglichkeit eben nicht.
Genau. Natürlich könnte die Eigenschaft der Bedienbarkeit in der Bildbaustein-Instanz ergänzt werden, allerdings müsste ich dafür die Bildbaustein-Instanz abändern, was ich nicht möchte, da externe Updates meine Änderungen überschreiben würden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas.

Also darin sind nur Variablen, die beispielsweise bei Klicken einer Schaltfläche gesetzt werden, also ohne irgendwo gelesen zu werden? Da könnte man da ja noch durchgehen lassen, aber schöner und für jeden (und auch den Bediener) nachvollziehbarer wäre m.M.n. die Variante mit der Deaktivierung der Bedienbarkeit.
Bei der genannten Verwendung der Systemfunktion "SetzeRezeptvariablen" (SetRecipeTags) kann man eine automatische Statusmeldung aktivieren, diese wird dann als vom Bediener zu quittierendes PopUp angezeigt. Somit würde er zumindest nicht gänzlich ohne Info über den Grund der Nichtverfügbarkeit dastehen.

Nebenbei: Die reine Deaktivierung der Bedienbarkeit z.B. einer Schaltfläche geschieht gänzlich OHNE Rückmeldung.


Grundsätzlich gebe ich dir und allen Skeptikern recht:
Der Missbrauch von Rezepturen zur Realisierung von solchen Funktionalitäten ist sicher nicht der Weisheit letzter Schluss. Wie aber schon mehrfach erwähnt sind die Vorgaben, die Nethiros zu berücksichtigen hat, der eigentliche Grund für diesen Workaround.

Wobei das Rumgebastel mit Rezepturen bei WinCC Comfort/Advanced ja schon fast Tradition hat, so oft, wie hier im Forum richtigerweise darauf hingewiesen wird, dass man mit ihnen (und fast nur mit ihnen!) einen handshake-gestützten HMI-PLC-Werteaustausch realisieren kann/muss.


Gruß, Fred
 
Moin,

ich muss mich leider auch nochmal zurückmelden. Mir kam als nächstes die Idee, einfach mehrere Rezepte zu erstellen, um unterschiedliche Variablen zwischen HMI und SPS Offline schalten zu können. Also Benutzerlevel 1, 2, 3... etc. Also habe ich entsprechend mehrere Rezepte erstellt, und diese mit unterschiedlichen Variablen gefüllt, die in der HMI für einen Tastendruck sorgen (Also die für die Erkennung eines Tastendruckes sorgen). Soweit so gut. Benutzerverwaltung im Skript angepasst und nach Testen kann ich sagen, dass das Skript funktioniert. Es werden je nach Benutzerfreigabe die unterschiedlichen If-Abfragen korrekt geschaltet. Jetzt zum Problem. Obwohl die If-Abfrage abgerufen wird und in dieser ein Rezept für z.B. Benutzerlevel 2 Online geschaltet werden soll, ist die Variable nach wie vor offline und der Taster kann trotz gegebener Rechte nicht betätigt werden. Das Rezept (also die Verbindung) wird an keiner anderen Stelle im Skript Offline geschaltet. Woran könnte das liegen? Ist es nicht möglich einzelne Variablen in unterschiedlichen Rezepten Online/Offline zu schalten, bei nur einer Verbindung?

Danke für eure Antworten.
 
Nochmal zum genaueren Verständnis:
Skript2.PNG
Hier ein Ausschnitt des Skriptes. Die If-Abfragen werden Korrekt bearbeitet und die Befehle sollten eigentlich ausgeführt werden.

Ich vermute das Problem liegt wohl eher bei den Rezepten. Diese sehen wie folgt aus:
Rezepte2.PNG
Innerhalb der Rezepte stehen dann unterschiedliche Variablen, die dann Online/Offline geschaltet werden sollen, damit die HMI keine Verbindung mehr mit der SPS hat und der Taster nicht mehr "funktioniert".
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Ist es nicht möglich einzelne Variablen in unterschiedlichen Rezepten Online/Offline zu schalten, bei nur einer Verbindung?
Die HMI-Verbindung hat damit nichts zu tun.

Wie hast du dein Skript getestet? Testausgaben, ScriptDebugger, ...?

Spontan würde ich nämlich sagen, dass du mindestens mal in Zeile 34 eine Systemmeldung "Rezepturaktion läuft bereits" (oder so ähnlich) erhalten solltest, da du den Rückgabewert der Systemfunktion "SetRecipeTags" nicht auswertest und somit nicht auf das Funktions-Bearbeitungsende wartest.


Gruß, Fred
 
Ich habe das Skript folgenderweise getestet: Ich habe einfach eine Testvariable auf 0 oder 1 geschrieben und so geschaut, ob die Abfrage durchgeführt wurde. Scriptdebugger ist leider nicht auf dem Rechner installiert.

Ich bekomme da keine Meldung, also zumindest nicht das ich wüsste. Wo würde ich das denn sehen? Und entsteht die Meldung, wenn eine Verbindung bereits offline geschaltet ist und probiert wird, die Variable erneut offline zu schalten? Ich schaue nach der Mittagspause noch einmal nach.
 
Es wird ja keine Variable, sondern eine Rezeptur offline/online gesetzt.
Die Systemfunktionen werden unabhängig vom aktuellen Zustand der Rezeptur ausgeführt.

Du hast "SetRecipeTags" mit "Statusmeldung ausgeben" projektiert (Parameter 'hmiOn'), also solltest du jeweils eine Systemmeldung erhalten. Diese bekommst du im Normalfall in einer Meldeanzeige präsentiert. Diese muss natürlich (entsprechend) projektiert sein.
Testausgaben sind auch mit "ShowSystemAlarm" gefolgt von einem String möglich, auch hier ist eine Meldeanzeige vonnöten.

Den einfachen ScriptDebugger kann man soweit ich weiß immer noch bei Microsoft herunterladen; ist wirklich hilfreich, wenn man Skripte mal schrittweise "durchklickern" muss/will.


Gruß, Fred
 
Zurück
Oben