Ich erhalte keine Daten vom Scaner. Also keine ausgabe auf dem Bildschirm
Test Ausgabe Com Port mode com1: BAUD=9600 PARITY=E data=7 stop=1 xon=off; //COM Port Ansteuern
$fp = fopen („COM1:“, „r“); //Das COM Port zum schreiben Aufmachen
if (!$fp)
{
echo „Com Port nicht geöffnet.“; // beim nichtöffnen des COM Ports --> else
}
else
{
$word = „“ ;
while ($char = fgetc($fp))
{
switch ($char)
{
case 2: $word = „chr(2)“; /* beginn des wortes tue etwas */
break;
case 3: $word = „chr(3)“; /* ende des wortes tue etwas */
break;
default: $word .= $char;
break;
}
echo „$char:blush:word\n“;
}
//$word = substr($buffer,strpos($buffer,chr(2))+1,strpos($buffer,chr(3))-strpos($buffer,chr(2))-1); //Die erste und die Letzte Dezimal Zahl abschneiden
// echo $word; // Augabe am Bildschirm
}
// Das COM Port schließen
fclose ($fp) or die („Fehler beim schliessen der Com Verbindung“);
Test Ausgabe Com Port
`mode com1: BAUD=9600 PARITY=E data=7 stop=1 xon=off`; //COM Port Ansteuern
$fp = fopen ("COM1:", "r"); //Das COM Port zum schreiben Aufmachen
if (!$fp)
{
echo "Com Port nicht geöffnet."; // beim nichtöffnen des COM Ports --\> else
} else {
$word = "" ;
while ($char = fgetc($fp))
{
switch ($char)
{
case '2': $word = ""; /\* beginn des wortes, alles ab hier in $word sammeln \*/
break;
case '3': break 2; /\* fertig, raus aus dem while \*/
default : $word .= $char;
break;
}
echo "$char: $word
\n";flush(); // nur zu Debugzwecken
}
echo $word; // Augabe am Bildschirm
// Das COM Port schließen
fclose ($fp) or die ("Fehler beim schliessen der Com Verbindung");
}
?\>
was ist an diesem Script falsch?
etwas umständlich, die 2 und 3 zu speichern und dann wieder wegzuwerfen, so sollte es auch gehen
beim Lesen der 3 soll das while abgebrochen werden, daher das break 2;
das flush() sorgt dafür, das zwischengespeicherte Daten an den Browser gesendet werden
fclose ist bei fehlgeschlagenem fopen nicht sinnvoll
Ich erhalte keine Daten vom Scaner. Also keine ausgabe auf dem
Bildschirm
Naja, weil er bis zum Timeout wahrsheinlich in der while-Schleife wartet… aber zumindest wenn der Timeout-Fehler kommt, sollten die bis dahin empfangenen Zeichen ausgegeben werden.
Hast du eigentlich mal auf der Eingabeaufforderung versucht, ob überhaupt etwas ankommt ?
Noch mal ne Frage
Also
Du erhältst doch von deinem Scanner eine Zeichenfolge in der Art:
nutzlose Zeichen - 2 - Code - 3 - nutzlose Zeichen - 2 - Code …
wenn du diesen String in $buffer eingelesen hast, kannst du ja erst mal mit echo $buffer; prüfen, ob der String wirklich da ist. Und dann könntest du mit
Erklärung:
Mit explode() trennst du den String an den Dreien auf und speicherst die Einzelstrings in ein Array. Mit array_pop() verwirfst du den letzten Arraywert, denn nach der letzten Drei kommt nichts Wichtiges mehr. Mit strstr() suchst du in jedem Arraywert nach einer Zwei und lässt dir den Reststring gefolgt von einem Zeilenumbruch ausgeben.
danke erstmal für die Ausführliche Antwort. jetzt habe ich die aller letzte Frage . Wie kann ich die 2 Scripst die du mir geschickt hast sinnvoll miteinander verbinden. Ich habe das so gemacht:
Test Ausgabe Com Port
//-------------------------------------------------------------------//
Das ist schon richtig so, aber wenn am Com-Port keine Daten bereit stehen, dann hängt sich PHP bei fgets() auf. Vielleicht solltest du erst den Port öffnen, dann eine leere Schleife laufen lassen und dann den String lesen. In der Schleifenzeit musst du aber unbedingt scannen.
$fp = fopen ("COM1:", "r");
if (!$fp)
{
echo "Com Port nicht geöffnet.";
}
//-------------------------------------------------------------------//
else
{
$str1='';
$endtime = time() + 10;
while (time()
> -----------------------------------------------------------------------
>
>
>
> Test Ausgabe Com Port
>
>
> //-------------------------------------------------------------------//
>
>
> exec("mode com1: BAUD=9600 PARITY=E data=7 stop=1 xon=off");
>
> $fp = fopen ("COM1:", "r");
> if (!$fp)
> {
> echo "Com Port nicht geöffnet.";
> }
> //-------------------------------------------------------------------//
> else
> {
> $str1='';
> $endtime = time() + 10;
> while (time() \n";
> }
>
> }
>
> //-------------------------------------------------------------------//
>
> fclose ($fp) or die ("Fehler beim schliessen der Com
> Verbindung");
>
> ?\>
> //-------------------------------------------------------------------//
>
>
>
> -----------------------------------------------------------------------
>
> Das Script hängt sich irgendwo auf und ich bekomme keine
> Fehlermeldung. Was könnte das sein?
>
> Sorry wenn ich nerve.
>
> LG
> Michael