WinCC Unified WinCC Unified - Schalter

KarlMeier

Level-2
Beiträge
206
Reaktionspunkte
31
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich versuch mich gerade ins WinCC Unified einzuarbeiten. Teilweise ist es wirklich sehr mühsam und zum Verzweifeln wenn man gewohnte Arbeitsschritte mit welchen man im WinCC Advanced gearbeitet hat, im Unified sucht.
Vieles ist soviel anders und absolut unnötig platziert oder einfach nur total idiotisch Bezeichnet.
So wie zum Beispiel der Schalter. Im alten WinCC konnte ich zwischen einem Schiebeschalter und einen Druckschalter auswählen. Den Druckschalter benötige ich fast immer und macht auch in meinen Visualisierungen viel mehr Sinn als ein Schiebeschalter. Außerdem ist dieser leichter zu bedienen. Aber offenbar gibt es diese Option im WinCC nicht? Oder hab ich es übersehen?
Ich musste auch erstmal ein YouTube-Video suchen um herauszufinden wo ich die Prozessvariable anbinde, nachdem ich ne halbe Stunde gesucht hab. Es ist für mich absolut unerklärlich, wieso man das so undurchsichtig machen muss. Da kennt sich doch irgendwann überhaupt niemand mehr aus.

Auch die Tatsache, dass ich im Eigenschaftsfeld immer wieder nach oben springe, wenn ich das Objekt wechsel nervt ungemein… Naja ich möchte jetzt nicht zuviel meckern, es gibt auch einiges was mir gut gefällt, aber der Schalter macht mir noch Sorgen. Hat jemand einen Tipp wie man aus einem Schiebeschalter einen Druckschalter machen kann?
Alternativ würde ich mir 2 Schaltflächen mit Sichtbarkeiten machen. Aber das sind halt wieder doppelt soviele Objekte.
 
Alternativ könntest du doch ein Rechteck drüber legen und es unsichtbar schalten. Anschließend verknüpfst du eine Variable mit dem Rechteck und dem Schalter und kannst dadurch diesen umschalten.

Alternativ würde ich mir 2 Schaltflächen mit Sichtbarkeiten machen. Aber das sind halt wieder doppelt soviele Objekte.
Wenn du sowieso sehr häufig Schalter benötigst, dann erstell doch einfach einen Bildbaustein. Eine Schaltfläche wird nicht unbedingt benötigt. Dazu brauchst du 2 Textfelder und ein Rechteck. Die Hintergrundfarbe kannst du mit der Schnittstelle des BBs verknüpfen und dadurch die Hintergrundfarbe wechseln. Das Rechteck wird über die beiden Textfelder gesetzt und unsichtbar geschaltet. Es dient dann als deine Schaltfläche. Das finde ich schöner als mit der Schaltfläche zu arbeiten, da zumal der Rand beim betätigen der Schaltfläche dauerhaft sichtbar ist, bis etwas anderes angeklickt wurde.
Den fertigen Bildbaustein kannst du dann in einer globalen Bibliothek abspeichern. Das neue an Unified ist, dass du sogar mehrere Bildbausteine in einem zusammensetzen kannst. Dadurch hast du dir nur einmal die Mühe gemacht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
die Lösung von @TaHan kann ich nur empfehlen, damit hast du dann auch ein Objekt, das du immer weiter für dich selbst verwenden kannst.

Dass sich das Eigenschaftsfenster im Bildeditor beim Objektwechsel nicht die ausgewählte Eigenschaft merkt, richtig, das war lange so und ging einem ziemlich auf den Senkel. Mittlerweile (V18 Update 1 oder vielleicht haben sie es auch schon früher reingepatcht) merkt er es sich aber. Auch in den großen Tabellen-Eigenschaftsmasken, wie bei beim Alarmcontrol oder Trendcontrol bleibt er bei der ausgewählten Eigenschaft und springt nicht mehr an die erste Position.

Schau also einfach mal, dass du das aktuelle Update drauf hast, da passiert bei solchen Sachen sehr viel. Auch die ganzen Schnellzugriffe über dem Bildeditor sind auf diesem Weg nachgepatcht werden.
https://support.industry.siemens.com/cs/document/109817218/
https://support.industry.siemens.com/cs/document/109807123/
 
