Ankündigung

Einklappen
Keine Ankündigung bisher.

Logikbausteine | EDOMI

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #76
    LBS: Ein Merkerwort wird per Modbus TCP Wago (oder andere Steuerungen) in 16Bits zerlegt für Edomi:

    Code:
    ###[DEF]###
    [name        =Modbus Word → 16-Bit    ]
    
    [e#1        =MW                        ]
    [e#2        =Abfragetimer            ]
    [a#1        =Bit 0                     ]
    [a#2        =Bit 1                     ]
    [a#3        =Bit 2                     ]
    [a#4        =Bit 3                     ]
    [a#5        =Bit 4                     ]
    [a#6        =Bit 5                     ]
    [a#7        =Bit 6                     ]
    [a#8        =Bit 7                     ]
    [a#9        =Bit 8                     ]
    [a#10        =Bit 9                     ]
    [a#11        =Bit 10                    ]
    [a#12        =Bit 11                    ]
    [a#13        =Bit 12                    ]
    [a#14        =Bit 13                    ]
    [a#15        =Bit 14                    ]
    [a#16        =Bit 15                    ]
    [v#1        =0]
    ###[/DEF]###
    
    
    ###[HELP]###
    E1: Eingang 1 Byte (0..255)
    A1..A8: Bit0..Bit7 (Bit = Wert 0 oder 1)
    ###[/HELP]###
    
    
    ###[LBS]###
    <?
    function LB_LBSID($id) {
        if ($E=getLogicEingangDataAll($id))  {
                    if ($E[1]['value']!=0 && $E[1]['refresh']==1)  {
                            $v1=$E[1]['value'];
                            setLogicElementVar($id,1,$v1);
                    }
                    if ($E[2]['value']=1 && $E[2]['refresh']==1)  {  
                        callLogicFunctionExec(LBSID,$id);                    //EXEC-Script    starten
                    }
        }                
    }
        
    ?>
    ###[/LBS]###
    
    
    ###[EXEC]###
    <?
    require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
    require_once(dirname(__FILE__)."/../../../../main/include/php/ModbusMaster.php");
    set_time_limit(1);
    sql_connect();
    
    $v1 = getLogicElementVar($id,1);
    
    $modbus = new ModbusMaster("192.168.2.45", "TCP");
    try {
        // FC 3 1x16-bit Integer
        $recData = $modbus->readMultipleRegisters(0, $v1, 1);
    }
    catch (Exception $e) {
         exit;
    }
    setLogicLinkAusgang($id,1,(($recData[1]>> 0) & 1));
    setLogicLinkAusgang($id,2,(($recData[1]>> 1) & 1));
    setLogicLinkAusgang($id,3,(($recData[1]>> 2) & 1));
    setLogicLinkAusgang($id,4,(($recData[1]>> 3) & 1));
    setLogicLinkAusgang($id,5,(($recData[1]>> 4) & 1));
    setLogicLinkAusgang($id,6,(($recData[1]>> 5) & 1));
    setLogicLinkAusgang($id,7,(($recData[1]>> 6) & 1));
    setLogicLinkAusgang($id,8,(($recData[1]>> 7) & 1));
    setLogicLinkAusgang($id,9,(($recData[0]>> 0) & 1));
    setLogicLinkAusgang($id,10,(($recData[0]>> 1) & 1));
    setLogicLinkAusgang($id,11,(($recData[0]>> 2) & 1));
    setLogicLinkAusgang($id,12,(($recData[0]>> 3) & 1));
    setLogicLinkAusgang($id,13,(($recData[0]>> 4) & 1));
    setLogicLinkAusgang($id,14,(($recData[0]>> 5) & 1));
    setLogicLinkAusgang($id,15,(($recData[0]>> 6) & 1));
    setLogicLinkAusgang($id,16,(($recData[0]>> 7) & 1));
    ?>
    ###[/EXEC]###
    >>Smelly One<<
    >> BURLI <<
    Grüße Armin

    Kommentar


      #77
      Zitat von timberland Beitrag anzeigen
      Prowl sendet dir eine Pushnachricht. Da werden keine Daten für Müllabfuhr abgeholt.
      D.h. du trägst im Iphone eine Notiz ein und Prowl erinnert Dich dran ? Ich raffs noch nicht, bin nicht so der Applefreak.
      >>Smelly One<<
      >> BURLI <<
      Grüße Armin

      Kommentar


        #78
        Nein, du kannst von einem anderen Computer eine Push Notification an das iPhone schicken. Wenn z.B. dein Server im Keller einen Grenzwert (HD-Kapazität etc.) überschreitet, wird an das iPhone eine Push-Nachricht geschickt.
        Oder eben, wenn ein wichtiger Termin ansteht.

        http://www.prowlapp.com/

        Kommentar


          #79
          Ok, ich danke Dir. Jetzt hab ichs.
          >>Smelly One<<
          >> BURLI <<
          Grüße Armin

          Kommentar


            #80
            gaert
            Ist der Oszillator auch ein Systembaustein oder kann ich dessen Logik in einem eigenen LBS nutzen? Weil ich verstehe nicht wie (bzw. wodurch) sich der Baustein im Prinzip "selbst aufruft"?

            Kommentar


              #81
              Der Oszillator ist kein Systembaustein - die befinden sich nur im Wurzelordner "Logikbausteine".

              Der LBS ruft sich nicht selbst auf. Vielmehr wird der LBS irgendwo "gestartet", d.h. er wird dann von der Logik-Engine immer wieder aufgerufen. In der Doku ist ein relativ einfaches Beispiel dazu...
              EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

              Kommentar


                #82
                LBS: ODER-Gatter 16xEing.

                Code:
                ###[DEF]###
                [name        =ODER-Gatter 16xEing.    ]
                
                [e#1        =A #init=0                ]
                [e#2        =B #init=0                ]
                [e#3        =C #init=0                ]
                [e#4        =D #init=0                ]
                [e#5        =E #init=0                ]
                [e#6        =F #init=0                ]
                [e#7        =G #init=0                ]
                [e#8        =H #init=0                ]
                [e#9        =I #init=0                ]
                [e#10        =J #init=0                ]
                [e#11        =K #init=0                ]
                [e#12        =L #init=0                ]
                [e#13        =M #init=0                ]
                [e#14        =N #init=0                ]
                [e#15        =O #init=0                ]
                [e#16        =P #init=0                ]
                
                [a#1        =0/1                    ]
                ###[/DEF]###
                
                
                ###[HELP]###
                
                ###[/HELP]###
                
                
                ###[LBS]###
                <?
                function LB_LBSID($id) {
                    if ($E=getLogicEingangDataAll($id)) {
                        if ($E[1]['refresh']==1 || $E[2]['refresh']==1 || $E[3]['refresh']==1 || $E[4]['refresh']==1 || $E[5]['refresh']==1 || $E[6]['refresh']==1 || $E[7]['refresh']==1 || $E[8]['refresh']==1 ||
                            $E[9]['refresh']==1 || $E[10]['refresh']==1 || $E[11]['refresh']==1 || $E[12]['refresh']==1 || $E[13]['refresh']==1 || $E[14]['refresh']==1 || $E[15]['refresh']==1 || $E[16]['refresh']==1)  {
                            if (($E[1]['value']!=0) || ($E[2]['value']!=0) || ($E[3]['value']!=0) || ($E[4]['value']!=0) || ($E[5]['value']!=0) || ($E[6]['value']!=0) || ($E[7]['value']!=0) || ($E[8]['value']!=0) ||
                                ($E[9]['value']!=0) || ($E[10]['value']!=0) || ($E[11]['value']!=0) || ($E[12]['value']!=0) || ($E[13]['value']!=0) || ($E[14]['value']!=0) || ($E[15]['value']!=0) || ($E[16]['value']!=0))  {
                                setLogicLinkAusgang($id,1,1);
                            } else {
                                setLogicLinkAusgang($id,1,0);
                            }
                        }
                    }
                }
                ?>
                ###[/LBS]###
                
                
                ###[EXEC]###
                <?
                
                ?>
                ###[/EXEC]###
                >>Smelly One<<
                >> BURLI <<
                Grüße Armin

                Kommentar


                  #83
                  LBS: 16-Bit Word schreiben per Modbus TCP (Wago oder andere). Der Baustein hat 16 Eingänge (bool für z.B. Buttons) und über den Abfragetrigger=1 wird das word in die PLC geschieben. Bei anderen Anwendungen sind eventuell die Bytes zu drehen, hier wurde Big Endian (=1) gebraucht.

                  Code:
                  ###[DEF]###
                  [name        =Modbus 16-Bits &rarr; Word    ]
                  
                  [e#1        =MW                        ]
                  [e#2        =Abfragetrigger            ]
                  [e#3        =Bit 0                     ]
                  [e#4        =Bit 1                     ]
                  [e#5        =Bit 2                     ]
                  [e#6        =Bit 3                     ]
                  [e#7        =Bit 4                     ]
                  [e#8        =Bit 5                     ]
                  [e#9        =Bit 6                     ]
                  [e#10        =Bit 7                     ]
                  [e#11        =Bit 8                     ]
                  [e#12        =Bit 9                     ]
                  [e#13        =Bit 10                    ]
                  [e#14        =Bit 11                    ]
                  [e#15        =Bit 12                    ]
                  [e#16        =Bit 13                    ]
                  [e#17        =Bit 14                    ]
                  [e#18        =Bit 15                    ]
                  [a#1        =Integer                ]
                  [v#1        =0]
                  [v#2        =0]
                  [v#3        =0]
                  [v#4        =0]
                  [v#5        =0]
                  [v#6        =0]
                  [v#7        =0]
                  [v#8        =0]
                  [v#9        =0]
                  [v#10        =0]
                  [v#11        =0]
                  [v#12        =0]
                  [v#13        =0]
                  [v#14        =0]
                  [v#15        =0]
                  [v#16        =0]
                  [v#17        =0]
                  [v_byte#1    =0]
                  [v_byte#2    =0]
                  [v_int#1    =0]
                  ###[/DEF]###
                  
                  
                  ###[HELP]###
                  E1: Merkerwort das geschrieben werden soll
                  E2: Abfragetrigger
                  E3..E18: Bit0..Bit15 (Bit = Wert 0 oder 1) Eingänge z.B. Schalter
                  A1 : gibt den geschriebenen Integerwert zurück
                  ###[/HELP]###
                  
                  
                  ###[LBS]###
                  <?
                  function LB_LBSID($id) {
                      if ($E=getLogicEingangDataAll($id))  {
                                  if ($E[1]['value']!=0 && $E[1]['refresh']==1)  {
                                          $v1=$E[1]['value'];
                                          setLogicElementVar($id,1,$v1);
                                  }
                                  if ($E[3]['refresh']==1)  {
                                          $v2=$E[3]['value'];
                                          setLogicElementVar($id,2,$v2);
                                  }
                                  if ($E[4]['refresh']==1)  {
                                          $v3=$E[4]['value'];
                                          setLogicElementVar($id,3,$v3);
                                  }
                                  if ($E[5]['refresh']==1)  {
                                          $v4=$E[5]['value'];
                                          setLogicElementVar($id,4,$v4);
                                  }
                                  if ($E[6]['refresh']==1)  {
                                          $v5=$E[6]['value'];
                                          setLogicElementVar($id,5,$v5);
                                  }
                                  if ($E[7]['refresh']==1)  {
                                          $v6=$E[7]['value'];
                                          setLogicElementVar($id,6,$v6);
                                  }
                                  if ($E[8]['refresh']==1)  {
                                          $v7=$E[8]['value'];
                                          setLogicElementVar($id,7,$v7);
                                  }
                                  if ($E[9]['refresh']==1)  {
                                          $v8=$E[9]['value'];
                                          setLogicElementVar($id,8,$v8);
                                  }
                                  if ($E[10]['refresh']==1)  {
                                          $v9=$E[10]['value'];
                                          setLogicElementVar($id,9,$v9);
                                  }
                                  if ($E[11]['refresh']==1)  {
                                          $v10=$E[11]['value'];
                                          setLogicElementVar($id,10,$v10);
                                  }
                                  if ($E[12]['refresh']==1)  {
                                          $v11=$E[12]['value'];
                                          setLogicElementVar($id,11,$v11);
                                  }
                                  if ($E[13]['refresh']==1)  {
                                          $v12=$E[13]['value'];
                                          setLogicElementVar($id,12,$v12);
                                  }
                                  if ($E[14]['refresh']==1)  {
                                          $v13=$E[14]['value'];
                                          setLogicElementVar($id,13,$v13);
                                  }
                                  if ($E[15]['refresh']==1)  {
                                          $v14=$E[15]['value'];
                                          setLogicElementVar($id,14,$v14);
                                  }
                                  if ($E[16]['refresh']==1)  {
                                          $v15=$E[16]['value'];
                                          setLogicElementVar($id,15,$v15);
                                  }
                                  if ($E[17]['refresh']==1)  {
                                          $v16=$E[17]['value'];
                                          setLogicElementVar($id,16,$v16);
                                  }
                                  if ($E[18]['refresh']==1)  {
                                          $v17=$E[18]['value'];
                                          setLogicElementVar($id,17,$v17);
                                  }
                                  if ($E[2]['value']=1 && $E[2]['refresh']==1)  {  
                                      callLogicFunctionExec(LBSID,$id);                    //EXEC-Script    starten
                                  }
                      }                
                  }
                      
                  ?>
                  ###[/LBS]###
                  
                  
                  ###[EXEC]###
                  <?
                  require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                  require_once(dirname(__FILE__)."/../../../../main/include/php/ModbusMaster.php");
                  set_time_limit(1);
                  sql_connect();
                  $dataTypes = array("BYTE","BYTE");
                  
                  function setBit($byte, $significance) {
                      return $byte | 1<<$significance;
                  }
                  
                  $v1 = getLogicElementVar($id,1);   //Merkerwort
                  $v2 = getLogicElementVar($id,2);    //Bit0
                  $v3 = getLogicElementVar($id,3);
                  $v4 = getLogicElementVar($id,4);
                  $v5 = getLogicElementVar($id,5);
                  $v6 = getLogicElementVar($id,6);
                  $v7 = getLogicElementVar($id,7);
                  $v8 = getLogicElementVar($id,8);
                  $v9 = getLogicElementVar($id,9);
                  $v10 = getLogicElementVar($id,10);
                  $v11 = getLogicElementVar($id,11);
                  $v12 = getLogicElementVar($id,12);
                  $v13 = getLogicElementVar($id,13);
                  $v14 = getLogicElementVar($id,14);
                  $v15 = getLogicElementVar($id,15);
                  $v16 = getLogicElementVar($id,16);
                  $v17 = getLogicElementVar($id,17);    //Bit15
                  
                  $v_byte1 = 0;
                  If ($v2 == 1)  {
                      $v_byte1 = setBit($v_byte1,0);
                  }
                  If ($v3 == 1)  {
                      $v_byte1 = setBit($v_byte1,1);
                  }
                  If ($v4 == 1)  {
                      $v_byte1 = setBit($v_byte1,2);
                  }
                  If ($v5 == 1)  {
                      $v_byte1 = setBit($v_byte1,3);
                  }
                  If ($v6 == 1)  {
                      $v_byte1 = setBit($v_byte1,4);
                  }
                  If ($v7 == 1)  {
                      $v_byte1 = setBit($v_byte1,5);
                  }
                  If ($v8 == 1)  {
                      $v_byte1 = setBit($v_byte1,6);
                  }
                  If ($v9 == 1)  {
                      $v_byte1 = setBit($v_byte1,7);
                  }
                  $v_byte2 = 0;
                  If ($v10 == 1)  {
                      $v_byte2 = setBit($v_byte2,0);
                  }
                  If ($v11 == 1)  {
                      $v_byte2 = setBit($v_byte2,1);
                  }
                  If ($v12 == 1)  {
                      $v_byte2 = setBit($v_byte2,2);
                  }
                  If ($v13 == 1)  {
                      $v_byte2 = setBit($v_byte2,3);
                  }
                  If ($v14 == 1)  {
                      $v_byte2 = setBit($v_byte2,4);
                  }
                  If ($v15 == 1)  {
                      $v_byte2 = setBit($v_byte2,5);
                  }
                  If ($v16 == 1)  {
                      $v_byte2 = setBit($v_byte2,6);
                  }
                  If ($v17 == 1)  {
                      $v_byte2 = setBit($v_byte2,7);
                  }
                  
                  $v_int1 = 0;
                  $v_int1 = array(($v_byte1+($v_byte2<<8) ), (0 ));
                  
                  
                  $modbus = new ModbusMaster("192.168.2.45", "TCP");
                  try {
                      // FC 16 1x16-bit Integer
                      $modbus->readWriteRegisters(0, $v1, 1, $v1, $v_int1, $dataTypes);
                  }
                  catch (Exception $e) {
                       exit;
                  }
                  setLogicLinkAusgang($id,1,$v_int1[0]);
                  sql_disconnect();
                  ?>
                  ###[/EXEC]###
                  So sieht es bei mir im Logikeditor aus:
                  Edomi - 29_01.jpg
                  >>Smelly One<<
                  >> BURLI <<
                  Grüße Armin

                  Kommentar


                    #84
                    Bitte im Download-Thread weiter diskutieren: https://knx-user-forum.de/forum/proj...ownloadbereich
                    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                    Kommentar

                    Lädt...
                    X