2008-01-17

VBAUSBIO.DLLのベータ版(Ver0.51) USB-An命令修正 

VBAUSBIO.DLLにUSB-An命令を追加したベータ版を作成中です。
アナログ入力で255までの値しか取り込めないBUGがあり対応させました。
ダウンロードは以下のアドレスです。
http://bake-san.com/download/vbausbio/beta/vbausbio_v051.lzh

参考までに追加されたUSB-An命令の簡単な説明です

【新機能】
USBで電子制御(Km2Net様著者)のサンプルソースで使われている
USB-An用の関数と互換命令を追加しました。

・openUsbIo
関数 :USB-IOオープン
概要 :接続中のUSB-IOを全てオープン
戻り値:発見したUSB-IO数 存在しない場合は 0

・closeUsbIo
関数 :USB-IOクローズ
概要 :オープン中のハンドルクローズ
戻り値:なし

・outputUsbIo
関数 :USB-IO 出力
引数 :int iUsbioNo オープンしたUsbIo 0~
  :int iPort 出力ポート 0 or 1
:int iData 出力データ
概要 :USB-IO の指定ポートを出力
戻り値:0 出力成功 その他エラー

・inputUsbIo
関数 :USB-IO リード
引数 :int iUsbioNo オープンしたUsbIo 0~
:int iPort 入力ポート 0 or 1
概要 :USB-IOの指定ポートを読取
戻り値:0 以上 入力値 0 未満 エラー

・setUsbAnChannel
関数 :USB-An チャンネルセット
引数 :int iUsbioNo オープンしたUsbIo 0~
:int iCh チャンネル
: 8: 8Bit変換 4Ch 2DIO
: 10:10Bit変換 4Ch DIOなし
概要 :USB-Anの読み取りチャンネル設定
戻り値:0 設定成功 その他エラー

・setUsbAnMode
関数 :USB-An モードセット
引数 :int iUsbioNo オープンしたUsbIo 0~
:int iAnModeParam
: 8: 8Bit変換 4Ch 2DIO
: 10:10Bit変換 4Ch DIOなし
概要 :USB-Anの読み取りモードを設定
戻り値:0 設定成功 その他エラー

・inputUsbAn
関数 :USB-An 入力
引数 :int iUsbioNo オープンしたUsbIo 0~
:int iCh 読み込みチャンネル
概要 :指定チャンネルのアナログ値読み取り
戻り値:0 以上 入力値 0 未満 エラー

・outputUsbAnD
関数 :USB-An デジタル出力
引数 :int iUsbioNo オープンしたUsbIo 0~
:int iData 出力データ
概要 :USB-An 出力
戻り値:0 以上 入力値 0 未満 エラー

・inputUsbAnD
関数 :USB-An デジタル入力
引数 :int iUsbioNo オープンしたUsbIo 0~
概要 :USB-An デジタル入力
戻り値:0 以上 入力値 0 未満 エラー

