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 );
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
http://www.mtakahashi.com/cgi.cgi?13853
http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+24627
すいません。
掲示板初投稿でマナーを知りませんでした。
こういうのをマルチポストっていうんですね。。
以後、気をつけますm(__)m
あつかましいお願いではありますが、どなたか解決方法のわかる方、
ご教授ください。宜しくお願いいたします。
すいません、私の不手際で、マルチポストを
行ってしまい、皆様にもご迷惑をおかけしました。
この掲示板は今回は使わないでおきます。
#管理人さん、すいません。そしてありがとうございました。
この件に関して、↓のスレで継続しているので
http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+24633
何かありましたら、ご指摘宜しくお願いします。
ツイート | ![]() |