Intereting Posts

Чтение и запись на / из последовательного устройства через USB на Linux с помощью Perl или PHP

У меня проблема с чтением с последовательного устройства в Linux. Проблема довольно странная, и я не смог прикрыть причины.

Я открываю файл / dev / ttyUSB0 с помощью PHP и начинаю общаться с устройством в соответствии с протоколом устройства. Много раз я сталкивался с ситуацией, когда PHP-скрипт ожидает ответа устройства. Когда параллельно я запускал скрипт Perl, который должен был делать то же самое, он отправил запрос на одно и то же устройство и, предположительно, не получил ответа, но потом увидел, что PHP-скрипт получил ответ (только после того, как скрипт Perl отправил запрос) ,

Я столкнулся с аналогичным вопросом при попытке прочитать Arduino с PHP, PHP не получил ответа от порта, но Serial Monitor от Arduino IDE напечатал его.

Я думаю, что мне не хватает важной информации о файлах Linux и USB-портах здесь. Что может быть проблемой? Как я могу определить, какие программы используют порт / файл?

$usb = 'ttyUSB0'; `stty -F /dev/$usb 9600`; `stty -F /dev/$usb -parity`; `stty -F /dev/$usb cs8`; `stty -F /dev/$usb -cstopb`; $f = fopen("/dev/$usb", "r+"); if(!$f) { echo "error opening file\n"; exit; } statusRequest($f); sleep(1); $c = readPort($f); echo "$c\n"; function statusRequest($port) { $data = "request"; fwrite($port, $data); fflush($port); } function readPort($port) { $read = 1; $c = ''; while($read > 0) { $bytesr = unpack("h*", fread($port, 1)); $c .= $bytesr[1]; //echo $bytesr[1]; if($bytesr[1] == 'ff') { $read = 0; } } return $c; } 

    Проверьте эти две статьи на моей вики. В первой статье описывается, как устанавливать полезные разрешения для узла устройства, вторая статья – это пример, который выводит все данные, которые удаленный отправляет на ПК. Хотя он написан для Arduino, он легко переносится для другого использования.

    Используя lsof вы можете узнать, какая программа в данный момент использует порт:

    lsof | grep /dev/ttyUSB0 cat_ttyUS 19182 jhendrix 3u CHR 188,0 0t0 14519955 /dev/ttyUSB0

    С помощью команд stty вы не блокируете порт для исключительного использования.