シリアル通信で文字化けしないようにするには?

解決


ヨシ  2005-12-09 18:17:15  No: 59924

VC初心者ですが宜しくお願いいたします。
今、VC++.NETを使ってシリアル通信をしようとしていますが、
どうしてもうまくいきません。。

どなたかわかる方ご教授宜しくお願いいたします。
#長々とした説明になってしまいますが、できるだけ伝わるように記述したつもりです。
どうか宜しくお願いします。

・やろうとしたいこと
ハイパーターミナルを使い、PC_A→PC_Bに「A,0,CR,LF('A'と'0'と'改行')」という文字を送信する。
その際、WIN32APIを用いてプログラムを組む。

・やろうとしたこと、現象は次のとおりです。
1.PCを2台用意し、RS232Cのクロスケーブルでつなぎました。(2台ともwindowsXPです。)
2.ハイパーターミナルの設定は、両方とも同じです。
  ビット/秒     「9600」
  データビット  「8」
  パリティ      「なし」
  ストップビット「2」
  フロー制御    「なし」
3.PC_Aから送信しようとしたのは「A,0,CR,LF」ですが、PC_Bで受信した文字は「チー濠」となり
文字化けを起こしてしまいます。

・推測...
送信文字と受信文字を変換すると次のようになります。
[送信]                               [受信]
「A,0,CR,LF」                       「チ,ー,濠」
    ↓16進数                            ↓shift-JIS
「0x0041,0x0030,0x000D,0x000A」     「0x00C1,0x00B0,0x8D8A」
    ↓2進数                             ↓2進数
「0100 0001,                        「1100 0001,
  0011 0000,                          1011 0000,
  0000 1101, 0000 1010」              1000 1101 1000 1010」

両者の2進数表記を比べると、送信文字に1000加えたものを受信しているのではないかと考えました。
つまり、下のプログラムでいうとsend()内のWriteFileで無条件に変換されてるのではないかと。。
#見当外れかもしれませんが。。

以上が私のほうで考えてみた結果です。
何かいい案はないでしょうか。。m(__)m

プログラムの記述は次のとおりです。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
main(){
  (略)
  comset();
  send();
  (略)
}

void comset(){
  hComm = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 
       0, NULL, OPEN_EXISTING,
                            FILE_ATTRIBUTE_NORMAL, NULL);

  //COM通信パラメータを格納しているDCB構造体を設定する。
  DCB lpDCB;
  GetCommState(hComm, &lpDCB);

  lpDCB.DCBlength = sizeof(DCB);
  lpDCB.BaudRate = 9600;
  lpDCB.Parity = NOPARITY;
  lpDCB.StopBits = TWOSTOPBITS;
  lpDCB.fParity = FALSE;

  SetCommState(hComm, &lpDCB);

  //読み書きできない時のタイムアウト設定
  COMMTIMEOUTS timeout;
  GetCommTimeouts(hComm, &timeout);

  timeout.WriteTotalTimeoutConstant=100;
  timeout.ReadTotalTimeoutConstant=100;

  SetCommTimeouts(hComm, &timeout);

}

void send(){
  DWORD point;
  unsigned char Txbuf[] = {0x41,0x30,0x0D,0x0A};//「A,0,CR,LF」を16進数であらわした

  WriteFile( hComm, Txbuf, sizeof(Txbuf), &point, NULL );
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


dairygoods  2005-12-09 18:28:46  No: 59925

http://www.mtakahashi.com/cgi.cgi?13853


マルチポスト  2005-12-09 18:29:56  No: 59926

http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+24627


ヨシ  2005-12-09 18:42:12  No: 59927

すいません。

掲示板初投稿でマナーを知りませんでした。
こういうのをマルチポストっていうんですね。。

以後、気をつけますm(__)m

あつかましいお願いではありますが、どなたか解決方法のわかる方、
ご教授ください。宜しくお願いいたします。


ヨシ  2005-12-09 19:15:40  No: 59928

すいません、私の不手際で、マルチポストを
行ってしまい、皆様にもご迷惑をおかけしました。

この掲示板は今回は使わないでおきます。
#管理人さん、すいません。そしてありがとうございました。

この件に関して、↓のスレで継続しているので
http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+24633

何かありましたら、ご指摘宜しくお願いします。


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

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






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