Ereignis bei 'mouseover' WinCC v7.2

Jennsy

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

mein Problem ist Folgendes; ich habe mehrere Polygone, und wenn ich über eines mit der Maus fahre, dann ändert sich ja der Mauszeiger, da ich ein Ereignis, bei Mausklick angelegt habe, und auch die Fläche ändert sich (so als würde die Beleuchtung in dem Polygon eingeschaltet werden) also gibt es ja anscheinend eine Funktion, die es erkennt, wenn ich darüber fahre. Jetzt möchte ich aber selbst ein Ereignis erstellen, wenn ich mit dem Mauszeiger über ein Polygon fahre (z.B. sollte sich dann der Rahmen ändern).
Hat jemand das vielleicht schon hinbekommen? Bzw. eine Idee wie so etwas funktionieren könnte?

Vielen Dank im Voraus,
mfG
 
durch Mouseover ein Script oder so auszulösen geht nicht. in den projekteinstellungen kannst Du aber z.b. dieses "Glühen" aktivieren, dann könntest Du bei allen Objekten einen Rahmen anzeigen. Da gibts hier schon zwei andere Threads...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ducati,

Danke für die Antwort. Das "Glühen" habe ich aktiviert, jedoch ist das nicht wirklich das, auf was ich hinauswollte...deshalb haben mir diese Threads auch nicht weitergeholfen.
Es besteht jedoch die Möglichkeit so etwas zu realisieren, indem man die Mausposition abfragt:
https://www.automation.siemens.com/WW/forum/guests/PostShow.aspx?HTTPS=REDIR&PageIndex=1&PostID=33854&Language=de
Was natürlich, wie auch in diesem Thread beschrieben, durch die hohen aktualisierungszyklen, die performance beeinflusst. Aber ansonsten scheint es hier nicht wirklich etwas sinnvolles zu geben.

mfG
 
Hallo zusammen,

ich greife dieses Thema hier nochmals auf.
Ich suche nach einer ähnlichen Lösung: (Ich nutze WinCC v7.2)

Ich möchte in Runtime auf ein Objekt klicken (z.B. ein Bild.jpg) und dieses per "Drag&Drop" verschieben, neu positionieren können.

Nun bin ich schon soweit, dass ich mittels VBS beim Drücken in Runtime (nehmen wir mal die linke Maustaste an) auf das Objekt die aktuelle Mausposition auslese. Theoretisch kann ich also auch beim Loslassen des Objekts die Curserposition auslesen. Somit habe ich zwei Werte die ich nur subtrahieren brauche und um diesen Wert verschiebe ich dann die X- bzw. Y-Position des Objekts.
Das würde jedoch bedeuten, dass man das Objekt nicht "sehen" kann während man es verschiebt (bzw. wohin). Also sehen tut man es schon, aber keine "Echtzeit" Verschiebung - sprich die Position ändert sich schlagartig beim Loslassen der Maustaste. Ich hoffe ihr wisst wie ich das meine.

Man müsste daher die Mausposition (X,Y) permanent auslesen um sie die X-Y-Positionen des Objekts mit der Bewegung des Cursors zu ändern. Doch da stehe ich gerade.

Eine hohe Zyklusrate ist in diesem Fall nicht so wichtig. Ein paar Mal pro Sekunde ist völlig ausreichend. Das ganze muss auch nur ausgeführt werden, solange die linke Maustaste auf dem Objekt gedrückt bleibt.

Vielen Dank im Voraus,
mfG
 
Hallo michstein
- im Bild ein Imagecontrol platzieren Eigenschaft unsichtbar
- bein Mousedown das Bild in das Imigacontrol laden (entweder Bild als Datei laden oder über das Clipboard kopieren) und Eigenschaft auf sichtbar setzen und Grösse anpassen
- beim Verschieben der Mouse das Imagecontrol an der Mousepositionn neu positionieren. so ensteht ein schieben des Bildes und das Original bleibt an der Ausgangsposition
- Beim Mouseup das Bild neu plazieren und das Imagecontrol wieder auf unsichtbar setzen.
Ist ein relativ grosser Aufwand und die Systemperformence leidet stark darunter.
Solltest du dir genau überlegen ob der Aufwand lohnt.
Grüsse Holger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Holger,

Danke für deine Antwort.

Das Bild muss beim Verschieben nicht am Originalplatz bleiben. Es soll immer am Mauscursor ausgerichtet sein.
So z.B. als wenn du ein Fenster in Windows auf der Desktopoberfläche herumschiebst.

Du schreibst:
beim Verschieben der Mouse das Imagecontrol an der Mousepositionn neu positionieren. so ensteht ein schieben des Bildes
Das scheint mir richtig zu sein, jedoch weiß ich nicht wie es möglich ist, die Mausposition permanent auszulesen.
Oder besser gesagt nur dann auszulesen wenn auf eines der Objekte "gedrückt" wird und beim "Loslassen" braucht die Cursorposition nicht mehr abgefragt werden.
Das Objekt soll sich dann während des "gedrückt haltens" der Maustaste mit dem Cursor mitbewegen.

