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

Ergebnis 1 bis 3 von 3

Thema: Überprüfen on Datei Vorhanden(TwinCat 3)

  1. #1
    Registriert seit
    17.02.2016
    Beiträge
    24
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum,

    wie der Titel schon verrät benötige ich Hilfe bei einem kleinem Programm.
    Ich erfasse mithilfe einer Beckhoff SPS verschiedene Messdaten und speichere diese als CSV Datei.
    Jede Woche wird entsprechend eine Neue, für jeden Prüfling eigens, eine Datei angelegt.

    Das Modul ist eigens geschrieben und wird in einer Schleife (CASE [Schreibe Datei], [warte bis fertig],[erhöhe prüflingszahl]), entsprechend der Anzahl an Prüflingen aufgerufen und abgearbeitet.
    Soweit so gut, und es funktioniert eigentlich auch alles.

    Mein Problem was ich nun habe, gibt es eine elegante Möglichkeit , schnell und ohne viele Zyklen zu überprüfen, ob eine Datei um Ordner schon vorhanden ist?

    Aktuell gehe ich wie folgt vor.
    (egal ob Datei vorhanden oder nicht, wird dies bei jedem schreiben der Datei aufgerufen)

    1. Zyklus
    Öffne Datei im Lesemodus
    2. Zyklus
    Warte bis Datei geöffnet ist => ist Datei vorhanden, dann Error=0, Datei nicht vorhanden, Error=1
    Gehe in schritt zum erzeugen der Neuen Datei
    3. Zyklus
    schließe Datei wieder wenn vorhanden.
    4. Zyklus
    Warte bis Datei geschlossen ist

    Das sind insgesamt 4Zykles, welche jedes Mal in einer CASE Anweisung ausgeführt werden.
    40ms Zykluszeit bei z.B. 30 Prüflingen, macht schon was her.

    gibt es hierfür eine bessere Möglichkeit?



    Idee:
    1. einlesen des gesamten Verzeichnisses und überprüfen der eingelesenen Daten auf Existenz (Nachteil, da nicht die Anzahl der Dateien vorhersehbar ist, und entsprechend großes Array vorgehalten werden muss)
    2. Instanziierung des Moduls für jeden Prüfling mit Speicherung ob Datei vorhanden (Speicherplatzbedarf wächst je nach Anzahl der Prüflinge)


    Über Hilfe würde ich mich sehr freuen und sage schon einmal DANKE im voraus

    Code:
     
    20: 
      //********************************************
      // Überprüfen ob Datei vorhanden ist
      //********************************************
      fbFileOpen( bExecute := FALSE, bError => bError, nErrID => nErrID, hFile => hFile );
      fbFileOpen(
       sNetId:= NetIdZielAdr, 
       sPathName:= sFileName, 
       nMode:= Tc2_System.FOPEN_MODEREAD, 
       ePath:= Tc2_System.PATH_GENERIC, 
       bExecute:= TRUE, 
       tTimeout:= T#100MS, 
      );
      iState := 21;
    21:
      //********************************************
      // Warten bis überprüft wurde, ob datei vorhanden ist
      //********************************************
      fbFileOpen( bExecute := FALSE, bError => bError, hFile => hFile );
      IF NOT fbFileOpen.bBusy THEN 
       IF NOT fbFileOpen.bError THEN
        iState := 22;    // Datei vorhaden, dann schließe datei wieder, !!! ACHTUNG, datei befindet sich im Lese Modus, daher vorher schließen
        bFileExists := TRUE;  // Merker: Datei existiert
       ELSE
        iState := 30;    // Datei nicht vorhaden, dann Datei Neu anlegen und Kopfzeilen schreiben 
        bFileExists := FALSE;  // Merker Datei existiert nicht
       END_IF 
      END_IF
     
    // !!!!!!!!!!!!!!!!!!!!!!!
    // Datei muss geschlossen werden, da sich diese im LESE MODUS befindet 
    // !!!!!!!!!!!!!!!!!!!!!!!
    22:
      //********************************************
      // schließe datei
      //********************************************
      fbFileClose( bExecute := FALSE, bError => bError, nErrID => nErrID );
      fbFileClose(
       sNetId:= NetIdZielAdr, 
       hFile:= hFile, 
       bExecute:= TRUE, 
       tTimeout:= T#100MS, 
      );
      iState := 23;
    23:
      //********************************************
      // warte bis datei geschlossen ist
      //********************************************
      fbFileClose( bExecute := FALSE );
      IF NOT fbFileClose.bBusy THEN
       fbFileClose.bExecute := FALSE;
       
      END_IF
    Geändert von Minehunter (11.06.2016 um 23:06 Uhr)
    Zitieren Zitieren Überprüfen on Datei Vorhanden(TwinCat 3)  

  2. #2
    Registriert seit
    03.12.2013
    Ort
    Bremen
    Beiträge
    165
    Danke
    13
    Erhielt 15 Danke für 15 Beiträge

    Standard

    Moin Minehunter,

    ich benutze bei TC2 FB_EnumFindFileList zum Dateien suchen. Vll funktioniert das auch bei TC3 wovon ich aus gehe.

    Ich hoffe die Funktion bringt dich schon weiter =)
    Zum Thema Zyklus - Du hast zwar 4 Case aber die Bausteine wie zum Beispiel erstellen einer Datei benötigen unter umständen auch mehrerer Zyklusdurchgänge. Deine Brechnung geht also leider nicht auf wenn du Pech hast kann du vom 2-3 fachen von dem ausgehen. Wenn es schneller gehen muss, musst du dir vll einen Temporären Datenspeicher schaffen und gesammelt alles wegschreiben. Oder du benötigst eine andere Hardware mit der du einen schnelleren Zyklus fahren kannst.

    MfG Hendrik

  3. #3
    Minehunter ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.02.2016
    Beiträge
    24
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Hendrik,

    vielne dank für deinen Tip, habe dies so umgesetzt, dass ich mir vor beginn, entsprechend eine Liste mit den Dateien suchen lasse und entsprechend vergleiche.

    Danke noch einmal

Ähnliche Themen

  1. Antworten: 13
    Letzter Beitrag: 07.07.2012, 17:28
  2. Prüfe, ob Datei auf FTP Server vorhanden ist (Wago 750-849)
    Von Tenobaal im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 16.04.2012, 18:34
  3. Antworten: 6
    Letzter Beitrag: 13.12.2010, 14:14
  4. datei löschen, wenn zuviele vorhanden
    Von Bensen83 im Forum HMI
    Antworten: 3
    Letzter Beitrag: 21.03.2010, 09:58
  5. Antworten: 2
    Letzter Beitrag: 13.10.2005, 11:46

Stichworte

Lesezeichen

Berechtigungen

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