Int-Variable mit ~rgb Profil Hex-Werte selektieren

Ich habe für die Ansteuerung von 3er Gruppen PWM-LED für Pokey56E, sprich ein RGB-Lichtband, in der Webfront eine Integervariable mit Profil ~RGB genommen.

Mit diesen Werten und eingestellten 100kHz in der Pokeys56 PWM-Einheit funktioniert ein RGB-Lichband.

Es kommt als Hex-Wert für jede Farbe ein 00-FF-Wert, um folgendes Script zu triggern.

Um die einzelnen Werte für Rot, Blau und Grün zu bekommen, wird UND-Verknüpft und die Bit’s verschoben, sodass die Werte einzeln zur Verfügung stehen.

Edit:
Zusätzlich ein Ereigniss (bei Variablenänderung der Webfront Integervariable) eingefügt.


<?
IF ($_IPS['SENDER'] == "WebFront")
{
$Blau = 0x0000FF;  // 255;      // ist gleich Hex 0xFF
$Gruen =0x00FF00; // 65280;  // ist gleich Hex 0xFF00
$Rot = 0xFF0000; // 16711680;// ist gleich Hex 0xFF0000

SetValue($_IPS["VARIABLE"], $_IPS["VALUE"]); // Variable aktualisieren

$ErgebnissRot= (($_IPS["VALUE"] & $Rot)>>16);
$ErgebnissGruen= (($_IPS["VALUE"] & $Gruen)>>8);
$ErgebnissBlau= ($_IPS["VALUE"] & $Blau);

ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);

}
?>

Und noch ein Flash-Program für Pokeys56E und 3 LED- oder 1 RGB-Stripe:

<?
$i = 1;
Start:
$ErgebnissRot=   250 ;
$ErgebnissGruen= 250 ;
$ErgebnissBlau=  250 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$ErgebnissRot=   2 ;
$ErgebnissGruen= 2 ;
$ErgebnissBlau=  2 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$ErgebnissRot=   50 ;
$ErgebnissGruen= 50 ;
$ErgebnissBlau=  50 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$ErgebnissRot=   250 ;
$ErgebnissGruen= 250 ;
$ErgebnissBlau=  250 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$ErgebnissRot=   2 ;
$ErgebnissGruen= 2 ;
$ErgebnissBlau=  2 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$ErgebnissRot=   50 ;
$ErgebnissGruen= 50 ;
$ErgebnissBlau=  50 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);

$ErgebnissRot=   200 ;
$ErgebnissGruen= 200 ;
$ErgebnissBlau=  200 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$ErgebnissRot=   20 ;
$ErgebnissGruen= 20 ;
$ErgebnissBlau=  20 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$ErgebnissRot=   100 ;
$ErgebnissGruen= 100 ;
$ErgebnissBlau=  100 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$ErgebnissRot=   2 ;
$ErgebnissGruen= 2 ;
$ErgebnissBlau=  2 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$ErgebnissRot=   170 ;
$ErgebnissGruen= 17 ;
$ErgebnissBlau=  50 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$ErgebnissRot=   1 ;
$ErgebnissGruen= 1 ;
$ErgebnissBlau=  1 ;
// Die ersten drei Pokey56E PWM Pins
ModBus_WriteRegisterWord(46985 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 1 ModBus Gerät]*/,$ErgebnissRot);
ModBus_WriteRegisterWord(51424 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 2 ModBus Gerät]*/,$ErgebnissGruen);
ModBus_WriteRegisterWord(36547 /*[ModBus Pokey\Pokey56E 6 mal PWM\PWM 3 ModBus Gerät]*/,$ErgebnissBlau);
$i = $i+1;
//echo $i;
if ($i >9){
goto Stop;
} else {
Goto Start;
}
Stop:

?>

Gruß Helmut

Hallo Helmut,

in IPS 4.1 gibt es keine Integer Variable mehr mit Profil ~RGB. Es gibt aber diesen schicken Farbkreis.
Lässt sich das übertragen auf den Pokey PWM per Modbus TCP?

Habe diese Frage übersehen
Farbkreisvariable integer Profil ~HexColor erstellen und das Umrechnungsscript als Aktionsscript eintragen, das sollte funktionieren.
Gruß Helmut

Es gibt es ein neues Modul, womit man die RGB Ansteuerung vereinfachen kann: SymconMisc/RGBMultiplexer at master · symcon/SymconMisc · GitHub

paresy