Fb_Fileopen und FB_Filewrite

Nijkamp

Level-1
Beiträge
32
Reaktionspunkte
0
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.
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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:

Anhang anzeigen Dateizugriff.pdf
 
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.
 
Zurück
Oben