Hallo zusammen,
ich habe bei mir noch mal ein Messung gemacht.
10.000 Schaltvorgänge, jede Sekunde wir ein LCN Ausgang umgeschaltet.
(maximaler Timeout 30 Sekunden)
a) ohne Auswertung der Quittierung
b) mit Auswertung der Quittierung
- 10000 Versuche
- 11 Retries
- 9998 OK
c) mit eigener Auswertung der Quittierung (Registervariable)
Generelle LCN Quittierung abgeschaltet
- 10000 Versuche
- 53 einfache Retries / kein 2facher Retry
- 10000 OK
d) mit eigener Auswertung der Quittierung (Registervariable)
Generelle LCN Quittierung eingeschaltet
- 10000 Versuche
- 57 Retries / 1 zweifacher Retry
- 10000 OK
Meine Erkenntnis: Derzeit schaltet LCN am zuverlässigen bei Auswertung der Quittierung.
Jedoch gibt es auch hier 2 Fälle aus 10.000Versuche ohne Erfolg.
In einer eigenen Auswertung des Quittierung sind alle Schaltvorgänger erfolgreich.
Anbei das Skript zur eigenen Auswertung der Quittierung:
<?php
$id_Test_State = 42752;
$id_Test_Output = 15330;
$ID_Test_Modul = IPS_GetInstance(IPS_GetParent($id_Test_Output))["ConnectionID"];
$id_counter = 39629;
$id_repeat_counter = 52353;
$id_error_counter_1 = 57075;
$id_error_counter_2 = 53325;
$id_error_counter_3 = 34422;
$id_error_counter_4 = 30319;
$id_error_counter_5 = 56692;
$id_error_counter_6 = 59986;
$id_error_counter_summ = 48761;
if ($_IPS['SENDER'] == "Execute" )
{
foreach( IPS_GetChildrenIDs($_IPS['SELF']) as &$event)
{
IPS_DeleteEvent($event);
}
$id_event = IPS_CreateEvent(0); //Ausgelöstes Ereignis
IPS_SetEventTrigger($id_event, 1, $id_Test_State); //Bei Aktualiserung von Variable $id_status
IPS_SetParent($id_event, $_IPS['SELF']); //Ereignis zuordnen
IPS_SetEventActive($id_event, true); //Ereignis aktivieren
IPS_SetEventAction($id_event, '{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}', []);
SetValueInteger($id_counter, 0);
SetValueInteger($id_error_counter_1, 0);
SetValueInteger($id_error_counter_2, 0);
SetValueInteger($id_error_counter_3, 0);
SetValueInteger($id_error_counter_4, 0);
SetValueInteger($id_error_counter_5, 0);
SetValueInteger($id_error_counter_6, 0);
AC_DeleteVariableData(30302, $id_repeat_counter, 0, 0);
AC_SetLoggingStatus(30302, $id_repeat_counter, true);
LCN_SendCommand($ID_Test_Modul, "TS", "---L00010000");
IPS_SetScriptTimer($_IPS['SELF'], 5);
return;
}
if ($_IPS['SENDER'] == "RegisterVariable" )
{
$string = explode(chr(0x0A),$_IPS['VALUE'] );
//IPS_LogMessage("TestA",$_IPS['VALUE'] );
auswertung($string[0]);
if (count($string) > 1)
{
if (strlen($string[1]) >= 3)
{
auswertung($string[1]);
}
}
if (count($string) > 2)
{
if (strlen($string[2]) >= 3)
{
auswertung($string[2]);
//IPS_LogMessage("Test Extra lang","3 Meldungen" );
}
}
if (count($string) > 3)
{
if (strlen($string[3]) >= 3)
{
auswertung($string[3]);
}
}
if (count($string) > 4)
{
if (strlen($string[4]) >= 3)
{
auswertung($string[4]);
IPS_LogMessage("Test Extra lang","5 Meldungen" );
}
}
return;
};
if ($_IPS['SENDER'] == "Variable" )
{
SetValueInteger($id_error_counter_6, GetValueInteger($id_error_counter_6) +1 );
IPS_SetScriptTimer($_IPS['SELF'], 1);
return;
}
if ($_IPS['SENDER'] == "TimerEvent" )
{
IPS_SetScriptTimer($_IPS['SELF'], 30);
$counter = GetValueInteger($id_counter);
if ($counter < 10000)
{
SetValueInteger($id_counter, $counter+1);
$State = GetValueBoolean($id_Test_State);
$noerror = switchoutput(!$State);
if (!$noerror)
{
SetValueInteger($id_error_counter_1, GetValueInteger($id_error_counter_1) +1 );
}
}
}
function switchoutput($output)
{
$id_error_counter_1 = 57075;
$id_error_counter_2 = 53325;
$id_error_counter_3 = 34422;
$id_error_counter_4 = 30319;
$id_error_counter_5 = 56692;
$id_error_counter_6 = 59986;
$polling_time = 100;
$repeat_cadence = 300; // ms
$runs = (int)($repeat_cadence / $polling_time);
$counter = 1;
if ($output)
{
$TX_BUF = '>M000099!A4DI100000'.chr(10);
}
else
{
$TX_BUF = '>M000099!A4DI000000'.chr(10);
}
SetValueBoolean(54679, false);
CSCK_SendText(13690 ,$TX_BUF); // an den Client Socket LCN
$counter_offset = $counter;
for ($counter = $counter_offset ; $counter <= ($runs + $counter_offset-1); $counter++)
{
IPS_Sleep($polling_time);
if (GetValueBoolean(54679)) // Abfrage Statusmeldung
{
$id_repeat_counter = 52353;
SetValueInteger($id_repeat_counter, $counter);
SetValueBoolean(54679, false);
return true;
}
}
SetValueInteger($id_error_counter_3, GetValueInteger($id_error_counter_3) +1 );
//SetValueBoolean(54679, false);
CSCK_SendText(13690 ,$TX_BUF); // an den Client Socket LCN
$counter_offset = $counter;
for ($counter = $counter_offset ; $counter <= ($runs + $counter_offset-1); $counter++)
{
IPS_Sleep($polling_time);
if (GetValueBoolean(54679)) // Abfrage Statusmeldung
{
$id_repeat_counter = 52353;
SetValueInteger($id_repeat_counter, $counter);
SetValueBoolean(54679, false);
return true;
}
}
SetValueInteger($id_error_counter_4, GetValueInteger($id_error_counter_4) +1 );
//SetValueBoolean(54679, false);
CSCK_SendText(13690 ,$TX_BUF); // an den Client Socket LCN
$counter_offset = $counter;
for ($counter = $counter_offset ; $counter <= ($runs + $counter_offset-1); $counter++)
{
IPS_Sleep($polling_time);
if (GetValueBoolean(54679)) // Abfrage Statusmeldung
{
$id_repeat_counter = 52353;
SetValueInteger($id_repeat_counter, $counter);
SetValueBoolean(54679, false);
return true;
}
}
SetValueInteger($id_error_counter_5, GetValueInteger($id_error_counter_5) +1 );
return false;
};
function auswertung($lcninput)
{
$startstring = substr($lcninput, 0 ,2);
switch ($startstring)
{
case ('%M'):
//messwert($lcninput);
break;
case (':M'):
//ausgang($lcninput);
break;
case ('-M'):
//IPS_LogMessage("Test Status", $lcninput);
if ( substr($lcninput,0, 8) == '-M000099')
{
if (substr($lcninput,8, 1) == '!')
{
//IPS_LogMessage("LCN Bestätigung", "OK" . $lcninput);
SetValueBoolean(54679, true);
}
else
{
IPS_LogMessage("LCN Bestätigung", "NOK" . $lcninput);
}
}
break;
case ('+M'):
//pchkmessage($lcninput);
break;
case ('=M'):
//transponder($lcninput);
break;
case ('^p'):
//IPS_LogMessage("LCN ping", $lcninput);
break;
default:
IPS_LogMessage("LCN Message Neu", $lcninput);
break;
}
};
tippe oder füge den Code hier ein