Ankündigung

Einklappen
Keine Ankündigung bisher.

Zahlenwert runden

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

    #16
    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

    Kommentar


      #17
      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.

      Kommentar


        #18
        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

        Kommentar


          #19
          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

          Kommentar


            #20
            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.

            Kommentar


              #21
              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

              Kommentar


                #22
                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

                Kommentar


                  #23
                  Mich wundert es das da überhaupt was kommt.

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

                  was soll die da?
                  Nils

                  aktuelle Bausteine:
                  BusAufsicht - ServiceCheck - Pushover - HS-Insight

                  Kommentar


                    #24
                    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?

                    Kommentar


                      #25
                      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

                      Kommentar


                        #26
                        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

                        Kommentar

                        Lädt...
                        X