Moin! Ich ich lese per Modbus einen UINT16 Wert aus hinter dem sich mehrere Status verstecken.
Kann mir jemand sagen, wie ich den UINT16 auswerten kann, so dass ich die einzelen Status Werte bekomme.
Moin! Ich ich lese per Modbus einen UINT16 Wert aus hinter dem sich mehrere Status verstecken.
Kann mir jemand sagen, wie ich den UINT16 auswerten kann, so dass ich die einzelen Status Werte bekomme.
Ich denke ich habe es mit ChatGPT hinbekommen
<?php
// Beispiel uint16 Wert
$uint16_wert = 35995; // Setze hier deinen uint16-Wert ein
// Funktion um ein bestimmtes Bit auszulesen
function getBit($value, $bitPosition) {
return ($value >> $bitPosition) & 1;
}
// Array zum Speichern der einzelnen Bits
$bits = array();
// Bits 0 bis 6 auslesen und im Array speichern
for ($i = 0; $i <= 6; $i++) {
$bits[$i] = getBit($uint16_wert, $i);
}
print_r ($bits[0]);
Du musst es ja noch speichern. Würde das Script etwa so erweitern und auslösenlassen durch Änderung der Modbus-Variable:
<?php
$symcon = array(12345, 65421, 12346, 12487, 15487, 25487, 24588);
// Bits 0 bis 6 auslesen und im Array speichern
for ($i = 0; $i <= 6; $i++) {
SetValue($symcon[$i], ( ($_IPS['VALUE'] >> $i) & 1) );
}