TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver...

72
www.interface.co.jp TUT-0022 Ver 1.0

Transcript of TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver...

Page 1: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

www.interface.co.jp

TUT-0022 Ver 1.0

Page 2: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

改定履歴改定履歴改定履歴改定履歴

© 2000 Interface Corporation. All rights reserved.

改訂履歴改訂履歴改訂履歴改訂履歴

Ver 年 月 改 訂 内 容1.0 2000年 11月 初版

本ドキュメントは、製品の改良その他により将来予告なく改訂しますので、予めご了承ください。

Microsoft、Windows、Windows NT、MS、Visual C++、Excelは、米国Microsoft Corporationの登録商標です。

その他、本ドキュメントに記載した会社名,商品名,製品名などは、各社の商標または登録商標です。

本チュートリアルをご使用の際は、必ず最新のドキュメント(ユーザーズマニュアル,オンラインヘルプ)

をあわせて参照してください。また、最新のドライバソフトウェアをご使用ください。ユーザーズマニュ

アル, ドライバソフトウェアは弊社Webサイトからダウンロードできます。(オンラインヘルプはドライバ

ソフトウェアに含まれています)

本ドキュメントの内容に関しましては、正確な記述に努めておりますが、弊社は、本ドキュメントの内容

に対してなんら保証をするものではなく、また本ドキュメントの内容により運用した結果については、い

っさいの責任を負いませんので、ご了承下さい。

Page 3: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

目次目次目次目次

© 2000 Interface Corporation. All rights reserved.

目次目次目次目次はじめに..............................................................................................................................................................................................1対応型式..............................................................................................................................................................................................1注意事項..............................................................................................................................................................................................11. アナログ....................................................................................................................................................................................2

1.1. D/Aコンバータ ......................................................................................................................................................................21.2.アナログ出力 ...........................................................................................................................................................................31.3.バイポーラとユニポーラ .......................................................................................................................................................3

2. DAボードのインストール......................................................................................................................................................42.1ボードの設置 ...........................................................................................................................................................................42.2ドライバのインストール .......................................................................................................................................................52.3 DLL及びサンプルプログラムのインストール ...................................................................................................................6

3. Visual C++による DA制御 ......................................................................................................................................................73.1. ピンアサインメント ......................................................................................................................................................83.2. DLLプロシージャ呼び出しによるプログラミング(概要) ...................................................................................93.3. DAボード制御概略........................................................................................................................................................9

4. チュートリアル ......................................................................................................................................................................104.1. 正弦波出力 .................................................................................................................................................................... 11

Step1.メインウィンドウ作成 ................................................................................................................................................ 11Step2. DLLプロシージャ宣言...............................................................................................................................................13Step3.初期化処理と終了処理 ................................................................................................................................................17Step4.正弦波出力 ..................................................................................................................................................................21

4.2. 矩形波出力 ....................................................................................................................................................................314.3. のこぎり波 ....................................................................................................................................................................324.4. 三角波出力 ....................................................................................................................................................................334.5. その他の波形出力 ........................................................................................................................................................344.6. コールバック関数 ........................................................................................................................................................354.7. データファイルからの出力.........................................................................................................................................37

Step1.メインウィンドウ作成 ................................................................................................................................................37Step2.出力データの作成 ......................................................................................................................................................37Step3.データファイルからの出力.......................................................................................................................................39

5. DLLリファレンス .................................................................................................................................................................435.1. FbiDa.DLL 関数リファレンス ............................................................................................................................................43

DaOpen ....................................................................................................................................................................................43DaClose ....................................................................................................................................................................................43DaGetDeviceInfo......................................................................................................................................................................43DaSetBoardConfig ...................................................................................................................................................................44DaGetBoardConfig...................................................................................................................................................................44DaSetSamplingConfig ..............................................................................................................................................................45DaGetSamplingConfig .............................................................................................................................................................45DaSetMode...............................................................................................................................................................................45DaGetMode ..............................................................................................................................................................................46DaSetSamplingData..................................................................................................................................................................46DaClearSamplingData ..............................................................................................................................................................47DaStartSampling.......................................................................................................................................................................47DaStartFileSampling.................................................................................................................................................................48DaSyncSampling ......................................................................................................................................................................48DaStopSampling.......................................................................................................................................................................49DaGetStatus..............................................................................................................................................................................49DaOutputDA ............................................................................................................................................................................50DaInputDI.................................................................................................................................................................................50DaOutputDO ............................................................................................................................................................................50DaAdjustVR .............................................................................................................................................................................51CallBackProc............................................................................................................................................................................51

5.2. FbiDaDC.DLL 関数リファレンス ......................................................................................................................................52DaDataConv .............................................................................................................................................................................52DaWriteFile ..............................................................................................................................................................................53fnConv......................................................................................................................................................................................53エラーコード一覧 ..................................................................................................................................................................54

5.3. Visual C++用構造体定義一覧 ..............................................................................................................................................55DASMPLREQ構造体 .............................................................................................................................................................55DASMPLCHREQ構造体........................................................................................................................................................56DABOARDSPEC構造体 ........................................................................................................................................................57

Page 4: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

目次目次目次目次

© 2000 Interface Corporation. All rights reserved.

DAMODEREQ構造体(PCI-3305、PCI-3310、PCI-3336、PCI-3340のみ有効) ..........................................................58DAMODECHREQ構造体(PCI-3305、PCI-3310、PCI-3336、PCI-3340のみ有効) .....................................................59

5.4. Visual C++用定数一覧 ..........................................................................................................................................................60参考文献............................................................................................................................................................................................64技術資料.......................................................................................................................................................................................65

Page 5: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

製品紹介製品紹介製品紹介製品紹介

© 2000 Interface Corporation. All rights reserved.

製品紹介製品紹介製品紹介製品紹介

アナログ出力

型式 価格 制御方式 分解能 チャンネル数データ転送方式

変換時間[μs/CH] 絶縁方式

PCI-3305 ¥138,000 電圧出力 12bit 2 メモリ 0.2PCI-3337 ¥169,800 電圧出力 16bit 4 メモリ 5PCI-3335 ¥189,800 電圧出力 16bit 4 メモリ 5 バス絶縁PCI-3329 ¥59,000 電圧出力 12bit 8 I/O 10PCI-3338 ¥82,000 電圧出力 12bit 8 I/O 10 バス絶縁PCI-3336 ¥119,800 電圧出力 16bit 4 I/O 5PCI-3310 ¥139,800 電圧出力 16bit 4 I/O 5 バス絶縁PCI-3325 ¥128,000 電圧/電流出力 12bit 4 I/O 10(電圧出力時)

50(電流出力時)バス絶縁

PCI-3340 ¥17,9800 電圧出力 16bit 8 I/O 5PCI-3342A ¥3,9800 電圧出力 12bit 4 I/O 10PCI-3343A ¥3,9800 電圧出力 12bit 4 I/O 10PCI-3521 ¥73,000 電圧入出力 12bit (出力)4 I/O 10PCI-3522A ¥49,800 電圧入出力 12bit (出力)4 I/O 10PCI-3523A ¥49,800 電圧入出力 12bit (出力)4 I/O 10

今後発売予定の製品今後発売予定の製品今後発売予定の製品今後発売予定の製品PCI-3341A PCI-3345A PCI-3346A

・8CH・12ビット DA変換ボード・高速変換(10μs)・出力リセット機能・タイマによる周期的な DA変換・ドライバソフトウェア付属

・4CH・12ビット DA変換ボード・高速変換(10μs)・出力リセット機能・タイマによる周期的な DA変換・ドライバソフトウェア付属

・16CH・12ビット DA変換ボード・高速変換(10μs)・出力リセット機能・タイマによる周期的な DA変換・ドライバソフトウェア付属

PCI-3347

・4CH・16ビット DA変換ボード・高速変換(10μs)・出力リセット機能・タイマによる周期的な DA変換・ドライバソフトウェア付属

※写真は実物とは 異なります。

