Intereting Posts
Как удалить дубликаты ключей в массиве Codeigniter отправлять почту с помощью gmail не работает, просто перезагружая xPath не извлекает HTML как часть содержимого htaccess перенаправляет с маскировкой домена, не работающей при запросе корневого каталога Массив с ассоциативным массивом – удаление дубликатов Диаграмма Google с данными CSV: ошибка столбцов Французский атрибут apostrophe в базе данных mysql? Как я могу рекурсивно включать все файлы с определенным именем в папку с помощью PHP? Неопределенные ошибки индекса при доступе к $ _POST Вход в Facebook с использованием OAuth 2.0 генерировать PHP-классы из XSD? как пройти поездку на php.ini Одновременное использование переключателей и выпадающего селектора для вариантов продукта В CakePHP, где я бы поставил метод, который выполняет проверку на пользователя сеанса? Как повторить транзакцию после тупика с помощью Doctrine?

Как прочитать RS232 Serial Port в PHP, как эта QBasic Program

Я пытаюсь перенести следующую небольшую QBASIC-программу (которая работает 100%) на PHP:

OPEN "com1:2400,n,8,1,DS," FOR RANDOM AS #3 OPEN "data.dat" FOR OUTPUT AS #2 REM read 17 chars from the port scale$ = INPUT$(17, #3) PRINT scale$ WRITE #2, scale$ CLOSE #2 CLOSE #3 SYSTEM 

В настоящее время я вызываю его в своей скомпилированной (exe) форме из PHP (на WAMP5), но я хотел бы избавиться от QBASIC и вызвать его непосредственно из PHP.

Я написал эту функцию PHP, но она просто зависает в строке fgets ():

 function read_port($port='COM1:', $length=17, $setmode=TRUE, $simulate='') { if ($simulate){ $buffer = '"'.strval(rand(1000, 2000)); return $buffer; } if ($setmode){ shell_exec('mode com1: baud=2400 parity=n data=8 stop=1 to=on xon=off odsr=on octs=on dtr=on rts=on idsr=on'); } $fp = fopen($port, "rb+"); if (!$fp) { file_put_contents('debug1.log','COM1: could not open'."\n",FILE_APPEND); } else { $buffer = fgets($fp, $length); // <-- IT JUST HANGS HERE DOING NOTHING ! fclose ($fp); } return $buffer; 

}

Я использую эту строку PHP для вызова указанной функции:

 $res = read_port('COM1:', 17, TRUE, SIMULATE_SCALE); 

Любая помощь будет очень оценена! Я в основном отказался от попыток. Если QBASIC может сделать это отлично, мы должны иметь возможность сделать эту работу с PHP!

Related of "Как прочитать RS232 Serial Port в PHP, как эта QBasic Program"

Возможно, вам стоит взглянуть на PHP Serial от Rémy Sanchez. Здесь есть статья об этом:

Управление последовательным портом с помощью PHP

Также посмотрите на этот пример, предоставленный jared на dctkc dot com на сайте PHP:

http://php.net/manual/en/function.fopen.php#20935

Довольно точно, что PHP по умолчанию не имеет доступа к аппаратным портам. Он имеет доступ к сетевым ресурсам, файловым ресурсам, но без какого-либо транспорта между оборудованием и тем, что вы пытаетесь прочитать, не может видеть, как это работает.

Тем не менее, может существовать расширение конкретной платформы, которое вы можете загрузить, что позволит это – просто провести расследование.

e: Да, есть – проверьте это расширение , возможно, это то, что вам нужно. Без этого, это просто не сработает.

«Это расширение позволяет прямому доступу к параллельному и последовательному портам (rs232) при чтении и записи DLL inpout32.dll под WIN9x / NT / 2000 / XP для любой сборки. Пример конкретичного приложения: полная автоматизация дома с веб-интерфейсом и php, соединение любого типа с портами, такими как сборки, просто или сложно. Одна идея простая, но довольно практичная … Расширение и источник были скомпилированы с Delphi 6 для PHP5.0 до 5.1.2, включая источники и примеры ».

Если вы работаете в Linux или другой UN -подобной системе UN (например, Mac OS X), попробуйте fopen('/dev/ttyS0') – в UN X все это файл, даже последовательные порты. Посмотрите на это несколько советов по выяснению, какие карты портов сопоставляются с «файлом».