Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

ERROR_UNKNOWN bei CAA-Funktion FILE.DirCreate

2015-01-18
2015-01-26
  • RudolfAtITD - 2015-01-18

    Hallo an die Experten!
    Ich muss in meinem Projekt Daten in einer Datei in einem bestimmten Ordner auf der Steuerung ablegen. Dazu verwende ich die CAA-Funktion "FILE.DirCreate" als Erstes, um den Ordner anzulegen - falls er noch nicht existiert.
    Wenn der Ordner noch nicht existiert, wird er ordentlich angelegt.
    Wenn der Ordner schon existiert, hatte ich den Fehler "FILE.ERROR.EXIST" erwartet, damit wäre die Sache OK. Ich bekomme statt dessen aber fast(?) immer den Fehler "FILE.ERROR.ERROR_UNKNOWN". Den habe ich jetzt zwar zusätzlich abgefangen, das ist aber Pfusch!
    Was mache ich falsch?? Wie kann ich die Existenz des Ordners anders feststellen?
    Ein Leser hat gesagt, dass Steuerungstyp und Version wichtig sind, was ich eigentlich bei CAA nicht vermutet habe:
    Steuerung: Festo CMMO-ST-LKPCODESYS V3.5 SP4 Patch1 pbFHier hängt der relevante Teil meines FBs an:

    VAR
      ...
      dirCreate:    FILE.DirCreate;   // CAA Lib: Create a folder
      ...
    END_VAR
    // ---FB part ----------------
          dirCreate.sDirName := sFolderName;  // Name des Ordners
          dirCreate.xParent := FALSE;
          dirCreate(xExecute := TRUE);
          IF (dirCreate.xError) THEN
            IF ((dirCreate.eError <> FILE.ERROR.EXIST) AND (dirCreate.eError <> FILE.ERROR.ERROR_UNKNOWN)) THEN
              eErrID := FILE_ERRORS.ErrAtCreate; // ==== Nur dann ist es ein Fehler!! ====
              xDone := TRUE;
              xError := TRUE;
              END_IF
             END_IF
          IF dirCreate.xDone OR xError THEN
            dirCreate(xExecute := FALSE);
          END_IF  
          IF xError THEN
            RETURN;       //---- Brake when error
          END_IF
    
     
  • eschwellinger

    eschwellinger - 2015-01-20

    hm.. diesem snippet sieht mal leider nicht an wo du den Ordner anlegen willst (Pfad)
    Ich könnte mir vorstellen, das es ein Rechteproblem unter Linux ist bzw Security technisch Festo in ihrer SPS nicht unbedingt erlaubt an x-beliebigen stellen erlaubt Verzeichnisse anzulegen.

    Grüße
    Edwin

     
  • RudolfAtITD - 2015-01-21

    Hallo Edwin,

    ich hatte ja geschrieben, dass das Anlegen eines Ordners immer (!) ohne Problem funktioniert, wenn er noch nicht existiert. Das Problem taucht nur auf, wenn der anzulegende Ordner schon existiert und der Baustein das nur sagen soll. Das tut er eben nicht, sondern er endet mit dieser seltsamen Fehlermeldung.
    Ein work-around wäre eine Methode, die feststellt, ob ein Ordner existiert oder nicht. Gibt es das?

    Noch eine Info: Der Odner-Name (sFolderName im snippet) ist ein simpler String ohne jede Hierarchie. Der Ordner wird im Root-Ordner der Steuerung angelegt - wie gesagt - wenn er noch nicht existiert. Das sollte also für mein Problem nicht relevant sein.

    Ich hoffe immer noch auf einen Tipp! Gruß, Rudolf.

     
  • eschwellinger

    eschwellinger - 2015-01-22

    Hallo Rudolf,

    sorry habs nicht genau genug gelesen,
    ja ist einfach ein blöder Fehler, da gibt es schon einen BugTracking Eintrag dafür,
    ich fürchte dir bleibt keine andere Möglichkeit als, im Falle des ERROR_UNKNOWN anzunehmen,
    das das Verzeichnis schon existiert alternativ kannst du natürlich mit "DirList" dir die Verzeichnisse geben lassen und
    wenn es schon existiert... naja dann musst du es ja nicht anlegen.
    Hoffe das hilft dir weiter.

    Grüße
    Edi

     
  • RudolfAtITD - 2015-01-26

    Vielen Dank, Edwin,

    ich werde mal die Funktion "Dirlist" einbauen. Wenn das funktioniert, ist mir wohler als mit diesem seltsamen Fehler.

    Zum Abschluss des Themas ein Gruß, Rudolf

     

Log in to post a comment.