Ankündigung

Einklappen
Keine Ankündigung bisher.

Commandline-Tool für "KNX mit ETS"-Projekt

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Commandline-Tool für "KNX mit ETS"-Projekt

    Hi,

    ich habe mal für den Stack von thesing (siehe dieser Thread https://knx-user-forum.de/forum/%C3%...66-knx-mit-ets) ein commandline tool geschrieben, dass neben der reinen Erzeugung von knxprod files auch noch einige checks durchführt und ein header file für die zu entwickelnde firmware generiert.

    Zu finden ist das Ganze unter https://github.com/mumpf/multiply-channels.

    Das Tool ist (leider) gewachsene Software, ich wollte ursprünglich was haben, was mir immer wieder gleichlautende XML-Bestandteile vervielfacht. Nach und nach kamen andere Funktionalitäten dazu. In dem vorliegenden Prerelease habe ich versucht, aufzuräumen und einiges neu zu schreiben, dadurch sind die eigentlichen "multiply"-Funktionen nicht implementiert bzw. sehr buggy. Im Laufe der Zeit werden diese aber wieder ans laufen gebracht und hier veröffentlicht.

    Was gut läuft: Ein vorhandenes XML-File wird geprüft, ein .h-File generiert und ein knxprod-File erzeugt. Im Detail funktioniert die Erzeugung vom knxprod-File anders als beim originalen CreateKnxProd, es wird immer ein knxprod passend zu der installierten ETS-Version erzeugt und ist nur für diese und Folgeversionen nutzbar.

    Als commandline tool kann es sehr gut z.B. in Visual Studio Code auf ein Shortcut gelegt werden und nach Änderungen am xml zur Verifikation (check) oder Erzeugung von einem neuen knxprod-File (create) genutzt werden.

    Ich habe einen neuen Thread aufgemacht, damit Fragen, Fehlermeldungen und andere Rückmeldungen zu diesem Tool den Originalthread von thesing nicht verwässern.

    Viel Spaß beim ausprobieren...

    Gruß, Waldemar

    #2
    Hi,

    hab schon ne Meldung bekommen, dass die ETS-dll nicht gefunden werden. Derzeit schaue ich nur im Standard-Installationsverzeichnis der ETS nach, bei mir ist das
    Code:
    C:\Program Files (x86)\ETS5 oder C:\Program Files (x86)\ETS4
    Falls das bei euch anders ist, dann schreibt mir mal bitte, wo die liegen, ich muss mir dann was überlegen...

    Gruß, Waldemar

    Kommentar


      #3
      Hallo Waldemar,

      hier kommt ein Fehler, die "Knx.Ets.Converter.ConverterEngine.dll" gibt es nur in dem Verzeichniss aber nicht im ETS Hauptverzeichniss:

      C:\Program Files (x86)\ETS5\CV\4.0.1997.50261\Knx.Ets.Converter.Con verterEngine.dll

      Ist das bei Ets 5.7.2 etwas anders?

      Habe mal C:\Program Files (x86)\ETS5\CV\4.0.1997.50261\ nach C:\Program Files (x86)\ETS4 kopiert dann geht etwas mehr.....

      MultiplyChannels.exe create knx-demo-tp
      Reading and processing xml file knx-demo-tp.xml
      - Final parameter size is 8
      - ApplicationNumber: 43982, ApplicationVersion: 121, old ID is: -ABCE-79-0000, new (calculated) ID is: -ABCE-79-0000
      Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
      at MultiplyChannels.ProcessInclude.ProcessFinish(XmlN ode iTargetNode)
      at MultiplyChannels.ProcessInclude.Expand()
      at MultiplyChannels.Program.VerbCreate(CreateOptions opts)
      at MultiplyChannels.Program.<>c.<Main>b__11_0(CreateO ptions opts)
      at CommandLine.ParserResultExtensions.MapResult[T1,T2,T3,TResult](ParserResult`1 result, Func`2 parsedFunc1, Func`2 parsedFunc2, Func`2 parsedFunc3, Func`2 notParsedFunc)
      at MultiplyChannels.Program.Main(String[] args)

      Gruß
      Robert
      Zuletzt geändert von jeff25; 13.10.2019, 07:54.

      Kommentar


        #4
        Hi Robert,

        danke für's testen. Ich habe es zwar auf 3 verschiedenen Rechnern mit 3 verschiedenen ETS getestet, aber scheinbar ist noch was falsch...

        ​​​​​​Ich schick dir gleich ne PN mit meiner Mail-Adresse, dann kannst du mir vielleicht das xml schicken. Irgendwas ist bei dir noch, was ich nicht prüfe.

        Du rufst das ganze aber jetzt mit --EtsVersion=4 auf, oder?

        Gruß, Waldemar

        Kommentar


          #5
          Bei mir hats auf Anhieb geklappt, hab manuell einen Parameter hinzugefügt, App Version hochgezogen und Replace auf die Vorige. Dein Tool hat die Tabllen Größe angepasst und die IDs entsprechend der neuen Version geändert...Top
          Beim generierten header file hats aber noch was:

          ist:
          Code:
          #define _KoSensor 1 4
          soll:
          Code:
          #define _KoSensor_1 4
          hier wäre es aber cool wenn man nicht nur defines generiert sonder den ganzen Code um den Paramter direkt in der Applikation verfügbar zu machen, habs jetzt nicht zu Ende gedacht aber die nötigen Infos müssten ja verfügbar sein.... also das zb. sowas generiert wird:

          Code:
          inline uint8_t ETS_Parameter_Update_Interval(){return ((uint8_t)knx.paramInt(5));}
          
          inline uint32_t ETS_Parameter_StatusUpdateInverval(){
              switch (knx.paramByte(663)){
              case 0: return 0;
              case 1: return 60;
              case 2: return 120;
              case 3: return 300;
              case 4: return 600;
              case 5: return 1800;
              case 6: return 3600;
              default: return 0;
              }
          }

          Kommentar


            #6
            Waldemar ich habe auf ETS5.6 gerade noch getestet da scheint es zu gehen, da gibt es auch eine Knx.Ets.Converter.ConverterEngine.dll im ETS verzeichniss, das ist bei der 5.7 nicht mehr so... warum ist mir unklar.

            Kommentar


              #7
              Hi,

              ich installiere noch die ETS 5.7 auf einem frischen Rechner, dann teste ich nochmal. Ich habe es aber garantiert schon mal mit der 5.7.x laufen lassen, ich weiß nur nicht, ob es die 5.7.2 ist. Ich verwende produktiv nur die 4.0, die 5er-Versionen nur um neue Features zu testen.

              In der letzten Zeit hab ich die meisten Sachen mit der 5.6 ausprobiert, deswegen ist die auch Default.

              Nochmal zum Verständnis:
              Wenn mein Tool mit knxprod aufgerufen wird, dann wird nur der Konverter von xml nach knxprod aufgerufen, es passieren keinerlei Anpassungen am xml-File selbst. Dann muss auch die Konverter-Engine zum xml-Dokument passen. Das wird im Dokument über Namespaces geregelt. Die Zuordnung ist
              • xmlns="http://knx.org/xml/project/11" für ETS4
              • xmlns="http://knx.org/xml/project/13" für ETS5.5
              • xmlns="http://knx.org/xml/project/14" für ETS5.6
              • xmlns="http://knx.org/xml/project/20" für ETS5.7
              Wenn das nicht passt, kommt vom Konverter eine Meldung der Form

              Code:
              System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
              ---> System.InvalidOperationException: There is an error in XML document (2, 2).
              ---> System.InvalidOperationException: <KNX xmlns='http://knx.org/xml/project/11'> was not expected.
              at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderKNX.Read272_KNX()
              ...
              Man kann das manuell auf die passende Version anpassen oder man nutzt die "create" Option von meinem Tool, die macht das dann automatisch...

              Gruß, Waldemar

              Kommentar


                #8
                HI Bernator,

                das beruhigt mich etwas, dass es nicht überall gleich schief geht . Beim Header schau ich nochmal, ich verwende keine Underscores (blöd zu tippen), da ist es mir dann wohl nicht aufgefallen.

                Bei den Zugriffsmethoden könnte ich mir das auch vorstellen, allerdings verstehe ich das 2. Beispiel mit dem switch nicht. Woher würdest Du die Werte hinter dem return nehmen? Wenn das die Dropdown-Inhalte sein sollen, das sind ja im Allgemeinen nur Texte... Oder meinst Du, man sollte bei rein nummerischen Enumerations einfach pro Forma so eine Zugriffsfunktion generieren?

                Ansonsten dauert das noch, ich muss erstmal mein include-Konzept fertig bekommen, da bereitet das Generieren der Header noch die meisten Probleme (man will ja nicht 5000 Parameter haben, nur weil man 100 Parameter 50 mal wiederholen lässt). Dafür würden sich aber letztendlich auch Zugriffsfunktionen mit einem index anbieten.

                Gruß, Waldemar

                Kommentar


                  #9
                  Zitat von mumpf Beitrag anzeigen
                  Wenn das die Dropdown-Inhalte sein sollen, das sind ja im Allgemeinen nur Texte... Oder meinst Du, man sollte bei rein nummerischen Enumerations einfach pro Forma so eine Zugriffsfunktion generieren?
                  Ich sagte ja "nicht zu Ende gedacht"

                  man könnte hier aber den Text als Kommentar einfügen und der "User" füllt das dann manuell mit den korrespondierenden Zahlenwerten.....

                  Kommentar


                    #10
                    Naja, derzeit generiere ich das .h file immer neu, manuelle Änderungen sind eine schlechte Idee... Aber ich behalte das mal im Hinterkopf, wie gesagt, ich werde die header generierung sicherlich nochmal stark überarbeiten müssen. Danke für die Anregung.

                    Gruß, Waldemar


                    Kommentar


                      #11
                      Hi,

                      ich habe die ersten Rückmeldungen mal eingearbeitet und eine weitere alpha freigegeben.
                      Es gab eine Änderung bei den Optionen: --EtsVersion ist jetzt weggefallen, die korrekte Version des ETS-Konverters wird anhand des xml-Dokuments ermittelt.

                      Gruß, Waldemar

                      Kommentar


                        #12
                        Hi,

                        bei mir klappt es prima! Vielen Dank dafür.

                        Gruß
                        Robert

                        Kommentar


                          #13
                          Hi,

                          freut mich, dass es jetzt besser läuft. Gleich mal eine Frage an die, die es nutzen:
                          Ich habe gesehen, dass alle #define einen Underscore '_' an den Anfang bekommen. Das ist nicht beabsichtigt und so gesehen ein Fehler . Eigentlich ist geplant, dass man einen Prefix per Kommandozeile wählen kann, z.B. "--Prefix=AKTOR", dann würden alle #define mit AKTOR_ anfangen. Ohne Präfix sollte da aber auch kein _ kommen. Bei ComObject setze ich auch noch automatisch ein Ko vor den Namen (AKTOR_Ko).

                          Das mit dem Präfix würde ich gerne bald einbauen, das ist auch für Includes notwendig, da man potentiell unterschiedliche Präfixes aus unterschiedlichen Includes haben will, um Namenskollisionen im Headerfile zu vermeiden. Dann würde aber per default kein _ mehr reingeneriert werden. Das ändert das Verhalten. Man wird dann aber auch --Prefix=_ angeben können, dann sieht es wie jetzt aus.

                          Ich hoffe, da hat keiner was dagegen, ich habe es nicht umsonst als "alpha"-Version bezeichnet .

                          Gruß, Waldemar

                          Kommentar


                            #14
                            vielleicht wäre es auch eine Idee per default --Prefix den namen des XML files zu nutzen und nur als Parameter zum anpassen. denn meist hat das xml file den namen wie das Device auch heisst :-)

                            Kommentar


                              #15
                              Hi Robert,

                              da bin ich ehrlich gesagt dagegen. Bei mir heißen die Dateinamen "Sensormodul-Berker-Temp-Hum-Co2" oder "Logikmodul-80-Kanal", also sehr sprechend, und das möchte ich auf keinen Fall als Prefix haben. Ich finde an dieser Stelle ist es richtig, den Default-Prefix auf "" (also nichts) zu setzen, sonst bekommt man es auch nicht hin, ein Headerfile ohne Prefix zu machen. Und solange man immer nur ein xml (ohne includes) und ein headerfile hat, braucht man nicht wirklich einen Prefix.

                              Gruß, Waldemar

                              Kommentar

                              Lädt...
                              X