Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inne][PHP]RS485... ogólnie COMx odczyt, Opóźnienie na odczycie z RSxxx
beherit
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 29.07.2009

Ostrzeżenie: (0%)
-----


Piszę w przedszkolu, bo choć to część sporej aplikacji to ograniczmy się do minimum:

  1. if(!isset($_SERVER['argv'][1]))
  2. die('Wywolanie: php {FILE_NAME} {PORT_NO}');
  3.  
  4. $port = "COM" . $_SERVER['argv'][1] . ":";
  5. //`mode $port BAUD=115200 PARITY=N data=8 stop=1 xon=off`;
  6.  
  7. $fp = fopen($port,"rb+");
  8.  
  9. stream_set_timeout($fp,0,100);
  10.  
  11. if(!$fp)
  12. die($port . " problem z dostepem.");
  13.  
  14. while(!feof($fp))
  15. print fread($fp,22) . "\n";



I tutaj pojawia się pytanie - czemu dane z COM spływają po około minucie/dwóch od odczytania (w tym konkretnym przypadku chodzi o kartę zbliżeniową). I nie ważne czy pod linuchem (/dev/ttyUSBx czy windą COMx:)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
--JohnnyB--
post
Post #2





Goście







funkcja, którą stworzyłem do odczytu z RS232:
  1. function readSerial() {
  2. if(!$this->open()) return -1;
  3. stream_set_blocking($this->fp,0);
  4. $res='';
  5. $t_start=microtime(true);
  6. do {
  7. $c=fread($this->fp,1);
  8. if($c) $res.=$c;.
  9. $t=microtime(true);
  10. } while($t-$t_start<$this->timeout);
  11. return $res;
  12. }

timeout dobierałem doświadczalnie, w moim przypadku 0,8s; jeśli zadziała możesz spróbować zmiejszyć
Go to the top of the page
+Quote Post
beherit
post
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 29.07.2009

Ostrzeżenie: (0%)
-----


Tak na oko różni się jedynie rzeczami nieistotnymi: długością strumienia (22 zamiast 1), <teoretycznie> niekończącą pętlą bo moje jest wrzucane pod konsolę i stream_set_blocking(), tyle że jak dobrze rozumiem:
<< This function works for any stream that supports non-blocking mode (currently, regular files and socket streams). >>
do portów szeregowych chyba to nie działa.

Na chwilę obecną ten temat zrealizowało się w pythonie ale jestem ciekaw czemu php sobie z tym rady u mnie nie dał...
Go to the top of the page
+Quote Post
mls
post
Post #4





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Po pierwsze - stream_set_blocking działa również dla portów szeregowych (przynajmniej w systemach unixowych).
Po drugie - zawsze do zabaw z portami szeregowymi polecam korzystanie z DIO.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 18:26