発売時期及び製品仕様に関しましては、製品改良の為、変更される場合があります。最新情報に関しましては弊社Web site(http://www.interface.co.jp)をご覧ください。

Page 6: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

はじめにはじめにはじめにはじめに

© 2000 Interface Corporation. All rights reserved.

1

はじめにはじめにはじめにはじめに

平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社 DAボードを利

用し Visual C++にて制御プログラムを作成される方を対象に、製品の導入からプログラム作成ま

でを説明したものです。

プログラム初心者の方が弊社製品をご利用いただき、また Visual C++にてプログラムの開発を

行われる際の手助けになればと考えております。

記述する内容に関しましては、基本的なことにとどまっております。また、弊社ホームページ

(http://www.interface.co.jp)では FAQ,製品マニュアル,および本チュートリアル記載のサンプ

ルプログラムのソース(BPC-0810)の公開を行っておりますので、こちらもあわせてご覧頂け

ますと、よりいっそうご理解を深めていただけるものと思います。

対応型式対応型式対応型式対応型式

アナログ出力 アナログ入出力PCI-3305 PCI-3521PCI-3310 PCI-3522APCI-3325 PCI-3523APCI-3329PCI-3335PCI-3336PCI-3337PCI-3338PCI-3340PCI-3342APCI-3343A

※本冊子は上記の弊社製品型式のみに対応しています。

注意事項注意事項注意事項注意事項

本冊子では、使用する環境をWindows Me/98/95+Visual C++Ver. 5.0または Ver. 6.0を想定し記

載しております。

Windows 2000/NT等をご利用の場合、ボードのインストール方法等が本冊子に記載した内容と

は異なります。また、本冊子に記載した一部のプログラムコードは実行できませんのでご注意く

ださい。こちらに関しましては、弊社製品マニュアル,オンラインドキュメントをご確認くださ

い。

Page 7: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

アナログアナログアナログアナログ

© 2000 Interface Corporation. All rights reserved.

2

1. アナログアナログアナログアナログ

これまでに、アナログ(analog)という言葉を一度は耳にしたことがあると思います。

ではアナログとは何でしょう。しばしばデジタルという言葉と対比し使われますが、デジタル

が「1つ 2つと区切って数えられる」のに対し、アナログとは「連続した量で、1つ 2つと区切

って数えられない」ものを言います。

デジタル時計とアナログ時計を例にあげてみます。

図図図図 1-1

デジタル時計では、「1:53」と単純に読み取ればよいわけですが、アナログ時計で仮に小数点以

下を読み取っていくとしたらどうでしょう。「1:53」,「1:53.1」,「1:53.124」,「1:53.1245……..」と、

きりがありませんね。

1.1. D/Aコンバータコンバータコンバータコンバータ

D/Aコンバータとは、Digital to Analog Converterの略で、デジタル・アナログ変換器と訳されま

す。デジタル・アナログ変換器とはデジタル値をアナログ量に変換してくれる装置のことです。

本冊子で紹介する DAボードも D/Aコンバータが搭載された、インタフェースボードです。

パソコンはデジタル信号で動いています。一方、私たちが普段、目や耳にすることのできる「光」

や「音」の情報はすべてアナログ信号です。

ところで、今のパソコンは CD の再生ができたり、音声の再生が行えたりと、このアナログ信

号である「音」の出力が行えます。

これは、パソコン内部のデジタルな情報が D/Aコンバータによってアナログ情報に変換され、

スピーカーより出力されているからです。

Page 8: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

アナログアナログアナログアナログ

© 2000 Interface Corporation. All rights reserved.

3

1.2.アナログ出力アナログ出力アナログ出力アナログ出力

DAボードは、アナログ信号を出力することができるインタフェースボードです。

DA ボードからは、電圧または電流の固定値または時間とともに連続的に変化させた、電気信

号が出力されます。

電圧[V]

時間 →0

0 .5

1

1 .5

2

2 .5

3

3 .5

4

4 .5

5

図図図図 1-2

1.3.バイポーラとユニポーラバイポーラとユニポーラバイポーラとユニポーラバイポーラとユニポーラ

アナログ出力は、出力電圧域の違いにより「ユニポーラ(unipolar)」と「バイポーラ(bipolar)」

とに区別することができます。 ポーラとは「極」を意味し、それぞれ「単極性」、「双極性」と

訳されます。

出力電位差(最大出力電圧-最小出力電圧)が 5Vの場合、ユニポーラでは最小出力電圧 0Vか

ら最大出力電圧+5V の出力を行います。一方、バイポーラでは 0V を中心に最小出力電圧-2.5V

から最大出力電圧+2.5Vの出力を行います。

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

-2.5

-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

2.5

ユニポーラ バイポーラ

電圧[V]電圧[V]

時間→

時間→

図図図図 1-3

グラフは横軸が時間、縦軸が電圧を表しています。

Page 9: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

DAボードのインストールボードのインストールボードのインストールボードのインストール

© 2000 Interface Corporation. All rights reserved.

4

2. DAボードのインストールボードのインストールボードのインストールボードのインストール

ここではWindows Me/98/95環境における、弊社 DAボードのインストール方法を記載します。

Windows 2000/ NTではインストール方法がここに記載する内容とは異なります。こちらに関し

ましては製品マニュアルをご確認ください。

2.1ボードの設置ボードの設置ボードの設置ボードの設置

① ご購入いただいた弊社ボードを用意します。ボードの部品実装面にロータリスイッチ

(RSW1)があります。(下図参照)

LED1

RSW1

CN1

PCIボード識別用ロータリスイッチ

図図図図 2-1

弊社ではこのスイッチを「PCIボード識別用ロータリスイッチ」と称します。

弊社 DAボードは、1台のパソコンで同一型式のボードを複数枚利用することが可能です。ロータリ

スイッチには「0」から「F」までの値が設定可能となっていますが、複数枚のボードを利用する場合

には、重複しない値を設定してください。この設定された番号を弊社では「ボード ID」または「ボー

ド番号」と称します。

② PCIボード識別用ロータリスイッチの設定が完了したら、次はボードをパソコンの PCIス

ロットに挿入します。パソコンの ACプラグを抜き、外装カバーを外し、PCI拡張スロット

にボードを差し込みます。しっかり差し込まれたことを確認したらボードをビス止めして

ください。

③ 外装カバーを取り付け、AC プラグをもとに戻しパソコ

ンを起動します。Windows Me/98/95が起動するとすぐに

ハードウェアウィザードが起動します。

図図図図 2-2

④ デバイスドライバを自動検出するメッセージダイアログが表示されますので「次へ」をク

リックします。

ご使用になる製品によっては、「PCI ボード識別用ロータリスイッチ」の位置が左図とは異なります。詳細は製品マニュアルをご確認下さい。

Page 10: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

DAボードのインストールボードのインストールボードのインストールボードのインストール

© 2000 Interface Corporation. All rights reserved.

5

注意)・ボードの金メッキ端子部や、半田面には手を触れないでください。

・衝撃や振動、磁気や静電気の加わる場所での使用は行わないでください。

2.2ドライバのインストールドライバのインストールドライバのインストールドライバのインストール

⑤ 「デバイスドライバが見つかりません」とダイアログが表示され、ドライバの「場所の指

定」をするよう表示されます。

⑥ 製品 CDを CD-ROMドライブに入れます。

⑦ 「場所の指定」をクリックし、場所に製品 CD 内の「GPC3300¥Win95」フォルダを指定し

「OK」をクリックします。

⑧ ドライバの情報が表示されるので、「完了」をクリックします。

⑨ ファイルのコピーが開始されます。はじめに「GPC-3300 ラベルの付いた DISKを挿入して

「OK」を押してください。」と表示されるので、そのまま「OK」をクリックして下さい。

⑩ 「CPxxxx~が見つかりませんでした」と表示される場合は、ファイルのコピー元に

「GPC3300¥Win95」フォルダを指定するとコピーが完了します。

ドライバのインストールが正常に行われると、システムプロパティのデバイスマネージャに表示

されます。(図 2-3は PCI-3310のインストールを行った場合です)

図図図図 2-3

ここにボードが追加されますここにボードが追加されますここにボードが追加されますここにボードが追加されます

Page 11: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

DAボードのインストールボードのインストールボードのインストールボードのインストール

© 2000 Interface Corporation. All rights reserved.

6

2.3 DLL及びサンプルプログラムのインストール及びサンプルプログラムのインストール及びサンプルプログラムのインストール及びサンプルプログラムのインストール

⑪ 製品 CDを CD-ROMドライブに挿入します。自動的にインストールプログラムが起動し、

以下の画面が表示されます。

(起動しない場合には、製品 CDの GPC3300¥JPN¥SETUPフォルダ内の SETUP.EXEを起動

してください)

図図図図 2-4

⑫ リストボックスよりインストールする型式を選択し、「インストール」ボタンをクリックす

ることにより、インストールプログラムが起動します。画面の指示に従ってインストール

を行ってください。また、型式を選択し、「Readme の表示」ボタンをクリックすることに

より、選択した型式の最新情報ドキュメント(README.HTM)が表示されます。

⑬ インストールを正常に終えると、「スタート」メニューに、「Interface GPC-3300」が追加さ

れます。

Page 12: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

Visual C++によるによるによるによる DA制御制御制御制御

© 2000 Interface Corporation. All rights reserved.

7

3. Visual C++によるによるによるによる DA制御制御制御制御

Visual C++より、DAボードを制御するには、DLLを利用します。Windowsアプリケーションプ

ログラミングでは直接 I/O やメモリにアクセスすることが禁止されています。したがって、DA

ボードに対して直接的に信号を送ることができません。そこで、ボードに対して直接的に信号を

送るプログラム(DLL)から必要なプロシージャ(関数)を呼び出し、この DLL を介してボー

ドの制御を行います。

DAボード

( )

出力

(FBIDA.DLL)

Visual C++アプリケーション

ダイナミックリンクライブラリ

Win32 API

仮想デバイスドライバ(CP33xx.VxD)

図図図図 3-1

Page 13: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

Visual C++によるによるによるによる DA制御制御制御制御

© 2000 Interface Corporation. All rights reserved.

8

3.1. ピンアサインメントピンアサインメントピンアサインメントピンアサインメント

DAボードからの信号出力は、ボードのコネクタ部分より行われますが、使用する製品型式によ

って、各ピンに割り当てられた役割が異なります。配線時には、これらピンアサインメントをよ

く確認の上、配線してください。 以下、弊社 PCI-3310のピンアサインメントを一例として記載.

します。

PCI-3310

●ボード側使用コネクタ メーカ:本多通信工業 型 式:PCR-E36LMDAまたは相当品

3 2 1

21 20 1936 35 34

18 17 16

※ メーカ指定のピンアサインメントとは異なります。

●ケーブル側適合コネクタ メーカー:本多通信工業 型 式 :PCR-E36FSまたは相当品

カバー:PCS-E36LK   (本多通信工業)

コネクタ:PCR-E36FS   (本多通信工業)

IN1IN2

OUT1OUT2DCOMACOM+5V※1

+15V※1

NCNCNCNC

VCOM3VCOM4

NCNC

VCOM2VCOM1

EXCLK OUT※2

NCEXINT IN

NCNC

RESET INNC

-15V※1

NCNCNCNC

VOUT3VOUT4

NCNC

VOUT2VOUT1

NC:未接続

56

7

8

9

1

2

3

4

10

1314

15

16

17

11

12

18

21

22

23

24

25

19

20

26

3132

33

34

35

27

28

29

30

36

図図図図 3-2

! ※1ジャンパスイッチの設定により出力またはNC(未接続)にすることができます。

! ※2ドライバソフトウェアにより、出力を禁止することができます。

表表表表 3-1

信号名信号名信号名信号名端子端子端子端子番号番号番号番号 チャンネルチャンネルチャンネルチャンネル 機 能機 能機 能機 能 用 途用 途用 途用 途 仕 様仕 様仕 様仕 様

VOUT1 1 CH1VOUT2 2 CH2VOUT3 3 CH3VOUT4 4 CH4

アナログ出力信号

VCOM1 19 CH1VCOM2 20 CH2VCOM3 21 CH3VCOM4 22 CH4

アナログ出力コモン

外部アナログ信号の出力端子

出力インピーダンス出力電流負荷容量電源投入時バスリセット時

1Ω(TYP)5mA以下450pF以下出力電圧は 0V出力電圧は 0V

他製品型式に関しましては、製品マニュアルか弊社製品カタログを参照してください。

Page 14: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

Visual C++によるによるによるによる DA制御制御制御制御

© 2000 Interface Corporation. All rights reserved.

9

3.2. DLLプロシージャ呼び出しによるプログラミングプロシージャ呼び出しによるプログラミングプロシージャ呼び出しによるプログラミングプロシージャ呼び出しによるプログラミング(概要)(概要)(概要)(概要)

Visual C++より DLLプロシージャ呼び出しプログラミングを行うには、弊社、DAボード用ソ

フトウェア(FBIDA.DLL)をダイナミックリンクし使用します。DLLとはダイナミック リンク

ライブラリ(Dynamic Link Library)の略でアプリケーションの実行時に動的にリンクして利用

できるプロシージャのライブラリです。プロシージャとは実行時に 1つの単位として処理される

コードの集まりを意味します。

Visual C++にて DLL プロシージャを利用するには、FBIDA.LIB、FBIDADC.LIB ファイルをリ

ンクして DLLプロシージャのアドレスを指定します。(リンクの方法は後で記載しています)

3.3. DAボード制御概略ボード制御概略ボード制御概略ボード制御概略

DAボードへの制御を行う場合、基本的に下記の制御シーケンス(順番)で行います。

ボード初期化

データ作成

出力処理

終了処理

2

1

3

4

プログラム起動

プログラム終了

データの出力

出力するデータ

(波形データ)の作成

図図図図 3-3

① ボードの初期化

Visual C++で作成されたアプリケーションが DA ボードへの操作を行う場合、まずアプリ

ケーションは、DAボードを利用可能な状態にする必要があります。

この処理がボードの初期化です。ボードの初期化を行うと、プログラムは DAボードへの

アクセスが可能となります。本処理が行われないと DAボードへのアクセスは行えません。

② データの作成

ボードから出力するアナログ波形データの作成を行います。

③ 出力処理

作成したアナログ波形データをボードから出力します。

④ 終了

ボードの使用終了を行うための手続きです。プログラム終了時には必要です。

Page 15: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(DA)

© 2000 Interface Corporation. All rights reserved.

10

4. チュートリアルチュートリアルチュートリアルチュートリアル

ここでは、実際に DAボードを用い、各種アナログ信号の出力を行う、簡単な波形出力プログ

ラムの作成を行います。

パソコンに DAボード(PCI-3310)を 1枚実装し、信号線接続用に「36スモールタップ端子台

(TRM-8000)」を接続します。ボードと端子台の接続には「36ピンハーフピッチ��36ピンア

ンフェノール接続ケ-ブル(CAB-83xxまたは CAB-84xx)」を使用しています。

また、出力信号の確認はオシロスコープで行います。

DAボード

端子台

波形データ

オシロスコープ

図図図図 4-1

PCI-3310以外では、対応する端子台及び接続用ケーブルの製品型式が異なる場合がありますの

でご注意ください。

チュートリアルではすべての出力を DAボードのチャンネル 1(VOUT1)より行います。オシ

ロスコープのプローブは、端子台の同チャンネルに対応する端子に接続してください。

PCI-3310,TRM-8000の組み合わせの場合、端子台の 20番ピンが COMに、0番ピンがチャンネル 1の出力になります。

Page 16: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

11

4.1. 正弦波出力正弦波出力正弦波出力正弦波出力

ここでは、パソコンに実装した DAボード(PCI-3310)のチャンネル 1 より出力レンジがユニ

ポーラ 0~5V,周波数 100 Hzの正弦波の出力を行います。

電圧[V]

時間 →0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

図図図図 4-2

Step1.メインウィンドウ作成メインウィンドウ作成メインウィンドウ作成メインウィンドウ作成

ここでは、これから作成するプログラムの画面作成を行います。

1. Visual C++を起動し新しいプロジェクトを作成します。

・ 「ファイル」メニューより「新規作成」を選択すると、新規作成ダイアボックスが表示され

ます。「プロジェクト」タブを選択、表示します。

・ MFC AppWizard(exe)を選択し、プロジェクト名を記入します。ここでは“DaOutput”と

記入し以後それについての説明とします。

・ 位置には作業するフォルダを指定してください。その後「OK」をクリックします。

図図図図 4-3

MFC AppWizard (exe)を選択します

フォルダを指定します

プロジェクト

Page 17: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

12

2. SDI/MDIで SDIを選択し「次へ」をクリックします。

・ リソースで使用する言語の指定は「日本語」を選択します。

図図図図 4-4

3. 残りの項目は「次へ」をクリックします。・ ステップ 2~ステップ 5まですべて「次へ」をクリックし、ステップ 6で「終了」をクリッ

クします。

4. 新規プロジェクト情報というダイアログ表示されますので「OK」をクリックします。

ここまでで、新規プロジェクトの作成は完了です。

SDIを選択します

図図図図 4-5

OKをクリック

Page 18: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

13

Step2. DLLプロシージャ宣言プロシージャ宣言プロシージャ宣言プロシージャ宣言

DLL プロシージャを利用するには、FBIDA.LIB、FBIDADC.LIBファイルを使ってプロシー

ジャの位置を指定し、プロシージャの呼び出しに使う引数の識別を行わなければなりません。

DLLとはダイナミック リンク ライブラリ(Dynamic Link Library)の略でアプリケーショ

ンの実行時に動的にリンクして利用できるプロシージャのライブラリです。 そもそも、

Windowsアプリケーションプログラミングでは直接I/Oやメモリにアクセスすることが禁止

されています。言い換えれば、DAボードに対して直接的に信号を送ることができません。

そこで、ボードに対して直接的に信号を送るプログラム(DLL)から必要なプロシージャを

呼び出し、このDLLを介してボートの制御を行います。(図3-1参照)

ここで一度宣言した DLL プロシージャは、Visual C++ のプロシージャと同じようにコー

ドで呼び出すことが可能となります。

1. プロジェクトに FBIDA.LIB、FBIDADC.LIB、FBIDA.H、GPCDA.Hのパス設定を行います。

・ 「ツール」→「オプション」を選択し、「ディレクトリ」タブを選択します。

図図図図 4-6

Page 19: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

14

・ 表示するディレクトリを「インクルードファイル」にします。

・ 空白の部分をダブルクリックします。(下図参照)

図図図図 4-7

・ ディレクトリの追加を行います。ディレクトリ先を<Program Files>¥Interface¥GPC3300

¥includeに設定して「OK」をクリックします。(下図参照)

図図図図 4-8

includeを選択します

ダブルクリックします インクルードファイルにします

クリックします

Page 20: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

15

・ 下図のようにディレクトリに追加されます。

図図図図 4-9

・ 次に、表示するディレクトリを「ライブラリファイル」にします。

・ ディレクトリの追加を行います。ディレクトリ先を<Program Files>¥Interface¥GPC3300¥lib

と設定して「OK」をクリックします。(下図参照)

図図図図 4-10

追加されたディレクトリ

libを選択します

Page 21: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

16

・ 下図のようにディレクトリに追加されます。

図図図図 4-11

2. プロジェクトに FBIDA.LIB、FBIDADC.LIBファイルをリンクします。

・ 「プロジェクト」→「設定」を選択し、「リンク」タブを選択します。

・ 設定の対象を「すべての構成」に設定し、「オブジェクト/ライブラリモジュール」に

“fbida.lib” “fbidadc.lib”と書き込み「OK」をクリックします

図図図図 4-12

“FBIDA.LIB”、“FBIDADC.LIB”、“FBIDA.H”“GPCDA.H”は、Setup でインストールされる

<インストール先>¥lib、<インストール先>¥includeにあります。

(インストール先:<Program Files>¥Interface¥GPC3300)

ライブラリファイルにします追加されたディレクトリ

FBIDA.LIB、FBIDADC.LIBをリンクします

すべての構成にします

Page 22: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

17

Step3.初期化処理と終了処理初期化処理と終了処理初期化処理と終了処理初期化処理と終了処理

ここでは、実際のプログラム作成を行う前に、DA ボードの初期化処理と終了処理に関して、

知っておかなければならないこと、及び制約事項について記載します。

DA ボードの制御を行うには、まずボードの初期化を行わなければなりません。ボードの初期

化は以下のコード(List 1-1)により行います。

(List 1-1:ボードの初期化)//ボード初期化を行いますHANDLE hDeviceHandle; //デバイスハンドルhDeviceHandle = DaOpen(“FBIDA1”);

このとき、FBIDA1 に設定する値は、使用するボードのデバイス名を指定します。デバイス名

は、「システムのプロパティ」の「デバイス マネージャ」より確認できます。

ここにデバイス名が表示されます

図図図図 4-13

ボードの初期化は DaOpen関数により行います。

「使用例」 HANDLE hDeviceHandle;

hDeviceHandle = DaOpenDaOpenDaOpenDaOpen(“FBIDA1”);

デバイスハンドルを格納するHANDLE型の変数を指定します。

使用するボードのデバイス名を指定します。

Page 23: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

18

また、アプリケーションの終了時、もしくは処理の終了時に、ボードに対して必ず終了処理を行

わなければなりません。

ボードの終了処理は以下のコード(List 1-2)により行います。

(List 1-2:ボードの終了処理)//終了処理INT nRet;nRet = DaClose(hDeviceHandle);

ボードの終了処理は DaClose関数により行います。ここで、注意しなければならないのは、設

定する引数の hDeviceHandle です。hDeviceHandle にはボード初期化の際の、DaOpen 関数の戻

り値を指定します。DaOpen 実行時、その戻り値である hDeviceHandleには有効なハンドル(番

号)が格納されています(List 1-2参照)。 ハンドルとは使用するデバイスの接続に関する情報

が格納されたメモリ領域を、識別するための値を示します。

プログラム作成時、この hDeviceHandle の値が、終了処理を行うデバイスの、DaOpen 実行時

に取得された値となるよう、DaOpenと DaCloseは必ず組になるようにしてください。

DaOpen

DaClose

ハンドルハンドルハンドルハンドル

図図図図 4-14

では、実際にボードの初期化と終了を行うプログラムを作成します。

1. 表示メニューから ClassWizardを起動する。

2. 「メッセージマップ」タブを選択し、以下のように設定します。(下図参照)プロジェクト DaOutput

クラス名 CDaOutputView

オブジェクト ID CDaOutputView

メッセージ WM_CREATE

「使用例」

nRet = DaCloseDaCloseDaCloseDaClose(hDeviceHandle);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

Page 24: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

19

3. 「関数の追加」をクリックします。

4. 同様にメッセージにWM_DESTROYを選択し、関数の追加をクリックします。

5. FileViewを表示し、SourceFileフォルダを展開して DaOutputView.cppの以下の位置(最初の

部分)に#include “fbida.h”、#include <math.h>を追加します。(List1-3)

6. DaOutputView.hの以下の部分を List1-4のように変更します。

7. OnCreate関数に List1-5を追加します。

8. OnDestroy関数に List1-6を追加します。

(List 1-3 DaOutputView.cpp の fbida.hのインクルード)// DaOutputView.cpp : CDaOutputView クラスの動作の定義を行います。//

#include "stdafx.h"#include "DaOutput.h"

#include "DaOutputDoc.h"#include "DaOutputView.h"

#include "fbida.h"#include <math.h>

#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif

図図図図 4-15 関数の追加をクリックします

ここに追加

Page 25: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

20

(List 1-4 CDaOutputView.hのコード)// DaOutputView.h : CDaOutputView クラスの宣言およびインターフェイスの定義をします。///////////////////////////////////////////////////////////////////////////////

#include "fbida.h"

#if !defined(AFX_DAVIEW_H__67D77C11_AB22_11D4_845C_00004CBDE0CF__INCLUDED_)#define AFX_DAVIEW_H__67D77C11_AB22_11D4_845C_00004CBDE0CF__INCLUDED_

#if _MSC_VER >= 1000#pragma once#endif // _MSC_VER >= 1000class CDaOutputView : public CView{protected: // シリアライズ機能のみから作成します。

CDaOutputView();DECLARE_DYNCREATE(CDAView)

// アトリビュートpublic: CDaOutputDoc* GetDocument();

HANDLE hDeviceHandle;WORD gwSmplData[256];DASMPLREQ gConfig;

// オペレーションpublic:

// オーバーライド

(List 1-5 CDaOutputViewクラスの OnCreate関数のコード)int CDaOutputView::OnCreate(LPCREATESTRUCT lpCreateStruct){

INT nRet;

if (CView::OnCreate(lpCreateStruct) == -1) return -1;

//ボードの初期処理hDeviceHandle = DaOpen("FBIDA1");if(hDeviceHandle == INVALID_HANDLE_VALUE){ AfxMessageBox("デバイスのオープンに失敗しました"); return 0;}

//アナログ出力設定情報読み出しnRet = DaGetSamplingConfig(hDeviceHandle,&gConfig);if(nRet != DA_ERROR_SUCCESS){ DaClose(hDeviceHandle); AfxMessageBox("アナログ入力更新に失敗しました"); return 0;}return 0;

}

ここに追加

ここに追加

Page 26: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

21

(List 1-6 CDaOutputViewクラスの OnDestory関数のコード)void CDaOutputView::OnDestroy(){

INT nRet;

CView::OnDestroy();

//終了処理if(hDeviceHandle != INVALID_HANDLE_VALUE){ nRet = DaClose(hDeviceHandle); if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("デバイスのクローズに失敗しました"); }}

}

プログラムの入力が終わったら、保存した後、プログラムを実行してみてください。何もエラ

ーが表示されなければ、ボードの初期化及び終了処理部分のプログラムは完成です。

List 1-5 に DaGetSamplingConfig 関数の呼び出しを行う記述がありますが、ここでは、これか

ら使用する構造体に初期値を格納しています。通常のアプリケーション作成において、必ずしも

必要な手続きではありません。

Step4444.正弦波出力正弦波出力正弦波出力正弦波出力

1. ResourceViewを表示し、Menuフォルダを展開して「IDR_MAINFRAME」をダブルクリック

します。

2. 空白の部分(ヘルプの隣)をダブルクリックし、メニューアイテムプロパティを表示し以下のように設定します。

キャプション 波形選択

3. 「波形選択」をクリックしプルダウンメニューの空白部分をダブルクリックします。メニューアイテムプロパティが表示されますので以下のように設定します。

ID ID_OUTSINキャプション 正弦波

ここをダブルクリックします図図図図 4-17

ここをダブルクリックします

図図図図 4-16

Page 27: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

22

図図図図 4-18

4. 先程作成したプルダウンメニューの中の「正弦波」の上にマウスカーソルをもってきて右クリックし「Class Wizard」を選択します。

5. 「メッセージマップ」タブを選択し、以下のように設定します。(下図参照)プロジェクト DaOutput

クラス名 CDaOutputView

オブジェクト ID ID_OUTSIN

メッセージ COMMAND

6. 「関数の追加」をクリックします。

図図図図 4-19

7. メンバ関数名を決定するダイアログが表示されますので“OnOutsin”となっていることを確

認し、「OK」をクリックします。

ID_OUTSINと入力します

正弦波と入力します

関数の追加をクリックします

Page 28: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

23

8. 「波形選択」の隣の空白部分をクリックし、メニューアイテムプロパティを表示し、ポップアップのチェックを外し、以下のように設定します。

ID ID_DASTART

キャプション 出力開始

9. 先程作成したメニュー中の「出力開始」の上にマウスカーソルをもってきて右クリックし「Class Wizard」を選択します。

10. 「メッセージマップ」タブを選択し、以下のように設定します。プロジェクト DaOutput

クラス名 CDaOutputView

オブジェクト ID ID_DASTART

メッセージ COMMAND

11. メンバ関数名を決定するダイアログが表示されますので“OnDastart”となっていることを確

認し、「OK」をクリックします。

12. 「出力開始」の隣の空白部分をクリックし、メニューアイテムプロパティを表示し、ポップアップのチェックを外し、以下のように設定します。

ID ID_DASTOP

キャプション 出力停止

13. 先程作成したメニュー中の「出力停止」の上にマウスカーソルをもってきて右クリックし「Class Wizard」を選択します。

14. 「メッセージマップ」タブを選択し、以下のように設定します。プロジェクト DaOutput

クラス名 CDaOutputView

オブジェクト ID ID_DASTOP

メッセージ COMMAND

15. メンバ関数名を決定するダイアログが表示されますので“OnDastop”となっていることを確

認し、「OK」をクリックします。

16. FileViewを表示し、SourceFileフォルダを展開して OnOutsin関数、OnDastart関数、OnDastop

関数を以下のように変更します。

(List 1-7 CDaOutputViewクラスの OnOutsin関数のコード)void CDaOutputView::OnOutSin(){

INT nCount; //繰り返し回数WORD wMax; //最大値WORD wMin; //最小値WORD wMid; //中間値

//分解能 8ビット//wMax = 0xff;

Page 29: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

24

//wMin = 0;//分解能 12ビット//wMax = 0xfff;//wMin = 0;//分解能 16ビットwMax = 0xffff;wMin = 0;

wMid= (wMax + wMin) / 2;//出力データ設定for(nCount = 0;nCount < 200;nCount++){ gwSmplData[nCount] = (WORD)(wMid * sin(nCount * 2 * 3.14159265 / 200) + wMid);}

}

(List 1-8 CDaOutputViewクラスの OnDastart関数のコード)void CDaOutputView::OnDastart(){

INT nRet;//戻り値

//ボードの設定nRet = DaSetBoardConfig(hDeviceHandle,200,NULL,NULL,0);if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("ボードの設定に失敗しました"); return;}

//出力設定gConfig.ulSmplRepeat = 0; //繰り返し回数 = 無限gConfig.fSmplFreq = 20000; //出力更新レート = 20kHzgConfig.SmplChReq[0].ulChNo = 1; //出力チャンネル = チャンネル1gConfig.SmplChReq[0].ulRange = DA_0_5V; //出力レンジ = 0V~5V

//アナログ出力更新設定nRet = DaSetSamplingConfig(hDeviceHandle,&gConfig);if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("アナログ出力更新に失敗しました"); return;}

//バッファ内の出力データをクリアしますnRet = DaClearSamplingData(hDeviceHandle);if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("バッファのクリアに失敗しました"); return;}

//出力するデータをバッファにセットしますnRet = DaSetSamplingData(hDeviceHandle,&gwSmplData,200);if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("出力データの登録に失敗しました"); return;}

//アナログ出力を開始しますnRet = DaStartSampling(hDeviceHandle,FLAG_ASYNC);if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("アナログ出力に失敗しました"); return;}

}

Page 30: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

25

(List 1-9 CDaOutputViewクラスの OnDastop関数のコード)void CDaOutputView::OnDastop(){

INT nRet; //戻り値//アナログ出力を停止しますnRet = DaStopSampling(hDeviceHandle);if(nRet != 0){ AfxMessageBox("出力停止に失敗しました");}

}

プログラムの入力が終わったら、保存した後、プログラムを実行し、「波形選択」メニューか

ら「正弦波」を選択し、「出力開始」をクリックして下さい。

オシロスコープでユニポーラ 0~5 Vの周波数 100 Hz※の正弦波を確認することができます。

T=10msV=5.00 V

T

V

GND

図図図図 4-20

確認できたら、「出力停止」をクリックし、アナログ出力の停止を行ってください。

※ 実際の出力には誤差があります。誤差の範囲は使用する製品型式及び使用するパソコン

のスペックにより異なります。

Page 31: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

26

では、List 1-7の処理を読み取ってみましょう。List 1-7では、まず、これから出力する波形の

データを作成しています。

波形データの作成は、縦方向を出力値、横方向を経過時間とした行列の上に、1 周期分の出力

データをプロットしていくように行います。

チュートリアルでは、分解能が 16ビットの PCI-3310を使用していますので、出力値の最小値

が 0(0x0)最大値が 65535(0xFFFF)となります※。プロットするデータ件数を 200件と指定し、

200列 65536行の行列上に正弦波を描画している事になります。このとき、List 1-7では 0の時

0Vが、65535の時 5Vが出力されるよう定義しています。

0x2

0x1

0x0

0xFFFF

0xFFFE

0xFFFD

1回目の出力

2回目の出力

3回目の出力

200回目の出力

199回目の出力

198回目の出力

図図図図 4-21

プログラム中では、配列変数 gwSmplData[]の各要素に、各時点において出力する出力値を各

構成要素に格納しています。

gwSmplData[0]=0x8000;gwSmplData[1]=0x8400;

gwSmplData[50]=0xFFFF;

gwSmplData[198]=0x77FF;gwSmplData[199]=0x7BFF;

※ 分解能が異なるボードを使用する際には、プログラム中のコメントの位置を変更して下さい

Page 32: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

27

まず、アナログ出力ボードをどのように動作させるのかを設定します。

ボードの設定には DaSetBoardConfig関数を使用します。

DaSetBoardConfig※関数の第 2引数には波形データのバッファサイズを指定します。第 3引数、

第 4引数、第 5引数については後で説明します。

次にプログラムは、作成した波形データをどのように出力するかを設定しています。

アナログ出力の設定には DaSetSamplingConfig関数を使用します。

アナログ出力時における、出力条件のパラメータはアナログ出力更新条件設定構造体

(DASMPLREQ構造体)に設定します。List 1-8では DASMPLREQ構造体を gConfig変数に定

義しパラメータの設定を行っています。

gConfig.ulSmplRepeat = 0; //繰り返し回数=無限gConfig.fSmplFreq = 20000; //出力更新レート=20kHzgConfig.SmplChReq(0).ulChNo = 1; //出力チャンネル=チャンネル 1gConfig.SmplChReq(0).ulRange = DA_0_5V; //出力レンジ=0V~5V

上記設定は、上から、「アナログ出力の繰り返し回数を無限」,「アナログ出力の更新レートを

20kHz」,「出力チャンネルをチャンネル 1」,「出力レンジを 0V~5V」を意味しています。

DASMPLREQ 構造体でのその他のパラメータに関しては本サンプルプログラムでは初期値を

適用しています(List 1-5)。

「使用例」

nRet = DaSetSamplingConfigDaSetSamplingConfigDaSetSamplingConfigDaSetSamplingConfig(hDeviceHandle, &gConfig);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

アナログ出力更新条件設定構造体を指定します。

「使用例」

nRet = DaSetBoardConfigDaSetBoardConfigDaSetBoardConfigDaSetBoardConfig(hDeviceHandle, ulSmplBufferSize, hEvent, lpCallBackProc, dwUser);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

出力データのバッファサイズを指定します。

イベントハンドルを指定します。 コールバック関数を指定します。

コールバック関数に渡すデータを指定します。

※ コールバック関数を使用しない場合は第3引数、第4引数に NULL、第 5引数に0を指定して下さい

Page 33: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

28

設定項目の詳細に関しては、巻末の「DLL リファレンス」の DASMPLREQ 構造体及び

DASMPLCHREQ構造体の項目を参照してください。

では List 1-8において設定したアナログ出力更新条件についてみてみましょう。

まず、繰り返し回数(ulSmplRepeat)ですが、gwSmplData[]に設定したデータ(gwSmplData

[0]~gwSmplData[199])を何回繰り返して出力するかを設定しています。ここでは無限回に

設定しているわけですから、gwSmplData[]に格納した 1 周期分の正弦波が「出力停止」がク

リックされるまで、延々出力されることになります。

次にアナログ出力更新レート(ulSmplFreq)は、gwSmplDataに設定したデータをどういった間

隔で出力するかを「Hz」を単位として設定します。ここでは 20000(=20 kHz)※を設定していま

すので、「50μs[=1/(20 kHz)]」毎に gwSmplDataに設定したデータが出力されます。

0 50 100 150 ・・・・・・・・・ 時間[μs]

1回目の出力

2回目の出力

・・・・・・・・・

n回目の出力

gwSmplData[0]の出力

gwSmplData[1]の出力

電圧[V]

図図図図 4-22

Page 34: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

29

したがって、すべてのデータの出力には 50μs×200=10 msの時間を要することになります。

10 msで 1周期分の正弦波を出力するわけですから、1/(10 ms)=100 Hzの正弦波が出力され

ることとなるわけです。

出力チャンネル(ulChNo)と出力レンジ(ulRange)ですが、チャンネル 1より 0V~5Vでの出

力を行うので、それぞれ、「1」と「DA_0_5V」を設定しています。

次に、プログラムは作成した波形データをバッファ(データを一時的に格納するメモリ)に格

納します。格納する前に 1度、バッファの初期化を行っています。

バッファの初期化には DaClearSamplingData 関数を、バッファへの波形データの格納には

DaSetSamplingData関数を使用します。

DaSetSamplingData 関数の第 2 引数には、波形データを格納した配列変数を指定します。第 3

引数にはその配列変数に格納された有効なデータ件数を指定します。List 1-8 では配列内に 200

件のデータを格納しているので、「200」となります。

「使用例」

nRet = DaClearSamplingDataDaClearSamplingDataDaClearSamplingDataDaClearSamplingData(hDeviceHandle);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

「使用例」

nRet = DaSetSamplingDataDaSetSamplingDataDaSetSamplingDataDaSetSamplingData(hDeviceHandle, &gwSmplData, 200);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

出力データが格納された配列変数を指定します。

出力するデータ件数を指定します。

※ ulSmplFreqに設定できる最大値は、使用するボード及びパソコンのスペックにより異なります。

Page 35: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(正弦波出力)(正弦波出力)(正弦波出力)(正弦波出力)

© 2000 Interface Corporation. All rights reserved.

30

最後にこの格納した波形データの出力を行います。アナログデータの出力には

DaStartSampling関数を使用します。

第 2 引数の同期/非同期フラグですが、同期(FLAG_SYNC)に設定した場合、

DaSetSamplingConfig関数で設定した条件を満たすまで、アプリケーション側に処理が戻りませ

ん※。非同期(FLAG_ASYNC)に設定した場合、ユーザーによる出力の停止または出力の繰り

返しが終了するまで、アナログデータの出力が繰り返されます。

出力の停止には DaStopSampling関数※を使用します。

「使用例」

nRet = DaStartSamplingDaStartSamplingDaStartSamplingDaStartSampling(hDeviceHandle, FLAG_ASYNC);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

同期/非同期フラグを指定します。

※ DaSetSampling関数にて ulRepeatに 0を指定している場合、同期出力を行うとはできません。

「使用例」

nRet = DaStopSamplingDaStopSamplingDaStopSamplingDaStopSampling(hDeviceHandle);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

※ DaStopSampling関数にてアナログ出力の停止を行っても、直前の出力状態が保持されたままとなっています。出力電位の初期化は行われません。(PCI-3305は出力電位の初期化をするかしないかを指定できます)

Page 36: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(矩形波出力)(矩形波出力)(矩形波出力)(矩形波出力)

© 2000 Interface Corporation. All rights reserved.

31

4.2. 矩形波出力矩形波出力矩形波出力矩形波出力

ここでは、矩形波の出力を行います。

1. プルダウンメニューに項目の追加を行います。「波形選択」をクリックし、プル

ダウンメニューの空白部分をダブルクリ

ックし、以下のように設定します。

ID ID_OUTRECTキャプション 矩形波

図図図図 4-23

2. メンバ関数“OnOutrect”の設定を行います。「矩形波」の上にカーソルを持ってきて右クリ

ックし、「Class Wizard」を選択して以下のように設定します。

プロジェクト DaOutputクラス名 CDaOutputViewオブジェクト ID ID_OUTRECTメッセージ COMMAND

3. FileViewを表示し、SourceFileフォルダを展開して DaOutputView.cppファイルの Outrect関数

に以下のコードを記述します。(List 2-1 CDaOutputViewクラスの OnOutrect関数のコード)

void CDaOutputView::OnOutrect(){

INT nCount;//繰り返し回数WORD wMax; //最大値WORD wMin; //最小値

//分解能 8ビット//wMax = 0xff;//wMin = 0;//分解能 12ビット//wMax = 0xfff;//wMin = 0;//分解能 16ビットwMax = 0xffff;wMin = 0;

//出力データ設定for(nCount = 0;nCount < 200;nCount++){ if(nCount < 100) gwSmplData[nCount] = wMax; else gwSmplData[nCount] = wMin;}

}

プログラムの入力が終わったら、保存した後、プログラムを実行し、「波形選択」メニューから

「矩形波」を選択し、「出力開始」をクリックして下さい。

オシロスコープでユニポーラ 0~5Vの周波数 100 Hzの矩形波を確認することができます。

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

電圧[V]

時間 →

Page 37: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(のこぎり波出力)(のこぎり波出力)(のこぎり波出力)(のこぎり波出力)

© 2000 Interface Corporation. All rights reserved.

32

4.3. のこぎり波のこぎり波のこぎり波のこぎり波

ここでは、のこぎり波の出力を行います。

1. プルダウンメニューに項目の追加を行います。「波形選択」をクリックし、プル

ダウンメニューの空白部分をダブルクリ

ックし、以下のように設定します。

ID ID_OUTSAW

キャプション のこぎり波

図図図図 4-24

2. メンバ関数“OnOutsaw”の設定を行います。「のこぎり波」の上にカーソルを持ってきて右

クリックし、「Class Wizard」を選択して以下のように設定します。

プロジェクト DaOutput

クラス名 CDaOutputView

オブジェクト ID ID_OUTSAW

メッセージ COMMAND

3. FileView を表示し、SourceFile フォルダを展開して DaOutputView.cpp ファイルの Outsaw 関

数に以下のコードを記述します。

(List 3-1 CDaOutputViewクラスの OnOutsaw関数のコード)void CDaOutputView::OnOutsaw(){

INT nCount;//繰り返し回数WORD wMax; //最大値WORD wMin; //最小値//分解能 8ビット//wMax = 0xff;//wMin = 0;//分解能 12ビット//wMax = 0xfff;//wMin = 0;//分解能 16ビットwMax = 0xffff;wMin = 0;

//出力データ設定for(nCount = 0;nCount < 200;nCount++){ gwSmplData[nCount] = nCount * wMax / 200;}

}

プログラムの入力が終わったら、保存した後、プログラムを実行し、「波形選択」メニューから

「のこぎり波」を選択し、「出力開始」をクリックして下さい。

オシロスコープでユニポーラ 0~5Vの周波数 100Hzの矩形波を確認することができます。

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

電圧[V]

時間 →

Page 38: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(三角波出力)(三角波出力)(三角波出力)(三角波出力)

© 2000 Interface Corporation. All rights reserved.

33

4.4. 三角波出力三角波出力三角波出力三角波出力

ここでは、三角波の出力を行います。

1. プルダウンメニューに項目の追加を行います。「波形選択」をクリックし、プル

ダウンメニューの空白部分をダブルクリ

ックし、以下のように設定します。

ID ID_OUTTRIキャプション 三角波

図図図図 4-25

2. メンバ関数“OnOuttri”の設定を行います。「三角波」の上にカーソルを持ってきて右クリッ

クし、「Class Wizard」を選択して以下のように設定します。

プロジェクト DaOutputクラス名 CDaOutputViewオブジェクト ID ID_OUTTRIメッセージ COMMAND

3. FileViewを表示し、SourceFileフォルダを展開して DaOutputView.cppファイルの Outtri関数

に以下のコードを記述します。

(List 4-1 CDaOutputViewクラスの OnOuttri関数のコード)void CDaOutputView::OnOuttri(){

INT nCount;//繰り返し回数WORD wMax; //最大値WORD wMin; //最小値

//分解能 8ビット//wMax = 0xff;//wMin = 0;//分解能 12ビット//wMax = 0xfff;//wMin = 0;//分解能 16ビットwMax = 0xffff;wMin = 0;

//出力データ設定for(nCount = 0;nCount < 200;nCount++){ if(nCount <= 100) gwSmplData[nCount] = nCount * wMax / 100; else gwSmplData[nCount] = wMax - (nCount * wMax / 100);}

}

プログラムの入力が終わったら、保存した後、プログラムを実行し、「波形選択」メニューから

「三角波」を選択し、「出力開始」をクリックして下さい。

オシロスコープでユニポーラ 0~5Vの周波数 100Hzの三角波を確認することができます。

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5電圧[V]

時間 →

Page 39: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(その他の波形出力)(その他の波形出力)(その他の波形出力)(その他の波形出力)

© 2000 Interface Corporation. All rights reserved.

34

4.5. その他の波形出力その他の波形出力その他の波形出力その他の波形出力

これまでに、代表的な波形である「正弦波」,「矩形波」,「のこぎり波」,「三角波」の出力を行

ってきましたが、いずれも gwSmplData[]配列変数の中身の値を変更するだけで、いろいろな

波形が出力できることが理解できたと思います。

では、以下のコード(List 5-1,List 5-2)ではどのような波形が出力されるでしょう?

いずれのコードも出力データ設定部分と置きかえることで適用できますので、確認してみてく

ださい。

(List5-1波形出力サンプル(1))double dCount;for(nCount = 0;nCount < 200;nCount++){

dCount = (nCount - 100.0) / 100.0;if(nCount % 2) gwSmplData[nCount] = (WORD)(2 * wMid * (dCount * sqrt(1 - pow(k,2))) + wMid);else gwSmplData[nCount] = (WORD)(-2 * wMid * (dCount * sqrt(1 - pow(k,2))) + wMid);

}

(List 5-2 波形出力サンプル(2))double dCount;for(nCount = 0;nCount < 200;nCount++){

dCount = (nCount - 100.0) / 100.0;if(nCount % 2) gwSmplData[nCount] = (WORD)(wMid * (pow(pow(dCount,2),(1 / 3)) + sqrt(1 - pow(dCount,2))));else gwSmplData[nCount] = (WORD)(wMid * (pow(pow(dCount,2),(1 / 3)) - sqrt(1 - pow(dCount,2))));

}

Page 40: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(コールバック関数)(コールバック関数)(コールバック関数)(コールバック関数)

© 2000 Interface Corporation. All rights reserved.

35

4.6. コールバック関数コールバック関数コールバック関数コールバック関数

ここではアナログ出力更新停止時に、コールバック関数を用いてメッセージを表示するプログ

ラムを作成します。

1. コールバック関数 CallBackProcを CDAViewクラスに追加します。

2. List1-8で作成した OnDastart関数を以下のように変更します。

(List 6-1 CDaOutputViewクラスの CallBackProc関数のコード)void CALLBACK CallBackProc(DWORD dwUser){

MessageBox(NULL,"アナログ出力更新を終了しました","メッセージ",MB_SETFOREGROUND); CloseHandle((HANDLE)dwUser);}

(List 6-2 CDaOutputViewクラスの OnDastart関数の変更コード)void CDaOutputView::OnDastart(){

INT nRet; //戻り値HANDLE hEvent; //イベント

hEvent = CreateEvent(0,FALSE,FALSE,NULL);//ボードの設定nRet = DaSetBoardConfig(hDeviceHandle,200,hEvent,CallBackProc,(ULONG)hEvent);if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("ボードの設定に失敗しました"); return;}

//出力設定gConfig.ulSmplRepeat = 0; //繰り返し回数 = 無限gConfig.fSmplFreq = 20000; //出力更新レート = 20kHzgConfig.SmplChReq[0].ulChNo = 1; //出力チャンネル = チャンネル1gConfig.SmplChReq[0].ulRange = DA_0_5V; //出力レンジ = 0V~5V

//アナログ出力更新設定nRet = DaSetSamplingConfig(hDeviceHandle,&gConfig);if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("アナログ出力更新に失敗しました"); return;}

//バッファ内の出力データをクリアしますnRet = DaClearSamplingData(hDeviceHandle);if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("バッファのクリアに失敗しました"); return;}

//出力するデータをバッファにセットしますnRet = DaSetSamplingData(hDeviceHandle,&gwSmplData,200);if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("出力データの登録に失敗しました"); return;}

ここを追加

ここを変更

Page 41: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(コールバック関数)(コールバック関数)(コールバック関数)(コールバック関数)

© 2000 Interface Corporation. All rights reserved.

36

//アナログ出力を開始しますnRet = DaStartSampling(hDeviceHandle,FLAG_ASYNC);if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("アナログ出力に失敗しました"); return;}

}

プログラムの入力が終わったら、保存した後、プログラムを実行し、「波形選択」→「出力開始」

→「出力停止」の順に実行して下さい。

「アナログ出力更新を終了しました」というメッセージを表示されます。

アナログ出力更新停止時にコールバック関数を実行する際には、DaSetBoardConfig関数で設定

します。

DaSetBoardConfig関数の第 3引数にはイベントハンドルを指定します。第 4引数にはアナログ

出力更新停止時に実行するコールバック関数を、第 5引数にはコールバック関数に渡すユーザデ

ータを指定します。

CallBackProc関数には、アナログ出力更新停止時に処理する内容を記述します。

「使用例」

void CALLBACK CallBackProcCallBackProcCallBackProcCallBackProc(DWORD dwUser){ ……………… ………………}

DaSetBoardConfig関数の dwUserメンバ変数で指定したデータが渡されます。

アナログ出力更新停止時に対応する処理を記述します。

「使用例」

nRet = DaSetBoardConfigDaSetBoardConfigDaSetBoardConfigDaSetBoardConfig(hDeviceHandle, ulSmplBufferSize, hEvent, lpCallBackProc, dwUser);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

出力データのバッファサイズを指定します。

イベントハンドルを指定します。

コールバック関数を指定します。

コールバック関数に渡すデータを指定します。

図図図図 4-26

Page 42: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)

