gpg-4871dnetsetconfig関数を実行する...

103
DNET(PCI/C-PCI)Linux/RT www.interface.co.jp GPG-4871 DeviceNet インタフェースモジュール Linux/RT 対応ドライバ Help for Linux

Upload: others

Post on 22-Sep-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

DNET(PCI/C-PCI)Linux/RT

www.interface.co.jp

GPG-4871 DeviceNet インタフェースモジュール Linux/RT 対応ドライバ

Help for Linux

Page 2: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

2

目 次

第 1 章 はじめに 3

1.1 概要............................................................................. 3

1.2 特長............................................................................. 3

第 2 章 製品仕様 4

2.1 動作環境......................................................................... 4

2.2 基本仕様......................................................................... 4

第 3 章 実行手順 5

3.1 デバイスを動かすまで............................................................. 5

3.2 制御手順......................................................................... 8

3.2.1 マスタモード時の実行手順 8

3.2.2 スレーブモード時の実行手順 17

3.2.3 モニタモード時の実行手順 23

3.3 テストドライバの使用方法........................................................ 27

第 4 章 リファレンス 29

4.1 関数一覧........................................................................ 29

4.2 関数個別説明.................................................................... 31

4.3 構造体.......................................................................... 81

4.4 戻り値一覧...................................................................... 98

4.5 Kylixをお使いの方へ............................................................. 99

4.6 製品の版数、チェンジナンバーについて ........................................... 101

第 5 章 サンプルプログラム 102

5.1 メッセージ送信サンプルプログラム ............................................... 102

5.2 メッセージ周期送信サンプルプログラム ........................................... 102

5.3 ポート設定情報保存サンプルプログラム ........................................... 102

5.4 スレーブモード用メッセージ送信サンプルプログラム ............................... 102

5.5 スレーブモード用自動応答メッセージ送信サンプルプログラム ....................... 102

第 6 章 重要な情報 103

Page 3: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

3

第1章 はじめに

1.1 概要 本ソフトウェアは、Linux アプリケーションおよび RTLinux リアルタイムモジュールから、弊社製

品の制御を行うためのソフトウェアです。GPG-4871 は、弊社 DeviceNet 製品を Linux アプリケーシ

ョンから Lib をリンクし関数をコールすることにより制御します。

本ドキュメントは、Linux 上で GPG-4871 を使用するための情報を掲載しています。

1.2 特長 ●DeviceNet プロトコルを意識する必要なし

用意された API を使用するだけで、DeviceNet マスタを構築できます。各スレーブとの通信を行う

API を用意しておりますので、お客様のプログラム中でプロトコルの処理を行う必要がありません。

マスタとしてもスレーブとしてもお使い頂けます。

●DeviceNet Release2.0(改訂 5)

DeviceNet 規格に対応した様々な機器と接続が可能です。

●通信メッセージへの簡単なアクセス

DeviceNet 上でやり取りされるメッセージに対して、2種類のアクセス方法を提供します。

繰り返し受信されるメッセージの最新のメッセージを取り出す“上書き型”のバッファ、受信した

メッセージ全てをバッファに蓄えていく“蓄積型”のバッファの 2種類のアクセス方法です。

●1メッセージあたりの最大取り扱いメッセージサイズが 512 バイト

1 メッセージあたりの送信サイズ、受信サイズが最大 512 バイトまで取り扱えます。

Page 4: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

4

第2章 製品仕様

2.1 動作環境 対応機種 弊社製 FA コントローラ

弊社製 Classembly Devices®

PC/AT 互換機、NEC PC/FC-9821

ドライバ種別 キャラクタ型ドライバ

組み込み方式 モジュール(ダイナミックロード/アンロード)

メジャー番号割り当て 自動割り当て

ソースコードの

取り扱い

ドライバモジュール一部公開

ライブラリソースコード非公開

共用モジュール公開

ビルドサポート メイクファイル提供

対応カーネルバージョン ・IBM PC/AT 互換機

カーネル 2.4.x

カーネル 2.6.x

・弊社 SH-CPU モジュール

弊社 SH-Linux

Help PDF 形式

2.2 基本仕様 通信速度 125/250/500kbps

マスタモード ・Group 2 サーバーおよび Group 2 Only サーバーのス

レーブデバイスと接続可能。

・Group 2 Only クライアントとしてのメッセージ転送

機能をサポートしています。

スレーブモード Group 2 Only サーバーとして動作。

モニタモード ON:受信のみ。ACK を返さない。

OFF:通常通信。ACK を返す。

最大ノード数 64 台(自局含む)

最大送信メッセージサイズ/1 メッセージ 512 バイト

最大受信メッセージサイズ/1 メッセージ 512 バイト

同時使用枚数 16 枚

Page 5: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

5

第3章 実行手順

3.1 デバイスを動かすまで 1. インストール

インタフェースモジュールを拡張スロットに実装しシステムを起動します。

インストーラを起動し、Linux ドライバのインストールを行います。

詳しいインストール方法は、Readme をご参照ください。 #bash install

インストーラの指示に従って、インストールを行ってください。

2. ドライバモジュールの組み込み

GPG-4871 の Linux 用ドライバモジュールを組み込みます。

#modprobe cp4871

DeviceNet デバイスが正しく認識されているか、/proc ファイルシステムを参照することにより確認

します。

#cat /proc/tty/driver/cp4871 1: PCI-487101PQ(bid=0h)

3. プログラム作成

プログラムの作成を行います。エディタを起動し、下記のコードを記述します。

ここではRSW1 設定値が 0 のPCI-487101PQについてコードを記述しています。Kylixをご使用の方は、

『4.5 Kylixをお使いの方へ』をご参照ください。

#include <stdio.h>

#include “ifdnet.h”

int main()

{

int ret;

int portNo = 1;

DNET_PORT_CONFIG portConfig;

DNET_DEVICE_CONFIG deviceConfig;

ret = DnetOpenPort( portNo );

if (ret != DNET_ERROR_SUCCESS){

printf(“オープン失敗\n”); return 1;

}else{

printf(“オープン成功\n”); }

ret = DnetGetConfig(portNo, &portConfig);

if (ret != DNET_ERROR_SUCCESS){

printf(“自ポートの設定取得失敗\n”); DnetClosePort( portNo );

return 1;

}else{

printf(“自ポートの設定取得成功\n”);

Page 6: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

6

}

portConfig.MacID = 0;

portConfig.Mode = DNET_MODE_MASTER;

portConfig.BaudRate = DNET_BAUDRATE_125K;

portConfig.DeviceConfig.IOType = DNET_IO_POLL;

portConfig.DeviceConfig.PollInterval = 0;

portConfig.DeviceConfig.PollTxSize = 2;

portConfig.DeviceConfig.PollRxSize = 100;

ret = DnetSetConfig(portNo, &portConfig);

if (ret != DNET_ERROR_SUCCESS){

printf(“自ポートの設定失敗\n”); DnetClosePort( portNo );

return 1;

}else{

printf(“自ポートの設定成功\n”); }

deviceConfig.IOType = DNET_IO_POLL;

deviceConfig.PollInterval = 0;

deviceConfig.PollTxSize = 100;

deviceConfig.PollRxSize = 2;

deviceConfig.StrobeInterval = 0;

deviceConfig.StrobeTxSize = 0;

deviceConfig.StrobeRxSize = 0;

deviceConfig.CosInterval = 0;

deviceConfig.CosTxSize = 0;

deviceConfig.CosRxSize = 0;

deviceConfig.CyclicInterval = 0;

deviceConfig.CyclicTxSize = 0;

deviceConfig.CyclicRxSize = 0;

ret = DnetSetDeviceList(portNo, 1, &deviceConfig);

if (ret != DNET_ERROR_SUCCESS){

printf(“他ポートの設定失敗\n”); DnetClosePort( portNo );

return 1;

}else{

printf(“他ポートの設定成功\n”); }

ret = DnetPortOn( portNo );

if (ret != DNET_ERROR_SUCCESS){

printf(“ネットワークへの参加失敗\n”); DnetClosePort( portNo );

return 1;

}else{

printf(“ネットワークへの参加成功\n”); }

ret = DnetConnect( portNo, 1);

if (ret != DNET_ERROR_SUCCESS){

printf(“他ポートとの接続失敗\n”); DnetClosePort( portNo );

Page 7: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

7

return 1;

}else{

printf(“他ポートとの接続成功\n”); }

ret = DnetDisconnect( portNo, 1);

if (ret != DNET_ERROR_SUCCESS){

printf(“他ポートとの切断失敗\n”); DnetClosePort( portNo );

return 1;

}else{

printf(“他ポートとの切断成功\n”); }

ret = DnetPortOff( portNo );

if (ret != DNET_ERROR_SUCCESS){

printf(“ネットワークからの離脱失敗\n”); DnetClosePort( portNo );

return 1;

}else{

printf(“ネットワークからの離脱成功\n”); }

ret = DnetClosePort( portNo );

if (ret != DNET_ERROR_SUCCESS) printf(“クローズ失敗\n”); else printf(“クローズ成功\n”);

return 0;

}

コードの記述が終われば dnettest.c というファイル名で保存しておきます。

4. コンパイル

作成したプログラムをコンパイルします。下記のコマンドを実行してください。 #gcc –o dnettest dnettest.c –lgpg4871

5. 実行

コンパイルすることで実行ファイル dnettest ができていますので、 #./dnettest

と入力し、プログラムを実行してください。

「ポートオープン」→「自ポート設定」→「他ポート設定」→「ネットワークへの参加」→「他ポー

トとの接続」→「他ポートとの切断」→「ネットワークからの離脱」→「ポートクローズ」の一連の

デバイス制御を行います。

より詳しいプログラム方法は、『3.2 制御手順』、およびチュートリアルをご参照ください。

Page 8: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

8

3.2 制御手順

3.2.1 マスタモード時の実行手順 製品を複数枚使用する場合は、インタフェースモジュール上のロータリスイッチ RSW1 の設定値が同

一型式同士で重複しないように設定してからスロットに実装し、システムを起動して下さい。

同一型式が複数存在する場合、制御対象を一意に識別するための番号となります。重複していた場合、

本ソフトウェアは正常に動作いたしません。

基本的な制御の手順は以下の通りです。

ポートのオープン

自ポートの設定

他ポートの設定

割り込みの設定

ネットワークに参加

I/O 通信の開始

通信処理

I/O 通信の停止

ネットワークから離脱

割り込みの解除

ポートのクローズ

EPR の設定

1.ポートのオープン

ポートのオープンは DnetOpenPort関数によって行います。

int ret;

int portNo;

// ポートをオープンします

portNo = 1;

ret= DnetOpenPort(portNo);

DnetOpenPort関数には、オープンしたいポートのポート番号を指定します。ポート番号は、以下のよ

うになっています。

型式 RSW1 設定値 ポート番号 識別子

0 1 DNET_PORTNO_4871_0

1 2 DNET_PORTNO_4871_1

… … …

PCI-487101PQ

CPZ-487101PQ

CTP-487101PQ

F 16 DNET_PORTNO_4871_F

Page 9: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

9

2.自ポートの設定

自ポートの設定は、オープン時に不揮発メモリからロードされます。DnetSetConfig関数を実行する

ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場

合、自ポートの設定を間違わないために、一度 DnetGetConfig関数で自ポート設定を取得してから、

各パラメータを変更して DnetSetConfig関数を呼び出すという方法を推奨致します。

int ret;

DNET_PORT_CONFIG portConfig;

// 自ポート設定を取得します

