Ankündigung

Einklappen
Keine Ankündigung bisher.

Taupunkt Makro

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

    [EibStudio] Taupunkt Makro

    Guten Morgen

    Ich habe nun mal begonnen mich mit Makros zu befassen. Nun versuchte ich eine Funktion für die Berechnung des Taupunktes zu schreiben (der Berechnungscode stammt aus dem Handbuch). Nun erhalte ich eine Fehlermeldung das lokale Variable teilweise gleiche Namen besitzen.

    Error in Macroexpansion in line: [22] in "C:/Users/Kropfm/Desktop/DewPoint.lib"
    "T@" <==> "SDDT@" => Error: two local macro-variables have partially same name
    ID:82
    EibParser ended with an error

    Kann mir jemand bitte hier auf die Sprünge helfen? Während ich verstehe das lokale Variable (lokal) einmalig sein müssen, sehe ich nicht das diese zwei (T@ und SDDT@) es nicht sein sollten. Weiter würde mich noch interessieren ob ich lokale Konstanten definieren kann, z.B. a=7.5f32. Und dürfen lokale Variablenamen von Makros im EibCode wieder verwendet werden? Von welchem Typ sind eigentlich lokale Variablen? Zu viele Fragen, ich weiss;-)

    Würde mich auf Euren Input freuen.

    Gruss,

    Martin




    Hier der Code:

    [highlight=epc]
    :begin DewPoint(Temperature, Humidity)
    :var a@
    :var b@
    :var r@
    :var RH@
    :var T@
    :var SDDT@
    :var DDrT@
    :var v@
    :var TD@
    RH@=convert(Humidity,0f16)/2.54f16"]RH@=convert(Humidity,0f16)/2.54f16"]RH@=convert(Humidity,0f16)/2.54f16
    a@=7.5f32
    b@= 237.3f32
    r@=convert(RH,0.0f32"]r@=convert(RH,0.0f32"]r@=convert(RH,0.0f32)
    T@=convert(T,0.0f32"]T@=convert(T,0.0f32"]T@=convert(T,0.0f32)
    SDDT@=6.1078f32"]SDDT@=6.1078f32"]SDDT@=6.1078f32 * pow(10f32,(a@*T@)/(b@+T"]a@*T@)/(b@+T@))
    DDrT@= r/100f32*SDDT@
    v@=log(10f32,(DDrT@/6.1078f32"]v@=log(10f32,(DDrT@/6.1078f32))
    :return TD@=b@*v@/(a@-v"]TD@=b@*v@/(a@-v@)
    :end[/highlight]

    #2
    Zitat von kropfm Beitrag anzeigen
    Guten Morgen


    [highlight=epc]
    :begin DewPoint(Temperature, Humidity)
    :var a@
    :var b@
    :var r@
    :var RH@
    :var T@
    :var SDDT@
    :var DDrT@
    :var v@
    :var TD@
    RH@=convert(Humidity,0f16)/2.54f16
    a@=7.5f32
    b@= 237.3f32
    r@=convert(RH,0.0f32)
    T@=convert(T,0.0f32)
    SDDT@=6.1078f32 * pow(10f32,(a@*T@)/(b@+T@))
    DDrT@= r/100f32*SDDT@
    v@=log(10f32,(DDrT@/6.1078f32))
    :return TD@=b@*v@/(a@-v@)
    :end[/highlight]
    Kannst du den Code nochmal Posten, das ist so nicht zu lesen.
    Außerdem: es gibt schon ein Taupunktmakro fertig in der Lib...
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Hallo Michael

      Vielen Dank für Deine Antwort. Weiss ich, das soll eine kleine Übung sein. Ich bin eigentlich sonst schon Resultat orientiert, aber dies will ich nun mal begreifen. Ich möchte meinen Code mal ein bisschen mit Makro strukturieren.

      Sobald ein @ Zeichen auftritt wird hier offensichtlich davon ausgegangen das es sich um eine Email Adresse handelt. Habe versucht das rauszunehmen.

      Habe den Code nun als Datei angehängt.

      Gruss,

      Martin
      Angehängte Dateien

      Kommentar


        #4
        kann das sein das hier das @ fehlt ??

        r@=convert(RH@,0.0f32)
        T@=convert(T@,0.0f32)
        Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

        Kommentar


          #5
          Ups, ja, danke Martin, eigentlich sollte dies

          r@=convert(RH@,0.0f32)
          T@=convert(Temperature,0.0f32)

          sein.

          Die Fehlermeldung hat mich auf eine völlig falsche Fährte geführt.

          "T@" <==> "SDDT@" => Error: two local macro-variables have partially same name

          Kommentar


            #6
            er bring allerdings auch jetzt noch die selbe Fehlermeldung:

            Error in Macroexpansion in line: [22] in "C:/Users/Kropfm/Desktop/DewPoint.lib"
            "T@" <==> "SDDT@" => Error: two local macro-variables have partially same name
            ID:82
            EibParser ended with an error

            Kommentar


              #7
              Zitat von kropfm Beitrag anzeigen
              er bring allerdings auch jetzt noch die selbe Fehlermeldung:

              Error in Macroexpansion in line: [22] in "C:/Users/Kropfm/Desktop/DewPoint.lib"
              "T@" <==> "SDDT@" => Error: two local macro-variables have partially same name
              ID:82
              EibParser ended with an error
              Ja, das ist ein Problem für den Makroparser: Wenn zwei lokale Makrovariablen partiell (eine die Untermenge der anderen) gleich sind, wie etwa:
              • MeineLokaleVar@
              • LokaleVar@
              • Var@

              geht das leider nicht - es gab da mal einen Bug, der gefixt wurde (und wohl auch nicht dokumentiert, dass dem so ist).

              Ich setz es mir mal auf die Liste zur Nachbesserungt, derweil hilft nur Vermeidung.


              Ohne das Makro an sich zu beurteilen, folgendes kompiliert:



              Code:
              :begin DewPoint(Temperature, Humidity)
              :var a@
              :var b@
              :var r@
              :var RH@
              :var XT@
              :var SDDT@
              :var DDrT@
              :var v@
              :var TD@
              
              RH@=convert(Humidity,0f16)/2.54f16
              a@=7.5f32
              b@= 237.3f32
              r@=convert(RH@,0.0f32)
              XT@=convert(Temperature,0.0f32)
              SDDT@=6.1078f32 * pow(10f32,(a@*XT@)/(b@+XT@))
              DDrT@= r@/100f32*SDDT@ 
              v@=log(10f32,(DDrT@/6.1078f32))
              :return TD@=b@*v@/(a@-v@)
              :end
              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
              Enertex Produkte kaufen

              Kommentar


                #8
                Vielen Dank Michael. Nun kompilierts, kann jetzt ja ein bisschen testen.

                Kommentar


                  #9
                  [highlight=epc] // DewPoint(Temperature, Humidity)
                  // ___
                  // (f16)IN1--| |
                  // | |
                  // (u08)IN2--|___|--OUT1(f16)
                  //
                  // IN1 Temperature [°C], f16
                  // IN2 Humidity [rH], u08
                  // OUT1 Dewpoint [°C], f16


                  :begin DewPoint(Temperature, Humidity)
                  :var a@
                  :var b@
                  :var r@
                  :var RH@
                  :var XT@
                  :var SDDT@
                  :var DDrT@
                  :var v@
                  :var TD@
                  :var TD_f16@

                  :info $calculates the dewpoint$\\
                  $IN1 Temperature [f16]$\\
                  $IN2 Humidity [u08]$\\
                  $OUT1 DewPoint [f16]$\\


                  :shortinfo $calculates the dewpoint$


                  RH@=convert(Humidity,0f16)/2.54f16
                  a@=7.5f32
                  b@= 237.3f32
                  r@=convert(RH@,0.0f32)
                  XT@=convert(Temperature,0.0f32)
                  SDDT@=6.1078f32 * pow(10f32,(a@*XT@)/(b@+XT@))
                  DDrT@= r@/100f32*SDDT@
                  v@=log(10f32,(DDrT@/6.1078f32))
                  TD@=b@*v@/(a@-v@)
                  :return TD_f16@=convert(TD@, 0.0f16)
                  :end [/highlight]

                  Es funktioniert, vielen Dank für die Hilfe.

                  Kommentar


                    #10
                    Zitat von kropfm Beitrag anzeigen

                    Es funktioniert, vielen Dank für die Hilfe.
                    Saubere Doku!
                    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                    Enertex Produkte kaufen

                    Kommentar


                      #11
                      Danke! Bin schon am nächsten Makro;-)

                      Kommentar


                        #12
                        um was gehts da ?
                        Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                        Kommentar


                          #13
                          Makro für die Steuerung des Gude Power Control, eine IP Steckdosenleiste. Der Code steht eigentlich, muss ihn nur noch testen;-)

                          Kommentar


                            #14
                            Blöd.. Nicht interessant für mich
                            Hast du ne Fritzbox ?? Dann hätt ich noch was nettes
                            Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                            Kommentar


                              #15
                              Hast du ne Fritzbox ?? Dann hätt ich noch was nettes
                              *neugier*
                              EPIX
                              ...und möge der Saft mit euch sein...
                              Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                              Kommentar

                              Lädt...
                              X