© 2000 Interface Corporation. All rights reserved.

37

4.7. データファイルからの出力データファイルからの出力データファイルからの出力データファイルからの出力

FbiDa.DLLでは、CSV(Comma Separated Value)形式でファイルに保存されたアナログ出力デ

ータをボードより出力することが可能です。以下にその方法を記載します。

Step1.メインウィンドウ作成メインウィンドウ作成メインウィンドウ作成メインウィンドウ作成

ここでは、これから作成するプログラムの画面作成を行います。

1. Visual C++を起動し新しいプロジェクト(プロジェクト名:DaFileOut)を作成します。

2. プロジェクトに FBIDA.LIB ファイル、FBIDA.Hファイルのパス指定を行い、ライブラリフ

ァイル“fbida.lib”をリンクします。

3. メインウィンドウにメニューアイテムの追加を行います。ポップアップのチェックをはずし以下のように設定します。

ID ID_FILEOUT

キャプション ファイル出力

図図図図 4-27

4. メンバ関数“OnFileout”の設定を行います。以下のように設定します。

プロジェクト DaFileOut

クラス名 CDaFileOutView

オブジェクト ID ID_FILEOUT

メッセージ COMMAND

Step2222.出力データの作成出力データの作成出力データの作成出力データの作成

ここでは、これから出力を行う、アナログ波形データファイルの作成を行います。データファ

