Почему мой массив не заполняется при чтении последовательного порта (подтверждена связь с последовательным монитором)

#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 для считывания входящих данных. Если кто-то знает более четкое или подробное объяснение того, почему это так, я хотел бы услышать отзывы и мысли.