Problem mit Registervariable ab Ver. 01-205

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);
			}
}

?>

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

Hallo
Hab die Version 213 drauf

Info.png

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

Kommt denn im Debug der RegisterVariable was an?

paresy

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)

Hallo

irgendwie schummelt sich in die Daten ein „c2“
dann kann das nicht richtig ausgewertet werden
wär interessant wo das herkommt

Danke! Fehler gefunden und zum nächsten Update korrigiert.

paresy

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. :):smiley:

Danke, Danke