イルの作成には、Microsoft Excel等のデータ解析機能を備え、かつ CSV形式へのファイル出力

が可能なアプリケーションがあれば、より効率よくその作成が行えますが、通常のテキストエデ

ィタでも作成可能です。

チェックをはずします

Page 43: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)

© 2000 Interface Corporation. All rights reserved.

38

1. List 7-1に示す、テキストファイルを作成します

2. 作成したテキストファイルをファイル名「DATA.CSV」で、先ほど作成したプロジェクトフ

ァイルが保存されている場所と同じ場所に保存します。

(List 7-1 CSVデータ:[正弦波])2.5000002.8133333.1217243.4203113.7043843.9694634.2113674.4262834.6108194.7620674.8776414.9557184.9950664.9950664.9557184.8776414.7620674.6108194.4262834.2113673.9694633.7043843.4203113.1217242.8133332.5000002.1866661.8782751.5796881.2956151.0305360.7886320.5737160.3891800.2379320.1223580.0442810.0049330.0049330.0442810.1223580.2379320.3891800.5737160.7886321.0305361.2956151.5796881.8782752.186666

Page 44: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)

© 2000 Interface Corporation. All rights reserved.

39

Step3333.データファイルからの出力データファイルからの出力データファイルからの出力データファイルからの出力

