Über USB-Stick Programm Updaten

Messi90

Level-1
Beiträge
35
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
ich möchte in ein bestehendes Projekt die Funktion einbinden ein Update auszuführen.
Es soll möglich sein in der Visu einen Button "Update" zu klicken und es wird geprüft, ob ein USB-Stick angeschlossen ist und ob sich die benötigten Daten darauf befinden.
Wenn dies der Fall ist, soll sich die Visu und/oder Codesys aktualisieren.

Wie ist dies zu realisieren? Ich habe leider überhaupt keinen Anhaltspunkt und bei meinen Recherchen treffe ich nur auf SysFile Open,Write,Close. Dazu finde ich aber z.B. keinerlei Doku.

Eckdaten:
Visuprogramm: Galileo 10 von Eaton
Codesys 3.5.6
Steuerung: XV 303

MfG
Messi
 
Hey Messi,

ein paar sachen kann ich dir beantworten. Ich habe das ganz in ST und mit TwinCat2 programmiert.

USB-Stick prüfen:

Du kannst mit dem FB_EnumFindFileList nicht nur nach Dateien suchen sondern auch nach Ordner. Bei meinem Zielsystem ist der USB-Stick ein Ordner. Ich suche einfach jede Sekunde oder so ähnlich nach dem Ordner. In meinem Fall "\Hard Disk2".

Auf Updatedatei prüfen:

Hier haben wir es intern so geregelt, das eine Updatedatei die Endung ".bin" hat. Und genau nach diesen Endungen suche ich mit der EnumFindFileList Funktion. Die ".bin" Dateien lasse ich mir dann auflisten.

Um sicherzustellen ob es nicht eine andere Datei vom typ ".bin" ist haben wir der Datei eine Kennung mit gegeben. (Das ist aber etwas komplizierter (hat jemand anders Programmiert :p ))

Bei TwinCat ist es so, das ein Bootprojekt auf dem Zielsystem angelegt wird. Diese tausche ich wie folgt aus.

1. Backup der alten Datei anlegen
2. Neue datei anlegen
3. Backup löschen ( aber nur wenn alles gut gegangen ist) Ansonsten zurück kopieren.
4. System neustart


Dateien Anlegen usw. macht man tatsächlich mit den von dir genannten FBs
Was ich aber leider am anfang nicht berücksichtigt habe waren die Persistenten Daten. Diese werden bei dieser Art des Updates unter umständen gelöscht. Hier für musst du vor dem Austauschen ein Backup anlegen welches du nach dem Update wieder zurückliest.

MfG
Hendrik
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke dir erstmal für deine Antwort.
Das was du da beschriebst ist auch so ziemlich genau das was ich gern möchte.
Nun besteht für mich leider weiterhin das Problem, dass ich diesen FB von Twincat leider nicht nutzen kann, da ich ja mit der Codesys Version von Eaton (XSoft-Codesys-3) arbeite.
Korrigiere mich bitte falls ich falsch liege aber nutzen kann ich diesen so nicht, richtig?

Gibt es vllt einen ähnlichen FB für XSoft mit einer gescheiten Dokumentation? Irgendwie ist genau das Mangelware bei Eaton und macht es für einen Einsteiger nicht unbedingt leichter...

Danke schon mal im Voraus!
 
Da TwinCat2 auf Codesys aufgebaut ist bzw. Codesys ist. Sollte es eigentlich auch die Funktionsbausteine dort geben.

Ich habe leider bis her nur TIA, Step7 und TwinCat2 programmiert. Kann dir deine deshalb nicht beantworten. Wie ist die Software von Eaton aufgebaut?
Kannst du Bibiliotheken hinzufügen?

Aber vielleicht kennt sich jemand anders mit Eaton aus. Sonst hilft dir nur der Eaton Support...

Gruß Hendrik
 
Also genau diesen FB gibt es bei XSoft leider nicht.

Die Software von Eaton (XSoft) ist im Prinzip 1:1 das Gleiche wenn ich mir die Bilder von Twincat3 ansehe.
Ich finde leider auch keine .lib Dateien von Twincat zum download. Sonst hätte ich es einfach mal ausprobiert.

Eaton Support ist kontaktiert aber deren Hilfe schwankt auch je nach Tagesform :-/
 
Ok, aber wie binde ich die .libs dann von TwinCat in mein XSoft mit ein? Irgendwie müsste ich ja dann die .lib verschieben. Ich hoffe die "EnumFindFileList" ist auch bei der TwinCat3 vorhanden, da ich es ja für eine Codesys Version 3.5.6 bräuchte.

