VBAシリアル通信でT&D製TR73Uの現在値をPCに取り込む!

こんにちは、Ryoです。
今回はT&D製のデータロガー「TR73U」おんどとりの現在値をExcel-VBAで取り込むコードについてご紹介したいと思います。
小型で安価、且つ測定精度も悪くないですから良い商品だと思います。

この製品の通信方法はUSBかシリアルの2通りがあるのですが、私はEasyCommを使って
シリアル通信していますので、その内容になります。

EasyCommについては以前の記事で簡単ですが紹介していますので、良かったら
こちらをご確認ください。



1.データロガー「TR-73U」について

先ず最初に製品について簡単にご紹介しますと、とても小型で温度/湿度/大気圧を同時測定してくれる製品で、USB/シリアル通信も可能です。
この通信の部分が他社と違って通信仕様を開示してくれるという点がとても良いです。

私は製品測定時の環境データを特性データと合わせて記録したかったので、通信出来るものを
探していましたがリーズナブルな価格で且つユーザー側でプログラム処理させてくれる製品は
T&D社だけでしたね。ほんと助かります。

<< T&D 温湿度・大気圧データロガー おんどとり TR-73U

・センサ:(サーミスタ/高分子膜抵抗式)、大気圧センサ(内蔵)
・測定チャンネル:温度 1ch /湿度 1ch /大気圧 1ch
・測定範囲:温度:0~50℃
・湿度:10~95 %RH
・大気圧:750~1100 hPa
・測定分解能:温度:0.1℃/湿度:1%RH/大気圧:0.1 hPa
・データ記録容量:8,000個 x 3ch
・記録間隔:1, 2, 5, 10, 15, 20, 30 秒 1, 2, 5, 10, 15, 20,
30,60 分 (15通りから選択)


T&D シリアル通信ケーブル TR-07C  >>

USBケーブルは本体に付属していますが、
シリアル通信の場合はこちらのケーブルが
必要になります。

・ケーブル長:約1.0m
・コネクタ形状:専用コネクタ-D-sub9ピン

通信仕様書については、こちらの公式ページからお問い合わせで依頼するとパスワードを
教えてもらえますので、それでダウンロードできます。

2.Excelサンプル画面

今回ご紹介するサンプル用として簡易的な表を作ってますので、画面のように対象セルに
温度/湿度/大気圧を表示させたいと思います。

3.コード全体と解説

コード全体としては以下の通りになります。

Sub Tr73u_Serial()
                         
    ec.COMn = 3
    ec.Setting = "19200,n,8,1"    'ボーレート19200、パリティなし、データビット8、ストップビット1
    ec.WAITmS = 1000
   
    ec.Ascii = Chr(0)  'NULLを1バイト送信しアクティブ状態にする
    
    '↓現在値読取りコマンドの送信
    ec.Ascii = Chr(&H1) & Chr(&H33) & Chr(0) & Chr(&H4) & Chr(0) & _
    Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(&H38) & Chr(0)
    
    ec.WAITmS = 200
     
    Dim S_Time   As Date              'TimeOut設定用
    Dim binary_data()   As Byte       ' バイナリデータ格納用
    Dim Temp, Hum, At_Press As Double
    
     S_Time = Now                     ' 現在時刻読み込み
     ec.BinaryBytes = 26              ' 受信バッファから全データ(26バイト)を取得
     Cells(3, 2) = S_Time
   
    Do
        If Now > S_Time + TimeSerial(0, 0, 2) Then Exit Sub     'TimeOut 2sec
        DoEvents
   
        If ec.InBuffer >= 10 Then        ' 10バイト以上を受信
            DoEvents
            binary_data() = ec.Binary    '配列へ格納
            Exit Do
        End If
    Loop
    
    '対象となる受信データを16進数に変換後、数値化&10進数に変換する
    '後はT&D社の通信仕様に記載されているFormatに従い計算して求める。
    '温度 = (DATA-1000)/10
    Temp = (CInt(Val("&H" + (Right("0" & Hex(binary_data(6)), 2) & _
    Right("0" & Hex(binary_data(5)), 2)))) - 1000) / 10
    Cells(4, 2) = Temp
    
    '湿度 = (DATA-1000)/10
    Hum = (CInt(Val("&H" + (Right("0" & Hex(binary_data(8)), 2) & _
    Right("0" & Hex(binary_data(7)), 2)))) - 1000) / 10
    Cells(5, 2) = Hum
    
    '気圧 = DATA/10
    At_Press = CInt(Val("&H" + (Right("0" & Hex(binary_data(10)), 2) & _
    Right("0" & Hex(binary_data(9)), 2)))) / 10
    Cells(6, 2) = At_Press
    
    ec.COMn = -1
  
End Sub

通信用コマンドは通信仕様書に記載されていますので、準じて記述するとこの様な形です。
PC⇒TR-73UへAsciiで送信しています。

記述内の ec.Ascii = Chr(&H1) & Chr(&H33) & Chr(0) & Chr(&H4) & Chr(0) & _
Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(&H38) & Chr(0)の部分になります。

受信データはバイナリで取得しますのでbinary_data()に格納します。
その際の一例としては以下となっています。

受信するデータはTotalで26バイトあり、その内温度/湿度/大気圧の部分は
上表に示す通りbinary_data(5)~(10)になります。

受信データを16進数に置換しますので、上の例では温度が「04 F1」、
湿度が「06 41」、大気圧が「26 F9」となります。
(例 : 04  F1 ⇒ 1+15*16+4*16^2+0=DATA)
このデータから計算して10進とし、通信仕様書に従って表示値になるよう計算します。

‘温度 = (DATA-1000)/10
Temp = (CInt(Val(“&H” + (Right(“0” & Hex(binary_data(6)), 2) & _
Right(“0” & Hex(binary_data(5)), 2)))) – 1000) / 10

‘湿度 = (DATA-1000)/10
Hum = (CInt(Val(“&H” + (Right(“0” & Hex(binary_data(8)), 2) & _
Right(“0” & Hex(binary_data(7)), 2)))) – 1000) / 10

‘気圧 = DATA/10
At_Press = CInt(Val(“&H” + (Right(“0” & Hex(binary_data(10)), 2) & _
Right(“0” & Hex(binary_data(9)), 2)))) / 10

後はこの結果を対象セルに表示させれば、上のサンプル画面に様に現在表示値を
取り込めます。

この温度/湿度/大気圧をデータとして欲しいタイミングで取り込めるのは何かと
有用なのでT&Dの製品は良いなぁと個人的に思ってます。




以上がTR73Uからのデータ取り込みに関するVBAコードでした。
他にもやり方あるように思えますので、時間あれば色々やってみようとは思ってます。
特にUSBとかですね。

今回ご紹介した内容が何かのお役にたてれば幸いです。

Ryo

スポンサーリンク
スポンサーリンク

楽天トラベル

シェアする

フォローする

スポンサーリンク

楽天トラベル