Ankündigung

Einklappen
Keine Ankündigung bisher.

Zahlenwert runden

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

  • ozett
    antwortet
    jaaa, alles richtig. und herzlichen dank. für hilfe und debugger, so
    kommt man doch noch zum ziel... das geht jetzt auch:

    Code:
    5012|0|""|"__import__('math').modf(EN[1])[1]"|""|5|0|0|0
    5012|0|""|"__import__('math').modf(EN[1])[0]"|""|6|0|0|0
    5012|0|""|"__import__('math').modf(EN[1])[0]*EN[5]"|""|7|0|0|0
    wunderbar! Und die Doku kam auch heute ..

    (ob die bausteinautoren hieran noch was machen wollen? für meine internen zwecke bin ich jetzt sehr zufrieden. also kein mal zuwenig: danke für die hilfen)

    gruss,
    ozett

    Einen Kommentar schreiben:


  • Rüdiger
    antwortet
    Zitat von ozett Beitrag anzeigen
    ich bin zwar jetzt immer noch nicht sicher, ob die erste Varianten funktioniert hätte,

    5012|0|""|"__import__('math').modf(EN[1][0])"|""|5|0|0|0
    5012|0|""|"__import__('math').modf(EN[1][1])"|""|6|0|0|0
    Habe ich so nicht geschrieben. Auch da sitzt die schließende Klammer an der falschen Stelle.
    Muß dann lauten:
    5012|0|""|"__import__('math').modf(EN[1])[0]"|""|5|0|0|0
    5012|0|""|"__import__('math').modf(EN[1])[1]"|""|6|0|0|0

    Einen Kommentar schreiben:


  • ozett
    antwortet
    Tja, erstmal danke für den Debugger.
    da war dann zum erstmal Fehler zu sehen.
    ich bin zwar jetzt immer noch nicht sicher, ob die erste Varianten funktioniert hätte,

    5012|0|""|"__import__('math').modf(EN[1][0])"|""|5|0|0|0
    5012|0|""|"__import__('math').modf(EN[1][1])"|""|6|0|0|0

    aber ich habe den Code etwas sortiert und bin jetzt über den Weg einer Speichervariable [5] gegangen. Damit klappts soweit.

    ich gebrauche den baustein nur bei mir, der ursprüngliche autor/autoren müssten mal sehen, ob sie die ergänzungen nochmal einpflegen. SCHÖN wäre sicherlich etwas kommentar zu den ursprünglichen rundungsroutinen (mir ist das nicht so klar), aber ich bin jetzt einen kleinen schritt weiter ...

    zum angucken:
    Code:
    ###################################################
    ### Klaus Muckelmann  01.08.2012                ###
    ### Runden Nachkomma 1.0                        ###
    ### Alexander Kirpal 05.08.2012                 ###
    ### kein Nachkomma , ohne Runden Eingefügt V1.1 ###
    ### Klaus Muckelmann 05.08.2012                 ###
    ### E3 "Modus" eingefügt V1.1                   ###
    ### 20121028.oz v1.2:
    ### A5+A6: vorkommaanteil/nachkommaanteil-Ausgaenge
    ###################################################
    ###https://knx-user-forum.de/downloads.php?do=file&id=462
    ### Mit diesem Baustein kann ein Wert auf eine einstellbare Anzahl Nachkommastellen gerundet werden.
    ### Version 1.1: Art der Rundung ausgewählt werden (1 = normal runden; 2 = es wird immer abgerundet; 3 = es wird immer aufgerundet)
    ### zwei neue Ausgänge. Hier werden immer einfach die Nachkommastellen abgeschnitten.
    ###################################################
    ###5000|"Text"|Remanent(1/0)|Anz.Eingänge|.n.|Anzahl Ausgänge|.n.|.n.
    ###5001|Anzahl Eingänge|Ausgänge|Offset|Speicher|Berechnung bei Start
    ###5002|Index Eingang|Default Wert|0=numerisch 1=alphanummerisch
    ###5003|Speicher|Initwert|Remanent
    ###5004|ausgang|Initwert|runden binär (0/1)|typ (1-send/2-sbc)|0=numerisch 1=alphanummerisch
    ###5012|abbruch bei bed. (0/1)|bedingung|formel|zeit|pin-ausgang|pin-offset|pin-speicher|pin-neg.ausgang
    ###################################################
    
    
    ###BESCHREIBUNG
    ###5000 | "Text Expertendropdown" | Remanent(1/0)| Anz.Eingänge |.n.| Anzahl Ausgänge | "Text Version" |.n.
    5000|"eigene BS\Runden Nachkomma1101"|0|5|"E1 Eingangswert"|"E2 Anz. Nachkommastellen A1+A2"|"E3 Runden A1+A2 (1=normal,2=ab,3=auf)"|"E4 Runden A6 (1=nein,2=ab,3=auf)"|"E5 Multiplikator A6"|7|"A1 Gerundet"|"A2 Gerundet (sbc)"|"A3 Nachkomma abgeschnitten"|"A4 Nachkomma abgeschnitten (sbc)"|"A5 Nur Vorkomma (sbc)"|"A6 Nur Nachkomma (sbc)"|"A7 Nur Nachkomma[2] (sbc)"|"v1.2"
    
    ### INIT
    ### 5001 | Eingänge Anzahl|Ausgänge Anzahl | Offset | Speicher Anzahl | Berechnung bei Start (0/1)
    5001|5|7|0|5|1
    
    ### SPEICHER
    ### 5003 | Speicher-Nr. | Initwert | Remanent (0/1)
    5003|1|0|0
    5003|2|0|0
    5003|3|0|0
    5003|4|0|0
    5003|5|0|0
    
    ### EINGANG
    ### 5002 | Index Eingang | Defaultwert | 0=numerisch/1=alphanummerisch
    5002|1|0|0               # E1: Eingang
    5002|2|1|0               # E2: Anz. nachkommatellen von A1+A2
    5002|3|1|0               # E3: Rundungsmodus fuer A1+A2 (1=normal,2=ab,3=auf)
    5002|4|1|0               # E4: Rundungsmodus fuer A6 (1=normal,2=ab,3=auf)
    5002|5|1|0               # E5: Nur Nachkomma Multiplikator -> A6 (default 1)
    
    ### AUSGANG
    ### 5004 | ausgang | Initwert| runden/binär (0/1)| Typ (1-send/2-sbc)| Typ: 0=numerisch/1=alphanummerisch
    5004|1|0|0|1|0           # A1: Gerundet
    5004|2|0|0|2|0           # A2: Gerundet (sbc)
    5004|3|0|0|1|0           # A3: ohne Nachkomma, alle Stellen abschneiden
    5004|4|0|0|2|0           # A4: ohne Nachkomma, alle Stellen abschneiden (sbc)
    5004|5|0|0|2|0           # A5: Nur Vorkomma
    5004|6|0|0|2|0           # A6: Nur Nachkomma, Multipliziert mit E5 (sbc)
    5004|7|0|0|2|0           # A7: Debug: Nur Nachkomma (sbc)
    
    ### LOGIK
    ### 5012|abbruch bei bed. (0/1)|bedingung|formel|zeit|pin-ausgang|pin-offset|pin-speicher|pin-neg.ausgang
    # SPEICHER bedienen
    # nicht runden 
    5012|0|"EN[3]==1"|"EN[1]"|""|0|0|2|0
    # ab-runden
    5012|0|"EN[3]>=2 and EN[2]<>0"|"__import__('math').pow(10,abs(EN[2]))"|""|0|0|1|0
    5012|0|"EN[3]>=2 and EN[2]==0"|"0.5"|""|0|0|1|0
    5012|0|"EN[3]==2 and EN[2]==0"|"EN[1]-SN[1]"|""|0|0|2|0
    5012|0|"EN[3]==2 and EN[2]>=1"|"EN[1]-(0.5/SN[1])"|""|0|0|2|0
    5012|0|"EN[3]==2 and EN[2]<=-1"|"EN[1]-(0.5*SN[1])"|""|0|0|2|0
    # auf-runden
    5012|0|"EN[3]==3 and EN[2]==0"|"EN[1]+SN[1]"|""|0|0|2|0
    5012|0|"EN[3]==3 and EN[2]>=1"|"EN[1]+(0.5/SN[1])"|""|0|0|2|0
    5012|0|"EN[3]==3 and EN[2]<=-1"|"EN[1]+(0.5*SN[1])"|""|0|0|2|0
    #5012|0|"EC[1]"|"round(SN[2],EN[2])"|""|1|0|0|0
    #5012|0|"EC[1]"|"round(SN[2],EN[2])"|""|2|0|0|0
    #
    5012|0|"EC[1] and (EN[1]>=.5)"|"(EN[1] - .5)"|""|0|0|3|0
    5012|0|"EC[1] and (EN[1]<=.49)"|"EN[1]"|""|0|0|3|0
    # zerlegung in vorkomma und nachkomma mit modf
    5012|0|""|"__import__('math').modf(EN[1])"|""|0|0|5|0
    
    # AUSGAENGE bedienen
    5012|0|"EC[1]"|"round(SN[2],EN[2])"|""|1|0|0|0
    5012|0|"EC[1]"|"round(SN[2],EN[2])"|""|2|0|0|0
    5012|0|"EC[1]"|"round(SN[3])"|""|3|0|0|0
    5012|0|"EC[1]"|"round(SN[3])"|""|4|0|0|0
    5012|0|"EC[1]"|"SN[5][1]"|""|5|0|0|0
    5012|0|"EC[1]"|"SN[5][0]"|""|6|0|0|0
    5012|0|"EC[1]"|"(SN[5][0])*EN[5]"|""|7|0|0|0
    sollte man was besser machen? sicher doch, oder?

    Einen Kommentar schreiben:


  • NilsS
    antwortet
    Mich wundert es das da überhaupt was kommt.

    Die Klammer hinter SN[5][0/1])

    was soll die da?

    Einen Kommentar schreiben:


  • ozett
    antwortet
    warte jetzt auf die doku, habe aber mal mit dem debugger gespielt.
    der zugriff auf die indizes hängt vielleicht an der klammer, oder?

    wenn ich das ergebnis in SN5 schreibe, dann sieht das im debugger so aus (bild anbei) ...
    jemand ne idee?
    Angehängte Dateien

    Einen Kommentar schreiben:


  • ozett
    antwortet
    Danke,
    hab' jetzt die Doku angefordert.

    Troz Änderungen des Bausteines-Codes wie vorgeschlagen, Index-Varianten und 16bit-EIS5 kommt nur immer der Vorkommawert.

    Es muss irgendwie am Index liegen, oder daran, dass der Nachkommawert unter Null liegt. Oder? Bin momentan etwas ratlos...

    gruss,
    ozett

    Einen Kommentar schreiben:


  • Rüdiger
    antwortet
    Eine Doku zum Baustein erstellen kann man bei Dacom anfordern.

    [0] liefert den Nachkommawert
    [1] liefert den Vorkommawert

    Versuch als Datentyp mal 16-bit EIS5.

    Einen Kommentar schreiben:


  • ozett
    antwortet
    probiere jetzt schon ein wenig, aber ich muss wohl noch fehler machen.
    stimmt die reihenfolge/Zählung (0/1-1/2) der indizes? würde vermutlich nur vorkomma/nachkomma vertauschen.

    aber wenn ich die ausgänge mit KOs verknüpfe und diese dann in der visu anzeigen lasse bekomme ich nur den vorkomma wert. Nachkomma ist ja 0,xx -- ich benutze 16bit oder 32bit datentypen. und mit beiden bleibt die darstellung bei einer vollen 0,000. liegts an den datentypen der visu-KOs, oder am 0,xx ?

    [nachtrag: muss wohl mal den debugger versuche, ich denke aber, es liegt am zugriff auf das von z.bsp. "math.modf(10.5) --> (0.5, 10.0)" über die index-notation. geht das wirklich so ..."modf(EN[1])[index]"... ? ]
    daaaanke für jeden tip.
    ozett

    Einen Kommentar schreiben:


  • ozett
    antwortet
    Ahhh, so kommt man an die beiden rückgabewerte...

    erstmal gaaaanz herzlichen dank. probiere es jetzt gleich...

    gibts ne tiefere doku zum bausteinbauen als hier im lexikon? Oder gibts die nicht so öffentlich zugänglich für den interessierten ahnungslosen?

    nochmal danke,
    ozett

    Einen Kommentar schreiben:


  • Rüdiger
    antwortet
    Die Zeile
    Code:
    5001|5|6|0|[COLOR="Red"]5[/COLOR]|1
    anpassen.

    Speicher 4 wird gar nicht verwendet.

    Speicher 5 brauchst du auch nicht unbedingt.
    Die letzten 3 Zeilen dann ändern in:
    Code:
    5012|0|""|"__import__('math').modf(EN[1])[1]"|""|5|0|0|0
    5012|0|""|"__import__('math').modf(EN[1])[0]"|""|6|0|0|0
    Zum testen kannst du auch den Logikdebugger benutzen.

    Einen Kommentar schreiben:


  • ozett
    antwortet
    versuch macht kluch, könnte das hinhauen??

    Code:
    ###################################################
    ### Klaus Muckelmann  01.08.2012                ###
    ### Runden Nachkomma 1.0                        ###
    ### Alexander Kirpal 05.08.2012                 ###
    ### kein Nachkomma , ohne Runden Eingefügt V1.1 ###
    ### Klaus Muckelmann 05.08.2012                 ###
    ### E3 "Modus" eingefügt V1.1                   ###
    ### 20121028.oz v1.2:
    ### vorkommaanteil/nachkommaanteil auf ausgaenge
    ###################################################
    ###5000|"Text"|Remanent(1/0)|Anz.Eingänge|.n.|Anzahl Ausgänge|.n.|.n.
    ###5001|Anzahl Eingänge|Ausgänge|Offset|Speicher|Berechnung bei Start
    ###5002|Index Eingang|Default Wert|0=numerisch 1=alphanummerisch
    ###5003|Speicher|Initwert|Remanent
    ###5004|ausgang|Initwert|runden binär (0/1)|typ (1-send/2-sbc)|0=numerisch 1=alphanummerisch
    ###5012|abbruch bei bed. (0/1)|bedingung|formel|zeit|pin-ausgang|pin-offset|pin-speicher|pin-neg.ausgang
    
    
    5000|"eigene BS\Runden Nachkomma"|0|5|"Eingang"|"Anz. Stellen"|"Modus (1=normal,2=ab,3=auf)"|"A6:nachkomma ger.(1=nein,2=ab,3=auf)"|"A6:nachkomma multiplikator"|6|"Gerundet"|"Gerundet (sbc)"|"ohne Kommastellen"|"ohne Kommastellen (sbc)"|"Nur Vorkomma"|"Nur Nachkomma"|"v1.2"
    5001|5|6|0|3|1
    5002|1|0|0               # E1: Eingang
    5002|2|1|0               # E2: Anz. Stellen
    5002|3|1|0               # E3: Rundungsmodus fuer A1+A2 (1=normal,2=ab,3=auf)
    5002|4|1|0               # E4: Nur Vorkomma
    5002|5|1|0               # E5: Nur Nachkomma Multiplikator -> A6 (default 1)
    5003|1|0|0
    5003|2|0|0
    5003|3|0|0
    5003|4|0|0
    5003|5|0|0
    5004|1|0|0|1|0           # A1: Gerundet
    5004|2|0|0|2|0           # A2: Gerundet (sbc)
    5004|3|0|0|1|0           # A3: ohne Nachkomma, alle Stellen abschneiden
    5004|4|0|0|2|0           # A4: ohne Nachkomma, alle Stellen abschneiden (sbc)
    5004|5|0|0|2|0           # A5: Nur Vorkomma
    5004|6|0|0|2|0           # A7: Nur Nachkomma, Multipliziert mit E5 (sbc)
    5012|0|"EN[3]==1"|"EN[1]"|""|0|0|2|0
    5012|0|"EN[3]>=2 and EN[2]<>0"|"__import__('math').pow(10,abs(EN[2]))"|""|0|0|1|0
    5012|0|"EN[3]>=2 and EN[2]==0"|"0.5"|""|0|0|1|0
    5012|0|"EN[3]==2 and EN[2]==0"|"EN[1]-SN[1]"|""|0|0|2|0
    5012|0|"EN[3]==2 and EN[2]>=1"|"EN[1]-(0.5/SN[1])"|""|0|0|2|0
    5012|0|"EN[3]==2 and EN[2]<=-1"|"EN[1]-(0.5*SN[1])"|""|0|0|2|0
    5012|0|"EN[3]==3 and EN[2]==0"|"EN[1]+SN[1]"|""|0|0|2|0
    5012|0|"EN[3]==3 and EN[2]>=1"|"EN[1]+(0.5/SN[1])"|""|0|0|2|0
    5012|0|"EN[3]==3 and EN[2]<=-1"|"EN[1]+(0.5*SN[1])"|""|0|0|2|0
    5012|0|"EC[1]"|"round(SN[2],EN[2])"|""|1|0|0|0
    5012|0|"EC[1]"|"round(SN[2],EN[2])"|""|2|0|0|0
    5012|0|"EC[1] and (EN[1]>=.5)"|"(EN[1] - .5)"|""|0|0|3|0
    5012|0|"EC[1] and (EN[1]<=.49)"|"EN[1]"|""|0|0|3|0
    5012|0|"EC[1]"|"round(SN[3])"|""|3|0|0|0
    5012|0|"EC[1]"|"round(SN[3])"|""|4|0|0|0
    5012|0|""|"__import__('math').modf(EN[1])"|""|0|0|5|0
    5012|0|""|"SN[5][1]"|""|0|0|5|0
    5012|0|""|"SN[5][2]"|""|0|0|6|0

    Einen Kommentar schreiben:


  • ozett
    antwortet
    der baustein ist super. ich kann leider kein python und keine bausteine,
    darum wäre ich riesig dankbar, wenn ein befähigter vielleicht den baustein erweitern könnte?
    einfach um einen Ausgang, an dem der nachkomma-rest ausgegeben wird?
    (hier so ähnlich mit modulo)

    vielleicht gar nicht so schwer, wo nachkomm im baustein auch schon abgetrennt wird?

    (ich möchte die nachkomma-temperatur mit einer eigenen variable und in der visu mit einer eigenen schriftart darstellen, der baustein vereinfacht die logik dazu schon ganz erheblich. die erweiterung würde das weiter auf diesen einen baustein verkürzen...)

    vielleicht vorab schon mal grossen dank,
    ozett

    Einen Kommentar schreiben:


  • martin1
    antwortet
    Danke! Baustein funktioniert ausgezeichnet!
    Lg. Martin

    Einen Kommentar schreiben:


  • MuckiLegden
    antwortet
    So, der fertige Baustein ist jetzt im Downloadbereich

    Einen Kommentar schreiben:


  • MuckiLegden
    antwortet
    Hm,

    ohne Kommastellen ist für diesen Fall o.k.

    Aber insgesamt für den Baustein nicht so zielführend, da ich evtl. das Gleiche auch bei x Nachkommastellen machen möchte.

    Ich habe den Baustein noch mal ein wenig geändert - aber noch nicht getestet!

    VG,
    Mucki

    Einen Kommentar schreiben:

Lädt...
X