ComPort und Waterkotte abfragen

Hallo zusammen,

ich versuche hier schon seit längerem meine Waterkotte (Wärmepumpe) per ComPort abzufrage. Ich habe da aber ehrlich gesagt richtige Schwierigkeiten.:confused:

  1. Wie Werte ich die Daten aus die ich bekomme.
  2. Wie bilde ich die CRC16 Checksumme
  3. Welche Werte schicke ich zum Comport Zeichen Hex …
  4. Muss ich die Emfangenen Daten abschneiden.
  5. CRC für die Empfangenen Daten Prüfen JA/Nein

Ich habe auch ein Protokoll dafür. Die Verbindung steht auf jeden Fall. Da kommen auch ein Paar Zeichen zurück. :smiley:

Ich hoffe hier kann mir einer Helfen. Ich fange quasi bei Null an. :frowning:

Danke Gruß
Oliver

Protokoll:

Hallo Oliver,
>
> die Steuerung der WP verwendet ein an DIN angelehntes Protokoll, wie
> es in ähnlicher Form beispielsweise auch bei einigen elektronischen
> Kassen benutzt wird.
>
> Zur Kommunikation mit einem PC benötigst Du ein NULL-Modem-Kabel. Als
> Kommunikationsparameter funktioniert bei mir 9600 Bd; 8 bit, 1 Stop
> Bit, Parity Nein
>
> Protokoll
> - PC->WPP ::= DLE STX <KOMMANDO> DLE ETX <CRC>
> - WPP->PC ::= ‚FF‘ DLE STX <DATEN> DLE ETX <CRC> ‚FF‘
>
> KOMMANDO ::= <CMD> <ADR> <ANZ>
>
> CMD ::= ‚01 15‘ - SPEICHER LESEN
> ADR ::= XXXX -
> ANZ ::= XXXX -
> DATEN ::= <GELESEN>
> GELESEN ::= ‚00 17‘ XX…XX - ANZ Antwortbytes
>
> CRC ::= CRC == Standard CRC-16
> über <DATEN>|<KOMMANDO> mit Polynom=8005 init=0 lsb=0;
> keine sonstige Verknüpfung, wie XOR
>
> In <DATEN>|<KOMMANDO> eventuell vorkommende DLE Zeichen werden zur
> Wahrung der Codetransparenz verdoppelt.
>
> Beispiel um die Version zu lesen
> Senden von
> 10 02 01 15 00 00 00 02 10 03 FE 17
> um ab Adresse 0000 zwei Datenbytes zu lesen (Version)
>
> Die WP antwortet mit
> FF 10 02 00 17 1F BE 10 03 C0 AB FF
>
> Die zwei Byte 1F26 geben in das Dezimalsystem die Version an (8126).
>
> Nachfolgend habe ich Dir die bislang von mir eruierten
> Adressenbelegung aufgelistet.
>
> Die 4 Byte Temperaturen bzw. Drücke sind als IEEE FLOAT Werte
> repräsentiert, die kannst Du etwa in VC++ problemlos darstellen.
> Ich hoffe, hier bei der Analyse keine Fehler gemacht zu haben, Basis
> ist meine WP vom angegebenen Typ. Bei anderen Typen sind die Adressen
> möglicherweise anders.
>
> Beschreibung Adresse Anzahl
> ================================================
> „Version“, { 0x0000, 0x0002 }
> „LastModDate“, { 0x0002, 0x0003 }
> „CopyEinAusStufen“, { 0x0005, 0x0003 }
> „TempAußen“, { 0x0008, 0x0004 }
> „TempAußen24h“, { 0x000C, 0x0004 }
> „TempAußen1h“, { 0x0010, 0x0004 }
> „TempRücklaufSoll“, { 0x0014, 0x0004 }
> „TempRücklauf“, { 0x0018, 0x0004 }
> „TempVorlauf“, { 0x001C, 0x0004 }
> „TempWWSoll“, { 0x0020, 0x0004 }
> „TempWW“, { 0x0024, 0x0004 }
> „TempRaum“, { 0x0028, 0x0004 }
> „TempRaumMittel“, { 0x002C, 0x0004 }
> „TempWQEin“, { 0x0030, 0x0004 }
> „TempWQAus“, { 0x0034, 0x0004 }
> „TempVerdampfer“, { 0x0038, 0x0004 }
> „TempKondensator“, { 0x003C, 0x0004 }
> „TempSaugleitung“, { 0x0040, 0x0004 }
> „TempFrei“, { 0x0044, 0x0004 }
> „WPDruckVerdampfer“, { 0x0048, 0x0004 }
> „WPDruckKondensator“, { 0x004C, 0x0004 }
> „TempHeizRL_Soll“, { 0x0050, 0x0004 }
> „TempHeizRL“, { 0x0054, 0x0004 }
> „TempKühlRL_Soll“, { 0x0058, 0x0004 }
> „TempKühlRL“, { 0x005C, 0x0004 }
> „TempWW“, { 0x0060, 0x0004 }
> „ST52Zeit“, { 0x0064, 0x0003 }
> „ST52Datum“, { 0x0067, 0x0003 }
> „BetriebsstundenKompressor“, { 0x006A, 0x0004 }
> „BetriebsstundenHeizPumpe“, { 0x006E, 0x0004 }
> „BetriebsstundenWWPumpe“, { 0x0072, 0x0004 }
> „BetriebsstundenSt2“, { 0x0076, 0x0004 }
> „BetriebsstdMessZeitKompr“, { 0x007A, 0x0003 }
> „BetriebsstdMessDatumKompr“, { 0x007D, 0x0003 }
> „BetriebsstdMessZeitWW“, { 0x0080, 0x0003 }
> „BetriebsstdMessDatumWW“, { 0x0083, 0x0003 }
> „BetriebsstdResetKomp“, { 0x0086, 0x0001 }
> „BetriebsstdResetWWp“, { 0x0087, 0x0001 }
> „Kennwort“, { 0x0088, 0x0001 }
> „Werkseinstellungen“, { 0x0089, 0x0001 }
> „ResetWPumpe“, { 0x008A, 0x0001 }
> „ST52CRC“, { 0x008B, 0x0002 }
> „ST52Start“, { 0x008D, 0x0001 }
> „DisplayZeile1“, { 0x008E, 0x0002 }
> „DisplayZeile2“, { 0x0090, 0x0001 }
> „AusfallZeit“, { 0x0091, 0x0003 }
> „AusfallDatum“, { 0x0094, 0x0003 }
> „AusfallBetrZustände“, { 0x0097, 0x0001 }
> „AusfallDoBuffer“, { 0x0098, 0x0001 }
> „AusfallDiBuffer“, { 0x0099, 0x0001 }
> „AusfallAiError“, { 0x009A, 0x0001 }
> „AusfallAiDi“, { 0x009B, 0x0001 }
> „AusfallAiTempAußen“, { 0x009C, 0x0004 }
> „AusfallTempWQein“, { 0x00A0, 0x0004 }
>
> Ich hoffe, das hilft Dir schon mal weiter.
> Falls Du mal rauskriegen solltest, wie man Werte ändert, also die WP
> fernsteuern kann, wäre ich für einen Hinweis dankbar.
>
>
>
> Gruß
>
> Harald
>

