アナログ入出力 実用サンプルプログラム集

検査測定プログラムの作成に役立つ実用サンプルプログラム集です。お客様からのご要望を元に、そのまま検査などのご用途でご利用いただける完成度でご提供しております。ソースコードに親切丁寧なコメント・アドバイスを記載しておりますので、プログラム開発のベースプロジェクトに、コーディングの参考にもご利用ください。

目次

無限サンプリングと定期ファイル保存

実用サンプルプログラム 1 [eTest_Continuous_Sampling]

収集データを定期的にファイルに保存しながら、連続サンプリングを行います。パフォーマンス測定アプリケーションとして、ご使用環境下における最大収集スループットを把握する目的にも使用できます。収集スループット最大化のため、メモリからのデータ取得プロセスはポーリング処理で行われ、ファイル保存はバイナリ形式で行います。保存したバイナリデータをCSVに変換する機能も用意しています。

  • 使用チャネル数とサンプリング速度を指定して無限サンプリング
  • 収集データをファイルに保存する周期を設定可能
  • 保存後のバイナリファイルを読み込んでCSV形式にコンバート

パラメータ

サンプリング速度 任意
サンプリング回数 無限
チャネル数 任意

対応デバイス

  • アナログ入力デバイス全般

ダウンロード

波形データファイルの読み込みによる任意波形出力

実用サンプルプログラム 2 [eTest_GeneratingFromDataFile]

CSV形式の波形データファイルを読み込み、これに基づく波形電圧出力を行います。クロック周期の変更が可能です。シミュレーション波形出力などにご利用ください。

  • 波形データが書かれたファイルを読み込みアナログ出力。使用チャネルは0チャネル固定
  • 出力レンジ、クロック周期、波形を繰り返し行うかどうかの設定が可能
  • 波形データファイルフォーマットは、単純に電圧の羅列(拡張子CSV)
    例)
    0.0180
    0.0211

  • サンプル波形データとして、サイン波、方形波、三角波を用意
  • ファイル内のデータ数はアプリで判断するため、任意データ数のファイルを読み込み可能
  • DAボードはリングメモリを使用
  • クロックエラーなどのエラー発生時はイベントで通知

パラメータ

出力周期 任意
チャネル数 1

対応デバイス

  • アナログ出力デバイス全般

ダウンロード

ActiveXコンポーネント使用 DC電圧測定とヒストグラム表示

実用サンプルプログラム 3 [eTest_Histogram]

DC電圧測定を行い、設定した目標値に対するヒストグラムを作成します。また、標準偏差、最大・最小・平均の統計データを計算します。ヒストグラムのCSVファイル保存も行います。出荷前検査や特性研究などにご利用ください。

  • ヒストグラムのデータをグラフで表示
  • 標準偏差、最大・最小・平均等の統計データを計算
  • ヒストグラムのデータは、CSVファイルに保存

パラメータ

サンプリング速度 100μsec
サンプリング回数 任意
チャネル数 1

対応デバイス

  • アナログ入力デバイス全般

ダウンロード

AI-1204Z-PCI専用 大容量データサンプリングとCSV保存

実用サンプルプログラム 4 [eTest_LargeData_Sampling]

大容量・高速サンプリングを行い、サンプリングしたデータを一括してCSVファイルへ保存するAI-1204Z-PCI専用のプログラムです。振動試験や落下試験などのデータ分析にご利用ください。

  • 使用するチャネル数とサンプリング点数に応じて可変FIFOメモリのサイズを設定、FIFOメモリから一括でデータ取得
  • 収集データを指定したパスにCSVファイルで保存
  • 収集データの間引き保存が可能。(ファイルサイズを抑制)

パラメータ

サンプリング速度 100nsec -
サンプリング回数 任意
チャネル数 1 - 4チャネル

対応デバイス

ダウンロード

DC電圧測定と上限/下限アラーム出力(高速版)

実用サンプルプログラム 5 [eTest_CheckDC_HighSpeed]

DC電圧が一定の範囲内に収まっているかどうかを測定検査するプログラムです。デバイス内蔵のプログラマブルタイマを使用して、異常検出時の信号の状態を高速に取り込むことができます。車両走行時における車載機器の振動検査など高速な信号の収集にご利用ください。

  • 電圧が閾値を外れた場合、デジタル出力端子からアラーム出力
  • 検査開始前の電圧確認用にフリーランモードが使用可能。フリーランでは許容範囲のチェックは不可
  • 異常検出前(プリトリガ)のデータ量と、異常検出後(ポストトリガ)のデータ量を、デューティー比で設定可能
  • 異常検出前後のデータをCSVファイルに保存

パラメータ

サンプリング速度 100μsec
サンプリング回数 1000回
チャネル数 1チャネル

対応デバイス

ダウンロード

DC電圧測定と上限/下限アラーム出力(低速版)

実用サンプルプログラム 6 [eTest_CheckDC_LowSpeed]

DC電圧が一定の範囲内に収まっているかどうかを測定検査するプログラムです。システムタイマの周期で信号の収集を行うためデバイスを選びません。温度やバッテリの出力電圧など、緩やかな信号を測定する用途にご利用ください。

  • 電圧が閾値を外れた場合、デジタル出力端子からアラーム出力
  • 検査開始前の電圧確認用に、フリーランモードが使用可能。フリーランでは許容範囲のチェックは不可

パラメータ

サンプリング速度 100msec
サンプリング回数 無限
チャネル数 1チャネル

対応デバイス

  • アナログデバイス全般

ダウンロード

複数デバイスの同期運転による多チャネル高速サンプリング

実用サンプルプログラム 7 [eTest_SyncAiDevices]

