Ankündigung

Einklappen
Keine Ankündigung bisher.

Variablen in Makros verwenden?

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

    Variablen in Makros verwenden?

    Hallo :-)

    Anfängerfrage:
    Wie kann ich eine Variable in einem Makro verwenden?

    Beispiel:
    DaemmerungsschalterZeituhr("Helligkeitswert-7/0/11",500,"Aktor-7/0/12",16,0,6,30)

    Wie kann ich das Ereignis nicht in "Aktor-7/0/12" ausgeben, sondern in eine Variable
    um so z.B. zwei verschiedene Makros miteinander zu verknüpfen?
    In meinem Fall wären das noch der Wochentag.....


    Danke sehr

    #2
    Zitat von Spud Beitrag anzeigen
    Hallo :-)

    ...
    DaemmerungsschalterZeituhr("Helligkeitswert-7/0/11",500,"Aktor-7/0/12",16,0,6,30)

    Wie kann ich das Ereignis nicht in "Aktor-7/0/12" ausgeben, sondern in eine Variable
    um so z.B. zwei verschiedene Makros miteinander zu verknüpfen?
    In meinem Fall wären das noch der Wochentag.....


    Danke sehr
    Definiere eine entsprechende Variable (egal, ob im Hauptprogramm oder im Makro) und übergib sie als Parameter.

    also in etwa

    ...
    Variable7012 = EIN
    ...
    DaemmerungsschalterZeituhr("Helligkeitswert-7/0/11",500,Variable7012,16,0,6,30)

    Schau' dir aber noch einmal die Beschreibung der Makros an - es lohnt sich...

    Kommentar


      #3
      Hoi

      Variablen, die nur innerhalb des Macros benötigt werden gibt es auch.
      Die sind an dem @ zu erkennen.
      (weiss gerade nicht ob am Anfang das @)
      Grüsse Bodo
      Fragen gehören ins Forum, und nicht in mein Postfach;
      EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

      Kommentar


        #4
        Der "Klammeraffe" kommt ans Ende...

        Kommentar


          #5
          Zitat von klaus_kraemer Beitrag anzeigen
          Definiere eine entsprechende Variable (egal, ob im Hauptprogramm oder im Makro) und übergib sie als Parameter.

          also in etwa

          ...
          Variable7012 = EIN
          ...
          DaemmerungsschalterZeituhr("Helligkeitswert-7/0/11",500,Variable7012,16,0,6,30)

          Schau' dir aber noch einmal die Beschreibung der Makros an - es lohnt sich...
          ...leider erhalte ich dann immer eine Fehlermeldung:
          Ungültiger Datentyp in >write(VAR_001< in >if_then convert("Helligkeitswert-7/0/11",0u16)<900u16<

          Definition ist:
          VAR_001 = EIN
          (im Hauptprogramm)

          Kommentar


            #6
            Zitat von Spud Beitrag anzeigen
            ...leider erhalte ich dann immer eine Fehlermeldung:
            Ungültiger Datentyp in >write(VAR_001< in >if_then convert("Helligkeitswert-7/0/11",0u16)<900u16<
            Es kommt auf die Verwendung der Variablen an. Wird sie als GA verwendet (write()) musst du eine Zuweisung draus machen.
            BR
            Marc

            Kommentar


              #7
              Zitat von saft6luck Beitrag anzeigen
              Es kommt auf die Verwendung der Variablen an. Wird sie als GA verwendet (write()) musst du eine Zuweisung draus machen.
              Ahhh ja....

              Das würde wie aussehen?
              Sorry, aber ich steige hier echt nicht durch. :-(

              Kommentar


                #8
                write (GA,Wert) ist eine "Zuweisung" an eine GA, den Wert zu schicken.

                Aus
                [highlight=epc]
                if ... then write( GA, ...) endif
                [/highlight]

                wird bei Variablen also

                [highlight=epc]
                if ... then VARIABLE = ... endif
                [/highlight]

                ansonsten könntest du auch RETURN verwenden, dann müsstest du aber das Makro überarbeiten. Nur die write() zu ändern ist wohl einfacher.
                BR
                Marc

                Kommentar


                  #9
                  Zitat von saft6luck Beitrag anzeigen
                  write (GA,Wert) ist eine "Zuweisung" an eine GA, den Wert zu schicken.

                  Aus
                  [highlight=epc]
                  if ... then write( GA, ...) endif
                  [/highlight]

                  wird bei Variablen also

                  [highlight=epc]
                  if ... then VARIABLE = ... endif
                  [/highlight]

                  ansonsten könntest du auch RETURN verwenden, dann müsstest du aber das Makro überarbeiten. Nur die write() zu ändern ist wohl einfacher.
                  Soweit komme ich ja gar nicht erst:

                  [Macros]

                  DaemmerungsschalterZeituhr("Helligkeitswert-/0/11",900,VAR_001,11,58,6,30)


                  [EibPC]

                  VAR_001 = EIN


                  Das geht ja schon nicht....

                  Kommentar


                    #10
                    Beziehst du dich jetzt auf die Fehlermeldung oben? Die sagt, dass du VAR_001 nicht als GA bei write() verwenden kannst.

                    Also Makro ändern, am besten du erstellst eine Kopie des Makros mit neuem Namen.

                    Falls du einen anderen Fehler meinst, gib doch die Fehlermeldung mit an.
                    BR
                    Marc

                    Kommentar


                      #11
                      Zitat von Spud Beitrag anzeigen
                      Soweit komme ich ja gar nicht erst:

                      [Macros]

                      DaemmerungsschalterZeituhr("Helligkeitswert-/0/11",900,VAR_001,11,58,6,30)


                      [EibPC]

                      VAR_001 = EIN


                      Das geht ja schon nicht....
                      WAS genau geht jetzt nicht.

                      Ich würde vorschlagen, Du machst mal ganz langsam und übst das Ganze einmal mit einem Makro, das eine Variable bedient "Variable = Wert" und einem zweiten Makro, das die Variable bei Änderung auf den Bus schreibt "write(GA, Variable)"

                      Wenn das klappt, hast Du den Bogen raus und kannst Dich der Problemlösung widmen.

                      Ich weiß, aller Anfang ist schwer. Vielleicht hilft Dir auch der Hinweis, dass Makros nichts anderes sind als konsequente Textersetzungen: Die Parameter werden im "Makrocode ersetzt", das so geänderte Makro wird in Code des Programms kopiert. Mit dieser Vorstellung musst Du immer ein wenig um die Ecke denken...

                      Viel Spaß noch - es wird schon!

                      Kommentar


                        #12
                        Zitat von saft6luck Beitrag anzeigen
                        Beziehst du dich jetzt auf die Fehlermeldung oben? Die sagt, dass du VAR_001 nicht als GA bei write() verwenden kannst.

                        Also Makro ändern, am besten du erstellst eine Kopie des Makros mit neuem Namen.

                        Falls du einen anderen Fehler meinst, gib doch die Fehlermeldung mit an.
                        Ich gebe auf.
                        Wenn ich erst das Makro abändern muss, was wieder sonst wie
                        kompliziert ist :-(

                        Ich programmiere viel mit anderen Sprachen im Bereich
                        Automatisierung, aber mit dem EIB-PC bekomme ich nix hin.
                        Allein das Validierungsschema - was soll das? Wer denkt sich so etwas umständliches aus?

                        Kommentar


                          #13
                          Nicht aufgeben!

                          Hey Spud,

                          schluck' den ersten Frust hinunter und bleib standhaft.

                          Ich programmiere auch viel in "normaler" Sprache und der EibPC hat halt mal eine andere, aber in diesem Zusammenhang sehr sinnvolle Philosophie. So holt man viel Leistung aus einem kleinen Gerät. Allerdings musst Du halt auf Schleifen, Arrays und viele andere gewohnte Dinge mehr hier verzichten. Manchmal schlag' ich mir auch aufs Hirn

                          Natürlich muss man, um die Denke zu justieren, einiges im Kleinen probieren und mir scheint, Du überforderst Dich selbst gerade. Nimm' den Berg nicht im 5. Gang sondern im Ersten...

                          Und hier wird Dir schon geholfen, wenn's klemmt. Tja, und je detaillierter Deine Fragestellung, desto besser. Vielleicht hätten wir Dir bei Deinem Problem auch besser helfen können. wenn Du die Codeausschnitte mit gepostet hättest.

                          Geht nicht gibts nicht...

                          Kommentar


                            #14
                            Zitat von Spud Beitrag anzeigen
                            Automatisierung, aber mit dem EIB-PC bekomme ich nix hin.
                            Allein das Validierungsschema - was soll das? Wer denkt sich so etwas umständliches aus?
                            Nicht aufgeben!

                            Ich hatte am Anfang damit auch zu kämpfen (und mit den Makro-Aufrufen noch heute manchmal...), aber das ganze hat schon einen Sinn. Ist einfach eine andere Logik, aber zum KNX-Umfeld passt die ganz gut.

                            Wenn man das in einer "normalen" Sprache machen würde, müsste man mehr oder weniger alles in Schleifen einpacken, die immer wieder durchlaufen werden, wenn sich am Bus was geändert hat, um entsprechend drauf reagieren zu können. Das Validierungsschema nimmt einem dies sozusagen ab.

                            Ein EibPC Programm ist IMMER eine große Schleife, die STÄNDIG von vorne bis hinten abgearbeitet wird. Daher ist oft (nicht immer) sogar die Reihenfolge der Codezeilen bedeutungslos. Damit aber nicht in jedem Durchlauf jede Zeile abgearbeitet werden muss, werden in jedem Zyklus nur die Zeilen bearbeitet, bei den sich etwas geändert hat (Validierung).
                            Das muss man einfach mal verstanden haben, was ein gehöriges Umdenken voraussetzt, aber dann wird's deutlich einfacher.

                            PS: Klaus war schneller...
                            ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                            Kommentar


                              #15
                              Zitat von Spud Beitrag anzeigen
                              Ich gebe auf.
                              Wenn ich erst das Makro abändern muss, was wieder sonst wie
                              kompliziert ist :-(
                              Naja, das Makro ist halt für eine GA als Parameter gedacht. Es geht erstmal nur darum, die write() mit dem Parameter zu finden und in Zuweisungen zu ändern.

                              Allein das Validierungsschema - was soll das? Wer denkt sich so etwas umständliches aus?
                              Das könnte man evtl. einfacher (Programmierer-Fachwortschatz ) schreiben, etwa so:
                              1. Ausdrücke werden neu berechnet, wenn deren Teilausdrücke (Variablen, Funktionswerte) sich ändern.
                              2. In der Hauptebene wird der then-Zweig dann ausgeführt, wenn der Wert der Abfragebedingung (if) sich auf TRUE ändert.
                              3. In tieferen Ebenen wird der then-Zweig dann ausgeführt, wenn der Wert der Abfragebedingung (if) TRUE ist.


                              Deckt zwar nicht jedes Detail ab ...
                              BR
                              Marc

                              Kommentar

                              Lädt...
                              X