Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
DNET(PCI/C-PCI)
www.interface.co.jp
GPC-4871 DeviceNet インタフェース製品 Windows 対応ドライバソフトウェア
Help for Windows
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
1
目 次
第 1 章 はじめに 2
1.1 概要 ...........................................................................2
1.2 特長 ...........................................................................2
第 2 章 製品仕様 3
2.1 基本仕様 .......................................................................3
2.2 製品構成 .......................................................................4
第 3 章 導入方法 6
3.1 インストール手順 ...............................................................6
3.2 マスタモード時の実行手順 .......................................................6
3.3 スレーブモード時の実行手順 ....................................................18
3.4 モニタモード時の実行手順 ......................................................26
3.5 LEDの動作 .....................................................................32
第 4 章 リファレンス 33
4.1 関数一覧 ......................................................................33
4.2 関数個別説明 ..................................................................35
4.3 構造体説明 ...................................................................131
4.4 戻り値一覧 ...................................................................148
4.5 製品の版数、チェンジナンバーについて .........................................149
第 5 章 サンプルプログラム 150
5.1 DnetMon ......................................................................150
5.2 SaveConfig ...................................................................151
5.3 SendExplicit .................................................................152
5.4 SendIo .......................................................................153
5.5 CyclicSend ...................................................................154
5.6 ResponseIo ...................................................................155
5.7 ResponseIoAuto ...............................................................156
第 6 章 ユーティリティ 157
6.1 ネットワーク情報設定ユーティリティ ...........................................157
6.2 自己診断プログラム ...........................................................161
6.3 EDSファイル作成プログラム ....................................................163
第 7 章 重要な情報 164
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
2
第1章 はじめに
1.1 概要 GPC-4871 は、Windows 上のアプリケーションから、弊社 PCI 及び CompactPCI DeviceNet インタ
フェース製品を制御する為のソフトウェアです。
弊社 DeviceNet インタフェース製品を Windows 上のアプリケーションから DLL をダイナミックリ
ンクし、API をコールすることにより制御します。
本ドキュメントは、Windows 上で GPC-4871 を使用するための情報を掲載しています。
1.2 特長 ●DeviceNet プロトコルを意識する必要なし
用意された API を使用するだけで、DeviceNet マスタを構築できます。各スレーブとの通信を
行う API を用意しておりますので、お客様のプログラム中でプロトコルの処理を行う必要があ
りません。
マスタとしてもスレーブとしてもお使い頂けます。
●DeviceNet Release2.0(改訂 5)
DeviceNet 規格に対応した様々な機器と接続が可能です。
●すぐに使えるモニタ用ソフトを収録
DeviceNet バス上のメッセージをモニタするためのソフトをご用意しました。
各言語用のソースファイルも含まれていますので、機能追加を行ってお使い頂けます。
●通信メッセージへの簡単なアクセス
DeviceNet 上でやり取りされるメッセージに対して、2種類のアクセス方法を提供します。
繰り返し受信されるメッセージの最新のメッセージを取り出す“上書き型”のバッファ、受信
したメッセージ全てをバッファに蓄えていく“蓄積型”のバッファの 2 種類のアクセス方法で
す。
●ユーティリティを用いた簡単通信設定
通信情報設定ユーティリティを用いることにより、自局、他局の通信設定を簡単に設定するこ
とができます。また、ユーティリティを用いずに直接プログラム上で通信設定を行うことも可
能です。
●1メッセージあたりの最大取り扱いメッセージサイズが 512 バイト
1 メッセージあたりの送信サイズ、受信サイズが最大 512 バイトまで取り扱えます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
3
第2章 製品仕様
2.1 基本仕様 通信速度 125/250/500kbps
マスタモード ・Group 2 サーバーおよび Group 2 Only サーバーのス
レーブデバイスと接続可能。
・Group 2 Only クライアントとしてのメッセージ転送
機能をサポートしています。
スレーブモード Group 2 Only サーバーとして動作。
モニタモード ON:受信のみ。ACK を返さない。
OFF:通常通信。ACK を返す。
最大ノード数 64 台(自局含む)
最大送信メッセージサイズ/1 メッセージ 512 バイト
最大受信メッセージサイズ/1 メッセージ 512 バイト
同時使用枚数 16 枚
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
4
2.2 製品構成 製品構成 ファイル名 説明
弊社管理用ファイル GPC4871.VER 弊社ソフト管理用ファイル
最新情報ドキュメント README.HTM 最新ドキュメント掲載ファイル
インストールプログラム SETUP.EXE インストール用ファイル
ユーティリティプログラム DNETUTIL.EXE ネットワーク情報設定ユーティリティ
自己診断プログラム DIAGDNET.EXE 自己診断プログラム
EDS 作成プログラム CREATEEDS.EXE EDS 作成プログラム
サンプルプログラム
DnetMon Visual C# .NET 用サンプルプログラム
SaveConfig Visual C# .NET 用サンプルプログラム
SendExplicit Visual C# .NET 用サンプルプログラム
SendIo Visual C# .NET 用サンプルプログラム
CyclicSend Visual C# .NET 用サンプルプログラム
ResponseIo Visual C# .NET 用サンプルプログラム
Visual C# .NET
ResponseIoAuto Visual C# .NET 用サンプルプログラム
DnetMon Visual C++用(MFC)サンプルプログラム
SaveConfig C 用サンプルプログラム
SendExplicit C 用サンプルプログラム
SendIo C 用サンプルプログラム
CyclicSend C 用サンプルプログラム
ResponseIo C 用サンプルプログラム
Visual C++
ResponseIoAuto C 用サンプルプログラム
DnetMon Visual Basic .NET 用サンプルプログラム
SaveConfig Visual Basic .NET 用サンプルプログラム
SendExplicit Visual Basic .NET 用サンプルプログラム
SendIo Visual Basic .NET 用サンプルプログラム
CyclicSend Visual Basic .NET 用サンプルプログラム
ResponseIo Visual Basic .NET 用サンプルプログラム
Visual Basic .NET
ResponseIoAuto Visual Basic .NET 用サンプルプログラム
DnetMon Visual Basic 用サンプルプログラム
SaveConfig Visual Basic 用サンプルプログラム
SendExplicit Visual Basic 用サンプルプログラム
SendIo Visual Basic 用サンプルプログラム
CyclicSend Visual Basic 用サンプルプログラム
ResponseIo Visual Basic 用サンプルプログラム
Visual Basic
ResponseIoAuto Visual Basic 用サンプルプログラム
DnetMon Delphi 用サンプルプログラム
SaveConfig Delphi 用サンプルプログラム
Delphi
SendExplicit Delphi 用サンプルプログラム
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
5
製品構成 ファイル名 説明
SendIo Delphi 用サンプルプログラム
CyclicSend Delphi 用サンプルプログラム
ResponseIo Delphi 用サンプルプログラム
ResponseIoAuto Delphi 用サンプルプログラム
DLL IFDNET.DLL ダイナミックリンクライブラリファイル
AMTLAN.DLL ダイナミックリンクライブラリファイル
IFDNET.LIB インポートライブラリファイル
デバイスドライバ CP4871.SYS ドライバファイル
PCI4871.INF ドライバ インストールファイル
PCI4871.SLD Windows XP Embeddedn 用ドライバ SLD ファイル
IFDNET.H C/C++ 用ヘッダファイル ヘッダファイル
IFDNET.BAS Visual Basic 用ヘッダファイル
IFDNET.PAS Delphi 用ヘッダファイル
Help HELP.PDF Help(PDF 形式)
※Visual C# .NET,Visual Basic.NET 用サンプルプログラムは、それぞれ Viausl C# .NET 2003,
Visual Basic .NET 2003 を使用して作成しています。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
6
第3章 導入方法
3.1 インストール手順 README.HTM のインストール方法を参照してください。
3.2 マスタモード時の実行手順 製品を複数枚使用する場合は、インタフェースモジュール上のロータリスイッチ RSW1 の設定値が
同一型式同士で重複しないように設定してからスロットに実装し、システムを起動して下さい。
同一型式が複数存在する場合、制御対象を一意に識別するための番号となります。重複していた
場合、本ソフトウェアは正常に動作いたしません。
基本的な制御の手順は以下の通りです。
ポートのオープン
※自ポートの設定
※他ポートの設定
割り込みの設定
ネットワークに参加
I/O 通信の開始
通信処理
I/O 通信の停止
ネットワークから離脱
割り込みの解除
ポートのクローズ
※ネットワーク情報設定ユーティリティでも設定可能です。
EPR の設定
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
7
3.2.1 ポートのオープン
ポートのオープンは DnetOpenPort関数によって行います。
HANDLE deviceHandle;
// ポートをオープンします
deviceHandle = DnetOpenPort(“IFDNET1”);
DnetOpenPort関数には、オープンしたいポートの名前を指定します。ポート名は、システムに認
識された順番に割り振られていきます。下表のようにIFDNET1、IFDNET2、…、IFDNET16 となりま
す。
ポート名
IFDNET1
IFDNET2
IFDNET3
・・・
IFDNET16
ポート名はデバイスマネージャからも確認できます。
ポートをオープンすると、デバイス上の不揮発メモリに保存している自ポート通信設定、デバイ
スリストが自動的にロードされます。予めネットワーク情報設定ユーティリティで自ポート通信
設定、デバイスリストを設定することが出来ます。
ユーティリティを実行していない場合は、出荷時設定(3.2.2 節 参照)でオープンされます。
3.2.2 自ポートの設定
自ポートの設定は、オープン時に不揮発メモリからロードされます。予めネットワーク情報設定
ユーティリティにより自ポートの設定を不揮発メモリに保存することができます。また、
DnetSetConfig関数を実行することにより、プログラム上で自ポート設定を行うことも出来ます。
DnetSetConfig関数を使用する場合、自ポートの設定を間違わないために、一度 DnetGetConfig関
数で自ポート設定を取得してから、各パラメータを変更して DnetSetConfig関数を呼び出すとい
う方法を推奨致します。
ULONG ret;
DNET_PORT_CONFIG portConfig;
// 自ポート設定を取得します
ret = DnetGetConfig(deviceHandle, &portConfig);
// MAC ID とボーレートと I/O 通信設定を変更します
portConfig.MacID = 0; // 自ポートの MAC ID:0
portConfig.BaudRate = DNET_BAUDRATE_500K; // ボーレート:500kbps
portConfig.DeviceConfig.IOType = DNET_IO_POLL; // I/O メッセージの種類:Poll
portConfig.DeviceConfig.PollInterval = 100; // 周期送信時間:100ms
portConfig.DeviceConfig.PollTxSize = 16; // 自ポートからの送信サイズ:16byte
portConfig.DeviceConfig.PollRxSize = 16; // 自ポートでの受信サイズ:16byte
// 自ポートの設定を行います
ret = DnetSetConfig(deviceHandle, &portConfig);
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
8
自ポートの設定には DNET_PORT_CONFIG構造体を使用します。
DnetInitializeNetInfo関数を実行すると、ドライバ内の設定は出荷時設定に戻ります(不揮発メ
モリ上の設定値は DnetSaveNetInfo関数を実行するか、ネットワーク情報設定ユーティリティを
実行しない限り変更されません)。
出荷時設定は下表に示す値が使用されています。
メンバ(意味) 値(意味)
MacID (MAC ID) 63 (MAC ID = 63)
Mode (動作モード) DNET_MODE_MASTER (マスタモード)
BaudRate (ボーレート) DNET_BAUDRATE_125K (125kbps)
HeartBeatCycle (HeartBeat メッセージ周期) 0 (HeartBeat メッセージは使用しない)
AccumulateRxBufferSize(蓄積受信バッファサイズ) 0 (蓄積受信バッファ無効)
ErrorBufferSize (イベントバッファサイズ) 64 (64 件分)
OverWriteFlag (受信バッファの上書き) DNET_OVERWRITE_ENABLE (上書き許可)
DeviceConfig (I/O 通信設定) 全メンバ 0 (I/O 通信無効)
・MacIDメンバには、自ポートのMAC IDを指定します。0~63 までが指定可能ですが、
DnetSetDeviceList関数等により既に登録されている他ポートのMAC IDを設定しようとするとエ
ラーとなります。
・Mode メンバには、動作モードを指定します。ここでモニタモード(DNET_MODE_MONITOR)を指定
すると、ボーレート(BaudRate)、蓄積用受信バッファサイズ(AccumulateRxBufferSize)、イベン
トバッファサイズ(ErrorBufferSize)のメンバのみが有効となり、その他のメンバの設定値は無
効となります。モニタモードを指定すると、ネットワーク上の全メッセージを蓄積用受信バッフ
ァに格納するようになります。このように、ネットワーク上の各デバイスの通信設定は意味を持
たなくなるため、デバイスリスト自体が無効となります。
・ BaudRate メンバに は、ボー レートを 指定しま す。 125kbps(DNET_BAUDRATE_125K) 、
250kbps(DNET_BAUDRATE_250K)、500kbps(DNET_BAUDRATE_500K)のいずれかを指定できます。
・HeartBeatCycle メンバには、HeartBeat メッセージの送信周期を指定します。単位は s で、設
定可能範囲は 1~1000 です。
・AccumulateRxBufferSizeメンバには、蓄積型受信バッファサイズ(メッセージ数)を指定します。
このバッファサイズを 0 以外に指定すると、MAC ID 毎に用意しているデバイス上の受信バッフ
ァとは異なる、蓄積型受信バッファがドライバ内に用意されます。MAC ID に関わらず、自ポー
トが受信した I/O メッセージは全てこの蓄積型受信バッファに格納されるようになります(デバ
イス上の受信バッファにも格納されます)。
・OverWriteFlagメンバには、デバイス上の受信バッファの上書きの有無を指定します。デバイス
上の受信バッファには、Poll、Bit Strobe、COS/Cyclicの 3 種類のバッファがありますが、それ
ぞれのバッファで、メッセージを受信するごとに上書きするか、メッセージを受信後、
DnetGetInputIO関数でメッセージを取り出さない限り上書きされないようにするかを設定しま
す。DNET_OVERWRITE_DISABLEをセットすると、メッセージ受信後、DnetGetInputIO関数でメッセ
ージを取り出さない限り上書きされないようになります。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
9
・DeviceConfigメンバには、自ポートのI/O通信設定を行います。他ポートのI/O通信設定は
DnetSetDeviceList関数で行います。I/O通信設定構造体(DNET_DEVICE_CONFIG構造体)については
『4.3 構造体説明』をご参照ください。
各メンバは、DnetInitializeNetInfo関数を実行すると、出荷時設定で上書きされますのでご注意
ください。
また、ポート設定の取得(DnetGetConfig関数)は、ポートオープンしていればいつでも実行できま
すが、ポートの設定(DnetSetConfig関数)は、ネットワークに参加した状態(オンライン状態)では
使用できません。必ずポートオープン直後か、DnetPortOff関数でネットワークから離脱した状態
(オフライン状態)でご使用ください。
送受信サイズの設定について
自ポートで設定する送信サイズは、自ポートが送信できる最大サイズになりま
す。また、受信サイズは自ポートが受信できる最大サイズになります。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
10
3.2.3 他ポートの設定
自ポートがマスタモードの場合、ネットワーク上での自ポートでない他のポートは、デバイスリ
ストとしてドライバ内に保存されます(スレーブモード、モニタモードではデバイスリストは使用
しません)。
デバイスリストはポートオープン時にロードされ、予めネットワーク情報設定ユーティリティを
使用することで設定することもできます。プログラム内では、DnetSetDeviceList関数でデバイス
リスト内に他ポートの通信設定をセット、DnetGetDeviceList関数でデバイスリスト内から他ポー
ト通信情報を取得、DnetDeleteDeviceList関数でデバイスリスト内の他ポート通信情報を削除し
ます。
DNET_DEVICE_CONFIG deviceConfig;
// MAC ID = 1 のデバイスに対する設定(Poll と COS)を行います
deviceConfig.IOType = DNET_IO_POLL | DNET_IO_COS;
deviceConfig.PollTxSize = 16; // MAC ID 1 のデバイスが送信する Poll のサイズ
deviceConfig.PollRxSize = 16; // MAC ID 1 のデバイスが受信する Poll のサイズ
deviceConfig.CosTxSize = 8; // MAC ID 1 のデバイスが送信する COS のサイズ
deviceConfig.CosRxSize = 8; // MAC ID 1 のデバイスが受信する COS のサイズ
ret = DnetSetDeviceList(deviceHandle, 1, &deviceConfig);
// MAC ID = 15 のデバイスに対する設定(Bit Strobe)を行います
deviceConfig.IOType = DNET_IO_BITSTROBE;
deviceConfig.StrobeTxSize = 8; // MAC ID 15 のデバイスが送信する BitStrobe のサイズ
deviceConfig.StrobeRxSize = 8; // MAC ID 15 のデバイスが受信する BitStrobe のサイズ
ret = DnetSetDeviceList(deviceHandle, 15, &deviceConfig);
一度デバイスリストにセットした他ポート通信設定は更新することはできません。更新するには
一度削除してから、再度セットしなおしてください。また、デバイスリストは他ポートの通信設
定のリストですので、DnetSetDeviceList関数、DnetGetDeviceList関数に自ポートのMAC IDを指
定した場合はエラーとなります。DnetDeleteDeviceList関数で自ポートを指定すると全デバイス
のリストを削除します。
DnetInitializeNetInfo関数を呼ぶことにより、ドライバ内部のデバイスリストは出荷時設定(空
のデバイスリスト)に戻されます。既に登録していたデバイスリストは破棄されますが、保存され
ていたデバイスリストは破棄されません (不揮発メモリ上の設定値は DnetSaveNetInfo関数を実
行するか、ネットワーク情報設定ユーティリティでの保存を実行しない限り変更されません)。
送受信サイズの設定について
他ポートで設定する送信サイズは、他ポートが送信できるサイズになります。
また、受信サイズは他ポートが受信できるサイズになります。
設定を間違えると正しく送受信できません。他ポートとして使用するデバイス
の仕様をご確認ください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
11
3.2.4 割り込みの設定
割り込みを設定することにより、各事象が発生した際に
・イベントオブジェクトを使用した通知(イベント)
・ウィンドウ メッセージの送出(メッセージ)
・登録された関数の呼び出し(コールバック関数)
が行われます。
DnetSetEvent関数により、イベント/メッセージ/コールバック関数の登録を行います。
DnetSetEventMask関数で割り込みマスクの設定、DnetGetEventMask関数で割り込みマスク値の取
得を行います。
// コールバック関数
VOID CALLBACK EventProc(DWORD event, DWORD userData)
{
// 割り込み処理を記述します
・・・
}
・・・
// メインルーチン
DWORD eventMask;
DNET_EVENT_REQ eventReq;
// メッセージ受信時に割り込みが発生するようにマスクを設定します
eventMask = DNET_EVENT_RECV;
ret = DnetSetEventMask(deviceHandle, eventMask);
eventReq.Wnd = NULL;// メッセージは使用しません
eventReq.InterruptEvent = NULL; // イベントは使用しません
eventReq.CallBackProc = (DNETCALLBACK)EventProc;
eventReq.InterruptMsg = WM_NULL; // メッセージは使用しません
eventReq.UserData = 0x1234;
ret = DnetSetEvent(deviceHandle, &eventReq);
上記のコード例に示すように、イベント/メッセージ/コールバック関数の内、登録されたものの
みが発生するようになります。そのため、イベント/メッセージ/コールバック関数の全てを発生
させることも可能です。
オープン直後は、割り込みの設定はされておらず、全ての割り込みがマスクされています。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
12
3.2.5 ネットワークに参加
ネットワークに参加する場合は DnetPortOn関数を使用します。
// ネットワークに参加します
ret = DnetPortOn(deviceHandle);
ネットワーク参加中は、下記の関数は使用できません。
・ DnetSetConfig
・ DnetSetDeviceList
・ DnetDeleteDeviceList
・ DnetSaveNetInfo
・ DnetInitializeNetInfo
逆に、ネットワークに参加すると、下記の関数が使用できるようになります。
・ DnetConnect
・ DnetDisconnect
・ DnetSendIO、DnetSendIOEx
・ DnetGetInputIO、DnetGetInputIOEx
・ DnetGetAccmulatedMessage、DnetGetAccmulatedMessageEx
・ DnetSendExplicit、DnetSendExplicitEx
・ DnetReceiveExplicit、DnetReceiveExplicitEx
3.2.6 I/O 通信の開始
DnetConnect関数により、I/O通信を開始します。
// MAC ID = 1 のデバイスと I/O 通信を開始します
ret = DnetConnect(deviceHandle, 1);
自ポートがマスタモードの場合、通信を行いたいデバイスの MAC ID を指定します。通信を行いた
いデバイスは、予めデバイスリストに登録しておく必要があります。
ネットワーク電源の異常検出について
ネットワーク参加後にネットワーク電源が、DnetSetPowerLimit関数で指定
したネットワーク電源電圧の上限値を上回ったり、下限値を下回ったりした
場合、本製品は自動的にネットワークから離脱します。電源復旧後に
DnetPortOn関数を実行することにより、再度ネットワークに参加できます。
DnetSetPowerLimitMode関数を使用することにより、自動的にネットワーク
から離脱しないようにすることもできます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
13
3.2.7 EPR の設定
実際に I/O メッセージの送受信を行う前に、Explicit メッセージを利用してスレーブに対して
EPR(expected_packet_rate)と呼ばれるタイムアウト時間を設定する必要があります。この EPR を
設定しないと、スレーブは I/O メッセージの受信を開始しません。
Explicitメッセージの送信は DnetSendExplicit関数を使用します。
以下、MAC ID が 3 で I/O メッセージの Poll を使用するデバイスへの設定例です。
DNET_EXPLICIT dnetExplicit;
// Explicit メッセージでスレーブデバイスの EPR を設定します
dnetExplicit.MessageType = DNET_EXPLICIT_REQUEST;
dnetExplicit.MacID = 3;
dnetExplicit.ServiceCode = 0x10; // Set_Attribute_Single のリクエスト
dnetExplicit.ClassID = 5; // Connection オブジェクト
dnetExplicit.InstanceID = 2; // Poll I/O コネクション
dnetExplicit.Length = 3;
dnetExplicit.Data[0] = 9; // アトリビュート ID:9=expected_packet_rate
dnetExplicit.Data[1] = 0xE8; // タイムアウト時間
dnetExplicit.Data[2] = 0x03; // 1000(0x3e8)ms
ret = DnetSendExplicit(deviceHandle, & dnetExplicit);
接続しているデバイスにあわせて、MacID、InstanceID、タイムアウト時間を設定してください。
InstanceID に設定する値は次のようになります。
I/O メッセージの種類 InstanceID 値
Poll 2
BitStrobe 3
COS、Cyclic 4
タイムアウト時間が設定できた場合、スレーブから実際に設定できた値が返信されます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
14
3.2.8 通信処理
DnetSetOutputIO関数で、デバイス上の送信バッファへの送信メッセージのセットを行い送信を開
始します、DnetGetInputIO関数で、デバイス上の受信バッファから受信メッセージの取り出しを
行います。
デバイス上の送信バッファへセットされた送信メッセージは、DnetSetConfig関数により設定され
た、自ポートのI/O通信設定の各周期に従って送信されます。
DNET_PORT_CONFIG portConfig;
DNET_MESSAGE message;
// 自ポート設定
portConfig.DeviceConfig.IOType = DNET_IO_POLL;
portConfig.DeviceConfig.PollInterval = 10; // 10ms 周期
portConfig.DeviceConfig.PollTxSize = 16;
portConfig.DeviceConfig.PollRxSize = 16;
ret = DnetSetConfig(deviceHandle, &portConfig);
・・・
// I/O 通信の開始
ret = DnetConnect(deviceHandle, 1);
// EPR の設定
・・・
// 送信メッセージをセットします(10ms 周期で送信されます)
message.MessageType = DNET_IO_POLL;
message.Length = 4;
message.MacID = 1; // 送信の対象は MAC ID = 1 のデバイス
message.Data[0] = 0;
message.Data[1] = 0;
message.Data[2] = 0;
message.Data[3] = 0;
// 送信メッセージのセット
ret = DnetSetOutputIO(deviceHandle, &message);
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
15
周期に関係なくI/Oメッセージを送信したい場合は、DnetSendIO関数を使用します。この関数を使
用した場合は、即座に送信が行われます。
DNET_MESSAGE message;
// 即時送信を行います
message.MessageType = DNET_IO_BITSTROBE;
message.MacID = 7;
message.Length = 8;
message.Data[0] = 0xFE;
message.Data[1] = 0xFF;
message.Data[2] = 0xFF;
message.Data[3] = 0xFF;
message.Data[4] = 0xFF;
message.Data[5] = 0xFF;
message.Data[6] = 0xFF;
message.Data[7] = 0xFF;
ret = DnetSendIO(deviceHandle, &message);
Explicitメッセージを送信する場合、DnetSendExplicit関数を使用します。
DNET_EXPLICIT dnetExplicit;
// Explicit メッセージ(リクエストメッセージ)を送信します
dnetExplicit.MessageType = DNET_EXPLICIT_REQUEST;
dnetExplicit.MacID = 3;
dnetExplicit.ServiceCode = 0x0E; // Get_Attribute_Single のリクエスト
dnetExplicit.ClassID = 3;
dnetExplicit.InstanceID = 1;
dnetExplicit.Length = 1;
dnetExplicit.Data[0] = 1;
ret = DnetSendExplicit(deviceHandle, & dnetExplicit);
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
16
受信したI/Oメッセージの取得は、DnetGetInputIO関数、または DnetGetAccumulatedMessage関数
を使用します。
DnetGetInputIO関数は、通常デバイスの受信バッファから、指定したメッセージ(Poll、Bit Strobe、
COS/Cyclic)を取得します。
デフォルトではデバイス上の受信バッファは、新しいメッセージが受信されるごとに上書きされ
ますが、DnetSetConfig関数により、メッセージ受信してから、DnetGetInputIO関数によりメッセ
ージ取出しを行うまでの間、メッセージを上書きせずに破棄するように設定することもできます。
DNET_MESSAGE message;
// Poll メッセージを取り出し
message.MessageType = DNET_IO_POLL;
message.MacID = 2;
ret = DnetGetInputIO(deviceHandle, &message);
受信したExplicitメッセージの取得には、DnetReceiveExplicit関数を使用します。
I/O メッセージとは違い、必ず新しいメッセージが受信されるごとに上書きされます。
DNET_EXPLICIT dnetExplicit;
ret = DnetReceiveExplicit(deviceHandle, &dnetExplicit);
DnetSetConfig関数により、蓄積型受信バッファのサイズを 0 以外に設定すると、I/O受信メッセ
ージがデバイス上の受信バッファと共に、蓄積型受信バッファ内にも格納されるようになります。
蓄積型受信バッファには、MAC IDやI/Oメッセージの種類に関わらず、受信したメッセージ全てが
順番に格納されていきます。
その蓄積型受信バッファからメッセージを取り出す場合に、DnetGetAccumulatedMessage関数を使
用します。
DNET_MESSAGE message[10];
ULONG count;
// 蓄積メッセージを取り出し
count = 10;
ret = DnetGetAccumulatedMessage(deviceHandle, &message[0], &count);
DnetGetAccumulatedMessage関数の第 3引数には、関数実行前に取得したい受信メッセージ数を指
定します。関数が正常終了すると、実際に取得できたメッセージ数が格納されます。
3.2.9 I/O 通信の停止
I/O通信の停止には、DnetDisconnect関数を使用します。
// MAC ID = 1 のデバイスとの I/O 通信を停止します
ret = DnetDisconnect(deviceHandle, 1);
DnetConnect関数により設定したMAC IDを指定して、通信を停止させてください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
17
3.2.10 ネットワークからの離脱
DnetPortOff関数により、ネットワークからの離脱を行います。
// ネットワークから離脱します
ret = DnetPortOff(deviceHandle);
I/O 通信を行った場合には、必ずネットワークから離脱する前に、I/O 通信を停止してください。
ネットワークから離脱すると、下記の関数が使用できるようになります。
・ DnetSetConfig
・ DnetSetDeviceList
・ DnetDeleteDeviceList
・ DnetSaveNetInfo
・ DnetInitializeNetInfo
逆に、ネットワークから離脱すると、下記の関数が使用できなくなります。
・ DnetConnect
・ DnetDisconnect
・ DnetSendIO、DnetSendIOEx
・ DnetGetInputIO、DnetGetInputIOEx
・ DnetGetAccumulatedMessage、DnetGetAccumulatedMessageEx
・ DnetSendExplicit、DnetSendExplicitEx
・ DnetReceiveExplicit、DnetReceiveExplicitEx
3.2.11 割り込みの解除
DnetKillEvent関数により、登録されているイベント/メッセージ/コールバック関数を解除します。
DnetSetEventMask関数で全割り込みをマスクしてから、DnetKillEvent関数を呼び出してください。
// 全割り込みをマスクします
ret = DnetSetEventMask(deviceHandle, 0);
// 割り込みを解除します
det = DnetKillEvent(deviceHandle);
3.2.12 ポートのクローズ
DnetClosePort関数により、ポートのクローズ処理を行います。この関数を実行することにより、
他の関数は全て使用不可となります。
また DnetClosePort関数を呼ぶことにより、自ポート通信設定や、デバイスリスト等の情報も全
て初期状態に戻ります。
// ポートをクローズします
ret = DnetClosePort(deviceHandle);
ネットワークに参加していた場合には、ポートのクローズを行う前に必ず、ネットワークから離
脱してください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
18
3.3 スレーブモード時の実行手順 製品を複数枚使用する場合は、インタフェースモジュール上のロータリスイッチ RSW1 の設定値が
同一型式同士で重複しないように設定してからスロットに実装し、システムを起動して下さい。
同一型式が複数存在する場合、制御対象を一意に識別するための番号となります。重複していた
場合、本ソフトウェアは正常に動作いたしません。
基本的な制御の手順は以下の通りです。
ポートのオープン
※自ポートの設定
割り込みの設定
ネットワークに参加
通信処理
ネットワークから離脱
割り込みの解除
ポートのクローズ
※ネットワーク情報設定ユーティリティでも設定可能です。
3.3.1 ポートのオープン
ポートのオープンは DnetOpenPort関数によって行います。
HANDLE deviceHandle;
// ポートをオープンします
deviceHandle = DnetOpenPort(“IFDNET1”);
DnetOpenPort関数には、オープンしたいポートの名前を指定します。ポート名は、システムに認
識された順番に割り振られていきます。下表のようにIFDNET1、IFDNET2、…、IFDNET16 となりま
す。
ポート名
IFDNET1
IFDNET2
IFDNET3
・・・
IFDNET16
ポート名はデバイスマネージャからも確認できます。
ポートをオープンすると、デバイス上の不揮発メモリに保存している自ポート通信設定が自動的
にロードされます。予めネットワーク情報設定ユーティリティで自ポート通信設定を設定するこ
とが出来ます。
ユーティリティを実行していない場合は、出荷時設定(3.3.2 節 参照)でオープンされます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
19
3.3.2 自ポートの設定
自ポートの設定は、オープン時に不揮発メモリからロードされます。予めネットワーク情報設定
ユーティリティにより自ポートの設定を不揮発メモリに保存することができます。また、
DnetSetConfig関数を実行することにより、プログラム上で自ポート設定を行うことも出来ます。
DnetSetConfig関数を使用する場合、自ポートの設定を間違わないために、一度 DnetGetConfig関
数で自ポート設定を取得してから、各パラメータを変更して DnetSetConfig関数を呼び出すとい
う方法を推奨致します。
ULONG ret;
DNET_PORT_CONFIG portConfig;
// 自ポート設定を取得します
ret = DnetGetConfig(deviceHandle, &portConfig);
// MAC ID とボーレートと I/O 通信設定を変更します
portConfig.MacID = 1;
portConfig.Mode = DNET_MODE_SLAVE;
portConfig.BaudRate = DNET_BAUDRATE_500K;
portConfig.DeviceConfig.IOType = DNET_IO_POLL;
portConfig.DeviceConfig.PollTxSize = 16;
portConfig.DeviceConfig.PollRxSize = 16;
// 自ポートの設定を行います
ret = DnetSetConfig(deviceHandle, &portConfig);
自ポートの設定には DNET_PORT_CONFIG構造体を使用します。
DnetInitializeNetInfo関数を実行すると、ドライバ内の設定は出荷時設定に戻ります(不揮発メ
モリ上の設定値は DnetSaveNetInfo関数を実行するか、ネットワーク情報設定ユーティリティを
実行しない限り変更されません)。
出荷時設定は下表に示す値が使用されています。
メンバ(意味) 値(意味)
MacID (MAC ID) 63 (MAC ID = 63)
Mode (動作モード) DNET_MODE_MASTER (マスタモード)
BaudRate (ボーレート) DNET_BAUDRATE_125K (125kbps)
HeartBeatCycle (HeartBeat メッセージ周期) 0 (HeartBeat メッセージは使用しない)
AccumulateRxBufferSize(蓄積受信バッファサイズ) 0 (蓄積受信バッファ無効)
ErrorBufferSize (イベントバッファサイズ) 64 (64 件分)
OverWriteFlag (受信バッファの上書き) DNET_OVERWRITE_ENABLE (上書き許可)
DeviceConfig (I/O 通信設定) 全メンバ 0 (I/O 通信無効)
・MacIDメンバには、自ポートのMAC IDを指定します。0~63 までが指定可能ですが、
DnetSetDeviceList関数等により既に登録されている他ポートのMAC IDを設定しようとするとエ
ラーとなります。
・Mode メンバには、動作モードを指定します。スレーブモード(DNET_MODE_SLAVE)に設定します。
・ BaudRate メンバに は、ボー レートを 指定しま す。 125kbps(DNET_BAUDRATE_125K) 、
250kbps(DNET_BAUDRATE_250K)、500kbps(DNET_BAUDRATE_500K)のいずれかを指定できます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
20
・HeartBeatCycle メンバには、HeartBeat メッセージの送信周期を指定します。単位は s で、設
定可能範囲は 1~1000 です。
・AccumulateRxBufferSizeメンバには、蓄積型受信バッファサイズ(メッセージ数)を指定します。
このバッファサイズを 0 以外に指定すると、MAC ID 毎に用意しているデバイス上の受信バッフ
ァとは異なる、蓄積型受信バッファがドライバ内に用意されます。MAC ID に関わらず、自ポー
トが受信した I/O メッセージは全てこの蓄積型受信バッファに格納されるようになります(デバ
イス上の受信バッファにも格納されます)。
・OverWriteFlagメンバには、デバイス上の受信バッファの上書きの有無を指定します。デバイス
上の受信バッファには、Poll、Bit Strobe、COS/Cyclicの 3 種類のバッファがありますが、それ
ぞれのバッファで、メッセージを受信するごとに上書きするか、メッセージを受信後、
DnetGetInputIO関数でメッセージを取り出さない限り上書きされないようにするかを設定しま
す。DNET_OVERWRITE_DISABLEをセットすると、メッセージ受信後、DnetGetInputIO関数でメッセ
ージを取り出さない限り上書きされないようになります。
・DeviceConfigメンバには、自ポートのI/O通信設定を行います。I/O通信設定構造体
(DNET_DEVICE_CONFIG構造体)については『4.3 構造体説明』をご参照ください。
各メンバは、DnetInitializeNetInfo関数を実行すると、出荷時設定で上書きされますのでご注意
ください。
また、ポート設定の取得(DnetGetConfig関数)は、ポートオープンしていればいつでも実行できま
すが、ポートの設定(DnetSetConfig関数)は、ネットワークに参加した状態(オンライン状態)では
使用できません。必ずポートオープン直後か、DnetPortOff関数でネットワークから離脱した状態
(オフライン状態)でご使用ください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
21
3.3.3 割り込みの設定
割り込みを設定することにより、各事象が発生した際に
・イベントオブジェクトを使用した通知(イベント)
・ウィンドウ メッセージの送出(メッセージ)
・登録された関数の呼び出し(コールバック関数)
が行われます。
DnetSetEvent関数により、イベント/メッセージ/コールバック関数の登録を行います。
DnetSetEventMask関数で割り込みマスクの設定、DnetGetEventMask関数で割り込みマスク値の取
得を行います。
// コールバック関数
VOID CALLBACK EventProc(DWORD event, DWORD userData)
{
// 割り込み処理を記述します
・・・
}
・・・
// メインルーチン
DWORD eventMask;
DNET_EVENT_REQ eventReq;
// メッセージ受信時に割り込みが発生するようにマスクを設定します
eventMask = DNET_EVENT_RECV;
ret = DnetSetEventMask(deviceHandle, eventMask);
eventReq.Wnd = NULL;// メッセージは使用しません
eventReq.InterruptEvent = NULL; // イベントは使用しません
eventReq.CallBackProc = (DNETCALLBACK)EventProc;
eventReq.InterruptMsg = WM_NULL; // メッセージは使用しません
eventReq.UserData = 0x1234;
ret = DnetSetEvent(deviceHandle, &eventReq);
上記のコード例に示すように、イベント/メッセージ/コールバック関数の内、登録されたものの
みが発生するようになります。そのため、イベント/メッセージ/コールバック関数の全てを発生
させることも可能です。
オープン直後は、割り込みの設定はされておらず、全ての割り込みがマスクされています。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
22
3.3.4 ネットワークに参加
ネットワークに参加する場合は DnetPortOn関数を使用します。
// ネットワークに参加します
ret = DnetPortOn(deviceHandle);
ネットワーク参加中は、下記の関数は使用できません。
・ DnetSetConfig
・ DnetSaveNetInfo
・ DnetInitializeNetInfo
逆に、ネットワークに参加すると、下記の関数が使用できるようになります。
・ DnetSendIO、DnetSendIOEx
・ DnetGetInputIO、DnetGetInputIOEx
・ DnetGetAccmulatedMessage、DnetGetAccmulatedMessageEx
・ DnetSendExplicit、DnetSendExplicitEx
・ DnetReceiveExplicit、DnetReceiveExplicitEx
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
23
3.3.5 通信処理
スレーブモードで使用する場合には、予めマスタから EPR(expected_packet_rate)を設定しても
らう必要があります。EPR の設定が行われていないと、スレーブモードでの I/O メッセージの送
受信を行うことができません。
基本的にスレーブモードでは自発的にメッセージの送信をすることができません。必ずマスタか
ら送信されたメッセージへの返信としてメッセージを送信します。
DnetGetInputIO関数で、デバイス上の受信バッファから受信メッセージの取り出しを行います。
DnetSendIO関数で、I/Oメッセージを送信します。
受信したI/Oメッセージの取得は、DnetGetInputIO関数、または DnetGetAccumulatedMessage関数
を使用します。
DnetGetInputIO関数は、通常デバイスの受信バッファから、指定したメッセージ(Poll、Bit Strobe、
COS/Cyclic)を取得します。
デフォルトではデバイス上の受信バッファは、新しいメッセージが受信されるごとに上書きされ
ますが、DnetSetConfig関数により、メッセージ受信してから、DnetGetInputIO関数によりメッセ
ージ取出しを行うまでの間、メッセージを上書きせずに破棄するように設定することもできます。
DNET_MESSAGE message;
// Poll メッセージを取り出し
message.MessageType = DNET_IO_POLL;
message.MacID = 2;
ret = DnetGetInputIO(deviceHandle, &message);
DnetSendIO関数を使用すると即座に送信が行われます。
DNET_MESSAGE message;
// 即時送信を行います
message.MessageType = DNET_IO_POLL;
message.Length = 8;
message.Data[0] = 0xFE;
message.Data[1] = 0xFF;
message.Data[2] = 0xFF;
message.Data[3] = 0xFF;
message.Data[4] = 0xFF;
message.Data[5] = 0xFF;
message.Data[6] = 0xFF;
message.Data[7] = 0xFF;
ret = DnetSendIO(deviceHandle, &message);
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
24
受信したExplicitメッセージの取得には、DnetReceiveExplicit関数を使用します。
I/O メッセージとは違い、必ず新しいメッセージが受信されるごとに上書きされます。
DNET_EXPLICIT dnetExplicit;
ret = DnetReceiveExplicit(deviceHandle, &dnetExplicit);
Explicitメッセージを送信する場合、DnetSendExplicit関数を使用します。
スレーブから送信するメッセージはレスポンスメッセージになります。
DNET_EXPLICIT dnetExplicit;
// Explicit メッセージ(リクエストメッセージ)を送信します
dnetExplicit.MessageType = DNET_EXPLICIT_RESPONSE;
dnetExplicit.MacID = 3;
dnetExplicit.ServiceCode = 0x0E;
dnetExplicit.Length = 1;
dnetExplicit.Data[0] = 1;
ret = DnetSendExplicit(deviceHandle, &dnetExplicit);
DnetSetConfig関数により、蓄積型受信バッファのサイズを 0 以外に設定すると、I/O受信メッセ
ージがデバイス上の受信バッファと共に、蓄積型受信バッファ内にも格納されるようになります。
蓄積型受信バッファには、MAC IDやI/Oメッセージの種類に関わらず、受信したメッセージ全てが
順番に格納されていきます。
その蓄積型受信バッファからメッセージを取り出す場合に、DnetGetAccumulatedMessage関数を使
用します。
DNET_MESSAGE message[10];
ULONG count;
// 蓄積メッセージを取り出し
count = 10;
ret = DnetGetAccumulatedMessage(deviceHandle, &message[0], &count);
DnetGetAccumulatedMessage関数の第 3引数には、関数実行前に取得したい受信メッセージ数を指
定します。関数が正常終了すると、実際に取得できたメッセージ数が格納されます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
25
3.3.6 ネットワークからの離脱
DnetPortOff関数により、ネットワークからの離脱を行います。
// ネットワークから離脱します
ret = DnetPortOff(deviceHandle);
I/O 通信を行った場合には、必ずネットワークから離脱する前に、I/O 通信を停止してください。
ネットワークから離脱すると、下記の関数が使用できるようになります。
・ DnetSetConfig
・ DnetSaveNetInfo
・ DnetInitializeNetInfo
逆に、ネットワークから離脱すると、下記の関数が使用できなくなります。
・ DnetSendIO、DnetSendIOEx
・ DnetGetInputIO、DnetGetInputIOEx
・ DnetGetAccumulatedMessage、DnetGetAccumulatedMessageEx
・ DnetSendExplicit、DnetSendExplicitEx
・ DnetReceiveExplicit、DnetReceiveExplicitEx
3.3.7 割り込みの解除
DnetKillEvent関数により、登録されているイベント/メッセージ/コールバック関数を解除します。
DnetSetEventMask関数で全割り込みをマスクしてから、DnetKillEvent関数を呼び出してください。
// 全割り込みをマスクします
ret = DnetSetEventMask(deviceHandle, 0);
// 割り込みを解除します
det = DnetKillEvent(deviceHandle);
3.3.8 ポートのクローズ
DnetClosePort関数により、ポートのクローズ処理を行います。この関数を実行することにより、
他の関数は全て使用不可となります。
また DnetClosePort関数を呼ぶことにより、自ポート通信設定や、デバイスリスト等の情報も全
て初期状態に戻ります。
// ポートをクローズします
ret = DnetClosePort(deviceHandle);
ネットワークに参加していた場合には、ポートのクローズを行う前に必ず、ネットワークから離
脱してください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
26
3.4 モニタモード時の実行手順 製品を複数枚使用する場合は、インタフェースモジュール上のロータリスイッチ RSW1 の設定値が
同一型式同士で重複しないように設定してからスロットに実装し、システムを起動して下さい。
同一型式が複数存在する場合、制御対象を一意に識別するための番号となります。重複していた
場合、本ソフトウェアは正常に動作いたしません。
基本的な制御の手順は以下の通りです。
ポートのオープン
※自ポートの設定
割り込みの設定
ネットワークに参加
モニタ処理
ネットワークから離脱
割り込みの解除
ポートのクローズ
※ネットワーク情報設定ユーティリティでも設定可能です。
3.4.1 ポートのオープン
ポートのオープンは DnetOpenPort関数によって行います。
HANDLE deviceHandle;
// ポートをオープンします
deviceHandle = DnetOpenPort(“IFDNET1”);
DnetOpenPort関数には、オープンしたいポートの名前を指定します。ポート名は、システムに認
識された順番に割り振られていきます。下表のようにIFDNET1、IFDNET2、…、IFDNET16 となりま
す。
ポート名
IFDNET1
IFDNET2
IFDNET3
・・・
IFDNET16
ポート名はデバイスマネージャからも確認できます。
ポートをオープンすると、デバイス上の不揮発メモリに保存している自ポート通信設定が自動的
にロードされます。予めネットワーク情報設定ユーティリティで自ポート通信設定を設定するこ
とが出来ます。
ユーティリティを実行していない場合は、出荷時設定(3.4.2 節 参照)でオープンされます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
27
3.4.2 自ポートの設定
自ポートの設定は、オープン時に不揮発メモリからロードされます。予めネットワーク情報設定
ユーティリティにより自ポートの設定を不揮発メモリに保存することができます。また、
DnetSetConfig関数を実行することにより、プログラム上で自ポート設定を行うことも出来ます。
DnetSetConfig関数を使用する場合、自ポートの設定を間違わないために、一度 DnetGetConfig関
数で自ポート設定を取得してから、各パラメータを変更して DnetSetConfig関数を呼び出すとい
う方法を推奨致します。
ULONG ret;
DNET_PORT_CONFIG portConfig;
// 自ポート設定を取得します
ret = DnetGetConfig(deviceHandle, &portConfig);
// 動作モード、ボーレートと蓄積型受信バッファサイズを変更します
portConfig.Mode = DNET_MODE_MONITOR;
portConfig.BaudRate = DNET_BAUDRATE_500K;
portConfig.DeviceConfig.AccumulateRxBufferSize= 64;
// 自ポートの設定を行います
ret = DnetSetConfig(deviceHandle, &portConfig);
自ポートの設定には DNET_PORT_CONFIG構造体を使用します。
DnetInitializeNetInfo関数を実行すると、ドライバ内の設定は出荷時設定に戻ります(不揮発メ
モリ上の設定値は DnetSaveNetInfo関数を実行するか、ネットワーク情報設定ユーティリティを
実行しない限り変更されません)。
出荷時設定は下表に示す値が使用されています。
メンバ(意味) 値(意味)
MacID (MAC ID) 63 (MAC ID = 63)
Mode (動作モード) DNET_MODE_MASTER (マスタモード)
BaudRate (ボーレート) DNET_BAUDRATE_125K (125kbps)
HeartBeatCycle (HeartBeat メッセージ周期) 0 (HeartBeat メッセージは使用しない)
AccumulateRxBufferSize(蓄積受信バッファサイズ) 0 (蓄積受信バッファ無効)
ErrorBufferSize (イベントバッファサイズ) 64 (64 件分)
OverWriteFlag (受信バッファの上書き) DNET_OVERWRITE_ENABLE (上書き許可)
DeviceConfig (I/O 通信設定) 全メンバ 0 (I/O 通信無効)
・Mode メンバには、動作モードを指定します。モニタモード(DNET_MODE_MONITOR)を指定します。
モ ニ タ モ ー ド で は 、 ボ ー レ ー ト (BaudRate) 、 蓄 積 用 受 信 バ ッ フ ァ サ イ ズ
(AccumulateRxBufferSize)、イベントバッファサイズ(ErrorBufferSize)のメンバのみが有効と
なり、その他のメンバの設定値は無効となります。モニタモードを指定すると、ネットワーク上
の全メッセージを蓄積用受信バッファに格納するようになります。このように、ネットワーク上
の各デバイスの通信設定は意味を持たなくなるため、デバイスリスト自体が無効となります。
・ BaudRate メンバに は、ボー レートを 指定しま す。 125kbps(DNET_BAUDRATE_125K) 、
250kbps(DNET_BAUDRATE_250K)、500kbps(DNET_BAUDRATE_500K)のいずれかを指定できます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
28
・AccumulateRxBufferSizeメンバには、蓄積型受信バッファサイズ(メッセージ数)を指定します。
このバッファサイズを 0 以外に指定すると、蓄積型受信バッファがドライバ内に用意されます。
MAC ID に関わらず、自ポートが受信したメッセージは全てこの蓄積型受信バッファに格納され
るようになります。
モニタモードでは、メッセージは蓄積型受信バッファにしか格納されません。そのため、必ず
AccumulateRxBufferSize には 0以外の値を指定してください。
各メンバは、DnetInitializeNetInfo関数を実行すると、出荷時設定で上書きされますのでご注意
ください。
また、ポート設定の取得(DnetGetConfig関数)は、ポートオープンしていればいつでも実行できま
すが、ポートの設定(DnetSetConfig関数)は、ネットワークに参加した状態(オンライン状態)では
使用できません。必ずポートオープン直後か、DnetPortOff関数でネットワークから離脱した状態
(オフライン状態)でご使用ください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
29
3.4.3 割り込みの設定
割り込みを設定することにより、各事象が発生した際に
・イベントオブジェクトを使用した通知(イベント)
・ウィンドウ メッセージの送出(メッセージ)
・登録された関数の呼び出し(コールバック関数)
が行われます。
DnetSetEvent関数により、イベント/メッセージ/コールバック関数の登録を行います。
DnetSetEventMask関数で割り込みマスクの設定、DnetGetEventMask関数で割り込みマスク値の取
得を行います。
// コールバック関数
VOID CALLBACK EventProc(DWORD event, DWORD userData)
{
// 割り込み処理を記述します
・・・
}
・・・
// メインルーチン
DWORD eventMask;
DNET_EVENT_REQ eventReq;
// メッセージ受信時に割り込みが発生するようにマスクを設定します
eventMask = DNET_EVENT_RECV;
ret = DnetSetEventMask(deviceHandle, eventMask);
eventReq.Wnd = NULL;// メッセージは使用しません
eventReq.InterruptEvent = NULL; // イベントは使用しません
eventReq.CallBackProc = (DNETCALLBACK)EventProc;
eventReq.InterruptMsg = WM_NULL; // メッセージは使用しません
eventReq.UserData = 0x1234;
ret = DnetSetEvent(deviceHandle, &eventReq);
上記のコード例に示すように、イベント/メッセージ/コールバック関数の内、登録されたものの
みが発生するようになります。そのため、イベント/メッセージ/コールバック関数の全てを発生
させることも可能です。
オープン直後は、割り込みの設定はされておらず、全ての割り込みがマスクされています。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
30
3.4.4 ネットワークに参加
ネットワークに参加する場合は DnetPortOn関数を使用します。
// ネットワークに参加します
ret = DnetPortOn(deviceHandle);
ネットワーク参加中は、下記の関数は使用できません。
・ DnetSetConfig
・ DnetSaveNetInfo
・ DnetInitializeNetInfo
逆に、ネットワークに参加すると、下記の関数が使用できるようになります。
・ DnetGetAccmulatedMessage、DnetGetAccmulatedMessageEx
3.4.5 モニタ処理
モニタモードではネットワーク上を流れているメッセージ(Explicit、I/O)を全て受信します。
受信したメッセージの取得には、DnetGetAccumulatedMessage関数を使用します。
そのため、DnetSetConfig関数により、蓄積型受信バッファのサイズを 1以上に設定する必要があ
ります。
DNET_MESSAGE message[10];
ULONG count;
// 蓄積メッセージを取り出し
count = 10;
ret = DnetGetAccumulatedMessage(deviceHandle, &message[0], &count);
DnetGetAccumulatedMessage関数の第 3引数には、関数実行前に取得したい受信メッセージ数を指
定します。関数が正常終了すると、実際に取得できたメッセージ数が格納されます。
3.4.6 ネットワークからの離脱
DnetPortOff関数により、ネットワークからの離脱を行います。
// ネットワークから離脱します
ret = DnetPortOff(deviceHandle);
I/O 通信を行った場合には、必ずネットワークから離脱する前に、I/O 通信を停止してください。
ネットワークから離脱すると、下記の関数が使用できるようになります。
・ DnetSetConfig
・ DnetSaveNetInfo
・ DnetInitializeNetInfo
逆に、ネットワークから離脱すると、下記の関数が使用できなくなります。
・ DnetGetAccumulatedMessage、DnetGetAccumulatedMessageEx
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
31
3.4.7 割り込みの解除
DnetKillEvent関数により、登録されているイベント/メッセージ/コールバック関数を解除します。
DnetSetEventMask関数で全割り込みをマスクしてから、DnetKillEvent関数を呼び出してください。
// 全割り込みをマスクします
ret = DnetSetEventMask(deviceHandle, 0);
// 割り込みを解除します
det = DnetKillEvent(deviceHandle);
3.4.8 ポートのクローズ
DnetClosePort関数により、ポートのクローズ処理を行います。この関数を実行することにより、
他の関数は全て使用不可となります。
また DnetClosePort関数を呼ぶことにより、自ポート通信設定や、デバイスリスト等の情報も全
て初期状態に戻ります。
// ポートをクローズします
ret = DnetClosePort(deviceHandle);
ネットワークに参加していた場合には、ポートのクローズを行う前に必ず、ネットワークから離
脱してください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
32
3.5 LED の動作
3.5.1 モジュールステータス LED(MS)
LED 状態 動作
緑消灯 デバイスに電源が供給されていない場合
緑点滅 起動時
緑点灯 DnetOpenPort 関数でオープンが正常に行われた場合
緑点滅 DnetClosePort 関数でクローズが正常終了した場合
赤点滅 回復可能な状態
赤点灯 デバイスに回復不可能な異常が発生している
3.5.2 ネットワークステータス LED(NS)
LED 状態 動作
緑消灯 起動時
緑点滅 DnetPortOn 関数に成功し、ネットワークに参加できた場合
緑消灯 DnetPortOff 関数に成功し、ネットワークから離脱した場合
緑点灯 DnetConnect 関数に成功し、接続が確立した場合
緑点滅 DnetDisconnect 関数で全ての接続が切断された場合
赤点滅 タイムアウト状態になった。
赤点灯 通信デバイスが故障
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
33
第4章 リファレンス
4.1 関数一覧
右端の 3列は、各モードでの使用可否を示しています。
Mon:モニタモード、Mst:マスタモード、Slv:スレーブモード
No 関数名 機能 Mon Mst Slv
●初期化関数
1 DnetOpenPort デバイスをオープンします。 ○ ○ ○
2 DnetClosePort デバイスをクローズします。 ○ ○ ○
3 DnetPortOn ポートをネットワークに参加させます。 ○ ○ ○
4 DnetPortOff ポートをネットワークから切り離します。 ○ ○ ○
●各種設定関数
5 DnetSetConfig ポートの条件設定を行います。 ○ ○ ○
6 DnetGetConfig ポートの条件取得を行います。 ○ ○ ○
7 DnetSetPowerLimit ネットワーク電源電圧下限/上限値を設定します。 ○ ○ ○
8 DnetGetPowerLimit ネットワーク電源電圧下限/上限値を取得します。 ○ ○ ○
9 DnetSetPowerLimitMode ネットワーク電源異常検知時の動作を設定しま
す。
○ ○ ○
10 DnetGetPowerLimitMode ネットワーク電源異常検知時の動作設定を取得し
ます。
○ ○ ○
11 DnetSetPowerFilter ネットワーク電源異常検知のフィルタを設定しま
す。
○ ○ ○
12 DnetGetPowerFilter ネットワーク電源異常検知のフィルタ設定を取得
します。
○ ○ ○
13 DnetSetConnectionTime Explicit メッセージコネクションのタイムアウト
クリア時間を設定します。
× ○ ×
14 DnetGetConnectionTime Explicit メッセージコネクションのタイムアウト
クリア時間を取得します。
× ○ ×
●通信関数
15 DnetConnect I/O 通信を開始します。 × ○ ×
16 DnetDisconnect I/O 通信を停止します。 × ○ ×
17 DnetSendIO I/O メッセージを送信します。 × ○ ○
18 DnetSendIOEx I/O メッセージを送信します。 × ○ ○
19 DnetSetOutputIO I/O メッセージを送信バッファにセットします。 × ○ ○
20 DnetSetOutputIOEx I/O メッセージを送信バッファにセットします。 × ○ ○
21 DnetGetInputIO I/O 受信バッファからメッセージを取り出します。 × ○ ○
22 DnetGetInputIOEx I/O 受信バッファからメッセージを取り出します。 × ○ ○
23 DnetSendExplicit Explicit メッセージを送信します。 × ○ ○
24 DnetSendExplicitEx Explicit メッセージを送信します。 × ○ ○
25 DnetReceiveExplicit Explicit メッセージを受信します。 × ○ ○
26 DnetReceiveExplicitEx Explicit メッセージを受信します。 × ○ ○
27 DnetGetAccumulatedMessage 蓄積バッファからメッセージを取り出します。 ○ ○ ○
28 DnetGetAccumulatedMessage
Ex
蓄積バッファからメッセージを取り出します。 ○ ○ ○
●その他(ステータス取得等)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
34
29 DnetGetPortStatus ステータスを取得します。 ○ ○ ○
30 DnetGetSlaveStatus スレーブステータスを取得します。 × ○ ×
31 DnetGetErrorEvent エラー情報を取得します。 ○ ○ ○
32 DnetClearBuffer 各種バッファのクリアを行います。 ○ ○ ○
33 DnetGetNetworkPower ネットワーク電源電圧値を取得します。 ○ ○ ○
●割り込み設定関数
34 DnetSetEvent イベント条件の設定を行います。 ○ ○ ○
35 DnetSetEventMask イベントマスクの設定を行います。 ○ ○ ○
36 DnetGetEventMask イベントマスクの取得を行います。 ○ ○ ○
37 DnetKillEvent イベント条件の破棄を行います。 ○ ○ ○
●デバイスリスト操作関数
38 DnetSetDeviceList リストにデバイス情報をセットします。 × ○ ×
39 DnetGetDeviceList リストからデバイス情報を取得します。 × ○ ×
40 DnetDeleteDeviceList リストからデバイス情報を消去します。 × ○ ×
●ネットワーク情報保存/読み出し
41 DnetSaveNetInfo 通信情報をデバイスの不揮発メモリに保存しま
す。
○ ○ ○
42 DnetInitializeNetInfo 通信情報を出荷時設定に戻します。 ○ ○ ○
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
35
4.2 関数個別説明
1. DnetOpenPort 【機能】
DeviceNet インタフェース製品のオープンを行い、以後のデバイスへのアクセスを行えるよう
にします。
「デバイスマネージャ」に認識された弊社 DeviceNet インタフェース製品が一覧表示されます。
一覧の製品型式の横にデバイス名が表示されます。
【書式】
●C言語
HANDLE DnetOpenPort(
PCHAR deviceName
);
●Visual Basic
Declare Function DnetOpenPort Lib "IFDnet.DLL" (
ByVal deviceName As String
) As Long
●Delphi
function DnetOpenPort(
deviceName: String
): THandle; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceName オープンするデバイスのデバイス名を指定してください。
【戻り値】
DnetOpenPort 関数が正常に終了した場合には、有効なハンドルが返されます。
他の関数は、本関数により取得したハンドルを使用してデバイスの制御を行います。
オープンに失敗した場合には、INVALID_HANDLE_VALUE(FFFFFFFFh)が返されます。
【備考】
オープンするにはデバイス名を指定します。
DeviceNet インタフェース製品のデバイス名は「IFDNETx」(xは 1~16)となります。デバイス
名は、システムに認識された順番に割り振られていきます。複数枚ご使用になる場合は、各デ
バイスを識別するために RSW1 設定値に異なる値を割り当て、制御するデバイスのデバイス名を
事前にご確認ください。
各デバイス名の確認は、デバイスマネージャにて確認できます。
オープンが正常に行われると MS LED が緑点灯します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
36
【使用例】
●C言語
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
デバイス名「IFDNET1」のデバイスをオープンします。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
37
2. DnetClosePort 【機能】
DeviceNet インタフェース製品をクローズします。
デバイスアクセスのために使用されていた各種リソースの解放を行い、以後のデバイスへのア
クセスを禁止します。
【書式】
●C言語
ULONG DnetClosePort(
HANDLE deviceHandle
);
●Visual Basic
Declare Function DnetClosePort Lib "IFDnet.DLL" (
ByVal deviceHandle As Long
) As Long
●Delphi
function DnetClosePort(
deviceHandle: Thandle
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
本関数を実行する前に、必ずI/O通信の停止(DnetDisconnect関数)、ネットワークからの離脱
(DnetPortOff関数)を行ってください。行わなかった場合、デバイスを再オープンしてもネッ
トワークへの接続、I/O通信の開始が行えなくなります。この場合、システムを再起動させる必
要があります。
再度、デバイスへのアクセスを行う場合にはオープン処理(DnetOpenPort関数)を呼び出してく
ださい。
クローズが正常終了すると MS LED が緑点滅になります。
本関数を実行せずにプログラムを終了した場合でも、MS LED が緑点滅状態であれば再度オープ
ンを行うことができます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
38
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”); :
:
ret = DnetClosePort(deviceHandle);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
:
ret = DnetClosePort(deviceHandle);
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
:
ret := DnetClosePort(deviceHandle);
デバイス名「IFDNET1」のデバイスのクローズ処理を行います。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
39
3. DnetPortOn 【機能】
DeviceNet インタフェース製品をネットワークに参加させます。
DnetSetConfig関数、またはネットワーク設定ユーティリティにより通信設定を行ってから本関
数を実行してください。
【書式】
●C言語
ULONG DnetPortOn(
HANDLE deviceHandle
);
●Visual Basic
Declare Function DnetPortOn Lib "IFDnet.DLL" (
ByVal deviceHandle As Long
) As Long
●Delphi
function DnetPortOn(
deviceHandle: Thandle
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
ネットワークに参加できた場合、NS LED が緑点滅します。
ネットワーク参加中は、下記の関数は使用できません。
・ DnetSetConfig
・ DnetSetDeviceList
・ DnetDeleteDeviceList
・ DnetSaveNetInfo
・ DnetInitializeNetInfo
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
40
逆に、ネットワークに参加すると、下記の関数が使用できるようになります。
・ DnetConnect
・ DnetDisconnect
・ DnetSendIO、DnetSendIOEx
・ DnetSetOutIO、DnetSetOutIOEx
・ DnetGetInputIO、DnetGetInputIOEx
・ DnetGetAccumulatedMessage、DnetGetAccumulatedMessageEx
・ DnetSendExplicit、DnetSendExplicitEx
・ DnetReceiveExplicit、DnetReceiveExplicitEx
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”); :
:
ret = DnetPortOn(deviceHandle);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
:
ret = DnetPortOn(deviceHandle);
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
:
ret := DnetPortOn(deviceHandle);
デバイス名「IFDNET1」のデバイスをネットワークに参加させます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
41
4. DnetPortOff 【機能】
DeviceNet インタフェース製品をネットワークから離脱させます。
【書式】
●C言語
ULONG DnetPortOff(
HANDLE deviceHandle
);
●Visual Basic
Declare Function DnetPortOff Lib "IFDnet.DLL" (
ByVal deviceHandle As Long
) As Long
●Delphi
function DnetPortOff(
deviceHandle: Thandle
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
ネットワークから離脱すると、NS LED が消灯します。
処理を終了する場合には、必ず本関数を実行しネットワークから離脱してください。
ネットワーク離脱中は、下記の関数は使用できません。
・ DnetConnect
・ DnetDisconnect
・ DnetSendIO、DnetSendIOEx
・ DnetSetOutputIO、DnetSetOutputIOEx
・ DnetGetInputIO、DnetGetInputIOEx
・ DnetGetAccumulatedMessage、DnetGetAccumulatedMessageEx
・ DnetSendExplicit、DnetSendExplicitEx
・ DnetReceiveExplicit、DnetReceiveExplicitEx
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
42
逆に、ネットワークから離脱すると、下記の関数が使用できるようになります。
・ DnetSetConfig
・ DnetSetDeviceList
・ DnetDeleteDeviceList
・ DnetSaveNetInfo
・ DnetInitializeNetInfo
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”); :
ret = DnetPortOn(deviceHandle);
:
ret = DnetPortOff(deviceHandle);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
ret = DnetPortOn(deviceHandle);
:
ret = DnetPortOff(deviceHandle);
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetPortOn(deviceHandle);
:
ret := DnetPortOff(deviceHandle);
デバイス名「IFDNET1」のデバイスをネットワークから離脱させます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
43
5. DnetSetConfig 【機能】
DeviceNet インタフェース製品の自ポート設定を行います。
動作モードや通信速度、I/O 通信設定等の自ポートに関する全設定を本関数で行います。
【書式】
●C言語
ULONG DnetSetConfig(
HANDLE deviceHandle,
PDNET_PORT_CONFIG portConfig
);
●Visual Basic
Declare Function DnetSetConfig Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef portConfig As DNET_PORT_CONFIG
) As Long
●Delphi
function DnetSetConfig(
deviceHandle: THandle;
var portConfig: DNET_PORT_CONFIG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
portConfig 自ポートの設定値を格納した DNET_PORT_CONFIG構造体を指定します。
詳細は『4.3 構造体説明』をご参照ください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
設定の誤りを防ぐために、DnetGetConfig関数で取得した DNET_PORT_CONFIG構造体を変更して
本関数に渡すことを推奨します。
また、本関数はネットワーク離脱中にのみ使用できます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
44
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
DNET_PORT_CONFIG portConfig;
deviceHandle = DnetOpenPort(“IFDNET1”); :
// ボーレートを 250kbps にします
ret = DnetGetConfig(deviceHandle, &portConfig);
portConfig.BaudRate = DNET_BAUDRATE_250K;
ret = DnetSetConfig(deviceHandle, &portConfig);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
Dim portConfig As DNET_PORT_CONFIG
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
‘ボーレートを 250kbps にします
ret = DnetGetConfig(deviceHandle, portConfig)
portConfig. BaudRate = DNET_BAUDRATE_250K
ret = DnetSetConfig(deviceHandle, portConfig)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
portConfig: DNET_PORT_CONFIG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
// ボーレートを 250kbps にします
ret := DnetGetConfig(deviceHandle, portConfig);
portConfig.BaudRate := DNET_BAUDRATE_250K;
ret := DnetSetConfig(deviceHandle, portConfig);
デバイス名「IFDNET1」のデバイスのボーレートを 250kbps にします。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
45
6. DnetGetConfig 【機能】
DeviceNet インタフェースの自ポート設定情報を取得します。
【書式】
●C言語
ULONG DnetGetConfig(
HANDLE deviceHandle,
PDNET_PORT_CONFIG portConfig
);
●Visual Basic
Declare Function DnetGetConfig Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef portConfig As DNET_PORT_CONFIG
) As Long
●Delphi
function DnetGetConfig(
deviceHandle: THandle;
var portConfig: DNET_PORT_CONFIG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
portConfig 自ポートの設定値を格納する DNET_PORT_CONFIG構造体を指定します。
詳細は『4.3 構造体説明』をご参照ください。
関数が正常終了すると、自ポートの設定値が格納されます。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
46
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
DNET_PORT_CONFIG portConfig
deviceHandle = DnetOpenPort(“IFDNET1”); :
:
ret = DnetGetConfig(deviceHandle, &portConfig);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
Dim portConfig As DNET_PORT_CONFIG
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
ret = DnetGetConfig(deviceHandle, portConfig)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
portConfig: DNET_PORT_CONFIG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetGetConfig(deviceHandle, portConfig);
デバイス名「IFDNET1」のデバイスのポート設定を取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
47
7. DnetSetPowerLimit 【機能】
DeviceNet インタフェースのネットワーク電源電圧下限/上限値を設定します。
ネットワーク電源電圧値が下限値を下回った場合、またはネットワーク電源電圧値を上回った
場合にイベントを発生させることができます。
【書式】
●C言語
ULONG DnetSetPowerLimit(
HANDLE deviceHandle,
ULONG limitKind,
float powerLimit
);
●Visual Basic
Declare Function DnetSetPowerLimit Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal limitKind As Long,
ByVal powerLimit As Single
) As Long
●Delphi
function DnetSetPowerLimit(
deviceHandle: THandle;
limitKind: ULONG;
powerLimit: Single
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
limitKind 下限値を設定するか、上限値を設定するかを選択します。
設定可能な値は下記の通りです。
識別子 値 内容
DNET_POWER_LOWER_LIMIT 0 下限値を設定します。
DNET_POWER_UPPER_LIMIT 1 上限値を設定します。
powerLimit ネットワーク電源電圧の下限値/上限値を指定します。
単位は[V]で、設定可能範囲は、0.6[V]~25.6[V]です。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
48
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【注意事項】
イベントとは関係なく、ネットワーク電源が下限値を下回った場合、上限値を上回った場合に
本製品は自動的にネットワークから離脱します。電源復旧後に DnetPortOn関数を実行すること
により、再度ネットワークに参加できます。
DnetSetPowerLimitMode関数を使用することにより、自動的にネットワークから離脱しないよう
にすることもできます。
ネットワーク電源電圧下限値イベントは、本関数で設定した下限値を下回った際に発生します。
ネットワーク電源電圧上限値イベントは、本関数で設定した上限値を上回った際に発生します。
イベントの発生は、ネットワーク中のみ発生します。
下限値、上限値の誤差は、±0.5[V]となります。そのため、例えば下限値に 10.0[V]を設定し
た場合、ネットワーク電源電圧が 9.5[V]から 9.4[V]になった瞬間や、10.5[V]から 10.4[V]に
なった瞬間にイベントが発生する可能性があります。
ただし、下限値に 0.6[V]を設定した場合は、0.6[V]より小さい値は全て誤差範囲に含まれます。
例えば、下限値に 0.6[V]を設定した場合、0.05[V]から 0.00[V]になった瞬間にもイベントが発
生する可能性があります。
また、上限値に 25.6[V]を設定した場合、25.6[V]より大きい値は全て誤差範囲に含まれます。
例えば、上限値に 25.6[V]を設定した場合、30.0[V]から 30.1[V]になった瞬間にもイベントが
発生する可能性があります。
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
float lowerLimit;
deviceHandle = DnetOpenPort(“IFDNET1”); :
lowerLimit = 10.5;
ret = DnetSetPowerLimit(deviceHandle, DNET_POWER_LOWER_LIMIT, lowerLimit);
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
49
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
Dim lowerLimit As Single
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
lowerLimit = 10.5
ret = DnetSetPowerLimit(deviceHandle, DNET_POWER_LOWER_LIMIT, lowerLimit)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
lowerLimit: Single;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
lowerLimit := 10.5;
ret := DnetSetPowerLimit(deviceHandle, DNET_POWER_LOWER_LIMIT, lowerLimit);
デバイス名「IFDNET1」の下限値を 10.5[V]に設定します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
50
8. DnetGetPowerLimit 【機能】
DeviceNet インタフェースのネットワーク電源電圧下限/上限値を取得します。
【書式】
●C言語
ULONG DnetGetPowerLimit(
HANDLE deviceHandle,
ULONG limitKind,
float* powerLimit
);
●Visual Basic
Declare Function DnetGetPowerLimit Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal limitKind As Long,
ByRef powerLimit As Single
) As Long
●Delphi
function DnetGetPowerLimit(
deviceHandle: THandle;
limitKind: ULONG;
var powerLimit: Single
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
limitKind 下限値を取得するか、上限値を取得するかを選択します。
設定可能な値は下記の通りです。
識別子 値 内容
DNET_POWER_LOWER_LIMIT 0 下限値を取得します。
DNET_POWER_UPPER_LIMIT 1 上限値を取得します。
powerLimit ネットワーク電源電圧の下限値/上限値を格納する変数を指定します。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
51
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
float lowerLimit;
deviceHandle = DnetOpenPort(“IFDNET1”); :
ret = DnetGetPowerLimit(deviceHandle, DNET_POWER_LOWER_LIMIT, &lowerLimit);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
Dim lowerLimit As Single
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
ret = DnetGetPowerLimit(deviceHandle, DNET_POWER_LOWER_LIMIT, lowerLimit)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
lowerLimit: Single;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetGetPowerLimit(deviceHandle, DNET_POWER_LOWER_LIMIT, lowerLimit);
デバイス名「IFDNET1」の下限値を取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
52
9. DnetSetPowerLimitMode 【機能】
DeviceNet インタフェースのネットワーク電源電圧値が下限値を下回った場合、またはネット
ワーク電源電圧値を上回った場合の動作を設定します。
【書式】
●C言語
ULONG DnetSetPowerLimitMode(
HANDLE deviceHandle,
ULONG limitKind,
ULONG limitMode
);
●Visual Basic
Declare Function DnetSetPowerLimitMode Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal limitKind As Long,
ByVal limitMode As Long
) As Long
●Delphi
function DnetSetPowerLimitMode(
deviceHandle: THandle;
limitKind: ULONG;
limitMode: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
limitKind 下限値を設定するか、上限値を設定するかを選択します。
設定可能な値は下記の通りです。
識別子 値 内容
DNET_POWER_LOWER_LIMIT 0 下限値の設定をします。
DNET_POWER_UPPER_LIMIT 1 上限値の設定をします。
limitMode 動作を設定します。
設定可能な値は下記の通りです。
識別子 値 内容
DNET_LIMIT_OFF_ENABLE 0 自動的にネットワークから離脱します。(デフォルト)
DNET_LIMIT_OFF_DISABLE 1 自動的にネットワークから離脱しません。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
53
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
デフォルトの設定では、ネットワーク電源が下限値を下回った場合、上限値を上回った場合に
本製品は自動的にネットワークから離脱します。
下限値、上限値にそれぞれ自動的にネットワークから離脱するか設定することができます。
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ PCI-487101PQ[12]C08 以降の製品
・ CTP-487101PQ[11]C08 以降の製品
・ CPZ-487101PQ[11]以降の製品
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”); :
ret = DnetSetPowerLimitMode(deviceHandle, DNET_POWER_LOWER_LIMIT,
DNET_LIMIT_OFF_DISABLE);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
ret = DnetSetPowerLimitMode(deviceHandle, DNET_POWER_LOWER_LIMIT,
DNET_LIMIT_OFF_DISABLE)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
54
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetSetPowerLimitMode(deviceHandle, DNET_POWER_LOWER_LIMIT,
DNET_LIMIT_OFF_DISABLE);
デバイス名「IFDNET1」の下限値での自動ネットワーク離脱をしないようにする。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
55
10. DnetGetPowerLimitMode
【機能】
DeviceNet インタフェースのネットワーク電源電圧値が下限値を下回った場合、またはネット
ワーク電源電圧値を上回った場合の動作設定を取得します。
【書式】
●C言語
ULONG DnetGetPowerLimitMode(
HANDLE deviceHandle,
ULONG limitKind,
PULONG limitMode
);
●Visual Basic
Declare Function DnetGetPowerLimitMode Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal limitKind As Long,
ByRef limitMode As Long
) As Long
●Delphi
function DnetGetPowerLimitMode(
deviceHandle: THandle;
limitKind: ULONG;
var limitMode: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
limitKind 下限値の設定を取得するか、上限値の設定を取得するかを選択します。
設定可能な値は下記の通りです。
識別子 値 内容
DNET_POWER_LOWER_LIMIT 0 下限値を取得します。
DNET_POWER_UPPER_LIMIT 1 上限値を取得します。
limitMode 動作設定を格納する変数を指定します。
取得可能な値は下記の通りです。
識別子 値 内容
DNET_LIMIT_OFF_ENABLE 0 自動的にネットワークから離脱します。(デフォルト)
DNET_LIMIT_OFF_DISABLE 1 自動的にネットワークから離脱しません。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
56
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ PCI-487101PQ[12]C08 以降の製品
・ CTP-487101PQ[11]C08 以降の製品
・ CPZ-487101PQ[11]以降の製品
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
ULONG limitMode;
deviceHandle = DnetOpenPort(“IFDNET1”); :
ret = DnetGetPowerLimitMode(deviceHandle, DNET_POWER_LOWER_LIMIT, &limitMode);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
Dim lowerLimit As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
ret = DnetGetPowerLimitMode(deviceHandle, DNET_POWER_LOWER_LIMIT, limitMode)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
lowerLimit: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetGetPowerLimitMode(deviceHandle, DNET_POWER_LOWER_LIMIT, limitMode);
デバイス名「IFDNET1」の下限値の動作設定を取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
57
11. DnetSetPowerFilter
【機能】
DeviceNet インタフェースのネットワーク電源電圧の監視機能にフィルタを設定することがで
きます。フィルタは上限値と下限値にそれぞれ設定することができます。
【書式】
●C言語
ULONG DnetSetPowerFilter(
HANDLE deviceHandle,
ULONG limitKind,
ULONG powerFilter
);
●Visual Basic
Declare Function DnetSetPowerFilter Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal limitKind As Long,
ByVal powerFilter As Long
) As Long
●Delphi
function DnetSetPowerFilter(
deviceHandle: THandle;
limitKind: ULONG;
powerFilter: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
limitKind フィルタを下限値に設定するか、上限値に設定するかを選択します。
設定可能な値は下記の通りです。
識別子 値 内容
DNET_POWER_LOWER_LIMIT 0 下限値に設定します。
DNET_POWER_UPPER_LIMIT 1 上限値に設定します。
powerFilter フィルタの設定をします。
設定可能な値は下記の通りです。
識別子 値 内容
DNET_POWER_FILTER_DISABLE 0 フィルタを無効にする。(デフォルト)
DNET_POWER_FILTER_ENABLE 1 フィルタを有効にする。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
58
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
フィルタは 100ms のデジタルフィルタで、フィルタを有効にすることにより、ノイズ等による
一瞬の電圧変化の検出を抑制することができます。
デフォルトの設定では、フィルタは無効になっています。
下限値、上限値にそれぞれフィルタを設定することができます。
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ CTP-487101PQ[12]以降の製品
・ CPZ-487101PQ[12]以降の製品
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”); :
ret = DnetSetPowerFilter(deviceHandle, DNET_POWER_UPPER_LIMIT,
DNET_POWER_FILTER_ENABLE);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
ret = DnetSetPowerFilter(deviceHandle, DNET_POWER_LOWER_LIMIT,
DNET_POWER_FILTER_ENABLE)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
59
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetSetPowerFilter(deviceHandle, DNET_POWER_LOWER_LIMIT,
DNET_POWER_FILTER_ENABLE);
デバイス名「IFDNET1」の下限値のフィルタを有効にします。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
60
12. DnetGetPowerFilter
【機能】
DeviceNet インタフェースのネットワーク電源電圧監視機能のフィルタ設定を取得します。
【書式】
●C言語
ULONG DnetGetPowerFilter(
HANDLE deviceHandle,
ULONG limitKind,
PULONG powerFilter
);
●Visual Basic
Declare Function DnetGetPowerFilter Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal limitKind As Long,
ByRef powerFilter As Long
) As Long
●Delphi
function DnetGetPowerFilter(
deviceHandle: THandle;
limitKind: ULONG;
var powerFilter: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
limitKind 下限値の設定を取得するか、上限値の設定を取得するかを選択します。
設定可能な値は下記の通りです。
識別子 値 内容
DNET_POWER_LOWER_LIMIT 0 下限値の設定を取得します。
DNET_POWER_UPPER_LIMIT 1 上限値の設定を取得します。
powerFilter フィルタ設定を格納する変数を指定します。
取得可能な値は下記の通りです。
識別子 値 内容
DNET_POWER_FILTER_DISABLE 0 フィルタを無効にする。(デフォルト)
DNET_POWER_FILTER_ENABLE 1 フィルタを有効にする。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
61
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ CTP-487101PQ[12]以降の製品
・ CPZ-487101PQ[12]以降の製品
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
ULONG powerFilter;
deviceHandle = DnetOpenPort(“IFDNET1”); :
ret = DnetGetPowerFilter(deviceHandle, DNET_POWER_LOWER_LIMIT, &powerFilter);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
Dim powerFilter As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
ret = DnetGetPowerFilter(deviceHandle, DNET_POWER_LOWER_LIMIT, powerFilter)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
powerFilter: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetGetPowerFilter(deviceHandle, DNET_POWER_LOWER_LIMIT, powerFilter);
デバイス名「IFDNET1」の下限値のフィルタ設定を取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
62
13. DnetSetConnectionTime
【機能】
Explicit メッセージのコネクションがタイムアウトしないように送信しているメッセージの
周期を設定します。
【書式】
●C言語
ULONG DnetSetConnectionTime(
HANDLE deviceHandle,
ULONG connectionTime
);
●Visual Basic
Declare Function DnetSetConnectionTime Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal connectionTime As Long
) As Long
●Delphi
function DnetSetConnectionTime(
deviceHandle: THandle;
connectionTime: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
connectionTime タイムアウトをクリアするメッセージの送信周期を設定します。
10ms 単位で 0ms~65530ms の間で指定できます。デフォルトは 1000ms です。
0ms を指定するとメッセージの送信を停止できます。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
本関数は自ポートがマスタモードの時のみ使用できます。
また、本関数はネットワーク離脱中にのみ使用できます。
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ PCI-487101PQ[12]C14 以降の製品
・ CTP-487101PQ[12]C05 以降の製品
・ CPZ-487101PQ[12]C04 以降の製品
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
63
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
ULONG connectionTime;
deviceHandle = DnetOpenPort(“IFDNET1”); :
connectionTime = 2000;
ret = DnetSetConnectionTime(deviceHandle, connectionTime);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
Dim connectionTime As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
connectionTime = 2000
ret = DnetSetConnectionTime(deviceHandle, connectionTime)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
connectionTime: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
connectionTime = 2000;
ret := DnetSetConnectionTime(deviceHandle, connectionTime);
デバイス名「IFDNET1」のタイムアウトクリア時間を 2000ms に設定します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
64
14. DnetGetConnectionTime
【機能】
Explicit メッセージのコネクションがタイムアウトしないように送信しているメッセージの
周期を取得します。
【書式】
●C言語
ULONG DnetGetConnectionTime(
HANDLE deviceHandle,
PULONG connectionTime
);
●Visual Basic
Declare Function DnetGetConnectionTime Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef connectionTime As Long
) As Long
●Delphi
function DnetGetConnectionTime(
deviceHandle: THandle;
var connectionTime: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
connectionTime タイムアウトをクリアするメッセージの送信周期を ms 単位で取得します。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
本関数は自ポートがマスタモードの時のみ使用できます。
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ PCI-487101PQ[12]C14 以降の製品
・ CTP-487101PQ[12]C05 以降の製品
・ CPZ-487101PQ[12]C04 以降の製品
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
65
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
ULONG connectionTime;
deviceHandle = DnetOpenPort(“IFDNET1”); :
ret = DnetGetConnectionTime(deviceHandle, &connectionTime);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
Dim connectionTime As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
ret = DnetGetConnectionTime(deviceHandle, connectionTime)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
connectionTime: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetGetConnectionTime(deviceHandle, connectionTime);
デバイス名「IFDNET1」のタイムアウトクリア時間を取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
66
15. DnetConnect
【機能】
他ポートのデバイスとの接続を確立し、I/O 通信を開始します。
【書式】
●C言語
ULONG DnetConnect(
HANDLE deviceHandle,
ULONG macID
);
●Visual Basic
Declare Function DnetConnect Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal macID As Byte
) As Long
●Delphi
function DnetConnect(
deviceHandle: THandle;
macID: BYTE
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
macID 接続相手の MAC ID を指定します。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
接続が確立すると NS LED が緑点灯になります。
最初に通信を行うとき、または、何らかの要因で接続が切れたスレーブデバイスに対して再接
続を行うときに使用します。スレーブデバイス側から切断が行われた場合には、マスタ側も一
度 DnetDisconnect関数で接続を切る必要があります。
自ポートがマスタモード時、指定したスレーブデバイスの情報がデバイスリストに設定されて
いない場合、本関数はエラーを返します。事前に DnetSetDeviceList関数、またはネットワー
ク情報設定ユーティリティで、スレーブデバイスの情報を登録してください。
また、本関数はネットワークに参加中にのみ使用できます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
67
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”); :
:
ret = DnetPortOn(deviceHandle);
ret = DnetConnect(deviceHandle, 1);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
:
ret = DnetPortOn(deviceHandle)
ret = DnetConnect(deviceHandle, 1)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetPortOn(deviceHandle);
ret := DnetConnect(deviceHandle, 1);
デバイス名「IFDNET1」のデバイスと MAC ID が 1 のデバイスとの通信を開始します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
68
16. DnetDisconnect
【機能】
他ポートのデバイスとの接続を切断し、I/O 通信を停止します。
【書式】
●C言語
ULONG DnetDisconnect(
HANDLE deviceHandle,
ULONG macID
);
●Visual Basic
Declare Function DnetDisconnect Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal macID As Byte
) As Long
●Delphi
function DnetDisconnect(
deviceHandle: THandle;
macID: BYTE
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
macID 切断するデバイスの MAC ID を指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
全ての接続が切断されると NS LED が緑点滅になります。
処理を終了するときには必ず本関数で接続を切断してください。
本関数はネットワークに参加中にのみ使用できます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
69
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”); :
ret = DnetPortOn(hDeviceHandle);
ret = DnetConnect(hDeviceHandle, 1);
:
ret = DnetDisconnect(hDeviceHandle, 1);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
ret = DnetPortOn(deviceHandle)
ret = DnetConnect(deviceHandle, 1)
:
ret = DnetDisconnect(deviceHandle, 1)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetPortOn(deviceHandle);
ret := DnetConnect(deviceHandle, 1);
:
ret := DnetDisconnect(deviceHandle, 1);
デバイス名「IFDNET1」のデバイスと MAC ID が 1 のデバイスとの接続を切断します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
70
17. DnetSendIO
【機能】
I/O メッセージの送信を行います。
DnetSetOutputIO関数により、設定されたメッセージは自動的に周期送信されますが、本関数は
実行すると即座に渡したメッセージが送信されます。周期的な送信を阻害しないようにご注意
ください。
スレーブモード時に自動応答に設定した場合、送信は即座に行われません。
本関数では最大 256byteまでのメッセージを送信できます。256byteより大きいメッセージを送
信する場合には DnetSendIOEx関数を使用してください。
【書式】
●C言語
ULONG DnetSendIO(
HANDLE deviceHandle,
PDNET_MESSAGE dnetMessage
);
●Visual Basic
Declare Function DnetSendIO Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetMessage As DNET_MESSAGE
) As Long
●Delphi
function DnetSendIO(
deviceHandle: THandle;
var dnetMessage: DNET_MESSAGE
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetMessage 送信したいメッセージ(DNET_MESSAGE構造体)を指定します。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
送信が完了したかどうかは、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定するこ
とで全ての送信が完了した時点で割り込みを発生させることが出来ます(イベント/メッセージ
/コールバック関数)。
スレーブモード時に自動応答に設定した場合、本関数はメッセージのセットのみ行います。セ
ットされたメッセージは、マスタから送信されたメッセージを受信した時に自動的に送信しま
す。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
71
【使用例】
●C言語
DNET_MESSAGE dnetMessage;
ULONG ret;
// MAC ID が 7 のデバイスに対して
//I/O メッセージ(POLL)を送信します
dnetMessage.MessageType = DNET_IO_POLL;
dnetMessage.MacID = 7;
dnetMessage.Length = 3;
dnetMessage.Data[0] = 0x01;
dnetMessage.Data[1] = 0x02;
dnetMessage.Data[2] = 0x03;
ret = DnetSendIO(deviceHandle, &dnetMessage);
●Visual Basic
dnetMessage As DNET_MESSAGE
Dim ret As Long
‘ MAC ID が 7 のデバイスに対して
‘ I/O メッセージ(POLL)を送信します
dnetMessage.MessageType = DNET_IO_POLL
dnetMessage.MacID = 7
dnetMessage.Length = 3
dnetMessage.Data(0) = 1
dnetMessage.Data(1) = 2
dnetMessage.Data(2) = 3
ret = DnetSendIO(deviceHandle, dnetMessage)
●Delphi
var
dnetMessage: DNET_MESSAGE;
ret: ULONG;
// MAC ID が 7 のデバイスに対して
//I/O メッセージ(POLL)を送信します
dnetMessage.MessageType := DNET_IO_POLL;
dnetMessage.MacID := 7;
dnetMessage.Length := 3;
dnetMessage.Data[0] := 1;
dnetMessage.Data[1] := 2;
dnetMessage.Data[2] := 3;
ret := DnetSendIO(deviceHandle, dnetMessage);
MAC ID が 7 のデバイスへ I/O メッセージを送信します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
72
18. DnetSendIOEx
【機能】
I/O メッセージの送信を行います。
DnetSetOutputIO関数により、設定されたメッセージは自動的に周期送信されますが、本関数は
実行すると即座に渡したメッセージが送信されます。周期的な送信を阻害しないようにご注意
ください。
スレーブモード時に自動応答に設定した場合、送信は即座に行われません。
本関数では最大 512byte までのメッセージを送信できます。
【書式】
●C言語
ULONG DnetSendIOEx(
HANDLE deviceHandle,
PDNET_MESSAGE_EX dnetMessageEx
);
●Visual Basic
Declare Function DnetSendIOEx Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetMessageEx As DNET_MESSAGE_EX
) As Long
●Delphi
function DnetSendIOEx(
deviceHandle: THandle;
var dnetMessageEx: DNET_MESSAGE_EX
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetMessageEx 送信したいメッセージ(DNET_MESSAGE_EX構造体)を指定します。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
送信が完了したかどうかは、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定するこ
とで全ての送信が完了した時点で割り込みを発生させることが出来ます(イベント/メッセージ
/コールバック関数)。
スレーブモード時に自動応答に設定した場合、本関数はメッセージのセットのみ行います。セ
ットされたメッセージは、マスタから送信されたメッセージを受信した時に自動的に送信しま
す。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
73
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ PCI-487101PQ[12]C10 以降の製品
・ CTP-487101PQ[12]C02 以降の製品
・ CPZ-487101PQ[12]C01 以降の製品
【使用例】
●C言語
DNET_MESSAGE_EX dnetMessageEx;
ULONG ret;
// MAC ID が 7 のデバイスに対して
//I/O メッセージ(POLL)を送信します
dnetMessageEx.MessageType = DNET_IO_POLL;
dnetMessageEx.MacID = 7;
dnetMessageEx.Length = 3;
dnetMessageEx.Data[0] = 0x01;
dnetMessageEx.Data[1] = 0x02;
dnetMessageEx.Data[2] = 0x03;
ret = DnetSendIOEx(deviceHandle, &dnetMessageEx);
●Visual Basic
dnetMessageEx As DNET_MESSAGE_EX
Dim ret As Long
‘ MAC ID が 7 のデバイスに対して
‘ I/O メッセージ(POLL)を送信します
dnetMessageEx.MessageType = DNET_IO_POLL
dnetMessageEx.MacID = 7
dnetMessageEx.Length = 3
dnetMessageEx.Data(0) = 1
dnetMessageEx.Data(1) = 2
dnetMessageEx.Data(2) = 3
ret = DnetSendIOEx(deviceHandle, dnetMessageEx)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
74
●Delphi
var
dnetMessageEx: DNET_MESSAGE_EX;
ret: ULONG;
// MAC ID が 7 のデバイスに対して
//I/O メッセージ(POLL)を送信します
dnetMessageEx.MessageType := DNET_IO_POLL;
dnetMessageEx.MacID := 7;
dnetMessageEx.Length := 3;
dnetMessageEx.Data[0] := 1;
dnetMessageEx.Data[1] := 2;
dnetMessageEx.Data[2] := 3;
ret := DnetSendIOEx(deviceHandle, dnetMessageEx);
MAC ID が 7 のデバイスへ I/O メッセージを送信します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
75
19. DnetSetOutputIO
【機能】
周期送信する I/O メッセージの送信メッセージをセットし送信を開始します。
DnetSetConfig関数、またはネットワーク情報設定ユーティリティで設定した条件に従って周期
的に送信されます。
本関数では最大 256byteまでのメッセージを送信できます。256byteより大きいメッセージを送
信する場合には DnetSetOutputIOEx関数を使用してください。
【書式】
●C言語
ULONG DnetSetOutputIO(
HANDLE deviceHandle,
PDNET_MESSAGE dnetMessage
);
●Visual Basic
Declare Function DnetSetOutputIO Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetMessage As DNET_MESSAGE
) As Long
●Delphi
function DnetSetOutputIO(
deviceHandle: THandle;
var dnetMessage: DNET_MESSAGE
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetMessage セットする DNET_MESSAGE構造体を指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
周期送信中に本関数を実行すると、次の周期から更新されたメッセージが送信されます。
DnetSendIO関数で送信するメッセージは、本関数の周期送信よりも優先して送信されます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
76
【注意事項】
1)複数のデバイスに対して周期送信を行っている場合に送信の周期が重なった時は、後に送
信するメッセージは前のメッセージが出されてから送信されます。
2)全く同時に送信周期が重なった場合は、下記の優先度に従い送信順番を決めます。(優先度
の高い方から低い方へ順番にメッセージが送信されます。)
・先に本関数を呼び出した方が優先度が高くなります。
・1)のように周期が重なって送信タイミングがずれた場合、そのメッセージの優先度は
その時点で最低になります。
・一度設定したメッセージを更新した場合は、優先度は変わりません。
A A
B B
300ms
250ms
A A
300ms
B B B
Aの送信後に
ずれる
周期が
重なっている
B
250ms 周期はここから
250msになる
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
77
【使用例】
●C言語
DNET_MESSAGE dnetMessage;
ULONG ret;
// MAC ID が 2 のデバイスに対して周期送信を行います。
dnetMessage.MessageType = DNET_IO_POLL;
dnetMessage.Length = 4;
dnetMessage.MacID = 2;
dnetMessage.Data[0] = 0;
dnetMessage.Data[1] = 1;
dnetMessage.Data[2] = 2;
dnetMessage.Data[3] = 3;
ret = DnetSetOutputIO(deviceHandle, &dnetMessage);
●Visual Basic
Dim dnetMessage As DNET_MESSAGE
Dim ret As Long
‘ MAC ID が 2 のデバイスに対して周期送信を行います。
dnetMessage.MessageType = DNET_IO_POLL
dnetMessage.Length = 4
dnetMessage.MacID = 2
dnetMessage.Data(0) = 0
dnetMessage.Data(1) = 1
dnetMessage.Data(2) = 2
dnetMessage.Data(3) = 3
ret = DnetSetOutputIO(deviceHandle, dnetMessage)
●Delphi
var
dnetMessage: DNET_MESSAGE;
ret: ULONG;
// MAC ID が 2 のデバイスに対して周期送信を行います。
dnetMessage.MessageType := DNET_IO_POLL;
dnetMessage.Length := 4;
dnetMessage.MacID := 2;
dnetMessage.Data[0] := 0;
dnetMessage.Data[1] := 1;
dnetMessage.Data[2] := 2;
dnetMessage.Data[3] := 3;
ret := DnetSetOutputIO(deviceHandle, dnetMessage);
送信メッセージをセットします。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
78
20. DnetSetOutputIOEx
【機能】
周期送信する I/O メッセージの送信メッセージをセットし送信を開始します。
DnetSetConfig関数、またはネットワーク情報設定ユーティリティで設定した条件に従って周期
的に送信されます。
本関数では最大 512byte までのメッセージを送信できます。
【書式】
●C言語
ULONG DnetSetOutputIOEx(
HANDLE deviceHandle,
PDNET_MESSAGE_EX dnetMessageEx
);
●Visual Basic
Declare Function DnetSetOutputIOEx Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetMessageEx As DNET_MESSAGE_EX
) As Long
●Delphi
function DnetSetOutputIOEx(
deviceHandle: THandle;
var dnetMessageEx: DNET_MESSAGE_EX
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetMessageEx セットする DNET_MESSAGE_EX構造体を指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
周期送信中に本関数を実行すると、次の周期から更新されたメッセージが送信されます。
DnetSendIO関数で送信するメッセージは、本関数の周期送信よりも優先して送信されます。
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ PCI-487101PQ[12]C10 以降の製品
・ CTP-487101PQ[12]C02 以降の製品
・ CPZ-487101PQ[12]C01 以降の製品
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
79
【注意事項】
1)複数のデバイスに対して周期送信を行っている場合に送信の周期が重なった時は、後に送
信するメッセージは前のメッセージが出されてから送信されます。
2)全く同時に送信周期が重なった場合は、下記の優先度に従い送信順番を決めます。(優先度
の高い方から低い方へ順番にメッセージが送信されます。)
・先に本関数を呼び出した方が優先度が高くなります。
・1)のように周期が重なって送信タイミングがずれた場合、そのメッセージの優先度は
その時点で最低になります。
・一度設定したメッセージを更新した場合は、優先度は変わりません。
A A
B B
300ms
250ms
A A
300ms
B B B
Aの送信後に
ずれる
周期が
重なっている
B
250ms 周期はここから
250msになる
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
80
【使用例】
●C言語
DNET_MESSAGE_EX dnetMessageEx;
ULONG ret;
// MAC ID が 2 のデバイスに対して周期送信を行います。
dnetMessageEx.MessageType = DNET_IO_POLL;
dnetMessageEx.Length = 4;
dnetMessageEx.MacID = 2;
dnetMessageEx.Data[0] = 0;
dnetMessageEx.Data[1] = 1;
dnetMessageEx.Data[2] = 2;
dnetMessageEx.Data[3] = 3;
ret = DnetSetOutputIOEx(deviceHandle, &dnetMessageEx);
●Visual Basic
Dim dnetMessageEx As DNET_MESSAGE_EX
Dim ret As Long
‘ MAC ID が 2 のデバイスに対して周期送信を行います。
dnetMessageEx.MessageType = DNET_IO_POLL
dnetMessageEx.Length = 4
dnetMessageEx.MacID = 2
dnetMessageEx.Data(0) = 0
dnetMessageEx.Data(1) = 1
dnetMessageEx.Data(2) = 2
dnetMessageEx.Data(3) = 3
ret = DnetSetOutputIOEx(deviceHandle, dnetMessageEx)
●Delphi
var
dnetMessageEx: DNET_MESSAGE_EX;
ret: ULONG;
// MAC ID が 2 のデバイスに対して周期送信を行います。
dnetMessageEx.MessageType := DNET_IO_POLL;
dnetMessageEx.Length := 4;
dnetMessageEx.MacID := 2;
dnetMessageEx.Data[0] := 0;
dnetMessageEx.Data[1] := 1;
dnetMessageEx.Data[2] := 2;
dnetMessageEx.Data[3] := 3;
ret := DnetSetOutputIOEx(deviceHandle, dnetMessageEx);
送信メッセージをセットします。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
81
21. DnetGetInputIO
【機能】
受信した I/O メッセージを取り出します。
本関数では最大 256byteまでのメッセージを取り出せます。受信したメッセージが 256byteより
大きい場合は DnetGetInputIOEx関数を使用してください。
【書式】
●C言語
ULONG DnetGetInputIO(
HANDLE deviceHandle,
PDNET_MESSAGE dnetMessage
);
●Visual Basic
Declare Function DnetGetInputIO Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetMessage As DNET_MESSAGE
) As Long
●Delphi
function DnetGetInputIO(
deviceHandle: THandle;
var dnetMessage: DNET_MESSAGE
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetMessage 受信メッセージを格納する DNET_MESSAGE構造体を指定してください。
関数が正常終了すると、受信メッセージが DNET_MESSAGE構造体に格納されます。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
デバイス内の受信バッファから、受信メッセージを取り出します。
最新のメッセージかどうかを確認するためには、DnetGetSlaveStatus関数を用い、目的のI/O
メッセージの受信タイムスタンプを確認してください。受信メッセージの上書きがあった場合、
その時のタイムスタンプが記録されていますので、ここの値に変化がない場合は、新しいメッ
セージは受信されていないということになります。
一度もメッセージを受信していない状態で本関数を呼び出すと、IFDNET_ERROR_NO_DATA を返し
エラー終了します。
一度でもメッセージを受信すると、更新されるまで同じメッセージを取得できます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
82
受信しているメッセージが 256byte より大きい場合に、本関数を実行するとメッセージの
256byte 目まで取得できますが、257byte 目以降のデータは取得できません。
【使用例】
●C言語
DNET_MESSAGE dnetMessage;
// 受信メッセージの取り出し
dnetMessage.MessageType = DNET_IO_POLL;
dnetMessage.MacID = 2;
ret = DnetGetInputIO(deviceHandle, &dnetMessage);
●Visual Basic
Dim dnetMessage As DNET_MESSAGE
Dim ret As Long
‘ 受信メッセージの取り出し
dnetMessage.MessageType = DNET_IO_POLL
dnetMessage.MacID = 2
ret = DnetGetInputIO(deviceHandle, dnetMessage)
●Delphi
var
dnetMessage: DNET_MESSAGE;
ret: ULONG;
// 受信メッセージの取り出し
dnetMessage.MessageType := DNET_IO_POLL;
dnetMessage.MacID := 2;
ret := DnetGetInputIO(deviceHandle, dnetMessage);
MAC ID が 2 のデバイスからの Poll 受信メッセージを取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
83
22. DnetGetInputIOEx
【機能】
受信した I/O メッセージを取り出します。
本関数では最大 512byte までのメッセージを取り出せます。
【書式】
●C言語
ULONG DnetGetInputIOEx(
HANDLE deviceHandle,
PDNET_MESSAGE_EX dnetMessageEx
);
●Visual Basic
Declare Function DnetGetInputIOEx Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetMessageEx As DNET_MESSAGE_EX
) As Long
●Delphi
function DnetGetInputIOEx(
deviceHandle: THandle;
var dnetMessageEx: DNET_MESSAGE_EX
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetMessageEx 受信メッセージを格納する DNET_MESSAGE_EX構造体を指定してください。
関数が正常終了すると、受信メッセージが DNET_MESSAGE_EX構造体に格納されます。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
デバイス内の受信バッファから、受信メッセージを取り出します。
最新のメッセージかどうかを確認するためには、DnetGetSlaveStatus関数を用い、目的のI/O
メッセージの受信タイムスタンプを確認してください。受信メッセージの上書きがあった場合、
その時のタイムスタンプが記録されていますので、ここの値に変化がない場合は、新しいメッ
セージは受信されていないということになります。
一度もメッセージを受信していない状態で本関数を呼び出すと、IFDNET_ERROR_NO_DATA を返し
エラー終了します。
一度でもメッセージを受信すると、更新されるまで同じメッセージを取得できます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
84
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ PCI-487101PQ[12]C10 以降の製品
・ CTP-487101PQ[12]C02 以降の製品
・ CPZ-487101PQ[12]C01 以降の製品
【使用例】
●C言語
DNET_MESSAGE_EX dnetMessageEx;
// 受信メッセージの取り出し
dnetMessageEx.MessageType = DNET_IO_POLL;
dnetMessageEx.MacID = 2;
ret = DnetGetInputIOEx(deviceHandle, &dnetMessageEx);
●Visual Basic
Dim dnetMessageEx As DNET_MESSAGE_EX
Dim ret As Long
‘ 受信メッセージの取り出し
dnetMessageEx.MessageType = DNET_IO_POLL
dnetMessageEx.MacID = 2
ret = DnetGetInputIOEx(deviceHandle, dnetMessageEx)
●Delphi
var
dnetMessageEx: DNET_MESSAGE_EX;
ret: ULONG;
// 受信メッセージの取り出し
dnetMessageEx.MessageType := DNET_IO_POLL;
dnetMessageEx.MacID := 2;
ret := DnetGetInputIOEx(deviceHandle, dnetMessageEx);
MAC ID が 2 のデバイスからの Poll 受信メッセージを取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
85
23. DnetSendExplicit
【機能】
Explicit メッセージの送信を行います。
本関数では最大 256byteまでのメッセージを送信できます。256byteより大きいメッセージを送
信する場合には DnetSendExplicitEx関数を使用してください。
【書式】
●C言語
ULONG DnetSendExplicit(
HANDLE deviceHandle,
PDNET_EXPLICIT dnetExplicit
);
●Visual Basic
Declare Function DnetSendExplicit Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetExplicit As DNET_EXPLICIT
) As Long
●Delphi
function DnetSendExplicit(
deviceHandle: THandle;
var dnetExplicit: DNET_EXPLICIT
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetExplicit セットする DNET_EXPLICIT構造体を指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
送信が完了したかどうかは、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定するこ
とで全ての送信が完了した時点で割り込みを発生させることが出来ます(イベント/メッセージ
/コールバック関数)。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
86
【使用例】
●C言語
DNET_EXPLICIT dnetExplicit;
ULONG ret;
// MAC ID が 2 のデバイスに対して
// Explicit メッセージ(リクエスト)を送信します。
dnetExplicit.MessageType = DNET_EXPLICIT_REQUEST;
dnetExplicit.MacID = 2;
dnetExplicit.ServiceCode = 0x0E;
dnetExplicit.ClassID = 5;
dnetExplicit.InstanceID = 2;
dnetExplicit.Length = 1;
dnetExplicit.Data[0] = 9;
// 送信メッセージのセット
ret = DnetSendExplicit(deviceHandle, &dnetExplicit);
●Visual Basic
Dim dnetExplicit As DNET_EXPLICIT
Dim ret As Long
‘ MAC ID が 2 のデバイスに対して
‘ Explicit メッセージ(リクエスト)を送信します。
dnetExplicit.MessageType = DNET_EXPLICIT_REQUEST
dnetExplicit.MacID = 2
dnetExplicit.ServiceCode = &HE
dnetExplicit.ClassID = 5
dnetExplicit.InstanceID = 2
dnetExplicit.Length = 1
dnetExplicit.Data(0) = 9
‘ 送信メッセージのセット
ret = DnetSendExplicit(deviceHandle, dnetExplicit)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
87
●Delphi
var
dnetExplicit: DNET_EXPLICIT;
ret: ULONG;
// MAC ID が 2 のデバイスに対して
// Explicit メッセージ(リクエスト)を送信します。
dnetExplicit.MessageType := DNET_EXPLICIT_REQUEST;
dnetExplicit.MacID := 2;
dnetExplicit.ServiceCode := $E;
dnetExplicit.ClassID := 5;
dnetExplicit.InstanceID := 2;
dnetExplicit.Length := 1;
dnetExplicit.Data[0] := 9;
// 送信メッセージのセット
ret := DnetSendExplicit(deviceHandle, dnetExplicit);
Explicit メッセージを送信します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
88
24. DnetSendExplicitEx
【機能】
Explicit メッセージの送信を行います。
本関数では最大 512byte までのメッセージを送信できます。
【書式】
●C言語
ULONG DnetSendExplicitEx(
HANDLE deviceHandle,
PDNET_EXPLICIT_EX dnetExplicitEx
);
●Visual Basic
Declare Function DnetSendExplicitEx Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetExplicitEx As DNET_EXPLICIT_EX
) As Long
●Delphi
function DnetSendExplicitEx(
deviceHandle: THandle;
var dnetExplicitEx: DNET_EXPLICIT_EX
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetExplicitEx セットする DNET_EXPLICIT_EX構造体を指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
送信が完了したかどうかは、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定するこ
とで全ての送信が完了した時点で割り込みを発生させることが出来ます(イベント/メッセージ
/コールバック関数)。
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ PCI-487101PQ[12]C10 以降の製品
・ CTP-487101PQ[12]C02 以降の製品
・ CPZ-487101PQ[12]C01 以降の製品
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
89
【使用例】
●C言語
DNET_EXPLICIT_EX dnetExplicitEx;
ULONG ret;
// MAC ID が 2 のデバイスに対して
// Explicit メッセージ(リクエスト)を送信します。
dnetExplicitEx.MessageType = DNET_EXPLICIT_REQUEST;
dnetExplicitEx.MacID = 2;
dnetExplicitEx.ServiceCode = 0x0E;
dnetExplicitEx.ClassID = 5;
dnetExplicitEx.InstanceID = 2;
dnetExplicitEx.Length = 1;
dnetExplicitEx.Data[0] = 9;
// 送信メッセージのセット
ret = DnetSendExplicitEx(deviceHandle, &dnetExplicitEx);
●Visual Basic
Dim dnetExplicitEx As DNET_EXPLICIT_EX
Dim ret As Long
‘ MAC ID が 2 のデバイスに対して
‘ Explicit メッセージ(リクエスト)を送信します。
dnetExplicitEx.MessageType = DNET_EXPLICIT_REQUEST
dnetExplicitEx.MacID = 2
dnetExplicitEx.ServiceCode = &HE
dnetExplicitEx.ClassID = 5
dnetExplicitEx.InstanceID = 2
dnetExplicitEx.Length = 1
dnetExplicitEx.Data(0) = 9
‘ 送信メッセージのセット
ret = DnetSendExplicitEx(deviceHandle, dnetExplicitEx)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
90
●Delphi
var
dnetExplicitEx: DNET_EXPLICIT_EX;
ret: ULONG;
// MAC ID が 2 のデバイスに対して
// Explicit メッセージ(リクエスト)を送信します。
dnetExplicitEx.MessageType := DNET_EXPLICIT_REQUEST;
dnetExplicitEx.MacID := 2;
dnetExplicitEx.ServiceCode := $E;
dnetExplicitEx.ClassID := 5;
dnetExplicitEx.InstanceID := 2;
dnetExplicitEx.Length := 1;
dnetExplicitEx.Data[0] := 9;
// 送信メッセージのセット
ret := DnetSendExplicitEx(deviceHandle, dnetExplicitEx);
Explicit メッセージを送信します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
91
25. DnetReceiveExplicit
【機能】
受信した Explicit メッセージを取り出します。
本関数では最大 256byteまでのメッセージを取り出せます。受信したメッセージが 256byteより
大きい場合は DnetReceiveExplicitEx関数を使用してください。
【書式】
●C言語
ULONG DnetReceiveExplicit(
HANDLE deviceHandle,
PDNET_EXPLICIT dnetExplicit
);
●Visual Basic
Declare Function DnetReceiveExplicit Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetExplicit As DNET_EXPLICIT
) As Long
●Delphi
function DnetReceiveExplicit(
deviceHandle: THandle;
var dnetExplicit: DNET_EXPLICIT
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetExplicit 受信メッセージを格納する DNET_EXPLICIT構造体を指定して下さい。
関数が正常終了すると、受信メッセージが DNET_EXPLICIT構造体に格納されます。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
デバイス内の受信バッファから、受信メッセージを取り出します。
一度もメッセージを受信していない状態で本関数を呼び出すと、IFDNET_ERROR_NO_DATA を返し
エラー終了します。
一度でもメッセージを受信すると、メッセージが更新されるまで同じメッセージを取得できま
す。
動作モードをマスタモード+Explicit メッセージバッファ拡張に設定した場合、Explicit メッ
セージをスレーブ毎に受信できます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
92
通常は、次のように送信と受信を交互に受信する必要があります。
スレーブ①への送信→スレーブ①からの受信→スレーブ②への送信→スレーブ②からの受信
→スレーブ③への送信→スレーブ③からの受信
バッファ拡張を行うと、各スレーブへの連続送信と受信ができます。
スレーブ①への送信→スレーブ②への送信→スレーブ③への送信→スレーブ①からの受信→
スレーブ②からの受信→スレーブ③からの受信
但し、どちらの場合でも同一スレーブへの連続送信はできません。連続送信した場合には、最
新の受信データしか取得できません。
受信しているメッセージが 256byte より大きい場合に、本関数を実行するとメッセージの
256byte 目まで取得できますが、257byte 目以降のデータは取得できません。
【使用例】
●C言語
DNET_EXPLICIT dnetExplicit;
// 受信メッセージの取り出し
ret = DnetReceiveExplicit(deviceHandle, &dnetExplicit);
// 動作モードをマスタモード+Explicit メッセージバッファ拡張に設定した場合
// MAC ID が 1 のスレーブからの受信メッセージの取り出し
dnetExplicit.MacID = 1;
ret = DnetReceiveExplicit(deviceHandle, &dnetExplicit);
●Visual Basic
Dim dnetExplicit As DNET_EXPLICIT
‘ 受信メッセージの取り出し
ret = DnetReceiveExplicit(deviceHandle, dnetExplicit)
‘ 動作モードをマスタモード+Explicit メッセージバッファ拡張に設定した場合
‘ MAC ID が 1 のスレーブからの受信メッセージの取り出し
dnetExplicit.MacID = 1
ret = DnetReceiveExplicit(deviceHandle, dnetExplicit)
●Delphi
var
dnetExplicit: DNET_EXPLICIT;
// 受信メッセージの取り出し
ret := DnetReceiveExplicit(deviceHandle, dnetExplicit);
// 動作モードをマスタモード+Explicit メッセージバッファ拡張に設定した場合
// MAC ID が 1 のスレーブからの受信メッセージの取り出し
dnetExplicit.MacID := 1;
ret := DnetReceiveExplicit(deviceHandle, &dnetExplicit);
Explicit 受信メッセージを取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
93
26. DnetReceiveExplicitEx
【機能】
受信した Explicit メッセージを取り出します。
本関数では最大 512byte までのメッセージを取り出せます。
【書式】
●C言語
ULONG DnetReceiveExplicitEx(
HANDLE deviceHandle,
PDNET_EXPLICIT_EX dnetExplicitEx
);
●Visual Basic
Declare Function DnetReceiveExplicitEx Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetExplicitEx As DNET_EXPLICIT_EX
) As Long
●Delphi
function DnetReceiveExplicitEx(
deviceHandle: THandle;
var dnetExplicitEx: DNET_EXPLICIT_EX
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetExplicitEx 受信メッセージを格納する DNET_EXPLICIT_EX構造体を指定して下さい。
関数が正常終了すると、受信メッセージが DNET_EXPLICIT_EX構造体に格納されます。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
デバイス内の受信バッファから、受信メッセージを取り出します。
一度もメッセージを受信していない状態で本関数を呼び出すと、IFDNET_ERROR_NO_DATA を返し
エラー終了します。
一度でもメッセージを受信すると、メッセージが更新されるまで同じメッセージを取得できま
す。
動作モードをマスタモード+Explicit メッセージバッファ拡張に設定した場合、Explicit メッ
セージをスレーブ毎に受信できます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
94
通常は、次のように送信と受信を交互に受信する必要があります。
スレーブ①への送信→スレーブ①からの受信→スレーブ②への送信→スレーブ②からの受信
→スレーブ③への送信→スレーブ③からの受信
バッファ拡張を行うと、各スレーブへの連続送信と受信ができます。
スレーブ①への送信→スレーブ②への送信→スレーブ③への送信→スレーブ①からの受信→
スレーブ②からの受信→スレーブ③からの受信
但し、どちらの場合でも同一スレーブへの連続送信はできません。連続送信した場合には、最
新の受信データしか取得できません。
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ PCI-487101PQ[12]C10 以降の製品
・ CTP-487101PQ[12]C02 以降の製品
・ CPZ-487101PQ[12]C01 以降の製品
【使用例】
●C言語
DNET_EXPLICIT_EX dnetExplicitEx;
// 受信メッセージの取り出し
ret = DnetReceiveExplicitEx(deviceHandle, &dnetExplicitEx);
// 動作モードをマスタモード+Explicit メッセージバッファ拡張に設定した場合
// MAC ID が 1 のスレーブからの受信メッセージの取り出し
dnetExplicitEx.MacID = 1;
ret = DnetReceiveExplicitEx(deviceHandle, &dnetExplicitEx);
●Visual Basic
Dim dnetExplicitEx As DNET_EXPLICIT_EX
‘ 受信メッセージの取り出し
ret = DnetReceiveExplicitEx(deviceHandle, dnetExplicitEx)
‘ 動作モードをマスタモード+Explicit メッセージバッファ拡張に設定した場合
‘ MAC ID が 1 のスレーブからの受信メッセージの取り出し
dnetExplicitEx.MacID = 1
ret = DnetReceiveExplicitEx(deviceHandle, dnetExplicitEx)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
95
●Delphi
var
dnetExplicitEx: DNET_EXPLICIT_EX;
// 受信メッセージの取り出し
ret := DnetReceiveExplicitEx(deviceHandle, dnetExplicitEx);
// 動作モードをマスタモード+Explicit メッセージバッファ拡張に設定した場合
// MAC ID が 1 のスレーブからの受信メッセージの取り出し
dnetExplicitEx.MacID := 1;
ret := DnetReceiveExplicitEx(deviceHandle, &dnetExplicitEx);
Explicit 受信メッセージを取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
96
27. DnetGetAccumulatedMessage
【機能】
蓄積型受信バッファから受信メッセージを取り出します。
本関数では最大 256byteまでのメッセージを取り出せます。受信したメッセージが 256byteより
大きい場合は DnetGetAccumulatedMessageEx関数を使用してください。
【書式】
●C言語
ULONG DnetGetAccumulatedMessage(
HANDLE deviceHandle,
PDNET_MESSAGE dnetMessage,
PULONG count
);
●Visual Basic
Declare Function DnetGetAccumulatedMessage Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetMessage As DNET_MESSAGE,
ByRef count As Long
) As Long
●Delphi
function DnetGetAccumulatedMessage(
deviceHandle: THandle;
var dnetMessage: DNET_MESSAGE;
var count: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetMessage 取得する受信メッセージを格納する DNET_MESSAGE構造体を指定してください。
countで指定したメッセージ数分だけの領域を確保して下さい。
count 取得したいメッセージ数を格納した変数を指定します。
関数が正常終了すると、実際に取得できたメッセージ数が格納されます。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
97
【備考】
通常のデバイス上の受信バッファとは別に、全 I/O メッセージを格納する蓄積型受信バッファ
が存在します。その蓄積型受信バッファからメッセージを取り出します。
蓄えられた I/O メッセージが無い場合、戻り値で、IFDNET_ERROR_NO_DATA が返されます。
受信メッセージがあるかどうかは、DnetGetPortStatus関数で蓄積型受信バッファの状態を見る
ことで確認できます。
また、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定することで、バッファが空の
状態でメッセージを受信した時点と、メッセージを受信してバッファに空きが無くなった時点
でイベントを発生させることができます。
受信しているメッセージが 256byte より大きい場合に、本関数を実行するとメッセージの
256byte 目まで取得できますが、257byte 目以降のデータは取得できません。
【使用例】
●C言語
DNET_MESSAGE dnetMessage[10];
ULONG count, ret;
// 受信メッセージの取り出し
count = 10;
ret = DnetGetAccumulatedMessage(deviceHandle, &dnetMessage[0], &count);
●Visual Basic
Dim dnetMessage(0 To 9) As DNET_MESSAGE
Dim count As Long
Dim ret As Long
‘ 受信メッセージの取り出し
count = 10
ret = DnetGetAccumulatedMessage(deviceHandle, dnetMessage(0), count)
●Delphi
var
dnetMessage; array[0..9] of DNET_MESSAGE;
count: ULONG;
ret: ULONG;
// 受信メッセージの取り出し
count := 10;
ret := DnetGetAccumulatedMessage(deviceHandle, dnetMessage[0], count);
蓄積型受信バッファから 10 個のメッセージを取り出します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
98
28. DnetGetAccumulatedMessageEx
【機能】
蓄積型受信バッファから受信メッセージを取り出します。
本関数では最大 512byte までのメッセージを取り出せます。
【書式】
●C言語
ULONG DnetGetAccumulatedMessageEx(
HANDLE deviceHandle,
PDNET_MESSAGE_EX dnetMessageEx,
PULONG count
);
●Visual Basic
Declare Function DnetGetAccumulatedMessageEx Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetMessageEx As DNET_MESSAGE_EX,
ByRef count As Long
) As Long
●Delphi
function DnetGetAccumulatedMessageEx(
deviceHandle: THandle;
var dnetMessageEx: DNET_MESSAGE_EX;
var count: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetMessageEx 取得する受信メッセージを格納する DNET_MESSAGE_EX構造体を指定してください。
countで指定したメッセージ数分だけの領域を確保して下さい。
count 取得したいメッセージ数を格納した変数を指定します。
関数が正常終了すると、実際に取得できたメッセージ数が格納されます。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
99
【備考】
通常のデバイス上の受信バッファとは別に、全 I/O メッセージを格納する蓄積型受信バッファ
が存在します。その蓄積型受信バッファからメッセージを取り出します。
蓄えられたI/Oメッセージが無い場合、戻り値で、IFDNET_ERROR_NO_DATAが返されます。受信メ
ッセージがあるかどうかは、DnetGetPortStatus関数で蓄積型受信バッファの状態を見ることで
確認できます。
また、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定することで、バッファが空の
状態でメッセージを受信した時点と、メッセージを受信してバッファに空きが無くなった時点
でイベントを発生させることができます。
本関数は、使用する製品の版数とチェンジナンバーにより使用できないことがあります。
以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.5 製
品の版数、チェンジナンバーについて』をご参照ください。
・ PCI-487101PQ[12]C10 以降の製品
・ CTP-487101PQ[12]C02 以降の製品
・ CPZ-487101PQ[12]C01 以降の製品
【使用例】
●C言語
DNET_MESSAGE_EX dnetMessageEx[10];
ULONG count, ret;
// 受信メッセージの取り出し
count = 10;
ret = DnetGetAccumulatedMessageEx(deviceHandle, &dnetMessageEx[0], &count);
●Visual Basic
Dim dnetMessageEx(0 To 9) As DNET_MESSAGE_EX
Dim count As Long
Dim ret As Long
‘ 受信メッセージの取り出し
count = 10
ret = DnetGetAccumulatedMessageEx(deviceHandle, dnetMessageEx(0), count)
●Delphi
var
dnetMessageEx; array[0..9] of DNET_MESSAGE_EX;
count: ULONG;
ret: ULONG;
// 受信メッセージの取り出し
count := 10;
ret := DnetGetAccumulatedMessageEx(deviceHandle, dnetMessageEx[0], count);
蓄積型受信バッファから 10 個のメッセージを取り出します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
100
29. DnetGetPortStatus
【機能】
DeviceNet インタフェースの現在の状態を取得します。
【書式】
●C言語
ULONG DnetGetStatus(
HANDLE deviceHandle,
PDNET_PORT_STATUS portStatus
);
●Visual Basic
Declare Function DnetGetPortStatus Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef portStatus As DNET_PORT_STATUS
) As Long
●Delphi
function DnetGetPortStatus(
deviceHandle: THandle;
var portStatus: DNET_PORT_STATUS
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
portStatus ステータス情報を格納する DNET_PORT_STATUS構造体を指定してください。
詳細は『4.3 構造体説明』をご覧下さい。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【使用例】
●C言語
HANDLE deviceHandle;
DNET_PORT_STATUS status;
ULONG ret;
deviceHandle = DnetOpenPort(“IFDNET1”); :
:
ret = DnetGetPortStatus(deviceHandle, &status);
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
101
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
Dim status As DNET_PORT_STATUS
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
:
ret = DnetGetPortStatus(deviceHandle, status)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
status: DNET_PORT_STATUS;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetGetPortStatus(deviceHandle, status);
デバイス名「IFDNET1」のデバイスのステータスを取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
102
30. DnetGetSlaveStatus
【機能】
接続されたスレーブデバイスの現在の状態を取得します。
【書式】
●C言語
ULONG DnetGetSlaveStatus(
HANDLE deviceHandle,
ULONG macID,
PDNET_SLAVE_STATUS slaveStatus
);
●Visual Basic
Declare Function DnetGetSlaveStatus Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal macID As Byte,
ByRef slaveStatus As DNET_SLAVE_STATUS
) As Long
●Delphi
function DnetGetSlaveStatus(
deviceHandle: THandle;
macID: BYTE;
var slaveStatus: DNET_SLAVE_STATUS
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
macID 取得したいスレーブデバイスのMAC IDを指定してください。
自ポートのMAC IDを指定した場合、接続されている全スレーブデバイスの情報を取得する
ことができます。この場合、slaveStatusには DNET_SLAVE_STATUS構造体 64 個分の領域を確
保してください。
slaveStatus スレーブステータス情報を格納する DNET_SLAVE_STATUS構造体を指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
本関数は自ポートがマスタモードの時のみ使用できます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
103
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
DNET_SLAVE_STATUS slaveStatus[64];
deviceHandle = DnetOpenPort(“IFDNET1”); :
:
ret = DnetGetSlaveStatus(deviceHandle, 0, &SlaveStatus[0]);
●Visual Basic
Dim ret As Long
Dim deviceHandle As Long
Dim deviceName As String
Dim slaveStatus(0 To 63) As DNET_SLAVE_STATUS
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
:
ret = DnetGetSlaveStatus(deviceHandle, 0, SlaveStatus(0))
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
slaveStatus: array[0..63] ofDNET_SLAVE_STATUS;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
:
ret := DnetGetSlaveStatus(deviceHandle, 0, SlaveStatus[0]);
デバイス名「IFDNET1」のデバイスの自ポートの MAC ID を指定することにより、接続されてい
る全スレーブステータスの情報を取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
104
31. DnetGetErrorEvent
【機能】
エラー情報バッファに蓄えられたエラー情報を取得します。
【書式】
●C言語
INT DnetGetErrorEvent(
HANDLE deviceHandle,
PDNET_ERROR dnetError,
PULONG count
);
●Visual Basic
Declare Function DnetGetErrorEvent Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef dnetError As DNET_ERROR,
ByRef count As Long
) As Long
●Delphi
function DnetGetErrorEvent(
deviceHandle: THandle;
var dnetError: DNET_ERROR;
var count: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
dnetError エラー情報を格納する DNET_ERROR構造体を指定します。
詳細は『4.3 構造体説明』をご参照ください。
count エラー情報バッファから取り出すエラー情報の件数を指定してください。
関数正常終了時、実際に取得できたエラー情報件数が格納されます。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
何個のエラー情報が蓄えられているかは、DnetGetPortStatus関数で取得することができます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
105
【使用例】
●C言語
DNET_ERROR dnetError;
ULONG count, ret;
count = 1;
// エラー情報の取得
ret = DnetGetErrorEvent(deviceHandle, &dnetError, &count);
●Visual Basic
Dim dnetError As DNET_ERROR
Dim count As Long
Dim ret As Long
count = 1
‘ エラー情報の取得
ret = DnetGetErrorEvent(deviceHandle, dnetError, count)
●Delphi
var
dnetError: DNET_ERROR;
count: ULONG;
ret: ULONG;
count := 1;
// エラー情報の取得
ret := DnetGetErrorEvent(deviceHandle, dnetError, count);
1 件のイベント情報を取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
106
32. DnetClearBuffer
【機能】
指定したバッファをクリアします。
また、タイマカウンタをクリアする場合も本関数を使用します。
【書式】
●C言語
ULONG DnetClearBuffer(
HANDLE deviceHandle,
DWORD clearBuffer
);
●Visual Basic
Declare Function DnetClearBuffer Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal clearBuffer As Long
) As Long
●Delphi
function DnetClearBuffer(
deviceHandle: THandle;
clearBuffer: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
clearBuffer クリアするバッファを指定します。複数のバッファを OR で指定できます。
識別子 値 内容
DNET_CLEAR_RXB 00000002h 蓄積型受信バッファをクリアします。
DNET_CLEAR_TIMERCOUNTER 00000001h 内部カウンタをクリアします。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
107
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”); :
:
ret = DnetClearBuffer(deviceHandle, DNET_CLEAR_RXB);
●Visual Basic
Dim deviceHandle As Long
Dim deviceName As String
Dim ret As Long
deviceName = “IFDNET1” & Char(0) deviceHandle = DnetOpenPort(deviceName)
:
ret = DnetClearBuffer(deviceHandle, DNET_CLEAR_RXB)
●Delphi
var
deviceName: String;
deviceHandle: Thandle;
ret: ULONG;
deviceName := ‘IFDNET1’; deviceHandle := DnetOpenPort(deviceName);
:
ret := DnetClearBuffer(deviceHandle, DNET_CLEAR_RXB);
デバイス名「IFDNET1」のデバイスの蓄積型受信バッファをクリアします。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
108
33. DnetGetNetworkPower
【機能】
ネットワーク電源電圧値を取得します。
また、ネットワーク電源電圧下限イベント、ネットワーク電源電圧上限イベントが発生後に、
再度ネットワーク電源電圧下限イベント、ネットワーク電源電圧上限イベントを発生させるた
めに本関数を呼び出す必要があります。
【書式】
●C言語
ULONG DnetPowerGetNetworkPower (
HANDLE deviceHandle,
float* networkPower
);
●Visual Basic
Declare Function DnetGetNetworkPower Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef networkPower As Single
) As Long
●Delphi
function DnetGetNetworkPower(
deviceHandle: THandle;
var networkPower: Single
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
networkPower 現在のネットワーク電源電圧値を取得します。
取得できる範囲は 0.5[V]~25.7[V]ですが、実際のネットワーク電源電圧が 0.5[V]より小
さい場合は、全て 0.5[V]として取得されます。また、実際のネットワーク電源電圧が 25.7[V]
以上の場合は、全て 25.7[V]として取得されます。誤差は±0.5[V]です。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【注意事項】
DNET_EVENT_POWER_UPPER イベントと、DNET_EVENT_POWER_LOWER イベントは一度発生すると、本
関数を呼び出すまでは次のイベントは発生しません。例えば、DNET_EVENT_POWER_UPPER イベン
トが発生後、本関数を呼び出すまでは DNET_EVENT_POWER_LOWER イベントも発生しません。
イベント発生後、本関数を呼び出すと、再度 DNET_EVENT_POWER_UPPER イベントと、
DNET_EVENT_POWER_LOWER イベントが発生するようになります。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
109
【使用例】
●C言語
ULONG ret;
float networkPower;
ret = DnetGetNetworkPower(deviceHandle, &networkPower);
●Visual Basic
Dim ret As Long
Dim networkPower As Single
ret = DnetGetNetworkPower(deviceHandle, networkPower)
●Delphi
var
ret: ULONG;
networkPower: Single;
ret := DnetGetNetworkPower(deviceHandle, networkPower);
ネットワーク電源モジュールからネットワーク電源電圧値を取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
110
34. DnetSetEvent
【機能】
割り込み(イベント/メッセージ/コールバック関数)の設定を行います。
【書式】
●C言語
ULONG DnetSetEvent(
HANDLE deviceHandle,
PDNET_EVENT_REQ eventReq
);
●Visual Basic
Declare Function DnetSetEvent Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef eventReq As DNET_EVENT_REQ
) As Long
●Delphi
function DnetSetEvent(
deviceHandle: THandle;
var eventReq: DNET_EVENT_REQ
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
eventReq 割り込み発生時に呼び出されるコールバック関数、メッセージ等の設定を行う
DNET_EVENT_REQ構造体を指定します。
詳細は『4.3 構造体説明』をご参照ください。
【戻り値】
正常終了した場合は、DNET_ERROR_SUCCESSが返されます。
DNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
111
【備考】
●コールバック関数の書式
コールバック関数の書式は以下のとおりです。関数名(ここでは lpCallBack)は任意です。
VOID CALLBACK lpCallBack(
DWORD event, // コールバック関数発生要因
DWORD user // ユーザデータ
};
【パラメータ】
event コールバック関数発生要因です。
コールバック関数が発生した要因が渡されます。
識別子 値 内容
DNET_EVENT_RECV_EXP 02000000h Explicit メッセージを受信しました。
DNET_EVENT_RECV_IO 01000000h I/O メッセージを受信しました。
DNET_EVENT_POWER_UPPER 00020000h ネットワーク電源電圧値が上限値を上回りました。
DNET_EVENT_POWER_LOWER 00010000h ネットワーク電源電圧値が下限値を下回りました。
DNET_EVENT_COMPLETE 00008000h メッセージの送信が完了しました。
DNET_EVENT_STATUS 00004000h DeviceNet インタフェースの状態が遷移しました。
内容に応じて処理を行ってください。
DNET_EVENT_RECV 00001000h 蓄積型受信バッファに 1 つ以上の受信メッセージが
蓄えられました。
DNET_EVENT_ERROR 00000800h エラーバッファに 1 つ以上のエラーが蓄えられまし
た。
DNET_EVENT_RXB_FULL 00000200h 蓄積型受信バッファがいっぱいになりました。
DNET_EVENT_ERB_FULL 00000100h エラーバッファがいっぱいになりました。
また、コールバック発生要因と共に、発生した要因となるデバイスの MAC ID が下位 6ビッ
トに格納されます。例えば、自身の MAC ID が 3 で、DeviceNet インタフェースの状態が遷
移した場合は、event の値が 00004003h となります。
I/O メッセージの受信に関するイベントには、上位 4ビットにメッセージの種類が格納され
ます。
識別子 値 内容
DNET_EVENT_CYCLIC 80000000h Cyclic メッセージ
DNET_EVENT_COS 40000000h Change of State メッセージ
DNET_EVENT_BITSTROBE 20000000h BitStrobe メッセージ
DNET_EVENT_POLL 10000000h Poll メッセージ
user 割り込み設定時に指定したユーザデータです。
また、メッセージ機能を使用する場合、メッセージハンドラの WPARAM には event が、LPARAM
には user が渡されます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
112
【注意事項】
DNET_EVENT_POWER_UPPERイベントと、DNET_EVENT_POWER_LOWERイベントは一度発生すると、
DnetGetNetworkPower関数を呼び出すまでは次のイベントは発生しません。例えば、
DNET_EVENT_POWER_UPPERイベントが発生後、DnetGetNetworkPower関数を呼び出すまでは
DNET_EVENT_POWER_LOWERイベントも発生しません。
イベント発生後、DnetGetNetworkPower関数を呼び出すと、再度DNET_EVENT_POWER_UPPERイベン
トと、DNET_EVENT_POWER_LOWERイベントが発生するようになります。
【使用例】
●C 言語
// コールバック関数
VOID CALLBACK EventProc(DWORD event, DWORD user)
{
// 割り込み処理を記述します
・・・
}
・・・
// メインルーチン
DWORD eventMask;
DNET_EVENT_REQ eventReq;
// メッセージ受信時に割り込みが発生するようにマスクを設定します
eventMask = DNET_EVENT_RECV;
ret = DnetSetEventMask(deviceHandle, eventMask);
eventReq.Wnd = NULL;// メッセージは使用しません
eventReq.InterruptMsg = WM_NULL; // メッセージは使用しません
eventReq.CallBackProc = (LPDNETCALLBACK)lpEventProc;
eventReq.InterruptEvent = NULL; // イベントは使用しません
eventReq.UserData = 0x1234;
ret = DnetSetEvent(deviceHandle, &eventReq);
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
113
●Visual Basic
コールバックルーチンは DnetSetEvent 関数の呼び出しを行うプロジェクト内の標準モジュー
ルの中に記述しなければなりません。
DnetSetEvent 関数の引数パラメータでプロシージャのアドレスを渡す為に AddressOf 演算子
を使用します。
AddressOf 演算子を使うと、プロシージャからの戻り値ではなく、プロシージャ自体のアドレ
スが、ダイナミック リンク ライブラリ (DLL)の DnetSetEvent 関数に渡されます。
‘ コールバックルーチン
Sub EventProc(event As Long, userData As Long)
‘ 割り込み処理を記述します
:
End Sub
‘ コールバックルーチンのアドレス変換用関数
Function Trans(Proc As Long) As Long
Trans = Proc
End Function
‘ メインルーチン
Dim deviceName As String
Dim deviceHandle As Long
Dim eventReq As DNET_EVENT_REQ
Dim eventMask As Long
deviceName = "IFDNET1" & Chr( 0 )
deviceHandle = DnetOpenPort(deviceName)
:
:
eventMask = DNET_EVENT_RECV;
ret = DnetSetEventMask(deviceHandle, eventMask)
eventReq.Wnd = 0
eventReq.InterruptEvent = 0
eventReq.CallBackProc = Trans(AddressOf EventProc)
eventReq.InterruptMsg = 0
eventReq.UserData = &H1234
ret = DnetSetEvent(deviceHandle, eventReq)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
114
●Delphi
// コールバック関数
procedure EventProc(event: DWORD, userData: DWORD);
var
//変数定義
begin
// 割り込み処理を記述します
:
:
end;
// メインルーチン
var
deviceName: String;
deviceHandle: THandle;
event: DNET_EVENT_REQ;
eventMask: DWORD;
ret: Integer;
deviceName := 'IFDNET1';
deviceHandle := DnetOpenPort(deviceName);
:
:
eventMask := DNET_EVENT_RECV;
ret := DnetSetEventMask(deviceHandle, eventMask);
event.Wnd := 0;
event.InterruptEvent := 0;
event.CallBackProc := Addr(EventProc);
event.InterruptMsg := WM_NULL;
event.UserData := $1234;
ret := DnetSetEvent(deviceHandle, event);
メッセージ受信時にコールバック関数が呼び出されるように設定します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
115
35. DnetSetEventMask
【機能】
割り込みのマスク設定を行います。
【書式】
●C言語
ULONG DnetSetEventMask(
HANDLE deviceHandle,
DWORD eventMask
);
●Visual Basic
Declare Function DnetSetEventMask Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal eventMask As Long
) As Long
●Delphi
function DnetSetEventMask(
deviceHandle: THandle;
eventMask: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
eventMask 許可する割り込み要因をセットします。下記に示す識別子を指定すると、その割り込みが
発生するようになります。
識別子 値 内容
DNET_EVENT_RECV_EXP 02000000h Explicit メッセージを受信しました。
DNET_EVENT_RECV_IO 01000000h I/O メッセージを受信しました。
DNET_EVENT_POWER_UPPER 00020000h ネットワーク電源電圧値が上限値を上回りました。
DNET_EVENT_POWER_LOWER 00010000h ネットワーク電源電圧値が下限値を下回りました。
DNET_EVENT_COMPLETE 00008000h メッセージの送信が完了しました。
DNET_EVENT_STATUS 00004000h DeviceNet インタフェースの状態が遷移しました。
内容に応じて処理を行ってください。
DNET_EVENT_RECV 00001000h 蓄積型受信バッファに 1 つ以上の受信メッセージが
蓄えられました。
DNET_EVENT_ERROR 00000800h エラーバッファに 1 つ以上のエラーが蓄えられまし
た。
DNET_EVENT_RXB_FULL 00000200h 蓄積型受信バッファがいっぱいになりました。
DNET_EVENT_ERB_FULL 00000100h エラーバッファがいっぱいになりました。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
116
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”); :
:
ret = DnetSetEventMask(deviceHandle, DNET_EVENT_RECV_IO);
●Visual Basic
Dim deviceName As String
Dim deviceHandle As Long
deviceName = "IFDNET1" & Chr( 0 )
deviceHandle = DnetOpenPort(deviceName)
:
:
ret = DnetSetEventMask(deviceHandle, DNET_EVENT_RECV_IO)
●Delphi
var
deviceName: String;
deviceHandle: THandle;
ret: Integer;
deviceName := 'IFDNET1';
deviceHandle := DnetOpenPort(deviceName);
:
:
ret := DnetSetEventMask(deviceHandle, DNET_EVENT_RECV_IO);
デバイス名「IFDNET1」のデバイスの I/O メッセージ受信割り込みを許可します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
117
36. DnetGetEventMask
【機能】
割り込みのマスク値を取得します。
【書式】
●C言語
ULONG DnetGetEventMask(
HANDLE deviceHandle,
PDWORD eventMask
);
●Visual Basic
Declare Function DnetGetEventMask Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByRef eventMask As Long
) As Long
●Delphi
function DnetGetEventMask(
deviceHandle: THandle;
var eventMask: ULONG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
eventMask 現在設定されている割り込みマスク値が返されます。
識別子 値 内容
DNET_EVENT_RECV_EXP 02000000h Explicit メッセージを受信しました。
DNET_EVENT_RECV_IO 01000000h I/O メッセージを受信しました。
DNET_EVENT_POWER_UPPER 00020000h ネットワーク電源電圧値が上限値を上回りました。
DNET_EVENT_POWER_LOWER 00010000h ネットワーク電源電圧値が下限値を下回りました。
DNET_EVENT_COMPLETE 00008000h メッセージの送信が完了しました。
DNET_EVENT_STATUS 00004000h DeviceNet インタフェースの状態が遷移しました。
内容に応じて処理を行ってください。
DNET_EVENT_RECV 00001000h 蓄積型受信バッファに 1 つ以上の受信メッセージが
蓄えられました。
DNET_EVENT_ERROR 00000800h エラーバッファに 1 つ以上のエラーが蓄えられまし
た。
DNET_EVENT_RXB_FULL 00000200h 蓄積型受信バッファがいっぱいになりました。
DNET_EVENT_ERB_FULL 00000100h エラーバッファがいっぱいになりました。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
118
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
DWORD eventMask;
deviceHandle = DnetOpenPort(“IFDNET1”); :
:
ret = DnetGetEventMask(deviceHandle, &eventMask);
●Visual Basic
Dim deviceName As String
Dim deviceHandle As Long
Dim eventMask As Long
deviceName = "IFDNET1" & Chr( 0 )
deviceHandle = DnetOpenPort(deviceName)
:
:
ret = DnetGetEventMask(deviceHandle, eventMask)
●Delphi
var
deviceName: String;
deviceHandle: THandle;
eventMask: DWORD;
ret: Integer;
deviceName := 'IFDNET1';
deviceHandle := DnetOpenPort(deviceName);
:
:
ret := DnetGetEventMask(deviceHandle, eventMask);
デバイス名「IFDNET1」の割り込みマスク値を取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
119
37. DnetKillEvent
【機能】
割り込み発生時に起動するイベント/メッセージ/コールバック関数の解除を行います。
【書式】
●C言語
ULONG DnetKillEvent(
HANDLE deviceHandle
);
●Visual Basic
Declare Function DnetKillEvent Lib "IFDnet.DLL" (
ByVal deviceHandle As Long
) As Long
●Delphi
function DnetKillEvent(
deviceHandle: Thandle
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【使用例】
●C言語
ULONG ret;
HANDLE deviceHandle;
deviceHandle = DnetOpenPort(“IFDNET1”); :
:
ret = DnetKillEvent(deviceHandle);
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
120
●Visual Basic
Dim deviceName As String
Dim deviceHandle As Long
deviceName = "IFDNET1" & Chr( 0 )
deviceHandle = DnetOpenPort(deviceName)
:
:
ret = DnetKillEvent(deviceHandle)
●Delphi
deviceName: String;
deviceHandle: THandle;
ret: Integer;
deviceName := 'IFDNET1';
deviceHandle := DnetOpenPort(deviceName);
:
:
ret := DnetKillEvent(deviceHandle);
デバイス名「IFDNET1」のデバイスの割り込みを解除します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
121
38. DnetSetDeviceList
【機能】
他ポート情報をデバイスリストに登録します。
【書式】
●C言語
ULONG DnetSetDeviceList(
HANDLE deviceHandle,
ULONG macID,
PDNET_DEVICE_CONFIG deviceConfig
);
●Visual Basic
Declare Function DnetSetDeviceList Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal macID As Byte,
ByRef deviceConfig As DNET_DEVICE_CONFIG
) As Long
●Delphi
function DnetSetDeviceList(
deviceHandle: THandle;
macID: BYTE;
var deviceConfig: DNET_DEVICE_CONFIG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
macID 登録するデバイスの MAC ID を指定します。0~63 の範囲で指定してください。
deviceConfig デバイスの通信情報を設定する DNET_DEVICE_CONFIG構造体を指定します。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
122
【備考】
登録しようとしているデバイスと同じMAC IDのデバイスが既にデバイスリストに登録されてい
る場合、または自ポートと同じ MAC ID を指定しようとした場合、エラーとなります。
同じMAC IDのデバイスが既に登録されている場合は、DnetDeleteDeviceList関数で一旦デバイ
ス通信情報を削除してから、再度登録を行ってください。
また、設定したデバイスリスト情報は、DnetSaveNetInfo関数により、デバイス内部の不揮発メ
モリに保存することができます。
DnetInitializeNetInfo関数を呼び出すとデバイスリストは出荷時設定(空のデバイスリスト)
に上書きされますのでご注意ください。
【使用例】
●C言語
DNET_DEVICE_CONFIG deviceConfig;
ULONG ret;
// MAC ID が 1 のデバイスに対する設定(Poll と COS 送信)を行います
deviceConfig.IOType = DNET_IO_POLL | DNET_OUT_COS;
deviceConfig.PollInterval = 0;
deviceConfig.PollTxSize = 16;
deviceConfig.PollRxSize = 16;
deviceConfig.CosTxSize = 8;
deviceConfig.CosRxSize = 0;
deviceConfig.CosInterval = 0;
ret = DnetSetDeviceList(deviceHandle, 1, &deviceConfig);
●Visual Basic
Dim deviceConfig As DNET_DEVICE_CONFIG
Dim ret As Long
‘ MAC ID が 1 のデバイスに対する設定(Poll と COS 送信)を行います
deviceConfig.IOType = DNET_IO_POLL Or DNET_OUT_COS
deviceConfig.PollInterval = 0
deviceConfig.PollTxSize = 16
deviceConfig.PollRxSize = 16
deviceConfig.CosTxSize = 8
deviceConfig.CosRxSize = 0
deviceConfig.CosInterval = 0
ret = DnetSetDeviceList(deviceHandle, 1, deviceConfig)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
123
●Delphi
var
deviceConfig: DNET_DEVICE_CONFIG;
ret: ULONG;
// MAC ID が 1 のデバイスに対する設定(Poll と COS 送信)を行います
deviceConfig.IOType := DNET_IO_POLL or DNET_OUT_COS;
deviceConfig.PollInterval := 0;
deviceConfig.PollTxSize := 16;
deviceConfig.PollRxSize := 16;
deviceConfig.CosTxSize := 8;
deviceConfig.CosRxSize := 0;
deviceConfig.CosInterval := 0;
ret := DnetSetDeviceList(deviceHandle, 1, deviceConfig);
MAC ID が 1 のデバイスの通信情報をデバイスリストに登録します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
124
39. DnetGetDeviceList
【機能】
デバイスリストに登録されているデバイスの通信情報を取得します。
【書式】
●C言語
ULONG DnetGetDeviceList(
HANDLE deviceHandle,
ULONG macID,
PDNET_DEVICE_CONFIG deviceConfig
);
●Visual Basic
Declare Function DnetGetDeviceList Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal macID As Byte,
ByRef deviceConfig As DNET_DEVICE_CONFIG
) As Long
●Delphi
function DnetGetDeviceList(
deviceHandle: THandle;
macID: BYTE;
var deviceConfig: DNET_DEVICE_CONFIG
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
macID 通信情報を取得したいデバイスの MAC ID を指定します。
deviceConfig デバイス通信情報を格納する DNET_DEVICE_CONFIG構造体を指定します。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
本関数はデバイス通信情報を確認するほかに、デバイスリストにデバイス通信情報が登録され
ているかどうかも確認することができます。デバイスリストにデバイス通信情報が登録されて
いない場合は、IFDNET_ERROR_INVALID_MACID が返されます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
125
【使用例】
●C言語
DNET_DEVICE_CONFIG deviceConfig;
ULONG ret;
ret = DnetGetDeviceList(deviceHandle, 1, &deviceConfig);
●Visual Basic
Dim deviceConfig As DNET_DEVICE_CONFIG
Dim ret As Long
ret = DnetGetDeviceList(deviceHandle, 1, deviceConfig)
●Delphi
var
deviceConfig: DNET_DEVICE_CONFIG;
ret: ULONG;
ret := DnetGetDeviceList(deviceHandle, 1, deviceConfig);
MAC ID が 1 のデバイスの通信情報をデバイスリストから取得します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
126
40. DnetDeleteDeviceList
【機能】
デバイスリストに登録されている、指定 MAC ID のデバイス通信情報を削除します。
【書式】
●C言語
ULONG DnetDeleteDeviceList(
HANDLE deviceHandle,
ULONG macID
);
●Visual Basic
Declare Function DnetDeleteDeviceList Lib "IFDnet.DLL" (
ByVal deviceHandle As Long,
ByVal macID As Byte
) As Long
●Delphi
function DnetDeleteDeviceList(
deviceHandle: THandle;
macID: UCHAR
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
macID 通信情報を削除したいデバイスの MAC ID を指定します。自ポートの MAC ID を指定した場
合は、全ての通信情報を削除します。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【使用例】
●C言語
ULONG ret;
ret = DnetDeleteDeviceList(deviceHandle, 1);
●Visual Basic
Dim ret As Long
ret = DnetDeleteDeviceList(deviceHandle, 1)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
127
●Delphi
var
ret: ULONG;
ret := DnetDeleteDeviceList(deviceHandle, 1);
MAC ID が 1 のデバイスの通信情報を、デバイスリストから削除します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
128
41. DnetSaveNetInfo
【機能】
現在設定している自ポート通信情報、およびデバイスリストをデバイス上の不揮発メモリに保
存します。
【書式】
●C言語
ULONG DnetSaveNetInfo(
HANDLE deviceHandle
);
●Visual Basic
Declare Function DnetSaveNetInfo Lib "IFDnet.DLL" (
ByVal deviceHandle As Long
) As Long
●Delphi
function DnetSaveNetInfo(
deviceHandle: Thandle
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【使用例】
●C言語
ULONG ret;
ret = DnetSaveNetInfo(deviceHandle);
●Visual Basic
Dim ret As Long
ret = DnetSaveNetInfo(deviceHandle)
●Delphi
var
ret: ULONG;
ret := DnetSaveNetInfo(deviceHandle);
自ポート情報、デバイスリスト情報を保存します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
129
42. DnetInitializeNetInfo
【機能】
現在設定している自ポート情報、デバイスリストを、出荷時設定に戻します。
デバイス上の不揮発メモリ内の自ポート情報、デバイスリストを出荷時設定に戻したい場合は、
本関数を呼び出し後、DnetSaveNetInfo関数を呼び出して、出荷時設定を不揮発メモリに保存し
てください。
【書式】
●C言語
ULONG DnetInitializeNetInfo(
HANDLE deviceHandle
);
●Visual Basic
Declare Function DnetInitializeNetInfo Lib "IFDnet.DLL" (
ByVal deviceHandle As Long
) As Long
●Delphi
function DnetInitializeNetInfo(
deviceHandle: Thandle
): ULONG; stdcall; external 'IFDnet.DLL';
【パラメータ】
deviceHandle DnetOpenPort関数で取得したデバイスハンドルを指定してください。
【戻り値】
正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。
IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ
い。
【備考】
本関数を実行すると、現在設定されている自ポート設定、およびデバイスリスト情報は破棄さ
れ、出荷時設定時の自ポート設定、およびデバイスリストが無い状態になります。
【使用例】
●C言語
ULONG ret;
ret = DnetInitializeNetInfo(deviceHandle);
●Visual Basic
Dim ret As Long
ret = DnetInitializeNetInfo(deviceHandle)
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
130
●Delphi
var
ret: ULONG;
ret := DnetInitializeNetInfo(deviceHandle);
自ポート情報、デバイスリストを出荷時設定に戻します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
131
4.3 構造体説明
4.3.1 DNET_PORT_CONFIG DnetSetConfig関数、DnetGetConfig関数で使用する自ポート情報設定構造体です。
typedef struct{
ULONG MacID;
ULONG Mode;
ULONG BaudRate;
ULONG HeartBeatCycle;
ULONG AccumulateRxBufferSize;
ULONG ErrorBufferSize;
ULONG OverWriteFlag;
DNET_DEVICE_CONFIG DeviceConfig;
} DNET_PORT_CONFIG, *PDNET_PORT_CONFIG;
メンバ 説明
MacID 自ポートの MAC ID を設定します。
デフォルトは 63 で、0~63 の値が使用できますが、デバイスリスト
に登録されているデバイスの MAC ID と重複する場合はエラーとなり
ます。
DnetInitializeNetInfo関数を実行すると出荷時設定に更新されま
す。
動作モードを指定します。
識別子 値 内容
DNET_MODE_MASTER 00000001h マスタモード。
DNET_MODE_SLAVE 00000002h スレーブモード。
DNET_MODE_MONITOR 00000004h モニタモード。
DNET_MODE_MASTER_EXB 80000001h マスタモード+Explicit メ
ッセージバッファ拡張
Mode
デフォルトはマスタモード(DNET_MODE_MASTER)です。
モニタモードに設定した場合、AccumulateRxBufferSize メンバによ
り、蓄積型受信バッファサイズを指定してください。
DnetInitializeNetInfo関数を実行すると出荷時設定に更新されま
す。
スレーブモードは Group 2 Only デバイスとなります。
マスタモード+Explicit メッセージバッファ拡張に設定すると、通
常1つしかない Explicit メッセージの受信バッファが、各スレーブ
毎に1つづつ割り当てられるようになります。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
132
通信速度を選択します。
識別子 値 内容
DNET_BAUDRATE_500K 00000127h 500kbps
DNET_BAUDRATE_250K 0000023Ah 250kbps
DNET_BAUDRATE_125K 0000053Ah 125kbps
BaudRate
デフォルトは 125kbps です。
DnetInitializeNetInfo関数を実行すると出荷時設定に更新されま
す。
HeartBeatCycle HeartBeat メッセージの送信間隔を指定します。
単位は sです。
デフォルトは 0(HeartBeat メッセージを使用しません)です。
DnetInitializeNetInfo関数を実行すると出荷時設定に更新されま
す。
AccumulateRxBufferSize 蓄積型受信バッファサイズです。
メッセージ数を指定してください。
デフォルトは 0(蓄積型受信バッファを使用しません)です。
ErrorBufferSize イベントバッファサイズです。
イベント件数を指定してください。
デフォルトは 64 です。
64 以上を指定してください。
デバイス上の受信バッファの上書きの有無を指定します。デバイス上
の受信バッファには、Poll、Bit Strobe、COS/Cyclicの 3 種類のバッ
ファがありますが、それぞれのバッファを、メッセージを受信するご
とに上書きするか、メッセージを受信後、DnetGetInputIO関数でメッ
セージを取り出さない限り上書きされないようにするかを設定しま
す。
識別子 値 内容
DNET_OVERWRITE_ENABLE 0 上書きを許可します。
DNET_OVERWRITE_DISABLE 1 メッセージを取り出さない限り上書
きされません。
OverWriteFlag
デフォルトは DNET_OVERWRITE_ENABLE です。
DnetInitializeNetInfo関数を実行すると、出荷時設定に更新されま
す。
Explicit メッセージは常に上書きされます。
DeviceConfig デバイス I/O 通信情報構造体です。
自ポートの I/O 通信情報を設定します。
デフォルトは全メンバ 0です。
DnetInitializeNetInfo関数を実行すると、出荷時設定に更新されま
す。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
133
4.3.2 DNET_DEVICE_CONFIG 各デバイスの I/O 通信情報を設定する構造体です。
自ポートは DnetSetConfig関数、他ポートは DnetSetDeviceList関数で設定します。
typedef struct{
ULONG IOType;
ULONG PollInterval;
ULONG PollTxSize;
ULONG PollRxSize;
ULONG StrobeInterval;
ULONG StrobeTxSize;
ULONG StrobeRxSize;
ULONG CosInterval;
ULONG CosTxSize;
ULONG CosRxSize;
ULONG CyclicInterval;
ULONG CyclicTxSize;
ULONG CyclicRxSize;
} DNET_DEVICE_CONFIG, *PDNET_DEVICE_CONFIG
メンバ 説明
通信のモードを選択します。
識別子 値 内容
DNET_IO_POLL 00000001h Poll
DNET_IO_BITSTROBE 00000002h BitStrobe
DNET_IO_COS 00000004h COS
DNET_IO_CYCLIC 00000008h CYCLIC
DNET_IO_POLL_AUTO 00010001h 自動応答 Poll ※
DNET_IO_BITSTROBE_AUTO 00020002h 自動応答 BitStrobe ※
IOType
※スレーブモード時のみ指定できます。自動応答を選択した場合、マスタ
からのメッセージを受信すると自動的にメッセージを返信します。返信す
るメッセージは DnetSendIO関数または DnetSendIOEx関数でセットしま
す。
自動応答は、使用する製品の版数とチェンジナンバーにより使用できない
ことがあります。
以下の製品で自動応答を使用することができます。版数とチェンジナンバ
ーについては『4.5 製品の版数、チェンジナンバーについて』をご参照く
ださい。
・ PCI-487101PQ[12]C10 以降の製品
・ CTP-487101PQ[12]C02 以降の製品
・ CPZ-487101PQ[12]C01 以降の製品
PollInterval Poll 処理の送信周期を指定します。単位は ms です。
設定可能範囲は 10~10000 で、10ms 単位で設定します。1ms 単位の値は切
り捨てられます。
0 を指定した場合には周期送信を行いません。
実際に通信が可能な周期は、接続機器数、他の I/O メッセージ等に影響を
受けます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
134
Poll の周期送信はマスタモードのみで使用できます。
PollTxSize Poll で使用する最大の送信サイズを指定します。
確保されるバッファのサイズではなく、I/O メッセージのやり取りで使用
できる最大のサイズを指定します。ここで設定したサイズよりも大きなサ
イズでコネクション要求が来た場合、コネクションを確立することはでき
ません。
設定可能範囲は 0~512 です。
PollRxSize Poll で使用する最大の受信サイズを指定します。
確保されるバッファのサイズではなく、I/O メッセージのやり取りで使用
できる最大のサイズを指定します。ここで設定したサイズよりも大きなサ
イズでコネクション要求が来た場合、コネクションを確立することはでき
ません。
設定可能範囲は 0~512 です。
StrobeInterval Bit Strobe 処理の送信周期を指定します。単位は ms です。
周期送信はマスタモードの設定に限り使用可能です。
設定可能範囲は 10~10000 で、10ms 単位で設定します。1ms 単位の値は切
り捨てられます。
0 を指定した場合には周期送信を行いません。
ここで設定した間隔でマスタからリクエストメッセージが送信されます。
実際に通信が可能な周期は、接続機器数、他の I/O メッセージの送信周期
等に影響を受けます。
StrobeTxSize Bit Strobe で使用する最大の送信サイズを指定します。
マスタモードではリクエストメッセージに含むデータで、スレーブモード
は、レスポンスの際に送信する最大サイズを指定します。
確保されるバッファのサイズではなく、I/O メッセージのやり取りで使用
できる最大のサイズを指定します。ここで設定したサイズよりも大きなサ
イズでコネクション要求が来た場合、コネクションを確立することができ
ません。
設定可能範囲は、マスタ時 0または 8で、スレーブ時 8固定です。
StrobeRxSize Bit Strobe で使用する最大の受信サイズを指定します。
マスタモードではレスポンスメッセージに含まれるデータで、スレーブモ
ードでは、リクエストの際に送られてくるリクエストメッセージの付随す
るデータの最大サイズを指定します。
確保されるバッファのサイズではなく、I/O メッセージのやり取りで使用
できる最大のサイズを指定します。ここで設定したサイズよりも大きなサ
イズでコネクション要求が来た場合、コネクションを確立することが出来
ません。
設定可能範囲は、マスタ時 8固定で、スレーブ時も 8です。
CosInterval COS(Change Of State)処理の送信周期を指定します。単位は ms です。
設定可能範囲は 10~10000 で、10ms 単位で設定します。1ms 単位の値は切
り捨てられます。
0 を指定した場合には周期送信を行いません。
実際に通信が可能な周期は、接続機器数、他の I/O メッセージの送信周期
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
135
等に影響を受けます。
CosTxSize COS で使用する最大の送信サイズを指定します。
確保されるバッファのサイズではなく、I/O メッセージのやり取りで使用
できる最大のサイズを指定します。ここで設定したサイズよりも大きなサ
イズでコネクション要求が来た場合、コネクションを確立することが出来
ません。
設定可能範囲は 0~512 です。
CosRxSize COS で使用する最大の受信サイズを指定します。
確保されるバッファのサイズではなく、I/O メッセージのやり取りで使用
できる最大のサイズを指定します。ここで設定したサイズよりも大きなサ
イズでコネクション要求が来た場合、コネクションを確立することが出来
ません。
設定可能範囲は 0~512 です。
CyclicInterval Cyclic 処理の送信周期を指定します。単位は ms です。
Cyclic では、ここで設定された時間が経過すると送信が行われます。
設定可能範囲は 10~10000 で、10ms 単位で設定します。1ms 単位の値は切
り捨てられます。
0 を指定した場合には周期送信を行いません。
実際に通信が可能な周期は、接続機器数、他の I/O メッセージの送信周期
等に影響を受けます。
CyclicTxSize Cyclic で使用する最大の送信サイズを指定します。
確保されるバッファのサイズではなく、I/O メッセージのやり取りで使用
できる最大のサイズを指定します。ここで設定したサイズよりも大きなサ
イズでコネクション要求が来た場合、コネクションを確立することができ
ません。
設定可能範囲は 0~512 です。
CyclicRxSize Cyclic で使用する最大の受信サイズを指定します。
確保されるバッファのサイズではなく、I/O メッセージのやり取りで使用
できる最大のサイズを指定します。ここで設定したサイズよりも大きなサ
イズでコネクション要求が来た場合、コネクションは確立することができ
ません。
設定可能範囲は 0~512 です。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
136
4.3.3 DNET_PORT_STATUS DeviceNet インタフェースのステータスが格納される構造体です。
typedef struct{
ULONG BoardStatus;
ULONG AccumulateRxBufferCount;
ULONG ErrorBufferCount;
} DNET_PORT_STATUS, *PDNET_PORT_STATUS;
メンバ 説明
DeviceNet インタフェースの状態を表します。
識別子 値 内容
DNET_PORT_OFF 00000000h ネットワークに参加していま
せん。
DNET_PORT_ON 00000001h ネットワークに参加していま
す。
DNET_CONNECTED 00000002h 他のデバイスと接続していま
す。
DNET_WAIT_FOR_EXPLICIT_RE
SPONSE
00000004h Explicit メッセージのレス
ポンス待ちです。
DNET_RECEIVED_EXPLICIT 00000008h Explicit メッセージを受信
しました。
BusStatus
AccumulateRxBuffer
Count
蓄積型受信バッファに現在格納されている受信メッセージの数を表しま
す。
取得できる値は 0~最大値※です。
ErrorBufferCount イベントバッファに蓄えられたイベントの件数を表します。
取得できる値は 0~最大値※です。
※最大値は DnetSetConfig関数で設定した値です。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
137
4.3.4 DNET_SLAVE_STATUS 各スレーブのステータスが格納されている構造体です。
typedef struct{
ULONG PollCount;
ULONG StrobeCount;
ULONG CosCount;
ULONG NodeStatus;
ULONG ConnectionStatus;
} DNET_SLAVE_STATUS, *PDNET_SLAVE_STATUS;
メンバ 説明
PollCount Poll で最後に受信した時の 32 ビットタイムスタンプです。
この値に変化が無ければ、新たな Poll 受信は無いということになります。
StrobeCount Bit Strobe で最後に受信したときの 32 ビットタイムスタンプです。
変化が無ければ、新たな受信は無いということになります。
CosCount COS/Cyclic で最後に受信したときの 32 ビットタイムスタンプです。
変化が無ければ、新たな受信は無いということになります。
NodeStatus スレーブの状態を表します。コネクションの確立に失敗し、エラー状態の
時等には、こちらの値が変化します。
ConnectionStatus どの I/O コネクションが確立されているか、各ビットを OR した値で表し
ます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
138
4.3.5 DNET_MESSAGE 256byte までの I/O メッセージの送受信の際に使用する構造体です。
また、モニタモード時の受信メッセージも本構造体を使用します。
typedef struct{
ULONG MessageType;
ULONG MacID;
ULONG Length;
UCHAR Data[256];
ULONG ConnectionID;
ULONG Time;
} DNET_MESSAGE, *PDNET_MESSAGE;
メンバ 説明
送信するメッセージ、または受信したメッセージのタイプを表します。
識別子 値 内容
DNET_IO_POLL 00000001h Poll
DNET_IO_BITSTROBE 00000002h BisStrobe
DNET_IO_COS 00000004h COS
DNET_IO_CYCLIC 00000008h Cyclic
MessageType
MacID 送信メッセージには送信先 MAC ID を指定します。受信メッセージでは送信元
の MAC ID を表します。モニタモード時には無効な値となります。
Length 送信メッセージの長さをバイト単位で指定します。
または、受信したメッセージの長さをバイト単位で取得します。
データ本体の長さになります。0~256 が指定できます。
Data[] 送信メッセージを格納します。
または、受信したメッセージの本体を表します。
メッセージの先頭から Data[0],Data[1],・・・,Data[255]となっています。
送信時、Length に設定した値よりも長いデータは無視されます。
例えば Length に 3 を設定した場合、Data[0],Data[1],Data[2]はドライバに渡
され蓄えられますが、Data[3]以降のデータは無視されます。
同様に受信時も Length 以上のデータは無効データです。
例えば Length に 2 が返ってきた場合、Data[0],Data[1]は受信したメッセージ
の内容ですが、Data[2]以降は無効なデータです。
ConnectionID 受信したメッセージのコネクション ID を表します。
Time メッセージを受信した時刻が格納されます。単位はμsです。
実際の時刻ではなく、DnetOpenPort関数の実行後からの経過時間になります。
エラー情報にも同じ時刻が記録されますので、受信メッセージとエラー発生の
時間的関係を結びつけることができます。
DnetClearBuffer関数を使用することで、内部の経過時間を 0 クリアすること
ができます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
139
4.3.6 DNET_MESSAGE_EX 512byte までの I/O メッセージの送受信の際に使用する構造体です。
また、モニタモード時の受信メッセージも本構造体を使用します。
typedef struct{
ULONG MessageType;
ULONG MacID;
ULONG Length;
UCHAR Data[512];
ULONG ConnectionID;
ULONG Time;
} DNET_MESSAGE_EX, *DNET_MESSAGE_EX;
メンバ 説明
送信するメッセージ、または受信したメッセージのタイプを表します。
識別子 値 内容
DNET_IO_POLL 00000001h Poll
DNET_IO_BITSTROBE 00000002h BisStrobe
DNET_IO_COS 00000004h COS
DNET_IO_CYCLIC 00000008h Cyclic
MessageType
MacID 送信メッセージには送信先 MAC ID を指定します。受信メッセージでは送信元
の MAC ID を表します。モニタモード時には無効な値となります。
Length 送信メッセージの長さをバイト単位で指定します。
または、受信したメッセージの長さをバイト単位で取得します。
データ本体の長さになります。0~512 が指定できます。
Data[] 送信メッセージを格納します。
または、受信したメッセージの本体を表します。
メッセージの先頭から Data[0],Data[1],・・・,Data[511]となっています。
送信時、Length に設定した値よりも長いデータは無視されます。
例えば Length に 3 を設定した場合、Data[0],Data[1],Data[2]はドライバに渡
され蓄えられますが、Data[3]以降のデータは無視されます。
同様に受信時も Length 以上のデータは無効データです。
例えば Length に 2 が返ってきた場合、Data[0],Data[1]は受信したメッセージ
の内容ですが、Data[2]以降は無効なデータです。
ConnectionID 受信したメッセージのコネクション ID を表します。
Time メッセージを受信した時刻が格納されます。単位はμsです。
実際の時刻ではなく、DnetOpenPort関数の実行後からの経過時間になります。
エラー情報にも同じ時刻が記録されますので、受信メッセージとエラー発生の
時間的関係を結びつけることができます。
DnetClearBuffer関数を使用することで、内部の経過時間を 0 クリアすること
ができます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
140
4.3.7 DNET_EXPLICIT 256byte までの Explicit メッセージの送受信の際に使用する構造体です。
typedef struct{
ULONG MessageType;
ULONG MacID;
ULONG ServiceCode;
ULONG ClassID;
ULONG InstanceID;
ULONG Length;
UCHAR Data[256];
ULONG Time;
} DNET_EXPLICIT, *PDNET_EXPLICIT;
メンバ 説明
送信するメッセージ、または受信したメッセージのタイプを表します。
識別子 値 内容
DNET_EXPLICIT_REQUEST 00000001h リクエストメッセージ
DNET_EXPLICIT_RESPONSE 00000002h レスポンスメッセージ
MessageType
MacID 送信メッセージには送信先 MAC ID を指定します。
または、受信したメッセージでは送信元の MAC ID を表します。
ServiceCode 送信メッセージのサービスコードを指定します。
または、受信したメッセージのサービスコードを表します。
ClassID 送信メッセージのクラス ID を指定します。
または、受信したメッセージのクラス ID を表します。
InstanceID 送信メッセージのインスタンス ID を指定します。
または、受信したメッセージのインスタンス ID を表します。
Length 送信メッセージの長さをバイト単位で指定します。
または、受信したメッセージの長さをバイト単位で取得します。
データ本体の長さになります。0~256 が指定できます。
送信の場合、メッセージのタイプによって設定可能なサイズが異なります。
Data[] 送信メッセージを格納します。
または、受信したメッセージの本体を表します。
メッセージの先頭から Data[0],Data[1],・・・,Data[255]となっています。
送信時、Length に設定した値よりも長いデータは無視されます。
例えば Length に 3 を設定した場合、Data[0],Data[1],Data[2]はドライバに渡
され蓄えられますが、Data[3]以降のデータは無視されます。
同様に受信時も Length 以上のデータは無効データです。
例えば Length に 2 が返ってきた場合、Data[0],Data[1]は受信したメッセージ
の内容ですが、Data[2]以降は無効なデータです。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
141
Time メッセージを受信した時刻が格納されます。単位はμsです。
実際の時刻ではなく、DnetOpenPort関数の実行後からの経過時間になります。
エラー情報にも同じ時刻が記録されますので、受信メッセージとエラー発生の
時間的関係を結びつけることができます。
DnetClearBuffer関数を使用することで、内部の経過時間を 0 クリアすること
ができます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
142
4.3.8 DNET_EXPLICIT_EX 512byte までの Explicit メッセージの送受信の際に使用する構造体です。
typedef struct{
ULONG MessageType;
ULONG MacID;
ULONG ServiceCode;
ULONG ClassID;
ULONG InstanceID;
ULONG Length;
UCHAR Data[512];
ULONG Time;
} DNET_EXPLICIT, *PDNET_EXPLICIT;
メンバ 説明
送信するメッセージ、または受信したメッセージのタイプを表します。
識別子 値 内容
DNET_EXPLICIT_REQUEST 00000001h リクエストメッセージ
DNET_EXPLICIT_RESPONSE 00000002h レスポンスメッセージ
MessageType
MacID 送信メッセージには送信先 MAC ID を指定します。
または、受信したメッセージでは送信元の MAC ID を表します。
ServiceCode 送信メッセージのサービスコードを指定します。
または、受信したメッセージのサービスコードを表します。
ClassID 送信メッセージのクラス ID を指定します。
または、受信したメッセージのクラス ID を表します。
InstanceID 送信メッセージのインスタンス ID を指定します。
または、受信したメッセージのインスタンス ID を表します。
Length 送信メッセージの長さをバイト単位で指定します。
または、受信したメッセージの長さをバイト単位で取得します。
データ本体の長さになります。0~512 が指定できます。
送信の場合、メッセージのタイプによって設定可能なサイズが異なります。
Data[] 送信メッセージを格納します。
または、受信したメッセージの本体を表します。
メッセージの先頭から Data[0],Data[1],・・・,Data[511]となっています。
送信時、Length に設定した値よりも長いデータは無視されます。
例えば Length に 3 を設定した場合、Data[0],Data[1],Data[2]はドライバに渡
され蓄えられますが、Data[3]以降のデータは無視されます。
同様に受信時も Length 以上のデータは無効データです。
例えば Length に 2 が返ってきた場合、Data[0],Data[1]は受信したメッセージ
の内容ですが、Data[2]以降は無効なデータです。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
143
Time メッセージを受信した時刻が格納されます。単位はμsです。
実際の時刻ではなく、DnetOpenPort関数の実行後からの経過時間になります。
エラー情報にも同じ時刻が記録されますので、受信メッセージとエラー発生の
時間的関係を結びつけることができます。
DnetClearBuffer関数を使用することで、内部の経過時間を 0 クリアすること
ができます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
144
4.3.9 DNET_ERROR エラー情報の詳細が格納されている構造体です。
typedef struct
ULONG InterruptRegister;
ULONG ErrorCodeRegister;
ULONG ArbitrationLostRegister;
ULONG Time;
} DNET_ERROR, *PDNET_ERROR;
メンバ 説明
エラー割り込み発生時の発生要因が格納されています。
複数の要因が同時に成立している場合もあります。
DNET_DETECT_BUS_ERROR が有効な場合、ErrorCodeRegister に詳細なエラ
ー要因が格納されています。
識別子 値 内容
DNET_DETECT_BUS_ERROR 80h DeviceNet バス上のエラーを検
出 し ま し た 。 詳 細 は
ErrorCodeRegister で確認して
ください。
DNET_DETECT_ARBITRATION_LOST 40h DeviceNet バス上でアービトレ
ーションロストを検出しまし
た。詳細は
ArbitrationLostRegister で確
認してください。
DNET_IS_ERROR_PASSIVE 20h エラーパッシブ状態となりまし
た。(送信か受信のエラーカウ
ンタが 127 を越えました)
DNET_DETECT_OVERRUN 8h オーバーランエラーが発生し、
受信メッセージが失われまし
た。
DNET_IS_ERROR_WARNING 04h 送信か受信のエラーカウンタが
CanSetConfig 関数で設定したリ
ミット値を越えました。
InterruptRegister
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
145
DeviceNet バス上のエラーが発生した場合の詳細な内容が格納されていま
す。InterruptRegister の DNET_DETECT_BUS_ERROR が有効でない場合は 0
が返されます。
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 IDE
0 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 RTR
0 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 オーバーロードフラグ
ErrorCodeRegister
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
146
DeviceNet バス上で、送信メッセージの衝突が発生し、その際の調停で負
けた場合、どのビットで調停に負けたか(アービトレーション・ロスト)
を記録するレジスタです。
InterruptRegister の DNET_DETECT_ARBITORATION_LOST が有効でない場合
は 0が返されます。
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 RTR ビット
0 1 1 0 0 IDE ビット
ArbitrationLostReg
ister
Time エラーが発生した時刻が格納されます。単位はμsです。
実際の時刻ではなく、DnetOpenPort関数の実行後からの経過時間になりま
す。
受信メッセージにも同じ時刻が記録されますので、受信メッセージとエラ
ー発生の時間的関係を結びつけることができます。
DnetClearBuffer関数を使用することで、内部の経過時間を 0 クリアする
ことが出来ます。
単位はμsですが、実際に返される値は 1000 単位の値(ms)が返されます。
また、この時間は、DeviceNet コントローラから割り込みが発生し、デバ
イスドライバの割り込み処理内でエラー情報を取り出した時の時間です
ので、正確性には欠けます。
また、連続でエラーが発生した場合、2 つのエラーの発生時刻が同じにな
ることがあります。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
147
4.3.10 DNET_EVENT_REQ 割り込みイベントを設定する構造体です。イベント/メッセージ/コールバック関数の設定等に使
用します。
typedef struct{
HWND Wnd;
UINT InterruptMsg;
DNETCALLBACK CallBackProc;
HANDLE InterruptEvent;
ULONG UserData;
} DNET_EVENT_REQ, *PDNET_EVENT_REQ;
メンバ 説明
Wnd メッセージ送出ウィンドウハンドル。
DnetSetEventMask関数にて設定した各種割り込み発生時に送出するメッセ
ージのポスト先ウィンドウハンドルを指定します。
(メッセージ送出時に、メッセージハンドラの WPARAM には割り込み要因が
格納されます。LPARAM には、UserData の値が格納されます。
フォーマットは DnetSetEventMask/DnetGetEventMaskで使用する各要因と
同じになります。)
メッセージポストを行わない場合には、C 言語では NULL、Visual Basic、
Delphi では 0を指定してください。
InterruptMsg 割り込みメッセージ。
割り込み発生時に送出するメッセージコードを指定します。
メッセージポストを行わない場合には、C言語では WM_NULL、Visual Basic
では 0、Delphi では WM_NULL を指定してください。
CallBackProc 割り込み発生時に呼び出されるユーザ・コールバック関数のポインタを指
定してください。
コールバック関数を使用しない場合は、C 言語では NULL、Visual Basic、
Delphi では 0を指定してください。
InterruptEvent イベント発生時にシグナル状態となるイベントオブジェクトのハンドルを
指定してください。
イベントオブジェクトを使用しない場合には、C 言語では NULL、Visual
Basic、Delphi では 0を指定してください。
UserData コールバック関数、およびメッセージハンドラへ引き渡すユーザ・データ
を指定してください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
148
4.4 戻り値一覧
エラー識別子 値 意味
IFDNET_ERROR_SUCCESS 0 正常終了。
IFDNET_ERROR_NOT_READY C0000001h 現在ドライバを使用することができません。
IFDNET_ERROR_ACCESS_DENIED C0000002h 現在ドライバの削除中です。
IFDNET_ERROR_INVALID_PARAMETER C0000003h パラメータが不正です。
IFDNET_ERROR_INSUFFICIENT_BUFFER C0000004h システムコールに渡されたデータ領域が小さすぎます。
IFDNET_ERROR_NOT_OPEN C0000005h ポートがオープンされる前にクローズしようとしました。
IFDNET_ERROR_MEMORY_NOTALLOCATED C0000006h メモリを確保できません。
IFDNET_ERROR_BUFFER_IS_FULL C0000007h バッファに空きがありません。
IFDNET_ERROR_BUFFER_IS_EMPTY C0000008h バッファが空です。
IFDNET_ERROR_CANNOT_ACCESS C0000009h アクセス不能状態です。
IFDNET_ERROR_INVALID_HANDLE C000000Ah ハンドルが不正です。
IFDNET_ERROR_NOT_SUPPORTED C000000Bh サポートしていない機能です。
IFDNET_ERROR_NOW_SENDING C000000Ch 現在メッセージ送信中です。
IFDNET_ERROR_NOT_DEVICE C0000100h デバイスが見つかりません。
IFDNET_ERROR_READ_MEMORY_FAILED C0000101h メモリの読み込み失敗です。
IFDNET_ERROR_ALREADY_CONNECTED C0000102h 既に接続が確立済みです。
IFDNET_ERROR_CONNECTION C0000103h 接続に失敗しました。
IFDNET_ERROR_RESOURCE_UNAVAILABLE C0000104h リソース不足です。
IFDNET_ERROR_NOT_CONNECTED_YET C0000105h まだ接続が確立されていません。
IFDNET_ERROR_TIME_OUT C0000106h タイムアウトが発生しました。
IFDNET_ERROR_INVALID_CAN_ID C0000107h CAN ID が不正です。
IFDNET_ERROR_NO_CONNECTION C0000108h コネクションがありません。
IFDNET_ERROR_NO_MORE_ID C0000109h メッセージ ID が足りません。
IFDNET_ERROR_INVALID_GROUPNUMBER C000010Ah グループ番号が不正です。
IFDNET_ERROR_NOT_ALLOCATE_MEMORY C000010Bh メモリが確保できませんでした。
IFDNET_ERROR_BUFFER_OVERFLOW C000010Ch バッファがオーバーフローしました。
IFDNET_ERROR_NO_DATA C000010Dh バッファ内にメッセージがありません。
IFDNET_ERROR_ON_LINE C000010Eh ネットワークに参加している状態では実行できません。
IFDNET_ERROR_DUPULICATE_MACID C000010Fh MAC ID が重複しています。
IFDNET_ERROR_OFF_LINE C0000110h ネットワークに参加していない状態では実行できません。
IFDNET_ERROR_INVALID_MACID C0000111h 指定した MAC ID が不正です。
IFDNET_ERROR_ALREADY_SET C0000112h 既に設定されています。
IFDNET_ERROR_WRITE_MEMORY_FAILED C0000113h メモリへの書き込みが失敗しました。
IFDNET_ERROR_WAIT_FOR_RESPONSE C0000114h レスポンス待ち中です。
IFDNET_ERROR_NO_RESPONSE C0000115h レスポンスがありませんでした。
IFDNET_ERROR_NOT_SET_EPR C0000116h EPR が設定されていません。
IFDNET_ERROR_PORT_ON C0000117h ネットワークに参加できませんでした。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
149
4.5 製品の版数、チェンジナンバーについて
製品の版数とチェンジナンバーは製品の表面に表示されています。
下図の位置に製品の版数とチェンジナンバーは表示されています。
型式によっては表示されている位置が異なることがあります。
本 Help では、製品の版数、チェンジナンバーを下記のように記述しています。
例)製品型式 PCI-487101PQ、製品の版数 12 版、チェンジナンバー C08 の場合
PCI-487101PQ[12]C08
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
150
第5章 サンプルプログラム
以下、各サンプルプログラムの概要を説明します。
5.1 DnetMon 【概要】
DeviceNet のバスの状態をモニタするプログラムです。
【実行手順】
サンプルプログラムには実行形式のファイルが付属していません。
ソースコードをコンパイルして実行ファイルを生成してから、動作させてください。
●Visual C++の場合
Visual C++(Visual Studio)を起動し、「ファイル」メニューから「ワークスペースを開く」
を選び、メイクファイル「DnetMon.mak」を開き、ビルドしてください。
●Visual Basic の場合
Visual Basic を起動し、プロジェクトファイル「DnetMon.vbp」を開き、ビルドしてくださ
い。
●Delphi の場合
Delphi を起動し、プロジェクトファイル「DnetMon.dpr」を開き、ビルドしてください。
作成後、「DnetMon.exe」を起動してください。
【内容】
DeviceNet のバスの状態をモニタします。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
151
5.2 SaveConfig 【概要】
自ポート、他ポートの設定情報をデバイス上の不揮発メモリに保存するプログラムです。
【実行手順】
サンプルプログラムには実行形式のファイルが付属していません。
ソースコードをコンパイルして実行ファイルを生成してから、動作させてください。
●Visual C++の場合
Visual C++(Visual Studio)を起動し、「ファイル」メニューから「ワークスペースを開く」
を選び、メイクファイル「SaveConfig.mak」を開き、ビルドしてください。
●Visual Basic の場合
Visual Basic を起動し、プロジェクトファイル「SaveConfig.vbp」を開き、ビルドしてくださ
い。
●Delphi の場合
Delphi を起動し、プロジェクトファイル「SaveConfig.dpr」を開き、ビルドしてください。
作成後、「SaveConfig.exe」を起動してください。
【内容】
自ポート、他ポートの情報を設定し、設定値をデバイス上の不揮発メモリに保存します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
152
5.3 SendExplicit 【概要】
Explicit メッセージを送信するプログラムです。
【実行手順】
サンプルプログラムには実行形式のファイルが付属していません。
ソースコードをコンパイルして実行ファイルを生成してから、動作させてください。
●Visual C++の場合
Visual C++(Visual Studio)を起動し、「ファイル」メニューから「ワークスペースを開く」
を選び、メイクファイル「SendExplicit.mak」を開き、ビルドしてください。
●Visual Basic の場合
Visual Basic を起動し、プロジェクトファイル「SendExplicit.vbp」を開き、ビルドしてくだ
さい。
●Delphi の場合
Delphi を起動し、プロジェクトファイル「SendExplicit.dpr」を開き、ビルドしてください。
作成後、「SendExplicit.exe」を起動してください。
【内容】
スレーブデバイスに対してリクエストメッセージを送信し、スレーブデバイスからのレスポン
スメッセージを受信します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
153
5.4 SendIo 【概要】
I/O メッセージを送信するプログラムです。
【実行手順】
サンプルプログラムには実行形式のファイルが付属していません。
ソースコードをコンパイルして実行ファイルを生成してから、動作させてください。
●Visual C++の場合
Visual C++(Visual Studio)を起動し、「ファイル」メニューから「ワークスペースを開く」
を選び、メイクファイル「SendIo.mak」を開き、ビルドしてください。
●Visual Basic の場合
Visual Basic を起動し、プロジェクトファイル「SendIo.vbp」を開き、ビルドしてください。
●Delphi の場合
Delphi を起動し、プロジェクトファイル「SendIo.dpr」を開き、ビルドしてください。
作成後、「SendIo.exe」を起動してください。
【内容】
スレーブデバイスに対して I/O メッセージを送信し、スレーブデバイスからの I/O メッセージ
を受信します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
154
5.5 CyclicSend 【概要】
周期送信を行うプログラムです。
【実行手順】
サンプルプログラムには実行形式のファイルが付属していません。
ソースコードをコンパイルして実行ファイルを生成してから、動作させてください。
●Visual C++の場合
Visual C++(Visual Studio)を起動し、「ファイル」メニューから「ワークスペースを開く」
を選び、メイクファイル「CyclicSend.mak」を開き、ビルドしてください。
●Visual Basic の場合
Visual Basic を起動し、プロジェクトファイル「CyclicSend.vbp」を開き、ビルドしてくださ
い。
●Delphi の場合
Delphi を起動し、プロジェクトファイル「CyclicSend.dpr」を開き、ビルドしてください。
作成後、「CyclicSend.exe」を起動してください。
【内容】
スレーブデバイスに対して I/O メッセージを周期送信し、スレーブデバイスからの 10 回 I/O
メッセージを受信するとプログラムを終了します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
155
5.6 ResponseIo 【概要】
スレーブモードで I/O メッセージの送受信を行うプログラムです。
【実行手順】
サンプルプログラムには実行形式のファイルが付属していません。
ソースコードをコンパイルして実行ファイルを生成してから、動作させてください。
●Visual C++の場合
Visual C++(Visual Studio)を起動し、「ファイル」メニューから「ワークスペースを開く」
を選び、メイクファイル「ResponseIo.mak」を開き、ビルドしてください。
●Visual Basic の場合
Visual Basic を起動し、プロジェクトファイル「ResponseIo.vbp」を開き、ビルドしてくださ
い。
●Delphi の場合
Delphi を起動し、プロジェクトファイル「ResponseIo.dpr」を開き、ビルドしてください。
作成後、「ResponseIo.exe」を起動してください。
【内容】
マスタモードから送信されたメッセージを受信したら、マスタに対してメッセージを送信しプ
ログラムを終了します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
156
5.7 ResponseIoAuto 【概要】
スレーブモードの自動応答で I/O メッセージの送信を行うプログラムです。
【実行手順】
サンプルプログラムには実行形式のファイルが付属していません。
ソースコードをコンパイルして実行ファイルを生成してから、動作させてください。
●Visual C++の場合
Visual C++(Visual Studio)を起動し、「ファイル」メニューから「ワークスペースを開く」
を選び、メイクファイル「ResponseIoAuto.mak」を開き、ビルドしてください。
●Visual Basic の場合
Visual Basic を起動し、プロジェクトファイル「ResponseIoAuto.vbp」を開き、ビルドしてく
ださい。
●Delphi の場合
Delphi を起動し、プロジェクトファイル「ResponseIoAuto.dpr」を開き、ビルドしてください。
作成後、「ResponseIoAuto.exe」を起動してください。
【内容】
マスタモードから送信されたメッセージを受信したら、マスタに対して予めセットしておいた
メッセージを送信しプログラムを終了します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
157
第6章 ユーティリティ
以下、各ユーティリティの概要を説明します。
6.1 ネットワーク情報設定ユーティリティ このユーティリティを使用することで、自ポートの I/O 通信設定、および他ポートの I/O 通信設
定(デバイスリスト設定)をビジュアル的に設定することが可能になります。
一旦設定したネットワーク情報は、デバイス上の不揮発メモリ内に保存することができ、
DnetOpenPort関数を呼び出すことで、プログラム中に設定情報を読み出すことが出来ます。
また、設定値をファイルとして保存/読み込みすることも可能です。
アプリケーションを変更せず、ネットワークの環境のみを変更したい場合や、プログラム上での
ネットワーク設定が面倒な場合、本ユーティリティを実行してください。
【実行手順】
1. 「DnetUtil」を実行します。
2. メニューから「File (F)」→「Open (O)」を選択します。
3. システムに実装されている DeviceNet インタフェース製品が表示されますので、通信設定
を行いたいデバイスを選択し、「OK」ボタンをクリックします。
4. 現在そのデバイスに設定されている通信設定情報が表示されます。
5. ボーレートを設定します。「Baud Rate」のコンボボックスから使用するボーレートを選択
してください。
6. デバイス上の受信バッファの上書き設定を行います。「Overwrite」のラジオボタンで選択
してください。「Enable」でメッセージを受信するごとに上書きします。「Disable」でメッ
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
158
セージを受信後、DnetGetInputIO関数でメッセージを取り出さない限り上書きされないよ
うになります。
7. デバイスリストにデバイスを追加します。メニューから「Device (D)」→「Add (A)」を選
択してください(またはリストの空の行で右クリック→「Add (A)」)。下記の他ポート設定
ダイアログが表示されます。
MAC ID を選択し、使用する I/O の種類にチェックをつけて、I/O の周期、送信バッファサ
イズ、受信バッファサイズを指定してください。I/O の周期は 10[ms]~10,000[ms]、バッ
ファサイズは 0[byte]~256[byte]までが設定可能です。
※「Change Of State」と「Cyclic」は同時には指定できません。いずれか片方のみ有効
となります。
OK ボタンを押すとメインダイアログのデバイスリストに追加されます。
一覧には、選択した I/O の種類の列に「Int:xxxx, Tx:xxx, Rx:xxxx」と表示されます。Int
は I/O の周期(単位は[ms])、Tx は送信バッファサイズ(単位はバイト)、Rx は受信バッフ
ァサイズ(単位はバイト)となっています。(上図では Poll を選択したために Poll の列に
追加されています。)
8. 自ポート情報、あるいは追加した他ポート情報を更新する場合は、リスト内の更新したい
ポートを選択し、メニューの「Device (D)」→「Edit (E)」を選択します(または、更新
したいポートをダブルクリックか、右クリック→「Edit (E)」を選択してください)。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
159
9. 自ポート情報を更新する場合は、下記のようなダイアログボックスが表示されます。
「Mode」内のラジオボタンで、「マスタモード」、「スレーブモード」、「モニタモード」、「マ
スタモード+Explicit メッセージバッファ拡張」が選択できます。
HeartBeat メッセージを使用する場合は、「Heart Beat Message」チェックボックスにチェ
ックをつけて、送信周期を設定してください。1[s]~1,000[s]が設定可能です(単位が[s]
ですのでご注意ください)。
後は、7の他ポート設定と同じです。
他ポートがデバイスリストに追加されている状態でスレーブモード、またはモニタモード
を選択すると、登録されている他ポート情報が全て削除されます(「OK」ボタンを押した際
に、注意を促すメッセージが表示されます)。
10.設定した他ポート情報を削除する場合は、削除したいデバイスを選択して、メニューから
「Device (D)」→「Delete (D)」を選択してください(または、削除したいデバイスを選
択して右クリック→「Delete (D)」)。
11.設定した情報をデバイス上の不揮発メモリに保存します。メニューから「File (F)」→「Save
(S)」を選択してください。
※保存には約 1、2秒程度の時間がかかります。
12.設定した情報をファイルとして保存したい場合は、メニューから「File (F)」→「Export (E)」
を選択してください。ファイル保存ダイアログが表示され、設定情報が*.cfg ファイルに
保存されます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
160
逆に、保存しておいたファイルから設定情報を読み込みたい場合は、メニューから「File
(F)」→「Import (I)」を選択してください。*.cfg ファイルを指定することにより、保存
しておいた情報が読み出されます。
複数のデバイスに同じ通信設定を行いたい場合等にこの機能をご使用ください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
161
6.2 自己診断プログラム 本製品には、動作不具合時の原因がハードウェア的なものか、ソフトウェア的なものかを容易に
判断するための自己診断機能を搭載しています。診断プログラムを用いて動作確認を行ってくだ
さい。
【使用機材】
弊社 DeviceNet インタフェース製品
【実行手順】
1. DeviceNet インタフェース製品の診断を行う前に、デバイスからケーブルを外しておきま
す。
2. 「DiagDnet」を実行します。
3. メニューから「File (F)」→「Select New Device (O)」を選択します。
4. システムに実装されている DeviceNet インタフェース製品が表示されますので、診断を行
いたいデバイスを選択し、「OK」ボタンをクリックします。
5. メインダイアログに、選択したデバイスのリソースが表示されますので、メニューから
「Diagnosis (D)」→「Start Diagnosis (S)」を実行し、診断を開始してください。
※開始直後にケーブルを外すように促すメッセージボックスが表示されます。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
162
6. 診断結果がメインダイアログに表示されます。
診断結果が「NG」の場合には、メニューから「File (F)」→「Save the Result (S)」を選
択して、診断結果をファイルに保存してください。その診断結果とともに弊社弊社オンラ
イン QA、またはお客様相談センタまでお問い合わせください。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
163
6.3 EDS ファイル作成プログラム このユーティリティを使用することで、コンフィグレーションツール等で使用する EDS ファイル
を作成することが出来ます。本ユーティリティで自ポートの EDS ファイルを作成することが可能
になります。
【実行手順】
1. 「EDScreate」を実行します。
2. 使用する I/O メッセージの種類と、送受信のサイズを設定します。
3. 「Create EDS File」ボタンをクリックすると EDS ファイルが保存されます。
保存場所とファイル名を指定して保存します。
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
164
第7章 重要な情報
保証の内容と制限
弊社は本ドキュメントに含まれるソースプログラムの実行が中断しないこと、またはその実行に
誤りが無いことを保証していません。
本製品の品質や使用に起因する、性能に起因するいかなるリスクも使用者が負うものとします。
弊社はドキュメント内の情報の正確さに万全を期しています。万一、誤記または誤植等があった
場合、弊社は予告無く改訂する場合があります。ドキュメントまたはドキュメント内の情報に起
因するいかなる損害に対しても弊社は責任を負いません。
ドキュメント内の図や表は説明のためであり、ユーザ個別の応用事例により変化する場合があり
ます。
著作権、知的所有権
弊社は本製品に含まれるおよび本製品に対する権利や知的所有権を保持しています。
本製品はコンピュータ ソフトウェア、映像/音声(例えば図、文章、写真等)を含んでいます。
医療機器/器具への適用における注意
弊社の製品は人命に関わるような状況下で使用される機器に用いられることを目的として設計、
製造された物では有りません。
弊社の製品は人体の検査等に使用するに適する信頼性を確保することを意図された部品や検査機
器と共に設計された物では有りません。
医療機器、治療器具等の本製品の適用により、製品の故障、ユーザ、設計者の過失等により、損
傷/損害を引き起こす場合が有ります。
複製の禁止
弊社の許可なく、本ドキュメントの全て、または一部に関わらず、複製、改変等を行うことはで
きません。
責任の制限
弊社は、弊社または再販売者の予見の有無にかかわらず発生したいかなる特別損害、偶発的損害、
間接的な損害、重大な損害について、責任を負いません。
本製品(ハードウェア,ソフトウェア)のシステム組み込み、使用、ならびに本製品から得られる
結果に関する一切のリスクについては、本製品の使用者に帰属するものとします。
本製品に含まれるバグ、あるいは本製品の供給(納期遅延)、性能もしくは使用に起因する付帯的
損害もしくは間接的損害に対して、弊社に全面的に責がある場合でも、弊社はその製品に対する
改良(正常に動作する)、代品交換までとし、金銭面での賠償の責任は負わないものとしますので、
予めご了承ください。
本製品(ソフトウェアを含む)は、日本国内仕様です。本製品を日本国外で使用された場合、弊
社は一切責任を負いかねます。また、弊社は本製品に関し、海外での保守サービスおよび技術サ
ポート等は行っておりません。
商標/登録商標
GPC-4871 Help for Windows
© 2004, 2013 Interface Corporation. All rights reserved.
165
本書に掲載されている会社名、製品名は、それぞれ各社の商標または登録商標です。