6 件のコメント:

  1. はじめまして、chibi6と申します。
    VBAUSBIO.DLLのベータ版(Ver0.51) 公開いただきありがとうございます。現在、本DLLを使用しプログラム作成中なのですが、質問させていただきたくコメントいたしました。

    setUsbAnMode(0, 10)
    inputUsbAn(0, 0)
    として、ごく単純に0chのデータを読み込んでいます。これは期待通り動くのですが、inputUsbAn(0, 1)などとして他のチャンネルを読み込むことができません(デタラメな値が入ります)。
    関数のなかにsetUsbAnChannelというものがありますが、なにか関係があるでしょうか?
    パラメータをいろいろ変えてみましたがダメでした。

    お暇なときで結構です。なにかアドバイスいただけると助かります。宜しくお願いいたします。

    返信削除
  2. GWに入ってコメントが遅くなりました、すみません。

    自分でもアナログ3点を読み込むテストをしています。
    私の環境では正しく読めています。
    参考までにソースの抜粋を載せておきます。

    Dim ret As Long
    ret = openUsbIo
    ret = setUsbAnMode(0, 10)
    ret = inputUsbAn(0, 0)
    Debug.Print "inputUsbAn0=" + Str(ret)
    ret = inputUsbAn(0, 1)
    Debug.Print "inputUsbAn1=" + Str(ret)
    ret = inputUsbAn(0, 2)
    Debug.Print "inputUsbAn2=" + Str(ret)
    closeUsbIo

    setUsbAnChannelはsetUsbAnModeの命令の中で呼ばれている関数です、通常は使いません。

    ハード側とも関連しているかも知れません。
    0chにつなげているものをそのまま1chにつなげても駄目なのでしょうか?
    具体的なソースとハードの情報があるとこちらでも試して見れると思います。
    情報をもう少しいただければと思います。

    返信削除
  3. ご回答ありがとうございます。
    ハード的には、ごく単純に可変抵抗をつけているだけで、動作する0chのものをそのまま1chにつけて試しています。また、0ch、1chを短絡させて同じ入力が入るようにもしてみました。
    現在(5月7日)回路が手元にないため実験できませんが、早急にご呈示いただいたプログラムで試して、再度ご報告させていただきます。

    返信削除
  4. お世話になります。動作確認しましたのでご報告させていただきます。ご呈示いただいたプログラムは期待した動作をしました。

    ところが....
    下記のプログラムは、1ch(もしくは0ch)のデータを連続して取り込み表示するものです。実行して取り付けた可変抵抗を回すと、0chの場合は表示もグリグリと変わりますが、1chでは数値が変わりません。
    Option Explicit
    Dim st As Integer
    Private Sub CommandButton1_Click()

    Range("A2").Value = openUsbIo
    Range("A3").Value = setUsbAnMode(0, 10)
    st = 0
    Do
    Range("A1").Value = inputUsbAn(0, 1)
    DoEvents
    Loop While (st = 0)

    End Sub

    Private Sub CommandButton2_Click()
    st = 1
    End Sub

    そこで、0chと1chのみですが、次のようなプログラムで関数ごとに実行して、動作を確認してみました。

    Option Explicit
    Private Sub CommandButton1_Click()
    Range("A2").Value = openUsbIo
    End Sub
    Private Sub CommandButton2_Click()
    Range("A3").Value = setUsbAnMode(0, 10)
    End Sub
    Private Sub CommandButton3_Click()
    Range("A1").Value = inputUsbAn(0, 0)
    End Sub
    Private Sub CommandButton4_Click()
    closeUsbIo
    End Sub
    Private Sub CommandButton5_Click()
    Range("A1").Value = inputUsbAn(0, 1)
    End Sub

    0chはモード設定後、
    inputUsbAn(0, 0)
    を実行するたびに入力値が更新されますが、

    1chは、「モード設定」もしくは「0chの読み込み」の、どちらかを実行した直後には、正しく読み込めるようですが、
    inputUsbAn(0, 1)
    だけを連続して実行すると、2回目からは1回目のデータと同じものが返されるようです。


    最初のコメントの時は、「1chは読見込めない」という書き方でしたが間違っていたようです。正しくは、「連続で読み込むことが出来ない」と言うところでしょうか。

    なんだか、せっかく公開していただいているDLLに「ケチ」をつけているようで恐縮ですが、どうぞご理解ください。
    時間があるときにでもご確認いただければと思います。

    返信削除
  5. なんか、デバッグをしていただいている感じで恐縮です。

    HSP用のソースを元にUsbAn対応をする時に、不明な処理があり、その辺りのBUGっぽいです。

    もう一度見直してみます、解決できない時にはKm2netさんにも問合せをしてみます。

    対応には時間がかかりそうです。
    気長にお待ちいただければと思います。

    急ぐようであれば、
    本来はUSB-IO用の命令だけでもUsb-Anは読めるのでどうしてもうまくいかないときには、そちらのサンプルも考えてみます。

    返信削除
  6. 恐縮だなんてとんでもありません。デバッグに協力できたのなら喜ばしい限りです(まだバグと決まったわけではありませんが)。

    当面はOchしか使う予定はありませんし、仮に他のチャンネルを使うにしても、モード設定とペアで使えば問題なわけですから、お急ぎいただく必要はありません。
    田植えも大変でしょうから、どうぞお暇なときにでもお願いします。

    返信削除