Ankündigung

Einklappen
Keine Ankündigung bisher.

Makros auf Wunsch ausführen

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

    [EibParser] Makros auf Wunsch ausführen

    Hallo Zusammen,

    entweder bin ich nicht erleuchtet genug , oder es geht tatsächlich nicht.


    Ich möchte ein Makro bedingt ausführen, d.h. sinngemäss
    if x=y then macro(param1, param2)
    if x=z then macro(param3, param4)

    Ich möchte diese Prüfung nicht in das Macro verlagern.

    Bisher habe ich beim Einfügen eines Makros immer eine Zeile in der Sektion [Makros] erhalten.

    Kann ich ein Makro auch in der Sektion [EibPC] anführen?

    Leider kann ich das gerade nicht testen, da mein Ersatz-EibPC noch bei meiner deutschen Deckadresse schlummert.
    Gruss Pio

    #2
    Zitat von pio Beitrag anzeigen
    Hallo Zusammen,

    entweder bin ich nicht erleuchtet genug , oder es geht tatsächlich nicht.
    Kann ich ein Makro auch in der Sektion [EibPC] anführen?
    Nein, das geht leider nicht. Du müsstest Deine Abfrage ins Makro einbauen.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Hallo PIO,

      das geht leider nicht, ich würde mir das auch wünschen.
      So eine Art "Funktion" oder so....

      Ich denke das ist ein FEATURE WUNSCH!!!!

      Grüße
      Jens

      Kommentar


        #4
        Hab ich in die Liste eingetragen.
        Gruss Pio

        Kommentar


          #5
          Makro quasi als Makro - oder eine Funktion.

          Bin für beides!!
          BR
          Marc

          Kommentar


            #6
            Zitat von saft6luck Beitrag anzeigen
            Makro quasi als Makro - oder eine Funktion.

            Bin für beides!!
            Das hätt ich mir ja denken können.
            Aber das wird ein hartes Stück Arbeit (konzeptionell wäre das ein riesiger Umbau, wenn überhaupt möglich) - jedenfalls nix für diesen Sommer...
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              Dito!

              Zitat von enertegus Beitrag anzeigen
              jedenfalls nix für diesen Sommer...
              ... Auch wenn es länger dauert.
              Gruß
              Christian

              Kommentar


                #8
                Hallo,

                mag ja stilistisch nicht so toll sein, aber warum nicht einfach grundsätzlich eine generische Bedingung (per Design-Guideline) einfügen (also ein boolean parameter) und diese dann im Makro prüfen? Ist halt PLC Programmierung und nicht prozedural... hieße dann:
                Bedingung=...
                Makro(Bedingung, Parameter1, ...)

                Gruss
                Arno

                Kommentar


                  #9
                  Zitat von pernozzoli Beitrag anzeigen
                  Hallo,
                  einfach grundsätzlich eine generische Bedingung (per Design-Guideline) einfügen ... hieße dann:
                  Bedingung=...
                  Makro(Bedingung, Parameter1, ...)
                  JAAAAAAA!
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #10
                    Zitat von pernozzoli Beitrag anzeigen
                    mag ja stilistisch nicht so toll sein, aber warum nicht einfach grundsätzlich eine generische Bedingung (per Design-Guideline) einfügen (also ein boolean parameter) und diese dann im Makro prüfen? Ist halt PLC Programmierung und nicht prozedural... hieße dann:
                    Bedingung=...
                    Makro(Bedingung, Parameter1, ...)
                    1. geht das schon und 2. was hilft da der Design-Guide?
                    Soll ich nun also für jede Instanz eines Makros auch noch eine Bedingung definieren?

                    Zitat von enertegus Beitrag anzeigen
                    Das hätt ich mir ja denken können.
                    Aber das wird ein hartes Stück Arbeit (konzeptionell wäre das ein riesiger Umbau, wenn überhaupt möglich) - jedenfalls nix für diesen Sommer...
                    Also zumindest ein Makro im Sinne von C sollte ja der Parser erschlagen können. Das Konzept muss man da doch nicht ändern.
                    BR
                    Marc

                    Kommentar


                      #11
                      A) Makro = im Sinne von #define in C = spätere Substitution der "Abkürzung" im Programm durch den "Volltext" = alles wird aufgebläht, aber ist auch relat. einfach umzusetzen im Parser (quasi "Suchen und Ersetzen").

                      B) Funktion = grosse Konzepterweiterung = dauert lange


                      C) Bedingung=...
                      Makro(Bedingung, Parameter1, ...)

                      ist genau das, was ich vermeiden möchte. Das macht die Programmierung und das Verständniss hundsunübersichtlich und ist fehlerträchtig.
                      Gruss Pio

                      Kommentar


                        #12
                        1. geht das schon
                        Genau! Das meine ich auch!

                        und 2. was hilft da der Design-Guide?
                        es hilft, zu verstehen, dass es sich hier um eine PLC und nicht eine prozedurale Sprache handelt. Man könnte es auch FAQ oder wie auch immer nennen. Eine Design-Guideline stellt dem Entwickler Regeln und Richtlinien für die richtige (gute) Programmierung in einer bestimmten Umgebung zur Verfügung.

                        Soll ich nun also für jede Instanz eines Makros auch noch eine Bedingung definieren?
                        Wo ist da der Unterschied zu if x then y?

                        Makros sind eben keine Prozeduren, sondern wiederverwendbare Codestücke. Oder verstehe ich da etwas falsch? D.h. der Parser expandiert diese beim Generieren des Objektcodes. Richtig? Das ist m.W. bei C nicht anders.

                        Gruss
                        Arno

                        Kommentar


                          #13
                          Zitat von pernozzoli Beitrag anzeigen

                          Makros sind eben keine Prozeduren, sondern wiederverwendbare Codestücke. Oder verstehe ich da etwas falsch? D.h. der Parser expandiert diese beim Generieren des Objektcodes. Richtig? Das ist m.W. bei C nicht anders.
                          Arno, das ist der springende Punkt.
                          Warum kann ich eine Zeile wie "MakroXY(A,B,C)" nur genau in der Sektion [Makros] platzieren (und dort wird dann aus jedem Einzeiler evtl. ein 30-Zeiler), dort wird sie vom Parser via Suchen und Ersetzen ersetzt,
                          warum kann ich das nicht genauso gut in [EibPC] ?

                          Der Parser kann exakt die gleichen Funktionen zum Verarbeiten des Makros dort anwenden, also für Enertex sehr geringer Aufwand.

                          Wenn´s hilft, schreib ich auch noch

                          if x=y then
                          {
                          MakroBla
                          }
                          Gruss Pio

                          Kommentar


                            #14
                            Zitat von pernozzoli Beitrag anzeigen
                            Wo ist da der Unterschied zu if x then y?
                            Der Unterschied ist gering. Ich brauche auch in den wenigsten eibPC-Makros eine solche Bedingung, daher finde ich eine generelle Regel hierfür nicht notwendig.

                            Makros sind eben keine Prozeduren, sondern wiederverwendbare Codestücke. Oder verstehe ich da etwas falsch? D.h. der Parser expandiert diese beim Generieren des Objektcodes. Richtig? Das ist m.W. bei C nicht anders.
                            Makros in C könnte man in diesem Zusammenhang mit Inline-Funktionen vergleichen. Sie können beliebig oft verwendet werden, und zwar sowohl mit sich ändernden Parametern, als auch mit immer gleichen Parametern. Die Ausführung kann ich dann im Code beliebig steuern.

                            Beim eibPC wird ein Makro im Makro Bereich expandiert. Um dort die Ausführung zu steuern muss ich alle Fälle entsprechend im Makro vorhalten, explizit z.B. mehrfache Ausführung. Zusätzlich darf ich mir die Bedingungen für die Steuerung noch zusammenbasteln und da ein Makro am Ende eingefügt wird, können beliebig Abhängigkeiten vorhanden sein, die ich auch noch verriegeln darf.

                            Beispiel:
                            Ich möchte ein Makro verwenden, dass mir eine Botschaft verschickt und zusätzlich die Anzahl der Botschaften (Counter) um 1 erhöht.
                            In C eine Kleinigkeit, in eibPC praktisch unmöglich.

                            Alles in Allem sehe ich da gewaltige Unterschiede.
                            BR
                            Marc

                            Kommentar


                              #15
                              Zitat von saft6luck Beitrag anzeigen
                              Ich möchte ein Makro verwenden, dass mir eine Botschaft verschickt und zusätzlich die Anzahl der Botschaften (Counter) um 1 erhöht.
                              In C eine Kleinigkeit, in eibPC praktisch unmöglich.
                              Ähm, da gibts doch das FORLOOP Makro

                              ForLoop(Name,Start,CountMax,Aktion)

                              Für Aktion kannst Du jede beliebige Anweisung (oder mehrere durch ; getrennt) schreiben - ok das ist neu und nur im Beta-Bereich zu finden, aber allzulange dauert das nun nicht mehr.
                              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                              Enertex Produkte kaufen

                              Kommentar

                              Lädt...
                              X