Pfiffikus hat geschrieben:
Hallo Paul,
In Zeile 33 wird das Byte ausgelesen. Du müsstet den Inhalt der Datei auslesen. In Zeile 34 wird geprüft, ob das interessante Bit 0 oder 1 ist.
Nehmen wir an, Du interessierst Dich für den Zustand von Relais 3.
$potenz = pow(2, 3); // Errechnet für unser Beispiel den Wert 8, also 0000 1000 .
$zustand = $Byte & $potenz ; // Bitweises UND durchführen.
In der Variable $zustand werden 7 Bits auf jeden Fall Null sein. Wenn in unserem Byte das interessante Bit 1 ist, dann wird das Ergebnisbit ebenso den Wert 1 bekommen. Andernfalls ist auch das achte Bit gleich Null. Wenn das Relais 3 untersucht wird, kann das Ergebnis in Variable $zustand demnach nur 0 oder 8 sein.
Den Relaiszustand zu ermitteln, ist nun einfach. Ist $zustand == 0 , dann war das untersuchte Bit gleich Null. Ist das Ergebnis größer als 0, dann stand eine 1 im Bit.
Diese Einzelschritte findest Du in Zeile 34 des Codes in einer einzigen Zeile vereinigt. Hier wird nicht erst ein Zwischenergebnis in den Variablen $potenz und $zustand zwischengespeichert.
Hallo Gunter,
das hast Du mal wieder gut erläutert!
Das ganze funktioniert jetzt auch, aber nicht auf Anhieb, da Du mir eine kleine Rechen falle eingebaut hast, die ich natürlich übernommen habe.
In Zeile 33 wird das Byte ausgelesen. Du müsstet den Inhalt der Datei auslesen. In Zeile 34 wird geprüft, ob das interessante Bit 0 oder 1 ist.
Nehmen wir an, Du interessierst Dich für den Zustand von Relais
3.
$potenz = pow(2,
3); // Errechnet für unser Beispiel den Wert ]
8, also 0000 1000 .
$zustand = $Byte & $potenz ; // Bitweises UND durchführen.
In Zeile 33 wird das Byte ausgelesen. Du müsstet den Inhalt der Datei auslesen. In Zeile 34 wird geprüft, ob das interessante Bit 0 oder 1 ist.
Nehmen wir an, Du interessierst Dich für den Zustand von Relais 3. fängt ja bei 29-0000000c5d54+0 an, also Relais 2 dann 29-0000000c5d54+2
$potenz = pow(2, 2); // Errechnet für unser Beispiel den Wert 4, also 0000 0100 .
$zustand = $Byte & $potenz ; // Bitweises UND durchführen.
$aKenn[0] = "29-0000000c5d54";
$aKenn[1] = "2"; // für Relais 3
$Byte = "255"; // alle Relais Aus
$potenz = pow(2, $aKenn[1]);
echo ($potenz) . '<br>';
4$zustand = $Byte & $potenz;
echo ($zustand) . '<br>';
4if ($zustand == 0) {print("EIN");}
if ($zustand > 0) {print("AUS");}
AUSoder:
$res = (($Byte & pow(2, $aKenn[1])) > 0)? 1:0;
echo ($res) . '<br>';
1if ($res == 0) {print("EIN");}
if ($res > 0) {print("AUS");}
AUSGegenprobe:$aKenn[1] = "2"; // für Relais 3
$Byte = "251"; // nur Relais 3 Ein
$potenz = pow(2, $aKenn[1]);
echo ($potenz) . '<br>';
4$zustand = $Byte & $potenz;
echo ($zustand) . '<br>';
0if ($zustand == 0) {print("EIN");}
EIN if ($zustand > 0) {print("AUS");}
oder:
$res = (($Byte & pow(2, $aKenn[1])) > 0)? 1:0;
echo ($res) . '<br>';
0if ($res == 0) {print("EIN");}
Ein if ($res > 0) {print("AUS");}
Soll keine Kritik sein, nur als Hilfe für die anderen Freaks.
Besten Dank noch Mals

Habe mich da auch selber verhauen und noch mal Berichtigt Gunter
