PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
krufter
Отправлено: 02 Июля, 2013 - 15:58:46
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Здравствуйте!
Необходимо считать данные с 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
Скачать файл: php_serial.class.php
Скачан раз: 76

(Отредактировано автором: 02 Июля, 2013 - 15:59:59)

 
 Top
Мелкий Супермодератор
Отправлено: 02 Июля, 2013 - 16:08:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 11884
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 614 раз(а)




krufter пишет:
$read = $serial->readPort();

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

У вас таковой момент наступает?


-----
PostgreSQL DBA
 
 Top
krufter
Отправлено: 02 Июля, 2013 - 16:21:02
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Ну устройство посылает по 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?

(Отредактировано автором: 02 Июля, 2013 - 16:26:31)

 
 Top
Ch_chov
Отправлено: 02 Июля, 2013 - 17:04:59
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Вот здесь похожая тема http://forum.php.su/topic.php?fo...6&topic=1080

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



Активный участник


Покинул форум
Сообщений всего: 11884
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 614 раз(а)




krufter пишет:
как организовано чтение в Windows?

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

Короткий экскурс в гугл показывает, что проще пинать с другого языка. Например, так: http://stackoverflow[dot]com/questio[dot][dot][dot]ort-from-windows


-----
PostgreSQL DBA
 
 Top
krufter
Отправлено: 03 Июля, 2013 - 08:52:35
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Попробую разобраться. Спасибо за ссылки. Напишу если что-то получится. Непонятно почему в Windows нельзя так просто читать этот файл, а надо непонятно как изворачиваться.
 
 Top
caballero
Отправлено: 03 Июля, 2013 - 09:11:20
Post Id


Активный участник


Покинул форум
Сообщений всего: 6001
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




потому что в виндовс положено цеплять события на работу с устройствами а не читать с портов как в MSDOS


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
krufter
Отправлено: 03 Июля, 2013 - 13:43:38
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




А никто не знает как реализовать чтение в Windows? Хотя бы алгоритм. Что-то не получается с COM и DOTNET разобраться
 
 Top
caballero
Отправлено: 03 Июля, 2013 - 14:17:46
Post Id


Активный участник


Покинул форум
Сообщений всего: 6001
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




так тебе PHP или .NET ?
примеров как рабьотать в иннете полно

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

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

для делфи и .net полно готовых компонентов которыми и скорость выставишь и старт-стоп биты и все что надо


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
krufter
Отправлено: 04 Июля, 2013 - 09:44:36
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




А готовой утилитки, которую можно РНР попинать не встречали?
 
 Top
krufter
Отправлено: 05 Июля, 2013 - 12:55:34
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




А вот такая вот штука под 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
 
 Top
caballero
Отправлено: 05 Июля, 2013 - 13:14:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 6001
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




ну и зачем спрашивать - возьми и проверь


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Ch_chov
Отправлено: 05 Июля, 2013 - 13:47:58
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




При чтении из COM порта на windows PHP зависает до тех пор пока не получит порцию данных.
Выход, либо покупать расширение у румынов, либо не использовать PHP.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB