dポイントプレゼントキャンペーン実施中!

VisualStudio2010のC++のシリアルポートによる通信で質問なんですが、
CreateFile で正しい値などを入力したにもかかわらず接続できないと出てきます。


具体的に言うと、H8 3697にシリアル通信で接続したいんですが上手くいきませんでした。
ハイパーターミナルでH8 3697に接続は出来て、受信、送信が出来たので
VisualStudio2010のC++のプログラミングが悪いと思います

以下がそのソースコードになっています。

接続ボタンが押されたときのイベント(処理)使用言語 C++
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

DCB dcbPortConfig;
memset(&dcbPortConfig, 0, sizeof(DCB));
dcbPortConfig.DCBlength = (DWORD)sizeof(DCB);
dcbPortConfig.BaudRate = 19200;
dcbPortConfig.ByteSize = 8;
dcbPortConfig.Parity = 0;
dcbPortConfig.StopBits = 0;

m_hComPort = CreateFile("COM11", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

if(m_hComPort != INVALID_HANDLE_VALUE) {
//AfxMessageBox(_T("CMyComm::Open CreateFile失敗"));
}

// ポートのボーレート、パリティ等を設定
BOOL bRet = SetCommState(m_hComPort, &dcbPortConfig);

if(bRet != FALSE) {
AfxMessageBox(_T("CMyComm::Open() SetCommState失敗"));
}



ではよろしくお願いします。

ちなみにH8 3697のほうのソースでは最初初期処理してそれから無限ループでなんかの文字列を10秒ごとに送信している処理になっています。

A 回答 (2件)

こんにちは。



「うまくいきません」とのことですが、どこでつまずいているのかデバッガなどで調べてみましたか?

ざっと見た限り、まずはCreateFile()のところでひっかかりそうですね。
COM1~COM9までと違って、COM10以上では"\\\\.\\COM10"のように書かなければなりません。
まあCOM1~COM9まででも"\\\\.\\COM1"~"\\\\.\\COM9"と書いてもよいので、常にこの書き方で通すクセをつけておくとひっかからないで済みます。
    • good
    • 0

二つのif文の条件が、両方とも逆になっていませんか?


INVALID_HANDLE_VALUE は、オープンに失敗した時の戻り値ですから、
(m_hComPort != INVALID_HANDLE_VALUE)
ということは、オープンが成功した時にこのif文の条件が成立することになりますが、逆のような。

ボーレート等が設定できた時のbRetはTRUEで戻ってくると思うので、設定がきちんとできると
(bRet != FALSE)
が成立し、
AfxMessageBox(_T("CMyComm::Open() SetCommState失敗"));
を実行しますから、失敗のメッセージが出ると思います。逆に設定が失敗するとここをスルーしてしまいそうなのですが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!