WinCC Objekteigenschaften in C-Script ändern

twocaru

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey,

ich will mit einem C-Script die Objekteigenschaft eines Buttons ändern.
Wenn ich klicke soll sich die Eigenschaft "gedrückt" von dem Button von ja auf nein und umgekehrt ändern.

Meine Vorgehensweise wäre:

...
SetToggle(lpszPictureName, "Button8", (!GetToggel));
...

Aber irgendwie funktioniert es nicht wie ich mir das vorstelle.
Kann mir jmd helfen oder weiß jmd wo es eine Art "StepIn" oder "GettinStarted" für die Objektänderung in C-Script gibt?

Vielen Dank!
 
Hi,
Zugriff auf die Objekteigenschaften eines Bildobjektes bekommst du lesend mit den Funktionen
GetPropBOOL, GetPropChar, GetPropDouble und GetPropWord

und schreibenden Zugriff mit den Funktionen
SetPropBOOL, SetPropChar, SetPropDouble und SetPropWord.

Welche Objekteigenschaften verfügbar sind und wie diese heißen, kann man am einfachsten herausfinden indem man die entsprechende
Funktion aus dem Funktionsbaum in das Codefenster herüberzieht bzw. doppelklickt. Dann erscheint der Wizard für den Funktionsaufruf,
und wenn man auf die drei Punkte (...) neben dem Wert klickt, gelangt man in ein Auswahldialog in dem einem alle Objekteigenschaften
aufgelistet werden.

Etwas verwirrend ist dabei, dass du über Set/GetProp-Funktionen nur über die englischen Namen auf die Eigenschaften zugreifen kannst.
Da ist etwas Kreativität bei der Übersetzung gefragt. Die Eigenschaft die du benötigst heißt auf deutsch "Gedrückt" und im englischen dann
eben "Pressed" (hier ist das noch eindeutig).
Welchen Datentyp diese Eigenschaft hat, kannst du herausfinden wenn du im Graphics Designer die Eigenschaften eines Objektes aufrufst.
Kannst du eine Eigenschaft in Ja/Nein ändern dann brauchst du ..BOOL, bei einem Text ..Char, bei einem ganzzahligen Wert ..Word usw.

Theoretisch könntest du also in deinem Mausklick Ereignis folgendes Skript ausführen:

Code:
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
  BOOL bValue;

  bValue = GetPropBOOL(lpszPictureName, lpszObjectName, "Pressed");
  SetPropBOOL(lpszPictureName,lpszObjectName, "Pressed", !bValue);
}

Das liest die Eigenschaft "Pressed" des Objekts in dem diese Funktion aufgerufen wird, und schreibt sie negiert wieder zurück..

Aber eben nur theoretisch, funktioniert in der Realität wohl nicht wie gewünscht.
Denn wenn das Mausklick Ereignis ausgelöst wird, ist die Taste ja schon gedrückt. Wenn man dann
die Eigenschaft liest und negiert, dann bleibt die Taste nicht gedrückt.

Wenn du eine einrastende Taste haben willst, kannst du auch in den Eigenschaften der Taste "Einrasten" auf Ja setzen.
Die Darstellung geht aber wie auch die Änderung über ein Skript bei einem Bildwechsel wieder verloren.

Wenn es dauerhaft sein soll, dann muss man eine interne (oder externe) Variable anlegen, und die "Gedrückt" Eigenschaft der Taste
im Dynamik-Dialog mit dieser Variable verbinden (wichtig ist dann Aktualisierung bei Variablenänderung, sonst flackert die Taste beim Anklicken kurz).
Wenn man diese Variable bei Anklicken der Taste toogelt, dann sollte die Taste dauerhaft rastend sein.
 
Zurück
Oben