Hallo,
mit ein bisschen Arbeit sollte das aber zu schaffen sein:

  1. kommt auf die Anfrage an. Die (reinen) Daten sind entweder binär oder Float. Die muss man natürlich erstmal aus dem Protokoll herausschälen
  2. siehe z.B. http://www.mikrocontroller.net/articles/CRC16
  3. Die Bytes solltem mit chr($byte) an den com-Port geschickt und mit Ord($char) wieder ausgelesen werden. 16Bit-Werte sind entsprechend zu behandeln.
  4. siehe erstens. Die Daten sind in ein Protokoll(wie ein Umschlag) verpackt, das man erst öffnen muss.
  5. kann man mit vorsehen, ist aber bestimmt kein muss. Freilich darf man die CRC-Bytes nicht beim Auslesen vergessen.

OK, das wird ein paar stunden arbeit kosten, aber ich denke, so kannst Du erstmal einsteigen.

Tommi

Hallo Tommi,

mein größtes Problem ist die CRC16 Berechnng diese kann ich nicht nachvolziehen, brauche sie aber um den String zu schicken. Wenn ich den auf anderen Online Seiten nachrechnen lasse kommt immer was anderes raus. Ausserdem finde ich keine Berechnung für den CRC16 mit Polynom in php.

Gruß

