6

次の小さな 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

現在、PHP (WAMP5 上) からコンパイル済み (exe) 形式で呼び出していますが、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 でこれを機能させることができるに違いありません!

4

3 に答える 3

9

Rémy SanchezによるPHP Serialを調べるとよいでしょう。ここにそれに関する記事があります:

PHP でシリアルポートを制御する

PHP サイトのdctkc dot com で jaredによって提供された次の例もご覧ください。

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

于 2010-07-12T08:54:00.953 に答える
5

デフォルトでは、PHP はハードウェア ポートにアクセスできません。ネットワークリソース、ファイルリソースにアクセスできますが、ハードウェアと読み込もうとしているものとの間の何らかのトランスポートがなければ、これが機能していることを確認できません。

ただし、これを有効にするロード可能なプラットフォーム固有の拡張機能がある場合があります-調査中です。

e: はい、あります -この拡張機能を確認してください。このようなものがないと、うまくいきません。

「この拡張機能により、任意のアセンブリの WIN9x/NT/2000/XP で、DLL inpout32.dll による読み取りと書き込みで、パラレルおよびシリアル (rs232) ポートに直接アクセスできます。具体的なアプリケーションの例: Web インターフェイスとphp、アセンブリなどのポートを備えたあらゆる性質の接続ハードウェアを簡単に、または複雑に. 1 つのアイデアはシンプルだが非常に実用的です... 拡張機能とソースは、PHP5.0 から 5.1.2 用の Delphi 6 でコンパイルされ、ソースと例が含まれています。

于 2010-07-12T08:50:18.130 に答える
3

Linux やその他の UN X ライクなシステム (Mac OS X など) を使用している場合は、試してみてくださいfopen('/dev/ttyS0')。UN X では、すべてがファイルであり、シリアル ポートも含まれます。どのポートがどの「ファイル」にマップされているかを見つけるためのヒントについては、これを参照してください。

于 2010-07-12T09:04:11.523 に答える