• ベストアンサー

シリアル通信

例えば、スイッチが幾つかあるとします(10個くらい)。 そのスイッチのオン、オフの状態をRS232C等のシリアル通信でパソコンに取り込むにはどうすればいいですか? スイッチの信号はデジタル信号で1か0の状態だという事くらいしか分かりません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

No.4 >何度もありがとうございます。 >「ひとつの機器に全部」です。 わかりました。 >なんらかのソフトを開発しなくてはならないと言う事は理解しています。 はい。 >RS232Cはデータは送信・受信がそれぞれ1線でやり取りしますよね? はい。 >それで送信するなら"10101011"という様に信号を出さないといけないと思うのですが、そういう事はどうすれば良いのですか? >スイッチの状態をマイコンで受け取ってそれを元にマイコンで送信するという具合ですか? 結論でいえばそうなります。 それぞれのスイッチを独立したビットに割り当てるのか、スイッチひとつを1Byteに割る当てるなどは考えないといけません。 あえて指摘はしませんでしたが、単純に「スイッチ」といっても、押している間だけON、離せばOFFというものもあれば、一度押すとON、再度押すとOFFというスイッチもあります。 また、流れる電圧もPCのキーボードなら1Vも流れませんが、一般家庭のSWなら100Vです。コレをどう処理する野かも考える必要があります。 (アナログ的な入力の処理はさらに大変ですが) 上記のようにデータの送受信の仕組みの検討と流すデータの検討を「設計」といいます。 単純にわけても ・SWからの入力を処理する電気知識 ・入力を送信するための電気回路やマイコンプログラムの知識 ・送信データの内容を決定する知識 ・受信したデータを処理するPCプログラムの知識 などが必要です。

abcdef220
質問者

お礼

本当にありがとうございます。大変助かりました! 大分分かった気がします。 またお願いします!

その他の回答 (4)

回答No.4

No.2です。 >スイッチは一つの機器に複数あります。 >この場合はどうなのでしょうか? 「ひとつの機器に全部」ではなく、「いくつかSWがついた機器が複数」ですか? 後者であれば、「機器が複数」という時点で取りうる方法は一緒です。 ・個別にPCに繋ぐ。 ・途中に別のSW入力を取得するものを作ってそこからPCに繋ぐ。 上記の「先」の話を少ししておきましょう。 「何らかの方法で機器からPCへデータを送る」というのがここまでの内容です。 もうひとつ重要なこと、「PCで受け取ったデータをどうするか」の前「PCでデータをどう受け取るか」という点については考えてありますか? 「データを送ればPCが何とかしてくれる」というものではありません。 受け取るデータにあわせてソフトを用意(開発)したり、受け取る(使用する)ソフトにあわせて、送信するデータを合わせたりといったことが必要ですが、そういったことは検討されていますか?

abcdef220
質問者

お礼

何度もありがとうございます。 「ひとつの機器に全部」です。 なんらかのソフトを開発しなくてはならないと言う事は理解しています。 RS232Cはデータは送信・受信がそれぞれ1線でやり取りしますよね? それで送信するなら"10101011"という様に信号を出さないといけないと思うのですが、そういう事はどうすれば良いのですか? スイッチの状態をマイコンで受け取ってそれを元にマイコンで送信するという具合ですか? よろしくお願いします。

回答No.3

No.2です。 結論から先に書いておきます。 >スイッチは一つの機器に一つです。 ということならば、 >シリアル通信はRS232Cを考えています。 はあきらめることをお勧めします。 RS-232は「一対一」の「半二重通信」用のI/Fです。 従って、すべての情報を取得しようとした場合、その機器の台数分のシリアルポートが必要となります。 他にも色々と制約がありますが、この時点で「難易度が10倍以上跳ね上がります」という部分が理解できますでしょうか? それでもどうしてもという場合のために、シリアルポートを増やす方法は記載しておきます。 ・PCIボードによる増設 ・USB-RS232変換ケーブルによる増設 前者はPCI-I/Fを持つデスクトップが必要となりますが、最低2つ以上のスロットが必要です。 後者はUSB-HUBを使用すれば増やすことはできますが、必ずしも動作するという保障はありません。 私がやるとしたならば、 ・機器からUSBでの通信 ・すべての機器のS/W入力(ON/OFFだけとして)を収集する機器を作り、そこからUSBやRS-233でPCに通信 ですね。

abcdef220
質問者

お礼

ありがとう御座います。 すいません、間違えてました。 機器は一つです。 スイッチは一つの機器に複数あります。 この場合はどうなのでしょうか? 何度もすいませんが、よろしくお願いします。

回答No.2

根本的な部分からの構築が必要な感じですね。 まず確認ですが、「スイッチ」は一つの機器に設置されているものでしょうか? それとも「1スイッチ、1機器」でしょうか? 後者の場合は難易度が10倍以上跳ね上がります。 前者であれば、割と楽です。 送る際に全部のスイッチの状態を一括して送ってしまえばいいのですから。 ここで必要になるのが、 ・通信データのフォーマット ・送信側(SW側)の設計 ・受信側の設計 となります。 「通信データのフォーマット」を決めて、「送信」し「受信」して内容を表示となります。 こういった場合は、「非同期通信」が主となります。 それと、 >RS232C等のシリアル通信 って部分に引っかかりがあります。 「USB」も「IEEE1394」も「有線LAN」も「S-ATA」も全部シリアル通信です。 RS-232でいいのですよね?

