RS232Cについて


ほとちゃん  2005-01-18 01:36:28  No: 12752

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;

よろしくお願いいたします


  2005-01-18 21:48:35  No: 12753

http://www.vector.co.jp/soft/win95/prog/se077144.html
http://kyoto.cool.ne.jp/ntsukasa/232neztop.html


ふじっこ  2005-01-21 21:33:42  No: 12754

コンポーネントを使って解決というのも手ですが
せっかくですので(^^;
COM1に書き込みをし直後COM1からリードしても
相手から送信データがなければ、受信バイトは0です

今回の場合、クロスケーブルを使ってCOM1とCOM2をつなぎ
COM1からCOM2に送信し、COM2側で受信できているか確認したほうが
よいかもしれませんね
COM2側の受信待ちプログラムは、開示されたプログラムの
COM1をCOM2と変更し、WriteFilleを除いたものでためしてみてください


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加