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

Ergebnis 1 bis 6 von 6

Thema: Fb_Fileopen und FB_Filewrite

  1. #1
    Registriert seit
    26.11.2013
    Beiträge
    32
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,


    Ich habe Schwierigkeiten mit denn function FB_fileopen und FB_filewrite.
    Kann man in 1 cyclisch die file offenen und auch schreiben?

    Der code muss so arbeiten:
    Wenn die zeit gleich ist an die wirkliche zeit muss er data aufholen und in ein file scheiben, die zeit kann mann auf die Minute einstellen.
    Wenn die Zeit gleich ist holt er die data-> macht er ein file name -> macht er ein file -> schreibt er die Werte in die file -> wart 1 Minute so das er nicht ein Minute lang files scheiben wirt.
    Die fileopen wird hoch gemacht in ein Pou die fur diesen pou dreht.

    GetLogs
    Code:
    R_TRIG1(CLK:=fileopen , Q=> );
     
    FB_FileOpen1(
                sNetId:='5.22.229.187.1.1' ,                                                                                     
                sPathName:=Alarmtop10log ,                                                                                   
                nMode:=FOPEN_MODEWRITE OR FOPEN_MODETEXT,
                ePath:=PATH_GENERIC ,
                bExecute:= R_TRIG1.Q,                                                                                            
                tTimeout:=t#5s ,
                bBusy=>i1 ,
                bError=> ,
                nErrId=> ,
                hFile=>hFile1 );
     
    FB_FileOpen2(
                sNetId:='5.22.229.187.1.1' ,                                                 
                sPathName:=Efficiencylog ,                                                   
                nMode:=FOPEN_MODEWRITE OR FOPEN_MODETEXT,
                ePath:=PATH_GENERIC ,
                bExecute:= R_TRIG1.Q,                                                                                            
                tTimeout:=t#5s ,
                bBusy=> ,
                bError=> ,
                nErrId=> ,
                hFile=>hFile2 );
     
    FB_FileOpen3(
                sNetId:='5.22.229.187.1.1' ,  
                sPathName:=Maintancecounterslog ,                                                
                nMode:=FOPEN_MODEWRITE OR FOPEN_MODETEXT,
                ePath:=PATH_GENERIC ,
                bExecute:= R_TRIG1.Q,                                                                                                        tTimeout:=t#5s ,
                bBusy=> ,
                bError=> ,
                nErrId=> ,
                hFile=>hFile3 );
     
    getlogs2;
    Hier wird data in die gemachte File Geschieben
    getlogs2
    Code:
     
    F_TRIG2(CLK:=i1 , Q=> );                                                                                                     
    FB_FileWrite1(
                sNetId:= '5.22.229.187.1.1',                                                                                     
                hFile:=hFile1 ,                                                                                                            
                pWriteBuff:= ADR (CSVStringtest) ,                                                                           
                cbWriteLen:=SIZEOF (CSVStringtest) ,                                                                      
                bExecute:= F_TRIG2.Q,                                                                                             
                tTimeout:=t#5s ,
                bBusy=> ,
                bError=> ,
                nErrId=> ,
                cbWrite=> );
     
    FB_FileWrite2(
                sNetId:= '5.22.229.187.1.1',                                                                                                            (*NetID van je IPC, hier hoef je niks in te vullen*)
                hFile:=hFile2 ,                                                                                               
                pWriteBuff:= ADR (EfficiencyStringTest) ,                                                                              cbWriteLen:=SIZEOF (EfficiencyStringTest) ,                                                                       
                bExecute:=F_TRIG2.Q ,                                                                                             
                tTimeout:=t#5s ,
                bBusy=> ,
                bError=> ,
                nErrId=> ,
                cbWrite=> );
     
    FB_FileWrite3(
                sNetId:= '5.22.229.187.1.1',                                                                                     
                hFile:=hFile3 ,                                                                                                           
                pWriteBuff:= ADR (MaintanceCounterstring) ,                                                                       cbWriteLen:=SIZEOF (MaintanceCounterstring) ,                                                    
                bExecute:=F_TRIG2.Q ,                                                                                             
                tTimeout:=t#5s ,
                bBusy=> ,
                bError=> ,
                nErrId=> ,
                cbWrite=> );
     
     
    lastlogdate:=logdate;
    logbyte:=2;
    Tp1.IN:=TRUE;
    TimeWait;
    Am Ende geht er nach Timewait, hier muss er 1 Minute warten.
    Mit diesem code wirt er denn ersten cyclus denn Files machen und ein Minute warten.
    Denn wird er die folgende cyclus die Daten in de Files schreiben (habe jetzt die zeit vergleich Funktion auf immer „wahr“ stehen.
    Aber die code Wirts nicht machen wenn er nach die Minuten schaut.
    Hat eine ein idee was ich nicht gut programmiert habe, oder wie ich es machen kann.
    Zitieren Zitieren Fb_Fileopen und FB_Filewrite  

  2. #2
    Registriert seit
    26.11.2013
    Beiträge
    32
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe jetzt ein check Eingebout.
    Code:
    IF FB_FileOpen1.bBusy OR FB_FileOpen2.bBusy OR FB_FileOpen3.bBusy   THEN
    filecheck:=1;
    ELSE
    filecheck:=0;
    i10:=TRUE;
    WriteFile;
    END_IF
    Code:
    IF FB_FileWrite1.bBusy OR FB_FileWrite2.bBusy OR FB_FileWrite3.bBusy  THEN
    filecheck:=2;
    ELSE
    filecheck:=0;
    lastlogdate:=logdate;
    logbyte:=2;
    Tp1.IN:=TRUE;
    TimeWait;
    END_IF
    Main:
    Code:
    IF filecheck = 1 THEN
    Createfile;
    ELSIF filecheck=2 THEN
    WriteFile;
    ELSE
    Timeupdate;
    END_IF
    Das functioniert, aber ist das denn besten manier

  3. #3
    Registriert seit
    12.08.2009
    Ort
    Schwarzwald
    Beiträge
    165
    Danke
    164
    Erhielt 97 Danke für 55 Beiträge

    Standard

    Guten Tag Nijkamp,

    bei Dateizugriffen ist meiner Meinung nach die sauberste und übersichtlichtlichste Programmierung, wenn du die
    Bausteine Schritt für Schritt nacheinander abarbeitest. So vermeidest die Konflikte beim Zugriff.
    Dafür eignet sich sehr gut, das ganze in eine CASE Anweisung einzubinden. Die Bausteine selber sollten allerdings außerhalb
    der CASE Abfolge abgearbeitet werden.

    Wichtig ist auch, die Dateien direkt nach dem Zugriff mit FB_FILE_CLOSE zu schließen, da
    die Datei ansonsten im Nachhinein ziemlich viel Ärger machen kann.

    Hier ein kleines Beispiel, wie man es machen kann:

    Dateizugriff.pdf

  4. Folgender Benutzer sagt Danke zu PLC-Gundel für den nützlichen Beitrag:

    Nijkamp (21.02.2014)

  5. #4
    Registriert seit
    26.01.2013
    Ort
    Hannover
    Beiträge
    98
    Danke
    2
    Erhielt 15 Danke für 10 Beiträge

    Standard

    beim ersten draufschauen würd ich sagen, dass sPathName ein String ist, also fehlen die ''.
    Gruß
    Holger

  6. #5
    Registriert seit
    12.08.2009
    Ort
    Schwarzwald
    Beiträge
    165
    Danke
    164
    Erhielt 97 Danke für 55 Beiträge

    Standard

    Zitat Zitat von NieZuSpaet Beitrag anzeigen
    beim ersten draufschauen würd ich sagen, dass sPathName ein String ist, also fehlen die ''.
    Gruß
    Holger
    Das müsste in Ordnung gehen, wenn die Variable für sPathName korrekt initialisiert wurde,
    z.B.


    VAR

    Alarmtop10log : STRING := ' \Hard Disk2\12345.xyz '; (* USB Stick bei einem CE System *)

    END_VAR

  7. #6
    Registriert seit
    26.11.2013
    Beiträge
    32
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Alarmtop10log ist ein string, zusammengesetzt aus verscheidene strings (das funktioniert).
    Ich lasse die Code erst mal wie meine zweite post, und wenn ich alles anderes eingebaut habe werde ich die Code schon machen.
    Danke für das Beispiel.

Ähnliche Themen

  1. Array of String und FB_FileWrite
    Von gloeru im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 08.08.2013, 08:22
  2. Fb_fileOpen Fb_fileClose Fb_file_write
    Von bluebird277 im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 22.03.2012, 07:33
  3. Antworten: 3
    Letzter Beitrag: 20.10.2011, 22:36
  4. FB_FileWrite Writeerror
    Von COOLT im Forum CODESYS und IEC61131
    Antworten: 43
    Letzter Beitrag: 21.04.2011, 09:55
  5. Beckhoff TwinCAT FUNCTION_BLOCK FB_FileOpen
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 02.01.2011, 20:44

Stichworte

Lesezeichen

Berechtigungen

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