PHP-Code:
###[EXEC]###
<?
require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
require(dirname(__FILE__). "/../../../../main/include/php/ModbusMaster.php");
set_time_limit(0);
sql_connect();
//-------------------------------------------------------------------------------------
function str2hex($string){
$hex='0x';
for ($i=0; $i < strlen($string); $i++){
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
$E = getLogicEingangDataAll($id);
$V=logic_getVars($id);
$ip = $E[2]['value'];
$modbus = new ModbusMaster($ip, "TCP");
try {
if ($E=logic_getInputs($id)){
$V=logic_getVars($id);
}
//Betriebsart E3
if ($V[3]==1) {
$value = str2hex("=".$E[3]['value']);
$data = array(0x7630, 0x3031, 0x3031, hexdec($value), 0x0000);
$dataTypes = array("INT", "INT", "INT", "INT", "INT");
$modbus->writeMultipleRegister(180, 1, $data, $dataTypes);
logic_setVar($id,3,0);
}
//Lüftungsstufe E4
if ($V[4]==1) {
$value = str2hex("=".$E[4]['value']);
$data = array(0x7630, 0x3031, 0x3032, hexdec($value), 0x0000);
$dataTypes = array("INT", "INT", "INT", "INT", "INT");
$modbus->writeMultipleRegister(180, 1, $data, $dataTypes);
logic_setVar($id,4,0);
}
//Min. Lüfterstufe E5
if ($V[5]==1) {
$value = str2hex("=".$E[5]['value']);
$data = array(0x7630, 0x3030, 0x3230, hexdec($value), 0x0000);
$dataTypes = array("INT", "INT", "INT", "INT", "INT");
$modbus->writeMultipleRegister(180, 1, $data, $dataTypes);
logic_setVar($id,5,0);
}
//Partybetrieb E6
if ($V[6]==1) {
$value = str2hex("=".$E[6]['value']);
$data = array(0x7630, 0x3030, 0x3934, hexdec($value), 0x0000);
$dataTypes = array("INT", "INT", "INT", "INT", "INT");
$modbus->writeMultipleRegister(180, 1, $data, $dataTypes);
logic_setVar($id,6,0);
}
//Partybetrieb Dauer E7
if ($V[7]==1) {
$len = strlen($E[7]['value']);
$value = $E[7]['value'];
setLogicLinkAusgang($id,31,$len);
if ($len>0 && $len<4){
if ($len == 1){
setLogicLinkAusgang($id,32,$len);
$a = str2hex("0");
$b = str2hex("0". $value);
}
elseif ($len == 2){
setLogicLinkAusgang($id,33,$len);
$a = str2hex("0");
$b = str2hex(substr($value));
}
else{
$a = substr($value, -3, 1); //Wert aufteilen Teil A
$b = substr($value, -2); //Wert aufteilen Teil B
}
$value1 = str2hex("=".$a); //Teil A in hex
$value2 = str2hex($b); //Teil B in hex
$data = array(0x7630, 0x3030, 0x3931, hexdec($value1), hexdec($value2), 0x0000);
$dataTypes = array("INT", "INT", "INT", "INT", "INT", "INT");
$modbus->writeMultipleRegister(180, 1, $data, $dataTypes);
setLogicLinkAusgang($id,23,$b);
setLogicLinkAusgang($id,24,$value1);
setLogicLinkAusgang($id,25,$value2);
logic_setVar($id,7,0);
}
}
//Partybetrieb Stufe E8
if ($V[8]==1) {
$value = str2hex("=".$E[8]['value']);
$data = array(0x7630, 0x3030, 0x3932, hexdec($value), 0x0000);
$dataTypes = array("INT", "INT", "INT", "INT", "INT");
$modbus->writeMultipleRegister(180, 1, $data, $dataTypes);
logic_setVar($id,8,0);
}
//Ruhebetrieb E9
if ($V[9]==1) {
$value = str2hex("=".$E[9]['value']);
$data = array(0x7630, 0x3030, 0x3939, hexdec($value), 0x0000);
$dataTypes = array("INT", "INT", "INT", "INT", "INT");
$modbus->writeMultipleRegister(180, 1, $data, $dataTypes);
logic_setVar($id,9,0);
}
//Ruhebetrieb Dauer E8
if ($V[10]==1) {
$len = strlen($E[10]['value']);
$value = $E[10]['value'];
if ($len <= 3){
if ($len == 1){
$a = str2hex("=". "0");
$b = str2hex("0". $value);
}
elseif ($len == 2){
$a = str2hex("="."0");
$b = str2hex("=". substr($value, -2));
}
else{
$a = substr($value, -3, 1); //Wert aufteilen Teil A
$b = substr($value, -2); //Wert aufteilen Teil B
}
$value1 = str2hex("=".$a); //Teil A in hex
$value2 = str2hex($b); //Teil B in hex
$data = array(0x7630, 0x3030, 0x3936, hexdec($value1), hexdec($value2), 0x0000);
$dataTypes = array("INT", "INT", "INT", "INT", "INT", "INT");
$modbus->writeMultipleRegister(180, 1, $data, $dataTypes);
logic_setVar($id,10,0);
}
}
Hier nochmal der Teil um welchen es geht.
PHP-Code:
//Partybetrieb Dauer E7
if ($V[7]==1) {
$len = strlen($E[7]['value']);
$value = $E[7]['value'];
setLogicLinkAusgang($id,31,$len);
if ($len>0 && $len<4){
if ($len == 1){
setLogicLinkAusgang($id,32,$len);
$a = str2hex("0");
$b = str2hex("0". $value);
}
elseif ($len == 2){
setLogicLinkAusgang($id,33,$len);
$a = str2hex("0");
$b = str2hex(substr($value));
}
else{
$a = substr($value, -3, 1); //Wert aufteilen Teil A
$b = substr($value, -2); //Wert aufteilen Teil B
}
$value1 = str2hex("=".$a); //Teil A in hex
$value2 = str2hex($b); //Teil B in hex
$data = array(0x7630, 0x3030, 0x3931, hexdec($value1), hexdec($value2), 0x0000);
$dataTypes = array("INT", "INT", "INT", "INT", "INT", "INT");
$modbus->writeMultipleRegister(180, 1, $data, $dataTypes);
setLogicLinkAusgang($id,23,$b);
setLogicLinkAusgang($id,24,$value1);
setLogicLinkAusgang($id,25,$value2);
logic_setVar($id,7,0);
}
}
wenn zB 180 als wert auf E7 kommt soll $data folgendes ergeben. $a=0x3D31 $b=0x3830 (für = 180)
wenn zB 90 kommt soll $data $a=0x3D30 $b=0x3930 kommen
deswegen prüfe ich die strlen und setze quasi vorne 0 an.
Gruß Benjamin




Einen Kommentar schreiben: