- 締切済み
teratermではシリアル通信出来るのですが・・
現在アームロボットをPCからシリアルで送って制御するプログラムを作りたいと思っております。 現在Teratermからコマンドを送ってアームロボットが動く事は確認出来ております。 ただ、そこからC#にてプログラムを作成して動かそうとするとどうしてもコマンドを受け付けてくれません。 Teratermの設定は ボーレート9600bps データ長8bit パリティnone ストップビット 1bit フロー制御 non です。 これで接続して「NT」と打ってリターンを押すと ロボットが原点復帰動作をします。 一方C#では SerialPort port = new System.IO.Ports.SerialPort("COM2",9600,Parity.None,8,StopBits.One); port.Open(); port.Write("NT"); port.Close(); port.Dispose(); と記述して実行しますが動きません。 改行コードが怪しいと思い、teratermで改行コードを CRからCR+LFに変更してみましたが問題なく動きます。 teraterm以外にもシリアル通信チェッカーv4.1.0 を試しましたが動きませんでした。 teratermは何か特別な仕様なのでしょうか? 何か見落としている設定項目ありますでしょうか? どうぞアドバイスよろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- TooManyBugs
- ベストアンサー率27% (1472/5321)
port.Writeメソッドではなくport.WriteLineメソッドを使用すべきでしょう。 port.Write("NT")ではNとTが出力されるのみです。
- SaKaKashi
- ベストアンサー率24% (755/3136)
>port.Write("NT"); port.Write("NT\n"); とか port.Write("NT\r"); は
補足
ありがとうございます、やってみましたがダメでした。 現象としては「port.Write("NT\n");」でコマンドを送ってやると ロボットの本体で不適切なコマンドとしてエラービットが立ってしまいます。 teratermで送るとこのようなことはありません。。。 困りました・・・・
お礼
お返事ありがとうございました。 WriteLineメソッドでも出来ませんでしたが、 ロボットの方の通信が RTS,CTSを使ったシリアル通信だったために serialPort クラスのRequestToSendプロパティをTrueにしてやることで無事通信を行えました。 Teratermで出来たのは、1文字1文字入力する間に時間があったために ロボットの方の処理が追いついていたようで、 プログラムで"NT"と送ると処理能力が追いつかなかったのだと思います・・・。 ありがとうございました。