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//---FBpart----------------
   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
   IFdirCreate.xDoneORxErrorTHEN
    dirCreate(xExecute :=FALSE);
   END_IFÂ
   IFxErrorTHEN
    RETURN;    //---- Brake when error
   END_IF
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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:
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
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.
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
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