type umwandeln in CoDeSys St

Hm, erkläre nochmal genau was du wandeln willst:

1.) Quell-Datentyp und einen Beispielwert
2.) Ziel-Datentyp

Um einen String in einen anderen Wert zu konvertieren gibt es diverse Konvertierungsfunktionen. Z.B. um einen String in einen Integer zu wandeln gibt es STRING_TO_INT. Für andere Umwandlungen hat das STRING_TO... eine entsprechend andere Endung wie BOOL/REAL/TIME etc.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke erstmal,
ich habe festgestellt dass ich mein problem nicht richtig erklärt habe.
hier ist die genaue beschreibung :
ich habe ein csv datei die ich konvertiere in einer string-Array, anschließend musse ich der String-Array in ein andere selbst definerte type zu umwandeln.
Hat jemand da eine Idee wie ich das problem lösen könnte?

Et merci en avance
 
Das Problem ist immer noch nicht verständlich. Schreib doch mal ein Beispiel. Was steht in einem String Deines Arrays und wie soll das im dazugehörigen Struct aussehen?
 
Bonjour,

ich lese Daten von einen *.csv Datei und ich tue sie konvertieren dabei in ein Array von stringformat: der so deklariert:
data : Array[0..MAX_CSV_ROWS,0..MAX_CSV_COLUMNS] of String(MAX_CSV_FIELD_LENGTH); (*Jetzt das ist mein quellArray die ich in ein andere Array konvertieren will; der neue Array brauche ich um weiter zu arbeiten und er ist so deklariert :*)
temp: Array[0..MAX_CSV_ROWS,0..MAX_CSV_COLUMNS] of t_array;

N.B:
t_array ist ein neue Datentype die ich erstellt habe nach mein Bedürfnisse, und die sieht so aus :
TYPE t_array :
Struct
Zo:uint;
sTemp:Lreal;
eTemp:Lreal;
usFehler:Lreal;
osFehler:Lreal;
END_STRUCT
END_TYPE


und jetzt die Frage ob jemand einen Vorschlag hat wie das gehen soll?

falls immer noch nicht klar ist können sie ruhig weitere Faggen stellen ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eigentlich müsste dein t_array genau so viele Felder haben wie Spalten in einer Zeile der CSV-Datei vorhanden sind.
Dann ist temp nur noch ein eindimensionales Array, weil die zweite Dimension quasi in den Elemtenten der Struktur steckt.
Sollte dann also eigentlich so lauten:
Code:
temp: ARRAY[0..MAX_CSV_ROWS] OF t_array;

Um festzulegen in welchen Spalten-Nummern die Einträge der Struktur stehen, könnte man über Konstanten gehen:
Code:
VAR CONSTANT
	col_Zo : INT := 0; 		(* Spalten-Nr. des Eintrags *)
	col_sTemp : INT := 1;		(* Spalten-Nr. des Eintrags *)
	col_eTemp : INT := 2;		(* Spalten-Nr. des Eintrags *)
	col_usFehler : INT := 3;	(* Spalten-Nr. des Eintrags *)
	col_osFehler : INT := 4;	(* Spalten-Nr. des Eintrags *)
END_VAR

Wenn du dann noch eine Laufvariable z.B. row von Typ INT anlegst, kannst du die CSV-Datei (bzw. das String array) mit folgender Schleife einlesen:

Code:
FOR row := 0 TO MAX_CSV_ROWS DO
	temp[row].Zo := STRING_TO_UINT(data[row, col_Zo]);
	temp[row].sTemp:= STRING_TO_LREAL(data[row, col_sTemp]);
	temp[row].eTemp:= STRING_TO_LREAL(data[row, col_eTemp]);
	temp[row].usFehler:= STRING_TO_LREAL(data[row, col_usFehler]);
	temp[row].osFehler:= STRING_TO_LREAL(data[row, col_osFehler]);
END_FOR

Ich hoffe das war es was du gemeint hast.

Wenn du dir nicht sicher sein kannst dass die CSV-Einträge korrekt sind z.B. wenn sie von einem Mitarbeiter händisch bearbeitet werden, muss noch geprüft werden ob die Stringumwandlung korrekt war.
 
Danke Thomas,

Sehr gute Idee, ich bin dabei jetzt das zu testen

tu es
lg.php

activity;src=2900901;dcnet=6485;boom=45576;sz=1x1;ord=1
génial :D et merci
 
Zurück
Oben