# WinCC 6.0 Bit setzen/rücksetzen



## zwerg77 (2 Dezember 2008)

Bitte um Hilfe! Habe in WinCC eine Variable die heißt "MD110" - Vorzeichenlos 32Bit! Nun möchte ich mit einem Taster das 24. Bit (M110.0) aktivieren und wenn ich den Taster wieder loslasse - soll sich der Merker zurücksetzen. Ich schätze mal das es mit einer C-Aktion am besten geht! Kann mir wer mal die beiden Befehlszeichen fürs setzen und rücksetzen zukommen lassen. (Will nicht jedes einzelne Bit als Variable anlegen) DANKE!!


----------



## Jenzzzz (2 Dezember 2008)

Hallo zwerg77,

hab das bei mir mit WinCC 6.2 im Graphics Editor mit dem Dynamic Wizard "Bit setzen/rücksetzen" gemacht. Variable als vorzeichenlosen 32bit Wert erstellt. Taster im Editor eingefügt-> Doppelklick auf Dynamic Wizard "Bit setzen/rücksetzen" ->Linke Maustaste drücken setzt das 24te Bit und loslassen setzt es zurück

_Hier das Skribt für Taste drücken:_
{
 // WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
#define TAG_0 "MD110"
// WINCC:TAGNAME_SECTION_END

// WINCCICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCCICNAME_SECTION_END

DWORD dwHelp1,dwHelp2;

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

}

_und hier für loslassen:_

{
 // WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
#define TAG_0 "MD110"
// WINCC:TAGNAME_SECTION_END

// WINCCICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCCICNAME_SECTION_END

DWORD dwHelp1,dwHelp2;

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

}


----------



## Thomas_v2.1 (2 Dezember 2008)

Jenzzzz schrieb:


> dwHelp2=dwHelp1|16777216;



Also ich bin ja kein Freund von solchen "Magic Numbers".
Wenn ich Bit 24 setzen will schreibe ich in C einfach sowas (und man braucht auch nicht zu rechnen);

```
dwHelp2 = dwHelp1 | (1 << 24);
```


----------



## zwerg77 (3 Dezember 2008)

Danke für eure Antworten! Hab mit so einer C-Aktion noch nie was gemacht. Hab bis jetzt jedes Bit extra angelegt! (Das kann ins Geld gehen!!) Wie lautet nun der Vollständige Quelltext, wenn ich von meiner Variable "MD110" das Bit 24 setzen will, und beim loslassen des Taster wieder rücksetzen will. (Vielleicht kann jemand eine Graphik von der C-Aktion hier reinstellen) Aber mal ganz anders - geht das ganze nicht ein bisschen einfacher - ich meine so wie in WinCC Flex?


----------



## Jenzzzz (3 Dezember 2008)

Hallo zwerg77,

normalerweise brauchst du nur das Skript für drücken bzw. loslassen kopieren und dann im Graphics Designer bei C-Aktion wieder einfügen oder du machst es dir ganz einfach und nimmst im Graphics Designer den Dynamic Wizard->Standard Dynamiken->Bit setzen/rücksetzen oder du siehst mal in der WinCC Hilfe unter "Dynamic-Wizard" nach.

MFG Jenzzzz


----------



## zwerg77 (4 Dezember 2008)

Trägt das zur Lösung *meines* Problems auch bei?!?


----------



## hmiverbieger (7 Dezember 2008)

Der Lösungsansatz von Jenzzzz ist genau der Richtige!

Kann ich nur bestätigen.


----------

