DELPHI5にてRS232Cのプログラムを作成しているのですが、
受信がうまくできません。
ソースを開示しますので、不具合箇所を教えてください
//OPEN
ghHandle := CreateFile('COM1',
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
0,
0);
if (ghHandle = -1) then
begin
ShowMessage('COM1のオープンに失敗しました');
end;
if (False = GetCommState(ghHandle, gstrDCB)) then
begin
ShowMessage('通信設定取得に失敗しました');
CloseHandle(ghHandle);
ghHandle := 0;
end;
gstrDCB.BaudRate := 9600;
gstrDCB.ByteSize := 8;
gstrDCB.Flags := $3001;
gstrDCB.Parity := NOPARITY;
gstrDCB.StopBits := ONESTOPBIT;
if (False = SetCommState(ghHandle, gstrDCB)) then
begin
ShowMessage('通信設定に失敗しました');
CloseHandle(ghHandle);
ghHandle := 0;
end;
gstrCTO.ReadIntervalTimeout := 500;
gstrCTO.ReadTotalTimeoutMultiplier := 0;
gstrCTO.ReadTotalTimeoutConstant := 3000;
gstrCTO.WriteTotalTimeoutMultiplier := 0;
gstrCTO.WriteTotalTimeoutConstant := 500;
if (False = SetCommTimeouts(ghHandle, gstrCTO)) then
begin
ShowMessage('タイムアウト設定に失敗しました');
CloseHandle(ghHandle);
ghHandle := 0;
end;
pszSend[0] := $FF;
pszSend[1] := $FF;
pszSend[2] := $49;
pszSend[3] := $40;
pszSend[4] := $80;
pszSend[5] := $01;
pszSend[6] := $23;
pszSend[7] := $0F;
pszSend[8] := $81;
pszSend[9] := $13;
pszSend[10] := $F0;
pszSend[11] := $81;
pszSend[12] := $05;
pszSend[13] := $00;
pszSend[14] := $00;
pszSend[15] := $04;
// 送信
if (False = WriteFile(ghHandle, pszSend, 16, inWByte, nil)) then
begin
ShowMessage('送信に失敗しました');
end;
※戻り値はTRUEだが受信は0バイトになっている
if (False = ReadFile(ghHandle, pszRecv, inRByte, inRByte2, nil)) then
begin
ShowMessage('受信に失敗しました');
end;
よろしくお願いいたします
http://www.vector.co.jp/soft/win95/prog/se077144.html
http://kyoto.cool.ne.jp/ntsukasa/232neztop.html
コンポーネントを使って解決というのも手ですが
せっかくですので(^^;
COM1に書き込みをし直後COM1からリードしても
相手から送信データがなければ、受信バイトは0です
今回の場合、クロスケーブルを使ってCOM1とCOM2をつなぎ
COM1からCOM2に送信し、COM2側で受信できているか確認したほうが
よいかもしれませんね
COM2側の受信待ちプログラムは、開示されたプログラムの
COM1をCOM2と変更し、WriteFilleを除いたものでためしてみてください
ツイート | ![]() |