...

DCモーター過渡現象解析用高速自動測定システム開発

by user

on
Category: Documents
34

views

Report

Comments

Transcript

DCモーター過渡現象解析用高速自動測定システム開発
卒
業
研 究
題
報
告
目
DC モーター過渡現象解析用高速自動測定システム開発
指
導
河津
教
哲
員
教授
報 告 者
学籍番号:1040202
氏名
北地 敦明
平成
高知工科大学
16 年
2月 9日
電子・光システム工学科
目
1
前書き
2
目的
3
フィードバック理論
4
次
3−1
フィードバック制御の構成
3−2
フィードバック制御の利点と欠点
3−3
フィードバック伝達関数
構築回路
4−1
構築基準
4−2
素子特性
(1)PN接合
(2)発光ダイオード(LED)
(3)受光トランジスタ(フォトトランジスタ)
4−3
5
6
制作回路
構築システム
5−1
基本原理
5−2
概要
5−3
使用装置
プログラム
6−1
自動測定
6−2
測定プログラム説明
6−3
プログラミング原理
1
7
8
モーター立ち上がり速度・モーター回転数測定実験
7−1
システム確認
7−2
予測
7−3
システムの基本動作確認
7−4
フィードバック係数の効果
7−5
電流制限による効果
7−6
負荷抵抗を用いた測定
7−7
コンデンサ用いた測定
9
考察及びまとめ
8−1
考察
8−2
まとめ
謝辞
10
参考文献
11
付録
作成プログラム
エクセル
測定結果
2
1
前書き
近年の技術革新の中で、今日情報化の波も押し寄せてきています。そのなかで必要とさ
れているパーソナルコンピュータが、世の中のすべてのものを制御しています。また、L
SIの微細化・高速化が進んできているので、制御スピードが高速になってきています。
その中で制御技術は自動車、ディジタル家電と言われている、冷蔵庫・炊飯器・洗濯機・
掃除機といった物や。また、携帯電話・DVDプレイヤー・ディジタルカメラ・パソコン・
液晶テレビ・といったマルチメディア製品にいたるものや、人工衛星・旅客機・新幹線等
といった直接生活に関係の無い物まで、制御されています。
これらの事を感じていたので、フィードバック制御を用いたモーター制御を行いたいと
思い、「DCモーター過渡現象用高速自動測定システムの開発」と銘打って卒業研究にして
システム開発を目的とする。
3
2
目的
今回の卒業研究を進めていく上で、必要とされる問題点または、テーマを次の3点を目
的として卒業研究を行った。
2−1
先輩の行った研究で取得されたデータの問題点の改良
2−1−1
立ち上がりの特性
2−1−2
フィードバック係数
2−1−3
前年度及び前々年度卒業研究のテーマの結合
2−2
パソコンを用いて高速自動測定制御の技術取得
2−3
今回の卒業研究を通して生きた技術を身につける事
4
3
フィードバック理論
3−1
フィードバック制御の構成
制御対象の出力である制御量センサーによって観測され、目標値(reference)との比較によ
りその差が計算される。この情報に基づき制御器(controller)が操作部での操作量を決定し、
制御対象に反映させることをフィードバック(feedback)という。また、このようなシステム
(制御方法)をフィードバック制御(feedback control)と呼んでいる。
ここに標準的なフィードバック制御系のブロック線図と図の用語の説明を図3−1、
表13−1(付録)に示す。
外乱
動作信号
目標値
基準入力
要素
制御信号
制御器
主フィード
バック量
操作量
操作部
フィード
バック要素
制御装置
図3−1
フィードバック制御の標準構成
5
制御対象
出力
3−2
フィードバック制御の利点と欠点
現在の制御系では、ほとんどの制御にフィードバック制御が用いられている。その理由
は、制御対象の特性を正確に把握する事が難しく、外乱が避けられない事が多いため、フ
ィードバック制御を用いるとこれらの影響を抑制できるためである。しかし、図3−1で
示すように、フィードバックは基本のフィードバック信号と目標値を比較して入力値を決
めているので、多少の応答に対する適応性に欠点が見られる。
また、フィードバックを敏感に効くようにすると速度が周期的に大きく変動するハンチ
ングが起きるので、制御系を安定に保つ事がフィードバック制御の今後の課題でもある。
しかし、上述したような事が現実には起こるため、これらがフィードバック制御の基本と
なっている。
さらに近年マイクロプロセッサの発達・普及によりサンプル値制御(sampled data
control)の理論に基づいたディジタル制御(digital control)が広く用いられている。ディ
ジタル制御系の一般的な構成図を図3−2に示す、図3−1のフィードバック制御系と異
なる点は、制御装置がA/D,D/A変換機及びマイクロプロセッサで置き換えられてい
ることである。
図3−2
ディジタル制御系
上述のように、制御系にはさまざまなものがあるが、良い制御系はつぎのような条件
を満足しなければならない。
(a)制御系が安定に動作する
(b)目標値変化に対して、出力がすばやく追従する
(c)外乱の影響を抑えることができる
(d)制御対象の特性の経年変化にも対応できる
6
3−3
フィードバック伝達関数
図3−3
r
v
u
f
y
n
伝達関数図
目標値
フィードバック量
操作量
外乱(雑音等)
出力と信号
センサノイズ
三つの構成要素である、y・v・n出力が入力の和(もしくは差)の線形関数であると
する。そのとき考えられる方程式は
y = P (d + u )
v = F ( y + n )
u
= C (r − v )
式3−1で表すことができる。
7
(式 3−1)
次に、式3−1にx1・x2・x3を図3−3のように加える。そのときの信号との関
係式は式3−2に示す。
x 1 = r − Fx 3
x 2 = d + Cx 1
x 3 = n + Px 2
(式 3−2)
また、式3−2の式を行列式に変換すると式3−3となる。
 1
− C

 0
0
1
− P
F
0
1
  x1   r 
 x 2  =  d 
   (式 3−3)


  x 3   n 
