WinCC Unified Wert kommt nicht in SPS an

Vinc13

Level-2
Beiträge
13
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich versuche einen Merker der SPS über eine Schaltfläche zu setzen. Wenn ich die Schaltfläche drücke passiert aber nichts. In der Variablentabelle der SPS ändert sich der Merker nicht.
Benutzt wird TIA18. Steuerung ist S7-1200 und HMI ist IPC277G. HMI Verbindung ist da und SPS Variablen, welche ich auf dem HMI anzeigen lasse, kommen auch an.
Merker ist über symbolischen Zugriff in den HMI Variablen hinterlegt. Anbindung der Variable an die Schaltfläche in folgenden Bildern.

1754468108917.png
1754468134773.png
 
Adressüberlappung?
Liegt der Merker in einen MB/MW/MD, das vom SPS-Programm eine Zuweisung bekommt? Oder wird der Merker selbst überschrieben?
Es geht um M38.0. Adressen unten im Bild sind aufsteigend sortiert, also keine Überlappung. Im anderen Bild die Querverweise. Auch da nirgends überschrieben.

1754469154793.png1754469304321.png
 
Dann legs doch erstmal auf einen neuen Merker. Dann weißt Du wenigstens ob Du in der SPS oder der Visu suchen musst.
 
Für einfache boolsche Vorgänge habe ich eigentlich noch nie ein JS verwendet.
Deine Funktion verwende ich immer für INT oder andere Zahlen zum Lesen oder Schreiben.

Eventuell ist die Funktion nicht für boolsche Variablen gedacht, versuche mal den Befehl:
Code:
HMIRuntime.Tags.SysFct.SetBitInTag("VARIABLE", 0);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Geht leider auch nicht.
"Drücken" bzw. "Loslassen wäre aber definitiv das korrekte Ereignis.
Da stolpert aber mein Hirn auch immernoch regelmäßig drüber ¯\_(ツ)_/¯

Mit welchem Erfassungszyklus ist die Variable angelegt?
Evtl ist dieser einfach zu langsam um die Wertänderung überhaupt an die SPS zu senden.

Deklarier mal zusätzlich den writeType (siehe F1-Hilfe)
Javascript:
Tag.Write([value],[writeType])
und pack das Ganze noch in eine try..catch Struktur um nen Eintrag im RTIL-Viewer zu bekommen wenn ein Fehler auftritt.

Ansonsten sehe ich das wie @Rabi
Ein Bit zu setzen und beim loslassen wieder rückzusetzen ist für das Triggern eines Befehls in der SPS denkbar unzuverlässig.
Wäre "Taste setzt das Bit & SPS setzt es wieder zurück" eine Option?
 
"Drücken" bzw. "Loslassen wäre aber definitiv das korrekte Ereignis.
Da stolpert aber mein Hirn auch immernoch regelmäßig drüber ¯\_(ツ)_/¯

Mit welchem Erfassungszyklus ist die Variable angelegt?
Evtl ist dieser einfach zu langsam um die Wertänderung überhaupt an die SPS zu senden.

Deklarier mal zusätzlich den writeType (siehe F1-Hilfe)
Javascript:
Tag.Write([value],[writeType])
und pack das Ganze noch in eine try..catch Struktur um nen Eintrag im RTIL-Viewer zu bekommen wenn ein Fehler auftritt.

Ansonsten sehe ich das wie @Rabi
Ein Bit zu setzen und beim loslassen wieder rückzusetzen ist für das Triggern eines Befehls in der SPS denkbar unzuverlässig.
Wäre "Taste setzt das Bit & SPS setzt es wieder zurück" eine Option?

Erfassungszyklus hab ich auch schon auf 100ms gestellt. Ich gehe fast davon aus, dass es an der noch fehlenden RT-Lizenz liegt und ich somit, unabhängig der vergebenen Berechtigungen für den Benutzer, nur den Monitor Modus nutzen kann. Mal sehen ob es klappt wenn die Lizenz irgendwann mal beschafft wird.
 
Unified RT kenne ich nicht, aber:
• die Einstellung des Erfassungszyklus sollte nichts damit zu tun haben, wie schnell ein Tastendruck an die SPS gesendet wird
• eine fehlende RT-Lizenz sollte nichts damit zu tun haben, ob Werte zur SPS geschrieben werden
SetBitInTag möglichst nicht verwenden! Weil das die Variable erst aus der SPS lesen und dann zurückschreiben müsste. Ist langsam und macht Probleme, wenn in der Variable weitere Bits verwendet werden und womöglich in der SPS auch geschrieben werden.

Zeige den Wert des Merkers mal testweise in der Visu an (EA-Feld oder als Farb-Animation eines Objektes).
Setze zusätzlich zum Merker eine weitere HMI-interne Variable und zeige deren Wert an (Kontrolle, ob das Ereignis/Trigger überhaupt ausgelöst wird und dein Skript aufruft)
Lösche oder deaktiviere testweise das Skript mit dem Rücksetzen des Merkers und lasse nur das Setzen aktiv. Dann sollte der Merker in der SPS gesetzt bleiben, wenn er ankommt.

Überprüfen: Ist die Variable richtig projektiert? richtige Verbindung zur SPS, richtiges Symbol, testweise mal auf die Adresse des Merkers projektieren. Testweise andere Variable in einem völlig neu angelegten DB verwenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Unified RT kenne ich nicht, aber:
• die Einstellung des Erfassungszyklus sollte nichts damit zu tun haben, wie schnell ein Tastendruck an die SPS gesendet wird
• eine fehlende RT-Lizenz sollte nichts damit zu tun haben, ob Werte zur SPS geschrieben werden
SetBitInTag möglichst nicht verwenden! Weil das die Variable erst aus der SPS lesen und dann zurückschreiben müsste. Ist langsam und macht Probleme, wenn in der Variable weitere Bits verwendet werden und womöglich in der SPS auch geschrieben werden.

Zeige den Wert des Merkers mal testweise in der Visu an (EA-Feld oder als Farb-Animation eines Objektes).
Setze zusätzlich zum Merker eine weitere HMI-interne Variable und zeige deren Wert an (Kontrolle, ob das Ereignis/Trigger überhaupt ausgelöst wird und dein Skript aufruft)
Lösche oder deaktiviere testweise das Skript mit dem Rücksetzen des Merkers und lasse nur das Setzen aktiv. Dann sollte der Merker in der SPS gesetzt bleiben, wenn er ankommt.

Überprüfen: Ist die Variable richtig projektiert? richtige Verbindung zur SPS, richtiges Symbol, testweise mal auf die Adresse des Merkers projektieren. Testweise andere Variable in einem völlig neu angelegten DB verwenden.

Naja bei Unified ist es so, dass auf dem Server auf dem die RT läuft die Lizenzen zum zugreifen liegen. Es gibt halt Operator (kann Variablen schreiben) und Monitor (kann nur angucken und Bild wechseln). Ich gehe wie gesagt davon aus, dass wegen fehlender Lizenz im Demo Modus nur Monitor geht. Ich weiß aber auch, dass bei Advanced es auch so ging.

Alle anderen Vorschläge hatte ich mit den Codes der anderen User hier auch schon getestet. Deswegen bin ich mir fast sicher, dass es die Lizenz sein muss.
 
Zurück
Oben