1. FileViewを表示し、SourceFileフォルダを展開して DaFileOutView.cppの以下の位置(最初の

部分)に#include “fbida.h”を追加します(List7-2)

(List 7-2 fbida.hのインクルード)// DaFileOutView.cpp : CDaFileOutView クラスの動作の定義を行います。//

#include "stdafx.h"#include "DaFileOut.h"

#include "DaFileOutDoc.h"#include "DaFileOutView.h"#include "fbida.h"

#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif

2. ClassView を表示し、CDaFileOutView クラスを展開して OnFileout 関数に以下のコード

(List7-3)を記述します。

(List 7-3 CDaFileOutViewクラスの OnFileout関数のコード データファイル出力)void CDaFileOutView::OnFileout(){

// TODO: この位置にコマンド ハンドラ用のコードを追加してくださいFILE *fp; // ファイルポインタHANDLE hDeviceHandle; // デバイスハンドルDASMPLREQ Config; // DASMPLREQ構造体INT nRet; // 関数の実行結果INT nFilecount; // データ件数char szTemp[40]; // ファイルデータ格納

nFilecount = 0;

// ボードの初期化を行いますhDeviceHandle = DaOpen("FBIDA1");if(hDeviceHandle == INVALID_HANDLE_VALUE){

AfxMessageBox("デバイスの初期化に失敗しました");return;

}

// データ件数の取得fp = fopen("DATA.CSV","r");while(fgets(szTemp,20,fp) != NULL) nFilecount++;fclose(fp);

// ボードの設定nRet = DaSetBoardConfig(hDeviceHandle,nFilecount,NULL,NULL,0);if(nRet != DA_ERROR_SUCCESS){ AfxMessageBox("ボードの設定に失敗しました");

DaClose(hDeviceHandle); return;}

ここに追加します

Page 45: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)

© 2000 Interface Corporation. All rights reserved.

40

// アナログ出力設定情報読み出しnRet = DaGetSamplingConfig(hDeviceHandle, &Config);if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("アナログ出力設定情取得に失敗しました");DaClose(hDeviceHandle);return;

}

// 出力状態の設定Config.fSmplFreq = 5000; // 出力更新レート = 5kHzConfig.SmplChReq[0].ulChNo = 1; // 出力チャンネル = チャンネル 1Config.SmplChReq[0].ulRange = DA_0_5V; // 出力レンジ = 0V~5V

// アナログ出力更新設定nRet = DaSetSamplingConfig(hDeviceHandle, &Config);if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("アナログ出力更新設定に失敗しました");DaClose(hDeviceHandle);return;

}

// バッファ内の出力データのクリアnRet = DaClearSamplingData(hDeviceHandle);if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("バッファのクリアに失敗しました");DaClose(hDeviceHandle);return;

}// アナログデータ(ファイルデータ)の出力nRet = DaStartFileSampling( hDeviceHandle, "DATA.CSV", FLAG_CSV, nFilecount);if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("アナログ出力に失敗しました");DaClose(hDeviceHandle);return;

}AfxMessageBox("データ出力終了しました");

// 終了処理nRet = DaClose(hDeviceHandle);if(nRet != DA_ERROR_SUCCESS){

AfxMessageBox("デバイスの終了処理に失敗しました");}

}

プログラムの入力が終わったら、保存した後、プログラムを実行し、メニューバーにある「フ

ァイル出力」ボタンをクリックしてください。

DATA.CSVに定義した値(電圧)がチャンネル 1から下図のような波形で出力されます。オシ

ロスコープの設定にもよりますが、下図のような波形が出力されます。

図図図図 4-28

※オシロスコープの設定により、異なる場合があります。

Page 46: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)

© 2000 Interface Corporation. All rights reserved.

41

ファイルの出力が終了すると下図のダイアログボックスが表示されます。

図図図図 4-29

では、データファイルからのアナログ出力処理ですが、まず CSV形式ファイルの作成に関し説

明します。

作成する CSV形式ファイルは、出力チャンネルを「,」で区切り、出力値の物理量を行に定義

します。データファイル(DATA.CSV)はチャンネル 1 のみの出力でしたが、チャンネル 1, チ

ャンネル 2から同時に出力する場合は、2.500000,2.5000002.813333,2.8133333.121724,3.1217243.420311,3.4203113.704384,3.704384

となります。

次に、List7-3の処理を読み取ってみましょう。プログラムはまず、データファイルの格納位置

とそこに登録されているデータ件数を取得します。

この後、これまでのサンプルプログラムと同様にアナログ出力更新の設定を行い、データファ

イルからのアナログ出力を行っています。

データファイルからアナログ出力には DaStartFileSampling関数を使用します。

データファイルからのアナログ出力においては、アナログ出力の繰り返し設定はできません。

データファイルに定義された件数のみの出力となります。

また、CSV形式のデータファイルからのアナログ出力では、データファイルに記載された物理

量を DLL内部でバイナリ値に変換する為オーバーヘッドがかかり、設定したアナログ出力更新

レートでアナログ出力が行えない場合があります。

「使用例」

INT nFilecount;

nRet = DaStartFileSamplingDaStartFileSamplingDaStartFileSamplingDaStartFileSampling(hDeviceHandle, DATA.CSV, FLAG_CSV, nFileCount);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

データファイルのファイルパスを指定します。

出力を行うデータ件数を指定します。

ファイル形式を指定します。

Page 47: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

チュートリアルチュートリアルチュートリアルチュートリアル(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)(データファイルからの出力)

© 2000 Interface Corporation. All rights reserved.

42

ここでは、50件のデータのため波形出力時間は短いですが、データの件数を増やすことで、こ

の時間も長くなります。

弊社ホームページのダウンロードサイトにある「チュートリアル・プログラムソース集(Visual

C++)[BPC-0810]」をダウンロードして頂くと、ファイル名「SAMP.CSV」に 2万件のデータが

あります。そちらのファイルで確かめて頂くと一層ご理解頂けると思います。

ファイルを変更する場合は、List 7-3 の出力レンジの部分を“DA_5V”に変更し、プログラム

中の“DATA.CSV”の部分を“SAMP.CSV”に変更してください。

(List 7-4 CDaFileOutViewクラスの OnFileout関数の変更コード)

// 出力状態の設定Config.fSmplFreq = 5000; // 出力更新レート = 5kHzConfig.SmplChReq[0].ulChNo = 1; // 出力チャンネル = チャンネル 1Config.SmplChReq[0].ulRange = DA_5V; // 出力レンジ = -5V~5V

ここを変更します

Page 48: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDa.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

43

5. DLLリファレンスリファレンスリファレンスリファレンス

5.1. FbiDa.DLL 関数リファレンス関数リファレンス関数リファレンス関数リファレンス

DaOpen指定されたデバイス名のボードのオープンを行い、以後のボードへのアクセスを行えるようにします。

宣言宣言宣言宣言HANDLE DaOpen(LPCTSTR lpszName);

パラメータパラメータパラメータパラメータlpszName 任意のデバイス名を指定します。

戻り値戻り値戻り値戻り値関数が成功すると有効なデバイスハンドルが返されます。関数が失敗すると INVALID_HANDLE_VALUE が返されます。 INVALID_HANDLE_VALUE の値は、0xFFFFFFFFh(-1)です。

解説解説解説解説 Windows 2000/Me/98/95では、「デバイスマネージャ」に「FbiPciDa」が追加され認識された当社アナログ出力ボードが一覧表示されます。一覧の製品型式の横にボード上のロータリスイッチの値とデバイス名が表示されます。DA波形出力プログラム(DAWAVESMP.EXE)でも確認できます。Windows NTでは、DA波形出力プログラム(DAWAVESMP.EXE)にて割り当てられたデバイス名をご確認ください。 デバイス名は使用するボード枚数やスロット位置の変更等でシステム構成が変化すると割り当てられる名前が変化する場合があります。システム構成が変化する環境でご使用になる場合は、デバイス名の指定が変更できるようにアプリケーションを作成ください。

DaCloseボードのクローズを行い、ボードアクセスのために使用されていた各種リソースの解放し、以後のボードへのアクセスを禁止します。

宣言宣言宣言宣言INT DaClose(HANDLE hDeviceHandle);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

DaGetDeviceInfoアナログ出力ボードの各種仕様の取得を行います。

宣言宣言宣言宣言INT DaGetDeviceInfo(HANDLE hDeviceHandle,PDABOARDSPEC pBoardSpec);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。pBoardSpec DAボードの仕様を格納する構造体(DABOARDSPEC構造体)へのポインタです。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 49: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDa.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

44

DaSetBoardConfigアナログ出力ボードの動作設定を行います。

宣言宣言宣言宣言INT DaSetBoardConfig(HANDLE hDeviceHandle,ULONG ulSmplBufferSize,HANDLE hEvent,LPDACALLBACKlpCallBackProc,DWORD dwUser);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。ulSmplBufferSize アナログ出力データ格納用バッファサイズを指定します。既定値は 1024です。hEvent アナログ出力更新停止時にシグナル状態に設定されるイベントを識別します。

イベント通知を行わない場合、Visual C++では NULLを指定します。lpCallBackProc アナログ出力更新停止時に呼び出すユーザ・コールバック関数を指定します。

ユーザ・コールバック関数の呼び出しを行わない場合、Visual C++では NULLを指定します。

dwUser ユーザ・コールバック関数へ引き渡すユーザ・データを指定します。ユーザ・コールバック関数の呼び出しを行わない場合には、0を指定します。既定値は 0です。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説 データがセットされている状態でアナログ出力バッファサイズを変更した場合、データはクリアされます。アナログ出力データバッファサイズのみは、アナログ出力更新中に変更することは出来ません。コールバック関数の詳細は CallBackProc関数を参照下さい。

DaGetBoardConfigアナログ出力ボードの現在のボード動作条件を取得します。

宣言宣言宣言宣言INT DaGetBoardConfig(HANDLE hDeviceHandle,ULONG *ulSmplBufferSize,ULONG *ulSmplEventFactor);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。ulSmplBufferSize 現在設定されているナログ出力データを格納しておくバッファサイズ件数を格納す

るための変数へのポインタを指定します。ulSmplEventFactor アナログ出力更新のイベント要因を格納する変数へのポインタです。

定数 意味DA_EVENT_STOP_TRIGGER トリガによるサンプリング停止DA_EVENT_STOP_FUNCTION 関数によるサンプリング停止DA_EVENT_STOP_SAMPLING サンプリング終了DA_EVENT_RESET_IN リセットイン発生DA_EVENT_CURRENT_OFF 電流断検出

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 50: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDa.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

45

DaSetSamplingConfigアナログ出力ボードのアナログ出力更新条件の設定を行います。

宣言宣言宣言宣言INT DaSetSamplingConfig(HANDLE hDeviceHandle,PDASMPLREQ pDaSmplConfig);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。pDaSmplConfig アナログ出力更新条件構造体(DASMPLREQ構造体)へのポインタを指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説アナログ出力チャンネル数とリピート回数は、アナログ出力更新中に変更することは出来ません。

DaGetSamplingConfigアナログ出力ボードの現在設定されているアナログ出力更新条件を取得します。

宣言宣言宣言宣言INT DaGetSamplingConfig(HANDLE hDeviceHandle, PDASMPLREQ pDaSmplConfig);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。pDaSmplConfig アナログ出力更新条件構造体(DASMPLREQ構造体)へのポインタを指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

DaSetModeアナログ出力ボードのボード固有の動作モードの設定を行います。

ボード 機能PCI-3305 波形出力モードを設定するPCI-3310PCI-3336PCI-3340

EXCLK OUT端子からのクロック出力を制御する(出力/停止)

宣言宣言宣言宣言INT DaSetMode(HANDLE hDeviceHandle,PDAMODEREQ pDaMode);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。pDaMode 波形出力モード構造体(DAMODEREQ構造体)へのポインタを指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説本関数は、PCI-3305と EXCLK OUT端子より出力されるクロック信号を停止させることができる型式で、有効となります。アナログ出力チャンネル数とリピート回数は、アナログ出力更新中に変更することは出来ません。

Page 51: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDa.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

46

EXCLK OUT端子より出力されるクロック信号を停止させることができる型式では、DAMODEREQ構造体のメンバ ulExClockに DA_EXCLK_INを設定するとクロック出力を停止します、DA_EXCLK_OUTを設定するとクロックを出力します。

DaGetModeアナログ出力ボードのボード固有の動作モードの設定を行います。

ボード 機能PCI-3305 波形出力モードを設定するPCI-3310PCI-3336PCI-3340

EXCLK OUT端子からのクロック出力を制御する(出力/停止)

宣言宣言宣言宣言INT DaGetMode(HANDLE hDeviceHandle,PDAMODEREQ pDaMode);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。pDaMode 波形出力モード構造体(DAMODEREQ構造体)へのポインタを指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説本関数は、PCI-3305と EXCLK OUT端子より出力されるクロック信号を停止させることができる型式で、有効となります。EXCLK OUT端子より出力されるクロック信号を停止させることができる型式では、DAMODEREQ構造体のメンバ ulExClockにクロックの出力状態が格納されます。

DaSetSamplingDataアナログ出力ボードから出力するアナログ出力更新データのセットを行います。

