Cache des Parse Trees / generierten Codes löschen

wirthi
2010-09-21
2010-10-14
  • wirthi - 2010-09-21

    Hallo,

    CoDeSys (V 3.4.1.0) scheint irgendeine Art Cache des übersetzten Programms (des Parse Trees, wohl auch des generieren Codes) zu haben. In bestimmten Situationen führt das bei mir dazu, das Code, obwohl geändert, nicht neu übersetzt wird. Da hilft auch kein Codesys-Neustart, da hilft auch kein "Clean All". Auch nach diesen Aktionen werden nur jene POUs neu übersetzt, die ich manuell im Editor bearbeite (erkennbar dadurch, dass nur diese im Message-Log nach "generate code ..." angeführt werden).

    Gibt es irgendeine Möglichkeit, dem System zu sagen, doch bitte ALLES neu zu übersetzen? Ich hätte erwartet, dass "Clean All" genau das tut - tut es aber nachweislich in meinem Fall nicht.

    Bin für alle Hinweise dankbar

     
  • Anonymous - 2010-09-29

    Originally created by: Bernhard Werner

    Codesys V3 übersetzt grundsätzlich nur die Bausteine, die auch irgendwo benutzt werden, also ausgehend von der Taskkonfiguration werden verwendete Bausteine gesucht und diese übersetzt.
    In der V23 wurden immer alle Bausteine des gesamten Projekts (auch in Bibliotheken) übersetzt.
    In der aktuellen Version 3.4 SP 1 wird das auch wieder im Baum angezeigt, die nicht übersetzten Bausteine sind grau.

    Ich denke dass das dein Problem ist.

     
  • wirthi - 2010-09-30

    Danke für den Hinweis, aber alle Codeteile werden auch tatsächlich verwendet.

    Nochmal: es kann meiner Meinung nach nicht sein, dass ich "Clean All" drücke, und danach gibt es KEINEN Code zu generieren? Nicht eine einzige POU? Das widerspricht meinem Verständnis von "Clean All".

     
  • bschuster - 2010-10-04

    Hallo,
    ist das denn mit all Deinen Projekten nachvollziehbar ?
    Welche Schritte machst Du denn ?
    Clean All, Übersetzen / Neu Übersetzen, Code generieren ?

    Schick doch mal ein Projektarchiv an uns ( e support@3s-software.com e )

     
  • wirthi - 2010-10-06

    Servus, ja, ich mache "Clean All; Build; Rebuild; Generate Code;" (oder auch nur Build oder nur Rebuild). Ich würde dann erwarten, dass bei den Messages unter "generate code ..." auch ein Eintrag pro POU steht (der Code muss ja neu generiert werden, nachdem "clean all" aufgerufen wurde). Es kann natürlich sein, dass der Code zwar generiert wurde, aber einfach kein Eintrag unter Messages ausgegeben wurde - aber warum das?

    Ja, das Problem ist auch bei einem Minimalbeispiel (ein Task, ein PRG, eine int-Variable "counter" die jedes Mal um eins erhöht wird) sichtbar.

    Ich hab dazu auch ein Video gemacht:

    http://ase.jku.at/downloads/codesys/cod ... eanall.zip (Video)
    http://ase.jku.at/downloads/codesys/Cle ... st.project (Projekt)

    Sek. 0-12: Sourcecode und Task-Einstellung
    Sek. 13-23: "Build", "Generate Code" => unter "Messages" steht bei "generate code..." kein Eintrag
    Sek. 24: "Clean All".
    Sek. 30: "Generate Code": zumindest laut "Messages" wurde kein Code neu übersetzt (warum? "Clean All" sollte doch genau das bewirkt haben)
    Sek. 35-45: "Build, Rebuild, Generate Code" => "The application is up to date" (ok, wenn vorher schon nix zu übersetzen war, hilft wohl auch (Re)Build nichts).
    Sek. 46: Sourcecode wird geändert (und gespeichert)
    Sek. 54: "Generate Code": JETZT wird plötzlich der Code neu generiert (klar, muss er generiert werden wenn ich den Quelltext ändere ...)
    Sek. 60: "Clean All"
    Sek. 64: "Generate Code" => kein Code wird generiert.

    Schaut für mich also so aus, als ob "Clean All" NICHT dazu führt, dass Code neu übersetzt wird. Ich muss tatsächlich im Editor eine Änderung bewirken, sonst wird der Code nicht neu übersetzt.
    WAS ist dann der Effekt von "Clean All"?
    WIE kann ich den Compiler dazu bewegen, den Code unbedingt neu zu generieren?.

    Danke für Hinweise diesbezüglich.

     
  • Anonymous - 2010-10-13

    Originally created by: Bernhard Werner

    Ach so, jetzt verstehe ich das Problem. Ja das ist mittlerweile so. Wenn alles übersetzt wird, dann wird nicht mehr für jeden Baustein eine Ausgabe gemacht. Die Leute haben sich beschwert, dass wirklich wichtige Meldungen untergehen, weil die Messagebox so voll ist (da kamen schon mal ein paar Tausend Einträge zusammen).
    Wenn allerdings inkrementell compiliert wird, dann wird nach wie vor ausgegeben, für welchen Baustein Code erzeugt wurde.

     
  • wirthi - 2010-10-14

    Servus, ja, danke; das hat mir mittlerweile auch das Support-Team per E-Mail bestätigt.

    Dann halt im Gegenzug meine "Beschwerde" (Bitte): Wenn (manchmal) garkeine Zeile mehr dort steht, obwohl übersetzt wurde, dann glaubt man (besser: glaubte ich), dass NICHTS übersetzt wurde (weil ja die entsprechende Ausgabe fehlt). Vielleicht könnt ihr ja ausgeben:

    Zitat:
    generating code ...
    Code for all POUs generated

    Dann ist es klar, was passiert.

     

Log in to post a comment.