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