トップページ⇒tech
16コメント5KB

Linux,RS232C,半二重

■ このスレッドは過去ログ倉庫に格納されています
0001シリアルさんNGNG
お取り込み中すんません。
LinuxのRS232Cで、半二重通信しなくちゃ
いけなくなったんですが、
RTS/CTSの制御の仕方がわかりません。
もうひとつはttyの接続を前提とした通常の環境
をどうやっていじるのかいじりかたが分からず
困っています。HELP!
(接続する相手はModbusプロトコルの測定機です)

0002デフォルトの名無しさんNGNG
Linux板で聞いてあげます。
ここだとみんなが怒るから教えてあげられませdん。
0003MUTT-RAYNGNG
おこられるかな…

Linuxに限らずUNIX系でシリアルポートを操作する
ならtermiosを調べるべし。

rawモードにするのと構造体のc_cflagにハードウェア
フロー制御の設定する所を調べるべし。

man termios

で充分だとおもうよ。
0004シリアルさんNGNG
あー、そういうのじゃないんです。
送信と受信のケーブルを物理的にショートさせて、
自分の送信内容を反射して受信しないように
RTS/CTSを使うってハナシ。
一対一のハンドシェークじゃないです。
マルチドロップなんでTTYと論理が違います。
termiosだとTTYの論理だからどうしようってことなんです。

0005シリアルさんNGNG
書き込み不足です。すいません。
RS232CからRXTXCSRSで485変換器に4線でつないで、
変換機から2線でマルチドロップします。
変換機へ送信したデータが反射して帰らないように
ゲートを操作しろってマニュアルにあるんです。
0006デフォルトの名無しさんNGNG
言ってることがいまいち理解できなくてすみません。
送信中は受信したくない、ということですか?
0007シリアルさんNGNG
不明です。装置および変換機のマニュアルにある
サンプルプログラムに従うとそうなります。
物理的に送信と受信のケーブルがショート
しているので電気的にぶつかってもOKかどうかも心配です。
0008MUTT-RAYNGNG
任意にRTSやCTSを立てたいって事ですか?

それだけならioctl()とTIOCMSETかなぁ?
TIOCM_CTSやTIOCM_RTSて制御線立てる。
いや、やはりワカラン。変換機の仕様が特に。

俺は、その辺りはモデムとUPSの制御プログラムしか書い
た事ないんだけどtermiosでRAWモードに設定するだけの
話で済んだからなぁ。
特にLinuxはcfmakeraw()があって楽だったよ。
0009シリアルさんNGNG
>任意にRTSやCTSを立てたいって事ですか?
そうなんです。
バッファリングなしで、かつRS/CS任意ってモード
があればいいんですけど、
そうなるとTTYのロジックが動くとまずいって感じです。
TTY関係のソフトを完全に殺して生の232Cをread/write
できるドライバがあればいいんですけど。

0010MUTT-RAYNGNG
>>9
TTY関係ってのが端末制御の事なら、何度も
書いてるけどRAWモードにすればいいじゃん。

ただ、バッファリングはどうかな。チップ
レベルで16バイトだかなんだかバッファが
あるしな。カーネルドライバレベルでも
4096バイトくらいバッファリングしてるか
もしれんしね。
0011名無しさん@お腹いっぱい。NGNG
単純に、
unsigned int m = TIOCM_RTS;
ioctl(fd, TIOCMBIS, &m);
でrts立てて
ioctl(fd, TIOCMBIC, &m);
でrts寝かせる
を必要なときにするでいいんでないの?
0012シリアルさんNGNG
あ、いいですね。それでいけそうですね。
お世話になりました。
0013いちNGNG
>>11
あーこれ、RTS立つ、そうんだけどたぶん違う挙動になってる。

通信できたのは下のページのやり方。
http://www.luv.asn.au/overheads/realworld/excerpt.html
これで二線式のModbusばっちりきれいに通信できました。
なのでセンサー機器の制御はLinuxでいけます。
めでたしめでたし。
0014名無しさん@お腹いっぱい。NGNG
>>13
え、どう違うの?
0015ななしNGNG
よくわからない。
周辺機器側が気に入らないようで返事してくれないです。
0016名無しさん@お腹いっぱい。NGNG
tcdrain()の有無でしょ、違いは。
■ このスレッドは過去ログ倉庫に格納されています