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

Results 1 to 8 of 8

Thread: Textdatei schreiben

  1. #1
    Join Date
    16.10.2019
    Posts
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Tag zusammen,


    Für mein Projekt muss eine .txt- Datei mit dem Inhalt eines Array of Strings aus einer SQL- Abfrage erstellt werden.
    Derzeit erstelle ich mir meine Zeilen aus dem Inhalt des Arrays und Formatierungszeichen mit CONCAT und schreibe die Datei dann zeilenweise mit CAA_File.

    Jedoch werden meistens nur noch die Erste und eventuell auch ein paar weitere Zeilen richtig geschrieben, ansonsten nur die Trennzeichen, die ich mit CONCAT eingefügt habe.
    Vermutlich ist die Zugriffszeit meiner SD-Karte zu lang.

    Kennt jemand eine Lösung für dieses Problem oder eine andere Methode zum schreiben von Dateien?

    PS: Meine Steuerung ist ein PiXtend V2 (Raspberry Pi mit Stretch) mit Codesys 3.5 SP14
    Reply With Quote Reply With Quote Answered: Textdatei schreiben  

  2. "Ich glaube ich habe den Fehler.
    Du erhöst iWriteIndex zu früh, Du darfst ihn erst nach der IF-Abfrage erhöhen. Das Schreiben dauert meist mehr als einen Zyklus und in der Zeit wird der Index bei jedem Zyklus erhöht, er soll aber denke ich mal nur nach dem erfolgreichen Schreiben um 1 erhöht werden.."


  3. #2
    Join Date
    13.12.2011
    Location
    Bückeburg
    Posts
    2,513
    Danke
    299
    Erhielt 359 Danke für 318 Beiträge

    Default

    Zeig doch mal Deinen Code.
    Eventuell wartest Du ja nicht, bis der Schreibbefehl beendet wurde.

  4. Folgender Benutzer sagt Danke zu oliver.tonn für den nützlichen Beitrag:

    B_Hag (17.10.2019)

  5. #3
    B_Hag is offline Neuer Benutzer
    Themenstarter
    Join Date
    16.10.2019
    Posts
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Default

    Klar, hier ist der Code. Ich habe mich an Quellen im Netz orientiert, und bin mit meinem Latein am Ende.

    Code:
    IF xInit THEN	
    	CASE iState OF
    	0:									 //Datei mit Schreibrechten öffnen/erstellen
    	   FileOpen(xExecute:= TRUE, sFileName:= sFileName, xExclusive:= FALSE, eFileMode:= File.MODE.MWRITE);
    	   IF FileOpen.xDone = TRUE THEN
    		   iState := 1;						// Zählvariable
    		   hfile := FileOpen.hFile;
    		   FileOpen(xExecute:= FALSE);
    	   ELSIF FileOpen.xError = TRUE THEN
    		   iState:= 32000;					
    		   FileOpen(xExecute:= FALSE);
    	   END_IF
    	
    	1: 								// Erste Zeile schreiben		
    	   sWriteLine := 'Vorgangsnummer:' ; 		// 1. Zeile
    	   sWriteLine := CONCAT(sWriteLine, gvl.sVorgNr);
    	   sWriteLine := CONCAT(sWriteLine, sCR);
    	   FileWrite(xExecute:= TRUE,hFile:= hfile, pBuffer:= ADR(sWriteLine), szSize:= INT_TO_UDINT(LEN(sWriteLine)));
    	  IF FileWrite.xDone = TRUE THEN
    		   iState := 2;
    		   FileWrite(xExecute:= FALSE);
    	   ELSIF FileOpen.xError = TRUE THEN
    		   iState:= 32767;
    		   FileWrite(xExecute:= FALSE);
    	   END_IF
    			 
    	2: 									// Datei schliessen.
    	   FileClose(xExecute:= TRUE, hFile:= hfile);
    	   IF FileClose.xDone = TRUE THEN
    		   iState := 6;													
    		   FileClose(xExecute:= FALSE);
    	   ELSIF FileClose.xError = TRUE THEN
    		   iState:= 32000;
    		   FileClose(xExecute:= FALSE);
    	   END_IF
    	  
    	6: 					// Datei mit Append-Rechten erneut öffnen.
    	   FileOpen(xExecute:= TRUE, sFileName:= sFileName, xExclusive:= FALSE, eFileMode:= File.MODE.MAPPD);
    	   IF FileOpen.xDone = TRUE THEN
    		   iState := 7;
    		   hfile := FileOpen.hFile;
    		   FileOpen(xExecute:= FALSE);
    	   ELSIF FileOpen.xError = TRUE THEN
    		   iState:= 32000;
    		   FileOpen(xExecute:= FALSE);
    	   END_IF
    	   
    	7: 					// String anhängen.								
    	   sWriteLine := CONCAT(POU_Main.inSqlExampleSCL.asData[(iWriteIndex),0],',$T'); 			// "Stringmontage"
    	   sWriteLine := CONCAT(sWriteLine,POU_Main.inSqlExampleSCL.asData[(iWriteIndex),1]);
    	   sWriteLine := CONCAT(sWriteLine,sCR);                                                                                   // Zeile vollständig mit Zeilenumbruch
    	   
    	   FileWrite(xExecute:= TRUE, hFile:= hfile, pBuffer:=ADR(sWriteLine), szSize:= INT_TO_UDINT(LEN(sWriteLine))); // schreiben
    	   iWriteIndex := iWriteIndex + 1;
    	   
    	   IF FileWrite.xDone = TRUE THEN									
    		   iState := 8;
    		   FileWrite(xExecute:= FALSE);
    	   ELSIF FileWrite.xError = TRUE THEN
    		   iState:= 32000;
    		   FileWrite(xExecute:= FALSE);
    	   END_IF
    	
    	8: 					// Neue Zeile anhängen bis alle Zeilen aus SQL-Antwort geschrieben wurden.	  
    	   IF iWriteIndex <= gvS4A.inSQL4Codesys.stResult.dwResultRows THEN	
    		   iState := 7;
    	   ELSIF iWriteIndex > gvS4A.inSQL4Codesys.stResult.dwResultRows THEN
    		   iState := 9;
    	   END_IF
    	      
    	9:				 // Datei schliessen
    	   FileClose(xExecute:= TRUE, hFile:= hfile);
    	   IF FileClose.xDone = TRUE THEN
    		   iState := 16;
    		   FileClose(xExecute:= FALSE);
    	   ELSIF FileClose.xError = TRUE THEN
    		   iState:= 32000;
    		   FileClose(xExecute:= FALSE);
    	   END_IF
    	   
    	
    	16: 		// Test erfolgt.
    	  	xTestDone := TRUE;
    		xError := FALSE; 
    					
    	32000: 
    		xTestDone := FALSE;
    		xError := TRUE;				 
    	 
    END_CASE
    Ich freue mich über Anregungen und Verbesserungsvorschläge.

  6. #4
    Join Date
    13.12.2011
    Location
    Bückeburg
    Posts
    2,513
    Danke
    299
    Erhielt 359 Danke für 318 Beiträge

    Default

    Wie groß wird der String denn? Das die Stringbefehle nur bis 255 Zeichen arbeiten weißt Du?
    Wenn die Trennzeichen geschrieben werden aber sonst nichts scheint der Schreibbefehl an sich ja zu arbeiten, kontrollier doch mal, ob die auch wirklich in den Variablen stehen wenn CONCAT aufgerufen wird. Ansonsten gilt noch der Hinweis mit der Länge.

  7. #5
    B_Hag is offline Neuer Benutzer
    Themenstarter
    Join Date
    16.10.2019
    Posts
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Default

    Du hast Recht, das Array ist teilweise leer. Hab also auch ein Problem mit dem SQL-FB.
    Aber es werden auch die vorhanden Felder nicht geschrieben. Die erste Zeile klappt meistens noch, aber bei den Zeilen mit MAPPEND-Rechten kommt vielleicht noch die Erste, seltener auch noch die Dritte, Fünfte Zeile.
    An der Stringlänge liegt es nicht, Keiner hat mehr als 50 Zeichen.

  8. #6
    Join Date
    13.12.2011
    Location
    Bückeburg
    Posts
    2,513
    Danke
    299
    Erhielt 359 Danke für 318 Beiträge

    Default

    Ich glaube ich habe den Fehler.
    Du erhöst iWriteIndex zu früh, Du darfst ihn erst nach der IF-Abfrage erhöhen. Das Schreiben dauert meist mehr als einen Zyklus und in der Zeit wird der Index bei jedem Zyklus erhöht, er soll aber denke ich mal nur nach dem erfolgreichen Schreiben um 1 erhöht werden..

  9. Folgender Benutzer sagt Danke zu oliver.tonn für den nützlichen Beitrag:

    B_Hag (17.10.2019)

  10. #7
    B_Hag is offline Neuer Benutzer
    Themenstarter
    Join Date
    16.10.2019
    Posts
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Daumen hoch

    Ja!
    Jetzt hab ich zwar noch das Problem mit dem unvollständigen Array, aber nach dem ich die Zeile unter die IF-Abfrage verschoben habe, werden die vorhanden Einträge auch geschrieben.

    Danke, da wäre ich von alleine nie drauf gekommen.
    Last edited by B_Hag; 17.10.2019 at 09:39.

  11. #8
    Join Date
    13.12.2011
    Location
    Bückeburg
    Posts
    2,513
    Danke
    299
    Erhielt 359 Danke für 318 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Gerne, schließt Du das Thema dann noch.

Similar Threads

  1. WinCC Textdatei schreiben auf Comfort Panel?
    By Geisterkarle in forum HMI
    Replies: 2
    Last Post: 10.10.2018, 09:32
  2. Replies: 18
    Last Post: 14.04.2014, 15:31
  3. Datenbaustein in Textdatei
    By Pitpossum in forum Simatic
    Replies: 8
    Last Post: 28.06.2009, 18:18
  4. Replies: 5
    Last Post: 15.09.2006, 20:43
  5. Replies: 3
    Last Post: 13.10.2005, 11:53

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •