12.07.2015 Views

こちらから - インタフェース

こちらから - インタフェース

こちらから - インタフェース

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

MA(PCI/C-PCI)GPC-MA001エコ 3 アナログ 入 出 力 モデル / タフコン,タッチパネル TEDS モデル /マザコン 高 機 能 アナログ 入 出 力 モデル 用 Windows ドライバHelp for Windowswww.interface.co.jp


GPC-MA001 Help for Windows第 1 章 はじめに1.1 概 要GPC-MA001は、Windows 上 のアプリケーションから、 弊 社 マザコン 高 機 能 アナログ 入 出 力 モデル/エコ3 アナログ 入 出 力 モデル/タフコン,タッチパネル TEDSモデルを 制 御 するためのソフトウェアです。弊 社 マザコン 高 機 能 アナログ 入 出 力 モデル/エコ3 アナログ 入 出 力 モデル/タフコン,タッチパネルTEDSモデルをWindows 上 のアプリケーションからDLLをダイナミックリンクし、APIをコールすることにより 制 御 します。1.2 特 長● 制 御 体 系弊 社 マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデル/タフコン,タッチパネル TEDS モデルを 制 御 するシンプルな API 体 系 となっており、 簡 単 な 手 順 でプログラムを 作成 できます。また、それぞれの 製 品 には 以 下 の 特 徴 があります。・サンプリング・アナログ 入 力・TEDS 機 能・アナログ 出 力・デジタル 入 力 ※1・デジタル 出 力 ※1・カウンタ ※1・CAN 送 受 信 ※1※1 マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルにのみ 対 応 している機 能 です。●イベントコールバックサンプリング 停 止 、トリガイベントなどの 要 因 で 発 生 するイベントコールバックに 対 応 し、 非同 期 イベントによる 処 理 が 設 定 できます。●サンプルプログラム各 種 機 能 毎 にシンプルなサンプルプログラムを 用 意 しています。ソースを 公 開 していますので、 自 由 にプログラムを 拡 張 することができます。●ユーティリティ・ 接 続 確 認 を 行 える 自 己 診 断 ユーティリティ・アナログ 入 力 /アナログ 出 力 のキャリブレーションを 行 うユーティリティ・ 接 続 している TEDS センサの TEDS 情 報 の 取 得 できるユーティリティ●ドキュメント機 能 や 使 い 方 を 説 明 するヘルプ(Help.pdf)をサポートしていますので、 開 発 中 に 関 数 の 詳 細 説明 など、 簡 単 に 参 照 することができます。© 2012, 2014 Interface Corporation. All rights reserved.4


GPC-MA001 Help for Windows第 2 章 製 品 仕 様2.1 基 本 仕 様機 能サンプリングアナログ 入 力アナログ 出 力デジタル 入 出 力カウンタCAN対 応 OS(32bit) Microsoft Windows Embedded Standard 7Microsoft Windows 7Microsoft Windows Embedded Standard 2009Microsoft Windows XP対 応 OS(64bit) Microsoft Windows Embedded Standard 7Microsoft Windows 7対 応 言 語 Microsoft Visual C++ 2005, 2008, 2010Microsoft Visual C# 2005, 2008, 2010Microsoft Visual Basic 2005, 2008, 2010© 2012, 2014 Interface Corporation. All rights reserved.5


GPC-MA001 Help for WindowsDispTeds.exeTEDSセンサ 情 報 表 示 ユーティリティ© 2012, 2014 Interface Corporation. All rights reserved.7


GPC-MA001 Help for WindowsサンプルプログラムVCCS_NETSamplingMaEventExTrgInExClockInExTrgOutAdInputAdEventDaOutputOutputDaEventDiInputDiEventDoOutputCntInputCntEventCanSendCanCyclicCanReceiveCanFilterCanErrorIFCMAIFCCANSamplingMaEventExTrgInExClockInExTrgOutAdInputAdEventDaOutputOutputDaEventDiInputDiEventDoOutputCntInputCntEventCanSendCanCyclicCanReceiveCanFilterCanErrorサンプリング 入 力 サンプルプログラムサンプリング 割 り 込 みサンプルプログラム外 部 トリガ 入 力 サンプルプログラム外 部 クロック 入 力 サンプルプログラム外 部 トリガ 出 力 サンプルプログラム1 件 アナログ 入 力 サンプルプログラムアナログトリガ 検 出 サンプルプログラム1 件 アナログ 出 力 サンプルプログラム連 続 アナログ 出 力 サンプルプログラムアナログ 出 力 割 り 込 みサンプルプログラムデジタル 入 力 サンプルプログラムDIエッジ 割 り 込 みサンプルプログラムデジタル 出 力 サンプルプログラムカウンタ 値 取 得 サンプルプログラムカウンタ 割 り 込 みサンプルプログラムCAN 送 信 サンプルプログラムCAN 周 期 送 信 サンプルプログラムCAN 受 信 サンプルプログラムフィルタを 使 用 したCAN 受 信 サンプルプログラムCANエラー 情 報 取 得 サンプルプログラムクラスライブラリクラスライブラリサンプリング 入 力 サンプルプログラムサンプリング 割 り 込 みサンプルプログラム外 部 トリガ 入 力 サンプルプログラム外 部 クロック 入 力 サンプルプログラム外 部 トリガ 出 力 サンプルプログラム1 件 アナログ 入 力 サンプルプログラムアナログトリガ 検 出 サンプルプログラム1 件 アナログ 出 力 サンプルプログラム連 続 アナログ 出 力 サンプルプログラムアナログ 出 力 割 り 込 みサンプルプログラムデジタル 入 力 サンプルプログラムDIエッジ 割 り 込 みサンプルプログラムデジタル 出 力 サンプルプログラムカウンタ 値 取 得 サンプルプログラムカウンタ 割 り 込 みサンプルプログラムCAN 送 信 サンプルプログラムCAN 周 期 送 信 サンプルプログラムCAN 受 信 サンプルプログラムフィルタを 使 用 したCAN 受 信 サンプルプログラムCANエラー 情 報 取 得 サンプルプログラム© 2012, 2014 Interface Corporation. All rights reserved.8


GPC-MA001 Help for WindowsVB_NETIFCMAIFCCANSamplingMaEventExTrgInExClockInExTrgOutAdInputAdEventDaOutputOutputDaEventDiInputDiEventDoOutputCntInputCntEventCanSendCanCyclicCanReceiveCanFilterCanErrorクラスライブラリクラスライブラリサンプリング 入 力 サンプルプログラムサンプリング 割 り 込 みサンプルプログラム外 部 トリガ 入 力 サンプルプログラム外 部 クロック 入 力 サンプルプログラム外 部 トリガ 出 力 サンプルプログラム1 件 アナログ 入 力 サンプルプログラムアナログトリガ 検 出 サンプルプログラム1 件 アナログ 出 力 サンプルプログラム連 続 アナログ 出 力 サンプルプログラムアナログ 出 力 割 り 込 みサンプルプログラムデジタル 入 力 サンプルプログラムDIエッジ 割 り 込 みサンプルプログラムデジタル 出 力 サンプルプログラムカウンタ 値 取 得 サンプルプログラムカウンタ 割 り 込 みサンプルプログラムCAN 送 信 サンプルプログラムCAN 周 期 送 信 サンプルプログラムCAN 受 信 サンプルプログラムフィルタを 使 用 したCAN 受 信 サンプルプログラムCANエラー 情 報 取 得 サンプルプログラム※Visual C# .NET,Visual Basic.NET 用 サンプルプログラムは、それぞれ Viausl C# .NET 2003,Visual Basic .NET 2003 を 使 用 して 作 成 しています。© 2012, 2014 Interface Corporation. All rights reserved.9


GPC-MA001 Help for Windows第 3 章 機 能3.1 サンプリングサンプリング 動 作 はトリガによって 制 御 されます。トリガの 種 類 と 動 作 は 以 下 です。トリガ動 作サンプリングスタートトリガ サンプリングのスタートサンプリングストップトリガ サンプリングのストップイベントトリガ サンプリングデータにイベントトリガログが 残 る(フラグが 立 つ)プリトリガ、ポストトリガの 代 わりとなりますサンプリングトリガ【 一 定 周 期 サンプリング】データをサンプリングする【FFT、トラッキングサンプリング】サンプリングデータにタイムスタンプが 残 る【 一 定 周 期 サンプリング】スタートトリガ 時 のデータはサンプリングされないイベントトリガストップトリガ 時 のデータはサンプリングされないイベントトリガサンプリングスタートトリガサンプリングトリガサンプリングデータサンプリング© 2012, 2014 Interface Corporation. All rights reserved.10


GPC-MA001 Help for Windows【FFT、トラッキングサンプリング】イベントトリガイベントトリガサンプリングスタートトリガ102.4kHzサンプリングトリガサンプリングトリガサンプリングサンプリングデータ© 2012, 2014 Interface Corporation. All rights reserved.11


GPC-MA001 Help for Windows3.1.1 一 定 周 期 サンプリング指 定 したサンプリング 周 期 、サンプリングトリガタイミングでデータを 取 得 します。102.4kHz サンプリング102.4kHz サンプリング 周 期内 部 タイマによる任 意 周 期 サンプリング指 定 周 期 、サンプリングトリガ指 定 周 期 を 内 部 タイマでカウントし、サンプリングタイミングにおいて 最 も 直 近 の 102.4kHz オーバサンプリング 値 をサンプリング 値 として 取 得 すします。© 2012, 2014 Interface Corporation. All rights reserved.12


GPC-MA001 Help for Windows3.1.2 FFT サンプリング指 定 周 期 でユーザ 指 定 周 期 /2 以 下 の 成 分 がカットされた 波 形 をサンプリングします。102.4kHz サンプリング102.4kHz サンプリング 周 期インターポーレーション0 の 値 をサンプリングポイント 間 に挿 入 して LPF(ローパスフィルタ)をかける102.4kHz サンプリング 周 期デシメーションLPF をかけてリサンプリング 時の 折 り 返 しノイズを 取 り、リサンプリング指 定 周 期リサンプリングによる任 意 周 期 サンプリング指 定 周 期102.4kHz でオーバサンプリングした 結 果 に 対 し、インターポーレーションとデシメーションによってリサンプリング 周 波 数 の 半 分 以 下 の 周 波 数 をカットした 波 形 に 対 してリサンプリングを 行 ないます。© 2012, 2014 Interface Corporation. All rights reserved.13


GPC-MA001 Help for Windows3.1.3 トラッキングサンプリング外 部 サンプリング、サンプリングトリガタイミングで 外 部 サンプリング 周 波 数 /2 以 下 の 成 分 がカットされた 波 形 をサンプリング。102.4kHz サンプリング102.4kHz サンプリング 周 期インターポーレーション0 の 値 をサンプリングポイント 間 に 挿 入 して LPF(ローパスフィルタ)をかける102.4kHz サンプリング 周 期デシメーションLPF をかけてリサンプリング 時 の 折 り 返 しノイズを 取り、リサンプリング外 部 サンプリングクロックタイミング外 部 サンプリングクロックの 周 波 数は 一 定 でないため、 挿 入 する 0 値 やLPF の 周 波 数 特 性 はサンプリングクロックの 周 波 数 に 合 わせて 変 化 させる。リサンプリングによる外 部 サンプリングクロックタイミング外 部 サンプリングクロックタイミング© 2012, 2014 Interface Corporation. All rights reserved.14


GPC-MA001 Help for Windows102.4kHz でオーバサンプリングした 結 果 に 対 し、インターポーレーションとデシメーションによってリサンプリング 周 波 数 の 半 分 以 下 の 周 波 数 をカットした 波 形 に 対 してリサンプリングを 行 います。インターポーレーション、デシメーションにおいて 外 部 サンプリングクロックの 周 波 数 は 一 定 でないため、 挿 入 する 0 値 や LPF の 周 波 数 特 性 はサンプリングクロックの 周 波 数 に 合 わせて 変 化 させます。© 2012, 2014 Interface Corporation. All rights reserved.15


GPC-MA001 Help for Windows3.1.4 シングルトリガモード 機 能トリガ 条 件 においてワンショットのサンプリングを 行 います。プリサンプリングを 行 うことができます。サンプリングスタートトリガイベントトリガサンプリングストップトリガプリミドル3.1.5 リピートモード 機 能トリガを 検 出 する 毎 にサンプリングを 行 います。繰 り 返 し 回 数 の 指 定 を 行 うことができます。サンプリングサンプリングサンプリングサンプリングスタートトリガストップトリガスタートトリガストップトリガサンプリングデータサンプリングデータ© 2012, 2014 Interface Corporation. All rights reserved.16


GPC-MA001 Help for Windows3.1.6 オートモード 機 能サンプリング 停 止 が 発 行 されるまでサンプリングを 続 けます。サンプリングスタートトリガサンプリング停 止 要 求サンプリングデータ© 2012, 2014 Interface Corporation. All rights reserved.17


GPC-MA001 Help for Windows3.1.7 チャンネルごとのサンプリング 周 波 数イベントトリガを 応 用 することでチャンネルごとにことなるサンプリング 周 波 数 でサンプリングすることもできます。サンプリングトリガに CH1 用 、CH2 用 のものを OR 条 件 で 設 定 します(サンプリングトリガ: 汎 用 タイマ 1 or 汎 用 タイ 2)。取 得 データには CH1 と CH2 のデータが 一 緒 に 取 得 されますが、イベントトリガ 情 報 も 一 緒 に 取 得 できるため CH1 は 汎 用 タイマ 1 のイベント 時 、CH2 は 汎 用 タイマ 2 のイベント 時 の 値 を 取 り 出 すことでそれぞれことなる 周 波 数 でのサンプリングデータを 得 る 事 ができます。サンプリングスタートトリガサンプリングストップトリガサンプリングトリガ(CH1)サンプリングトリガ(CH2)タイマ AD1 AD2 汎 用 タイマ 1イベントトリガ汎 用 タイマ 2イベントトリガ0 1V 6V ○ ○10 2V 6V ○20 3V 5V ○30 4V 5V ○ ○40 5V 4V ○50 6V 4V ○60 7V 3V ○ ○70 8V 3V ○© 2012, 2014 Interface Corporation. All rights reserved.18


GPC-MA001 Help for Windows3.1.8 イベント/コールバック 機 能割 り 込 み 発 生 時 に 呼 ばれるコールバック 関 数 を 登 録 します。割 り 込 みとしては 下 記 を 発 生 させることができます。項 目サンプリング 終 了指 定 件 数 イベントサンプリングトリガ 重 複 割 り 込 み 検 出内 部 同 期 トリガ 割 り 込 み 検 出© 2012, 2014 Interface Corporation. All rights reserved.19


GPC-MA001 Help for Windows3.2 アナログ 入 力3.2.1 1 件 入 力 機 能各 チャンネルの 最 新 の 一 件 データを 取 得 することができます。3.2.2 アナログトリガ 検 出 機 能各 チャンネルに 対 してアナログトリガ 検 出 を 行 うことができます。アナログ 入 力 がある 任 意 のレベルを 超 える(または 下 回 る) 場 合 トリガが 発 生 します。このレベルにヒステリシス 幅 を 持 たすことができます。ヒステリシス 幅ヒステリシス 幅指 定 レベルヒステリシス 幅ヒステリシス 幅指 定 レベルレベルを 越 えたと 検 出 し、トリガ 発 生立 ち 下 がりとしてアナログトリガ 検 出また、レベルは2つ 設 定 できますので、 例 えば 以 下 のような 設 定 ができます。トリガ 発 生レベル 1+1V立 ち 上 がりでトリガ 発 生レベル 2-1V立 ち 下 がりでトリガ 発 生アナログ 信 号 が 指 定 範 囲 (-1V~+1V) 外 になると、トリガが 発 生 します。3.2.3 イベント/コールバック 機 能割 り 込 み 発 生 時 に 呼 ばれるコールバック 関 数 を 登 録 します。割 り 込 みとしては 下 記 を 発 生 させることができます。項 目アナログトリガ外 部 トリガ 入 力 検 出3.2.4 キャリブレーション 機 能AD 変 換 値 の 誤 差 をキャリブレーション( 校 正 )することができます。© 2012, 2014 Interface Corporation. All rights reserved.20


GPC-MA001 Help for Windows3.3 TEDS 機 能3.3.1 基 本 TEDS 情 報 読 み 込 みセンサに 搭 載 されている EEPROM の 基 本 TEDS 情 報 を 取 得 できます。TEDS 情 報 の 項 目 内 容 Bit 数Manufacturer ID 製 造 元 ID 14bitModel Number モデル 番 号 15bitBasic TEDS Version letter バージョン 記 号 5bitVersion number バージョン 番 号 6bitSerial number シリアル 番 号 24bitIEEE 標 準 ・ 拡 張 センサタイプによって 異 なりますTEDS(センサタイプによって 異なります)ユーザ 定 義 項 目 センサタイプによって 異 なりますBasic TEDS フォーマット8 6 5 4 3 2 1 0Manufacturer IDModel NumberManufacturer IDModel NumberVersion letterModel NumberVersion numberVersion letterSerial numberSerial numberSerial number3.3.2 TEDS ROM への Read/WriteTEDS センサに 搭 載 されている EEPROM にデータへのリード/ライトを 行 えます。ライトについては、ユーザ 定 義 項 目 のみ 行 えます。© 2012, 2014 Interface Corporation. All rights reserved.21


GPC-MA001 Help for Windows3.4 アナログ 出 力3.4.1 1 件 出 力 機 能各 チャンネルの 一 件 データを 出 力 します。3.4.2 連 続 出 力 機 能指 定 した 周 期 で 連 続 出 力 を 行 うことができます。スタート 前 は 以 前 の 値 を 保 持ストップ 後 は 最 後 の 値 を 保 持スタート 時 に FIFO1 件 目 が 出 力 されるアナログ FIFO 出 力スタートトリガアナログ FIFO 出 力 更 新 トリガアナログ FIFO 出 力ストップトリガ3.4.3 イベント/コールバック 機 能割 り 込 み 発 生 時 に 呼 ばれるコールバック 関 数 を 登 録 します。割 り 込 みとしては 下 記 を 発 生 させることができます。項 目連 続 出 力 停 止FIFO Empty3.4.4 キャリブレーション 機 能DA 変 換 値 の 誤 差 をキャリブレーション( 校 正 )することができます。© 2012, 2014 Interface Corporation. All rights reserved.22


GPC-MA001 Help for Windows3.5 デジタル 入 力3.5.1 1 件 入 力 機 能一 件 のデジタル 入 力 データを 取 得 します。3.5.2 デジタルフィルタ 機 能デジタル 入 力 のデジタルフィルタの 設 定 を 行 います。3.5.3 イベント/コールバック 機 能割 り 込 み 発 生 時 に 呼 ばれるコールバック 関 数 を 登 録 します。割 り 込 みとしては 下 記 を 発 生 させることができます。項 目IN1 のエッジ 割 り 込 み立 ち 上 がりエッジ立 ち 下 がりエッジIN2 のエッジ 割 り 込 み立 ち 上 がりエッジ立 ち 下 がりエッジIN3 のエッジ 割 り 込 み立 ち 上 がりエッジ立 ち 下 がりエッジIN4 のエッジ 割 り 込 み立 ち 上 がりエッジ立 ち 下 がりエッジ3.6 デジタル 出 力3.6.1 1 件 出 力 機 能一 件 のデジタル 出 力 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.23


GPC-MA001 Help for Windows3.7 カウンタ3.7.1 カウンタモード各 カウントモードでカウント 値 を 取 得 することができます。No カウントモード1 ゲート 信 号 付 き 単 相 パルス 1 逓 倍 モード22 逓 倍 モード3 位 相 差 パルス1 逓 倍 モード 非 同 期 クリア4同 期 クリア5 2 逓 倍 モード 非 同 期 クリア6同 期 クリア7 4 逓 倍 モード 非 同 期 クリア8同 期 クリア9 2 パルスカウントモード(CW/CCW)位 相 差 パルスカウントモード、UP/DOWN パルスカウントモード、ゲート 付 き 単 相 パルスカウントモードを 選 択 できます。1(Low)0(High)1(Low)0(High)1(Low)0(High)1(Low)0(High)1(Low)0(High)1(Low)0(High)© 2012, 2014 Interface Corporation. All rights reserved.24


GPC-MA001 Help for Windows1(Low)0(High)1(Low)0(High)1(Low)0(High)1(Low)0(High)1(Low)0(High)1(Low)0(High)© 2012, 2014 Interface Corporation. All rights reserved.25


GPC-MA001 Help for Windowsスタート、ストップ、クリアには 同 期 ラインを 使 用 することができます。同 期 ラインを 使 用 したクリアは 非 同 期 クリアです。クリア 条 件 は 同 期 ラインの 他 に Z 相 、L1 でのクリアを 行 う 事 が 出 来 ます。Z 相 、L1 を 使 用 したクリアには 同 期 クリアと 非 同 期 クリアがあります。位 相 差 パルスカウントモードは、 同 期 クリアモードと 非 同 期 クリアモードがあります。UP/DOWNパルスカウントモード, ゲート 付 き 単 相 パルスカウントモードは、 非 同 期 クリアモードになります。クリアモード非 同 期 クリアモード同 期 クリアモード( 位 相 差 パルスカウントモードのみ)説 明A 相 、B 相 にかかわりなく、Z 相 または Z 相 と L が 有 効 になった時 、カウンタをクリアします。(※)B 相 が’0’(High)で、Z 相 またはZ 相 とLが 有 効 になっている 時 の、A相 の’1’(Low)→’0’(High)と’0’(High)→’1’(Low)でクリアされます。※Z 相 は 極 性 を 指 定 でき、 通 常 Low(’1’)で 有 効L 相 は 極 性 を 指 定 できず、 通 常 High(’0’)で 有 効3.7.2 デジタルフィルタ 機 能A, B, Z, L のデジタルフィルタの 設 定 を 行 うことができます。© 2012, 2014 Interface Corporation. All rights reserved.26


GPC-MA001 Help for Windows3.7.3 カウンタアップダウンカウンタ 値 が 指 定 した 値 分 カウントアップ、ダウンした 場 合 に 発 生 します。指 定 周 期 :3、カウントアップ6 の 次 は 9 でカウントアップ(カウントダウン 分 は 無 視 )カウンタ 値0 1 2 3 4 5 6 5 4 3 4 5 67 8 9同 期 タイミング3.7.4 カウンタ 一 致 検 出カウンタ 値 が 指 定 した 値 と 一 致 した 場 合 に 割 り 込 みを 発 生 させることができます。指 定 値 :3カウンタ 値0 1 2 3 4 5 6 5 4 3 4 5 67 8 9同 期 タイミング3.7.5 異 常 入 力 検 出 機 能位 相 差 パルスカウントモードで 異 常 な 入 力 を 検 出 した 場 合 に 割 り 込 みを 発 生 させることができます。3.7.6 イベント/コールバック 機 能割 り 込 み 発 生 時 に 呼 ばれるコールバック 関 数 を 登 録 します。割 り 込 みとしては 下 記 を 発 生 させることができます。項 目カウンタ 一 致 検 出キャリー/ボロー 検 出カウンタ 異 常 入 力 検 出© 2012, 2014 Interface Corporation. All rights reserved.27


GPC-MA001 Help for Windows3.8 CAN3.8.1 メッセージ 送 信CanSendMessage 関 数 を 使 用 してメッセージの 送 信 を 行 います。送 信 メッセージはデバイスドライバ 内 部 のバッファに 蓄 えられ、 順 次 送 信 が 行 われます。CanSendMessage 関 数 に 渡 すCAN_MESSAGE 構 造 体 のulTimeメンバにディレイ 時 間 を 設 定 することができます。また、CanCyclicSendMessage 関 数 により、データの 周 期 送 信 ができます。CanStopCyclicSendMessage 関 数 により、 周 期 送 信 を 停 止 します。送 信 が 完 了 したメッセージは、 送 信 完 了 時 間 が CAN_MESSAGE 構 造 体 の ulTime メンバに 格 納 され、送 信 バッファ 内 に 残 ります。 送 信 完 了 時 間 については 構 造 体 の 説 明 を 参 照 して 下 さい。CanGetCompletionMessage 関 数 で、 送 信 が 完 了 したメッセージを 取 得 します。送 信 バッファ 内 では、 送 信 完 了 メッセージ 数 はカウントされません。 未 送 信 メッセージのみがカウントされます。CanSendMessage 関 数 により、5 つのメッセージを 送 信 バッファに 挿 入 した 場 合 。送 信 バッファ 内 の 3 つのメッセージが 送 信 完 了 した 場 合 。送信バッファ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージulTXBCount = 5送信バッファ未 送 信 メッセージ未 送 信 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージulTXBCount = 2そのため、 未 送 信 データが 0 になった 時 点 で、CAN_EVENT_TXB_IS_EMPTY( 送 信 バッファから、未 送 信 データがなくなった)イベントが 発 生 します。送 信 バッファはリングバッファになっており、 未 送 信 メッセージが 送 信 バッファを1 周 すると、送 信 完 了 メッセージを 上 書 きしてしまいますのでご 注 意 ください。この 時 点 で、CanSendMessage 関 数 により、4 つのメッセージを 送 信 バッファに 追 加 するとします。送信バッファ未 送 信 メッセージ未 送 信 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージ未 送 信 メッセージが 送 信 バッファの最 後 まで 挿 入 され、さらに 挿 入 しようとすると・・・送信バッファ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージリングバッファなので、 次 に 挿 入 されるメッセージが、 送 信 完 了 メッセージを 上 書 きしてしまいます。送信バッファ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージ未 送 信 メッセージまた、 送 信 完 了 メッセージは、 送 信 バッファサイズを 変 更 するとクリアされますので、 送 信 完了 メッセージを 全 て 取 り 出 してから、 送 信 バッファサイズを 変 更 するようにしてください。© 2012, 2014 Interface Corporation. All rights reserved.28


GPC-MA001 Help for Windows3.8.2 メッセージ 受 信メッセージ 受 信 は 自 動 的 に 行 われ、デバイスドライバ 内 部 のバッファに 蓄 えられます。CanReceiveMessage 関 数 はこのバッファから 受 信 メッセージを 取 り 出 します。3.8.3 動 作 状 態 モニタリングCanGetStatus 関 数 で 動 作 状 態 のステータスをモニタリングします。また、CanGetErrorEvent 関 数 で、CANバス 上 で 発 生 したエラーの 情 報 を 取 得 することが 出 来 ま3.8.4 イベント/コールバック 機 能割 り 込 み 発 生 時 に 呼 ばれるコールバック 関 数 を 登 録 します。割 り 込 みとしては 下 記 を 発 生 させることができます。項 目エラーFIFO がオーバーフローし、エラー 情 報 を 取 りこぼし 検 出 。オーバーランエラーが 発 生 し、 受 信 データを 取 りこぼし 検 出 。送 信 周 期 よりもデータ 送 信 時 間 が 長 いため、 周 期 送 信 が 停 止 検 出バスステータスの 変 化 (エラーアクティブ、エラーパッシブ、バスオフ) 検 出 。受 信 バッファに 1 つ 以 上 の 受 信 メッセージが 蓄 えられました。エラーバッファに 1 つ 以 上 のエラーが 蓄 えられました。送 信 バッファ 内 の 未 送 信 データがなくなりました。送 信 、 受 信 いずれかのエラーがリミット 値 を 越 えました受 信 バッファがいっぱいになりました。エラーバッファがいっぱいになりました。© 2012, 2014 Interface Corporation. All rights reserved.29


GPC-MA001 Help for Windows第 4 章 導 入 方 法4.1 インストール 手 順README.HTM のインストール 方 法 を 参 照 してください。4.2 実 行 手 順 (サンプリング)基 本 的 な 制 御 の 手 順 は 以 下 の 通 りです( 記 述 例 は C 言 語 です)。GPC-MA001 の API を C 言 語 から 使 用 する 場 合 、ソースコードの 先 頭 部 分 で 関 数 定 義 が 記 載 されたヘッダファイル(ifma.h)をインクルードする 必 要 があります。#include "ifma.h"各 種 API 関 数 を 使 用 する 為 には、デバイスを MaOpen 関 数 で 初 期 化 します。初 期 化 が 正 常 終 了 後 、 取 得 したデバイスハンドルを 各 種 API に 指 定 することで、デバイスの 制 御が 可 能 となります。オープンに 失 敗 した 場 合 は 戻 り 値 として INVALID_HANDLE_VALUE(-1)が 返 されますので、 戻 り 値を 確 認 してエラー 処 理 を 行 います。処 理 が 完 了 後 、MaClose 関 数 でデバイスの 終 了 処 理 を 行 います。アプリケーションでは、 必 ずクローズ 処 理 を 行 ってから 終 了 してください。HANDLE DeviceHandle;INT Ret;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);if (DeviceHandle == INVALID_HANDLE_VALUE){// オープンエラー 時 の 処 理return -1;}:Ret = MaClose(DeviceHandle);if (Ret != IFMA_ERROR_SUCCESS){return Ret;}© 2012, 2014 Interface Corporation. All rights reserved.30


GPC-MA001 Help for Windows※ 以 降 の 記 載 例 では 説 明 の 為 にエラー 処 理 を 外 して 手 順 を 簡 略 化 しています。実 際 のプログラムを 作 成 する 際 は、 戻 り 値 を 確 認 してエラー 処 理 を 行 ってください。4.2.1 一 定 周 期 サンプリングMaSetSyncLine 関 数 で 同 期 ラインに 対 するトリガ 条 件 を 設 定 します。MaSetGeneralTimer 関 数 でタイマの 設 定 を 行 います。MaSetSamplingConfig 関 数 でサンプリング 条 件 の 設 定 を 行 います。アナログ 入 力 条 件 の 設 定 を 行 います。カウンタ 条 件 の 設 定 を 行 います。MaSetSamplingBuffer 関 数 でサンプリングデータを 転 送 するバッファの 設 定 を 行 います。MaStartSampling 関 数 でサンプリングのスタートを 行 います。MaSoftTrigger 関 数 でソフトトリガを 発 行 します。MaGetSamplingStatus 関 数 でサンプリング 状 態 を 取 得 し、サンプリング 停 止 になるまで 待 機 させます。HANDLE DeviceHandle;INT Ret;ULONG StartTrigger;ULONG StopTrigger;ULONG TimerTrigger;MASMPLCONF SmplConf;ULONG i;ULONG ChCount;ADCHREQ pChReq[4];// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// 同 期 ライン 0 の 設 定StartTrigger = MA_SYNC0_TRG;Ret = MaSetSyncLine(DeviceHandle, StartTrigger, MA_TRG_SOFT0);// // 同 期 ライン 1 の 設 定StopTrigger = MA_SYNC1_TRG;Ret = MaSetSyncLine(DeviceHandle, StopTrigger, MA_TRG_SMPLNUM);// // 同 期 ライン 2 の 設 定TimerTrigger = MA_SYNC2_TRG;Ret = MaSetSyncLine(DeviceHandle, TimerTrigger, MA_TRG_TIMER0);// タイマの 設 定 100us ごとにトリガを 出 す( 同 期 ライン 2 用 )Ret = MaSetGeneralTimer(DeviceHandle, MA_TIMER0, 10);// サンプリングクロックの 設 定Ret = MaSetClockSource(DeviceHandle, TimerTrigger);© 2012, 2014 Interface Corporation. All rights reserved.31


GPC-MA001 Help for Windows// サンプリング 条 件 の 設 定SmplConf.SamplingMode = MA_NORMAL_SAMPLING;SmplConf.StartTrigger = StartTrigger;SmplConf.StopTrigger = StopTrigger;SmplConf.SmplNum = SMPL_NUM;SmplConf.PreSmplNum = 0;SmplConf.RepeatNum = REP_NUM;SmplConf.BufferMode = MA_APPEND;SmplConf.SmplEventNum = 0;Ret = MaSetSamplingConfig(DeviceHandle, &SmplConf);// チャンネル/レンジの 設 定ChCount = 4;for (i = 0; i < ChCount; i++) {pChReq[i].InputMode = AD_INPUT_SINGLE;pChReq[i].Channel = i+1;pChReq[i].Range = AD_RNG_10V;pChReq[i].AcCoupling = AD_COUPLING_OFF;}Ret = AdSetChRange(DeviceHandle, ChCount, pChReq);// カウンタリセットRet = CntReset(DeviceHandle, Channel);// カウンタモードの 設 定// ゲート 信 号 付 き 単 相 パルス 1 逓 倍 モード カウンタ UPRet = CntSetCountMode(DeviceHandle, 1, CNT_COUNTMODE1,CNT_UP_COUNT, CNT_Z_LOGIC_LOW,CNT_CLEARMODE0, 0x00);// カウンタスタートストップトリガの 設 定Ret = CntSetTrigger(DeviceHandle, 1, StartTrigger, StopTrigger, MA_NONE_TRG);// サンプリングバッファの 設 定Buffer = (PMASMPLDATA)calloc((SMPL_NUM * REP_NUM), sizeof(MASMPLDATA));nRet = MaSetSamplingBuffer(DeviceHandle, Buffer,(SMPL_NUM * REP_NUM * sizeof(MASMPLDATA)));// サンプリングスタートnRet = MaStartSampling(DeviceHandle);// ソフトトリガnRet = MaSoftTrigger(DeviceHandle, MA_TRG_SOFT0);// サンプリング 状 態 取 得do {nRet = MaGetSamplingStatus(hDeviceHandle, &SmplStatus);© 2012, 2014 Interface Corporation. All rights reserved.32


GPC-MA001 Help for Windowsif (SmplStatus.SmplStatus == MA_STATUS_STOP_SAMPLING) break;Sleep(100);} while(!kbhit());// データの 表 示for (i = 0; i < SMPL_NUM; i++) {printf("%ld -> %ld AD(%lxh %lxh %lxh %lxh) CNT:%lxh DI:%lxh TRG:%lxh %ld\n",i,Buffer[i].TimeStamp,Buffer[i].AD1Data,Buffer[i].AD2Data,Buffer[i].AD3Data,Buffer[i].AD4Data,Buffer[i].CounterData,Buffer[i].DiData,Buffer[i].EventTrgLog,Buffer[i].SmplTimeStamp);}// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.33


GPC-MA001 Help for Windows4.2.2 割 り 込 みコールバックMaSetEventMask 関 数 にて 発 生 させる 割 り 込 み 要 因 を 設 定 します。SMP_STARTSMP_STOPSMP NUMSMPERSYNC0SYNC1SYNC2SYNC3SYNC4SYNC5SYNC6SYNC7TIME1TIME2TIME3TIME4サンプリング 開 始 割 り 込 み 検 出サンプリング 終 了 割 り 込 み 検 出サンプリング 指 定 件 数 割 り 込 み 検 出サンプリングトリガ 重 複 割 り 込 み 検 出内 部 同 期 トリガ 0 割 り 込 み 検 出内 部 同 期 トリガ 1 割 り 込 み 検 出内 部 同 期 トリガ 2 割 り 込 み 検 出内 部 同 期 トリガ 3 割 り 込 み 検 出内 部 同 期 トリガ 4 割 り 込 み 検 出内 部 同 期 トリガ 5 割 り 込 み 検 出内 部 同 期 トリガ 6 割 り 込 み 検 出内 部 同 期 トリガ 7 割 り 込 み 検 出汎 用 タイマ 1 割 り 込 み 検 出汎 用 タイマ 2 割 り 込 み 検 出汎 用 タイマ 3 割 り 込 み 検 出汎 用 タイマ 4 割 り 込 み 検 出MaSetEvent 関 数 で 割 り 込 みが 発 生 した 際 に 呼 び 出 されるコールバック 関 数 を 登 録 します。発 生 させる 要 因 が 発 生 するとコールバック 関 数 が 呼 び 出 される 状 態 となります。このコールバック 関 数 内 に 処 理 を 記 述 することで、 割 り 込 みを 通 知 することができます。コールバック 関 数 を 解 除 する 際 は、MaKillEvent 関 数 を 実 行 します。MaKillEvent 関 数 で 要 因 を 全 て 無 効 にすると 要 因 は 発 生 しなくなります。void CALLBACK EventProc(DWORD pEventStatus, PVOID dwUser){// 割 り 込 み 発 生 時 の 処 理}HANDLE DeviceHandle;INT Ret;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);© 2012, 2014 Interface Corporation. All rights reserved.34


GPC-MA001 Help for Windows// イベントマスクの 解 除EventMask = SMP_START;Ret = MaSetEventMask (DeviceHandle, EventMask);// コールバック 関 数 の 登 録Ret = MaSetEvent (DeviceHandle, NULL, (LPMACALLBACK)EventProc, 0);// コールバック 関 数 の 解 除Ret = MaKillEvent (DeviceHandle);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.35


GPC-MA001 Help for Windows4.2.3 割 り 込 みイベントMaSetEventMask 関 数 にて 発 生 される 割 り 込 み 要 因 を 設 定 します。SMP_STARTSMP_STOPSMP NUMSMPERSYNC0SYNC1SYNC2SYNC3SYNC4SYNC5SYNC6SYNC7TIME1TIME2TIME3TIME4サンプリング 開 始 割 り 込 み 検 出サンプリング 終 了 割 り 込 み 検 出サンプリング 指 定 件 数 割 り 込 み 検 出サンプリングトリガ 重 複 割 り 込 み 検 出内 部 同 期 トリガ 0 割 り 込 み 検 出内 部 同 期 トリガ 1 割 り 込 み 検 出内 部 同 期 トリガ 2 割 り 込 み 検 出内 部 同 期 トリガ 3 割 り 込 み 検 出内 部 同 期 トリガ 4 割 り 込 み 検 出内 部 同 期 トリガ 5 割 り 込 み 検 出内 部 同 期 トリガ 6 割 り 込 み 検 出内 部 同 期 トリガ 7 割 り 込 み 検 出汎 用 タイマ 1 割 り 込 み 検 出汎 用 タイマ 2 割 り 込 み 検 出汎 用 タイマ 3 割 り 込 み 検 出汎 用 タイマ 4 割 り 込 み 検 出CreateEvent でイベントハンドルを 作 成 し MaSetEvent 関 数 で 登 録 することで 設 定 した 要 因 が 発生 した 際 にイベントが 有 効 になります。登 録 したイベントハンドルは WaitForSingleObject などを 使 用 して、ハンドルが 有 効 になるのを 待 つことが 可 能 です。イベントハンドルの 解 除 を 行 う 場 合 は MaKillEvent 関 数 を 実 行 します。HANDLE DeviceHandle;HANDLE EventHandle = CreateEvent(NULL, FALSE, FALSE, NULL);INT Ret;DWORD EventMask;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// イベントマスクの 解 除EventMask = SMP_START;Ret = MaSetEventMask (DeviceHandle, EventMask);// イベントハンドルの 登 録Ret = MaSetEvent (DeviceHandle, EventHandle, NULL, 0);© 2012, 2014 Interface Corporation. All rights reserved.36


GPC-MA001 Help for Windows// イベントハンドルが 有 効 になるのを 待 つ(10 秒 間 )if (WaitForSingleObject(EventHandle, 10000) == WAIT_OBJECT_0){// 割 り 込 み 発 生 時 の 処 理}// コールバック 関 数 の 解 除Ret = MaKillEvent (DeviceHandle);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.37


GPC-MA001 Help for Windows4.3 実 行 手 順 (アナログ 入 力 )4.3.1 1 件 のアナログ 入 力AdSetChRange 関 数 でチャンネルに 対 するレンジ/ 入 力 仕 様 /カップリングの 設 定 を 行 います。アナログ 入 力 データの 取 得 は、AdInputAD 関 数 で 行 います。HANDLE DeviceHandle;INT Ret;ULONG i;ULONG ChCount;ADCHREQ ChReq_Ad[4];ULONG Data[4];// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// チャンネル/レンジの 設 定ChCount = 4;for (i = 0; i < ChCount; i++) {ChReq_Ad [i].InputMode = AD_INPUT_SINGLE;ChReq_Ad [i].Channel = i+1;ChReq_Ad [i].Range = AD_RNG_10V;ChReq_Ad [i].AcCoupling = AD_COUPLING_OFF;}nRet = AdSetChRange(DeviceHandle, ChCount, ChReq_Ad);// 1 件 入 力 を 取 得 しますnRet = AdInputAD(DeviceHandle, 4, Data);// 取 得 したデータを 表 示printf("CH1=%08Xh CH2=%08Xh CH3=%08Xh CH4=%08Xh\n", Data[0], Data[1], Data[2],Data[3]);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.38


GPC-MA001 Help for Windows4.3.2 割 り 込 みコールバック(アナログ 入 力 )AdSetEventMask 関 数 にて 発 生 させる 割 り 込 み 要 因 を 設 定 します。CH1 ATRG0CH1 ATRG1CH2 ATRG0CH2 ATRG1CH3 ATRG0CH3 ATRG1CH4 ATRG0CH4 ATRG1EXTチャンネル 1 のアナログトリガ 0 検 出チャンネル 1 のアナログトリガ 1 検 出チャンネル 2 のアナログトリガ 0 検 出チャンネル 2 のアナログトリガ 1 検 出チャンネル 3 のアナログトリガ 0 検 出チャンネル 3 のアナログトリガ 1 検 出チャンネル 4 のアナログトリガ 0 検 出チャンネル 4 のアナログトリガ 1 検 出外 部 トリガ 入 力 検 出AdSetEvent 関 数 で 割 り 込 みが 発 生 した 際 に 呼 び 出 されるコールバック 関 数 を 登 録 します。発 生 させる 要 因 が 発 生 するとコールバック 関 数 が 呼 び 出 される 状 態 となります。このコールバック 関 数 内 に 処 理 を 記 述 することで、 割 り 込 みを 通 知 することができます。コールバック 関 数 を 解 除 する 際 は、AdKillEvent 関 数 を 実 行 します。AdKillEvent 関 数 で 要 因 を 全 て 無 効 にすると 要 因 は 発 生 しなくなります。void CALLBACK EventProc(DWORD pEventStatus, PVOID dwUser){// 割 り 込 み 発 生 時 の 処 理}HANDLE DeviceHandle;INTRet;ULONG i;ULONG ChCount;ADCHREQ pChReq_Ad[4];ATRIGREQ pATrigChReq[4];// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// チャンネル/レンジの 設 定ChCount = 4;for (i = 0; i < ChCount; i++) {pChReq_Ad [i].InputMode = AD_INPUT_SINGLE;pChReq_Ad [i].Channel = i+1;pChReq_Ad [i].Range = AD_RNG_10V;pChReq_Ad [i].AcCoupling = AD_COUPLING_OFF;}© 2012, 2014 Interface Corporation. All rights reserved.39


GPC-MA001 Help for WindowsRet = AdSetChRange(hDeviceHandle, ChCount, pChReq_Ad);// アナログトリガ 条 件 の 設 定for (i = 0; i < ChCount; i++) {pATrigChReq[i].Channel = i+1;pATrigChReq[i].TrigLevel1 = 0x333333;pATrigChReq[i].Hysteresis1 = 0x00f0;pATrigChReq[i].TrigLevel2 = 0xCCCCCC;pATrigChReq[i].Hysteresis2 = 0x00f0;}Ret = AdSetAnalogTrigger(hDeviceHandle, 4, pATrigChReq, 0x00);// マスクの 設 定 (CH1 TRG0 UP)Ret = AdSetEventMask(hDeviceHandle, 0x00000001);// コールバック 関 数 の 登 録Ret = AdSetEvent(DeviceHandle, NULL,EventProc, 0);// アナログ 入 力 待 ち(10 秒 間 )Sleep(10000);// コールバック 関 数 の 解 除Ret = AdKillEvent (DeviceHandle);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.40


GPC-MA001 Help for Windows4.3.3 割 り 込 みイベント(アナログ 入 力 )AdSetEventMask 関 数 にて 発 生 される 割 り 込 み 要 因 を 設 定 します。CH1 ATRG0CH1 ATRG1CH2 ATRG0CH2 ATRG1CH3 ATRG0CH3 ATRG1CH4 ATRG0CH4 ATRG1EXTチャンネル 1 のアナログトリガ 0 検 出チャンネル 1 のアナログトリガ 1 検 出チャンネル 2 のアナログトリガ 0 検 出チャンネル 2 のアナログトリガ 1 検 出チャンネル 3 のアナログトリガ 0 検 出チャンネル 3 のアナログトリガ 1 検 出チャンネル 4 のアナログトリガ 0 検 出チャンネル 4 のアナログトリガ 1 検 出外 部 トリガ 入 力 検 出CreateEvent でイベントハンドルを 作 成 し AdSetEvent 関 数 で 登 録 することで 設 定 した 要 因 が 発生 した 際 にイベントが 有 効 になります。登 録 したイベントハンドルは WaitForSingleObject などを 使 用 して、ハンドルが 有 効 になるのを 待 つことが 可 能 です。イベントハンドルの 解 除 を 行 う 場 合 は AdKillEvent 関 数 を 実 行 します。HANDLE DeviceHandle;HANDLE EventHandle = CreateEvent(NULL, FALSE, FALSE, NULL);INTRet;ULONG i;ULONG ChCount;ADCHREQ pChReq_Ad[4];ATRIGREQ pATrigChReq[4];// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// チャンネル/レンジの 設 定ChCount = 4;for (i = 0; i < ChCount; i++) {pChReq_Ad [i].InputMode = AD_INPUT_SINGLE;pChReq_Ad [i].Channel = i+1;pChReq_Ad [i].Range = AD_RNG_10V;pChReq_Ad [i].AcCoupling = AD_COUPLING_OFF;}Ret = AdSetChRange(hDeviceHandle, ChCount, pChReq_Ad);© 2012, 2014 Interface Corporation. All rights reserved.41


GPC-MA001 Help for Windows// アナログトリガ 条 件 の 設 定for (i = 0; i < ChCount; i++) {pATrigChReq[i].Channel = i+1;pATrigChReq[i].TrigLevel1 = 0x333333;pATrigChReq[i].Hysteresis1 = 0x00f0;pATrigChReq[i].TrigLevel2 = 0xCCCCCC;pATrigChReq[i].Hysteresis2 = 0x00f0;}Ret = AdSetAnalogTrigger(hDeviceHandle, 4, pATrigChReq, 0x00);// マスクの 設 定 (CH1 TRG0 UP)Ret = AdSetEventMask(hDeviceHandle, 0x00000001);// イベントハンドルの 登 録Ret = AdSetEvent(DeviceHandle, EventHandle, NULL, 0);// イベントハンドルが 有 効 になるのを 待 つ(10 秒 間 )if (WaitForSingleObject(EventHandle, 10000) == WAIT_OBJECT_0){// 割 り 込 み 発 生 時 の 処 理}// コールバック 関 数 の 解 除Ret = AdKillEvent (DeviceHandle);// イベントハンドルを 開 放ResetEvent(EventHandle);CloseHandle(EventHandle);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.42


GPC-MA001 Help for Windows4.4 実 行 手 順 (アナログ 出 力 )4.4.1 1 件 のアナログ 出 力DaSetChRange 関 数 でチャンネルに 対 するレンジの 設 定 を 行 います。アナログ 出 力 データの 設 定 は、DaOutputDA 関 数 で 行 います。HANDLE DeviceHandle;INT Ret;ULONG ChCount;DACHREQ ChReq_DA;unsigned short Data;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// チャンネル/レンジの 設 定ChCount = 1;ChReq_DA.Channel = 1;ChReq_DA.Range = DA_RNG_10V;Ret = DaSetChRange(DeviceHandle, ChCount, & ChReq_DA);// 1 件 出 力 を 行 いますData = 0xFFFF;Ret = DaOutputDA(DeviceHandle, 1, &Data);Sleep(1);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.43


GPC-MA001 Help for Windows4.4.2 連 続 出 力MaSetSyncLine 関 数 で 同 期 ラインに 対 するトリガ 条 件 を 設 定 します。MaSetGeneralTimer 関 数 でタイマの 設 定 を 行 います。DaSetClockSource 関 数 でクロックを 指 定 します。DaSetOutputConfig 関 数 で 連 続 出 力 条 件 の 設 定 を 行 います。アナログ 出 力 条 件 の 設 定 を 行 います。DaSetOutputData 関 数 で 連 続 出 力 データの 設 定 を 行 います。DaStartOutput 関 数 で 連 続 出 力 のスタートを 行 います。DaGetOutputStatus 関 数 で 連 続 出 力 状 態 を 取 得 し、 連 続 出 力 停 止 になるまで 待 機 させます。HANDLE DeviceHandle;INT Ret;ULONG ChCount;DACHREQ ChReq;OUTPUTCONF OutputConf;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// -------------------------------------------------------// トリガ 設 定// -------------------------------------------------------// // 同 期 ライン 0 の 設 定nRet = MaSetSyncLine(hDeviceHandle, MA_SYNC0_TRG, MA_TRG_SOFT0);// // 同 期 ライン 1 の 設 定nRet = MaSetSyncLine(hDeviceHandle, MA_SYNC1_TRG, MA_TRG_SMPLNUM);// // 同 期 ライン 2 の 設 定nRet = MaSetSyncLine(hDeviceHandle, MA_SYNC2_TRG, MA_TRG_TIMER0);// タイマの 設 定 100us ごとにトリガを 出 す( 同 期 ライン 2 用 )nRet = MaSetGeneralTimer(hDeviceHandle, MA_TIMER0, 9);nRet = DaSetClockSource(hDeviceHandle, MA_SYNC2_TRG);// 連 続 出 力 条 件 設 定OutputConf.StartTrigger = MA_SYNC0_TRG;OutputConf.StopTrigger = MA_SYNC2_TRG;OutputConf.OutputNum = 1024;OutputConf.RepeatNum = 1;OutputConf.EventNum = 0;nRet = DaSetOutputConfig(hDeviceHandle, &OutputConf);// -------------------------------------------------------// アナログ 出 力 設 定© 2012, 2014 Interface Corporation. All rights reserved.44


GPC-MA001 Help for Windows// -------------------------------------------------------// チャンネル/レンジの 設 定ChCount = 1;ChReq.Channel = 1;ChReq.Range = DA_RNG_10V;Ret = DaSetChRange(DeviceHandle, ChCount, &ChReq);// -------------------------------------------------------// アナログ 出 力 データ 設 定// -------------------------------------------------------// Create the output data.for (i = 0; i < OutputConf.OutputNum; i++) {if (i%2) {wSmplData[i] = 0xFFFF;} else {wSmplData[i] = 0x0000;}}// バッファのクリアnRet = DaClearOutputData(hDeviceHandle);// 連 続 出 力 データの 設 定nRet = DaSetOutputData(hDeviceHandle, wSmplData, OutputConf.OutputNum);// -------------------------------------------------------// 連 続 出 力 スタート// -------------------------------------------------------// 連 続 出 力 スタートnRet = DaStartOutput(hDeviceHandle);// ソフトトリガnRet = MaSoftTrigger(hDeviceHandle, MA_TRG_SOFT0);// -------------------------------------------------------// 待 機// -------------------------------------------------------// 連 続 出 力 状 態 取 得do {nRet = DaGetOutputStatus(hDeviceHandle, &SmplStatus);if (SmplStatus.OutputStatus == MA_STATUS_STOP_SAMPLING) break;Sleep(100);} while(!kbhit());// 連 続 出 力 が 停 止 していない 場 合if (SmplStatus.OutputStatus != MA_STATUS_STOP_SAMPLING) {nRet = DaStopOutput(hDeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.45


GPC-MA001 Help for Windows}// デバイスをクローズRet = MaClose(DeviceHandle);4.4.3 割 り 込 みコールバックDaSetEventMask 関 数 にて 発 生 させる 割 り 込 み 要 因 を 設 定 します。SPSSPEFIFO EMP連 続 出 力 開 始 割 り 込 み 検 出連 続 出 力 終 了 割 り 込 み 検 出FIFO Empty 割 り 込 み 検 出DaSetEvent 関 数 で 割 り 込 みが 発 生 した 際 に 呼 び 出 されるコールバック 関 数 を 登 録 します。発 生 させる 要 因 が 発 生 するとコールバック 関 数 が 呼 び 出 される 状 態 となります。このコールバック 関 数 内 に 処 理 を 記 述 することで、 割 り 込 みを 通 知 することができます。コールバック 関 数 を 解 除 する 際 は、DaKillEvent 関 数 を 実 行 します。DaKillEvent 関 数 で 要 因 を 全 て 無 効 にすると 要 因 は 発 生 しなくなります。void CALLBACK EventProc(DWORD pEventStatus, PVOID dwUser){// 割 り 込 み 発 生 時 の 処 理}HANDLE DeviceHandle;INT Ret;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// イベントマスク 解 除Ret = DaSetEventMask(hDeviceHandle, 0x02);// コールバック 関 数 の 登 録Ret = DaSetEvent (DeviceHandle, NULL, (LPDRCALLBACK)EventProc, 0);// コールバック 関 数 の 解 除Ret = DaKillEvent (DeviceHandle);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.46


GPC-MA001 Help for Windows4.4.4 割 り 込 みイベントDaSetEventMask 関 数 にて 発 生 される 割 り 込 み 要 因 を 設 定 します。SPSSPEFIFO EMP連 続 出 力 開 始 割 り 込 み 検 出連 続 出 力 終 了 割 り 込 み 検 出FIFO Empty 割 り 込 み 検 出CreateEvent でイベントハンドルを 作 成 し DaSetEvent 関 数 で 登 録 することで 設 定 した 要 因 が 発生 した 際 にイベントが 有 効 になります。登 録 したイベントハンドルは WaitForSingleObject などを 使 用 して、ハンドルが 有 効 になるのを 待 つことが 可 能 です。イベントハンドルの 解 除 を 行 う 場 合 は DaKillEvent 関 数 を 実 行 します。HANDLE DeviceHandle;HANDLE EventHandle = CreateEvent(NULL, FALSE, FALSE, NULL);INT Ret;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// イベントマスク 解 除Ret = DaSetEventMask(hDeviceHandle, 0x02);// イベントハンドルの 登 録Ret = DaSetEvent (DeviceHandle, EventHandle, NULL, 0);// イベントハンドルが 有 効 になるのを 待 つ(10 秒 間 )if (WaitForSingleObject(EventHandle, 10000) == WAIT_OBJECT_0){// 割 り 込 み 発 生 時 の 処 理}// コールバック 関 数 の 解 除Ret = DaKillEvent (DeviceHandle);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.47


GPC-MA001 Help for Windows4.5 実 行 手 順 (デジタル 入 出 力 )※マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 使 用 できます。4.5.1 汎 用 入 力DiInputDI 関 数 を 実 行 することで、 指 定 した 変 数 に 汎 用 入 力 端 子 状 態 が 格 納 されます。HANDLE DeviceHandle;INT Ret;unsigned long DiData;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// 汎 用 入 力 値 を 取 得Ret = DiInputDI(hDeviceHandle, &DiData);// デバイスをクローズRet = MaClose(DeviceHandle);4.5.2 汎 用 出 力DoOutputDO 関 数 を 実 行 することで、 指 定 した 値 で 汎 用 出 力 端 子 状 態 を 制 御 が 可 能 です。出 力 を 開 始 後 、MaClose 関 数 でリセットを 有 効 にすると、 汎 用 出 力 の 状 態 は 初 期 状 態 に 戻 ります。HANDLE DeviceHandle;INT Ret;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// 汎 用 出 力 制 御Ret = DoOutputDO(DeviceHandle, 0x03);// 10 秒 間 のスリープSleep(10000);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.48


GPC-MA001 Help for Windows4.5.3 割 り 込 みコールバックDiSetEventMask 関 数 にて 発 生 させる 割 り 込 み 要 因 を 設 定 します。IN1IN2IN3IN4IN1 のエッジ 割 り 込 み 検 出IN2 のエッジ 割 り 込 み 検 出IN3 のエッジ 割 り 込 み 検 出IN4 のエッジ 割 り 込 み 検 出DiSetEvent 関 数 で 割 り 込 みが 発 生 した 際 に 呼 び 出 されるコールバック 関 数 を 登 録 します。発 生 させる 要 因 が 発 生 するとコールバック 関 数 が 呼 び 出 される 状 態 となります。このコールバック 関 数 内 に 処 理 を 記 述 することで、 割 り 込 みを 通 知 することができます。コールバック 関 数 を 解 除 する 際 は、DiKillEvent 関 数 を 実 行 します。DiKillEvent 関 数 で 要 因 を 全 て 無 効 にすると 要 因 は 発 生 しなくなります。void CALLBACK EventProc(DWORD EventStatus, PVOID dwUser){printf("Callback(EventStatus:%lxh)\n", EventStatus);}HANDLE DeviceHandle;INT Ret;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// エッジの 設 定Ret = DiSetTrgEdge(hDeviceHandle, 0x01);// マスクの 設 定 (IN1)Ret = DiSetEventMask(hDeviceHandle, 0x01);// コールバック 関 数 の 登 録Ret = DiSetEvent (DeviceHandle, NULL, EventProc, 0);// コールバック 関 数 の 解 除Ret = DiKillEvent (DeviceHandle);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.49


GPC-MA001 Help for Windows4.5.4 割 り 込 みイベントDiSetEventMask 関 数 にて 発 生 される 割 り 込 み 要 因 を 設 定 します。IN1 IN1 のエッジ 割 り 込 み 検 出IN2 IN2 のエッジ 割 り 込 み 検 出IN3 IN3 のエッジ 割 り 込 み 検 出IN4 IN4 のエッジ 割 り 込 み 検 出CreateEvent でイベントハンドルを 作 成 し DiSetEvent 関 数 で 登 録 することで 設 定 した 要 因 が 発生 した 際 にイベントが 有 効 になります。登 録 したイベントハンドルは WaitForSingleObject などを 使 用 して、ハンドルが 有 効 になるのを 待 つことが 可 能 です。イベントハンドルの 解 除 を 行 う 場 合 は DiKillEvent 関 数 を 実 行 します。HANDLE DeviceHandle;HANDLE EventHandle = CreateEvent(NULL, FALSE, FALSE, NULL);INT Ret;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// エッジの 設 定Ret = DiSetTrgEdge(hDeviceHandle, 0x01);// マスクの 設 定 (IN1)Ret = DiSetEventMask(hDeviceHandle, 0x01);// イベントハンドルの 登 録Ret = DiSetEvent (DeviceHandle, EventHandle, NULL, 0);// イベントがシグナルになるまで 待 機 (タイムアウト:5000ms)Ret = WaitForSingleObject(hEvent, 5000);if (Ret == WAIT_FAILED) {printf("WaitForSingleObject faild\n");return -1;} else if (Ret == WAIT_TIMEOUT) {printf("WaitForSingleObject timeout\n");return -1;}// コールバック 関 数 の 解 除Ret = DiKillEvent (DeviceHandle);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.50


GPC-MA001 Help for Windows4.6 実 行 手 順 (カウンタ 入 力 )※マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 使 用 できます。4.6.1 カウンタ 入 力CntReset 関 数 でカウンタリセットを 行 います。CntSetCountMode 関 数 でカウンタモードの 設 定 を 行 います。CntStart 関 数 でカウンタをスタートさせます。カウンタ 値 の 取 得 については、CntGetCounter 関 数 でカウンタ 値 を 取 得 します。HANDLE DeviceHandle;INT Ret;INT Channel = 1;DWORD pCounter;DWORD CntStatus;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// カウンタリセットRet = CntReset(DeviceHandle, Channel);// カウンタモードの 設 定// ゲート 信 号 付 き 単 相 パルス 1 逓 倍 モード カウンタ UPRet = CntSetCountMode(DeviceHandle, Channel, CNT_COUNTMODE1,CNT_UP_COUNT, CNT_Z_LOGIC_LOW,CNT_CLEARMODE0, 0x00);// カウンタスタートnRet = CntStart(DeviceHandle, Channel);// カウンタ 値 を 取 得 / 表 示do {Ret = CntGetStatus(DeviceHandle, Channel, &CntStatus);if ((CntStatus & 0x01) == 0x01) {Ret = CntGetCounter(DeviceHandle, Channel, &pCounter);printf("CntStatus:%lxh Counter:%lxh\r", CntStatus, pCounter);}} while(!kbhit());// カウンタストップRet = CntStop(DeviceHandle, Channel);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.51


GPC-MA001 Help for Windows4.6.2 割 り 込 みコールバックCntSetEventMask 関 数 にて 発 生 させる 割 り 込 み 要 因 を 設 定 します。CNTMTC/BCNTERRカウンタ 一 致 検 出キャリー/ボロー 検 出カウンタ 異 常 入 力 検 出CntSetEvent 関 数 で 割 り 込 みが 発 生 した 際 に 呼 び 出 されるコールバック 関 数 を 登 録 します。発 生 させる 要 因 が 発 生 するとコールバック 関 数 が 呼 び 出 される 状 態 となります。このコールバック 関 数 内 に 処 理 を 記 述 することで、 割 り 込 みを 通 知 することができます。コールバック 関 数 を 解 除 する 際 は、CntKillEvent 関 数 を 実 行 します。CntKillEvent 関 数 で 要 因 を 全 て 無 効 にすると 要 因 は 発 生 しなくなります。void CALLBACK EventProc(INT Channel, DWORD EventStatus, PVOID dwUser){printf("Callback(Channel:%d EventStatus:%lxh)\n", Channel, EventStatus);}HANDLE DeviceHandle;INT Ret;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// マスクの 設 定 (カウンタ 一 致 検 出 /キャリー/ボロー 検 出 /カウンタ 異 常 入 力 検 出 )Ret = CntSetEventMask(hDeviceHandle, 1, 0x07);// コールバック 関 数 の 登 録Ret = CntSetEvent(DeviceHandle, NULL, EventProc, 0);// コールバック 関 数 の 解 除Ret = CntKillEvent (DeviceHandle);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.52


GPC-MA001 Help for Windows4.6.3 割 り 込 みイベントCntSetEventMask 関 数 にて 発 生 される 割 り 込 み 要 因 を 設 定 します。CNTMTC/BCNTERRカウンタ 一 致 検 出キャリー/ボロー 検 出カウンタ 異 常 入 力 検 出CreateEvent でイベントハンドルを 作 成 し CntSetEvent 関 数 で 登 録 することで 設 定 した 要 因 が発 生 した 際 にイベントが 有 効 になります。登 録 したイベントハンドルは WaitForSingleObject などを 使 用 して、ハンドルが 有 効 になるのを 待 つことが 可 能 です。イベントハンドルの 解 除 を 行 う 場 合 は CntKillEvent 関 数 を 実 行 します。HANDLE DeviceHandle;HANDLE EventHandle = CreateEvent(NULL, FALSE, FALSE, NULL);INT Ret;// IFMA1 をオープンDeviceHandle = MaOpen (“IFMA1”, 0);// マスクの 設 定 (カウンタ 一 致 検 出 /キャリー/ボロー 検 出 /カウンタ 異 常 入 力 検 出 )Ret = CntSetEventMask(hDeviceHandle, 1, 0x07);// イベントハンドルの 登 録Ret = CntSetEvent(DeviceHandle, EventHandle, NULL, 0);// イベントハンドルが 有 効 になるのを 待 つ(10 秒 間 )if (WaitForSingleObject(EventHandle, 10000) == WAIT_OBJECT_0){// 割 り 込 み 発 生 時 の 処 理}// コールバック 関 数 の 解 除Ret = CntKillEvent(DeviceHandle);// デバイスをクローズRet = MaClose(DeviceHandle);© 2012, 2014 Interface Corporation. All rights reserved.53


GPC-MA001 Help for Windows4.7 実 行 手 順 (CAN)※マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 使 用 できます。上 記 製 品 以 外 で CAN デバイスが 搭 載 されている 場 合 は、「GPC-4851」を 参 照 下 さい。基 本 的 なデバイス 制 御 の 手 順 は 以 下 の 通 りです。4.7.1 初 期 化ポートを CanOpenPort 関 数 で 初 期 化 します。初 期 化 が 正 常 終 了 すると、 以 後 、ポートへのアクセスが 可 能 となります。4.7.2 初 期 設 定 ( 通 信 条 件 、アクセプタンスフィルタ)CanSetConfig 関 数 を 使 用 して 通 信 条 件 、アクセプタンスフィルタの 設 定 を 行 います。また、CanSetFifoTrigger 関 数 で FIFO トリガの 設 定 が 可 能 です。CanActivate 関 数 を 実 行 することで CAN バスに 接 続 され、メッセージの 送 受 信 が 可 能 になります。4.7.3 メッセージ 送 信CanSendMessage 関 数 を 使 用 してメッセージの 送 信 を 行 います。送 信 メッセージはデバイスドライバ 内 部 のバッファに 蓄 えられ、 順 次 送 信 が 行 われます。高 機 能 版 、バスマスタ 版 CAN 製 品 では、CanSendMessage 関 数 に 渡 す CAN_MESSAGE 構 造 体 の ulTimeメンバにディレイ 時 間 を 設 定 することができます。また、CanCyclicSendMessage 関 数 により、データの 周 期 送 信 ができます。CanStopCyclicSendMessage 関 数 により、 周 期 送 信 を 停 止 します。送 信 が 完 了 したメッセージは、 送 信 完 了 時 間 が CAN_MESSAGE 構 造 体 の ulTime メンバに 格 納 され、送 信 バッファ 内 に 残 ります。 送 信 完 了 時 間 については 構 造 体 の 説 明 を 参 照 して 下 さい。CanGetCompletionMessage 関 数 で、 送 信 が 完 了 したメッセージを 取 得 します。送 信 バッファ 内 では、 送 信 完 了 メッセージ 数 はカウントされません。 未 送 信 メッセージのみがカウントされます。CanSendMessage 関 数 により、5 つのメッセージを 送 信 バッファに 挿 入 した 場 合 。送 信 バッファ 内 の 3 つのメッセージが 送 信 完 了 した 場 合 。送信バッファ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージulTXBCount = 5送信バッファ未 送 信 メッセージ未 送 信 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージulTXBCount = 2そのため、 未 送 信 データが 0 になった 時 点 で、CAN_EVENT_TXB_IS_EMPTY( 送 信 バッファから、未 送 信 データがなくなった)イベントが 発 生 します。© 2012, 2014 Interface Corporation. All rights reserved.54


GPC-MA001 Help for Windows送 信 バッファはリングバッファになっており、 未 送 信 メッセージが 送 信 バッファを1 周 すると、送 信 完 了 メッセージを 上 書 きしてしまいますのでご 注 意 ください。この 時 点 で、CanSendMessage 関 数 により、4 つのメッセージを 送 信 バッファに 追 加 するとします。送信バッファ未 送 信 メッセージ未 送 信 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージ未 送 信 メッセージが 送 信 バッファの最 後 まで 挿 入 され、さらに 挿 入 しようとすると・・・送信バッファ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージリングバッファなので、 次 に 挿 入 されるメッセージが、 送 信 完 了 メッセージを 上 書 きしてしまいます。送信バッファ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ未 送 信 メッセージ送 信 完 了 メッセージ送 信 完 了 メッセージ未 送 信 メッセージまた、 送 信 完 了 メッセージは、 送 信 バッファサイズを 変 更 するとクリアされますので、 送 信 完了 メッセージを 全 て 取 り 出 してから、 送 信 バッファサイズを 変 更 するようにしてください。4.7.4 メッセージ 受 信メッセージ 受 信 は 自 動 的 に 行 われ、デバイスドライバ 内 部 のバッファに 蓄 えられます。CanReceiveMessage 関 数 はこのバッファから 受 信 メッセージを 取 り 出 します。4.7.5 動 作 状 態 モニタリングCanGetStatus 関 数 で 動 作 状 態 のステータスをモニタリングします。また、CanGetErrorEvent 関 数 で、CAN バス 上 で 発 生 したエラーの 情 報 を 取 得 することが 出 来 ます。4.7.6 コールバック 関 数各 種 割 り 込 み 発 生 時 にコールバック 関 数 を 実 行 することができます。CanSetEvent 関 数 にて、コールバック 関 数 ・メッセージを 実 行 したい 要 因 を 設 定 します。CanSetEvent 関 数 でコールバック 関 数 ・メッセージの 登 録 を 行 います。4.7.7 終 了 処 理CanClosePort 関 数 で CAN <strong>インタフェース</strong>の 終 了 処 理 を 行 います。アプリケーションでは、 必 ずクローズ 処 理 を 行 ってから 終 了 してください。© 2012, 2014 Interface Corporation. All rights reserved.55


GPC-MA001 Help for Windows4.8 .NET 用 クラスライブラリの 参 照 方 法本 製 品 では、クラスライブラリのソースファイルを 用 意 しています。ソースコードをビルドしてクラスライブライリを 生 成 し、 参 照 することで、DLL 関 数 の 定 義 を 容易 にすることができます。(DLL 関 数 の 呼 び 出 しをカスタマイズしたい 場 合 は、クラスライブラリのソースを 参 照 してください)4.8.1 クラスライブラリの 作 成 方 法.NET において DLL 関 数 を 呼 び 出 すには、まずクラスライブラリを 用 意 する 必 要 があります。Visual C# .NET の 場 合Visual Studio を 起 動 し、 以 下 のプロジェクトファイルを 開 きます。AD/DA/DIO/カウンタの 場 合\interface\GPCMA001\samples\CS_NET\IFCMA\IFCMA.csprojこのプロジェクトをビルドすると、bin フォルダにクラスライブラリ IFCMA.dll が 作 成 されます。CAN の 場 合\interface\GPCMA001\samples\CS_NET\IFCCAN\IFCCAN.csprojこのプロジェクトをビルドすると、bin フォルダにクラスライブラリ IFCCAN.dll が 作 成 されます。Visual Basic .NET の 場 合Visual Studio を 起 動 し、 以 下 のプロジェクトファイルを 開 きます。AD/DA/DIO/カウンタの 場 合\interface\GPCMA001\samples\VB_NET\IFCMA\IFCMA.vbprojこのプロジェクトをビルドすると、bin フォルダにクラスライブラリ IFCMA.dll が 作 成 されます。CAN の 場 合\interface\GPCMA001\samples\VB_NET\IFCCAN\IFCCAN.vbprojこのプロジェクトをビルドすると、bin フォルダにクラスライブラリ IFCCAN.dll が 作 成 されます。© 2012, 2014 Interface Corporation. All rights reserved.56


GPC-MA001 Help for Windows4.8.2 クラスライブラリの 参 照Visual C# .NET, Visual Basic .NET の 場 合Visual Studio のメニューの「プロジェクト」の「 参 照 の 追 加 」を 選 択 してください。「 参 照 」ボタンをクリックして 参 照 したいクラスライブラリ DLL を 指 定 します。AD/DA/DIO/カウンタの 場 合\interface\GPCMA001\samples\CS_NET\IFCMA\bin\Release\IFCMA.dll\interface\GPCMA001\samples\VB_NET\IFCMA\bin\Relaase\IFCMA.dllCAN の 場 合\interface\GPCMA001\samples\CS_NET\IFCCAN\bin\Release\IFCCAN.dll\interface\GPCMA001\samples\VB_NET\IFCCAN\bin\Relaase\IFCCAN.dll「 選 択 されたコンポーネント」に 指 定 した DLL が 表 示 されます。「OK」ボタンをクリックすると 設 定 は 完 了 です。次 にソースのヘッダで 各 言 語 毎 に 下 記 のように InterfaceCorpDllWrap の 名 前 空 間 を 追 加 します。Visual C# .NET の 場 合using InterfaceCorpDllWrap;Visual Basic .NET の 場 合Imports InterfaceCorpDllWrapVisual C++ CLR プロジェクトの 場 合using namespace InterfaceCorpDllWrap※ Visual C# .NET または Visual Basic .NET のクラスライブラリを 参 照 してください。4.9 注 意 事 項■ 非 同 期 処 理 で 参 照 渡 しする 変 数 について各 関 数 はアンマネージ 関 数 です。非 同 期 処 理 を 使 用 する 際 は、ガーベジコレクションによりメモリの 開 放 ・ 移 動 があるタイミングで 発 生 します。それにより 関 数 内 で 保 持 しているポインタと、アプリケーション 内 での 変 数 のポインタでずれが 発 生 し、メモリ 破 壊 が 発 生 する 可 能 性 があります。対 策 例 については、サンプルプログラムを 参 照 してください。© 2012, 2014 Interface Corporation. All rights reserved.57


GPC-MA001 Help for Windows第 5 章 データ 形 式5.1 サンプリングoffsetビットアサイン0~3hタイムスタンプ4~7h アナログ 入 力 (チャンネル 1)8~Bh アナログ 入 力 (チャンネル 2)C~Fh アナログ 入 力 (チャンネル 3)10~13h アナログ 入 力 (チャンネル 4)14~17h カウンタ ※18~1Bh デジタル 入 力 ※1C~1Fhイベントトリガログ20~23hサンプリングトリガタイムスタンプ※ マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 値 を 取 得 できます。上 記 以 外 の 型 式 では 取 得 地 は 常 に 0 となります。ご 注 意 下 さい。5.1.1 タイムスタンプoffset ビットアサイン [7-0]00h 32bit タイムスタンプ [7-0]01h 32bit タイムスタンプ [15-8]02h 32bit タイムスタンプ [23-16]03h 32bit タイムスタンプ [31-24]※タイムスタンプのカウントアップは 1μs ごとになります。※タイムスタンプの 取 りえる 値 は 0 から 0xFFFFFFFF です。Max 値 まで 行 くと 再 度 0 からカウントアップされます。5.1.2 アナログ 入 力 (チャンネル x)offset ビットアサイン [7-0]04h, 08h, 0Ch, 10h ADx [7-0]05h, 09h, 0Dh, 11h ADx [15-8]06h, 0Ah, 0Eh, 12h ADx [23-16]07h, 0Bh, 0Fh, 13h 00h5.1.3 カウンタOffset ビットアサイン [7-0]14h 32bit カウンタ [7-0]15h 32bit カウンタ [15-8]16h 32bit カウンタ [23-16]17h 32bit カウンタ [31-24]© 2012, 2014 Interface Corporation. All rights reserved.58


GPC-MA001 Help for Windows5.1.4 デジタル 入 力offset ビットアサイン [7-0]18h DI8 DI7 DI6 DI5 DI4 DI3 DI2 DI119h00h1Ah00h1Bh00h5.1.5 イベントトリガログoffset ビットアサイン [7-0]1Ch timer3 timer2 timer1 timer0 soft3 soft2 soft1 soft01Dh adtrg4_1 adtrg4_0 adtrg3_1 adtrg3_0 adtrg2_1 adtrg2_0 adtrg1_1 adtrg1_01Eh cansnd canrsv cntnum cntupdw di4 di3 di2 di11Fh smptrg smperr 0 0 0 bmcnt exttrg extclkタイミングイベント説 明soft0 ソフトウェアライトタイミング 0 特 定 のレジスタをライトしたsoft1 ソフトウェアライトタイミング 1 特 定 のレジスタをライトしたsoft2 ソフトウェアライトタイミング 2 特 定 のレジスタをライトしたsoft3 ソフトウェアライトタイミング 3 特 定 のレジスタをライトしたtimer0 タイマ 0 一 致 タイミング タイマ 0 が 一 定 周 期 に 達 したtimer1 タイマ 1 一 致 タイミング タイマ 1 が 一 定 周 期 に 達 したtimer2 タイマ 2 一 致 タイミング タイマ 2 が 一 定 周 期 に 達 したtimer3 タイマ 3 一 致 タイミング タイマ 3 が 一 定 周 期 に 達 したadtrg1_0 CH1 アナログトリガタイミング 0 CH1 のアナログ 入 力 値 が 指 定 した 値 になった 0adtrg1_1 CH1 アナログトリガタイミング 1 CH1 のアナログ 入 力 値 が 指 定 した 値 になった 1adtrg2_0 CH2 アナログトリガタイミング 0 CH2 のアナログ 入 力 値 が 指 定 した 値 になった 0adtrg2_1 CH2 アナログトリガタイミング 1 CH2 のアナログ 入 力 値 が 指 定 した 値 になった 1adtrg3_0 CH3 アナログトリガタイミング 0 CH3 のアナログ 入 力 値 が 指 定 した 値 になった 0adtrg3_1 CH3 アナログトリガタイミング 1 CH3 のアナログ 入 力 値 が 指 定 した 値 になった 1adtrg4_0 CH4 アナログトリガタイミング 0 CH4 のアナログ 入 力 値 が 指 定 した 値 になった 0adtrg4_1 CH4 アナログトリガタイミング 1 CH4 のアナログ 入 力 値 が 指 定 した 値 になった 1di1 DI1 立 ち 上 がり 立 ち 下 がりタイミング ※1 デジタル 入 力 1 の 立 ち 上 がり、 立 ち 下 がりdi2 DI2 立 ち 上 がり 立 ち 下 がりタイミング ※1 デジタル 入 力 2 の 立 ち 上 がり、 立 ち 下 がりdi3 DI3 立 ち 上 がり 立 ち 下 がりタイミング ※1 デジタル 入 力 3 の 立 ち 上 がり、 立 ち 下 がりdi4 DI4 立 ち 上 がり 立 ち 下 がりタイミング ※1 デジタル 入 力 4 の 立 ち 上 がり、 立 ち 下 がりcntupdw カウンタアップダウンタイミング ※1 カウンタ 値 が 指 定 した 値 分 カウントアップ、ダウンしたcntnum カウンタ 一 致 タイミング ※1 カウンタ 値 が 指 定 したカウンタ 値 と 一 致 したcanrsv CAN 受 信 タイミング ※1 CAN データを 受 信 した( 送 信 データは 問 わない)cansnd CAN 送 信 タイミング ※1 CAN データを 送 信 した( 送 信 データは 問 わない)extclk 外 部 クロック 立 ち 上 がり 立 ち 下 がりタイミング外 部 クロックの 立 ち 上 がり、 立 ち 下 がり© 2012, 2014 Interface Corporation. All rights reserved.59


GPC-MA001 Help for Windowsexttrg 外 部 トリガの 立 ち 上 がり 立 ち 下 がりタイミ 外 部 トリガの 立 ち 上 がり、 立 ち 下 がりングbmcnt バスマスタ 転 送 件 数 一 致 タイミング バスマスタ 転 送 件 数 が 指 定 件 数 と 一 致 したsmperr サンプリングトリガ 重 複 1 サンプリング 周 期 の 間 にサンプリングトリガが 2 回 以 上 発 生 したsmptrg サンプリングトリガタイミング サンプリングトリガが 発 生 したこのビットが 立 っているとサンプリングトリガタイムスタンプの 値 が 有 効 になります※1 マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 使 用 できます※サンプリングトリガ 重 複 の 意 味一 定 周 期 サンプリングの 場 合 、サンプリングトリガによって 転 送 データをセット 中 に 再 度 サンプリングトリガが 入 ったため 重 複 になる。この 場 合 、 重 複 したトリガでのデータは 転 送 できないため、 次 の 転 送 データのサンプリングトリガ重 複 ビットが 有 効 になる。FFT、トラッキングサンプリングの 場 合 、102.4kHz 周 期 の 間 にサンプリングトリガが 2 回 以 上 入 った 場 合 に 重 複 となる。重 複 となった 次 の 転 送 データのサンプリングトリガ 重 複 ビットが 有 効 になる。※イベントログにはサンプリングスタートに 使 用 したイベントログは 残 りません。サンプリングストップトリガとサンプリングトリガが 重 複 した 場 合 、サンプリングストップに 使用 したイベントログが 残 ることがあります( 通 常 は 残 りません)。スタート 時 はまだサンプリングが 開 始 されていないのでイベントログが 残 りません。ストップ 時 にイベントが 入 ってもサンプリングトリガが 入 らないとイベントログが 転 送 されないのでイベントログが 残 りません。(サンプリングストップトリガとサンプリングトリガが 重 複 した場 合 はイベントログが 残 ります)5.1.6 サンプリングトリガタイムスタンプoffset ビットアサイン [7-0]20h サンプリングトリガの 32bit タイムスタンプ [7-0]21h サンプリングトリガの 32bit タイムスタンプ [15-8]22h サンプリングトリガの 32bit タイムスタンプ [23-16]23h サンプリングトリガの 32bit タイムスタンプ [31-24]※カウントアップは 1μs となります。※サンプリングトリガ 重 複 が 発 生 した 場 合 は 最 後 のトリガのタイムスタンプ 値 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.60


GPC-MA001 Help for Windows5.2 連 続 出 力アナログ 出 力 データは、 出 力 を 行 うチャンネルの 順 番 に 出 力 するデータを 連 続 して 並 べます。・アナログデータの 格 納 形 式1 件 目 ←2 件 目 ←::m 件 目::←チャンネル 1 の 1 件 目チャンネル 2 の 1 件 目::チャンネル n の 1 件 目チャンネル 1 の 2 件 目チャンネル 2 の 2 件 目::チャンネル n の 2 件 目::チャンネル 1 の m 件 目チャンネル 2 の m 件 目::チャンネル n の m 件 目・1 件 のデータ 格 納 形 式1 チャンネル 目2 チャンネル 目::n チャンネル 目・アナログデータの 形 式分 解 能8bit DA の 場 合unsigned char 型 (8bit)12bit DA の 場 合unsigned short 型(16bit)16bit DA の 場 合unsigned short 型(16bit)24bit DA の 場 合unsigned long 型 (32bit)サイズ(byte)1bit0© 2012, 2014 Interface Corporation. All rights reserved.2241 チャンネル 分 のデータbit7 ~ bit0bit15 ~ bit12 bit11~0 固 定bit15 ~ bit0bit31 ~ bit24 bit23 ~ bit00 固 定61


GPC-MA001 Help for Windowsデータ 領 域 のサイズデータ 領 域 のサイズ[Bytes] = チャンネル 数 ×サンプリング 件 数 ×データサイズ(バイト)例 )アナログ 出 力 チャンネル 数 = 4 チャンネルアナログ 出 力 件 数 = 100 件16bit DA デバイスの 場 合データ 領 域 のサイズ[Bytes]= 4[チャンネル] × 100[ 件 ] × 2[バイト]=800 バイトとなります。© 2012, 2014 Interface Corporation. All rights reserved.62


GPC-MA001 Help for Windows第 6 章 リファレンス6.1 関 数 一 覧No 関 数 名 機 能● 初 期 化 / 終 了 処 理1 MaOpen デバイスのオープンを 行 い、 以 後 デバイスへのアクセスを 行 えるようにします。2 MaClose デバイスのクローズを 行 い、デバイスアクセスのために 使 用 されていた 各 種 リソースの 解 放 を 行 い、 以 後 デバイスへのアクセスを禁 止 します。3 MaGetDeviceInfo デバイスの 仕 様 を 取 得 します。● 同 期 トリガ4 MaSetSyncLine デバイスの 同 期 ライン 発 生 条 件 の 設 定 を 行 います。5 MaSetGeneralTimer デバイスの 汎 用 タイマの 設 定 を 行 います。6 MaSoftTrigger デバイスにソフトトリガを 発 行 します。● 制 御 信 号7 MaSetExTrgIn デバイスの 外 部 トリガ 入 力 の 設 定 を 行 います。8 MaSetExClockIn デバイスの 外 部 クロック 入 力 の 設 定 を 行 います。9 MaSetExTrgOut デバイスの 外 部 トリガ 出 力 の 設 定 を 行 います。●サンプリング10 MaSetClockSource デバイスのサンプリングトリガの 設 定 を 行 います。11 MaSetSamplingConfig デバイスのサンプリング 条 件 の 設 定 を 行 います。12 MaSetSamplingBuffer デバイスのサンプリングバッファの 設 定 を 行 ないます。13 MaStartSampling デバイスのサンプリングを 開 始 させます。14 MaStopSampling デバイスのサンプリングを 停 止 させます。15 MaGetSamplingStatus デバイスのサンプリング 動 作 状 態 を 取 得 します。16 MaSetEventMask デバイスの 割 り 込 みイベントのマスク 設 定 を 行 います。17 MaSetEvent デバイスのイベントを 設 定 します。18 MaKillEvent デバイスのイベントを 解 除 します。19 MaGetEventStatus デバイスの 発 生 したイベント 要 因 を 取 得 します。●アナログ 入 力20 AdGetDeviceInfo デバイス(AD)の 情 報 を 取 得 します。21 AdSetChRange デバイス(AD)の 入 力 仕 様 /レンジの 設 定 を 行 います。22 AdInputAD デバイス(AD)から 1 件 のアナログ 入 力 を 行 います。23 AdSetAnalogTrigger デバイス(AD)のアナログトリガ 条 件 の 設 定 を 行 います。24 AdLoadAdjustVR デバイス(AD)のキャリブレーションデータをロードします。25 AdSetEventMask デバイス(AD)の 割 り 込 みイベントのマスク 設 定 を 行 います。26 AdSetEvent デバイス(AD)のイベントを 設 定 します。27 AdKillEvent デバイス(AD)のイベントを 解 除 します。28 AdGetEventStatus デバイス(AD)の 発 生 したイベント 要 因 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.63


GPC-MA001 Help for Windows●TEDS29 TedsGetInfo デバイスに 接 続 されている TEDS センサの 基 本 TEDS 情 報 の 取 得 を行 ないます。30 TedsReadData デバイスに 接 続 されている TEDS センサの TEDS データを 取 得 します。31 TedsWriteData デバイスに 接 続 されている TEDS センサの EEPROM データのライトを 行 います。●アナログ 出 力32 DaGetDeviceInfo デバイス(DA)の 情 報 を 取 得 します。33 DaSetChRange デバイス(DA)のチャンネルごとにレンジの 設 定 を 行 います。34 DaOutputDA デバイス(DA)から 1 件 のアナログ 出 力 を 行 います。35 DaSetClockSource デバイス(DA)のアナログ 出 力 更 新 トリガの 設 定 を 行 います。36 DaSetOutputConfig デバイス(DA)の 連 続 出 力 条 件 の 設 定 を 行 います。37 DaSetOutputData デバイス(DA)から 出 力 する 出 力 データのセットを 行 います。38 DaClearOutputData デバイス(DA)から 出 力 する 出 力 データのバッファ 内 のデータをクリアします。39 DaStartOutput デバイス(DA)の 連 続 出 力 を 開 始 させます。40 DaStopOutput デバイス(DA)の 連 続 出 力 を 停 止 させます。41 DaGetOutputStatus デバイス(DA)の 連 続 出 力 動 作 状 態 を 取 得 します。42 DaLoadAdjustVR デバイス(DA)のキャリブレーションデータをロードします。43 DaSetEventMask デバイス(DA)の 割 り 込 みイベントのマスク 設 定 を 行 います。44 DaSetEvent デバイス(DA)のイベントを 設 定 します。45 DaKillEvent デバイス(DA)のイベントを 解 除 します。46 DaGetEventStatus デバイス(DA)の 発 生 したイベント 要 因 を 取 得 します。●デジタル 入 出 力 ※マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 使 用 できます。47 DiInputDI デバイス(DI)のデジタル 入 力 データの 取 得 を 行 ないます。48 DiSetFilter デバイス(DI)のデジタルフィルタ 時 間 の 設 定 を 行 います。49 DoOutputDO デバイス(DO)のデジタル 出 力 データの 設 定 を 行 ないます。50 DiSetTrgEdge デバイス(DI)の IN1~IN4 のエッジ 極 性 の 設 定 を 行 います。51 DiSetEventMask デバイス(DI)の 割 り 込 みイベントのマスク 設 定 を 行 います。52 DiSetEvent デバイス(DI)のイベントを 設 定 します。53 DiKillEvent デバイス(DI)のイベントを 解 除 します。54 DiGetEventStatus デバイス(DI)の 発 生 したイベント 要 因 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.64


GPC-MA001 Help for Windows●カウンタ ※マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 使 用 できます。55 CntReset デバイス(CNT)のカウンタリセットを 実 行 します。56 CntSetCountMode デバイス(CNT)のパルスカウントモードの 設 定 を 行 います。57 CntSetComparator デバイス(CNT)の 一 致 検 出 条 件 を 設 定 します。58 CntSetUpDown デバイス(CNT)のカウンタアップ/ダウンタイミング 条 件 を 設 定します。59 CntSetTrigger デバイス(CNT)のカウンタスタート/ストップ 条 件 の 設 定 を 行 います。60 CntStart デバイス(CNT)のカウンタを 開 始 させます。61 CntStop デバイス(CNT)のカウンタを 停 止 させます。62 CntGetCounter デバイス(CNT)のカウンタ 値 を 取 得 します。63 CntGetStatus デバイス(CNT)のカウンタステータスを 取 得 します。64 CntSetEventMask デバイス(CNT)の 割 り 込 みイベントのマスク 設 定 を 行 います。65 CntSetEvent デバイス(CNT)のイベントを 設 定 します。66 CntKillEvent デバイス(CNT)のイベントを 解 除 します。67 CntGetEventStatus デバイス(CNT)の 発 生 したイベント 要 因 を 取 得 します。●CAN ※マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 使 用 できます。68 CanOpenPort CAN <strong>インタフェース</strong>のオープンを 行 い、 以 後 のアクセスを 行 えるようにします。69 CanClosePort CAN <strong>インタフェース</strong>をクローズします。70 CanActivate CAN <strong>インタフェース</strong>の CAN バスに 接 続 します。71 CanDeactivate CAN <strong>インタフェース</strong>の CAN バスから 切 り 離 します。72 CanSetConfig CAN <strong>インタフェース</strong>の 各 種 設 定 を 行 います。73 CanGetConfig CAN <strong>インタフェース</strong>の 現 在 の 各 種 設 定 値 を 取 得 します。74 CanSetAcceptanceFilter CAN <strong>インタフェース</strong>のアクセプタンスフィルタの 設 定 を 行 います。75 CanGetAcceptanceFilter CAN <strong>インタフェース</strong>の 受 信 フィルタの 現 在 の 設 定 を 取 得 します。76 CanSetFifoTrigger CAN <strong>インタフェース</strong>の FIFO のトリガ 設 定 を 行 います。77 CanGetFifoTrigger CAN <strong>インタフェース</strong>の FIFO のトリガ 設 定 値 を 取 得 します。78 CanSendMessage CAN <strong>インタフェース</strong>のメッセージの 送 信 を 行 います。79 CanCyclicSendMessage CAN <strong>インタフェース</strong>のメッセージの 周 期 送 信 を 行 ないます。80 CanStopCyclicSendMessage CAN <strong>インタフェース</strong>のメッセージの 周 期 送 信 を 停 止 します。81 CanReceiveMessage CAN <strong>インタフェース</strong>の 受 信 メッセージの 取 り 出 しを 行 います。82 CanGetStatus CAN <strong>インタフェース</strong>の 各 種 ステータスの 取 得 を 行 います。83 CanGetErrorEvent CAN <strong>インタフェース</strong>のエラー 情 報 をエラーバッファから 取 り 出します。84 CanGetCompletionMessage CAN <strong>インタフェース</strong>の 送 信 完 了 したメッセージを 取 り 出 します。85 CanClearBuffer CAN <strong>インタフェース</strong>の 各 種 バッファをクリアします。86 CanSetEventMask CAN <strong>インタフェース</strong>の 割 り 込 みイベントのマスク 設 定 を 行 います。87 CanSetEvent CAN <strong>インタフェース</strong>のイベントを 設 定 します。88 CanKillEvent CAN <strong>インタフェース</strong>のイベントを 解 除 します。© 2012, 2014 Interface Corporation. All rights reserved.65


GPC-MA001 Help for Windows6.2 関 数 個 別 説 明1. MaOpen【 機 能 】デバイスのオープンを 行 い、 以 後 デバイスへのアクセスを 行 えるようにします。Windows の「デバイス マネージャ」に 認 識 された 弊 社 アナログ 入 出 力 /デジタル/カウンタ<strong>インタフェース</strong>が 一 覧 表 示 されます。 一 覧 の 製 品 型 式 の 横 にデバイス 名 (IFMAx)が 表 示 されます。【 書 式 】●C 言 語HANDLE MaOpen(PCHARDWORD);DeviceName,Flag●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern IntPtr MaOpen (string DeviceNameuint Flag);●Visual Basic .NETDeclare Function MaOpen Lib "IfMa.DLL"( _ByVal DeviceName As String _ByVal Flag As Integer _) As IntPtr【パラメータ】DeviceNameオープンするデバイス 名 を 指 定 します。Flag予 約 です。0 を 指 定 します。【 戻 り 値 】MaOpen 関 数 が 正 常 に 終 了 した 場 合 には、 有 効 なハンドルが 返 されます。他 の 関 数 は、 本 関 数 により 取 得 したハンドルを 使 用 してデバイスの 制 御 を 行 います。オープンに 失 敗 した 場 合 には、INVALID_HANDLE_VALUE(FFFFFFFFh)が 返 されます。© 2012, 2014 Interface Corporation. All rights reserved.66


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語HANDLE DeviceHandle;DeviceHandle = MaOpen(“IfMa1”, 0 );if (DeviceHandle == INVALID_HANDLE_VALUE){printf("Failed to open the specified device.");return;}●Visual C# .NETIntPtr DeviceHandle;DeviceHandle = IFCMA.MaOpen("IFMA1", 0);if (DeviceHandle.Equals(new IntPtr(-1))) {console.WriteLine("MaOpen error");return;}●Visual Basic .NETDim DeviceHandle As IntPtrDeviceHandle = IFCMA.MaOpen("IFMA1", 0)If DeviceHandle.Equals(New IntPtr(-1)) ThenConsole.WriteLine("MaOpen errr")ReturnEnd Ifデバイス 名 「IfMa1」のデバイスを 初 期 化 します。© 2012, 2014 Interface Corporation. All rights reserved.67


GPC-MA001 Help for Windows2. MaClose【 機 能 】デバイスのクローズを 行 い、デバイスアクセスのために 使 用 されていた 各 種 リソースの 解 放 を 行 い、以 後 デバイスへのアクセスを 禁 止 します。【 書 式 】●C 言 語INT MaClose (HANDLE);DeviceHandle●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaClose (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function MaClose Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.68


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = MaClose( DeviceHandle);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaClose errr(%lx)\n", nRet);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.MaClose(DeviceHandle);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" MaClose error ={0:x}", nRet);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMA.MaClose( DeviceHandle)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaClose errr({0:x})", nRet)ReturnEnd Ifデバイスハンドル DeviceHandle のクローズを 行 います。© 2012, 2014 Interface Corporation. All rights reserved.69


GPC-MA001 Help for Windows3. MaGetDeviceInfo【 機 能 】デバイスの 仕 様 を 取 得 します。【 書 式 】●C 言 語INT MaGetDeviceInfo (HANDLEPMADEVICEINFO);DeviceHandle,pMaDeviceInfo●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaGetDeviceInfo (IntPtrDeviceHandle,out MADEVICEINFO pMaDeviceInfo);●Visual Basic .NETDeclare Function MaGetDeviceInfo Lib "IfMa.DLL"( _ByVal DeviceHandle, As IntPtr, _ByRef pMaDeviceInfo As MADEVICEINFO) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pMaDeviceInfoデバイスの 仕 様 を 取 得 する MADEVICEINFO 構 造 体 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.70


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;MADEVICEINFO MaDeviceInfo;nRet = MaGetDeviceInfo( DeviceHandle, &MaDeviceInfo);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaGetDeviceInfo errr(%lx)\n", nRet);MaClose( DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;IFCMA.MADEVICEINFO MaDeviceInfo;nRet = IFCMA. MaGetDeviceInfo (DeviceHandle, out MaDeviceInfo);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" MaGetDeviceInfo error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim MaDeviceInfo As IFCMA.MADEVICEINFOnRet = IFCMA.MaGetDeviceInfo(hDeviceHandle, MaDeviceInfo)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("MaGetDeviceInfo errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のデバイス 情 報 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.71


GPC-MA001 Help for Windows6.3 関 数 個 別 説 明 ( 同 期 トリガ)4. MaSetSyncLine【 機 能 】デバイスの 同 期 ライン 発 生 条 件 の 設 定 を 行 います。【 書 式 】●C 言 語INT MaSetSyncLine (HANDLE DeviceHandle,DWORD SyncLine,DWORD Trigger);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSetSyncLine (IntPtr DeviceHandle,uintSyncLine,uintTrigger);●Visual Basic .NETDeclare Function MaSetSyncLine Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal SyncLine As Integer, _ByVal Trigger As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。SyncLine設 定 する 同 期 ラインを 指 定 します。識 別 子 値 意 味MA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 7© 2012, 2014 Interface Corporation. All rights reserved.72


GPC-MA001 Help for WindowsTrigger同 期 ラインの 発 生 条 件 を 指 定 します。デフォルト:0x00000000識 別 子 値 意 味MA_TRG_NONE 0x00000000 トリガなしMA_TRG_SOFT0 0x00000001 ソフトウェアライトタイミング 0MA_TRG_SOFT1 0x00000002 ソフトウェアライトタイミング 1MA_TRG_SOFT2 0x00000004 ソフトウェアライトタイミング 2MA_TRG_SOFT3 0x00000008 ソフトウェアライトタイミング 3MA_TRG_TIMER0 0x00000010 タイマ 0 一 致 タイミングMA_TRG_TIMER1 0x00000020 タイマ 1 一 致 タイミングMA_TRG_TIMER2 0x00000040 タイマ 2 一 致 タイミングMA_TRG_TIMER3 0x00000080 タイマ 3 一 致 タイミングMA_TRG_ATRG1_0 0x00000100 CH1 アナログトリガタイミング 0MA_TRG_ATRG1_1 0x00000200 CH1 アナログトリガタイミング 1MA_TRG_ATRG2_0 0x00000400 CH2 アナログトリガタイミング 0MA_TRG_ATRG2_1 0x00000800 CH2 アナログトリガタイミング 1MA_TRG_ATRG3_0 0x00001000 CH3 アナログトリガタイミング 0MA_TRG_ATRG3_1 0x00002000 CH3 アナログトリガタイミング 1MA_TRG_ATRG4_0 0x00004000 CH4 アナログトリガタイミング 0MA_TRG_ATRG4_1 0x00008000 CH4 アナログトリガタイミング 1MA_TRG_DI1 ※ 0x00010000 DI1 立 ち 上 がり 立 ち 下 がりタイミングMA_TRG_DI2 ※ 0x00020000 DI2 立 ち 上 がり 立 ち 下 がりタイミングMA_TRG_DI3 ※ 0x00040000 DI3 立 ち 上 がり 立 ち 下 がりタイミングMA_TRG_DI4 ※ 0x00080000 DI4 立 ち 上 がり 立 ち 下 がりタイミングMA_TRG_CNT_UP_DOWN ※ 0x00100000 カウンタアップダウンタイミングMA_TRG_CNT_EQ ※ 0x00200000 カウンタ 一 致 タイミングMA_TRG_CAN_RECV ※ 0x00400000 CAN 受 信 タイミングMA_TRG_CAN_SEND ※ 0x00800000 CAN 送 信 タイミングMA_TRG_EXCLK 0x01000000 外 部 クロック 立 ち 上 がり 立 ち 下 がりタイミングMA_TRG_EXTRG 0x02000000 外 部 トリガの 立 ち 上 がり 立 ち 下 がりタイミングMA_TRG_SMPLNUM 0x04000000 バスマスタ 転 送 件 数 一 致 タイミングトリガ 条 件 は OR で 設 定 することができます。※マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 使 用 できます。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.73


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD SyncLine;DWORD Trigger;// 同 期 ライン 0( 外 部 クロック 入 力 )SyncLine = MA_SYNC0_TRG;Trigger = MA_TRG_EXCLK;nRet = MaSetSyncLine(DeviceHandle, SyncLine, Trigger);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSetSyncLine errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint SyncLine;uint Trigger;// 同 期 ライン 0( 外 部 クロック 入 力 )SyncLine = IFCMA.MA_SYNC0_TRG;Trigger = IFCMA.MA_TRG_EXCLK;nRet = IFCMA.MaSetSyncLine(DeviceHandle, SyncLine, Trigger);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("MaSetSyncLine error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}© 2012, 2014 Interface Corporation. All rights reserved.74


GPC-MA001 Help for Windows●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim SyncLine As IntegerDim Trigger As Integer‘ 同 期 ライン 0( 外 部 クロック 入 力 )SyncLine = IFCMA.MA_SYNC0_TRGTrigger = IFCMA.MA_TRG_EXCLKnRet = IFCMA.MaSetSyncLine(DeviceHandle, SyncLine, Trigger)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaSetSyncLine errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 同 期 ライン 発 生 条 件 の 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.75


GPC-MA001 Help for Windows5. MaSetGeneralTimer【 機 能 】デバイスの 汎 用 タイマの 設 定 を 行 います。【 書 式 】●C 言 語INT MaSetGeneralTimer (HANDLE DeviceHandle,DWORD Timer,DWORD Cycle);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSetGeneralTimer (IntPtr DeviceHandle,uintTimer,uintCycle);●Visual Basic .NETDeclare Function MaSetGeneralTimer Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Timer As Integer, _ByVal Cycle As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Timer設 定 する 汎 用 タイマを 指 定 します。識 別 子 値 意 味MA_TIMER0 1 汎 用 タイマ 0MA_TIMER1 2 汎 用 タイマ 1MA_TIMER2 3 汎 用 タイマ 2MA_TIMER3 4 汎 用 タイマ 3© 2012, 2014 Interface Corporation. All rights reserved.76


GPC-MA001 Help for WindowsCycle周 期 を 指 定 します。デフォルト:1MA_TIMER0 / MA_TIMER1 / MA_TIMER2 の 場 合周 期 = 10μs ×Cycle となります。MA_TIMER3 の 場 合周 期 = 9.77μs(102.4kHz) ×Cycle となります。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;// タイマの 設 定 100us ごとにトリガを 出 しますnRet = MaSetGeneralTimer(DeviceHandle, MA_TIMER0, 10);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSetGeneralTimer errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;// タイマの 設 定 100us ごとにトリガを 出 しますnRet = IFCMA.MaSetGeneralTimer(DeviceHandle, IFCMA.MA_TIMER0, 10);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("MaSetGeneralTimer error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtr‘ タイマの 設 定 100us ごとにトリガを 出 します© 2012, 2014 Interface Corporation. All rights reserved.77


GPC-MA001 Help for WindowsnRet = IFCMA.MaSetGeneralTimer(DeviceHandle, IFCMA.MA_TIMER0, 10)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaSetGeneralTimer errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 汎 用 タイマの 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.78


GPC-MA001 Help for Windows6. MaSoftTrigger【 機 能 】デバイスにソフトトリガを 発 行 します。【 書 式 】●C 言 語INT MaSoftTrigger (HANDLE DeviceHandle,DWORD Trigger);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSoftTrigger (IntPtr DeviceHandle,uintTrigger);●Visual Basic .NETDeclare Function MaSoftTrigger Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Trigger As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Trigger発 行 するソフトトリガを 指 定 します。識 別 子 値 意 味MA_TRG_SOFT0 0x00000001 ソフトウェアライトタイミング 0MA_TRG_SOFT1 0x00000002 ソフトウェアライトタイミング 1MA_TRG_SOFT2 0x00000004 ソフトウェアライトタイミング 2MA_TRG_SOFT3 0x00000008 ソフトウェアライトタイミング 3【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.79


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = MaSoftTrigger(DeviceHandle, MA_TRG_SOFT0);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSoftTrigger errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.MaSoftTrigger(DeviceHandle, IFCMA.MA_TRG_SOFT0);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" MaSoftTrigger error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMA.MaSoftTrigger(DeviceHandle, IFCMA.MA_TRG_SOFT0)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaSoftTrigger errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のソフトウェアライトタイミング 0 を 発 行 します。© 2012, 2014 Interface Corporation. All rights reserved.80


GPC-MA001 Help for Windows6.4 関 数 個 別 説 明 ( 制 御 信 号 )7. MaSetExTrgIn【 機 能 】デバイスの 外 部 トリガ 入 力 の 設 定 を 行 います。【 書 式 】●C 言 語INT MaSetExTrgIn (HANDLE DeviceHandle,DWORD Edge,BYTEFilter);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSetExTrgIn (IntPtr DeviceHandle,uintEdge,byteFilter);●Visual Basic .NETDeclare Function MaSetExTrgIn Lib " IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Edge As Integer, _ByVal Filter As Byte _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Edgeエッジを 指 定 します。デフォルト:MA_UP_EDGE識 別 子 値 意 味MA_UP_EDGE 1 立 ち 上 がりエッジMA_DOWN_EDGE 2 立 ち 下 がりエッジ© 2012, 2014 Interface Corporation. All rights reserved.81


GPC-MA001 Help for WindowsFilterデジタルフィルタの 値 を 指 定 します。デフォルト:0bit7 bit6, 5 bit4~bit00 CLKSEL COUNTCOUNT CLKSEL=0x00 CLKSEL=0x01 CLKSEL=0x10 CLKSEL=0x11(1μs)(10μs)(100μs)0 フィルタなし フィルタなし フィルタなし フィルタなし1 1us 10us 100us フィルタなし2 2us 20us 200us フィルタなし: : : : :30 30us 300us 3000us フィルタなし31 31us 310us 3100us フィルタなし【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.82


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = MaSetExTrgIn(DeviceHandle, MA_UP_EDGE, 10);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSetExTrgIn errr(%lx)\n", nRet);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.MaSetExTrgIn(DeviceHandle, IFCMA.MA_UP_EDGE, 10);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine("MaSetExTrgIn error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMA.MaSetExTrgIn(DeviceHandle, IFCMA.MA_UP_EDGE, 10);If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaSetExTrgIn errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 外 部 トリガ 入 力 の 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.83


GPC-MA001 Help for Windows8. MaSetExClockIn【 機 能 】デバイスの 外 部 クロック 入 力 の 設 定 を 行 います。【 書 式 】●C 言 語INT MaSetExClockIn (HANDLE DeviceHandle,DWORD Edge,DWORD AcCoupling,float TrigLevel);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSetExClockIn (IntPtr DeviceHandle,uintEdge,uintAcCoupling,float TrigLevel);●Visual Basic .NETDeclare Function MaSetExClockIn Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Edge As Integer, _ByVal AcCoupling As Integer, _ByVal TrigLevel As Single _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Edgeエッジを 指 定 します。デフォルト:MA_UP_EDGE識 別 子 値 意 味MA_UP_EDGE 1 立 ち 上 がりエッジMA_DOWN_EDGE 2 立 ち 下 がりエッジ© 2012, 2014 Interface Corporation. All rights reserved.84


GPC-MA001 Help for WindowsAcCouplingAC カップリングの 有 効 / 無 効 を 指 定 します。デフォルト:MA_COUPLING_OFF識 別 子 値 意 味MA_COUPLING_OFF 1 AC カップリング 無 効MA_COUPLING_ON 2 AC カップリング 有 効TrigLevel電 圧 レベルの 値 を 指 定 します。デフォルト:-10-10V~10V の 間 で 20/256[V] 単 位 で 設 定 することができます。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = MaSetExClockIn(DeviceHandle, MA_UP_EDGE, MA_COUPLING_OFF, 5.0);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSetExClockIn errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.MaSetExClockIn(DeviceHandle, IFCMA.MA_UP_EDGE,IFCMA.MA_COUPLING_OFF, 5.0);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine("MaSetExClockIn error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtr© 2012, 2014 Interface Corporation. All rights reserved.85


GPC-MA001 Help for WindowsnRet = IFCMA.MSetExClockIn(DeviceHandle, IFCMA.MA_UP_EDGE, _IFCMA.MA_COUPLING_OFF, 5.0)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MSetExClockIn errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 外 部 クロック 入 力 の 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.86


GPC-MA001 Help for Windows9. MaSetExTrgOut【 機 能 】デバイスの 外 部 トリガ 出 力 の 設 定 を 行 います。【 書 式 】●C 言 語INT MaSetExTrgOut(HANDLE DeviceHandle,DWORD Config,DWORD Logic,DWORD PulseWidth);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSetExTrgOut (IntPtr DeviceHandle,uintConfig,uintLogic,uintPulseWidth);●Visual Basic .NETDeclare Function MaSetExTrgOut Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Config As Integer, _ByVal Logic As Integer, _ByVal PulseWidth As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Config制 御 信 号 の 出 力 条 件 を 指 定 します。識 別 子 値 意 味MA_NONE_TRG 0 同 期 トリガを 使 用 しないMA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 7© 2012, 2014 Interface Corporation. All rights reserved.87


GPC-MA001 Help for WindowsLogic制 御 信 号 の 出 力 論 理 を 指 定 します。デフォルト:MA_LOW_PULSE識 別 子 値 意 味MA_LOW_PULSE 1 Low パルスMA_HIGH_PULSE 2 High パルスPulseWidthパルス 幅 を 指 定 します。設 定 できるパルス 幅 の 値 は 5μs(0x05)からになります。デフォルト:5μs(0x05)Bit7 bit6, 5 bit4~bit00 CLKSEL COUNTCOUNT CLKSEL=00(1μs)CLKSEL=01(10μs)CLKSEL=10(100μs)0 なし なし なし1 1us 10us 100us2 2us 20us 200us: : : :30 30us 300us 3000us31 31us 310us 3100us※パルス 幅 については CLKSEL で 指 定 した 基 準 クロック 周 期 分 の 誤 差 が 生 じます。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.88


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = MaSetExTrgOut(DeviceHandle, MA_SYNC0_TRG, MA_LOW_PULSE , 0x21);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSetExTrgOut errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.MaSetExTrgOut(DeviceHandle, IFCMA.MA_SYNC0_TRG,IFCMA.MA_LOW_PULSE, 0x21);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("MaSetExTrgOut error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMA.MaSetExTrgOut (DeviceHandle, IFCMA.MA_SYNC0_TRG, _IFCMA.MA_LOW_PULSE, &H21)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaSetExTrgOut errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 外 部 トリガ 出 力 の 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.89


GPC-MA001 Help for Windows6.5 関 数 個 別 説 明 (サンプリング)10. MaSetClockSource【 機 能 】デバイスのサンプリングトリガの 設 定 を 行 います。【 書 式 】●C 言 語INT MaSetClockSource (HANDLEDeviceHandle,DWORDSrcClock);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSetClockSource (IntPtrDeviceHandle,uintSrcClock);●Visual Basic .NETDeclare Function MaSetClockSource Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal SrcClock As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。SrcClockサンプリングトリガを 指 定 します。デフォルト:MA_NONE_TRG識 別 子 値 意 味MA_NONE_TRG 0 同 期 トリガを 使 用 しないMA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 7© 2012, 2014 Interface Corporation. All rights reserved.90


GPC-MA001 Help for Windows【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;nRet = MaSetClockSource(DeviceHandle, MA_SYNC1_TRG);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSetClockSource errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.MaSetClockSource(DeviceHandle, IFCMA.MA_SYNC1_TRG);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("MaSetClockSource error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrRet = IFCMA.MaSetClockSource(DeviceHandle, IFCMA.MA_SYNC1_TRG)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaSetClockSource errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のサンプリングトリガを 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.91


GPC-MA001 Help for Windows11. MaSetSamplingConfig【 機 能 】デバイスのサンプリング 条 件 の 設 定 を 行 います。【 書 式 】●C 言 語INT MaSetSamplingConfig (HANDLEDeviceHandle,PMASMPLCONFSmplConf);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSetSamplingConfig (IntPtrDeviceHandle,ref MASMPLCONF SmplConf);[DllImport(“IfMa.dll”)]public static extern uint MaSetSamplingConfig (IntPtr DeviceHandle,IntPtr SmplConf);●Visual Basic .NETDeclare Function MaSetSamplingConfig Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef SmplConf As MASMPLCONF_) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。SmplConfサンプリング 条 件 を 設 定 する MASMPLCONF 構 造 体 の 変 数 へのポインタ( 参 照 渡 し)を 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.92


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;MASMPLCONF SmplConf;ULONG StartTrigger = MA_SYNC0_TRG;ULONG StopTrigger = MA_SYNC1_TRG;SmplConf.SamplingMode = MA_NORMAL_SAMPLING;SmplConf.StartTrigger = StartTrigger;SmplConf.StopTrigger = StopTrigger;SmplConf.SmplNum = 1024;SmplConf.PreSmplNum = 0;SmplConf.RepeatNum = 1;SmplConf.BufferMode = MA_APPEND;SmplConf.SmplEventNum = 0;nRet = MaSetSamplingConfig(DeviceHandle, &SmplConf);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSetSamplingConfig errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint StartTrigger = IFCMA.MA_SYNC0_TRG;uint StopTrigger = IFCMA.MA_SYNC1_TRG;IFCMA.MASMPLCONF SmplConf = new IFCMA.MASMPLCONF();SmplConf.SamplingMode = IFCMA.MA_NORMAL_SAMPLING;SmplConf.StartTrigger = StartTrigger;SmplConf.StopTrigger = StopTrigger;SmplConf.SmplNum = 1024;SmplConf.PreSmplNum = 0;SmplConf.RepeatNum = 1;SmplConf.BufferMode = IFCMA.MA_APPEND;SmplConf.SmplEventNum = 0;nRet = IFCMA.MaSetSamplingConfig(DeviceHandle, ref SmplConf);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("MaSetSamplingConfig error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;© 2012, 2014 Interface Corporation. All rights reserved.93


GPC-MA001 Help for Windows}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim StartTrigger As IntegerStartTrigger = IFCMA.MA_SYNC0_TRGDim StopTrigger As IntegerStopTrigger = IFCMA.MA_SYNC1_TRGDim SmplConf As IFCMA.MASMPLCONFSmplConf.SamplingMode = IFCMA.MA_NORMAL_SAMPLINGSmplConf.StartTrigger = StartTriggerSmplConf.StopTrigger = StopTriggerSmplConf.SmplNum = 1024SmplConf.PreSmplNum = 0SmplConf.RepeatNum = 1SmplConf.BufferMode = IFCMA.MA_APPENDSmplConf.SmplEventNum = 0nRet = IFCMA.MaSetSamplingConfig(DeviceHandle, SmplConf)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaSetSamplingConfig errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のサンプリング 条 件 を 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.94


GPC-MA001 Help for Windows12. MaSetSamplingBuffer【 機 能 】デバイスのサンプリングバッファの 設 定 を 行 ないます。【 書 式 】●C 言 語INT MaSetSamplingBuffer (HANDLE DeviceHandle,PVOID Buffer,ULONG BufferSize);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSetSamplingBuffer (IntPtrDeviceHandle,ref MASMPLDATA Buffer,uintBufferSize);[DllImport(“IfMa.dll”)]public static extern uint MaSetSamplingBuffer (IntPtrDeviceHandle,MASMPLDATA[]Buffer,uintBufferSize);[DllImport(“IfMa.dll”)]public static extern uint MaSetSamplingBuffer (IntPtr DeviceHandle,IntPtr Buffer,uint BufferSize);●Visual Basic .NETDeclare Function MaSetSamplingBuffer Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef Buffer As MASMPLDATA, _ByVal BufferSize As Integer _) As IntPtrDeclare Function MaSetSamplingBuffer Lib "IfMa.DLL"( _ByVal DeviceHandle, As IntPtr, _ByRef Buffer, As IntPtr, _ByVal BufferSize As Integer _) As IntPtr© 2012, 2014 Interface Corporation. All rights reserved.95


GPC-MA001 Help for Windows【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Bufferサンプリングデータ 格 納 バッファへのポインタ( 参 照 渡 し)を 指 定 します。BufferSizeサンプリングバッファのサイズを 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語#define SMPL_NUM 1024#define REP_NUM 1int Ret;HANDLE DeviceHandle;PMASMPLDATA Buffer;Buffer = (PMASMPLDATA)calloc((SMPL_NUM * REP_NUM), sizeof(MASMPLDATA));if (Buffer == NULL) {printf("Failed to allocate a buffer.\n");return -1;}nRet = MaSetSamplingBuffer(hDeviceHandle, Buffer,(SMPL_NUM * REP_NUM * sizeof(MASMPLDATA)));if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSetSamplingBuffer errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}© 2012, 2014 Interface Corporation. All rights reserved.96


GPC-MA001 Help for Windows●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint BufferNum = SmplConf.RepeatNum * SmplConf.SmplNum;uint BufferSize = BufferNum * (uint)sizeof(IFCMA.MASMPLDATA);IFCMA.MASMPLDATA[] Buffer = new IFCMA.MASMPLDATA[BufferNum];GCHandle PinnedBuffer = GCHandle.Alloc(Buffer, GCHandleType.Pinned);nRet = IFCMA.MaSetSamplingBuffer(DeviceHandle, PinnedBuffer.AddrOfPinnedObject(),BufferSize);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine("MaSetSamplingBuffer error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim SmplDataNum As IntegerDim BufferSize As IntegerSmplDataNum = SmplConf.SmplNum * SmplConf.RepeatNumBufferSize = SmplDataNum * Marshal.SizeOf(GetType(IFCMA.MASMPLDATA))Dim Data(SmplDataNum) As IFCMA.MASMPLDATADim PinnedData As GCHandlePinnedData = GCHandle.Alloc(Data, GCHandleType.Pinned)nRet = IFCMA.MaSetSamplingBuffer(hDeviceHandle, _PinnedData.AddrOfPinnedObject(), BufferSize)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaSetSamplingBuffer errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のサンプリングバッファの 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.97


GPC-MA001 Help for Windows13. MaStartSampling【 機 能 】デバイスのサンプリングを 開 始 させます。【 書 式 】●C 言 語INT MaStartSampling (HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaStartSampling (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function MaStartSampling Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.98


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;nRet = MaStartSampling(DeviceHandle);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaStartSampling errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.MaStartSampling(DeviceHandle);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine("MaStartSampling error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrRet = IFCMA.MaStartSampling(DeviceHandle)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaStartSampling errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のサンプリングを 開 始 させます。© 2012, 2014 Interface Corporation. All rights reserved.99


GPC-MA001 Help for Windows14. MaStopSampling【 機 能 】デバイスのサンプリングを 停 止 させます。【 書 式 】●C 言 語INT MaStopSampling (HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaStopSampling (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function MaStopSampling Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.100


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;nRet = MaStopSampling (DeviceHandle);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaStopSampling errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.MaStopSampling (DeviceHandle);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine(" MaStopSampling error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrRet = IFCMA.MaStopSampling ( DeviceHandle )If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaStopSampling errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のサンプリングを 停 止 させます。© 2012, 2014 Interface Corporation. All rights reserved.101


GPC-MA001 Help for Windows15. MaGetSamplingStatus【 機 能 】デバイスのサンプリング 動 作 状 態 を 取 得 します。【 書 式 】●C 言 語INT MaGetSamplingStatus (HANDLEDeviceHandle,PMASMPLSTATUS SmplStatus);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaGetSamplingStatus (IntPtrDeviceHandle,out MASMPLSTATUSSmplStatus);●Visual Basic .NETDeclare Function MaGetSamplingStatus Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef SmplStatus As MASMPLSTATUS _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。SmplStatusサンプリング 動 作 状 態 を 取 得 する MASMPLSTATUS 構 造 体 の 変 数 へのポインタ( 参 照 渡 し)を指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.102


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;MASMPLSTATUS SmplStatus;nRet = MaGetSamplingStatus(DeviceHandle, &SmplStatus);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaGetSamplingStatus errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;IFCMA.MASMPLSTATUS SmplStatus;nRet = IFCMA.MaGetSamplingStatus(DeviceHandle, out SmplStatus);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" MaGetSamplingStatus error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim SmplStatus As IFCMA.MASMPLSTATUSRet = IFCMA.MaGetSamplingStatus(DeviceHandle, SmplStatus);If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaGetSamplingStatus errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のサンプリング 動 作 状 態 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.103


GPC-MA001 Help for Windows16. MaSetEventMask【 機 能 】デバイスの 割 り 込 みイベントのマスク 設 定 を 行 います。【 書 式 】●C 言 語INT MaSetEventMask(HANDLE DeviceHandle,DWORD EventMask);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSetEventMask (IntPtr DeviceHandle,uintEventMask);●Visual Basic .NETDeclare Function MaSetEventMask Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal EventMask As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。EventMask使 用 する 割 り 込 みイベントのマスクデータを 指 定 してください。デフォルト:0bit32~bit24予 約bit23~bit20 bit19 bit18 bit17 bit16予 約 TIME3 TIME2 TIME1 TIME0bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8SYNC7 SYNC6 SYNC5 SYNC4 SYNC3 SYNC2 SYNC1 SYNC0bit7~bitt3 bit2 bit1 bit0予 約SMPNUMSMP_STOP SMP_START© 2012, 2014 Interface Corporation. All rights reserved.104


GPC-MA001 Help for WindowsSMP_STARTSMP_STOPSMPNUMSYNC0SYNC1SYNC2SYNC3SYNC4SYNC5SYNC6SYNC7TIME0TIME1TIME2TIME30: 未 発 生1:サンプリング 開 始 割 り 込 み 検 出0: 未 発 生1:サンプリング 終 了 割 り 込 み 検 出0: 未 発 生1:サンプリング 指 定 件 数 割 り 込 み 検 出0: 未 発 生1: 内 部 同 期 トリガ 0 割 り 込 み 検 出0: 未 発 生1: 内 部 同 期 トリガ 1 割 り 込 み 検 出0: 未 発 生1: 内 部 同 期 トリガ 2 割 り 込 み 検 出0: 未 発 生1: 内 部 同 期 トリガ 3 割 り 込 み 検 出0: 未 発 生1: 内 部 同 期 トリガ 4 割 り 込 み 検 出0: 未 発 生1: 内 部 同 期 トリガ 5 割 り 込 み 検 出0: 未 発 生1: 内 部 同 期 トリガ 6 割 り 込 み 検 出0: 未 発 生1: 内 部 同 期 トリガ 7 割 り 込 み 検 出0: 未 発 生1: 汎 用 タイマ 0 割 り 込 み 検 出0: 未 発 生1: 汎 用 タイマ 1 割 り 込 み 検 出0: 未 発 生1: 汎 用 タイマ 2 割 り 込 み 検 出0: 未 発 生1: 汎 用 タイマ 3 割 り 込 み 検 出【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.105


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = MaSetEventMask(DeviceHandle, 0x0002);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSetEventMask errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.MaSetEventMask(DeviceHandle, 0x0002);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" MaSetEventMask error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMA.MaSetEventMask(DeviceHandle, &H2);If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaSetEventMask errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 割 り 込 みイベントマスクを 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.106


GPC-MA001 Help for Windows17. MaSetEvent【 機 能 】デバイスのイベントを 設 定 します。【 書 式 】●C 言 語INT MaSetEvent (HANDLEHANDLELPMACALLBACKPVOID);DeviceHandle,Event,CallBackProc,UserData●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaSetEvent (IntPtrDeviceHandle,IntPtrEvent,LPMACALLBACK CallBackProc,IntPtrUserData);[DllImport(“IfMa.dll”)]public static extern uint MaSetEvent (IntPtrDeviceHandle,IntPtrEvent,uintCallBackProc,IntPtrUserData);●Visual Basic .NETDeclare Function MaSetEvent Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Event As IntPtr, _ByVal CallBackProc As PMACALLBACK, _ByVal UserData As IntPtr _) As IntPtrDeclare Function MaSetEvent Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Event As IntPtr, _ByVal CallBackProc As Integer, _ByVal UserData As IntPtr _) As IntPtr© 2012, 2014 Interface Corporation. All rights reserved.107


GPC-MA001 Help for Windows【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Event割 り 込 みイベント 時 にシグナル 状 態 に 設 定 されるイベントを 識 別 します。イベント 通 知 を 行 わない 場 合 には、C 言 語 では NULL,Visual C# .NET ,Visual Basic .NETでは 0 を 指 定 してください。デフォルト:0 または NULLCallBackProc割 り 込 みイベント 時 に 呼 び 出 すユーザ・コールバック 関 数 のアドレスを 指 定 します。ユーザ・コールバック 関 数 の 呼 び 出 しを 行 わない 場 合 には、C 言 語 では NULL, VisualC# .NET ,Visual Basic .NET では 0 を 指 定 してください。デフォルト:0 または NULLUserDataユーザ・コールバック 関 数 へ 引 き 渡 すユーザ・データを 指 定 します【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.108


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語void CALLBACK EventProc(DWORD EventStatus, PVOID dwUser){printf("Callback(EventStatus:%lxh)\n", EventStatus);}INT nRet;HANDLE DeviceHandle;HANDLE hEvent;// マスクの 設 定 (CH1 TRG0 UP)nRet = MaSetEventMask(hDeviceHandle, 0x00000002);if (nRet != IFMA_ERROR_SUCCESS) {printf("AdSetEventMask errr(%lx)", nRet);MaClose(hDeviceHandle);return;}// イベントの 設 定hEvent = CreateEvent(0, TRUE, FALSE, NULL);if (hEvent == NULL) {printf("CreateEvent error \n");MaClose(hDeviceHandle);return;}// イベント/コールバックの 登 録nRet = MaSetEvent(hDeviceHandle, hEvent, EventProc, 0);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaSetEvent errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}// イベントがシグナルになるまで 待 機WaitForSingleObject(hEvent, 0xFFFFFFFF);ResetEvent(hEvent);CloseHandle(hEvent);© 2012, 2014 Interface Corporation. All rights reserved.109


GPC-MA001 Help for Windows●Visual C# .NETstatic IFCMA.LPMACALLBACK LpCallback = new IFCMA.LPMACALLBACK(EventProc);// Callback Functionstatic void EventProc(uint Status, IntPtr UserData) {Console.WriteLine("Callback Status = {0}, UserData = {1:X}",Status, UserData.ToInt32());}uint nRet;IntPtr DeviceHandle;IntPtr hEvent;uint User = 0x01;// マスクの 設 定 (CH1 TRG0 UP)nRet = IFCMA.MaSetEventMask(DeviceHandle, 0x00000002);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {CON.WriteLine("MaSetEventMask error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}// イベントの 設 定hEvent = IFCMA.CreateEvent(IntPtr.Zero, true, false, null);if (hEvent == IntPtr.Zero) {Console.WriteLine("CreateEvent errr");IFCMA.MaClose(DeviceHandle);return;}// イベント/コールバックの 登 録nRet = IFCMA.MaSetEvent(DeviceHandle, hEvent, LpCallback, (IntPtr)User);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" MaSetEventMask error ={0:x}", nRet);IFCMA.CloseHandle(hEvent);IFCMA.MaClose(DeviceHandle);return;}// イベントがシグナルになるまで 待 機IFCMA.WaitForSingleObject(hEvent, 0xFFFFFFFF);IFCMA.ResetEvent(hEvent);IFCMA.CloseHandle(hEvent);© 2012, 2014 Interface Corporation. All rights reserved.110


GPC-MA001 Help for Windows●Visual Basic .NETDim LpCallback As IFCMA.PMACALLBACK' Callback FunctionSub EventProc(ByVal Status As Integer, ByVal UserData As IntPtr)Console.WriteLine("Callback Status = {0:X}, UserData = {1:X}",Status, UserData.ToInt32())End SubDim nRet As IntegerDim hDeviceHandle As IntPtrDim hEvent As IntPtrDim User As IntPtr' マスクの 設 定 (CH1 TRG0 UP)nRet = IFCMA.MaSetEventMask(hDeviceHandle, &H2)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("MaSetEventMask errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd If' イベントの 設 定hEvent = IFCMA.CreateEvent(IntPtr.Zero, True, False, 0);If hEvent.Equals(IntPtr.Zero) ThenConsole.WriteLine("CreateEvent errr")IFCMA.MaClose(hDeviceHandle)ReturnEnd If' イベント/コールバックの 登 録LpCallback = New IFCMA.PMACALLBACK(AddressOf EventProc)nRet = IFCMA.MaSetEvent(hDeviceHandle, hEvent, LpCallback, User)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaSetEvent errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd If‘ イベントがシグナルになるまで 待 機IFCMA.WaitForSingleObject(hEvent, &HFFFFFFFF)IFCMA.ResetEvent(hEvent)IFCMA.CloseHandle(hEvent)デバイスハンドル DeviceHandle のイベント 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.111


GPC-MA001 Help for Windows18. MaKillEvent【 機 能 】デバイスのイベントを 解 除 します。【 書 式 】●C 言 語INT MaKillEvent (HANDLE);DeviceHandle●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaKillEvent (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function MaKillEvent Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.112


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = MaKillEvent(DeviceHandle);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaKillEvent errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.MaKillEvent (DeviceHandle);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" MaKillEvent error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMA.MaKillEvent(DeviceHandle)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaKillEvent errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のイベントを 解 除 します。© 2012, 2014 Interface Corporation. All rights reserved.113


GPC-MA001 Help for Windows19. MaGetEventStatus【 機 能 】デバイスの 発 生 したイベント 要 因 を 取 得 します。【 書 式 】●C 言 語INT MaGetEventStatus (HANDLE DeviceHandle,PDWORD pEventStatus);●Visual C# .NET[DllImport(“IfMa.dll”)]public static extern uint MaGetEventStatus (IntPtr DeviceHandle,out uint pEventStatus);●Visual Basic .NETDeclare Function MaGetEventStatus Lib "IfMa.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef pEventStatus As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pEventStatus発 生 した 要 因 を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.114


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD EventStatus;nRet = MaGetEventStatus(DeviceHandle, &EventStatus);if (nRet != IFMA_ERROR_SUCCESS) {printf(" MaGetEventStatus errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint EventStatus;nRet = IFCMA.MaGetEventStatus (DeviceHandle, out EventStatus);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" MaGetEventStatus error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim EventStatus As IntegernRet = IFCMA.MaGetEventStatus(DeviceHandle, EventStatus)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" MaGetEventStatus errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 発 生 したイベント 要 因 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.115


GPC-MA001 Help for Windows6.6 関 数 個 別 説 明 (アナログ 入 力 )20. AdGetDeviceInfo【 機 能 】アナログ 入 力 のデバイス 情 報 を 取 得 します。【 書 式 】●C 言 語INT AdGetDeviceInfo (HANDLEPADDEVICEINFO);DeviceHandle,pAdDeviceInfo●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint AdGetDeviceInfo (IntPtrDeviceHandle,out ADDEVICEINFO pAdDeviceInfo);●Visual Basic .NETDeclare Function AdGetDeviceInfo Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef pAdDeviceInfo As ADDEVICEINFO _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pAdDeviceInfoアナログ 入 力 のデバイス 情 報 を 取 得 する ADDEVICEINFO 構 造 体 へのポインタ( 参 照 渡 し)を 指定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.116


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;ADDEVICEINFO AdDeviceInfo;nRet = AdGetDeviceInfo(DeviceHandle, &AdDeviceInfo);if (nRet != IFMA_ERROR_SUCCESS) {printf(" AdGetDeviceInfo errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;IFCMAAD.ADDEVICEINFO AdDeviceInfo;nRet = IFCMAAD.AdGetDeviceInfo (DeviceHandle, out AdDeviceInfo);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" AdGetDeviceInfo error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtr;IFCMAAD.ADDEVICEINFO AdDeviceInfonRet = IFCMAAD.AdGetDeviceInfo(DeviceHandle, AdDeviceInfo)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" AdGetDeviceInfo errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のデバイス 情 報 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.117


GPC-MA001 Help for Windows21. AdSetChRange【 機 能 】デバイスの 入 力 仕 様 /レンジの 設 定 を 行 います。【 書 式 】●C 言 語INT AdSetChRange (HANDLEULONGPADCHREQ);DeviceHandle,ChCount,pChReq●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint AdSetChRange (IntPtrDeviceHandle,uintChCount,ref ADCHREQ pChReq);[DllImport(“IfMaAd.dll”)]public static extern uint AdSetChRange (IntPtrDeviceHandle,uintChCount,ADCHREQ[] pChReq);●Visual Basic .NETDeclare Function AdSetChRange Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal ChCount As Integer, _ByRef pChReq As ADCHREQ _) As IntPtrDeclare Function AdSetChRange Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal ChCount As Integer, _ByVal pChReq() As ADCHREQ _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。ChCountレンジ 設 定 を 行 うチャンネル 数 を 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.118


GPC-MA001 Help for WindowspChReqチャンネル/レンジを 設 定 する ADCHREQ 構 造 体 の 変 数 へのポインタ( 参 照 渡 し)を 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 備 考 】レンジ/カップリング 情 報 を 切 り 替 えた 場 合 には、 本 関 数 実 行 後 AdLoadAdjustVR 関 数 を 実 行 し、補 正 値 をロードしてする 必 要 があります。© 2012, 2014 Interface Corporation. All rights reserved.119


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;ULONG i;ULONG ChCount;ADCHREQ ChReq[4];ChCount = 4;for (i = 0; i < ChCount; i++) {ChReq[i].InputMode = AD_INPUT_SINGLE;ChReq[i].Channel = i+1;ChReq[i].Range = AD_RNG_10V;ChReq[i].AcCoupling = AD_COUPLING_OFF;}nRet = AdSetChRange(hDeviceHandle, ChCount, ChReq);if (nRet != IFMA_ERROR_SUCCESS) {printf(" AdSetChRange errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint ChCount = 4;IFCMAAD.ADCHREQ[] ChReq = new IFCMAAD.ADCHREQ[ChCount];for (uint i = 0; i < ChCount; i++){ChReq[i].InputMode = IFCMAAD.AD_INPUT_SINGLE;ChReq[i].Channel = i+1;ChReq[i].Range = IFCMAAD.AD_RNG_10V;ChReq[i].AcCoupling = IFCMAAD.AD_COUPLING_OFF;}nRet = IFCMAAD.AdSetChRange(DeviceHandle, ChCount, ChReq);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("AdSetChRange error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}© 2012, 2014 Interface Corporation. All rights reserved.120


GPC-MA001 Help for Windows●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim ChCount As IntegerDim i As IntegerChCount = 4Dim ChReq(ChCount) As IFCMAAD.ADCHREQFor i = 0 To ChCountChReq(i).InputMode = IFCMAAD.AD_INPUT_SINGLEChReq(i).Channel = i + 1ChReq(i).Range = IFCMAAD.AD_RNG_10VChReq(i).AcCoupling = IFCMAAD.AD_COUPLING_OFFNext inRet = IFCMAAD.AdSetChRange(hDeviceHandle, ChCount, ChReq)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" AdSetChRange errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 入 力 仕 様 /レンジの 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.121


GPC-MA001 Help for Windows22. AdInputAD【 機 能 】デバイスから 1 件 のアナログ 入 力 を 行 います。【 書 式 】●C 言 語INT AdInputAD (HANDLE DeviceHandle,INTChannel,PVOID Data);●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint AdInputAD (IntPtr DeviceHandle,uintChannel,out ushort Data);[DllImport(“IfMaAd.dll”)]public static extern uint AdInputAD (IntPtr DeviceHandle,uintChannel,ushort[] Data Data);[DllImport(“IfMaAd.dll”)]public static extern uint AdInputAD (IntPtr DeviceHandle,uintChannel,IntPtr Data);●Visual Basic .NETDeclare Function AdInputAD Lib " IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByRef Data As Short _) As IntPtrDeclare Function AdInputAD Lib " IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByVal Data() As Short _) As IntPtr© 2012, 2014 Interface Corporation. All rights reserved.122


GPC-MA001 Help for Windows【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channel取 得 するチャンネル 数 を 指 定 します。チャンネル 情 報 は、AdSetChRange 関 数 で 設 定 したチャンネルになります。Dataアナログ 入 力 データを 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.123


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD Data[4];nRet = AdInputAD( hDeviceHandle, 4, Data);if (nRet != IFMA_ERROR_SUCCESS) {printf(" AdInputAD errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint[] Data = new uint[4];nRet = IFCMAAD.AdInputAD( DeviceHandle, 4, Data);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("AdInputAD error ={0:x} ", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim ChCount As IntegerChCount = 4Dim Data(ChCount) As IntegernRet = IFCMAAD.AdInputAD(hDeviceHandle, 4, Data)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" AdInputAD errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 1 件 のアナログ 入 力 データを 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.124


GPC-MA001 Help for Windows23. AdSetAnalogTrigger【 機 能 】デバイスのアナログトリガ 条 件 の 設 定 を 行 います。【 書 式 】●C 言 語INT AdSetAnalogTrigger (HANDLEDeviceHandle,ULONGChCount,PATRIGREQpATrigChReq,ULONGLogic);●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint AdSetAnalogTrigger (IntPtrDeviceHandle,uintChCount,ref ATRIGREQ pATrigChReq,uintLogic);[DllImport(“IfMaAd.dll”)]public static extern uint AdSetAnalogTrigger (IntPtrDeviceHandle,uintChCount,ATRIGREQ[]pATrigChReq,uintLogic);●Visual Basic .NETDeclare Function AdSetAnalogTrigger Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal ChCount As Integer, _ByRef pATrigChReq As ATRIGREQ, _ByVal Logic As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。ChCountアナログトリガ 条 件 設 定 を 行 うチャンネル 数 を 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.125


GPC-MA001 Help for WindowspATrigChReqアナログトリガ 条 件 を 設 定 する ATRIGREQ 構 造 体 の 変 数 へのポインタ( 参 照 渡 し)を 指 定 してください。Logicアナログトリガ 出 力 のアナログトリガ 条 件 を 指 定 します。bit32~bit8予 約bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0CH4 CH4 CH3 CH3 CH2 CH2 CH1 CH1ATRG1 ATRG0 ATRG1 ATRG0 ATRG1 ATRG0 ATRG1 ATRG0CH1ATRG0CH1ATRG1CH2ATRG0CH2ATRG1CH3ATRG0CH3ATRG1CH4ATRG0CH4ATRG10:チャンネル 1 のアナログトリガ 0 を 上 回 った1:チャンネル 1 のアナログトリガ 0 を 下 回 った0:チャンネル 1 のアナログトリガ 1 を 上 回 った1:チャンネル 1 のアナログトリガ 1 を 下 回 った0:チャンネル 2 のアナログトリガ 0 を 上 回 った1:チャンネル 2 のアナログトリガ 0 を 下 回 った0:チャンネル 2 のアナログトリガ 1 を 上 回 った1:チャンネル 2 のアナログトリガ 1 を 下 回 った0:チャンネル 3 のアナログトリガ 0 を 上 回 った1:チャンネル 3 のアナログトリガ 0 を 下 回 った0:チャンネル 3 のアナログトリガ 1 を 上 回 った1:チャンネル 3 のアナログトリガ 1 を 下 回 った0:チャンネル 4 のアナログトリガ 0 を 上 回 った1:チャンネル 4 のアナログトリガ 0 を 下 回 った0:チャンネル 4 のアナログトリガ 1 を 上 回 った1:チャンネル 4 のアナログトリガ 1 を 下 回 った【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.126


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int Ret;HANDLE DeviceHandle;ULONG i;ULONG ChCount;ATRIGREQ pATrigChReq[4];ChCount = 4;for (i = 0; i < ChCount; i++) {pATrigChReq[i].Channel = i+1;pATrigChReq[i].TrigLevel1 = 0x333333;pATrigChReq[i].Hysteresis1 = 0x00f0;pATrigChReq[i].TrigLevel2 = 0xCCCCCC;pATrigChReq[i].Hysteresis2 = 0x00f0;}nRet = AdSetAnalogTrigger(hDeviceHandle, ChCount, pATrigChReq, 0x00);if (nRet != IFMA_ERROR_SUCCESS) {printf(" AdSetAnalogTrigger errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint ChCount = 4;IFCMAAD.ATRIGREQ[] pATrigChReq = new IFCMAAD.ATRIGREQ[ChCount];for (uint i = 0; i < ChCount; i++){pATrigChReq[i].Channel = i+1;pATrigChReq[i].TrigLevel1 = 0x333333;pATrigChReq[i].Hysteresis1 = 0x00f0;pATrigChReq[i].TrigLevel2 = 0xCCCCCC;pATrigChReq[i].Hysteresis2 = 0x00f0;}nRet = IFCMAAD.AdSetAnalogTrigger(DeviceHandle, ChCount, pATrigChReq, 0x00);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("AdSetAnalogTrigger error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}© 2012, 2014 Interface Corporation. All rights reserved.127


GPC-MA001 Help for Windows●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim ChCount As IntegerDim i As IntegerChCount = 4Dim pATrigChReq([ChCount]) As IFCMAAD.ATRIGREQFor i = 0 To ChCountpATrigChReq(i).Channel = i + 1pATrigChReq(i).TrigLevel1 = &H333333pATrigChReq(i).Hysteresis1 = &HF0pATrigChReq(i).TrigLevel2 = &HCCCCCCpATrigChReq(i).Hysteresis2 = &HF0Next inRet = IFCMAAD.AdSetAnalogTrigger(hDeviceHandle, ChCount, pATrigChReq, &H0)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" AdSetAnalogTrigger errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のアナログトリガ 条 件 の 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.128


GPC-MA001 Help for Windows24. AdLoadAdjustVR【 機 能 】デバイスのキャリブレーションデータをロードします。【 書 式 】●C 言 語INT AdLoadAdjustVR (HANDLE DeviceHandle,ULONG Channel,ULONG LoadMode);●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint AdLoadAdjustVR (IntPtr DeviceHandle,uint Channel,uint LoadMode);●Visual Basic .NETDeclare Function AdLoadAdjustVR Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByVal LoadMode As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelキャリブレーションデータをロードするチャンネルを 指 定 します。LoadModeキャリブレーションデータのモードを 指 定 します。識 別 子 値 内 容AD_ADJUST_INIT 1 出 荷 時 設 定AD_ADJUST_USER 2 ユーザ 設 定【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.129


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;nRet = AdLoadAdjustVR( DeviceHandle, 1, AD_ADJUST_INIT);if (nRet != IFMA_ERROR_SUCCESS) {printf(" AdLoadAdjustVR errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMAAD.AdLoadAdjustVR (DeviceHandle, 1, IFCMAAD.AD_ADJUST_INIT);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine(" AdLoadAdjustVR error ={0:x} ", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMAAD.AdLoadAdjustVR( DeviceHandle, 1, IFCMA.AD_ADJUST_INIT)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" AdLoadAdjustVR errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のキャリブレーションデータをロードします。© 2012, 2014 Interface Corporation. All rights reserved.130


GPC-MA001 Help for Windows25. AdSetEventMask【 機 能 】割 り 込 みイベントのマスク 設 定 を 行 います。【 書 式 】●C 言 語INT AdSetEventMask(HANDLEDWORD);DeviceHandle,EventMask●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint AdSetEventMask (IntPtrDeviceHandle,uintEventMask);●Visual Basic .NETDeclare Function AdSetEventMask Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal EventMask As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。EventMask使 用 する 割 り 込 みイベントのマスクデータを 指 定 してください。デフォルト:0bit32~bit16予 約bit15~bit9予 約bit8EXTbit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0CH4 CH4 CH3 CH3 CH2 CH2 CH1 CH1ATRG1 ATRG0 ATRG1 ATRG0 ATRG1 ATRG0 ATRG1 ATRG0CH1ATRG0CH10: 未 発 生1:チャンネル 1 のアナログトリガ 0 検 出0: 未 発 生© 2012, 2014 Interface Corporation. All rights reserved.131


GPC-MA001 Help for WindowsATRG1CH2ATRG0CH2ATRG1CH3ATRG0CH3ATRG1CH4ATRG0CH4ATRG1EXT1:チャンネル 1 のアナログトリガ 1 検 出0: 未 発 生1:チャンネル 2 のアナログトリガ 0 検 出0: 未 発 生1:チャンネル 2 のアナログトリガ 1 検 出0: 未 発 生1:チャンネル 3 のアナログトリガ 0 検 出0: 未 発 生1:チャンネル 3 のアナログトリガ 1 検 出0: 未 発 生1:チャンネル 4 のアナログトリガ 0 検 出0: 未 発 生1:チャンネル 4 のアナログトリガ 1 検 出0: 未 発 生1: 外 部 トリガ 入 力 検 出【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.132


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = AdSetEventMask(DeviceHandle, 0x00000001);if (nRet != IFMA_ERROR_SUCCESS) {printf(" AdSetEventMask errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMAAD.AdSetEventMask(DeviceHandle, 0x00000001);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("AdSetEventMask error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMAAD.AdSetEventMask(DeviceHandle, &H1);If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" AdSetEventMask errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 割 り 込 みイベントマスクを 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.133


GPC-MA001 Help for Windows26. AdSetEvent【 機 能 】デバイスのイベントを 設 定 します。【 書 式 】●C 言 語INT AdSetEvent (HANDLEHANDLELPADCALLBACKPVOID);DeviceHandle,Event,CallBackProc,UserData●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint AdSetEvent (IntPtrDeviceHandle,IntPtrEvent,uintCallBackProc,IntPtrUserData);[DllImport(“IfMaAd.dll”)]public static extern uint AdSetEvent (IntPtrDeviceHandle,IntPtrEvent,LPADCALLBACK CallBackProc,IntPtrUserData);●Visual Basic .NETDeclare Function AdSetEvent Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Event As IntPtr, _ByVal CallBackProc As PMAADCALLBACK, _PVOID UserData As IntPtr _) As IntPtrDeclare Function AdSetEvent Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Event As IntPtr, _ByVal CallBackProc As Integer, _PVOID UserData As IntPtr _) As IntPtr© 2012, 2014 Interface Corporation. All rights reserved.134


GPC-MA001 Help for Windows【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Event割 り 込 みイベント 時 にシグナル 状 態 に 設 定 されるイベントを 識 別 します。イベント 通 知 を 行 わない 場 合 には、C 言 語 では NULL,Visual C# .NET ,Visual Basic .NETでは 0 を 指 定 してください。デフォルト:0 または NULLCallBackProc割 り 込 みイベント 時 に 呼 び 出 すユーザ・コールバック 関 数 のアドレスを 指 定 します。ユーザ・コールバック 関 数 の 呼 び 出 しを 行 わない 場 合 には、C 言 語 では NULL, VisualC# .NET ,Visual Basic .NET では 0 を 指 定 してください。デフォルト:0 または NULLUserDataユーザ・コールバック 関 数 へ 引 き 渡 すユーザ・データを 指 定 します【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.135


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語void CALLBACK EventProc(DWORD EventStatus, PVOID dwUser){printf("Callback(EventStatus:%lxh)\n", EventStatus);}INT nRet;HANDLE DeviceHandle;HANDLE hEvent;// マスクの 設 定 (CH1 TRG0 UP)nRet = AdSetEventMask(hDeviceHandle, 0x00000001);if (nRet != IFMA_ERROR_SUCCESS) {printf("AdSetEventMask errr(%lx)", nRet);MaClose(hDeviceHandle);return ;}// イベントの 設 定hEvent = CreateEvent(0, TRUE, FALSE, NULL);if (hEvent == NULL) {printf("CreateEvent error \n");MaClose(hDeviceHandle);return;}// イベント/コールバックの 登 録nRet = AdSetEvent(hDeviceHandle, hEvent, EventProc, 0);if (nRet != IFMA_ERROR_SUCCESS) {printf(" AdSetEventMask errr(%lx)\n", nRet);CloseHandle(hEvent);MaClose(DeviceHandle);return;}// イベントがシグナルになるまで 待 機WaitForSingleObject(hEvent, 0xFFFFFFFF);ResetEvent(hEvent);CloseHandle(hEvent);© 2012, 2014 Interface Corporation. All rights reserved.136


GPC-MA001 Help for Windows●Visual C# .NETstatic IFCMAAD.LPMAADCALLBACK LpCallback = new IFCMAAD.LPMAADCALLBACK(EventProc);// Callback Functionstatic void EventProc(uint Status, IntPtr UserData) {Console.WriteLine("Callback Status = {0}, UserData = {1:X}",Status, UserData.ToInt32());}uint nRet;IntPtr DeviceHandle;IntPtr hEvent;uint User = 0x01;// マスクの 設 定 (CH1 TRG0 UP)nRet = IFCMAAD.AdSetEventMask(DeviceHandle, 0x00000001);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {CON.WriteLine("AdSetEventMask error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}// イベントの 設 定hEvent = IFCMA.CreateEvent(IntPtr.Zero, true, false, null);if (hEvent == IntPtr.Zero) {Console.WriteLine("CreateEvent errr");IFCMA.MaClose(DeviceHandle);return;}// イベント/コールバックの 登 録nRet = IFCMAAD.AdSetEvent(DeviceHandle, hEvent, LpCallback, (IntPtr)User);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine("AdSetEvent error ={0:x}", nRet);IFCMA.CloseHandle(hEvent);IFCMA.MaClose(DeviceHandle);return;}// イベントがシグナルになるまで 待 機IFCMA.WaitForSingleObject(hEvent, 0xFFFFFFFF);IFCMA.ResetEvent(hEvent);IFCMA.CloseHandle(hEvent);© 2012, 2014 Interface Corporation. All rights reserved.137


GPC-MA001 Help for Windows●Visual Basic .NETDim LpCallback As IFCMAAD.PMAADCALLBACK‘ Callback FunctionSub EventProc(ByVal Status As Integer, ByVal UserData As IntPtr)Console.WriteLine("Callback Status = {0:X}, UserData = {1:X}", _Status, UserData.ToInt32())End SubDim nRet As IntegerDim hDeviceHandle As IntPtrDim User As IntPtrDim hEvent As IntPtr' マスクの 設 定 (CH1 TRG0 UP)nRet = IFCMAAD.AdSetEventMask(hDeviceHandle, &H1)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("AdSetEventMask errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd If' イベントの 設 定hEvent = CreateEvent(0, TRUE, FALSE, NULL);If hEvent.Equals(IntPtr.Zero) ThenConsole.WriteLine("CreateEvent errr")IFCMA.MaClose(hDeviceHandle)ReturnEnd If' イベント/コールバックの 登 録LpCallback = New IFCMAAD.PMAADCALLBACK(AddressOf EventProc)nRet = IFCMAAD.AdSetEvent(hDeviceHandle, hEvent, LpCallback, User)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" AdSetEvent errr({0:x})", nRet)IFCMA.CloseHandle(hEvent)IFCMA.MaClose(hDeviceHandle)ReturnEnd If' イベントがシグナルになるまで 待 機IFCMA.WaitForSingleObject(hEvent, &HFFFFFFFF)IFCMA.ResetEvent(hEvent)IFCMA.CloseHandle(hEvent)デバイスハンドル DeviceHandle のイベント 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.138


GPC-MA001 Help for Windows27. AdKillEvent【 機 能 】デバイスのイベントを 解 除 します。【 書 式 】●C 言 語INT AdKillEvent (HANDLE);DeviceHandle●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint AdKillEvent (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function AdKillEvent Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.139


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = AdKillEvent(DeviceHandle);if (nRet != IFMA_ERROR_SUCCESS) {printf(" AdKillEvent errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMAAD.AdKillEvent(DeviceHandle);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" AdKillEvent error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMAAD.AdKillEvent(DeviceHandle)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" AdKillEvent errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のイベントを 解 除 します。© 2012, 2014 Interface Corporation. All rights reserved.140


GPC-MA001 Help for Windows28. AdGetEventStatus【 機 能 】デバイスの 発 生 したイベント 要 因 を 取 得 します。【 書 式 】●C 言 語INT AdGetEventStatus (HANDLE DeviceHandle,PDWORD pEventStatus);●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint AdGetEventStatus (IntPtr DeviceHandle,out uint pEventStatus);●Visual Basic .NETDeclare Function AdGetEventStatus Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef pEventStatus As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pEventStatus発 生 した 要 因 を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.141


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD EventStatus;nRet = AdGetEventStatus( DeviceHandle, &EventStatus);if (nRet != IFMA_ERROR_SUCCESS) {printf(" AdGetEventStatus errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint EventStatus;nRet = IFCMAAD.AdGetEventStatus (DeviceHandle, out EventStatus);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" AdGetEventStatus error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim EventStatus As IntegernRet = IFCMAAD.AdGetEventStatus ( DeviceHandle, EventStatus)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" AdGetEventStatus errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 発 生 したイベント 要 因 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.142


GPC-MA001 Help for Windows6.7 関 数 個 別 説 明 (TEDS)29. TedsGetInfo【 機 能 】デバイスに 接 続 されている TEDS センサの 基 本 TEDS 情 報 の 取 得 を 行 ないます。【 書 式 】●C 言 語INT TedsGetInfo (HANDLEINTPWORDPWORDPBYTEPBYTEPDWORD);DeviceHandle,Channel,pManufacturerID,pModelNumber,pVersionLetter,pVersionNumber,pSerialNumber●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint TedsGetInfo (IntPtr DeviceHandle,uintChannel,out short pManufacturerID,out short pModelNumber,out byte pVersionLetter,out byte pVersionNumber,out uint pSerialNumber);●Visual Basic .NETDeclare Function TedsGetInfo Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByRef pManufacturerID As Short, _ByRef pModelNumber As Short, _ByRef pVersionLetter As Byte, _ByRef pVersionNumber As Byte, _ByRef pSerialNumbe As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。© 2012, 2014 Interface Corporation. All rights reserved.143


GPC-MA001 Help for WindowsChannelチャンネルを 指 定 します。pManufacturerID製 造 元 ID(14bit)を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。pModelNumberモデル 番 号 (15bit)を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。pVersionLetterバージョン 記 号 (5bit)を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。pVersionNumberバージョン 番 号 (6bit)を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。pSerialNumberシリアル 番 号 (24bit)を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.144


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;WORD ManufacturerID, ModelNumber;BYTE VersionLetter, VersionNumber;DWORD SerialNumber;nRet = TedsGetInfo ( DeviceHandle, 1, &ManufacturerID, &ModelNumber,&VersionLetter, &VersionNumber, &SerialNumber);if (nRet != IFMA_ERROR_SUCCESS) {printf(" TedsGetInfo errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;short ManufacturerID, ModelNumber;byte VersionLetter, VersionNumber;uint SerialNumber;nRet = IFCMAAD.TedsGetInfo ( DeviceHandle, 1, out ManufacturerID, out ModelNumber,out VersionLetter, out VersionNumber, out SerialNumber);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" TedsGetInfo error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}© 2012, 2014 Interface Corporation. All rights reserved.145


GPC-MA001 Help for Windows●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim ManufacturerID As ShortDim ModelNumber As ShortDim VersionLetter As ByteDim VersionNumber As ByteDim SerialNumber As IntegernRet = IFCMAAD.TedsGetInfo ( DeviceHandle, 1, ManufacturerID, ModelNumber, _VersionLetter, VersionNumber, SerialNumber);If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" TedsGetInfo errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のチャンネル 1 の 基 本 TEDS 情 報 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.146


GPC-MA001 Help for Windows30. TedsReadData【 機 能 】デバイスに 接 続 されている TEDS センサの TEDS データを 取 得 します。【 書 式 】●C 言 語INT TedsReadData (HANDLE DeviceHandle,INTChannel,BYTEOffset,PDWORD pDataL,PDWORD pDataH);●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint TedsReadData (IntPtr DeviceHandle,uintChannel,byteOffset,out uint pDataL,out uint pDataH);●Visual Basic .NETDeclare Function TedsReadData Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByRef Offset As Byte, _ByRef pDataL As Integer, _ByRef pDataH As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。Offsetリードする EEPROM のオフセットを 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.147


GPC-MA001 Help for WindowspDataLTEDS データ( 下 位 )を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。pDataHTEDS データ( 上 位 )を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;DWORD DataL;DWORD DataH;Ret = TedsReadData(DeviceHandle, 1, 0x00, &DataL, &DataH);if (nRet != IFMA_ERROR_SUCCESS) {printf(" TedsReadData errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint DataL;uint DataH;nRet = IFCMAAD.TedsReadData(DeviceHandle, 1, 0x00, out DataL, out DataH);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine(" TedsReadData error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim Offset As ByteDim DataL As IntegerDim DataH As Integer© 2012, 2014 Interface Corporation. All rights reserved.148


GPC-MA001 Help for WindowsnRet = IFCMAAD.TedsReadData(DeviceHandle, 1, &H0, DataL, DataH)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" TedsReadData errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の TEDS センサの TEDS データを 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.149


GPC-MA001 Help for Windows31. TedsWriteData【 機 能 】デバイスに 接 続 されている TEDS センサの EEPROM データのライトを 行 います。【 書 式 】●C 言 語INT TedsWriteData (HANDLE DeviceHandle,INTChannel,BYTEOffset,BYTEData);●Visual C# .NET[DllImport(“IfMaAd.dll”)]public static extern uint TedsWriteData (IntPtr DeviceHandle,uintChannel,byteOffset,byteData);●Visual Basic .NETDeclare Function TedsWriteData Lib "IfMaAd.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByVal Offset As Byte, _ByVal Data As Byte _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。Offsetライトする EEPROM のオフセットを 指 定 します。ライトできるオフセットはユーザ 定 義 項 目 部 分 のみになります。※ユーザ 定 義 項 目 部 分 以 外 のオフセットにデータをライトした 場 合 には、 弊 社 では 保 証 できません。ユーザ 定 義 項 目 部 分 のみのアクセスをしてください。DataTEDS に 書 き 込 むデータを 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.150


GPC-MA001 Help for Windows【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;BYTE Offset;BYTE Data;nRet = TedsWriteData( DeviceHandle, 1, Offset, Data);if (nRet != IFMA_ERROR_SUCCESS) {printf(" TedsWriteData errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;BYTE Offset;BYTE Data;nRet = IFCMAAD.TedsWriteData( DeviceHandle, 1, Offset, Data);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine(" TedsWriteData error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim Offset As ByteDim Data As BytenRet = IFCMAAD.TedsWriteData( DeviceHandle, 1, Offset, Data)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" TedsWriteData errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の TEDS センサの EEPROM データのライトを 行 います。© 2012, 2014 Interface Corporation. All rights reserved.151


GPC-MA001 Help for Windows6.8 関 数 個 別 説 明 (アナログ 出 力 )32. DaGetDeviceInfo【 機 能 】デバイスのアナログ 出 力 情 報 を 取 得 します。【 書 式 】●C 言 語INT DaGetDeviceInfo (HANDLEPDADEVICEINFO);DeviceHandle,pDaDeviceInfo●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaGetDeviceInfo (IntPtrDeviceHandle,out DADEVICEINFO pDaDeviceInfo);●Visual Basic .NETDeclare Function DaGetDeviceInfo Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef pDaDeviceInfo As DADEVICEINFO _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pDaDeviceInfoアナログ 出 力 のデバイス 情 報 を 取 得 する DADEVICEINFO 構 造 体 へのポインタ( 参 照 渡 し)を 指定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.152


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DADEVICEINFO DaDeviceInfo;nRet = DaGetDeviceInfo(DeviceHandle, &DaDeviceInfo);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaGetDeviceInfo errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;IFCMADA.DADEVICEINFO DaDeviceInfo;nRet = IFCMADA.DaGetDeviceInfo(DeviceHandle, out DaDeviceInfo);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DaGetDeviceInfo error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim DaDeviceInfo As IFCMADA.DADEVICEINFOnRet = IFCMADA.DaGetDeviceInfo(DeviceHandle, DaDeviceInfo)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaGetDeviceInfo errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のアナログ 出 力 情 報 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.153


GPC-MA001 Help for Windows33. DaSetChRange【 機 能 】デバイスのチャンネルごとにレンジの 設 定 を 行 います。【 書 式 】●C 言 語INT DaSetChRange (HANDLEULONGPDACHREQ);DeviceHandle,ChCount,pChReq●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaSetChRange (IntPtrDeviceHandle,uintChCount,ref DACHREQ pChReq);[DllImport(“IfMaDa.dll”)]public static extern uint DaSetChRange (IntPtrDeviceHandle,uintChCount,DACHREQ[] pChReq);●Visual Basic .NETDeclare Function DaSetChRange Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal ChCount As Integer, _ByRef pChReq As DACHREQ _) As IntPtrDeclare Function DaSetChRange Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal ChCount As Integer, _ByVal pChReq() As DACHREQ _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。ChCountレンジ 設 定 を 行 うチャンネル 数 を 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.154


GPC-MA001 Help for WindowspChReqチャンネル/レンジを 設 定 する DACHREQ 構 造 体 へのポインタ( 参 照 渡 し)を 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;ULONG ChCount;DACHREQ ChReq;ChCount = 1;ChReq.ChannelChReq.Range = DA_RNG_10V;nRet = DaSetChRange( DeviceHandle, ChCount, &ChReq);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaSetChRange errr(%lx)\n", nRet);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint ChCount = 1;IFCMADA.DACHREQ[] ChReq = new IFCMADA.DACHREQ[ChCount];for (uint i = 0; i < ChCount; i++) {ChReq[i].Channel = i+1;ChReq[i].Range = IFCMADA.DA_RNG_10V;}nRet = IFCMADA.DaSetChRange(DeviceHandle, ChCount, ChReq);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine("DaSetChRange error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}© 2012, 2014 Interface Corporation. All rights reserved.155


GPC-MA001 Help for Windows●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim ChCount As IntegerDim i As IntegerChCount = 1ChReq([ChCount]) As IFCMADA.DACHREQFor i = 0 To ChCountChReq(i).Channel = i + 1ChReq(i).Range = IFCMADA.DA_RNG_10VNext inRet = IFCMADA.DaSetChRange(hDeviceHandle, ChCount, ChReq)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("DaSetChRange errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のレンジの 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.156


GPC-MA001 Help for Windows34. DaOutputDA【 機 能 】デバイスから 1 件 のアナログ 出 力 を 行 います。【 書 式 】●C 言 語INT DaOutputDA (HANDLEINTPVOID);DeviceHandle,Channel,Data●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaOutputDA (IntPtr DeviceHandle,uintChannel,ref ushort Data);●Visual Basic .NETDeclare Function DaOutputDA Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByRef Data As Short _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channel出 力 するチャンネルを 指 定 します。Dataアナログ 出 力 データを 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.157


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;unsigned short Data;Data = 0xFFFF;nRet = DaOutputDA(DeviceHandle, 1, &Data);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaOutputDA errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;ushort Data = 0xFFFF;nRet = IFCMADA.DaOutputDA(DeviceHandle, 1, ref Data);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine("DaOutputDA error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim ChCount As IntegerChCount =1Dim Data(ChCount) As ShortData(0) = -32768 + (&HFFFF - 32768)nRet = IFCMADA.DaOutputDA(hDeviceHandle, 1, Data)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("DaOutputDA errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 1 件 のアナログ 出 力 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.158


GPC-MA001 Help for Windows35. DaSetClockSource【 機 能 】デバイスのアナログ 出 力 更 新 トリガの 設 定 を 行 います。【 書 式 】●C 言 語INT DaSetClockSource (HANDLEDeviceHandle,DWORDSrcClock);●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaSetClockSource (IntPtrDeviceHandle,uintSrcClock);●Visual Basic .NETDeclare Function DaSetClockSource Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal SrcClock As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。SrcClockアナログ 出 力 更 新 トリガを 指 定 します。識 別 子 値 意 味MA_NONE_TRG 0 同 期 トリガを 使 用 しないMA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 7【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.159


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;nRet = DaSetClockSource(DeviceHandle, MA_SYNC1_TRG);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaSetClockSource errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMADA.DaSetClockSource(DeviceHandle, IFCMA.MA_SYNC1_TRG);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DaSetClockSource error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrRet = IFCMADA.DaSetClockSource (DeviceHandle, IFCMA.MA_SYNC1_TRG);If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaSetClockSource errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のアナログ 出 力 更 新 トリガを 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.160


GPC-MA001 Help for Windows36. DaSetOutputConfig【 機 能 】デバイスの 連 続 出 力 条 件 の 設 定 を 行 います。【 書 式 】●C 言 語INT DaSetOutputConfig (HANDLEPOUTPUTCONF);DeviceHandle,OutputConf●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaSetOutputConfig (IntPtrDeviceHandle,ref OUTPUTCONF OutputConf);●Visual Basic .NETDeclare Function DaSetOutputConfig Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef OutputConf As OUTPUTCONF _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。OutputConf連 続 出 力 条 件 を 設 定 する OUTPUTCONF 構 造 体 の 変 数 へのポインタ( 参 照 渡 し)を 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.161


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;OUTPUTCONF OutputConf;OutputConf.StartTrigger = MA_SYNC0_TRG;OutputConf.StopTrigger = MA_NONE_TRG;OutputConf.OutputNum = 1024;OutputConf.RepeatNum = 1;OutputConf.EventNum = 0;nRet = DaSetOutputConfig(DeviceHandle, &OutputConf);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaSetOutputConfig errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;IFCMADA.OUTPUTCONF OutputConf;OutputConf.StartTrigger = IFCMA.MA_SYNC0_TRG;OutputConf.StopTrigger = IFCMA.MA_NONE_TRG;OutputConf.OutputNum = 1024;OutputConf.RepeatNum = 1;OutputConf.EventNum = 0;nRet = IFCMADA.DaSetOutputConfig(DeviceHandle, OutputConf);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine(" DaSetOutputConfig error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}© 2012, 2014 Interface Corporation. All rights reserved.162


GPC-MA001 Help for Windows●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim OutputConf As IFCMADA.OUTPUTCONFOutputConf.StartTrigger = IFCMA.MA_SYNC0_TRGOutputConf.StopTrigger = IFCMA.MA_NONE_TRGOutputConf.OutputNum = 1024OutputConf.RepeatNum = 1OutputConf.EventNum = 0Ret = IFCMADA.DaSetOutputConfig(DeviceHandle, OutputConf);If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaSetOutputConfig errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 連 続 出 力 条 件 を 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.163


GPC-MA001 Help for Windows37. DaSetOutputData【 機 能 】デバイスから 出 力 する 出 力 データのセットを 行 います。【 書 式 】●C 言 語INT DaSetOutputData (HANDLE DeviceHandle,PVOID Buffer,ULONG SetDataNum);●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaSetOutputData (IntPtr DeviceHandle,ref ushort Buffer,uint SetDataNum);[DllImport(“IfMaDa.dll”)]public static extern uint DaSetOutputData (IntPtr DeviceHandle,ushort[] Buffer,uint SetDataNum);[DllImport(“IfMaDa.dll”)]public static extern uint DaSetOutputData (IntPtr DeviceHandle,IntPtr Buffer,uint SetDataNum);●Visual Basic .NETDeclare Function DaSetOutputData Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef Buffer As Short, _ByVal SetDataNum As Integer _) As IntPtrDeclare Function DaSetOutputData Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef Buffer() As Short, _ByVal SetDataNum As Integer _) As IntPtr© 2012, 2014 Interface Corporation. All rights reserved.164


GPC-MA001 Help for Windows【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Buffer出 力 するデータバッファのポインタ( 参 照 渡 し)を 指 定 します。SetDataNum設 定 する 出 力 データ 件 数 を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.165


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;ULONG SetDataNum;WORD Buffer[1024];SetDataNum = 1024;for (i = 0; i < SetDataNum; i++) {if (i%2) {Buffer[i] = 0xFFFF;} else {Buffer[i] = 0x0000;}}nRet = DaSetOutputData ( DeviceHandle, &Buffer, SetDataNum);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaSetOutputData errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;ULONG SetDataNum;SetDataNum = 1024;ushort[] wSmplData = new ushort [SetDataNum];for (uint i = 0; i < SetDataNum; i++) {if ((i%2) == 0) {wSmplData[i] = 0xFFFF;} else {wSmplData[i] = 0x0000;}}nRet = IFCMADA.DaSetOutputData ( DeviceHandle, Buffer, SetDataNum);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine(" DaSetOutputData error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}© 2012, 2014 Interface Corporation. All rights reserved.166


GPC-MA001 Help for Windows●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim SmplData(1024) As ShortDim SetDataNum As IntegerDim wMid, wMax, wMin As IntegerDim Temp As IntegerSetDataNum = 1024For i = 0 To 1024If i Mod 2 0 ThenwSmplData(i) = &H0ElsewSmplData(i) = &HFFFFEnd IfNext iRet = IFCMADA.DaSetOutputData ( DeviceHandle, Buffer, SetDataNum);If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaSetOutputData errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 出 力 する 出 力 データのセットを 行 います。© 2012, 2014 Interface Corporation. All rights reserved.167


GPC-MA001 Help for Windows38. DaClearOutputData【 機 能 】デバイスから 出 力 する 出 力 データのバッファ 内 のデータをクリアします。【 書 式 】●C 言 語INT DaClearOutputData (HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaClearOutputData (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function DaClearOutputData Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.168


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;nRet = DaClearOutputData( DeviceHandle );if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaClearOutputData errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;Ret = IFCMADA.DaClearOutputData( DeviceHandle );if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine(" DaClearOutputData error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrRet = IFCMADA.DaClearOutputData( DeviceHandle )If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaClearOutputData errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 出 力 する 出 力 データのバッファ 内 のデータをクリアします。© 2012, 2014 Interface Corporation. All rights reserved.169


GPC-MA001 Help for Windows39. DaStartOutput【 機 能 】デバイスの 連 続 出 力 を 開 始 させます。【 書 式 】●C 言 語INT DaStartOutput (HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaStartOutput (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function DaStartOutput Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.170


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;nRet = DaStartOutput( DeviceHandle );if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaStartOutput errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMADA.DaStartOutput( DeviceHandle );if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DaStartOutput error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMADA.DaStartOutput( DeviceHandle )If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaStartOutput errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 連 続 出 力 をスタートさせます。© 2012, 2014 Interface Corporation. All rights reserved.171


GPC-MA001 Help for Windows40. DaStopOutput【 機 能 】デバイスの 連 続 出 力 を 停 止 させます。【 書 式 】●C 言 語INT DaStopOutput (HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaStopOutput (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function DaStopOutput Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.172


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;nRet = DaStopOutput( DeviceHandle );if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaStartOutput errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMADA.DaStopOutput( DeviceHandle );if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DaStopOutput error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMADA.DaStopOutput( DeviceHandle )If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaStopOutput errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 連 続 出 力 を 停 止 させます。© 2012, 2014 Interface Corporation. All rights reserved.173


GPC-MA001 Help for Windows41. DaGetOutputStatus【 機 能 】デバイスの 連 続 出 力 動 作 状 態 を 取 得 します。【 書 式 】●C 言 語INT DaGetOutputStatus (HANDLEPOUTPUTSTATUS);DeviceHandle,OutputStatus●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaGetOutputStatus (IntPtrDeviceHandle,out OUTPUTSTATUSOutputStatus);●Visual Basic .NETDeclare Function DaGetOutputStatus Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef OutputStatus As OUTPUTSTATUS _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。OutputStatus連 続 出 力 動 作 状 態 を 取 得 する OUTPUTSTATUS 構 造 体 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.174


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;OUTPUTSTATUS OutputStatus;nRet = DaGetOutputStatus( DeviceHandle, &OutputStatus);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaGetOutputStatus errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;IFCMADA.OUTPUTSTATUS OutputStatus;nRet = IFCMADA.DaGetOutputStatus( DeviceHandle, out OutputStatus);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DaGetOutputStatus error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim OutputStatus As IFCMADA.OUTPUTSTATUSnRet = IFCMADA.DaGetOutputStatus( DeviceHandle, OutputStatus)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaGetOutputStatus errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 連 続 出 力 動 作 状 態 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.175


GPC-MA001 Help for Windows42. DaLoadAdjustVR【 機 能 】デバイスのキャリブレーションデータをロードします。【 書 式 】●C 言 語INT DaLoadAdjustVR (HANDLE DeviceHandle,ULONG Channel,ULONG LoadMode);●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaLoadAdjustVR (IntPtr DeviceHandle,uint Channel,uint LoadMode);●Visual Basic .NETDeclare Function DaLoadAdjustVR Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByVal LoadMode As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelキャリブレーションデータをロードするチャンネルを 指 定 します。LoadModeキャリブレーションデータのモードを 指 定 します。識 別 子 値 内 容DA_ADJUST_INIT 1 出 荷 時 設 定DA_ADJUST_USER 2 ユーザ 設 定【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.176


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;HANDLE DeviceHandle;nRet = DaLoadAdjustVR(DeviceHandle, 1, DA_ADJUST_INIT);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaGetOutputStatus errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMADA.DaLoadAdjustVR(DeviceHandle, 1, IFCMA.DA_ADJUST_INIT);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DaLoadAdjustVR error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMADA.DaLoadAdjustVR(DeviceHandle, 1, IFCMA.DA_ADJUST_INIT);If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaLoadAdjustVR errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のキャリブレーションを 行 います。© 2012, 2014 Interface Corporation. All rights reserved.177


GPC-MA001 Help for Windows43. DaSetEventMask【 機 能 】デバイスの 割 り 込 みイベントのマスク 設 定 を 行 います。【 書 式 】●C 言 語INT DaSetEventMask(HANDLEDWORD);DeviceHandle,EventMask●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaSetEventMask (IntPtrDeviceHandle,uintEventMask);●Visual Basic .NETDeclare Function DaSetEventMask Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal EventMask As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。EventMask使 用 する 割 り 込 みイベントのマスクデータを 指 定 してください。デフォルト:0bit32~bit3 bit2 bit1 bit0予 約 FIFO EMP SPE SPSSPSSPEFIFO EMP0: 未 発 生1: 連 続 出 力 開 始 割 り 込 み 検 出0: 未 発 生1: 連 続 出 力 終 了 割 り 込 み 検 出0: 未 発 生1:FIFO Empty 割 り 込 み 検 出【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.178


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = DaSetEventMask(DeviceHandle, 0x01);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaSetEventMask errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMADA.DaSetEventMask(DeviceHandle, 0x01);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DaSetEventMask error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMADA.DaSetEventMask(DeviceHandle, &H1)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaSetEventMask errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 割 り 込 みイベントマスクを 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.179


GPC-MA001 Help for Windows44. DaSetEvent【 機 能 】デバイスのイベントを 設 定 します。【 書 式 】●C 言 語INT DaSetEvent (HANDLEHANDLELPDACALLBACKPVOID);DeviceHandle,Event,CallBackProc,UserData●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaSetEvent (IntPtrDeviceHandle,IntPtrEvent,uintCallBackProc,IntPtrUserData);[DllImport(“IfMaDa.dll”)]public static extern uint DaSetEvent (IntPtrDeviceHandle,IntPtrEvent,LPDACALLBACK CallBackProc,IntPtrUserData);●Visual Basic .NETDeclare Function DaSetEvent Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Event As IntPtr, _ByVal CallBackProc As PMADACALLBACK, _ByVal UserData As IntPtr _) As IntPtrDeclare Function DaSetEvent Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Event As IntPtr, _ByVal CallBackProc As Integer, _ByVal UserData As IntPtr _) As IntPtr© 2012, 2014 Interface Corporation. All rights reserved.180


GPC-MA001 Help for Windows【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Event割 り 込 みイベント 時 にシグナル 状 態 に 設 定 されるイベントを 識 別 します。イベント 通 知 を 行 わない 場 合 には、C 言 語 では NULL,Visual C# .NET ,Visual Basic .NETでは 0 を 指 定 してください。デフォルト:0 または NULLCallBackProc割 り 込 みイベント 時 に 呼 び 出 すユーザ・コールバック 関 数 のアドレスを 指 定 します。ユーザ・コールバック 関 数 の 呼 び 出 しを 行 わない 場 合 には、C 言 語 では NULL, VisualC# .NET ,Visual Basic .NET では 0 を 指 定 してください。デフォルト:0 または NULLUserDataユーザ・コールバック 関 数 へ 引 き 渡 すユーザ・データを 指 定 します【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.181


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語void CALLBACK EventProc(DWORD EventStatus, PVOID dwUser){printf("Callback(EventStatus:%lxh)\n", EventStatus);}INT nRet;HANDLE DeviceHandle;HANDLE hEvent;// マスクの 設 定 ( 連 続 出 力 終 了 検 出 )nRet = DaSetEventMask(hDeviceHandle, 0x02);if (nRet != IFMA_ERROR_SUCCESS) {printf("DaSetEventMask errr(%lx)", nRet);return;}// イベントの 設 定hEvent = CreateEvent(0, TRUE, FALSE, NULL);if (hEvent == NULL) {printf("CreateEvent error \n");MaClose(hDeviceHandle);return;}// イベント/コールバックの 登 録nRet = DaSetEvent(hDeviceHandle, hEvent, EventProc, 0);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaSetEvent errr(%lx)\n", nRet);CloseHandle(hEvent);MaClose(DeviceHandle);return;}// イベントがシグナルになるまで 待 機WaitForSingleObject(hEvent, 0xFFFFFFFF);ResetEvent(hEvent);CloseHandle(hEvent);© 2012, 2014 Interface Corporation. All rights reserved.182


GPC-MA001 Help for Windows●Visual C# .NETstatic IFCMADA.LPMADACALLBACK LpCallback = new IFCMADA.LPMADACALLBACK(EventProc);static void EventProc(uint Status, IntPtr UserData) {Console.WriteLine("Callback Status = {0:X}, UserData = {1:X}",Status, UserData.ToInt32());}uint nRet;IntPtr DeviceHandle;IntPtr hEvent;uint User = 0x01;// マスクの 設 定nRet = IFCMADA.DaSetEventMask(DeviceHandle, 0x00000002);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {CON.WriteLine("DaSetEventMask error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}// イベントの 設 定hEvent = IFCMA.CreateEvent(IntPtr.Zero, true, false, null);if (hEvent == IntPtr.Zero) {Console.WriteLine("CreateEvent errr");IFCMA.MaClose(DeviceHandle);return;}// イベント/コールバックの 登 録nRet = IFCMADA.DaSetEvent(DeviceHandle, hEvent, LpCallback, (IntPtr)User);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DaSetEvent error ={0:x}", nRet);IFCMA.CloseHandle(hEvent);IFCMA.MaClose(DeviceHandle);return;}// イベントがシグナルになるまで 待 機IFCMA.WaitForSingleObject(hEvent, 0xFFFFFFFF);IFCMA.ResetEvent(hEvent);IFCMA.CloseHandle(hEvent);© 2012, 2014 Interface Corporation. All rights reserved.183


GPC-MA001 Help for Windows●Visual Basic .NETDim LpCallback As IFCMADA.PMADACALLBACKSub EventProc(ByVal Status As Integer, ByVal UserData As IntPtr)Console.WriteLine("Callback Status = {0:X}, UserData = {1:X}", _Status, UserData.ToInt32())End SubDim nRet As IntegerDim hDeviceHandle As IntPtrDim User As IntPtrDim hEvent As IntPtr' マスクの 設 定 (CH1 TRG0 UP)nRet = IFCMADA.DaSetEventMask(hDeviceHandle, &H1)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("DaSetEventMask errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd If' イベントの 設 定hEvent = CreateEvent(IntPtr.Zero, True, False, 0);If hEvent.Equals(IntPtr.Zero) ThenConsole.WriteLine("CreateEvent errr")IFCMA.MaClose(hDeviceHandle)ReturnEnd If' イベント/コールバックの 登 録LpCallback = New IFCMADA.PMADACALLBACK(AddressOf EventProc)nRet = IFCMADA.DaSetEvent(hDeviceHandle, hEvent, LpCallback, User)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("MaGetDeviceInfo errr({0:x})", nRet)IFCMA.CloseHandle(hEvent)IFCMA.MaClose(hDeviceHandle)ReturnEnd If' イベントがシグナルになるまで 待 機IFCMA.WaitForSingleObject(hEvent, &HFFFFFFFF)IFCMA.ResetEvent(hEvent)IFCMA.CloseHandle(hEvent)デバイスハンドル DeviceHandle のイベント 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.184


GPC-MA001 Help for Windows45. DaKillEvent【 機 能 】デバイスのイベントを 解 除 します。【 書 式 】●C 言 語INT DaKillEvent (HANDLE);DeviceHandle●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaKillEvent (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function DaKillEvent Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.185


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = DaKillEvent(DeviceHandle);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaKillEvent errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMADA.DaKillEvent(DeviceHandle);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DaKillEvent error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrRet = IFCMADA.DaKillEvent(DeviceHandle)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaKillEvent errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のイベントを 解 除 します。© 2012, 2014 Interface Corporation. All rights reserved.186


GPC-MA001 Help for Windows46. DaGetEventStatus【 機 能 】デバイスの 発 生 したイベント 要 因 を 取 得 します。【 書 式 】●C 言 語INT DaGetEventStatus (HANDLE DeviceHandle,PDWORD pEventStatus);●Visual C# .NET[DllImport(“IfMaDa.dll”)]public static extern uint DaGetEventStatus (IntPtr DeviceHandle,out uint pEventStatus);●Visual Basic .NETDeclare Function DaGetEventStatus Lib "IfMaDa.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef pEventStatus As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pEventStatus発 生 した 要 因 を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.187


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD EventStatus;nRet = DaGetEventStatus( DeviceHandle, &EventStatus);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DaGetEventStatus errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint EventStatus;nRet = IFCMADA.DaGetEventStatus(DeviceHandle, out EventStatus);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DaGetEventStatus error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim EventStatus As IntegernRet = IFCMADA.DaGetEventStatus( DeviceHandle, EventStatus)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DaGetEventStatus errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 発 生 したイベント 要 因 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.188


GPC-MA001 Help for Windows6.9 関 数 個 別 説 明 (デジタル 入 出 力 )47. DiInputDI【 機 能 】デバイスのデジタル 入 力 データの 取 得 を 行 ないます。【 書 式 】●C 言 語INT DiInputDI (HANDLEPDWORD);DeviceHandle,Data●Visual C# .NET[DllImport(“IfMaDio.dll”)]public static extern uint DiInputDI (IntPtr DeviceHandle,out uint Data);●Visual Basic .NETDeclare Function DiInputDI Lib "IfMaDio.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef Data As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Dataデジタル 入 力 データを 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0IN8 IN7 IN6 IN5 IN4 IN3 IN2 IN10 オープン(PULLUP)(’High’)1 GND に 接 続 されている(’Low’)【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.189


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD DiData;nRet = DiInputDI(DeviceHandle, & DiData);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DiInputDI errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint DiData;nRet = IFCMADIO.DiInputDI(DeviceHandle, out DiData);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("DiInputDI error ={0:x} ", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim DiData As IntegernRet = IFCMADIO.DiInputDI(hDeviceHandle, DiData)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DiInputDI errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 1 件 のデジタル 入 力 データを 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.190


GPC-MA001 Help for Windows48. DiSetFilter【 機 能 】デバイスのデジタルフィルタ 時 間 の 設 定 を 行 います。【 書 式 】●C 言 語INT DiSetFilter (HANDLE DeviceHandle,DWORD Num,BYTE Filter);●Visual C# .NET[DllImport(“IfMaDio.dll”)]public static extern uint DiSetFilter (IntPtr DeviceHandle,uint Num,BYTE Filter);●Visual Basic .NETDeclare Function DiSetFilter Lib "IfMaDio.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Num As Integer, _ByVal Filter As Byte _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Numデジタルフィルタを 設 定 する 番 号 を 指 定 します。デフォルト:0bit32~bit8予 約bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0IN8 IN7 IN6 IN5 IN4 IN3 IN2 IN1© 2012, 2014 Interface Corporation. All rights reserved.191


GPC-MA001 Help for WindowsFilterデジタルフィルタの 値 を 指 定 します。bit7 bit6, 5 bit4~bit00 CLKSEL COUNTCOUNT CLKSEL=00CLKSEL=01CLKSEL=10CLKSEL=11(1μs)(10μs)(100μs)0 フィルタなし フィルタなし フィルタなし フィルタなし1 1us 10us 100us フィルタなし2 2us 20us 200us フィルタなし: : : : :30 30us 300us 3000us フィルタなし31 31us 310us 3100us フィルタなし【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 備 考 】・CLKSEL 指 定 した 値 の 1 周 期 分 の 誤 差 が 発 生 します。・ 設 定 する 際 は 同 期 トリガを 無 効 にして 行 うこと( 予 期 しない 誤 動 作 を 防 ぐため)。・ 変 更 の 際 は 割 り 込 みイベントのマスクを 有 効 にしてください( 予 期 しない 割 り 込 みを 防 ぐため)。・サンプリング 停 止 中 に 変 更 してください( 予 期 しないイベントログを 残 さないため)。© 2012, 2014 Interface Corporation. All rights reserved.192


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = DiSetFilter(DeviceHandle, 0x01, 10);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DiSetFilter errr(%lx)\n", nRet);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMADIO.DiSetFilter(DeviceHandle, 0x01, 10);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("DiSetFilter error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMADIO.DiSetFilter(hDeviceHandle, &H1, 10)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DiSetFilter errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のデジタルフィルタの 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.193


GPC-MA001 Help for Windows49. DoOutputDO【 機 能 】デバイスのデジタル 出 力 データの 設 定 を 行 ないます。【 書 式 】●C 言 語INT DioOutputDO (HANDLEDWORD);DeviceHandle,Data●Visual C# .NET[DllImport(“IfMaDio.dll”)]public static extern uint DioOutputDO (IntPtr DeviceHandle,uintData);●Visual Basic .NETDeclare Function DioOutputDO Lib "IfMaDio.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Data As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Dataデジタル 出 力 データを 指 定 します。bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0DO8 DO7 DO6 DO5 DO4 DO3 DO2 DO10 オープン(PULLUP)(’High’)1 トランジスタ ON(GND に 接 続 されている)(’Low’)【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.194


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = DoOutputDO(DeviceHandle, 0x03);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DoOutputDO errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMA.DoOutputDO(DeviceHandle, 0x03);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DoOutputDO error ={0:x} ", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMADIO.DoOutputDO(hDeviceHandle, &H3)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DoOutputDO errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 1 件 のデジタル 出 力 データの 設 定 を 行 ないます。© 2012, 2014 Interface Corporation. All rights reserved.195


GPC-MA001 Help for Windows50. DiSetTrgEdge【 機 能 】IN1~IN4 のエッジ 極 性 の 設 定 を 行 います。【 書 式 】●C 言 語INT DiSetTrgEdge (HANDLE DeviceHandle,DWORD Edge);●Visual C# .NET[DllImport(“IfMaDio.dll”)]public static extern uint DiSetTrgEdge (IntPtr DeviceHandle,uint Edge);●Visual Basic .NETDeclare Function DiSetTrgEdge Lib "IfMaDio.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Edge As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Edge使 用 するエッジ 極 性 を 指 定 してください。デフォルト:0bit32~bit4 bit3 bit2 bit1 bit0予 約 IN4 IN3 IN2 IN10: 立 ち 上 がりエッジ1: 立 ち 下 がりエッジ【 備 考 】・ 設 定 する 際 は 同 期 トリガを 無 効 にして 行 うこと( 予 期 しない 誤 動 作 を 防 ぐため)。・ 変 更 の 際 は 割 り 込 みイベントのマスクを 有 効 にしてください( 予 期 しない 割 り 込 みを 防 ぐため)。・サンプリング 停 止 中 に 変 更 してください( 予 期 しないイベントログを 残 さないため)。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.196


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = DiSetTrgEdge(DeviceHandle, 0x01);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DiSetTrgEdge errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMADIO.DiSetTrgEdge(DeviceHandle, 0x01);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("DiSetTrgEdge error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMADIO.DiSetTrgEdge(hDeviceHandle, &H1)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DiSetTrgEdge errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のエッジ 極 性 を 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.197


GPC-MA001 Help for Windows51. DiSetEventMask【 機 能 】割 り 込 みイベントのマスク 設 定 を 行 います。【 書 式 】●C 言 語INT DiSetEventMask(HANDLEDWORD);DeviceHandle,EventMask●Visual C# .NET[DllImport(“IfMaDio.dll”)]public static extern uint DiSetEventMask (IntPtrDeviceHandle,uintEventMask);●Visual Basic .NETDeclare Function DiSetEventMask Lib "IfMaDio.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal EventMask As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。EventMask使 用 する 割 り 込 みイベントのマスクデータを 指 定 してください。デフォルト:0bit32~bit4 bit3 bit2 bit1 bit0予 約 IN4 IN3 IN2 IN1IN1IN2IN3IN40: 未 発 生1:IN1 のエッジ 割 り 込 み 検 出0: 未 発 生1:IN2 のエッジ 割 り 込 み 検 出0: 未 発 生1:IN3 のエッジ 割 り 込 み 検 出0: 未 発 生1:IN4 のエッジ 割 り 込 み 検 出© 2012, 2014 Interface Corporation. All rights reserved.198


GPC-MA001 Help for Windows【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = DiSetEventMask(DeviceHandle, 0x01);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DiSetEventMask errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMADIO.DiSetEventMask(DeviceHandle, 0x01);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("DiSetEventMask error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMADIO.DiSetEventMask(hDeviceHandle, &H1)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DiSetEventMask errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 割 り 込 みイベントマスクを 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.199


GPC-MA001 Help for Windows52. DiSetEvent【 機 能 】デバイスのイベントを 設 定 します。【 書 式 】●C 言 語INT DiSetEvent (HANDLEHANDLELPDICALLBACKPVOID);DeviceHandle,Event,CallBackProc,UserData●Visual C# .NET[DllImport(“IfMaDio.dll”)]public static extern uint DiSetEvent (IntPtrDeviceHandle,IntPtrEvent,uintCallBackProc,IntPtrUserData);[DllImport(“IfMaDio.dll”)]public static extern uint DiSetEvent (IntPtrDeviceHandle,IntPtrEvent,LPDICALLBACK CallBackProc,IntPtrUserData);●Visual Basic .NETDeclare Function DiSetEvent Lib "IfMaDio.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Event As IntPtr, _ByVal CallBackProc As PMADICALLBACK, _ByVal UserData As IntPtr _) As IntPtrDeclare Function DiSetEvent Lib "IfMaDio.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Event As IntPtr, _ByVal CallBackProc As Integer, _ByVal UserData As IntPtr _) As IntPtr© 2012, 2014 Interface Corporation. All rights reserved.200


GPC-MA001 Help for Windows【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Event割 り 込 みイベント 時 にシグナル 状 態 に 設 定 されるイベントを 識 別 します。イベント 通 知 を 行 わない 場 合 には、C 言 語 では NULL,Visual C# .NET ,Visual Basic .NETでは 0 を 指 定 してください。デフォルト:0 または NULLCallBackProc割 り 込 みイベント 時 に 呼 び 出 すユーザ・コールバック 関 数 のアドレスを 指 定 します。ユーザ・コールバック 関 数 の 呼 び 出 しを 行 わない 場 合 には、C 言 語 では NULL, VisualC# .NET ,Visual Basic .NET では 0 を 指 定 してください。デフォルト:0 または NULLUserDataユーザ・コールバック 関 数 へ 引 き 渡 すユーザ・データを 指 定 します【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.201


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語void CALLBACK EventProc(DWORD EventStatus, PVOID dwUser){printf("Callback(EventStatus:%lxh)\n", EventStatus);}INT nRet;HANDLE DeviceHandle;HANDLE hEvent;// マスクの 設 定 (IN1)nRet = DiSetEventMask(hDeviceHandle, 0x01);if (nRet != IFMA_ERROR_SUCCESS) {printf("DiSetEventMask errr(%lx)", nRet);MaClose(hDeviceHandle);return;}// イベントの 設 定hEvent = CreateEvent(0, TRUE, FALSE, NULL);if (hEvent == NULL) {printf("CreateEvent errr");MaClose(DeviceHandle);return;}// イベント/コールバックの 登 録nRet = DiSetEvent(hDeviceHandle, hEvent, EventProc, 0);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DiSetEvent errr(%lx)\n", nRet);CloseHandle(hEvent);MaClose(DeviceHandle);return;}// イベントがシグナルになるまで 待 機WaitForSingleObject(hEvent, 0xFFFFFFFF);ResetEvent(hEvent);CloseHandle(hEvent);© 2012, 2014 Interface Corporation. All rights reserved.202


GPC-MA001 Help for Windows●Visual C# .NETstatic IFCMADIO.LPMADICALLBACK LpCallback = new IFCMADIO.LPMADICALLBACK(EventProc);// Callback Functionstatic void EventProc(uint Status, IntPtr UserData) {Console.WriteLine("Callback Status = {0}, UserData = {1:X}",Status, UserData.ToInt32());}uint nRet;IntPtr DeviceHandle;IntPtr hEvent;uint User = 0x01;// マスクの 設 定 (IN1)nRet = IFCMADIO.DiSetEventMask(DeviceHandle, 0x01);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {CON.WriteLine("DiSetEventMask error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}// イベントの 設 定hEvent = IFCMA.CreateEvent(IntPtr.Zero, true, false, null);if (hEvent == IntPtr.Zero) {Console.WriteLine("CreateEvent errr");IFCMA.MaClose(DeviceHandle);return;}// イベント/コールバックの 登 録nRet = IFCMADIO.DiSetEvent(DeviceHandle, hEvent, LpCallback, (IntPtr)User);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine("DiSetEvent error ={0:x}", nRet);IFCMA.CloseHandle(hEvent);IFCMA.MaClose(DeviceHandle);return;}// イベントがシグナルになるまで 待 機IFCMA.WaitForSingleObject(hEvent, 0xFFFFFFFF);IFCMA.ResetEvent(hEvent);IFCMA.CloseHandle(hEvent);© 2012, 2014 Interface Corporation. All rights reserved.203


GPC-MA001 Help for Windows●Visual Basic .NETDim LpCallback As IFCMADIO.PMADICALLBACK' Callback FunctionSub EventProc(ByVal Status As Integer, ByVal UserData As IntPtr)Console.WriteLine("Callback Status = {0:X}, UserData = {1:X}", _Status, UserData.ToInt32())End SubDim nRet As IntegerDim hDeviceHandle As IntPtrDim User As IntPtrDim hEvent As IntPtr' マスクの 設 定 (IN1)nRet = IFCMADIO.DiSetEventMask(hDeviceHandle, &H1)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("DiSetEventMask errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd If// イベントの 設 定hEvent = IFCMA.CreateEvent(IntPtr.Zero, True, False, 0)If hEvent.Equals(IntPtr.Zero) ThenConsole.WriteLine("CreateEvent errr")IFCMA.MaClose(hDeviceHandle)ReturnEnd If' イベント/コールバックの 登 録LpCallback = New IFCMADIO.PMADICALLBACK(AddressOf EventProc)nRet = IFCMADIO.DiSetEvent(hDeviceHandle, hEvent, LpCallback, User)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("DiSetEvent errr({0:x})", nRet)IFCMA.CloseHandle(hEvent)IFCMA.MaClose(hDeviceHandle)ReturnEnd If‘ イベントがシグナルになるまで 待 機IFCMA.WaitForSingleObject(hEvent, &HFFFFFFFF)IFCMA.ResetEvent(hEvent)IFCMA.CloseHandle(hEvent)デバイスハンドル DeviceHandle のイベント 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.204


GPC-MA001 Help for Windows53. DiKillEvent【 機 能 】デバイスのイベントを 解 除 します。【 書 式 】●C 言 語INT DiKillEvent (HANDLE);DeviceHandle●Visual C# .NET[DllImport(“IfMaDio.dll”)]public static extern uint DiKillEvent (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function DiKillEvent Lib "IfMaDio.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.205


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = DiKillEvent(DeviceHandle);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DiKillEvent errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;Ret = IFCMADIO.DiKillEvent(DeviceHandle);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DiKillEvent error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMADIO.DiKillEvent(hDeviceHandle)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DiKillEvent errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のイベントを 解 除 します。© 2012, 2014 Interface Corporation. All rights reserved.206


GPC-MA001 Help for Windows54. DiGetEventStatus【 機 能 】デバイスの 発 生 したイベント 要 因 を 取 得 します。【 書 式 】●C 言 語INT DiGetEventStatus (HANDLE DeviceHandle,PDWORD pEventStatus);●Visual C# .NET[DllImport(“IfMaDio.dll”)]public static extern uint DiGetEventStatus (IntPtr DeviceHandle,out uint pEventStatus);●Visual Basic .NETDeclare Function DiGetEventStatus Lib "IfMaDio.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef pEventStatus As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pEventStatus発 生 した 要 因 を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.207


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD EventStatus;nRet = DiGetEventStatus( DeviceHandle, &EventStatus);if (nRet != IFMA_ERROR_SUCCESS) {printf(" DiGetEventStatus errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint EventStatus;nRet = IFCMADIO.DiGetEventStatus (DeviceHandle, out EventStatus);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" DiGetEventStatus error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim EventStatus As IntegernRet = IFCMADIO.DiGetEventStatus( DeviceHandle, EventStatus)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" DiGetEventStatus errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のイベント 要 因 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.208


GPC-MA001 Help for Windows6.10 関 数 個 別 説 明 (カウンタ)55. CntReset【 機 能 】デバイスのカウンタリセットを 実 行 します。【 書 式 】●C 言 語INT CntReset (HANDLEINT);DeviceHandle,Channel●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntReset (IntPtr DeviceHandle,uintChannel);●Visual Basic .NETDeclare Function CntReset Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.209


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = CntReset(DeviceHandle, 1);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntReset errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMACNT.CntReset(DeviceHandle, 1);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("CntReset error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMACNT.CntReset(hDeviceHandle, 1)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntReset errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のカウンタリセットを 実 行 します。© 2012, 2014 Interface Corporation. All rights reserved.210


GPC-MA001 Help for Windows56. CntSetCountMode【 機 能 】デバイスのパルスカウントモードの 設 定 を 行 います。【 書 式 】●C 言 語INT CntSetCountMode (HANDLE DeviceHandle,INTChannel,DWORD Mode,DWORD Direction,DWORD ZLogic,DWORD ClearMode,BYTE Filter);●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntSetCountMode (IntPtr DeviceHandle,uint Channel,uint Mode,uint Direction,uint ZLogic,uint ClearMode,BYTE Filter);●Visual Basic .NETDeclare Function CntSetCountMode Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByVal Mode As Integer, _ByVal Direction As Integer, _ByVal ZLogic As Integer, _ByVal ClearMode As Integer, _BYTE Filter As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.211


GPC-MA001 Help for WindowsModeカウンタ 動 作 モードを 指 定 します。デフォルト:CNT_COUNTMODE1識 別 子 値 意 味CNT_COUNTMODE1 0 ゲート 信 号 付 き 単 相 パル 1 逓 倍 モードCNT_COUNTMODE2 1 ス2 逓 倍 モードCNT_COUNTMODE3 4 位 相 差 パルス1 逓 倍 モード 非 同 期 クリアCNT_COUNTMODE4 12同 期 クリアCNT_COUNTMODE5 5 2 逓 倍 モード 非 同 期 クリアCNT_COUNTMODE6 13同 期 クリアCNT_COUNTMODE7 6 4 逓 倍 モード 非 同 期 クリアCNT_COUNTMODE8 14同 期 クリアCNT_COUNTMODE9 8 2 パルスカウントモード(CW/CCW)Directionカウンタ 方 向 を 指 定 します。デフォルト:CNT_UP_COUNT識 別 子 値 意 味CNT_UP_COUNT 0 カウンタ UPCNT_DOWN_COUNT 1 カウンタ DOWNZLogicZ 相 の 極 性 を 指 定 します。デフォルト:CNT_Z_LOGIC_LOW識 別 子 値 意 味CNT_Z_LOGIC_LOW 0 1 で 有 効 、0 で 無 効CNT_Z_LOGIC_HIGH 1 1 で 無 効 、0 で 有 効ClearMode外 部 クリア 条 件 を 指 定 します。デフォルト:CNT_CLEARMODE0識 別 子 値 意 味CNT_CLEARMODE0 0 外 部 クリアを 行 わないCNT_CLEARMODE1 1 Z 相 のみでカウンタをクリアCNT_CLEARMODE2 2 L と Z 相 が 有 効 の 時 、カウンタをクリア© 2012, 2014 Interface Corporation. All rights reserved.212


GPC-MA001 Help for WindowsFilterデジタルフィルタの 値 を 指 定 します。デフォルト:0(フィルタなし)bit7 bit6, 5 bit4~bit00 CLKSEL COUNTCOUNTCLKSEL=00CLKSEL=01CLKSEL=10 CLKSEL=11(1μs)(10μs)(100μs)0 フィルタなし フィルタなし フィルタなし フィルタなし1 1us 10us 100us フィルタなし2 2us 20us 200us フィルタなし: : : : :30 30us 300us 3000us フィルタなし31 31us 310us 3100us フィルタなし【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.213


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = CntSetCountMode ( DeviceHandle, 1,CNT_COUNTMODE1,CNT_UP_COUNT,CNT_Z_LOGIC_HIGH,CNT_CLEARMODE0, 0x00);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntSetCountMode errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMACNT.CntSetCountMode(DeviceHandle, 1,IFCMACNT.CNT_COUNTMODE1,IFCMACNT.CNT_UP_COUNT,IFCMACNT.CNT_Z_LOGIC_HIGH,IFCMACNT.CNT_CLEARMODE0, 0x00);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("CntSetCountMode error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}© 2012, 2014 Interface Corporation. All rights reserved.214


GPC-MA001 Help for Windows●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMACNT.CntSetCountMode(hDeviceHandle, 1, _IFCMACNT.CNT_COUNTMODE1, _IFCMACNT.CNT_UP_COUNT, _IFCMACNT.CNT_Z_LOGIC_HIGH, _IFCMACNT.CNT_CLEARMODE0, &H0)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntSetCountMode errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 3 モードパルスカウンタのチャンネル 1 をゲート 信 号 付 き単 相 パルス 1 逓 倍 モード カウンタ UP に 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.215


GPC-MA001 Help for Windows57. CntSetComparator【 機 能 】デバイスの 一 致 検 出 条 件 を 設 定 します。【 書 式 】●C 言 語INT CntSetComparator (HANDLE DeviceHandle,INTChannel,DWORD Comparator);●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntSetComparator (IntPtr DeviceHandle,uintChannel,uintComparator);●Visual Basic .NETDeclare Function CntSetComparator Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByVal Comparator As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。Comparatorカウンタ 一 致 タイミングを 指 定 します。デフォルト:0x00000000【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.216


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = CntSetComparator (DeviceHandle, 1, 0x1000);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntSetComparator errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMACNT.CntSetComparator(DeviceHandle, 1, 0x1000);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine("CntSetComparator error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMACNT.CntSetComparator(hDeviceHandle, 1, &H1000)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntSetComparator errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 一 致 検 出 条 件 を 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.217


GPC-MA001 Help for Windows58. CntSetUpDown【 機 能 】デバイスのカウンタアップ/ダウンタイミングの 条 件 を 設 定 します。【 書 式 】●C 言 語INT CntSetUpDown (HANDLE DeviceHandle,INTChannel,DWORD Cycle,DWORD Logic);●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntSetUpDown (IntPtr DeviceHandle,uintChannel,uintCycle,uintLogic);●Visual Basic .NETDeclare Function CntSetUpDown Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByVal Cycle As Integer, _ByVal Logic As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。Cycleカウンタアップ/ダウンタイミングを 生 成 するための 周 期 を 指 定 します。0~0xff の 間 で 指 定 できます。デフォルト:0© 2012, 2014 Interface Corporation. All rights reserved.218


GPC-MA001 Help for WindowsLogicカウンタアップ/ダウンタイミング 周 期 の 極 性 を 指 定 します。デフォルト:CNT_UP_COUNT識 別 子 値 意 味CNT_UP_COUNT 0 カウンタ UPCNT_DOWN_COUNT 1 カウンタ DOWN【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = CntSetUpDown(DeviceHandle, 1, 0x80, CNT_UP_COUNT);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntSetUpDown errr(%lx)\n", nRet);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMACNT.CntSetUpDown(DeviceHandle, 1, 0x80,IFCMACNT.CNT_UP_COUNT);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine(" CntSetUpDown error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMACNT.CntSetUpDown(DeviceHandle, 1, &H80, _IFCMACNT.CNT_UP_COUNT)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntSetUpDown errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のカウンタアップ/ダウンタイミング 条 件 を 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.219


GPC-MA001 Help for Windows59. CntSetTrigger【 機 能 】デバイスのカウンタスタート/ストップ 条 件 の 設 定 を 行 います。【 書 式 】●C 言 語INT CntSetTrigger (HANDLE DeviceHandle,INTChannel,DWORD StartTrigger,DWORD StopTrigger,DWORD ClearTrigger,);●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntSetTrigger (IntPtr DeviceHandle,uintChannel,uintStartTrigger,uintStopTrigger,uintClearTrigger,);●Visual Basic .NETDeclare Function CntSetTrigger Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByVal StartTrigger As Integer, _ByVal StopTrigger As Integer, _ByVal ClearTrigger As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.220


GPC-MA001 Help for WindowsStartTriggerカウンタのスタート 条 件 を 指 定 します。デフォルト:CNT_NONE_TRG識 別 子 値 意 味MA_NONE_TRG 0 トリガなしMA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 7StopTriggerカウンタのストップ 条 件 を 指 定 します。デフォルト:CNT_NONE_TRG識 別 子 値 意 味MA_NONE_TRG 0 トリガなしMA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 7ClearTriggerカウンタのクリア 条 件 を 指 定 します。デフォルト:CNT_NONE_TRG識 別 子 値 意 味MA_NONE_TRG 0 トリガなしMA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 7© 2012, 2014 Interface Corporation. All rights reserved.221


GPC-MA001 Help for Windows【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD StartTrigger;DWORD StopTrigger;DWORD ClearTrigger;StartTrigger = MA_SYNC0_TRG;StopTrigger = MA_SYNC1_TRG;ClearTrigger = MA_NONE_TRG;nRet = CntSetTrigger(DeviceHandle, 1, StartTrigger, StopTrigger, ClearTrigger);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntSetTrigger errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint StartTrigger;uint StopTrigger;uint ClearTrigger;StartTrigger = IFCMACNT.MA_SYNC0_TRG;StopTrigger = IFCMACNT.MA_SYNC1_TRG;ClearTrigger = IFCMACNT.MA_NONE_TRG;nRet = IFCMACNT.CntSetTrigger(DeviceHandle, 1, StartTrigger, StopTrigger,ClearTrigger);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine(" CntSetTrigger error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}© 2012, 2014 Interface Corporation. All rights reserved.222


GPC-MA001 Help for Windows●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim StartTrigger As IntegerDim StopTrigger As IntegerDim ClearTrigger As IntegerStartTrigger = IFCMACNT.MA_SYNC0_TRGStopTrigger = IFCMACNT.MA_SYNC1_TRGClearTrigger = IFCMACNT.MA_NONE_TRGnRet = IFCMACNT.CntSetTrigger(DeviceHandle, 1, StartTrigger, StopTrigger, _ClearTrigger)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntSetTrigger errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のカウンタスタート/ストップ 条 件 の 設 定 を 行 ないます。© 2012, 2014 Interface Corporation. All rights reserved.223


GPC-MA001 Help for Windows60. CntStart【 機 能 】デバイスのカウンタを 開 始 させます。【 書 式 】●C 言 語INT CntStart (HANDLE DeviceHandle,INT Channel);●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntStart (IntPtr DeviceHandle,uint Channel);●Visual Basic .NETDeclare Function CntStart Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.224


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;uint DeviceHandle;nRet = CntStart ( DeviceHandle, 1 );if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntStart errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMACNT.CntStart(DeviceHandle, 1);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("CntStart error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrRet = IFCMACNT.CntStart ( DeviceHandle, 1 )If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntStart errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のカウンタを 開 始 させます。© 2012, 2014 Interface Corporation. All rights reserved.225


GPC-MA001 Help for Windows61. CntStop【 機 能 】デバイスのカウンタを 停 止 させます。【 書 式 】●C 言 語INT CntStop (HANDLEINT);DeviceHandle,Channel●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntStop (IntPtr DeviceHandle,uint Channel);●Visual Basic .NETDeclare Function CntStop Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.226


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語int nRet;uint DeviceHandle;nRet = CntStop ( DeviceHandle, 1 );if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntStop errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMACNT.CntStop(DeviceHandle, 1);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" CntStop error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMACNT.CntStop(DeviceHandle, 1);If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntStop errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のカウンタを 停 止 させます。© 2012, 2014 Interface Corporation. All rights reserved.227


GPC-MA001 Help for Windows62. CntGetCounter【 機 能 】デバイスのカウンタ 値 を 取 得 します。【 書 式 】●C 言 語INT CntGetCounter (HANDLE DeviceHandle,INTChannel,PDWORD Counter);●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntGetCounter (IntPtr DeviceHandle,uintChannel,out uint Counter);●Visual Basic .NETDeclare Function CntGetCounter Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByRef Counter As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。Counterカウンタ 値 を 格 納 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.228


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD Counter;nRet = CntGetCounter(DeviceHandle, 1, &Counter);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntGetCounter errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint Counter;nRet = IFCMACNT.CntGetCounter (DeviceHandle, 1, out Counter);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("CntGetCounter error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim Counter As IntegerRet = IFCMACNT.CntGetCounter(DeviceHandle, 1, Counter)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntGetCounter errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 1 チャンネルのカウント 値 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.229


GPC-MA001 Help for Windows63. CntGetStatus【 機 能 】デバイスのカウンタステータスを 取 得 します。【 書 式 】●C 言 語INT CntGetStatus (HANDLE DeviceHandle,INTChannel,PDWORD CntStatus);●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntGetStatus (IntPtr DeviceHandle,uintChannel,out uint CntStatus);●Visual Basic .NETDeclare Function CntGetStatus Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByRef CntStatus As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。CntStatusカウンタステータスを 格 納 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。bit32~bit4 bit4 bit3 bit2 bit1 bit0予 約 C/B 予 約 予 約 予 約 RUNCBFRUN0: 未 発 生1:キャリー/ボローが 発 生 した0:カウンタ 停 止 中1:カウンタ 動 作 中© 2012, 2014 Interface Corporation. All rights reserved.230


GPC-MA001 Help for Windows【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD CntStatus;nRet = CntGetStatus(DeviceHandle, 1, &CntStatus);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntGetStatus errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint CntStatus;nRet = IFCMACNT.CntGetStatus(DeviceHandle, 1, out CntStatus);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("CntGetStatus error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim CntStatus As IntegernRet = CntGetStatus(DeviceHandle, 1, CntStatus)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntStatus errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のチャンネル 1 のカウンタステータスを 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.231


GPC-MA001 Help for Windows64. CntSetEventMask【 機 能 】割 り 込 みイベントのマスク 設 定 を 行 います。【 書 式 】●C 言 語INT CntSetEventMask(HANDLEDeviceHandle,INTChannel,DWORDEventMask);●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntSetEventMask (IntPtrDeviceHandle,uintChannel,uintEventMask);●Visual Basic .NETDeclare Function CntSetEventMask Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByVal EventMask As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。EventMask使 用 する 割 り 込 みイベントのマスクデータを 指 定 してください。デフォルト:0bit32~bit2 bit2 bit1 bit0予 約 CNTERR C/B CNTMTCNTMTC/B0: 未 発 生1:カウンタ 一 致 検 出0: 未 発 生1:キャリー/ボロー 検 出© 2012, 2014 Interface Corporation. All rights reserved.232


GPC-MA001 Help for WindowsCNTERR0: 未 発 生1:カウンタ 異 常 入 力 検 出【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = CntSetEventMask (DeviceHandle, 0x07);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntSetEventMask errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMACNT.CntSetEventMask(DeviceHandle, 1, 0x07);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("CntSetEventMask error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMACNT.CntSetEventMask(hDeviceHandle, 1, &H7)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("CntSetEventMask errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle の 割 り 込 みイベントマスクを 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.233


GPC-MA001 Help for Windows65. CntSetEvent【 機 能 】デバイスのイベントを 設 定 します。【 書 式 】●C 言 語INT CntSetEvent (HANDLEHANDLELPCNTCALLBACKPVOID);DeviceHandle,Event,CallBackProc,UserData●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntSetEvent (IntPtrDeviceHandle,IntPtrEvent,uintCallBackProc,IntPtrUserData);[DllImport(“IfMaCnt.dll”)]public static extern uint CntSetEvent (IntPtrDeviceHandle,IntPtrEvent,LPCNTCALLBACK CallBackProc,IntPtrUserData);●Visual Basic .NETDeclare Function CntSetEvent Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Event As IntPtr, _ByVal CallBackProc As PMACNTCALLBACK, _ByVal UserData As IntPtr _) As IntPtrDeclare Function CntSetEvent Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Event As IntPtr, _ByVal CallBackProc As Integer, _ByVal UserData As IntPtr _) As IntPtr© 2012, 2014 Interface Corporation. All rights reserved.234


GPC-MA001 Help for Windows【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Event割 り 込 みイベント 時 にシグナル 状 態 に 設 定 されるイベントを 識 別 します。イベント 通 知 を 行 わない 場 合 には、C 言 語 では NULL,Visual C# .NET ,Visual Basic .NETでは 0 を 指 定 してください。デフォルト:0 または NULLCallBackProc割 り 込 みイベント 時 に 呼 び 出 すユーザ・コールバック 関 数 のアドレスを 指 定 します。ユーザ・コールバック 関 数 の 呼 び 出 しを 行 わない 場 合 には、C 言 語 では NULL, VisualC# .NET ,Visual Basic .NET では 0 を 指 定 してください。デフォルト:0 または NULLUserDataユーザ・コールバック 関 数 へ 引 き 渡 すユーザ・データを 指 定 します【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.235


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語void CALLBACK EventProc(INT Channel, DWORD EventStatus, PVOID dwUser){printf("Callback(Channel:%d EventStatus:%lxh)\n", Channel, EventStatus);}INT nRet;HANDLE DeviceHandle;HANDLE hEvent;// マスクの 設 定 (カウンタ 一 致 検 出 /キャリー/ボロー 検 出 /カウンタ 異 常 入 力 検 出 )nRet = CntSetEventMask(hDeviceHandle, 1, 0x07);if (nRet != IFMA_ERROR_SUCCESS) {printf("CntSetEventMask errr(%lx)", nRet);MaClose(hDeviceHandle);return;}// イベントの 設 定hEvent = CreateEvent(0, TRUE, FALSE, NULL);if (hEvent == NULL) {printf("CreateEvent errr");MaClose(DeviceHandle);return;}// イベント/コールバックの 登 録nRet = CntSetEvent(hDeviceHandle, hEvent, EventProc, 0);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntSetEvent errr(%lx)\n", nRet);CloseHandle(hEvent);MaClose(DeviceHandle);return;}// イベントがシグナルになるまで 待 機WaitForSingleObject(hEvent, 0xFFFFFFFF);ResetEvent(hEvent);CloseHandle(hEvent);© 2012, 2014 Interface Corporation. All rights reserved.236


GPC-MA001 Help for Windows●Visual C# .NETstatic IFCMACNT.LPMACNTCALLBACK LpCallback = new IFCMACNT.LPMACNTCALLBACK(EventProc);// Callback Functionstatic void EventProc(uint Channel, uint Status, IntPtr UserData) {Console.WriteLine("Callback Channel= {0:X}, Status = {1:X}, UserData = {2:X}",Channel, Status, UserData.ToInt32());}uint nRet;IntPtr DeviceHandle;IntPtr hEvent;uint User = 0x01;// マスクの 設 定 (カウンタ 一 致 検 出 /キャリー/ボロー 検 出 /カウンタ 異 常 入 力 検 出 )nRet = IFCMACNT.CntSetEventMask(DeviceHandle, 1, 0x07);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {CON.WriteLine("CntSetEventMask error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}// イベントの 設 定hEvent = IFCMA.CreateEvent(IntPtr.Zero, true, false, null);if (hEvent == IntPtr.Zero) {Console.WriteLine("CreateEvent errr");IFCMA.MaClose(DeviceHandle);return;}// イベント/コールバック 関 数 の 登 録nRet = IFCMACNT.CntSetEvent(DeviceHandle, hEvent, LpCallback, (IntPtr)User);if (nRet != IFCMA.IFMA_ERROR_SUCCESS) {Console.WriteLine("CntSetEvent error ={0:x}", nRet);IFCMA.CloseHandle(hEvent);IFCMA.MaClose(DeviceHandle);return;}// イベントがシグナルになるまで 待 機IFCMA.WaitForSingleObject(hEvent, 0xFFFFFFFF);IFCMA.ResetEvent(hEvent);IFCMA.CloseHandle(hEvent);© 2012, 2014 Interface Corporation. All rights reserved.237


GPC-MA001 Help for Windows●Visual Basic .NETDim LpCallback As IFCMACNT.PMACNTCALLBACK' Callback FunctionSub EventProc(ByVal Channel As Integer, ByVal Status As Integer, ByVal UserData As IntPtr)Console.WriteLine("Callback Channel = {0:d}, Status = {1:X}h, UserData = {2:X}h",_Channel, Status, UserData.ToInt32())End SubDim nRet As IntegerDim hDeviceHandle As IntPtrDim User As IntPtrDim hEvent As IntPtr' マスクの 設 定 (カウンタ 一 致 検 出 /キャリー/ボロー 検 出 /カウンタ 異 常 入 力 検 出 )nRet = IFCMACNT.CntSetEventMask(hDeviceHandle, Channel, &H7)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("CntSetEventMask errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd If‘ イベントの 設 定hEvent = IFCMA.CreateEvent(IntPtr.Zero, True, False, 0)If hEvent.Equals(IntPtr.Zero) ThenConsole.WriteLine("CreateEvent errr")IFCMA.MaClose(hDeviceHandle)ReturnEnd If' イベント/コールバックの 登 録LpCallback = New IFCMACNT.PMACNTCALLBACK(AddressOf EventProc)nRet = IFCMACNT.CntSetEvent(hDeviceHandle, hEvent, LpCallback, User)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine("DiSetEvent errr({0:x})", nRet)IFCMA.CloseHandle(hEvent)IFCMA.MaClose(hDeviceHandle)ReturnEnd If‘ イベントがシグナルになるまで 待 機IFCMA.WaitForSingleObject(hEvent, &HFFFFFFFF)IFCMA.ResetEvent(hEvent)IFCMA.CloseHandle(hEvent)デバイスハンドル DeviceHandle のイベント 設 定 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.238


GPC-MA001 Help for Windows66. CntKillEvent【 機 能 】デバイスのイベントを 解 除 します。【 書 式 】●C 言 語INT CntKillEvent (HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntKillEvent (IntPtr DeviceHandle);●Visual Basic .NETDeclare Function CntKillEvent Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.239


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;nRet = CntKillEvent(DeviceHandle);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntSetEvent errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;nRet = IFCMACNT.CntKillEvent(DeviceHandle)if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine("CntKillEvent error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrnRet = IFCMACNT.CntKillEvent(DeviceHandle)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntKillEvent errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のイベントを 解 除 します。© 2012, 2014 Interface Corporation. All rights reserved.240


GPC-MA001 Help for Windows67. CntGetEventStatus【 機 能 】デバイスの 発 生 したイベント 要 因 を 取 得 します。【 書 式 】●C 言 語INT CntGetEventStatus (HANDLE DeviceHandle,INTChannel,PDWORD EventStatus);●Visual C# .NET[DllImport(“IfMaCnt.dll”)]public static extern uint CntGetEventStatus (IntPtr DeviceHandle,uintChannel,out uint EventStatus);●Visual Basic .NETDeclare Function CntGetEventStatus Lib "IfMaCnt.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal Channel As Integer, _ByRef EventStatus As Integer _) As IntPtr【パラメータ】DeviceHandleMaOpen 関 数 で 取 得 したデバイスハンドルを 指 定 してください。Channelチャンネルを 指 定 します。EventStatus発 生 した 要 因 を 取 得 する 変 数 へのポインタ( 参 照 渡 し)を 指 定 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFMA_ERROR_SUCCESS が 返 されます。IFMA_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.16 戻 り 値 一 覧 』をご 参 照 ください。© 2012, 2014 Interface Corporation. All rights reserved.241


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;HANDLE DeviceHandle;DWORD EventStatus;nRet = CntGetEventStatus( DeviceHandle, 1, &EventStatus);if (nRet != IFMA_ERROR_SUCCESS) {printf(" CntGetEventStatus errr(%lx)\n", nRet);MaClose(DeviceHandle);return;}●Visual C# .NETuint nRet;IntPtr DeviceHandle;uint EventStatus;nRet = IFCMACNT.CntGetEventStatus (DeviceHandle, 1, out EventStatus);if (nRet != IFCMA.IFMA_ERROR_SUCCESS){Console.WriteLine(" CntGetEventStatus error ={0:x}", nRet);IFCMA.MaClose(DeviceHandle);return;}●Visual Basic .NETDim nRet As IntegerDim hDeviceHandle As IntPtrDim EventStatus As IntegernRet = IFCMACNT.CntGetEventStatus( DeviceHandle, EventStatus)If nRet IFCMA.IFMA_ERROR_SUCCESS ThenConsole.WriteLine(" CntGetEventStatus errr({0:x})", nRet)IFCMA.MaClose(hDeviceHandle)ReturnEnd Ifデバイスハンドル DeviceHandle のイベント 要 因 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.242


GPC-MA001 Help for Windows6.11 関 数 個 別 説 明 (CAN)68. CanOpenPort【 機 能 】CAN <strong>インタフェース</strong>のオープンを 行 い、 以 後 のアクセスを 行 えるようにします。Windows の「デバイス マネージャ」に 認 識 された 弊 社 CAN <strong>インタフェース</strong>が 一 覧 表 示 されます。 一 覧 の 製 品 型 式 の 横 にデバイス 名 (IFCANx)が 表 示 されます。【 書 式 】●C 言 語 (x86 専 用 )HANDLE CanOpenPort (LPCTSTR lpszName);●C 言 語 (x64 専 用 )HANDLE CanOpenPort (LPCSTR lpszName);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern IntPtr CanOpenPort(string lpszName);●Visual Basic .NETDeclare Function CanOpenPort Lib "IFCan.DLL"( _ByVal lpszName As String _) As IntPtr【パラメータ】lpszNameオープンする CAN <strong>インタフェース</strong>のデバイス 名 を 指 定 してください【 戻 り 値 】CanOpenPort 関 数 が 正 常 に 終 了 した 場 合 には、 有 効 なハンドルが 返 されます。他 の 関 数 は、 本 関 数 により 取 得 したハンドルを 使 用 してデバイスの 制 御 を 行 います。オープンに 失 敗 した 場 合 には、INVALID_HANDLE_VALUE(-1)が 返 されます。【 備 考 】C 言 語 (x86 専 用 )で、CanOpenPort の 引 数 lpszName に 指 定 する 文 字 列 は LPCTSTR 型 として 定義 していますが、UNICODE 文 字 列 には 対 応 しておりません。x86 環 境 でご 使 用 になる 場 合 、 使 用 例 に 沿 って 記 述 してください。© 2012, 2014 Interface Corporation. All rights reserved.243


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語 (x86)HANDLE hDeviceHandle;hDeviceHandle = CanOpenPort((LPCTSTR)“IFCAN1”);if (hDeviceHandle == INVALID_HANDLE_VALUE){printf("Failed to open the specified device.");return;}HANDLE hDeviceHandle;char* lpszName = “IFCAN1”hDeviceHandle = CanOpenPort((LPCTSTR) lpszName);if (hDeviceHandle == INVALID_HANDLE_VALUE){printf("Failed to open the specified device.");return;}●C 言 語 (x64)HANDLE hDeviceHandle;hDeviceHandle = CanOpenPort( “IFCAN1”);if (hDeviceHandle == INVALID_HANDLE_VALUE){printf("Failed to open the specified device.");return;}HANDLE hDeviceHandle;char* lpszName = “IFCAN1”hDeviceHandle = CanOpenPort(lpszName);if (hDeviceHandle == INVALID_HANDLE_VALUE){printf("Failed to open the specified device.");return;}© 2012, 2014 Interface Corporation. All rights reserved.244


GPC-MA001 Help for Windows●Visual C# .NETIntPtr DeviceHandle;DeviceHandle = IFCCAN.CanOpenPort(“IFCAN1”);if (DeviceHandle.Equals(new IntPtr(-1))) {console.WriteLine("MaOpen error");return;}●Visual Basic .NETDim DeviceHandle As IntPtrDeviceHandle = IFCCAN.CanOpenPort(“IFCAN1”)If DeviceHandle.Equals(New IntPtr(-1)) ThenConsole.WriteLine("MaOpen errr")ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>をオープンします。© 2012, 2014 Interface Corporation. All rights reserved.245


GPC-MA001 Help for Windows69. CanClosePort【 機 能 】CAN <strong>インタフェース</strong>をクローズします。アクセスのために 使 用 されていた 各 種 リソースの 解 放 を 行 い、 以 後 の CAN <strong>インタフェース</strong>へのアクセスを 禁 止 します。【 書 式 】●C 言 語INT CanClosePort (HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanClosePort(IntPtr DeviceHandle);●Visual Basic .NETDeclare Function CanClosePort Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.246


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;Ret = CanClosePort(DeviceHandle);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanClosePort errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;Ret = IFCCAN.CanClosePort(DeviceHandle);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanClosePort error ={0:x}", Ret);return;}●Visual Basic .NETDim Ret As IntegerDim DeviceHandle As IntPtrRet = IFCCAN.CanClosePort(DeviceHandle)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanClosePort errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>のクローズ 処 理 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.247


GPC-MA001 Help for Windows70. CanActivate【 機 能 】CAN バスへの 接 続 を 有 効 (データの 送 受 信 が 行 える 状 態 ) 化 します。CanOpenPort 関 数 でオープンした 直 後 は、バスオフ 状 態 ( 接 続 が 無 効 な 状 態 )ですので、 本 関数 を 使 用 し、CAN バスへ 接 続 する 必 要 があります。送 信 エラー 数 が 255 を 越 え、バスオフ 状 態 になったときにも、 本 関 数 を 使 い 再 接 続 します。送 信 バッファに 送 信 メッセージが 残 っている 場 合 、 送 信 を 再 開 します。既 に CAN バスへの 接 続 が 有 効 であるときに、 本 関 数 を 呼 び 出 すとエラーとなります。【 書 式 】●C 言 語INT CanActivate(HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanActivate(IntPtr DeviceHandle);●Visual Basic .NETDeclare Function CanActivate Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.248


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;Ret = CanActivate(DeviceHandle);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanActivate errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;Ret = IFCCAN.CanActivate(DeviceHandle);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanActivate error ={0:x}", Ret);return;}●Visual Basic .NETDim DeviceHandle As IntPtrDim Ret As IntegerRet = IFCCAN.CanActivate(DeviceHandle)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanActivate errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>をメッセージの 送 受 信 が 可 能 な 状 態 にします。© 2012, 2014 Interface Corporation. All rights reserved.249


GPC-MA001 Help for Windows71. CanDeactivate【 機 能 】バスオフ 状 態 (CAN バスへの 接 続 を 無 効 化 )にします。(メッセージの 送 受 信 が 行 えない 状 態 )CanSetConfig 関 数 、CanSetAcceptanceFillter 関 数 、CanSetFifoTrigger 関 数 を 実 行 するには本 関 数 でバスオフ 状 態 にしておく 必 要 があります。バスオフ 状 態 かどうかは、CanGetStatus 関 数 で 確 認 することができます。メッセージの 送 信 中 の 場 合 、そのメッセージは 途 中 で 中 断 されます。(そのメッセージは 正 規 のフォーマットではなくなるので、 受 信 側 でエラーが 発 生 します)送 信 待 機 中 のメッセージはそのまま 送 信 バッファに 残 りますが、 送 信 FIFO 内 のデータはクリアされます( 受 信 FIFO、エラーFIFO のデータは 各 バッファに 格 納 されます)。再 度 、CanActivate 関 数 を 実 行 し、バスに 接 続 後 、 自 動 的 に 送 信 が 再 開 されます。送 信 したくない 場 合 は、CanActivate 関 数 を 実 行 する 前 に CanClearBuffer 関 数 で 送 信 バッファをクリアしておいてください。メッセージの 受 信 中 に、 本 関 数 を 実 行 した 場 合 、その 受 信 中 のメッセージは 受 信 バッファには蓄 えられません。( 破 棄 されます)受 信 バッファの 中 身 は 変 化 しませんので、バスオフ 状 態 でもメッセージを 取 り 出 すことは 可 能ですが、 新 たな 受 信 メッセージは CanActivate 関 数 を 実 行 するまで 蓄 えられません。既 にバスオフ 状 態 のときに、 本 関 数 を 呼 び 出 すとエラーとなります。【 書 式 】●C 言 語INT CanDeactivate(HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanDeactivate(IntPtr DeviceHandle);●Visual Basic .NETDeclare Function CanDeactivate Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.250


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;Ret = CanDeactivate(DeviceHandle);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanDeactivate errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;Ret = IFCCAN.CanDeactivate(DeviceHandle);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanDeactivate error ={0:x}", Ret);return;}●Visual Basic .NETDim DeviceHandle As IntPtrDim Ret As IntegerRet = IFCCAN.CanDeactivate(DeviceHandle)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanDeactivate errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>をバスオフ 状 態 にします。© 2012, 2014 Interface Corporation. All rights reserved.251


GPC-MA001 Help for Windows72. CanSetConfig【 機 能 】CAN <strong>インタフェース</strong>の 各 種 設 定 を 行 います。本 関 数 で 設 定 を 行 うためには、CAN バスへの 接 続 を 無 効 化 (CanDeactivate 関 数 )しておく 必要 があります。( 接 続 中 のまま 実 行 すると、エラーが 返 されます)設 定 変 更 後 、 再 度 CAN バスへ 接 続 するためには CanActivate 関 数 を 実 行 して 下 さい。設 定 値 の 中 には、 設 定 の 難 しい 物 もありますので、CanGetConfig 関 数 で 初 期 値 を 取 得 し、その中 から 変 更 したい 箇 所 だけ 変 更 して 設 定 する 方 法 をお 勧 めします。【 書 式 】●C 言 語INT CanSetConfig(HANDLEPCAN_PORT_CONFIG);DeviceHandle,pPortConfig●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanSetConfig(IntPtrDeviceHandle,ref CAN_PORT_CONFIG PortConfig);●Visual Basic .NETDeclare Function CanSetConfig Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef PortConfig As CAN_PORT_CONFIG _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pPortConfig通 信 条 件 設 定 構 造 体 、CAN_PORT_CONFIG 構 造 体 へのポインタを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。【 備 考 】・ 受 信 フィルタの 設 定 は、CanSetAcceptanceFilter 関 数 で 行 って 下 さい。© 2012, 2014 Interface Corporation. All rights reserved.252


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;CAN_PORT_CONFIG PortConfigRet = CanGetConfig(DeviceHandle, &PortConfig);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanGetConfig errr(%lx)\n", Ret);return;}PortConfig.ulBaudRate = CAN_BAUDRATE_1M;Ret = CanSetConfig(DeviceHandle, &PortConfig);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanSetConfig errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;IFCCAN.CAN_PORT_CONFIG PortConfig = new IFCCAN.CAN_PORT_CONFIG();Ret = IFCCAN.CanGetConfig(DeviceHandle, out PortConfig);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanGetConfig error ={0:x}", Ret);return;}PortConfig.BaudRate = IFCCAN.CAN_BAUDRATE_1M;Ret = IFCCAN.CanSetConfig(DeviceHandle, ref PortConfig);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanSetConfig error ={0:x}", Ret);return;}© 2012, 2014 Interface Corporation. All rights reserved.253


GPC-MA001 Help for Windows●Visual Basic .NETDim DeviceHandle As IntPtrDim PortConfig As IFCCAN.CAN_PORT_CONFIG = New IFCCAN.CAN_PORT_CONFIGDim Ret As IntegerDeviceHandle = IFCCAN.CanOpenPort(“IFCAN1”):Ret = IFCCAN.CanGetConfig(DeviceHandle, PortConfig)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanGetConfig errr({0:x})", Ret)ReturnEnd IfPortConfig.BaudRate = IFCCAN.CAN_BAUDRATE_1MRet = IFCCAN.CanSetConfig(DeviceHandle, PortConfig)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanSetConfig errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>を、 通 信 速 度 1Mbps に 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.254


GPC-MA001 Help for Windows73. CanGetConfig【 機 能 】CAN <strong>インタフェース</strong>の 現 在 の 各 種 設 定 値 を 取 得 します。オープン 直 後 はデフォルト 値 の 取 得 、 設 定 値 の 変 更 後 は 現 在 の 設 定 値 を 取 得 します。本 関 数 の 実 行 時 、CAN バスへの 接 続 を 無 効 化 (CanDeactivate 関 数 )する 必 要 はありません。CanOpenPort 関 数 でオープン 後 であれば、いつでも 使 用 することができます。【 書 式 】●C 言 語INT CanGetConfig(HANDLEPCAN_PORT_CONFIG);DeviceHandle,pPortConfig●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanGetConfig(IntPtrDeviceHandle,out CAN_PORT_CONFIG PortConfig);●Visual Basic .NETDeclare Function CanGetConfig Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef PortConfig As CAN_PORT_CONFIG _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pPortConfig通 信 条 件 設 定 構 造 体 、CAN_PORT_CONFIG 構 造 体 へのポインタを 指 定 してください。取 得 された 値 が 格 納 されます。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。【 備 考 】受 信 フィルタの 設 定 取 得 は、CanGetAcceptanceFilter 関 数 で 行 って 下 さい。© 2012, 2014 Interface Corporation. All rights reserved.255


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;CAN_PORT_CONFIG PortConfigRet = CanGetConfig(DeviceHandle, &PortConfig);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanGetConfig errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;IFCCAN.CAN_PORT_CONFIG PortConfig = new IFCCAN.CAN_PORT_CONFIG();Ret = IFCCAN.CanGetConfig(DeviceHandle, out PortConfig);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanGetConfig error ={0:x}", Ret);return;}●Visual Basic .NETDim DeviceHandle As IntPtrDim PortConfig As IFCCAN.CAN_PORT_CONFIG = New IFCCAN.CAN_PORT_CONFIGDim Ret As IntegerRet = IFCCAN.CanGetConfig(DeviceHandle, PortConfig)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanGetConfig errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>の 通 信 条 件 設 定 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.256


GPC-MA001 Help for Windows74. CanSetAcceptanceFilter【 機 能 】CAN バス 上 を 流 れるメッセージを 取 り 込 む 際 のフィルタを 設 定 します。本 関 数 で 設 定 を 行 うためには、CAN バスへの 接 続 を 無 効 化 (CanDeactivate 関 数 )しておく 必要 があります。( 接 続 中 のまま 実 行 すると、エラーが 返 されます)特 定 の ID、およびデータを 持 つ CAN メッセージだけ 取 り 込 みたい 場 合 に 使 用 します。フィルタの 設 定 は ID、およびデータに 対 してビットパターンで 行 い、ビット 毎 に「0、1 どちらでも 受 信 する」、「0 の 時 だけ 受 信 する」、「1 の 時 だけ 受 信 する」を 設 定 することが 出 来 ます。フィルタ 設 定 により 取 り 込 まれなかったフレームに 対 して ACK を 返 します。【 書 式 】●C 言 語INT CanSetAcceptanceFilter(HANDLE DeviceHandle,DWORD AcceptanceCode,DWORD AcceptanceMask);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanSetAcceptanceFilter(IntPtr DeviceHandle,uint AcceptanceCode,uint AcceptanceMask);●Visual Basic .NETDeclare Function CanSetAcceptanceFilter Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal AcceptanceCode As Integer, _ByVal AcceptanceMask As Integer _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。AcceptanceCode後 述 の dwAcceptanceMask で 0 を 指 定 したビットが 0、1 のどちらでフィルタを 通 過 して 受信 バッファに 取 り 込 まれるか 指 定 します。CAN コントローラ SJA1000 のレジスタ ACR0~3 に 該 当 します。デフォルトでは 0 に 設 定 されています。© 2012, 2014 Interface Corporation. All rights reserved.257


GPC-MA001 Help for WindowsAcceptanceMaskどのビットにアクセプタンスフィルタを 適 用 するか 指 定 してください。該 当 するビットに 0 を 設 定 するとフィルタが 有 効 になり、dwAcceptanceCode で 指 定 した 値と 受 信 メッセージの 該 当 ビットが 一 致 していれば、 受 信 バッファに 取 り 込 まれます。1 を 設 定 しているビットはフィルタの 対 象 外 となります。フィルタを 使 用 せず、 全 てのメッセージを 受 信 したい 場 合 は、dwAcceptanceMask の 全 ビットに 1 を 設 定 してください。CAN コントローラ SJA1000 のレジスタ AMR0~3 に 該 当 します。デフォルトでは FFFFFFFFh( 全 ビット 1)に 設 定 されています【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。【 備 考 】AcceptanceCode、AcceptanceMask は、CanSetConfig 関 数 で 設 定 する CAN_PORT_CONFIG 構 造 体の ulFilterMode 及 び、 使 用 するフレームフォーマット( 標 準 / 拡 張 フォーマット)により、 内容 が 異 なります。© 2012, 2014 Interface Corporation. All rights reserved.258


GPC-MA001 Help for WindowsulFilterMode が CAN_SINGLE_FILTER の 場 合1 種 類 のフィルタを 設 定 することが 可 能 です。● 標 準 フォーマット11 ビット ID 全 てに 対 しフィルタを 設 定 することが 可 能 です。また、データバイトの 先 頭 2 バイトに 対 してもフィルタを 設 定 することが 出 来 ます。フィルタの 適 用 範 囲 は 以 下 の 通 りです。←フレームの 先 頭ID(11 ビット) RTR 1 バイト 目 データ 2 バイト 目 データ 3 バイト 目28 27 26 … 20 19 18 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0フィルタの 適 用 範 囲ビット(※1) bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21フィルタ 対 象ID.28~ID.21ビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16ID.20 ID.19 ID.18 RTR 0 0 0 0フィルタ 対 象ID.20~ID.18、RTR 予 約 (※2)ビット bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0フィルタ 対 象受 信 データ 1 バイト 目ビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0フィルタ 対 象受 信 データ 2 バイト 目※1.AcceptanceCode、AcceptanceMask のビットです。※2.0 を 指 定 してください。© 2012, 2014 Interface Corporation. All rights reserved.259


GPC-MA001 Help for Windows● 拡 張 フォーマット29 ビット ID 全 てに 対 しフィルタを 設 定 することが 可 能 です。フィルタの 適 用 範 囲 は 以 下 の 通 りです。←フレームの 先 頭ID(29 ビット) RTR 1 バイト 目 データ 2 バイト 目 ~28 27 26 … 2 1 0 0 7 6 5 4 3 2 1 0フィルタの 適 用 範 囲ビット bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21フィルタ 対 象ID.28~ID.21ビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16ID.20 ID.19 ID.18 ID.17 ID.16 ID.15 ID.14 ID.13フィルタ 対 象ID.20~ID.13ビット bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8ID.12 ID.11 ID.10 ID.9 ID.8 ID.7 ID.6 ID.5フィルタ 対 象ID.12~ID.5ビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0ID.4 ID.3 ID.2 ID.1 ID.0 RTR 0 0フィルタ 対 象ID.4~ID.0、RTR予 約© 2012, 2014 Interface Corporation. All rights reserved.260


GPC-MA001 Help for WindowsulFilterMode が CAN_DUAL_FILTER の 場 合2 種 類 のフィルタ(No.1 フィルタ、No.2 フィルタ)を 設 定 することが 可 能 です。No.1 フィルタ、No.2 フィルタのいずれか 片 方 のフィルタさえ 通 過 すれば、データは 受 信 されます(No.1 フィルタを 通 過 したデータに、さらに No.2 フィルタを 通 過 させ、 両 方 のフィルタを 通 過 するデータのみを 受 信 するのではありません)。● 標 準 フォーマット11 ビット ID 全 てに 対 し 2 種 類 のフィルタを 設 定 することが 可 能 です。そのうち No.1 フィルタについては、データバイトの 先 頭 1 バイトに 対 してもフィルタを 設 定することが 出 来 ます。dwAcceptanceCode、dwAcceptanceMask の bit0~bit3、および bit16~bit31 の 部 分 が No.1フィルタになり、bit4~bit15 の 部 分 が No.2 フィルタになります。フィルタの 適 用 範 囲 は 以 下 の 通 りです。←フレームの 先 頭ID(11 ビット) RTR 1 バイト 目 データ 2 バイト 目 ~28 27 26 25 24 23 22 21 20 19 18 0 7 6 5 4 3 2 1 0No.2 フィルタの 適 用 範 囲No.1 フィルタの 適 用 範 囲ビット bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24フィルタ 対 象ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21ID.28~ID.21フィルタ NoNo.1 フィルタビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16フィルタ 対 象ID.20 ID.19 ID.18 RTR bit7 bit6 bit5 bit4ID.20~ID.18、RTR受 信 データ 1 バイト 目 上 位 4 ビットフィルタ NoNo.1 フィルタビット bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8フィルタ 対 象ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21ID.28~ID.21フィルタ NoNo.2 フィルタビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0ID.20 ID.19 ID.18 RTR bit3 bit2 bit1 bit0フィルタ 対 象ID.20~ID.18、RTR受 信 データ 1 バイト 目 下 位 4 ビットフィルタ No No.2 フィルタ No.1 フィルタ© 2012, 2014 Interface Corporation. All rights reserved.261


GPC-MA001 Help for Windows● 拡 張 フォーマット29 ビット ID のうち、 先 頭 の 16 ビットに 対 し 2 種 類 のフィルタを 設 定 することが 可 能 です。dwAcceptanceCode、dwAcceptanceMask の bit16~bit31 の 部 分 が No.1 フィルタになり、bit0~bit15 の 部 分 が No.2 フィルタになります。フィルタの 適 用 範 囲 は 以 下 の 通 りです。←フレームの 先 頭ID(29 ビット) RTR 1 バイト 目 データ 2 バイト 目 ~28 27 26 … 15 14 13 12~0 0 7 6 5 4 3 2 1 0No.2 フィルタの 適 用 範 囲No.1 フィルタの 適 用 範 囲ビット bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24フィルタ 対 象ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21ID.28~ID.21フィルタ NoNo.1 フィルタビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16フィルタ 対 象ID.20 ID.19 ID.18 ID.17 ID.16 ID.15 ID.14 ID.13ID.20~ID.13フィルタ NoNo.1 フィルタビット bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8フィルタ 対 象ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21ID.28~ID.21フィルタ NoNo.2 フィルタビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0フィルタ 対 象ID.20 ID.19 ID.18 ID.17 ID.16 ID.15 ID.14 ID.13ID.20~ID.13フィルタ NoNo.2 フィルタ© 2012, 2014 Interface Corporation. All rights reserved.262


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;DWORD dwAcceptanceCode,dwAcceptanceMask;dwAcceptanceMask = 0x001fffff;dwAcceptanceCode = 0x42200000; // ID が 01000010001(2 進 数 )Ret = CanSetAcceptanceFilter(DeviceHandle, dwAcceptanceCode, dwAcceptanceMask);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanSetAcceptanceFilter errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;uint AcceptanceCode;uint AcceptanceMask;AcceptanceMask = 0x001fffff;AcceptanceCode = 0x42200000; // ID が 01000010001(2 進 数 )Ret = IFCCAN.CanSetAcceptanceFilter(DeviceHandle, AcceptanceCode,AcceptanceMask);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanSetAcceptanceFilter error ={0:x}", Ret);return;}© 2012, 2014 Interface Corporation. All rights reserved.263


GPC-MA001 Help for Windows●Visual Basic .NETDim DeviceHandle As IntPtrDim AcceptanceCode As IntegerDim AcceptanceMask As IntegerDim Ret As IntegerAcceptanceMask = &H1fffffAcceptanceCode = &H42200000 ‘ ID が 01000010001(2 進 数 )Ret = IFCCAN.CanSetAcceptanceFilter(DeviceHandle, AcceptanceCode, AcceptanceMask)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanSetAcceptanceFilter errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>を、シングルフィルタモードに 設 定 し、標 準 フレームの ID が 2 進 数 で 01000010001 のメッセージフレームのみ 受 信 するように 設 定 します。もし、 拡 張 フレーム(29 ビット ID)が 送 られてきた 場 合 は、ID の 上 位 11 ビットが 01000010001になるメッセージフレームのみ 受 信 されます。© 2012, 2014 Interface Corporation. All rights reserved.264


GPC-MA001 Help for Windows75. CanGetAcceptanceFilter【 機 能 】受 信 フィルタの 現 在 の 設 定 を 取 得 します。CanSetAcceptanceFilter 関 数 の 説 明 も 併 せてご 覧 下 さい。【 書 式 】●C 言 語INT CanGetAcceptanceFilter(HANDLE DeviceHandle,PDWORD pdwAcceptanceCode,PDWORD pdwAcceptanceMask);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanGetAcceptanceFilter(IntPtr DeviceHandle,out uint AcceptanceCode,out uint AcceptanceMask);●Visual Basic .NETDeclare Function CanGetAcceptanceFilter Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef AcceptanceCode As Integer, _ByRef AcceptanceMask As Integer _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pdwAcceptanceCodeビットパターン 設 定 値 取 得 用 変 数 へのポインタを 指 定 してください。CAN コントローラ SJA1000 のレジスタ ACR0~3 に 該 当 します。pdwAcceptanceMaskマスクパターン 設 定 値 取 得 用 変 数 へのポインタを 指 定 してください。CAN コントローラ SJA1000 のレジスタ AMR0~3 に 該 当 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.265


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;DWORD dwAcceptanceCode,dwAcceptanceMask;Ret = CanGetAcceptanceFilter(DeviceHandle, &dwAcceptanceCode,if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanGetAcceptanceFilter errr(%lx)\n", Ret);return;}&dwAcceptanceMask);●Visual C# .NETuint Ret;IntPtr DeviceHandle;uint AcceptanceCode;uint AcceptanceMask;Ret = IFCCAN.CanGetAcceptanceFilter(DeviceHandle, out AcceptanceCode,out AcceptanceMask);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanGetAcceptanceFilter error ={0:x}", Ret);return;}●Visual Basic .NETDim DeviceHandle As IntPtrDim AcceptanceCode As IntegerDim AcceptanceMask As IntegerDim Ret As IntegerRet = IFCCAN.CanGetAcceptanceFilter(DeviceHandle, AcceptanceCode, AcceptanceMask)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanGetAcceptanceFilter errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>のフィルタ 設 定 状 態 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.266


GPC-MA001 Help for Windows76. CanSetFifoTrigger【 機 能 】受 信 FIFO、エラーFIFO、 送 信 FIFO のトリガ 値 を 設 定 します。ここでいうトリガとは、ドライバ 内 で 割 り 込 みが 発 生 するタイミングのことをいいます。従 って、 通 常 はこのトリガ 値 を 意 識 する 必 要 はありません。 本 関 数 はバスオフ 状 態 でのみ 実 行できます。高 速 でデータをやり 取 りする 場 合 、トリガ 値 を 上 げることにより、ドライバ 内 での 割 り 込 み 発生 率 が 下 がり、システムの 負 荷 を 下 げることができます。トリガ 値 を 上 げることにより、オーバーフローが 発 生 する 場 合 は、トリガ 値 を 下 げるようにして 下 さい。【 書 式 】●C 言 語INT CanSetFifoTrigger(HANDLE DeviceHandle,DWORD FifoKind,DWORD TriggerValue,DWORD FifoTimeout);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanSetFifoTrigger(IntPtr DeviceHandle,uint FifoKind,uint TriggerValue,uint FifoTimeout);●Visual Basic .NETDeclare Function CanSetFifoTrigger Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal FifoKind As Integer, _ByVal TriggerValue As Integer, _ByVal FifoTimeout As Integer _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。dwFifoKind設 定 する FIFO を 選 択 します。 下 記 の 中 から 選 択 してください。識 別 子 値 内 容CAN_RECEIVE_FIFO 0 受 信 FIFOCAN_ERROR_FIFO 1 エラーFIFO© 2012, 2014 Interface Corporation. All rights reserved.267


GPC-MA001 Help for WindowsCAN_SEND_FIFO 2 送 信 FIFO(※1)※1 FIFO 送 信 モードに 設 定 していない 場 合 はエラーとなります。dwTriggerValueトリガ 値 を 下 記 の 値 で 指 定 します。デフォルトは 0 です。識 別 子 値 内 容CAN_TRIGGER_1 0 受 信 /エラーFIFO 内 のデータ 数 が 0→1 で 割 り 込 み 発 生 。送 信 FIFO の 場 合 、FIFO 内 のデータ 数 が 1→0 で 割 り 込 み発 生 。CAN_TRIGGER_16 1 受 信 /エラーFIFO 内 のデータ 数 が 15→16 で 割 り 込 み 発生 。送 信 FIFO の 場 合 、FIFO 内 のデータ 数 が 16→15 で 割 り 込み 発 生 。CAN_TRIGGER_32 2 受 信 /エラーFIFO 内 のデータ 数 が 31→32 で 割 り 込 み 発生 。送 信 FIFO の 場 合 、FIFO 内 のデータ 数 が 32→31 で 割 り 込み 発 生 。CAN_TRIGGER_48 3 受 信 /エラーFIFO 内 のデータ 数 が 47→48 で 割 り 込 み 発生 。送 信 FIFO の 場 合 、FIFO 内 のデータ 数 が 48→47 で 割 り 込み 発 生 。dwFifoTimeout受 信 FIFO、エラーFIFO 内 のタイムアウト 時 間 を 設 定 します。 単 位 は 100μs です。新 しく FIFO 内 にデータが 挿 入 されてから、dwFifoTimeout 時 間 の 間 にトリガが 発 生 しない場 合 、 割 り 込 みが 発 生 するようになります。例 えば、 受 信 FIFO のトリガ 設 定 を 行 うために、dwFifoKind に CAN_RECEIVE_FIFO を 設 定 し、dwTriggerValue に CAN_TRIGGER_48、dwFifoTimeout に 5 を 設 定 した 場 合 、 受 信 FIFO 内 のデータ 数 が 48 になれば、トリガ 条 件 が 満 たされたことになり、(ドライバ 内 で) 割 り 込 みが発 生 します。また、 受 信 FIFO 内 のデータ 数 が 48 より 少 ない 場 合 、 受 信 データが 受 信 FIFOに 挿 入 されてから、 次 のデータが 受 信 FIFO に 挿 入 される 前 に、500μs(5×100μs)が 経過 すると、タイムアウトとみなされ、(ドライバ 内 で) 割 り 込 みが 発 生 します。デフォルトは、エラーFIFO、 受 信 FIFO いずれも 4 です。設 定 可 能 範 囲 は 1~255 です。送 信 FIFO 設 定 時 は、 設 定 値 は 無 効 となります。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.268


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;DWORD dwTrigger;DWORD dwTimeout;// 受 信 FIFO トリガを 設 定 しますdwTrigger = CAN_TRIGGER_16;dwTimeout = 8;Ret = CanSetFifoTrigger(DeviceHandle, CAN_RECEIVE_FIFO, dwTrigger, dwTimeout);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanSetFifoTrigger errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;uint Trigger;uint Timeout;// 受 信 FIFO トリガを 設 定 しますTrigger = IFCCAN.CAN_TRIGGER_16;Timeout = 8;Ret = IFCCAN.CanSetFifoTrigger(DeviceHandle, IFCCAN.CAN_RECEIVE_FIFO,Trigger, Timeout);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanSetFifoTrigger error ={0:x}", Ret);return;}© 2012, 2014 Interface Corporation. All rights reserved.269


GPC-MA001 Help for Windows●Visual Basic .NETDim DeviceHandle As IntPtrDim Ret As IntegerDim Trigger As IntegerDim Timeout As Integer‘ 受 信 FIFO トリガを 設 定 しますTrigger = IFCCAN.CAN_TRIGGER_16Timeout = 8Ret = IFCCAN.CanSetFifoTrigger(DeviceHandle, IFCCAN.CAN_RECEIVE_FIFO, _Trigger, Timeout)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanSetFifoTrigger errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>の 受 信 FIFO トリガを 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.270


GPC-MA001 Help for Windows77. CanGetFifoTrigger【 機 能 】受 信 FIFO、エラーFIFO、 送 信 FIFO のトリガ 値 を 取 得 します。【 書 式 】●C 言 語INT CanGetFifoTrigger(HANDLE DeviceHandle,DWORD dwFifoKind,PDWORD dwTriggerValue,PDWORD dwFifoTimeout);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanGetFifoTrigger(IntPtr DeviceHandle,uint FifoKind,out uint TriggerValue,out uint FifoTimeout);●Visual Basic .NETDeclare Function CanGetFifoTrigger Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal FifoKind As Integer, _ByRef TriggerValue As Integer, _ByRef FifoTimeout As Integer _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。dwFifoKind設 定 する FIFO を 選 択 します。 下 記 の 中 から 選 択 してください。識 別 子 値 内 容CAN_RECEIVE_FIFO 0 受 信 FIFOCAN_ERROR_FIFO 1 エラーFIFOCAN_SEND_FIFO 2 送 信 FIFO(※1)※1 FIFO 送 信 モードに 設 定 していない 場 合 はエラーとなります。© 2012, 2014 Interface Corporation. All rights reserved.271


GPC-MA001 Help for WindowsdwTriggerValue取 得 するトリガ 値 が 下 記 の 値 で 格 納 されます。デフォルトは 0 です。識 別 子 値 内 容CAN_TRIGGER_1 0 受 信 /エラーFIFO 内 のデータ 数 が 0→1 で 割 り 込 み 発 生 。送 信 FIFO の 場 合 、FIFO 内 のデータ 数 が 1→0 で 割 り 込 み 発 生 。CAN_TRIGGER_16 1 受 信 /エラーFIFO 内 のデータ 数 が 15→16 で 割 り 込 み 発 生 。送 信 FIFO の 場 合 、FIFO 内 のデータ 数 が 16→15 で 割 り 込 み 発生 。CAN_TRIGGER_32 2 受 信 /エラーFIFO 内 のデータ 数 が 31→32 で 割 り 込 み 発 生 。送 信 FIFO の 場 合 、FIFO 内 のデータ 数 が 32→31 で 割 り 込 み 発生 。CAN_TRIGGER_48 3 受 信 /エラーFIFO 内 のデータ 数 が 47→48 で 割 り 込 み 発 生 。送 信 FIFO の 場 合 、FIFO 内 のデータ 数 が 48→47 で 割 り 込 み 発生 。dwFifoTimeout取 得 する FIFO 内 のタイムアウト 時 間 が 格 納 されます。 単 位 は 100μs です。新 しく FIFO 内 にデータが 挿 入 されてから、dwFifoTimeout 時 間 の 間 にトリガが 発 生 しない場 合 、 割 り 込 みが 発 生 するようになります。例 え ば 、 dwFifoKind に CAN_RECEIVE_FIFO 、 dwTriggerValue に CAN_TRIGGER_48 、dwFifoTimeout に 5 を 設 定 した 場 合 、 受 信 FIFO 内 のデータ 数 が 48 になれば、トリガ 条 件 が満 たされたことになり、 割 り 込 みが 発 生 しますが、 受 信 FIFO 内 のデータ 数 が 48 より 少 ない 場 合 、 受 信 データが 受 信 FIFO に 挿 入 されてから、 次 のデータが 受 信 FIFO に 挿 入 される前 に、500μs(5×100μs)が 経 過 すると、タイムアウトとみなされ、 割 り 込 みが 発 生 します。デフォルトは、エラーFIFO、 受 信 FIFO いずれも 4 です。送 信 FIFO 設 定 時 は、0 が 返 されます。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.272


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;DWORD dwTrigger;DWORD dwTimeout;// 受 信 FIFO トリガを 取 得 しますRet = CanGetFifoTrigger(DeviceHandle, CAN_RECEIVE_FIFO,&dwTrigger, &dwTimeout);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanGetFifoTrigger errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;uint Trigger;uint Timeout;// 受 信 FIFO トリガを 取 得 しますRet = IFCCAN.CanGetFifoTrigger(DeviceHandle, IFCCAN.CAN_RECEIVE_FIFO,out Trigger, out Timeout);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanGetFifoTrigger error ={0:x}", Ret);return;}●Visual Basic .NETDim DeviceHandle As IntPtrDim Ret As IntegerDim Trigger As IntegerDim Timeout As Integer‘ 受 信 FIFO トリガを 取 得 しますRet = IFCCAN.CanGetFifoTrigger(DeviceHandle, IFCCAN.CAN_RECEIVE_FIFO, _Trigger, Timeout)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanGetFifoTrigger errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>の 受 信 FIFO トリガを 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.273


GPC-MA001 Help for Windows78. CanSendMessage【 機 能 】CAN メッセージの 送 信 を 行 います。本 関 数 の 実 行 後 、 送 信 バッファにメッセージが 蓄 えられ、 順 次 送 信 されます。送 信 の 完 了 は、 送 信 完 了 メッセージの 取 得 により 確 認 できます。また、CanSetEvent 関 数 でイベントを 設 定 することで 送 信 バッファが 空 になった 時 点 でイベントを 発 生 させることができます。(イベント、コールバック 関 数 、ウィンドウメッセージ)セットするメッセージの 個 数 を 指 定 することで、1 回 の 関 数 呼 び 出 しで 複 数 のメッセージを 送信 バッファに 蓄 えることができます。CAN バスへの 接 続 が 有 効 である 場 合 のみ 実 行 できます。【 書 式 】●C 言 語INT CanSendMessage(HANDLEDeviceHandle,PCAN_MESSAGE pCanMessage,unsigned long ulCount);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanSendMessage(IntPtrDeviceHandle,ref CAN_MESSAGE CanMessage,uintCount);[DllImport(“IFCan.dll”)]public static extern uint CanSendMessage(IntPtrDeviceHandle,CAN_MESSAGE[] CanMessage,uintCount);●Visual Basic .NETDeclare Function CanSendMessage Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef CanMessage As CAN_MESSAGE, _ByVal Count As Integer _) As IntegerDeclare Function CanSendMessage Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal CanMessage() As CAN_MESSAGE, _ByVal Count As Integer _) As Integer© 2012, 2014 Interface Corporation. All rights reserved.274


GPC-MA001 Help for Windows【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pCanMessage送 信 するメッセージを 格 納 した CAN_MESSAGE 構 造 体 のポインタを 指 定 してください。ulCount送 信 バッファにセットするメッセージの 個 数 を 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。【 使 用 例 】●C 言 語INT Ret;CAN_MESSAGE CanMessage[10];HANDLE DeviceHandle;unsigned long ulSendValue;for (i=0;i


GPC-MA001 Help for WindowsIntPtr DeviceHandle;byte SendValue;int i;for (i = 0; i < 10; i++){// Data 配 列 の 初 期 化CanMessage[i].InitializeArray();// 送 信 メッセージ 長 のセットCanMessage[i].Length = 1;// 送 信 メッセージの ID をセットCanMessage[i].ID = 0x01 | IFCCAN.CAN_EXT_FRAME;// フラグの 設 定CanMessage[i].Flag = 0;// ディレイ 時 間 なし( 高 機 能 版 、バスマスタ 版 CAN 製 品 のみ 有 効 )CanMessage[i].Time = 0;// 送 信 メッセージの 内 容 をコピーCanMessage[i].Data[0] = SendValue;}// 送 信 メッセージのセット( 送 信 開 始 )Ret = IFCCAN.CanSendMessage(DeviceHandle, CanMessage, 10);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanSendMessage error ={0:x}", Ret);return;}© 2012, 2014 Interface Corporation. All rights reserved.276


GPC-MA001 Help for Windows●Visual Basic .NETDim DeviceHandle As IntPtrDim CanMessage(9) As IFCCAN.CAN_MESSAGEDim SendValue As ByteDim Ret As IntegerFor i = 0 To 9‘ Data 配 列 の 初 期 化CanMessage(i).InitializeArray()‘ 送 信 メッセージ 長 のセットCanMessage(i).Length = 4‘ 送 信 メッセージの ID をセットCanMessage(i).ID = &H1 Or IFCCAN.CAN_EXT_FRAME‘ フラグの 設 定CanMessage(i).Flag = 0‘ ディレイ 時 間 なし( 高 機 能 版 、バスマスタ 版 CAN 製 品 のみ 有 効 )CanMessage(i).Time = 0‘ 送 信 メッセージの 内 容 をコピーCanMessage(i).Data(0) = SendValueNext‘ 送 信 メッセージのセット( 送 信 開 始 )Ret = IFCCAN.CanSendMessage(DeviceHandle, CanMessage, 10)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanSendMessage errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>から 10 件 のメッセージ 送 信 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.277


GPC-MA001 Help for Windows79. CanCyclicSendMessage【 機 能 】CAN メッセージの 周 期 送 信 を 行 います。この 関 数 は 非 同 期 で 実 行 されますので、 関 数 実 行 後 にすぐに 処 理 が 返 ります。設 定 した 周 期 でデータ 送 信 ができなかった 場 合 と、CanStopCyclicSendMessage 関 数 を 実 行 した場 合 のみ、 周 期 送 信 を 停 止 します。周 期 送 信 実 行 中 は、CanSendMessage 関 数 は 使 用 できません。また、 周 期 送 信 メッセージは、 送 信 完 了 メッセージを 取 得 できません。【 書 式 】●C 言 語INT CanCyclicSendMessage(HANDLEDeviceHandle,PCAN_MESSAGE PCanMessage);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanCyclicSendMessage(IntPtrDeviceHandle,ref CAN_MESSAGE CanMessage);●Visual Basic .NETDeclare Function CanCyclicSendMessage Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef CanMessage As CAN_MESSAGE _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pCanMessage送 信 するメッセージを 格 納 した CAN_MESSAGE 構 造 体 のポインタを 指 定 してください。CanCyclicSendMessage 関 数 では、CAN_MESSAGE 構 造 体 の ulTime に 送 信 を 行 う 周 期 を 10μs単 位 で 設 定 します。 設 定 可 能 範 囲 は 1~1FFFFFh(10μs~20,971,510μs)です。1FFFFFhより 大 きい 値 を 設 定 しても、 自 動 的 に 1FFFFFh に 設 定 されます。本 関 数 では、 送 信 するメッセージは 1 つのみ 設 定 できます。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.278


GPC-MA001 Help for Windows【 備 考 】データの 送 信 時 間 よりも、 周 期 時 間 を 短 く 設 定 した 場 合 、 指 定 された 時 間 に 送 信 ができず、 周期 実 行 は 停 止 します。例 えば、データの 送 信 に 80ms かかるのに、 周 期 時 間 を 50ms に 設 定 した 場 合 、50ms 経 過 したときに、まだデータが 送 信 中 なので、 周 期 実 行 が 停 止 します。周 期 実 行 の 停 止 は、イベントにより 通 知 されます。また、アービトレーションロストにより、 指 定 した 周 期 にデータを 送 信 できない 場 合 もあります。アービトレーションロストが 発 生 し、データを 再 送 しているときに、 次 の 周 期 時 間 が 来 ると、 上 記 と 同 じように、 周 期 実 行 が 停 止 します。例 ) 周 期 を 50ms に 設 定 した 場 合データ 送 信 中周 期 送 信 開 始50msデータ 送 信 中50ms・・・時 間例 ) 周 期 を 50ms に 設 定 したが、その 周 期 よりもデータ 送 信 時 間 が 長 い 場 合データ 送 信 中50ms前 回 のデータが、まだ 送 信 完 了 していないため、 次 のデータが 送 れずに周 期 送 信 は 停 止 します。時 間周 期 送 信 開 始周 期 送 信 実 行 中 でも、 周 期 送 信 を 行 いたいデータの 更 新 、 周 期 の 更 新 を 行 えます。 更 新 したデータは、 次 の 周 期 から 反 映 されます。例 ) 周 期 送 信 を 行 うデータや 周 期 を 更 新 したい 場 合データ A 送 信 中50msデータ B 送 信 中80ms・・・周 期 送 信 開 始時 間データ、 周 期 の 更 新 はいつでも 可 能 です。ただし、 反 映 されるのは 次 の 周 期 からになります。例 えば、この 時 点 で、 周 期 送 信 を 行 うデータを B に、 周 期 を 80ms に 更新 したとすると、 前 回 の 設 定 周 期 の 50ms が 経 過 してから、データ B が80ms 周 期 で 送 信 されるようになります。© 2012, 2014 Interface Corporation. All rights reserved.279


GPC-MA001 Help for Windows優 先 順 位 の 高 いメッセージを 短 い 周 期 で 送 信 していると、アービトレーションにより、それより 優 先 順 位 の 低 いメッセージが 送 信 されにくくなりますので、ご 注 意 ください。【 使 用 例 】●C 言 語INT Ret;CAN_MESSAGE CanMessage;HANDLE DeviceHandle;unsigned long ulSendValue;// 送 信 メッセージ 長 のセットCanMessage.ulLength = 4;// 送 信 メッセージの ID をセットCanMessage.ulID = 0x01 | CAN_EXT_FRAME;// フラグの 設 定CanMessage.ulFlag = 0;// 300ms 周 期CanMessage.ulTime = 300*100;// 送 信 メッセージの 内 容 をコピー*(unsigned long*)CanMessage[i].bData = ulSendValue;// 300ms 周 期 で 送 信Ret = CanCyclicSendMessage(DeviceHandle, CanMessage);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanCyclicSendMessage errr(%lx)\n", Ret);return;}© 2012, 2014 Interface Corporation. All rights reserved.280


GPC-MA001 Help for Windows●Visual C# .NETuint Ret;IFCCAN.CAN_MESSAGE CanMessage = new IFCCAN.CAN_MESSAGE();IntPtr DeviceHandle;// Data 配 列 の 初 期 化CanMessage.InitializezArray();// 送 信 メッセージ 長 のセットCanMessage.Length = 4;// 送 信 メッセージの ID をセットCanMessage.ID = 0x01 | IFCCAN.CAN_EXT_FRAME;// フラグの 設 定CanMessage.Flag = 0;// 300ms 周 期CanMessage.Time = 300*100;// 送 信 メッセージの 内 容 をセットCanMessage.Data[0] = 0x01;CanMessage.Data[1] = 0x02;CanMessage.Data[2] = 0x03;CanMessage.Data[3] = 0x04;// 300ms 周 期 で 送 信Ret = IFCCAN.CanCyclicSendMessage(DeviceHandle, ref CanMessage);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanCyclicSendMessage error ={0:x}", Ret);return;}© 2012, 2014 Interface Corporation. All rights reserved.281


GPC-MA001 Help for Windows●Visual Basic .NETDim DeviceHandle As IntPtrDim CanMessage As IFCCAN.CAN_MESSAGE = New IFCCAN.CAN_MESSAGEDim Ret As Integer‘ Data 配 列 の 初 期 化CanMessage.InitializeArray()‘ 送 信 メッセージ 長 のセットCanMessage.Length = 4‘ 送 信 メッセージの ID をセットCanMessage.ID = &H1 Or IFCCAN.CAN_EXT_FRAME‘ フラグの 設 定CanMessage.Flag = 0‘ 300ms 周 期CanMessage.Time = 300*100‘ 送 信 メッセージの 内 容 をコピーCanMessage.Data(0) = &H1CanMessage.Data(1) = &H2CanMessage.Data(2) = &H3CanMessage.Data(3) = &H4‘ 300ms 周 期 で 送 信Ret = IFCCAN.CanCyclicSendMessage(DeviceHandle, CanMessage)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanCyclicSendMessage errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>から 300ms 周 期 で、データを 送 信 します。© 2012, 2014 Interface Corporation. All rights reserved.282


GPC-MA001 Help for Windows80. CanStopCyclicSendMessage【 機 能 】CAN メッセージの 周 期 送 信 を 停 止 します。データ 送 信 中 にこの 関 数 を 実 行 すると、 現 在 送 信 中 のデータの 送 信 が 完 了 してから、 周 期 送 信が 停 止 されます。この 関 数 で 周 期 送 信 を 停 止 した 場 合 、 周 期 送 信 停 止 イベントは 発 生 しません。【 書 式 】●C 言 語INT CanStopCyclicSendMessage(HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanStopCyclicSendMessage(IntPtr DeviceHandle);●Visual Basic .NETDeclare Function CanStopCyclicSendMessage Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.283


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;CAN_MESSAGE CanMessage;HANDLE DeviceHandle;unsigned long ulSendValue;// 送 信 メッセージ 長 のセットCanMessage.ulLength = 4;// 送 信 メッセージの ID をセットCanMessage.ulID = 0x01 | CAN_EXT_FRAME;// フラグの 設 定CanMessage.ulFlag = 0;// 300ms 周 期CanMessage.ulTime = 300*100;// 送 信 メッセージの 内 容 をコピー*(unsigned long*)CanMessage[i].bData = ulSendValue;// 300ms 周 期 で 送 信Ret = CanCyclicSendMessage(DeviceHandle, CanMessage);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanCyclicSendMessage errr(%lx)\n", Ret);return;}::// 周 期 送 信 の 停 止Ret = CanStopCyclicSendMessage(DeviceHandle);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanStopCyclicSendMessage errr(%lx)\n", Ret);return;}© 2012, 2014 Interface Corporation. All rights reserved.284


GPC-MA001 Help for Windows●Visual C# .NETuint Ret;IFCCAN.CAN_MESSAGE CanMessage = new IFCCAN.CAN_MESSAGE();IntPtr DeviceHandle;// Data 配 列 の 初 期 化CanMessage.InitializeArray();// 送 信 メッセージ 長 のセットCanMessage.Length = 4;// 送 信 メッセージの ID をセットCanMessage.ID = 0x01 | IFCCAN.CAN_EXT_FRAME;// フラグの 設 定CanMessage.Flag = 0;// 300ms 周 期CanMessage.Time = 300*100;// 送 信 メッセージの 内 容 をセットCanMessage.Data[0] = 0x01;CanMessage.Data[1] = 0x02;CanMessage.Data[2] = 0x03;CanMessage.Data[3] = 0x04;// 300ms 周 期 で 送 信Ret = IFCCAN.CanCyclicSendMessage(DeviceHandle, ref CanMessage);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanCyclicSendMessage error ={0:x}", Ret);return;}:// 周 期 送 信 の 停 止Ret = IFCCAN.CanStopCyclicSendMessage(DeviceHandle);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanStopCyclicSendMessage error ={0:x}", Ret);return;}© 2012, 2014 Interface Corporation. All rights reserved.285


GPC-MA001 Help for Windows●Visual Basic .NETDim DeviceHandle As IntPtrDim CanMessage As IFCCAN.CAN_MESSAGE = New IFCCAN.CAN_MESSAGEDim Ret As Integer‘ Data 配 列 の 初 期 化CanMessage.InitializeArray()‘ 送 信 メッセージ 長 のセットCanMessage.Length = 4‘ 送 信 メッセージの ID をセットCanMessage.ID = &H1 Or IFCCAN.CAN_EXT_FRAME‘ フラグの 設 定CanMessage.Flag = 0‘ 300ms 周 期CanMessage.Time = 300*100‘ 送 信 メッセージの 内 容 をコピーCanMessage.Data(0) = &H1CanMessage.Data(1) = &H2CanMessage.Data(2) = &H3CanMessage.Data(3) = &H4‘ 300ms 周 期 で 送 信Ret = IFCCAN.CanCyclicSendMessage(DeviceHandle, CanMessage)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanCyclicSendMessage errr({0:x})", Ret)ReturnEnd If:‘ 周 期 送 信 の 停 止Ret = IFCCAN.CanStopCyclicSendMessage(DeviceHandle)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanStopCyclicSendMessage errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>の 周 期 送 信 を 停 止 します。© 2012, 2014 Interface Corporation. All rights reserved.286


GPC-MA001 Help for Windows81. CanReceiveMessage【 機 能 】受 信 された CAN メッセージを 取 り 出 します。CAN バス 上 を 流 れる CAN メッセージは、 自 動 的 にデバイスドライバ 内 部 の 受 信 バッファに 蓄 えられます。本 関 数 では、この 蓄 えられた CAN メッセージを 取 り 出 します。受 信 メッセージがあるかどうかは、CanGetStatus 関 数 で 受 信 バッファの 状 態 を 見 ることで 確 認できます。蓄 えられた CAN メッセージが 無 い 場 合 、 戻 り 値 で、IFCAN_ERROR_BUFFER_IS_EMPTY が 返 されます。また、CanSetEvent 関 数 でイベントを 設 定 することでメッセージを 受 信 した 時 点 でイベントを発 生 させることができます。(イベント、コールバック 関 数 、ウィンドウメッセージ)【 書 式 】●C 言 語INT CanReceiveMessage(HANDLEDeviceHandle,PCAN_MESSAGE pCanMessage,unsigned long* pulCount);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanReceiveMessage(IntPtrDeviceHandle,out CAN_MESSAGECanMessage,ref uintCount);[DllImport(“IFCan.dll”)]public static extern uint CanReceiveMessage(IntPtrDeviceHandle,[Out] CAN_MESSAGE[] CanMessage,ref uintCount);© 2012, 2014 Interface Corporation. All rights reserved.287


GPC-MA001 Help for Windows●Visual Basic .NETDeclare Function CanReceiveMessage Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef CanMessage As CAN_MESSAGE, _ByRef Count As Integer _) As IntegerDeclare Function CanReceiveMessage Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ ByVal CanMessage() As CAN_MESSAGE, _ByRef Count As Integer _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pCanMessage受 信 メッセージを 格 納 する CAN_MESSAGE 構 造 体 へのポインタを 指 定 してください。pCount で 指 定 された 個 数 分 の 領 域 を 用 意 してください。pulCount受 信 バッファから 取 り 出 すメッセージの 件 数 を 指 定 してください。受 信 バッファに 蓄 えられているメッセージが 指 定 された 件 数 よりも 少 ない 場 合 、 実 際 に受 信 バッファから 取 り 出 された 件 数 が、この 変 数 に 返 されます。例 )PortStatus.ulRXBCount が 8 の 時 に、pulCount に 10 をセットし、CanReceiveMessage関 数 を 実 行 すると、pulCount に 8 が 返 され、 正 常 終 了 します。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.288


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT nRet;CAN_MESSAGE CanMessage[10];unsigned long ulCount;HANDLE DeviceHandle;// 受 信 メッセージの 取 り 出 しulCount = 10;Ret = CanReceiveMessage(DeviceHandle, CanMessage, &ulCount);if (Ret != IFCAN_ERROR_SUCCESS) {if (Ret == IFCAN_ERROR_BUFFER_IS_EMPTY) {printf(“ 受 信 メッセージがありません”);}} else {for (i=0; i


GPC-MA001 Help for Windows●Visual C# .NETuint Ret;IFCCAN.CAN_MESSAGE[] CanMessage = new IFCCAN.CAN_MESSAGE[10];uint Count;IntPtr DeviceHandle;string Message = “”;int i;uint j;for(i = 0; i < 10; i++){CanMessage[i].InitializeArray();}// 受 信 メッセージの 取 り 出 しCount = 10;Ret = IFCCAN.CanReceiveMessage(DeviceHandle, CanMessage, ref Count);if(Ret != IFCCAN.IFCAN_ERROR_SUCCESS){if(Ret == IFCCAN.IFCAN_ERROR_BUFFER_IS_EMPTY) {MessageBox.Show(“ 受 信 メッセージがありません”);}} else{for(i = 0; i < ulCount; i++) {Message = “ 受 信 メッセージ 長 : ” + CanMessage[i].Length.ToString();MessageBox.Show(Message);Message = “ID : ” + CanMessage[i].ID.ToString();MessageBox.Show(szMessage);Message = “ 受 信 データ : “;for(j = 0; j < CanMessage[i].Length; j++) {Message += CanMessage[i].Data[j].ToString();}MessageBox.Show(Message);}}© 2012, 2014 Interface Corporation. All rights reserved.290


GPC-MA001 Help for Windows●Visual Basic .NETDim Message As StringDim DeviceHandle As IntPtrDim CanMessage(9) As IFCCAN.CAN_MESSAGEDim Count As IntegerDim i As IntegerDim j As IntegerDim Ret As Integerfor i = 0 To 9CanMessage(i).InitializeArray()NextCount = 10‘ 受 信 メッセージの 取 り 出 しRet = IFCCAN.CanReceiveMessage(DeviceHandle, CanMessage, Count)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenIf Ret = IFCCAN.IFCAN_ERROR_BUFFER_IS_EMPTY ThenMsgBox(“ 受 信 メッセージがありません”)End IfElseFor i = 0 To Count – 1Message = Message & Str(i + 1) & “ 件 目 のメッセージ” & vbCrLf & _“ 受 信 メッセージ 長 : “ & Str(CanMessage(i).Length) & vbCrLf & _“ID : “ & Str(CanMessage(i).ID) & vbCrLf & “ 受 信 データ : “For j = 0 To CanMessage(i).LengthMessage = Message & Hex(CanMessage(i).Data(j)) & “ “NextMessage = Message & vbCrLfNextMsgBox(Message)End Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>から 10 件 の 受 信 メッセージを 取 り 出 します。取 り 出 されたメッセージを 画 面 に 表 示 します。10 件 に 満 たない 場 合 は、 取 り 出 された 件 数 分 だけ 表 示 します。© 2012, 2014 Interface Corporation. All rights reserved.291


GPC-MA001 Help for Windows82. CanGetStatus【 機 能 】CAN バスの 現 在 の 状 態 を 取 得 します。得 られる 情 報 は バスの 状 態 、エラーカウンタ、 送 受 信 バッファの 空 き 状 況 等 です。本 関 数 の 実 行 時 、CAN バスへの 接 続 を 無 効 化 (CanDeactivate 関 数 )する 必 要 はありません。CanOpenPort 関 数 でオープン 後 であれば、いつでも 使 用 することができます。【 書 式 】●C 言 語INT CanGetStatus(HANDLEPCAN_PORT_STATUS);DeviceHandle,pPortStatus●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanGetStatus(IntPtrDeviceHandle,out CAN_PORT_STATUS PortStatus);●Visual Basic .NETDeclare Function CanGetStatus Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef PortStatus As CAN_PORT_STATUS _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pPortStatusステータス 取 得 用 構 造 体 、CAN_PORT_STATUS 構 造 体 へのポインタを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.292


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;CAN_PORT_STATUS PortStatus;HANDLE DeviceHandle;Ret = CanGetStatus(DeviceHandle, &PortStatus);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanGetStatus errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IFCCAN.CAN_PORT_STATUS PortStatus = new IFCCAN.CAN_PORT_STATUS();int DeviceHandle;Ret = IFCCAN.CanGetStatus(DeviceHandle, out PortStatus);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanGetStatus error ={0:x}", Ret);return;}●Visual Basic .NETDim DeviceHandle As IntPtrDim PortStatus As IFCCAN.CAN_PORT_STATUS = New IFCCAN.CAN_PORT_STATUSDim Ret As IntegerRet = IFCCAN.CanGetStatus(DeviceHandle, PortStatus)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanGetStatus errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>のステータスを 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.293


GPC-MA001 Help for Windows83. CanGetErrorEvent【 機 能 】エラーバッファに 蓄 えられたエラー 情 報 を 取 り 出 します。【 書 式 】●C 言 語INT CanGetErrorEvent(HANDLEPCAN_ERRORunsigned long*);DeviceHandle,pCanError,pulCount●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanGetErrorEvent(IntPtrDeviceHandle,out CAN_ERROR CanError,ref uintCount);[DllImport(“IFCan.dll”)]public static extern uint CanGetErrorEvent(IntPtrDeviceHandle,[Out] CAN_ERROR[] CanError,ref uintCount);●Visual Basic .NETDeclare Function CanGetErrorEvent Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef CanError As CAN_ERROR, _ByRef Count As Integer _) As IntegerDeclare Function CanGetErrorEvent Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ ByVal CanError() As CAN_ERROR, _ByRef Count As Integer _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。© 2012, 2014 Interface Corporation. All rights reserved.294


GPC-MA001 Help for WindowspCanErrorエラー 情 報 を 格 納 する CAN_ERROR 構 造 体 へのポインタを 指 定 してください。pCount で 指 定 された 個 数 分 の 領 域 を 用 意 してください。pulCountエラーバッファから 取 り 出 すエラー 情 報 の 件 数 を 指 定 してください。エラーバッファに 蓄 えられているエラー 情 報 が 指 定 された 件 数 よりも 少 ない 場 合 、 実 際 にエラーバッファから 取 り 出 された 件 数 が、この 変 数 に 返 されます。例 )PortStatus.ulERBCount が 3 の 時 に、pulCount に 5 をセットし、CanGetErrorEvent関 数 を 実 行 すると、pulCount に 3 が 返 されます。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。【 使 用 例 】●C 言 語INT Ret;CAN_ERROR CanError[10];unsigned long ulCount;HANDLE DeviceHandle;// エラー 情 報 の 取 り 出 しulCount = 10;Ret = CanGetErrorEvent(DeviceHandle, CanError, &ulCount);if (Ret != IFCAN_ERROR_SUCCESS) {if (Ret == IFCAN_ERROR_BUFFER_IS_EMPTY) {printf(“エラー 情 報 がありません”);}} else {for (i=0; i


GPC-MA001 Help for Windows●Visual C# .NETuint Ret;IFCCAN.CAN_ERROR[] CanError = new IFCCAN.CAN_ERROR[10];uint Count;IntPtr DeviceHandle;int i;string Message;// エラー 情 報 の 取 り 出 しulCount = 10;Ret = IFCCAN.CanGetErrorEvent(DeviceHandle, CanError, ref Count);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){if (Ret == IFCAN_ERROR_BUFFER_IS_EMPTY){MessageBox.Show(“エラー 情 報 がありません”);}}else{for (i = 0; i < Count; i++){Message = “エラー 割 り 込 み 発 生 要 因 : ” +CanError[i].InterruptRegister.ToString();MessageBox.Show(Message);Message = “エラーコード” + CanError[i].ErrorCodeRegister;MessageBox.Show(Message);Message = “” + CanError[i].ArbitrationLostRegister;MessageBox.Show(Message);}}© 2012, 2014 Interface Corporation. All rights reserved.296


GPC-MA001 Help for Windows●Visual Basic .NETDim Message As StringDim DeviceHandle As IntPtrDim CanError(9) As IFCCAN.CAN_ERRORDim Count As IntegerDim Ret As IntegerDim i As IntegerCount = 10‘ エラー 情 報 の 取 り 出 しRet = IFCCAN.CanGetErrorEvent(DeviceHandle, CanError, Count)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenIf Ret = IFCCAN.IFCAN_ERROR_BUFFER_IS_EMPTY ThenMsgBox(“エラー 情 報 がありません”)End IfElseFor i = 0 To Count - 1Message = Message & Str(i+1) & “ 件 目 のエラー 情 報 ” & vbCrLf & _“エラー 割 り 込 み 発 生 要 因 : “ & Hex(CanError(i).InterruptRegister) & _vbCrLf & “エラーコード : “ & Hex(CanError(i).ErrorCodeRegister) & _vbCrLf & “アービトレーションロスト : “ & _Hex(CanError(i).ArbitrationLostRegister & vbCrLfNextMsgBox(Message)End Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>から 10 件 のエラー 情 報 を 取 り 出 します。取 り 出 されたエラーメッセージを 画 面 に 表 示 します。10 件 に 満 たない 場 合 は、 取 り 出 された 件 数 分 だけ 表 示 します。© 2012, 2014 Interface Corporation. All rights reserved.297


GPC-MA001 Help for Windows84. CanGetCompletionMessage【 機 能 】送 信 完 了 メッセージを 取 り 出 します。【 書 式 】●C 言 語INT CanGetCompletionMessage(HANDLEDeviceHandle,PCAN_MESSAGE pCanMessage,unsigned long* pulCount);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanGetCompletionMessage(IntPtrDeviceHandle,out CAN_MESSAGECanMessage,ref uintCount);[DllImport(“IFCan.dll”)]public static extern uint CanGetCompletionMessage(IntPtrDeviceHandle,[Out] CAN_MESSAGE[] CanMessage,ref uintCount);●Visual Basic .NETDeclare Function CanGetCompletionMessage Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef CanMessage As CAN_MESSAGE, _ByRef Count As Integer _) As IntegerDeclare Function CanGetCompletionMessage Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ ByVal CanMessage() As CAN_MESSAGE, _ByRef Count As Integer _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。© 2012, 2014 Interface Corporation. All rights reserved.298


GPC-MA001 Help for WindowspCanMessage送 信 完 了 メッセージを 格 納 する CAN_MESSAGE 構 造 体 へのポインタを 指 定 してください。pCount で 指 定 された 個 数 分 の 領 域 を 用 意 してください。pulCount取 り 出 す 送 信 完 了 メッセージの 件 数 を 指 定 してください。送 信 完 了 メッセージが 指 定 された 件 数 よりも 少 ない 場 合 、 実 際 に 取 り 出 された 送 信 メッセージ 数 が、この 変 数 に 返 されます。例 ) 送 信 完 了 メッセージ 数 が 3 の 時 に、pulCount に 5 をセットし、CanGetCompletionMessage 関 数 を 実 行 すると、pulCount に 3 が 返 されます。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.299


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;CAN_MESSAGE CanMessage[10];unsigned long ulCount;HANDLE DeviceHandle;// 送 信 完 了 メッセージの 取 り 出 しulCount = 10;Ret = CanGetCompletionMessage(DeviceHandle, CanMessage, &ulCount);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanGetCompletionMessage errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IFCCAN.CAN_MESSAGE[] CanMessage = new IFCCAN.CAN_MESSAGE[10];uint Count;IntPtr DeviceHandle;int i;for(i = 0; i < 10; i++){CanMessage[i].InitializeArray();}// 送 信 完 了 メッセージの 取 り 出 しCount = 10;Ret = IFCCAN.CanGetCompletionMessage(DeviceHandle, CanMessage, ref Count);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanGetCompletionMessage error ={0:x}", Ret);return;}© 2012, 2014 Interface Corporation. All rights reserved.300


GPC-MA001 Help for Windows●Visual Basic .NETDim Message As StringDim DeviceHandle As IntPtrDim CanMessage(9) As IFCCAN.CAN_MESSAGEDim Count As IntegerDim i As IntegerFor i = 0 To 9CanMessage(i).InitializeArray()NextCount = 10‘ 送 信 完 了 メッセージの 取 り 出 しRet = IFCCAN.CanGetCompletionMessage(DeviceHandle, CanMessage, Count)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanGetCompletionMessage errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>から 10 件 の 送 信 完 了 メッセージを 取 り 出 します。© 2012, 2014 Interface Corporation. All rights reserved.301


GPC-MA001 Help for Windows85. CanClearBuffer【 機 能 】デバイスドライバ 内 に 蓄 えられている 送 信 、 受 信 メッセージ 等 を 削 除 します。【 書 式 】●C 言 語INT CanClearBuffer(HANDLE DeviceHandle,DWORD dwClearBuffer);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanClearBuffer(IntPtr DeviceHandle,uint ClearBuffer);●Visual Basic .NETDeclare Function CanClearBuffer Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByVal ClearBuffer As Integer _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。dwClearBufferクリアするバッファの 種 類 を 指 定 してください。 複 数 のバッファを OR で 指 定 できます。送 信 バッファクリア 時 は、 送 信 完 了 メッセージもクリアされます。識 別 子 値 内 容CAN_CLEAR_TXB 00000020h 送 信 バッファの 内 容 をクリアします。送 信 FIFO 内 のデータもクリアされます。CAN_CLEAR_RXB 00000010h 受 信 バッファの 内 容 をクリアします。受 信 FIFO 内 のデータもクリアされます。CAN_CLEAR_TXERR 00000008h 送 信 エラーカウンタをクリアします。※CAN_CLEAR_RXERR 00000004h 受 信 エラーカウンタをクリアします。※CAN_CLEAR_ERB 00000002h エラーバッファの 内 容 をクリアします。エラーFIFO 内 のデータもクリアされます。※ バスオフ 状 態 でのみ 使 用 可 能 です。 使 用 時 には CanDeactivate 関 数 でバスオフ 状 態 にする 必 要 があります。バスオフ 状 態 になっていない 場 合 、 関 数 の 戻 り 値 でエラーが 返 され、全 てのクリアは 行 われません。© 2012, 2014 Interface Corporation. All rights reserved.302


GPC-MA001 Help for Windows【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;Ret = CanClearBuffer(DeviceHandle,CAN_CLEAR_RXB);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanClearBuffer errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;Ret = IFCCAN.CanClearBuffer(DeviceHandle, IFCCAN.CAN_CLEAR_RXB);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanClearBuffer error ={0:x}", Ret);return;}●Visual Basic .NETDim DeviceHandle As IntPtrDim Ret As IntegerRet = IFCCAN.CanClearBuffer(DeviceHandle, IFCCAN.CAN_CLEAR_RXB)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanClearBuffer errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>の 受 信 バッファをクリアします。© 2012, 2014 Interface Corporation. All rights reserved.303


GPC-MA001 Help for Windows86. CanSetEventMask【 機 能 】割 り 込 みイベントのマスク 設 定 を 行 います。【 書 式 】●C 言 語INT CanSetEventMask(HANDLEDeviceHandle,DWORDdwEventMask);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanSetEvent(IntPtrDeviceHandle,ref CAN_EVENT_REQ EventReq);●Visual Basic .NETDeclare Function CanSetEvent Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef EventReq As CAN_EVENT_REQ _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。dwEventMask使 用 する 割 り 込 みイベントのマスクデータを 指 定 してください。識 別 子 値 内 容CAN_EVENT_ERR_FIFO_OVER 00000200h エラーFIFO がオーバーフローし、エラー 情 報 を 取 りこぼしました。エラーFIFO トリガ 値 を 下 げてください。CAN_EVENT_DETECT_OVERRUN 00000100h オーバーランエラーが 発 生 し、 受 信 データを 取 りこぼしました。受 信 FIFO はデータがいっぱいになると、CAN コントローラからデータを 抜き 取 らなくなるため、このオーバーランエラーが 発 生 します。 受 信 FIFO トリガ 値 を 下 げてください。(このオーバーランエラーは、エラー情 報 バッファにも 格 納 されます。)© 2012, 2014 Interface Corporation. All rights reserved.304


GPC-MA001 Help for WindowsCAN_EVENT_CYCLIC_SEND_STOP 00000080h 送 信 周 期 よりもデータ 送 信 時 間 が 長いため、 周 期 送 信 が 停 止 しました。CAN_EVENT_BUS_STATUS 00000040h バスステータスの 変 化 (エラーアクティブ、エラーパッシブ、バスオフ)でイベントが 発 生 しました。CAN_EVENT_RECV 00000020h 受 信 バッファに 1 つ 以 上 の 受 信 メッセージが 蓄 えられました。CAN_EVENT_ERROR 00000010h エラーバッファに 1 つ 以 上 のエラーが蓄 えられました。CAN_EVENT_TXB_IS_EMPTY 00000008h 送 信 バッファ 内 の 未 送 信 データがなくなりました。CAN_EVENT_ERROR_LIMIT 00000004h 送 信 、 受 信 いずれかのエラーがリミット 値 を 越 えました。リミット 値 はCAN_PORT_CONFIG 構 造 体 のulErrorLimit で 指 定 します。CAN_EVENT_RXB_FULL 00000002h 受 信 バッファがいっぱいになりました。CAN_EVENT_ERB_FULL 00000001h エラーバッファがいっぱいになりました。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.305


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;DWORD dwEventMask;dwEventMask = CAN_EVENT_RECV;Ret = CanSetEventMask(DeviceHandle, dwEventMask);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanSetEventMask errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;uint EventMask;EventMask = IFCCAN.CAN_EVENT_RECV;Ret = IFCCAN.CanSetEventMask(DeviceHandle, EventMask);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanSetEventMask error ={0:x}", Ret);return;}●Visual Basic .NETDim DeviceHandle As IntPtrDim EventMask As IntegerDim Ret As IntegerEventMask = IFCCAN.CAN_EVENT_RECVRet = IFCCAN.CanSetEventMask(DeviceHandle, EventMask)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanSetEventMask errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>の 割 り 込 みイベントマスクを 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.306


GPC-MA001 Help for Windows87. CanSetEvent【 機 能 】デバイスのイベントを 設 定 します。【 書 式 】●C 言 語INT CanSetEvent (HANDLEPCAN_EVENT_REQ);DeviceHandle,pEvent●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanSetEvent(IntPtrDeviceHandle,ref CAN_EVENT_REQEventReq);●Visual Basic .NETDeclare Function CanSetEvent Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr, _ByRef EventReq As CAN_EVENT_REQ _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。pEvent割 り 込 み 発 生 時 に 呼 び 出 されるユーザ・コールバック 関 数 、メッセージの 設 定 を 行 うCAN_EVENT_REQ 構 造 体 へのポインタを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.307


GPC-MA001 Help for Windows【 備 考 】コールバック 関 数 の 書 式 は 下 記 のようになります。●C 言 語 (x86)void CallBack(DWROD dwEventFactor, // コールバック 関 数 発 生 要 因DWROD dwUser // ユーザデータ);●C 言 語 (x64)void CallBack(DWROD dwEventFactor, // コールバック 関 数 発 生 要 因PVOID dwUser // ユーザデータ);●Visual C# .NETvoid CallBack(uint EventFactor, // コールバック 関 数 発 生 要 因IntPtr User // ユーザデータ);●Visual Basic .NETDeclare Sub CallBack( _ByVal EventFactor, As Integer, _ ‘ コールバック 関 数 発 生 要 因ByVal User As IntPtr _ ‘ ユーザデータ)【パラメータ】EventFactorコールバック 関 数 発 生 要 因 。コールバック 関 数 が 発 生 した 要 因 が 渡 されます。識 別 子 値 内 容CAN_EVENT_TRANSCEIVER_ERROR 00001000h 低 速 CAN トランシーバでエラーが 発 生 しました。CAN_EVENT_ERR_FIFO_OVER 00000200h エラーFIFO がオーバーフローし、エラー 情 報を 取 りこぼしました。エラーFIFO トリガ 値 を 下 げてください。CAN_EVENT_DETECT_OVERRUN 00000100h オーバーランエラーが 発 生 し、 受 信 データを 取りこぼしました。受 信 FIFO はデータがいっぱいになると、CANコントローラからデータを 抜 き 取 らなくなるため、このオーバーランエラーが 発 生 します。受 信 FIFO トリガ 値 を 下 げてください。(このオーバーランエラーは、エラー 情 報 バッ© 2012, 2014 Interface Corporation. All rights reserved.308


GPC-MA001 Help for Windowsファにも 格 納 されます。)CAN_EVENT_CYCLIC_SEND_STOP 00000080h 送 信 周 期 よりもデータ 送 信 時 間 が 長 いため、 周期 送 信 が 停 止 しました。CAN_EVENT_BUS_STATUS 00000040h バスステータスの 変 化 (エラーアクティブ、エラーパッシブ、バスオフ)でイベントが 発 生 しました。CAN_EVENT_RECV 00000020h 受 信 バッファに 1 つ 以 上 の 受 信 メッセージが蓄 えられました。CAN_EVENT_ERROR 00000010h エラーバッファに 1 つ 以 上 のエラーが 蓄 えられました。CAN_EVENT_TXB_IS_EMPTY 00000008h 送 信 バッファ 内 の 未 送 信 データがなくなりました。CAN_EVENT_ERROR_LIMIT 00000004h 送 信 、 受 信 いずれかのエラーがリミット 値 を 越えました。リ ミ ッ ト 値 は CAN_PORT_CONFIG 構 造 体 のulErrorLimit で 指 定 します。CAN_EVENT_RXB_FULL 00000002h 受 信 バッファがいっぱいになりました。CAN_EVENT_ERB_FULL 00000001h エラーバッファがいっぱいになりました。UserCanSetEvent 関 数 実 行 時 、CAN_EVENT_REQ 構 造 体 の User 変 数 に 指 定 したユーザ・データが取 得 されます。また、メッセージ 機 能 を 使 用 する 場 合 、メッセージハンドラの WParam には Event が、LParamには User が 渡 されます。© 2012, 2014 Interface Corporation. All rights reserved.309


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語// コールバック 関 数VOID CALLBACK lpEventProc(DWORD dwEvent, DWORD dwUser){// 割 り 込 み 処 理 を 記 述 します:}// メインルーチンINT Ret;HANDLE DeviceHandle;DWORD dwEventMask;CAN_EVENT_REQ Event;dwEventMask = CAN_EVENT_RECV;Ret = CanSetEventMask(hDeviceHandle, dwEventMask);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanSetEventMask errr(%lx)\n", Ret);return;}Event.hWnd = NULL;Event.hInterruptEvent = NULL;Event.lpCallBackProc = (LPCANCALLBACK)lpEventProc;Event.uInterruptMsg = WM_NULL;Event.dwUser = 0x1234;Ret = CanSetEvent(DeviceHandle, &Event);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanSetEvent errr(%lx)\n", Ret);return;}© 2012, 2014 Interface Corporation. All rights reserved.310


GPC-MA001 Help for Windows●Visual C# .NET// コールバック 関 数void EventProc(uint EventFactor, IntPtr User){// 割 り 込 み 処 理 を 記 述 します:}// メインルーチンuint Ret;IntPtr DeviceHandle;uint EventMask;uint UserData;GCHandle PinnedBuffer;EventMask = IFCCAN.CAN_EVENT_RECV;Ret = IFCCAN.CanSetEventMask(DeviceHandle, EventMask);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanSetEventMask error ={0:x}", Ret);return;}IFCCAN.CAN_EVENT_REQ Event = new IFCCAN.CAN_EVENT_REQ();UserData = 0x1234;PinnedBuffer = GCHandle.Alloc(UserData, GCHandleType.Pinned);Event.Wnd = IntPtr.Zero;Event.InterruptEvent = IntPtr.Zero;Event.CallBackProc = new IFCCAN.PCANCALLBACK(EventProc);Event.InterruptMsg = 0;Event.User = PinnedBuffer.AddrOfPinnedObject();Ret = IFCCAN.CanSetEvent(DeviceHandle, ref Event);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanSetEvent error ={0:x}", Ret);return;}:// 割 り 込 み 処 理 完 了PinnedBuffer.Free();© 2012, 2014 Interface Corporation. All rights reserved.311


GPC-MA001 Help for Windows●Visual Basic .NET‘ コールバックルーチンPublic Sub EventProc(ByVal EventFactor As Integer, ByVal User As IntPtr)‘ 割 り 込 み 処 理 を 記 述 します:End Sub‘ メインルーチンDim DeviceHandle As IntPtrDim EventReq As IFCCAN.CAN_EVENT_REQ = New IFCCAN.CAN_EVENT_REQDim EventMask As IntegerDim proc As IFCCAN.PCANCALLBACK = New IFCCAN.PCANCALLBACK(AddressOf EventProc)Dim UserData As IntegerDim PinnedBuffer As GCHandleEventMask = IFCCAN.CAN_EVENT_RECVRet = IFCCAN.CanSetEventMask(DeviceHandle, EventMask)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanSetEventMask errr({0:x})", Ret)ReturnEnd IfUserData = &H1234PinnedBuffer = GCHandle.Alloc(UserData, GCHandleType.Pinned)EventReq.Wnd = IntPtr.ZeroEventReq.InterruptEvent = 0EventReq.CallBackProc = procEventReq.InterruptMsg = 0EventReq.User = PinnedBuffer.AddrOfPinnedObject()Ret = IFCCAN.CanSetEvent(DeviceHandle, EventReq)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanSetEvent errr({0:x})", Ret)ReturnEnd If:‘ 割 り 込 み 処 理 完 了PinnedBuffer.Free()デバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>の 割 り 込 みマスク、コールバック 関 数 を 設 定 します。© 2012, 2014 Interface Corporation. All rights reserved.312


GPC-MA001 Help for Windows88. CanKillEvent【 機 能 】デバイスのイベントを 解 除 します。【 書 式 】●C 言 語INT CanKillEvent (HANDLE DeviceHandle);●Visual C# .NET[DllImport(“IFCan.dll”)]public static extern uint CanKillEvent(IntPtr DeviceHandle);●Visual Basic .NETDeclare Function CanKillEvent Lib "IFCan.DLL"( _ByVal DeviceHandle As IntPtr _) As Integer【パラメータ】DeviceHandleCanOpenPort 関 数 で 取 得 したデバイスハンドルを 指 定 してください。【 戻 り 値 】正 常 終 了 した 場 合 は、IFCAN_ERROR_SUCCESS が 返 されます。IFCAN_ERROR_SUCCESS 以 外 の 値 が 返 された 場 合 については、『6.17 戻 り 値 一 覧 (CAN)』をご 参 照ください。© 2012, 2014 Interface Corporation. All rights reserved.313


GPC-MA001 Help for Windows【 使 用 例 】●C 言 語INT Ret;HANDLE DeviceHandle;Ret = CanKillEvent(DeviceHandle);if (Ret != IFCAN_ERROR_SUCCESS) {printf(" CanKillEvent errr(%lx)\n", Ret);return;}●Visual C# .NETuint Ret;IntPtr DeviceHandle;Ret = IFCCAN.CanKillEvent(DeviceHandle);if (Ret != IFCCAN.IFCAN_ERROR_SUCCESS){Console.WriteLine(" CanKillEvent error ={0:x}", Ret);return;}●Visual Basic .NETDim DeviceHandle As IntPtrDim Ret As IntegerRet = IFCCAN.CanKillEvent(DeviceHandle)If Ret IFCCAN.IFCAN_ERROR_SUCCESS ThenConsole.WriteLine(" CanKillEvent errr({0:x})", Ret)ReturnEnd Ifデバイス 名 「IFCAN1」の CAN <strong>インタフェース</strong>のコールバック 関 数 の 解 除 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.314


GPC-MA001 Help for Windows6.12 構 造 体 説 明6.12.1 MADEVICEINFO 構 造 体デバイス 情 報 を 格 納 する 構 造 体 です。●C 言 語typedef struct {ULONG DeviceID;ULONG SubSystemID;ULONG Rsw;ULONG SupportFunc;} MADEVICEINFO, *PMADEVICEINFO;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct MADEVICEINFOuint DeviceID;uint SubSystemID;uint Rsw;uint SupportFunc;}● Visual Basic .NET Structure MADEVICEINFODim DeviceIDAs IntegerDim SubSystemID As IntegerDim RswAs IntegerDim SupportFunc As IntegerEnd StructureメンバDeviceIDSubSystemIDRswSupportFunc説 明デバイス ID が 格 納 されます。サブシステム ID が 格 納 されます。RSW 番 号 が 格 納 されます。サポートしている 機 能 が 格 納 されます。bit31~bit5 bit4 bit3 bit2 bit1 bit0予 約 CNT DO DI DA AD© 2012, 2014 Interface Corporation. All rights reserved.315


GPC-MA001 Help for Windows6.12.2 MASMPLCONF 構 造 体サンプリング 条 件 設 定 の 構 造 体 です。●C 言 語typedef struct {ULONG SamplingMode;ULONG StartTrigger;ULONG StopTrigger;ULONG SmplNum;ULONG PreSmplNum;ULONG RepeatNum;ULONG BufferMode;ULONG SmplEventNum;} MASMPLCONF, *PMASMPLCONF;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct MASMPLCONFuint SamplingMode;uint StartTrigger;uint StopTrigger;uint SmplNum;uint PreSmplNum;uint RepeatNum;uint BufferMode;uint SmplEventNum;}● Visual Basic .NET Structure MASMPLCONFDim SamplingMode As IntegerDim StartTrigger As IntegerDim StopTrigger As IntegerDim SmplNumAs IntegerDim PreSmplNumAs IntegerDim RepeatNumAs IntegerDim BufferModeAs IntegerDim SmplEventNum As IntegerEnd Structure© 2012, 2014 Interface Corporation. All rights reserved.316


GPC-MA001 Help for WindowsメンバSamplingModeStartTriggerStopTriggerSmplNumPreSmplNumRepeatNum説 明サンプリングモードを 指 定 します。デフォルト:MA_NORMAL_SAMPLING識 別 子 値 内 容MA_NORMAL_SAMPLING 1 一 定 周 期 サンプリングMA_FFT_SAMPLING 2 FFT サンプリングMA_TRACK_SAMPLING 3 トラッキングサンプリングスタートトリガを 指 定 しますデフォルト:MA_NONE_TRG識 別 子 値 内 容MA_NONE_TRG 0 同 期 トリガを 使 用 しないMA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 7ストップトリガを 指 定 しますデフォルト:MA_NONE_TRG識 別 子 値 内 容MA_NONE_TRG 0 同 期 トリガを 使 用 しないMA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 7サンプリング 件 数 を 指 定 しますデフォルト:1024プリサンプリング 件 数 を 指 定 しますデフォルト:0繰 り 返 し 回 数 を 指 定 しますデフォルト:1© 2012, 2014 Interface Corporation. All rights reserved.317


GPC-MA001 Help for WindowsBufferModeSmplEventNumサンプリングデータのバッファへの 格 納 方 法 を 指 定 します。デフォルト:MA_APPEND識 別 子 値 内 容MA_APPEND 1 追 加 保 存MA_OVERWRITE 2 上 書 き 保 存指 定 件 数 イベント 発 生 の 件 数 を 指 定 します。デフォルト:0© 2012, 2014 Interface Corporation. All rights reserved.318


GPC-MA001 Help for Windows6.12.3 MASMPLSTATUS 構 造 体サンプリング 状 態 を 取 得 する 構 造 体 です。●C 言 語typedef struct {ULONG SmplStatus;ULONG SmplCount;ULONG AvailCount;ULONG RepeatCount;} MASMPLSTATUS, *PMASMPLSTATUS;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct MASMPLSTATUSuint SmplStatus;uint SmplCount;uint AvailCount;uint RepeatCount;}● Visual Basic .NET Structure MASMPLSTATUSDim SmplStatusAs IntegerDim SmplCountAs IntegerDim AvailCountAs IntegerDim RepeatCountAs IntegerEnd StructureメンバSmplStatusSmplCountAvailCountRepeatCount説 明連 続 出 力 状 態 になります。識 別 子 値 内 容MA_STATUS_STOP_SAMPLING 1 サンプリング 停 止 中MA_STATUS_WAIT_TRIGGER 2 トリガ 待 ち 中MA_STATUS_NOW_SAMPLING 3 サンプリング 中サンプリング 済 カウンタを 返 します。サンプリング 残 カウンタを 返 します。繰 り 返 しカウンタを 返 します。© 2012, 2014 Interface Corporation. All rights reserved.319


GPC-MA001 Help for Windows6.12.4 MASMPLDATA 構 造 体サンプリングデータの 構 造 体 です。●C 言 語typedef struct {DWORD TimeStamp;DWORD AD1Data;DWORD AD2Data;DWORD AD3Data;DWORD AD4Data;DWORD CounterData;DWORD DiData;DWORD EventTrgLog;DWORD SmplTimeStamp;} MASMPLDATA, *PMASMPLDATA;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct MASMPLDATAuint TimeStamp;uint AD1Data;uint AD2Data;uint AD3Data;uint AD4Data;uint CounterData;uint DiData;uint EventTrgLog;uint SmplTimeStamp;}● Visual Basic .NET Structure MASMPLDATADim TimeStampAs IntegerDim AD1DataAs IntegerDim AD2DataAs IntegerDim AD3DataAs IntegerDim AD4DataAs IntegerDim CounterDataAs IntegerDim DiDataAs IntegerDim EventTrgLogAs IntegerDim SmplTimeStampAs IntegerEnd Structure© 2012, 2014 Interface Corporation. All rights reserved.320


GPC-MA001 Help for WindowsメンバTimeStampAD1DataAD2DataAD3DataAD4Data説 明タイムスタンプチャンネル 1 のデータチャンネル 2 のデータチャンネル 3 のデータチャンネル 4 のデータCounterData カウンタのデータ ※1DiData デジタル 入 力 のデータ ※1EventTrgLogSmplTimeStampイベントログサンプリングタイムスタンプ※1 マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 値 が 格 納 されます。上 記 以 外 では 常 に 0 が 取 得 されます。© 2012, 2014 Interface Corporation. All rights reserved.321


GPC-MA001 Help for Windows6.13 構 造 体 説 明 (アナログ 入 力 )6.13.1 ADDEVICEINFO 構 造 体アナログ 入 力 情 報 を 格 納 する 構 造 体 です。●C 言 語typedef struct {ULONG SamplingMode;ULONG ChCountS;ULONG ChCountD;ULONG Resolution;ULONG Range;ULONG InputType;ULONG DefRng;} ADDEVICEINFO, *PADDEVICEINFO;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct ADDEVICEINFOuint SamplingMode;uint ChCountS;uint ChCountD;uint Resolution;uint Range;uint InputType;uint DefRng;}● Visual Basic .NET Structure ADDEVICEINFODim SamplingModeAs IntegerDim ChCountSAs IntegerDim ChCountDAs IntegerDim ResolutionAs IntegerDim RangeAs IntegerDim InputTypeAs IntegerDim DefRngAs IntegerEnd StructureメンバSamplingModeChCountS説 明サンプリングモードが 格 納 されます。シングルエンド 入 力 時 のチャンネル 数 が 格 納 されます。© 2012, 2014 Interface Corporation. All rights reserved.322


GPC-MA001 Help for WindowsChCountDResolutionRangeInputTypeDefRng差 動 入 力 時 のチャンネル 数 が 格 納 されます。分 解 能 が 格 納 されます。サポートしているレンジ 情 報 が 格 納 されます。入 力 形 式 が 格 納 されます。デフォルトレンジ 情 報 が 格 納 されます。© 2012, 2014 Interface Corporation. All rights reserved.323


GPC-MA001 Help for Windows6.13.2 ADCHREQ 構 造 体各 チャンネル 毎 のレンジ/AC カップリングを 設 定 する 構 造 体 です。●C 言 語typedef struct {ULONG InputMode,ULONG Channel;ULONG Range;ULONG AcCoupling;} ADCHREQ, *PADCHREQ;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct ADCHREQuint InputMode,uint Channel;uint Range;uint AcCoupling;}● Visual Basic .NET Structure ADCHREQDim InputModeAs IntegerDim ChannelAs IntegerDim RangeAs IntegerDim AcCouplingAs IntegerEnd StructureメンバInputModeChannel説 明入 力 仕 様 を 指 定 します。デフォルト:AD_INPUT_SINGLE識 別 子 値 内 容AD_INPUT_SINGLE 1 シングルエンド 入 力AD_INPUT_DIFF 2 差 動 入 力AD_INPUT_IEPE 3 IEPE 接 続※IEPE を 有 効 にする 場 合 、 必 ず ACカップリング 有 効 にする 必 要 があります。レンジ 設 定 を 行 うチャンネルを 指 定 します。指 定 の 範 囲 は 以 下 の 通 りです。1 ~ その IO モジュールが 提 供 する 最 大 チャンネル 番 号© 2012, 2014 Interface Corporation. All rights reserved.324


GPC-MA001 Help for WindowsRangeAcCoupling指 定 したチャンネルのレンジを 指 定 します。デフォルト:AD_RNG_10V識 別 子 値 内 容AD_RNG_1V 0x00010000 電 圧 バイポーラ ±1VAD_RNG_10V 0x00080000 電 圧 バイポーラ ±10VAD_RNG_10mV 0x01000000 電 圧 バイポーラ ±10mVAD_RNG_100mV 0x02000000 電 圧 バイポーラ ±100mV指 定 したチャンネルのレンジを AC カップリングの 有 効 / 無 効 を 指 定 します。デフォルト:AD_COUPLING_ON識 別 子 値 内 容AD_COUPLING_OFF 1 AC カップリング 無 効AD_COUPLING_ON 2 AC カップリング 有 効© 2012, 2014 Interface Corporation. All rights reserved.325


GPC-MA001 Help for Windows6.13.3 ATRIGREQ 構 造 体アナログトリガ 条 件 を 設 定 する 構 造 体 です。●C 言 語typedef struct {ULONG Channel;ULONG TrigLevel1;ULONG Hysteresis1;ULONG TrigLevel2;ULONG Hysteresis2;} ATRIGREQ, *PATRIGREQ;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct ATRIGREQuint DeviceID;uint SubSystemID;uint SubSystemID;uint Rsw;uint SupportFunc;}● Visual Basic .NET Structure ATRIGREQDim ChannelAs IntegerDim TrigLevel1As IntegerDim Hysteresis1As IntegerDim TrigLevel2As IntegerDim Hysteresis2As IntegerEnd StructureメンバChannelTrigLevel1Hysteresis1説 明チャンネルを 指 定 します。トリガレベル 1 を 指 定 します。0~0xFFFFFF の 範 囲 で 指 定 できます。デフォルト;0x00000000トリガレベル 1 に 対 するヒステリシスを 指 定 します。0~0xFFFE の 範 囲 で 指 定 できます。デフォルト;0x00000000TrigLevel2トリガレベル 2 を 指 定 します。0~0xFFFFFF の 範 囲 で 指 定 できます。デフォルト;0x00000000© 2012, 2014 Interface Corporation. All rights reserved.326


GPC-MA001 Help for WindowsHysteresis2トリガレベル 2 に 対 するヒステリシスを 指 定 します。0~0xFFFE の 範 囲 で 指 定 できます。デフォルト;0x00000000アナログ 入 力 がある 任 意 のレベルを 超 える(または 下 回 る) 場 合 トリガが 発 生 します。このレベルにヒステリシス 幅 を 持 たすことができます。ヒステリシス 幅ヒステリシス 幅指 定 レベルヒステリシス 幅ヒステリシス 幅指 定 レベルレベルを 越 えたと 検 出 し、トリガ 発 生立 ち 下 がりとしてアナログトリガ 検 出また、レベルは2つ 設 定 できますので、 例 えば 以 下 のような 設 定 ができます。トリガ 発 生レベル 1+1V立 ち 上 がりでトリガ 発 生レベル 2-1V立 ち 下 がりでトリガ 発 生アナログ 信 号 が 指 定 範 囲 (-1V~+1V) 外 になると、トリガが 発 生 します。© 2012, 2014 Interface Corporation. All rights reserved.327


GPC-MA001 Help for Windows6.14 構 造 体 説 明 (アナログ 出 力 )6.14.1 DADEVICEINFO 構 造 体アナログ 出 力 情 報 を 格 納 する 構 造 体 です。●C 言 語typedef struct {ULONG OutputMode;ULONG ChCount;ULONG Resolution;ULONG Range;ULONG DefRng;} DADEVICEINFO, *PDADEVICEINFO;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct DADEVICEINFOuint OutputMode;uint ChCount;uint Resolution;uint Range;uint DefRng;}● Visual Basic .NET Structure DADEVICEINFODim OutputMode As IntegerDim ChCountAs IntegerDim Resolution As IntegerDim RangeAs IntegerDim DefRngAs IntegerEnd StructureメンバOutputModeChCountResolutionRangeDefRng説 明連 続 出 力 モードが 格 納 されます。シングルエンド 入 力 時 のチャンネル 数 が 格 納 されます。分 解 能 が 格 納 されます。サポートしているレンジ 情 報 が 格 納 されます。デフォルトレンジ 情 報 が 格 納 されます。© 2012, 2014 Interface Corporation. All rights reserved.328


GPC-MA001 Help for Windows6.14.2 DACHREQ 構 造 体各 チャンネル 毎 のレンジを 設 定 する 構 造 体 です。●C 言 語typedef struct {ULONG Channel;ULONG Range;} DACHREQ, *PDACHREQ;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct DACHREQuint Channel;uint Range;}● Visual Basic .NET Structure DACHREQDim Channel As IntegerDim Range As IntegerEnd StructureメンバChannelRange説 明レンジ 設 定 を 行 うチャンネルを 指 定 します。指 定 の 範 囲 は 以 下 の 通 りです。1 ~ その IO モジュールが 提 供 する 最 大 チャンネル 番 号デフォルト:1指 定 したチャンネルのレンジを 指 定 します。識 別 子 値 内 容DA_RNG_0_1V 0x00000001 電 圧 ユニポーラ 0~1VDA_RNG_0_2P5V 0x00000002 電 圧 ユニポーラ 0~2.5VDA_RNG_0_5V 0x00000004 電 圧 ユニポーラ 0~5VDA_RNG_0_10V 0x00000008 電 圧 ユニポーラ 0~10VDA_RNG_1V 0x00010000 電 圧 バイポーラ ±1VDA_RNG_2P5V 0x00020000 電 圧 バイポーラ ±2.5VDA_RNG_5V 0x00040000 電 圧 バイポーラ ±5VDA_RNG_10V 0x00080000 電 圧 バイポーラ ±10V© 2012, 2014 Interface Corporation. All rights reserved.329


GPC-MA001 Help for Windows6.14.3 OUTPUTCONF 構 造 体連 続 出 力 条 件 を 設 定 構 造 体 です。●C 言 語typedef struct {ULONG StartTrigger;ULONG StopTrigger;ULONG OutputNum;ULONG RepeatNum;ULONG EventNum;} OUTPUTCONF, *POUTPUTCONF;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct OUTPUTCONFuint StartTrigger;uint StopTrigger;uint OutputNum;uint RepeatNum;uint EventNum;}● Visual Basic .NET Structure OUTPUTCONFDim StartTrigger As IntegerDim StopTrigger As IntegerDim OutputNum As IntegerDim RepeatNum As IntegerDim EventNum As IntegerEnd StructureメンバStartTrigger説 明スタートトリガを 指 定 しますデフォルト:MA_NONE_TRG識 別 子 値 内 容MA_NONE_TRG 0 同 期 トリガを 使 用 しないMA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 6© 2012, 2014 Interface Corporation. All rights reserved.330


GPC-MA001 Help for WindowsStopTriggerOutputNumRepeatNumEventNumストップトリガを 指 定 しますデフォルト:MA_NONE_TRG識 別 子 値 内 容MA_NONE_TRG 0 同 期 トリガを 使 用 しないMA_SYNC0_TRG 8 同 期 トリガ 0MA_SYNC1_TRG 9 同 期 トリガ 1MA_SYNC2_TRG 10 同 期 トリガ 2MA_SYNC3_TRG 11 同 期 トリガ 3MA_SYNC4_TRG 12 同 期 トリガ 4MA_SYNC5_TRG 13 同 期 トリガ 5MA_SYNC6_TRG 14 同 期 トリガ 6MA_SYNC7_TRG 15 同 期 トリガ 6連 続 出 力 件 数 を 指 定 しますデフォルト:1024繰 り 返 し 回 数 を 指 定 しますデフォルト:1指 定 件 数 イベント 発 生 の 件 数 を 指 定 しますデフォルト:0© 2012, 2014 Interface Corporation. All rights reserved.331


GPC-MA001 Help for Windows6.14.4 OUTPUTSTATUS 構 造 体連 続 出 力 状 態 を 取 得 する 構 造 体 です。●C 言 語typedef struct {ULONG OutputStatus;ULONG OutputCount;ULONG AvailCount;ULONG RepeatCount;} OUTPUTSTATUS, *POUTPUTSTATUS;● Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct OUTPUTSTATUSuint OutputStatus;uint OutputCount;uint AvailCount;uint RepeatCount;}● Visual Basic .NET Structure OUTPUTSTATUSDim OutputStatus As IntegerDim OutputCount As IntegerDim AvailCount As IntegerDim RepeatCount As IntegerEnd StructureメンバOutputStatusOutputCountAvailCountRepeatCount説 明連 続 出 力 状 態 になります。識 別 子 値 内 容MA_STATUS_STOP_SAMPLING 1 連 続 出 力 停 止 中MA_STATUS_WAIT_TRIGGER 2 トリガ 待 ち 中MA_STATUS_NOW_SAMPLING 3 連 続 出 力 中連 続 済 み 出 力 カウンタを 返 します。残 連 続 出 力 カウンタを 返 します。繰 り 返 しカウンタを 返 します。© 2012, 2014 Interface Corporation. All rights reserved.332


GPC-MA001 Help for Windows6.15 構 造 体 説 明 (CAN)6.15.1 CAN_PORT_CONFIG 構 造 体CanSetConfig 関 数 、CanGetConfig 関 数 で 指 定 する 通 信 条 件 設 定 構 造 体 です。●C 言 語typedef struct {ULONG ulLineMode;ULONG ulFilterMode;ULONG ulTXBSize;ULONG ulRXBSize;ULONG ulERBSize;ULONG ulErrorLimit;ULONG ulBaudRate;} CAN_PORT_CONFIG, *PCAN_PORT_CONFIG;●Visual C# .NET(x86、x64 共 用 )[StructLayout(LayoutKind.Sequential)]public struct CAN_PORT_CONFIG{public uint LineMode;public uint FilterMode;public uint TXBSize;public uint RXBSize;public uint ERBSize;public uint ErrorLimit;public uint BaudRate;}●Visual Basic .NET(x86、x64 共 用 ) Structure CAN_PORT_CONFIGDim LineMode As IntegerDim FilterMode As IntegerDim TXBSize As IntegerDim RXBSize As IntegerDim ERBSize As IntegerDim ErrorLimit As IntegerDim BaudRate As IntegerEnd Structure© 2012, 2014 Interface Corporation. All rights reserved.333


GPC-MA001 Help for WindowsメンバulLineModeulFilterModeulTXBSizeulRXBSizeUlERBSize説 明通 信 のモードを 選 択 します。CAN_FIFO_SEND_MODE を OR で 指 定 することができます。識 別 子 値 内 容CAN_NORMAL_MODE 0 通 常 の 通 信 モードメッセージを 受 信 したら ACK を返 します。(デフォルト 値 )CAN_LISTEN_ONLY_MODE 1 モニタモードメッセージを 受 信 しても ACK を返 しません。CAN_FIFO_SEND_MODE 80000000h FIFO 送 信 モード送 信 FIFO を 使 った 送 信 を 行 います。 送 信 FIFO トリガを 使 用 してパフォーマンスを 上 げることが 出 来 ますが、 送 信 完 了 メッセージは 挿 入 されません。アクセプタンスフィルタのモードを 選 択 します。識 別 子 値 内 容CAN_DUAL_FILTER 0 2 つのフィルタを 設 定 できます。(1 つのフィルタあたり、16 ビットの 定 義 )CAN_SINGLE_FILTER 1 1 つのフィルタを 設 定 できます。(デフォルト 値 )(32 ビットの 定 義 が 可 能 )送 信 バッファのサイズをメッセージ 単 位 で 指 定 します。1 増 加 する 毎 に 使 用 するメモリが 24 バイトずつ 増 加 します。送 信 バッファ 内 に 格 納 されているメッセージ 数 よりも、 小 さいサイズに 設 定 しようとした 場 合 、 入 りきらなかったデータは 破 棄 されます。設 定 値 : 64~ (デフォルト 値 : 64)受 信 バッファのサイズをメッセージ 単 位 で 指 定 します。1 増 加 する 毎 に 使 用 するメモリが 24 バイトずつ 増 加 します。受 信 バッファ 内 に 格 納 されているメッセージ 数 よりも、 小 さいサイズに 設 定 しようとした 場 合 、 入 りきらなかったデータは 破 棄 されます。設 定 値 : 64~ (デフォルト 値 : 64)エラーキャプチャに 使 用 するバッファのサイズを 件 数 単 位 で 指 定 します。1 増 加 する 毎 に 使 用 するメモリが 16 バイトずつ 増 加 します。エラーバッファ 内 に 格 納 されているエラー 数 よりも、 小 さいサイズに 設 定 しようとした 場 合 、 入 りきらなかったデータは 破 棄 されます。設 定 値 : 64~ (デフォルト 値 : 64)© 2012, 2014 Interface Corporation. All rights reserved.334


GPC-MA001 Help for WindowsUlErrorLimit 送 受 信 の 際 に 発 生 したエラーが、この 件 数 を 超 えるとイベントが 発 生 します。CAN のプロトコルでは 127 を 越 えるとエラーパッシブ 状 態 となり、255 を 越 えるとバスオフ 状 態 へ 遷 移 します。設 定 値 : 0~255 (デフォルト 値 : 96)ulBaudRate通 信 速 度 を 指 定 します。識 別 子 値 内 容CAN_BAUDRATE_33_3k 00002724h 通 信 速 度 を 33.3Kbps に 設 定 します。CAN_BAUDRATE_50k 00001D23h 通 信 速 度 を 50Kbps に 設 定 します。CAN_BAUDRATE_83_3k 00000F24h 通 信 速 度 を 83.3Kbps に 設 定 します。CAN_BAUDRATE_95_2k 00000D24h 通 信 速 度 を 95.2Kbps に 設 定 します。CAN_BAUDRATE_100k 00000936h 通 信 速 度 を 100Kbps に 設 定 します。CAN_BAUDRATE_125k 0000053Ah 通 信 速 度 を 125Kbps に 設 定 します。(デフォルト 値 )CAN_BAUDRATE_250k 0000023Ah 通 信 速 度 を 250Kbps に 設 定 します。CAN_BAUDRATE_500k 00000127h 通 信 速 度 を 500Kbps に 設 定 します。CAN_BAUDRATE_1M 00000027h 通 信 速 度 を 1Mbps に 設 定 します。CAN_BAUDRATE_BTR 80000000h SJA1000 の BTR レジスタを 直 接 制 御します。CAN_BAUDRATE_BTR は、 以 下 の 値 とで 論 理 和 (OR)を 取 ることで、CAN コントローラ SJA1000 の BTR レジスタに 直 接 、 値 を 代 入 することが 出 来 ます。bit15~8 が BTR1、bit7~0 が BTR0 に 相 当 します。なお、CAN コントローラに 入 力 されるクロックは 24MHz です。bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24予 約 予 約 予 約 予 約 予 約 予 約 予 約 予 約bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16予 約 予 約 予 約 予 約 予 約 予 約 予 約 予 約bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8SJW.1 SJW.0 BRP.5 BRP.4 BRP.3 BRP.2 BRP.1 BRP.0bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0SAM TSEG2.2 TSEG2.1 TSEG2.0 TSEG1.3 TSEG1.2 TSEG1.1 TSEG1.0© 2012, 2014 Interface Corporation. All rights reserved.335


GPC-MA001 Help for Windows※CAN_BAUDRATE_BTR でのボーレート 設 定 方 法下 記 の 計 算 式 に 各 ビットの 値 をあてはめてボーレートを 設 定 してください。BRP = BPR.5 × 32 + BRP.4 × 16 + BRP.3 × 8 + BRP.2 × 4 + BRP.1 × 2 + BRP.0TSEG1 = TSEG1.3 × 8 + TSEG1.2 × 4 + TSEG1.1 × 2 + TSEG1.0TSEG2 = TSEG2.2 × 4 + TSEG2.1 × 2 + TSEG2.0f SCL=24 × 106( BRP + 1) × 2ボーレート=f SCL1 +(TSEG1 + 1) +(TSEG2 + 1)※サンプルポイントを 後 にずらすためには、TSEG2 の 値 をなるべく 小 さくするように 設 定 してください。その 他 設 定 値 については、CAN コントローラ(SJA1000)のデータシートを 参 照 ください。例 :ボーレートを 500Kbps に 設 定 します。(BPR=1,TSEG1=7,TSEG2=2)BaudRate = CAN_BAUDRATE_BTR + 100h + 20h + 07h© 2012, 2014 Interface Corporation. All rights reserved.336


GPC-MA001 Help for Windows6.15.2 CAN_PORT_STATUS 構 造 体CanGetStatus 関 数 で 指 定 するステータス 取 得 用 構 造 体 です。●C 言 語typedef struct {ULONG ulBusStatus;ULONG ulTXBCount;ULONG ulRXBCount;ULONG ulERBCount;ULONG ulTXERRCount;ULONG ulRXERRCount;} CAN_PORT_STATUS, *PCAN_PORT_STATUS;●Visual C# .NET(x86、x64 共 用 )[StructLayout(LayoutKind.Sequential)]public struct CAN_PORT_STATUS{public uint BusStatus;public uint TXBCount;public uint RXBCount;public uint ERBCount;public uint TXERRCount;public uint RXERRCount;}●Visual Basic .NET(x86、x64 共 用 ) Structure CAN_PORT_STATUSDim BusStatus As IntegerDim TXBCount As IntegerDim RXBCount As IntegerDim ERBCount As IntegerDim TXERRCount As IntegerDim RXERRCount As IntegerEnd StructureメンバulBusStatus説 明CAN バスの 状 態 を 表 します。識 別 子 値 内 容CAN_BUS_OFF 00000004h バスオフ 状 態 です。CAN_BUS_PASSIVE 00000002h 送 信 か 受 信 のエラーカウンタが 127 を越 えました。エラーパッシブ 状 態 ですCAN_BUS_ACTIVE 00000001h バスは 正 常 に 動 作 しています。エラーアクティブ 状 態 です。© 2012, 2014 Interface Corporation. All rights reserved.337


GPC-MA001 Help for WindowsulTXBCountulRXBCountulERBCountulTXERRCountulRXERRCount送 信 バッファに 蓄 えられている 未 送 信 CAN メッセージの 数 を 返 します。送 信 完 了 メッセージはカウントされません。0 ~ 最 大 値 (※)受 信 バッファに 蓄 えられている CAN メッセージの 数 を 返 します。0 ~ 最 大 値 (※)エラーバッファに 蓄 えられているエラー 情 報 の 数 を 返 します。0 ~ 最 大 値 (※)送 信 エラーカウンタの 値 を 返 します。0 ~ 255受 信 エラーカウンタの 値 を 返 します。0 ~ 255※ 最 大 値 は CanSetConfig 関 数 で 設 定 した 値 です。© 2012, 2014 Interface Corporation. All rights reserved.338


GPC-MA001 Help for Windows6.15.3 CAN_MESSAGE 構 造 体CanSendMessage 関 数 、CanReceiveMessage 関 数 で 指 定 するメッセージ 用 構 造 体 です●C 言 語typedef struct {ULONG ulLength;ULONG ulFlag;ULONG ulID;BYTE bData[8];ULONG ulTime;} CAN_MESSAGE, *PCAN_MESSAGE;●Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct CAN_MESSAGEpublic uint Length;public uint Flag;public uint ID;[MarshalAs(UnmanagedType.ByValArray, SizeConst=8)]public byte[] Data;public uint Time;public void InitializeArray(){Data = new byte[8];}}●Visual Basic .NET Structure CAN_MESSAGEDim Length As IntegerDim Flag As IntegerDim ID As Integer _Dim Data() As ByteDim Time As IntegerPublic Sub InitializeArray()ReDim Data(7)End SubEnd Structure© 2012, 2014 Interface Corporation. All rights reserved.339


GPC-MA001 Help for WindowsメンバulLengthulFlagulID説 明送 信 メッセージの 長 さを 指 定 します。(バイト)または、 受 信 したメッセージの 長 さを 表 しています。ID、フラグを 含 まないデータ 本 体 の 長 さになります(0~8)送 信 するメッセージに 特 殊 なフラグを 設 定 します。または、 受 信 したメッセージのフラグを 表 します。識 別 子 値 内 容CAN_MSG_RTR 1 メッセージはリモートフレームです。送 信 メッセージに 付 加 する ID、または 受 信 したメッセージの ID を 表 します。11 ビットと 29 ビットの ID の 区 別 は 以 下 のフラグを OR することで 行 うことができます。( 指 定 しない 場 合 は 11 ビット ID として 上 位 を 無 視 して 下 位 11 ビットのみが IDとして 設 定 されます)識 別 子 値 内 容CAN_EXT_FRAME 80000000h ID は 29 ビット ID です。11 ビット ID では、ulID のビットパターンは 下 記 のようになります。bit31 bit30 … bit11 bit10 bit9 bit80 無 効 ID.28 ID.27 ID.26bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0ID.25 ID.24 ID.23 ID.22 ID.21 ID.20 ID.19 ID.1829 ビット ID では、ulID のビットパターンは 下 記 のようになります。bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit241 無 効 ID.28 ID.27 ID.26 ID.25 ID.24bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16ID.23 ID.22 ID.21 ID.20 ID.19 ID.18 ID.17 ID.16bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8ID.15 ID.14 ID.13 ID.12 ID.11 ID.10 ID.9 ID.8bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0ID.7 ID.6 ID.5 ID.4 ID.3 ID.2 ID.1 ID.0© 2012, 2014 Interface Corporation. All rights reserved.340


GPC-MA001 Help for WindowsbData[]ulTime送 信 メッセージを 格 納 します。または、 受 信 したメッセージの 本 体 を 表 します。メッセージの 先 頭 から bData[0], bData[1],,,,,bData[7]となっています。送 信 時 、ulLength に 設 定 した 値 よりも 長 いデータは 無 視 されます。例 えば ulLength に 3 を 設 定 した 場 合 、bData[0],bData[1],bData[2]はドライバに 渡 され 蓄 えられますが、bData[3] 以 降 のデータは 無 視 されます。同 様 に 受 信 時 も ulLength 以 上 のデータは 無 効 データです。例 えば ulLength に 2 が 返 ってきた 場 合 、bData[0],bData[1]は 受 信 したメッセージの 内 容 ですが、bData[2] 以 降 は 無 効 なデータです。 無 視 してください。メッセージ 受 信 、および 送 信 完 了 した 時 刻 が 格 納 されます。( 単 位 : μs)実 際 の 時 刻 ではなく、サンプリング 動 作 開 始 から、サンプリング 動 作 終 了 までの間 にカウントされる 値 が 取 得 できます。サンプリング 動 作 停 止 中 は、サンプリング 動 作 が 停 止 した 時 間 が 常 に 取 得 できます。エラーイベントにも 同 じ 時 刻 が 記 録 されますので、 受 信 メッセージ、エラー 発 生 、送 信 完 了 の 時 間 的 関 係 を 結 びつけることができます。単 位 はμs ですが、10 単 位 の 値 が 返 されます。また、 連 続 で CAN メッセージを 受 信 した 場 合 、2 つのメッセージの 受 信 時 刻 が 同じになることがあります。また、ディレイ 時 間 、 周 期 送 信 の 周 期 もこのメンバで 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.341


GPC-MA001 Help for Windows6.15.4 CAN_ERROR 構 造 体CanGetErrorEvent 関 数 で 使 用 する、エラーイベント 取 得 用 構 造 体 です。●C 言 語typedef struct {ULONGulInterruptRegister;ULONGulErrorCodeRegister;ULONGulArbitrationLostRegister;ULONGulTime;} CAN_ERROR, *PCAN_ERROR;●Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct CAN_ERROR{public uint InterruptRegister;public uint ErrorCodeRegister;public uint ArbitrationLostRegister;public uint Time;}●Visual Basic .NET Structure CAN_ERRORDim InterruptRegister As IntegerDim ErrorCodeRegister As IntegerDim ArbitrationLostRegister As IntegerDim Time As IntegerEnd StructureメンバulInterruptRegister説 明エラー 割 り 込 み 発 生 時 の 発 生 要 因 が 格 納 されています。複 数 の 要 因 が 同 時 に 成 立 している 場 合 もあります。CAN_DETECT_BUS_ERROR が 有 効 な 場 合 、ulErrorCodeRegister に 詳 細 なエラー 要 因が 格 納 されています。識 別 子 値 内 容CAN_DETECT_BUS_ERROR 00000080h CAN バス 上 のエラーを検 出 しました。 詳 細 はulErrorCodeRegisterでご 確 認 ください。© 2012, 2014 Interface Corporation. All rights reserved.342


GPC-MA001 Help for WindowsCAN_DETECT_ARBITRATION_LOST 00000040h CAN バス 上 でアービトレーションロストを検 出 しました。詳 細 はulArbitrationLostRegister でご 確 認 ください。CAN_IS_ERROR_PASSIVE 00000020h エラーパッシブ 状 態となりました。( 送 信か 受 信 のエラーカウンタが 127 を 越 えました)CAN_DETECT_OVERRUN 00000008h オーバーランエラーが 発 生 し、 受 信 メッセージが 失 われました。CAN_IS_ERROR_WARNING 00000004h 送 信 か 受 信 のエラーカウンタがCanSetConfig 関 数 で設 定 したリミット 値を 越 えました。© 2012, 2014 Interface Corporation. All rights reserved.343


GPC-MA001 Help for WindowsulErrorCodeRegisterCAN バス 上 のエラーが 発 生 した 場 合 の 詳 細 な 内 容 が 格 納 されています。UlInterruptRegister の CAN_DETECT_BUS_ERROR が 有 効 でない 場 合 は 0 が 返 されます。(CAN コントローラ SJA1000 の ECC レジスタに 相 当 します)bit31~8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0予 約 ERRC1 ERRC0 DIR SEG4 SEG3 SEG2 SEG1 SEG0各 ビットの 意 味ERRC1 ERRC0 エラーの 種 類0 0 ビットエラー0 1 フォームエラー1 0 ビットスタッフエラー1 1 その 他 の 種 類 のエラーDIRエラーの 発 生 した 方 向0 送 信 時 に 発 生 したエラー1 受 信 時 に 発 生 したエラーSEG4 SEG3 SEG2 SEG1 SEG0 エラーの 発 生 箇 所0 0 0 1 1 SOF(スタートオブフレーム)0 0 0 1 0 ID.28~ID.21 の 間0 0 1 1 0 ID.20~ID.18 の 間0 0 1 0 0 SRTR( 標 準 フォーマット 時 は RTR)0 0 1 0 1 IDE0 0 1 1 1 ID.17~ID.13 の 間0 1 1 1 1 ID.12~ID.5 の 間0 1 1 1 0 ID.4~ID.0 の 間0 1 1 0 0 RTR0 1 1 0 1 R1( 予 約 ビット)0 1 0 0 1 R0( 予 約 ビット)0 1 0 1 1 DLC(データ 長 コード)0 1 0 1 0 データフィールド0 1 0 0 0 CRC シーケンス1 1 0 0 0 CRC デリミタ1 1 0 0 1 ACK スロット1 1 0 1 1 ACK デリミタ1 1 0 1 0 EOF(エンドオブフレーム)1 0 0 1 0 インターミッション1 0 0 0 1 アクティブエラーフラグ1 0 1 1 0 パッシブエラーフラグ1 0 0 1 1 重 ね 合 わせエラーフラグ1 0 1 1 1 エラーデリミタ1 1 1 0 0 オーバーロードフラグ© 2012, 2014 Interface Corporation. All rights reserved.344


GPC-MA001 Help for WindowsulArbitrationLostRegisterCAN バス 上 で、 送 信 データの 衝 突 が 発 生 し、その 際 の 調 停 で 負 けた 場 合 、どのビットで 調 停 に 負 けたか(アービトレーション・ロスト)を 記 録 するレジスタです。ulInterruptRegister の CAN_DETECT_ARBITORATION_LOST が 有 効 でない 場 合 は 0が 返 されます。(CAN コントローラ SJA1000 の ALC レジスタに 相 当 します)bit31~5 bit4 bit3 bit2 bit1 bit0予 約 BITNO4 BITNO3 BITNO2 BITNO1 BITNO0各 ビットの 意 味 は 下 記 のようになります。BITNO4 BITNO3 BITNO2 BITNO1 BITNO0 アービトレーションロスト 位 置0 0 0 0 0 ID の 1 ビット 目0 0 0 0 1 ID の 2 ビット 目0 0 0 1 0 ID の 3 ビット 目0 0 0 1 1 ID の 4 ビット 目0 0 1 0 0 ID の 5 ビット 目0 0 1 0 1 ID の 6 ビット 目0 0 1 1 0 ID の 7 ビット 目0 0 1 1 1 ID の 8 ビット 目0 1 0 0 0 ID の 9 ビット 目0 1 0 0 1 ID の 10 ビット 目0 1 0 1 0 ID の 11 ビット 目0 1 0 1 1 SRTR ビット0 1 1 0 0 IDE ビット0 1 1 0 1 ID の 12 ビット 目0 1 1 1 0 ID の 13 ビット 目0 1 1 1 1 ID の 14 ビット 目1 0 0 0 0 ID の 15 ビット 目1 0 0 0 1 ID の 16 ビット 目1 0 0 1 0 ID の 17 ビット 目1 0 0 1 1 ID の 18 ビット 目1 0 1 0 0 ID の 19 ビット 目1 0 1 0 1 ID の 20 ビット 目1 0 1 1 0 ID の 21 ビット 目1 0 1 1 1 ID の 22 ビット 目1 1 0 0 0 ID の 23 ビット 目1 1 0 0 1 ID の 24 ビット 目1 1 0 1 0 ID の 25 ビット 目© 2012, 2014 Interface Corporation. All rights reserved.345


GPC-MA001 Help for WindowsulTime1 1 0 1 1 ID の 26 ビット 目1 1 1 0 0 ID の 27 ビット 目1 1 1 0 1 ID の 28 ビット 目1 1 1 1 0 ID の 29 ビット 目1 1 1 1 1 RTR ビットID の 1 ビット 目 は ID.28、2 ビット 目 は ID.27、…、となります。標 準 フォーマットの 場 合 、RTR ビット。拡 張 フォーマットの 場 合 のみ 有 効 。エラーが 発 生 した 時 刻 が 格 納 されます。( 単 位 : μs)実 際 の 時 刻 ではなく、サンプリング 動 作 開 始 から、サンプリング 動 作 終 了 までの間 にカウントされる 値 が 取 得 できます。サンプリング 動 作 停 止 中 は、サンプリング 動 作 が 停 止 した 時 間 が 常 に 取 得 できます。受 信 メッセージ、 送 信 完 了 メッセージにも 同 じ 時 刻 が 記 録 されますので、 受 信 メッセージ、エラー 発 生 、 送 信 完 了 の 時 間 的 関 係 を 結 びつけることができます。単 位 はμs ですが、10 単 位 の 値 が 返 されます。また、 連 続 で CAN メッセージを 受 信 した 場 合 、2 つのメッセージの 受 信 時 刻 が 同じになることがあります。© 2012, 2014 Interface Corporation. All rights reserved.346


GPC-MA001 Help for Windows6.15.5 CAN_EVENT_REQ 構 造 体割 り 込 みイベントを 設 定 する 構 造 体 です。イベント、コールバック 関 数 、ウィンドウメッセージの 設 定 等 に 使 用 します。●C 言 語typedef struct {HWNDWnd;HANDLEEvent;LPCANCALLBACK CallBackProc;UINTInterruptMsgPVOIDUserData;} CAN_EVENT_REQ, * PCAN_EVENT_REQ;●Visual C# .NET[StructLayout(LayoutKind.Sequential)]public struct CAN_EVENT_REQ{public IntPtr Wnd;public IntPtr InterruptEvent;public PCANCALLBACK CallBackProc;public uintInterruptMsg;public IntPtr User;}●Visual Basic .NET(x86、x64 共 用 ) Structure CAN_EVENT_REQDim Wnd As IntPtrDim InterruptEvent As IntPtrDim CallBackProc As PCANCALLBACKDim InterruptMsg As IntegerDim User As IntPtrEnd StructureメンバhWnd説 明メッセージ 送 出 ウィンドウハンドル。CanSetEventMask 関 数 にて 設 定 した 各 種 割 り 込 み 発 生 時 に 送 出 するメッセージのポスト 先 ウィンドウハンドルを 指 定 します。(メッセージ 送 出 時 に、メッセージハンドラの WPARAM には 割 り 込 み 要 因 が格 納 されます。LPARAM には、dwUser の 値 が 格 納 されます。メッセージポストを 行 わない 場 合 には、C 言 語 では NULL,Visual C# .NET、Visual Basic .NET では IntPtr.Zero を 指 定 してください。© 2012, 2014 Interface Corporation. All rights reserved.347


GPC-MA001 Help for WindowshInterruptEventlpCallBackProcイベント 発 生 時 にシグナル 状 態 となるイベントオブジェクトのハンドルを指 定 してください。イベントオブジェクトを 使 用 しない 場 合 には、C 言 語 では NULL、VisualC# .NET、Visual Basic .NET では 0 を 指 定 してください。割 り 込 み 発 生 時 に 呼 び 出 されるユーザ・コールバック 関 数 のポインタを 指 定してください。コールバック 関 数 を 使 用 しない 場 合 は、C 言 語 では NULL、Visual C# .NETでは null、Visual Basic .NET では Nothing を 指 定 してください。uInterruptMsgdwUser割 り 込 みメッセージ。割 り 込 み 発 生 時 に 送 出 するメッセージコードを 指 定 します。メッセージポストを 行 わない 場 合 には、C 言 語 では WM_NULL, Visual C# .NET、Visual Basic .NET では 0 を 指 定 してください。コールバック 関 数 、およびメッセージハンドラへ 引 き 渡 すユーザ・データを指 定 してください。© 2012, 2014 Interface Corporation. All rights reserved.348


GPC-MA001 Help for Windows6.16 戻 り 値 一 覧エラー 識 別 子 値 意 味 対 処 方 法IFMA_ERROR_SUCCESS 0 正 常 終 了 。IFMA_ERROR_NOT_DEVICE C0000001h ドライバが 呼 び 出 せません。IFMA_ERROR_NOT_OPEN C0000002h ドライバを OPEN できません。IFMA_ERROR_INVALID_HANDLE C0000003h デバイスハンドルが 正 しくありません。IFMA_ERROR_NOT_READY C0000004h 現 在 ドライバを 使 用 することができません。IFMA_ERROR_ACCESS_DENIED C0000005h 現 在 デバイスの 削 除 中 です。指 定 したデバイスが 見つかりませんでした。指 定 したデバイス 番 号が 存 在 するかどうかを確 認 してください。デバイスのオープン時 、 何 らかのエラーが発 生 しました。ドライバ 内 部 のメモリ確 保 に 失 敗 したなど。不 正 なデバイスハンドルで 呼 び 出 しを 行 おうとしました。OPEN 関 数 で 返 されたデバイスハンドルを 使 用してください。デバイスがちゃんと 接続 されていること、デバイスマネージャに 表示 されていることを 確認 し 実 行 してください。デバイスの 削 除 が 完 了後 、 再 度 デバイスを 組み 込 んでから 実 行 してください。IFMA_ERROR_INVALID_PARAMETER C0000006h パラメータが 不 正 です。 引 数 の 値 が 不 正 です。引 数 の 値 の 範 囲 が 指 定範 囲 外 です。IFMA_ERROR_INSUFFICIENT_BUFFER C0000007h システムコールに 渡 されたデータ 領 域 が 小 さすぎます。IFMA_ERROR_NULL_POINTER C0000008h DLL、ドライバ 間 で NULLポインタが 渡 されました。IFMA_ERROR_NOT_ALLOCATE_MEMORY C0000009h メモリを 確 保 できません。IFMA_ERROR_ALREADY_REGISTRATION C000000Ah イベントはすでに 登 録 済みです。IFMA_ERROR_ALREADY_DELETE C000000Bh イベントはすでに 削 除 されています。ドライバの 内 部 エラーです。どのような 状 況でエラーが 発 生 したかをご 連 絡 ください。システムに 障 害 が 発 生している 可 能 性 がございます。どのような 状況 でエラーが 発 生 したかをご 連 絡 ください。ドライバ 内 部 のバッファメモリの 確 保 に 失 敗しました。イベントは 1 つしか 登録 できません。© 2012, 2014 Interface Corporation. All rights reserved.349


GPC-MA001 Help for Windows● 共 通IFMA_ERROR_INVALID_MASK C0010001h 割 り 込 みマスク 設 定 が 不正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_SYNC_NUM C0010002h 同 期 トリガ 設 定 が 不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_SYNC_TRG C0010003h 同 期 トリガ 条 件 設 定 が 不正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_START_TRG C0010004h スタートトリガ 設 定 が 不正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_STOP_TRG C0010005h ストップトリガ 設 定 が 不正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_CHANNEL_NUM C0010006h チャンネル 数 が 不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_CHANNEL C0010007h チャンネルが 不 正 です。 正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_RANGE C0010008h レンジが 不 正 です。 正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_SAMPLE_NUM C001000Dh 件 数 が 不 正 です。 正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_REPEAT_NUM C001000Eh 繰 り 返 し 回 数 が 不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_EVENT_NUM C0010010h イベント 件 数 設 定 が 不 正です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_CONNECT C0010011h 制 御 信 号 設 定 が 不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_LOGIC C0010012h 論 理 設 定 が 不 正 です。 正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_WIDTH C0010013h パルス 幅 設 定 が 不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_EDGE C0010014h エッジ 極 性 が 不 正 です。 正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_FILTER C0010015h フィルタ 設 定 が 不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_NOW_SAMPLING C0010016h サンプリング( 連 続 出 力 )を 実 行 中 です。IFMA_ERROR_STOP_SAMPLING C0010017h サンプリング( 連 続 出 力 )は 停 止 中 です。IFMA_ERROR_START_SAMPLING C0010018h サンプリング( 連 続 出 力 )を 実 行 できませんでした。サンプリング( 連 続 出力 ) 実 行 中 に 再 度 サンプリングを 実 行 しようとしました。サンプリング 実 行 中 に実 行 できない 関 数 を 呼び 出 そうとしました。サンプリング( 連 続 出力 ) 停 止 中 に 実 行 できない 関 数 を 呼 び 出 そうとしました。© 2012, 2014 Interface Corporation. All rights reserved.350


GPC-MA001 Help for Windows●アナログ 入 力IFMA_ERROR_INVALID_SINGLEDIFF C0002000H 入 力 仕 様 が 不 正 です。 正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_MODE C0002001H サンプリングモードが 不正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_SAMPLERATE C0002002H サンプリングレートが 不正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_SCANRATE C0002003H スキャンレートが 不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_ATRG_MODE C0002004H アナログトリガモード 設定 が 不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_LEBEL1 C0002005H トリガレベル 1 の 設 定 が不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_LEVEL2 C0002006H トリガレベル 2 の 設 定 が不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_HYSTERESIS1 C0002007H ヒステリシス 1 の 設 定 が不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_HYSTERESIS2 C0002008H ヒステリシス 2 の 設 定 が不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_ATRG_OUT C0002009H アナログトリガ 出 力 設 定が 不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_ATRG_PULSE C000200AH アナログトリガパルス 極性 設 定 が 不 正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_BUFFER_MODE C000200BH バッファモード 設 定 が 不正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_PRE_NUM C000200CH プリサンプリング 件 数 設定 が 不 正 です。正 しい 設 定 値 を 指 定 してください。●アナログ 出 力IFMA_ERROR_INVALID_UPDATE_RATE C0003003H アップデートレートが 不正 です。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_SET_DATA C0003004H データ 設 定 に 失 敗 しました。© 2012, 2014 Interface Corporation. All rights reserved.351


GPC-MA001 Help for Windows●デジタル 入 力 /デジタル 出 力IFMA_ERROR_INVALID_POINT C0004000H 出 力 点 が 不 正 です。 正 しい 設 定 値 を 指 定 してください。●カウンタIFMA_ERROR_INVALID_PULSE_MODE C0005000H 不 正 なモードを 指 定 しました。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_DIRECT C0005001H 不 正 なカウンタ 方 向 を 指定 しました。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_CLEAR_MODE C0005002H 不 正 な 外 部 クリアモードを 指 定 しました。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_COMPARATOR C0005003H 不 正 なカウンタ 一 致 値 を指 定 しました。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_INVALID_UPDOWN C0005004H 不 正 なカウンタアップダウンタイミング 値 を 指 定しました。正 しい 設 定 値 を 指 定 してください。IFMA_ERROR_NOW_COUNTER C0005005H カウンタを 実 行 中 です。 カウンタ 実 行 中 に 再 度スタートを 実 行 しようとしました。カウンタ 実 行 中 に 実 行できない 関 数 を 呼 び 出そうとしました。IFMA_ERROR_STOP_ COUNTER C0005006H カウンタは 停 止 中 です。 カウンタ 停 止 中 に 実 行できない 関 数 を 呼 び 出そうとしました。© 2012, 2014 Interface Corporation. All rights reserved.352


GPC-MA001 Help for Windows6.17 戻 り 値 一 覧 (CAN)エラー 識 別 子 値 意 味 対 処 方 法IFCAN_ERROR_SUCCESS 0 正 常 終 了 -IFCAN_ERROR_NOT_READY C0000001h 現 在 ドライバを 使 用 することができません。デバイスがちゃんと接 続 されていること、デバイスマネージャに 表 示 されていることを 確 認 し 実 行 してください。IFCAN_ERROR_ACCESS_DENIED C0000002h 現 在 デバイスの 削 除 中 です。© 2012, 2014 Interface Corporation. All rights reserved.デバイスの 削 除 が 完了 後 、 再 度 デバイスを組 み 込 んでから 実 行してください。IFCAN_ERROR_INVALID_PARAMETER C0000003h パラメータが 不 正 です。 引 数 の 値 が 不 正 です。引 数 の 値 の 範 囲 が 指定 範 囲 外 です。IFCAN_ERROR_INSUFFICIENT_BUFFER C0000004h システムコールに 渡 されたデータ 領 域 が 小 さすぎます。IFCAN_ERROR_NOT_OPEN C0000005h ポートがオープンされる前 にクローズしようとしました。IFCAN_ERROR_MEMORY_NOTALLOCATED C0000006h メモリを 確 保 できません。IFCAN_ERROR_BUFFER_IS_FULL C0000007h バッファに 空 きがありません。ドライバの 内 部 エラーです。どのような 状況 でエラーが 発 生 したかをご 連 絡 ください。CanOpenPort 関 数 の 実行 中 は、 他 の 関 数 を 呼び 出 さないようにして 下 さい。ドライバ 内 部 のバッファメモリの 確 保 に失 敗 しました。送 信 バッファの 空 き容 量 以 上 のデータを送 信 しようとしました。送 信 バッファサイズと、 送 信 バッファ 内 にあるデータ 数 を 確 認して、 関 数 を 実 行 してください。IFCAN_ERROR_BUFFER_IS_EMPTY C0000008h バッファが 空 です。 受 信 バッファ、エラーバッファが 空 でないことを 確 認 して、 関 数を 実 行 してください。IFCAN_ERROR_CANNOT_ACCESSC0000009hバスが 有 効 時 にしか 実 行できない 関 数 をバスオフ時 に 実 行 しました。バスオフ 時 にしか 実 行 できない 関 数 をバスが 有 効なときに 実 行 しました。周 期 送 信 データのバッファ 転 送 中 です。バスの 状 態 を 確 認 後 、関 数 を 実 行 してください。再 度 、 周 期 送 信 データの 設 定 を 行 ってください。IFCAN_ERROR_INVALID_HANDLE C000000Ah デバイスハンドルが 正 し 不 正 なデバイスハン353


GPC-MA001 Help for Windowsくありません。IFCAN_ERROR_NOT_SUPPORTED C000000Bh サポートしていない 機 能です。ドルで 呼 び 出 しを 行おうとしました。CanOpenPort 関 数 で 返されたデバイスハンドルを 使 用 してください。サポートしていない機 能 を 呼 び 出 そうとしました。IFCAN_ERROR_NOW_SENDINGC000000Ch 現 在 、 周 期 送 信 中 です。 周 期 送 信 を 停 止 させてから 関 数 を 実 行 してください。現 在 、データ 送 信 中 です。 データが 送 信 完 了 してから 関 数 を 実 行 してください。IFCAN_ERROR_NULL_POINTER C000000Dh NULL ポインターです。 渡 したパラメータがNULL ポインタです。IFCAN_ERROR_LINE_MODE C0060002h 通 信 モードの 設 定 が 不 正です。IFCAN_ERROR_FILTER_MODE C0060003h フィルタモードの 設 定 が不 正 です。IFCAN_ERROR_TXB_SIZE C0060004h 送 信 バッファサイズの 設定 が 不 正 です。IFCAN_ERROR_RXB_SIZE C0060005h 受 信 バッファサイズの 設定 が 不 正 です。IFCAN_ERROR_ERB_SIZE C0060006h エラーバッファサイズの設 定 が 不 正 です。IFCAN_ERROR_ERROR_LIMIT C0060007h エラー 警 告 リミットサイズの 設 定 が 不 正 です。IFCAN_ERROR_BAUDRATE C0060008h ボーレートの 設 定 が 不 正です。IFCAN_ERROR_CLEAR_BUFFER C006000Ch バッファがクリアできませんでした。引 数 の 値 が 不 正 です。引 数 の 値 の 範 囲 が 指定 範 囲 外 です。引 数 の 値 が 不 正 です。引 数 の 値 の 範 囲 が 指定 範 囲 外 です。引 数 の 値 が 不 正 です。引 数 の 値 の 範 囲 が 指定 範 囲 外 です。引 数 の 値 が 不 正 です。引 数 の 値 の 範 囲 が 指定 範 囲 外 です。引 数 の 値 が 不 正 です。引 数 の 値 の 範 囲 が 指定 範 囲 外 です。引 数 の 値 が 不 正 です。引 数 の 値 の 範 囲 が 指定 範 囲 外 です。引 数 の 値 が 不 正 です。引 数 の 値 の 範 囲 が 指定 範 囲 外 です。引 数 の 値 が 不 正 です。引 数 の 値 の 範 囲 が 指定 範 囲 外 です。© 2012, 2014 Interface Corporation. All rights reserved.354


GPC-MA001 Help for Windows第 7 章 サンプルプログラムサンプルプログラムはコンソールアプリケーションで 提 供 しています。サンプルプログラム 名SamplingMaEventExTrgInExClockInExTrgOutAdInputAdEventDaOutputDaEventOutputDiInputDiEventDoOutputCntInputCntEventCanSendCanCyclicCanReceiveCanFilterCanError内 容サンプリングを 行 うサンプルプログラムです。イベント/コールバックを 使 用 してサンプリング 関 連 の 割 り 込 みの 検 出 を行 うサンプルプログラムです。外 部 トリガ 入 力 を 使 用 したサンプリングのサンプルプログラムです。外 部 クロック 入 力 を 使 用 したサンプリングのサンプルプログラムです。外 部 トリガ 出 力 を 使 用 したサンプルプログラムです。1 件 のアナログ 入 力 データを 取 得 するサンプルプログラムです。イベント/コールバックを 使 用 してアナログトリガ 検 出 を 行 うサンプルプログラムです。1 件 のアナログ 出 力 を 行 うサンプルプログラムです。アナログ 出 力 のイベント 検 出 を 行 うサンプルプログラムです。連 続 出 力 を 行 うサンプルプログラムです。デジタル 入 力 データを 取 得 するサンプルプログラムです。デジタルフィルタを 設 定 しDIのエッジイベントを 検 出 するサンプルプログラムです。デジタル 出 力 を 行 うサンプルプログラムです。カウンタのカウンタ 値 を 取 得 するプログラムです。カウンタのイベント 検 出 を 行 うサンプルプログラムです。送 信 を 行 うサンプルプログラムです。周 期 送 信 を 行 うサンプルプログラムです。受 信 を 行 うサンプルプログラムです。フィルタを 適 用 し 受 信 を 行 うサンプルプログラムです。エラー 情 報 を 取 得 するサンプルプログラムです。© 2012, 2014 Interface Corporation. All rights reserved.355


GPC-MA001 Help for Windows以 下 、 各 サンプルプログラムの 概 要 を 説 明 します。7.1 Sampling【 概 要 】サンプリングを 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「Sampling.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「Sampling.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「Sampling.sln」を 開 き、ビルドしてください。作 成 後 、「Sampling」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、 下 記 条 件 でサンプリングを 行 います。サンプリングモード一 定 周 期 サンプリングスタートトリガ 同 期 トリガ 0ソフトウェアライトタイミング 0ストップトリガ 同 期 トリガ 1バスマスタ 転 送 件 数 一 致 タイミングサンプリング 件 数 1024プリサンプリング 件 数 0繰 り 返 し 回 数 1サンプリングクロック 同 期 ライン 2汎 用 タイマ 0 周 期 :9(90μs)© 2012, 2014 Interface Corporation. All rights reserved.356


GPC-MA001 Help for Windows7.2 MaEvent【 概 要 】イベント/コールバックを 使 用 してサンプリング 関 連 の 割 り 込 みの 検 出 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「MaEvent.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「MaEvent.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「MaEvent.sln」を 開 き、ビルドしてください。作 成 後 、「MaEvent」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、 下 記 条 件 でサンプリングを 行 いサンプリング 終 了 割 り 込 みを 取 得 します。サンプリングモード一 定 周 期 サンプリングスタートトリガ 同 期 トリガ 0ソフトウェアライトタイミング 0ストップトリガ 同 期 トリガ 1バスマスタ 転 送 件 数 一 致 タイミングサンプリング 件 数 1024プリサンプリング 件 数 0繰 り 返 し 回 数 1サンプリングクロック 同 期 ライン 2汎 用 タイマ 0 周 期 :9(90μs)© 2012, 2014 Interface Corporation. All rights reserved.357


GPC-MA001 Help for Windows7.3 ExTrgIn【 概 要 】外 部 トリガ 入 力 を 使 用 したサンプリングのサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「ExTrgIn.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「ExTrgIn.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「ExTrgIn.sln」を 開 き、ビルドしてください。作 成 後 、「ExTrgIn」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、 下 記 条 件 でサンプリングを 行 います。サンプリングモード一 定 周 期 サンプリングスタートトリガ 同 期 トリガ 0外 部 トリガストップトリガ 同 期 トリガ 1外 部 トリガサンプリング 件 数 1024プリサンプリング 件 数 0繰 り 返 し 回 数 1サンプリングクロック 同 期 ライン 2汎 用 タイマ 0 周 期 :9(90μs)© 2012, 2014 Interface Corporation. All rights reserved.358


GPC-MA001 Help for Windows7.4 ExClockIn【 概 要 】外 部 クロック 入 力 を 使 用 したサンプリングのサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「ExClockIn.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「ExClockIn.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「ExClockIn.sln」を 開 き、ビルドしてください。作 成 後 、「ExClockIn」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、 下 記 条 件 でサンプリングを 行 います。サンプリングモード一 定 周 期 サンプリングスタートトリガ 同 期 トリガ 0外 部 トリガストップトリガ 同 期 トリガ 1外 部 トリガサンプリング 件 数 1024プリサンプリング 件 数 0繰 り 返 し 回 数 1サンプリングクロック 同 期 ライン 2汎 用 タイマ 0 周 期 :9(90μs)© 2012, 2014 Interface Corporation. All rights reserved.359


GPC-MA001 Help for Windows7.5 ExTrgOut【 概 要 】外 部 トリガ 出 力 を 使 用 したサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「ExTrgOut.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「ExTrgOut.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「ExTrgOut.sln」を 開 き、ビルドしてください。作 成 後 、「ExTrgOut」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、 下 記 条 件 でサンプリングを 行 います。サンプリングモード一 定 周 期 サンプリングスタートトリガ 同 期 トリガ 0外 部 トリガストップトリガ 同 期 トリガ 1外 部 トリガサンプリング 件 数 1024プリサンプリング 件 数 0繰 り 返 し 回 数 1サンプリングクロック 同 期 ライン 2汎 用 タイマ 0 周 期 :9(90μs)© 2012, 2014 Interface Corporation. All rights reserved.360


GPC-MA001 Help for Windows7.6 AdInput【 概 要 】1 件 のアナログ 入 力 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「AdInput.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「AdInput.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「AdInput.sln」を 開 き、ビルドしてください。作 成 後 、「AdInput」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、チャンネル 1,2,3,4 の AD 変 換 値 を 取 得 し 表示 させます。© 2012, 2014 Interface Corporation. All rights reserved.361


GPC-MA001 Help for Windows7.7 AdEvent【 概 要 】イベント/コールバックを 使 用 してアナログトリガ 検 出 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「AdEvent.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「AdEvent.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「AdEvent.sln」を 開 き、ビルドしてください。作 成 後 、「AdEvent」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、チャンネル 1 のアナログトリガ 0 検 出 のイベントが 発 生 させます。© 2012, 2014 Interface Corporation. All rights reserved.362


GPC-MA001 Help for Windows7.8 DaOutput【 概 要 】1 件 のアナログ 出 力 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「DaOutput.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「DaOutput.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「DaOutput.sln」を 開 き、ビルドしてください。作 成 後 、「DaOutput」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、チャンネル 1 から 0xFFFF のデータを 取 得 させます。© 2012, 2014 Interface Corporation. All rights reserved.363


GPC-MA001 Help for Windows7.9 Output【 概 要 】連 続 出 力 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「Output.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「Output.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「Output.sln」を 開 き、ビルドしてください。作 成 後 、「Output」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、チャンネル 1 から 1024 件 の 連 続 出 力 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.364


GPC-MA001 Help for Windows7.10 DaEvent【 概 要 】アナログ 出 力 のイベント 検 出 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「DaEvent.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「DaEvent.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「DaEvent.sln」を 開 き、ビルドしてください。作 成 後 、「DaEvent」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、チャンネル 1 から 1024 件 の 連 続 出 力 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.365


GPC-MA001 Help for Windows7.11 DiInput【 概 要 】デジタル 入 力 データを 取 得 するサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「DiInput.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「DiInput.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「DiInput.sln」を 開 き、ビルドしてください。作 成 後 、「DiInput」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、 汎 用 入 力 端 子 状 態 を 取 得 し、 取 得 した 情 報を 表 示 します。© 2012, 2014 Interface Corporation. All rights reserved.366


GPC-MA001 Help for Windows7.12 DiEvent【 概 要 】デジタルフィルタを 設 定 し DI のエッジイベントを 検 出 するサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「DiEvent.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「DiEvent.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「DiEvent.sln」を 開 き、ビルドしてください。作 成 後 、「DiEvent」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、IN1 の 立 ち 上 がりエッジでイベントが 発 生 させます。© 2012, 2014 Interface Corporation. All rights reserved.367


GPC-MA001 Help for Windows7.13 DoOutput【 概 要 】デジタル 出 力 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「DoOutput.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「DoOutput.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「DoOutput.sln」を 開 き、ビルドしてください。作 成 後 、「DoOutput」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、 指 定 した 汎 用 出 力 を 行 います。© 2012, 2014 Interface Corporation. All rights reserved.368


GPC-MA001 Help for Windows7.14 CntInput【 概 要 】カウンタのカウンタ 値 を 取 得 するプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「CntInput.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CntInput.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CntInput.sln」を 開 き、ビルドしてください。作 成 後 、「CntInput」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、キーが 入 力 されるまでカウンタ 値 を 表 示 させます。© 2012, 2014 Interface Corporation. All rights reserved.369


GPC-MA001 Help for Windows7.15 CntEvent【 概 要 】カウンタのイベント 検 出 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「CntEvent.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CntEvent.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CntEvent.sln」を 開 き、ビルドしてください。作 成 後 、「CntEvent」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NETコンソールアプリケーションです。デバイス 名 「IFMA1」のデバイスをオープン 後 、カウンタ 一 致 検 出 のイベントを 発 生 させます。© 2012, 2014 Interface Corporation. All rights reserved.370


GPC-MA001 Help for Windows7.16 CanSend【 概 要 】送 信 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「CanSend.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CanSend.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CanSend.sln」を 開 き、ビルドしてください。作 成 後 、「CanSend」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NET通 信 速 度 等 の 設 定 はデフォルト 値 を 使 用 しています。データ 長 1、ID30h、データ 55h のデータフレームを 1 メッセージを 送 信 します。© 2012, 2014 Interface Corporation. All rights reserved.371


GPC-MA001 Help for Windows7.17 CanCyclic【 概 要 】周 期 送 信 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「CanCyclic.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CanCyclic.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CanCyclic.sln」を 開 き、ビルドしてください。作 成 後 、「CanCyclic」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NET通 信 速 度 等 の 設 定 はデフォルト 値 を 使 用 しています。データ 長 1、ID30h、データ 55h のデータフレームを 1000ms 周 期 で 10 秒 間 周 期 送 信 します。© 2012, 2014 Interface Corporation. All rights reserved.372


GPC-MA001 Help for Windows7.18 CanReceive【 概 要 】受 信 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「CanReceive.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CanReceive.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CanReceive.sln」を 開 き、ビルドしてください。作 成 後 、「CanReceive」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NET通 信 速 度 等 の 設 定 はデフォルト 値 を 使 用 しています。 受 信 するまで 処 理 は 戻 りません。© 2012, 2014 Interface Corporation. All rights reserved.373


GPC-MA001 Help for Windows7.19 CanFilter【 概 要 】フィルタを 適 用 し 受 信 を 行 うサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「CanFilter.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CanFilter.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CanFilter.sln」を 開 き、ビルドしてください。作 成 後 、「CanFilter」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NET通 信 速 度 等 の 設 定 はデフォルト 値 を 使 用 しています。 標 準 フォーマットの ID13h のメッセージのみ 受 信 するようにフィルタを 設 定 します。 受 信 するまで 処 理 は 戻 りません。© 2012, 2014 Interface Corporation. All rights reserved.374


GPC-MA001 Help for Windows7.20 CanError【 概 要 】エラー 情 報 を 取 得 するサンプルプログラムです。【 実 行 手 順 】サンプルプログラムには 実 行 形 式 のファイルが 付 属 していません。ソースコードをコンパイルして 実 行 ファイルを 生 成 してから、 動 作 させてください。● Visual C++の 場 合Visual C++(Visual Studio)を 起 動 し、「ファイル」メニューから「 開 く」→「プロジェクト」を 選 び、プロジェクトファイル「CanError.vcproj」を 開 き、ビルドしてください。● Visual C#.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CanError.sln」を 開 き、ビルドしてください。● Visual Basic.NET の 場 合Visual Studio .NET を 起 動 し、ソリューションファイル「CanError.sln」を 開 き、ビルドしてください。作 成 後 、「CanError」を 起 動 してください。【 内 容 】● Visual C++ / Visual C#.NET / Visual Basic.NET通 信 速 度 等 の 設 定 はデフォルト 値 を 使 用 しています。エラーが 発 生 するまで 処 理 は 戻 りません。© 2012, 2014 Interface Corporation. All rights reserved.375


GPC-MA001 Help for Windows第 8 章 ユーティリティ以 下 、 各 ユーティリティの 概 要 を 説 明 します。8.1 自 己 診 断 プログラム※64bitOS では 使 用 することが 出 来 ません。カテゴリ内 容アナログ 入 力1 件 入 力 データを 表 示 します。アナログ 出 力1 件 出 力 で 指 定 した 電 圧 を 出 力 させる。デジタル 入 力 ※1 デジタル 入 力 値 を 表 示 します。デジタル 出 力 ※1 指 定 したデジタル 出 力 データを 出 力 させる。カウンタ ※1カウント 値 を 表 示 させる。※1 マザコン 高 機 能 アナログ 入 出 力 モデル/エコ 3 アナログ 入 出 力 モデルのみ 使 用 できます。【 起 動 方 法 】付 属 ソフトウェアのインストール 完 了 後 、「スタート」メニューより「プログラム」-「InterfaceGPC-MA001」-「 自 己 診 断 プログラム」を 起 動 します。設 定 項 目Cycle内 容データの 更 新 周 期 を ms 単 位 で 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.376


GPC-MA001 Help for Windows8.1.1 アナログ 入 力設 定 項 目AD1AD2AD3AD4内 容チャンネル 1 のデータをバイナリで 表 示 します。チャンネル 2 のデータをバイナリで 表 示 します。チャンネル 3 のデータをバイナリで 表 示 します。チャンネル 4 のデータをバイナリで 表 示 します。設 定 項 目InputModeRange内 容入 力 仕 様 を 指 定 します。レンジを 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.377


GPC-MA001 Help for Windows8.1.2 アナログ 出 力指 定 されたバイナリ 値 のアナログ 出 力 を 行 います。設 定 項 目Output Data内 容出 力 する 電 圧 のバイナリ 値 を 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.378


GPC-MA001 Help for Windows8.1.3 デジタル 入 出 力【デジタル 入 出 力 】デジタル 入 力 の 状 態 を 表 示 します。デジタル 出 力 の 状 態 を 制 御 します。設 定 項 目DIDO内 容各 デジタル 入 力 状 態 を 表 示 します。各 デジタル 出 力 状 態 を 指 定 します。© 2012, 2014 Interface Corporation. All rights reserved.379


GPC-MA001 Help for Windows8.1.4 カウンタ 入 力指 定 されたカウンタモードでカウンタ 値 を 取 得 します。カウンタをリセットします。設 定 項 目Pulse Count ModeDirectionZ LogicClear ModeFilterCounterStatus内 容カウンタ 動 作 モードを 指 定 します。カウンタ 方 向 を 指 定 します。Z 相 の 極 性 を 指 定 します。外 部 クリア 条 件 を 指 定 します。デジタルフィルタの 値 を 指 定 します。※デジタルフィルタの 値 の 設 定 値 については、CntSetCountMode 関 数 を 参 照 してください。取 得 したカウンタ 値 を 取 得 します。カウンタのステータス 状 態 を 取 得 します。© 2012, 2014 Interface Corporation. All rights reserved.380


GPC-MA001 Help for Windows8.2 アナログ 入 出 力 補 正 プログラムアナログ 入 力 /アナログ 出 力 の 補 正 (オートキャリブレーション)を 行 います。補 正 した 補 正 値 については、ユーザ 設 定 領 域 に 保 存 されます。【 起 動 方 法 】付 属 ソフトウェアのインストール 完 了 後 、「スタート」メニューより「プログラム」-「InterfaceGPC-MA001」-「アナログ 入 出 力 補 正 プログラム」を 起 動 します。※キャリブレーション 中 は 本 体 へのケーブル 接 続 を 取 り 外 す 必 要 があります。【 実 行 結 果 】本 アプリケーションを 実 行 すると 下 記 のように 出 力 されます。「Calibration OK」という 出 力 が 表 示 されればそのチャンネル/レンジのキャリブレーションは 正常 に 行 えています。AD +/-10V DC: CH:1 CalibrationOffsetTap:803075[h] GainTap:851dbe[h]Calibration OKAD +/-10V DC: CH:2 CalibrationOffsetTap:7f8e77[h] GainTap:4180547[h]Calibration OKAD +/-10V DC: CH:3 CalibrationOffsetTap:802514[h] GainTap:854320[h]Calibration OKAD +/-10V DC: CH:4 CalibrationOffsetTap:8024f1[h] GainTap:853156[h]Calibration OKDA +/-10V : CH:1 CalibrationOffsetTap:802e[h] GainTap:7ecb[h]Calibration OKAD +/-1V DC: CH:1 CalibrationOffsetTap:8004ac[h] GainTap:8532de[h]Calibration OKAD +/-1V DC: CH:2 CalibrationOffsetTap:7fe85d[h] GainTap:1809d7[h]Calibration OKAD +/-1V DC: CH:3 CalibrationOffsetTap:8003ad[h] GainTap:856913[h]Calibration OKAD +/-1V DC: CH:4 CalibrationOffsetTap:8003c5[h] GainTap:85480a[h]Calibration OKAD +/-10V AC: CH:1 CalibrationOffsetTap:80309e[h] GainTap:851dbe[h]Calibration OKAD +/-10V AC: CH:2 CalibrationOffsetTap:8020fa[h] GainTap:180547[h]Calibration OKAD +/-10V AC: CH:3 CalibrationOffsetTap:80260e[h] GainTap:854320[h]Calibration OK© 2012, 2014 Interface Corporation. All rights reserved.381


GPC-MA001 Help for WindowsAD +/-10V AC: CH:4 CalibrationOffsetTap:8025ad[h] GainTap:853156[h]Calibration OKAD +/-1V AC: CH:1 CalibrationOffsetTap:802d49[h] GainTap:8532de[h]Calibration OKAD +/-1V AC: CH:2 CalibrationOffsetTap:8017a2[h] GainTap:1809d7[h]Calibration OKAD +/-1V AC: CH:3 CalibrationOffsetTap:802aa3[h] GainTap:856913[h]Calibration OKAD +/-1V AC: CH:4 CalibrationOffsetTap:8027bb[h] GainTap:85480a[h]Calibration OKAD +/-100mV AC: CH:1 CalibrationOffsetTap:7fe8e9[h] GainTap:8527ec[h]Calibration OKAD +/-100mV AC: CH:2 CalibrationOffsetTap:7fb862[h] GainTap:85001b[h]Calibration OKAD +/-100mV AC: CH:3 CalibrationOffsetTap:805c28[h] GainTap:854100[h]Calibration OKAD +/-100mV AC: CH:4 CalibrationOffsetTap:8036d3[h] GainTap:854356[h]Calibration OK© 2012, 2014 Interface Corporation. All rights reserved.382


GPC-MA001 Help for Windows8.3 TEDS 情 報 取 得 ユーティリティ接 続 されている TEDS センサの 情 報 を 表 示 するユーティリティです。※TEDS センサとしては、テンプレート ID が 25 のセンサのみ 対 応 しています。【 起 動 方 法 】付 属 ソフトウェアのインストール 完 了 後 、「スタート」メニューより「プログラム」-「InterfaceGPC-MA001」-「TEDS 情 報 取 得 ユーティリティ」を 起 動 します。【 画 面 説 明 】基 本 TEDS 情 報 が 表示 されます。拡 張 TEDS 情 報 のバイナリ 値 が 表 示 されます。拡 張 TEDS 情 報 のバイナリ 値 から 解 析 した 各TEDS 情 報 が 表 示 されます。© 2012, 2014 Interface Corporation. All rights reserved.383


GPC-MA001 Help for Windows第 9 章 重 要 な 情 報保 証 の 内 容 と 制 限弊 社 は 本 ドキュメントに 含 まれるソースプログラムの 実 行 が 中 断 しないこと、またはその 実 行 に誤 りが 無 いことを 保 証 していません。本 製 品 の 品 質 や 使 用 に 起 因 する、 性 能 に 起 因 するいかなるリスクも 使 用 者 が 負 うものとします。弊 社 はドキュメント 内 の 情 報 の 正 確 さに 万 全 を 期 しています。 万 一 、 誤 記 または 誤 植 などがあった 場 合 、 弊 社 は 予 告 無 く 改 訂 する 場 合 があります。ドキュメントまたはドキュメント 内 の 情 報 に起 因 するいかなる 損 害 に 対 しても 弊 社 は 責 任 を 負 いません。ドキュメント 内 の 図 や 表 は 説 明 のためであり、ユーザ 個 別 の 応 用 事 例 により 変 化 する 場 合 があります。著 作 権 、 知 的 所 有 権弊 社 は 本 製 品 に 含 まれるおよび 本 製 品 に 対 する 権 利 や 知 的 所 有 権 を 保 持 しています。本 製 品 はコンピュータ ソフトウェア、 映 像 / 音 声 ( 例 えば 図 、 文 章 、 写 真 など)を 含 んでいます。医 療 機 器 / 器 具 への 適 用 における 注 意弊 社 の 製 品 は 人 命 に 関 わるような 状 況 下 で 使 用 される 機 器 に 用 いられる 事 を 目 的 として 設 計 、 製造 された 物 では 有 りません。弊 社 の 製 品 は 人 体 の 検 査 などに 使 用 するに 適 する 信 頼 性 を 確 保 する 事 を 意 図 された 部 品 や 検 査 機器 と 共 に 設 計 された 物 では 有 りません。医 療 機 器 、 治 療 器 具 などの 本 製 品 の 適 用 により、 製 品 の 故 障 、ユーザ、 設 計 者 の 過 失 などにより、損 傷 / 損 害 を 引 き 起 こす 場 合 が 有 ります。複 製 の 禁 止弊 社 の 許 可 なく、 本 ドキュメントの 全 て、または 一 部 に 関 わらず、 複 製 、 改 変 などを 行 うことはできません。責 任 の 制 限弊 社 は、 弊 社 または 再 販 売 者 の 予 見 の 有 無 にかかわらず 発 生 したいかなる 特 別 損 害 、 偶 発 的 損 害 、間 接 的 な 損 害 、 重 大 な 損 害 について、 責 任 を 負 いません。本 製 品 (ハードウェア,ソフトウェア)のシステム 組 み 込 み、 使 用 、ならびに 本 製 品 から 得 られる結 果 に 関 する 一 切 のリスクについては、 本 製 品 の 使 用 者 に 帰 属 するものとします。本 製 品 に 含 まれるバグ、あるいは 本 製 品 の 供 給 ( 納 期 遅 延 )、 性 能 もしくは 使 用 に 起 因 する 付 帯 的損 害 もしくは 間 接 的 損 害 に 対 して、 弊 社 に 全 面 的 に 責 がある 場 合 でも、 弊 社 はその 製 品 に 対 する改 良 ( 正 常 に 動 作 する)、 代 品 交 換 までとし、 金 銭 面 での 賠 償 の 責 任 は 負 わないものとしますので、予 めご 了 承 ください。本 製 品 (ソフトウェアを 含 む)は、 日 本 国 内 仕 様 です。 本 製 品 を 日 本 国 外 で 使 用 された 場 合 、 弊社 は 一 切 責 任 を 負 いかねます。また、 弊 社 は 本 製 品 に 関 し、 海 外 での 保 守 サービスおよび 技 術 サポート 等 は 行 っておりません。© 2012, 2014 Interface Corporation. All rights reserved.384


GPC-MA001 Help for Windows商 標 / 登 録 商 標本 書 に 掲 載 されている 会 社 名 、 製 品 名 は、それぞれ 各 社 の 商 標 または 登 録 商 標 です。© 2012, 2014 Interface Corporation. All rights reserved.385

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!