Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: Probleme mit dem Auslesen von String-Arrays

  1. #1
    Registriert seit
    10.03.2014
    Beiträge
    6
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    bin relativ neu auf dem Thema, der SPS-Programmierung in ST und habe gerade ein paar Problem mit den String-Arrays.
    Habe auch schon versucht mich hier im Forum schlau zu machen, habe aber noch nichts passendes gefunden.

    Ich bekomme von einer externen Quelle ein UDP-Datagramm mit 16-Byte Länge. Dieses wandle ich anschließend in einen String um und möchte es nun gerne in eine Datei schreiben.
    Hier kommt dann das Problem: Ich habe hierfür ein String-Array mit jeweils String-Länge 3 deklariert, beim Schreiben in die Text-Datei wird jedoch an die Strings, die kürzer als 3 sind irgendwelche Sonderzeichen oder Leerzeichen angehängt, die ich überhaupt nicht brauchen kann.

    Hab mir schon überlegt, die String-Längen des Arrays dynamisch zu ändern, aber dass das nicht möglich ist, hab ich mittlerweile schon herausgefunden.

    Hättet ihr irgendwelche Lösungsansätze?

    Code:
    (* Schleife zum byte-weisen Auslesen der empfangenen Nachricht *)
    WHILE ctsz <= SIZEOF(in) DO
    pt:= ADR(in[i]);
    ptval:= pt^;
    ptstr:= BYTE_TO_STRING(ptval);
    strarr1[i].s1:= ptstr;
    i:= i+1;
    ctsz:= ctsz + 1;
    END_WHILE
    
    (* Re-Initialisieren des Schleifen- und des Adresszählers *)
    i:= 1;
    ctsz:= 1;
    
    (* Schreiben in test.txt *)
    TEXTFILE:= SysFileOpen(szFile:= 'C:\Dokumente und Einstellungen\felbma\Desktop\test.txt' , am:= AM_WRITE , pResult:= 0);
    out:= SysFileWrite(hFile:= TEXTFILE , pbyBuffer:= ADR(strarr1) , ulSize:= SIZEOF(strarr1), pResult:= 0);
    SysFileClose(hFile:= TEXTFILE);
    "in" ist mein eingehendes Byte-Array
    "strarr1" ist das String-Array

    Viele Grüße,
    Matthias
    Zitieren Zitieren Probleme mit dem Auslesen von String-Arrays  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.202
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    SysFileWrite schreibt alle Bytes des kompletten Arrays unabängig von der tatsächlich genutzten Stringlänge.
    Du müßtest die Strings vor dem SysFileWrite mit Concat zu einem "Zeilen"-String zusammenfassen oder jeden String einzeln schreiben mit ulSize:=LEN(strarr1[i]) oder alle Strings im Array zur Maximallänge mit Leerzeichen auffüllen (linksbündig oder rechtsbündig).

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    FelMa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.03.2014
    Beiträge
    6
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank Harald,

    hab mir jetzt einen String gebaut, in dem ich die Teile des Arrays zusammenbaue.
    Scheint mir aber trotzdem irgendwie nicht die feine englische Art zu sein Gibt es denn nicht noch andere Möglichkeiten so etwas in der Richtung zu realisieren?

    Viele grüße,
    Matthias

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.202
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    In welcher Richtung wünschst Du denn andere Möglichkeiten? Ich hatte ja schon 2 weitere genannt.

    SysFileWrite schreibt lediglich einen Byte-Bereich, welcher bei der Adresse pbyBuffer beginnt und ulSize lang ist. Die Struktur des Byte-Bereichs ist SysFileWrite herzlich egal (kann auch nicht ermittelt werden). Mit nur einem Aufruf von SysFileWrite geht es nicht. Entweder Du betrachtest den gesamten Bytebereich als 1 Daten-Item und wunderst Dich dann auch nicht, daß das gesamte Item geschrieben wird, oder Du mußt SysFileWrite für jedes Item extra aufrufen. Oder halt mehrere Items vor dem SysFileWrite zu einem Item zusammenbauen.

    Andere Möglichkeiten sehe ich nicht.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    FelMa (10.03.2014)

  6. #5
    FelMa ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.03.2014
    Beiträge
    6
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ok, vielen Dank.

    Hatte irgendwie nicht auf dem Schirm, dass SysFileWrite mehrere male hintereinander schreiben kann... Bin irgendwie davon ausgegangen, dass das zuvor geschriebene einfach überschrieben wird.
    Dann bau ich mir das nochmal um und probiers damit SysFileWrite öfter aufzurufen.

    Viele Grüße,
    Matthias

Ähnliche Themen

  1. Probleme mit dem Status von Stromstoßschaltern
    Von IceWeasel im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 09.07.2013, 22:08
  2. Antworten: 11
    Letzter Beitrag: 19.10.2012, 19:06
  3. Probleme mit dem FontCreator
    Von senmeis im Forum HMI
    Antworten: 0
    Letzter Beitrag: 12.05.2011, 10:41
  4. Antworten: 1
    Letzter Beitrag: 06.04.2011, 15:39
  5. Probleme mit dem anzeigen von csv-Datein auf einem PC.
    Von din im Forum Sonstige Steuerungen
    Antworten: 2
    Letzter Beitrag: 30.05.2009, 09:53

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •