#php #serial-port
#php #последовательный порт
Вопрос:
На этой веб-странице запущен следующий PHP-скрипт 1k0_base.php
Код выглядит следующим образом (исключая нерелевантную или конфиденциальную информацию):
include 'PhpSerial.php';
$serial = new PhpSerial;
$serial->deviceSet("COM5");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();
$readx = $serial->readPortLine(100,"n");
echo nl2br("n".$readx."nn");
$read0 = $serial->readPortLine(24,"");
echo nl2br("n".$read0."nn");
//$read1 = $serial->readPortLine(24,"");
$serial -> deviceClose();
$readxx = explode(" ",$readx);
print_r($readxx);
echo nl2br("n".$readxx[0]."n"); //test
$read00 = explode(" ",$read0);
print_r($read00);
//$read11 = explode(" ",$read1);
$arrCount = count($read00);
for($x=0;$x<$arrCount;$x ){
$m=1;
if ($read00[$x]>0){
$m=$read00[$x];
break;
}
}
$massCharNum = $x;
for($x=0;$x<$arrCount;$x ){
$unit=1;
if (ctype_alpha($read00[$x])){
$unit=$read00[$x];
break;
}
}
date_default_timezone_set('America/Denver');
echo nl2br("nnDebug String: ".$read0."n");
echo nl2br("Mass: ".$m."n");
echo nl2br("Unit: ".$unit."n");
echo nl2br("Time: ".date("n/j/y H:i:s",time())."nn");
Я подключаюсь к шкале через расширитель R232> RS232 к мощному порту USB-to-Serial Comm (COM5), как указано в диспетчере устройств.
Arduino IDE, которую я использую, может считывать и обмениваться данными с портом COM5, и я подтвердил, что данные печатаются каждые 5 секунд.
Было показано, что этот код работает с другими масштабными данными, отслеживающими последовательную связь с USB, единственное отличие заключается в использовании передачи через DB9 RS232 для этого продуктивного USB-to-Serial.
Ниже приведена таблица данных для последовательной связи для шкалы, которую я использую (такая же, как и для других шкал, которые работают с кодом по назначению).
Следующее изображение представляет собой фрагмент PhpSerial.php Я использую, и не уверен, почему при чтении строки порта мой код возвращает пустую строку и массив. Несмотря на то, что последовательный монитор показывает его печать. Код также прерывается, когда я заставляю порт COM5 быть занятым, а также отключаю его. Таким образом, код знает, что он подключен, но по-прежнему не считывает значения, которые он печатает.
Изображение, подтверждающее инструкции последовательной печати COM5 в Arduino IDE
Комментарии:
1. РЕШАЕМАЯ: оказывается, PHP недостаточно надежен при чтении последовательных данных (см. Рисунок), и после многих попыток заставить код работать с драйверами Prolific для подключения serial-to-USB я сдался и купил кабель serial-to-USB с более стандартным набором микросхем драйверов FTDI. Оказывается, этого было достаточно, чтобы получить Phpserial.php для считывания входящих данных. Если кто-то знает более четкое или подробное объяснение того, почему это так, я хотел бы услышать отзывы и мысли.
Ответ №1:
РЕШАЕМАЯ: оказывается, PHP недостаточно надежен при чтении последовательных данных (см. Рисунок), и после многих попыток заставить код работать с драйверами Prolific для подключения serial-to-USB я сдался и купил кабель serial-to-USB с более стандартным набором микросхем драйверов FTDI. Оказывается, этого было достаточно, чтобы получить Phpserial.php для считывания входящих данных. Если кто-то знает более четкое или подробное объяснение того, почему это так, я хотел бы услышать отзывы и мысли.