掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.24627

シリアル通信の文字化けについて
投稿者---ヨシ(2005/12/09 09:11:41)


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 );
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:シリアル通信の文字化けについて 24628 Blue 2005/12/09 09:29:40


No.24628

Re:シリアル通信の文字化けについて
投稿者---Blue(2005/12/09 09:29:40)


> ソースの添付は「HTML変換ツール」で字下げします。
> マルチポスト(多重投稿)はしません。
は守られているでしょうか?
> 次のフォームをすべてチェックしてからご利用ください。
チェックしてから投稿しているのではないのでしょうか?

守られていない質問にはレスはつきにくいです。


この投稿にコメントする

削除パスワード

No.24630

Re:シリアル通信の文字化けについて
投稿者---ヨシ(2005/12/09 09:41:33)


すいません。

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

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

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


この投稿にコメントする

削除パスワード

No.24631

Re:シリアル通信の文字化けについて
投稿者---Blue(2005/12/09 09:49:52)


> > ソースの添付は「HTML変換ツール」で字下げします。
は?

自分の投稿見て、ソースの表示が見難いと思いませんか?
HTMLタグが使用可能の掲示板では、インデントスペース等が有効でないので、
ちゃんとそれように処理したものを載せないとダメです。
それように処理するものが「HTML変換ツール」です。

これをつかわないと、レスがつくものもつきません。
# 実際、私は読む気もおこらないです。

再度ソースに関しては投稿しなおしてください。
# といっても、他の掲示板でレスがついているのを無視しているので。。。


この投稿にコメントする

削除パスワード

No.24633

Re:シリアル通信の文字化けについて
投稿者---ヨシ(2005/12/09 10:08:27)


ご指摘ありがとうございます。

ソースを変換しました。

一度見てみてください。

宜しくお願いいたします。

プログラムの記述は次のとおりです。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
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 );
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑




>> > ソースの添付は「HTML変換ツール」で字下げします。
>は?
>
>自分の投稿見て、ソースの表示が見難いと思いませんか?
>HTMLタグが使用可能の掲示板では、インデントスペース等が有効でないので、
>ちゃんとそれように処理したものを載せないとダメです。
>それように処理するものが「HTML変換ツール」です。
>
>これをつかわないと、レスがつくものもつきません。
># 実際、私は読む気もおこらないです。
>
>再度ソースに関しては投稿しなおしてください。
># といっても、他の掲示板でレスがついているのを無視しているので。。。



この投稿にコメントする

削除パスワード

No.24638

Re:シリアル通信の文字化けについて
投稿者---ヨシ(2005/12/09 16:04:26)


解決しました。
http://mtakahashi.com/bbs.htm

どうもありがとうございました。
またマルチポストの件、大変失礼しました。




この投稿にコメントする

削除パスワード

No.24736

Re:シリアル通信の文字化けについて
投稿者---通りすがり(2005/12/12 13:34:41)


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

何故?さんのレス
> この掲示板の情報も他の掲示板で報告すべきでしょう。
> # すべての掲示板を閲覧している人が、いちいちマルチポスト先まで見に行かないですので。

ヨシさんのレス
> わかりました。
> きちんと報告します。

今の貴方のレスはきちんとした報告とは言えません。

まずは、URLが間違っています。
正しくは、
http://www.mtakahashi.com/cgi.cgi?13853
です。
ここから本題ですが…
ただし、過去ログになってしまうとこのアドレスは無効になってしまいます。
過去ログになった後でも、きちんとその面倒を見る気はあるのでしょうか?
ないのでしたら、マルチポスト先で得た解答をこちらのスレッドにもきっちり書き込むべきです。


この投稿にコメントする

削除パスワード

No.24774

Re:シリアル通信の文字化けについて
投稿者---ヨシ(2005/12/13 08:42:56)


大変失礼しました。

解決法は次のとおりです。
http://www.mtakahashi.com/cgi.cgi?13853からの引用。
*********************************************************
今回のみなさんの意見いろいろと参考にさせていただいて、
問題は解決しました!

事象を以下の通りです。
====================================================
REEさんのスレ
症状から考えておそらくデータビットが(たまたま)7bitと扱われる値になっているのでしょう。
lpDCB.ByteSize = 8; を追加して下さい。
====================================================

(中略)

私の初掲示板投稿にお付き合い頂いてありがとうございました。
また、マルチポストの件では大変失礼いたしました。

また何かあれば投稿するかもしれませんが、そのときは宜しくお願いいたします。
*********************************************************

>http://www.mtakahashi.com/cgi.cgi?13853
>
>何故?さんのレス
>> この掲示板の情報も他の掲示板で報告すべきでしょう。
>> # すべての掲示板を閲覧している人が、いちいちマルチポスト先まで見に行かないですので。
>
>ヨシさんのレス
>> わかりました。
>> きちんと報告します。
>
>今の貴方のレスはきちんとした報告とは言えません。
>
>まずは、URLが間違っています。
>正しくは、
>http://www.mtakahashi.com/cgi.cgi?13853
>です。
>ここから本題ですが…
>ただし、過去ログになってしまうとこのアドレスは無効になってしまいます。
>過去ログになった後でも、きちんとその面倒を見る気はあるのでしょうか?
>ないのでしたら、マルチポスト先で得た解答をこちらのスレッドにもきっちり書き込むべきです。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