PHP - чтение COM-порта из Windows - PullRequest
6 голосов
/ 23 февраля 2012

Ниже приведена библиотека для последовательной связи через PHP: http://www.phpclasses.org/package/3679-PHP-Communicate-with-a-serial-port.html. Проблема в том, что метод readPort реализован не полностью.Он может читать в среде * nix, но, очевидно, не в среде Windows.Метод:

/**
 * Reads the port until no new datas are availible, then return the content.
 *
 * @pararm int $count number of characters to be read (will stop before
 *  if less characters are in the buffer)
 * @return string
 */
function readPort ($count = 0)
{
    if ($this->_dState !== SERIAL_DEVICE_OPENED)
    {
        trigger_error("Device must be opened to read it", E_USER_WARNING);
        return false;
    }

    if ($this->_os === "linux")
    {
        $content = ""; $i = 0;

        if ($count !== 0)
        {
            do {
                if ($i > $count) $content .= fread($this->_dHandle, ($count - $i));
                else $content .= fread($this->_dHandle, 128);
            } while (($i += 128) === strlen($content));
        }
        else
        {
            do {
                $content .= fread($this->_dHandle, 128);
            } while (($i += 128) === strlen($content));
        }

        return $content;
    }
    elseif ($this->_os === "windows")
    {
        /* Do nohting : not implented yet */
    }

    trigger_error("Reading serial port is not implemented for Windows", E_USER_WARNING);
    return false;
}

Автор утверждает:

==> /! \ WARNING /! \: Он работает с Linux для R / W, но с Windows я 'я только смог заставить писать работать.Если вы пользователь Windows, попробуйте получить доступ к последовательному порту через сеть с помощью serproxy.

Ограничение библиотеки классов PHP уже упоминалось в SO уже несколько раз.Я не нашел достойного решения.Чтение обязательно для моего заявления.

Кто-нибудь здесь знает, что делать?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Если вы можете гарантировать, что вы в Windows, я мог бы порекомендовать интересный подход: использовать либо COM (например, COM, Microsoft, а не последовательный порт) или .NET.

Есть бесплатная .NETКласс, который я регулярно использую, называется CommStudio Express .Я считаю, что это очень надежно, но вы всегда можете использовать стандартный класс SerialPort , встроенный в .NET, если вам не нужно беспокоиться о том, что адаптер USB-to-serial может быть отключенслучайным образом .

В любом случае достаточно просто получить класс .NET в PHP с классом DOTNET :

$serial = new DOTNET('system', 'System.IO.Ports.SerialPort');
$serial->PortName = 'COM3';
$serial->Open();

У меня нет 'Я тестировал этот код (не на Windows в данный момент), но что-то подобное должно работать просто отлично.Затем вы можете перейти к использованию всех обычных методов .NET в PHP.

0 голосов
/ 28 ноября 2016

Нет, DOTNET зависает COM-порт.Вам нужно либо перезагрузить компьютер, чтобы обнаружить снова, либо опытные пользователи обычно удаляют и устанавливают Arduino.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...