Oliver

Hallo Oli

schau doch mal bei den PHP-Funktionen.

http://de3.php.net/manual/de/function.crc32.php

Da schreibt einer was weiter unten zum Thema „crc16“.
Ist auch ein Skript dabei. Vielleicht hilft dir das ja.

Gruß
Christian

Hallo Christian,

genau das habe ich mir auch schon angesehen und getestet, konnt aber nicht die Checksumme aus dem Beispiel ermitteln.

Gruß
Oliver

Du solltest das wirklich mal nachfragen.
Bei mir klappt es auch nicht:


<?
function crc16($data) {
	$poly=0x8005;
	$start=0;
	$crc = $start;
   	foreach ($data as $z) {
        $crc = $crc ^ $z;
        for ($y = 0; $y < 8; $y++) {
            if (($crc & 0x0001) == 0x0001) {
                $crc = (($crc >> 1) ^ $poly);
            } else { 
            	$crc = $crc >> 1; 
            }
        }
   	}
   	return $crc;
} 

//Beispiel command 
$input=array(0x10,0x02,0x01, 0x15, 0x00, 0x00, 0x00, 0x02,0x10,0x03);
//Kopf und Fuss nicht mit berechnen
$check=array_slice($input,2,sizeof($input)-4);
$crc=crc16($check);
print "crc16=".dechex($crc);

//ergibt 0x184(388)
 
?>

Das Bespiel ergibt 84 01 als checksum, nicht FE 17 wie beschrieben.

Tommi

Hallo tommi,

besten dank, aber da bekomme ich eh keine andwort.

Hat hier evtl. noch eine ein Script zur CRC16 berechnung mit Polynom.

@setiner, Paresy: ist euch das nicht schon mal untergekommen ?

Danke
Gruß
Oliver

Lese doch mal hier. Ich denke, da bist Du schon ein ganzes Stück weit. Das CRC-Problem scheint dort schon jemand gelöst zu haben.

Tommi

Hallo Tommi,

genau da habe ich das Protokoll ja her. Nur hat er das wohl in C geschrieben. Naja vieleicht frag ich ihn mal ob er mir die sourcen gibt.
Danke
Gruß
Oliver

Hallo zusammen,

ich habe meine Waterkotte an meinen PC (Server) angeschlossen. Leider habe ich auch das Problem mit dem CRC. Der oben angesprochene C-Quelltext von Joland enthält die CRC hard codiert.

Gibt es bei Euch hier schon Neuigkeiten? Ich würde die restlichen Werte der WP auch gerne abfragen ohne die CRC aus dem DemoProgramm sniffen und dann hard eintragen zu müssen.

Ich implementiere übrigens in Java.

Das sind die Werte meiner Anlage.
Wen es interssiert: www.ai1.schnier.com/WPMonitor.php

Viele Grüße
SirOlix

Hallo zusammen,

ich habe mir das Programm JACKSUM geladen und ausprobiert.

Wenn man an den Parametern ein wenig feilt, kommt bei
./jacksum -q 011500000002 -X -a crc:16,8005,0000,false,false,0
tatsächlich FE17 raus.

Ich weiss nicht, ob man in PHP ein Shellscript aufrufen kann. Aber vielleicht hilft es ja weiter.

Die Software gibt es hier: http://www.jonelo.de/java/index.html

Viele Grüße
SirOlix

Mit dem Javasource von „jacksum“ (thanks @SirOlix 4 link) habe ich den nachfolgenden PHP crc16() erstellt. Ergebnis ist 0xfe17.


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : crc16final.ips.php
Trigger  : 
Interval : 
*/
 
