2015年10月28日水曜日

C#で外部スイッチとやり取りする

パソコンと(2極)スイッチで通信する方法を考えてみました。(動作未確認)
※2極スイッチとは、簡単なON/OFFだけを切り替えるスイッチのこと。

そんなとき問題になるのは、

  • パソコンとスイッチをどうやって繋ぐか
  • ソフト側でどうやってON/OFFを認識するか
です。

まず考えたのは、USBで接続する方法。USBポートでスイッチと接続できないかと。しかし、これではドライバを作らないといけないし、スイッチ側に自己紹介する機能を持たせなければやり取りは不可能です。

次に考えたのがシリアルポートを使う方法です。1ビットのシリアル接続が可能なら、ON/OFFも可能なのではないか。
結論から先に書くと、「できました」。

RS-232C規格のシリアルポートを使った具体的なしくみです。
まず、DTR線の状態をONにしておきます。スイッチはDTR-(スイッチ)-DSRの順で接続しておきます。スイッチがONになると、DTRから出力された12Vの電流がDSRに流れることになります。スイッチをOFFにしたときは-12Vが正確に入力されるわけではありませんが、電流0はFalse扱いをうけるようです。

その理論(?)をもとに、C#でコードを書いてみました。

using System;

// シリアルポートクラスがある名前空間
using System.IO.Ports;

namespace myPort
{
  public class myPort1
  {

    // シリアルポートクラスのインスタンス
    SerialPort port = new SerialPort("COM1");

    // ポートをオープンする
    port.Open();

    // DTR線を出力
    port.DtrEnable = true;

    // ONかOFFかは次の値で確認する
    port.DsrHolding;

    // 例
    private void checkSwich(){
      if(port.DsrHolding)  // ON
      {
        MessageBox.Show("スイッチはONです。");
      }
      else
      {
        MessageBox.Show("スイッチはOFFです。");
      }
    }
  }
}

これで、ON/OFFの2極スイッチとパソコンとでやり取りができるようになりました。

なお、この記事を書くにあたって、どこでも発車ベルヘルプ - スイッチのつなぎ方を参考にいたしました。
ありがとうございました。

なお、この記事で記載された内容は、管理人(chiko ryo)では動作確認を行っておりません。くれぐれも自己責任でお願いします。また、このサンプルは著作権フリーですが、これを参考にしていかなる損害が出たとしても管理人(chiko ryo)は責任を負いませんのでご容赦ください。

0 件のコメント:

コメントを投稿

質問や意見などどしどしお寄せください!!