Ich versuch das gleich mal so.
 
Hey ja verschieben musst du es. Aber dafür findest du bestimmt einen Hinweis hier im Forum oder im Inet.

melde dich mal ob das einbinden funktioniert hat.

MfG
Hendrik
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube ich habe den FB für die XSoft Variante gefunden. Siehe Anhang
Jetzt weiß ich allerdings trotzdem noch nicht wie das Ding genau funktioniert, da ich keinerlei richtige Doku dazu finde.
 

Anhänge

  • dirList.jpg
    dirList.jpg
    64,5 KB · Aufrufe: 18
Hey also mit dem Bild kann ich dir leider so auch nicht weiter helfen.

Man kann auch überhaupt nicht erkennen welches IN und OUTPuts sind...

Ich kann dir aber hier kurz meinen CODE vom suchen zeigen vll kannst du dir dann etwas zusammen Reimen. =D

Code:
VAR_INPUT
    Execute:                    BOOL;                (* Start durch steigende Flanke *)
    PathAndFolderName:        T_MAXSTRING;        (* z.B.' \Hard Disk3\Log' oder '\Hard Disk3\Log\2015_04_21' *)
END_VAR
VAR_OUTPUT
    Error:                BOOL;
    Busy:                BOOL;
    ErrorID:                 TempDataWrite_error_t;
    Folder_OK:            BOOL;                    (* TRUE= Folder Created *)
END_VAR
VAR
    EnumFindFileList2:     FB_EnumFindFileList;
    cbFindList:             UDINT;
    pFindList:             ST_FindFileEntry;
    bError:                 BOOL;
    eCmd:                 E_EnumCmdType := eEnumCmd_First;
    TMOUT:                 TIME := DEFAULT_ADS_TIMEOUT;
    nFindFiles:             UDINT;
    sPathName:            STRING;
    TestUSB:             INT;
    Trigger:                 R_TRIG;
END_VAR


Trigger( CLK := Execute );

CASE TestUSB OF

    0:
        IF Trigger.Q = TRUE THEN
            Error:= FALSE;
            Busy := TRUE;
            ErrorID:= 0;
            EnumFindFileList2.bExecute := FALSE;
            sPathName := '';
            sPathName := PathAndFolderName;
            TestUSB := 5;
        END_IF
    
    5:
        IF EnumFindFileList2.bBusy = FALSE THEN
            EnumFindFileList2.bExecute:= TRUE;
            TestUSB := 10;
        ELSE
            TestUSB := 0;
        END_IF

    10:
        IF EnumFindFileList2.bBusy = FALSE THEN
            IF EnumFindFileList2.bError = FALSE THEN
                TestUSB := 15;
            ELSE
                TestUSB := 50;
            END_IF
        ELSE
            TestUSB := 10;
        END_IF
    15:
        IF EnumFindFileList2.nFindFiles <>0 THEN
            Folder_OK := TRUE;
            Busy := FALSE;
        ELSE
            Busy := FALSE;
            Folder_OK := FALSE;
        END_IF
        TestUSB := 0;
    
    50:
        Error:= EnumFindFileList2.bError;
        ErrorID:= TD_ERR_NOT_FOUND_DIR ;
        Folder_OK := FALSE;
        Busy:= FALSE;
        TestUSB := 0;
    

END_CASE

EnumFindFileList2(

    sPathName:=sPathName ,
    eCmd:=eCmd ,
    pFindList:=ADR (pFindList) ,
    cbFindList:=SIZEOF (pFindList),
    tTimeout:=TMOUT );

Damit kannst du halt direkt nach einer Datei oder einem Ordner suchen... du musst dafür aber den genauen Pfad wissen.
 
Hallo,

also erstmal vorweg: Die Eaton XSoft-Variation von Codesys kann genauso Bibliotheken einbinden wie die 3S-Version - ABER: Was die Doku angeht habe ich öfters gesehen, das diese im Kommentar des Bausteins in der Bib "versteckt" ist - als alleinige Lösung häufig nicht das intuitivste ;)

Aus eigener und fern-mündlicher Inbetriebnahme Erfahrung weiß ich allerdings, das die XIOC-Serie mit der V3 gelegentlich etwas zickig ist. In meinem Fall ließ sich bei einem 16DI-Modul in beiden Eingangsbytes nur das erste Byte abbilden, die Eingänge >8 wurden einfach ignoriert. Hierbei ging es um eine XC201 mit einer XIOC-16DI Eingangskarte.
Mit der XSoft-V2 läuft diese Hardware-Kombi problemlos.
 

Similar threads

Zurück
Oben