• 締切済み

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は何か特別な仕様なのでしょうか? 何か見落としている設定項目ありますでしょうか? どうぞアドバイスよろしくお願い致します。

みんなの回答

回答No.2

port.Writeメソッドではなくport.WriteLineメソッドを使用すべきでしょう。 port.Write("NT")ではNとTが出力されるのみです。

tplgy
質問者

お礼

お返事ありがとうございました。 WriteLineメソッドでも出来ませんでしたが、 ロボットの方の通信が RTS,CTSを使ったシリアル通信だったために serialPort クラスのRequestToSendプロパティをTrueにしてやることで無事通信を行えました。 Teratermで出来たのは、1文字1文字入力する間に時間があったために ロボットの方の処理が追いついていたようで、 プログラムで"NT"と送ると処理能力が追いつかなかったのだと思います・・・。 ありがとうございました。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

>port.Write("NT"); port.Write("NT\n"); とか port.Write("NT\r"); は

tplgy
質問者

補足

ありがとうございます、やってみましたがダメでした。 現象としては「port.Write("NT\n");」でコマンドを送ってやると ロボットの本体で不適切なコマンドとしてエラービットが立ってしまいます。 teratermで送るとこのようなことはありません。。。 困りました・・・・