Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP blokuje RS232
Forum PHP.pl > Forum > PHP
PrisonHunter
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:

  1. function port($tryb,$p) {
  2. $port='COM6:';
  3.  
  4. if ($tryb=='r'){
  5. $fp = fopen ($port, "rb+");
  6. if (!$fp)
  7. {
  8. echo "Port zamknięty(IN). ";
  9. file_put_contents('debug1.log',date(r).' '.$port.': nie mozna otworzyc do odczytu'."\r\n",FILE_APPEND);
  10. }
  11. else { $buffer = fgets($fp, 4); fclose ($fp); }
  12. return $buffer;
  13. }
  14. if ($tryb=='w'){
  15. $fp = fopen ($port, "w");
  16. if (!$fp) {
  17. echo "Port zamknięty(OUT). ";
  18. file_put_contents('debug1.log',date(r).' '.$port.': nie mozna otworzyc do zapisu'."\r\n",FILE_APPEND);
  19. } else {
  20. fwrite ($fp, $p );
  21. fclose ($fp);
  22. }
  23. }
  24. }


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
mieszkos
yy, może za bardzo nie znam się na komunikacji z urządzeniami ale co to jest ?

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


Otwierasz port funkcją do otwarcia pliku?

w sensie fopen("COM6:", tryb) ? Być może się nie znam aż tak ale z tego co wiem to chyba nie zadziała w ten sposób?

ja bym spróbował raczej tak

http://www.phpclasses.org/browse/file/17926.html

edit: rzeczywiście można, a co do problemu nie wiem, spróbuj może tą klasą
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.