# WINCC V6.2 Bit setzen/rücksetzen



## HarbichC (7 Juni 2008)

Hallo,

nach langer Zeit habe ich mal wieder eine Frage an die Spezialisten!

Gibt denn eigentlich keine Möglichkeit, ein Bit bei Drücken einer F-Taste zu setzten und nach loslassen wieder rückzusetzen?
Ich möchte allerdings nicht, dass ich vorher ein Button fokussiere!
Im Grunde soll der Bediener immer das Bit über die F-Taste setzen können, unabhängig im welchen Bild er sich gerade befindet...

Vielen dank im voraus und beste Grüße

Christian


----------



## Ralle (7 Juni 2008)

Das geht, zumindest mit Bits aus Byte-Word-DWord-Variablen.

Am besten, du fügste einen Button ein und nimmst dann den Dynamik-Wizzard "Bit setzen/rücksetzen" in "Standard-Dynamiken".

Für Setzen von Bit 0 bei drücken der linken Maustaste wird dann z.Bsp. folgender Code generiert:


```
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
 // WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
#define TAG_0 "wTest"
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END

DWORD dwHelp1,dwHelp2;

dwHelp1=GetTagDWordWait(TAG_0);
dwHelp2=dwHelp1|1;
SetTagDWordWait(TAG_0,dwHelp2);

}
```


zum Rücksetzen bei loslassen der linken Maustaste:


```
#include "apdefap.h"
void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
 // WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
#define TAG_0 "wTest"
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END

DWORD dwHelp1,dwHelp2;

dwHelp1=GetTagDWordWait(TAG_0);
dwHelp2=dwHelp1&(0xFFFFFFFF^1);
SetTagDWordWait(TAG_0, dwHelp2);

}
```

Wenn du das allgemeingültig haben willst, mußt du den Inhalt der Scripte  das in Scripte einfügen und diese dann bei jedem Button einhängen. Was meinst du mit "ohne Fokussieren"? Kann man nicht Shortcuts vergeben, im Notfall über Toolbars oder Menüs? Oder hat du das wirklich für ALLE Buttons vor? Bei jedem beliebigen Button automatisch, das wird so einfach dann nicht gehen wenn überhaupt.


----------



## HarbichC (7 Juni 2008)

Hallo Ralle,

vieleicht habe ich mich nicht richtig ausgedückt; 
Es geht mir darum, mittels der Tastatur und einer Funktionstaste ein Bit zu setzen bzw. rückzusetzen, unabhängig in welchen WinCC Bild sich der Bediener befindet, einfach gesagt F1 Taste drücken Bit setzen -> losslassen Bit rücksetzen.
Ich habe es bis jetzt mit den Attribut "Tastatur drücken/losslassen" und dann per Skript eine Abfrage der gedrückten Taste gemacht, das geht aber nur dann, wenn das dementsprechende Objekt fokussiert ist.

Grüsse,

Christian


----------



## Ralle (7 Juni 2008)

Ja, da hatte ich bei meiner Antwort schon befürchtet, daß ich am Thema vorbeischramme  .

