Ankündigung

Einklappen
Keine Ankündigung bisher.

[TUT] Wir basteln uns einen Größer-Kleiner-Gleich-Baustein

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

  • MatthiasS
    antwortet
    Die Logik wird in einem Schlag berechnet, ähnlich wie in einer SPS. In einem Zyklus werden alle Eingänge gelesen, die Formeln berechnet und am Ende des Zyklus die Ausgänge gesetzt. Ein einzelner Baustein in dem Sinn wird nicht berechnet.

    Einen Kommentar schreiben:


  • babel
    antwortet
    Prima, danke für die Informationen. Ich habe das ins Wiki übernommen (siehe https://knx-user-forum.de/mediawiki/..._der_logik.dat) und gleich noch ein paar Fragen:

    xA = Der Wert vor der Berechnung heißt in diesem Fall vor ALLEN Berechnungen oder der gerade laufenden (also eine 5012'er Zeile)?

    xC = Die Änderung bezieht sich auf den Start der Berechnung im gesamten Baustein, oder nur einer 5012 Zeile?

    Laut der aktuellen Beschreibung ist ON[i] undefiniert solange OC[i] == 0 ist. Was passiert bei einem Zugriff auf ON[i] wenn OC[i] != 0 ist? Gibt des HS dann eine Expection, ist der Wert undefiniert?

    EI = "Die Berechnung findet innerhalb der Initialisierung" -> Von welcher Initialisierung wird da gesprochen? Vom Baustein für jeden Aufruf einzeln, oder den HS an sich?

    Einen Kommentar schreiben:


  • Michel
    antwortet
    SA[i] => Der Wert einer Speichervariable vor der Berechnung

    Einen Kommentar schreiben:


  • MatthiasS
    antwortet
    Feld Typ Beschreibung
    EI Boolean 1 == Die Berechnung findet innerhalb der Initialisierung statt.
    0 == Die Berechnung findet ausserhalb der Initialisierung statt.

    EA Array Der Wert des Eingangs vor der Berechnung.

    EN Array Der aktuelle Wert des Eingangs.

    EC Array of Boolean
    1 == Der Eingang hat sich geändert.
    0 == Der Eingang hat sich nicht geändert.

    AA Array Der Wert des Ausgangs vor der Berechnung.

    AN Array Der aktuelle Wert des Ausgangs.

    AC Array of Boolean
    1 == Der Wert des Ausgangs hat sich geändert.
    0 == Der Wert des Ausgangs hat sich nicht geändert.

    ON Array Enthält den in den Zeitspeicher geschriebenen Wert,
    sobald der Zeitspeicher abgelaufen ist.

    OC Array of Boolean
    1 == Sobald der Zeitspeicher abgelaufen ist.
    0 == Solange der Zeitspeicher läuft.

    SA Array Der Wert einer Speichervariable vor der Berechnung.

    SN Array Der aktuelle Wert einer Speichervariable.

    SC Array of Boolean
    1 == Der Wert der Variable hat sich geändert.
    0 == Der Wert der Variable hat sich nicht geändert.

    Einen Kommentar schreiben:


  • babel
    antwortet
    Ich versuche gerade den Treppenhauslichtbaustein zu verstehen. Dort gibt es neben EN[i] auch diverse andere Variablen/Konstanten. Nach meinem Verständnis ergibt sich:

    EC[i] => Eingang i geändert
    EN[i] => Zahlenwert Eingang Nummer i
    AC[i] => Ausgang i geändert
    AN[i] => Zahlenwert Ausang Nummer i
    OC[i] => Timer Nummer i
    ON[i] => Zahlenwert Timer Nummer i
    SA[i] => ?
    SN[i] => Zahlenwert Status Nummer i

    Allerdings stimmt davon sicher nicht alles. Wie heißt es also richtig?

    Einen Kommentar schreiben:


  • MatthiasS
    antwortet
    Hallo Alex,

    danke für den Hinweis!

    Einen Kommentar schreiben:


  • AxDobi
    antwortet
    Tolles TUT

    noch einen kleinen Fehler gefunden:
    In der '5000'-Zeile fehlt zwischen dem Ausgang ...Kleiner|"Gleich... ein "

    So sollte es gehen:

    5000|"smh@213\Größer-Kleiner-Gleich"|0|2|"Eingang"|"Vergleichswert"|4|"Größer"| "Kleiner"|"Gleich"|"Ergebnis"

    Einen Kommentar schreiben:


  • Schmidt-CONTREL
    antwortet
    Tja, ohne Worte.

    Gruss aus Waldburg.

    Einen Kommentar schreiben:


  • blue04
    antwortet
    hallo matthias,

    super klasse!

    Einen Kommentar schreiben:


  • MatthiasS
    antwortet
    Bist ein Schatz

    Einen Kommentar schreiben:


  • Michel
    antwortet
    Langsam, langsam! Ich komm' ja gar nicht mehr hinterher !
    Wiki ergänzt.

    Einen Kommentar schreiben:


  • MatthiasS
    antwortet
    Weiter geht es....

    Wie zu erwarten, muss noch ein Byte-Ausgang her, damit man mit dem Ergebnis ein dynamisches KO ansteuern kann.

    Wir benötigen also einen weiteren Ausgang "Ergebnis" und müssen demzufolge Zeile 5000 und 5001 erganzen.

    5000 wird zu:

    Code:
    5000|"smh@213\Größer-Kleiner-Gleich"|0|2|"Eingang"|"Vergleichswert"|4|"Größer"|"Kleiner"|"Gleich"|"Ergebnis"
    und 5001 zu

    Code:
    5001|2|4|0|0|0
    Dann muss natürlich der zusatzliche Ausgang definiert werden, also braucht es noch eine neue Zeile vom Typ 5004:

    Code:
    5004|4|0|0|1|0
    Hier jetzt wichtig: Die zweite Null, denn der Ausgang soll ja einen Wert erhalten und nicht nur 0/1.

    Kommen wir zu den Formeln:
    Da wir jetzt nicht das Ergebnis direkt auf den Ausgang schalten können (Ergebnis ist ja immer nur 0 oder 1 bei booleschen Berechnungen), kommt der Parameter Bedingung zum Einsatz.

    Die Formel steht also jetzt bei Bedingung, und unter Formel in dem Fall ein Fixwert, der dann, wenn die Bedingung erfüllt ist, auf den Ausgang geschoben wird.

    Also drei zusatzliche 5012er Zeilen:

    Code:
    5012|0|"round(EN[1]*1000000) > round(EN[2]*1000000)"|"1"|""|4|0|0|0
    5012|0|"round(EN[1]*1000000) < round(EN[2]*1000000)"|"2"|""|4|0|0|0
    5012|0|"round(EN[1]*1000000) == round(EN[2]*1000000)"|"3"|""|4|0|0|0

    Einen Kommentar schreiben:


  • Michel
    antwortet
    So, das Tutorial habe ich jetzt mal ins Wiki überführt.
    https://knx-user-forum.de/mediawiki/...tein_erstellen

    Einen Kommentar schreiben:


  • MatthiasS
    antwortet
    Dachte mir, dass die Frage kommt :-)

    Werden später den Baustein ergänzen.... :-)

    Einen Kommentar schreiben:


  • snoopy
    antwortet
    Hallo MatthiasS

    So weit bin ich in meinen versuchen auch schon gekommen.
    Du benutzt 3 Ausgänge , die je nach eingangssignal 1 oder 0 sind, aber wie löse ich das, wenn ich nur einen Ausgang möcht und je nach Eingangssignal eine 1,2 oder 3 ausgeben will.
    5012|1|"EN[1] < EN[2]-0.25"|"1"|""|1|0|0|0
    5012|1|"EN[1] > EN[2]-0.25 and EN[1]< EN[2]+0.25"|"2"|""|1|0|0|0
    5012|1|"EN[1] > EN[2]+0.25"|"3"|""|1|0|0|0
    so habe ich es versucht aber ist wohl ein Fehler drin vermutlich bei der Formel oder Bedingung.

    Vielleicht hast du ja noch eine Idee ?

    Einen Kommentar schreiben:

Lädt...
X