宣言宣言宣言宣言INT DaSetSamplingData(HANDLE hDeviceHandle,PVOID pSmplData,ULONG ulSmplDataNum);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。pSmplData アナログ出力データが格納されたバッファへのポインタを指定します。ulSmplDataNum 有効なバッファ内の件数を指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説 本関数ではアナログ出力更新データをアナログ出力バッファにセットするのみで、実際のアナログ出力更新は行いません。アナログ出力更新の開始は DaStartSampling関数で行います。また、既にアナログ出力バッファにデータがセットされている場合には、そのデータの後に指定されたアナログ出力データを連結します。アナログ出力更新中に本関数を実行した場合、次のアナログ出力データとしてバッファにセットされます。既にセットされていたデータのアナログ出力が終了してから、次のデータのアナログ出力更新が開始されます。

メモリ方式のボード(PCI-3335,3337)では、データは後ろに追加されずに先頭から上書きされます。PCI-3305ではボードの仕様上、アナログ出力更新中に本関数を実行する事はできません。

Page 52: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDa.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

47

DaClearSamplingData出力バッファ内のアナログ出力データをクリアします。

宣言宣言宣言宣言INT DaSetSamplingData(HANDLE hDeviceHandle);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

DaStartSamplingアナログ出力ボードのアナログ出力更新をスタートさせます。

宣言宣言宣言宣言INT DaStartSampling(HANDLE hDeviceHandle,ULONG ulSyncFlag);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定しますulSyncFlag アナログ出力更新処理を同期で行うか、非同期で行うかを指定します。

定数 意味FLAG_SYNC 同期処理でアナログ出力更新を行います。FLAG_ASYNC 非同期処理でアナログ出力更新を行います。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説 DaSetSamplingData 関数でセットしたすべてのデータのアナログ出力更新が完了時点(リピートありの場合はリピート回数分完了時点)でアナログ出力更新は停止します。

①同期/非同期処理について

・同期出力(FLAG_SYNC) アプリケーションはアナログ出力更新が完了するまで待ちます。

・非同期入出力(FLAG_ASYNC) アプリケーションはアナログ出力更新の完了まで待たず、制御が API から戻ります。アナログ出力更新の完了はイベントで通知されます。アプリケーション側ではWIN32APIのWaitForSingleObject関数でイベントがシグナル状態になるのを待ちます。

②非同期処理で開始したアナログ出力更新は、DaStopSampling 関数にてアナログ出力更新を強制終了させることができます。

③同期処理でアナログ出力更新を行う場合は、アナログ出力更新動作の繰り返し回数(DASMPLREQ 構造体の ulSmplRepeat)を 0にすることはできません。0に設定されていた場合、本関数はエラーを返します。

Page 53: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDa.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

48

DaStartFileSamplingデータファイルから出力データを読み込み、アナログ出力ボードからアナログ出力更新を行います。

宣言宣言宣言宣言INT DaStartFileSampling(HANDLE hDeviceHandle, LPCTSTR pszPathName, ULONG ulFileFlag,ULONG ulSmplNum);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。pszPathName アナログ出力を行う、データファイルへのパスを指定します。ulFileFlag データファイルの形式を指定します。

定数 意味FLAG_BIN バイナリ形式でデータを書き込みます。FLAG_CSV CSV形式(物理量)でデータを書き込みます。

ulSmplNum アナログ出力件数を指定します

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説CSV形式でデータを読み込む時には、データを物理量からバイナリに変換するので、オーバーヘッドがかかり、設定した更新レートでアナログ出力更新ができない場合があります。アナログ出力の繰り返し設定はできません。設定されていても無視されます。アナログ出力バッファにデータが残っている状態でファイルアナログ出力を開始した場合には、ファイルアナログ出力開始と同時にアナログ出力バッファはクリアされます。

DaSyncSampling複数枚同期アナログ出力機能を使用したアナログ出力更新を行います。

宣言宣言宣言宣言INT DaSyncSampling(HANDLE hDeviceHandle, ULONG ulMode);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。ulMode マスタで使用するかスレーブで使用するかを指定します。

定数 意味DA_MASTER_MODE マスターモードDA_SLAVE_MODE スレーブモード

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説・本関数は、複数枚同期アナログ出力機能に対応したボードのみで使用できます。その他のボードでは使用できません。また、異なる型式のボード間での使用もできません。現在対応している型式は PCI-3340[11]、PCI-3310[12]、PCI-3336[12]、PCI-3522A、PCI-3523Aです。・本関数には DaStartSampling関数のように同期処理(FLAG_SYNC)、非同期処理(FLAG_ASYNC)の設定はありません。常に非同期処理として実行されます。・アナログ出力更新終了時に、イベントの通知、コールバックルーチンの呼び出しを行う事ができます。イベント、コールバックルーチンの設定は DaSetBoardConfig関数でマスタモードのボードのみに設定します。・アナログ出力更新を途中で終わらせる場合には DaStopSampling関数を使用します。・アナログ出力更新条件は DaSetSamplingConfig関数、DaSetMode関数で設定します。アナログ出力更新条件には以下のような制限があります。

Page 54: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDa.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

49

・チャンネル数、チャンネル条件、モード設定チャンネル条件、DA ラッチについては、ボード毎に値を設定できますが、その他の項目は全て同じ値を設定する必要があります。・トリガはスタートトリガのみ指定できます。また、ディレイは指定できません。各サンプリング方式で指定できるトリガは以下の通りです。

I/O方式 外部トリガ、DIマスク付き外部トリガメモリ方式 外部トリガ

・アナログ出力更新中には各種条件を変更することはできません。・アナログ出力更新データは全ボードに対して同じ件数分セットする必要があります。・マスタモードは複数枚同期アナログ出力を行うボードの中で 1枚のみ指定できます。その他のボードはスレーブモードに指定します。・本関数はスレーブモードにするボードから実行して、最後にマスタモードのボードを実行します。

DaStopSampling非同期でスタートさせたアナログ出力更新を停止させます。

宣言宣言宣言宣言INT DaStopSampling(HANDLE hDeviceHandle);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。

DaGetStatusアナログ出力更新動作状態を取得します。

宣言宣言宣言宣言INT DaGetStatus(HANDLE hDeviceHandle, ULONG *ulDaSmplStatus, ULONG *ulDaSmplCount,ULONG *ulDaAvailCount, ULONG *ulDaAvailRepeat);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。ulDaSmplStatus アナログ出力更新状態格納変数へのポインタを指定します。

定数 意味DA_STATUS_STOP_SAMPLING アナログ出力更新は停止しています。DA_STATUS_WAIT_TRIGGER アナログ出力更新はトリガ待ち状態です。DA_STATUS_NOW_SAMPLING アナログ出力更新動作中です。

ulDaSmplCount アナログ出力済のデータの個数格納変数へのポインタを指定します。ulDaAvailCount アナログ出力されず残っているデータの個数格納変数へのポインタを指定します。ulDaAvailRepeat アナログ出力動作の残り繰り返し回数を格納する変数へのポインタを指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 55: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDa.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

50

DaOutputDAアナログ出力ボードから 1件のアナログ出力を行います。

宣言宣言宣言宣言INT DaOutputDA(HANDLE hDeviceHandle,ULONG ulCh,PDASMPLCHREQ pSmplChReq);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。ulCh アナログ出力を行うチャンネル数を指定します。pDaSmplChReq アナログ出力を行うチャンネル番号,レンジを指定するための構造体配列

(DASMPLCHREQ構造体)へのポインタを指定します。pData アナログ出力するデータを格納してある位置へのポインタを指定します。

lpDataが指す位置に格納されているアナログデータを出力します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説 本関数は DaStartSampling 関数を使用した通常のアナログ出力更新とは異なり、ボードのアナログ出力機能のみを利用します。 ulCh パラメータでは 1 件出力を行うチャンネル数を指定します(つまり、出力チャンネル番号が 1,3,5,7 であればチャンネル数 4となります)。 出力を行うチャンネル番号は、DASMPLCHREQ構造体(アナログ出力チャンネル構造体)の ulChNoメンバに格納された番号となります。

DaInputDIアナログ出力ボードの汎用入力端子の状態を読み出します。

宣言宣言宣言宣言INT DaInputDI(HANDLE hDeviceHandle,PUINT puData);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。puData デジタル入力データを格納する変数へのポインタを指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

DaOutputDO汎用出力端子へデータを出力します。

宣言宣言宣言宣言INT DaOutputDO(HANDLE hDeviceHandle,UINT uData);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。uData 出力するデータを指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 56: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDa.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

51

DaAdjustVRアナログ出力ボードの電子ボリュームの制御を行います。

宣言宣言宣言宣言INT DaAdjustVR(HANDLE hDeviceHandle,ULONG ulAdjustCh, ULONG ulSelVolume,ULONG ulDirection,ULONG ulTap);

パラメータパラメータパラメータパラメータhDeviceHandle 有効なデバイスハンドルを指定します。ulAdjustCh 調整を行うチャンネルを指定します。ulSelVolume 調整を行う電子ボリュームを選択します。

定数 意味DA_ADJUST_BIOFFSET バイポーラオフセット調整DA_ADJUST_UNIOFFSET ユニポーラオフセット調整DA_ADJUST_BIGAIN バイポーラゲイン調整DA_ADJUST_UNIGAIN ユニポーラゲイン調整

ulDirection 調整方向を指定します。

定数 意味DA_ADJUST_UP アップDA_ADJUST_DOWN ダウンDA_ADJUST_STORE ストアするDA_ADJUST_STANDBY スタンバイDA_ADJUST_NOT_STORE ストアしない

ulTap アップ/ダウンを行う回数を指定します(1~100)。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説 電子ボリュームがサポートされていないボードもあります(PCI-3305,3325,3329,3338)。サポートされていないボードを指定した場合、DA_ERROR_NOT_SUPPORTEDが返ります。

CallBackProcアナログ出力更新停止時に呼び出されるコールバック関数です。

宣言宣言宣言宣言LPDACALLBACK CallBackProc(DWORD dwUser );

パラメータパラメータパラメータパラメータdwUser DaSetBoardConfig関数の dwUserメンバ変数で指定したデータが渡されます。

戻り値戻り値戻り値戻り値CallBackProc関数は、値を返しません。

解説解説解説解説 アナログ出力更新終了時に呼び出されるコールバック関数です。DaSetBoardConfig 関数の第 3 引数にCallBackProc関数を設定することにより、アナログ出力更新終了時に CallBackProc関数を呼び出すことができます。

Page 57: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDaDC.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

52

5.2. FbiDaDC.DLL 関数リファレンス関数リファレンス関数リファレンス関数リファレンス

DaDataConvアナログデータの形式を変換します。形式の変換とともにデータに対し平均処理やスムージング処理を行うことができます。また、ユーザー関数の指定により、任意のデータ変換式を設定することも可能です。

宣言宣言宣言宣言INT DaDataConv(UINT uSrcFormCode,PVOID pSrcData,UINT uSrcSmplDataNum,PDASMPLREQ pSrcSmplReq,UINTuDestFormCode,PVOID pDestData,PUINT puDestSmplDataNum,PDASMPLREQ pDestSmplReq,UINT uEffect,UINTuCount,CONVPROC pfnConv);

パラメータパラメータパラメータパラメータuSrcFormCode pSrcDataが指すデータ領域に格納されているデータ形式を指定します。

定数 意味DA_DATA_PHYSICAL 物理量(電圧[V]または電流[mA])DA_DATA_BIN8 8bitバイナリDA_DATA_BIN12 12bitバイナリDA_DATA_BIN16 16bitバイナリDA_DATA_BIN24 24bitバイナリ

pSrcData 変換元データへのポインタを指定します。pSrcSmplReq 変換元データのアナログ出力更新条件が格納されている構造体(DASMPLREQ構造

体)へのポインタを指定します。uSrcSmplDataNum 変換元データ件数を指定します。uDestFormCode pDestDataが指すデータ領域に格納されているデータ形式を指定します。

定数 意味DA_DATA_PHYSICAL 物理量(電圧[V]または電流[mA])DA_DATA_BIN8 8bitバイナリDA_DATA_BIN12 12bitバイナリDA_DATA_BIN16 16bitバイナリDA_DATA_BIN24 24bitバイナリ

pDestData 変換後データへのポインタを指定します。puDestSmplDataNum 変換後データ件数へのポインタを指定します。pDestSmplReq 変換後データのアナログ出力更新条件を格納するための構造体(DASMPLREQ構造

体)へのポインタを指定します。uEffect データ変換の際に平均,スムージング処理を行うかどうかを以下のデータ変換識別

子にて指定します。0を指定すると平均,スムージング処理は行われません。

定数 意味0 平均,スムージングを行いません。DA_CONV_SMOOTH データに対し、スムージングによる変換を行います。DA_CONV_AVERAGE1 データに対し、単純平均による変換を行います。DA_CONV_AVERAGE2 データに対し、移動平均による変換を行います。

uCount uEffect で平均、スムージングを行うように指定したとき、平均,スムージングのデータ件数を指定します。uEffectに 0が指定されている場合、uCountは無効です。

lpfnConv 一通りのデータ変換を終えた後に呼び出すユーザ・コールバック関数を指定します。ユーザ・コールバック関数によるデータ変換を行わない場合は、lpfnConv にNULLを指定してください。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 58: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

FbiDaDC.DLLリファレンスリファレンスリファレンスリファレンス

© 2000 Interface Corporation. All rights reserved.

53

解説解説解説解説 スムージングを行った場合、pSrcDataと pDestDataはデータ件数だけでなく、アナログ出力更新条件にも変化が起こります。例えば、1kHz で 1000 件のデータを持っていた場合、これを 10 件で平均した場合、アナログ出力データ更新レートは 100Hz、データは 100件になります。スムージングを行った場合はその逆のことが起こります。lpfnconvの詳細については fnConv関数を参照下さい。

DaWriteFile指定バッファのアナログ出力データをバイナリ形式または CSV形式のファイルに書き込みます。

宣言宣言宣言宣言INT DaWriteFile(LPCTSTR pszPathName,PVOID pSmplData,ULONG ulFormCode,ULONG ulSmplNum,ULONGulChCount);

パラメータパラメータパラメータパラメータpszPathName アナログ出力データを格納するデータファイルへのパスを指定します。pSmplData ファイルに書き込むアナログ出力データが格納されているバッファへのポイ

ンタを指定します。ulFormCode バッファ内のアナログ出力データの形式を指定します。

定数 意味DA_DATA_PHYSICAL 物理量(電圧[V]または電流[mA])DA_DATA_BIN8 8bitバイナリDA_DATA_BIN12 12bitバイナリDA_DATA_BIN16 16bitバイナリDA_DATA_BIN24 24bitバイナリ

ulSmplNum アナログ出力件数を指定します。ulChCount アナログ出力を行うチャンネル数を1~そのボードの提供する最大チャンネ

