Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Problem bei Com Port auslesen.

Hallo zusammen.

Ich lese mit folgendem code meine Com 2 Schnitstelle aus.
<?
error_reporting(0);
ini_set("pfpro.defaulttimeout",5);


`mode com1: BAUD=9600 PARITY=N data=8 stop=1 xon=hw`;
$fp = fopen ("COM2:", "r");
if (!$fp) {
echo "Com Port nicht geöffnet.<br>";
} else {
$daten = fgets($fp,200);
echo "vor Exploade - $daten <br><br>";
$daten = preg_replace("/ +/", ';', $daten);
$daten = trim($daten);
$daten = ltrim($daten);

echo "vor Exploade2 - $daten <br><br>";
$daten2 = explode(";",$daten);



$datei = "com.txt";
$dateioeffnen = fopen($datei,'a+');
fwrite( $dateioeffnen, $daten);

}
fclose ($fp)or die ("Fehler beim schliessen der Com Verbindung");
?>

Das funktioniert eigentlich alles gut solange es daten zum abholen hat.
Sobald jedoch keine daten mehr vorhanden sind, bricht das script mit einer Fehlermeldung ab und der Port wird nicht mehr geschlossen. Ab dann wird beim nächsten Aufruf Permission Denied angegeben, weil der Port nicht geschlossen wurde.

Hat jemand ne Idee wie ich das verhindern kann?
Gibt es ne möglichkeit die Verbindung trotz Fehler zu beenden?

Vielen dank für eure Hilfe.

Hier gehts zum Orginal Eintrag "Problem bei Com Port auslesen." im Forum

Antworten

Zitat:
pascal79
, bricht das script mit einer Fehlermeldung ab und der Port wird nicht mehr geschlossen.
und die wäre?


2.

Es kommt nach 30 sekunden der normale timeout Fehler.


3.

Oder gibt es ne möglichkeit dem script zu sagen wenn er bei fgets nach 5 sekunden nichts bekommt gehe weiter zu fclose?
Damit wäre mein problem auch gelöst.


4.

SUchst du vielleicht
[doc]feof[/doc]


5.

Das funktioniert leider beim Com port irgendwie nicht.


6.

Lösungs Vorschläge:
1)
setze den Blocking Modus des COM Ports mit hilfe von stream_set_blocking auf false, dann sollte er bei fgets wwenn keine Daten vorhanden sind mit false zurückkommen.

2)
mittels stream_select kannst du Abfragen ob Daten zurverfügung stehen, und diese dann erst auslesen.

Außerdem:
Wieso setzt du die COM1 Paramter und Verwendest dann trotzdem COM2?


7.

Und wie setze ich die beiden Befehle ein?
Ich werde aus dem Manual nicht so ganz schlau.


8.

Hallo.

Ich habe es so probiert:

$cm = fopen ("COM2:", "r");
stream_set_blocking($cm, false);

if ($daten = fgets($cm,141))
{echo "ok <br>";}
else
{echo "fehler <br>";}

Wenn Daten vorhanden sind gibt er mir ein ok.
Wenn aber keine Daten vorhandn sind lädt er weiter bis zum timeout.

Was mache ich falsch?


9.

gibt er denn wenigstens "fehler" aus bevor der timeout passiert?

auch schon das probiert?
Code:                   In Zwischenablage kopieren (nur IE)
1">




10.

Ne das klappt leider auch nicht.

Das war so mein erster versuch.

Wie muss ich die beiden anderen Befehle die du gepostet hast einsetzten?
Ich habe nur stream_set_blocking verwendet. Aus dem anderen wurde ich nicht schlau.


Hier gehts zum Orginal Eintrag "Problem bei Com Port auslesen." im Forum
 
phpforum.de | Impressum | Handy Bundles