PHP-чтение COM-порта из Windows
ниже приведена библиотека для последовательной связи через 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;
}
автор:
==>/! Предупреждение ! : он работает с linux для r / w, но с windows я только смог заставьте писать работать. Если вы windows пользователь пытается получить доступ к последовательному порту через сеть с serproxy вместо.
ограничение библиотеки классов PHP уже упоминалось в SO несколько раз. Я не нашел достойного решения. Чтение необходимо для моего заявления.
кто-нибудь знает что делать?
2 ответов
Если вы можете гарантировать, что находитесь в Windows, я мог бы рекомендовать интересный подход: используйте COM (как в microsoft COM, а не последовательный порт) или .Сеть.
есть бесплатный класс .NET, который я регулярно использую под названием CommStudio Express. Я нашел его очень надежным, но вы всегда можете использовать стандартный класс SerialPort встроенный в .NET, если вам не нужно беспокоиться о USB-последовательный адаптер отключается случайным образом.
в любом случае, это достаточно легко получить класс .NET в PHP с классом DOTNET:
$serial = new DOTNET('system', 'System.IO.Ports.SerialPort');
$serial->PortName = 'COM3';
$serial->Open();
Я не тестировал этот код (не в Windows на данный момент), но что-то вроде этого должно работать нормально. Затем вы можете использовать все обычные методы .NET в PHP.
нет, DOTNET вешает COM-порт. Вам нужно либо перезагрузить компьютер, чтобы обнаружить снова или продвинутые пользователи обычно удалить и установить Arduino.