Я пытаюсь портировать следующую маленькую программу 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);
Любая справка будет ценившим creatly! Я в основном бросил пробовать. Если QBASIC может сделать это отлично затем, мы должны смочь сделать эту работу с PHP!
Если вы используете Linux или другую UN X-подобную систему (например, Mac OS X), попробуйте fopen ('/ dev / ttyS0')
- в UN X все является файлом, даже последовательные порты. См. несколько советов по определению того, какой порт соответствует какому «файлу».
Возможно, вам стоит обратить внимание на PHP Serial от Rémy Sanchez. Об этом есть статья здесь:
Управление последовательным портом с помощью PHP
Также посмотрите на этот пример, предоставленный jared at dctkc dot com на сайте PHP:
Почти уверен, что PHP не имеет доступа к аппаратным портам по умолчанию. У него есть доступ к сетевым ресурсам, файловым ресурсам, но без какого-либо транспорта между аппаратным обеспечением и тем, что вы пытаетесь прочитать, это не работает.
Однако, возможно, есть расширение для конкретной платформы, которое вы можете загрузить, чтобы включить это - просто исследуем.
e: Да, есть - проверьте это расширение, возможно, это то, что вам нужно. Без чего-то подобного это просто не будет работать.
"Это расширение позволяет прямой доступ к параллельному и последовательному (rs232) порту при чтении и записи с помощью DLL inpout32.dll под WIN9x/NT/2000/XP для любой сборки. Пример конкретного приложения: Полный дом автоматизация с веб-интерфейсом и php, подключение оборудования любой природы с портами, как сборки, простые или усложнять. Одна идея простая, но вполне практичная... Расширение и исходники были скомпилировано с помощью Delphi 6 для PHP5.0 до 5.1.2, исходники и пример включены."