Alternativ könntest du doch ein Rechteck drüber legen und es unsichtbar schalten. Anschließend verknüpfst du eine Variable mit dem Rechteck und dem Schalter und kannst dadurch diesen umschalten.


Wenn du sowieso sehr häufig Schalter benötigst, dann erstell doch einfach einen Bildbaustein. Eine Schaltfläche wird nicht unbedingt benötigt. Dazu brauchst du 2 Textfelder und ein Rechteck. Die Hintergrundfarbe kannst du mit der Schnittstelle des BBs verknüpfen und dadurch die Hintergrundfarbe wechseln. Das Rechteck wird über die beiden Textfelder gesetzt und unsichtbar geschaltet. Es dient dann als deine Schaltfläche. Das finde ich schöner als mit der Schaltfläche zu arbeiten, da zumal der Rand beim betätigen der Schaltfläche dauerhaft sichtbar ist, bis etwas anderes angeklickt wurde.
Den fertigen Bildbaustein kannst du dann in einer globalen Bibliothek abspeichern. Das neue an Unified ist, dass du sogar mehrere Bildbausteine in einem zusammensetzen kannst. Dadurch hast du dir nur einmal die Mühe gemacht.

Ich versuche es gerade nachzuvollziehen was Du meinst. Ich hab es jetzt so verstanden:
Die Textfelder benötige ich für meine Zustandsanzeige, also zB EIN und im anderen Textfeld steht AUS. Die Sichtbarkeit bezieht sich auf den Zustand der verknüpften Variable, welche ich mit dem unsichtbaren Rechteck über Ereignisse zwischen 0 und 1 umschalten kann.
Soweit ich aber weiß kann man bei den Objekten (Rechteck, Kreis usw.) kein Ereignis hinterlegen oder ist das im Unified anders? Und wie kann ich bei diesem Objekt dann unterscheiden ob er das Bit setzen oder zurücksetzen soll?

Der Rest ist klar und das mit dem Bildbaustein macht auch Sinn.
 
Ich hab es jetzt mal versucht mit einem Skript beim Ereignis „Linke Maustaste drücken“ ein Bit zu setzen bzw. Rückzusetzen. Das Ganze habe ich mit einer internen Variable gemacht. Beim Skript wird über If…else festgestellt, ob das Bit gesetzt oder zurückgesetzt werden muss. Doch irgendwie funktioniert es nicht. Ich kann nur den Schaltzustand von 1 auf 0 schalten, nicht aber von 0 auf 1.

Woran kann das liegen?

Ich muss dazusagen, dass ich absoluter Java-Neuling bin. Muss mir das alles gerade zusammenbasteln. Hier mein Skript-Code:

if („Schalterzustand“)
{
HMIRuntime.Tags.SysFct.ResetBitInTag(„Schalterzustand“,0); }

else
{HMIRuntime.Tags.SysFct.SetBitInTag(„Schalterzustand“,0); }
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich versuche es gerade nachzuvollziehen was Du meinst. Ich hab es jetzt so verstanden:
Die Textfelder benötige ich für meine Zustandsanzeige, also zB EIN und im anderen Textfeld steht AUS. Die Sichtbarkeit bezieht sich auf den Zustand der verknüpften Variable, welche ich mit dem unsichtbaren Rechteck über Ereignisse zwischen 0 und 1 umschalten kann.
Soweit ich aber weiß kann man bei den Objekten (Rechteck, Kreis usw.) kein Ereignis hinterlegen oder ist das im Unified anders? Und wie kann ich bei diesem Objekt dann unterscheiden ob er das Bit setzen oder zurücksetzen soll?

Der Rest ist klar und das mit dem Bildbaustein macht auch Sinn.
Im Unified ist es, wie du es schon sagst, anders. Hier kannst du Textfelder, Kreise, Grafiken usw. eine Funktion hinterlegen. Das dient dann als Schaltfläche.
Entweder du schreibst in das Textfeld "Ein" bzw. "Aus", oder du kannst den Text als String mit der Schnittstelle des BBs verknüpfen (ist bei einem mehrsprachigen Projekt sehr sinnvoll).
Dafür habe ich mir z.b. in der CPU einen UDT erstellt, mit dem ich Texte, Farben usw. in einem Zentralen DB einstelle und ändere. Die Farben dazu werden über den RGB- Code verändert. Dazu habe ich für Taster, Aktoren, Sensoren usw. Einen FC geschrieben. Der Text wird nur einmal eingestellt und nicht wieder angefasst, es sei denn, das ist gewünscht.
Es gibt auch noch die Möglichkeit die Farbänderung im Panel mittels einer Logik-Schaltung an die jeweilige Situation anzupassen.

