C Script an EA-feld von type string in WinCC 7

JoopB

Well-known member
Beiträge
883
Punkte Reaktionen
195
Zuviel Werbung?
->Hier kostenlos registrieren
Ich habbe ein EA-feld wo ich ein eine REAL wert aus die SPS wol tonen wie ein string. z.b. Real 1.23 in WinCC "1.2 %" Ich habe al vielle versuche gemacht aber heute komt die richtige wert in Bild. Aber ich muste die String erst mit SetTagCharWait in eine Interne Variable von WinCC schreiben und darnach mit GetTagCharWait lesen , bevor ich er als return an das AE feld kan geben. Mach ich das nicht bekom ich vremde zeichen in das ausgave feld. Ist er ein lossung um das ohne SetTag und GetTag zu machen?

Gruss,
Joop
 

Anhänge

  • ScreenHunter_12 Nov. 17 19.04.jpg
    ScreenHunter_12 Nov. 17 19.04.jpg
    15,6 KB · Aufrufe: 18
  • ScreenHunter_12 Nov. 17 19.05.jpg
    ScreenHunter_12 Nov. 17 19.05.jpg
    69,1 KB · Aufrufe: 15
  • ScreenHunter_12 Nov. 17 19.09.jpg
    ScreenHunter_12 Nov. 17 19.09.jpg
    77,9 KB · Aufrufe: 20

Thomas_v2.1

Well-known member
Beiträge
8.822
Punkte Reaktionen
2.705
Wenn du einen Zeiger auf eine lokale Variable zurückgibst ist dieser nach dem Verlassen der Funktion nicht mehr gültig.
In Standard-C müsste man für sowas malloc() verwenden, und der Aufrufer der Funktion müsste den reservierten Speicher mit free() wieder freigeben damit es kein Speicherleck gibt. Da man das in WinCC nicht kann gibt es dort eine Funktion für eine WinCC eigene Speicherverwaltung mit SysMalloc().

Du musst mit SysMalloc() Speicher für eine Variable anfordern, dann kannst du den Zeiger auf diese Variable als Funktionsrückgabewert verwenden. WinCC kümmert sich dann um die Speicherverwaltung dieser Variable.

Beispiel (ungetestet):
Code:
float getal;
char *uit = SysMalloc(50); /* Speicher für 50 chars reservieren */
getal = GetTagFloat("TestFloat");
sprintf(uit, "afw: %.1f %", getal);
return uit;

Warum zeigst du die Real-Variable denn nicht direkt an sondern der Umweg über den String? Das wäre doch viel einfacher.
 
Zuletzt bearbeitet:
OP
J

JoopB

Well-known member
Beiträge
883
Punkte Reaktionen
195
Zuviel Werbung?
->Hier kostenlos registrieren
Warum zeigst du die Real-Variable denn nicht direkt an sondern der Umweg über den String? Das wäre doch viel einfacher.

Durch dass umsetsen nach ein string konte ich dia wert mit das % zeichen zentrieren in das Ausgave feld.
Ich habe die code noch etwas geanderd zo das ich die Real wert mit ein ziffer hunten die komma und das % ziechen in das Ausgabe feld bekom. zb "12.3 %"
Und viele dank fur die code.
Code:
float getal;
char *uit = SysMalloc(50); /* Speicher für 50 chars reservieren */
getal = GetTagFloat("TestFloat");
sprintf(uit, "  %.1f % %", getal);
return uit;


Gruss,

Joop
 
Oben