複数のデバイスでサンプリングクロックとサンプリング開始トリガを同期させて、多チャネルサンプリングを行うプログラムです。多数のセンサーを使って、電圧信号を同時に取り込む必要のある測定検査システムなどにご利用ください。

  • 複数デバイス間でサンプリングの開始とサンプリングクロックの同期を取りながらデータ収集を行います。
  • 各デバイスの全チャネルを使用してデータ収集を行います。最大4デバイスまでの同期運転が可能です。

パラメータ

サンプリング速度 1msec
サンプリング回数 1000回
チャネル数 使用するデバイスの最大チャネル数

対応デバイス

ダウンロード

デバイス(ハードウェア)設定

デバイスのBOARD ID(ロータリースイッチ)を設定して、同期バスコネクタ間(CN2→CN3)を専用のフラットケーブル(標準添付品)で接続します。図はID:0をマスタ、ID:1とID:2をスレーブとして3つのデバイスを同期させる場合です。

同期バスの接続

同期運転を制御するECU(イベントコントローラユニット)

コンテックのデバイスには、入出力機能と同期バスの因果関係を定義して連動させることができるECU(イベントコントローラユニット)という回路が搭載されている製品があります。ECUを搭載したデバイスは、同期バスを通じて他のデバイスへクロック信号やトリガ信号を出力したり、入力したりすることができます。

同期バスには汎用的に使用できる3本の制御ラインがあります。サンプルグプログラムでは、1本目をサンプリングクロックの同期用として、2本目をサンプリング開始トリガの同期用に使用しています。

ECU(イベントコントローラユニット)の設定

ECUの設定は、API関数 AioSetEcuSignal を実行して行います。
接続先(Destination)と接続元(Source)をパラメータとして、必要なだけ繰り返し定義していきます。

AioSetEcuSignal(Id, Destination, Source)

マスタのECUをプログラミング

マスタのサンプリングクロック信号を同期バスの信号線1に出力

接続先を同期コネクタのマスタ信号1(AIOECU_DEST_MASTER1)、接続元をアナログ入力内部クロック信号(AIOECU_SRC_AI_CLK)に設定します。

マスタのECU設定 アナログ入力AI 内部クロック信号 ECU マスタ信号1 同期バスSYNC アナログ入力AI 開始トリガ信号 ECU マスタ信号2 同期バスSYNC AioSetEcuSignal(ID, AIOECU_DEST_MASTER1(接続先:マスタ信号1), AIOECU_SRC_AI_CLK(接続元:内部クロック信号) AioSetEcuSignal(ID, AIOECU_DEST_MASTER2(接続先:マスタ信号2), AIOECU_SRC_START(接続元:開始トリガ信号)

マスタのサンプリング開始トリガ信号を同期バスの信号線2に出力

接続先を同期バスのマスタ信号2(AIOECU_DEST_MASTER2)、接続元をアナログ入力変換開始信号(AIOECU_SRC_START)に設定します。

これでマスタのサンプリングクロックとサンプリング開始トリガがスレーブに送信されます。同期バスから制御信号出力は、自動的に行われますので、別途関数などの実行は必要ありません。

同期バス間の接続 マスタ信号1 同期バスSYNC 同期バスSYNC スレープ信号1 マスタ信号2 同期バスSYNC 同期バスSYNC スレープ信号2 関数設定は不要。信号は自動的にマスターからスレープに送信される

スレーブのECUをプログラミング

同期バスの信号線1をスレーブのサンプリングクロックとして入力

接続先をアナログ入力内部クロック信号(AIOECU_DEST_AI_CLK)、接続元を同期バスのスレーブ信号1(AIOECU_SRC_SLAVE1)に設定します。

同期バスの信号線2をスレーブの開始トリガとして入力

接続先をアナログ入力変換開始信号(AIOECU_DEST_AI_START)、接続元を同期バスのスレーブ信号2(AIOECU_SRC_SLAVE2)に設定します。

スレーブのECU設定 同期バスSYNC スレープ信号1 ECU 内部クロック信号 アナログ入力AI 同期バスSYNC スレープ信号2 ECU 開始トリガ信号 アナログ入力AI AioSetEcuSignal(ID, AIOECU_AI_CLK(接続先:マスタ信号1), AIOECU_SRC_SLAVE1(接続元:内部クロック信号) AioSetEcuSignal(ID, AIOECU_AI_START(接続先:マスタ信号2), AIOECU_SRC_SLAVE2(接続元:開始トリガ信号)

サンプリングの開始

サンプリング開始はスレーブが先

同期運転の場合、先にスレーブのサンプリングを開始してからマスタのサンプリングを開始するのがポイントです。(先にスレーブのサンプリングを開始して、マスタがサンプリングを開始するまでの間、スレーブは開始トリガ待ちの状態にします。)

すぐに処理を戻す [AioStartAi] と戻さない [AioStartAiSync]

API関数 [AioStartAi] はスレッドに対して非同期で動作、サンプリングの開始をハードウェアに指示すると、すぐに処理を戻します。一方のAPI関数 [AioStartAiSync] は、スレッドに同期して動作するためサンプリングが完了するまで処理を戻しません。

サンプルプログラムでは、スレーブのサンプリング開始にAPI関数 [AioStartAi]、マスタのサンプリング開始にAPI関数 [AioStartAiSync] を使っています。スレーブはマスタに同期して動作しているため、マスタのサンプリングが完了している(API関数 [AioStartAiSync] から処理が戻った)ということは、スレーブのサンプリングも完了しているというわけです。サンプルプログラムで、スレーブの状態を見ずにマスタにAPI関数 [AioStartAiSync] 実行後、すぐにデータ取得(変数に格納)して問題ないのはこのためです。