Probleme mit string und SetTagCharWait()

jaepen

Level-1
Beiträge
22
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich möchte gerne mit einem C-Script String variablen (immer 8 Zeichen) Verarbeiten und über ein EA Feld ausgeben.

Mein 1. Problem ist nun das es wohl keinen Datentyp String gibt:
Stimmt das? Gibt es den in VB?

Um das zu umgehen habe ich mit einem Char Arry gearbeitet, und zwar so:

Code:
[FONT=Arial]int i = 1;[/FONT]
[FONT=Arial]struct couple {[/FONT]
[FONT=Arial]char string[8];[/FONT]
[FONT=Arial]int var1;[/FONT]
[FONT=Arial]} dataset[200] ;[/FONT]
 
[FONT=Arial]dataset[1].var1 = 418;[/FONT]
[FONT=Arial]dataset[1].itemid[8] = "12341234";[/FONT]
 
[FONT=Arial]// Variablen ausgeben (Nach WinCC)[/FONT]
 
[FONT=Arial]SetTagCharWait( "TAG",dataset[1].itemid);[/FONT]
 
[FONT=Arial]}[/FONT]

Nur leider funktioniert das nicht. Weiß jemand wo der fehler ist???

Wenn ich es ohne struktur mache mache funktioniert es. Ungefähr so:


Code:
[FONT=Arial]int i = 1;[/FONT]
[FONT=Arial]char test[8] = "12345678"[/FONT]
[FONT=Arial]// Variablen ausgeben (Nach WinCC)[/FONT]
 
[FONT=Arial]SetTagCharWait( "TAG",test);[/FONT]
 
[FONT=Arial]}[/FONT]

Die Struktur wäre aber sehr wichtig. Wo mache ich den Fehler?
Bitte um Hilfe!

Gruß Jaepen
 
Zuletzt bearbeitet:
Hallo!

Mit WinCC hatte ich schon länger nicht mehr zu tun, aber:

Code:
int int;

Das sieht komisch aus. Meinst Du "int itemid"?

Code:
dataset[1].int = 418;

Hier auch.

Code:
SetTagCharWait( "TAG",dataset[1].itemid);

Und hier bestimmt "dataset[1].string".
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Fehler

Hi,

ja, ich habs gesehn mir sind da zwei fehler unterlaufen. Ich hab den cod etwas gekürzt für hier ins forum.

int int -> sollt einfach nur "int Irgendeinevariable" heißen. ist ja auch nicht wichtig für hier das problem.
Und die andere zeile soll natürlich so aussehen

Code:
SetTagCharWait( "TAG",dataset[1].itemid);
 
Du solltest vielleicht erstmal die C-Basics verstehen, bevor du dich daran wagst.
Genauer: char-Arrays, Zeichenkettenfunktionen wie strcpy und Konsorten.

Oder nimmst gleich VB, da kannst du nicht so viel kaputt machen.
 
Du solltest vielleicht erstmal die C-Basics verstehen, bevor du dich daran wagst.
Genauer: char-Arrays, Zeichenkettenfunktionen wie strcpy und Konsorten.

Oder nimmst gleich VB, da kannst du nicht so viel kaputt machen.

Hmm.. naja, so richtig hilft mir das jetzt nicht weiter.
Ich weiß immer noch nicht was ich da falsch mache.
Warum wäre es in VB einfacher?

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hmm.. naja, so richtig hilft mir das jetzt nicht weiter.
Ich weiß immer noch nicht was ich da falsch mache.
Warum wäre es in VB einfacher?
Weil man in VB ohne lesen und nur durch probieren weiterkommt, in C aber nicht.

In jedem C-Grundlagenbuch kommen Zeichenketten ziemlich am Anfang.
Bei dir sind so viele Sachen dahingehend falsch, dass du noch nie was gelesen haben kannst.
Code:
dataset[1].itemid[8] = "12341234";
Das geht aus mehreren Gründen nicht.
1.
Mit
char string[8];
reservierst du Speicher für ein Array mit 8 chars. Ein C-String endet aber immer mit der binären Null (\0). D.h. string[8] kann eine Zeichenkette mit maximal 7 Zeichen aufnehmen.