function crc16($data)
{
   $table = array();
   $poly = 0x8005;
   $width = 16;
   $maskAllBits = 0;
   $topBit = 1 << ($width - 1);
   $maskAllBits = ~0 >> (64-$width);
 
   // 1. create table
   for ($dividend = 0; $dividend < 256; $dividend++)
   {
      $remainder = $dividend;
      $remainder <<= ($width - 8);
      for ($bit = 0; $bit < 8; $bit++)
      {
                // try to divide the current data bit
                $mybit = (($remainder & $topBit) != 0);
                $remainder <<= 1;
                if ($mybit)
                {
                    $remainder ^= $poly;
                }
            }
      $table[$dividend] = ($remainder & $maskAllBits);
   }
 
   // 2. calculate checksum
   $value = 0;
   foreach ($data as $b)
   {
       $index = ((($value >> ($width-8)) ^ $b) & 0xff);
       $value <<= 8;
       $value ^= ($table[$index]);
   }
   $value &= 0xffff;
   return($value);
}
 
//Beispiel command
$input=array(0x10,0x02,0x01, 0x15, 0x00, 0x00, 0x00, 0x02,0x10,0x03);
//Kopf und Fuss nicht mit berechnen
$check=array_slice($input,2,sizeof($input)-4);
$crc=crc16($check);
print "crc16=".dechex($crc);
 
//ergibt: 0xfe17
 
?>

Viel Spass,
Olli

Hallo,

ein ganz ähnliches Problem hatte thoweiss.

Die selbe Funktion GetCRC16(…), die ich ihm vorgeschlagen habe hilft auch hier. Es ist lediglich darauf zu achten, dass sie passend initialisiert wird:
Das Initialisierungsregister $CRCinit wird mit 0 vorbelegt.
Für das Ploynom $CRCpoly wird 0x8005 verwendet.

$strToSend = "\x01\x15\x00\x00\x00\x02";            // zu sendender Datenstring
$CRC16 = GetCRC16($strToSend. "\x00\x00");          // String um die Platzhalter für die Checksumme erweitern
echo "Checksum 1: ". sprintf("%X", $CRC16). "
"; // ergibt FE17


$strReceived = "\x00\x17\x1f\xbe\xc0\xab";          // empfangener Datenstring einschließlich Checksumme
$CRC16 = GetCRC16($strReceived);
echo "Checksum 2: ". sprintf("%X", $CRC16). "
"; // ergibt 0


function GetCRC16($s)
{
  $CRCinit = 0x0000;
  $CRCpoly = 0x8005;
 
  $CRCreg = $CRCinit << 8;
  $PLYreg = $CRCpoly << 8;
  for ($cp=0; $cp<strlen($s); $cp++)
  {
    $CRCreg |= ord($s[$cp]);
    for ($bp=0; $bp<8; $bp++)
    {
      $CRCreg <<= 1;
      if ($CRCreg & 0x1000000) $CRCreg ^= $PLYreg;
      $CRCreg &= 0xffffff;
    }
  }
  return $CRCreg >> 8;
}

Wichtig ist außerdem, dass nur die reinen Datenbytes, also ohne die Start und Stop-Sequenzen verwendet werden.

Auch hier gilt, dass ein korrekt empfangenes Datenpaket einschließlich empfangener Checksumme eine berechnete Checksumme von 0 ergibt.

Gruß
HJH

Hallo,

der Winter kehrt ein und der Nachwuchs ist langsam etwas älter geworden. Nun kann ich mich wieder diesem Problem annehmen.
Erstmal vielen Dank an Olli und HJH für die CRC Berechnung. Vielen Danke auch an Steiner für den Link zum Serial Sniffer. Ich habe das jetzt mal so weit umgesetzt. Ich kann nun die Befehel abschicken und bekomme meine Variable gefüllt. Jetzt kommt ein neues Problem.

  1. Wie Rechne ich die Daten um. Ich bekomme zum Beispiel HEX: 88 87 37ˆ‡ 42 für eine Temperatur zurück. Diese wird xx,x als format haben. wie rechne ich das um.

  2. Wie kann ich bei der CutChar Instanz die Daten zwischen STX <DATEN> DLE ETX abschneiden. Ich bekomme das nur zwischen STX und ETX hin aber DLE muss ja auch weg. Den CRC check schenk ich mir wohl, oder meint Ihr ich sollte den berücksichtigen.

  3. Wie lange muss ich wohl warten bevor ich das Ergebnis weiter verwende ? Auf der RS232 habe ich ja auch eine Latenz. Wie macht Ihr das mit dem Auswerten der gelesenen RS232 Daten alles in einem Script und ein Sleep oder on Update ?