abcdef220
質問者

お礼

ご回答ありがとう御座います。 返事、遅くなりすいません。 スイッチは一つの機器に一つです。 シリアル通信はRS232Cを考えています。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

一定の時間間隔で状態信号を送り続ける 10秒間で1秒ずつ順番にON/OFF状態の信号を送るなど  0123456789秒  1010101010 ※ 本当は通信速度に合わせた間隔で信号を送信します パリティビットやフロー制御信号などを一緒に送るのがルールなんですけどね

abcdef220
質問者

お礼

ご回答ありがとう御座います。 すいませんが、信号の送受信の方法が分からないです。 いずれか一つのスイッチが押されている状態をパソコンで読み取りたいのですが、マイコンか何かで通信速度に合わせた間隔で信号を送信するのですか? よろしくお願い致します。

関連するQ&A

  • シリアル・パラレル通信における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 しているとも考えられません。 実際どのように制御しているのでしょうか? ご教授お願いします。

  • シリアル通信について教えてください

    VC6.0のRS-232Cでシリアル通信をするプログラミングについて説明してあるサイトやサンプルソースがあるサイトがあったら教えてください。

  • VBでのシリアル通信

    VB6 Professional Virsionを使用しています。 RS232Cでシリアル通信をしたいのですが、どうすればいいのでしょうか。ヒントを教えてください。

  • VB6でシリアルポートの制御

    VB6のコントロールまたは、VB6で使用可能なAPIを使って、シリアルポートの内、DTRとRTS信号線を常にHigh(ON)の状態にすることは可能でしょうか? RS-232CからRS-422へ変換して機器を制御するのですが、変換器がこの信号線を電源として動作するので、常にHigh(ON)の状態にしたいのです。 よろしくお願いします。

  • コンパクトなシリアル通信レコーダ

    コンパクトなシリアル通信(RS232C)レコーダを探しています。 PCを使用したものや大きな設備ではだめで、なるべくコンパクトなもの(できればタバコ大くらい)で、シリアル通信を記録できるものご存じでしたら、教えてください。

  • シリアル通信の信号監視について

    MSCommを使用して通信プログラムを作成しています。 そこで、CTS信号、DSR信号、CD信号のON/OFF状態を検出したいのですが、OnCommイベントとしてはDSRのみが1から0に変化した場合にイベントが発生し、他の二つは変化が発生したときにイベントが発生することになっています。 この仕様ですとCTSおよびCDのON/OFF状態を取得する方法がわかりません。どなたかご教授願えれば幸いです。

  • シリアル通信(送信について)

    現在VB6.0を使用してシリアル通信(RS232C)をMSCOMMを使用して行いたいのですが、受信は出来たのですが、送信がうまくいかない状態です。 MSComm.Output = 送信文字列 & vbCr とすると結果の値を受信できる予定なのですがエラーですという値が返ってきます。 同じ操作をTera Term等で行うと結果が正しく返ってきます。 何故そうなるのかわからない状態で困っております。 何かアドバイス頂けないでしょうか。

  • linuxのシェル上でシリアル通信したい

    linuxのシェル上でシリアル通信(RS232C)したいのですが 送信するのは、 echo "msg" /dev/tty0 で、できるのですが、 受信方法がわかりません。 知っておられる方、教えて下さい。

  • VB6でのシリアル通信について質問です。

    VB6でのシリアル通信について質問です。 現在、VB6で開発したラベル印刷のシステムを引き受けたのですが、以下のような状況に陥り困っております。 ・プリンタからPCへの接続はシリアル通信のみ。 ・現在使用しようとしているPCにはシリアル通信のポートがなく、USB接続のみしかできない。 ・RS232CからUSBへの変換コネクタを使ってPCとプリンタを接続しようとしているが、印刷実行時に実行時エラー 8015が発生する。 ・VBからプリンタへの通信はMSCommを使用している。 ・プログラム自体は客先にソースのみが残っていたもので、仕様書等はまったくない。 ネットで調べたところ、MicrosoftのサイトではUSBポートからMSCommを使って通信をする事はできないというような事が記載されておりました。 ただ、他のサイトを色々と調べたところ、普通に通信できるとの意見も記載されておりました。 実際のところ、VB6でRS232C-USB変換コネクタを使用してプリンタへのシリアル通信は可能なのでしょうか。 可能な場合、今回発生したエラーの原因になりそうなものとはなんなのでしょうか。 また、通信が不可能な場合、代替策としてどのような方法を取るのが一番ベストなのでしょうか。 どなたか何卒ご教授よろしくお願い致します。

  • macでRS-232Cシリアル通信

    macでシリアル通信をしたくRS-232CのUSB-シリアル変換ケーブルを差したのですが、全く反応がありません。/devを見てもそれらしきデバイスが無いですし、dmesgを実行してもLinuxと何やら表記が違いよく分からない… 何かドライバを入れなければならないのでしょうか。