Как Считать Последовательный порт RS232 в PHP как эта Программа QBasic

Я пытаюсь портировать следующую маленькую программу 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!

6
задан dmp 12 July 2010 в 08:54
поделиться

3 ответа

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

3
ответ дан 8 December 2019 в 12:57
поделиться

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

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

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

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

10
ответ дан 8 December 2019 в 12:57
поделиться

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

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

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

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

5
ответ дан 8 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: