Array aus *.txt file erstellen

Karabullo

Level-2
Beiträge
47
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin zusammen,

ich möchte mir zur Vereinfachung in einer B&R SPS eine Funktion in c oder c++ bauen, welches mir ein Array aus einer *.txt-Datei erstellt.

Beispiel der Textdatei:
Anton = (unsigned char*) (&Daten.X[5].Y[3]);
Achim = (Bool*) (&Daten.X[5].Y[4]);
Julia = (long*) (&Daten.X[6].Y[1]);
Jutta = (unsigned short*)(&Daten.X[6].Y[3]);

Zur Erklärung:
Ich hatte nun gerne automatisch ein Array erstellt, bei denen die Variablennamen "Anton" bis "Jutta" sind (also 4 Werte)

Anton hat die Größe eines unsigned char, also 1 Byte. Und pointert direkt auf das Array Daten.X[5]Y[3]
Achim hat die Größe eines Bool, also auch 1 Byte. Und pointert direkt auf das Array Daten.X[5]Y[4]
Julia hat die Größe eines long, also 4 Byte. Und pointert direkt auf das Array Daten.X[8]Y[5]
Jutta hat die Größe eines unsigned char, also 1 Byte. Und pointert direkt auf das Array Daten.X[9]Y[7]

Warum mache ich das nicht händisch? Die Datei ist über 700 Zeilen lang, das würde ich mir gerne ersparen.

Ich hoffe also da gibt es eine Lösung ;-)
 
Ich hoffe also da gibt es eine Lösung ;-)
Moin Karabullo,

bestimmt gibt es eine Lösung - aber erstmal muß man Deine Aufgabe verstehen...
Und da scheitert es bei mir schon...
Du willst unterschiedliche Datentypen (char, Bool, Long, unsigned short) auf ein und das selbe Array (Y) schreiben... warum? wie? Welchen Datentypen hat Y?

Und warum willst Du mit Pointer auf statische Elemente schauen?

Und was hat das ganze mit einer Datei zu tun? Ich sehe nicht, daß z.B. eine Zeile der Datei z.B. einem Element in X entsprechen könnte, weil Du auch hier mit dem Index springst...

Bitte erkläre das mal genauer, vielleicht wird das mit Klarnamen anstatt Achim, Anton und Jutta auch nochmal genauer, was Du machen möchtest.

Gruß
Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, ich versuche das mal zu erklären.

Es gibt bereits ein recht großes Array in der SPS, das aber keine Klarnamen hat. Sondern wir oben beschrieben "Daten" heisst mit den Indizes von X (0 - 60) und von Y (0 - 6). Die Y sind dabei im Byte-Format (USINT)
Dann gibt es eine Zuordnungstabelle im *.txt-Format, wo allen Inhalten in dem Array ein Klarname zugeordnet wird. Wird z.B. ein long mit 4 Byte, (also z.B. ein DINT) zugeordnet, dann werden die nächsten 4 Byte vom Array ausgelesen.

Wie oben schon beschrieben sieht die *.txt folgendermaßen aus:

Wert1 = (unsigned char*) (&Daten. X[5]. Y[3]);
Wert2 = (Bool*) (&Daten. X[5]. Y[4]);
Wert3 = (long*) (&Daten. X[6]. Y[1]);
Wert4 = (unsigned short*)(&Daten. X[6]. Y[3]);

Und daraus will ich automatisch sowas bauen wie im Anhang zu sehen, also ein Array das auf die Daten in dem anderen Aarry referenziert.

Ich hoffe nun ist es verständlicher?
 

Anhänge

  • Datentyp.png
    Datentyp.png
    7,9 KB · Aufrufe: 11
ja, ein bißchen deutlicher wird es... ich frage mich, warum das so ist, wie es ist...
ist das existierende Byte-Array ein Empfangspuffer für Daten?
Warum gibt es eine X-Dimension?

Zumindest hat sich jemand schonmal die Mühe einer "Übersetzungstabelle" gemacht...
Kann die sich für ein und das selbe Programm ändern? Oder ist die fix?

Ich sehe immer noch das Problem der gemixten Datentypen... in Deinem Bild zeigst Du einen struct mit 4 Datentypen. Gehören die vier Werte zusammen?
Wenn die Übersetzungstabelle fix ist, kannst Du einmal per Excel eine neue Zuordnung zur Deinen structs generieren und in den Code einfügen...
 
Zurück
Oben