種ヶ島

いろいろなエッセイを書いてます。

エクセルのVBA(マクロ)からシリアル通信で、機器と接続してデータを取得する方法


スポンサーリンク

エクセルのVBAで、USB/RS232C通信して、測定器などの値をExcelに入力します。

木下清美氏のホームページ
activecell-木下清美のホームページ

 

木下清美氏は、EasyCommの提供とサポートを終了していますが、
↓ここから、少し古いですが、Version1.50がダウンロードできます。
USB-シリアル・インターフェース変換アダプタを使用したEasyCommによる複数の測定器の制御
EasyCommのマニュアルに下記のように書いてあるので、誰かがアップしているかもしれません。
【(3)ecは個人,法人を問わず,木下隆の許可無く自由にダウンロードし,配布することが出来ます.】

 

Vectorからダウンロード

または、Vectorから『VB.NETモジュール』をダウンロードできます。ちょっと違いが分かりませんが、簡単に見る限りではほとんど同じだと思われまが、各自で動作確認して下さい。

EasyComm .NETの詳細情報 : Vector ソフトを探す!


スポンサーリンク

 

 EasyCommマニュアルの抜粋

~~~~~~~~~~~~~

EasyComm をダウンロードしていただきましてありがとうございました.
EasyCommは,シリアルポートを手軽に利用することを目的としたVisualBasic系のモ
ジュールです.
EasyCommの機能を利用するためにはインストールなどの手間は必要ありません.
ec.bas と ecDef.bas の 二つのファイルを,標準モジュールにインポートするだけ
で使えるようになります.
EasyCommは,Office97(Windows版)以降のVBAに対応しているので,Excel97,2000,XP
やAccess,Word,Outlookなどで使用できます.また,VB(VB.netを除く)でも動作しま
すが,ここではExcelで使用する手順を説明します.

~~~~~~~~~~~~~

私の会社では、測定器のデータを取得するのに使用しています。

EasyComm概略

マクロを使っていますが、詳しい訳ではありませんので、分かる範囲で説明します。使用するエクセルファイルのモジュールに『ec』と『ecDef』をインポートして、調整せずにそのまま使います。EasyCommを動かすコードを別に書きます。
動作としては、こんな感じです。

 

測定器の測定ボタンの代わりにPCのEnterキーを押して

  1. エクセルのボタン(オブジェクト)を押して、マクロをスタートさせる(EasyComm作動中)
  2. パソコンのEnterキーを押して、装置(測定器)を動作させて、データを取得する
  3. データ(文字列や数値)から、必要な部分を取り出す 
  4. エクセルに表示する
  5. セルを移動する

測定器の測定ボタンの代わりにPCのEnterキーを押してデータを取得する感じです。今、使っている測定器は、複数のデータが1つの数列で取得されるので、その数列から『Right(a$, 6) 』こんな感じで、必要な部分を取り出します。
測定が終わったら、エクセルの終了のボタン(オブジェクト)を押してマクロを終了サせる。

 

USB/RS232Cを繋ぐパソコンのUSB端子のポート番号を調べます。
(USB端子のポート番号をマクロで指定するので、コードを繋ぐUSA端子はいつも同じ場所の端子につなぎます。)
コードで通信速度を指定します。
申し訳ありませんが、途中のコードの意味はよく分かりません
a$が、得られたデータなので、そこから必要な部分を切り取り、セルに入力
ポートを閉じる


スポンサーリンク

 

 

株式会社ミツトヨ

また、こちらで測定データのパソコン入力インターフェースなどを扱っているようです。智識が無く、紹介だけで申し訳ありません。

 

www.mitutoyo.co.jp

 

お役に立てたら幸いです。

 

マクロのコードの例

こんな感じで別のモジュールにコードを書いて、EasyCommを使用しています。

 

Sub エンター()

'「エンター」のマクロを実行すると、F2に測定中と表示する
'Enterキーを押すと「移動」のマクロを実行する(測定するマクロ)
'指定のポートを開いてa$に測定値を格納
'変数「kido」に Right(a$, 6) で数値を切り出し
'ActiveCellに値を入力して1行下がる
'この繰り返し
'測定が終わったら「終了」のマクロを実行して、マクロの終了

  

On Error Resume Next 'エラーの時は、動作しない?(次に進む?)

Range("f2") = "測定中"
With Range("f2").Font
.ColorIndex = 3
End With

Application.OnKey Key:="~", Procedure:="移動" 'エンターキーを押すと”移動”のマクロを実行
Application.OnKey Key:="{ENTER}", Procedure:="移動"


End Sub

 

Sub 移動()


ActiveCell.Select


ec.COMn = 3 '指定のポートを開く
ec.Setting = "4800,e,7,2"
ec.HandShaking = ec.HANDSHAKEs.XonXoff
ec.Delimiter = ec.DELIMs.CrLf
ec.Ascii = "MES" & Chr(13) & Chr(10)
a$ = ec.AsciiLine

kido = Right(a$, 6) '取得したデータから輝度の数値を切り出し

ActiveCell = kido
ec.COMn = 0


ActiveCell.Offset(1, 0).Activate


End Sub

 

 

Sub 終了()
Application.OnKey Key:="~"
Application.OnKey Key:="{ENTER}"

Range("f2") = "測定終了"
With Range("f2").Font
.ColorIndex = 1
End With


End Sub