データ
PHPのソースコードは見ていないのですが、ファイル操作機能はあると思いますよ。動作しない場合はCGIで実装すれば良いし、独立性も高くメンテナンスも容易です。以前 BCB 環境で実行したことがあり、そのアイデアは次のとおりです: (実際には通常のファイルの読み取りおよび書き込み操作と同じです、笑)
1. ファイルを開きます
//まずシリアル ポート (次のいずれか 1 つ) を開きます。 COM1~~COM4) (ファイル モード)
HANDLE m_hComm = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
その後、WriteFile() と ReadFile() を使用して、最後に、CloseHandle (m_hComm) を覚えておいて、現在開いているシリアル ポートを閉じます。
CreateFile() 関数は FILE_FLAG_OVERLAPPED 定数を使用するため、WriteFile() 関数と ReadFile() 関数の最後のパラメーターは OVERLAPPED 構造体であることに注意してください:
OVERLAPPED m_ov;
m_ov.Offset = 0;
m_ov.OffsetHigh = 0;
m_ov.hEvent = NULL;
以上で COM2 が開かれたので、簡単な読み取りと書き込みを行ってみましょう:
2 番目に、次のように書き込みます:
BOOL bResult = true;
char* m_WriteBuffer ;
DWORD BytesSent = 0;
strcpy(m_WriteBuffer, "書き込みを試みます");
bResult = WriteFile(m_hComm, m_WriteBuffer, strlen((char*)m_WriteBuffer), &BytesSent, m_ov);
3. 読み取り:
COMSTAT comstat;//この構造体には通信デバイスのステータスが含まれます。
BOOL bResult = true;
DWORD dwError = 0;
unsigned char m_ReadBuff;
//ループ読み取りを開始します
for (;;)
{
bResult = ClearCommError(m_hComm, &dwError, &comstat);/ /COMSTAT 構造体を更新し、すべてのエラーをクリアします
if (comstat.cbInQue == 0)
{
Break;//読み取りが終了したら for ループを終了します
}
bResult = ReadFile(m_hComm, &ReadBuff, 1, &BytesRead, m_ov) ;//一度に 1 ビットを読み取ります。必要に応じて、一度に n ビットを読み取ることもできます
...
// とにかく、ReadBuff にはコンテンツ (1 ビット) が含まれています。これはマージできます ......
......
}
4.
CloseHandle(m_hComm);
上記のアイデアは、関数の戻り値を通じてエラーを処理するために使用できます。各エラー定数の意味は本で確認できますが、完全な処理が面倒な点はありますが、使い方さえわかれば簡単な読み書きだけで十分です。このファイルの読み書き方法は、印刷ポートLPT1、LPT2〜〜LPTnにも適用できます。 Unix では試したことはありませんが、Unix 系のオペレーティング システムでは Windows よりもデバイス ファイルに重点が置かれているため、Unix と Linux ではファイル モードで COM ポートの読み書きを行う方が簡単で汎用性が高いと思います。 。 。 ?繰り返しますが、方法を知っているだけです。行動すべき時は行動を起こしましょう。 ^_^
ただし、Unix または Linux で CGI として使用する場合は、コンパイルされた CGI ファイルのアクセス許可を設定する必要がある場合があります。試してみてください。