RS232Cで数字と文字の送信をするには?

解決


2tom  2004-09-02 20:08:22  No: 54370

RS232Cで数字と文字の混合を送信するにはどうすればよろしいでしょうか?
012tom02
というのを送るとして
「01」と「02」は数字で
「2tom」は文字列というのを送信したいのですが、
これをバイナリエディタで作成しテキストファイルとして保存し、
ハイパーターミナルで送信すると受信されるのですが、
作成したプログラムで行うとうまくできません。
(プログラムではファイル送信ではなく。数字と文字の送信を行いたい)
どなたかアドバイスお願いします。
下記にソースを載せます。

<--ここから-->
void Cidt3Dlg::OnBnClickedRadio1()
{
  // TODO : ここにコントロール通知ハンドラ コードを追加します。

  HANDLE iComm;
  iComm = CreateFile(9600,
  GENERIC_READ | GENERIC_WRITE,
  0,
  NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  NULL);

  if(iComm == INVALID_HANDLE_VALUE)
  {
    // エラー処理
  }

  DCB dcb;
  GetCommState(iComm, &dcb); /* DCB を取得 */
  dcb.BaudRate = 9600;
  dcb.ByteSize = 8;
  dcb.Parity = NOPARITY;
  dcb.fParity = FALSE;
  dcb.StopBits = ONESTOPBIT;
  SetCommState(iComm, &dcb); /* DCB を設定 */

  char* pszBuf1;    /* 書き込みデータバッファ */
  int test,test1;
  DWORD dwWritten; /* ポートへ書き込んだバイト数 */

  test = 01;
  pszBuf1 ="2tom";
  test1 = 02;
  //pszBuf = reinterpret_cast<char *>(bright); //intからcharに変換

  WriteFile(iComm, &test, sizeof(int), &dwWritten, NULL);
  WriteFile(iComm, pszBuf1, strlen(pszBuf1), &dwWritten, NULL);
  WriteFile(iComm, &test1, sizeof(int), &dwWritten, NULL);

  COMMTIMEOUTS  TimeOuts;//timeout
    TimeOuts.ReadIntervalTimeout = MAXWORD;
    TimeOuts.ReadTotalTimeoutMultiplier = 500;
    TimeOuts.ReadTotalTimeoutConstant = 10;
    TimeOuts.WriteTotalTimeoutMultiplier = 500;
    TimeOuts.WriteTotalTimeoutConstant = 10;

    SetCommTimeouts(iComm, &TimeOuts);

  CloseHandle(iComm);
}
<--ここまで-->


isshi  2004-09-02 22:35:46  No: 54371

>「01」と「02」は数字で
↑これの意味がわかりません。
「01」というのは 0x00, 0x01 の2バイトのバイナリデータということですか?


2tom  2004-09-02 23:02:42  No: 54372

>isshi様
失礼しました。
おっしゃるとおり「01」「02」はバイナリデータです。


isshi  2004-09-02 23:19:05  No: 54373

>おっしゃるとおり「01」「02」はバイナリデータです。
バイナリということは分かりました。
しかし、2バイトなのかどうかということには答えてくれませんでしたね。
前回も書いたように、
  「01」= 0x00, 0x01 の2バイトのバイナリ
  「02」= 0x00, 0x02 の2バイトのバイナリ
なのか、
  「01」= 0x01 の1バイトのバイナリ
  「02」= 0x02 の1バイトのバイナリ
なのか、どちらですか?

仮に前者だったら「01」の送信は、
  BYTE buf[] = {0x00, 0x01};
  WriteFile(iComm, buf, 2, &dwWritten, NULL);
のようにすれば良いです。


2tom  2004-09-08 20:08:37  No: 54374

ありがとうございました。
送信したがったのは1バイトでした。
無事に解決致しました。


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

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






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