ル数の範囲で指定します。

戻り値戻り値戻り値戻り値関数が成功すると 0が返されます。関数が失敗すると 0以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説解説解説解説 バッファ内のデータ形式のままファイルに書き込みます。データがバイナリの場合はバイナリ形式のファイルに、データが物理量の場合は CSV 形式のファイルとなります。

fnConvDaDataConv関数で使用するコールバック関数です。

宣言宣言宣言宣言CONVPROC fnConv(INT nCh,DWORD dwCount,PVOID lpData);

パラメータパラメータパラメータパラメータnCh nChには、lpDataが指すデータのチャンネル番号が渡されます。dwCount lpDataが指すデータが、データの先頭から何番目にあたるかが渡されます。

lpData DaDataConv関数により変換されたデータが格納されているデータへのポインタが渡されます。

戻り値戻り値戻り値戻り値fnConv関数は、値を返しません。

解説解説解説解説 DaDataConv関数の lpfnConvに fnConv関数を設定することにより、データ変換時に fnConv関数を呼び出すことができます。fnConv関数は、データ 1点毎に呼び出されます。lpDataが指す位置のデータを変換後のデータ形式の型で読み出し、計算を行った後 lpDataが指す位置へ変換後データ形式の型と同じ型で書き込んでください。

Page 59: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

エラーコード一覧エラーコード一覧エラーコード一覧エラーコード一覧

© 2000 Interface Corporation. All rights reserved.

54

エラーコード一覧エラーコード一覧エラーコード一覧エラーコード一覧定数 値 内容DA_ERROR_SUCCESS 0 正常終了DA_ERROR_NOT_DEVICE 0xC0000001 指定されたデバイスを見つけることができませんDA_ERROR_NOT_OPEN 0xC0000002 システムがデバイスをオープンできませんDA_ERROR_INVALID_HANDLE 0xC0000003 デバイスハンドルが正しくありませんDA_ERROR_ALREADY_OPEN 0xC0000004 すでに OPENしているデバイスを OPENしようとしましたDA_ERROR_NOT_SUPPORTED 0xC0000009 サポートされていない機能ですDA_ERROR_NOW_SAMPLING 0xC0001001 サンプリングを実行中ですDA_ERROR_STOP_SAMPLING 0xC0001002 サンプリングは停止中ですDA_ERROR_START_SAMPLING 0xC0001003 サンプリングを実行できませんでしたDA_ERROR_SAMPLING_TIMEOUT 0xC0001004 サンプリング中においてタイムアウトが発生しましたDA_ERROR_INVALID_PARAMETER 0xC0001021 パラメータが不正ですDA_ERROR_ILLEGAL_PARAMETER 0xC0001022 サンプリング設定が正しくありませんDA_ERROR_NULL_POINTER 0xC0001023 NULLポインタを指定しましたDA_ERROR_SET_DATA 0xC0001024 サンプリングデータの設定ができませんでしたDA_ERROR_FILE_OPEN 0xC0001041 ファイルのオープンに失敗しましたDA_ERROR_FILE_CLOSE 0xC0001042 ファイルのクローズに失敗しましたDA_ERROR_FILE_READ 0xC0001043 ファイルのリードに失敗しましたDA_ERROR_FILE_WRITE 0xC0001044 ファイルのライトに失敗しましたDA_ERROR_INVALID_DATA_FORMAT 0xC0001061 データ形式が無効ですDA_ERROR_INVALID_AVERAGE_OR_SMOOTHING

0xC0001062 平均またはスムージングの指定が正しくありません

DA_ERROR_INVALID_SOURCE_DATA 0xC0001063 データ変換元として指定されたデータが正しくありませんDA_ERROR_NOT_ALLOCATE_MEMORY 0xC0001081 メモリが確保できませんDA_ERROR_NOT_LOAD_DLL 0xC0001082 DLLがロードできませんでしたDA_ERROR_CALL_DLL 0xC0001083 DLLの呼び出しに失敗しました

Page 60: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

構造体定義一覧構造体定義一覧構造体定義一覧構造体定義一覧

© 2000 Interface Corporation. All rights reserved.

55

5.3. Visual C++用構造体定義一覧用構造体定義一覧用構造体定義一覧用構造体定義一覧

DASMPLREQ構造体構造体構造体構造体

typedef struct { ULONG ulChCount; DASMPLCHREQ SmplChReq[256]; ULONG ulSamplingMode; FLOAT fSmplFreq; ULONG ulSmplRepeat; ULONG ulTrigMode; ULONG ulTrigPoint; ULONG ulTrigDelay; ULONG ulEClkEdge; ULONG ulTrigEdge; ULONG ulTrigDI;} DASMPLREQ, *PDASMPLREQ;

メンバメンバメンバメンバ 説明説明説明説明ulChCount アナログ出力を行うチャンネル数を 1からそのボードの提供する最大チャンネ

ル数の範囲で指定します。どのチャンネルを使用するかは DASMPLCHREQ構造体の ulChNoメンバで指定します。デフォルト:1

SmplChReq 各チャンネル毎のアナログ出力条件を設定します。(DASMPLCHREQ構造体)ulSamplingMode データ転送方式を指定します。使用するボードにより設定できるデータ転送方

式が異なります。

定数 意味DA_IO_SAMPLING I/O方式DA_MEM_SAMPLING メモリ方式

fSmplFreq アナログ出力更新レートを 0.01f以上で、Hzを単位として設定します。外部クロックを使用する場合は、0.0fを指定してください。デフォルト:使用するボードにより異なります。

ulSmplRepeat アナログ出力更新動作の繰り返し回数を 1~65535 の範囲で指定します。指定件数のアナログ出力更新を ulSmplRepeat で指定した回数だけ繰り返します。0を指定すると DaStopSampling 関数が実行されるまでアナログ出力更新動作を停止しません。デフォルト:0

ulTrigMode トリガを指定します。

定数 意味DA_FREERUN トリガなし(デフォルト)DA_EXTTRG 外部トリガDA_EXTTRG_DI DIマスク付き外部トリガ

ulTrigPoint トリガポイントを指定します。

定数 意味DA_TRIG_START スタートトリガ(デフォルト)DA_TRIG_STOP ストップトリガDA_TRIG_START_STOP スタートストップトリガ

ulTrigDelay トリガディレイをアナログ出力データ件数を単位として指定します。ulTrigMode でトリガが設定されている場合に有効です。ulTrigPoint で、DA_TRIG_START_STOPが設定されている場合には、トリガディレイを指定することはできません。ulTrigDelayに設定する値は次のようになります。・ポストトリガディレイ : 1 ~ 1G (1073741824)・ディレイを使用しない時: 0 デフォルト:0件

ulEClkEdge 外部クロック入力のエッジ極性を極性指定識別子のうちいずれか 1つを指定します。fSmplFreqに 0.0f(外部クロック)が指定されている場合に有効です。

Page 61: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

構造体定義一覧構造体定義一覧構造体定義一覧構造体定義一覧

© 2000 Interface Corporation. All rights reserved.

56

定数 意味DA_DOWN_EDGE 立ち下がりエッジでトリガする(デフォルト)DA_UP_EDGE 立ち上がりエッジでトリガする

ulTrigEdge 外部トリガの極性を外部トリガ極性指定識別子のうちいずれか 1つを指定します。ulTrigMode に外部トリガまたは DIマスク付き外部トリガが指定されている場合に有効です。

定数 意味DA_DOWN_EDGE 立ち下がりエッジでトリガする(デフォルト)DA_UP_EDGE 立ち上がりエッジでトリガする

ulTrigDI 汎用デジタル入力端子による外部トリガのマスクを指定します。ulTrigDIの 16bitのうちいずれか 1bitを 1にセットします。1にセットされている bitに対応した汎用デジタル入力端子の状態が Lowレベルになっている間、外部トリガ入力が有効となります。1をセットする bitの位置は、使用するボードが持っている汎用デジタル入力端子の数にご注意ください。ulTrigModeに DIマスク付き外部トリガが指定されている場合に有効です。ulTrigDIの形式は、デジタル入力データの形式と同じ形式です。デフォルト:0

DASMPLCHREQ構造体構造体構造体構造体

typedef struct { ULONG ulChNo; ULONG ulRange;} DASMPLCHREQ, *PDASMPLCHREQ;

メンバメンバメンバメンバ 説明説明説明説明ulChNo アナログ出力を行うチャンネルの番号を指定します。SmplChReq ulChNoで指定したチャンネルのレンジを指定します

定数 意味DA_0_1V 電圧 ユニポーラ 0~1VDA_0_2P5V 電圧 ユニポーラ 0~2.5VDA_0_5V 電圧 ユニポーラ 0~5VDA_0_10V 電圧 ユニポーラ 0~10VDA_1_5V 電圧 ユニポーラ 1~5VDA_0_20mA 電流 ユニポーラ 0~20mADA_4_20mA 電流 ユニポーラ 4~20mADA_1V 電圧 バイポーラ ±1VDA_2P5V 電圧 バイポーラ ±2.5VDA_5V 電圧 バイポーラ ±5VDA_10V 電圧 バイポーラ ±10V

Page 62: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

構造体定義一覧構造体定義一覧構造体定義一覧構造体定義一覧

© 2000 Interface Corporation. All rights reserved.

57

DABOARDSPEC構造体構造体構造体構造体

typedef struct { ULONG ulBoardType; ULONG ulBoardID; ULONG ulSamplingMode; ULONG ulChCount; ULONG ulResolution; ULONG ulRange; ULONG ulIsolation; ULONG ulDi; ULONG ulDo;} DABOARDSPEC, *PDABOARDSPEC;

メンバメンバメンバメンバ 説明説明説明説明ulBoardType ボードの型式番号を格納します。

例:PCI-3329であれば、3329が格納されます。ulBoardID ボードの識別番号(RSWの値)を格納します。ulSamplingMode ボードが対応しているデータ転送方式を表します。対応するビットが 1になり

ます。

bit0 I/O方式bit1 FIFO方式bit2 メモリ方式bit3~bit31 予約(すべて 0)

ulChCount ボードのチャンネル数を格納します。ulResolution ボードの分解能を格納します。ulRange ボードが対応しているレンジをビットアサインで格納します。

bit0 電圧 ユニポーラ 0~1Vbit1 電圧 ユニポーラ 0~2.5Vbit2 電圧 ユニポーラ 0~5Vbit3 電圧 ユニポーラ 0~10Vbit4 電圧 ユニポーラ 1~5Vbit5~bit11 予約(ずべて 0)bit12 電流 ユニポーラ 0~20mAbit13 電流 ユニポーラ 4~20mAbit14~bit15 予約(ずべて 0)bit16 電圧 バイポーラ ±1Vbit17 電圧 バイポーラ±2.5Vbit18 電圧 バイポーラ ±5Vbit19 電圧 バイポーラ ±10Vbit20~bit31 予約(すべて 0)

ulIsolation ボードの絶縁/非絶縁を格納します。

定数 意味DA_ISOLATION 絶縁ボードDA_NOT_ISOLATION 非絶縁ボード

ulDi ボードのデジタル入力点数を格納します。ulDo ボードのデジタル出力点数を格納します。

Page 63: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

構造体定義一覧構造体定義一覧構造体定義一覧構造体定義一覧

© 2000 Interface Corporation. All rights reserved.

58

DAMODEREQ構造体構造体構造体構造体((((PCI-3305、、、、PCI-3310、、、、PCI-3336、、、、PCI-3340のみ有効)のみ有効)のみ有効)のみ有効)

Typedef struct { DAMODECHREQ ModeChReq[2]; ULONG ulPulseMode; ULONG ulSyntheOut; ULONG ulInterval; FLOAT fIntervalCycle; ULONG ulCounterClear; ULONG ulDaLatch; ULONG ulSamplingClock; ULONG ulExControl; ULONG ulExClock;} DAMODEREQ, *PDAMODEREQ;

メンバメンバメンバメンバ 説明説明説明説明ModeChReq 各チャンネル毎のアナログ出力条件を設定します。(DAMODECHREQ構造体)

[0]がチャンネル1、[1]がチャンネル2に対応します。ulPulseMode 出力波形のモードを指定します。

定数 意味DA_MODE_CUT TBWG(Time Based Wave Generation)モード(デフォルト)DA_MODE_SYNTHE FBWG(Frequency Based Wave Generation)モード

ulSyntheOut FBWGモードにおける出力間隔を指定します。2のべき乗(1,2,4,8,,16,32,64,128,256,512,1024,2048,4096,8192,1638432768,65536,131072,262144,524288)で指定します。デフォルト:1

ulInterval 繰り返し時のインターバルを指定します。

定数 意味DA_REPEAT_NONINTERVAL インターバルなしでリピート(デフォルト)DA_REPEAT_INTERVAL インターバルありでリピート

fIntervalCycle 繰り返し時のインターバル周期を指定します。0.01f~2500000f(2.5MHz)の範囲で、Hzを単位として設定します。デフォルト:1.0f(1Hz)

ulCounterClear アナログ出力更新スタート時に、アナログ出力カウンタをクリアするかしないかを指定します。

定数 意味DA_COUNTER_CLEAR カウンタをクリアする(デフォルト)DA_COUNTER_NONCLEAR カウンタをクリアしない

ulDaLatch DAラッチ(アナログ出力更新終了時点の電圧をクリアするかしないか)を指定します。

定数 意味DA_LATCH_CLEAR DAラッチをクリアする(デフォルト)DA_LATCH_NONCLEAR DAラッチをクリアしない

ulSamplingClock 内部のアナログ出力更新レートを選択します。内部タイマ(8254相当)を使用すると、最大 2.5MHzまでのクロックでアナログ出力更新を行うことができます。また、5MHz固定の内部タイマを使用することもできます。この場合、クロックは変えられません。

定数 意味DA_CLOCK_TIMER タイマ(8254)2.5MHzを使用(デフォルト)DA_CLOCK_FIXED 5MHz固定タイマを使用

ulExControl 外部入出力制御(CN3の入出力仕様)を選択します。

Page 64: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

構造体定義一覧構造体定義一覧構造体定義一覧構造体定義一覧

© 2000 Interface Corporation. All rights reserved.

59

定数 意味DA_EXTRG_IN 外部トリガ入力(デフォルト)DA_EXTRG_OUT 外部トリガ出力

ulExClock 外部クロック入出力(CN4の入出力仕様)を選択します。

定数 意味DA_EXCLK_IN 外部クロック入力(デフォルト)DA_EXCLK_OUT 外部クロック出力

DAMODECHREQ構造体構造体構造体構造体((((PCI-3305、、、、PCI-3310、、、、PCI-3336、、、、PCI-3340のみ有効)のみ有効)のみ有効)のみ有効)

