fmac
1
Hallo
ab Version 01-205 bekomme ich eine Fehlermeldung wenn ich eine Registervariable mit Daten von einer
seriellen Schnittstelle füttere
nach dem Downgrade auf 01-200 läüft alles wieder normal
Liegt das an der PHP- version, oder gibts in meinen Fall
doch noch Probleme mit der Registervariablen (sollten mit 01-210 behoben sein)
das Skript dazu:
<?
/*
+------------------------+
Joachim Mistlbacher
www.joko.at
+------------------------+
ETA2IPS Cutter
Version 1.000
+------------------------+
21.01.2011
Da der IPS Cutter nicht den Umfang mitbringt die ETA Datensuetze korrekt zu behandeln, musste ein neuer Cutter her.
+------------------------+
*/
require 'SCR_EtaFunctions.ips.php';
// Prueft ob der Datensatz im Buffer vollstaendig ist.
function DatensatzVollstaenig()
{
//Anzahl der NutzdatenBytes + 6 Bytes fuer Start, Pruefsumme, Endzeichen usw..
$NutzdatenTemp = (int)(ord(substr(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")),3,1)))+6;
if ($NutzdatenTemp == strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))))
{
return true;
} else {
return false;
}
}
//Buffer Timeout, Buffer wird geleert.
if($_IPS['SENDER'] == "TimerEvent")
{
// loesche Buffer
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
IPS_SetScriptTimer($_IPS['SELF'],0);
echo "Buffer Timeout";
} else {
$ETA_ComID = GetObjectID("ETA_COM_Port"); //Instances ID des COM-Ports
$COM_String = RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_COM_RegisterVariable"));
IPS_LogMessage(" SCR_Cutter oben "," ID = :$COM_String ");
$COM_String .= @$_IPS['VALUE'];
IPS_LogMessage(" SCR_Cutter oben1 "," ID = :$COM_String ");
if (strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))) == 0)
{
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),$COM_String); //Buffer ist leer, neue Daten einfuegen
} else { //Ueberpruefung des neuen Daten Blocks
if (substr(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")),0,1) == "{") //Wurde ein StartZeichen gefunden?
{
// Ist der Buffer laenger wie 3 Bytes?
if (strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))) > 3)
{
//Wurde der gesamte Datensatz uebertragen?
if (DatensatzVollstaenig() == true)
{
// Datensatz vollstaendig
} else {
// Datensatz unvollstaendig
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")).$COM_String); //Weitere Daten in Buffer einfuegen
}
} else { // Buffer ist zu kurz fuer gueltigen Datensatz
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")).$COM_String); //Weitere Daten in Buffer einfuegen
}
} else { //Loesche Buffer = fehlerhafte Daten
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
IPS_LogMessage(" SCR_Cutter "," fehlerhaft = :$ETA_ComID ");
}
}
if (DatensatzVollstaenig() == true)
{
// Datensatz vollstaendig
IPS_RunScriptWait(GetObjectID("ETA/Scripts/SCR_ComStringZerlegen"));
// loesche Buffer
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
} else {
IPS_SetScriptTimer($_IPS['SELF'],5);
}
}
?>
paresy
2
Das Problem sollte eigentlich mit dem neusten Update gelöst sein. Hast du sicher die aktuellste Version drauf? Was steht unter Info in der Konsole?
paresy
fmac
3
Hallo
Hab die Version 213 drauf
die Meldung ist von Version 210
Jetzt mit Version 213 kommt keine Meldung, aber auch keine Daten
Wie kann ich das noch mehr debuggen ?
Danke
paresy
4
Kommt denn im Debug der RegisterVariable was an?
paresy
fmac
5
Hallo
Ja in den Registervariablen kommt was an
Hab weiter „geforscht“
in Ver 213 funzt der Cutter nicht so wie er soll
er „denkt“ die Zeichenkette ist leer, obwohl es nicht so ist(meine Meinung, bin kein php Profi)
das ist Ver 200
das ist Ver213
SCR_Cutter.php
<?
/*
+------------------------+
Joachim Mistlbacher
www.joko.at
+------------------------+
ETA2IPS Cutter
Version 1.000
+------------------------+
21.01.2011
Da der IPS Cutter nicht den Umfang mitbringt die ETA Datensuetze korrekt zu behandeln, musste ein neuer Cutter her.
+------------------------+
*/
require 'SCR_EtaFunctions.ips.php';
// Prueft ob der Datensatz im Buffer vollstaendig ist.
function DatensatzVollstaendig()
{
//Anzahl der NutzdatenBytes + 6 Bytes fuer Start, Pruefsumme, Endzeichen usw..
$NutzdatenTemp = (int)(ord(substr(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")),3,1)))+6;
if ($NutzdatenTemp == strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))))
{
return true;
}
else
{
return false;
}
}
//Buffer Timeout, Buffer wird geleert.
if($_IPS['SENDER'] == "TimerEvent")
{
// loesche Buffer
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
IPS_SetScriptTimer($_IPS['SELF'],0);
echo "Buffer Timeout";
} else {
$ETA_ComID = GetObjectID("ETA_COM_Port"); //Instances ID des COM-Ports
$COM_String = RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_COM_RegisterVariable"));
$COM_String .= @$_IPS['VALUE'];
echo "$COM_String";
//IPS_LogMessage(" SCR_Cutter1 "," $COM_String ");
if (strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))) == 0)
{
echo "Puffer leer";
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),$COM_String); //Buffer ist leer, neue Daten einfuegen
} else { //Ueberpruefung des neuen Daten Blocks
if (substr(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")),0,1) == "{") //Wurde ein StartZeichen gefunden?
{
echo "Startzeichen";
// Ist der Buffer laenger wie 3 Bytes?
if (strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))) > 3)
{
echo "Pufferlaenge";
//Wurde der gesamte Datensatz uebertragen?
if (DatensatzVollstaendig() == true)
{
echo "Datensatz vollstaendig";
// Datensatz vollstaendig
} else {
echo "Datensatz unvollstaendig";
// Datensatz unvollstaendig
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")).$COM_String); //Weitere Daten in Buffer einfuegen
}
} else { // Buffer ist zu kurz fuer gueltigen Datensatz
echo "Puffer zu kurz";
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")).$COM_String); //Weitere Daten in Buffer einfuegen
}
} else { //Loesche Buffer = fehlerhafte Daten
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
echo "loesche Puffer";
IPS_LogMessage(" SCR_Cutter "," fehlerhaft = :$ETA_ComID ");
}
}
if (DatensatzVollstaendig() == true)
{
// Datensatz vollstaendig
IPS_RunScriptWait(GetObjectID("ETA/Scripts/SCR_ComStringZerlegen"));
echo "Run script SCR_ComStringZerlegen";
// loesche Buffer
RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
} else {
IPS_SetScriptTimer($_IPS['SELF'],5);
}
}
?>
Archiv.zip (14.1 KB)
fmac
6
Hallo
irgendwie schummelt sich in die Daten ein „c2“
dann kann das nicht richtig ausgewertet werden
wär interessant wo das herkommt
paresy
7
Danke! Fehler gefunden und zum nächsten Update korrigiert.
paresy
fmac
8
Hallo
Kurze Rückmeldung :
nach Update auf 01-215
werden Daten wieder richtig aus - eingelesen
aber was echt geil ist, ist die Geschwindigkeit
vorher mit 01-200 ca 12 sec.
nachher mit 01-215 ca 4sec mit Raspi B+
mit Pi 2 sogar nur 2sec. :)
Danke, Danke