Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Работа с COM портом
Форумы портала PHP.SU » » Вопросы новичков » Работа с COM портом

Страниц (1): [1]
 

1. krufter - 02 Июля, 2013 - 15:58:46 - перейти к сообщению
Здравствуйте!
Необходимо считать данные с COM порта при помощи PHP.
Использую класс для работы с COM портом, немного подкорректированный.
Проблема с тем, что не проходит чтение из файла. Скрипт просто зависает, до тех пор пока не отключу устройство, которое пишет данные в COM порт. Все остальные функции работают. Использую вот такой пример:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. include "php_serial.class.php";
  4.  
  5. echo "Welcome";
  6. // Let's start the class
  7. $serial = new phpSerial;
  8.  
  9. // First we must specify the device. This works on both linux and windows (if
  10. // your linux serial device is /dev/ttyS0 for COM1, etc)
  11. $serial->deviceSet("COM14");
  12. $serial->confBaudRate(38400);
  13. // Then we need to open it
  14. $serial->deviceOpen();
  15.  
  16. // To write into
  17. //$serial->sendMessage("Hello !");
  18.  
  19. // Or to read from
  20. $read = $serial->readPort();
  21.  
  22. echo "Вывод по UART".$read;
  23.  


P.S. Разработчик этого класса не написал считывание данных для Windows
2. Мелкий - 02 Июля, 2013 - 16:08:45 - перейти к сообщению
krufter пишет:
$read = $serial->readPort();

Цитата:
* Reads the port until no new datas are availible, then return the content.

У вас таковой момент наступает?
3. krufter - 02 Июля, 2013 - 16:21:02 - перейти к сообщению
Ну устройство посылает по COM порту данные ограниченное количество. Но мне кажется, что просто при подключении устройства создаётся файл(исчезающий при отключении устройства) в который пишутся данные, но считать их посредством PHP не получается, файл открывал и rb и r+b.

Я всяко разно вставлял чтение файла после его открытия, ничего не помогает.
Сейчас так осталось.

PHP:
скопировать код в буфер обмена
  1.  
  2. $this->_dHandle = @fopen($this->_device, $mode);
  3.         while (!feof($this->_dHandle))
  4.         {
  5.             $contents .= fread($this->_dHandle, 128);
  6.             echo "tuc".$contents;
  7.         }
  8.  


Пробовал просто получить содержимое всего файла, но так и не получил ни строчки.

P.S. Может на Си кто сталкивался с работой с COM портом там как организовано чтение в Windows?
4. Ch_chov - 02 Июля, 2013 - 17:04:59 - перейти к сообщению
Вот здесь похожая тема http://forum.php.su/topic.php?fo...6&topic=1080

Цитата:
P.S. Может на Си кто сталкивался с работой с COM портом там как организовано чтение в Windows?
На Си это удобней. По крайней мере не нужно "подвисать" в ожидании порции данных.
5. Мелкий - 02 Июля, 2013 - 17:11:26 - перейти к сообщению
krufter пишет:
как организовано чтение в Windows?

Дык вы под виндами?
Ну а чего хотели, метод не реализован под винды, следовательно правки ваши - следовательно поведение не определено.

Короткий экскурс в гугл показывает, что проще пинать с другого языка. Например, так: http://stackoverflow[dot]com/questio[dot][dot][dot]ort-from-windows
6. krufter - 03 Июля, 2013 - 08:52:35 - перейти к сообщению
Попробую разобраться. Спасибо за ссылки. Напишу если что-то получится. Непонятно почему в Windows нельзя так просто читать этот файл, а надо непонятно как изворачиваться.
7. caballero - 03 Июля, 2013 - 09:11:20 - перейти к сообщению
потому что в виндовс положено цеплять события на работу с устройствами а не читать с портов как в MSDOS
8. krufter - 03 Июля, 2013 - 13:43:38 - перейти к сообщению
А никто не знает как реализовать чтение в Windows? Хотя бы алгоритм. Что-то не получается с COM и DOTNET разобраться
9. caballero - 03 Июля, 2013 - 14:17:46 - перейти к сообщению
так тебе PHP или .NET ?
примеров как рабьотать в иннете полно

там функция немного по другому рабтает
когда читаешь передаешь ей буфер куда читать и размер буфкрв
а возвразает код ошибки если что не так

напиши на любом языке утилитку командой строки и пинай ее из PHP

для делфи и .net полно готовых компонентов которыми и скорость выставишь и старт-стоп биты и все что надо
10. krufter - 04 Июля, 2013 - 09:44:36 - перейти к сообщению
А готовой утилитки, которую можно РНР попинать не встречали?
11. krufter - 05 Июля, 2013 - 12:55:34 - перейти к сообщению
А вот такая вот штука под windows должна работать?

PHP:
скопировать код в буфер обмена
  1.  
  2. You need to set the com with a dos command like like:
  3.  
  4. $output = `mode COM1: BAUD=115200 PARITY=N data=8 stop=1 XON=off TO=on `;  
  5. The next command executes the dos command through php:
  6.  
  7. echo"$output";  
  8. Create the resource id:
  9.  
  10. $fp = fopen('COM1', 'r+');
  11.  
  12. if(!$fp){
  13.  
  14.  echo"Port not accessible";
  15.  
  16. }else{
  17.  
  18.  echo"Port COM1 opened successfully";
  19.  
  20. }
  21. Write to port:
  22.  
  23. $writtenBytes = fputs($fp, "Hello");
  24.  
  25. echo"Bytes written to port: $writtenBytes";
  26. Read from port:
  27.  
  28. $buffer = fgets($fp);
  29.  
  30. echo"Read from buffer: $buffer";
  31.  


Взято отсюда http://stackoverflow[dot]com/questio[dot][dot][dot]h-php-on-windows
12. caballero - 05 Июля, 2013 - 13:14:12 - перейти к сообщению
ну и зачем спрашивать - возьми и проверь
13. Ch_chov - 05 Июля, 2013 - 13:47:58 - перейти к сообщению
При чтении из COM порта на windows PHP зависает до тех пор пока не получит порцию данных.
Выход, либо покупать расширение у румынов, либо не использовать PHP.

 

Powered by ExBB FM 1.0 RC1