Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Ungültiger Datentyp in eventwrite()

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

    - √ - Ungültiger Datentyp in eventwrite()

    Mein alter Rolladen-Aktor liefert Rückmeldungen zur Position auf den GA's LZ (hier wird nur RAUF und RUNTER gesendet) und Pos leider völlig unabhängig.
    So kann bei diesen Anfragen

    [highlight=epc]
    read("UG Büro Tür LZ-0/0/14")
    read("UG Büro Tür Pos-0/0/15")
    [/highlight]

    herauskommen, dass LZ==RUNTER ist, Pos==0% (also oben) ist, also völlig verschiedene Antworten. Um das eindeutig zu machen, möchte ich die GA_LZ nur noch per EibPC simulieren und physisch nur noch per Pos fahren. Dazu habe ich in der ETS das Lese- und das Schreibflag für "UG Büro Tür LZ-0/0/14" entfernt, programmiert und getestet. Der Aktor reagiert nicht mehr auf Fahrbefehle auf dieser GA und reagiert auch nicht mehr selbst auf Leseanfragen. Im EibPC habe ich folgende Zeilen geschrieben:

    [highlight=epc]
    // Wenn nach LZ ein RAUF geschrieben wird, fahre auf Position 0% (oben)
    // Wenn nach LZ ein RUNTER geschrieben wird, fahre auf Position 100% (unten)
    // Wenn LZ gelesen wird und Pos<100% ist (der Rolladen also nicht komplett unten ist), antworte mit RAUF
    // Wenn LZ gelesen wird und Pos==100% ist, antworte mit RUNTER
    if eventwrite("UG Büro Tür LZ-0/0/14") and "UG Büro Tür LZ-0/0/14"==RAUF then write ("UG Büro Tür Pos-0/0/15", 0%); endif
    if eventwrite("UG Büro Tür LZ-0/0/14") and "UG Büro Tür LZ-0/0/14"==RUNTER then write ("UG Büro Tür Pos-0/0/15", 100%); endif
    if eventread("UG Büro Tür LZ-0/0/14") and "UG Büro Tür Pos-0/0/15"< 100% then writeresponse ("UG Büro Tür LZ-0/0/14", RAUF); endif
    if eventread("UG Büro Tür LZ-0/0/14") and "UG Büro Tür Pos-0/0/15"==100% then writeresponse ("UG Büro Tür LZ-0/0/14", RUNTER); endif
    [/highlight]

    Das Zusammenspiel funktioniert einwandfrei. Um das nun für alle Rolladen nutzen zu können, habe ich dieses Makro geschrieben:

    [highlight=epc]
    :begin Rolladen_AufAb_Simulation(GA_LZ, GA_LZ_RM, GA_Pos, GA_Pos_RM)
    :info $Rolladen wird nicht mehr über GA_LZ gefahren, sondern einheitlich nur noch über GA_Pos$ \\
    $GA_LZ liefert RAUF, solange GA_Pos<100%, solange Rolladen also nicht komplett unten ist$ \\
    $In ETS dazu bei GA_LZ das Lese- und Schreibbit löschen$ \\
    $GA_LZ - GA für das Langzeit-Fahren des Rolladen$ \\
    $GA_LZ_RM - Rückmelde-GA für GA_LZ$ \\
    $GA_Pos - GA für das Positionsfahren des Rolladen$ \\
    $GA_Pos_RM - Rückmelde-GA für GA_Pos_RM$
    :shortinfo $Rolladen ausschließlich über GA_Pos ansteuern. GA_LZ simulieren$

    // Wenn auf GA_LZ ein RAUF geschrieben wird, dann schreibe auf GA_Pos den Wert 0%
    // Wenn auf GA_LZ ein RUNTER geschrieben wird, dann schreibe auf GA_Pos den Wert 100%
    // Wenn GA_LZ_RM gelesen wird und GA_Pos_RM < 100% ist, der Rolladen also nicht komplett unten ist, melde RAUF zurück
    // Wenn GA_LZ_RM gelesen wird und GA_Pos_RM == 100% ist, der Rolladen also komplett unten ist, melde RUNTER zurück

    if eventwrite(GA_LZ) and GA_LZ==RAUF then write(GA_Pos, 0%); endif
    if eventwrite(GA_LZ) and GA_LZ==RUNTER then write(GA_Pos, 100%); endif
    if eventread(GA_LZ_RM) and GA_Pos_RM< 100% then writeresponse(GA_LZ_RM, RAUF) ; endif
    if eventread(GA_LZ_RM) and GA_Pos_RM==100% then writeresponse(GA_LZ_RM, RUNTER); endif
    :end
    [/highlight]

    und im Hauptprogramm so aufgerufen:

    [highlight=epc]
    Rolladen_AufAb_Simulation("UG Büro Tür LZ-0/0/14","UG Büro Tür LZ-0/0/14","UG Büro Tür Pos-0/0/15","UG Büro Tür Pos-0/0/15")
    [/highlight]

    Der Compiler melded nun "Ungültiger Datentyp in >eventwrite(GA_LZ< in >and< in >if_then<
    und verweist auf die Zeile 16 des Makros.

    Die Adressen zeigt EibStudio wie folgt an:
    0/0/14 "UG Büro Tür LZ" Typ=b Len=01
    0/0/15 "UG Büro Tür Pos" Typ=u Len=08

    Wo liegt hier der Fehler?

    Gruß, Joachim

    EibStudio 2.308, Firmware 2.304, Patches 2.304
    EibPC - Wiregate

    #2
    Steffi, hast Du eine Idee?
    Gruß, Joachim
    EibPC - Wiregate

    Kommentar


      #3
      Ansatz: Statt

      Rolladen_AufAb_Simulation(GA_LZ, GA_LZ_RM, GA_Pos, GA_Pos_RM)

      schreibe mal


      Rolladen_AufAb_Simulation(Arg1, Arg2, Arg3, Arg4)

      Vielleicht liegt der casus knacktus in der Argumentersetzung verborgen.

      Gruß,
      Bernd

      Kommentar


        #4
        Hallo Bernd,

        You made my day!

        Auch wenn ich es zunächst nicht verstanden habe: Dein Vorschlag funktionierte! Um es wieder etwas lesbarer zu machen, lautet mein funktionierendes Makro nun:

        [highlight=epc]
        :begin Rolladen_AufAb_Simulation(GALZ, GALZRM, GAPos, GAPosRM)
        :info $Rolladen wird nicht mehr über GALZ gefahren, sondern einheitlich nur noch über GAPos$ \\
        $LZga liefert RAUF, solange GAPos<100%, solange Rolladen also nicht komplett unten ist$ \\
        $In ETS dazu bei GALZ das Lese- und Schreibbit löschen$ \\
        $GALZ - GA für das Langzeit-Fahren des Rolladen$ \\
        $GALZRM - Rückmelde-GA für GALZ$ \\
        $GAPos - GA für das Positionsfahren des Rolladen$ \\
        $GAPosRM - Rückmelde-GA für GAPos$
        :shortinfo $Rolladen ausschließlich über GAPos ansteuern. GALZ simulieren$

        // Wenn auf GALZ ein RAUF geschrieben wird, dann schreibe auf GAPos den Wert 0%
        // Wenn auf GALZ ein RUNTER geschrieben wird, dann schreibe auf GAPos den Wert 100%
        // Wenn GALZRM gelesen wird und GAPosRM < 100% ist, der Rolladen also nicht komplett unten ist, melde RAUF zurück
        // Wenn GALZRM gelesen wird und GAPosRM == 100% ist, der Rolladen also komplett unten ist, melde RUNTER zurück

        if eventwrite(GALZ) and GALZ==RAUF then write(GAPos, 0%) ; endif
        if eventwrite(GALZ) and GALZ==RUNTER then write(GAPos, 100%) ; endif
        if eventread(GALZRM) and GAPosRM< 100% then writeresponse(GALZRM, RAUF) ; endif
        if eventread(GALZRM) and GAPosRM==100% then writeresponse(GALZRM, RUNTER); endif

        // Wenn auf GAPos geschrieben wird, aktualisiere GALZRM entsprechend
        if eventwrite(GAPos) and GAPos < 100% then writeresponse(GALZRM, RAUF) ; endif
        if eventwrite(GAPos) and GAPos ==100% then writeresponse(GALZRM, RUNTER); endif
        :end
        [/highlight]

        Offensichtlich gibt es Probleme, sobald die Variablen einen Unterstrich im Namen tragen. Das steht eigentlich im Widerspruch mit dem Handbuch Seite 116. Dort heisst es:
        "Variablen beginnen mit Buchstaben, gefolgt von einer beliebigen Anzahl und Kombination von Buch- staben oder Zahlen und dem „_“ Zeichen. Variablen werden mit einem Wert oder einer Funktion in- itialisiert. Groß- und Kleinschreibung wird im Gegensatz zu Schlüsselwörtern und Funktionsnamen beachtet."

        Anyway - Makro funktioniert - Rolladen fahren wie gewünscht - Alles gut!

        Gruss, Joachim
        EibPC - Wiregate

        Kommentar


          #5
          Zitat von joda123 Beitrag anzeigen
          Hallo Bernd,
          You made my day!
          "Variablen beginnen mit Buchstaben, gefolgt von einer beliebigen Anzahl und Kombination von Buch- staben oder Zahlen und dem „_“ Zeichen. Variablen werden mit einem Wert oder einer Funktion in- itialisiert. Groß- und Kleinschreibung wird im Gegensatz zu Schlüsselwörtern und Funktionsnamen beachtet."
          Der Bernd hat es richtig erkannt. Variablen dürfen so benannt werden, nicht aber Makroargumente, sonst kommt der Makroparser durcheinander. Ich werde das mal im Handbuch ergänzen
          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
          Enertex Produkte kaufen

          Kommentar


            #6
            da hätte ich doch "rein zufällig" einen Wunsch: könnte man den Punkt (.) in der Namenskonvention freigeben?
            Es könnten damit gut strukturierte Namen gewählt werden - wenn schon der Unterstrich in Makronamen nicht zulässig ist....

            Hoffnung.stirbt.zuletzt
            EPIX
            ...und möge der Saft mit euch sein...
            Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

            Kommentar

            Lädt...
            X