Bedienbarkeit von Schaltflächen in C

Bender25

Level-2
Beiträge
584
Reaktionspunkte
20
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
habe folgendes Problem. Irgendwie raff ich es nicht und die Zeit verstreicht ohne Ergebnis...

Soweit bin ich gekommen.... Ich will in abhängigkeit einer ByteVariable die Bedienbarkeit False/true...



#define TagName "Variable"

BYTE tag;

tag=GetTagByte(TagName);

if (tag&2)

//hier die enable = true anweisung...aber wie?

else
//hier die enable = false anweisung...aber wie?



Danke im vorraus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Bender25 schrieb:
Ich will in abhängigkeit einer ByteVariable die Bedienbarkeit False/true...

Das geht so :

#define TagName "Variable"

BYTE tag;

tag=GetTagByte(TagName);

if (tag&2)
{
SetPropBool(lpszPictureName, lpszobjectName, "Operation", TRUE)
}
else
{
SetPropBool(lpszPictureName, lpszobjectName, "Operation", FALSE)
}

Gruss
Question_mark
 
Zuletzt bearbeitet:
Praktikant schrieb:
hi,

warum mit c und nicht über den dynamik-dialog ?

weil ich verschieden Bit in verschiedenen Variablen habe.
Und da es WinCC5 ist hab ich auch kein VBS



Vielen dank Question_mark... Werd ich morgen dann gleich mal angreifen.

Danke!!!
 
Hallo Bender25,
Bender25 schrieb:
weil ich verschieden Bit in verschiedenen Variablen habe.

Im Prinzip lassen sich auch über den Dynamikdialog diese logischen Verknüpfungen herstellen (vielleicht hat der "Praktikant" das gemeint).
Nur hat hier Siemens die Operatoren in der Dokumentation leider völlig verschwiegen, warum auch immer....
Deshalb kann man, genügend Zeit vorausgesetzt, diese Operatoren durch die Methode "Try and error" ausprobieren. Also z.B. "^", "|" und Konsorten.
Wegen der fehlenden Doku dazu empfehle ich allerdings in Deinem Fall auch das C-Script anzuwenden.

Gruss
Question_mark
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Bender25,

Ach ja, noch ein Hinweis : Benutze anstatt
Bender25 schrieb:
tag=GetTagByte(TagName);

besser das Konstrukt : GetTagByteWait(TagName) weil sonst unter ungünstigen Umständen das Script mit der der nächsten Zeile fortgesetzt wird, bevor die Funktion "GetTagByte" ein korrektes Ergebnis geliefert hat. Das gibt dann schon mal ganz erstaunliche Ergebnisse in der Runtime.....
Näheres zu den "Wait"-Funktionen findest Du in der WinCC-Hilfe, das will ich jetzt hier nicht alles wiederholen.

Gruss

Question_mark
 
Question_mark schrieb:
Hallo Bender25,

Ach ja, noch ein Hinweis : Benutze anstatt


besser das Konstrukt : GetTagByteWait(TagName) weil sonst unter ungünstigen Umständen das Script mit der der nächsten Zeile fortgesetzt wird, bevor die Funktion "GetTagByte" ein korrektes Ergebnis geliefert hat. Das gibt dann schon mal ganz erstaunliche Ergebnisse in der Runtime.....
Näheres zu den "Wait"-Funktionen findest Du in der WinCC-Hilfe, das will ich jetzt hier nicht alles wiederholen.

Gruss

Question_mark


super vielen dank. Hast mir sehr weitergeholfen. Danke!
Werd ich gleich noch umklamüsern.
Das ist aber Interesant das dies ganze auch mit dem Dynamik Dialog geht. hatte ich nicht gewußt. Wo kann man denn darüber mehr erfahren?
 
Question_mark schrieb:
Hallo Bender25,

Ach ja, noch ein Hinweis : Benutze anstatt


besser das Konstrukt : GetTagByteWait(TagName) weil sonst unter ungünstigen Umständen das Script mit der der nächsten Zeile fortgesetzt wird, bevor die Funktion "GetTagByte" ein korrektes Ergebnis geliefert hat. Das gibt dann schon mal ganz erstaunliche Ergebnisse in der Runtime.....
Näheres zu den "Wait"-Funktionen findest Du in der WinCC-Hilfe, das will ich jetzt hier nicht alles wiederholen.

