[WINCC] Char Variable Problem

jensenwb

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

ich habe einen button mit folgenden c-skript bestückt

Code:
char *test1;
char *test2;

test1 = "Hallo Welt";
test2 = "Wie geht es Dir";

SetText(lpszPictureName,"Statischer Text1",test1);
SetText(lpszPictureName,"Statischer Text2",test2);

free(test1);
free(test2);

SetText(lpszPictureName,"Statischer Text3",test1);
SetText(lpszPictureName,"Statischer Text4",test2);

wenn ich auf dem button mehrfach drauf klicke dann hängt sich WinCC auf, woran kann das liegen ????
 
Hallo jensenwb

Hier gibst du den Speicher frei.
free(test1);
free(test2);

Warum gibst du überhaupt Speicher frei, da du ja keinen mit "Malloc" reserviert hast.
Durch fehlerhafte Speicherbehandlung kan es schnell zu Buffer Overflows oder Memory Leaks kommen.
Nur in Außnamefällen sollte man die Speicherverwaltung nicht WinCC überlassen.
Grüsse Holger

Wieder meine Empfehlung: Siemens Handbuch A5E32315919-AA
 
poste mal den kompletten Code, der am Button hängt. welche WinCC Version. was bedeutet, haengt sich auf. wie oft und wie schnell hintereinander betätigtSt Du den Button. Gruß

ps schau dir mal apdiag zur Fehlersuche an. und evt. den ms Office Script debugger installieren.
 
Zuletzt bearbeitet:
hallo,

hier der komplette code
Code:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// 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

char *test1;
char *test2;

test1 = "Hallo Welt";
test2 = "Wie geht es Dir";

SetText(lpszPictureName,"Statischer Text1",test1);
SetText(lpszPictureName,"Statischer Text2",test2);

free(test1);
free(test2);

SetText(lpszPictureName,"Statischer Text3",test1);
SetText(lpszPictureName,"Statischer Text4",test2);



}

ich benutze wincc 7.2, habe es aber bei wincc 6.0 auch probiert, da passiert das gleiche.

also es ist so das die routine einmal gemacht wird und wenn ich ein 2tes mal auf dem button drücke dann bleibt der button so als ob er gedrückt ist. dann wenn ich die runtime stoppe bleibt er bei 58% hängen, da wo der script gestoppt wird. danach muss ich den OPC server reparieren und dann geht es wieder für einmal.
 
Naja,

langsam vorarbeiten würde ich sagen.

- zuerstmal in nem neuen Projekt testen, wo nur 1 Bild drin ist, sonst nix, und auf dem Rechner kein OPC oder sonstwas...
- vielleicht nur mit einem char und einem SetText probieren...
- was ist mit apdiag? spuckt der irgendwelche Fehlermeldungen aus?
- mit dem Scriptdebugger Haltepunkte setzen oder schauen, was sonst noch so für scripte laufen
- hast Du schon die aktuellen updates (Upd5) von wincc 7.2 installiert?
- probier mal ohne die Variablen:
Code:
SetText(lpszPictureName,"StatischerText1","ExampleText");


Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
achso,

funktioniert der Code denn beim ersten mal? also wird in allen 4 Textfeldern der richtige Text angezeigt?

ansonsten würd ich auch mal die Variablen so deklarieren:

Code:
char test1[200];
char test2[200];

Größe halt je nach maximal benötigter Anzahl an Zeichen.

Gruß.
 
also beim ersten mal funktioniert der code,

ich arbeite mich gerade in wincc ein bißchen ein, wo finde ich den apdiag und wie kann ich es nutzen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
und da fängst Du gleich mit Scripten an?

Warum denn mit den Grundlagen beginnen?
Also ducati du stellst ja unerfüllbare Anforderungen. :ROFLMAO:

Es ist so etwas von dumm, immer sich das auszusuchen, wovon man keinerlei Ahnung hat und wenn dann noch keine Grundlagen da sind....

Ist das der Zeitgeist von heute?


bike
 
free() frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc(), calloc() or realloc(). Otherwise, or if free(ptr) has already been called before, undefined behaviour occurs.

Das ist eine ganz dumme Idee und ich vermute es verursacht hier auch dein Problem.
Die Quelle wo das so steht kannst du getrost vergessen.
(Unabhängig davon wäre es immer noch falsch, weil in der nächsten Zeile wieder auf den freigegebenen Pointer zugegriffen wird.)
 
Zurück
Oben