ret = DnetGetConfig(portNo, &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(portNo, &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_MONITOR)を指定する

と、ボーレート(BaudRate)、蓄積用受信バッファサイズ(AccumulateRxBufferSize)、イベントバッ

ファサイズ(ErrorBufferSize)のメンバのみが有効となり、その他のメンバの設定値は無効となり

ます。モニタモードを指定すると、ネットワーク上の全メッセージを蓄積用受信バッファに格納す

るようになります。このように、ネットワーク上の各デバイスの通信設定は意味を持たなくなるた

め、デバイスリスト自体が無効となります。

・ BaudRate メ ン バ に は 、 ボ ー レ ー ト を 指 定 し ま す 。 125kbps(DNET_BAUDRATE_125K) 、

250kbps(DNET_BAUDRATE_250K)、500kbps(DNET_BAUDRATE_500K)のいずれかを指定できます。

Page 10: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

10

・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通信設定は

DnetSetDeviceList関数で行います。I/O通信設定構造体(DNET_MESSAGE構造体)については『4.3 構

造体』をご参照ください。

各メンバは、DnetInitializeNetInfo関数を実行すると、出荷時設定で上書きされますのでご注意く

ださい。

また、ポート設定の取得(DnetGetConfig関数)は、ポートオープンしていればいつでも実行できます

が、ポートの設定(DnetSetConfig関数)は、ネットワークに参加した状態(オンライン状態)では使用

できません。必ずポートオープン直後か、DnetPortOff関数でネットワークから離脱した状態(オフラ

イン状態)でご使用ください。

3.他ポートの設定

自ポートがマスタモードの場合、ネットワーク上での自ポートでない他のポートは、デバイスリスト

としてドライバ内に保存されます(スレーブモード、モニタモードではデバイスリストは使用しませ

ん)。

デバイスリストはポートオープン時にロードされ、あらかじめネットワーク情報設定ユーティリティ

を使用することで設定することもできます。プログラム内では、DnetSetDeviceList関数でデバイス

リスト内に他ポートの通信設定をセット、DnetGetDeviceList関数でデバイスリスト内から他ポート

通信情報を取得、DnetDeleteDeviceList関数でデバイスリスト内の他ポート通信情報を削除します。

送受信サイズの設定について

自ポートで設定する送信サイズは、自ポートが送信できる最大サイズになりま

す。また、受信サイズは自ポートが受信できる最大サイズになります。

Page 11: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

11

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(portNo, 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(portNo, 15, &deviceConfig);

一度デバイスリストにセットした他ポート通信設定は更新することはできません。更新するには一度

削除してから、再度セットしなおしてください。また、デバイスリストは他ポートの通信設定のリス

トですので、DnetSetDeviceList関数、DnetGetDeviceList関数に自ポートのMAC IDを指定した場合は

エラーとなります。DnetDeleteDeviceList関数で自ポートを指定すると全デバイスのリストを削除し

ます。

DnetInitializeNetInfo関数を呼ぶことにより、ドライバ内部のデバイスリストは出荷時設定(空のデ

バイスリスト)に戻されます。既に登録していたデバイスリストは破棄されますが、保存されていた

デバイスリストは破棄されません (不揮発メモリ上の設定値は DnetSaveNetInfo関数を実行するか、

ネットワーク情報設定ユーティリティでの保存を実行しない限り変更されません)。

4.割り込みの設定

割り込みを設定することにより、各事象が発生した際に、登録された関数の呼び出し(コールバック

関数)が行われます。

DnetSetEvent関数により、コールバック関数の登録を行います。DnetSetEventMask関数で割り込みマ

スクの設定、DnetGetEventMask関数で割り込みマスク値の取得を行います。

送受信サイズの設定について

他ポートで設定する送信サイズは、他ポートが送信できるサイズになります。

また、受信サイズは他ポートが受信できるサイズになります。

設定を間違えると正しく送受信できません。他ポートとして使用するデバイス

の仕様をご確認ください。

Page 12: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

12

// コールバック関数

void EventProc(unsigned long event, unsigned long user)

{

// 割り込み処理を記述します

・・・

}

・・・

// メインルーチン

unsigned long eventMask;

DNET_EVENT_REQ eventReq;

// メッセージ受信時に割り込みが発生するようにマスクを設定します

eventMask = DNET_EVENT_RECV;

ret = DnetSetEventMask( portNo, eventMask);

eventReq.CallBackProc = EventProc;

eventReq.UserData = 0x1234;

ret = DnetSetEvent( portNo, &eventReq);

オープン直後は、割り込みの設定はされておらず、全ての割り込みがマスクされています。

5.ネットワークに参加

ネットワークに参加する場合は DnetPortOn関数を使用します。

// ネットワークに参加します

ret = DnetPortOn(portNo);

ネットワーク参加中は、下記の関数は使用できません。

・ DnetSetConfig

・ DnetSetDeviceList

・ DnetDeleteDeviceList

・ DnetSaveNetInfo

・ DnetInitializeNetInfo

逆に、ネットワークに参加すると、下記の関数が使用できるようになります。

・ DnetConnect

・ DnetDisconnect

・ DnetSendIO、DnetSendIOEx

・ DnetGetInputIO、DnetGetInputIOEx

・ DnetGetAccmulatedMessage、DnetGetAccmulatedMessageEx

・ DnetSendExplicit、DnetSendExplicitEx

・ DnetReceiveExplicit、DnetReceiveExplicitEx

ネットワーク電源の異常検出について

ネットワーク参加後にネットワーク電源が、DnetSetPowerLimit関数で指定

したネットワーク電源電圧の上限値を上回ったり、下限値を下回ったりした

場合、本製品は自動的にネットワークから離脱します。電源復旧後に

DnetPortOn関数を実行することにより、再度ネットワークに参加できます。

DnetSetPowerLimitMode関数を使用することにより、自動的にネットワーク

から離脱しないようにすることもできます。

Page 13: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

13

6.I/O 通信の開始

DnetConnect関数により、I/O通信を開始します。

// MAC ID = 1 のデバイスと I/O 通信を開始します

ret = DnetConnect(portNo, 1);

自ポートがマスタモードの場合、通信を行いたいデバイスの MAC ID を指定します。通信を行いたい

デバイスは、あらかじめデバイスリストに登録しておく必要があります。

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(portNo, &dnetMessage);

接続しているデバイスにあわせて、MacID、InstanceID、タイムアウト時間を設定してください。

InstanceID に設定する値は次のようになります。

I/O メッセージの種類 InstanceID 値

Poll 2

BitStrobe 3

COS、Cyclic 4

タイムアウト時間が設定できた場合、スレーブから実際に設定できた値が返信されます。

8.通信処理

DnetSetOutputIO関数で、デバイス上の送信バッファへの送信メッセージのセットを行い送信を開始

します、DnetGetInputIO関数で、デバイス上の受信バッファから受信メッセージの取り出しを行いま

す。

デバイス上の送信バッファへセットされた送信メッセージは、DnetSetConfig関数により設定された、

自ポートのI/O通信設定の各周期に従って送信されます。

Page 14: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

14

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(portNo, &portConfig);

・・・

// I/O 通信の開始

ret = DnetConnect(portNo, 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(portNo, &message);

周期に関係なくI/Oメッセージを送信したい場合は、DnetSendIO関数を使用します。この関数を使用

した場合は、即座に送信が行われます。

DNET_MESSAGE message;

// 即時送信を行います

message.MessageType = DNET_IO_BITSTROBE;

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(portNo, &message);

Page 15: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

15

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(portNo, &dnetMessage);

受信した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(portNo, &message);

受信したExplicitメッセージの取得には、DnetReceiveExplicit関数を使用します。

I/O メッセージとは違い、必ず新しいメッセージが受信されるごとに上書きされます。

DNET_EXPLICIT dnetExplicit;

ret = DnetReceiveExplicit(portno, &dnetExplicit);

DnetSetConfig関数により、蓄積型受信バッファのサイズを 0以外に設定すると、I/O受信メッセージ

がデバイス上の受信バッファと共に、蓄積型受信バッファ内にも格納されるようになります。蓄積型

受信バッファには、MAC IDやI/Oメッセージの種類に関わらず、受信したメッセージ全てが順番に格

納されていきます。

その蓄積型受信バッファからメッセージを取り出す場合に、DnetGetAccumulatedMessage関数を使用

します。

DNET_MESSAGE message[10];

unsigned long count;

// 蓄積メッセージを取り出し

count = 10;

ret = DnetGetAccumulatedMessage(portNo, &message[0], &count);

DnetGetAccumulatedMessage関数の第 3 引数には、関数実行前に取得したい受信メッセージ数を指定

します。関数が正常終了すると、実際に取得できたメッセージ数が格納されます。

Page 16: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

16

9.I/O 通信の停止

I/O通信の停止には、DnetDisconnect関数を使用します。

// MAC ID = 1 のデバイスとの I/O 通信を停止します

ret = DnetDisconnect(portNo, 1);

DnetConnect関数により設定したMAC IDを指定して、通信を停止させてください。

10.ネットワークからの離脱

DnetPortOff関数により、ネットワークからの離脱を行います。

// ネットワークから離脱します

ret = DnetPortOff(portNo);

I/O 通信を行った場合には、必ずネットワークから離脱する前に、I/O 通信を停止してください。

ネットワークから離脱すると、下記の関数が使用できるようになります。

・ DnetSetConfig

・ DnetSetDeviceList

・ DnetDeleteDeviceList

・ DnetSaveNetInfo

・ DnetInitializeNetInfo

逆に、ネットワークから離脱すると、下記の関数が使用できなくなります。

・ DnetConnect

・ DnetDisconnect

・ DnetSendIO、DnetSendIOEx

・ DnetGetInputIO、DnetGetInputIOEx

・ DnetGetAccumulatedMessage、DnetGetAccumulatedMessageEx

・ DnetSendExplicit、DnetSendExplicitEx

・ DnetReceiveExplicit、DnetReceiveExplicitEx

11.割り込みの解除

DnetKillEvent関数により、登録されているコールバック関数を解除します。

DnetSetEventMask関数で全割り込みをマスクしてから、DnetKillEvent関数を呼び出してください。

// 全割り込みをマスクします

ret = DnetSetEventMask(portNo, 0);

// 割り込みを解除します

ret = DnetKillEvent(portNo);

12.ポートのクローズ

DnetClosePort関数により、ポートのクローズ処理を行います。この関数を実行することにより、他

の関数は全て使用不可となります。

また DnetClosePort関数を呼ぶことにより、自ポート通信設定や、デバイスリストなどの情報も全て

初期状態に戻ります。

// ポートをクローズします

ret = DnetClosePort(portNo);

ネットワークに参加していた場合には、ポートのクローズを行う前に必ず、ネットワークから離脱し

てください。

Page 17: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

17

3.2.2 スレーブモード時の実行手順 製品を複数枚使用する場合は、インタフェースモジュール上のロータリスイッチ RSW1 の設定値が同

一型式同士で重複しないように設定してからスロットに実装し、システムを起動して下さい。

同一型式が複数存在する場合、制御対象を一意に識別するための番号となります。重複していた場合、

本ソフトウェアは正常に動作いたしません。

基本的な制御の手順は以下の通りです。

ポートのオープン

自ポートの設定

割り込みの設定

ネットワークに参加

通信処理

ネットワークから離脱

割り込みの解除

ポートのクローズ

1.ポートのオープン

ポートのオープンは DnetOpenPort関数によって行います。

int ret;

int portNo;

// ポートをオープンします

portNo = 1;

ret = DnetOpenPort(portNo);

DnetOpenPort関数には、オープンしたいポートのポート番号を指定します。ポート番号は、以下のよ

うになっています。

型式 RSW1 設定値 ポート番号 識別子

0 1 DNET_PORTNO_4871_0

1 2 DNET_PORTNO_4871_1

… … …

PCI-487101PQ

CPZ-487101PQ

CTP-487101PQ

F 16 DNET_PORTNO_4871_F

2.自ポートの設定

自ポートの設定は、オープン時に不揮発メモリからロードされます。DnetSetConfig関数を実行する

ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場

合、自ポートの設定を間違わないために、一度 DnetGetConfig関数で自ポート設定を取得してから、

各パラメータを変更して DnetSetConfig関数を呼び出すという方法を推奨致します。

Page 18: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

18

int ret;

DNET_PORT_CONFIG portConfig;

// 自ポート設定を取得します

ret = DnetGetConfig(portNo, &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(portNo, &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)のいずれかを指定できます。

・HeartBeatCycle メンバには、HeartBeat メッセージの送信周期を指定します。単位は sで、設定可

能範囲は 1~1000 です。

・AccumulateRxBufferSize メンバには、蓄積型受信バッファサイズ(メッセージ数)を指定します。

このバッファサイズを 0以外に指定すると、MAC ID 毎に用意しているデバイス上の受信バッファと

は異なる、蓄積型受信バッファがドライバ内に用意されます。MAC ID に関わらず、自ポートが受信

した I/O メッセージは全てこの蓄積型受信バッファに格納されるようになります(デバイス上の受

信バッファにも格納されます)。

Page 19: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

19

・OverWriteFlagメンバには、デバイス上の受信バッファの上書きの有無を指定します。デバイス上

の受信バッファには、Poll、Bit Strobe、COS/Cyclicの 3 種類のバッファがありますが、それぞれ

のバッファで、メッセージを受信するごとに上書きするか、メッセージを受信後、DnetGetInputIO

関数でメッセージを取り出さない限り上書きされないようにするかを設定します。

DNET_OVERWRITE_DISABLEをセットすると、メッセージ受信後、DnetGetInputIO関数でメッセージを

取り出さない限り上書きされないようになります。

・DeviceConfigメンバには、自ポートのI/O通信設定を行います。I/O通信設定構造体(DNET_MESSAGE

構造体)については『4.3 構造体』をご参照ください。

各メンバは、DnetInitializeNetInfo関数を実行すると、出荷時設定で上書きされますのでご注意く

ださい。

また、ポート設定の取得(DnetGetConfig関数)は、ポートオープンしていればいつでも実行できます

が、ポートの設定(DnetSetConfig関数)は、ネットワークに参加した状態(オンライン状態)では使用

できません。必ずポートオープン直後か、DnetPortOff関数でネットワークから離脱した状態(オフラ

イン状態)でご使用ください。

3.割り込みの設定

割り込みを設定することにより、各事象が発生した際に登録された関数の呼び出し(コールバック関

数)が行われます。

DnetSetEvent関数により、コールバック関数の登録を行います。DnetSetEventMask関数で割り込みマ

スクの設定、DnetGetEventMask関数で割り込みマスク値の取得を行います。

// コールバック関数

void EventProc(unsigned long event, unsigned long user)

{

// 割り込み処理を記述します

・・・

}

・・・

// メインルーチン

unsigned long eventMask;

DNET_EVENT_REQ eventReq;

// メッセージ受信時に割り込みが発生するようにマスクを設定します

eventMask = DNET_EVENT_RECV;

ret = DnetSetEventMask( portNo, eventMask);

eventReq.CallBackProc = EventProc;

eventReq.UserData = 0x1234;

ret = DnetSetEvent( portNo, &eventReq);

オープン直後は、割り込みの設定はされておらず、全ての割り込みがマスクされています。

Page 20: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

20

4.ネットワークに参加

ネットワークに参加する場合は DnetPortOn関数を使用します。

// ネットワークに参加します

ret = DnetPortOn(portNo);

ネットワーク参加中は、下記の関数は使用できません。

・ DnetSetConfig

・ DnetSaveNetInfo

・ DnetInitializeNetInfo

逆に、ネットワークに参加すると、下記の関数が使用できるようになります。

・ DnetSendIO、DnetSendIOEx

・ DnetGetInputIO、DnetGetInputIOEx

・ DnetGetAccmulatedMessage、DnetGetAccmulatedMessageEx

・ DnetSendExplicit、DnetSendExplicitEx

・ DnetReceiveExplicit、DnetReceiveExplicitEx

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(portNo, &message);

Page 21: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

21

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(portNo, &message);

受信したExplicitメッセージの取得には、DnetReceiveExplicit関数を使用します。

I/O メッセージとは違い、必ず新しいメッセージが受信されるごとに上書きされます。

DNET_EXPLICIT dnetExplicit;

ret = DnetReceiveExplicit(portNo, &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(portNo, &dnetMessage);

DnetSetConfig関数により、蓄積型受信バッファのサイズを 0以外に設定すると、I/O受信メッセージ

がデバイス上の受信バッファと共に、蓄積型受信バッファ内にも格納されるようになります。蓄積型

受信バッファには、MAC IDやI/Oメッセージの種類に関わらず、受信したメッセージ全てが順番に格

納されていきます。

その蓄積型受信バッファからメッセージを取り出す場合に、DnetGetAccumulatedMessage関数を使用

します。

DNET_MESSAGE message[10];

unsigned long count;

// 蓄積メッセージを取り出し

count = 10;

ret = DnetGetAccumulatedMessage(portNo, &message[0], &count);

Page 22: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

22

DnetGetAccumulatedMessage関数の第 3 引数には、関数実行前に取得したい受信メッセージ数を指定

します。関数が正常終了すると、実際に取得できたメッセージ数が格納されます。

6.ネットワークからの離脱

DnetPortOff関数により、ネットワークからの離脱を行います。

// ネットワークから離脱します

ret = DnetPortOff(portNo);

I/O 通信を行った場合には、必ずネットワークから離脱する前に、I/O 通信を停止してください。

ネットワークから離脱すると、下記の関数が使用できるようになります。

・ DnetSetConfig

・ DnetSaveNetInfo

・ DnetInitializeNetInfo

逆に、ネットワークから離脱すると、下記の関数が使用できなくなります。

・ DnetSendIO、DnetSendIOEx

・ DnetGetInputIO、DnetGetInputIOEx

・ DnetGetAccumulatedMessage、DnetGetAccumulatedMessageEx

・ DnetSendExplicit、DnetSendExplicitEx

・ DnetReceiveExplicit、DnetReceiveExplicitEx

7.割り込みの解除

DnetKillEvent関数により、登録されているコールバック関数を解除します。

DnetSetEventMask関数で全割り込みをマスクしてから、DnetKillEvent関数を呼び出してください。

// 全割り込みをマスクします

ret = DnetSetEventMask(portNo, 0);

// 割り込みを解除します

det = DnetKillEvent(portNo);

8.ポートのクローズ

DnetClosePort関数により、ポートのクローズ処理を行います。この関数を実行することにより、他

の関数は全て使用不可となります。

また DnetClosePort関数を呼ぶことにより、自ポート通信設定や、デバイスリストなどの情報も全て

初期状態に戻ります。

// ポートをクローズします

ret = DnetClosePort(portNo);

ネットワークに参加していた場合には、ポートのクローズを行う前に必ず、ネットワークから離脱し

てください。

Page 23: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

23

3.2.3 モニタモード時の実行手順 製品を複数枚使用する場合は、インタフェースモジュール上のロータリスイッチ RSW1 の設定値が同

一型式同士で重複しないように設定してからスロットに実装し、システムを起動して下さい。

同一型式が複数存在する場合、制御対象を一意に識別するための番号となります。重複していた場合、

本ソフトウェアは正常に動作いたしません。

基本的な制御の手順は以下の通りです。

ポートのオープン

自ポートの設定

割り込みの設定

ネットワークに参加

モニタ処理

ネットワークから離脱

割り込みの解除

ポートのクローズ

1.ポートのオープン

ポートのオープンは DnetOpenPort関数によって行います。

int ret;

int portNo;

// ポートをオープンします

portNo = 1;

ret = DnetOpenPort(portNo);

DnetOpenPort関数には、オープンしたいポートのポート番号を指定します。ポート番号は、以下のよ

うになっています。

型式 RSW1 設定値 ポート番号 識別子

0 1 DNET_PORTNO_4871_0

1 2 DNET_PORTNO_4871_1

… … …

PCI-487101PQ

CPZ-487101PQ

CTP-487101PQ

F 16 DNET_PORTNO_4871_F

2.自ポートの設定

自ポートの設定は、オープン時に不揮発メモリからロードされます。DnetSetConfig関数を実行する

ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場

合、自ポートの設定を間違わないために、一度 DnetGetConfig関数で自ポート設定を取得してから、

各パラメータを変更して DnetSetConfig関数を呼び出すという方法を推奨致します。

Page 24: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

24

int ret;

DNET_PORT_CONFIG portConfig;

// 自ポート設定を取得します

ret = DnetGetConfig(portNo, &portConfig);

// 動作モード、ボーレートと蓄積型受信バッファサイズを変更します

portConfig.Mode = DNET_MODE_MONITOR;

portConfig.BaudRate = DNET_BAUDRATE_500K;

portConfig.DeviceConfig.AccumulateRxBufferSize= 64;

// 自ポートの設定を行います

ret = DnetSetConfig(portNo, &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)のいずれかを指定できます。

・AccumulateRxBufferSize メンバには、蓄積型受信バッファサイズ(メッセージ数)を指定します。

このバッファサイズを 0以外に指定すると、蓄積型受信バッファがドライバ内に用意されます。MAC

ID に関わらず、自ポートが受信したメッセージは全てこの蓄積型受信バッファに格納されるように

なります。

モニタモードでは、メッセージは蓄積型受信バッファにしか格納されません。そのため、必ず

AccumulateRxBufferSize には 0以外の値を指定してください。

各メンバは、DnetInitializeNetInfo関数を実行すると、出荷時設定で上書きされますのでご注意く

ださい。また、ポート設定の取得(DnetGetConfig関数)は、ポートオープンしていればいつでも実行

できますが、ポートの設定(DnetSetConfig関数)は、ネットワークに参加した状態(オンライン状態)

では使用できません。必ずポートオープン直後か、DnetPortOff関数でネットワークから離脱した状

態(オフライン状態)でご使用ください。

Page 25: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

25

3.割り込みの設定

割り込みを設定することにより、各事象が発生した際に登録された関数の呼び出し(コールバック関

数)が行われます。

DnetSetEvent関数により、コールバック関数の登録を行います。DnetSetEventMask関数で割り込みマ

スクの設定、DnetGetEventMask関数で割り込みマスク値の取得を行います。

// コールバック関数

void EventProc(unsigned long event, unsigned long user)

{

// 割り込み処理を記述します

・・・

}

・・・

// メインルーチン

unsigned long eventMask;

DNET_EVENT_REQ eventReq;

// メッセージ受信時に割り込みが発生するようにマスクを設定します

eventMask = DNET_EVENT_RECV;

ret = DnetSetEventMask( portNo, eventMask);

eventReq.CallBackProc = EventProc;

eventReq.UserData = 0x1234;

ret = DnetSetEvent( portNo, &eventReq);

オープン直後は、割り込みの設定はされておらず、全ての割り込みがマスクされています。

4.ネットワークに参加

ネットワークに参加する場合は DnetPortOn関数を使用します。

// ネットワークに参加します

ret = DnetPortOn(portNo);

ネットワーク参加中は、下記の関数は使用できません。

・ DnetSetConfig

・ DnetSaveNetInfo

・ DnetInitializeNetInfo

逆に、ネットワークに参加すると、下記の関数が使用できるようになります。

・ DnetGetAccmulatedMessage、DnetGetAccmulatedMessageEx

5.モニタ処理

モニタモードではネットワーク上を流れているメッセージ(Explicit、I/O)を全て受信します。

受信したメッセージの取得には、DnetGetAccumulatedMessage関数を使用します。

そのため、DnetSetConfig関数により、蓄積型受信バッファのサイズを 1 以上に設定する必要があり

ます。

Page 26: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

26

DNET_MESSAGE message[10];

unsigned long count;

// 蓄積メッセージを取り出し

count = 10;

ret = DnetGetAccumulatedMessage(portNo, &message[0], &count);

DnetGetAccumulatedMessage関数の第 3 引数には、関数実行前に取得したい受信メッセージ数を指定

します。関数が正常終了すると、実際に取得できたメッセージ数が格納されます。

6.ネットワークからの離脱

DnetPortOff関数により、ネットワークからの離脱を行います。

// ネットワークから離脱します

ret = DnetPortOff(portNo);

ネットワークから離脱すると、下記の関数が使用できるようになります。

・ DnetSetConfig

・ DnetSaveNetInfo

・ DnetInitializeNetInfo

逆に、ネットワークから離脱すると、下記の関数が使用できなくなります。

・ DnetGetAccumulatedMessage、DnetGetAccumulatedMessageEx

7.割り込みの解除

DnetKillEvent関数により、登録されているコールバック関数を解除します。

DnetSetEventMask関数で全割り込みをマスクしてから、DnetKillEvent関数を呼び出してください。

// 全割り込みをマスクします

ret = DnetSetEventMask(portNo, 0);

// 割り込みを解除します

det = DnetKillEvent(portNo);

8.ポートのクローズ

DnetClosePort関数により、ポートのクローズ処理を行います。この関数を実行することにより、他

の関数は全て使用不可となります。

また DnetClosePort関数を呼ぶことにより、自ポート通信設定や、デバイスリストなどの情報も全て

初期状態に戻ります。

// ポートをクローズします

ret = DnetClosePort(portNo);

ネットワークに参加していた場合には、ポートのクローズを行う前に必ず、ネットワークから離脱し

てください。

Page 27: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

27

3.3 テストドライバの使用方法 本ソフトウェアには、インタフェースモジュールがなくてもドライバを動かすことができるテストド

ライバ機能がついております。

テストドライバを使用する場合は、libgpg4871.so の代わりに libgpg4871t.so をリンクし、コンパ

イルしてください。

テストドライバ機能を使用するプログラム test.c をコンパイルする場合のコンパイル例を示します。 #gcc -o test test.c -lpthread –lgpg4871t

各関数は下記のように動作します。

関数 動作

DnetOpenPort 引数が正常であれば 0を返します。

DnetClosePort 引数が正常であれば 0を返します。

DnetPortOn 引数が正常であれば 0を返します。

DnetPortOff 引数が正常であれば 0を返します。

DnetSetConfig 引数が正常であれば 0を返します。

DnetGetConfig 引数が正常であれば 0を返します。

デフォルトの設定が返されます。

DnetSetPowerLimit 引数が正常であれば 0を返します。

DnetGetPowerLimit 引数が正常であれば 0を返します。

デフォルトの設定が返されます。

DnetSetPowerLimitMode 引数が正常であれば 0を返します。

DnetGetPowerLimitMode 引数が正常であれば 0を返します。

デフォルトの設定が返されます。

DnetSetPowerFilter 引数が正常であれば 0を返します。

DnetGetPowerFilter 引数が正常であれば 0を返します。

デフォルトの設定が返されます。

DnetConnect 引数が正常であれば 0を返します。

DnetDisconnect 引数が正常であれば 0を返します。

DnetSendIO 引数が正常であれば 0を返します。

DnetSendIOEx 引数が正常であれば 0を返します。

DnetSetOutputIO 引数が正常であれば 0を返します。

DnetSetOutputIOEx 引数が正常であれば 0を返します。

DnetGetInputIO 引数が正常であれば 0を返します。

DnetGetInputIOEx 引数が正常であれば 0を返します。

DnetSendExplicit 引数が正常であれば 0を返します。

DnetSendExplicitEx 引数が正常であれば 0を返します。

DnetReceiveExplicit 引数が正常であれば 0を返します。

DnetReceiveExplicitEx 引数が正常であれば 0を返します。

DnetGetAccumulatedMessage 引数が正常であれば 0を返します。

DnetGetAccumulatedMessageEx 引数が正常であれば 0を返します。

DnetGetPortStatus 引数が正常であれば 0を返します。

DnetGetSlaveStatus 引数が正常であれば 0を返します。

DnetGetErrorEvent 引数が正常であれば 0を返します。

DnetClearBuffer 引数が正常であれば 0を返します。

DnetGetNetworkPower 引数が正常であれば 0を返します。

DnetSetEvent 引数が正常であれば 0を返します。

DnetSetEventMask 引数が正常であれば 0を返します。

DnetGetEventMask 引数が正常であれば 0を返します。

DnetKillEvent 引数が正常であれば 0を返します。

DnetSetDeviceList 引数が正常であれば 0を返します。

Page 28: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

28

DnetGetDeviceList 登録情報なしでリターンします。

DnetDeleteDeviceList 引数が正常であれば 0を返します。

DnetSaveNetInfo 引数が正常であれば 0を返します。

DnetInitializeNetInfo 引数が正常であれば 0を返します。

CallbackProc 使用できません。

Page 29: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

29

第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 DnetConnect I/O 通信を開始します。 × ○ ×

14 DnetDisconnect I/O 通信を停止します。 × ○ ×

15 DnetSendIO 最大 256byte の I/O メッセージを送信します。 × ○ ○

16 DnetSendIOEx 最大 512byte の I/O メッセージを送信します。 × ○ ○

17 DnetSetOutputIO 最大 256byte の I/O メッセージを送信バッファに

セットします。

× ○ ○

18 DnetSetOutputIOEx 最大 512byte I/O メッセージを送信バッファにセ

ットします。

× ○ ○

19 DnetGetInputIO 最大 256byte の I/O 受信バッファからメッセージ

を取り出します。

× ○ ○

20 DnetGetInputIOEx 最大 512byte I/O 受信バッファからメッセージを

取り出します。

× ○ ○

21 DnetSendExplicit 最大 256byte の Explicit メッセージを送信しま

す。

× ○ ○

22 DnetSendExplicitEx 最大 512byte Explicit メッセージを送信します。 × ○ ○

23 DnetReceiveExplicit 最大 256byte の Explicit メッセージを受信しま

す。

× ○ ○

24 DnetReceiveExplicitEx 最大 512byte Explicit メッセージを受信します。 × ○ ○

25 DnetGetAccumulatedMessage 最大 256byte の蓄積バッファからメッセージを取

り出します。

○ ○ ○

26 DnetGetAccumulatedMessage

Ex

最大 512byte 蓄積バッファからメッセージを取り

出します。

○ ○ ○

●その他(ステータス取得など)

27 DnetGetPortStatus ステータスを取得します。 ○ ○ ○

28 DnetGetSlaveStatus スレーブステータスを取得します。 × ○ ×

Page 30: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

30

No 関数名 機能 Mon Mst Slv

29 DnetGetErrorEvent エラー情報を取得します。 ○ ○ ○

30 DnetClearBuffer 各種バッファのクリアを行います。 ○ ○ ○

31 DnetGetNetworkPower ネットワーク電源電圧値を取得します。

○ ○ ○

●割り込み設定関数

32 DnetSetEvent イベント条件の設定を行います。 ○ ○ ○

33 DnetSetEventMask イベントマスクの設定を行います。 ○ ○ ○

34 DnetGetEventMask イベントマスクの取得を行います。 ○ ○ ○

35 DnetKillEvent イベント条件の破棄を行います。 ○ ○ ○

●デバイスリスト操作関数

36 DnetSetDeviceList リストにデバイス情報をセットします。 × ○ ×

37 DnetGetDeviceList リストからデバイス情報を取得します。 × ○ ×

38 DnetDeleteDeviceList リストからデバイス情報を消去します。 × ○ ×

●ネットワーク情報保存/読み出し

39 DnetSaveNetInfo 通信情報をデバイスの不揮発メモリに保存します。 ○ ○ ○

40 DnetInitializeNetInfo 通信情報を出荷時設定に戻します。 ○ ○ ○

Page 31: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

31

4.2 関数個別説明

1. DnetOpenPort

DeviceNet インタフェース製品のオープンを行い、以後のデバイスへのアクセスを行えるように

します。

int DnetOpenPort(

int portNo

);

パラメータ

portNo オープンするポート番号を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

オープンが正常に行われると MS LED が緑点灯します。

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

PCI-487101PQ の RSW1 設定値が 0(ポート番号 1)のポートをオープンします。

Page 32: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

32

2. DnetClosePort

DeviceNet インタフェース製品をクローズします。

デバイスアクセスのために使用されていた各種リソースの解放を行い、以後のデバイスへのアク

セスを禁止します。

int DnetClosePort(

int portNo

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

本関数を実行する前に、必ずI/O通信の停止(DnetDisconnect関数)、ネットワークからの離脱

(DnetPortOff関数)を行ってください。行わなかった場合、デバイスを再オープンしてもネット

ワークへの接続、I/O通信の開始が行えなくなります。この場合、システムを再起動させる必要が

あります。

再度、デバイスへのアクセスを行う場合にはオープン処理(DnetOpenPort関数)を呼び出してくだ

さい。

クローズが正常終了すると MS LED が緑点滅になります。

本関数を実行せずにプログラムを終了した場合でも、MS LED が緑点滅状態であれば再度オープン

を行うことができます。

使用例

int ret;

int portNo = 1;

ret = DnetClosePort( portNo );

ポート番号 portNo のポートをクローズします。

Page 33: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

33

3. DnetPortOn

DeviceNet インタフェース製品をネットワークに参加させます。

DnetSetConfig関数により通信設定を行ってから本関数を実行してください。

int DnetPortOn(

int portNo

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

ネットワークに参加できた場合、NS LED が緑点滅します。

ネットワーク参加中は、下記の関数は使用できません。

・ DnetSetConfig

・ DnetSetDeviceList

・ DnetDeleteDeviceList

・ DnetSaveNetInfo

・ DnetInitializeNetInfo

逆に、ネットワークに参加すると、下記の関数が使用できるようになります。

・ DnetConnect

・ DnetDisconnect

・ DnetSendIO、DnetSendIOEx

・ DnetSetOutIO、DnetSetOutIOEx

・ DnetGetInputIO、DnetGetInputIOEx

・ DnetGetAccumulatedMessage、DnetGetAccumulatedMessageEx

・ DnetSendExplicit、DnetSendExplicitEx

・ DnetReceiveExplicit、DnetReceiveExplicitEx

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

ret = DnetPortOn( portNo );

ポート番号 portNo のデバイスをネットワークに参加させます。

Page 34: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

34

4. DnetPortOff

DeviceNet インタフェース製品をネットワークから離脱させます。

int DnetPortOff(

int portNo

);

パラメータ

portNo 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

逆に、ネットワークから離脱すると、下記の関数が使用できるようになります。

・ DnetSetConfig

・ DnetSetDeviceList

・ DnetDeleteDeviceList

・ DnetSaveNetInfo

・ DnetInitializeNetInfo

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

ret = DnetPortOn( portNo );

ret = DnetPortOff( portNo );

ポート番号 portNo のデバイスをネットワークから離脱させます。

Page 35: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

35

5. DnetSetConfig

DeviceNet インタフェース製品の自ポート設定を行います。

動作モードや通信速度、I/O 通信設定などの自ポートに関する全設定を本関数で行います。

int DnetSetConfig(

int portNo,

PDNET_PORT_CONFIG portConfig

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

portConfig 自ポートの設定値を格納した DNET_PORT_CONFIG構造体を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

設定の誤りを防ぐために、DnetGetConfig関数で取得した DNET_PORT_CONFIG構造体を変更して本

関数に渡すことを推奨します。

また、本関数はネットワーク離脱中にのみ使用できます。

使用例

int ret;

int portNo = 1;

DNET_PORT_CONFIG portConfig;

ret = DnetOpenPort( portNo );

// ボーレートを 250kbps にします

ret = DnetGetConfig( portNo, &portConfig);

portConfig.BaudRate = DNET_BAUDRATE_250K;

ret = DnetSetConfig( portNo, &portConfig);

ポート番号 portNo のデバイスのボーレートを 250kbps にします。

Page 36: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

36

6. DnetGetConfig

DeviceNet インタフェースの自ポート設定情報を取得します。

int DnetGetConfig(

int portNo,

PDNET_PORT_CONFIG portConfig

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

portConfig 自ポートの設定値を格納する DNET_PORT_CONFIG構造体を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

使用例

int ret;

int portNo = 1;

DNET_PORT_CONFIG portConfig;

ret = DnetOpenPort( portNo );

ret = DnetGetConfig( portNo, &portConfig);

ポート番号 portNo のデバイスのポート設定を取得します。

Page 37: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

37

7. DnetSetPowerLimit

DeviceNet インタフェースのネットワーク電源電圧下限/上限値を設定します。

ネットワーク電源電圧値が下限値を下回った場合、またはネットワーク電源電圧値を上回った場

合にイベントを発生させることができます。

int DnetSetPowerLimit(

int portNo,

unsigned long limitKind,

float powerLimit

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

limitKind 下限値を設定するか、上限値を設定するかを選択します。

設定可能な値は下記の通りです。

識別子 値 内容

DNET_POWER_LOWER_LIMIT 0 下限値を設定します。

DNET_POWER_UPPER_LIMIT 1 上限値を設定します。

powerLimit ネットワーク電源電圧の下限値/上限値を指定します。

単位は[V]で、設定可能範囲は、0.6[V]~25.6[V]です。

戻り値

正常終了した場合は、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]になった瞬間にもイベントが発生

する可能性があります。

Page 38: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

38

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

ret = DnetSetPowerLimit( portNo, DNET_POWER_LOWER_LIMIT, 12);

ポート番号 portNo のデバイスの下限値を 12V に設定します。

Page 39: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

39

8. DnetGetPowerLimit

DeviceNet インタフェースのネットワーク電源電圧下限/上限値を取得します。

int DnetGetPowerLimit(

int portNo,

unsigned long limitKind,

float* powerLimit

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

limitKind 下限値を取得するか、上限値を取得するかを選択します。

設定可能な値は下記の通りです。

識別子 値 内容

DNET_POWER_LOWER_LIMIT 0 下限値を設定します。

DNET_POWER_UPPER_LIMIT 1 上限値を設定します。

powerLimit ネットワーク電源電圧の下限値/上限値を格納する変数を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

使用例

int ret;

int portNo = 1;

float lowerLimit;

ret = DnetOpenPort( portNo );

ret = DnetGetPowerLimit( portNo, DNET_POWER_LOWER_LIMIT, &lowerLimit);

ポート番号 portNo のデバイスの下限値を取得します。

Page 40: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

40

9. DnetSetPowerLimitMode

DeviceNet インタフェースのネットワーク電源電圧値が下限値を下回った場合、またはネットワ

ーク電源電圧値を上回った場合の動作を設定します。

int DnetSetPowerLimitMode(

int portNo,

unsigned long limitKind,

unsigned long limitMode

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

limitKind 下限値を設定するか、上限値を設定するかを選択します。

設定可能な値は下記の通りです。

識別子 値 内容

DNET_POWER_LOWER_LIMIT 0 下限値の設定をします。

DNET_POWER_UPPER_LIMIT 1 上限値の設定をします。

limitMode 動作を設定します。

設定可能な値は下記の通りです。

識別子 値 内容

DNET_LIMIT_OFF_ENABLE 0 自動的にネットワークから離脱します。(デフォルト)

DNET_LIMIT_OFF_DISABLE 1 自動的にネットワークから離脱しません。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

デフォルトの設定では、ネットワーク電源が下限値を下回った場合、上限値を上回った場合に本

製品は自動的にネットワークから離脱します。

下限値、上限値にそれぞれ自動的にネットワークから離脱するか設定することができます。

本関数は、使用する製品の版数とチェンジナンバーにより使用できない事があります。

以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.6 製品

の版数、チェンジナンバーについて』をご参照ください。

・ PCI-487101PQ[12]C08 以降の製品

・ CTP-487101PQ[11]C08 以降の製品

・ CPZ-487101PQ[11]以降の製品

Page 41: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

41

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

ret = DnetSetPowerLimitMode( portNo, DNET_POWER_LOWER_LIMIT, DNET_LIMIT_OFF_DISABLE);

ポート番号 portNo のデバイスの下限値での自動ネットワーク離脱をしないようにする。

Page 42: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

42

10. DnetGetPowerLimitMode DeviceNet インタフェースのネットワーク電源電圧値が下限値を下回った場合、またはネットワ

ーク電源電圧値を上回った場合の動作設定を取得します。

int DnetGetPowerLimitMode(

int portNo,

unsigned long limitKind,

unsigned long* limitMode

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

limitKind 下限値の設定を取得するか、上限値の設定を取得するかを選択します。

設定可能な値は下記の通りです。

識別子 値 内容

DNET_POWER_LOWER_LIMIT 0 下限値を取得します。

DNET_POWER_UPPER_LIMIT 1 上限値を取得します。

limitMode 動作設定を格納する変数を指定します。

取得可能な値は下記の通りです。

識別子 値 内容

DNET_LIMIT_OFF_ENABLE 0 自動的にネットワークから離脱します。(デフォルト)

DNET_LIMIT_OFF_DISABLE 1 自動的にネットワークから離脱しません。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

本関数は、使用する製品の版数とチェンジナンバーにより使用できない事があります。

以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.6 製品

の版数、チェンジナンバーについて』をご参照ください。

・ PCI-487101PQ[12]C08 以降の製品

・ CTP-487101PQ[11]C08 以降の製品

・ CPZ-487101PQ[11]以降の製品

Page 43: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

43

使用例

int ret;

int portNo = 1;

unsigned long limitMode;

ret = DnetOpenPort( portNo );

ret = DnetGetPowerLimitMode(portNo, DNET_POWER_LOWER_LIMIT, &limitMode);

ポート番号 portNo のデバイスの下限値の動作設定を取得します。

Page 44: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

44

11. DnetSetPowerFilter DeviceNet インタフェースのネットワーク電源電圧の監視機能にフィルタを設定することができ

ます。フィルタは上限値と下限値にそれぞれ設定することができます。

int DnetSetPowerFilter(

int portNo,

unsigned long limitKind,

unsigned long powerFilter

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

limitKind フィルタを下限値に設定するか、上限値に設定するかを選択します。

設定可能な値は下記の通りです。

識別子 値 内容

DNET_POWER_LOWER_LIMIT 0 下限値に設定します。

DNET_POWER_UPPER_LIMIT 1 上限値に設定します。

powerFilter フィルタの設定をします。

設定可能な値は下記の通りです。

識別子 値 内容

DNET_POWER_FILTER_DISABLE 0 フィルタを無効にする。(デフォルト)

DNET_POWER_FILTER_ENABLE 1 フィルタを有効にする。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

フィルタは 100ms のデジタルフィルタで、フィルタを有効にすることにより、ノイズ等による一

瞬の電圧変化の検出を抑制することができます。

デフォルトの設定では、フィルタは無効になっています。

下限値、上限値にそれぞれフィルタを設定することができます。

本関数は、使用する製品の版数とチェンジナンバーにより使用できない事があります。

以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.6 製品

の版数、チェンジナンバーについて』をご参照ください。

・ CTP-487101PQ[12]以降の製品

・ CPZ-487101PQ[12]以降の製品

Page 45: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

45

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

ret = DnetSetPowerFilter( portNo, DNET_POWER_UPPER_LIMIT, DNET_POWER_FILTER_ENABLE);

ポート番号 portNo のデバイスの下限値のフィルタを有効にします。

Page 46: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

46

12. DnetGetPowerFilter DeviceNet インタフェースのネットワーク電源電圧監視機能のフィルタ設定を取得します。

int DnetGetPowerFilter(

int portNo,

unsigned long limitKind,

unsigned long* powerFilter

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

limitKind 下限値の設定を取得するか、上限値の設定を取得するかを選択します。

設定可能な値は下記の通りです。

識別子 値 内容

DNET_POWER_LOWER_LIMIT 0 下限値の設定を取得します。

DNET_POWER_UPPER_LIMIT 1 上限値の設定を取得します。

powerFilter フィルタ設定を格納する変数を指定します。

取得可能な値は下記の通りです。

識別子 値 内容

DNET_POWER_FILTER_DISABLE 0 フィルタを無効にする。(デフォルト)

DNET_POWER_FILTER_ENABLE 1 フィルタを有効にする。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

本関数は、使用する製品の版数とチェンジナンバーにより使用できない事があります。

以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.6 製品

の版数、チェンジナンバーについて』をご参照ください。

・ CTP-487101PQ[12]以降の製品

・ CPZ-487101PQ[12]以降の製品

使用例

int ret;

int portNo = 1;

unsigned long powerFilter;

ret = DnetOpenPort( portNo );

ret = DnetGetPowerFilter( portNo, DNET_POWER_LOWER_LIMIT, &powerFilter);

ポート番号 portNo のデバイスの下限値のフィルタ設定を取得します。

Page 47: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

47

13. DnetConnect 他ポートのデバイスとの接続を確立し、I/O 通信を開始します。

int DnetConnect(

int portNo,

unsigned long macID

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

macID 接続相手の MAC ID を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

接続が確立すると NS LED が緑点灯になります。

最初に通信を行うとき、または、何らかの要因で接続が切れたスレーブデバイスに対して再接続

を行うときに使用します。スレーブデバイス側から切断が行われた場合には、マスタ側も一度

DnetDisconnect関数で接続を切る必要があります。

自ポートがマスタモード時、指定したスレーブデバイスの情報がデバイスリストに設定されてい

ない場合、本関数はエラーを返します。事前に DnetSetDeviceList関数で、スレーブデバイスの

情報を登録してください。

また、本関数はネットワーク参加中にのみ使用できます。

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

ret = DnetConnect( portNo, 1);

ポート番号 portNo のデバイスと MAC ID が 1 のデバイスとの通信を開始します。

Page 48: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

48

14. DnetDisconnect 他ポートのデバイスとの接続を切断し、I/O 通信を停止します。

int DnetDisconnect(

int portNo,

unsigned long macID

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

macID 切断するデバイスの MAC ID を指定してください。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

全ての接続が切断されると NS LED が緑点滅になります。

処理を終了するときには必ず本関数で接続を切断してください。

本関数はネットワークに参加中のみ使用できます。

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

ret = DnetConnect( portNo, 1);

ret = DnetDisconnect( portNo, 1);

ポート番号 portNo のデバイスと MAC ID が 1 のデバイスとの接続を切断します。

Page 49: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

49

15. DnetSendIO I/O メッセージの送信を行います。

DnetSetOutputIO関数により、設定されたメッセージは自動的に周期送信されますが、本関数は実

行すると即座に渡したメッセージが送信されます。周期的な送信を阻害しないようにご注意くだ

さい。

スレーブモード時に自動応答に設定した場合、送信は即座に行われません。

本関数では最大 256byte までのメッセージを送信できます。256byte より大きいメッセージを送

信する場合には DnetSendIOEx 関数を使用してください。

int DnetSendIO(

int portNo,

PDNET_MESSAGE dnetMessage

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetMessage 送信したいメッセージ(DNET_MESSAGE構造体)を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

送信が完了したかどうかは、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定すること

で全ての送信が完了した時点で割り込みを発生させることが出来ます(コールバック関数)。

スレーブモード時に自動応答に設定した場合、本関数はメッセージのセットのみ行います。セッ

トされたメッセージは、マスタから送信されたメッセージを受信した時に自動的に送信します。

使用例

int ret;

int portNo = 1;

DNET_MESSAGE dnetMessage;

// 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( portNo, &dnetMessage);

ポート番号 portNo のデバイスから MAC ID が 7 のデバイスへ I/O メッセージを送信します。

Page 50: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

50

16. DnetSendIOEx I/O メッセージの送信を行います。

DnetSetOutputIO関数により、設定されたメッセージは自動的に周期送信されますが、本関数は実

行すると即座に渡したメッセージが送信されます。周期的な送信を阻害しないようにご注意くだ

さい。

スレーブモード時に自動応答に設定した場合、送信は即座に行われません。

本関数では最大 512byte までのメッセージを送信できます。

int DnetSendIOEx(

int portNo,

PDNET_MESSAGE_EX dnetMessageEx

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetMessageEx 送信したいメッセージ(DNET_MESSAGE_EX構造体)を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

送信が完了したかどうかは、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定すること

で全ての送信が完了した時点で割り込みを発生させることが出来ます(コールバック関数)。

本関数は、使用する製品の版数とチェンジナンバーにより使用できない事があります。

以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.6 製品

の版数、チェンジナンバーについて』をご参照ください。

・ PCI-487101PQ[12]C10 以降の製品

・ CTP-487101PQ[12]C02 以降の製品

・ CPZ-487101PQ[12]C01 以降の製品

使用例

int ret;

int portNo = 1;

DNET_MESSAGE_EX dnetMessageEx;

// 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( portNo, &dnetMessageEx );

ポート番号 portNo のデバイスから MAC ID が 7 のデバイスへ I/O メッセージを送信します。

Page 51: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

51

17. DnetSetOutputIO 周期送信する I/O メッセージの送信メッセージをセットし送信を開始します。

DnetSetConfig関数、またはネットワーク情報設定ユーティリティで設定した条件に従って周期的

に送信されます。

本関数では最大 256byte までのメッセージを送信できます。256byte より大きいメッセージを送

信する場合には DnetSetOutputIOEx 関数を使用してください。

int DnetSetOutputIO(

int portNo,

PDNET_MESSAGE dnetMessage

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetMessage 周期送信したいメッセージ(DNET_MESSAGE構造体)を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

周期送信中に本関数を実行すると、次の周期から更新されたメッセージが送信されます。

DnetSendIO関数で送信するメッセージは、本関数の周期送信よりも優先して送信されます。

使用例

int ret;

int portNo = 1;

DNET_MESSAGE dnetMessage;

// 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( portNo, &dnetMessage);

ポート番号 portNo のデバイスから MAC ID が 2 のデバイスへ I/O メッセージを周期送信します。

Page 52: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

52

注意事項

1)複数のデバイスに対して周期送信を行っている場合に送信の周期が重なった時は、後に送信

するメッセージは前のメッセージが出されてから送信されます。

2)全く同時に送信周期が重なった場合は、下記の優先度に従い送信順番を決めます。(優先度の

高い方から低い方へ順番にメッセージが送信されます。)

・先に本関数を呼び出した方が優先度が高くなります。

・1)のように周期が重なって送信タイミングがずれた場合、そのメッセージの優先度は

その時点で最低になります。

・一度設定したメッセージを更新した場合は、優先度は変わりません。

A A

B B

300ms

250ms

A A

300ms

B B B

Aの送信後に

ずれる

周期が

重なっている

B

250ms 周期はここから

250msになる

Page 53: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

53

18. DnetSetOutputIOEx 周期送信する I/O メッセージの送信メッセージをセットし送信を開始します。

DnetSetConfig関数、またはネットワーク情報設定ユーティリティで設定した条件に従って周期的

に送信されます。

本関数では最大 512byte までのメッセージを送信できます。

int DnetSetOutputIOEx(

int portNo,

PDNET_MESSAGE_EX dnetMessageEx

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetMessageEx 周期送信したいメッセージ(DNET_MESSAGE_EX構造体)を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

周期送信中に本関数を実行すると、次の周期から更新されたメッセージが送信されます。

DnetSendIO関数で送信するメッセージは、本関数の周期送信よりも優先して送信されます。

本関数は、使用する製品の版数とチェンジナンバーにより使用できない事があります。

以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.6 製品

の版数、チェンジナンバーについて』をご参照ください。

・ PCI-487101PQ[12]C10 以降の製品

・ CTP-487101PQ[12]C02 以降の製品

・ CPZ-487101PQ[12]C01 以降の製品

使用例

int ret;

int portNo = 1;

DNET_MESSAGE_EX dnetMessageEx;

// 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( portNo, &dnetMessageEx );

ポート番号 portNo のデバイスから MAC ID が 2 のデバイスへ I/O メッセージを周期送信します。

Page 54: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

54

注意事項

3)複数のデバイスに対して周期送信を行っている場合に送信の周期が重なった時は、後に送信

するメッセージは前のメッセージが出されてから送信されます。

4)全く同時に送信周期が重なった場合は、下記の優先度に従い送信順番を決めます。(優先度の

高い方から低い方へ順番にメッセージが送信されます。)

・先に本関数を呼び出した方が優先度が高くなります。

・1)のように周期が重なって送信タイミングがずれた場合、そのメッセージの優先度は

その時点で最低になります。

・一度設定したメッセージを更新した場合は、優先度は変わりません。

A A

B B

300ms

250ms

A A

300ms

B B B

Aの送信後に

ずれる

周期が

重なっている

B

250ms 周期はここから

250msになる

Page 55: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

55

19. DnetGetInputIO 受信した I/O メッセージを取り出します。

本関数では最大 256byteまでのメッセージを取り出せます。受信したメッセージが 256byteより大

きい場合は DnetGetInputIOEx関数を使用してください。

int DnetGetInputIO(

int portNo,

PDNET_MESSAGE dnetMessage

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetMessage 受信メッセージを格納する DNET_MESSAGE構造体を指定してください。

関数が正常終了すると、受信メッセージが DNET_MESSAGE構造体に格納されます。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

デバイス内の受信バッファから、受信メッセージを取り出します。

最新のメッセージかどうかを確認するためには、DnetGetSlaveStatus関数を用い、目的のI/Oメッ

セージの受信タイムスタンプを確認してください。受信メッセージの上書きがあった場合、その

時のタイムスタンプが記録されていますので、ここの値に変化がない場合は、新しいメッセージ

は受信されていないということになります。

一度もメッセージを受信していない状態で本関数を呼び出すと、IFDNET_ERROR_NO_DATA を返しエ

ラー終了します。

一度でもメッセージを受信すると、更新されるまで同じメッセージを取得できます。

受信しているメッセージが 256byte より大きい場合に、本関数を実行するとメッセージの 256byte

目まで取得できますが、257byte 目以降のデータは取得できません。

使用例

int ret;

int portNo = 1;

DNET_MESSAGE dnetMessage;

// 受信メッセージの取り出し

dnetMessage.MessageType = DNET_IO_POLL;

dnetMessage.MacID = 2;

ret = DnetGetInputIO(portNo, &dnetMessage);

ポート番号 portNo のデバイスから MAC ID が 2のデバイスからの Poll 受信メッセージを取得しま

す。

Page 56: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

56

20. DnetGetInputIOEx 受信した I/O メッセージを取り出します。

本関数では最大 512byte までのメッセージを取り出せます。

int DnetGetInputIOEx(

int portNo,

PDNET_MESSAGE_EX dnetMessageEx

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetMessageEx 受信メッセージを格納する DNET_MESSAGE_EX構造体を指定してください。

関数が正常終了すると、受信メッセージが DNET_MESSAGE_EX構造体に格納されます。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

デバイス内の受信バッファから、受信メッセージを取り出します。

最新のメッセージかどうかを確認するためには、DnetGetSlaveStatus関数を用い、目的のI/Oメッ

セージの受信タイムスタンプを確認してください。受信メッセージの上書きがあった場合、その

時のタイムスタンプが記録されていますので、ここの値に変化がない場合は、新しいメッセージ

は受信されていないということになります。

一度もメッセージを受信していない状態で本関数を呼び出すと、IFDNET_ERROR_NO_DATA を返しエ

ラー終了します。

一度でもメッセージを受信すると、更新されるまで同じメッセージを取得できます。

本関数は、使用する製品の版数とチェンジナンバーにより使用できない事があります。

以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.6 製品

の版数、チェンジナンバーについて』をご参照ください。

・ PCI-487101PQ[12]C10 以降の製品

・ CTP-487101PQ[12]C02 以降の製品

・ CPZ-487101PQ[12]C01 以降の製品

使用例

int ret;

int portNo = 1;

DNET_MESSAGE_EX dnetMessageEx;

// 受信メッセージの取り出し

dnetMessageEx.MessageType = DNET_IO_POLL;

dnetMessageEx.MacID = 2;

ret = DnetGetInputIOEx(portNo, &dnetMessageEx);

ポート番号 portNo のデバイスから MAC ID が 2のデバイスからの Poll 受信メッセージを取得しま

す。

Page 57: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

57

21. DnetSendExplicit Explicit メッセージの送信を行います。

本関数では最大 256byte までのメッセージを送信できます。256byte より大きいメッセージを送

信する場合には DnetSendExplicitEx 関数を使用してください。

int DnetSendExplicit(

int portNo,

PDNET_EXPLICIT dnetExplicit

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetExplicit 送信したいメッセージ(DNET_EXPLICIT構造体)を指定してください。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

送信が完了したかどうかは、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定すること

で全ての送信が完了した時点で割り込みを発生させることが出来ます(コールバック関数)。

使用例

int ret;

int portNo = 1;

DNET_EXPLICIT dnetExplicit;

// 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( portNo, &dnetExplicit);

ポート番号 portNo のデバイスから MAC ID が 2 のデバイスへ Explicit メッセージを送信します。

Page 58: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

58

22. DnetSendExplicitEx Explicit メッセージの送信を行います。

本関数では最大 512byte までのメッセージを送信できます。

int DnetSendExplicitEx(

int portNo,

PDNET_EXPLICIT_EX dnetExplicitEx

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetExplicitEx 送信したいメッセージ(DNET_EXPLICIT_EX構造体)を指定してください。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

送信が完了したかどうかは、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定すること

で全ての送信が完了した時点で割り込みを発生させることが出来ます(コールバック関数)。

本関数は、使用する製品の版数とチェンジナンバーにより使用できない事があります。

以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.6 製品

の版数、チェンジナンバーについて』をご参照ください。

・ PCI-487101PQ[12]C10 以降の製品

・ CTP-487101PQ[12]C02 以降の製品

・ CPZ-487101PQ[12]C01 以降の製品

使用例

int ret;

int portNo = 1;

DNET_EXPLICIT_EX dnetExplicitEx;

// 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( portNo, &dnetExplicitEx);

ポート番号 portNo のデバイスから MAC ID が 2 のデバイスへ Explicit メッセージを送信します。

Page 59: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

59

23. DnetReceiveExplicit 受信した Explicit メッセージを取り出します。

本関数では最大 256byte までのメッセージを取り出せます。受信したメッセージが 256byte より

大きい場合は DnetReceiveExplicitEx 関数を使用してください。

int DnetReceiveExplicit(

int portNo,

PDNET_EXPLICIT dnetExplicit

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetExplicit 受信メッセージを格納する DNET_EXPLICIT構造体を指定して下さい。

関数が正常終了すると、受信メッセージが DNET_EXPLICIT構造体に格納されます。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

デバイス内の受信バッファから、受信メッセージを取り出します。

一度もメッセージを受信していない状態で本関数を呼び出すと、IFDNET_ERROR_NO_DATA を返しエ

ラー終了します。

一度でもメッセージを受信すると、メッセージが更新されるまで同じメッセージを取得できます。

動作モードをマスタモード+Explicit メッセージバッファ拡張に設定した場合、Explicit メッセ

ージをスレーブ毎に受信できます。

通常は、次のように送信と受信を交互に受信する必要があります。

スレーブ①への送信→スレーブ①からの受信→スレーブ②への送信→スレーブ②からの受信→

スレーブ③への送信→スレーブ③からの受信

バッファ拡張を行うと、各スレーブへの連続送信と受信ができます。

スレーブ①への送信→スレーブ②への送信→スレーブ③への送信→スレーブ①からの受信→ス

レーブ②からの受信→スレーブ③からの受信

但し、どちらの場合でも同一スレーブへの連続送信はできません。連続送信した場合には、最新

の受信データしか取得できません。

受信しているメッセージが 256byte より大きい場合に、本関数を実行するとメッセージの 256byte

目まで取得できますが、257byte 目以降のデータは取得できません。

Page 60: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

60

使用例

int ret;

int portNo = 1;

DNET_EXPLICIT dnetExplicit;

// 受信メッセージの取り出し

ret = DnetReceiveExplicit( portNo, &dnetExplicit);

ポート番号 portNo のデバイスから MAC ID が 2のデバイスからの Explicit 受信メッセージを取得

します。

Page 61: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

61

24. DnetReceiveExplicitEx 受信した Explicit メッセージを取り出します。

本関数では最大 512byte までのメッセージを取り出せます。

int DnetReceiveExplicitEx(

int portNo,

PDNET_EXPLICIT_EX dnetExplicitEx

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetExplicitEx 受信メッセージを格納する DNET_EXPLICIT_EX構造体を指定して下さい。

関数が正常終了すると、受信メッセージが DNET_EXPLICIT_EX構造体に格納されます。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

デバイス内の受信バッファから、受信メッセージを取り出します。

一度もメッセージを受信していない状態で本関数を呼び出すと、IFDNET_ERROR_NO_DATA を返しエ

ラー終了します。

一度でもメッセージを受信すると、メッセージが更新されるまで同じメッセージを取得できます。

動作モードをマスタモード+Explicit メッセージバッファ拡張に設定した場合、Explicit メッセ

ージをスレーブ毎に受信できます。

通常は、次のように送信と受信を交互に受信する必要があります。

スレーブ①への送信→スレーブ①からの受信→スレーブ②への送信→スレーブ②からの受信→

スレーブ③への送信→スレーブ③からの受信

バッファ拡張を行うと、各スレーブへの連続送信と受信ができます。

スレーブ①への送信→スレーブ②への送信→スレーブ③への送信→スレーブ①からの受信→ス

レーブ②からの受信→スレーブ③からの受信

但し、どちらの場合でも同一スレーブへの連続送信はできません。連続送信した場合には、最新

の受信データしか取得できません。

本関数は、使用する製品の版数とチェンジナンバーにより使用できない事があります。

以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.6 製品

の版数、チェンジナンバーについて』をご参照ください。

・ PCI-487101PQ[12]C10 以降の製品

・ CTP-487101PQ[12]C02 以降の製品

・ CPZ-487101PQ[12]C01 以降の製品

Page 62: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

62

使用例

int ret;

int portNo = 1;

DNET_EXPLICIT_EX dnetExplicitEx;

// 受信メッセージの取り出し

ret = DnetReceiveExplicitEx( portNo, &dnetExplicitEx);

ポート番号 portNo のデバイスから MAC ID が 2のデバイスからの Explicit 受信メッセージを取得

します。

Page 63: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

63

25. DnetGetAccumulatedMessage 蓄積型受信バッファから受信メッセージを取り出します。

本関数では最大 256byte までのメッセージを取り出せます。受信したメッセージが 256byte より

大きい場合は DnetGetAccumulatedMessageEx 関数を使用してください。

int DnetGetAccumulatedMessage(

int portNo,

PDNET_MESSAGE dnetMessage,

unsigned long* count

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetMessage 取得する受信メッセージを格納する DNET_MESSAGE構造体を指定してください。

countで指定したメッセージ数分だけの領域を確保して下さい。

count 取得したいメッセージ数を格納した変数を指定します。

関数が正常終了すると、実際に取得できたメッセージ数が格納されます。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

【備考】

通常のデバイス上の受信バッファとは別に、全 I/O メッセージを格納する蓄積型受信バッファが

存在します。その蓄積型受信バッファからメッセージを取り出します。

蓄えられたI/Oメッセージが無い場合、戻り値で、IFDNET_ERROR_NO_DATAが返されます。受信メッ

セージがあるかどうかは、DnetGetPortStatus関数で蓄積型受信バッファの状態を見ることで確認

できます。

また、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定することで、バッファが空の状

態でメッセージを受信した時点と、メッセージを受信してバッファに空きが無くなった時点でイ

ベントを発生させることができます。

受信しているメッセージが 256byte より大きい場合に、本関数を実行するとメッセージの 256byte

目まで取得できますが、257byte 目以降のデータは取得できません。

使用例

int ret;

int portNo = 1;

DNET_MESSAGE dnetMessage[10];

unsigned long count;

// 受信メッセージの取り出し

count = 10;

ret = DnetGetAccumulatedMessage( portNo, &dnetMessage[0], &count);

ポート番号 portNo のデバイスの蓄積型受信バッファから 10 個のメッセージを取り出します。

Page 64: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

64

26. DnetGetAccumulatedMessageEx 蓄積型受信バッファから受信メッセージを取り出します。

本関数では最大 512byte までのメッセージを取り出せます。

int DnetGetAccumulatedMessageEx(

int portNo,

PDNET_MESSAGE_EX dnetMessageEx,

unsigned long* count

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetMessageEx 取得する受信メッセージを格納する DNET_MESSAGE_EX構造体を指定してください。

countで指定したメッセージ数分だけの領域を確保して下さい。

count 取得したいメッセージ数を格納した変数を指定します。

関数が正常終了すると、実際に取得できたメッセージ数が格納されます。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

【備考】

通常のデバイス上の受信バッファとは別に、全 I/O メッセージを格納する蓄積型受信バッファが

存在します。その蓄積型受信バッファからメッセージを取り出します。

蓄えられたI/Oメッセージが無い場合、戻り値で、IFDNET_ERROR_NO_DATAが返されます。受信メッ

セージがあるかどうかは、DnetGetPortStatus関数で蓄積型受信バッファの状態を見ることで確認

できます。

また、DnetSetEvent関数/DnetSetEventMask関数でイベントを設定することで、バッファが空の状

態でメッセージを受信した時点と、メッセージを受信してバッファに空きが無くなった時点でイ

ベントを発生させることができます。

本関数は、使用する製品の版数とチェンジナンバーにより使用できない事があります。

以下の製品で本関数を使用することができます。版数とチェンジナンバーについては『4.6 製品

の版数、チェンジナンバーについて』をご参照ください。

・ PCI-487101PQ[12]C10 以降の製品

・ CTP-487101PQ[12]C02 以降の製品

・ CPZ-487101PQ[12]C01 以降の製品

Page 65: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

65

使用例

int ret;

int portNo = 1;

DNET_MESSAGE_EX dnetMessageEx[10];

unsigned long count;

// 受信メッセージの取り出し

count = 10;

ret = DnetGetAccumulatedMessageEx( portNo, &dnetMessageEx[0], &count);

ポート番号 portNo のデバイスの蓄積型受信バッファから 10 個のメッセージを取り出します。

Page 66: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

66

27. DnetGetPortStatus DeviceNet インタフェースの現在の状態を取得します。

int DnetGetPortStatus(

int portNo,

PDNET_PORT_STATUS portStatus

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

portStatus ステータス情報を格納する DNET_PORT_STATUS構造体を指定してください。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

使用例

int ret;

int portNo = 1;

DNET_PORT_STATUS status;

ret = DnetOpenPort( portNo );

ret = DnetGetPortStatus( portNo, &status);

ポート番号 portNo のデバイスのステータスを取得します。

Page 67: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

67

28. DnetGetSlaveStatus 接続されたスレーブデバイスの現在の状態を取得します。

int DnetGetSlaveStatus(

int portNo,

unsigned long macID,

PDNET_SLAVE_STATUS slaveStatus

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

macID 取得したいスレーブデバイスのMAC IDを指定してください。

自ポートのMAC IDを指定した場合、接続されている全スレーブデバイスの情報を取得するこ

とができます。この場合、slaveStatusには DNET_SLAVE_STATUS構造体 64 個分の領域を確保し

てください。

slaveStatus スレーブステータス情報を格納する DNET_SLAVE_STATUS構造体を指定してください。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

本関数は自ポートがマスタモードの時のみ使用できます。

使用例

int ret;

int portNo = 1;

DNET_SLAVE_STATUS slaveStatus[64];

ret = DnetOpenPort( portNo );

ret = DnetGetSlaveStatus( portNo, 0, &SlaveStatus[0]);

ポート番号 portNo のデバイスの自ポートの MAC ID を指定することにより、接続されている全ス

レーブステータスの情報を取得します。

Page 68: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

68

29. DnetGetErrorEvent エラー情報バッファに蓄えられたエラー情報を取得します。

int DnetGetErrorEvent(

int portNo,

PDNET_ERROR dnetError,

unsigned long* count

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

dnetError エラー情報を格納する DNET_ERROR構造体を指定します。

count エラー情報バッファから取り出すエラー情報の件数を指定してください。

関数正常終了時、実際に取得できたエラー情報件数が格納されます。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

何個のエラー情報が蓄えられているかは、DnetGetPortStatus関数で取得することができます。

使用例

int ret;

int portNo = 1;

DNET_ERROR dnetError;

unsigned long count;

count = 1;

// エラー情報の取得

ret = DnetGetErrorEvent( portNo, &dnetError, &count);

ポート番号 portNo のデバイスから 1件のイベント情報を取得します。

Page 69: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

69

30. DnetClearBuffer 指定したバッファをクリアします。

また、タイマカウンタをクリアする場合も本関数を使用します。

int DnetClearBuffer(

int portNo,

unsigned long clearBuffer

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

clearBuffer クリアするバッファを指定します。複数のバッファを OR で指定できます。

識別子 値 内容

DNET_CLEAR_RXB 00000002h 蓄積型受信バッファをクリアします。

DNET_CLEAR_TIMERCOUNTER 00000001h 内部カウンタをクリアします。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

ret = DnetClearBuffer( portNo, DNET_CLEAR_RXB);

ポート番号 portNo のデバイスの蓄積型受信バッファをクリアします。

Page 70: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

70

31. DnetGetNetworkPower ネットワーク電源電圧値を取得します。

また、ネットワーク電源電圧下限イベント、ネットワーク電源電圧上限イベントが発生後に、再

度ネットワーク電源電圧下限イベント、ネットワーク電源電圧上限イベントを発生させるために

本関数を呼び出す必要があります。

int DnetPowerGetNetworkPower(

int portNo,

float* networkPower

);

パラメータ

portNo 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 イベントが発生するようになります。

使用例

int ret;

int portNo = 1;

float networkPower;

ret = DnetOpenPort( portNo );

ret = DnetGetNetworkPower( portNo, &networkPower);

ポート番号 portNo のデバイスのネットワーク電源電圧値を取得します。

Page 71: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

71

32. DnetSetEvent 割り込み(コールバック関数)の設定を行います。

int DnetSetEvent(

int portNo,

PDNET_EVENT_REQ eventReq

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

eventReq 割り込み発生時に呼び出されるコールバック関数の設定を行う DNET_EVENT_REQ構造体を指定

します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

使用例

// コールバック関数

void EventProc(unsigned long event, unsigned long user)

{

// 割り込み処理を記述します

・・・

}

・・・

// メインルーチン

unsigned long eventMask;

DNET_EVENT_REQ eventReq;

int portNo = 1;

// メッセージ受信時に割り込みが発生するようにマスクを設定します

eventMask = DNET_EVENT_RECV;

ret = DnetSetEventMask( portNo, eventMask);

eventReq.CallBackProc = EventProc;

eventReq.UserData = 0x1234;

ret = DnetSetEvent( portNo, &eventReq);

ポート番号 portNo のデバイスがメッセージ受信時にコールバック関数が呼び出されるように設

定します。

Page 72: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

72

33. DnetSetEventMask 割り込みのマスク設定を行います。

int DnetSetEventMask(

int portNo,

unsigned long eventMask

);

パラメータ

portNo 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 エラーバッファがいっぱいになりました。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

ret = DnetSetEventMask( portNo, DNET_EVENT_RECV_IO);

ポート番号 portNo のデバイスの I/O メッセージ受信割り込みを許可します。

Page 73: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

73

34. DnetGetEventMask 割り込みのマスク値を取得します。

int DnetGetEventMask(

int portNo,

unsigned long* eventMask

);

パラメータ

portNo 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 エラーバッファがいっぱいになりました。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

使用例

int ret;

int portNo = 1;

unsigned long eventMask;

ret = DnetOpenPort( portNo );

ret = DnetGetEventMask( portNo, &eventMask);

ポート番号 portNo のデバイスの割り込みマスク値を取得します。

Page 74: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

74

35. DnetKillEvent 割り込み発生時に起動するコールバック関数の解除を行います。

int DnetKillEvent(

int portNo

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

使用例

int ret;

int portNo = 1;

ret = DnetOpenPort( portNo );

ret = DnetKillEvent( portNo );

ポート番号 portNo のデバイスの割り込みを解除します。

Page 75: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

75

36. DnetSetDeviceList 他ポート情報をデバイスリストに登録します。

int DnetSetDeviceList(

int portNo,

unsigned long macID,

PDNET_DEVICE_CONFIG deviceConfig

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

macID 登録するデバイスの MAC ID を指定します。0~63 の範囲で指定してください。

deviceConfig デバイスの通信情報を設定する DNET_DEVICE_CONFIG構造体を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

登録しようとしているデバイスと同じ MAC IDのデバイスが既にデバイスリストに登録されている

場合、または自ポートと同じ MAC ID を指定しようとした場合、エラーとなります。

同じMAC IDのデバイスが既に登録されている場合は、DnetDeleteDeviceList関数で一旦デバイス

通信情報を削除してから、再度登録を行ってください。

また、設定したデバイスリスト情報は、DnetSaveNetInfo関数により、デバイス内部の不揮発メモ

リに保存することができます。

DnetInitializeNetInfo関数を呼び出すとデバイスリストは出荷時設定(空のデバイスリスト)に

上書きされますのでご注意ください。

使用例

int ret;

int portNo = 1;

DNET_DEVICE_CONFIG deviceConfig;

// MAC ID が 1 のデバイスに対する設定(Poll 送信)を行います

deviceConfig.IOType = DNET_IO_POLL;

deviceConfig.PollInterval = 0;

deviceConfig.PollTxSize = 16;

deviceConfig.PollRxSize = 16;

ret = DnetSetDeviceList( portNo, 1, &deviceConfig);

ポート番号 portNo のデバイスにて MAC ID が 1 のデバイスの通信情報をデバイスリストに登録し

ます。

Page 76: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

76

37. DnetGetDeviceList デバイスリストに登録されているデバイスの通信情報を取得します。

int DnetGetDeviceList(

int portNo,

unsigned long macID,

PDNET_DEVICE_CONFIG deviceConfig

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

macID 通信情報を取得したいデバイスの MAC ID を指定します。

deviceConfig デバイス通信情報を格納する DNET_DEVICE_CONFIG構造体を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

本関数はデバイス通信情報を確認するほかに、デバイスリストにデバイス通信情報が登録されて

いるかどうかも確認することができます。デバイスリストにデバイス通信情報が登録されていな

い場合は、IFDNET_ERROR_INVALID_MACID が返されます。

使用例

int ret;

int portNo = 1;

DNET_DEVICE_CONFIG deviceConfig;

ret = DnetGetDeviceList( portNo, 1, &deviceConfig);

ポート番号 portNo のデバイスにて MAC ID が 1 のデバイスの通信情報を取得します。

Page 77: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

77

38. DnetDeleteDeviceList デバイスリストに登録されている、指定 MAC ID のデバイス通信情報を削除します。

int DnetDeleteDeviceList(

int portNo,

unsigned long macID

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

macID 通信情報を削除したいデバイスの MAC ID を指定します。自ポートの MAC ID を指定した場合

は、全ての通信情報を削除します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

使用例

int ret;

int portNo = 1;

ret = DnetDeleteDeviceList( portNo, 1);

ポート番号 portNo のデバイスにて MAC ID が 1 のデバイスの通信情報を、デバイスリストから削

除します。

Page 78: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

78

39. DnetSaveNetInfo 現在設定している自ポート通信情報、およびデバイスリストをデバイス上の不揮発メモリに保存

します。

int DnetSaveNetInfo(

int portNo

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

使用例

int ret;

int portNo = 1;

ret = DnetSaveNetInfo( portNo );

ポート番号 portNo のデバイスにて自ポート情報、デバイスリスト情報を保存します。

Page 79: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

79

40. DnetInitializeNetInfo 現在設定している自ポート情報、デバイスリストを、出荷時設定に戻します。

デバイス上の不揮発メモリ内の自ポート情報、デバイスリストを出荷時設定に戻したい場合は、

本関数を呼び出し後、DnetSaveNetInfo関数を呼び出して、出荷時設定を不揮発メモリに保存して

ください。

int DnetInitializeNetInfo(

int portNo

);

パラメータ

portNo DnetOpenPort関数でオープンしたポート番号を指定します。

戻り値

正常終了した場合は、IFDNET_ERROR_SUCCESSが返されます。

IFDNET_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照ください。

備考

本関数を実行すると、現在設定されている自ポート設定、およびデバイスリスト情報は破棄され、

出荷時設定時の自ポート設定、およびデバイスリストが無い状態になります。

使用例

int ret;

int portNo = 1;

ret = DnetInitializeNetInfo( portNo );

ポート番号 portNo のデバイスにて自ポート情報、デバイスリストを出荷時設定に戻します。

Page 80: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

80

41. CallbackProc イベント発生時に呼ばれるコールバックルーチンです。

関数名は割り込みイベント構造体(DNET_EVENT_REQ 構造体)の CallBackProc メンバに渡した関

数名となります。

void CallbackProc(

unsigned long eventFactor, // イベント発生要因

unsigned long userData // ユーザデータ

);

パラメータ

eventFactor コールバック関数発生要因です。

コールバック関数が発生した要因が渡されます。

識別子 値 内容

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 メッセージ

userData 割り込みイベント構造体(DNET_EVENT_REQ 構造体)の userData メンバに渡したユーザデータ

です。

戻り値

なし

Page 81: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

81

4.3 構造体

4.3.1. DNET_PORT_CONFIG DnetSetConfig関数、DnetGetConfig関数で使用する自ポート情報設定構造体です。

typedef struct{

unsigned long MacID;

unsigned long Mode;

unsigned long BaudRate;

unsigned long HeartBeatCycle;

unsigned long AccumulateRxBufferSize;

unsigned long ErrorBufferSize;

unsigned long 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 サーバへの代行受信機能をサポートし

ていません。

スレーブモードは Group 2 Only デバイスとなります。

マスタモード+Explicit メッセージバッファ拡張に設定すると、通

常1つしかない Explicit メッセージの受信バッファが、各スレーブ

毎に1つづつ割り当てられるようになります。

通信速度を選択します。

識別子 値 内容

DNET_BAUDRATE_500K 00000127h 500kbps

DNET_BAUDRATE_250K 0000023Ah 250kbps

DNET_BAUDRATE_125K 0000053Ah 125kbps

BaudRate

デフォルトは 125kbps です。

DnetInitializeNetInfo関数を実行すると出荷時設定に更新されま

す。

Page 82: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

82

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関数を実行すると、出荷時設定に更新されま

す。

Page 83: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

83

4.3.2. DNET_DEVICE_CONFIG 各デバイスの I/O 通信情報を設定する構造体です。

自ポートは DnetSetConfig関数、他ポートは DnetSetDeviceList関数で設定します。

typedef struct{

unsigned long IOType;

unsigned long PollInterval;

unsigned long PollTxSize;

unsigned long PollRxSize;

unsigned long StrobeInterval;

unsigned long StrobeTxSize;

unsigned long StrobeRxSize;

unsigned long CosInterval;

unsigned long CosTxSize;

unsigned long CosRxSize;

unsigned long CyclicInterval;

unsigned long CyclicTxSize;

unsigned long 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_AU

TO

00020002h 自動応答 BitStrobe ※

IOType

※スレーブモード時のみ指定できます。自動応答を選択した場合、マスタ

からのメッセージを受信すると自動的にメッセージを返信します。返信す

るメッセージは DnetSendIO 関数または DnetSendIOEx 関数でセットしま

す。

自動応答は、使用する製品の版数とチェンジナンバーにより使用できない

事があります。

以下の製品で自動応答を使用することができます。版数とチェンジナンバ

ーについては『4.6 製品の版数、チェンジナンバーについて』をご参照く

ださい。

・ PCI-487101PQ[12]C10 以降の製品

・ CTP-487101PQ[12]C02 以降の製品

・ CPZ-487101PQ[12]C01 以降の製品

PollInterval Poll 処理の送信周期を指定します。単位は ms です。

設定可能範囲は 10~10000 で、10ms 単位で設定します。1ms 単位の値は切

り捨てられます。

0 を指定した場合には周期送信を行いません。

実際に通信が可能な周期は、接続機器数、他の I/O メッセージなどに影響

を受けます。

Poll の周期送信はマスタモードのみで使用できます。

Page 84: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

84

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 メッセージの送信周期

などに影響を受けます。

Page 85: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

85

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 です。

Page 86: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

86

4.3.3. DNET_PORT_STATUS DeviceNet インタフェースのステータスが格納される構造体です。

typedef struct{

unsigned long BoardStatus;

unsigned long AccumulateRxBufferCount;

unsigned long 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関数で設定した値です。

Page 87: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

87

4.3.4. DNET_SLAVE_STATUS 各スレーブのステータスが格納されている構造体です。

typedef struct{

unsigned long PollCount;

unsigned long StrobeCount;

unsigned long CosCount;

unsigned long NodeStatus;

unsigned long ConnectionStatus;

} DNET_SLAVE_STATUS, *PDNET_SLAVE_STATUS;

メンバ 説明

PollCount Poll で最後に受信した時の 32 ビットタイムスタンプです。

この値に変化が無ければ、新たな Poll 受信は無いということになります。

StrobeCount Bit Strobe で最後に受信したときの 32 ビットタイムスタンプです。

変化が無ければ、新たな受信は無いということになります。

CosCount COS/Cyclic で最後に受信したときの 32 ビットタイムスタンプです。

変化が無ければ、新たな受信は無いということになります。

NodeStatus スレーブの状態を表します。コネクションの確立に失敗し、エラー状態の

時などには、こちらの値が変化します。

ConnectionStatus どの I/O コネクションが確立されているか、各ビットを OR した値で表し

ます。

Page 88: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

88

4.3.5. DNET_MESSAGE 256byte までの I/O メッセージの送受信の際に使用する構造体です。

I/O メッセージの送受信の際に使用する構造体です。

また、モニタモード時の受信メッセージも本構造体を使用します。

typedef struct{

unsigned long MessageType;

unsigned long MacID;

unsigned long Length;

unsigned long Data[256];

unsigned long ConnectionID;

unsigned long 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 クリアすること

ができます。

Page 89: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

89

4.3.6. DNET_MESSAGE_EX 512byte までの I/O メッセージの送受信の際に使用する構造体です。

また、モニタモード時の受信メッセージも本構造体を使用します。

typedef struct{

unsigned long MessageType;

unsigned long MacID;

unsigned long Length;

unsigned long Data[512];

unsigned long ConnectionID;

unsigned long Time;

} DNET_MESSAGE_EX, *PDNET_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~256 が指定できます。

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 クリアすること

ができます。

Page 90: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

90

4.3.7. DNET_EXPLICIT 256byte までの Explicit メッセージの送受信の際に使用する構造体です。

typedef struct{

unsigned long MessageType;

unsigned long MacID;

unsigned long ServiceCode;

unsigned long ClassID;

unsigned long InstanceID;

unsigned long Length;

unsigned long Data[256];

unsigned long 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]以降は無効なデータです。

Page 91: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

91

Time メッセージを受信した時刻が格納されます。単位はμsです。

実際の時刻ではなく、DnetOpenPort関数の実行後からの経過時間になります。

エラー情報にも同じ時刻が記録されますので、受信メッセージとエラー発生の

時間的関係を結びつけることができます。

DnetClearBuffer関数を使用することで、内部の経過時間を 0 クリアすること

ができます。

Page 92: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

92

4.3.8. DNET_EXPLICIT_EX 512byte までの Explicit メッセージの送受信の際に使用する構造体です。

typedef struct{

unsigned long MessageType;

unsigned long MacID;

unsigned long ServiceCode;

unsigned long ClassID;

unsigned long InstanceID;

unsigned long Length;

unsigned long Data[512];

unsigned long Time;

} DNET_EXPLICIT_EX, *PDNET_EXPLICIT_EX;

メンバ 説明

送信するメッセージ、または受信したメッセージのタイプを表します。

識別子 値 内容

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[511]となっています。

送信時、Length に設定した値よりも長いデータは無視されます。

例えば Length に 3 を設定した場合、Data[0],Data[1],Data[2]はドライバに渡

され蓄えられますが、Data[3]以降のデータは無視されます。

同様に受信時も Length 以上のデータは無効データです。

例えば Length に 2 が返ってきた場合、Data[0],Data[1]は受信したメッセージ

の内容ですが、Data[2]以降は無効なデータです。

Page 93: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

93

Time メッセージを受信した時刻が格納されます。単位はμsです。

実際の時刻ではなく、DnetOpenPort関数の実行後からの経過時間になります。

エラー情報にも同じ時刻が記録されますので、受信メッセージとエラー発生の

時間的関係を結びつけることができます。

DnetClearBuffer関数を使用することで、内部の経過時間を 0 クリアすること

ができます。

Page 94: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

94

4.3.9. DNET_ERROR エラー情報の詳細が格納されている構造体です。

typedef struct

unsigned long InterruptRegister;

unsigned long ErrorCodeRegister;

unsigned long ArbitrationLostRegister;

unsigned long 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

Page 95: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

95

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

Page 96: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

96

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 つのエラーの発生時刻が同じにな

ることがあります。

Page 97: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

97

4.3.10. DNET_EVENT_REQ 割り込みイベントを設定する構造体です。コールバック関数の設定に使用します。

typedef struct{

unsigned long Wnd;

unsigned long InterruptMsg;

PDNETCALLBACK CallBackProc;

unsigned long InterruptEvent;

unsigned long UserData;

} DNET_EVENT_REQ, *PDNET_EVENT_REQ;

メンバ 説明

Wnd 0 を指定してください。

InterruptMsg 0 を指定してください。

CallBackProc 割り込み発生時に呼び出されるユーザ・コールバック関数のポインタを指

定してください。

コールバック関数を使用しない場合は、NULL を指定してください。

InterruptEvent 0 を指定してください。

UserData コールバック関数へ引き渡すユーザ・データを指定してください。

Page 98: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

98

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 ネットワークに参加できませんでした。

Page 99: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

99

4.5 Kylix をお使いの方へ 本ドキュメント内の関数、プログラム例の書式はすべて C言語となっております。Kylix をお使い

の方は下記の書式の違いにご注意してお使いください。

1. 関数

C 言語 Kylix

int DnetGetNetworkPower( 1)function DnetGetNetworkPower(

int portNo, 2)portNo: Integer3);

float* networkPower 4)var networkPower: Single

);

): 5) Integer; 6)cdecl; external ‘gpg4871.so’;1)Kylix では戻り値を返す場合は function、返さない場合(C 言語の void に相当)は procedure を

関数の先頭につけます。

2)C 言語では”変数の型 変数名”の順で引数を記述するのに対し、Kylix では”変数名:変数の型;”の順

で記述します。

3)Kylix では変数の型が C言語と異なります。一部を紹介します。

・int→Integer

・long→Longint

・unsigned long→Cardinal

・void*→pointer

4)参照渡しを記述する際には変数名に var をつけます。

5)C 言語では戻り値の型を先頭に記述するのに対し、Kylix では引数リストの後に戻り値の型を記述

します(戻り値の型が C言語における void 型の場合は、戻り値の型は”:;”と何も記述しません。)

6)ライブラリ関数を呼ぶ際には、関数の最後に cdecl;external ‘ライブラリ名’;を記述します(ただ

しコールバックルーチンは external ‘ライブラリ名’;は必要ありません)。

2. 構造体

C 言語 Kylix

type

typedef struct{ 1)DNET_PORT_STATUS = record

unsigned long BoardStatus; 2) BoardStatus: Cardinal;

unsigned long AccumulateRxBufferCount; AccumulateRxBufferCount: Cardinal;

unsigned long ErrorBufferCount; ErrorBufferCount: Cardinal;

}DNET_PORT_STATUS, *PDNET_PORT_STATUS; 3)end;

1)Kylix では構造体のことをレコードと呼び、”構造体名 = record”と記述します。

2)関数名と同じく、変数の型と変数名が C言語と逆になります。

3)Kylix では構造体の最後に”end;”を記述します。

Page 100: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

100

3. 使用例

デバイスオープンからコールバックルーチンの記述方法までを記述します。

C 言語

void EventProc(unsigned long event, unsigned long user);

int portNo;

void main()

{

DNET_EVENT_REQ eventReq;

portNo = 1;

DnetOpenPort( portNo );

DnetSetEventMask( portNo, DNET_EVENT_RECV );

eventReq.CallBackProc = EventProc;

eventReq.UserData = 0x1234;

DnetSetEvent( portNo, &eventReq );

}

void EventProc(unsigned long event, unsigned long user)

{

// コールバックルーチン内の処理を記述します

}

Kylix 1)var

procedure EventProc(event:Cardinal, user:Cardinal);cdecl;

nPortNo:Integer;

procedure TForm1.FormCreate(Sender: TObject);

var

eventReq: DNET_EVENT_REQ; 2)begin

portNo 3):= 1;

DnetOpenPort( portNo );

DnetSetEventMask( portNo, DNET_EVENT_RECV );

eventReq.CallBackProc := EventProc;

eventReq.UserData := 4)$00001234;

DnetSetEvent( portNo, 5)@eventReq );

end;

procedure EventProc(event:Cardinal, user:Carinal);cdecl;

begin

// コールバックルーチン内の処理を記述します

end;

1)var 節で関数宣言、変数宣言を行います。

2)関数の処理記述は begin~end;の中に記述します。

3)Kylix では代入には:=を使用します。

4)C 言語では 0x~が 16 進数を示すのに対し、Kylix では$~が 16 進数を意味します。

5)アドレスを渡す際は、C言語では&であるのに対し、Kylix では@を記述します。

Page 101: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

101

4.6 製品の版数、チェンジナンバーについて

製品の版数とチェンジナンバーは製品の表面に表示されています。

下図の位置に製品の版数とチェンジナンバーは表示されています。

型式によっては表示されている位置が異なることがあります。

本 Help では、製品の版数、チェンジナンバーを下記のように記述しています。

例)製品型式 PCI-487101PQ、製品の版数 12 版、チェンジナンバー C08 の場合

PCI-487101PQ[12]C08

Page 102: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

102

第5章 サンプルプログラム

5.1 メッセージ送信サンプルプログラム I/O メッセージの送信を行うサンプルプログラムです。

ポート番号1のデバイスをマスタモードに設定し、スレーブデバイスにメッセージを送信します。

c ディレクトリでコンパイルを行い、sendio を実行してください。 #cd /usr/src/interface/gpg4871/i386/linux/samples/c/sendio #make #./sendio

5.2 メッセージ周期送信サンプルプログラム I/O メッセージの周期送受信を行うサンプルプログラムです。

ポート番号1のデバイスをマスタモードに設定し、スレーブデバイスにメッセージを周期送信し、ス

レーブからの応答メッセージが 10 回くるのを待ちます。

c ディレクトリでコンパイルを行い、cyclicsend を実行してください。 #cd /usr/src/interface/gpg4871/i386/linux/samples/c/cyclicsend #make #./ cyclicsend

5.3 ポート設定情報保存サンプルプログラム 自ポート、他ポートの設定情報をデバイス上の不揮発メモリに保存するサンプルプログラムです。

c ディレクトリでコンパイルを行い、saveconfig を実行してください。 #cd /usr/src/interface/gpg4871/i386/linux/samples/c/saveconfig #make #./ saveconfig

5.4 スレーブモード用メッセージ送信サンプルプログラム スレーブモードで I/O メッセージの送信を行うサンプルプログラムです。

ポート番号1のデバイスをスレーブモードに設定し、マスタモードから送信されたメッセージを受信

した後にマスタデバイスにメッセージを送信します。

c ディレクトリでコンパイルを行い、responseio を実行してください。 #cd /usr/src/interface/gpg4871/i386/linux/samples/c/responseio #make #./responseio

5.5 スレーブモード用自動応答メッセージ送信サンプルプログラム スレーブモードの自動応答で I/O メッセージの送信を行うサンプルプログラムです。

ポート番号1のデバイスをスレーブモードに設定し、マスタモードから送信されたメッセージを受信

した後にマスタデバイスにメッセージを送信します。

c ディレクトリでコンパイルを行い、responseioauto を実行してください。 #cd /usr/src/interface/gpg4871/i386/linux/samples/c/responseioauto #make #./responseioauto

Page 103: GPG-4871DnetSetConfig関数を実行する ことにより、プログラム上で自ポート設定を行うことも出来ます。DnetSetConfig関数を使用する場 合、自ポートの設定を間違わないために、一度

GPG-4871 Help for Linux

© 2006, 2011 Interface Corporation. All rights reserved.

103

第6章 重要な情報

保証の内容と制限

弊社は本ドキュメントに含まれるソースプログラムの実行が中断しないこと、またはその実行に誤り

が無いことを保証していません。

本製品の品質や使用に起因する、性能に起因するいかなるリスクも使用者が負うものとします。

弊社はドキュメント内の情報の正確さに万全を期しています。万一、誤記または誤植などがあった場

合、弊社は予告無く改訂する場合があります。ドキュメントまたはドキュメント内の情報に起因する

いかなる損害に対しても弊社は責任を負いません。

ドキュメント内の図や表は説明のためであり、ユーザ個別の応用事例により変化する場合があります。

著作権、知的所有権

弊社は本製品に含まれるおよび本製品に対する権利や知的所有権を保持しています。

本製品はコンピュータ ソフトウェア、映像/音声(例えば図、文章、写真など)を含んでいます。

医療機器/器具への適用における注意

弊社の製品は人命に関わるような状況下で使用される機器に用いられる事を目的として設計、製造さ

れた物では有りません。

弊社の製品は人体の検査などに使用するに適する信頼性を確保する事を意図された部品や検査機器

と共に設計された物では有りません。

医療機器、治療器具などの本製品の適用により、製品の故障、ユーザ、設計者の過失などにより、損

傷/損害を引き起こす場合が有ります。

複製の禁止

弊社の許可なく、本ドキュメントの全て、または一部に関わらず、複製、改変などを行うことはでき

ません。

責任の制限

弊社は、弊社または再販売者の予見の有無にかかわらず発生したいかなる特別損害、偶発的損害、間

接的な損害、重大な損害について、責任を負いません。

本製品(ハードウェア,ソフトウェア)のシステム組み込み、使用、ならびに本製品から得られる結果

に関する一切のリスクについては、本製品の使用者に帰属するものとします。

本製品に含まれるバグ、あるいは本製品の供給(納期遅延)、性能もしくは使用に起因する付帯的損

害もしくは間接的損害に対して、弊社に全面的に責がある場合でも、弊社はその製品に対する改良(正

常に動作する)、代品交換までとし、金銭面での賠償の責任は負わないものとしますので、予めご了

承ください。

本製品(ソフトウェアを含む)は、日本国内仕様です。本製品を日本国外で使用された場合、弊社は

一切責任を負いかねます。また、弊社は本製品に関し、海外での保守サービスおよび技術サポート等

は行っておりません。

商標/登録商標

本書に掲載されている会社名、製品名は、それぞれ各社の商標または登録商標です。