- ベストアンサー
シリアルポートについて
シリアルポート(D-sub 9pin)をCで制御してリレーを使い簡単なロボットみたいなのを作りたいと思ってます。 シリアルポートの制御方法を自分なりに調べてみたのですが、Cでの制御方法がわからず皆様にご教授してもらおうと思いました。 まずシリアルポートを使うさいに必要な宣言などはありますか?(例えば変数など) それからシリアルポートにスイッチなどで信号を送りそれを元に判断する方法はありますか? そしてシリアルポートから外部に出力する方法はどうやればいいのでしょうか? 以上3つを教えてください。 なお自分自身CとBASICしかまだわかりませんのでC++よりCで教えていただけると光栄です。 皆様よろしくお願いします。
- SUIGIN
- お礼率64% (20/31)
- C・C++・C#
- 回答数3
- ありがとう数1
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
CreateFile()で、"com1"等をオープンし, 制御線はドライバが勝手にon/offしないように GetCommState()、SetCommState()で設定し, 入力はSetCommMask()、WaitCommEvent()、 出力はEscapeCommFunction()でいけると思います。 詳しくは,それぞのAPIについてお調べください。 ところでフロー制御の信号線は、そのままリレーをつないでも動かないか、 パソコン側の232Cを壊す可能性があるように思いますが。 (リレーの種類にもよるでしょうけど) その信号を使ってリレーをon/offするハードウェアを作る必要があるでしょうね。 あと、パソコンへの出力も、単にスイッチつないでもだめで、規定の電圧、電流がかかるようにする必要があるでしょうね。
その他の回答 (2)
- paspas
- ベストアンサー率52% (47/90)
createfile RS232C VC などのキーワードで検索してみてください。参考になるものがあると思います。 ファイルとしてシリアルポートをオープンし、モデムコントロールラインを用いて制御線をコントロールします。 ちなみにご存じかとは思いますが、RS232Cレベルは±10~±12V位です。 直流用のリレーを用いるときは極性に注意が必要です。 また、コイル電流もチェックしておかないといけないでしょう。
- paspas
- ベストアンサー率52% (47/90)
プログラムを載せるのは、パソコンでしょうか?それとも組み込み用のボードマイコンでしょうか? また、パソコンで行う場合、OSはDOSでしょうか? WINDOWSでしょうか? Cでシリアルポートを制御するとありますが、リレーは シリアルポートの制御線に接続するのでしょうか?または相手にシリアル受信機があり、そのターゲットボードがリレー制御するのでしょうか? もう少し詳しい情報をお願いします。
関連するQ&A
- VB6でシリアルポートの制御
VB6のコントロールまたは、VB6で使用可能なAPIを使って、シリアルポートの内、DTRとRTS信号線を常にHigh(ON)の状態にすることは可能でしょうか? RS-232CからRS-422へ変換して機器を制御するのですが、変換器がこの信号線を電源として動作するので、常にHigh(ON)の状態にしたいのです。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- RS232Cの制御について詳しく書かれている書籍
RS232Cに接続された機械(Robot)をパソコンで制御するプログラムを書きたいのですが、それにあたり、シリアルポートの制御を主として記述している参考書(書籍)を探しています。 書店などでプログラミング教書を探しても、RS232に関して触れられている本はほとんど無く、あったとしても紹介程度のものです。 プログラミングソフトはVisualStudioExpressEditionsシリーズを予定しています。無料なので.... 現時点で扱える言語はCとBASICだけです。 良い参考書があれば、VBやC#、C++等にもチャレンジしてみる意欲はあります。 何か、ハードウェア開発者(と言っても、今回はシリアルポート制御ですが..)でも理解できそうな比較的新しい書籍がありましたら、教えていただけると助かります。
- ベストアンサー
- その他(プログラミング・開発)
- 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は何か特別な仕様なのでしょうか? 何か見落としている設定項目ありますでしょうか? どうぞアドバイスよろしくお願い致します。
- 締切済み
- その他(プログラミング・開発)
- USB-パラレルポート
自分なりに調べて見たのですが、分からなかったので教えてください。 パラレルポート(25pin)のないノートパソコンで、 パラレルポート接続のXilinxなどのFPGA開発ボードを 制御したいと思っています。 そこで、ElecomのUSB-プリンタポート(36pin)変換ケーブルを 購入し、そこからパラレル36pin-25pin変換コネクタを 介してボードに繋げてみたのですが、認識をしてくれませんでした。 質問ですが、この方法ではボードを動かすことは出来るのでしょうか、出来ないのでしょうか。 また、これでできないならば、どのようなやり方で可能になるのでしょうか。 お分かりの方は教えていただけないでしょうか。 よろしくお願いします。
- ベストアンサー
- ハードウェア・サーバー
- PCで使用可能なシリアルポート数を調べるには
Visual C++でPCの使用可能なシリアル(RS-232C)ポートの総数又はチャンネル数を調べる方法がありましたら、教えて下さい。
- ベストアンサー
- C・C++・C#
- C言語のシリアルポート接続について
連休中にPC98のMS-DOS機でシリアルポートで遊ぼうと 思いなんとかINP関数が在る事がわかりました。 しかし使い方がいまいち分りません。 INP関数にポート番号らしき物を入れてもなんの変化も出て来ま せん、、、。INP(1)とか、、、。 それではと、アドレスらしき物を入れようと思うのですが、シリアル ポートのアドレスがMS-DOSだとどこにあるのかわかりません。 適当に0x00~0x80ぐらいを回してディスプレイしたのですが、それっぽい 数値がありません、、、。 シリアルポートの接続先は携帯電話で、VBやBASICだと常に 電波状況を携帯に接続すると見えるのですが、C言語だと上手くいきません。 INPをループさせて、ポートぽいアドレスを何度か見ているのですが、 数値の変化がないし根本が間違ってる気がしてきました。 どなたか、C言語での簡単なシリアルポート接続を教えて下さい。 ポートのオープン方法とかがある気がしてたまらないんですが、、、。 古い言語で申しわけないのですが、宜しくおねがいします。
- ベストアンサー
- C・C++・C#
- シリアルの送信完了を待つ方法
AdvantechのPCM-9575ボードにRedHat9を入れてCOM2 をRS-485にして115kでシリアル通信しています。 プログラム的には"/dev/ttyS1"を使用して普通の23 2Cポートと同じように操作できますが、送信イネー ブル信号(RTS 信号がつながっているのでioctl() 関数で制御できます)を操作してやらないと送受信 できないので、送信直前にセットし、送信完了直後 にクリアしたいと考えているのですが、write() 関 数が送信完了まで待ってくれないので、タイミング を作るのに困っています。 シリアルの送信完了待ちの方法とかご存じでないし ょうか?
- ベストアンサー
- Linux系OS
- シリアル・パラレル通信における0/1の制御
下記URLにおけるシリアル・パラレル通信(画像1)における物理層について質問です。 http://pc.nikkeibp.co.jp/article/NPC/20070517/271422/ 文字「T」=01010100を伝送していますが,電気的には、デジタル信号の0は0V、 1は5V(想定)を表していると思いますので、 電源装置(5V) → スイッチ(リレー?) → 出力 というイメージで0V-5V-0V・・・を制御しているのでしょうか? しかし、数ミリ秒で信号を伝送しているため、寿命を考慮すればスイッチをリレーで何度もON/OFF しているとも考えられません。 実際どのように制御しているのでしょうか? ご教授お願いします。
- ベストアンサー
- ルーター・ネットワーク機器
- シリアルポート付きのPC、探しています
仕事上の関係でシリアルポート(RS-232C)付きの ノートPCを探しています。 会社の予算で買ってもらえると一番いいのですが なにぶん小さな企業なので自腹も覚悟で探しています。 探して見つかったものは HP Compaq nx6320/CT Notebook PC(個人向け)と Dell Latitude D520.D820(法人向けのみ)のみでした。 もし、みなさんが買われるとしたらどちらがお勧めでしょうか?。 他にもお勧めの機種がありましたら教えて いただけると助かります。
- 締切済み
- ノートPC
- CiscoルータでのSerialポートについて
始めまして。みなさんの知恵をお貸しください。 Ciscoルータについてインターフェースコンフィグレーションモードに切り替える場合、Serial 0といったようにポートを宣言すると思いますが、この「Serial」とはどのポートでしょうか。 ethernetやFastethernetならUTPポートとわかりますが、Serialについてはわかりません。もしかしたらコンソールポートのことでしょうか。 通常はコンソールポートはRS-232Cでシリアル接続になると思いますが、IPを設定する必要もないし、よくわかりません。 わかる方ご教示願います。
- 締切済み
- ネットワーク
補足
遅くなりましたが補足をさせていただきます。 まずプログラムを載せるのはパソコンです。 OSはWindowsXP HE リレーはシリアルポートの制御線に接続してPCからの信号をスイッチに使いたいと思っています。 以上でよろしかったでしょうか?