RegVar Leeren

Hi zusammen,
ich hab mal gesucht, es aber nicht gefunden.
Hintergrund, ich funke gerade mit meiner Wärmepumpe über den Com-Port. Die Daten von der Pumpe schreibe ich in eine Registervariable. Die Preisfrage nun, da steht soviel krempel drin, von jedem auslesen… wie bekomm ich diese Leer?

Gruß

Kai

RegVar_SetBuffer(xxxxx, „“);

Hi Rainer,
danke dir, also die Variable ist erstmal wieder leer.
Allerdings kommt da ein Mega langer String von der Wärmepumpe den ich 1:1 in eine normale Stringvariable geschrieben hab. Kann es sein, dass ein normaler String nur anzahl X lang sein darf?

Gruß

Kai

So,
habe den String nun so in IPS drin, wie es auch im Protokoll steht
Kostenloser Bilder Upload Service - Gratis Bilder hochladen / uploaden ohne Anmeldung

Das Problem ist, dass die Daten in Etappen in die Stringvariable rein kommen, sind ca. 15 Lesevorgänge wenn ich das richtig gesehen habe. Ich wollte nun prüfen, wenn die Variable 10 Sekunden nicht mehr verändert wurde, dann wollte ich den String auseinander nehmen in die einzelnen Komponenten und anschließend die RegVar und auch genauso den String wieder leeren. Ist der Denkansatz vernünftig, oder sollte ich das anders angehen?

Gruß

Kai

RegisterVariable - IP-Symcon :: Automatisierungssoftware

Hi Rainer,
aus der Registervariable hatte ich den String zu dem Zeitpunkt schon raus.
Thema ist auch abgehakt und die Werte purzeln schön nach und nach rein :slight_smile:
Nun ist probieren angesagt.

Generell für alle mit Luxtronic Steuerung:
COM1 mit der Wärmepumpensteuerung 1:1 verbinden. In der Pumpe auf Standartnutzer stellen. Bei mir war „Terminal“ eingestellt.
„1800“ + CRLF zur Pumpe senden und dann abwarten was in der Registervariable
das sollte dann so aussehen wie in o.g. Protokoll. Dann muss man nur noch dern String zerpflücken (was die meiste Arbeit darstellt) fertig!

Bei Fragen…her damit :slight_smile:

Gruß

Kai

Ich hänge mich mal an diesen Tread.
Ich lese über den Com-Port Daten ein, die bekomme ich über das Debug-Fenster lesbar rein.

Dann schreibt mein Script diese Daten aus der Reg-Variable in eine Stringvariable und leert dann die Reg-Variable.

Nur in der Strinvariable ist nix… kommen zwar Daten rein aber nix zu sehen.

Diese Script wird getriggert und läuft:

<?

$IPS_VALUE = RegVar_GetBuffer(39883 /*[Serial Port 11 für Touch\Register Variable für Touchscreen Tests]*/);
 SetValueString(58644 /*[TouchScreenKomplettMeldung]*/, $IPS_VALUE);

RegVar_SetBuffer(39883 /*[Serial Port 11 für Touch\Register Variable für Touchscreen Tests]*/,"");
COMPort_SendText(47927 /*[Serial Port 11 für Touch]*/,chr(0x01));
// $Touch_Meldung
?>

Was mache ich falsch? Ich wundere mich ein wenig über die RegisterVar-Eintragungen, im Terminalprogramm sind die Daten normal dargestellt.

IPS_RegVar.png

Moin Helmut,

warum nutzt Du nicht eines Von Horst erstellten Scripts dazu. Der Link ist 2 Post weiter oben. Dort siehst Du dann auch wie was funktioniert.

Hallo Helmut,
ich hatte ein ähnliches Problem. Hatte immer nur einen Teil in der Stringvariablen drin. Das hing damit zusammen, dass die Daten schön pö a pö kamen. und zum schluss hatte die Wärmepumpe noch eine Leerzeile geschickt, ergo, mein String war auch wieder leer.
Ich habs so gelöst, dass ich vor dem Sendebefehl die RegVar und String geleert habe. Dann sende ich zur Wärmepumpe und die Daten flattern so nach und nach rein. Diese hänge (wichtig, nicht nur in VAR schreiben) ich immer an den vorhandenen String an, und sieh an: Es ist komplett! Mein Auswertescript mach nach Auswertung dann den Speicher beider Variablen auch wieder leer.

Vielleicht ist das Problem bei dir ja ähnlich!

