はじめまして。
この度USB接続式の温度計を購入し、それを1台のPCに複数個接続して色々な場所での温度・湿度を計測したいと考えています。
温度計はUSBRHというものを用いていて、商品購入時にdllファイルが既についていて、それを用いてプログラミングが出来るという状態です。
こちらにあるFindUSBという関数を用いて、
接続されているデバイス名を取得出来るということなのですが、
複数個接続をした場合、上手くデバイス名を温度取得関数に渡せずに、
片方のデバイスの温度のみが帰ってくるという形になってしまいます。
プログラムのここに関係する部分のみを書くと
dev = FindUSB(index)
If dev = "" Then Exit Do
Device = dev
と予め定義しておきTimer関数で
Private Sub Timer1_Timer()
Dim temp As Double
Dim rh As Double
Dim re As Long
dev = FindUSB(index)
re = GetTempHumidTrue(Device, temp, rh)
If re = 0 Then
lblTemp(0).Caption = Format(temp, "##0.00℃")
lblHumid(0).Caption = Format(rh, "##0.0%RH")
dev = FindUSB(index)
re = GetTempHumidTrue(Device, temp, rh)
If re = 0 Then
lblTemp(1).Caption = Format(temp, "##0.00℃")
lblHumid(1).Caption = Format(rh, "##0.0%RH")
Else
lblTemp(1).Caption = "未検出"
lblHumid(1).Caption = "未検出"
End If
Else
lblTemp(0).Caption = "未検出"
lblHumid(0).Caption = "未検出"
End If
End Sub
と書いています。またモジュールで
Option Explicit
Public Declare Function GetVers Lib "USBMeter.dll" _
Alias "_GetVers@4" (ByVal dev As String) As String
Public Declare Function FindUSB Lib "USBMeter.dll" _
Alias "_FindUSB@4" (ByRef index As Long) As String
Public Declare Function GetTempHumid Lib "USBMeter.dll" _
Alias "_GetTempHumid@12" (ByVal dev As String, ByRef temp As Double, ByRef humid As Double) As Long
と書いています。
どのようにしたら複数個接続用になるのか教えて頂けると幸いです。
よろしくお願いします。
最後にバージョンはVB6.0でOSはXPを用いています。
そのライブラリを使った事が無いので、憶測でしか答えられませんが:
> dev = FindUSB(index)
引数の index には、どのような値を指定していますか?
提示のページを見る限りでは、
index = 0
Do
dev = FindUSB(index)
If dev <> "" Then
Debug.Print dev '実際には、配列なりコレクションなりに蓄える
Else
Exit Do
End If
Loop
のようにして列挙できるような気がします。
>魔界の仮面弁士さん
indexは0に指定していたのですが、書いてある通り、
Debug.Print devを使ってデバイス名が渡っているか確認したところ、
上手く渡ってなかったのが、分かりました。
そこを直したら上手くいきました。
ありがとうございました。
>オショウさん
>リファレンスでAPIを確認する限り・・・
>そのプログラム間違ってませんか?
>dev = FindUSB(index) と、なっており、devにデバイス名が入るが
>re = GetTempHumidTrue(Device, temp, rh) では、Deviceとなって
>います。
>dev = FindUSB(index)
>re = GetTempHumidTrue(dev, temp, rh)
>なら解りますが・・・
>それくらいかナ〜・・・
>以上。
あっち消されるとアレなので、こっちに返信書かせてもらいますね。
Device = dev
と始めに定義してあったので、それをそのまま使ってるので、ややこしいんですけど、渡っていたみたいです。
そこが混乱してしまって上手く変数を変えて渡せなかったのが、原因みたいでした。
コメントありがとうございました。
ツイート | ![]() |