Du kannst dich auch an den mittlerweile vorhandenem Demo Projekt von Siemens orientieren. Es wird zwar nicht alles behandelt, aber es gibt einem ein Basiswissen an die Hand. Vieles muss man jedoch nach wie vor selbst ausprobieren.

Im Vergleich zu den nicht Unified Panels gibt es bei Unified Panels jede menge Freiheiten. Es gibt jedoch noch seitens Siemens viel zu tun, da, wie ich finde, Unified nach wie vor nicht ausgereift ist und noch einige Jahre benötigen wird, sodass es zufriedenstellend funktioniert.

So hatte ich auch feststellen müssen, dass die Schaltfläche nicht unbedingt so funktioniert, wie man sich das wünscht.
Mir ging es hierbei Primär darum, dass sich die Farbe der Schaltfläche beim Wechseln des Bildes ändert. Das tat es nicht. Gelöst hatte ich es mit einem Viereck. Seitdem nutze ich diese fast ausschließlich.

Zum Antippen von Aktoren und Sensoren muss hierbei nichts mehr unsichtbar geschaltet werden, sondern in dem gewünschten Objekt wie man es vorher auch von Schaltfläche her gewohnt war.

Nachtrag:

Nicht String, sondern als Eigenschaften Schnittstelle "Mehrsprachiger Text".
 
Zuletzt bearbeitet:
Ich hab es jetzt mal versucht mit einem Skript beim Ereignis „Linke Maustaste drücken“ ein Bit zu setzen bzw. Rückzusetzen. Das Ganze habe ich mit einer internen Variable gemacht. Beim Skript wird über If…else festgestellt, ob das Bit gesetzt oder zurückgesetzt werden muss. Doch irgendwie funktioniert es nicht. Ich kann nur den Schaltzustand von 1 auf 0 schalten, nicht aber von 0 auf 1.

Woran kann das liegen?

Ich muss dazusagen, dass ich absoluter Java-Neuling bin. Muss mir das alles gerade zusammenbasteln. Hier mein Skript-Code:

if („Schalterzustand“)
{
HMIRuntime.Tags.SysFct.ResetBitInTag(„Schalterzustand“,0); }

else
{HMIRuntime.Tags.SysFct.SetBitInTag(„Schalterzustand“,0); }
Ich würde bei einem Schalter den Bit invertieren. Ist die schnellere Methode.

Was den Script angeht, da müsstest du auf die Zustandsänderung deines Ergebnisses schauen.
Hierbei soll ja das Bit immer zwischen den Zuständen 0 und 1 gewechselt werden und zwar immer beim erneuten betätigen deiner Schaltfläche/Rechtecks, und nicht nur solange dieser betätigt wird.

Was du gerade gemacht hast ist nicht anderes als
Code:
Ergebnis:=Not Schaltzustand;

oder

Code:
if Schaltzustand
then
Ergebnis :=0;
else
Ergebnis :=1;
end_if;
 
Ich hab wohl einen Logikfehler.
Ich dachte mit jedem Betätigen der linken Maustaste läuft das Skript einmal durch. Wenn das Skript also ausgeführt wird wenn der Schalterzustand 1 ist, dann setzt es den Schalterzustand auf 0 und wenn der Schalterzustand auf 0 steht dann wird dieser auf 1 gesetzt.

Ich hab verstanden, dass „betätigen linke Maustaste“ das falsche Ereignis ist, weil ja das Skript permanent laufen würde, wenn man die Maustaste gedrückt hält. Aber das Skript an sich sollte doch eigentlich funktionieren oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab verstanden, dass „betätigen linke Maustaste“ das falsche Ereignis ist, weil ja das Skript permanent laufen würde, wenn man die Maustaste gedrückt hält. Aber das Skript an sich sollte doch eigentlich funktionieren oder?
Ich konnte bis jetzt nicht herausfinden, wie die Skripte in den Ereignissen ausgeführt werden.
Was Skripte generell angeht, gibt es unterschiedliche Trigger, die zyklisch, variablenabhängig oder ereignisgesteuert auslösen und anschließend das Skript verarbeitet wird.

