Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

SysFileWrite schreibt nur 1sten Eintrag vom Array

2017-05-12
2017-06-11
  • ColonelWastl - 2017-05-12

    Hallo zusammen,

    zur Zeit lassen die "Probleme" bei mir nicht locker.

    Ich habe eine kleine Schaltung zum Zählen meines Stromzählers realisiert.
    Das funktioniert soweit auch ohne Probleme.

    Diese Zählwerte/Impulse schreibe ich in ein Array [1..1440] of UINT. Dieses Array möchte ich täglich und automatisiert auf mein raspi abspeichern.
    Es funktioniert im Prinzip alles bis auf das Entscheidende. Es wird nur der 1ste Wert vom Array gespeichert. Alle anderen Werte werden nicht mitgeschrieben.
    Lt. der Beschreibung von SysFileWrite ist es aber egal was angelegt wird, im Gegenteil, als Beispiel ist sogar ein Array aufgeführt.
    Muss ich hier SysFileWrite pro Array-Eintrag einzeln aufrufen oder habe ich hier in der Addressierung etwas falsch?

    Hier der Code:

    Deklaration:

       // Speicherarray als String anlegen
       chSpeicherdaten:  ARRAY[1..1440] OF STRING(5);;
       iStringLoop: INT;
       
       
    

    Programmcode:

    CASE iCaseZeiger OF
       
    1: // Dateinamen erzeugen   
       sFileName:=CONCAT(sSpeicherpfad, CONCAT('Tagesdaten vom: ', CONCAT(DT_TO_STRING(todZeitstempel), '.txt')));
       iCaseZeiger:=2;
       
    2: // String erzeugen
       FOR iStringLoop:=1 TO 1440 BY 1 DO
          chSpeicherdaten[iStringLoop]:=CONCAT(UINT_TO_STRING(aSpeicherDaten.aMinuten[iStringLoop]), '; ' );                           
       END_FOR
       iCaseZeiger:=3;
       
    3:  // Datei incl. Pfad erzeugen
       returnFileMake:=SysFileOpen(szFile:=sFileName , am:=SysFile.AM_WRITE_PLUS , pResult:=ADR(resultFileCheck) );  
       IF resultFileCheck = 16#0 THEN
          iCaseZeiger:=4;
       END_IF
       
    4: // Datei Schreibzugriff geben
       sCommandChMod:=CONCAT('sudo chmod 0777 ',sSpeicherpfad,);   
       SysProcess._(pszComand:=sCommandChMod  , pResult:=ADR(resultSysComChMod));   
       // Result können nicht ausgewertet werden. Ob der Ordner den richtigen zugriff hat muss von HAND geprüft werden   
       IF resultSysComChMod = 0 OR resultSysComChMod = 25 THEN   
          iCaseZeiger:=5;
       END_IF
       
    5: // Daten in die Datei schreiben
       // 1sten und 2ten Wert zum Test beschreiben
       chSpeicherdaten[1]:='100';
       chSpeicherdaten[2]:='102';
       returnFileMake:=SysFileOpen(szFile:=sFileName , am:=SysFile.AM_WRITE_PLUS , pResult:=ADR(resultFileCheck) );  
       returnFileWrite:=SysFileWrite(hFile:=returnFileMake , 
                            pbyBuffer:=ADR(chSpeicherdaten) , 
                            ulSize:=(SIZEOF(chSpeicherdaten)) , 
                            pResult:=ADR(resultFileWrite) );
       IF resultFileWrite = 16#0 AND returnFileWrite > 0 THEN
          iCaseZeiger:=6;
       END_IF
       
    6: // Datei schließen
       returnFileClose:=SysFileClose(hFile:=returnFileMake);
       IF returnFileClose <> SINT_TO_UDINT(-1) THEN
          iCaseZeiger:=7;
       END_IF
       
    7: // Ende
       iCaseZeiger:=0;
       xDateiSpeichern:=FALSE;
       xDone:=TRUE;
    
     

    Related

    Talk.ru: 1
    Talk.ru: 2

  • ColonelWastl - 2017-06-11

    Auch hier möchte ich noch kurz erläutern woran es gelegen hat.

    Die Datei wurde immer richtig geschrieben.
    Wenn man sie jedoch mit dem WinSCP "Reader" (also dem integrierten Editor) öffnet, wird nur der 1ste Eintrag angezeigt.
    Mit Excel oder Notepad++ funktioniert alles einwandfrei.

    Gruß
    Wastl

     

Log in to post a comment.