Bis jetzt habe ich es nur geschafft die Cursorposition beim "Drücken" und "Loslassen" der Maustaste abzufragen.
Also das Bild kann ich schon verschieben, aber erst wenn die Maustaste wieder "losgelassen" wird.

Hintergrund des ganzen: Für eine Serienanlage mit verschiedenen Anlagen-Übersichtsbildern sollen Objekte anhängig vom Hintergrundbild neu ausgerichtet werden können. Das in Runtime und ohne Programmierer.
 
Ja schon, aber da wird die Mausposition ja auch nur einmal abgefragt, oder?
Denn die C-Aktion wird ja auch nur einmal ausgeführt, denke ich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Abfrage erfolgt dort einmalig.
Du müsstest deine Abfrage zyklisch durchführen. In einer Schleife oder besser über einen Timer.

Hintergrund des ganzen: Für eine Serienanlage mit verschiedenen Anlagen-Übersichtsbildern sollen Objekte anhängig vom Hintergrundbild neu ausgerichtet werden können. Das in Runtime und ohne Programmierer.

Eine doch sehr anspruchsvolle Aufgabe.
Bedenke bitte auch dass du deine Werte irgendwo speichern musst. Sonst beginnt nach einem Neustart alles von vorn.
Was du ebenfalls in deine Überlegung mit einbeziehen solltest
- was ist wenn der Monitor gegen einen anderen mit anderer Auflösung getauscht wird. Sind die Objekte noch sichtbar?
- was ist bei einem Systemupdate. Verschieben sich die Ordner
- wird das Zielsystem mit unterschiedlichen Benutzern genutzt.
usw.

Rechtfertigt der Nutzen wirklich den Aufwand?
Grüsse Holger
 
oder besser über einen Timer
Ja so hätte ich mir das gedacht.
Muss noch schauen wie das geht, weil, das Script ja schnell wiederholt werden soll (Objekt soll ja "sofort" bei Curserbewegung mitbewegt werden) aber muss ja nicht dauerhaft laufen. Sondern z.B. nur wenn auf das zu verschiebende Objekt "Gedrückt" wird. Quasi eine UND-Verknüpfung als Trigger für die C-Aktion. Ist so etwas möglich?

- was ist wenn der Monitor gegen einen anderen mit anderer Auflösung getauscht wird. Sind die Objekte noch sichtbar?
Es wird immer ein IPC477C verwendet (Kundenwunsch). Das mus dem Kunden dann auch klar sein, dass das ganze WinCC Projekt auf die Auflösung des Monitors ausgelegt ist.

Bedenke bitte auch dass du deine Werte irgendwo speichern musst. Sonst beginnt nach einem Neustart alles von vorn.
Danke für den Hinweis, das ich habe allerdings schon bemerkt :grin:
Wird alles in der Soft PLC des IPC's gespeichert.

- was ist bei einem Systemupdate. Verschieben sich die Ordner
Das verstehe ich jetzt nicht. Welche Ordner? Systemupdate?
 
In einer Schleife

Ne Schleife ist in WinCC-Scripten überhaupt keine gute Idee!!! Während diese eine Schleife läuft, wird kein anderes Script bearbeitet!!!

Abarbeitung von Aktionen im Graphics Designer

Im Graphics Designer gelten folgende Regeln für die Abarbeitung von Aktionen:

● Es kann keine ereignisgetriggerte Aktion ausgefürt werden, solange eine andere

ereignisgetriggerte Aktion läft.

● Es kann keine zyklische/variablengetriggerte Aktion ausgefürt werden, solange eine

andere zyklische/variablengetriggerte Aktion läft.

● Die beiden Aktionstypen beeinflussen sich nicht untereinander: Eine ereignisgesteuerte

Aktion kann auch ausgefürt werden, wenn gerade eine zyklische Aktion läft.

● Werden Aktionen durch andere Aktionen in der Ausfürung blockiert (z.B. eine zyklische

Aktion durch eine variablengetriggerte Aktion), wird jede blockierte Aktion zum nähsten

mölichen Durchfürungszeitpunkt einmalig ausgefürt. Zyklische Aktionen laufen nach

der einmaligen Ausfürung in ihrem normalen Zyklus weiter.

Abarbeitung von Aktionen im Global Script

Bildunabhägige Aktionen aus Global Script werden in Runtime bei Auslöung nacheinander

ausgefürt. Wird eine Aktion angestoßn, wärend gerade eine andere Aktion läft, wird die

zweite Aktion in einer Warteschleife gehalten, bis die Ausfürung mölich ist.

Aktionen in Global Script und im Graphics Designer beeinflussen sich gegenseitig nicht.

Es gibt zyklische Trigger für Scripte. Sollte man eigentlich kennen, wenn man Scripte in WinCC verwendet ?

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

Danke für die Info.

Das mit den zyklische Trigger für Scripte ist mir schon bekannt, aber ich will ja nicht dass das Script alle "Cycle-Time XY" abgearbeitet wird. Nur wenn benötigt und dann schon zyklisch. Desswegen die Frage mit der UND-Verknüpfung.
Diese Funktion wird ja nur bei der Erst IBN der Anlage benötigt. Würde das Script immer laufen belastet es doch nur unnötig das ganze System. Denke ich?
 
