ページ 11

シリアル通信について /C言語

Posted: 2009年11月05日(木) 15:38
by uuu
こんにちは、通信についての質問です.

現在RS232cを使用し「 0R<cr><lf> 」 と送信するとデータが返ってくるプログラムを作成しています。
ケーブル間で送受信を行うプログラムはできているのですが,<CR><LF>をどのように表現してよいのかわかりません.

tera term上では,端末の設定で,送信すると語尾に<CR><LF>が付属されるので

0R を送信すると,<CR><LF>が付属されるため受信が成功します。

して、C言語上では  0R で送信すると  0R で送信されます。
語尾にtere term上 で扱われる<CR><LF>を付属する方法はないでしょうか。
話では、<CR>をキャリッジリターン,<LF>をエンターと意味するらしいのです。

そんなわけでscanf関数に 0R\r と入力し、エンターを押しても受信されません。

scanfを用いた方法で<CR>の記述方法がわかるかた、どうぞよろしくお願いします。

Re:シリアル通信について /C言語

Posted: 2009年11月05日(木) 15:42
by たかぎ
どうせ電文の最後は<CR><LF>を送ることになるのでしょうから、入力は改行文字なしにして、自分で"\r\n"を付加するとよいのでは?
あるいは、fgets等で'\n'ごと入力させて、"\n"を"\r\n"に置き換えるのもひとつの手かと思います。

Re:シリアル通信について /C言語

Posted: 2009年11月05日(木) 20:59
by KEV
たしかscanf関数で文字列を取得した場合、
バッファに改行コードが格納されてしまうはずです。

例えば、「0R\r」 と入力してエンターを押すと、
「0R\r <LF>」みたいに中では処理しているんじゃないかと。
なので、この最後の <LF> を自分で消したりする作業が逆に必要になるかもしれません。

\n\r を送信したいのなら、入力文字だけ取得して、
後は配列の後ろに付け加えるのが楽だと思います。
scanf関数で直接実現する方法はちょっと分かりませんでした。

Re:シリアル通信について /C言語

Posted: 2009年11月06日(金) 12:41
by uuu
例えば,

キャラ型変数を用意して,その中に" 0R\r\n "を格納し,送信すると" 0R<CR><LF> "と送ったことになるのでしょうか.

以下のような感じでしょうか?


//////////

char a[/url];

a="0R\r\n";

aを送信;

/////////

Re:シリアル通信について /C言語

Posted: 2009年11月06日(金) 13:14
by Mist
uuuさんがどんなプログラムを組まれているかわからないので回答できる人は誰もいないでしょう。
聞くよりやってみるほうがはるかに早いと思います。

ちなみに

char a[/url] = "0R\r\n";

正しくはこうだと思いますが。