Ankündigung

Einklappen
Keine Ankündigung bisher.

Prozentwert in Eibstudio, Hier habe ich Probleme

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

    Prozentwert in Eibstudio, Hier habe ich Probleme

    Ich habe einen MDT-Jalousieaktor, den ich jetzt schon 2 Jahre betreibe. Jetzt wollte ich mir einmal die Beschattung näher ansehen, die Behanghöhe und den Beschattungswinkel anpassen.

    MDT verlangt laut Beschreibung für die Lamellenposition und die Behanglänge 0-100% also 5.001 in der Vorgabe.

    Die GAs sind emtsprechend angepasst.Sie Bild.

    Meine Behanghöhen sind für Sommer und Winter fest definiert. Jenach Jahreszeit werden die Behanghöhen fix angepasst
    JalSoBehangProz_Tuere = 60%
    JalSoBehangProz_ESS = 90%
    JalSoBehangProz_WOHN = 90%
    //
    JalWiBehangProz_Tuere = 60%
    JalWiBehangProz_ESS = 60%
    JalWiBehangProz_WOHN = 85%
    JalWILamelle = 40%
    //
    JalBehangProz_Tuere = 0%
    JalBehangProz_ESS = 0%
    JalBehangProz_WOHN = 0%

    Sommer=month(01,04) and !month(01,10)
    if chtime(01,00,00) or Init then {
    if Sommer then {
    JalBehangProz_Tuere =JalSoBehangProz_Tuere;
    JalBehangProz_ESS = JalSoBehangProz_ESS;
    JalBehangProz_WOHN = JalSoBehangProz_WOHN;
    write("Sommer-7/0/6", EIN);
    } else {
    JalBehangProz_Tuere =JalWiBehangProz_Tuere;
    JalBehangProz_ESS = JalWiBehangProz_ESS;
    JalBehangProz_WOHN = JalWiBehangProz_WOHN;
    write("Sommer-7/0/6", AUS);
    } endif;
    } endif
    Die Lamellenwinkel habe ich lange beobachtet und eine simple Formel ermittelt.

    Per ETS kann ich gewünschte Höhen und Winkel eintragen (in Prozent 1-100%), die Befehle werden sauber ausgeführt.

    In einem abgewandelten Makro werden die Werte jedoch in 0-256-Werte ungewandelt.

    if JalSonnig == EIN then {
    if Freigabe and elevation()>2f32 and azimuth()>95f32 and azimuth()<250f32 then write(GAPositionRollo,LaengeProzent) endif;
    if Freigabe and elevation()>2f32 and azimuth()>95f32 and azimuth()<250f32 and change(azimuth()) then write(GAPositionLamelle,convert(90f32-elevation(),0u08)) endif;
    if Freigabe and elevation()>2f32 and (azimuth()<95f32 or azimuth()>250f32) and luxWert < 25000u32 then write(GARolloFahren,AUF) endif;
    } endif;
    Mir gelingt es trotz einiger Versuche nicht einen ermittelten Prozentwert zu schreiben. Alle Beispiele im Hangbuch zeigen write(GA,50%).
    Wie bringe ich einen ermittelten Wert mit dem % Zeichen in die Formel.

    Totaler Blackout, wer erkennt das Problem!

    Danke
    Wolfgangmdt_1.jpg

    #2
    du "brauchst" kein % senden...
    Es ist lediglich eine Darstellung, am Bus wird jedoch statt 100% tatsächlich 254 gesendet...

    Du musst also die gewünschten Prozentwerte auf den Wertebereich 0- 254 umrechnen, also zB Write(GA, 228u08) wird dir den Behang auf 90% fahren....
    EPIX
    ...und möge der Saft mit euch sein...
    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

    Kommentar


      #3
      Zitat von EPIX Beitrag anzeigen
      du "brauchst" kein % senden...
      Es ist lediglich eine Darstellung, am Bus wird jedoch statt 100% tatsächlich 254 gesendet...

      Du musst also die gewünschten Prozentwerte auf den Wertebereich 0- 254 umrechnen, also zB Write(GA, 228u08) wird dir den Behang auf 90% fahren....
      ... und aufpassen, dass Du beim Rechnen nicht in Über- oder Unterläufe kommst. Also besser mit 0u16-Typen rechnen, erst multiplizieren, dann dividieren und zum Schluss convert(...).

      Kommentar


        #4
        Ich versteh das Problem noch nicht. EibStudio konvertiert als Compiler bereits einen % Wert selbst in einen 0..255 Wert. Du kannst nun write(GA,10%) schreiben oder auch write(GA, 25). Es geht auch eine Berechnung in der Form
        x=10%+25
        (x wäre dann 20%).
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          ich kram mal das uralt Thema raus.

          Eine Entsprechung der automatischen "%-Umrechnung" für Winkel (°) gibt es nicht, oder?

          Also automatische Abbildung von DPT 5.003 mit 0-360° auf 0-255?

          (ja, Umrechnung ist nicht schwer...)
          ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

          Kommentar


            #6
            ich interpretier das mal als "Nein"
            ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

            Kommentar


              #7
              Ich antworte mal. Technisch ist DPT5 sowieso 1-byte = [0 .. 255].

              Die Anzeige 0-360% wird lediglich für DPT 5.003 berechnet wobei eine Ungenauigkeit von 1.412% existiert (Begründung 360 > 255).
              Willst du 0 - 255 angezeigt haben, dann musst du doch nur ein anderes DPT nehmen - z.B: 5.004 , dann wird dies in 0 - 255 % berechnet. Erwartest du jedoch 0 - 100%, dann nimm DPT 5.001.

              Die Anzeige ob %, ° ist für die Maschine egal, denn für die Maschine gilt nur die 1 Byte (bzw. [0 - 255]), die Übersetzung in 0-360°, 0-255% oder 0-100% ist rein visuell für uns und hat auf technischer Seite keine Relevanz, IMHO.

              D.h. wenn du 10% für DPT 5.003 eingibst, dann ist dieser Wert in Binärcode: 0000 1010. Liest die Maschine 0000 1010 für DPT 5.003 heraus, dann ist die Antwort: 14° (14.12°) , oder 4% (3.92%) für DPT 5.001.

              Oder verstehe ich deine Frage falsch (ist ja immerhin sehr spät jetzt :-) )?

              2018-06-13_01-12-02.png

              Kommentar


                #8
                Das ist mir alles durchaus völlig klar!
                Der EibPC versteht aber nichts von DPTs, für ihn ist ein 1-Byte 255 immer 255. Außer wenn ich ihm das % mit gebe, dann weiß er dass das 100% sein soll. Die Entsprechung für ° gibt es aber eben nicht.
                ° und % sind die einzigen DPTs (die mir geläufig sind) wo der Zahlenwert (für die Visu) sich vom Bytewert unterscheidet. Sonst geben die DPTs ja eigentlich nur eine Einheit an, oder eben die Unterscheidung ob float, Ganzzahl etc. Aber das kann der EibPC ja auch unterscheiden.
                ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                Kommentar


                  #9
                  Wie wär's denn mit:

                  Code:
                  :begin Prozent(pW)
                  
                  :var result@
                  :var Winkel@
                  Winkel@ = mod(convert(pW, 0u32),361) × 255u32 / 360u32
                  result@ = convert(Winkel@,0u08)
                  
                  :return result@
                  :end
                  Endelegant ist das zwar wohl nicht, aber ich sitze gerade in der Sonne und kämpfe mit den Textvorschlägen bei der Eingabe des Codes.

                  Kommentar


                    #10
                    Klar, hab natürlich schon längst ein paar Zeilen Code dafür eingebaut. Ist ja kein Hexenwerk, aber trotzdem lästig. Und letztlich 1:1 das gleiche Problem wie bei %. Für das eine gibt’s ne eingebaute Lösung, für das andere eben nicht.
                    ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

                    Kommentar

                    Lädt...
                    X