Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP obsługuje port COM[x] :)
Widmo
post
Post #1





Grupa: Zarejestrowani
Postów: 136
Pomógł: 0
Dołączył: 25.05.2003

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


Witam,
potrzebuje dostać się do mojego urzadzenia przez port COM.
Znalazlem DLLke która obsługuje porty COM z poziomu PHP.

( http://www.easyvitools.com/phpserial/php_ser_SMS.html )

Mam manual do urządzenia ale brakuje mi troche doświadczenia z obsługą hardwaru.

http://widmo.biz/tmp/rw_protocol_eng.pdf

Oto moje wypociny (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

  1. <?php
  2. ser_open('COM1', 9600, 8, 'none', 1, 'none' ); 
  3.  
  4. $str = ser_isopen();
  5. echo "Otwarte: $str<hr>";
  6.  
  7. echo ser_write( "0x02" ); // STX
  8.  
  9. echo ser_readbyte() . '<hr>'; // TU POWINNO BYĆ ACK
  10.  
  11. $seq = '0x00'; // kolejny numer
  12. $cmd = '0x60'; // komenda ( buzzer )
  13. $len = '0x00'; // dlugosc $dat
  14. $dat = '0x00'; // data
  15. $bcc = $seq xor $cmd xor $len xor $dat; // wyliczenie XOR
  16.  
  17. echo 'BCC: ' . $bcc . '<hr>';
  18.  
  19. ser_write( "x00x60x00x00" . $bcc . "x03"); // wyslanie komendy
  20.  
  21.  
  22. echo ser_readbyte() . '<hr>';
  23. ?>


Wynikiem jest to:
  1. Otwarte: COM1 9600 8 None 1 None
  2. ---------
  3. 21
  4. ---------
  5. BCC: 0x00
  6. ---------
  7. 21
  8. ---------


Czy nie znalazł by się ktoś kto pokazał by mi wzorzec jak powinna wyglądać pełna komenda z komentarzami?
Aktualnie w przykładzie wyżej staram się zmusić urzadzenie do wydania dziwięku ( 0x06 )

Wielkie dzięki za wszelką pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Widmo 21.08.2008, 14:58:50
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Widmo
post
Post #2





Grupa: Zarejestrowani
Postów: 136
Pomógł: 0
Dołączył: 25.05.2003

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


  1. <?php
  2. // TAK:
  3. echo 0x37;  // int
  4. echo "x37"; // ASCII
  5.  
  6. echo "x37x38x39";
  7. ?>


tego mi było trzeba (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

elemek - jesteś mistrzem - dziękuję bardzo.

Jednak są małe problemy:


  1. <?php
  2. public function __construct($com) {
  3. if (($this -> handle = fopen(".$com", 'w+b')  ) === false) {
  4. throw new Exception("Unable to open device $com.");
  5. }
  6. }
  7. ?>


zwraca:

  1. Warning: fopen(\\.\com1) [function.fopen]: failed to open stream: Invalid argument in C:\wamp\www\serial\example.php on line 20
  2.  
  3. Fatal error: Uncaught exception 'Exception' with message 'Unable to open device com1.' in C:\wamp\www\serial\example.php:21 Stack trace: #0 C:\wamp\www\serial\example.php(68): RHMMF1RW->__construct('com1') #1 {main} thrown in C:\wamp\www\serial\example.php on line 21


Poogooglałem więc trochę, zamieniłem to na:

  1. <?php
  2. public function __construct($com) {
  3. if (($this -> handle = fopen("$com:", 'w+b')  ) === false) {
  4. throw new Exception("Unable to open device $com.");
  5. }
  6. }
  7. ?>


Jest lepiej. bo działa, ale nie do końca, bo wywala TIMEOUTa w linii 46
  1. <?php
  2. if (($ack = fgetc($this -> handle) != self::STX)) { //46
  3. return ord($ack); //47
  4. }
  5. ?>


Zdaje sobie sprawe, ze pisanie na sucho bez urzadzenia jest trudne, ale może coś ktoś poradzi (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Widmo
Go to the top of the page
+Quote Post

Posty w temacie


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: 12.10.2025 - 02:02