Hallo
bin gerade am Experimentieren mit edip und da wurde es mir irgendwann zu blöd immer alle Zahlen mit chr umrechnen zu lassen. Und wenn man mit zwei edips schafft, von denen einer mit xbee verbunden ist, der andere aber am comport hängt muss man jedes überarbeitete Script von Hand wieder neu anpassen.
Ausserdem verliert man bei den langen reihen leicht den Überblick. Jeder der mit edip schafft weiß was ich meine
RegVar_SendText(20289 /*[Diverse\Edip 1\Register Xbee]*/,chr(27)."AT".chr(0).chr(0).chr(120).chr(20).chr(154).chr(0)."$titel".chr(0)); //Titel anzeigen
Also hab ich mir gedacht bau dir doch ne edip Funktion. Gesagt getan.
Nach einigen Tests hat sich nun diese Funtion ergeben.
Somit sieht das Beispiel von oben nun so aus:
edip("AT,0,0,120,20,154,0,$titel");
Wichtig ist hier das man nur " benutzt. Bei ’ würde statt dem Inhalt von $titel wirklich $titel ausgegeben.
function edip($input)
{
$input=split(",",$input); //$input in ein array umwandeln
$daten = chr(27);//erstes Zeichen #
switch (strtoupper($input[0])) // Sonderfälle für AT und ZL wenn man "nur" eine Zahl ausgeben möchte
{
case "AT":
$daten .= "AT";
for ($i=1;$i<7;$i++)
{
$daten .= chr($input[$i]);
}
$daten .= vokal($input[7]);
$daten.=chr(0);
break;
case "AU":
$daten .= "AU";
for ($i=1;$i<6;$i++)
{
$daten .= chr($input[$i]);
}
$daten.=chr(0);
break;
case "AK":
$daten .= "AK";
for ($i=1;$i<7;$i++)
{
$daten .= chr($input[$i]);
}
$daten .= vokal($input[7]);
$daten.=chr(0);
break;
case "AJ":
$daten .= "AJ";
for ($i=1;$i<7;$i++)
{
$daten .= chr($input[$i]);
}
$daten .= vokal($input[7]);
$daten.=chr(0);
break;
case "ZL":
$daten .= "ZL".chr($input[1]).chr($input[2]).vokal($input[3]);
$daten.=chr(0);
break;
case "ZC":
$daten .= "ZC".chr($input[1]).chr($input[2]).vokal($input[3]);
$daten.=chr(0);
break;
case "ZR":
$daten .= "ZR".chr($input[1]).chr($input[2]).vokal($input[3]);
$daten.=chr(0);
break;
Default:
for ($i=0;$i<count($input);$i++)
{
if (is_numeric($input[$i])) // überprüfen ob Text oder Zahl
$daten .= chr($input[$i]);
else
$daten .= $input[$i];
}
break;
}
//echo $daten;
RegVar_SendText(20289 /*[Diverse\Edip 1\Register Xbee]*/,$daten); //daten ans edip senden über xbee
//COMPort_SendText(46080 /*[Objekt #46080 existiert nicht]*/,$daten); //daten an edip übertragen
}
function vokal($text)
{
$text = str_replace("Ä", "\x8E", $text);
$text = str_replace("ä", "\x84", $text);
$text = str_replace("Ö", "\x99", $text);
$text = str_replace("ö", "\x94", $text);
$text = str_replace("ü", "\x81", $text);
$text = str_replace("Ü", "\x9A", $text);
$text = str_replace("ß", "\xE1", $text);
return $text;
}
Musste leider für AT und ZL eine eigene Abfrage einbauen, da der Text wenn er nur aus einer Zahl besteht auch umgerechnet wird.
Hab erst gedacht das die Funktion grössere Programme langsamer macht, also schnell eine schleife, 100 Durchgänge, gebaut und einige Daten ans edip gesendet. Die Laufzeit ist bei AT und ZL bis auf ein paar ms gleich, erst bei BA und BR ist mir ein Unterschied von 100 ms aufgefallen. Aber damit kann ich gut leben, sende ja selten innerhalb von 10 Sekunden 400 Befehle ans edip.
Vielleicht kanns ja jemand brauchen.
Gruß Jannis