Für Anregungen und Hilfestellungen wäre ich sehr dankbar.

Gruß
Oliver

Hallo Oliver,

Otto(Bauhaus) hatte für mich mal ein Script veröffentlich.

Den Link hab ich grad nicht ist aber iregdwo hier.

Ausschnitte dasraus


$buffer_temperatur1 = array();
$buffer_temperatur2 = array();
$buffer_temperatur3 = array();
 //$buffer_feuchte = array();


 $separator_temperatur1 = "V01";
 $separator_temperatur2 = "V02";
 $separator_temperatur3 = "V03";

 //$separator_feuchte = "V02";

 $rs232bus = GetValueString ("Temp_Sensoren_Hygrosens");
 $buffer_temperatur1 = explode ($separator_temperatur1, $rs232bus, 2);
 $buffer_temperatur2 = explode ($separator_temperatur2, $rs232bus, 2);
 $buffer_temperatur3 = explode ($separator_temperatur3, $rs232bus, 2);
 //$buffer_feuchte = explode ($separator_feuchte, $rs232bus, 2);

 $temperatur1 = $buffer_temperatur1[1];
 $temperatur2 = $buffer_temperatur2[1];
 $temperatur3 = $buffer_temperatur3[1];
 //$feuchte = $buffer_feuchte[1];

 $temperatur1 = (float) hexdec(substr ($temperatur1, 0, 4))/100;
 $temperatur2 = (float) hexdec(substr ($temperatur2, 0, 4))/100;
 $temperatur3 = (float) hexdec(substr ($temperatur3, 0, 4))/100;
 //$feuchte = (float) hexdec(substr ($feuchte, 0, 4))/200;

 // Export Variable nach IPSYMCON
 SetValueFloat ("heizung_vorlauf", $temperatur1);
 SetValueFloat ("heizung_ruecklauf", $temperatur2);
 SetValueFloat ("kaltwasser", $temperatur3);
 //SetValueFloat ("HYGROSENS_TempFeuchte_FEUCHTE", $feuchte);

Ich habe diese erfolgreich für andere Sachen mit entsprechender Anpassung umgesetzt.

Hier auch noch mal ein Link. PHP Mathematik, mathematische Berechungen und Funktionen

Beantwortet zwar nicht alle deine Fragen, hoffe aber es hilft ein bisschen weiter.

Hier noch mal was von mir.



 $buffer_temperatur1 = array();
 $buffer_temperatur2 = array();
 $buffer_temperatur3 = array();



 $separator_temperatur1 = "|V1|";
 $separator_temperatur2 = "|D1|";
 $separator_temperatur3 = "|D2|";



 $XBee = GetValueString ("FB_Eingang");
 $buffer_temperatur1 = explode ($separator_temperatur1, $XBee, 2);
 $buffer_temperatur2 = explode ($separator_temperatur2, $XBee, 2);
 $buffer_temperatur3 = explode ($separator_temperatur3, $XBee, 2);


 $temperatur1 = $buffer_temperatur1[1];
 $temperatur2 = $buffer_temperatur2[1];
 $temperatur3 = $buffer_temperatur3[1];


 $temperatur1 = (float) $temperatur1;
 $temperatur2 = (float) $temperatur2;
 //$temperatur2 = (float) hexdec(substr ($temperatur2, 0, 4))/100;
 $temperatur3 = (float) $temperatur3;



 SetValueFloat ("V1", $temperatur1);
 SetValueFloat ("D1", $temperatur2);
 SetValueFloat ("D2", $temperatur3);

?>

jenachdem wie die Daten ankommen

Edit: hier isser, der Link http://www.ipsymcon.de/forum/showthread.php?t=2820&highlight=hygrosens

Danke RWN,

leide rkann ich das so wohl nicht adaptieren, da ich ja keine seperatoren habe.
Zur Zeit habe ich das Problem die reinen Daten im HEX Format aus dem String zu extrahieren. Hat da vieleicht noch einer ein Beispiel wie ich die Daten zwischen DLE STX 00 17 und DLE ETX extrahieren kann.

Denk und Gruß
Oliver