typedef struct { ULONG ulRange; FLOAT fVolt; ULONG ulFilter;} DAMODECHREQ, *PDAMODECHREQ;

メンバメンバメンバメンバ 説明説明説明説明ulRange レンジを選択します

定数 意味DA_RANGE_UNIPOLAR ユニポーラ(デフォルト)DA_RANGE_BIPOLAR バイポーラ

fVolt ulRangeで指定したレンジの出力電圧最高値を指定します。1.024~10.0[V]の範囲で 0.0025[V]おきに指定できます。※小数点以下4桁が有効デフォルト:5.0[V](ユニポーラ設定の場合には 0~5[V]、バイポーラ設定の場合には±5[V]となります)

ulFilter 出力波形のグリッジを減少するためのローパスフィルタを設定します。

定数 意味DA_FILTER_OFF フィルタ未使用(デフォルト)DA_FILTER_ON フィルタ使用

Page 65: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

定数一覧定数一覧定数一覧定数一覧

© 2000 Interface Corporation. All rights reserved.

60

5.4. Visual C++用定数一覧用定数一覧用定数一覧用定数一覧

//-----------------------------------------------------------------------------------------------//// 同期処理識別子////-----------------------------------------------------------------------------------------------#define FLAG_SYNC 1 // 同期でサンプリング入力#define FLAG_ASYNC 2 // 非同期でサンプリング入力

//-----------------------------------------------------------------------------------------------//// ファイル形式識別子////-----------------------------------------------------------------------------------------------#define FLAG_BIN 1 // バイナリ形式ファイル#define FLAG_CSV 2 // CSV形式ファイル

//-----------------------------------------------------------------------------------------------//// サンプリング状態識別子////-----------------------------------------------------------------------------------------------#define DA_STATUS_STOP_SAMPLING 1 // サンプリングは停止しています#define DA_STATUS_WAIT_TRIGGER 2 // サンプリングはトリガ待ち状態です#define DA_STATUS_NOW_SAMPLING 3 // サンプリング動作中です

//-----------------------------------------------------------------------------------------------//// イベント要因識別子////-----------------------------------------------------------------------------------------------#define DA_EVENT_STOP_TRIGGER 1 // トリガによるサンプリング停止#define DA_EVENT_STOP_FUNCTION 2 // 関数によるサンプリング停止#define DA_EVENT_STOP_SAMPLING 3 // サンプリング終了#define DA_EVENT_RESET_IN 4 // リセットインの発生#define DA_EVENT_CURRENT_OFF 5 // 電流断の検出

//-----------------------------------------------------------------------------------------------//// 調整VR識別子////-----------------------------------------------------------------------------------------------#define DA_ADJUST_BIOFFSET 1 // バイポーラオフセット調整#define DA_ADJUST_UNIOFFSET 2 // ユニポーラオフセット調整#define DA_ADJUST_BIGAIN 3 // バイポーラゲイン調整#define DA_ADJUST_UNIGAIN 4 // ユニポーラゲイン調整

//-----------------------------------------------------------------------------------------------//// 調整操作識別子////-----------------------------------------------------------------------------------------------#define DA_ADJUST_UP 1 // アップ#define DA_ADJUST_DOWN 2 // ダウン#define DA_ADJUST_STORE 3 // ストア#define DA_ADJUST_STANDBY 4 // スタンバイ#define DA_ADJUST_NOT_STORE 5 // ストアしない

Page 66: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

定数一覧定数一覧定数一覧定数一覧

© 2000 Interface Corporation. All rights reserved.

61

//-----------------------------------------------------------------------------------------------//// データ識別子////-----------------------------------------------------------------------------------------------#define DA_DATA_PHYSICAL 1 // 物理量(電圧[V]/電流[mA])#define DA_DATA_BIN8 2 // 8bitバイナリ#define DA_DATA_BIN12 3 // 12bitバイナリ#define DA_DATA_BIN16 4 // 16bitバイナリ#define DA_DATA_BIN24 5 // 24bitバイナリ

//-----------------------------------------------------------------------------------------------//// データ変換識別子////-----------------------------------------------------------------------------------------------#define DA_CONV_SMOOTH 1 // データに対し、スムージングによる変換を行います。#define DA_CONV_AVERAGE1 0x100 // データに対し、単純平均による変換を行います。#define DA_CONV_AVERAGE2 0x200 // データに対し、移動平均による変換を行います。

//-----------------------------------------------------------------------------------------------//// サンプリング指定識別子////-----------------------------------------------------------------------------------------------#define DA_IO_SAMPLING 1 // I/O方式#define DA_FIFO_SAMPLING 2 // FIFO方式#define DA_MEM_SAMPLING 4 // メモリ方式

//-----------------------------------------------------------------------------------------------//// トリガポイント指定識別子////-----------------------------------------------------------------------------------------------#define DA_TRIG_START 1 // スタートトリガ(デフォルト)#define DA_TRIG_STOP 2 // ストップトリガ#define DA_TRIG_START_STOP 3 // スタートストップトリガ

//-----------------------------------------------------------------------------------------------//// トリガ指定識別子////-----------------------------------------------------------------------------------------------#define DA_FREERUN 1 // トリガなし(デフォルト)#define DA_EXTTRG 2 // 外部トリガ#define DA_EXTTRG_DI 3 // 外部+DIトリガ

//-----------------------------------------------------------------------------------------------//// 極性指定識別子////-----------------------------------------------------------------------------------------------#define DA_DOWN_EDGE 1 // 立ち下がりエッジ(デフォルト)#define DA_UP_EDGE 2 // 立ち上がりエッジ

Page 67: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

定数一覧定数一覧定数一覧定数一覧

© 2000 Interface Corporation. All rights reserved.

62

//-----------------------------------------------------------------------------------------------//// レンジ指定識別子////-----------------------------------------------------------------------------------------------#define DA_0_1V 0x00000001 // 電圧 ユニポーラ 0~1V#define DA_0_2P5V 0x00000002 // 電圧 ユニポーラ 0~2.5V#define DA_0_5V 0x00000004 // 電圧 ユニポーラ 0~5V#define DA_0_10V 0x00000008 // 電圧 ユニポーラ 0~10V#define DA_1_5V 0x00000010 // 電圧 ユニポーラ 1~5V#define DA_0_20mA 0x00001000 // 電流 ユニポーラ 0~20mA#define DA_4_20mA 0x00002000 // 電流 ユニポーラ 4~20mA#define DA_1V 0x00010000 // 電圧 バイポーラ ±1V#define DA_2P5V 0x00020000 // 電圧 バイポーラ ±2.5V#define DA_5V 0x00040000 // 電圧 バイポーラ ±5V#define DA_10V 0x00080000 // 電圧 バイポーラ ±10V

//-----------------------------------------------------------------------------------------------//// 絶縁指定識別子////-----------------------------------------------------------------------------------------------#define DA_ISOLATION 1 // 絶縁ボード#define DA_NOT_ISOLATION 2 // 非絶縁ボード

//-----------------------------------------------------------------------------------------------//// レンジ識別子////-----------------------------------------------------------------------------------------------#define DA_RANGE_UNIPOLAR 1 // ユニポーラ#define DA_RANGE_BIPOLAR 2 // バイポーラ

//-----------------------------------------------------------------------------------------------//// モード識別子////-----------------------------------------------------------------------------------------------#define DA_MODE_CUT 1 // カットモード#define DA_MODE_SYNTHE 2 // デジタルシンセサイザモード

//-----------------------------------------------------------------------------------------------//// 繰り返し時のインターバル識別子////-----------------------------------------------------------------------------------------------#define DA_REPEAT_NONINTERVAL 1 // データを繰り返し出力#define DA_REPEAT_INTERVAL 2 // 一定周期にて繰り返し出力

//-----------------------------------------------------------------------------------------------//// カウンタクリア識別子////-----------------------------------------------------------------------------------------------#define DA_COUNTER_CLEAR 1 // サンプリングスタート時にカウンタをクリア#define DA_COUNTER_NONCLEAR 2 // サンプリングスタート時にカウンタをクリアしない

//-----------------------------------------------------------------------------------------------//// DAラッチ方法識別子////-----------------------------------------------------------------------------------------------#define DA_LATCH_CLEAR 1 // DAラッチをクリア#define DA_LATCH_NONCLEAR 2 // DAラッチをクリアしない

Page 68: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

定数一覧定数一覧定数一覧定数一覧

© 2000 Interface Corporation. All rights reserved.

63

//-----------------------------------------------------------------------------------------------//// 内部サンプリングクロック識別子////-----------------------------------------------------------------------------------------------#define DA_CLOCK_TIMER 1 // タイマ(8254)使用#define DA_CLOCK_FIXED 2 // 5MHz固定

//-----------------------------------------------------------------------------------------------//// 外部入出力制御識別子////-----------------------------------------------------------------------------------------------#define DA_EXTRG_IN 1 // 外部トリガ入力#define DA_EXTRG_OUT 2 // 外部トリガ出力

//-----------------------------------------------------------------------------------------------//// 外部クロック入出力識別子////-----------------------------------------------------------------------------------------------#define DA_EXCLK_IN 1 // 外部クロック入力#define DA_EXCLK_OUT 2 // 外部クロック出力

//-----------------------------------------------------------------------------------------------//// フィルタ設定識別子////-----------------------------------------------------------------------------------------------#define DA_FILTER_OFF 1 // フィルタ設定なし#define DA_FILTER_ON 2 // フィルタ設定あり

//-----------------------------------------------------------------------------------------------//// 複数枚同期アナログ出力設定識別子////-----------------------------------------------------------------------------------------------#define DA_MASTER_MODE 1 // マスタモード#define DA_SLAVE_MODE 2 // スレーブモード

Page 69: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

参考文献参考文献参考文献参考文献

© 2000 Interface Corporation. All rights reserved.

64

参考文献参考文献参考文献参考文献

・ 米山 寿一 著:「A/Dコンバータ入門」(オーム社:1993年)

・ 浜田 望 著:「よくわかる信号処理」(オーム社:1995年)

Page 70: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

技術資料技術資料技術資料技術資料

© 2000 Interface Corporation. All rights reserved.

65

技術資料技術資料技術資料技術資料

弊社では下記の技術資料技術資料技術資料技術資料を提供しております。

詳しくは、弊社Web site(www.interface.co.jp)、または弊社窓口までお問い合わせ下さい。

カタログカタログカタログカタログPRM-0001 PCI バスインタフェースカタログPRM-0004 CompactPCI ガイドブックPRM-0005 CompactPCI データブック ハードウェア編PRM-0006 CompactPCI データブック ソフトウェア編

チュートリアルチュートリアルチュートリアルチュートリアルTUT-0014 Microsoft Visual Studio .NET 移行ガイドTUT-0006 C・ISA バス製品から PCI バス製品への移行マニュアル【MS-DOS 編】TUT-0007 拡張ユニットチュートリアル(入門編)TUT-0008 拡張ユニットチュートリアル(問題解決編)TUT-0009 システムユニットチュートリアルTUT-0025 Visual Basic による DIO 入門書TUT-0016 Visual Basic による PPI 入門書TUT-0021 Visual Basic による AD 入門書TUT-0023 Visual Basic による DA 入門書TUT-0029 Visual Basic による HDLC 入門書TUT-0027 Visual Basic による GP-IB 入門書TUT-0033 Visual Basic による メモリンク 入門書TUT-0031 Visual Basic による エンコーダカウンタ 入門書TUT-0019 Visual Basic による モータコントローラ 入門書TUT-0024 Visual C++ による DIO 入門書TUT-0034 Visual C++ による PPI 入門書TUT-0020 Visual C++ による AD 入門書TUT-0022 Visual C++ による DA 入門書TUT-0028 Visual C++ による HDLC 入門書TUT-0026 Visual C++ による GP-IB 入門書TUT-0032 Visual C++ による メモリンク 入門書TUT-0030 Visual C++ による エンコーダカウンタ 入門書TUT-0018 Visual C++ による モータコントローラ 入門書TUT-0015 モーションコントロール チュートリアルTUT-0053 モーションコントロール チュートリアル(PCI/CompactPCI)TUT-0001 弊社バスブリッジを使用した PCI バスによる C バスボード制御 手順書TUT-0002 弊社バスブリッジを使用した PCI バスによる ISA バスボード制御 手順書TUT-0003 Linux による PCI ボード・CompactPCI ボード制御 入門書TUT-0017 システム事例 メモリンクを使用した負荷分散システム チュートリアルTUT-0036 RTLinux による PCI ボード・CompactPCI ボード制御(導入編)TUT-0037 RTLinux による HDLC ボード制御プログラミング チュートリアルTUT-0038 RTLinux による DIO ボード制御プログラミング チュートリアルTUT-0039 RTLinux による AD ボード制御プログラミング チュートリアルTUT-0043 RTLinux による調歩同期シリアル通信ボード制御プログラミング チュートリアルTUT-0040 RTLinux による DA ボード制御プログラミング チュートリアルTUT-0041 RTLinux による GP-IB ボード制御プログラミング チュートリアルTUT-0044 RTLinux によるメモリ共有インタフェースボード制御プログラミング チュートリアルTUT-0048 RTLinux によるカウンタボード制御プログラミング チュートリアルTUT-0050 RTLinux によるモーションコントローラボード制御プログラミング チュートリアル

技術情報資料技術情報資料技術情報資料技術情報資料(セミナ資料)(セミナ資料)(セミナ資料)(セミナ資料)弊社 PCI ボードを MS-DOS で使うノウハウMS-DOS による PCI バス割り込み処理ActiveX によるシステム組み込み技術Linux から PCI/CompactPCI ボードを制御する方法Compact PCI への置き換え+システム構築/移行ガイド

Page 71: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

© 2000 Interface Corporation. All rights reserved.

本ドキュメントの一部または全てを弊社の許可なく、

複写、複製、転載、電子化することを禁じます。

本ドキュメントの一部または全てを弊社の許可なく、

複写、複製、転載、電子化することを禁じます。

チュートリアル Visual C++による DA 入門書

2000年 11月 Ver. 1.0 発行発行所

〒732-0828広島県広島市南区京橋町 10-21TEL 082-262-7777FAX 082-262-5066

ISD-7015-10定価 ¥2,000

本書の内容の一部または全部を、無断で転載することを禁止します。

本書の内容は、将来予告なく変更することがありますので、あらかじめご了承ください。

Dream & Freedom株  式  会  社 インタフェースインタフェースインタフェースインタフェース

Page 72: TUT-0022 Ver 1. 0改定履歴 © 2000 Interface Corporation. All rights reserved. 改訂履歴 Ver 年 月 改 訂 内 容 1.0 2000 年11 月初版 本ドキュメントは、製品

www.interface.co.jp

チュートリアルVisual C++ による DA[Digital To Analog]入門書

TUT-0022 Ver1.0