プロが教えるわが家の防犯対策術!

こんにちは、どうか僕の問題を解決してくださいませんか。いまシリアルポートを会したハードウェアの処理を行っています。しかし、ハードウェアに反応があるときと、ないときがあるのです。自分のプログラムで制御しようとすると、コマンドの応答がまったくなく、テラタームでコマンドを送信すると、応答があります。その後、再度自分のプログラムで制御すると、今度は反応があり、うまく制御できます。この状況を経験した方はいませんでしょうか。以下が初期化部分のコードです。



/////////********
以下の関数でポートを開きます。
***************:///////////


CreateFileCom(comFileName, &phCom, lBaudRate, lDataByteSize,
lParity, lStopBit)
///////*******省略
{
DCB dcb;
GetCommState((*phCom),&dcb);
dcb.BaudRate = lBaudRate;
dcb.ByteSize = (BYTE)lDataByteSize;
dcb.Parity = (BYTE)lParity;
dcb.StopBits = (BYTE)lStopBit;
SetCommState((*phCom),&dcb);
}

}
/////////////*********
以下がメイン関数の初期化部分です。
**************/////////////
FILE* fp;
LPCSTR comFileName = "COM1";

long lBaudRate = CBR_9600;
long lDataByteSize = 8;
long lParity = NOPARITY;
long lStopBit = ONESTOPBIT;
int returnValue;
char str[1024];
char end_str[2] = "\r";
int j;

fRetVal = CreateFileCom(comFileName, &phCom, lBaudRate, lDataByteSize,
lParity, lStopBit);


よろしくお願いいたします。

A 回答 (1件)

もしかして、SetCommStateがうまく働いていないのでは?


Cはいいのですが、何Cで組んでます?
ちょっと、DCB が何をカプセル化したものかわからないので、確かとはいえませんが・・。

ただ、テラターム 処理後に 動作するということは、当該命令だけでは、ACTIVE 状態 にはなりきっていないと思われますね。
つまり、COMが活性状態では無いので、いくら呼び出してもダメとか、OSへの通知が必要な場合などが、考えられませんか。

なにか、もうワンアクション必要なのではないでしょうか??


とりあえず、ハードがらみで、環境がわからないのは、キツイです

補足要求:
・使用機器(パソコンの機種。せめて、PC98かDOS/Vか)
・OS(DOSか、Winかすらわかりません)
・Cのバージョン(この場合コンパイラのバージョンというより、製品名+製品バージョンで)
    • good
    • 0
この回答へのお礼

お返事が遅れまして申し訳ありません。やはり、おっしゃるとおり、COMポートの初期化が問題でした。(DCBの設定を、しらみつぶしに変えたらできました。)C言語の経験が浅く、C言語といってもさまざまな種類があり、それぞれに違った拡張機能を持っているんですね。これからはそのあたりを明記して質問させていただきます。これからもよろしくお願いします。今回の場合は、MSのVC++6.0で、WINDOWS NT4.0 でプログラミングしました。

お礼日時:2001/06/04 10:12

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