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

Ergebnis 1 bis 4 von 4

Thema: Variablenwerte in eine Datei schreiben

  1. #1
    Registriert seit
    10.03.2012
    Beiträge
    1
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,

    ich habe ein Problem mit dem Speichern von Variablenwerten in einer Datei.
    Hierzu habe ich wie in der Beckhoff online Doku beschrieben die 3 Funktionsbausteine Fileopen, Filewrite und FileClose.
    Die Datei wird bei Ausführung angelegt und geöffnet, beim Schreiben gibt es die ADS Fehlermeldung 1795 (invalid index offset).
    Eine Ausschnitt aus dem entsprechenden Programmbaustein habe ich angefügt:

    current_open(
    sNetId:= '',
    sPathName:= 'c:\current.txt',
    nMode:= file_opencreate,
    ePath:= path_generic,
    bExecute:= aufzeichnen,
    tTimeout:= T#3S,
    bBusy=> ,
    bError=> berror1,
    nErrId=> nerror1,
    hFile=> hfile1);

    Current_write(
    sNetId:= '',
    hFile:= hfile1,
    pWriteBuff:= ADR(currentrec),
    cbWriteLen:= SIZEOF(currentrec),
    bExecute:= aufzeichnen,
    tTimeout:= T#3S,
    bBusy=> ,
    bError=> berror1w,
    nErrId=> nerror1w,
    cbWrite=> sbwritew1);

    Current_close(
    sNetId:= '',
    hFile:= hfile1,
    bExecute:= aufzeichnen,
    tTimeout:= T#3S,
    bBusy=> ,
    bError=>herrorc1 ,
    nErrId=> nerroridc1);

    Woran könnte das liegen? Hat jemand ggf. ein funktionierendes Beispiel für das Anlegen einer Datei?

    Danke + Gruß
    Zitieren Zitieren Variablenwerte in eine Datei schreiben  

  2. #2
    Registriert seit
    29.08.2007
    Beiträge
    214
    Danke
    43
    Erhielt 34 Danke für 23 Beiträge

    Standard

    Du musst die Bausteine nacheinander aufrufen und das busy Signal auswerten

  3. Folgender Benutzer sagt Danke zu van für den nützlichen Beitrag:

    Chrissss (16.03.2012)

  4. #3
    Registriert seit
    17.10.2007
    Ort
    35043 Marburg
    Beiträge
    176
    Danke
    4
    Erhielt 30 Danke für 29 Beiträge

    Standard

    Hallo,
    ich realisiere das gern in einer Case Anweisung als Schrittkette programmiert.
    Code:
    CASE MyVariable OF
      0:  //Warten auf Start Schreiben, wenn Start dann MyVariable auf 1 setzen
      1:  //File öffnen und gegebenenfalls erstellen, wenn FileOpen.Done dann MyVariable auf 2 setzen ansonsten warten bzw. Fehler Routine
      2:  //Daten schreiben, wenn FileWrite.Done dann MyVariable auf 3 setzen ansonsten warten bzw. Fehler Routine
     3:  //File schliessen, wenn FileClose.Done dann MyVariable auf 0 setzen ansonsten warten bzw. Fehler Routine
    END_CASE
    Scheint so als ob die FBs bei Beckhoff keinen Done Ausgang haben, dann vielleicht "neg. Flanke bBusy und kein bError" als Bedingung für nächsten Schritt.
    Grüße...
    Paradox ist, wenn sich jemand im Handumdrehen den Fuß bricht.

  5. Folgender Benutzer sagt Danke zu Simatiker für den nützlichen Beitrag:

    Chrissss (16.03.2012)

  6. #4
    Registriert seit
    26.08.2007
    Beiträge
    22
    Danke
    0
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Chris,
    damit kannst Du einen String wegschreiben




    VAR_OUTPUT
    Busy : BOOL;
    END_VAR
    VAR
    sLogDaten: STRING(255);
    hFile: UINT;
    zLog: UINT := 0;
    bOpenFile: BOOL;
    bWriteData: BOOL;

    fbOpenLogFile: FB_FileOpen;
    fbWriteLogFile: FB_FileWrite;
    fbCloseLogFile: FB_FileClose;
    END_VAR

    #########################################


    IF Write THEN
    bOpenFile := TRUE;
    bWriteData := TRUE;
    END_IF
    CASE zLog OF
    0:
    IF bOpenFile THEN
    zLog := 10;
    bOpenFile := FALSE;
    END_IF
    10: (* Open file *)
    fbOpenLogFile( sNetId:= '',
    sPathName:= sLogFilename,
    nMode:= FOPEN_MODEAPPEND OR FOPEN_MODEPLUS OR FOPEN_MODETEXT,
    ePath:= PATH_GENERIC,
    bExecute:= TRUE,
    tTimeout:= t#2s,
    bBusy=> ,
    bError=> ,
    nErrId=> ,
    hFile=> hFile);
    IF NOT fbOpenLogFile.bBusy THEN
    fbOpenLogFile(bExecute:= FALSE);
    zLog := 20;
    END_IF
    20: (* Write data *)
    IF bWriteData THEN
    fbWriteLogFile( sNetId:= '',
    hFile:= hFile,
    pWriteBuff:= ADR(DATA),
    cbWriteLen:= LEN(DATA),
    bExecute:= TRUE,
    tTimeout:= t#3s,
    bBusy=> ,
    bError=> ,
    nErrId=> ,
    cbWrite=> );
    IF NOT fbWriteLogFile.bBusy THEN
    bWriteData := FALSE;
    fbWriteLogFile(bExecute := FALSE);
    END_IF
    ELSE
    zLog := 30;
    END_IF
    30: (* Close file *)
    fbCloseLogFile( sNetId:= '',
    hFile:= hFile,
    bExecute:= TRUE,
    tTimeout:= t#3s,
    bBusy=> ,
    bError=> ,
    nErrId=> );
    IF NOT fbCloseLogFile.bBusy THEN
    fbCloseLogFile(bExecute := FALSE);
    zLog := 0;
    END_IF
    END_CASE
    Busy := fbCloseLogFile.bBusy;



    Gruß Markus

  7. Folgender Benutzer sagt Danke zu MarkusK für den nützlichen Beitrag:

    Chrissss (16.03.2012)

Ähnliche Themen

  1. Alles Variablen in eine Datei schreiben
    Von Bensen83 im Forum HMI
    Antworten: 3
    Letzter Beitrag: 13.10.2011, 19:45
  2. STRUCT in eine Datei schreiben (ST)
    Von demon2000 im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 23.03.2011, 18:27
  3. String in eine Datei schreiben beim CP
    Von olitheis im Forum CODESYS und IEC61131
    Antworten: 18
    Letzter Beitrag: 30.11.2010, 08:53
  4. Antworten: 7
    Letzter Beitrag: 07.04.2010, 11:42
  5. In eine Datei schreiben
    Von Bensen83 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 20.03.2010, 15:30

Lesezeichen

Berechtigungen

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