Hallo Oliver,

kannst Du mal einen vollständigen Daten-String als Beispiel nennen?
Ich kann das Problem nämlich nicht so recht nachvollziehen.

Gruß
HJH

Hallo HJH,

laut Serial Sniffer antwortet die WP z.B. mit FF 10 02 00 17 1F BE 10 03 C0 AB FF. Die Nutzdaten Liegen jetzt hinter 0017 und vor 1003. Das ist immer so. Wobei die Nutzdaten zwischen 1 und 255 Bytes lang sein können.

Wie im ersten Beitrag schon beschireben ergeben diese 1FBE dann 8126. Das ist auch richtig. Mein Problem ist jetzt die Daten aus dem String der aus der Com Instanz in die Variable geschrieben wird zu extrahieren.
Ich habe hier das Problem vom String in Hex zu Wandeln und dann ein substr daraus zu bauen. Ich glaube mein Ansatz ist da falsch und man müsste das ganze vieleicht in ein Array schreiben. Nur wie … Ich kann den String aus der Variable übrigens nicht in seinem Format pasten der er dann nicht mehr dem original entspricht.

Danke Gruß
Oliver

Hallo Oliver,

da der Datenstring immer mit der Checksumme endet, und diese natürlich immer eine andere ist, kann man CutChars hier nicht verwenden. Du musst also die Information „zu Fuß“ extrahieren.

Im Prinzip würde ich so vorgehen:
Da die Nutzdaten von der Sequenz DLE, STX eingeleitet werden, würde ich den String an dieser Stelle auftrennen:

$split1 = explode("\x10\02", $data); // $data ist die Register Variable

Das Array $split1 enthält nun als zweites Element die Nutzdaten, die Endsequenz und die Checksumme.

Dieses wird nun weiter aufgetrennt, und zwar nach der Endsequenz DLE, ETX:

$split2 = explode("\x10\x03", $split1[1]); // zweites Element auftrennen

Das Array $split2 enthält nun als erstes Element die Nutzdaten und als zweites Element die Checksumme.

Zur Überprüfung der Checksumme müssen diese beiden Elemente als einzelner String an die Checksummen-Funktion übergeben werden.

$result = GetCRC16($split2[0]. $split2[1]);

Bei fehlerfreier Übertragung muss das Ergebnis $result 0 (Null) ergeben.

Nun kann aus den Nutzdaten der interessierende Wert extrahiert werden. Da ich den Inhalt und den Aufbau der Nutzdaten nicht kenne, kann es sein, dass dieser mit der PHP-Funktion substr(…) noch feiner aufgelöst werden muss. Im Beispiel gehe ich von einer 2 Byte großen Hex-Zahl aus:

sscanf($split2[0], "%2X", $value);

Die Variable $value sollte nun den übermittelten Wert enthalten.

Ich kann die Funktion der aufgeführten Skriptfragmente nicht testen. Es kann also sein, dass Du noch ein wenig experimentieren musst. :frowning:

Gruß
HJH

Hallo HJH,

vielen dank die Darstellung \x10\x02 war der bringer. Das hatte ich gesucht.
Ich bin jetzt so weit, das ich Daten erhalte, jede Minute Polle und auch die WP schalten kann.

Nun habe ich aber leider noch ein Problem mit dem RS232 Datenaustausch.

Wenn ich z.B. folgende Anfrage stelle:

002735: 28.09.2007 16:03:22.199 +59.657

FF 10 02 01 15 00 00 00 F3 10 03 7C 32 FF ÿ…ó…|2ÿ

Wir diese Bei nutzung von IPS so beantwortet:

FF 10 02 00 17 1F BE 08 08 05 04 02 1F CFÿ…¾…Ï
002987: 28.09.2007 16:04:22.278 +0.0

0D 82 41 98 CE 59 41 52 87 82 41 E4 52 B8 .‚A˜ÎYAR‡‚AäR¸
002999: 28.09.2007 16:04:22.293 +0.0

41 3A C0 BD 41 B4 10 10 C3 41 00 00 48 42 A:À½A´…ÃA…HB
003011: 28.09.2007 16:04:22.309 +0.0

