Was macht der LBS
Erstmal stupide bei einem Trigger an E1 128 Zufallszahlen berechnen Soweit nichts Spektakuläres. Trägt man jedoch an E3 eine iKO ID ein, die noch nicht existiert und E7 ist 1, dann legt der Baustein 129 iKo mit den Namen des Ausganges mit Präfix und Suffix (die sind optional) an. Ab sofort schreibt der LBS direkt auf diese iKO. Ausgangsboxen sind nicht notwendig. Nur der Ausgang 129 schreibt zwangsläufig auf den Ausgang, so wie wir es gewohnt sind.
Die iKO des LBS können dann an weitere LBS am Eingang übergeben werden, und triggern diese folgenden LBS.
Wie funktioniert der LBS?
Der LBS prüft ob ein iKO im Projekt mit der Start ID von E3 im Projekt existiert, und ob es den gleichen Namen hat. (Präfix + Name Ausgang A1 + Suffix). Schlägt diese Prüfung fehl, wird direct conect deaktiviert, und der LBS schreibt normal auf die Ausgänge.
Ist die IKO ID noch nicht im Projekt, werden die notwendigen iKO angelegt.
Dabei wird geprüft, ob die Folder ID existiert, und ob die folder ID ein Unterordner von „Interne Ko’s“ ist. Wenn nicht, werden die iKO im Ordner „Interne Ko’s“ angelegt.
Was kann man falsch machen?
Den Eingang E3 zur Laufzeit ändern. Dann schlägt die Prüfung, ob das iKO existiert fehl, und der LBS deaktiviert direct conect. Wenn man eine iKO ID einträgt, die noch nicht existiert, legt der LBS die IKO erneut an.
E5 / E6 zur Laufzeit ändern. Dann schlägt die Prüfung, ob das iKO existiert fehl, und der LBS deaktiviert direct conect.
Die Bausteinnummer muss in der Variable 101 eingetragen sein.
Als Hilfe gibt es dann folgenden LBS, der das letzte genutzte iKO im Projekt ermittelt, und an A1 ausgibt. Die nächste freie ID wird an A2 ausgegeben. A2 von diesen LBS nicht mit dem LBS mit direct conect verbinden.
Code:
###[DEF]### [name = check iko] [e#1 = trigger] [a#1 = last IKO] [a#2 = next IKO] ###[/DEF]### ###[HELP]### Letztes benutztes IKO an A1 nächstes freies IKO an A2 ###[/HELP]### ###[LBS]### <? function LB_LBSID($id) { if ($E=logic_getInputs($id)) { if ($E[1]['refresh']==1) { $mysqli = new mysqli('localhost', 'root', '', 'edomiProject'); $query = "Select id,ga From editKo"; $result = $mysqli->query($query); mysqli_close($mysqli); while ($row = $result->fetch_array(MYSQLI_ASSOC)){ $iko[$row['id']] = $row['ga']; } $key = max(array_keys($iko)); //$max = $iko[$key]; logic_setOutput($id,1,$key); logic_setOutput($id,2,$key+1); } } } ?> ###[/LBS]### ###[EXEC]### <? ?> ###[/EXEC]###
Code:
###[DEF]### [name = 128 Zufälle ] [e#1 =Trigger ] [e#2 =Config #init=0 ] [e#3 =start IKO ] [e#4 =folderid #init=31 ] [e#5 =Präfix ] [e#6 =Suffix ] [e#7 =directconect #init=1 ] [a#1 =Ausg. 1 ] [a#2 =Ausg. 2 ] [a#3 =Ausg. 3 ] [a#4 =Ausg. 4 ] [a#5 =Ausg. 5 ] [a#6 =Ausg. 6 ] [a#7 =Ausg. 7 ] [a#8 =Ausg. 8 ] [a#9 =Ausg. 9 ] [a#10 =Ausg. 10 ] [a#11 =Ausg. 11 ] [a#12 =Ausg. 12 ] [a#13 =Ausg. 13 ] [a#14 =Ausg. 14 ] [a#15 =Ausg. 15 ] [a#16 =Ausg. 16 ] [a#17 =Ausg. 17 ] [a#18 =Ausg. 18 ] [a#19 =Ausg. 19 ] [a#20 =Ausg. 20 ] [a#21 =Ausg. 21 ] [a#22 =Ausg. 22 ] [a#23 =Ausg. 23 ] [a#24 =Ausg. 24 ] [a#25 =Ausg. 25 ] [a#26 =Ausg. 26 ] [a#27 =Ausg. 27 ] [a#28 =Ausg. 28 ] [a#29 =Ausg. 29 ] [a#30 =Ausg. 30 ] [a#31 =Ausg. 31 ] [a#32 =Ausg. 32 ] [a#33 =Ausg. 33 ] [a#34 =Ausg. 34 ] [a#35 =Ausg. 35 ] [a#36 =Ausg. 36 ] [a#37 =Ausg. 37 ] [a#38 =Ausg. 38 ] [a#39 =Ausg. 39 ] [a#40 =Ausg. 40 ] [a#41 =Ausg. 41 ] [a#42 =Ausg. 42 ] [a#43 =Ausg. 43 ] [a#44 =Ausg. 44 ] [a#45 =Ausg. 45 ] [a#46 =Ausg. 46 ] [a#47 =Ausg. 47 ] [a#48 =Ausg. 48 ] [a#49 =Ausg. 49 ] [a#50 =Ausg. 50 ] [a#51 =Ausg. 51 ] [a#52 =Ausg. 52 ] [a#53 =Ausg. 53 ] [a#54 =Ausg. 54 ] [a#55 =Ausg. 55 ] [a#56 =Ausg. 56 ] [a#57 =Ausg. 57 ] [a#58 =Ausg. 58 ] [a#59 =Ausg. 59 ] [a#60 =Ausg. 60 ] [a#61 =Ausg. 61 ] [a#62 =Ausg. 62 ] [a#63 =Ausg. 63 ] [a#64 =Ausg. 64 ] [a#65 =Ausg. 65 ] [a#66 =Ausg. 66 ] [a#67 =Ausg. 67 ] [a#68 =Ausg. 68 ] [a#69 =Ausg. 69 ] [a#70 =Ausg. 70 ] [a#71 =Ausg. 71 ] [a#72 =Ausg. 72 ] [a#73 =Ausg. 73 ] [a#74 =Ausg. 74 ] [a#75 =Ausg. 75 ] [a#76 =Ausg. 76 ] [a#77 =Ausg. 77 ] [a#78 =Ausg. 78 ] [a#79 =Ausg. 79 ] [a#80 =Ausg. 80 ] [a#81 =Ausg. 81 ] [a#82 =Ausg. 82 ] [a#83 =Ausg. 83 ] [a#84 =Ausg. 84 ] [a#85 =Ausg. 85 ] [a#86 =Ausg. 86 ] [a#87 =Ausg. 87 ] [a#88 =Ausg. 88 ] [a#89 =Ausg. 89 ] [a#90 =Ausg. 90 ] [a#91 =Ausg. 91 ] [a#92 =Ausg. 92 ] [a#93 =Ausg. 93 ] [a#94 =Ausg. 94 ] [a#95 =Ausg. 95 ] [a#96 =Ausg. 96 ] [a#97 =Ausg. 97 ] [a#98 =Ausg. 98 ] [a#99 =Ausg. 99 ] [a#100 =Ausg. 100 ] [a#101 =Ausg. 101 ] [a#102 =Ausg. 102 ] [a#103 =Ausg. 103 ] [a#104 =Ausg. 104 ] [a#105 =Ausg. 105 ] [a#106 =Ausg. 106 ] [a#107 =Ausg. 107 ] [a#108 =Ausg. 108 ] [a#109 =Ausg. 109 ] [a#110 =Ausg. 110 ] [a#111 =Ausg. 111 ] [a#112 =Ausg. 112 ] [a#113 =Ausg. 113 ] [a#114 =Ausg. 114 ] [a#115 =Ausg. 115 ] [a#116 =Ausg. 116 ] [a#117 =Ausg. 117 ] [a#118 =Ausg. 118 ] [a#119 =Ausg. 119 ] [a#120 =Ausg. 120 ] [a#121 =Ausg. 121 ] [a#122 =Ausg. 122 ] [a#123 =Ausg. 123 ] [a#124 =Ausg. 124 ] [a#125 =Ausg. 125 ] [a#126 =Ausg. 126 ] [a#127 =Ausg. 127 ] [a#128 =Ausg. 128 ] [a#129 =Status dc ] [v#1 =0 ] //Wert des Einganges vom letzten Durchlauf [v#100=1.0 ] //Version (noch nicht verwendet) [v#101=19099975 ] //LBS ID [v#200 =0 ] //id des Start-IKO [v#201 =0 ] //erstes erstelltes IKO [v#202 =0 ] //letztes erstelltes IKO ###[/DEF]### ###[HELP]### E2 = 0 LBS schreibt wenn möglich auf IKO, sonst konventionell auf Ausgang E2 = 1 LBS schreibt auf Ausgang und IKO gleichzeitig A129 schreibt nicht auf DC sondern nur auf Ausgangsbox (test) ###[/HELP]### ###[LBS]### <? function LB_LBSID($id) { if ($E=logic_getInputs($id)) { $bs = getLogicElementVar($id,101); $ikoNr = $E[3]['value'] ; $folderid = $E[4]['value']; //default 31 $prä = $E[5]['value']; $suff = $E[6]['value']; $dc = $E[7]['value']; // Startbedingungen für LBS if ($E[1]['refresh']==1 ) { //Die check IKO Routine ################################################################################################################################## if($ikoNr !='' || $dc == 1){ $mysqli = new mysqli('localhost', 'root', '', 'edomiProject'); //Ausgangsbezeichner aus DB holen: $query = "Select defout,id From editLogicElementDef Where id =" .$bs; $result = $mysqli->query($query); mysqli_close($mysqli); while ($row = $result->fetch_array(MYSQLI_ASSOC)) { $out = $row['defout']; } if (count($out)<1) { //LBS Nummer nicht bekannt > error => Abbruch; $dc = 1; goto lbs; } //Ausgänge Namen auftrennen $teile = explode(chr(29), $out); //chr(29) Start $teile = array_filter($teile); foreach($teile as $n){ $Ausg = explode(chr(30), $n); //chr(30) Trenner Eingangnummer / Bezeichner $arr[$Ausg[0]] = $Ausg[1]; // Array mit Key = Ausgangsnummer / Value = Bezeichner } $mysqli = new mysqli('localhost', 'root', '', 'edomiProject'); $query = "Select id,ga,name From editKo ORDER BY ga ASC"; $result = $mysqli->query($query); mysqli_close($mysqli); $name = $arr[1]; if ($prä != '') $name = $prä ." " .$name; if ($suff != '') $name = $name . " ".$suff ; while ($row = $result->fetch_array(MYSQLI_ASSOC)){ if ($row['ga'] == $ikoNr && $row['name'] != $name){ //IKO existiert, hat aber andere Bezeichnung => dc deaktivieren $dc = 0; goto lbs; } if ($row['ga'] == $ikoNr && $row['name'] == $name){ // ID erstes verwendetes IKO in Variable setLogicElementVar($id,200,$row['id']); goto lbs; //LBS-Teil ausführen } } //folder ID Prüfen wenn folderid nicht existiert IKO in "interne KO's" (id31) erstellen $mysqli = new mysqli('localhost', 'root', '', 'edomiProject'); $query = "Select path,id From editRoot Where path Like '/30/31%'"; $result = $mysqli->query($query); mysqli_close($mysqli); while ($row = $result->fetch_array(MYSQLI_ASSOC)){ $folder[] = $row['id']; } if(in_array($folderid,$folder)){ $folderid = $folderid; }else{$folderid = 31;} //iko existiert nicht => erstellen $mysqli = new mysqli('localhost', 'root', '', 'edomiProject'); foreach($arr as $nr => $bez){ if ($bez == '')$bez = 'A'.$nr; if ($prä != '') $bez = $prä ." " .$bez; if ($suff != '') $bez = $bez . " ".$suff ; $query = "INSERT INTO `editKo` (`id`,`name`, `folderid`, `ga`, `gatyp`, `valuetyp`, `value`, `defaultvalue`, `initscan`, `initsend`, `requestable`, `remanent`, `vmin`, `vmax`, `vstep`, `vlist`, `vcsv`, `text`) VALUES ('$ikoNr','$bez', '$folderid', '$ikoNr', 2, 0, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL)"; mysqli_query($mysqli, $query); $pool[]= $ikoNr; $ikoNr++; } mysqli_close($mysqli); setLogicElementVar($id,201,min($pool));// Ausgabe erstes erstelltes IKO setLogicElementVar($id,202,max($pool));// Ausgabe letztes erstelltes IKO } else {$dc=0;} ################################################################################################################################## lbs: //Der eigentliche Teil des LBS: $startiko = getLogicElementVar($id,200); //die IKO weden über die ID angesprochen (ga Bezeichner und id können unterschiedlich sein) if ($E[2]['value'] == 1){ //LBS schreibt auf Ausgang und iKO gleichzeitig (wenn die iKO Prüfung fehlschlägt, wird nur der Ausgang gesetzt) for ($x = 0 ; $x <= 127 ; $x ++){ //Direktes ansprechen der iKO //A1 = $startiko A2 = $startiko +1 usw $dummy = rand(0,500); if($dc==1){writeGA($startiko,$dummy); $startiko++;} logic_setOutput($id,$x+1,$dummy); } }else{ // LBS schreibt vorrangig auf iKO. Schlägt die iKO Routine fehl (iKO existiert, jedoch anderer Name als erwartet) schreibt der LBS auf die Ausgänge for ($x = 0 ; $x <= 127 ; $x ++){ // Hier wird entweder auf das iKo geschrieben (dc = 1) oder auf den Ausgang $dummy = rand(0,500); if ($dc == 1){ //schreibe direkt auf IKO writeGA($startiko,$dummy); $startiko++; }else{ //schreibe konventionell auf Ausgang logic_setOutput($id,$x+1,$dummy); } } } logic_setOutput($id,129,$dc); //Status dc auf Ausgang ende: //Abbruch } } } ?> ###[/LBS]### ###[EXEC]### <? ?> ###[/EXEC]###
Sonst könnte der LBS in ähnlicher Form als Vorlage für Comunity LBS dienen, die eine ansehnliche Anzahl an Ausgängen besitzen.
Kommentar