解決済みの質問
シリアル通信について
シリアル通信について
R232Cを使ってモーターを制御することを考えています。
teratermを用いて動かすことには成功したのですが、C言語のプログラムから
動かしたいと考え、以下のようなプログラムを作りましたが動きません。
問題点を教えていただけないでしょうか。具体的には、書き込み(WriteFile()に失敗しています)
ポート、ボーレート、データ、パリティなどはこの設定であっています。
#include <windows.h>
#include <stdio.h>
int main( void )
{
HANDLE hComm; /* シリアルポートのハンドル */
DCB dcb; /* 通信パラメータ */
char* str="r0,010\n"; /* 送信データを格納する */
DWORD writesize; /* ポートへ書き込んだバイト数 */
hComm = CreateFile(
"COM2", /* シリアルポートの指定 */
GENERIC_READ | GENERIC_WRITE, /* アクセスモード */
0, /* 共有モード */
NULL, /* セキュリティ属性 */
OPEN_EXISTING, /* 作成フラグ */
FILE_ATTRIBUTE_NORMAL, /* 属性 */
NULL /* テンプレートのハンドル */
);
GetCommState(hComm, &dcb); /* DCB を取得 */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
SetCommState(hComm, &dcb); /* DCB を設定 */
if(WriteFile(hComm, str, strlen(str), &writesize, NULL) == 0){
printf("Write Error\n");
}else{
printf("Write Success\n");
}
/* シリアルポートに書き込み */
printf("%d / %d have already written \n",writesize,strlen(str));
if(CloseHandle(hComm) != 0){
printf("Close Error\n");
}else{
printf("Close Success\n");
}
return(0);
}
よろしくお願いします。
- 補足
- うまくいってました。特にエラーは起こってませんでした。
ただ、
char* str="r0,010\n"; /* 送信データを格納する */
の\nがうまくおくられてないのか、改行コードが転送されていないことがわかりました。
シリアル通信で改行コードを送るにはどのようにすればよいのでしょうか?
-
- 質問日時:
- 2007/4/24 17:47:38
-
- 解決日時:
- 2007/5/9 03:03:34
-
- 回答数:
- 1
-
- お礼:
- 知恵コイン
- 50枚
-
- 閲覧数:
- 1,871
-
- ソーシャルブックマークへ投稿:
- Yahoo!ブックマークへ投稿
- はてなブックマークへ投稿
- (ソーシャルブックマークとは)
ベストアンサーに選ばれた回答
GetLastError()を使って、どんなエラーなのか取得してください。
GetLastError()は、呼び出し側のスレッドが持つ最新のエラーコードを取得します。
システムエラーコードに対応するエラー文字列を取得するには、FormatMessage 関数を使います。
- 違反報告
- 回答日時:2007/4/24 19:58:53
この質問は投票によってベストアンサーが選ばれました!
- この質問・回答は役に立ちましたか?
- 役に立った!
お役立ち度:
4人が役に立つと評価しています。

