Users Manual WDFファイル アクセスライブラリ ユーザーズマ … ·...
Transcript of Users Manual WDFファイル アクセスライブラリ ユーザーズマ … ·...
User'sManual WDF ファイル
アクセスライブラリユーザーズマニュアル
IM B8074XP-01JA5 版
iIM B8074XP-01JA
はじめにこのユーザーズマニュアルは、WDF ファイルアクセスライブラリの取り扱い上の注意 /機能 /API 仕様などについて説明したものです。ご使用中にこのマニュアルをよくお読みいただき、正しくお使いください。お読みになったあとは、ご使用時にすぐにご覧になれるところに、大切に保存してください。ご使用中に操作がわからなくなったときなどにきっとお役にたちます。なお、測定器の取り扱い上の注意 / 機能 / 操作方法、Windows の取り扱い / 操作方法などについては、それぞれのマニュアルをご覧ください。
ご注意・ 本書の内容は、性能 /機能の向上などにより、将来予告なしに変更することがあります。また、実際の画面表示内容が、本書に記載の画面表示内容と多少異なることがあります。
・ 本書の内容に関しては万全を期しておりますが、万一ご不審の点や誤りなどお気づきのことがありましたら、お手数ですが、当社支社 /支店 / 営業所までご連絡ください。
商標・ Microsoft、Windows は、米国MicrosoftCorporation の、米国およびその他の国における登録商標または商標です。
・ 本文中の各社の登録商業または商標には、TM、®マークは表示していません。・ その他、本文中に使われている会社名 /商品名は、各社の登録商標または商標です。
履歴・ 2010 年 10 月 初版発行・ 2013 年 1 月 2 版発行・ 2014 年 2 月 3 版発行・ 2017 年 10 月 4 版発行・ 2018 年 12 月 5 版発行
5th Edition: December 2018 (YMI)All Rights Reserved, Copyright © 2010 Yokogawa Test & Measurement Corporation
ii IM B8074XP-01JA
目次
第 1 章 ソフトウエア概要1.1 ソフトウエア概要........................................................................................................................................... 1-1
第 2 章 ご使用にあたっての注意2.1 ご使用にあたっての注意............................................................................................................................. 2-1
第 3 章 WDF ファイルアクセス API 概要3.1 WDF ファイルアクセス API 概要.............................................................................................................. 3-13.2 API 機能概要..................................................................................................................................................... 3-23.3 API 利用の流れ................................................................................................................................................. 3-43.4 API 用語説明..................................................................................................................................................... 3-53.5 表示画面と API の対応.................................................................................................................................. 3-7
第 4 章 API 機能仕様4.1 データ構造定義................................................................................................................................................ 4-14.2 固定値定義......................................................................................................................................................... 4-44.3 API 詳細仕様..................................................................................................................................................... 4-54.4 DLL リンク方式..............................................................................................................................................4-23
1-1IM B8074XP-01JA
1.1 ソフトウエア概要
概要本ソフトウエアは、当社の測定器で保存された波形データファイル (WDF) から、測定時などのデータを取得するための API(Application Program Interface) を提供するものです。
機能本ソフトウエアを利用して、以下の機能を実現することができます。詳細機能につきましては、4.3 API 詳細仕様をご参考ください。・ 測定日時の取得・ 測定チャネル情報の取得・ 測定点数の取得・ 時間値、測定値の取得・ 時間軸、測定値軸方向の単位の取得・ 時間軸、測定値軸方向の解像度の取得
ソフトウエア構成本ソフトウエアは以下のパッケージ構成からなります。・ WDF ファイルアクセスライブラリユーザーズマニュアル ( 本書 )・ API 利用関連ファイル ( 下表 )ファイル名 内容****.dll ファイルアクセスライブラリ本体****.lib ファイルアクセスインポートライブラリWDFAPIPublic.h 関数プロトタイプ宣言のヘッダファイルWDFAPIWrapper.cpp DLL 明示的なリンク用のサンプルコード
システム条件・ パーソナルコンピュータ本体 以下の条件を有したパーソナルコンピュータの動作環境が必要です。 OS( オペレーティングシステム ): 日本語、または英語MicrosoftWindows7(32bit、64bit)、
Windows8(32bit、64bit)、またはWindows10(32bit、64bit) CPU:Core2Duo2GHz 以上
メモリ : 2GB 以上・ 開発環境 VisualStudio 2008 SP1 以降
第 1 章 ソフトウエア概要
2-1IM B8074XP-01JA
2.1 ご使用にあたっての注意
免責当社は,お客様が本ソフトウエアをダウンロードしインストールされた時点で、下記の免責事項を許諾いただいたものとみなします。
・ 本ソフトウエアをダウンロードしインストールすることによって生じるいかなる問題についても、当社はその責務を負いません
・ 本ソフトウエアの使用に関して,直接または間接に生じるいっさいの損害について,当社はその責務を負いません。
・ 本ソフトウエアは無償で提供されますが、本製品になんの欠陥もないという無制限の保証をするものではありません。また、本ソフトウエアに関する不具合修正や質問についてのお問い合わせをお受けできない場合があります。
・ 本ソフトウエアに関する財産権、所有権、知的財産権、その他一切の権限は、当社に帰属します。
使用上の注意・ 本ソフトウエアは、WDF 形式で保存された波形データファイル専用のライブラリで
す。他の製品で保存されたファイルには使用できません。・ 本ソフトウエアのバージョンより新しいバージョンの WDF 形式で保存されたファイ
ルは、読み込むことはできません。・ 本ソフトウエアを使用するには、VisualStudio 2008 SP1 が必要です。ご使用の PC に
インストールされていない場合は、VisualStudio 2008 SP1 再領布可能パッケージをインストールしてください。
第 2 章 ご使用にあたっての注意
3-1IM B8074XP-01JA
3.1 WDF ファイルアクセス API 概要
API は、ダイナミックリンクライブラリ (DLL:Dynamic Link Library) として提供されます。DLL は、ユーザ作成のアプリケーションと一緒にリンクすることで、API を利用できます。下図に示しますように、PC のストレージから参照可能な波形ファイル (WDF) を対象に、測定条件や波形生データ取得等の記録波形データに関する機能を開発アプリケーションに提供します。
WDFファイルアクセスライブラリ
測定器
User Application
Waveform File(WDF)
PC(Windows)
CallWaveform Data
Transfer
File Access
第 3 章 WDF ファイルアクセス API 概要
3-2 IM B8074XP-01JA
3.2 API 機能概要API の機能概要について説明します。
ハンドル生成・破棄ハンドル生成・破棄に関する API を以下に示しますAPI 名 概要 ページWdfOpenFileEx WDF ファイルアクセス用のハンドル生成 4-5WdfOpenFile WDF ファイルアクセス用のハンドル生成 4-6WdfCloseFile WDF ファイルアクセス用のハンドル破棄 4-7
測定トレース情報取得測定トレース ( チャネル ) の情報に関する API を以下に示します。API 名 概要 ページWdfGetTraceNumber 波形トレースの総数取得 4-7WdfGetTraceName 波形トレース名取得 4-8WdfGetLogicBitName 波形トレースの LogicBit 名取得 4-8WdfGetTraceBlockNumber 波形トレースのヒストリブロック総数取得 4-9
波形付随情報取得波形データ付随情報に関する API を以下に示します。API 名 概要 ページWdfGetVDataType 波形ヒストリブロックのデータ型取得 4-9WdfGetVOffset 波形ヒストリブロックの垂直方向オフセット取得 4-10WdfGetVResolution 波形ヒストリブロックの垂直方向解像度取得 4-11WdfIsEnabledVIllegalData 非表示コードの有効/無効判定 4-11WdfGetVIllegalData 波形ヒストリブロックの無効値取得 4-12WdfGetVUnit 波形ヒストリブロックの垂直方向単位取得 4-12WdfGetHOffset 波形ヒストリブロックの水平方向データ開始オフセット取得 4-13WdfGetHResolution 波形ヒストリブロックの水平方向解像度取得 4-13WdfGetHUnit 波形ヒストリブロックの水平方向単位取得 4-14WdfGetDate 波形ヒストリブロックの測定日付取得 4-14WdfGetTime 波形ヒストリブロックの測定時刻取得 4-15
波形データ取得波形データ取得に関する API を以下に示します。API 名 概要 ページWdfGetBlockSize 波形ヒストリブロックのデータブロックサイズ取得 4-15WdfGetBlockSize64 波形ヒストリブロックのデータブロックサイズ取得 4-16WdfGetScaleWave 波形生データの取得 4-16WdfGetScaleWave64 波形生データの取得 4-20
3-3IM B8074XP-01JA
DLL の種類と API 対応DLL の種類よって、対応する API が異なります。
API 名 DLL の種類DL850E.dll*1 DL350.dll*2 XVWDF.dll*3 DLM3000.dll*4
WdfOpenFileEx ○ ○ ○ ×WdfOpenFile × × × ○WdfCloseFile ○ ○ ○ ○WdfGetTraceNumber ○ ○ ○ ○WdfGetTraceName ○ ○ ○ ○WdfGetLogicBitName ○ ○ ○ ○WdfGetTraceBlockNumber ○ ○ ○ ○WdfGetVDataType ○ ○ ○ ○WdfGetVOffset ○ ○ ○ ○WdfGetVResolution ○ ○ ○ ○WdfIsEnabledVIllegalData ○ ○ × ×WdfGetVIllegalData ○ ○ ○ ○WdfGetVUnit ○ ○ ○ ○WdfGetHOffset ○ ○ ○ ○WdfGetHResolution ○ ○ ○ ○WdfGetHUnit ○ ○ ○ ○WdfGetDate ○ ○ ○ ○WdfGetTime ○ ○ ○ ○WdfGetBlockSize × × × ○WdfGetBlockSize64 ○ ○ ○ ×WdfGetScaleWave × × × ○WdfGetScaleWave64 ○ ○ ○ ×
○:対応、×:非対応*1 DL850E シリーズで保存した波形データが対象*2 DL350 で保存した波形データが対象*3 当社のソフトウェア Xviewer で保存した波形データが対象*4 DLM3000 シリーズで保存した波形データが対象
3.2 API 機能概要
3-4 IM B8074XP-01JA
3.3 API 利用の流れ各 API は、ハンドルベースで利用します。最初に、WDF ファイル名をフルパスで指定し、ハンドルを生成します。その後、そのハンドルを API の引数に渡すことで、指定 WDF ファイルへアクセスを行ないます。以下に、API の利用の流れとコード記述例を下記に示します。
1. API ハンドルの生成 利用コードで、API のヘッダファイル (WDFAPIPublic.h) をインクルードしてくだ
さい。 API WdfOpenFileEx により、指定 WDF ファイルのハンドルを取得します。
Ex.
#include "WDFAPIPublic.h"
・・・ WDFHandle handle;
WdfOpenFileEx(&handle, “C:\\Hoge\\0001.WDF”, …);
2. API を利用して WDF ファイルから波形情報の取得 API の第一引数にハンドルを指定し、各 API を利用します。
Ex.
WdfGetTraceNumber(handle, &traceNumber);
WdfGetTraceName(handle, traceNumber - 1, traceName);
WdfGetTraceBlockNumber(handle, traceNumber - 1, &blockNumber);
WdfGetTime(handle, traceNumber - 1, blockNumber -1, time);
・・・
3. API ハンドルの破棄 API WdfCloseFile により、生成したハンドルを破棄します。
Ex. WdfCloseFile(&handle);
3-5IM B8074XP-01JA
3.4 API 用語説明API で使用している用語について説明します。
トレース番号チャネル ( サブチャネル ) は、API では 0 から始まるトレース番号に相当します。例えば、CH1、CH3_1、CH3_2、CH5 を保存対象とした場合、チャネルとトレース番号の関係は、以下のようになります。チャネル( サブチャネル )
トレース番号
CH1 0CH3_1 1CH3_2 2CH5 3
API で、波形トレースの総数を取得 (API WdfGetTraceNumber) することで、WDF ファイルに含まれる各チャネル ( サブチャネル ) 数を取得できます。上記の例では、波形トレース番号の総数は、4 つになるので、有効なトレース番号は、0 ~ 3(= 4 - 1) の範囲となります。どのトレースがどの表示チャネルに対応するかは、API で波形チャネルのラベル名を取得 (API WdfGetTraceName) することで、対応を取ることができます。
ヒストリブロック番号波形保存時に” History ALL” を選択した場合、過去の記録波形 ( ヒストリ波形 ) を含めて保存します。このとき、1 つのヒストリ波形はレコード番号で指定します。API では、レコード番号がヒストリブロック番号に相当します。レコード番号は、#0000 が最新の波形を示し、値が減る ( マイナス方向 ) ほど古いヒストリ波形になります。逆に、API のヒストリブロック番号は、一番古い波形は 0 から始まり、値が増える ( プラス方向 ) ほど最新のヒストリ波形になります。例えば、ヒストリ波形が 4 つ存在したとき、レコード番号とヒストリブロック番号の対応を以下に示します。ヒストリ波形 レコード番号 ヒストリブロック番号最新↑↓最古
#0000 3 #-0001 2 #-0002 1 #-0003 0
API でヒストリブロックの総数を取得 (API WdfGetTraceBlockNumber) することで、ヒストリ波形の総数を取得できます。上記の例では、ヒストリブロックの総数は 4 になるので、有効なヒストリブロック番号は、0 ~ 3(= 4 - 1) の範囲となります。
波形保存時に” History One” を選択したときは、ヒストリ波形は常に 1 つなので、ヒストリブロック番号は 0 固定となります。
3-6 IM B8074XP-01JA
波形データブロック各トレースのヒストリブロック毎に、波形データ ( 波形データブロック ) を保持しています。波形データブロックは、API(WdfGetScaleWave、WdfGetScaleWave64)により取得できます。また、波形データブロックのサイズ ( 波形データ点数 ) は、API(WdfGetBlockSize、WdfGetBlockSize64) により取得できます。
装着モジュールやその測定設定により、波形データブロックのデータ型が異なります。各トレースの波形データ型は、API(WdfGetVDataType) により取得できます。
取得した波形データブロックをグラフ表示用のデータに変換するには、データ型により扱いが異なります。波形データブロックの構成やデータ変換手順については、API(WdfGetScaleWave、WdfGetScaleWave64) の詳細説明を参考にしてください。
3.4 API 用語説明
3-7IM B8074XP-01JA
3.5 表示画面と API の対応DL850 E シリーズの表示画面を例にして、波形表示と対応する API を示します。
Main Window代表的な電圧モジュールで測定したときの表示画面と API の対応を以下に示します。
トレース名 : WdfGetTraceName 測定日付 : WdfGetDate測定時刻 : WdfGetTime
垂直軸スケール値水平軸スケール値
記録波形点数 : WdfGetBlockSize64波形生データ取得 :WdfGetScaleWave64
左端縦軸周辺を拡大したときの表示画面と API の対応を以下に示します。
垂直方向オフセット : WdfGetVOffset水平方向データ解像度 : WdfGetHResolution
水平方向オフセット : WdfGetHOffset
垂直方向単位 : WdfGetVUnit水平方向単位 : WdfGetHUnit
3-8 IM B8074XP-01JA
ロジックモジュールロジックモジュールで測定したときの表示画面と API の対応を以下に示します。
Logic Bit 名 : WdfGetLogicBitName
3.5 表示画面と API の対応
4-1IM B8074XP-01JA
4.1 データ構造定義API のデータ構造定義について説明します。
WDFResult概要 : API エラー型
書式 : typedef INT WDFResult;
詳細 : API の実行結果を格納する型。実行結果の戻り値が WDF_OK の場合は "0"、その他の戻り値の場合は "0" 以外を返す。
WDFResultKind概要 : API エラー詳細情報
書式 : typedef enum{
WDF_OK,
WDF_ERR,
WDF_ERR_Error,
WDF_ERR_InvalidHandle,
WDF_ERR_InvalidParameter,
WDF_ERR_Open,
WDF_ERR_Alloc,
WDF_ERR_FileAccess,
WDF_ERR_NotDualCap,
WDF_ERR_UnknownVersion,
WDF_ERR_UnknownFormat,
WDF_ERR_ParamBoundary,
WDF_ERR_DataValue,
WDF_ERR_CantReadDataType,
}WDFResultKind;
詳細 : WDFResult の詳細情報。各内容については、API の詳細仕様を参照のこと。
WDFHandle概要 : API ハンドル型
書式 : typedef HANDLE WDFHandle;
詳細 : API で利用するハンドル。
WDFTrace概要 : 波形トレース番号型
書式 : typedef UINT WDFTrace;
詳細 : チャネル番号 ( サブチャネルがある場合には、サブチャネル ) に相当。
WDFHistoryBlock概要 : 波形トレースのヒストリブロック番号型
書式 : typedef UINT WDFHistoryBlock;
詳細 : ヒストリレコード番号に相当
第 4 章 API 機能仕様
4-2 IM B8074XP-01JA
WDFDataParameter概要 : 波形データの各種パラメータ型
書式 : typedef double WDFDataParameter;
詳細 : 波形データのパラメータ値を表わす汎用数値 ( 浮動小数点 ) 型。
WDFDataBlock概要 : 波形データ点数型
書式 : typedef INT WDFDataBlock;
詳細 : 波形データブロックのデータサイズ ( 波形記録点数 )。
WDFDataBlock64概要 : 波形データ点数型
書式 : typedef INT64 WDFDataBlock;
詳細 : 波形データブロックのデータサイズ ( 波形記録点数 )。
WDFBitIndex概要 : Logic Bit 位置型
書式 : typedef INT WDFBitIndex;
詳細 : Logic データのビット位置。
WDFOpenMode概要 : WdfOpenFileEx 用 Mode 型
書式 : typedef UINT32 WDFOpenMode;
詳細 : WdfOpenFileEx() の引数 (Mode) に指定指定値は、WDFOpenModeKind で定義されている。
WDFOpenModeKind概要 : WDFOpenMode 型の値定義
書式 : typedef enum{
wdfOpenModeNormal,
wdfOpenModeDualCapture,
}WDFOpenModeKind;
WDFVDataType概要 : 波形データブロック型
書式 : typedef enum{
wdfDataTypeUINT16
wdfDataTypeSINT16,
wdfDataTypeLOGIC16,
wdfDataTypeUINT32,
wdfDataTypeSINT32
}WDFVDataType;
詳細 : 波形データブロックの数値型WdfGetVDataType() により、波形トレースのデータ型を取得できる。
4.1 データ構造定義
4-3IM B8074XP-01JA
WDFAccessParam概要 : 取得波形データパラメータ型
書式 : typedef struct{
UINT version;
WDFTrace trace;
WDFHistoryBlock block;
WDFDataBlock start;
WDFDataBlock count;
INT ppRate;
INT waveType;
INT dataType;
WDFDataBlock cntOut;
void* dst;
INT box;
INT compMode;
INT rsv1;
INT rsv2;
INT rsv3;
INT rsv4;
}WDFAccessParam;
詳細 : 取得波形データのパラメータ型。WdfGetScaleWave() の引数に指定する。
WDFAccessParam64概要 : 取得波形データパラメータ型
書式 : typedef struct{
UINT version;
WDFTrace trace;
WDFHistoryBlock block;
WDFDataBlock64 start;
WDFDataBlock64 count;
INT64 ppRate;
INT waveType;
INT dataType;
WDFDataBlock64 cntOut;
void* dst;
INT box;
INT compMode;
INT rsv1;
INT rsv2;
INT rsv3;
INT rsv4;
}WDFAccessParam64;
詳細 : 取得波形データのパラメータ型。WdfGetScaleWave64() の引数に指定する。
WDFBool概要 : 論理型
書式 : typedef BOOL WDFBool;
詳細 : 真偽値、TRUE( 真 ) または FALSE( 偽 ) を保持する。
4.1 データ構造定義
4-4 IM B8074XP-01JA
4.2 固定値定義固定値の定義について説明します。
文字列値のバッファサイズ概要 : 文字列値のバッファサイズ
書式 : enum{
MAX_WDF_TRACE_NAME = 16 + 1,
MAX_WDF_BIT_NAME = 16 + 1,
MAX_WDF_V_UNIT = 16 + 1,
MAX_WDF_H_UNIT = 16 + 1,
MAX_WDF_DATE = 32 + 1,
MAX_WDF_TIME = 32 + 1,
};
詳細 : API 引数に渡す文字列長のバッファサイズを定義。利用方法については、API のサンプルコードを参照。
4-5IM B8074XP-01JA
4.3 API 詳細仕様API の詳細仕様について説明します。
WdfOpenFileEx概要 : WDF ファイルアクセス用のハンドルを生成
書式 : WDFResult WdfOpenFileEx(WDFHandle* handle, const char* fileName,
WDFOpenMode mode);
引数 : [OUT] handle API ハンドルの格納先[IN] filename WDF ファイル名 ( フルパス指定 )[IN] mode Open Mode
戻り値 : WDF_OK 成功WDF_ERR_Open ファイル Open エラー ( 存在しないファイル名 )WDF_ERR_Alloc メモリ確保エラー ( メモリ不足 )WDF_ERR_FileAccess ファイルアクセスエラー ( ストレージ異常 )WDF_ERR_UnknownFormat 不正な WDF( ファイル欠損、スコープコーダ以外の機種
で記録された WDF)WDF_ERR_DataValue 不正な WDF( ファイル欠損 )WDF_ERR_CantReadDataType その他のエラー
詳細 : ファイル名 (filename) に指定した WDF ファイルの API ハンドルを生成し、生成したハンドル (handle) を格納する。
引数” mode” には、” wdfOpenModeNormal” を指定する。取得した API ハンドルを使って、各 API の呼び出しを行い、WDF ファイルへのアクセスを行なう。正しい WDF ファイルを指定した場合、API は WDF_OK(= 0) を返す。もし、不正な WDFファイルを指定した場合は、WDF_OK 以外の値を返す。
注意 : 戻り値が WDF_OK 以外の場合のハンドル値は無効のため、利用することはできない。API でハンドルを生成したら、必ず最後に、WdfCloseFile によりハンドルを破棄すること。HD リアルタイム記録時の分割保存や、2G byte を超えるような分割保存された WDF ファイルを開くときは、先頭ファイル (ex. HOGE_000.WDF) を指定する。それ以外の分割ファイル名の指定は保証しない。
使用例 : WDFHandle wdfHandle;
const char* wdfFilePath = “C:¥¥HOGE¥¥0001.WDF”;
WDFResult result = WdfOpenFileEx(&wdfHandle, wdfFilePath,
wdfOpenModeNormal);
if(result != 0) {
printf("Error: WdfOpenFileEx()¥r¥n”);
return;
}
・・・WdfCloseFile(&wdfHandle);
4-6 IM B8074XP-01JA
WdfOpenFile 概要 : WDF ファイルアクセス用のハンドルを生成
書式 : WDFResult WdfOpenFile(WDFHandle* handle, const char* fileName);
引数 : [OUT] handle API ハンドルの格納先 [IN] filename WDF ファイル名 ( フルパス指定 )
戻り値 : WDF_OK 成功 WDF_ERR_Open ファイル Open エラー ( 存在しないファイル名 ) WDF_ERR_Alloc メモリ確保エラー ( メモリ不足 ) WDF_ERR_FileAccess ファイルアクセスエラー ( ストレージ異常 ) WDF_ERR_UnknownFormat 不正な WDF( ファイル欠損、スコープコーダ以外の機種
で記録された WDF) WDF_ERR_DataValue 不正な WDF( ファイル欠損 ) WDF_ERR_CantReadDataType その他のエラー
詳細 : ファイル名 (filename) に指定した WDF ファイルの API ハンドルを生成し、生成したハンドル (handle) を格納する。
取得した API ハンドルを使って、各 API の呼び出しを行い、WDF ファイルへのアクセスを行なう。
正しい WDF ファイルを指定した場合、API は WDF_OK(= 0) を返す。もし、不正な WDFファイルを指定した場合は、WDF_OK 以外の値を返す。
注意 : 戻り値が WDF_OK 以外の場合のハンドル値は無効のため、利用することはできない。 API でハンドルを生成したら、必ず最後に、WdfCloseFile によりハンドルを破棄すること。
使用例 : WDFHandle wdfHandle;
const char* wdfFilePath = “C:¥¥HOGE¥¥0001.WDF”;
WDFResult result = WdfOpenFile(&wdfHandle, wdfFilePath);
if(result != 0) {
printf("Error: WdfOpenFile()¥r¥n”);
return;
}
・・・ WdfCloseFile(&wdfHandle);
4.3 API 詳細仕様
4-7IM B8074XP-01JA
WdfCloseFile概要 : WDF ファイルを閉じる
書式 : WDFResult WdfCloseFile(WDFHandle* handle);
引数 : [IN] handle API ハンドル
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドル
詳細 : WdfOpenFileEx() または WdfOpenFile() で生成したハンドルを破棄する。
注意 : 破棄したハンドルで以後 API をアクセスすることはできない。破棄したハンドルで APIを呼び出したときの動作は保証しない。
使用例 : WdfOpenFileEx()、WdfOpenFile() 参照。
WdfGetTraceNumber概要 : 波形トレースの総数取得
書式 : WDFResult WdfGetTraceNumber(WDFHandle handle, WDFTrace* traceNumber);
引数 : [IN] handle API ハンドル[OUT] traceNumber 波形トレースの総数
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形トレースの総数を取得する。各 API への波形トレースの指定は、"0" 始まりで、" 波形トレースの総数 (traceNumber) - 1" が上限となる。
注意 : 各 API に不正なトレース番号 (ex. traceNumber より大きい値 ) を指定した場合には、APIは” WDF_ERR_Error” を返す。
使用例 : WDFTrace traceNumber;
WdfGetTraceNumber(wdfHandle, &traceNumber);
4.3 API 詳細仕様
4-8 IM B8074XP-01JA
WdfGetTraceName概要 : 波形トレース名取得
書式 : WDFResult WdfGetTraceName(WDFHandle handle, WDFTrace trace, char*
traceName);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[OUT] traceName 波形トレース名
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形トレース番号の名称を取得する。取得名称は、測定器でのラベル名に相当する。
使用例 : // Show All Trace Name
WDFTrace traceNumber;
WdfGetTraceNumber(wdfHandle, &traceNumber);
for(WDFTrace trace = 0; trace < traceNumber; trace++){
char traceName[MAX_WDF_TRACE_NAME];
WdfGetTraceName(wdfHandle, trace, traceName);
printf("Trace:%d Name:%s¥r¥n”, trace, traceName);
}
WdfGetLogicBitName概要 : 波形トレースの Logic Bit 名取得
書式 : WDFResult WdfGetLogicBitName(WDFHandle handle, WDFTrace trace,
WDFBitIndex index, char* bitName);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] index Logic Bit 位置[OUT] bitName Logic Bit 名
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形トレースの指定 Logic Bit 位置の Bit 名称を取得する。取得名称は、測定器のロジック設定のビット名に相当する。
注意 : Logic データを保持しない波形トレース ( 波形データ型 :wdfDataTypeLOGIC16 以外 ) への呼び出しは保証しない。
使用例 : // Show All Trace Bit Name
for(int i=0;i<8;i++){
char bitName[MAX_WDF_BIT_NAME];
WdfGetLogicBitName(wdfHandle, trace , i, bitName);
printf("Bit:%02d Name:%s”, i, bitName);
}
4.3 API 詳細仕様
4-9IM B8074XP-01JA
WdfGetTraceBlockNumber概要 : 波形トレースのヒストリブロック総数取得
書式 : WDFResult WdfGetTraceBlockNumber(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock* blockNumber);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[OUT] blockNumber ヒストリブロックの総数
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形トレースのヒストリブロックの総数を取得する。API へのヒストリブロック指定は、"0" 始まりで、" ヒストリブロックの総数 - 1" が上限である。ヒストリブロックの総数は、測定器でのヒストリのレコード数に相当する。
注意 : 各 API に不正なヒストリブロック番号 (ex. blockNumber より大きい値 ) を指定した場合には、API は” WDF_ERR_Error” を返す。
使用例 : WdfGetVDataType( ) 参照
WdfGetVDataType概要 : 波形ヒストリブロックのデータ型取得
書式 : WDFResult WdfGetVDataType(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock block, WDFVDataType* vDataType);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] vDataType データ型
wdfDataTypeUINT16 符号なし 16bit( データサイズ 2byte)wdfDataTypeSINT16 符号あり 16bit( データサイズ 2byte)wdfDataTypeLOGIC16 Logic 16bit( データサイズ 2byte)wdfDataTypeUINT32 符号なし 32bit( データサイズ 4byte)wdfDataTypeSINT32 符号あり 32bit( データサイズ 4byte)
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形ヒストリブロックのデータ型を取得する。波形生データを取得 (WdfGetScaleWave、WdfGetScaleWave64) する場合、データ型に従って取得データの変換を行なう必要がある。
4.3 API 詳細仕様
4-10 IM B8074XP-01JA
使用例 : //Show All Block Data Type
WDFTrace traceNumber;
WdfGetTraceNumber(wdfHandle, &traceNumber);
for(WDFTrace trace =0; trace<traceNumber; trace++){
WDFHistoryBlock blockNumber;
WdfGetTraceBlockNumber(wdfHandle, trace, &blockNumber);
for(WDFHistoryBlock block=0; block<blockNumber; block++){
WDFVDataType vDataType;
WdfGetVDataType(wdfHandle, trace, block, &vDataType);
printf("Trace:%d Block:%d DataType:%d ¥r¥n”, trace, block,
vDataType);
}
}
WdfGetVOffset概要 : 波形ヒストリブロックの垂直方向オフセット取得
書式 : WDFResult WdfGetVOffset(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock block, WDFDataParameter* vOffset);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] vOffset 垂直方向オフセット
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波 形 ヒ ス ト リ ブ ロ ッ ク の 垂 直 方 向 オ フ セ ッ ト を 取 得 す る。 波 形 生 デ ー タ を 取 得(WdfGetScaleWave、WdfGetScaleWave64) する場合、垂直方向オフセットに従って取得データの変換を行なう必要がある。
使用例 : WDFDataParameter vOffset;
WdfGetVOffset(wdfHandle, trace, block, &vOffset);
4.3 API 詳細仕様
4-11IM B8074XP-01JA
WdfGetVResolution概要 : 波形ヒストリブロックの垂直方向解像度取得
書式 : WDFResult WdfGetVResolution(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock block, WDFDataParameter*
vResolution);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] vResolution 垂直方向解像度
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波 形 ヒ ス ト リ ブ ロ ッ ク の 垂 直 方 向 解 像 度 を 取 得 す る。 波 形 生 デ ー タ を 取 得(WdfGetScaleWave、WdfGetScaleWave64) する場合、垂直方向解像度に従って取得データの変換を行なう必要がある。
使用例 : WDFDataParameter vResolution;
WdfGetVResolution(wdfHandle, trace, block, &vResolution);
WdfIsEnabledVIllegalData概要 : 非表示コードの有効/無効判定
書式 : WDFResult WdfIsEnabledVillegalData(WDFHandle handle, WDFTrace trace,
WDFBool* enable);
引数 : [IN] handle API ハンドル [IN] trace 波形トレース番号
[OUT] enable 判定値、有効 (TRUE) または無効 (FALSE) を返却
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : WdfGetVIllegalData() で取得した値が、非表示コードとして使用できるかどうかを判定する。この関数で取得する判定値が「無効」である場合、対象の波形は非表示コードを持たない。したがって、WdfGetVIllegalData() で取得した値も、非表示コードとして使うことはできない。
使用例 : WDFBool vEnable;
WdfIsEnabledVIllegalData(wdfHandle, trace, &vEnable);
4.3 API 詳細仕様
4-12 IM B8074XP-01JA
WdfGetVIllegalData概要 : 波形ヒストリブロックの無効値取得
書式 : WDFResult WdfGetVIllegalData(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock block, WDFDataParameter*
vIllegalData);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] vIllegalData 無効 ( 非表示 ) 値
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形ヒストリブロックの無効 ( 非表示 ) 値を取得する。取得した値の非表示コードが有効の場合は、API WdfGetScaleWave または WdfGetScaleWave64 で取得した生データを非表示データとして扱う。
注意 : 波形トレースによっては、非表示コードが無効のトレースがある。WdfIsEnabledVIllegalData() で、非表示コードの有効 / 無効を調べることができる。WdfIsEnabledVIllegalData() が無効を返すトレースは、非表示データとして扱わない。
使用例 : WDFDataParameter vIllegalData;
WdfGetVIllegalData(wdfHandle, trace, block, &vIllegalData);
WdfGetVUnit概要 : 波形ヒストリブロックの垂直方向単位取得
書式 : WDFResult WdfGetVUnit(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock block, char* vUnit);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] vUnit 垂直方向単位
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形ヒストリブロックの垂直方向単位文字列 (ex. "V", "℃ ") を取得する。
使用例 : char vUnit[MAX_WDF_V_UNIT];
WdfGetVUnit(wdfHandle, trace, block, vUnit);
4.3 API 詳細仕様
4-13IM B8074XP-01JA
WdfGetHOffset概要 : 波形ヒストリブロックの水平方向データ開始オフセット取得
書式 : WDFResult WdfGetHOffset(WDFHandle handle, WDFTrace trace, WDFHistoryBlock block, WDFDataParameter* hOffset);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] hOffset 水平方向データ開始オフセット
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形ヒストリブロックのデータ開始点の水平方向オフセットを取得する。波形生データを取得 (WdfGetScaleWave、WdfGetScaleWave64) する場合、データ開始オフセットに従って取得データの変換を行なう必要がある。水平方向が測定時刻の場合、測定時刻 (WdfGetTime) から、データ開始点の絶対時刻を算出できる。
使用例 : WDFDataParameter hOffset;
WdfGetHOffset(wdfHandle, trace, block, &hOffset);
WdfGetHResolution概要 : 波形ヒストリブロックの水平方向解像度取得
書式 : WDFResult WdfGetHResolution(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock block, WDFDataParameter*
hResolution);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] hResolution 水平方向データ開始オフセット
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形ヒストリブロックの水平方向解像度を取得する。波形生データを取得 (WdfGetScaleWave、WdfGetScaleWave64) する場合、水平方向解像度に従って取得データの変換を行なう必要がある。水平方向データ開始オフセット (WdfGetHOffset) と水平方向解像度から任意のデータブロックの水平方向絶対時刻値を算出できる。
使用例 : WDFDataParameter hResolution;
WdfGetHResolution(wdfHandle, trace, block, &hResolution);
4.3 API 詳細仕様
4-14 IM B8074XP-01JA
WdfGetHUnit概要 : 波形ヒストリブロックの水平方向単位取得
書式 : WDFResult WdfGetHUnit(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock block, char* hUnit);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] hUnit 水平方向単位
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形ヒストリブロックの水平方向単位文字列 (ex. "s", "Hz") を取得する。
使用例 : char hUnit[MAX_WDF_H_UNIT];
WdfGetHUnit(wdfHandle, trace, block, hUnit);
WdfGetDate概要 : 波形ヒストリブロックの測定日付取得
書式 : WDFResult WdfGetDate(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock block, char* date);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] date 測定日付
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形ヒストリブロックの測定日時を取得する。取得文字列フォーマットは、"YYYY/MM/DD" (ex. 2010/09/14) である。
使用例 : char date[MAX_WDF_DATE];
WdfGetDate(wdfHandle, trace, block, date);
4.3 API 詳細仕様
4-15IM B8074XP-01JA
WdfGetTime概要 : 波形ヒストリブロックの測定時刻取得
書式 : WDFResult WdfGetTime(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock block, char* time);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] time 測定時刻
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形ヒストリブロックの測定時刻を取得する。取得文字列フォーマットは、"HH/MM/SS.uSecond" (ex. 16:50:43.012345) である。
使用例 : char time[MAX_WDF_TIME];
WdfGetDate(wdfHandle, trace, block, time);
WdfGetBlockSize概要 : 波形ヒストリブロックのデータブロックサイズ取得
書式 : WDFResult WdfGetBlockSize(WDFHandle handle, WDFTrace trace, WDFHistoryBlock block,WDFDataBlock* blockSize);
引数 : [IN] handle API ハンドル [IN] trace 波形トレース番号 [IN] block ヒストリブロック番号 [OUT] blockSize データブロックサイズ ( 波形点数 )
戻り値 : WDF_OK 成功 WDF_ERR_InvalidHandle 無効なハンドル WDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形ヒストリブロックのデータブロックサイズ ( 波形点数 ) を取得する。波形データブロック位置を指定するときは、"0" 始まりで、" データブロックサイズ (blockSize) - 1" が上限である。
取 得 ブ ロ ッ ク サ イ ズ は、 波 形 生 デ ー タ の 取 得 デ ー タ 点 数 を 指 定 (WDFAccessParam::start, count) するために利用する。
使用例 : WDFDataBlock blockSize;
WdfGetBlockSize(wdfHandle, trace, block, blockSize);
4.3 API 詳細仕様
4-16 IM B8074XP-01JA
WdfGetBlockSize64概要 : 波形ヒストリブロックのデータブロックサイズ取得
書式 : WDFResult WdfGetBlockSize64(WDFHandle handle, WDFTrace trace,
WDFHistoryBlock block, WDFDataBlock64*
blockSize);
引数 : [IN] handle API ハンドル[IN] trace 波形トレース番号[IN] block ヒストリブロック番号[OUT] blockSize データブロックサイズ ( 波形点数 )
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラー ( 不正な引数 )
詳細 : 波形ヒストリブロックのデータブロックサイズ ( 波形点数 ) を取得する。波形データブロック位置を指定するときは、"0" 始まりで、" データブロックサイズ (blockSize) - 1" が上限である。取 得 ブ ロ ッ ク サ イ ズ は、 波 形 生 デ ー タ の 取 得 デ ー タ 点 数 を 指 定(WDFAccessParam64::start, count) するために利用する。
使用例 : WDFDataBlock64 blockSize;
WdfGetBlockSize64(wdfHandle, trace, block, blockSize);
WdfGetScaleWave 概要 : 波形生データの取得
書式 : WDFResult WdfGetScaleWave(WDFHandle handle, WDFAccessParam* param);
引数 : [IN] handle API ハンドル [IN] param 取得設定
[IN] version 固定値 (WDF_DEFAULT_ACSPRM_VERSION) [IN] trace 取得波形トレース番号 [IN] block 取得ヒストリブロック番号 [IN] start データブロック開始位置 [IN] count データ読み込み要求点数 [IN] ppRate 固定値 (WDF_DEFAULT_ACSPRM_PPRATE) [IN] waveType 固定値 (WDF_DEFAULT_ACSPRM_WAVETYPE) [IN] dataType 固定値 (WDF_DEFAULT_ACSPRM_DATATYPE) [OUT] cntOut データ読み出し点数 [IN] dst データ出力用バッファ [OUT] box 未使用 [IN] compMode 固定値 (WDF_DEFAULT_ACSPRM_COMPMODE)
戻り値 : WDF_OK 成功 WDF_ERR_InvalidHandle 無効なハンドル WDF_ERR_Error 取得エラー WDF_ERR_ParamBoundary 不正な取得設定
4.3 API 詳細仕様
4-17IM B8074XP-01JA
詳細 : 指定したパラメータ (param) の波形生データを取得する。データブロック開始位置 (start) に” 0”、データ読み込み要求点数 (count) に、WdfGetBlockSize() で取得したブロック数を指定すると、全波形データを取得する。
測定波形のレコード長が大きいと、波形データ格納用のメモリを確保するのが難しいため、データブロック開始位置 (start) を指定することで、分割して波形データを取得できる。
実際に取得したデータ点数は、データ読み出し数 (cntOut) に格納されるので、その値に従って波形データを格納したバッファ (dst) にアクセスし、有効な波形データを取り出す。
取得データは、データ型 (WDFVDataType) に従ったサイズ、リトルエンディアン形式でバッファ (dst) に格納される。
取得データは、垂直軸方向のデータを変換する必要がある。以下に、変換方法を示す。・ Logic16bit(wdfDataTypeLOGIC16) は、下位 8bit のみ有効、変換の必要なし・ 16bit符号あり (wdfDataTypeSINT16)/ なし (wdfDataTypeUINT16) と、32bit符号あり (wdfDataTypeSINT32)/ なし (wdfDataTypeUINT32) は、下式で変換
( 取得生データ値 * 垂直方向解像度 ) + 垂直方向オフセット
水平軸方向のデータ変換方法は、データブロック位置から下式で求まる。( データブロック位置 * 水平方向解像度 ) + 水平方向オフセット
注意 : 取 得 設 定 パ ラ メ ー タ の メ ン バ ” version” , “ppRate” , “waveType” , ” dataType” , ” compMode” には、上記規定値 (WDF_DEFAULT_ACSPRM_*) を設定すること。また、規定値が設定されていないときの動作は保証しない。
バッファ” dst” には、必要十分なサイズを確保すること。バッファのサイズは、( 波形データ型のデータサイズ ) * ( データ読み込み要求点数 ) 以上確保する必要がある。
波形データ型のデータサイズは、1 データあたり 4byte を想定することを推奨する。
使用例 : // Get waveform raw-data.
typedef signed short INT16;
typedef unsigned short UINT16;
typedef signed long INT32;
typedef unsigned long UINT32;
WDFAccessParam param;
param.version = WDF_DEFAULT_ACSPRM_VERSION; // fixed
param.trace = TargetTrace; // given
param.block = TargetBlcok; // given
param.start = StartCount; // given
param.count = ReadCount; // given
param.ppRate = WDF_DEFAULT_ACSPRM_PPRATE; // fixed
param.waveType = WDF_DEFAULT_ACSPRM_WAVETYPE; // fixed
param.dataType = WDF_DEFAULT_ACSPRM_DATATYPE; // fixed
param.compMode = WDF_DEFAULT_ACSPRM_COMPMODE; // fixed
param.dst = malloc((size_t)param.count * 4); // MaxDataSize:4byte
if(!param.dst){
return; // Error, Not Enough Memory
}
WDFResult result = WdfGetScaleWave(wdfHandle, ¶m);
if(result != 0){
free(param.dst);
return; // Error
}
4.3 API 詳細仕様
4-18 IM B8074XP-01JA
// Get Horizontal waveform Infomations.
WDFDataParameter hOffset;
WdfGetHOffset(wdfHandle, param.trace, param.block, &hOffset);
WDFDataParameter hResolution;
WdfGetHResolution(wdfHandle, param.trace, param.block, &hResolution);
// Get Vertical waveform Infomations.
WDFDataParameter vResolution;
WdfGetVResolution(wdfHandle, param.trace, param.block, &vResolution);
WDFDataParameter vOffset;
WdfGetVOffset(wdfHandle, param.trace, param.block, &vOffset);
WDFDataParameter vIllegalData;
WdfGetVIllegalData(wdfHandle, param.trace, param.block, &vIllegalData);
WDFDataParameter vEnabledIllegalData;
WdfIsEnabledIllegalData(wdfHandle, trace, &vEnabledIllegalData);
// Convert raw data and save text.
FILE fp = fopen("C:¥¥Output.csv”, “w”);
WDFVDataType vDataType;
WdfGetVDataType(wdfHandle, param.trace, param.block, &vDataType);
switch(vDataType){
case wdfDataTypeSINT16:
for(int i=0;i<param.cntOut/* read count */;i++){
double outDataX = (param.start + i) * hResolution + hOffset;
INT16 rawData = ((INT16*)param.dst)[i];
if(vEnableIllegalData == True && rawData == vIllegalData){
fprintf(fp, “%f, nan¥r¥n”, outDataX); // Hidden Data
}
else{
double outDataY = rawData * vResolution + vOffset;
fprintf(fp, “%f, %f¥r¥n”, outDataX, outDataY);
}
}
break;
case wdfDataTypeLOGIC16:
for(int i=0;i<param.cntOut/* read count */;i++){
UINT16 outDataY = ((UINT16*)param.dst)[i];
double outDataX = (param.start + i) * hResolution + hOffset;
fprintf(fp, “%f, %f¥r¥n”, outDataX, outDataY);
}
break;
case wdfDataTypeUINT16:
for(int i=0;i<param.cntOut/* read count */;i++){
double outDataX = (param.start + i) * hResolution + hOffset;
UINT16 rawData = ((UINT16*)param.dst)[i];
if(vEnableIllegalData == True && rawData == vIllegalData){
fprintf(fp, “%f, nan¥r¥n”, outDataX); // Hidden Data
}
else{
double outDataY = rawData * vResolution + vOffset;
fprintf(fp, “%f, %f¥r¥n”, outDataX, outDataY);
}
}
break;
4.3 API 詳細仕様
4-19IM B8074XP-01JA
case wdfDataTypeSINT32:
for(int i=0;i<param.cntOut/* read count */;i++){
double outDataX = (param.start + i) * hResolution + hOffset;
INT32 rawData = ((INT32*)param.dst)[i]; // no illegaldata on
// 4byte type
double outDataY = rawData * vResolution + vOffset;
fprintf(fp, “%f, %f\r\n”, outDataX, outDataY);
}
break;
case wdfDataTypeUINT32:
for(int i=0;i<param.cntOut/* read count */;i++){
double outDataX = (param.start + i) * hResolution + hOffset;
UINT32 rawData = ((UINT32*)param.dst)[i]; // no illegaldata on
//4byte type double outDataY = rawData * vResolution + vOffset;
fprintf(fp, “%f, %f\r\n”, outDataX, outDataY);
}
break;
default:
break; // Unknown data type
}
fclose(fp);
free(param.dst);
4.3 API 詳細仕様
4-20 IM B8074XP-01JA
WdfGetScaleWave64概要 : 波形生データの取得
書式 : WDFResult WdfGetScaleWave64(WDFHandle handle, WDFAccessParam64* param);
引数 : [IN] handle API ハンドル[IN] param 取得設定
[IN] version 固定値 (WDF_DEFAULT_ACSPRM64_VERSION) [IN] trace 取得波形トレース番号 [IN] block 取得ヒストリブロック番号 [IN] start データブロック開始位置 [IN] count データ読み込み要求点数 [IN] ppRate 固定値 (WDF_DEFAULT_ACSPRM64_PPRATE) [IN] waveType 固定値 (WDF_DEFAULT_ACSPRM64_WAVETYPE) [IN] dataType 固定値 (WDF_DEFAULT_ACSPRM64_DATATYPE) [OUT] cntOut データ読み出し点数 [IN] dst データ出力用バッファ [OUT] box 未使用 [IN] compMode 固定値 (WDF_DEFAULT_ACSPRM64_COMPMODE)
戻り値 : WDF_OK 成功WDF_ERR_InvalidHandle 無効なハンドルWDF_ERR_Error 取得エラーWDF_ERR_ParamBoundary 不正な取得設定
詳細 : 指定したパラメータ (param) の波形生データを取得する。データブロック開始位置 (start)に” 0”、 データ読み込み要求点数 (count) に、WdfGetBlockSize64() で取得したブロック数を指定すると、全波形データを取得する。測定波形のレコード長が大きいと、波形データ格納用のメモリを確保するのが難しいため、データブロック開始位置 (start) を指定することで、分割して波形データを取得できる。実際に取得したデータ点数は、データ読み出し数 (cntOut) に格納されるので、その値に従って波形データを格納したバッファ (dst) にアクセスし、有効な波形データを取り出す。
取得データは、データ型 (WDFVDataType) に従ったサイズ、リトルエンディアン形式でバッファ (dst) に格納される。取得データは、垂直軸方向のデータを変換する必要がある。以下に、変換方法を示す。・ Logic16bit(wdfDataTypeLOGIC16) は、下位 8bit のみ有効、変換の必要なし・ 16bit符号あり (wdfDataTypeSINT16)/ なし (wdfDataTypeUINT16) と、32bit符号あり (wdfDataTypeSINT32)/ なし (wdfDataTypeUINT32) は、下式で変換
( 取得生データ値 * 垂直方向解像度 ) + 垂直方向オフセット
水平軸方向のデータ変換方法は、データブロック位置から下式で求まる。
( データブロック位置 * 水平方向解像度 ) + 水平方向オフセット
注意 : 取 得 設 定 パ ラ メ ー タ の メ ン バ ” version” , “ppRate” , “waveType” , ” dataType” , ”compMode” には、上記規定値 (WDF_DEFAULT_ACSPRM64_*) を設定すること。また、規定値が設定されていないときの動作は保証しない。バッファ” dst” には、必要十分なサイズを確保すること。バッファのサイズは、( 波形データ型のデータサイズ ) * ( データ読み込み要求点数 ) 以上確保する必要がある。波形データ型のデータサイズは、1 データあたり 4byte を想定することを推奨する。
4.3 API 詳細仕様
4-21IM B8074XP-01JA
4.3 API 詳細仕様
使用例 : // Get waveform raw-data.
typedef signed short INT16;
typedef unsigned short UINT16;
typedef signed long INT32;
typedef unsigned long UINT32;
WDFAccessParam64 param;
param.version = WDF_DEFAULT_ACSPRM64_VERSION; // fixed
param.trace = TargetTrace; // given
param.block = TargetBlcok; // given
param.start = StartCount; // given
param.count = ReadCount; // given
param.ppRate = WDF_DEFAULT_ACSPRM64_PPRATE; // fixed
param.waveType = WDF_DEFAULT_ACSPRM64_WAVETYPE; // fixed
param.dataType = WDF_DEFAULT_ACSPRM64_DATATYPE; // fixed
param.compMode = WDF_DEFAULT_ACSPRM64_COMPMODE; // fixed
param.dst = malloc((size_t)param.count * 4); // MaxDataSize:4byte
if(!param.dst){
return; // Error, Not Enough Memory
}
WDFResult result = WdfGetScaleWave64(wdfHandle, ¶m);
if(result != 0){
free(param.dst);
return; // Error
}
// Get Horizontal waveform Infomations.
WDFDataParameter hOffset;
WdfGetHOffset(wdfHandle, param.trace, param.block, &hOffset);
WDFDataParameter hResolution;
WdfGetHResolution(wdfHandle, param.trace, param.block, &hResolution);
// Get Vertical waveform Infomations.
WDFDataParameter vResolution;
WdfGetVResolution(wdfHandle, param.trace, param.block, &vResolution);
WDFDataParameter vOffset;
WdfGetVOffset(wdfHandle, param.trace, param.block, &vOffset);
WDFDataParameter vIllegalData;
WdfGetVIllegalData(wdfHandle, param.trace, param.block, &vIllegalData);
WDFDataParameter vEnabledIllegalData;
WdfIsEnabledIllegalData(wdfHandle, trace, &vEnabledIllegalData);
// Convert raw data and save text.
FILE fp = fopen("C:¥¥Output.csv”, “w”);
WDFVDataType vDataType;
WdfGetVDataType(wdfHandle, param.trace, param.block, &vDataType);
switch(vDataType){
case wdfDataTypeSINT16:
for(int i=0;i<param.cntOut/* read count */;i++){
double outDataX = (param.start + i) * hResolution + hOffset;
INT16 rawData = ((INT16*)param.dst)[i];
if(vEnableIllegalData == True && rawData == vIllegalData){
fprintf(fp, “%f, nan¥r¥n”, outDataX); // Hidden Data
}
4-22 IM B8074XP-01JA
else{
double outDataY = rawData * vResolution + vOffset;
fprintf(fp, “%f, %f¥r¥n”, outDataX, outDataY);
}
}
break;
case wdfDataTypeLOGIC16:
for(int i=0;i<param.cntOut/* read count */;i++){
UINT16 outDataY = ((UINT16*)param.dst)[i];
double outDataX = (param.start + i) * hResolution + hOffset;
fprintf(fp, “%f, %f¥r¥n”, outDataX, outDataY);
}
break;
case wdfDataTypeUINT16:
for(int i=0;i<param.cntOut/* read count */;i++){
double outDataX = (param.start + i) * hResolution + hOffset;
UINT16 rawData = ((UINT16*)param.dst)[i];
if(vEnableIllegalData == True && rawData == vIllegalData){
fprintf(fp, “%f, nan¥r¥n”, outDataX); // Hidden Data
}
else{
double outDataY = rawData * vResolution + vOffset;
fprintf(fp, “%f, %f¥r¥n”, outDataX, outDataY);
}
}
break;
case wdfDataTypeSINT32:
for(int i=0;i<param.cntOut/* read count */;i++){
double outDataX = (param.start + i) * hResolution + hOffset;
INT32 rawData = ((INT32*)param.dst)[i]; // no illegaldata on
// 4byte type
double outDataY = rawData * vResolution + vOffset;
fprintf(fp, “%f, %f\r\n”, outDataX, outDataY);
}
break;
case wdfDataTypeUINT32:
for(int i=0;i<param.cntOut/* read count */;i++){
double outDataX = (param.start + i) * hResolution + hOffset;
UINT32 rawData = ((UINT32*)param.dst)[i]; // no illegaldata on
//4byte type double outDataY = rawData * vResolution + vOffset;
fprintf(fp, “%f, %f\r\n”, outDataX, outDataY);
}
break;
default:
break; // Unknown data type
}
fclose(fp);
free(param.dst);
4.3 API 詳細仕様
4-23IM B8074XP-01JA
4.4 DLL リンク方式DLL の使い方には次の 2 種類の方法があります。(1) 暗黙的なリンク (Implicitlinking)(2) 明示的なリンク (Explicitlinking)
暗黙的リンクの場合は、API を利用するには、インポートライブラリ (.lib ファイル ) を指定しリンクしてください。API の実行形式は、関数を呼び出す場合と同じように、DLL のエクスポート関数を呼び出します。
明示的なリンクの場合は、DLL を LoadLibrary 関数により、明示的に読み込むことができます。API の実行形式は、関数ポインタを通じてエクスポート関数を呼び出します。そのため、関数名とその関数の型定義を記述したヘッダを提供していますので、利用してください。
明示的なリンク用定義DLL を明示的なリンク ( アプリケーションから動的にロード ) で利用する場合、API 名とAPI の型定義が必要になります。以下のルールで、定義しています。
API 名定義: WDF_FUNCNAME_ + “API 名” API 型定義: WDF_FUNC_ + “API 名”
例えば、API WdfCloseFile を呼び出す場合は、関数の型のシンボルは、” WDF_FUNC_WdfCloseFile”、関数名のシンボルは、” WDF_FUNCNAME_WdfCloseFile” になります。
WdfCloseFile() を DLL 動的ロードで、呼び出すサンプルコードを以下に示します。 #include "WDFAPIPublic.h"
・・・ WDFResult WINAPI WdfCloseFile(WDFHandle* handle)
{
WDF_FUNC_WdfCloseFile func =
(WDF_FUNC_WdfCloseFile)GetProcAddress(hModule, WDF_FUNCNAME_
WdfCloseFile);
return func(handle);
}
他 API や DLL の動的ロードの方法については、サンプルコード (WDFAPIWrapper.cpp)を参照してください。