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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: String in Datei abspeichern / Save String to Textfile

  1. #1
    Registriert seit
    04.02.2016
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    Ich benutze seit einigen Tagen TwinCat XAE 3.1.0.0
    Ich möchte einen String in einer Textdatei ablegen, jedoch funktioniert das nicht ganz so wie geplant:

    english:
    I have been using Twincat XAE 3.1.0.0 for a few Days now,
    I want to save a String to a textfile. Anyway i tried for an entire day without getting it working:



    Code:
    FUNCTION_BLOCK FB_SaveStuff
    VAR_INPUT
        inputstring:STRING;
        filepath:STRING;
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
        fileinstance: FB_FileOpen;
        filewriter: FB_FileWrite;
        filecloser: FB_FileClose;
        sReceivedmessage: INT;
        Step       : DWORD:=1;;
        fileloser: INT;
    END_VAR
    
    
    
    
    CASE Step OF 
            1:
            fileinstance(bExecute:=FALSE);
            fileInstance(sNetId:='',sPathname:=filepath,nMode:=FOPEN_MODEWRITE OR FOPEN_MODEPLUS OR FOPEN_MODETEXT,tTimeout:=T#1S,bExecute:=TRUE );
            
            IF(NOT(fileinstance.bBusy)) THEN
                Step:=Step+1;
            END_IF
            2:
            filewriter(bExecute:=FALSE);
            filewriter(sNetId:='',hFile:=fileInstance.hFile,pWriteBuff:=ADR(inputstring),
            cbWriteLen:=SIZEOF(inputstring),tTimeout:=T#1S,bExecute:=TRUE);
    
            IF(NOT(filewriter.bBusy)) THEN
            Step:=Step+1;
            END_IF
            3:
            filecloser(bExecute:=FALSE);
            filecloser(sNetId:='',hFile:=fileInstance.hFile,tTimeout:=T#1S,bExecute:=TRUE);
        
            IF(NOT(filecloser.bBusy)) THEN
            Step:=Step+1;
            END_IF
            
            
    END_CASE
    Das Programm hängt seltsamerweise im ersten Case fest (fileinstance.bBusy=true)
    der parameter blieb bisher bei jeder der drei Dateninstanzen auf true stehen.
    Danke für die Hilfe

    Strangely, the Program stands still at Case one: (fileinstance.bBusy=true)
    The Parameter was always Stuck to true in every of the three instances.

    Thanks in progress

    bartsimpson
    Zitieren Zitieren String in Datei abspeichern / Save String to Textfile  

  2. #2
    Registriert seit
    13.12.2011
    Beiträge
    1.410
    Danke
    147
    Erhielt 158 Danke für 149 Beiträge

    Standard

    Ich kann es gerade nicht testen, aber ich denke der Fehler liegt darin, dass Du den FB dauernd mit einer steigenden Flanke befeuerst. Schalte nach dem Aufruf mit False und True mal in einen Zwischenschritt und ruf den FB da mal nur mit False auf.

    Von irgendwas mit Internetzugang gesendet.

  3. #3
    bartsimpson ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.02.2016
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hat leider nicht geholfen, das Programm hängt nach wie vor in Case 1 fest.

  4. #4
    Registriert seit
    13.12.2011
    Beiträge
    1.410
    Danke
    147
    Erhielt 158 Danke für 149 Beiträge

    Standard

    Dann hast Du meinen Tipp vermutlich nicht richtig umgesetzt.
    Der FB sollte einmal mit False und dann mit True aufgerufen werden. Anschließend ohne die Ausgänge abzufragen in einen neuen Schritt springen, den FB mit False aufrufen und Busy abfragen.

    Von irgendwas mit Internetzugang gesendet.

  5. #5
    bartsimpson ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.02.2016
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Hilfe Oliver,
    Der Code sieht jetzt so aus:

    Code:
    CASE Step OF 
            
            1:
            fileinstance(bExecute:=FALSE);
            fileInstance(sNetId:='',sPathname:=filepath,nMode:=FOPEN_MODEWRITE OR FOPEN_MODEPLUS OR FOPEN_MODETEXT);
            fileinstance(bExecute:=TRUE);
            Step:=Step+1;
            
            2:
            fileinstance(bExecute:=FALSE);
            IF(NOT(fileinstance.bBusy)) THEN
                Step:=Step+1;
            END_IF
            3:
            filewriter(bExecute:=FALSE);
            filewriter(sNetId:='',hFile:=fileInstance.hFile,pWriteBuff:=ADR(inputstring),
            cbWriteLen:=SIZEOF(inputstring));
            filewriter(bExecute:=TRUE);
            Step:=Step+1;
            4:
            filewriter(bExecute:=FALSE);
            IF(NOT(filewriter.bBusy)) THEN
            Step:=Step+1;
            END_IF
            5:
            filecloser(bExecute:=FALSE);
            filecloser(sNetId:='',hFile:=fileInstance.hFile);
            filecloser(bExecute:=TRUE);
            Step:=Step+1;
            
            6:
            filecloser(bExecute:=FALSE);
            IF(NOT(filecloser.bBusy)) THEN
            Step:=Step+1;
            END_IF
            
        END_CASE
    Leider läuft jetzt der TimeOut über und alle drei funktionen liefern den Fehlercode 1861.
    Eine Frage, die ich mir gestellt habe, ist ob dieser code solange widerholt werden muss, bis case 7 erreicht ist (While Schleife) , oder ob einmaliges Ausführen ausreicht.

  6. #6
    Registriert seit
    12.07.2006
    Beiträge
    45
    Danke
    5
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo,

    die Variable "Step" ist doch eine lokale Variable, d.h. sie wird bei jedem Aufruf wieder mit 1 initialisiert.
    So kann die Weiterschaltung nicht funktionieren.

    Gruß
    Koslovski

  7. #7
    Registriert seit
    13.12.2011
    Beiträge
    1.410
    Danke
    147
    Erhielt 158 Danke für 149 Beiträge

    Standard

    Beim FB nicht, der speichert die Variablen, bei einer Funktion schon.

    Von irgendwas mit Internetzugang gesendet.

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

    Koslovski (05.02.2016)

  9. #8
    bartsimpson ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.02.2016
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe die Switch anweisung mit
    Code:
    WHILE (Step<7) DO
    Anweisungen wie oben
    END_WHILE
    umschlossen, funktioniert nach wie vor nicht.
    Es wird jedoch eine Datei im Zielordner erzeugt.

  10. #9
    Registriert seit
    13.12.2011
    Beiträge
    1.410
    Danke
    147
    Erhielt 158 Danke für 149 Beiträge

    Standard

    Hallo bartsimpson,
    ich habe gerade mal TC3 3.1.4018.26 installiert und Dein Programm getestet, so leid es mir tut, aber bei mir läuft die zweite Version fehlerfrei. Hast Du mal versucht den Timeout zu erhöhen.
    Ergänze mal die Auswertung der Rückmeldung um das Error Flag, also wenn nicht Busy und kein Fehler anliegt springe in den nächsten Schritt, wenn nicht Busy und Fehler in den (nicht vorhandenen) Schritt aktueller Schritt + 10, dann kannst Du erkennen in welchem Schritt er hing.

    Gruß

    Oliver

  11. #10
    bartsimpson ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.02.2016
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Habe das Programm jetzt mal als Main ausgeführt, da funtioniert es auch ohne Probleme,
    so wie es aussieht brauche ich eine Schleife, die mehrmals über die Case-Abfrage Läuft. Jedoch Ist das so im Programm nicht realisierbar, ich möchte das ganze eigentlich gerne in einer Funktion aufrufen, was aus irgendeinem Grund nicht funtioniert.
    Geändert von bartsimpson (05.02.2016 um 16:02 Uhr)

Ähnliche Themen

  1. String bzw. Name einer Datei hochzählen
    Von KingHelmer im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 22.10.2014, 11:11
  2. String mit Timer in CSV Datei schreiben.
    Von umpalumpa im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 04.07.2014, 11:02
  3. Antworten: 50
    Letzter Beitrag: 09.08.2012, 09:31
  4. String in eine Datei schreiben beim CP
    Von olitheis im Forum CODESYS und IEC61131
    Antworten: 18
    Letzter Beitrag: 30.11.2010, 08:53
  5. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54

Stichworte

Lesezeichen

Berechtigungen

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