Langer Datensatz über Seriellen Port einlesen?

Hallo
ich möchte von meinem Akkulader alle Minute einen langen Datensatz einlesen. Die Daten innerhalb des Datensatzes sind unterschiedlich lang.

Datenstrom:
33;00;24;-00019;11897;030;100;+15;+17;+15;+16;00038;-0044;00045;46187;

Ich habe nun per „RegisterVariable“ die Daten vom seriellen Port abgeholt und per Skript in einen Variable geschrieben.

Hier mein Testscript:

<?
switch($IPS_SENDER)
	{
   	case "RegisterVariable":
  		SetValue (50944 /*[Server\Akkulader mit ser.-Schnittstelle\Daten-Server-Akkulader]*/  , $IPS_VALUE);

	echo ("$IPS_VALUE");
    	break;
	}
	
?>

Soweit so gut, nur bekomme ich in die Variable immer nur die letzten 8Bit, da die serielle Schnittstelle von IPS nur in 8Bit Stückchen liefert. Siehe Anlage „dump“
Die 8Bit Datenstückchen passen auch nicht mit den Dateninhalten zusammen.

Wie kann ich die einzelnen Daten auf einzelne Variablen verteilen?

Noch eine Frage, wie könnte ich per Script die Daten in einzelne Variablen zerteilen?

Grüße
Andrge

Schau mal hier.
Du musst nur wissen was am Anfang und Ende deines Datensatzes steht.

Hi Andrge,

das ist nicht IPS, welches nur bis 8 bit zählen kann. Die Ursache solltest Du im Prozessor der Ladestation suchen, schau Dir nur einmal die zeitlichen Abstände der eingehenden Meldungen an.

Wenn Du die HEX Ansicht aktivierst, werden die letzten beiden Bytes vermutlich ein CR/LF hervorzaubern, dieses würde ich als Erkennungsmerkmal der „stotternden“ Prozessornachricht nutzen: hier hat er das Ende der Nachricht markiert. Vorher hilft nur eines: die Bruchstücke der Nachricht mit dem Append Befehl (wenn es den denn gibt unter PHP, habe noch keine Ahnung) sammeln und das Datenpuzzle zusammenfügen. Erst danach sollte die komplette Nachricht in die einzelnen Variablen zerlegt werden.

mfg

BerndJ

PS: ein Link zu dem Stotterkandidaten wäre nicht schlecht.

Hallo Andrge

Hatte vor kurzem ein ganz ähnliches Problem. Da wurde mir geholfen.

Erwin

Skript in einen Variable geschrieben

Bitte benutzt unbedingt die RegVar_SetBuffer/GetBuffer Funktionen dafür. Siehe meine anmerkungen in dem o.g. Thread dazu.

oaresy