Ich würde jedoch in deinem Fall nach wie vor von der IF-Funktion abweichen und statt dessen das Bit invertieren. Als Skript sieht das dann so aus

Code:
HMIRuntime.Tags.SysFct.InvertBitInTag("Schaltzustand", 0);

Das Skript sollte dann asynchron abgearbeitet werden.

Nachtrag:

Ich würde von zyklischen Triggern generell abraten, da vor allem bei größeren Projekten die Performance darunter leiden wird.
Für die Uhrzeit und das Datum wird der zyklische Trigger jedoch benötigt.
 
Zuletzt bearbeitet:
Ich konnte bis jetzt nicht herausfinden, wie die Skripte in den Ereignissen ausgeführt werden.
Was Skripte generell angeht, gibt es unterschiedliche Trigger, die zyklisch, variablenabhängig oder ereignisgesteuert auslösen und anschließend das Skript verarbeitet wird.

Ich würde jedoch in deinem Fall nach wie vor von der IF-Funktion abweichen und statt dessen das Bit invertieren. Als Skript sieht das dann so aus

Code:
HMIRuntime.Tags.SysFct.InvertBitInTag("Schaltzustand", 0);

Das Skript sollte dann asynchron abgearbeitet werden.

Nachtrag:

Ich würde von zyklischen Triggern generell abraten, da vor allem bei größeren Projekten die Performance darunter leiden wird.
Für die Uhrzeit und das Datum wird der zyklische Trigger jedoch benötigt.
Vielen Dank für die Hilfe, funktioniert erstmal einwandfrei.
Nun habe ich versucht das Ganze als Faceplate zu machen, aber unter Tia V17 kann man bei den Faceplate-Objekten kein Ereignis hinzufügen. Bzw. es funktioniert nur über ein Skript. Da weiß ich allerdings nicht wie man über das Skript eine Faceplate-Variable anspricht. Hast Du da ne Idee?
 
Ich hab es herausgefunden.
Hab mir Tia V18 als Trial heruntergeladen, dort schnell ein Faceplate erstellt, das Ereignis angelegt, in Skript-Code umgewandelt und den Code beim anderen V17-Projekt eingefügt. Jetzt funktioniert es.

Meiner Meinung nach ist Unified unter V17 nur 50% brauchbar. Es fehlen teilweise komplette Funktionen, wo das Feld einfach grau ist, vieles ist so dermaßen „Workflow“-bremsend, dass man damit absolut nicht voran kommt.
In V18 macht das Ganze tatsächlich einen besseren Eindruck.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab es herausgefunden.
Hab mir Tia V18 als Trial heruntergeladen, dort schnell ein Faceplate erstellt, das Ereignis angelegt, in Skript-Code umgewandelt und den Code beim anderen V17-Projekt eingefügt. Jetzt funktioniert es.

Meiner Meinung nach ist Unified unter V17 nur 50% brauchbar. Es fehlen teilweise komplette Funktionen, wo das Feld einfach grau ist, vieles ist so dermaßen „Workflow“-bremsend, dass man damit absolut nicht voran kommt.
In V18 macht das Ganze tatsächlich einen besseren Eindruck.
Das kann ich auch so bestätigen. Mit V16 war Unified nicht zu gebrauchen. V17 sah da schon deutlich besser aus. Bei V18 kann ich sagen, dass man es auch an den Kunden verkaufen kann. Ich bin auf die Änderungen von V19 gespannt, was da die Entwicklung für einen Sprung machen wird.
Bei Siemens ist das leider so meiner Erfahrung nach, dass wir die Fehler (auf Kosten unserer Kunden) für Siemens suchen und melden müssen, damit diese Fehler vielleicht in der nächsten Version oder dem nächsten Update behoben werden.
Ich hatte leider auch, was V17 angeht, viele Stunden mit dem Siemens Support verbracht. Mit V18 macht es schon deutlich mehr spaß und es gibt viele aha Momente.

Vielleicht ein kleiner Tipp am Rande.
Derzeit erkennt der Compiler weder bei V17 noch V18 Fehler im JavaScript. Der Visual Studio Code kann da eine Hilfe sein. Dieser erkennt mit dem heruntergeladenem JavaScript die Fehler.
 
Zurück
Oben