Gruß

Kai


Habe ich alles schon durch!

Ich sitze da schon einige Zeit dran, viel getestet!

Habe es trotzdem nochmal versucht.
War denn was an meinem geposteten Sachen falsch? Die Antwort hätte mir weiter geholfen.
Hier ein neues Script von mir: die Frage:
Warum schreibt er nicht in die Textvariable „Inhalt Touch als Text“, dem Comport schickt er den Befehl.
Wieso kommen die Daten so aneinander gereiht in der Registervariablen an? Reg-Variable

<?

// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist


if ($IPS_SENDER == "Register Variable für Touchscreen Tests")
{
COMPort_SendText(47927 /*[Serial Port 11 für Touch]*/,chr(0x01));
SetValueString(41542 /*[Inhalt Touch als Text]*/, "Hallo");
  // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
  $data  = RegVar_GetBuffer(39883 /*[Serial Port 11 für Touch\Register Variable für Touchscreen Tests]*/);
  // neu empfangene Daten an $data anhängen
  $data .= $IPS_VALUE;

  // wenn $data mindestens 16 Zeichen lang ist
  if (strlen($data) >= 8)
  {
      // $data in Blöcke von bis zu 16 Zeichen zerlegen
      $datasets = str_split($data, 8);
      // $data leeren
      $data = "";

      // alle Datensätze durcharbeiten
      for ($i = 0; $i < count($datasets); $i++)
      {
         // vollständige Datensätze (genau 16 Zeichen lang) ausgeben
         if (strlen($datasets[$i]) == 8)
         {
          echo "empfangener Datensatz: ".$datasets[$i]."
";
         }
         else
         {
          // Unvollständige Datensätze in $data schreiben
          $data = $datasets[$i];
         }
      }
  }

  // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
 // RegVar_SetBuffer(39883 /*[Serial Port 11 für Touch\Register Variable für Touchscreen Tests]*/, $data);
//  Inhalt von $Data nach meiner Variablen schreiben
SetValueString(41542 /*[Inhalt Touch als Text]*/, $data);


}
?>

hast du mal versucht parallel zu schauen was die variable während dem Schreiben anzeigt.
Ich bin nämlich dort auch auf meinen Fehler gestoßen, weil die werte durch die variable scrollten und zum schluss doch nur ein leerer String da war.
Mach dir die Variable in einem Fensterchen auf und schau dir an was passiert. vielleicht ist es des Rätsels Lösung! Muss nicht, kann aber!!

Über Hyperterminal (was komischerweise grad net funzt) hab ich die Daten aber immer schön aufgelistet gehabt!

Gruß

Kai

Habe in die Variable was per Hand rein geschrieben, das kann ich immer noch lesen und auch die Zeit ist die Alte. Debugfenster, alle schon aufgemacht.
Im Meldungsfenter steht auch nichts drin.

if ($IPS_SENDER == "Register Variable für Touchscreen Tests") 

Mit der Eigenkreation kann IPS nichts anfangen.

Wenn schon

if ($IPS_SENDER == "Register Variable") 

Funktioniert aber, habe es trotzdem mal geändert, nix geholfen.

Habe aber festgestellt, dass die Variable auch nicht in der „Webfront“ erscheint, andere schon, die an ähnlicher Stelle stehen.

Rechner rauf und runter gefahren, nix geholfen.

Edit: neue Stringvariable angelegt, auch nix, vorhandene Stringvariable genommen (ist in Webfront zusehen), nix geholfen…

Es muss auf jeden Fall so sein:


   if ($IPS_SENDER == "RegisterVariable")  

paresy

Hatte ich probiert.

Gut, dann gebe ich jetzt auf, ev. schreibe ich den PIC, auf USB-HID statt RS232, um.
Dann muss ich einen Umsetzer mehr haben.

Hintergrund:

PIC-Controller haben entweder USB und RS232 oder CAN und RS232 aber nicht USB UND CAN-Bus.
soll(te) die Schnittstelle werden zum PC.

Oder ich lass es so, und nehme den PC mit nach Hamburg, ev. ist da noch Zeit mal in meinen Kram rein zu schauen.

Vielen Dank für eure Zeit mit meinem Problemchen

Edit:
Ein Bild,von mit Purebasic gemachtem Progrämmchen, was auf dem Quittierungsbutton drauf ist, das ist der Text, den ich mit dem PIC sende. Die Rechtschreibung ist um diese Uhrzeit nicht mehr so gut…:cool: