Mein LBS:
Ich brauche eigentlich nur die Werte der Eingänge unten im EXEC-Teil. Der LBS mit direkter Vorgabe im php-Teil funktioniert perfekt. Die Vorgabe im Logikeditor eben nicht. Es geht um die Werte E1 und E2. Variablen A und B.
Ich brauche eigentlich nur die Werte der Eingänge unten im EXEC-Teil. Der LBS mit direkter Vorgabe im php-Teil funktioniert perfekt. Die Vorgabe im Logikeditor eben nicht. Es geht um die Werte E1 und E2. Variablen A und B.
Code:
###[DEF]### [name =Modbus Float] [E#1 =A] [E#2 =B] [A#1 =Ausgabewert] ###[/DEF]### ###[HELP]### ###[/HELP]### ###[LBS]### <? function LB_LBSID($id) { if ($E[1]['value']=0 && $E[2]['value']=0) { if ($E=getLogicEingangDataAll($id)) { if ($E[1]['value']!=0 && $E[2]['value']!=0) { $A=$E[1]['value']; if (!is_numeric($A)) {$A=0;} $B=$E[2]['value']; if (!is_numeric($B)) {$B=0;} } } } setLogicElementVar($id,$E1,$A); setLogicElementVar($id,$E2,$B); setLogicElementStatus($id,1); //LBS "starten" callLogicFunctionExec(LBSID,$id); //EXEC-Script starten } ?> ###[/LBS]### ###[EXEC]### <? require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php"); require(dirname(__FILE__)."/../../../../main/include/php/ModbusMaster.php"); sql_connect(); $A = getLogicElementVar($id,$E1); $B = getLogicElementVar($id,$E2); $modbus = new ModbusMaster("192.168.2.45", "TCP"); try { // FC 3 2x16-bit float $recData = $modbus->readMultipleRegisters(0, $A, $B); } catch (Exception $e) { exit; } $raw = (($recData[0] & 0xFF)<<24) | (($recData[1] & 0xFF)<<16) | (($recData[2] & 0xFF)<<8) | (($recData[3] & 0xFF)); $ulong = pack('L*', $raw); $float = unpack('f*', $ulong); setLogicLinkAusgang($id,1,$float[1]); setLogicElementStatus($id,0); sql_disconnect(); ?> ###[/EXEC]###
Kommentar