0F 0F 37 42 52 38 DE C2 00 00 70 41 81 A5 …7BR8ÞÂ…pA¥
003023: 28.09.2007 16:04:22.325 +0.0

A5 41 3E 81 9C 41 AA 1F AD 41 CA 86 BD 41 ¥A>œAª.*Aʆ½A
003035: 28.09.2007 16:04:22.356 +0.0

00 00 A0 41 00 00 00 00 25 52 01 41 68 C0 … A…%R.AhÀ
003047: 28.09.2007 16:04:22.356 +0.0

23 41 E4 52 B8 41 3A C0 BD 41 00 00 B0 41 #AäR¸A:À½A…°A
003059: 28.09.2007 16:04:22.387 +0.0

3A C0 BD 41 0F 0F 37 42 09 04 10 10 1C 09 :À½A…7B…
003071: 28.09.2007 16:04:22.403 +0.0

07 6B 1A 2D 45 BD 74 FF 44 B3 F7 34 44 55 .k.-E½tÿD³÷4DU
003083: 28.09.2007 16:04:22.418 +0.0

9A 45 43 00 2D 0E 18 0A 05 07 2D 0E 18 0A šEC.-…-…
003095: 28.09.2007 16:04:22.434 +0.0

05 00 00 00 00 00 FD BB 00 00 07 09 00 00 …ý»…
003107: 28.09.2007 16:04:22.465 +0.0

00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
003119: 28.09.2007 16:04:22.465 +0.0

00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
003131: 28.09.2007 16:04:22.497 +0.0

00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
003143: 28.09.2007 16:04:22.512 +0.0

00 00 00 00 00 00 00 00 00 00 00 00 00 1A …
003155: 28.09.2007 16:04:22.528 +0.0

C2 03 00 00 00 20 00 00 00 00 00 00 00 00 Â… …
003167: 28.09.2007 16:04:22.543 +0.0

00 00 00 00 00 00 40 08 08 00 00 00 00 00 …@…
003179: 28.09.2007 16:04:22.575 +0.0

00 00 01 2A 01 08 01 2A 00 28 35 9C 10 03 A9 A5 ….(5œ…©¥

Wenn ich aber die Original Software nutze, erhalte ich folgende Antwort:
013666: 28.09.2007 16:15:34.056 +0.0

FF 10 02 00 17 1F BE 08 08 05 04 02 1F 64 AA 81 ÿ…¾…dª
41 98 CE 59 41 7F 62 82 41 FE 5A B8 41 58 77 BD A˜ÎYAb‚AþZ¸AXw½
41 4A 41 C3 41 00 00 48 42 F7 F6 36 42 52 38 DE AJAÃA…HB÷ö6BR8Þ
C2 00 00 70 41 C5 68 A5 41 FC 31 9D 41 F8 EA AD Â…pAÅh¥Aü1Aøê*
41 6C 23 BD 41 00 00 A0 41 00 00 00 00 C9 C0 01 Al#½A… A…ÉÀ.
41 F0 82 23 41 FE 5A B8 41 58 77 BD 41 00 00 B0 Að‚#AþZ¸AXw½A…°
41 58 77 BD 41 F7 F6 36 42 14 0F 10 10 1C 09 07 AXw½A÷ö6B…
6B 1A 2D 45 BD 74 FF 44 B3 F7 34 44 55 9A 45 43 k.-E½tÿD³÷4DUšEC
00 2D 0E 18 0A 05 07 2D 0E 18 0A 05 00 00 00 00 .-…-…
00 FD BB 00 00 07 09 00 00 00 00 00 00 00 00 00 .ý»…
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
1A CB 03 00 00 00 20 00 00 00 00 00 00 00 00 00 .Ë… …
00 00 00 00 00 40 08 08 00 00 00 00 00 00 00 01 …@…
2A 01 08 01 2A 00 28 35 9C 10 03 36 A6 FF .(5œ…6¦ÿ

Ich glaube das liegt an der Einstellung der COM. Diese ist aber gleich eigestellt.
Ich erhalte somit oft Übertragungsfehler die ich per Script (CRC and Value Check ist beim Schalten aber nicht die Lösung).
abfangen muss.

Hat da einer ne Lösung für ?

Danke Gruß
Oliver