edip screenshot mit IPS

Hallo

wollte eigentlich nur „schnell“ nen Screenshot von meinem edip haben um ne Frage verständlicher zu formulieren, aber da ich zu faul war :smiley: das edip abzufotografieren dachte ich mir machs doch schnell mal mit IPS.
Naja schnell wars nich aber immerhin funktionierts jetzt ganz gut.

Der Befehl den man ans edip senden muss ist

COMPort_SendText(46080 /*[Serial Port]*/,chr(27)."UH".chr(10).chr(15).chr(50).chr(55)); //daten an edip übertragen

wobei 10,15 die erste Ecke ist und 50,55 die zweite Ecke(immer x,y) ist.

Soweit so klar.
Das edip antwortet dann mit ESC UL 40,40 und dann die BHL daten.
Das Auslesen übernimmt dieses Skript für die Registervariable, wobei Ihr natürlich nur die Caseanweisung für U(85) braucht und sie bei eurem Programm einfügen müsst.

$id_Register = 15719 /*[edip\Register Variable]*/;
$buf = RegVar_GetBuffer($id_Register); //Puffer einlesen
if ($IPS_SENDER == "RegisterVariable")
$buf .=  $IPS_VALUE; // neuen Wert hinzufügen
$id = ord(substr($buf,0,1)); //ersten wert auslesen
print $id."  ";

if ($id == "27")  //27 = ESC
	{
	switch (ord(substr($buf,1,1)))
	{
	case "85":
	$breite = ord(substr($buf,5,1)); //breite der blh datei
	$hoch =ord(substr($buf,6,1)); //höhe
	$max = intval(($breite+7)/8)*$hoch; //Anzahl der Bytes (formel ausm edip handbuch)
	if ((strlen($buf))>($max+5))  //Schauen ob alles empfangen wurde 
		{
		$buf= substr($buf,5,($max+2)); //ESC UL und startwerte abziehen

		$Pfad = "c:/test1.blh"; //Dateiname
		unlink($Pfad); //alte datei löschen
	  $Attribut = "ab";
     $open = fopen($Pfad,$Attribut);          //Öffnen
  		fwrite($open,$buf);                   //schreiben
   	fclose($open);                           //schließen
	   RegVar_SetBuffer($id_Register,"");  // Puffer löschen
		IPS_SetScriptTimer($IPS_SELF,0);
  		}
	else
		{
		RegVar_SetBuffer($id_Register,$buf); // Puffer setzten
       }
	break;
	case "65": //A befehle auslesen
   if ((strlen($buf))>3)  //Schauen ob alles empfangen wurde
		{
		$id = ord(substr($buf,3,1)); // 4 zahl ist die NR.
		print "erfolgreich ".$id;
		setvalue(35128 /*[edip\Taste]*/,$id);
		if ((strlen($buf))>4)
		{
		   RegVar_SetBuffer($id_Register,substr($buf,4,10));
		   IPS_SetScriptTimer($IPS_SELF,2);
		}
		else
		{
		RegVar_SetBuffer($id_Register,"");  // Puffer löschen
		IPS_SetScriptTimer($IPS_SELF,0);
		}
		}
	else
		{
		RegVar_SetBuffer($id_Register,$buf); // Puffer setzten
		IPS_SetScriptTimer($IPS_SELF,2);
      print "nochnicht1";
      }
	break;
   case "66": //Bargrafen auslesen

		if ((strlen($buf))>4)  //Schauen ob alles empfangen wurde
		{
		$id = ord(substr($buf,3,1)); // 4 zahl ist die NR.
		$wert = ord(substr($buf,4,1));
		print "erfolgreich ".$id." Wert: ".$wert;
		setvalue(19564 /*[edip\Schieber]*/,$id);
		setvalue(51784 /*[edip\Wert]*/,$wert);
		if ((strlen($buf))>5)
		{   RegVar_SetBuffer($id_Register,substr($buf,5,20));
		   IPS_SetScriptTimer($IPS_SELF,2);
		}
		else
		RegVar_SetBuffer($id_Register,"");  // Puffer löschen
		}
		else
		{
		RegVar_SetBuffer($id_Register,$buf); // Puffer setzten
      IPS_SetScriptTimer($IPS_SELF,2);
		print "nochnicht2";
      }
	break;
   default:
	if ((strlen($buf))==1)
		{RegVar_SetBuffer($id_Register,$buf); // Puffer setzten
		print "nur 1 empfangen";
		}
	else
		{
		RegVar_SetBuffer($id_Register,""); // Puffer rücksetzten
		IPS_SetScriptTimer($IPS_SELF,0);
      print "Fehler";
      }
	}
	}
else     // Sonstige Taste gesendet
	{ if ((strlen($buf))>1)
		{
		 RegVar_SetBuffer($id_Register,"");  // Puffer löschen
		 IPS_SetScriptTimer($IPS_SELF,0);
		print "Overflow";

		}
setvalue(38542 /*[edip\Befehl]*/,$id);
IPS_SetScriptTimer($IPS_SELF,0);
}

Manchmal klappts nicht auf Anhieb , denn wenn nur ein byte fehlt/zuviel ist öffnet der Bitmapeditor vom edip die Datei nicht mehr. Deswegen auch der

substr($buf,5,($max+2));

$max anzahl der Bytes plus je ein byte für Breite und Höhe.
Dann einfach nochmal probieren oder IPS die anzahl der bytes überprüfen lassen und wenn da was nicht passt dann nochmal senden.

Was ich noch nicht ausprobiert hab wie ich die BLH datei automatisch in bmp umwandle, aber den arbeitsschritt kann man ja noch von Hand machen. (oder hat jemand n Tip dazu?)

Vielleicht kanns ja jemand gebrauchen z.B. um den Zeichenbereich auszulesen und abzuspeichern.

Gruß Jannis