In einer Schleife oder besser über einen Timer.

Kommt ganz auf den Anwendungsfall an. Wenn möglich sollte man aber schon auf Schleifen verzichten. Haste recht.;)

- was ist bei einem Systemupdate. Verschieben sich die Ordner
Microsoft hat bei Updates die Ordnerstruktur der Systemordner neu organisiert.
Sollte dich beim speichern auf dem IPC aber nicht tangieren. Wäre beim erzeugen eigener INI Files von Bedeutung.

Diese Funktion wird ja nur bei der Erst IBN der Anlage benötigt.
Darum schon vorhin mein Einwand von Aufwand und Nutzen.
Grüsse Holger
 
Zuletzt bearbeitet:
Würde das Script immer laufen belastet es doch nur unnötig das ganze System. Denke ich?

in dem zyklischen Script noch ne Variable abfragen und dann den ganzen Mauspositionscode überspringen

Diese Funktion wird ja nur bei der Erst IBN der Anlage benötigt. ?

Dann würde ich den ganzen Quatsch lassen, und bei der IB die Bilder mit dem GraficsDesigner bearbeiten. So wird das 99,999% aller Anlagen gemacht.

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
in dem zyklischen Script noch ne Variable abfragen und dann den ganzen Mauspositionscode überspringen
Dabei versuche ich mich gerade :-D
Ich habe erst seit Montag begonnen mit VBS & C-Script zu arbeiten.
Desshalb sind solche Funktionen, wenn auch einfach für dich/euch, für mich noch eine Hürde nach der anderen.


Für eine Serienanlage mit verschiedenen Anlagen-Übersichtsbildern sollen Objekte anhängig vom Hintergrundbild neu ausgerichtet werden können. Das in Runtime und ohne Programmierer.
Tja, dann sind das hier wohl die restlichen 0,001%. Der Kunde will das so und darum mache ich das so.


den ganzen Quatsch lassen
wär mir auch lieber ;-)

LG
 
Der Kunde will das so und darum mache ich das so.
Bist Du sicher, dass Du das richtig verstanden hast? Bzw. versucht, dem Kunden die Probleme/Nachteile zu erläutern?

Ich habe erst seit Montag begonnen mit VBS & C-Script zu arbeiten.
Da würde ich erstmal mit einfachen Dingen anfangen.

Nichts für ungut, aber ich habe mich hier nur wegen der Geschichte mit der Schleife eingeschaltet, sowas kann ich hier nicht unkommentiert stehen lasse.

Gruß.
 
Da würde ich erstmal mit einfachen Dingen anfangen.
Da hast du recht, denn ich scheitere schon beim überspringen von Anweisungen.

Hier mal ein Screenshot meines Versuchs:
Aktion.JPG *Edit: Die Variable "Mausposotion_auswerten" wird beim drücken auf das Objekt 1 und beim loslassen wieder 0, hab ein EA-Feld was das bestätigt.

Die Curserposition wird richtig ausgewertet, im eingestellten Zyklus den ich auch verändern kann.
Aber das mit der Abfrage wird irgendwie ignoriert, es wird permanent ausgeführt. Warum?
Und was haben die zwei Warnungen zu bedeuten?

Danke im Voraus

LG
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo michstein
Ich habe erst seit Montag begonnen mit VBS & C-Script zu arbeiten.
Da würde ich erstmal mit einfachen Dingen anfangen.
Da muss ich ducati recht geben.:sad:

Wenn du es dennoch versuchen möchtest such bei Siemens mal nach folgendem Handbuch. - A5E32315919-AA
Zu deinem Bild.
Warum liest du deine Variable als DWord aus? (GetTagDWord)
Die beiden Warnungen besagen, dass du deine oben als "Int" definierten Variablen als "Word" ausgeben willst und bei der Umwandlung Informationen verloren gehen können.
Grüsse Holger
 
Jap das Handbuch werd ich mal durcharbeiten, danke.

Zwecks DWord: wollte es einfach mal probieren, habs jetzt aber mit nem Bit gemacht.

Funktioniert soweit auch ganz gut. Die Cursorpositionen werden im Trigger-Zyklus ausgegeben ABER NUR wenn das Objekt "angeklickt" ist.
Jetzt entwerfe ich noch die differenz Berechnung dazu, um damit dann die Position des "geklickten" Objekts zu verändern.

Danke & LG
 
Hi,
muss jetzt das aufwärmen. Es kann doch nicht sein, dass es in C oder VBA bei WINCC 7.x keine Möglichkeit gibt, onMouseOver auszuwerten. Ich hab hierzu ne Frage: Gibt es eine Möglichkeit, über den Umweg "Tooltip" die Sache zu erschlagen? Zum Beispiel durch Abfrage des Tooltiptextes oder so ähnlich?

If Tooltiptext = "Brat" then text = "wurst".

Es grüßt
Sailor
 
Zurück
Oben