Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage Logikprozessor: Addition 1bit-GA's

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

    [WireGate-Plugin] Frage Logikprozessor: Addition 1bit-GA's

    Hello,

    mittels Logikprozessor möchte ich die verschiedenen 1bit - Komm. Objekte der des Binäreinganges ( Reedkontakte ) so verrrechnen, dass über eine Sammelga der Status eines Fensters ( alle Flügel, gekippt oder geschwenkt ) verarbeitet und in der Comet visu angezeigt wird.

    Reed 1: 6/0/0
    Reed 2: 6/0/1

    SammelGA 6/0/3

    Was funktioniert:

    Binäreingänge auf - Wert senden gestellt.
    Hier wird dpt. 5.001 verwendet - für die Reed GA's + Sammel GA.
    Frage 1 zu:
    Was aber komisch ist:
    der Wert im Binäreingang z.B. 10% senden - wird in der Visu nicht korrekt angezeigt statt 10% kommt z.B. 2,7 an etc - Woran kann das liegen?
    Reed-Ga mit Gruppenmonitor ausgelesen zeigt allerdings auch schon eine Abweichung von der Voreinstellung meines MDT Binäreinganges,
    und die Anzeige von einem Info-Icon aus der Comet Visu wiederum nochmal einen anderen Wert...?

    Frage 2: der Logikprozessor rechnet auch irgendwas zusammen - Ergebnis lässt sich verarbeiten. Aber: die % aus dem Gruppenmonitor der Reed GA's, einzeln ausgelesen würden eine andere Summe ergeben. Was ist da los?


    So, hier die Frage 3 zur Überschrift:
    Wenn die Reedobjekte nur 1 oder 0 senden (DPT 1.001) was würde der Logikprozessor auf der SammelGA ausgeben - Welche DPT? weil 1.001 kann ja nur 1 oder 0.
    In der ETS kann man ja die Gruppenaddresse der Sammel-GA ja nicht vordefinieren - da ja kein Objekt verknüpft ist.
    In Wire-Gate import der Gruppenaddressen kann ich da ja ein DPT zuweisen - nur welchen?

    hier eine Beispielzeile:
    PHP-Code:
    %logic=(    Fensterstatus_Wohnen_RH => { receive=>['6/1/0','6/1/1'], transmit=>'6/1/3'translate => sub $input->[0] + $input->[1] }, debug=>}, 

    #2
    Hallo Ziegelstein,
    1. bitte alle DPTSubIds korrekt in /etc/wiregate/eibga.conf einpflegen. Sonst macht der Logikprozessor gar nichts.
    2. bitte statt $input->[X] immer int($input->[X]) nehmen. Zahlen können nämlich auch Text sein, zB "0", und damit kann man in Perl zwar rechnen, aber nicht unbedingt vergleichen - "0" ist nicht gleich 0. (Der Grund, weshalb der Logikprozessor das nicht automatisch macht, ist DPT16 - könnte ich aber auch abfangen, oder besser wäre es noch, der wiregated.pl macht das schon richtig. Später vielleicht, in einem neuen Patch. Bis dahin bitte int() verwenden).
    3. Bevor du rechnest, Gültigkeit überprüfen. Kann ja sein, dass dein Reed nicht oder nicht schnell genug antwortet. Also sowas wie "return undef unless defined $input->[0] && defined $input->[1]".
    4. verstehe ich nicht ganz, was du eigentlich als Rechenergebnis haben willst. Bitte konkreter fragen.
    VG, Fry

    Kommentar


      #3
      Jo Fry,

      danke für deinen tollen support. Bin leider perl technisch noch im Status "abschreiben und ganz wenig modifizieren"

      Bin mit meinem Knowhow noch nicht viel weiter als Kapitel 3..

      was nicht heist, dass ich alles verstanden bzw. im Kontext der wiregate spezifischen Variablen etc. auch anwenden kann.

      Ich habe deine Hinweise aufgenommen und eingebaut. Steht der part an der richtigen stelle?:
      PHP-Code:
      return undef unless defined $input->[0] && defined $input->[1]&& defined $input->[2
      hier in komplett:
      PHP-Code:
      Fensterstatus_Wohnen_RH => { receive=>['6/1/0','6/1/1''6/1/2'], transmit=>'6/1/3',
          
      translate => sub {return undef unless defined $input->[0] && defined $input->[1]&& defined $input->[2]; int$input->[0] + int$input->[1]+ int$input->[2]}, debug=>1}, 
      Im Moment werden lediglich die 1en und 0en zusammen gerechnet. Passt auch.

      hier die "logig" :
      Fenster LH-Flügel gekippt
      6/1/0 = 1 --> 1
      6/1/1 = 1 --> 0
      6/1/2 = 1 --> 0
      6/1/3 = Summe = 1

      Fenster LH-Flügel geschwenkt
      6/1/0 = 1 --> 1
      6/1/1 = 1 --> 1
      6/1/2 = 1 --> 0
      6/1/3 = Summe = 2

      Fenster RH-Flügel geschwenkt
      6/1/0 = 1 --> 1
      6/1/1 = 1 --> 1
      6/1/2 = 1 --> 1
      6/1/3 = Summe = 3

      Sonderfall:
      Fenster RH-Flügel geschwenkt und LH Flügel verschlossen:
      6/1/0 = 1 --> 0
      6/1/1 = 1 --> 0
      6/1/2 = 1 --> 1
      6/1/3 = Summe = 1

      Für diesen Sonderfall wünsche ich mir die Möglichkeit, die 1 für 6/1/2 mit einer Zahl x (z.B. 5) zu summieren.
      Dann wären immer alle Summen eindeutig.

      Wie wäre der Eintrag?

      PHP-Code:
      Fensterstatus_Wohnen_RH => { receive=>['6/1/0','6/1/1''6/1/2'], transmit=>'6/1/3',
           
      translate => sub {return undef unless defined $input->[0]  && defined $input->[1]&& defined $input->[2];  int$input->[0] + int$input->[1]+ {int$input->[2]+5}, debug=>1}, 
      --> mein Ansatz funktioniert jedenfalls nicht.

      Mein Dank an alle cracks hier im Forum!

      Kommentar


        #4
        HaHa,

        habs doch noch geschafft:
        PHP-Code:
        Fensterstatus_Wohnen_RH => { receive=>['6/1/0','6/1/1''6/1/2'], transmit=>'6/1/3',
            
        translate => sub {return undef unless defined $input->[0] && defined $input->[1]&& defined $input->[2]; int$input->[0] + int$input->[1]+ 5*int$input->[2]}, debug=>1}, 
        Statt Summe geht ja auch diese neumodische Multiplikation..

        Summe Sonderfall:
        =5 oder Normalfall = 6

        Danke an alle und mich.

        Kommentar

        Lädt...
        X