WinCC E/A Feld Sichtbarkeit ändern (Prefix) über C-Skript

EMZ

Level-2
Beiträge
232
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kollegen,

ich möchte gerne über einen Skript vorzugsweise C-Skript die Sichtbarkeit eines E/A Feldes in einem Prefix ändern. Habe mir einen Code ausgedacht, der aber nicht funktioniert. Kann mir einer weiterhelfen? Habe WinCC 7.4 auf einem Rechner laufen.

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

char temp;


temp = GetTagChar("name");

if (temp == "test")

SetPropBOOL(lpszPictureName,"Unwinder","EAFeld14Visible",TRUE);

else
SetPropBOOL(lpszPictureName,"Unwinder","EAFeld14Visible",FALSE);

return(0);

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

als erstes fällt mir auf, dass du hier wohl ein Char mit einem String vergleichst
if (temp == "test")
Handelt es sich bei der Variable "name" um ein char oder einen String?


Und dann wird SetPropBOOL so verwendet:
C:
SetPropBOOL(pictureName, objectName, propertyName, value);

Wie ist denn dein Bildaufbau? Also Bildname und Name vom EA Feld?
Für Bildname "Unwinder" und EA Feld Name "EAFeld14" müssten die Zeilen eher so aussehen (sofern Bild nicht tiefer verschachtelt):
C:
SetPropBOOL("Unwinder", "EAFeld14", "Visible", TRUE);
SetPropBOOL("Unwinder", "EAFeld14", "Visible", FALSE);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

als erstes fällt mir auf, dass du hier wohl ein Char mit einem String vergleichst
Er vergleicht zwei Zeiger ob diese auf die gleiche Adresse zeigen, was hier niemals der Fall sein wird. Wenn man den Wunsch hat das in C zu schreiben, dann sollte man auch soweit die Basics beherrschen, dass Strings in C nunmal was ganz anderes sind.
 
Er vergleicht zwei Zeiger ob diese auf die gleiche Adresse zeigen, was hier niemals der Fall sein wird. Wenn man den Wunsch hat das in C zu schreiben, dann sollte man auch soweit die Basics beherrschen, dass Strings in C nunmal was ganz anderes sind.
Wo siehst du hier Zeiger? "test" ist ein konstanter String und temp ein Zeichen ohne Sternchen
 
Wo siehst du hier Zeiger? "test" ist ein konstanter String und temp ein Zeichen ohne Sternchen
Da hast du recht, das ist noch ein weiterer Fehler. So ist "test" aber kein String sondern nur ein einzelnes char. Und GetTagChar gibt einen Zeiger auf ein String zurück. Eigentlich sollte sich das überhaupt nicht kompilieren lassen, zumindest nicht ohne Warnung.

Und "test" ist ein String-Literal mit einem lvalue, d.h. die Zeichen "t", "e", "s", "t", "\0" stehen irgendwo im Speicher mit einer Adresse. Wie wenn du einen pointer to char initialisierst mit:
const char *p = "test";

Dann zeigt p auf die Anfangsadresse von "test" im Speicher. Ist hier const, weil sich der String hier nicht bearbeiten lässt. Genauso ist das wenn er das hier auf Gleichheit prüft (mal angenommen er hätte wenigstens char *temp geschrieben).
 
Zurück
Oben