C#で外部機器との通信をする4つの方法

2020年1月30日

私は仕事で自動計測のプログラムを作ることがあります。ほとんどの場合WindowsにVisual StudioをインストールしてC#でコードを書いています。

この際計測器との通信が必須なのですが、この通信の方法は何通りかあってそれぞれ長所短所があります。

この記事ではそれらの通信方法の長所短所を紹介します。また別の記事で各接続方法の詳細も書きましたのでそちらのリンクも貼っておきます。

C#で計測器と通信する方法

PCで計測器を制御するとき、ほとんどの場合はWindowsが使われると思います。私はWindowsの開発環境にはマイクロソフト製のVisual StudioでC#を使うことをお勧めしています。

理由はいくつかありますが、Windowsであればインターフェースのドライバがメーカーから提供されている場合がほとんどなので、「本当はつながりません」ということがほぼないからです。メーカーがつながると言ったなら、どんなひどくてもかならず方法があります。

また、Visual Studio C#はマイクロソフトから無料で提供されていますので、お金を掛けずにプログラミングを始めることができます。また、C#は強力な補完機能が付いていますので、コードを覚えたての人にとても親切です。

Windowsでは、通信の規格はシリアル通信、GPIB、USB、LXI(LAN)の4種類の中から選ぶことができます。シリアル通信とUSBは1対1、GPIBとLXIは1対多で通信が行えます。

それぞれどのような特徴があるのかを説明します。

シリアル通信を使う

シリアル通信を使った場合はWindows搭載のドライバで済んでしまうことが多いです。またC#の標準機能にもシリアル通信のツールが用意されているので一番一般的な方法です。

しかし、シリアル通信の場合は複数台を一度に制御することができません。USBシリアルケーブル等でCOMポートの数を増やせば可能ですが、COMポート番号が起動ごとに変わる可能性があり、トラブルのもとになります。

自動で割り振られたCOMポートの番号を修正して通信を開始するようにプログラミングすることができますが、GPIBであればそのような処理も必要ないので、どちらを選ぶかは迷うところです。

シリアルケーブルでの接続は制御する計測器が1台で、COMポートの番号が変わってしまってもコードを自分で書き換えて使えるような人に向いています。小規模で簡単なプログラミングに向いているでしょう。

シリアル接続について以下の記事にまとめましたので参考にしてください。

USB通信を使う

USBはすでに歴史の長い規格ですが、計測器でメジャーになってきたのは最近です。ここ十年で機器の裏にTypeBのコネクタをよく見るようになりました。

USB接続はシリアルと同様に1対1の接続になりますが、抜き差しですぐに相手を認識できることが利点です。シリアル通信はCOM番号が自動で割り振られるので、番号が変わるとエラーを吐いてしまいます。

USB接続では接続機器のID番号を使って通信することができますので一度通信ができてしまうと、その後に障害に遭遇することは少ないです。

USB通信は、小規模な1対1の制御でプログラムをリリースしてだれかに使ってもらうような開発に向いていると思います。

USBの接続について記事を書きましたので参考にして下さい。

GPIB通信を使う

GPIBは古くから計測機器の接続に使われてきました。GPIBは複数の計測器を1台の端末で制御できるので大規模、高度な計測システムに向いています。もちろん1台の制御もできます。

GPIBはシリアル通信と違ってスピードが固定なので通信プロパティの設定がありません。設定は各計測器のアドレスだけです。

GPIBは端末から数珠繋ぎ(デイジーチェーン)に計測器をつなげていきますが、このケーブルがすごい高価です。

以前8台接続のシステムを作ったことがありますが、ケーブルだけで10万円以上かかりました。PCより高かったかもしれません。

GPIB通信は、GPIBポートを持つ測定器が複数台あり、それぞれが連携して制御を行う場合に使いやすいと思います。ケーブルがデバイスが高価になりがちなのでケーブル代なんて気にしな~い、なんて大規模な場合にお勧めです。

GPIBについても記事にしています。参考にしてください。

LAN(LXI)通信で使う

長いことGPIBがデフォルトスタンダードでしたがこれからはLAN(LXI)が主流になるといわれています。

LXIでは1対多の接続が可能で、ケーブルの分岐には普通のLAN用のハブが使えます。また大抵のPCにはLANポートがあるので変換器を買い足す必要もありません。

ケーブルも既存LAN用の物が使えます。GPIBケーブルは長くても5m程度でしたが、LANの規格では最長100mでも通信できます。そのうえLANケーブルはGPIBケーブルに比べて非常に安価です。

このようにLXIはGPIBに比べて劣っている部分がほとんどないのですが、まだまだ規格が新しく、私もよく研究していません。今後LXIについて調べる機会がありましたらこのBlogでも紹介します。

(令和2年1月追記)
LXIについてまとめました。

まとめ

この記事では自動制御に必要な計測器と端末の通信方法について説明しました。実は近々新しい計測器が手に入る予定なのでLXIなどについていろいろ研究しようと思っています。うまくいったらこのブログにも紹介しますので期待してください。

このブログではC#初心者のためにC#入門の資料も紹介しています。通信方式の記事だけだとちょっと...という方は参考にしてください。