と示すことができる。
よって、システムが適切であるための必要な条件は、式3−3で示す通り3×3行列が正
則、行列式1+PCF が恒等的には0でないということになる。
8
4
構築回路
4−1
構築基準
フォトダイオードを用いる方法と、フォトトランジスタを用いる方法を試みて、どちら
の素子を使用すれば、効率が良いのかを確かめた。
フォトダイオードを使用したときの回路図は図4−1に示す。
図4−1 LED−フォトダイオード回路
フォトダイオードを用いる回路は、フォトダイオードの受光感度が低いため、フォトダ
イオードからの信号をトランジスタで電流増幅する必要がある。
9
フォトトランジスタを使用したときの回路図は図4−2に示す。
図4−2
LED−フォトトランジスタ回路
フォトトランジスタを使用した場合、フォトトランジスタの光・電流変換効率が高いの
で、増幅回路で電圧を増幅しなくても良いという利点がある。また、フォトトランジスタ
の前に抵抗を組み込む事で、5V電源がオンになった場合にフォトトランジスタにコレク
タ電流が流れ込まなくなるので、フォトトランジスタはオフの状態になる。反対に、フォ
トトランジスタの後ろに抵抗を組み込む事により、5V電源がオンになったときにフォト
トランジスタはオンの状態になり、エミッタに電流が流れフォトトランジスタが作動する。
双方の回路を検討した結果、室内の光量(蛍光灯、窓から入る太陽光)の変化に対する
安定性の良いので、今回の測定実験ではフォトトランジスタ方式を使用した回路を採用す
る。
10
4−2
素子特性
構築システムを構築するために必要な回路を作成する。回路には発光ダイオード(LE
D)と受光トランジスタ(フォトトランジスタ)を使用する。これには回路設計技術が必
要となってくる。
使用するLEDとフォトトランジスタの特性を知っておく必要がある。また、そのため
には半導体デバイスの基礎を知っておく必要がある。
次頁からPN接合、LED、フォトトランジスタ特性の原理について述べる。
11
(1) PN接合
PN接合(PN junction)とは、P型半導体の表面とN型半導体の表面を接触させ、その
境界面で双方の半導体の原子が直接的に結合するようにしたものである。
では、実際にはどのように半導体に電流が流れるのか。それは、P型半導体とN型半導
体のエネルギーバンド図で示すと理解しやすいので、N型半導体とP型半導体を対比させ
た図4−3を下記に示す。
Efp:P型半導体のフェルミレベル
Efn:N型半導体のフェルミレベル
Ei
:真性フェルミレベル
図4−3
P型半導体とN型半導体の電子と正孔の状態とエネルギーバンド図
12
P型半導体の多数キャリアは正孔であるが、少数キャリアとしての電子も存在し、N型
半導体の多数キャリアは電子で、少数キャリアとして正孔が少量存在している。また、P
型半導体のフェルミレベルは禁止帯の下に、N型半導体のフェルミレベルは禁止帯の上方
に位置している。これは、前頁にある図4−3でも確認が出来る。
P型半導体、N型半導体双方のキャリアの移動によって、N型半導体の接合境界部付近
のドナーは電子を放出し、正イオンとなる。また、P型半導体の接合境界部付近では、ア
クセプタが正孔を放出し、負イオンとなる。この結果、P型半導体、N型半導体双方のフ
ェルミレベルEfが一致するので、接合部付近には拡散電位差Vdにより、内部電界が発
生する。
P型半導体とN型半導体との接触による、正孔と電子のそれぞれ反対の領域へ向かう拡
散移動は、拡散電位差による電界がキャリアを流す量と、拡散で移動できる量とが等しく
なった条件安定する。
空間電荷領域には、ドナーやアクセプタにより変化した電子や正孔等のキャリアは存在
しなくなるので、空乏層(depletion layer)と呼ばれる。
またPN接合では、P型領域とN型領域を比べるとN型領域の電位が高くなるのでエネ
ルギー差が生じる、このエネルギー差をエネルギー障壁という。
PN接合に電圧をかけるとエネルギー障壁により、エネルギーの高低が生じ電流が流れ
たり流れなかったりといった現象が起こったりする。そのためにオームの法則が通用しな
い。電圧をかけたときに、電流が流れる方を順バイアス、電流が流れない方を逆バイアス
という。この時の状態を図4−4に示す。
P型
電子
電圧
電圧
(−)
(+)
順バイアス
空乏層
N型
電子
(+)
正孔
P型
正孔
電圧
N型
(−)
逆バイアス
図4−4
順・逆バイアスの概念図
13
電圧
(2) 発光ダイオード(LED)
発光ダイオード(Light Emitting Diode:LED)は PN 接合ダイオードの順方向状態に
おいて、電子と正孔(ホール)の再結合による発光を積極的に行うようにしたものである。
では、どのようにして再結合が行われているのだろうか。N 型領域の伝導帯の電子が P
型領域の伝導帯に流れ込む。この結果、外部回路には順方向電流が流れる。
どのようなプロセスで順方向に電流が流れるようになっているのか。図4−5に示すよ
うに、接合面を通過して P 型領域に注入した電子や、N 型領域に注入した正孔等の少数キ
ャリアは、それぞれの領域で電子と正孔と出会うために結合する。すなわち、再結合をお
こす。
例をあげると、 P 型領域に注入した電子のいくつかは、P型領域にもともと存在してい
た正孔と出会う。つまり、正孔は共有結合にかかわった電子の抜け殻なので、そこに電子
がはまり込む。このような電子と正孔の再結合がそれぞれの半導体の中で生じている。
P型領域に注入された(入れられた)電子は位置のエネルギーを持っている。しかし、
電子は正孔との再結合によって静止するため、このエネルギーを「光」の形で放出する。
同様に、N型領域に注入された正孔は、電子との再結合でエネルギーを「光」の形で放出
する。
図4−5
発光ダイオードの発光モデル
14
エネルギーバンド図で前頁の発光過程を見てみる。すると、図4−6に示すように、外
部より電圧が印加されていないときの、エネルギーバンドはフェルミレベルが一致するた
め、P型領域のほうがN型領域よりも高くなる。この状態で、順方向にバイアス電圧 Va
を印加する、するとN型領域のフェルミレベルは印加した電圧分のエネルギー[q・Va]だけ
上昇し、N型領域の伝導帯もその分だけ上昇する。このため、電子はP型領域に注入する
(入れる)。そして電子と正孔との出会いが生じて再結合が起こる。このときに、電子の持
っていた位置エネルギーが光として放出される。
このときに運動量の変換を必要としない材料は(例えば、Ⅲ−Ⅴ族半導体)では、電子・
正孔の結合が容易になり、発光する。逆に Si(シリコン半導体)のように運動量の変化を
必要とする材料では再結合エネルギーは熱エネルギーとなる。
図4−6
発光過程を示す概念図
15
(3) 受光トランジスタ(フォトトランジスタ)
バイポーラトランジスタを利用し、光を外部より受光してこれを電気信号に変換する半
導体デバイスがある。このデバイスのことをフォトトランジスタ(Photo Transistor)とい
う。図4−7にあるように、通常のバイポーラトランジスタのようにベース領域に電極を
設けず、電極の変わりに受光窓を設けて受光できる構造となっている。図4−6のように、
ベース・コレクタの接合部に逆バイアスがかかるように、バイアス電圧をエミッタ・コレ
クタ間に加える。この状態で、ベース領域に光を照射すると、光のエネルギーを受けてN
型半導体では電子・正孔対が発生する。
図4−7
フォトトランジスタの構造図
このときのエネルギーバンドは、図4−8のようになる。光の照射によってベース領域
にある価電子帯の電子が励起し、禁止帯を通り抜け伝導帯に入る。このときに、電子−正
孔対が発生する。この現象はベース領域で行われる事が多いが、コレクタ領域・エミッタ
領域でも生じる。またこのようにして発生した電子は、エネルギーレベルが低い状態にあ
るベース領域に留まる。反対に正孔はベース領域を拡散して、コレクタ領域に流れる。ま
た、逆バイアス電圧に引かれ電位差で生じた坂をあがる。
このときベース領域は正の電位となる。この現象はベース電極に外部から、正のバイア
ス電圧を印加させたのと同じで、コレクタ電流が流れる。この電流は、光の照射によって
発生する電子・正孔対の数よりもはるかに多いキャリアにより作られる。これらによって、
光電流の増幅が行われたことになる。
これは、光増倍効果(photo multiplication effect)といわれる現象である。
余談だがフォトトランジスタは、発光ダイオードの光を受光して電気信号に変換する用
途に多く使用される。バーコードの読み取りや、モーターの回転数の測定などがある。
16
図4−8
フォトトランジスタのエネルギーバンド
17
4−3
製作回路
・光センサー部
今回構築したシステムでは、回転数を計測するために発光素子として発光ダイオード、
受光素子として受光トランジスタを利用した。
現在多種多様なセンサーが存在しているが、その中で近接覚センサーという比較的近距
離において対象物の存在の認識、衝突の防止、形状計測、視覚センサーの位置検出誤差の
補正などを測定するセンサーがある。
そのセンサーには、接触型と非接触型がある。そのなかでも、光学式のものが光センサ
ーであり透過型と反射方とに分けられる。
(1) 透過型
発光素子と受光素子を対向させて光量の変化を利用し、物体の有無を検出するタイ
プの事を透過型という。物体の有無・物体の通過等の検出に利用する。
(2) 反射方
発光素子から出た光が物体で反射され受光素子に受光されるタイプを反射型という。
光量が物体までの距離に比例する範囲を利用すれば距離の測定が出来る。また、これ
も物体の有無を検出できる。
今回の研究では、距離の測定を行わないため透過型の光センサーを利用した。
18
製作した回路を図4−9に示す。また、外観写真を図4−10に示す。
図4−9
図4−10
製作回路図
製作回路写真(Ⅰ)
図4―10
製作回路写真(Ⅱ)
(Ⅰ)はプロトタイプ、(Ⅱ)はプロトタイプ(Ⅰ)の改良版である。
19
5
構築システム
5−1
基本原理
発光ダイオード(LED)に直流電圧を与えて一定量発光させる。モーターの軸にシュ
リンクチューブをジョイントとして使用しモーター2 個を接合させ、その接合部に切り込み
を入れた回転羽を取り付け回転させて、発光ダイオードからの光をチョッピングし受光ト
ランジスタ(フォトトランジスタ)を用いた光検出回路に導き、電流を電圧に変換を行い、
光検出回路からの出力として電圧が出力される。また、接続されたモーターは発電機とし
て使用されるので、発生電圧をコンデンサで出力波形を平滑化させた電圧を出力させる。
また、負荷抵抗を付加することにより電気的に機械負荷を与えることが出来る。
モーターへの電力供給は、前々年度の卒業研究で使用した電流増幅アンプは最大2Aま
での装置だった。今回の卒業研究で使用する電流増幅アンプは最大10Aまで使用可能な
ので電流源/主電圧源として電流制御量を変えられる、直流電源を用いる
この二つの信号をA/Dボードによりディジタル信号に変換され、パソコンで読み取る
事ができ、光出力の周期を求めることにより、モーターの回転速度の時間的変化・モータ
ーの立ち上がりの直流電圧を導き出す。
20
5−2
概要
5−1基本原理で述べている事を解りやすくするために、概要図で示した。
D/Aボードから出力される電流では、モーターを直接動作させるほどの電流が流れな
いので、電流増幅アンプを使用した。この電流増幅アンプは前々年度の卒業研究で使用し
たものが最大2Aまで使用できる。また、今回のテーマの1つである電流制限による効果
を確認するために最大10Aの電流増幅アンプを使用する。
測定システムの概要図を図5−1に示す。
※ PC
・・・
パソコン
※ PTr
・・・
フォトトランジスタ
※ LED
・・・
発光ダイオード
※ D/A
・・・
ディジタル・アナログ変換
※ A/D
・・・
アナログ・ディジタル変換
図5−1
測定システム概要図
21
5−3
使用装置
今回の研究で使用した装置の詳細を示す。
A/D・D/A変換複合ボードは 0∼10Vまでのユニポーラを指す。
(1) PC(パソコン)IBM 社の Aptiva を使用した。
構築したシステムの入出力表示装置・コントローラとして使用する。
開発言語には Microsoft Visual Basic 6.0(VB)を使用した。
(2) D/A・A/D変換複合ボード
Interface 社の PCI−3522A(12ビット 入力8点出力4点10V 単一レンジ)
を使用した。
D/A変換ボートは、ディジタル信号をアナログ信号へと変換するものであり、
A/D変換ボードは、アナログ信号をディジタル信号へと変換するもの。
D/A・A/D変換複合ボードは、D/A変換・A/D変換機能を一枚のボード
上で実現しているものである。
D/A・A/D変換複合ボードの使用を表5−1に示す。
D/A・A/D変換複合ボードの外観図を図5−2に示す。
22
表5−1
A/D・D/A変換複合ボードの仕様
項目
仕様
入力チャンネル数
8チャンネル
A
入力レンジ
ユニポーラ
D
入力インピーダンス
10MΩ以上
変
分解能
12ビット
換
相対精度
±1LSB(MAX)
(25℃)
部
誤差
±0.2%(MAX)
(0∼50℃)
変換時間
10μs
出力仕様
出力電流
D
出力チャンネル
4チャンネル
A
出力レンジ
ユニポーラ
変
出力インピーダンス
1Ω
換
分解能
12ビット
部
相対精度
±1LSB(MAX)
(25℃)
誤差
±0.4%(MAX)
(0∼50℃)
セトリングタイム
10μs
23
0∼+10V
5mA 以下
0∼+10V
図5−2
ボード外観図
計測速度に関しては、Interface 社 PCI−3522A ではA/D変換・D/A変換共に
10μsと高速であり、モーター制御に必要な1ms毎のフィードバック制御に対応するこ
とが出来る。
分解能に関しては測定誤差を検討する必要がある。A/D変換を行うことにより生じる
量子化誤差について述べる。
量子化誤差とは、連続したアナログ信号をディジタル信号に変換する際、図5−3(a)
に示す。図5−3(a)に示す通り、時間間隔ΔT毎の瞬時値に標本化(サンプリング)を
行い、標本化処理を行った瞬時値をΔT毎の時間間隔にわたって保持し、同時に信号が離
散値に割り当てられる、(この割り当てられる事を量子化という)設定したビット数の2値
信号に変換される時に生じる誤差が量子化誤差である。量子化誤差が大きければ大きいほ
ど、元信号のアナログ信号との精度が低くなる。反対に量子化誤差が小さければ小さいほ
ど、元信号のアナログ信号との精度が高くなる。よって、A/D・D/Aボードを使用し
て測定を行う場合には量子化雑音は重要な事項である。
24
測定機器としてA/D・D/Aボード PCI−3522A を使用しているので、このA/D・
D/Aボードの量子化誤差を求め、使用するA/D・D/Aボードが今回の実験に適して
いるのかどうか検討する必要がある。
量子化誤差を求めるためには、まずは分解能を求めなければいけない。分解能とは最小
単位の 1 ビット対するアナログ量であり、LSB(Least Significant Bit)として表現される。
1LSBを出力電圧0∼xV、分解能をYビットとすると
X
/ 2
Y
= 1 LSB
(式
5−1)
で求める事ができる。
A/D・D/Aボードの使用を表5−1より読み取り、出力電圧は0∼10Vである。
分解能が 12 ビットなので、
10 / 2 12 = 10 / 4096
≒ 0 . 00244 (V
≒ 2 . 44
)
( mV )
(式
5−2)
精度が表5−1より±1LSB なので、データに10V レンジで使用した場合+2.44
mV∼−2.44mV の誤差が生じる。
入力が1V の時でも、誤差が±2.44mV となり0.244%の誤差なので、充分な精
度を有している。また、これにより今回の実験では表5−1の仕様のA/D・D/A変換
複合ボードは充分な精度を有している。
25
(a)
(b)
図5−3
量子化誤差
26
(3) 直流電圧源
発光ダイオード(LED)と受光トランジスタ(フォトトランジスタ)に、必要な電圧を
安定に供給するために電圧源として Agilent 社の E3641A を使用した。
(4) 電流増幅アンプ
A/D・D/A変換複合ボードは表5−1でボード使用について示してあるが、A/D・
D/A変換複合ボードは出力電流が5mA以下と小さいために、モーターを回転させるた
めに必要な電流をボードが出力できないので、電圧はそのままに電流だけを増幅する、電
流増幅アンプを使用してモーターを回転させるために必要な電流を加えた。
使 用 し た 電 流 増 幅 ア ン プ は KIKUSU ELECTRONICS 社 の BIPOLAR POWER
SUPPLY/AMPLIFIER(最大2A)を使用し、前々年度の卒業研究を追試後、KIKUSUI
社の PAN16−10A(最大10A)を用いて電流制限量による効果の実験を行った。
図5−4に KIKUSU ELECTRONICS 社の BIPOLAR POWER SUPPLY/AMPLIFIER
(最大2A)の概観写真を示す。
図5−4
電流増幅アンプ BIPOLAR POWER SUPPLY/AMPLIFIE
27
図5−5に KIKUSUI 社の PAN 16-10A(最大10A)の概観写真を示す。
図5−5
電流増幅アンプ PAN 16-10A
(5) モーター
測定するために使用したモーターは、TAMIYA 社の REV-TUNED MOTER(15133−
300)を使用した、また、発電機に使用したモーターも同じのモーターを使用した。
表5−2
モーターの性能表
適正負荷時の
適正負荷時の
適正電圧
外形寸法
シャフト
消費電流
回転数
1,500
14,300
2.4∼3.0
25.1×20.1
2.0
(mA)
(rpm)
(V)
(mm)
(mm)
径
28
振動を吸収するためにモーターの周りにゴムシートを巻いて使用した。
図5−6にモーター・発電機・回転羽接続の概観写真として示す。
(Ⅰ)はプロトタイプ、(Ⅱ)はプロトタイプ(Ⅰ)の改良版である。
芯出しが上手く出来ていなかったのでプロトタイプを動作させると、動作を始めるのに時
間がかかっていた。その問題を改良したのが(Ⅱ)の写真に示すモーターである。
図5−6
モーターと発電機(Ⅰ)
図5−7
モーターと発電機(Ⅱ)
(6) その他
今回構築したシステムを開発するにあたり、電流増幅アンプの設定、A/D・D/A変
換複合ボードからの出力電圧、モーター(発電機)からの入力電圧を確認するために、
HEWLETT PACKARD 社の MULTIMETER 3478A を、また出力波形を確認するために、
オシロスコープを IWATU 社の SS−7819、A/D変換複合ボードがパソコンの画面上で波
形が正しく表示されているか確認するためにファンクションジェネレーターは IWATU 社
の FG−350 を用いた。LED、フォトトランジスタ特性を確認し、IWATU 社の TT−506
のカーブトレーサーを使用し時定数を求めた。この様にしてシステム全体の調整及びマッ
チングを行った。
発電機の平滑用コンデンサは 16V 2200μFの電界コンデンサを使用した。
コンデンサを使用しているので、CR回路になっている。そのために平均時間をコンデン
サで変えた。
29
6
プログラム
6−1
自動測定
構築したシステムを制御するためにサポートされているのは、Visual Basic6.0(VB6.0)
である。そこでプログラムを作成し、A/D・D/A変換複合ボードに命令を与えて動作
させた。
Visual Basic では直接I/Oやメモリにアクセスする事が出来ないために、A/D・D/
A変換複合ボードを直接制御することが出来ない。そこで、Visual Basic ではボードに対し
て制御を行うプログラム(Dynamic Link Library:DLL)から必要な手続き(関数)を呼
び出し、この DLL を介してボードの制御を行う。
DLL は interface 社のA/D・D/A変換複合ボードの付属 CD からインストールして使
用した。
A/D・D/A変換複合ボードを使用するためには、標準モジュールを追加する必要が
あり、必要となるモジュールを作成した。
具体的な追加は、Visual Basic のメニューの「プロジェクト」をクリック→「標準モジュ
ールの追加」をクリック→「新規作成」と「既存のファイル」があり、「既存のファイル」
をクリックし、ローカルディスクに移動する→Program Files を開く→Interface のフォル
ダを開く→「GPC3100」と「GPC3300」がある。両方フォルダを開くと「samples」のフ
ォルダがあり、VBから必要なモジュールを追加する。
なお、モジュールの保存先はインストール時に変更を行っていると、この限りではない。
30
6−2
測定プログラム説明
測定プログラムを作成するために、フローチャートを用いて原案を作っておけば、プロ
グラムをスムーズに作成する事が出来る。また、作成中のプログラムのなかで判断をしな
ければならない時も視覚的に確認ができるので楽である。
構築したプログラムのフローチャートを図6−1に示す。
START
時間回数チェック
A/D入力
立ち上がり電圧チェック
フィードバックのための
計算
グラフの描写
D/A出力
END
図6−1
測定プログラムのフローチャート
31
6−3
プログラミング原理
6−3−1
ボードの初期化処理・終了処理
A/D・D/A変換複合ボード共に初期化処理・終了処理は行わなければならない。
A/D・D/A変換複合ボードの初期化処理はそれぞれ AdOpen 関数・DaOpen 関数を
使用する。これらの関数を使用しないとボードへのアクセスは行えない。逆に終了処理を
行う場合、それぞれ AdClose 関数・DaClose 関数を使用する。この関数はA/D・D/A
変換複合ボードにアクセスしている各種リソースの開放が行われ、以後A/D・D/A変
換複合ボードへのアクセスを禁止するものである。
6−3−2
サンプリング
アナログ信号のサンプリング条件設定を行う。サンプリング条件のパラメーターはサン
プリング条件設定構造体に設定する。
「チャンネル数」
「入力チャンネル番号」
「入力レンジ」
「入力レンジ設定電圧」「サンプリングレート」「入力件数」を行える。
6−3−3
データ取得
A/D・D/A変換複合ボードから入力されるアナログ信号のデータを取得・処理を行
う。また、一件取得を行う場合、データは一件ずつ取得されていくので、取得していった
データをフィードバック等に使用することができる。
6−3−4
入出力処理
A/D・D/Aに入力される信号を取得処理と、作成したアナログ信号の出力処理を行
う処理である。また、入出力処理は6−3−2のサンプリング条件設定で設定したデータ
が関係してくる。
6−3−5
ファイル出力
A / D ・ D / A 変 換 複 合 ボード に 入力 さ れ るア ナ ロ グ デ ー タを C S V ( Comma
Separated Value)形式でファイルに保存することが可能である。CSV形式で保存された
ファイルは Microsoft Excel 等で分析・解析を行う事ができる。
32
7
モーター立ち上がり速度・モーター回転数測定実験
7−1
システム確認
測定を行う前に本当にそのシステムが正常・正確に動作しているのかを確認する必要が
ある。その過程で間違いが生じればシステム全体に誤差が生じてしまうので、正確なデー
タの取得が行えない。
まず、電流増幅アンプの入力電圧と出力電圧を同じ値にしなくてはならないため、上限
2Aの電流増幅アンプ(KIKUSUI ELECTRONICS 社の BIPOLAR POWER SUPPKY /
AMPLIFIER)の場合、定電圧源(Agilent 社の E3641A)からモーター(TAMIYA REV
‐TUNED MOTER)の定格電圧は 2.4∼3Vあるので、定電圧源から 1∼5Vを電流増幅ア
ンプに入力し、出力をディジタル電流・電圧計で数値を読み取って電圧増幅率を1に調節
した。また、上限10A(KIKUSUI 社の PAN 16‐10A)の電流増幅アンプの場合も、2
Aの電流増幅アンプと同じ方法をとり調整を行った。
つぎに、モーターが本当に入力した電圧で動作をするのかを確認した。まずはモーター
単体に電源を取り付けて 0.1∼3Vを定電圧源で印加し動作確認を行った。
33
7−2
予測
モーターは回転させると発電機として機能するので、回転速度は発電電圧に比例すると
の原理を利用してモーターの速度測定実験を行う。それにあたり予測図を図7−1(a)、(b)
に示す。
図7−1(a)
D/Aからの出力電圧
図7−1(b)
A/Dからの入力電圧
図7−1(a)、(b)の予測図の説明としては、D/A・A/D変換複合ボードからの出力
にフィードバックを加えない一定の電圧を印加したとき(b)の図では①になる。また、初
期に大きな印加電圧を加えるフィードバック方式と用いると、②の電圧値が入力され図(b)
の②になると考えこの状況について考察した。
34
今回の実験で使用するフィードバックを行う式を式7−1で示す。
フィードバックを加えないときにはモーター印加電圧は次式で表される。
V = V0
電圧を印加し、フィードバックを加えたときの飽和回転速度での発電機電圧(Vr)と、
各時刻における発電機電圧(Va)との差に一定の係数 Fb を乗じた電圧をモーターに入力し
た。
V = V 0 + Fb × (Vr − Va )
(式
7−1)
V 0 = モーター印加一定電圧 値
Fb = フィードバック係数
Vr = 発電機の飽和電圧値
Va = 発電機から出力された 電圧値
とする。
発電機出力端にコンデンサを挿入すると、A/Dの入力電圧 Va はCR秒の積分平均値を
とる。
従って、フィードバック値として時間遅れが生ずるので、測定、出力電圧制御時間との
整合をとる必要がある。
35
7−3
システムの基本動作確認
測定実験を行うための、実行を行うとき。図7−2に示すように、画面上で実行できる
ようにプログラムを作成した。「フィードバック係数」「定常出力電圧」「収束電圧」「実行
回数」
を決める必要がある。それらの値を決めると初めて「Start」ボタンをクリックする事がで
きる。また、測定し、画面上にグラフを描画する。データを保存する場合は、実行後に「Save」
ボタンをクリックすると、CSV形式でデータを保存する事ができる。
ここで初期値を入力するのに必要な値として、モーター入力する電圧と発電機から発生
する電圧の関係を求めた。
その結果を表7−1と図7−3に示す。
表7−1、図7−3に示すようにモーター入力電流と発電機出力電圧は比例的に増加し
ている事がわかる。
図7−2
作成したプログラム
36
表7−1
モーター入力と発電機出力の関係
DC[モーター](V)
[モーター](A)
DC[発電機](V)
0.12
0.29
0
0.22
0.29
0
0.32
0.29
0.16
0.42
0.3
0.24
0.52
0.31
0.33
0.62
0.33
0.4
0.72
0.35
0.48
0.82
0.36
0.54
0.92
0.38
0.66
1.02
0.4
0.74
1.12
0.4
0.86
1.22
0.42
0.92
1.32
0.45
1.01
1.42
0.45
1.1
1.52
0.45
1.19
1.62
0.45
1.32
1.72
0.45
1.36
1.82
0.47
1.48
1.92
0.47
1.55
2.02
0.48
1.58
2.12
0.48
1.7
2.22
0.5
1.78
2.32
0.52
1.8
2.42
0.53
1.9
2.52
0.54
1.93
2.61
0.54
2.11
2.72
0.53
2.18
2.82
0.53
2.27
2.92
0.54
2.29
3.02
0.55
2.33
37
2.5
発電機出力電圧
2
1.5
1
0.5
0
0
0.5
1
1.5
2
モーター 入力電圧
モーター入力電流
図
7−3
2.5
3
3.5
発電機出力電圧
モーター入力と発電機出力の関係図
以後、このデータをもとに測定を行う。
ま た 、 モ ー タ ー の 内 部 抵 抗 を マ ル チ メ ー タ ー ( HEWLETT PACKARD 社 の
MULTIMETER 3478A)を使用して4Wire 方式で測定した結果、0.37∼0.54Ω程度の抵抗
値であった。
モーター入力と発電機出力の関係の表から収束電圧を読み取り、本研究テーマである
「DCモーター過渡現象用高速自動測定」を行う。はじめに前々年度の卒業研究と同じシ
ステムを用いて、定常出力電圧 0.5V/1.0V/1.5V/2.0V/2.5Vにフィードバック係数
を、 0/1/3/5/10 を各電圧に与えて測定を行い、システムが正常に動作していること
を確認した。
38
7−4
フィードバック係数の効果
電流制限条件による効果を排除するために最大電流が10Aの電流増幅アンプを使用し
て、0.5V/1.0V/1.5V/2.0V/2.5Vにフィードバック係数を 0/1/3/5/10 を各電圧
に与えて同じように計測を行った。
2.5
発 電 機 出 力 (V )
2
1.5
1
0.5
0
1
101
201
301
401
0.5V
図7−4(A)
1.0V
501
時間(msec)
1.5V
601
701
2.0V
2.5V
発電機出力(A/D)
39
801
901
Fb=10,10A
12
10
モーター 入 力 (V )
8
6
4
2
0
1
101
201
301
401
0.5V
図7−4(B)
図7−4
501
時間(msec)
1V
1.5V
601
701
2V
2.5V
モーター入力波形(D/A)
801
901
Fb=10,10A
Fb=10のときのモーター入力及び発電機出力波形
図7−4のパラメーターは、計測時間 1msec で 1000 回測定、Fb(フィードバック係
数)10、電流制限値 10A、定常出力電圧 0.5∼2.5Vにおける発電機出力波形を測定した。
収束電圧は表7−1を利用した。
図7−4(A)の入力波形の場合、定常出力電圧が増加していけば安定回転になる回転
数が電圧にほぼ比例する事が解る。また、図7−4(B)に示すように、大電流による加
速度が大きく、更にコンデンサで平均化された電圧により出力電圧に遅れが生ずるので、
オーバーシュート時間が存在する事がわかった。
40
また、モーター回転数の測定を行い、回転周期と出力が比例している事を確認した。一
周期に必要な時間は10数 msec であり、1msec での測定には対応していないことを確認し
た。したがって、以下の測定では発電機出力を使用する。
2.5
モーター 出力電圧(V)
2
1.5
1
0.5
0
1
101
201
301
401
系列1
図7−5
501
時間(msec)
系列2
601
系列3
モーター回転数の測定グラフ
41
701
系列4
801
901
7−5
電流制限による効果
7−4フィードバック係数の効果で行った測定を基本にV0を一定(0.5V、1.0V、1.5
V、2.0V、2.5V)にし、フィードバック係数を変化(0、1、3、5、10)させ測定を行っ
た 。 電 流 制 限 が か か る 可 能 性 が あ る の で 、 2 A の 電 流 増 幅 ア ン プ ( KIKUSU
ELECTRONICS 社 BIPOLAR POWER SUPPLY/AMPLIFIER)と10Aの電流増幅アン
プ(Agilent 社 E3641A)を使用した。
これから、図を用いて述べていく。
入力波形と出力波形
1.6
1.4
モーター の入力及び発信機出力(
V)
1.2
1
0.8
0.6
0.4
0.2
0
1
101
201
301
1.5V,Fb0,10A
図7−6
401
501
時間(msec)
1.5V,Fb0,10A
601
701
1.5V,Fb0,2A
801
901
1.5V,Fb0,2A
入力波形と出力波形(1)
図7−6では、1.5V・1000 回・Fb0・10Aと 1.5V・1000 回・Fb0・2Aのグラフを
示す。フィードバック係数が0の時には一定電圧をモーターに入力しても、電流制限値に
より速度特性が変化することが読み取れるが加速度は電流比 10A:2Aより低く、約 2.5 倍
となった。
42
入力波形と出力波形
12
モーター入力及び発電機出力(V)
10
8
6
4
2
0
1
101
201
301
1.5VFb10 10A
図7−7
401
501
時間(msec)
1.5V Fb10 10A
601
701
1.5V Fb10 2A
801
901
1.5V Fb10 2A
入力波形と出力波形(2)
図7−7では 0.5V・1000 回・Fb10・10Aと 1.5V・1000 回・Fb10・2Aのグラフを
示してあるが、フィードバック係数が10の時電流による入力電圧が振動に伝わるが、こ
れは駆動能力とコンデンサによる時間遅れで説明出来る。
43
7−6
負荷抵抗を用いた測定
フィードバック係数を与えた測定を行い、発電機に電気的な負荷を与えて7−4フィー
ドバック係数の効果と同じ条件で測定を行った。負荷抵抗を与えた時の回路図を図7−8
に示す。
図7−8
負荷抵抗回路図
負荷抵抗は1Ωを使用した。電圧と負荷抵抗の関係を式で表すと式7−1になる。
R0
= VA (式7−2)
R0 + R
式7−1は7−3システムの基本動作確認で行った、モーターの内部抵抗測定で得た抵
抗値を R0 とし、R は負荷抵抗として与えた抵抗である。V0 は式7−1 にある無負荷抵抗
値である。
44
9
8
モーター入力及び発電機出力(V)
7
6
5
4
3
2
1
0
1
101
201
301
401
501
601
701
801
901
時間(msec)
コンデンサあり1Ω10A
図7−9
コンデンサあり1Ω10A
コンデンサあり1Ω2A
コンデンサあり1Ω2A
負荷抵抗1Ω 10A・2Aのグラフ
負荷抵抗 1Ωを与えて、10A、1.5V 及び 2A、1.5V で測定し、グラフにしたのが図7−
9である。
制限電流量により立ち上がり勾配は 10:2 になっている。これは大きな負荷を持つモー
ターの立ち上がり時間は電流に比例していることを示している。
45
7−7
コンデンサを用いた測定
コンデンサ(2200μF)と負荷抵抗 1Ωを発電機側に接続及び、コンデンサ(2200μF)
と負荷抵抗 1Ωなしの状態をそれぞれ 2A・10Aで測定を行った。なお電圧は 0.5V∼2.5V
でとする。
コンデンサ有無の回路図を図7−10、図7−11に示す。
図7−10
コンデンサあり
図7−11
コンデンサなし
コンデンサありのデータ図7−9と比較して、負荷抵抗を発電機に接続すると負荷抵抗
なしとどのように違うのか測定を行った。(コンデンサなし)
測定パラメーターは、定常出力電圧 0.5∼2.5V、測定回数 1000 回、電圧 2Aと 10
Aで行った。
図7−12に結果を示す。
46
9
8
モーター入力及び発電機出力(V)
7
6
5
4
3
2
1
0
1
101
201
301
401
501
601
701
801
901
時間(
msec)
1Ω 10A 1.0V
図7−1
1Ω 10A 1.0V
1Ω 2A 1.0V
1Ω 2A 1.0V
負荷抵抗1Ω 1.0Vのときの 2Aと 10Aのグラフ
コンデンサあり、なしの違いがここでははっきり出ている。コンデンサがなければモー
ターの立ち上がり曲線は振動している。また、コンデンサにより平均化された発電機出力
電圧を用いているので、モーターの立ち上がり曲線に振動が表われない。
47
負荷抵抗のあり、なしでどのように変化をするのか実験した。測定するためのパラメー
ターは、定常出力電圧は 0.5~2.5V、測定回数は 1000 回、負荷抵抗を1Ωの有無、電流 2
A、10Aで測定を行い。結果は 1.0Vのデータを使用する。
測定結果は図7−13に示す。
9
8
モーター入力及び発電機出力(V)
7
6
5
4
3
2
1
0
1
101
201
301
コンデンサあり負荷抵抗1Ω2A
コンデンサなし負荷抵抗1Ω10A
コンデンサあり負荷抵抗1Ω10A
図7−13
401
501
時間(
msec)
601
コンデンサあり負荷抵抗1Ω2A
コンデンサなし負荷抵抗1Ω2A
コンデンサあり負荷抵抗1Ω10A
701
801
901
コンデンサなし負荷抵抗1Ω10A
コンデンサなし負荷抵抗1Ω2A
コンデンサの有無と負荷抵抗の有無
モーター入力及び発電機出力波形は振動している。この振幅はモーター固有振動と同期
と思われる特定条件で大きくなる。振幅の周期はコンデンサなし、負荷抵抗なしのときに
早くなる。
周期は、コンデンサなしは 5∼10msec(100∼200Hz)
コンデンサありは 5∼20msec(50∼200HZ)
であった。
48
電流制限を排除するために、1,2,3,5,10Aでコンデンサの有無、定常出力電
圧は 1.5Vで測定を行った結果を図7−14に示す。
12
モーター入力及び発電機出力(V)
10
8
6
4
2
0
1
101
201
301
401
501
601
701
801
901
時間(
msec)
コンデンサなし 3A 1.5V
コンデンサなし3A1.5V
図7−14
コンデンサあり3A1.5V
コンデンサあり3A1.5V
電流制限コンデンサ有無
モーター入力及び発電機出力波形は振動している。定常回転数に対したときの振動はオ
ーバーシュートによる影響が見られ、その後はモーターの固有振動と駆動能力で振動が定
まる。振幅の周期はコンデンサなし、負荷抵抗なしのときに早くなる。
周期は、コンデンサなしは 15∼40msec(60∼25Hz)
コンデンサありは 20∼40msec(50∼25HZ)
であった。
49
8
考察及びまとめ
8−1
考察
・ モーター入力電流を制限値によりモーターの立ち上がり速度の勾配が変化した。
これは、モーターに入力される入力電流・モーター回転トルクが比例し、立ち上がり
が早くなることによる。
・ フィードバック係数を大きくするとモーターの立ち上がり速度が大きくなった。
特に電流制限値を10A に指定すると電流制限内でモーター駆動力を大きく出来るた
めである。前々年度の卒業研究では、電流制限によりフィードバック係数による立ち上
がり速度は変化しなかった。
・ 負荷抵抗を接続すると、モーターの立ち上がり速度・立ち上がり曲線が遅くなった。
特に電流制限を少なくすると、この特徴がより明らかであった。
・
コンデンサを使用したモーター入力及び発電機出力電圧で前々年度の卒業研究では
ハンチングが起きていたが、今回の測定ではフィードバック係数が大きいときに現れて
いた。
コンデンサ・負荷抵抗を接続したときの、接触抵抗によるものである。
・
コンデンサを付加したとき電流値が制限値を大きくし、フィードバック係数を大き
くすると、立ち上がりの曲線がオーバーシュートした。
モーターに流れる電流が大きすぎて一気にモーターに加速度がつきすぎてしまい、電
圧が一定になっても、コンデンサで平均化しているので、発信機出力電圧が残っている
ために、発生したと考えられる。
50
8−2
まとめ
システムを再構築しモーター過渡現象の計測を行った。この結果、信頼性のあるシステ
ムを作り上げモーター立ち上がり特性を評価することが出来た。
Visual Basic のプログラムを学習して、ソフトウェアに苦手意識をもっていたが、卒業研
究を通じてソフトウェア開発の基本を習得した。また、自動測定という新しい分野を自分
自身のなかで確立する事ができた。
モーター過渡現象を計測するためのシステムを構築するための技術を取得した。
モーター過渡現象を行うには、電源容量とフィードバック係数の増加、負荷抵抗とコン
デンサの有無によって時間的な対処をしなくてはならない事と、各素子を接続する場合は
ハンダ等を使用する必要性を確認した。社会に出てからもこれらの技術を磨いていきたい。
51
9
謝辞
今回の研究において指導教官。そして学生生活においていろいろとご指導、御教示いた
だいた高知工科大学 電子・光システム工学科
河津
哲
教授に心から厚く御礼申し上
げます。学業に楽しみを感じた事が今までなかったのですが、研究を進めて失敗と成功の
繰り返しをしていくにつれて楽しみと充実感を知ることができました。
この卒業研究で培った事を就職してからも大切にしていきたいと思っています。いろい
ろな経験をさせていただきまして本当にありがとうございます。
同研究室で、勉強をしたり、遊んだりした。
千世さん
深谷
早弥香さん
岡林
和田
諭史さん
伊坂
航さん
近森
大資さん一年間一緒に研究をできたことを本当にう
れしく感じています。一年間誠にありがとうございます。
また、4年間一緒にすごしてきた友達や先輩、後輩には色々と迷惑や心配をかけてきま
して、本当に感謝でいっぱいです。今まで本当にありがとうございます。
大学に入学しましてから今に至るまで、いろいろとお世話になりました教授・助教授の方、
職員の皆様本当に有り難うございます。
52
10
参考文献
インターフェイス社
チュートリアル
Visual Basic による DA 入門書
チュートリアル
Visual Basic によるAD入門書
USER’S MANUAL PCI−3522A
コロナ社
図解による半導体デバイスの基礎
玉井
朝倉書店
輝雄 著
新版フィードバック制御の基礎
片山
コロナ社
徹 著
システム制御工学シリーズ フィードバック制御入門
杉江
技術評論社
俊冶
藤田
政之
Visual Basic 6.0 例文事典 ステートメント・関数編
実務プログラミング研究会
メディア・テック出版
著
著
Visual Basic を始める前に知っておきたい
プログラミングのしくみ
伊藤
日経BP社
SHOEISHA
華子
著
3週間完全マスター Visual Basic 6.0
グレッグ・ペリー
著
トップスタジオ
訳
10日でおぼえる Visual Basic 6.0 実践教室
VBテックラボ&瀬戸
技術評論社
遥
著
自動計測システムのためのVB6入門
金藤
仁
著
53
高知工科大学
平成15年卒業研究論文
高速自動測定システム開発と過渡現象解析
中上
大輔
高知工科大学
平成14年卒業研究論文
フィードバック機構を用いたモーター立ち上がり速度制御
弓岡
浩二
54
11
付録
表12−1
図3−1の用語説明表
用語
定義
複数の要素から構成される集合体。
システム
(system)
目標値
入力と出力があり、それらの要素が全体として
の目的をもつ物。
外部から与えられる制御目標となる信号。
(desired value)
基準入力要素
(reference input element)
基準入力
(reference input)
目標値を基準入力信号に変換する要素。
また、設定部とも呼ばれる。
直接、フィードバック信号と比較される信号で、
目標値と一定の関係をもつ。
目標値ということも多い。
制御対象
(controlled object)
出力
(output)
制御を行う対象。
機械・プロセス・各種システム等
制御量。
目標値を追従すべき信号。
フィードバック要素
出力をフィードバック信号に変換する要素。検
(feedback element)
出部もしくはセンサー。
フィードバック量
基準入力と比較されるためにフィードバックさ
(feedback signal)
れる出力の測定値。
動作信号
基準として入力されている入力信号と、フィー
(actuating signal)
ドバック信号との差で、制御器を駆動させる。
(制御偏差 = 目標値 − 出力)
制御器 (controller)
動作信号に基づいてアクチュエータに送る制御
信号を生成する要素。
操作量
出力を制御するために、制御対象に加える信号。
(controlled variable)
アクチュエータ
(actuator)
制御器からの信号をパワー増幅し、操作量に変
化する要素。
(外部エネルギーを必要とする。)
外乱
(disturbance)
制御系の状態を乱す望ましくない外部からの
信号。
55
Visual Basic Program
frmMoterRev プログラム
Dim nRet As Long
'関数戻り値
Dim lpszName As String 'デバイス名
Dim hDeviceHandle As Long 'デバイスハンドル
Dim hDeviceHandleAd As Long 'デバイスハンドル
Dim hChannel As Long 'チャンネル番号
Dim Config As DASMPLREQ '構造体
Dim configCH As DASMPLCHREQ 'DA 構造体
Dim gConfig As ADSMPLREQ
' A D 構造体
Dim gInfo As ADBOARDSPEC 'ADBOARDSPEC
構造体
Dim DaData(100000) As Integer
Dim AdData(100000) As Integer
Dim Yscale As Integer
Private Sub cmdSave_Click()
Dim I As Long
Dim rc As Long
On Error GoTo ErrHandler
CommonDialog1.fileName = ReadINI("Dialog", "Dir")
CommonDialog1.ShowSave
rc = WriteINI("Dialog", "Dir", CommonDialog1.fileName)
Call savetoFile(CommonDialog1.fileName)
ErrHandler:
End Sub
56
Private Sub cmdStart_Click()
Dim I As Long
Dim temp As Long
Dim SmplChInf As ADSMPLCHREQ
'AD
If Val(txtTimes.Text) < 2 Or Val(txtTimes.Text) > 100000 Then
M s g B o x "実行回数が不正です"
Exit Sub
End If
lblStatus.Caption = "実行中"
frmMotorRev.Refresh
'DA
configCH.ulChNo = 2
configCH.ulRange = DA_0_10V
'AD
SmplChInf.ulChNo = 1
SmplChInf.ulRange = AD_0_10V
For I = 1 To Val(txtTimes.Text)
' A D 読み込み
nRet = AdInputAD(hDeviceHandleAd, 1, AD_INPUT_SINGLE, SmplChInf,
AdData(I))
If nRet <> AD_ERROR_SUCCESS Then
M s g B o x "アナログ入力に失敗しました"
lblStatus.Caption = "待機中"
Exit Sub
End If
57
'出力電圧算出
If op1.Value = True Then
DaData(I) = DaData(I - 1) + Val(txtFb.Text) * (409.6 * Val(txtGoal.Text) AdData(I))
End If
If op2.Value = True Then
D a D a t a ( I ) = (409.6 * Val(txtOut.Text)) + Val(txtFb.Text) * (409.6 *
Val(txtGoal.Text) - AdData(I))
End If
If op3.Value = True Then
DaData(I) = (409.6 * Val(txtOut.Text))
End If
If DaData(I) > &HFFF Then
'発散防止
D a D a t a ( I ) = &HFFF
End If
If DaData(I) < 0 Then
'発散防止
DaData(I) = 0
End If
' D A 出力
nRet = DaOutputDA(hDeviceHandle, 1, configCH, DaData(I))
If nRet <> DA_ERROR_SUCCESS Then
M s g B o x "アナログ出力に失敗しました"
lblStatus.Caption = "待機中"
Exit Sub
End If
temp = timeGetTime
Do While temp = timeGetTime
Loop
Next I
58
'電圧を0vにする
nRet = DaOutputDA(hDeviceHandle, 1, configCH, 0)
If nRet <> DA_ERROR_SUCCESS Then
M s g B o x "アナログ出力に失敗しました"
lblStatus.Caption = "待機中"
End If
Call DrawGraph
End Sub
Private Sub cmdYmax_Click()
If Yscale < 10 Then
Yscale = Yscale + 1
End If
Call SetYscale
End Sub
Private Sub cmdYmin_Click()
If Yscale > 1 Then
Yscale = Yscale - 1
End If
Call SetYscale
End Sub
Private Sub Form_Load()
' D A ボードの初期化
lpszName = "FBIDA1"
hDeviceHandle = DaOpen(lpszName)
If hDeviceHandle = -1 Then
M s g B o x "デバイスの初期化に失敗しました"
End
End If
59
'アナログ出力設定情報読み出し
nRet = DaGetSamplingConfig(hDeviceHandle, Config)
If nRet <> DA_ERROR_SUCCESS Then
M s g B o x "アナログ出力設定情報取得に失敗しました"
Exit Sub
End If
' A D ボードの初期化
lpszName = "FBIAD1"
hDeviceHandleAd = AdOpen(lpszName)
If hDeviceHandleAd = -1 Then
M s g B o x "デバイスの初期化に失敗しました"
End
Else
'サンプリング設定情報読み出し
nRet = AdGetSamplingConfig(hDeviceHandleAd, gConfig)
If nRet <> AD_ERROR_SUCCESS Then
M s g B o x "サンプリング設定情報取得に失敗しました"
End If
nRet = AdGetDeviceInfo(hDeviceHandleAd, gInfo)
If nRet <> AD_ERROR_SUCCESS Then
M s g B o x "デバイスの情報取得に失敗しました"
End If
End If
Call DrawAxis
60
txtOut.Text = ReadINI("Setting", "Out", "2")
txtGoal.Text = ReadINI("Setting", "Goal", "2")
txtFb.Text = ReadINI("Setting", "Fb", "1")
txtTimes.Text = ReadINI("Setting", "times", "10000")
op1.Value = ReadINI("Mode", "op1", "True")
op2.Value = ReadINI("Mode", "op2", "False")
op3.Value = ReadINI("Mode", "op3", "False")
Yscale = ReadINI("Graph", "Yscale", "10")
Call SetYscale
lblStatus.Caption = "待機中"
End Sub
Private Sub Form_Unload(Cancel As Integer)
'終了処理
nRet = DaClose(hDeviceHandle)
'終了処理
nRet = AdClose(hDeviceHandleAd)
'パラメータ保存
nRet = WriteINI("Setting", "Out", txtOut.Text)
nRet = WriteINI("Setting", "Goal", txtGoal.Text)
nRet = WriteINI("Setting", "Fb", txtFb.Text)
nRet = WriteINI("Setting", "Times", txtTimes.Text)
nRet = WriteINI("Mode", "op1", op1.Value)
nRet = WriteINI("Mode", "op2", op2.Value)
nRet = WriteINI("Mode", "op3", op3.Value)
nRet = WriteINI("Graph", "Yscale", Str(Yscale))
End Sub
61
Private Function DrawAxis()
'目盛線を描画します
Dim I As Integer
For I = 1 To 9
picGraph.Line (0, picGraph.ScaleHeight / 10 * I)-(picGraph.ScaleWidth,
picGraph.ScaleHeight / 10 * I), QBColor(5)
Next I
For I = 1 To 9
picGraph.Line (picGraph.ScaleWidth / 10 * I, 0)-(picGraph.ScaleWidth / 10 * I,
picGraph.ScaleHeight), QBColor(5)
Next I
End Function
Private Function DrawGraph()
Dim wMax As Long
Dim wMid As Double
Dim wMin As Long
Dim I As Long
picGraph.Enabled = True
lblStatus.Caption = "描画中"
frmMotorRev.Refresh
picGraph.Cls
'画面初期化
Call DrawAxis
pXMax = picGraph.Width
pYMax = picGraph.Height
picGraph.DrawWidth = 1
62
' D A サンプリングデータを描画します
For I = 1 To Val(txtTimes.Text)
pY = (pYMax / (409.6 * Yscale)) * DaData(I)
p X = ( I - 1) * (pXMax / (Val(txtTimes.Text) - 1))
If I <> 1 Then
picGraph.Line
(bpX,
picGraph.ScaleHeight
-
bpY)-(pX,
-
bpY)-(pX,
picGraph.ScaleHeight - pY), QBColor(7)
End If
bpX = pX
bpY = pY
Next I
' A D サンプリングデータを描画します
For I = 1 To Val(txtTimes.Text)
pY = (pYMax / (409.6 * Yscale)) * AdData(I)
p X = ( I - 1) * (pXMax / (Val(txtTimes.Text) - 1))
If I <> 1 Then
picGraph.Line
(bpX,
picGraph.ScaleHeight
picGraph.ScaleHeight - pY), QBColor(10)
End If
bpX = pX
bpY = pY
Next I
lblStatus.Caption = "待機中"
End Function
Private Sub op1_Click()
txtOut.Enabled = False
Label6.Enabled = False
txtGoal.Enabled = True
Label1.Enabled = True
txtFb.Enabled = True
Label2.Enabled = True
End Sub
63
Private Sub op2_Click()
txtOut.Enabled = True
txtGoal.Enabled = True
txtFb.Enabled = True
Label6.Enabled = True
Label1.Enabled = True
Label2.Enabled = True
End Sub
Private Sub op3_Click()
txtOut.Enabled = True
txtGoal.Enabled = False
txtFb.Enabled = False
Label6.Enabled = True
Label1.Enabled = False
Label2.Enabled = False
End Sub
Private Sub picGraph_Click()
'If picGraph.Enabled = True Then
Call DrawGraph
'End If
End Sub
Private Sub txtFb_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc(" ") Then
Exit Sub
End If
If (KeyAscii < Asc("0") Or KeyAscii > Asc("9")) And KeyAscii <> Asc(".") Then
KeyAscii = 0
End If
End Sub
64
Private Sub txtGoal_KeyPress(KeyAscii As Integer)
If KeyAscii < Asc(" ") Then
Exit Sub
End If
If (KeyAscii < Asc("0") Or KeyAscii > Asc("9")) And KeyAscii <> Asc(".") Then
KeyAscii = 0
End If
End Sub
Private Sub txtTimes_Change()
lblMin.Caption = "0[msec]"
lblMid.Caption = Val(txtTimes.Text) / 2 & "[msec]"
lblMax.Caption = Val(txtTimes.Text) & "[msec]"
End Sub
Private Sub txtTimes_KeyPress(KeyAscii As Integer)
I f KeyAscii < Asc(" ") Then
Exit Sub
End If
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
KeyAscii = 0
End If
End Sub
65
Private Sub savetoFile(fileName As String)
Dim I As Long
Dim tmpStr As String
Dim tmpStr2 As String
Dim tmpStr3 As String
Dim Z As Long '追加
Dim kisu As Long '追加
Open fileName For Output As #1
Print #1, "Measureing Parameters"
Print #1, "目標回転数(電圧)[V]," & txtGoal.Text
Print #1, "フィードバック係数," & txtFb.Text
Prin t #1, "実行回数," & txtTimes.Text
Print #1, "回数,D/A[V],A/D[V]"
For I = 3 To Val(txtTimes.Text)
DaData(Z) = (DaData(I - 3) + DaData(I - 2) + DaData(I - 1) + DaData(I) + DaData(I
+ 1) + DaData(I + 2) + DaData(I + 3)) / 7
AdData(Z) = (AdData(I - 3) + AdData(I - 2) + AdData(I - 1) + AdData(I) + AdData(I
+ 1) + AdData(I + 2) + AdData(I + 3)) / 7
Print #1, I & "," & 10 / 4096 * DaData(Z) & "," & 10 / 4096 * AdData(Z)
Next I
'For I = 1 To Val(txtTimes.Text)
'
Print #1, I & "," & 10 / 4096 * DaData(I) & "," & 10 / 4096 * AdData(I)
' Next I
Close #1
ErrHandler:
End Sub
66
Private Function SetYscale()
cmdYmax.Caption = Yscale & "[V]"
lblYmid.Caption = Yscale / 2 & "[V]"
cmdYmin.Caption = "0[V]"
End Function
67
標準モジュール FbiAd(FbiAd13.bas)
'----------------------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Overlapped process identifier
'----------------------------------------------------------------------------------------------------------Public Const FLAG_SYNCA = 1
' Sampling in a background thread
Public Const FLAG_ASYNCA = 2
' Sampling in asynchronous
operation
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic File format identifier
'----------------------------------------------------------------------------------------------Public Const FLAG_BIN = 1
' Binary format file
Public Const FLAG_CSV = 2
' CSV format file
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Sampling status identifier
'----------------------------------------------------------------------------------------------Public Const AD_STATUS_STOP_SAMPLING = 1
Public Const AD_STATUS_WAIT_TRIGGER = 2
' A sampling has been stopped.
' A sampling is in a waiting
state for a trigger.
Public Const AD_STATUS_NOW_SAMPLING = 3
68
' A sampling is running.
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Event factor identifier
'----------------------------------------------------------------------------------------------Public Const AD_EVENT_SMPLNUM = 1
' An event that will be signaled
when specified a number of samples are acquired.
Public Const AD_EVENT_STOP_TRIGGER = 2
' A sampling stopped because a
trigger asserted.
Public Const AD_EVENT_STOP_FUNCTION = 3
' A sampling is stopped by
software
Public Const AD_EVENT_STOP_TIMEOUT = 4
' The sampling terminated
because a timeout interval elapsed.
Public Const AD_EVENT_STOP_SAMPLING = 5
Public Const AD_EVENT_STOP_SCER = 6
' The sampling is completed
' A sampling is stopped by clock
error.
Public Const AD_EVENT_STOP_ORER = 7
' A sampling is stopped by
overrun error.
Public Const AD_EVENT_SCER = 8
' clock error
Public Const AD_EVENT_ORER = 9
' overrun error
Public Const AD_EVENT_STOP_LV_1 = 1 0
' The sampling is completed
(PCI-3179 channel1)
Public Const AD_EVENT_STOP_LV_2 = 11
' The sampling is completed
(PCI-3179 channel2)
Public Const AD_EVENT_STOP_LV_3 = 1 2
(PCI-3179 channel3)
69
' The sampling is completed
Public Const AD_EVENT_STOP_LV_4 = 1 3
' The sampling is completed
(PCI-3179 channel4)
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Input configuration identifier
'----------------------------------------------------------------------------------------------Public Const AD_INPUT_SINGLE = 1
' Single-ended
Public Const AD_INPUT_DIFF = 2
' Differential
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Volume identifier
'----------------------------------------------------------------------------------------------Public Const AD_ADJUST_BIOFFSET = 1
Public Const AD_ADJUST_UNIOFFSET = 2
' Bipolar offset adjustment
' Unipolar offset adjustment
Public Const AD_ADJUST_BIGAIN = 3
' Bipolar gain adjustment
Public Const AD_ADJUST_UNIGAIN = 4
' Unipolar gain adjustment
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Adjustment item identifier
'----------------------------------------------------------------------------------------------Public Const AD_ADJUST_UP = 1
' Up
Public Const AD_ADJUST_DOWN = 2
Public Const AD_ADJUST_STORE = 3
' Down
' Store
Public Const AD_ADJUST_STANDBY = 4
' Standby
Public Const AD_ADJUST_NOT_STORE = 5
' Not stored
70
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Data identifier
'----------------------------------------------------------------------------------------------Public Const AD_DATA_PHYSICAL = 1
' Physical value (voltage [V],
current [mA])
Public Const AD_DATA_BIN8 = 2
' 8bit binary
Public Const AD_DATA_BIN12 = 3
' 12bit binary
Public Const AD_DATA_BIN16 = 4
' 16bit binary
Public Const AD_DATA_BIN24 = 5
' 24bit binary
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Data conversion identifier
'----------------------------------------------------------------------------------------------Public Const AD_CONV_SMOOTH = 1
' S moothing is applied to
samples.
Public Const AD_CONV_AVERAGE1 = & H 1 0 0
' Averaging is applied to
samples.
Public Const AD_CONV_AVERAGE2 = &H200
to samples.
71
' Shifted averaging is applied
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Sampling mode identifier
'----------------------------------------------------------------------------------------------Public Const AD_IO_SAMPLING = 1
' I/O
Public Const AD_FIFO_SAMPLING = 2
' FIFO
Public Const AD_MEM_SAMPLING = 4
' Memory
Public Const AD_BM_SAMPLING = 8
' Bus master
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic
Trigger point identifier
'----------------------------------------------------------------------------------------------Public Const AD_TRIG_START = 1
' Start-trigger(Default)
Public Const AD_TRIG_STOP = 2
' Stop-trigger
Public Const AD_TRIG_START_STOP = 3
' Start/stop-trigger
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Trigger level identifier
'----------------------------------------------------------------------------------------------Public Const AD_FREERUN = 1
' Trigger-less(Default)
Public Const AD_EXTTRG = 2
' External trigger
Public Const AD_EXTTRG_DI = 3
' External tr igger with DI masking
Public Const AD_LEVEL_P = 4
' Level trigger: level sensitive
(low-to-high transition)
Public Const AD_LEVEL_M = 5
' Level trigger: level sensitive
(high-to-low transition)
72
Public Const AD_LEVEL_D = 6
' Level trigger: level sensitive
Public Const AD_INRANGE = 7
' Level trigger: into the range
Public Const AD_OUTRANGE = 8
' Level trigger: out of the range
Public Const AD_ETERNITY = 9
' Indefinite sampling
Public Const AD_SMPLNUM = 10
' Sampling num
Public Const AD_START_P1 = &H10
' Start-trigger: Level 1: low-to-
high transition
Public Const AD_START_M1 = &H20
' Start-trigger: Level 1:
high-to-low transition
Public Const AD_START_D1 = &H40
' Start-trigger: Level 1:
high-to-low or low -to-high transition (direction DON'T CARE)
Public Const AD_START_P2 = &H80
' Start-trigger: Level 2: low-to-
high transition
Public Const AD_START_M2 = &H100
' Start-trigger: Level 2:
high-to-low transition
Public Const AD_START_D2 = &H200
' Start-trigger: Level 2:
high-to-low or low -to-high transition (direction DON'T CARE)
Public Const AD_STOP_ P 1 = & H 4 0 0
' S t o p -trigger: Level 1: low-to- high
transition
Public Const AD_STOP_M1 = &H800
' Stop-trigger: Level 1: high-to-low
transition
Public Const AD_STOP_D1 = &H1000
' Stop-trigger: Level 1: high-to-low
or low -to-high transition (direction DON'T CARE)
73
Public Const AD_STOP_P2 = &H2000
' Stop-trigger: Level 2: low-to- high
transition
Public Const AD_STOP_M2 = &H4000
' Stop-trigger: Level 2: high-to-low
transition
Public Const AD_STOP_D2 = &H8000
' Stop-trigger: Level 2: high-to-low
or low -to-high transition (direction DON'T CARE)
Public Const AD_ANALOG_FILTER = &H10000
' Use an analog trigger filter
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Polarity identifier
'----------------------------------------------------------------------------------------------Public Const AD_DOWN_EDGE = 1
' Falling edge(Default)
Public Const AD_UP_EDGE = 2
' Rising edge
Public Const AD_EXTRG_IN = 3
' External trigger input
Public Const AD_EXCLK_IN = 4
' External sampling pacer clock
input
Public Const AD_EDGE_P1 = &H10
' Level 1: low-to- high transition
Public Const AD_EDGE_M1 = &H20
' Level 1: high-to-low transition
Public C o n s t A D _ E D G E _ D 1 = & H 4 0
' L e v e l 1 : h i g h-to-low or low
-to-high transition (direction DON'T CARE)
Public Const AD_EDGE_P2 = &H80
' Level 2: low-to- high transition
Public Const AD_EDGE_M2 = &H100
' Level 2: high-to-low transition
74
Public C o n s t A D _ E D G E _ D 2 = & H 2 0 0
' L e v e l 2 : h i g h-to-low or low
-to-high transition (direction DON'T CARE)
Public Const AD_DISABLE = &H80000000
' Disable
'-----------------------------------------------------------------------------------------------'
'
GPC-3100 VisualBasic Pulse polarity identifier
'----------------------------------------------------------------------------------------------Public Const AD_LOW_PULSE = 1
' Low-pulse(Default)
Public Const AD_HIGH_PULSE = 2
' High-pulse
'-----------------------------------------------------------------------------------------------'
'
GPC-3100 VisualBasic Double-clocked mode identifier
'----------------------------------------------------------------------------------------------Public Const AD_NORMAL_MODE = 1
' Use it in normal clock mode
Public Const AD_FAST_MODE = 2
' Use double-clocked mode
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Status identifier
'----------------------------------------------------------------------------------------------Public Const AD_NO_STATUS = 1
' Without status
Public Const AD_ADD_STATUS = 2
' Add status
75
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Error control identifier
'----------------------------------------------------------------------------------------------Public Const AD_STOP_SCER = 1
' Stop by clock error
Public Const AD_STOP_ORER = 2
' Stop by overrun errpr
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Data save identifier
'----------------------------------------------------------------------------------------------Public Const AD_APPEND = 1
' Append
Public Const AD_OVERWRITE = 2
'Overwrite
'----------------------------------------------------------------------------------------------'
GPC-3100 VisualBasic Range identifier
'----------------------------------------------------------------------------------------------Public Const AD_0_1V = &H1
' Voltage: unipolar 0 to 1 V
Public Const AD_0_2P5V = &H2
' Voltage: unipolar 0 to 2.5 V
Public Const AD_0_5V = &H4
' Voltage: unipolar 0 to 5 V
Public Const AD_0_10V = &H8
' Voltage: unipolar 0 to 10 V
Public Const AD_1_5V = &H10
' Voltage: unipolar 1 to 5 V
Public Const AD_0_2V = &H20
' Voltage: unipolar 0 to 2 V
Public Const AD_0_0P125V = &H40
' Voltage: unipolar 0 to 0.125V
Public Const AD_0_1P25V = &H80
' Voltage: unipolar 0 to 1.25v
Public Const AD_0_0P625V = &H100
' Voltage: unipolar 0 to 0.625V
76
Public Const AD_0_20mA = &H1000
' Current: unipolar 0 to 20 mA
Public Const AD_4_20mA = &H2000
' Current: unipolar 4 to 20 mA
Public Const AD_1V = &H10000
' Voltage: bipolar +/ - 1 V
Public Const AD_2P5V = &H20000
' Voltage: bipolar +/ - 2.5 V
Public Const AD_5V = &H40000
' Voltage: bipolar +/ - 5 V
Public Const AD_10V = &H80000
' Voltage: bipolar +/- 10 V
Public Const AD_0P125V = &H400000
' Voltage: bipolar +/ - 0.125V
Public Const AD_1P25V = &H800000
' Voltage: bipolar +/ - 1.25V
Public Const AD_0P625V = &H1000000
' Voltage: bipolar +/ - 0.625V
'-----------------------------------------------------------------------------------------------'
'
GPC-3100 VisualBasic Isolation identifier
'----------------------------------------------------------------------------------------------Public Const AD_ISOLAT I O N = 1
' P h o t o -isolated board
Public Const AD_NOT_ISOLATION = 2
' Not isolated board
'-----------------------------------------------------------------------------------------------'
'
GPC-3100 VisualBasic Synchronous mode identifier
'----------------------------------------------------------------------------------------------Public Const AD_MASTER_MODE = 1
' Master mode
Public Const AD_SLAVE_MODE = 2
' Slave mode
77
'------------------------------------------------------------------------------'
'
GPC-3100 VisualBasic Structure declaration
'------------------------------------------------------------------------------
' ----------------------------------------------------------------------' Sampling request condition structure for each channel
' ----------------------------------------------------------------------Type ADSMPLCHREQ
ulChNo As Long
ulRange As Long
End Type
' ----------------------------------------------------------------------' Trigger request condition structure for each channel
' ----------------------------------------------------------------------Type ADTRIGCHREQ
ulChNo As Long
fTrigLevel As Single
fHysteresis As Single
End Type
78
' ----------------------------------------------------------------------' Sampling request condition structure
' ----------------------------------------------------------------------Type ADSMPLREQ
ulChCount As Long
SmplChReq(0 To 255) As ADSMPLCHREQ
ulSamplingMode As Long
ulSingleDiff As Long
ulSmplNum As Long
ulSmplEventNum As Long
fSmplFreq As Single
ulTrigPoint As Long
ulTrigMode As Long
lTrigDelay As Long
ulTrigCh As Long
fTrigLevel1 As Single
fTrigLevel2 As Single
ulEClkEdge As Long
ulATrgPulse As Long
ulTrigEdge As Long
ulTrigDI As Long
ulFastMode As Long
End Type
79
' ----------------------------------------------------------------------' Sampling request condition structure for bus master
' ----------------------------------------------------------------------Type ADBMSMPLREQ
ulChCount As Long
SmplChReq(0 To 255) As ADSMPLCHREQ
ulSingleDiff As Long
ulSmplNum As Long
ulSmplEventNum As Long
ulSmplRepeat As Long
ulBufferMode As Long
fSmplFreq As Single
fScanFreq As Single
ulStartMode As Long
ulStopMode As Long
ulPreTrigDelay As Long
ulPostTrigDelay As Long
TrigChReq(0 To 1) As ADTRIGCHREQ
ulATrgMode As Long
ulATrgPulse As Long
ulStartTrigEdge As Long
ulStopTrigEdge As Long
ulTrigDI As Long
ulEClkEdge As Long
ulFastMode As Long
ulStatusMode As Long
ulErrCtrl As Long
End Type
80
' ----------------------------------------------------------------------' Board specification structure
' ----------------------------------------------------------------------Type ADBOARDSPEC
ulBoardType As Long
ulBoardID As Long
dwSamplingMode As Long
ulChCountS As Long
ulChCountD As Long
ulResolution As Long
dwRange As Long
ulIsolation As Long
ulDi As Long
ulDo As Long
End Type
81
'----------------------------------------------------------------------------------------------'
G P C -3100 VisualBasic Error identifier
'----------------------------------------------------------------------------------------------Public Const AD_ERROR_SUCCESS = 0
Public Const AD_ERROR_NOT_DEVICE = &HC0000001
Public Const AD_ERROR_NOT_OPEN = &HC0000002
Public Const AD_ERROR_INVALID_HANDLE = &HC0000003
Public Const AD_ERROR_ALREADY_OPEN = &HC0000004
Public Const AD_ERROR_NOT_SUPPORTED = &HC0000009
Public Const AD_ERROR_NOW_SAMPLING = &HC0001001
Public Const AD_ERROR_STOP_SAMPLING = &HC0001002
Public Const AD_ERROR_START_SAMPLING = &HC0001003
Public Const AD_ERROR_SAMPLING_TIMEOUT = &HC0001004
Public Const AD_ERROR_INVALID_PARAMETER = &HC0001021
Public Const AD_ERROR_ILLEGAL_PARAMETER = &HC0001022
Public Const AD_ERROR_NULL_POINTER = &HC0001023
Public Const AD_ERROR_GET_DATA = &HC0001024
Public Const AD_ERROR_FILE_OPEN = &HC0001041
Public Const AD_ERROR_FILE_CLOSE = &HC0001042
Public Const AD_ERROR_FILE_READ = &HC0001043
Public Const AD_ERROR_FILE_WRITE = &HC0001044
Public Const AD_ERROR_INVALID_DATA_FORMAT = &HC0001061
Public Const AD_ERROR_INVALID_AVERAGE_OR_SMOOTHING = &HC0001062
Public Const AD_ERROR_INVALID_SOURCE_DATA = &HC0001063
Public Const AD_ERROR_NOT_ALLOCATE_MEMORY = &HC0001081
Public Const AD_ERROR_NOT_LOAD_DLL = &HC0001082
Public Const AD_ERROR_CALL_DLL = &HC0001083
82
'------------------------------------------------'
GPC-3100 VisualBasic Function declaration
'------------------------------------------------Declare Function AdOpen Lib "FbiAd.DLL" (ByVal lpszName As String) As Long
Declare Function AdClose Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long) As Long
Declare Function AdGetDeviceInfo Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long,
ByRef pBoardSpec As ADBOARDSPEC) As Long
Declare Function AdSetBoardConfig Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long,
ByVal hEvent As Long, ByVal lpCallBackProc As Long, ByVal dwUser As Long) As Long
Declare Function AdGetBoardConfig Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long,
ByRef ulAdSmplEventFactor As Long) As Long
Declare Function AdSetSamplingConfig Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByRef pAdSmplConfig As ADSMPLREQ) As Long
Declare Function AdGetSamplingConfig Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByRef pAdSmplConfig As ADSMPLREQ) As Long
Declare Function AdGetSamplingData Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByRef pSmplData As Any, ByRef ulSmplNum As Long) As Long
Declare Function AdClearSamplingData Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long) As Long
Declare Function AdStartSampling Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long,
ByVal ulSyncFlag As Long) As Long
Declare Function AdStartFileSampling Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByVal pszPathName As String, ByVal ulFileFlag As Long) As Long
83
Declare Function AdTriggerSampling Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long,
ByVal ulChNo As Long, ByVal ulRange As Long, ByVal ulSingleDiff As Long, ByVal
ulTriggerMode As Long, ByVal ulTrigEdge As Long, ByVal ulSmplNum As Long) As
Long
Declare Function AdMemTriggerSampling Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByVal ulChCount As Long, ByRef lpSmplChReq As ADSMPLCHREQ, ByVal
ulSmplNum As Long, ByVal ulRepeatCount As Long, ByVal ulTrigEdge As Long, ByVal
fSmplFreq As Single, ByVal ulEClkEdge As Long, ByVal ulFastMode As Long) As Long
Declare Function AdSyncSampling Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long,
ByVal ulMode As Long) As Long
Declare Function AdStopSampling Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long) As
Long
Declare Function AdGetStatus Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long, ByRef
ulAdSmplStatus As Long, ByRef ulAdSmplCount As Long, ByRef ulAdAvailCount As
Long) As Long
Declare Function AdInputAD Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long, ByVal
ulCh As Long, ByVal ulSingleDiff As Long, ByRef lpAdSmplChReq As ADSMPLCHREQ,
ByRef lpData As Any) As Long
Declare Function AdInputDI Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long, ByRef
dwData As Long) As Long
Declare Function AdOutputDO Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long, ByVal
dwData As Long) As Long
Declare Function AdAdjustVR Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long, ByVal
ulAdjustCh As Long, ByVal ulSingleDiff As Long, ByVal ulSelVolume As Long, ByVal
ulControl As Long, ByVal ulTap As Long) As Long
84
Declare Function AdDataConv Lib "FbiAdDC.DLL" (ByVal uSrcFormCode As Long,
ByRef pSrcData As Any, ByVal uSrcSmplDataNum As Long, ByRef pSrcSmplReq As
ADSMPLREQ, ByVal uDestFormCode As Long, ByRef pDestData As Any, ByRef
puDestSmplDataNum As Long, ByRef pDestSmplReq As ADSMPLREQ, ByVal uEffect
As Long, ByVal uCount As Long, ByVal lpfnConv As Long) As Long
Declare Function AdReadFile Lib "FbiAdDC.DLL" (ByVal pszPathName As String,
ByRef pSmplData As Any, ByVal uFormCode As Long) As Long
Declare Function AdBmSetSamplingConfig Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByRef pAdBmSmplConfig As ADBMSMPLREQ) As Long
Declare Function AdBmGetSamplingConfig Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByRef pAdBmSmplConfig As ADBMSMPLREQ) As Long
Declare Function AdBmGetSamplingData Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByRef pBmSmplData As Any, ByRef ulBmSmplNum As Long) As Long
Declare Function AdBmStartFileSampling Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByVal pszPathName As String, ByVal ulFileFlag As Long) As Long
Declare Function AdLvSetSamplingConfig Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByVal ulChNo As Long, ByVal ulSmplNum As Long, ByVal fSmplFreq As Single,
ByVal ulRange As Long, ByVal hEvent As Long, ByVal lpCallBackProc As Long, ByVal
dwUser As Long) As Long
Declare Function AdLvGetSamplingConfig Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByVal ulChNo As Long, ByRef ulSmplNum As Long, ByRef fSmplFreq As Single,
ByRef ulRange As Long) As Long
Declare Function AdLvCalibration Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long,
ByVal ulChNo As Long, ByVal ulCalibration As Long) As Long
Declare Function AdLvGetSamplingData Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByVal ulChNo As Long, ByRef pSmplData As Any, ByRef ulSmplNum As Long)
As Long
85
Declare Function AdLvStartSampling Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long,
ByVal ulChNo As Long) As Long
Declare Function AdLvStopSampling Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long,
ByVal ulChNo As Long) As Long
Declare Function AdLvGetStatus Lib "FbiAd.DLL" (ByVal hDeviceHandle As Long,
ByVal ulChNo As Long, ByRef ulAdSmplStatus As Long, ByRef ulAdSmplCount As
Long, ByRef ulAdAvailCount As Long) As Long
Declare Function AdMeasureTemperature Lib "FbiAd.DLL" (ByVal hDeviceHandle As
Long, ByRef fTemperature As Single) As Long
Declare Function CreateEvent Lib "KERNEL32" Alias "CreateEventA" (ByVal
lpEventAttributes As Long, ByVal ManualReset As Long, ByVal bInitialState As Long,
ByVal lpName As String) As Long
Declare Function WaitForSingleObject Lib "KERNEL32" (ByVal hHandle As Long,
ByVal dwMilliseconds As Long) As Long
Declare Function CloseHandle Lib "KERNEL32" (ByVal hObject As Long) As Long
Declare Function ResetEvent Lib "KERNEL32" (ByVal hEvent As Long) As Long
86
標準モジュール FbiDa(FbiDa13.bas)
'----------------------------------------------------------------------------------------------' Overlapped process identifier
'----------------------------------------------------------------------------------------------Public Const FLAG_SYNC = 1
' Output in a background thread.
Public Const FLAG_ASYNC = 2
' Output in asynchronous
operation.
'----------------------------------------------------------------------------------------------' File format identifier
'----------------------------------------------------------------------------------------------Public Const FLAG_BIN = 1
' Binary format file
Public Const FLAG_CSV = 2
' CSV format file
'-----------------------------------------------------------------------------------------------'
' Analog output status identifier
'----------------------------------------------------------------------------------------------Public Const DA_STATUS_STOP_SAMPLING = 1
' The output is stopped.
Public Const DA_STATUS_WAIT_TRIGGER = 2
' The output is waiting for an
assertion of the trigger.
Public Const DA_STATUS_NOW_SAMPLING = 3
87
' The output is running.
'----------------------------------------------------------------------------------------------' Event factor identifier
'----------------------------------------------------------------------------------------------Public Const DA_EVENT_STOP_TRIGGER = 1
' The output has been stopped
because a trigger asserted.
Public Const DA_EVENT_STOP_FUNCTION = 2
' The output has been stopped
by software.
Public Const DA_EVENT_STOP_SAMPLING = 3
' The Analog output is
completed.
Public Const DA_EVENT_RESET_IN = 4
Public Const DA_EVENT_CURRENT_OFF = 5
' The reset input signal asserted.
' The current breaking has
been detected.
'----------------------------------------------------------------------------------------------' Volume identifier
'----------------------------------------------------------------------------------------------Public Const DA_ADJUST_BIOFFSET = 1
Public Const DA_ADJUST_UNIOFFSET = 2
' Bipolar offset adjustment
' Unipolar offset adjustment
Public Const DA_ADJUST_BIGAIN = 3
' Bipolar gain adjustment
Public Const DA_ADJUST_UNIGAIN = 4
' Unipolar gain adjustment
88
'----------------------------------------------------------------------------------------------' Adjustment item identifier
'----------------------------------------------------------------------------------------------Public Const DA_ADJUST_UP = 1
' Up
Public Const DA_ADJUST_DOWN = 2
' Down
Public Const DA_ADJUST_STORE = 3
' Store
Public Const DA_ADJUST_STANDBY = 4
' Standby
Public Const DA_ADJUST_NOT_STORE = 5
' Not stored
'----------------------------------------------------------------------------------------------' Data identifier
'----------------------------------------------------------------------------------------------Public Const DA_DATA_PHYSICAL = 1
' Physical value (voltage [V],
current [mA])
Public Const DA_DATA_BIN8 = 2
' 8bit binary
Public Const DA_DATA_BIN12 = 3
' 12bit bin ary
Public Const DA_DATA_BIN16 = 4
' 16bit binary
Public Const DA_DATA_BIN24 = 5
' 24bit binary
89
'----------------------------------------------------------------------------------------------' Data conversion identifier
'----------------------------------------------------------------------------------------------Public Const DA_CONV_SMOOTH = 1
' S moothing is applied to
samples.
Public Const DA_CONV_AVERAGE1 = & H 1 0 0
' A v e r a g i n g i s a p p l i e d to
samples.
Public Const DA_CONV_AVERAGE2 = &H200
' Shifted averaging is applied
to samples.
'----------------------------------------------------------------------------------------------' Data transfer architecture identifier
'----------------------------------------------------------------------------------------------Public Const DA_IO_SAMPLING = 1
' I/O
Public Const DA_FIFO_SAMPLING = 2
' FIFO
Public Const DA_MEM_SAMPLING = 4
' Memory
'----------------------------------------------------------------------------------------------' Trigger point identifier
'----------------------------------------------------------------------------------------------Public Const DA_TRIG_START = 1
' Start-trigger(Default)
Public Const DA_TRIG_STOP = 2
' Stop-trigger
Public Const DA_TRIG_START_STOP = 3
90
' Start/stop-trigger
'----------------------------------------------------------------------------------------------' Trigger level identifier
'----------------------------------------------------------------------------------------------Public Const DA_FREERUN = 1
' Trigger-less(Default)
Public Const DA_EXTTRG = 2
' External trigger
Public Const DA_EXTTRG_DI = 3
' External trigger with DI masking
'----------------------------------------------------------------------------------------------' Polarity identifier
'----------------------------------------------------------------------------------------------Public Const DA_DOWN_EDGE = 1
' Falling edge(Default)
Public Const DA_UP_EDGE = 2
' Rising edge
91
'----------------------------------------------------------------------------------------------' Range identifier
'----------------------------------------------------------------------------------------------Public Const DA_0_1V = &H1
' Voltage: unipolar 0 to 1 V
Public Const DA_0_2P5V = &H2
' Voltage: unipolar 0 to 2.5 V
Public Const DA_0_5V = &H4
' Voltage: unipolar 0 to 5 V
Public Const DA_0_10V = &H8
' Voltage: unipolar 0 to 10 V
Public Const DA_1_5V = &H10
' Voltage: unipolar 1 to 5 V
Public Const DA_0_20mA = &H1000
' Current: unipolar 0 to 20 mA
Public Const DA_4_20mA = &H2000
' Current: unipolar 4 to 20 mA
Public Const DA_1V = &H10000
' Voltage: bipolar +/- 1 V
Public Const DA_2P5V = &H20000
' Voltage: bipolar +/ - 2.5 V
Public Const DA_5V = &H40000
' Voltage: bipolar +/ - 5 V
Public Const DA_10V = &H80000
' Voltage: bipolar +/ - 10 V
'----------------------------------------------------------------------------------------------' Isolation identifier
'----------------------------------------------------------------------------------------------Public Const DA_ISOLATION = 1
' Photo-isolated board
Public Const DA_NOT_ISOLATION = 2
92
' Not isolated board
'----------------------------------------------------------------------------------------------' Range identifier
'----------------------------------------------------------------------------------------------Public Const DA_RANGE_UNIPOLAR = 1
Public Const DA_RANGE_BIPOLAR = 2
' Unipolar
' Bipolar
'----------------------------------------------------------------------------------------------' Waveform generation mode identifier
'----------------------------------------------------------------------------------------------Public Const DA_MODE_CUT = 1
' Time-based waveform generation
Public Const DA_MODE_SYNTHE = 2
' F r e q u e n c y -based waveform
generation
'----------------------------------------------------------------------------------------------' Repeat mode identifier
'----------------------------------------------------------------------------------------------Public Const DA_REPEAT_NONINTERVAL = 1
' Repeat without the wait state
(Default)
Public Const DA_REPEAT_INTERVAL = 2
' Repeat with the wait state
'----------------------------------------------------------------------------------------------' Counter clear identifier
'----------------------------------------------------------------------------------------------Public Const DA_COUNTER_CLEAR = 1
Public Const DA_COUNTER_NONCLEAR = 2
93
' Cleared (Default)
' Not cleared
'----------------------------------------------------------------------------------------------' DA latch identifier
'----------------------------------------------------------------------------------------------Public Const DA_LATCH_CLEAR = 1
' The voltage is set to the lowest
voltage of the range.
Public Const DA_LATCH_NONCLEAR = 2
' The voltage is sustained.
'----------------------------------------------------------------------------------------------' Clock source identifier
'----------------------------------------------------------------------------------------------Public Const DA_CLOCK_TIMER = 1
' Internal programmable timer
(8254 compatible)
Public Const DA_CLOCK_FIXED = 2
' Fixed 5 MHz clock
'----------------------------------------------------------------------------------------------' Configurations of the connector CN3 identifier
'----------------------------------------------------------------------------------------------Public Const DA_EXTRG_IN = 1
' External trigger input (Default)
Public Const DA_EXTRG_OUT = 2
' External trigger output
'----------------------------------------------------------------------------------------------' Configurations of the connector CN4 identifier
'----------------------------------------------------------------------------------------------Public Const DA_EXCLK_IN = 1
' External clock input (Default)
Public Const DA_EXCLK_OUT = 2
' External clock output
94
'----------------------------------------------------------------------------------------------' Filter identifier
'----------------------------------------------------------------------------------------------Public Const DA_FILTER_OFF = 1
' Not used (Default)
Public Const DA_FILTER_ON = 2
' Used
'----------------------------------------------------------------------------------------------'
S y nchronous analog output identifier
'----------------------------------------------------------------------------------------------Public Const DA_MASTER_MODE = 1
' Master Mode
Public Const DA_SLAVE_MODE = 2
' Slave Mode
'------------------------------------------------' Structure declaration
'------------------------------------------------' ----------------------------------------------------------------------' Analog output request condition structure for each channel
' ----------------------------------------------------------------------Type DASMPLCHREQ
ulChNo As Long
ulRange As Long
End Type
95
' ----------------------------------------------------------------------' Analog output request condition structure
' ----------------------------------------------------------------------Type DASMPLREQ
ulChCount As Long
SmplChReq(0 To 255) As DASMPLCHREQ
ulSamplingMode As Long
fSmplFreq As Single
ulSmplRepeat As Long
ulTrigMode As Long
ulTrigPoint As Long
ulTrigDelay As Long
ulEClkEdge As Long
ulTrigEdge As Long
ulTrigDI As Long
End Type
' ----------------------------------------------------------------------' Board specification structure
' ----------------------------------------------------------------------Type DABOARDSPEC
ulBoardType As Long
ulBoardID As Long
ulSamplingMode As Long
ulChCount As Long
ulResolution As Long
ulRange As Long
ulIsolation As Long
ulDi As Long
ulDo As Long
End Type
96
' ----------------------------------------------------------------------' Output range configurations structure for each channel (for PCI-3305)
' ----------------------------------------------------------------------Type DAMODECHREQ
ulRange As Long
fVolt As Single
ulFilter As Long
End Type
' ----------------------------------------------------------------------' Waveform generation mode structure (for PCI-3305)
' ----------------------------------------------------------------------Type DAMODEREQ
ModeChReq(0 To 1) As DAMODECHREQ
ulPulseMode As Long
ulSyntheOut As Long
ulInterval As Long
fIntervalCycle As Single
ulCounterClear As Long
ulDaLatch As Long
ulSamplingClock As Long
ulExControl As Long
ulExClock As Long
End Type
97
'----------------------------------------------------------------------------------------------' Error identifier
'----------------------------------------------------------------------------------------------Public Const DA_ERROR_SUCCESS = 0
Public Const DA_ERROR_NOT_DEVICE = &HC0000001
Public Const DA_ERROR_NOT_OPEN = &HC0000002
Public Const DA_ERROR_INVALID_HANDLE = &HC0000003
Public Const DA_ERROR_ALREADY_OPEN = &HC0000004
Public Const DA_ERROR_NOT_SUPPORTED = &HC0000009
Public Const DA_ERROR_NOW_SAMPLING = &HC0001001
Public Const DA_ERROR_STOP_SAMPLING = &HC0001002
Public Const DA_ERROR_START_SAMPLING = &HC0001003
Public Const DA_ERROR_SAMPLING_TIMEOUT = &HC0001004
Public Const DA_ERROR_INVALID_PARAMETER = &HC0001021
Public Const DA_ERROR_ILLEGAL_PARAMETER = &HC0001022
Public Const DA_ERROR_NULL_POINTER = &HC0001023
Public Const DA_ERROR_SET_DATA = &HC0001024
Public Const DA_ERROR_FILE_OPEN = &HC0001041
Public Const DA_ERROR_FILE_CLOSE = &HC0001042
Public Const DA_ERROR_FILE_READ = &HC0001043
98
Public Const DA_ERROR_FILE_WRITE = &HC0001044
Public Const DA_ERROR_INVALID_DATA_FORMAT = &HC0001061
Public Const DA_ERROR_INVALID_AVERAGE_OR_SMOOTHING = &HC0001062
Public Const DA_ERROR_INVALID_SOURCE_DATA = &HC0001063
Public Const DA_ERROR_NOT_ALLOCATE_MEMORY = &HC0001081
Public Const DA_ERROR_NOT_LOAD_DLL = &HC0001082
Public Const DA_ERROR_CALL_DLL = &HC0001083
'------------------------------------------------'
Function declaration
'------------------------------------------------Declare Function DaOpen Lib "FbiDa.DLL" (ByVal lpszName As String) As Long
Declare Function DaClose Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long) As Long
Declare Function DaGetDeviceInfo Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long,
ByRef pDaBoardSpec As DABOARDSPEC) As Long
Declare Function DaSetBoardConfig Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long,
ByVal ulSmplBufferSize As Long, ByVal hEvent As Long, ByVal lpCallBackProc As
Long, ByVal dwUser As Long) As Long
Declare Function DaGetBoardConfig Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long,
ByRef ulSmplBufferSize As Long, ByRef ulDaSmplEventFactor As Long) As Long
Declare Function DaSetSamplingConfig Lib "FbiDa.DLL" (ByVal hDeviceHandle As
Long, ByRef pDaSmplConfig As DASMPLREQ) As Long
99
Declare Function DaGetSamplingConfig Lib "FbiDa.DLL" (ByVal hDeviceHandle As
Long, ByRef pDaSmplConfig As DASMPLREQ) As Long
Declare Function DaSetMode Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long, ByRef
pDaMode As DAMODEREQ) As Long
Declare Function DaGetMode Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long, ByRef
pDaMode As DAMODEREQ) As Long
Declare Function DaSetSamplingData Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long,
ByRef pSmplData As Any, ByVal ulSmplDataNum As Long) As Long
Declare Function DaClearSamplingData Lib "FbiDa.DLL" (ByVal hDeviceHandle As
Long) As Long
Declare Function DaStartSampling Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long,
ByVal ulSyncFlag As Long) As Long
Declare Function DaStartFileSampling Lib "FbiDa.DLL" (ByVal hDeviceHandle As
Long, ByVal pszPathName As String, ByVal ulFileFlag As Long, ByVal ulSmplNum As
Long) As Long
Declare Function DaSyncSampling Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long,
ByVal ulMode As Long) As Long
Declare Function DaStopSampling Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long)
As Long
Declare Function DaGetStatus Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long, ByRef
ulDaSmplStatus As Long, ByRef ulDaSmplCount As Long, ByRef ulDaAvailCount As
Long, ByRef ulDaAvailRepeat As Long) As Long
Declare Function DaOutputDA Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long, ByVal
nCh As Long, ByRef pDaSmplChReq As DASMPLCHREQ, ByRef pData As Any) As
Long
100
Declare Function DaInputDI Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long, ByRef
dwData As Long) As Long
Declare Function DaOutputDO Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long, ByVal
dwData As Long) As Long
Declare Function DaAdjustVR Lib "FbiDa.DLL" (ByVal hDeviceHandle As Long, ByVal
ulAdjustCh As Long, ByVal ulSelVolume As Long, ByVal ulDirection As Long, ByVal
ulTap As Long) As Long
Declare Function DaDataConv Lib "FbiDaDc.DLL" (ByVal uSrcFormCode As Long,
ByRef pSrcData As Any, ByVal uSrcSmplDataNum As Long, ByRef pSrcSmplReq As
DASMPLREQ, ByVal uDestFormCode As Long, ByRef pDestData As Any, ByRef
puDestSmplDataNum As Long, ByRef pDestSmplReq As DASMPLREQ, ByVal uEffect
As Long, ByVal uCount As Long, ByVal pfnConv As Long) As Long
Declare Function DaWriteFile Lib "FbiDaDc.DLL" (ByVal pszPathName As String,
ByRef pSmplData As Any, ByVal ulFormCode As Long, ByVal ulSmplNum As Long,
ByVal ulChCount As Long) As Long
Declare Function CreateEvent Lib "KERNEL32" Alias "CreateEventA" (ByVal
lpEventAttributes As Long, ByVal ManualReset As Long, ByVal bInitialState As Long,
ByVal lpName As String) As Long
Declare Function WaitForSingleObject Lib "KERNEL32" (ByVal hHandle As Long,
ByVal dwMilliseconds As Long) As Long
Declare Function CloseHandle Lib "KERNEL32" (ByVal hObject As Long) As Long
Declare Function ResetEvent Lib "KERNEL32" (ByVal hEvent As Long) As Long
101
モジュールプログラム
Declare
Ini(Ini.bas)
Function
GetPrivateProfileString
Lib
"KERNEL32"
Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As
Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As
Long, ByVal lpFileName As String) As Long
Declare
Function
WritePrivateProfileString
Lib
"KERNEL32"
Alias
"WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName
As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Const IniFileName = "config.ini"
Public Function WriteINI(Section As String, Entry As String, WriteData As String) As
Long
WriteINI
=
WritePrivateProfileString(Section,
Entry,
WriteData,
MyPath
&
IniFileName)
End Function
Public Function ReadINI(Section As String, Entry As String, Optional Def As String) As
String
Dim n As String * 255
Dim rc As Long
rc = GetPrivateProfileString(Section, Entry, "", n, 255, MyPath & IniFileName)
If rc <> 0 Then
ReadINI = Left(n, InStr(n, Chr(0)) - 1)
Else
ReadINI = Def
End If
End Function
102
Public Function MyPath()
MyPath = App.Path
If Right(MyPath, 1) <> "¥" Then
MyPath = MyPath & "¥"
End If
End Function
モジュールプログラム
Module1(Module13.bas)
Public Declare Function timeGetTime Lib "winmm.dll" () As Long
'一定時間処理を停止する
'
'引数 lngTickTime - 停止時間(1/1000 秒単位)
'戻値 なし
Public Function WaitTime(ByVal lngtickTime As Long)
Dim lngEnd As Long
'終了時間
'終了時間設定
lngEnd = timeGetTime + lngtickTime
'終了時間まで空ループ
Do While (timeGetTime < lngEnd)
'制御をシステムに渡す
DoEvents
Loop
End Function
103
Fly UP