Gruss

Question_mark

hmm habe doch ein Problem. Wenn ich die C Aktion jetzt unter "Bedienfreigabe" kopier bekomm ich eine Fehlermeldung

error (0086) : funktion '_main' does not return a value

unter den anderen eigenschaften (Mausklick) geht es,aber sollte ja nicht auf Mausklick funktionieren.

Hier mal der C Code

#define TagName"Testvariable_8bit"
BYTE tag;

tag=GetTagByteWait(TagName);

if (tag&4)

SetProbBOOL(lpszPictureName,lpszobjectName,"Operation",TRUE);

else

SetProbBOOL(lpszPictureName,lpszobjectName,"Operation",FALSE);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
am ende muss return(0)

Code:
#define TagName"Testvariable_8bit"
BYTE tag;

tag=GetTagByteWait(TagName);

if (tag&4)

SetPropBOOL(lpszPictureName,lpszObjectName,"Operat ion",TRUE);

else

SetPropBOOL(lpszPictureName,lpszObjectName,"Operat ion",FALSE);

return(0);
 
Irgendwie funktioniert das ganze nicht so richtig...

Die Fehlermeldung ist jetzt zwar weg, aber wenn ich nun das Fenster aufrufe ist der Button nicht freigegeben... egal wie ich True bzw False setze.... Anderst herum ist es so wenn ich nach "else" den rest auskommentier funktioniert es. Also der Button wechselt von freigegeben nach gesperrt.

Nehm ich einen 2. Button und kopier den gleichen C Code dort in das Attribut Bedienfreigabe und setz die erste Anweisung nach IF auf "False" Zeit der Button das gleiche verhalten wie der erste. Obwohl der eine bei Bit 1 True ist.... :confused: völlige Verwirrung...


Kann man mit euch mal ein Bier trinken gehen? :ROFLMAO:
 
Bender25 schrieb:
Wenn ich die C Aktion jetzt unter "Bedienfreigabe" kopier

Da sollte das auch nicht unbedingt rein. Mein Vorschlag bezog sich darauf, die Bedienbarkeit des Buttons z.B. bei Bildanwahl festzulegen (Darum auch kein Return(0) !!!). Man muss dann allerdings lpszObjectName durch den Namen des Buttons durch einen Textstring ersetzen z.B. "MeinButton".

Wenn die Aktion unter "Bedienbarkeit ausgeführt wird, so wird bei dem obigen Konstrukt natürlich immer "FALSE" zurückgegeben.
Unter Bedienbarkeit sieht die Aktion so aus :

#define TagName"Testvariable_8bit"
BYTE tag;

tag=GetTagByteWait(TagName);

if (tag&4)
{
return TRUE
}
else
{
return FALSE
}
Habe nur keine Zeit, das jetzt zu testen, also aus der Hüfte geschossen...

Bender25 schrieb:
Kann man mit euch mal ein Bier trinken gehen?
Aber immer, frühestens heute abend beim Forumstreff

Gruss

Question_mark
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
sorry, war vorhin ein schnellschuss von mir,
versuch es mal so.

Code:
#include "apdefap.h"
 BOOL _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
#define TagName"Testvariable_8bit"
// WINCC:TAGNAME_SECTION_END

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

BYTE tag;
tag=GetTagByteWait(TagName);

if (tag&4)
    return(TRUE);
else
    return(FALSE);
}
 
So.... Meld mich zurück aus´m Urlaub....Vielen dank euch beiden. Werds das ganze heute gleich einmal testen....
 
Hallo zusammen...Brauch wieder eure Hilfe.. Das mit der Bedienbarkeit hat super funktioniert. Nur bekomm ich jetzt folgendes nicht hin. Ich will ein weiteres Bit aus einem anderen Byte auslesen und dann die Bedienbarkeit mittels 2 Bit realisieren. Sprich wenn beide Bit aus den verschiedenen Byte TRUE dann Bedienbarkeit TRUE..Dank euch schon mal....
 
Zurück
Oben