[PHP] Skrypt blokuje port RS232

Witam.

Posiadam urządzenie które co sekunde wysyła na port liczby z przedziału 0-255 i oczekuje polecen 1-8.

Po podłączeniu musze w cmd wpisać “mode COM6: BAUD=2400 PARITY=N data=8 stop=1 xon=off”.

No i wszystko powinno być ładnie, ale niestety mój skrypt się zawiesza i blokuje port, nie wiem czemu, oto kod:

function port($tryb,$p) {

$port='COM6:';


if ($tryb=='r'){

        $fp = fopen ($port, "rb+");

        if (!$fp)

			{

				echo "Port zamknięty(IN). ";

				file_put_contents('debug1.log',date(r).' '.$port.': nie mozna otworzyc do odczytu'."\r\n",FILE_APPEND);

			} 

        else { $buffer = fgets($fp, 4); fclose ($fp); }

		return $buffer;

	}

if ($tryb=='w'){	

        $fp = fopen ($port, "w");

    if (!$fp) {

		echo "Port zamknięty(OUT). ";

		file_put_contents('debug1.log',date(r).' '.$port.': nie mozna otworzyc do zapisu'."\r\n",FILE_APPEND);

    } else {

        fwrite ($fp, $p );

        fclose ($fp);

    }

	}

}

Za każdym razem po wpisaniu polecenia cmd musze jeszcze uruchamiać putty, dopiero wtedy skrypt działa. Niestety to mija się z celem, ponieważ urządzenie musi być dostępne cały czas tylko z przeglądarki. Przez ten skrypt komunikacja się zawiesza, gdzie robie błąd?

Pozdrawiam

Przerabiałem temat, kiedy próbowałem sterować projektorem podłączonym do serwera z poziomu PHP. Spędziłem nad tym okrutnie dużo czasu.

O ile z wysłaniem nie ma absolutnie żadnych problemów (można np. kopiować plik z poleceniem/danymi do lokalizacji COM1), to na odczycie poległem.

Jest pliczek.dll który ładuje się jako rozszerzenie do php i który sobie z tym radzi. Wersja demo pozwala na 1000 operacji. Pełna kosztuje ileś tam dolarów. Jest też kilka klas dostępnych w necie (w tym darmowe), ale nie znalazłem takiej która ma dobrze zaimplementowany odczyt pod Windowsem (pod Linuksem jest chyba ok).

Skończyło się na druciarskiej prowizorce - odkryłem, że jak uruchomię program do komunikacji po RS 232 (może być putty, ale lepsze co można uruchomić i połączyć jednym poleceniem linii komend - użyłem jakiegoś zaczynającego się chyba na “V”), a potem go zabiję to skrypty php już się nie zawieszają na czytaniu z RSa. Powstał więc skrypt, który uruchamia taką aplikację, konfiguruje połączenie, a następnie zabija aplikację + zabezpieczenie, żeby PHP nie próbowało czytać z RSa zanim aplikacja nie zostanie zabita. I działa…

No właśnie ja też ratuje się tym putty, ale to nie jest rozwiązanie w moim wypadku…

Urządzenie steruje włączaniem urządzeń elektrycznych więc skrypt musi być niezawodny.