2.
Du kannst in C einer Zeichenkette nicht mit "=" einen Wert zuweisen. Um Zeichenketten zu kopieren musst du die entsprechenden Funktionen aus der string-Bibliothek verwenden.
Also nach der Art:
strcpy(dataset[1].itemid, "1234123");
Und hier musst du aufpassen, denn du kannst in C mit strcpy auch einen längeren String als 7 Zeichen in deine Variable schreiben, und dann kracht es.

Aber eigentlich brauche ich das garnicht alles hier aufzuschreiben, denn dazu gibt es Imformationen ohne Ende im Netz:
http://openbook.galileocomputing.de/c_von_a_bis_z/

im besonderen
http://openbook.galileocomputing.de/c_von_a_bis_z/011_c_arrays_001.htm
 
Hi

zu Punkt 1.
Das hab ich mir eigentlich schon gedacht.
Ich hab mich jedoch nur gewundert warum es funktioniert hat wenn ich das ganze ohne die struktur gemacht hab.
Wenn ich char var[8]="12345678" versucht hab hat das funktioniert.
char var[9] habe ich nicht gemacht, weil der TAG in WinCC als 8bit textvariable deklariert ist. Würde das dann dennoch funktionieren?

Würde denn dann sowas funktionieren:

Code:
[FONT=Arial]int i = 1;[/FONT]
[FONT=Arial]struct couple {[/FONT]
[FONT=Arial]char itemid[9];[/FONT]
[FONT=Arial]int var1;[/FONT]
[FONT=Arial]} dataset[200] ;[/FONT]
 
[FONT=Arial]dataset[1].var1 = 418;[/FONT]
[FONT=Arial]strcpy(dataset[1].itemid, "1234123");
[/FONT] 
[FONT=Arial]// Variablen ausgeben (Nach WinCC)[/FONT]
 
[FONT=Arial]SetTagCharWait( "TAG",dataset[1].itemid);[/FONT]
 
[FONT=Arial]}[/FONT]
 
char var[9] habe ich nicht gemacht, weil der TAG in WinCC als 8bit textvariable deklariert ist. Würde das dann dennoch funktionieren?
Die beiden Dinge haben nichts miteinander zutun.
Der WinCC Typ 8bit Textvariable sagt aus, dass ein Zeichen als Wert von 0-255 gespeichert wird. Das heißt es gibt maximal 255 verschiedene Zeichen (siehe ASCII-Tabelle). Irgendwelche russischen Zeichensätze oder spezielle Sonderzeichen kannst du in dieser Variable nicht speichern.

Ein char in C hat ebenfalls (mindestens) 8-Bit, kann also ebenfalls 255 verschiedene Zeichenwerte aufnehmen. Mit der Länge des Textes/Stringes hat das aber nichts zu tun. Diese stellst du in WinCC bei der Textvariable an anderer Stelle ein.

Was nicht geht, ist den Text einer 16-Bit Textvariable auslesen und diesen in ein char-Array speichern.

Dein strcpy sollte so funktionieren, ob die Tag-Funktion dazu passt kann ich so nicht sagen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
AH, ok, vielen Dank mal soweit. Ich werde das am Montag mal gleich ausprobieren.
Mit dem Tag das müsste auch funktioieren, das hab ich mit einem einfachen char array schon hinbekommen.

Noch interessehalber:
Was macht dann diese 16bit Textvariable, bzw wozu brauche ich die?
Für russische Textzeichen?

Danke nochmals.

Gruß Jaepen
 
AH, ok, vielen Dank mal soweit. Ich werde das am Montag mal gleich ausprobieren.
Mit dem Tag das müsste auch funktioieren, das hab ich mit einem einfachen char array schon hinbekommen.

Noch interessehalber:
Was macht dann diese 16bit Textvariable, bzw wozu brauche ich die?
Für russische Textzeichen?

Danke nochmals.

Gruß Jaepen

Kleine Hilfe:

Das "Danke-Knöpfle" befindet sich Rechts Unten ...

Gruß Roland
 
Zurück
Oben