Du kannst einen Button einfügen und diesem eine Funktionstaste als Horkey zuweisen (Rechtsclick auf den Button, dann "Konfigurationsdialog". Dann mußt du diesen Button auf jedem Blatt "verstecken", so könnte es evtl. zu machen sein.


----------



## Kai (7 Juni 2008)

Hier mal ein Lösungsvorschlag:

Man verbindet ein Objekt über einen Hotkey mit einer F-Taste der Tastatur.

Dann verbindet man das Ereignis Mausklick des Objektes mit einer VBS-Aktion.

In der VBS-Aktion wird eine Bool-Variable getoggelt.

Das so projektierte Objekt fügt man in jedes Bild oder ein eventuell vorhandenes Hintergrundbild ein.

In der Runtime toggelt dann die Bool-Variable mit jeder Betätigung der F-Taste.

Gruß Kai


----------



## Kai (7 Juni 2008)

Und noch ein paar Bilder aus der Runtime.

Gruß Kai


----------



## Kai (7 Juni 2008)

Nachtrag:

Man kann als Objekt nur einen Button mit einem Hotkey verbinden. 

Man muss hier also mit einen Button arbeiten.

Gruß Kai


----------



## HarbichC (8 Juni 2008)

Also ich muss schon sagen,

ich bin schwer begeistert...
Werde das morgen gleich mal ausprobieren, wenn ich in die Firma komme,
bis dahin erstmal vielen Dank!!!


----------



## HarbichC (8 Juni 2008)

*WinCC V6.2 Bit setzen rücksetzen*

Hallo Leute,

jetzt hatte ich doch die Gelegenheit den Lösungsvorschlag von Kai auszuprobieren; funktioniert soweit auch ganz gut.

Leider darf das Bit nur beim drücken der Funktionstataste gesetzt sein, nach losslassen muss es dann zurückgsetzt werden!

Ist so ne Art Freigabetaste!
Gibts da auch ne Chance?


Grüsse Christian


----------



## Ralle (8 Juni 2008)

HarbichC schrieb:


> Hallo Leute,
> 
> jetzt hatte ich doch die Gelegenheit den Lösungsvorschlag von Kai auszuprobieren; funktioniert soweit auch ganz gut.
> 
> ...



Ich kann dir nicht ganz folgen.
Du mußt dem Button ein Ereignis beim Drücken einer Tastaturtaste zuweisen (Wert setzen) und ein Ereignis beim Loslassen einer Tastaturtaste (Wert zurücksetzen). Wenn du dann die zugewiesene Funktionstaste betätigst, wird der Button betätigt, das Ereignis "Wert setzen" wird ausgelöst. Beim Loslassen der Funktiontaste wird das Ereignis "Wert zurücksetzen" ausgelöst. Grad getestet, geht so.

PS: Mit Mausevents funktioniert das nicht, du mußt Tastaturevents benutzen!


----------



## HarbichC (8 Juni 2008)

Ja so funktioniert das, aber nur solange wie der Fokus auf dem Button liegt....
Wähle ich einen völlig anderen Button oder ein Objekt an, so funktioniert mein Funktionstaste nicht mehr (bis ich wieder auf den Button klicke)

Oder ist das nur bei mir so und ich bin zu doof 

Vielleicht mal zur Funktion der Anlage: Unser Bediener muss eine Freigabe drücken um eine Bewegung ausführen zu können (Funktionstaste an eine Tablet PC).
Danach muss er weitere Eingaben auf dem Touchscreen machen können (z.B. Geschwindigkitsvorgabe) dabei aber die ganze Zeit die F-Taste drücken.
Lässt der Biediener die F-taste los, so stoppt die Bewegung


----------



## HarbichC (8 Juni 2008)

Ja so funktioniert das, aber nur solange wie der Fokus auf dem Button liegt....
Wähle ich einen völlig anderen Button oder ein Objekt an, so funktioniert mein Funktionstaste nicht mehr (bis ich wieder auf den Button klicke)

Oder ist das nur bei mir so und ich bin zu doof 

Vielleicht mal zur Funktion der Anlage: Unser Bediener muss eine Freigabe drücken um eine Bewegung ausführen zu können (Funktionstaste an eine Tablet PC).
Danach muss er weitere Eingaben auf dem Touchscreen machen können (z.B. Geschwindigkitsvorgabe) dabei aber die ganze Zeit die F-Taste drücken.
Lässt der Biediener die F-taste los, so stoppt die Bewegung

Grüsse Christian


----------



## Ralle (8 Juni 2008)

Ne, du bist nicht zu doof, siemens ist wieder mal zu doof, was denken die sich nur dabei  .

Ich hab 3 Button angelegt, einer mit "F2", einer Mit "F4" und einer ohne jede Beschaltung. Dabei hab ich festgestellt, der Hotkey interessiert WinCC gar nicht. F2 und F4 funktioniert nur, weil Tastaturevents definiert sind und dazu müssen sie fokussiert sein. Dann funktioniert ja jede beliebige Taste. ISt der 3 Button fokussiert, reagiert WinCC nicht auf die F-Tasten. Ok, ich teste das auf einem Mac mit virtuellem XP, aber bisher ging da Alles. Vielleicht fällt ja noch jemandem was dazu ein.


----------



## Ralle (8 Juni 2008)

Geht auch auf dem Laptop (XP Prof. SP3) nicht, Funktionstasten als Hotkey an Buttons interessieren mein installiertes WinCC6.2 momentan nicht die Bohne. :twisted: Quäl doch mal die Hotline, aber vergiß bitte nicht uns das Ergebnis mitzuteilen.


----------



## Kai (8 Juni 2008)

Hier noch mal ein neuer Lösungsvorschlag:

Für die Abfrage der F2-Taste kann man folgendes C-Script als globale Aktion programmieren:


```
#include "apdefap.h"
int gscAction( void )
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
// F2-Taste abfragen
 
if (GetAsyncKeyState(VK_F2) & 0x8000)
    SetTagBit("F2", 1);
else
    SetTagBit("F2" ,0);
return 0; 
}
```
 
Wenn die F2-Taste gedrückt wird, wird die Bool-Variable F2 gesetzt, und wenn die F2-Taste losgelassen wird, wird die Bool-Variable F2 wieder zurückgesetzt.

Gruß Kai


----------



## Kai (9 Juni 2008)

Ralle schrieb:


> Ich hab 3 Button angelegt, einer mit "F2", einer Mit "F4" und einer ohne jede Beschaltung. Dabei hab ich festgestellt, der Hotkey interessiert WinCC gar nicht. F2 und F4 funktioniert nur, weil Tastaturevents definiert sind und dazu müssen sie fokussiert sein. Dann funktioniert ja jede beliebige Taste. ISt der 3 Button fokussiert, reagiert WinCC nicht auf die F-Tasten. Ok, ich teste das auf einem Mac mit virtuellem XP, aber bisher ging da Alles. Vielleicht fällt ja noch jemandem was dazu ein.


 
Der Hotkey funktioniert nur mit dem Buttonereignis "Mausklick":



> Beim Buttonereignis "Mausklick" wird eine Aktion ausgeführt, wenn
> 
> ein Mausklick auf diesen Button ausgeführt wird oder
> der Button den Fokus besitzt und die Leertaste gedrückt wird.
> ...


Welche Besonderheit ist bei der Aktionsprojektierung hinter dem Ereignis "Mausklick" bzw. "Tastatur drücken" bei einem Button zu beachten?

Gruß Kai


----------



## Bender25 (9 Juni 2008)

Habs nicht 100%ig durchgelesen... Aber du kannst den Button ja unsichtbar schalten. Funktioniert trozdem...


----------



## Ralle (9 Juni 2008)

Kai schrieb:


> Der Hotkey funktioniert nur mit dem Buttonereignis "Mausklick":
> 
> Welche Besonderheit ist bei der Aktionsprojektierung hinter dem Ereignis "Mausklick" bzw. "Tastatur drücken" bei einem Button zu beachten?
> 
> Gruß Kai



Argh, irgendwie komm ich mit dieser dämlichen WinCC-Hilfe einfach nicht klar, genau wie mit der Siemens-Homepage. Anscheinend unterscheidet sich meine "Denke" grundlegend von der der Siemens-Leute. Ich finde bei denen einfach nie auf Anhieb die richtigen/wichtigen Informationen. geht das nur mit so? 

Toll aber, das das nur bei Mausclick geht, warum soll man auch mal was so machen, wie es alle andern machen würden . Das wäre doch unsimensianisch!


----------



## HarbichC (9 Juni 2008)

Hallo Leute,

habe das C-Script von Kai eingesetzt, funktioniert tadellos, so wie ich es mir vorgstellt habe!!!

Habe trotzdem mal die Hotline bezüglich der Problematik Button/Tastatur kontaktiert;

Bin gespannnt was denen dazu einfällt!!! 

Werde euch auf dem Laufenden halten, besten Dank nochmals für Eure super Hilfe.

Grüsse Christian


----------



## simaticanfänger (3 Mai 2010)

"Man verbindet ein Objekt über einen Hotkey mit einer F-Taste der Tastatur. Dann verbindet man das Ereignis Mausklick des Objektes mit einer VBS-Aktion. In der VBS-Aktion wird eine Bool-Variable getoggelt. "

Hört sich spannend an - jedoch habe ich noch nie mit VBS gearbeitet und würde gerne auch diese Funktion umsetzen - kan mir vielleicht da jemand auf die sprünge Helfen oder geht das auch anders

Gruß


----------

