160
CAN(PCI/C-PCI)Linux/RT www.interface.co.jp GPG-4851 CAN インタフェースモジュール用 Linux/RT ドライバ Help for Linux

GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

CAN(PCI/C-PCI)Linux/RT

www.interface.co.jp

GPG-4851 CAN インタフェースモジュール用 Linux/RT ドライバ

Help for Linux

Page 2: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

2

目 次

1 はじめに 3 1.1 概要........................................................................... 3 1.2 特長........................................................................... 3

2 製品仕様 4 2.1 動作環境....................................................................... 4 2.2 基本仕様....................................................................... 4 2.3 注意事項....................................................................... 5

3 実行手順 8 3.1 デバイスを動かすまで........................................................... 8 3.2 実行手順...................................................................... 10 3.3 ドライバ組み込みオプション .................................................... 17 3.4 /procファイルシステム......................................................... 18 3.5 カードバスID設定ユーティリティについて ........................................ 19 3.6 インタフェースモジュール固有情報 .............................................. 20

4 リファレンス 23 4.1 関数一覧...................................................................... 23 4.2 関数個別説明.................................................................. 27 4.3 構造体説明................................................................... 123 4.4 戻り値一覧................................................................... 149 4.5 テストドライバ............................................................... 151

5 サンプルプログラム 152 5.1 canmon ....................................................................... 152 5.2 canmonfd ..................................................................... 152 5.3 send ......................................................................... 152 5.4 cyclic ....................................................................... 152 5.5 receive ...................................................................... 152 5.6 filter ....................................................................... 152 5.7 error ........................................................................ 152 5.8 multicyclic .................................................................. 153 5.9 sendrecv ..................................................................... 153 5.10 sendrecvfd ................................................................... 153

6 ユーティリティ 154 6.1 プロファイル設定プログラム(X Window版) ....................................... 154 6.2 プロファイル設定プログラム(コンソール版) ..................................... 158 6.3 自己診断プログラム........................................................... 159

7 重要な情報 160

Page 3: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

3

1 はじめに

1.1 概要 GPG-4851 は、Linux アプリケーションから弊社 CAN インタフェースモジュールを制御する為のソフト

ウェアです。

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

1.2 特長 ●CAN プロトコル Version 2.0B(アクティブ)/CAN FD に対応しています。

アプリケーションでは CAN プロトコルを意識することなく、メッセージの送受信が行えます。

●各ポート独立に制御することが可能です。(通信速度、その他のパラメータ等)

●送受信データをメッセージ単位で扱えますので、プログラムの作成が容易です。

●デバイスドライバ内部にバッファを用意することで、アプリケーションの処理が遅れた場合のオーバ

ーランエラー発生の確率を低減しています。

●CAN 製品の自己診断を行うプログラム、モニタ用プログラムが付属しています。

●指定したデータを周期的に送信することができます。(※1)

●データを送信する前にディレイ時間を挿入することができます。(※2)

●1 つのチャンネルから複数のメッセージを周期送信することができます。(※3)(※4)

●タイマカウンタを使用して、割り込みを発生させることができます。(※3)

※1 CAN 2.0B 通信時にご利用頂けます。

※2 高機能版、バスマスタ版 CAN 製品のみ対応しています。

※3複数同期送信版、CAN FD 版 CAN 製品でのみ対応しています。

※4 高機能版、バスマスタ版では 1メッセージのみ周期送信できます。

Page 4: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

4

2 製品仕様

2.1 動作環境 対応機種 弊社製 Classembly Devices®

弊社製 FA コントローラ

PC/AT 互換機

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

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

デバイスノード /dev/ifcan1 ~ /dev/ifcan255

ドライバ組み込み時変更可能

メジャー番号 82

ドライバ組み込み時変更可能

ソースコードの取り扱い ドライバモジュール一部公開

共用モジュール公開

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

Help ファイル PDF 形式

2.2 基本仕様 CAN Ver.2.0B(アクティブ) ISO11898

拡張フレームを用いた通信が可能

対応プロトコル

CAN FD

CAN FD 60kbps〜1Mbps(データフェーズのみ 大 5Mbps)

高速 CAN 60kbps〜1Mbps

通信速度

低速 CAN 40kbps〜125kbps

送信バッファサイズ 64 メッセージ( 小) ※

受信バッファサイズ 64 メッセージ( 小) ※

エラーバッファサイズ 64 件( 小) ※

検出可能なエラーの種類 ・ビットエラー

・フォームエラー

・ビットスタッフエラー

・その他エラー

エラーが発生したフレームは、バッファには格納され

ません。

/proc ファイルシステム 参照できる内容

・デバイス名

・通信速度

・送受信通算メッセージ数

※ 大サイズは、環境(使用可能な空きメモリ)に依存します。

CAN FD 版 CAN 製品などの CAN FD 通信製品は、CAN コントローラのシステムクロックが異なります。そのた

め、設定値によっては CAN 通信製品と同じ通信速度とはならないことがあります。

(例) CAN 通信製品:24MHz / 400 = 60kbps

CAN FD 通信製品:40MHz / 666 = 60.60kbps

CAN 通信製品は 24MHz、CAN FD 通信製品は 40MHz のシステムクロックの分周となります。

Page 5: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

5

2.3 注意事項

2.3.1 「Intel PCH EG20T」の CAN コントローラを搭載した製品の使用制限について TPC-B016SAxx,TPC-B016SBxx, ETC-B016 では、以下の仕様制限があります。

使用できる機能

・オープン・クローズ(CanOpenPort、CanClosePort)

デバイス名はioh_canになります。

オープン時にCANバスへ接続し、クローズ時にCANバスから離脱します。

・データ送受信(CanSendMessage、CanReceiveMessage)

メッセージに関する時刻は使用できません。

一部制限のある機能

・通信設定(CanSetConfig、CanGetConfig)

設定できる内容:通信モード(通常orモニタモード)、通信速度。

設定できない内容:送信バッファサイズ、受信バッファサイズ、エラーバッファサイズ、エラー

リミット。

・ステータスの取得(CanGetStatus)

取得できる項目:CANバスの状態、送信エラーカウンタ、受信エラーカウンタ。

取得できない項目:未送信メッセージ数、受信メッセージ数、エラー情報数。

現在のバージョンでは使用できない機能

・アクセプタンスフィルタ機能(CanSetAcceptanceFilter、CanGetAcceptanceFilter)

・通信設定でアクセプタンスフィルタのモード選択(CanSetConfig、CanGetConfig)

使用できない機能

・CANバスへの接続と離脱(CanActivate、CanDeactivate)

任意のタイミングでは接続・離脱できません。

オープン時にCANバスへ接続し、クローズ時にCANバスから離脱します。

・メッセージの周期送信(CanCyclicSendMessage、CanStopCyclicSendMessage、

CanMultiCyclicSendMessage、CanStopMultiCyclicSendMessage、

CanSetTransmissionCycle)

・送信完了メッセージの取得(CanGetCompletionMessage)

・バッファのクリア(CanClearBuffer)

・FIFOトリガ設定(CanSetFifoTrigger、CanGetFifoTrigger)

・エラーイベント取得(CanGetErrorEvent)

・ポートのハードウェア情報取得(CanGetPortInformation)

・イベント・コールバック関連(CanSetEvent、CanSetEventMask、CanGetEventMask、CanKillEvent)

Page 6: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

6

2.3.2 IMC-T3618(L6)搭載の CAN デバイスの使用制限について IMC-T3618(L6)上に搭載される CAN は高機能版 CAN 製品となります。

下記構造体の ulTime パラメータの取得時間が他製品と異なります。ご注意下さい。

・「4.3.5 CAN_MESSAGE構造体」

・「4.3.7 CAN_ERROR構造体」

ulTime パラメータに格納される時刻は、実際の時刻ではなく、サンプリング動作開始から、サンプリ

ング動作終了までの間にカウントされる値となります。

サンプリング動作停止中は、サンプリング動作が停止した時間が常に取得できます。

サンプリングについては「GPG-MA001」の Help を参照下さい。

Page 7: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

7

2.3.3 CAN FD 版 CAN 製品の仕様について CAN FD版CAN製品はCANコントローラが弊社CAN通信製品と異なるため、仕様が一部異なります。

仕様 CAN 製品 CAN FD 版 CAN 製品

アクセプタンスフィルタ フィルタの対象は ID とデータ両方。

標準フレーム時は 11ビット ID全てに

対しフィルタを設定することが可能

です。また、データバイトの先頭 2バ

イトに対してもフィルタを設定する

ことが出来ます。

フィルタの対象は ID のみ。

受信メッセージに対するフィルタ

は設定できません。

また、標準フレーム時のフィルタ

対象は ID.0~10 となります。

エラーワーニングリミットの

設定範囲

0~255

8, 16, 24,…,128

コントローラのシステムクロ

ック(※1)

24MHz 40MHz

送信、受信エラーカウンタの

クリア

CanClearBuffer 関数で

CAN_CLEAR_TXERR もしくは

CAN_CLEAR_RXERR いずれかを指定する

ことで、送信エラーカウンタ、受信エ

ラーカウンタを個別にクリアするこ

とができます。

送信エラーカウンタ、受信エラー

カウンタを個別にクリアすること

はできません。CanClearBuffer 関

数で CAN_CLEAR_TXERR もしくは

CAN_CLEAR_RXERR いずれかを指定

した場合、送信エラーカウンタと

受信エラーカウンタの両方がクリ

アされます。

モニタモード 同一のバス上へACKを返すノードが存

在しない場合でも、モニタモードを使

用できます。

モニタモードで使用する場合、同

一のバス上へ ACK を返すノードが

必要です。そのため、送信するノ

ードのほかに、受信するノードを

バス上に配置している場合にモニ

タモードを使用できます。受信ノ

ードがバス上にいない(ACK を返

すノードがいない)場合、モニタモ

ードのノードはメッセージを受信

しません。

※1. CAN 通信製品と CAN FD 通信製品とは、CAN コントローラのシステムクロックが異なります。そのため、

設定値によっては CAN 通信製品と同じ通信速度とはならないことがあります。

(例)

CAN 通信製品 :24MHz / 400 = 60kbps

CAN FD 通信製品 :40MHz / 666 = 60.060kbps

Page 8: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

8

3 実行手順

3.1 デバイスを動かすまで

1. インストール・ドライバモジュールの組み込み方法

Readme を参照してください。

2. プログラム作成

ここでは「ポートオープン」→「通信速度設定」→「データ送信」→「ポートクローズ」の一連の CAN ポー

ト制御を行うプログラムを作成します。

エディタを起動し、下記のコードを入力して下さい。

ここではデバイス名 ifcan1 のポートについてコードを記述しています。

#include <stdio.h>

#include <string.h>

#include <unistd.h>

#include <fcntl.h>

#include <errno.h>

#include <sys/ioctl.h>

#include “ifcan.h”

int main(void)

{

int fd, ret;

unsigned long BaudRate;

CAN_PORT_CONFIG Conf;

CAN_MESSAGE Msg;

char buffer[256];

fd = CanOpenPort(“ifcan1”);

if(fd < 0) {

perror(“The port is not found.”);

return -1;

}

CanGetConfig(fd, &Conf);

Conf.ulBaudRate = CAN_BAUDRATE_1M;

ret = CanSetConfig(fd, &Conf);

if(ret != 0) {

perror(“The port setup cannot be performed.”);

CanClosePort(fd);

return -1;

}

CanActivate(fd);

Msg.ulID = 0x101;

Msg.ulFlag = 0;

Msg.ulTime = 0;

Page 9: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

9

strcpy(buffer, "??");

Msg.ulLength = strlen(buffer);

memcpy(Msg.bData, buffer, Msg.ulLength);

ret = CanSendMessage(fd, &Msg, 1);

if(ret != 0) {

perror(“The transmission failed.”);

CanDeactivate(fd);

CanClosePort(fd);

return -1;

}

CanDeactivate(fd);

CanClosePort(fd);

return 0;

}

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

3. コンパイル

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

4. 実行

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

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

Page 10: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

10

3.2 実行手順

3.2.1 デバイス制御(CAN メッセージの送受信) 基本的なデバイス制御の手順は以下の通りです。

1.初期化

デバイスを CanOpenPort関数で初期化します。

初期化が正常終了すると、以後、デバイスへのアクセスが可能となります。

2.初期設定(通信条件、アクセプタンスフィルタ)

CanSetConfig関数, CanSetAcceptanceFilter関数を使用して通信条件、アクセプタンスフィルタの設

定を行います。また、高機能版、バスマスタ版CANデバイスでは、CanSetFifoTrigger関数でFIFOトリ

ガの設定が可能です。

CanActivate関数を実行することでCANバスに接続され、メッセージの送受信が可能になります。

※「Intel PCH EG20T」のCANコントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx, ETC-B016)

では CanActivate関数を実行する必要はありません。CanOpenPort関数実行後に自動的にCANバス

に接続されます。

3.メッセージ送信

CanSendMessage関数を使用してメッセージの送信を行います。

送信メッセージはデバイスドライバ内部のバッファに蓄えられ、順次送信が行われます。

高機能版、バスマスタ版CAN製品では、CanSendMessage関数に渡すCAN_MESSAGE構造体のulTimeメンバ

にディレイ時間を設定することができます。

また、CanCyclicSendMessage関数により、データの周期送信ができます。

CanStopCyclicSendMessage関数により、周期送信を停止します。

送信が完了したメッセージは、送信完了時間がCAN_MESSAGE構造体のulTimeメンバに格納され、送信

バッファ内に残ります。CanGetCompletionMessage関数で、送信が完了したメッセージを取得します。

送信バッファ内では、送信完了メッセージ数はカウントされません。未送信メッセージのみがカウン

トされます。

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

送信完了メッセージ

送信完了メッセージ

送信完了メッセージ

ulTXBCount = 2

CanSendMessage 関数により、5つのメッセ

ージを送信バッファに挿入した場合。

送信バッファ内の 3 つのメッセージ

が送信完了した場合。

ulTXBCount = 5

送信バッファ

送信バッファ

そのため、未送信データが 0になった時点で、CAN_EVENT_TXB_IS_EMPTY(送信バッファから、未送信デ

ータがなくなった)イベントが発生します。

Page 11: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

11

送信バッファはリングバッファになっており、未送信メッセージが送信バッファを1周すると、送信完

了メッセージを上書きしてしまいますのでご注意ください。

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

送信完了メッセージ

送信完了メッセージ

送信完了メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

送信完了メッセージ

送信完了メッセージ

未送信メッセージ

未送信メッセージが送信バッファの

後まで挿入され、さらに挿入しよ

うとすると・・・

リングバッファなので、次に挿入さ

れるメッセージが、送信完了メッセ

ージを上書きしてしまいます。

送信バッファ

送信バッファ

未送信メッセージ

未送信メッセージ

送信完了メッセージ

送信完了メッセージ

送信完了メッセージ

送信バッファ

この時点で、CanSendMessage 関数に

より、4 つのメッセージを送信バッ

ファに追加するとします。

また、送信完了メッセージは、送信バッファサイズを変更するとクリアされますので、送信完了メッセ

ージを全て取り出してから、送信バッファサイズを変更するようにしてください。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx, ETC-B016)

では CAN_MESSAGE 構造体の ulTime メンバを使用することができません。周期送信関数の実行、送信

完了メッセージの取得も行えません。

4.メッセージ受信

メッセージ受信は自動的に行われ、デバイスドライバ内部のバッファに蓄えられます。

CanReceiveMessage関数はこのバッファから受信メッセージを取り出します。

5.動作状態モニタリング

CanGetStatus関数で動作状態のステータスをモニタリングします。

また、CanGetErrorEvent関数で、CANバス上で発生したエラーの情報を取得することが出来ます。

※「Intel PCH EG20T」のCANコントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx, ETC-B016)

では CanGetStatus関数で取得できないステータスがあります。

6.終了処理

CanClosePort関数でCANインタフェースの終了処理を行います。アプリケーションでは、必ずクロー

ズ処理を行ってから終了してください。

Page 12: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

12

3.2.2 デバイス制御(CAN FD メッセージの送受信) ※ CAN FD メッセージの送受信は CAN FD 版 CAN 製品のみ可能です。

※ CAN FD 版 CAN 製品で CAN メッセージの送受信を行う場合は『3.3.1 デバイス制御(CAN メッセージの

送受信)』を参照してください。

※ CAN FD 通信のサンプルプログラム「sendrecvfd」を用意しておりますのであわせて参照してくださ

い。

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

1.初期化

ポートを CanOpenPort関数で初期化します。

初期化が正常終了すると、以後、ポートへのアクセスが可能となります。

2.初期設定(通信条件、アクセプタンスフィルタ)

CanSetConfigFD関数, CanSetAcceptanceFilterFD関数を使用して通信条件、アクセプタンスフィルタの

設定を行います。また、CanSetFifoTrigger関数でFIFOトリガの設定が可能です。

CanActivate関数を実行することでCANバスに接続され、メッセージの送受信が可能になります。

3.メッセージ送信

CanSendMessageFD関数を使用してメッセージの送信を行います。

送信メッセージはデバイスドライバ内部のバッファに蓄えられ、順次送信が行われます。

CanSendMessageFD関数に渡すCAN_MESSAGE_FD構造体のulTimeメンバにディレイ時間を設定することが

できます。

また、CanCyclicSendMessageFD関数により、データの周期送信ができます。

CanStopCyclicSendMessage関数により、周期送信を停止します。

送信が完了したメッセージは、送信完了時間がCAN_MESSAGE_FD構造体のulTimeメンバに格納され、送信

バッファ内に残ります。CanGetCompletionMessageFD関数で、送信が完了したメッセージを取得します。

送信バッファ内では、送信完了メッセージ数はカウントされません。未送信メッセージのみがカウント

されます。

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

送信完了メッセージ

送信完了メッセージ

送信完了メッセージ

ulTXBCount = 2

CanSendMessageFD 関数により、5つのメッ

セージを送信バッファに挿入した場合。

送信バッファ内の 3 つのメッセージ

が送信完了した場合。

ulTXBCount = 5

送信バッファ

送信バッファ

そのため、未送信データが 0になった時点で、CAN_EVENT_TXB_IS_EMPTY(送信バッファから、未送信デ

ータがなくなった)イベントが発生します。

Page 13: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

13

送信バッファはリングバッファになっており、未送信メッセージが送信バッファを1周すると、送信完

了メッセージを上書きしてしまいますのでご注意ください。

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

送信完了メッセージ

送信完了メッセージ

送信完了メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

未送信メッセージ

送信完了メッセージ

送信完了メッセージ

未送信メッセージ

未送信メッセージが送信バッファの

後まで挿入され、さらに挿入しよ

うとすると・・・

リングバッファなので、次に挿入さ

れるメッセージが、送信完了メッセ

ージを上書きしてしまいます。

送信バッファ

送信バッファ

未送信メッセージ

未送信メッセージ

送信完了メッセージ

送信完了メッセージ

送信完了メッセージ

送信バッファ

この時点で、CanSendMessageFD 関数

により、4 つのメッセージを送信バ

ッファに追加するとします。

また、送信完了メッセージは、送信バッファサイズを変更するとクリアされますので、送信完了メッセ

ージを全て取り出してから、送信バッファサイズを変更するようにしてください。

4.メッセージ受信

メッセージ受信は自動的に行われ、デバイスドライバ内部のバッファに蓄えられます。

CanReceiveMessageFD関数はこのバッファから受信メッセージを取り出します。

5.動作状態モニタリング

CanGetStatusFD関数で動作状態のステータスをモニタリングします。

また、CanGetErrorEvent関数で、CANバス上で発生したエラーの情報を取得することが出来ます。

6.終了処理

CanClosePort関数でCANインタフェースの終了処理を行います。アプリケーションでは、必ずクローズ

処理を行ってから終了してください。

Page 14: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

14

3.2.3 高度な使い方

1.コールバック関数

各種割り込み発生時にコールバック関数を実行することができます。

CanSetEventMask関数にて、コールバック関数を実行したい要因を設定します。

CanSetEvent関数でコールバック関数の登録を行います。

※「Intel PCH EG20T」のCANコントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx, ETC-B016)

ではコールバック関数を使用できません。

2.通信モードの設定

CanSetConfig関数・CanSetConfigFD関数を使って、下記に示す通信モードを設定することができます。 通信モード 概要 対応製品

通常モード メッセージを受信したら ACK を返します。デフォルト

の動作モードです。

通常モードとモニタモードは排他関係です。

全 CAN 製品

モニタモード メッセージを受信しても ACK を返しません。メッセー

ジを送信することはできません。

通常モードとモニタモードは排他関係です。

全 CAN 製品

FIFO 送信モード 送信 FIFO を使った送信を行います。送信 FIFO トリガ

値を変更することでパフォーマンスを上げることが出

来ますが、送信完了メッセージは挿入されません。

高機能版 CAN 製品

複数周期送信版 CAN 製品

Page 15: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

15

3.2.4 CAN 制御から CAN FD 制御への置き換え CAN から CAN FD への置き換えは以下を参考にプログラムの修正を行ってください。

1.ポートの設定

CanSetConfigFD 関数へ CAN_PORT_CONFIG_FD 構造体を指定して設定を行います。

置き換え元 CAN インタフェース用制御関数 置き換え先 CAN FD インタフェース制御用関数

CanGetConfig CanGetConfigFD

CanSetConfig CanSetConfigFD

※CanSetConfig 関数と CanSetConfigFD 関数を両方実行した場合、後に実行された関数の設定が有効に

なります。

2.メッセージの送受信

CAN FD 通信を行なうには CAN_MESSAGE_FD 構造体を使用してメッセージデータを作成し、サフィックス

に FD の付いた関数を使用して送受信を行います。

置き換え元 CAN インタフェース用制御関数 置き換え先 CAN FD インタフェース制御用関数

CanSendMessage CanSendMessageFD

CanCyclicSendMessage CanCyclicSendMessageFD

CanReceiveMessage CanReceiveMessageFD

CanMultiCyclicSendMessage CanMultiCyclicSendMessageFD

CanGetCompletionMessage CanGetCompletionMessageFD

3.アクセプタンスフィルタ

CanSetAcceptanceFilterFD 関数、CanGetAcceptanceFilterFD 関数を使用します。

置き換え元 CAN インタフェース用制御関数 置き換え先 CAN FD インタフェース制御用関数

CanSetAcceptanceFilter CanSetAcceptanceFilterFD

CanGetAcceptanceFilter CanGetAcceptanceFilterFD

※CanSetAcceptanceFilter 関数と CanSetAcceptanceFilterFD 関数を両方実行した場合、後に実行され

た関数の設定が有効になります。

4.バス状態の確認

CanGetStatusFD 関数へ CAN_PORT_STATUS_FD 構造体のポインタを指定して状態を取得します。

置き換え元 CAN インタフェース用制御関数 置き換え先 CAN FD インタフェース制御用関数

CanGetStatus CanGetStatusFD

Page 16: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

16

3.2.5 プロファイルの使用 通信されるデータのフォーマットを予め登録しておくことで、データフィールドを様々な型やサイズに

変換することができます。その変換するためのデータフォーマットのことを、GPG-4851 では「プロファ

イル」と呼び、CAN メッセージに対して使用できます。

1.プロファイルの設定/登録

プロファイルを使用するには、予めプロファイルを設定し、プロファイル用ライブラリ内に登録する

必要があります。その設定、および登録を、CanSetProfile関数で行います。また、CanGetProfile関

数にて、登録されているプロファイルを取得することができます。

不必要なプロファイルは、CanDeleteProfile関数で、プロファイル用ライブラリ内から削除すること

もできます。

プロファイル設定プログラムでも、プロファイルの設定は可能です。プロファイル設定プログラムで

設定したプロファイルはテキストファイルとして保存できますので、保存したファイルをプロファイ

ル用ライブラリ内に読み込み、使用することもできます。

2.プロファイルによる変換

データの変換に使用する関数は、 CanApplyProfile 関数、 CanApplyProfileInteger 関数 、

CanApplyProfileFloat関数の 3つがあります。

いずれの関数も、引数として受信データ(CAN_MESSAGE構造体)を渡します。プロファイル用ライブラ

リ内に登録されているプロファイルを検索し、渡された受信データのIDに一致するプロファイルを適

用し、データの変換を行います。CanApplyProfile関数は、適用されるプロファイルの要素全てに対

し変換を行いますが、CanApplyProfileInteger関数、CanApplyProfileFloat関数は、適用されるプロ

ファイルの指定した要素のみ、それぞれ 32 ビット整数値、32 ビット実数値に変換します。

生データの変換に関する概念を下図に示します。

CANバス

CANカード

CanReceiveMessage       関数

CanApplyProfile 関数,CanApplyProfileInteger 関数,CanApplyProfileFloat 関数

データ受信

生データ

変換後データ取得

32 ビット整数値32 ビット実数値    ・  ・  ・

また、CanQueryProfile関数は、受信データのIDに一致するプロファイル番号を返します(データの変

換は行いません)。

3.プロファイルの保存/読み込み

設定したプロファイルは、テキストファイルとして保存することができます。CanSaveProfile関数で、

プロファイルを保存し、CanLoadProfile関数で、テキストファイルからプロファイル用ライブラリ内

に読み込みます。

プロファイル設定プログラムで保存したプロファイルは、CanLoadProfile関数で読み込みます。

Page 17: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

17

3.3 ドライバ組み込みオプション 本ドライバ組み込み時、以下のパラメータを設定することができます。

パラメータ 内容

device_name デバイス名を設定します。

デフォルトは ifcan です。

device_major メジャー番号を設定します。

デフォルトは 82 です。

device_minorstart CAN ポートのマイナー番号が割り振られる先頭値です。

デフォルトは 1です。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)のドライバには組み込みオプションはありません。

※ソルコン CD 製品(PCI-485230PU)のドライバには組み込みオプションはありません。

オプション指定例 #modprobe cp4851 device_name=can device_major=63 device_minorstart=0

デバイス名を can、メジャー番号を 63、マイナー番号の先頭値を 0に設定します。

Page 18: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

18

3.4 /proc ファイルシステム /proc ファイルシステムを参照することで、CAN インタフェースの認識状況、動作状況を確認すること

ができます。

参照できる内容は以下のとおりです。

項目 内容

デバイス名 デバイス名(ifcan1 など)を表示します。

デバイス型式 デバイス型式を表示します。

RSW1 設定値 RSW1 設定値を表示します。

通信速度 現在設定されている通信速度を表示します。

CAN FD 製品の場合は、2種類の速度を表示します。

・N:CAN 及び CAN FD データフェーズ以外の通信速度

・D:CAN FD データフェーズの通信速度

送受信通算メッセージ数 現在まで送受信したデータの通算メッセージ数です。

tx が送信メッセージ数、rx が受信メッセージ数です。

CAN FD 製品の場合は、txfd(CAN FD 送信メッセージ数)、rxfd(CAN FD

送信メッセージ数)も表示されます。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)のドライバでは/proc ファイルシステムを参照することは出来ません。

※ソルコン CD 製品(PCI-485230PU)のドライバでは/proc ファイルシステムを参照することは出来ま

せん。

※送信通算メッセージ数(tx, txfd)には、周期送信及び複数周期送信で送信されたメッセージ数は含

まれません。

表示例(CAN 製品) #cat /proc/driver/can/cp4851 ifcan1: CPZ/CTP-485220(P)(bid=0h)CH1(High-speed)[125000bps] tx:812 rx:4312 ifcan2: CPZ/CTP-485220(P)(bid=0h)CH2(High-speed)[125000bps] tx:4312 rx:812

表示例(CAN FD 製品) #cat /proc/driver/can/cp4851 ifcan1: PEX-(H)485940(P) (bid=0h) CH1 (High-speed) [N:125000bps / D:1000000bps] tx:812 rx:4312 txfd:48 rxfd:59 ifcan2: PEX-(H)485940(P) (bid=0h) CH2 (High-speed) [N:125000bps / D:1000000bps] tx:4312 rx:812 txfd:0 rxfd:0 ifcan3: PEX-(H)485940(P) (bid=0h) CH3 (High-speed) [N:125000bps / D:1000000bps] tx:0 rx:0 txfd:59 rxfd:48 ifcan4: PEX-(H)485940(P) (bid=0h) CH4 (High-speed) [N:125000bps / D:1000000bps] tx:0 rx:0 txfd:0 rxfd:0

【備考】

●/proc ファイルシステムにデバイス名が表示されない場合

ドライバロード後に dmesg コマンド等を使ってカーネルログを参照して下さい。

「****: DMA configuration failed. The device will be ignored.」(****は 4 桁の数値)と出力さ

れている場合、その環境では DMA 転送が利用できないため、バスマスタ版・CAN FD 版 CAN 製品を使

用することができません。

Page 19: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

19

3.5 カードバス ID 設定ユーティリティについて カードバス ID 設定ユーティリティは、複数枚の同一型式カードバス製品を使用するためのものです。

製品ごとに異なる ID 番号を設定します。

カードバス ID 設定ユーティリティはカードバス製品でのみ使用できます。

【操作方法】

下記のコマンドを実行します。 #/usr/bin/dpg0101 -c

実行すると、現在挿入されている弊社カードバス製品の情報が表示されます。 ********************************************** CardBus Setup Utility ---------------------------------------------- Version: 1.20-06 ---------------------------------------------- Copyright 2004 Interface Corporation. All rights reserved. ********************************************** ========================================================== Ref.ID | Bus | Dev | Func| Model | RSW1 ---------------------------------------------------------- 1 | 2 | 0 | 0 | CBI-4851(A/B) | 0 ========================================================== ************** Command ****************** 1. Change the board id number. 2. Run the device number setup utility. 99. Exit the program. ***************************************** Enter the command number:

項目 内容

Ref.ID カードのインデックス番号です。

メニューでカードの選択を行う際に指定します。

Bus カードが挿入されている PCI バス番号を示します。

Dev カードが挿入されている PCI デバイス番号を示します。

Func カードが挿入されている PCI ファンクション番号を示します。

Model カードの型式を示します。

ID 設定されている ID 番号を示します。

ID 番号を変更したい場合は、メニューから「1」を選択し、変更を行いたいカードのインデックス番号

を入力します。 Enter Ref.ID:

次にカードID番号を入力しリターンキーを押します。カードID番号は0~15の値を入力してください。 Enter the board id number (0-15) If you want to cancel this operation, enter –1.

「99」を選択することでユーティリティを終了します。

※変更した ID 番号をシステムに認識させるには、ドライバの再起動を行うか、システムを再起動して

ください。

※設定した ID 番号がわかるように番号を記したシールをカードに貼ることをお勧めします。

Page 20: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

20

3.6 インタフェースモジュール固有情報

3.6.1 PCI-485230PU 固有情報 弊社ソルコン製品、弊社 I/O 付きタッチパネル CD シリーズに搭載されている CAN の型式です。

使用できる関数、一部機能に制限があります。

●デバイスオープン・クローズの順番について

複数 CH を同時に使用する場合、例えば以下のように

CAN デバイス(CH1)→CAN デバイス(CH2)→CAN デバイス(CH3)の順番でオープンした場合、

CAN デバイス(CH3)→CAN デバイス(CH3)→CAN デバイス(CH1)の順番でクローズしてください。

●複数の I/O 機能を同時に制御する場合

本製品を使用する際、複数 CH で同時に受信処理を行うなど、複数の I/O 機能を同時に制御する場合、

パフォーマンスに影響が出ることがあり、受信メッセージを正常に受信出来ないなど、I/O 機能に影

響が発生する場合があります。

複数 CH で同時に受信する場合は、

・送信メッセージ間隔に余裕を持たせることで受信処理の間隔を空ける

・ボーレートを変更して受信間隔に間を空ける

・受信処理中にステータスポーリングを行なわない

など、I/O 処理の重複が連続しないように制御を行なってください。

例)複数 CH で同時にメッセージを受信した場合、I/O の処理が連続してしまうため、I/O の処理頻

度を下げるために送信側のディレイ時間(CAN_MESSAGE 構造体の ulTime メンバーの設定値)を空ける

必要があるため、以下のような差が出ます。

※下記は、複数の I/O を同時に実行する場合の一例であり、環境やプログラムの実装方法によって

は、下記パフォーマンスが出ない場合がございます。

<CH1 のみでメッセージを受信した場合>

ボーレート データ長 受信件数 送信側のディレイ時間

64

256 1Byte

1024

64

256

125kbps

8Byte

1024

0

64

256 1Byte

1024

64

256

1Mbps

8Byte

1024

30

Page 21: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

21

<CH1+CH2 で同時にメッセージを受信した場合>

ボーレート データ長 件数 送信側のディレイ時間

64 150

256 1Byte

1024 160

64 100

256

125kbps

8Byte

1024 110

64

256 190

1Byte

1024 200

64 180

256

1Mbps

8Byte

1024 190

<CH1+CH2+CH3 で同時にメッセージを受信した場合>

ボーレート データ長 件数 送信側のディレイ時間

64 250

256 1Byte

1024 260

64 200

256

125kbps

8Byte

1024 210

64 280

256 290 1Byte

1024 300

64 280

256

1Mbps

8Byte

1024 290

Page 22: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

22

使用可能関数

・CanOpenPort

・CanClosePort

・CanActivate

・CanDeactivate

・CanSetConfig

※FIFO 送信モードしか使用出来ません。

・CanSetAcceptanceFilter

・CanSetFifoTrigger

※受信 FIFO の設定を行なう場合、トリガ値は 0固定です。

エラーFIFO の設定を行なう場合、トリガ値は、2(CAN_TRIGGER_32)または 3(CAN_TRIGGER_48)のみ

指定出来ます。

エラーFIFO のトリガ値は、2(CAN_TRIGGER_32)が初期値です。

エラーFIFO のタイムアウト時間は、11(1100us)が初期値です。

エラーFIFO のタイムアウト時間は、送信する 1メッセージより長い時間を指定してください。

・CanGetConfig

・CanGetAcceptanceFilter

・CanGetFifoTrigger

・CanSendMessage

・CanCyclicSendMessage

・CanStopCyclicSendMessage

・CanReceiveMessage

・CanGetStatus

・CanGetErrorEvent

・CanClearBuffer

・CanGetPortInformation

※リビジョン ID は不定値となります。

・CanSetEvent

・CanSetEventMask

・CanGetEventMask

・CanKillEvent

Page 23: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

23

4 リファレンス

4.1 関数一覧

CAN 通信を行なう場合と、CAN FD 通信を行なう場合で使用する関数が異なります。以下を参考に、各関

数の説明を参照してください。

CAN 通信で使用する関数 CAN FD 通信で使用する関数

4.1.1 デバイス制御用共通関数

4.1.2 CAN インタフェース用制御関数 4.1.3 CAN FD インタフェース用制御関数

4.1.4 プロファイル設定用関数

Page 24: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

24

4.1.1 デバイス制御用共通関数 No 関数名 機能

●初期化関数

1 CanOpenPort CAN インタフェースをオープンします。

2 CanClosePort CAN インタフェースをクローズします。

3 CanActivate CAN バスに接続します。

4 CanDeactivate CAN バスから切り離します。

●各種設定関数

5 CanSetFifoTrigger FIFO のトリガ設定を行います。

●各種設定の取得関数

6 CanGetFifoTrigger FIFO のトリガ設定を取得します。

●メッセージ送受信関数

7 CanStopCyclicSendMessage メッセージの周期送信を停止します。

●複数メッセージ周期送信関数

8 CanStopMultiCyclicSendMe

ssage

メッセージの周期送信を停止します。(複数メッセージ版)

9 CanSetTransmissionCycle 周期送信の周期を設定します。(複数メッセージ版)

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

10 CanGetErrorEvent エラー情報をエラーバッファから取り出します。

11 CanClearBuffer 各種バッファをクリアします。

12 CanGetPortInformation ポートのハードウェア情報を取得します。

13 CanGetSendFifoCount 送信 FIFO 内のメッセージ件数を取得します。

●割り込み設定関数

14 CanSetEvent 割り込みコールバック関数、メッセージ、イベントを登録します。

15 CanSetEventMask 割り込みのマスク設定を行います。

16 CanGetEventMask 割り込みのマスク設定を取得します。

17 CanKillEvent 割り込みコールバック関数、メッセージ、イベントを解除します。

●タイマカウンタ制御関数

18 CanSetTimerConfig タイマカウンタの周期を設定します。

19 CanGetTimerCount タイマカウンタ値を取得します。

20 CanControlTimer タイマカウンタを制御します。

●内部同期制御関数

21 CanOutputSync 内部同期出力を設定します。(ITC-Ax1310(L)のみ)

Page 25: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

25

4.1.2 CAN インターフェース用関数 No 関数名 機能

●各種設定関数

1 CanSetConfig 各種設定を行います。

2 CanSetAcceptanceFilter アクセプタンスフィルタの設定を行います。

●各種設定の取得関数

3 CanGetConfig 各種設定を取得します。

4 CanGetAcceptanceFilter アクセプタンスフィルタの設定を取得します。

●メッセージ送受信関数

5 CanSendMessage メッセージの送信を行います。

6 CanCyclicSendMessage メッセージの周期送信を行ないます。

7 CanReceiveMessage 受信メッセージの取り出しを行います。

●複数メッセージ周期送信関数

8 CanMultiCyclicSendMessag

e

メッセージの周期送信を行ないます。(複数メッセージ版)

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

9 CanGetStatus 各種ステータスの取得を行います。

10 CanGetCompletionMessage 送信完了したメッセージを取り出します。

4.1.3 CAN FD インターフェース用関数 No 関数名 機能

●各種設定関数

1 CanSetConfigFD 各種設定を行います。(CAN FD 版)

2 CanSetAcceptanceFilterFD アクセプタンスフィルタの設定を行います。(CAN FD 版)

●各種設定の取得関数

3 CanGetConfigFD 各種設定を取得します。(CAN FD 版)

4 CanGetAcceptanceFilterFD アクセプタンスフィルタの設定を取得します。(CAN FD 版)

●メッセージ送受信関数

5 CanSendMessageFD メッセージの送信を行います。(CAN FD 版)

6 CanCyclicSendMessageFD メッセージの周期送信を行ないます。(CAN FD 版)

7 CanReceiveMessageFD 受信メッセージの取り出しを行います。(CAN FD 版)

●複数メッセージ周期送信関数

8 CanMultiCyclicSendMessag

eFD

メッセージの周期送信を行ないます。(CAN FD 版)

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

9 CanGetStatusFD 各種ステータスの取得を行います。(CAN FD 版)

10 CanGetCompletionMessageF

D

送信完了したメッセージを取り出します。(CAN FD 版)

Page 26: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

26

4.1.4 プロファイル設定用関数 No 関数名 機能

●プロファイル変換関数

1 CanQueryProfile 該当するプロファイルが登録されているかどうか問い合わせます。

2 CanApplyProfile プロファイル情報を元に受信データを変換します。

3 CanApplyProfileInteger プロファイル情報を元に送受信データを 32bit 整数値に変換します。

4 CanApplyProfileFloat プロファイル情報を元に送受信データを 32bit 実数値に変換します。

●プロファイル設定関数

5 CanSetProfile プロファイルの登録を行います。

6 CanGetProfile プロファイル情報を取得します。

7 CanDeleteProfile プロファイルを削除します。

●プロファイル設定ファイル関数

8 CanSaveProfile プロファイルをセーブします。

9 CanLoadProfile プロファイルをロードします。

Page 27: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

27

4.2 関数個別説明

4.2.1 デバイス制御用共通関数

1. CanOpenPort 【機能】

CAN インタフェースのオープンを行い、以後のアクセスを行えるようにします。

/proc ファイルシステムに認識された弊社 CAN インタフェースが一覧表示されます。

一覧のデバイス名の横に、製品型式とチャンネル番号が表示されます。

※ チャンネル 1とチャンネル 2は別のデバイス名で登録されます。

デバイス名はスロット位置の変更等でシステム構成が変化すると割り当てられる名前が変化する場

合があります。システム構成が変化する環境でご使用になる場合は、デバイス名の指定が変更できる

ようにアプリケーションを作成ください。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では/proc ファイルシステムでデバイス名を確認することはできません。デバイス名は

ioh_can になります。

※ソルコン CD 製品(PCI-485230PU)では/proc ファイルシステムでデバイス名を確認することはでき

ません。

デバイス名は CH1 の場合 ifcan256、 CH2 の場合 ifcan257、CH3 の場合 ifcan258 になります。

【書式】

●C言語

int CanOpenPort(

char *name /* デバイス名 */

);

【パラメータ】

name オープンする CAN インタフェースのデバイス名を指定してください。

【戻り値】

CanOpenPort 関数が正常に終了した場合には、有効なハンドルが返されます。

他の関数は、本関数により取得したハンドルを使用してデバイスの制御を行います。

オープンに失敗した場合には、-1 が返されます。

【備考】

●「Intel PCH EG20T」の CAN コントローラを搭載した製品について

「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数実行時に、自動的に CAN バスへの接続を有効(データの送受信が行える状

態)化します。CanActivate 関数で有効化することはできません。

●正しいデバイス名を指定しているのにオープンに失敗するとき

ドライバロード後に dmesg コマンド等を使ってカーネルログを参照して下さい。

「****: DMA configuration failed. The device will be ignored.」(****は 4 桁の数値)と出力

されている場合、その環境では DMA 転送が利用できないため、バスマスタ版・CAN FD 版 CAN 製品

を使用することができません。

Page 28: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

28

【使用例】

●C言語

int fd;

fd = CanOpenPort(“ifcan1”);

デバイス名「ifcan1」の CAN インタフェースをオープンします。

Page 29: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

29

2. CanClosePort 【機能】

CAN インタフェースをクローズします。

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

スを禁止します。

【書式】

●C言語

int CanClosePort(

int fd /* デバイスハンドル */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

【戻り値】

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

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

【備考】

メッセージの送受信中に本関数を実行した場合、全て中断されます。

クローズ後の各種設定はクリアされます。

「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx, ETC-B016)

では本関数実行時に、自動的にバスオフ状態(CAN バスへの接続を無効化)にします。CanDeactivate

関数で無効化することはできません。

【使用例】

●C言語

int fd;

fd = CanOpenPort(“ifcan1”);

CanClosePort(fd); デバイス名「ifcan1」の CAN インタフェースのクローズ処理を行います。

Page 30: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

30

3. CanActivate 【機能】

CAN バスへの接続を有効(データの送受信が行える状態)化します。

CanOpenPort 関数でオープンした直後は、バスオフ状態(接続が無効な状態)ですので、本関数を使

用し、CAN バスへ接続する必要があります。

送信エラー数が 255 を越え、バスオフ状態になったときにも、本関数を使い再接続します。

送信バッファに送信メッセージが残っている場合、送信を再開します。

既に CAN バスへの接続が有効であるときに、本関数を呼び出すとエラーとなります。

※ 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。CAN バスへの接続有効化は CanOpenPort 関数実行時に

自動的に行われます。

【書式】

●C言語

int CanActivate(

int fd /* デバイスハンドル */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

【戻り値】

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

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

【使用例】

●C言語

int nRet;

int fd;

fd = CanOpenPort(“ifcan1”);

nRet = CanActivate(fd);

デバイス名「ifcan1」の CAN インタフェースをメッセージの送受信が可能な状態にします。

Page 31: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

31

4. CanDeactivate 【機能】

バスオフ状態(CAN バスへの接続を無効化)にします。(メッセージの送受信が行えない状態)

CanSetConfig 関数、CanSetAcceptanceFillter 関数、CanSetFifoTrigger 関数を実行するには本関数

でバスオフ状態にしておく必要があります。

バスオフ状態かどうかは、CanGetStatus 関数で確認することができます。

メッセージの送信中の場合、そのメッセージは途中で中断されます。

(そのメッセージは正規のフォーマットではなくなるので、受信側でエラーが発生します)

送信待機中のメッセージはそのまま送信バッファに残ります。

再度、CanActivate 関数を実行し、バスに接続後、自動的に送信が再開されます。

送信したくない場合は、CanActivate 関数を実行する前に CanClearBuffer 関数で送信バッファをク

リアしておいてください。

メッセージの受信中に、本関数を実行した場合、その受信中のメッセージは受信バッファには蓄えら

れません。(破棄されます)

受信バッファの中身は変化しませんので、バスオフ状態でもメッセージを取り出すことは可能ですが、

新たな受信メッセージは CanActivate 関数を実行するまで蓄えられません。

既にバスオフ状態のときに、本関数を呼び出すとエラーとなります。

※ 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。CAN バスの接続無効化は CanClosePort 関数実行時に自

動的に行われます。

【書式】

●C言語

int CanDeactivate(

int fd /* デバイスハンドル */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

【戻り値】

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

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

【使用例】

●C言語

int fd;

fd = CanOpenPort(“ifcan1”);

CanActivate(fd);

CanDeactivate(fd);

デバイス名「ifcan1」の CAN インタフェースをバスオフ状態にします。

Page 32: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

32

5. CanSetFifoTrigger 【機能】

受信 FIFO、エラーFIFO、送信 FIFO のトリガ値を設定します。ここでいうトリガとは、ドライバ内で

割り込みが発生するタイミングのことをいいます。従って、通常はこのトリガ値を意識する必要はあ

りません。本関数はバスオフ状態でのみ実行できます。

高速でデータをやり取りする場合、トリガ値を上げることにより、ドライバ内での割り込み発生率が

下がり、システムの負荷を下げることができます。トリガ値を上げることにより、オーバーフローが

発生する場合は、トリガ値を下げるようにして下さい。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanSetFifoTrigger(

int fd, // デバイスハンドル

unsigned long FifoKind, // 設定する FIFO の種類

unsigned long TriggerValue, // トリガ値

unsigned long FifoTimeout // FIFO 内タイムアウト値

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

FifoKind 設定する FIFO を選択します。下記の中から選択してください。

識別子 値 内容

CAN_RECEIVE_FIFO 0 受信 FIFO(※1)

CAN_ERROR_FIFO 1 エラーFIFO

CAN_SEND_FIFO 2 送信 FIFO(※1, 2)

※1 高機能版、CAN FD 版 CAN 製品のみ有効です。

※2 FIFO 送信モードに設定していない場合はエラーとなります。

TriggerValue トリガ値を下記の値で指定します。デフォルトは 0です。

識別子 値 内容

CAN_TRIGGER_1 0 受信/エラーFIFO 内のデータ数が 0→1で割り込み発生。

送信 FIFO の場合、FIFO 内のデータ数が 1→0で割り込み発生。

CAN_TRIGGER_16 1 受信/エラーFIFO 内のデータ数が 15→16 で割り込み発生。

送信 FIFO の場合、FIFO 内のデータ数が 16→15 で割り込み発生。

CAN_TRIGGER_32 2 受信/エラーFIFO 内のデータ数が 31→32 で割り込み発生。

送信 FIFO の場合、FIFO 内のデータ数が 32→31 で割り込み発生。

CAN_TRIGGER_48 3 受信/エラーFIFO 内のデータ数が 47→48 で割り込み発生。

送信 FIFO の場合、FIFO 内のデータ数が 48→47 で割り込み発生。

Page 33: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

33

FifoTimeout 受信 FIFO、エラーFIFO 内のタイムアウト時間を設定します。単位は 100μs です。

新しく FIFO 内にデータが挿入されてから、FifoTimeout 時間の間にトリガが発生しない場合、

割り込みが発生するようになります。

例えば、受信 FIFO のトリガ設定を行うために、FifoKind に CAN_RECEIVE_FIFO を設定し、

TriggerValue に CAN_TRIGGER_48、FifoTimeout に 5 を設定した場合、受信 FIFO 内のデータ数が

48 になれば、トリガ条件が満たされたことになり、(ドライバ内で)割り込みが発生します。ま

た、受信 FIFO 内のデータ数が 48 より少ない場合、受信データが受信 FIFO に挿入されてから、

次のデータが受信 FIFO に挿入される前に、500μs(5×100μs)が経過すると、タイムアウトと

みなされ、(ドライバ内で)割り込みが発生します。

デフォルトは、エラーFIFO、受信 FIFO いずれも 4です。

設定可能範囲は 1~255 です。

送信 FIFO 設定時は、設定値は無効となります。

【戻り値】

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

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

【備考】

本関数は、スタンダード版 CAN 製品では使用することはできません。

【使用例】

●C言語

int fd;

int Ret;

unsigned long Trigger;

unsigned long Timeout;

fd = CanOpenPort(“ifcan1”);

// 受信 FIFO トリガを設定します

Trigger = CAN_TRIGGER_16;

Timeout = 8;

Ret = CanSetFifoTrigger(fd, CAN_RECEIVE_FIFO, Trigger, Timeout);

デバイス名「ifcan1」の CAN インタフェースの受信 FIFO トリガを設定します。

Page 34: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

34

6. CanGetFifoTrigger 【機能】

受信 FIFO、エラーFIFO、送信 FIFO のトリガ値を取得します。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanGetFifoTrigger(

int fd, // デバイスハンドル

unsigned long FifoKind, // 設定する FIFO の種類

unsigned long *pTriggerValue, // トリガ値格納変数へのポインタ

unsigned long *pFifoTimeout // FIFO 内タイムアウト値格納変数へのポインタ

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

FifoKind 設定する FIFO を選択します。下記の中から選択してください。

識別子 値 内容

CAN_RECEIVE_FIFO 0 受信 FIFO(※1)

CAN_ERROR_FIFO 1 エラーFIFO

CAN_SEND_FIFO 2 送信 FIFO(※1, 2)

※1 高機能版、CAN FD 版 CAN 製品のみ有効です。

※2 FIFO 送信モードに設定していない場合はエラーとなります。

pTriggerValue 取得するトリガ値が下記の値で格納されます。デフォルトは 0です。

識別子 値 内容

CAN_TRIGGER_1 0 受信/エラーFIFO 内のデータ数が 0→1で割り込み発生。

送信 FIFO の場合、FIFO 内のデータ数が 1→0で割り込み発生。

CAN_TRIGGER_16 1 受信/エラーFIFO 内のデータ数が 15→16 で割り込み発生。

送信 FIFO の場合、FIFO 内のデータ数が 16→15 で割り込み発生。

CAN_TRIGGER_32 2 受信/エラーFIFO 内のデータ数が 31→32 で割り込み発生。

送信 FIFO の場合、FIFO 内のデータ数が 32→31 で割り込み発生。

CAN_TRIGGER_48 3 受信/エラーFIFO 内のデータ数が 47→48 で割り込み発生。

送信 FIFO の場合、FIFO 内のデータ数が 48→47 で割り込み発生。

Page 35: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

35

FifoTimeout 取得する FIFO 内のタイムアウト時間が格納されます。単位は 100μs です。

新しく FIFO 内にデータが挿入されてから、FifoTimeout 時間の間にトリガが発生しない場合、

割り込みが発生するようになります。

例えば、FifoKind に CAN_RECEIVE_FIFO、TriggerValue に CAN_TRIGGER_48、FifoTimeout に 5 を

設定した場合、受信 FIFO 内のデータ数が 48 になれば、トリガ条件が満たされたことになり、割

り込みが発生しますが、受信 FIFO 内のデータ数が 48 より少ない場合、受信データが受信 FIFO

に挿入されてから、次のデータが受信 FIFO に挿入される前に、500μs(5×100μs)が経過する

と、タイムアウトとみなされ、割り込みが発生します。

デフォルトは、エラーFIFO、受信 FIFO いずれも 4です。

送信 FIFO 設定時は、0が返されます。

【戻り値】

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

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

【備考】

本関数は、スタンダード版 CAN 製品では使用することはできません。

【使用例】

●C言語

int Ret;

int fd;

unsigned long Trigger;

unsigned long Timeout;

fd = CanOpenPort(“ifcan1”);

// 受信 FIFO トリガを取得します

Ret = CanGetFifoTrigger(fd, CAN_RECEIVE_FIFO, &Trigger, &Timeout);

デバイス名「ifcan1」の CAN インタフェースの受信 FIFO トリガを取得します。

Page 36: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

36

7. CanStopMultiCyclicSendMessage 【機能】

CAN メッセージの周期送信を停止します。

データ送信中にこの関数を実行すると、現在送信中のデータの送信が完了してから、周期送信が停止

されます。

この関数で周期送信を停止した場合、周期送信停止イベントは発生しません。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

INT CanStopMultiCyclicSendMessage(

int fd, /* デバイスハンドル */

unsigned long dwRoute );

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

dwRoute 周期送信を停止するメッセージの番号を 1~12 の範囲で指定します。

【戻り値】

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

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

【備考】

本関数は、PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420、PEX-H485940P で使用できます。

Page 37: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

37

【使用例】

●C言語

int fd, Ret;

CAN_MESSAGE CanMessage;

fd = CanOpenPort(“ifcan1”);

// 送信周期を 100ms に設定

Ret = CanSetTransmissionCycle(fd, CAN_ROUTE_4_6, 100*1000);

// 送信メッセージのセット

CanMessage.ulLength = 4;

CanMessage.ulID = 0x01;

CanMessage.ulFlag = 0;

CanMessage.ulTime = 0;

CanMessage[0].bData = 0x11;

CanMessage[1].bData = 0x22;

CanMessage[2].bData = 0x33;

CanMessage[3].bData = 0x44;

Ret = CanActivate(fd);

// メッセージ番号 4の周期送信開始

Ret = CanMultiCyclicSendMessage(fd, 4, CanMessage);

// メッセージ番号 4の周期送信の停止

Ret = CanStopMultiCyclicSendMessage(fd, 4);

デバイス名「ifcan1」の CAN インタフェースの周期送信を停止します。

Page 38: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

38

8. CanStopCyclicSendMessage 【機能】

CAN メッセージの周期送信を停止します。

データ送信中にこの関数を実行すると、現在送信中のデータの送信が完了してから、周期送信が停止

されます。

この関数で周期送信を停止した場合、周期送信停止イベントは発生しません。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanStopCyclicSendMessage(

int fd // デバイスハンドル

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

【戻り値】

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

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

【備考】

1. 本関数は、スタンダード版 CAN 製品では使用することはできません。

2. 本関数の直後に CanCyclicSendMessage 関数を実行すると、周期送信が完全に停止するまでの間

は IFCAN_ERROR_NOW_SENDING が返されることがあります。この場合、CanCyclicSendMessage 関

数を再実行してください。

Page 39: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

39

【使用例】

●C言語

int Ret;

CAN_MESSAGE CanMessage;

int fd;

unsigned long ulSendValue;

fd = CanOpenPort(“ifcan1”);

// 送信メッセージ長のセット

CanMessage.ulLength = 4;

// 送信メッセージの ID をセット

CanMessage.ulID = 0x01 | CAN_EXT_FRAME;

// フラグの設定

CanMessage.ulFlag = 0;

// 300ms 周期

CanMessage.ulTime = 300*100;

// 送信メッセージの内容をコピー

*(unsigned long*)CanMessage.bData = SendValue;

Ret = CanActivate(fd);

// 300ms 周期で送信

Ret = CanCyclicSendMessage(fd, CanMessage);

// 周期送信の停止

Ret = CanStopCyclicSendMessage(fd);

デバイス名「ifcan1」の CAN インタフェースの周期送信を停止します。

Page 40: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

40

9. CanSetTransmissionCycle 【機能】

CanMultiCycleSendMessage 関数で送信する CAN メッセージの送信周期を設定します。

3 メッセージ毎に 1つの周期が設定できます。

メッセージ番号 1~3、メッセージ番号 4~6、メッセージ番号 7~9、メッセージ番号 10~12 にそれ

ぞれ 1つずつ、計 4つの周期を設定できます。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

INT CanSetTransmissionCycle (

int fd, /* デバイスハンドル */

unsigned long dwRoute, unsigned long dwCycle );

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

dwRoute 周期を設定するメッセージの番号を以下の識別子で指定してください。

識別子 値 内容

CAN_ROUTE_1_3 00000001h メッセージ番号 1~3で使用する周期を設定

CAN_ROUTE_4_6 00000002h メッセージ番号 4~6で使用する周期を設定

CAN_ROUTE_7_9 00000003h メッセージ番号 7~9で使用する周期を設定

CAN_ROUTE_10_12 00000004h メッセージ番号 10~12 で使用する周期を設定

dwCycle 送信するメッセージの周期を指定します。

周期は 10μs 単位で設定します。設定可能範囲は 5~FFFFh(50μs~655,350μs)です。FFFFh

より大きい値を設定しても、自動的に FFFFh に設定されます。5より小さい値を設定しても、自

動的に 5に設定されます。

【戻り値】

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

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

【備考】

1. CanMultiCyclicSendMessage 関数で周期送信を開始する前に、必ず本関数で周期を設定してくださ

い。

2.本関数は、PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420 で使用できます。

Page 41: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

41

【使用例】

●C言語

INT fd, Ret;

CAN_MESSAGE CanMessage;

fd = CanOpenPort(“ifcan1”);

// 送信周期を 100ms に設定

Ret = CanSetTransmissionCycle(fd, CAN_ROUTE_4_6, 100*1000);

// 送信メッセージのセット

CanMessage.ulLength = 4;

CanMessage.ulID = 0x01;

CanMessage.ulFlag = 0;

CanMessage.ulTime = 0;

CanMessage[0].bData = 0x11;

CanMessage[1].bData = 0x22;

CanMessage[2].bData = 0x33;

CanMessage[3].bData = 0x44;

Ret = CanActivate(fd);

// メッセージ番号 4の周期送信開始

Ret = CanMultiCyclicSendMessage(fd, 4, CanMessage);

デバイス名「ifcan1」の CAN インタフェースの送信周期を 100ms に設定します。

Page 42: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

42

10. CanGetErrorEvent 【機能】

エラーバッファに蓄えられたエラー情報を取り出します。

CAN バス上で発生したエラーは、自動的にデバイスドライバ内部のエラーバッファに蓄えられます。

本関数では、この蓄えられたエラー情報を取り出します。

エラー情報があるかどうかは、CanGetStatus 関数でエラーバッファの状態を見ることで確認できま

す。蓄えられたエラー情報が無い場合、戻り値で、IFCAN_ERROR_BUFFER_IS_EMPTY が返されます。

また、CanSetEvent 関数でイベントを設定することでエラーが発生した時点でイベントを発生させる

ことができます。(コールバック関数、シグナル)

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanGetErrorEvent(

int fd, /* デバイスハンドル */

PCAN_ERROR CanError, /* エラー情報格納用構造体へのポインタ */

unsigned long *Count /* 取り出し希望件数及び取り出し件数格納用 */

/* 変数へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

CanError エラー情報を格納する構造体へのポインタを指定してください。

Count で指定された個数分の領域を用意してください。

CAN_ERROR構造体の説明については、『4.3 構造体説明』をご参照ください。

Count エラーバッファから取り出すエラー情報の件数を指定してください。

エラーバッファに蓄えられているエラー情報が指定された件数よりも少ない場合、実際に

エラーバッファから取り出された件数が、この変数に返されます。

例)PortStatus.ulERBCount が 3 の時に、Count に 5 をセットし、CanGetErrorEvent

関数を実行すると、Count に 3 が返されます。

【戻り値】

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

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

Page 43: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

43

【使用例】

●C言語

CAN_ERROR CanError[10];

unsigned long Count;

int fd, ret, i;

fd = CanOpenPort(“ifcan1”);

/* エラー情報の取り出し */

Count = 10;

ret = CanGetErrorEvent(fd, CanError, &Count);

if(ret == IFCAN_ERROR_SUCCESS) {

for(i = 0; i < Count; i++) {

printf(“エラー割り込み発生要因 : %lx\n”, CanError[i].ulInterruptRegister);

printf(“エラーコード : %lx\n”, CanError[i].ulErrorCodeRegister);

printf(“アービトレーションロスト : %lx\n“,

CanError[i].ulArbitrationLostRegister);

}

}

デバイス名「ifcan1」の CAN インタフェースから 10 件のエラー情報を取り出します。

取り出されたエラーメッセージを画面に表示します。

10 件に満たない場合は、取り出された件数分だけ表示します。

Page 44: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

44

11. CanClearBuffer 【機能】

デバイスドライバ内に蓄えられている送信、受信メッセージ等を削除します。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanClearBuffer(

int fd, /* デバイスハンドル */

unsigned long ClearBuffer /* クリアするバッファを指定 */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

ClearBuffer クリアするバッファの種類を指定してください。

識別子 値 内容

CAN_CLEAR_TXB 00000020h 送信バッファの内容をクリアします。

送信 FIFO 内のデータもクリアされます。

CAN_CLEAR_RXB 00000010h 受信バッファの内容をクリアします。

受信 FIFO 内のデータもクリアされます。

CAN_CLEAR_TXERR 00000008h 送信エラーカウンタをクリアします。※

CAN_CLEAR_RXERR 00000004h 受信エラーカウンタをクリアします。※

CAN_CLEAR_ERB 00000002h エラーバッファの内容をクリアします。

エラーFIFO 内のデータもクリアされます。

CAN_CLEAR_TIMERCOUNTER 00000001h 内部カウンタをクリアします。

※ バスオフ状態でのみ使用可能です。使用時には CanDeactivate 関数でバスオフ状態にする必

要があります。バスオフ状態になっていない場合、関数の戻り値でエラーが返され、全ての

クリアは行われません。

【戻り値】

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

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

【備考】

1. CAN FD 版 CAN 製品で送信バッファ、受信バッファのクリアを行った場合、CAN メッセージ、CAN FD

メッセージ両方のバッファがクリアされます。

2. CAN FD 版 CAN 製品では CAN_CLEAR_TXERR、CAN_CLEAR_RXERR のいずれかを指定すると送信エラーカウ

ンタ、受信エラーカウンタの両方がクリアされます。個別にクリアすることはできません。

Page 45: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

45

【使用例】

●C言語

int fd;

fd = CanOpenPort(“ifcan1”);

CanClearBuffer(fd,CAN_CLEAR_RXB);

デバイス名「ifcan1」の CAN インタフェースの受信バッファをクリアします。

Page 46: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

46

12. CanGetPortInformation 【機能】

ポートのハードウェア情報を取得します。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanGetPortInforamtion(

int fd, // デバイスハンドル

PCAN_PORT_INFORMATION Info // ハードウェア情報構造体へのポインタ

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

Info ハードウェア情報構造体へのポインタを指定してください。

取得された値が格納されます。

構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

【使用例】

●C言語

int Ret, DeviceNumber;

char DeviceName[256];

int fd;

CAN_PORT_INFORMATION PortInfo;

for(DeviceNumber = 1; DeviceNumber < 256; DeviceNumber++) {

sprintf(DeviceName, "ifcan%d", DeviceNumber);

fd = CanOpenPort(DeviceName);

if(fd < -1) continue;

PortInfo.ulStructLength = sizeof(CAN_PORT_INFORMATION);

Ret = CanGetPortInformation(fd, &PortInfo);

if(Ret == IFCAN_ERROR_SUCCESS) {

if((PortInfo.ulModelNumber == 485120) &&

(PortInfo.ulSubsystemID == 0x2094)) {

break;

}

}

Ret = CanClosePort(fd);

}

PCI-485120 のハードウェア情報を取得します。

Page 47: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

47

13. CanGetSendFifoCount 【機能】

送信 FIFO 内のメッセージ件数を取得します。

CanGetStatus 関数で取得できる送信バッファ内のメッセージ件数と、本関数で取得できる送信 FIFO

内のメッセージ件数を足すことで、FIFO 送信モード中の未送信メッセージの件数を確認することが

できます。

※本関数は高機能版、複数周期送信版 CAN 製品で使用できます。

【書式】

●C言語

int CanGetSendFifoCount (

int fd, /* デバイスハンドル */

unsigned char* pCount /* メッセージ数へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pCount 送信 FIFO 内に格納されている送信メッセージ数が取得できます。

【戻り値】

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

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

【使用例】

●C言語

int nRet;

unsigned char Count;

int fd;

fd = CanOpenPort(“ifcan1”);

nRet = CanGetSendFifoCount(fd, &Count);

デバイス名「IFCAN1」の CAN インタフェースの送信 FIFO 内のメッセージ件数を取得します。

Page 48: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

48

14. CanSetEvent 【機能】

割り込み発生時に起動するコールバック関数、シグナルの登録を行います。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanSetEvent(

int fd, /* デバイスハンドル */

PCAN_EVENT_REQ Event /* 割り込み設定構造体へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

Event 割り込み発生時に呼び出されるユーザ・コールバック関数、シグナルの設定を行う構造体へのポ

インタを指定してください。

構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

Page 49: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

49

【備考】

●コールバック関数の書式

コールバック関数の書式は以下の通りです。関数名(ここでは CallBack)は任意です。

void CallBack(

unsigned long Event, /* コールバック関数発生要因 */

unsigned long UserData /* ユーザデータ */

);

【パラメータ】

Event コールバック関数発生要因。

コールバック関数が発生した要因が渡されます。

識別子 値 内容

CAN_EVENT_TRANSCEIVER_ERROR 00001000h 低速 CAN トランシーバでエラーが発生しまし

た。

CAN_EVENT_ERR_FIFO_OVER 00000200h エラーFIFO がオーバーフローし、エラー情報を

取りこぼしました。

エラーFIFO トリガ値を下げてください。

CAN_EVENT_DETECT_OVERRUN 00000100h オーバーランエラーが発生し、受信データを取

りこぼしました。

受信 FIFO はデータがいっぱいになると、CAN コ

ントローラからデータを抜き取らなくなるた

め、このオーバーランエラーが発生します。受

信 FIFO トリガ値を下げてください。

(このオーバーランエラーは、エラー情報バッ

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

CAN_EVENT_CYCLIC_SEND_STOP 00000080h 送信周期よりもデータ送信時間が長いため、周

期送信が停止しました。

CAN_EVENT_BUS_STATUS 00000040h バスステータスの変化(エラーアクティブ、エ

ラーパッシブ、バスオフ)でイベントが発生し

ました。

CAN_EVENT_RECV

(※1)

00000020h 受信バッファに 1 つ以上の受信メッセージが蓄

えられました。

CAN_EVENT_ERROR 00000010h エラーバッファに 1 つ以上のエラーが蓄えられ

ました。

CAN_EVENT_TXB_IS_EMPTY

(※2)

00000008h 送信バッファが空になりました。

CAN_EVENT_ERROR_LIMIT 00000004h 送信、受信いずれかのエラーがリミット値を越

えました。

リ ミ ッ ト 値 は CAN_PORT_CONFIG 構 造 体 の

ulErrorLimit で指定します。

CAN_EVENT_RXB_FULL 00000002h 受信バッファがいっぱいになりました。

CAN_EVENT_ERB_FULL 00000001h エラーバッファがいっぱいになりました。

※1 CAN FD 版 CAN 製品では、CAN/CAN FD いずれかの 1 つ以上の受信メッセージが蓄えられた場

合に発生します。

※2 CAN FD 版 CAN 製品では、CAN/CAN FD いずれかの送信バッファ内の未送信データがなくなっ

た場合に発生します。

Page 50: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

50

次の要因は PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420、PEX-H485940P で発生します。

識別子 値 内容

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO12

80000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 12 の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO11

40000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 11 の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO10

20000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 10 の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO9

10000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 9の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO8

08000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 8の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO7

04000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 7の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO6

02000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 6の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO5

01000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 5の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO4

00800000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 4の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO3

00400000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 3の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO2

00200000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 2の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO1

00100000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 1の周期送信が停止しました。

CAN_EVENT_TIMER_COUNTER(※1) 00080000h タイマカウンタ周期イベントが発生しました。

※1 CAN FD 版 CAN 製品ではタイマカウンタ周期イベントは発生しません。

UserData CanSetEvent 関数実行時、CAN_EVENT_REQ 構造体の dwUser 変数に指定したユーザ・データが取得

されます。

シグナル機能を使用する場合、シグナルハンドラには発生要因、ユーザデータは渡されません。

Page 51: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

51

【使用例】

●C言語

/* コールバック関数 */

void EventProc(unsigned long Event, unsigned long UserData){

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

}

/* メインルーチン */

int fd;

CAN_EVENT_REQ Event;

fd = CanOpenPort(“ifcan1”);

CanSetEventMask(fd, CAN_EVENT_RECV);

memset(&Event, 0, sizeof(Event));

Event.lpCallBackProc = (LPCANCALLBACK)EventProc;

Event.dwUser = 0x1234;

CanSetEvent(fd, &Event);

デバイス名「ifcan1」の CAN インタフェースの割り込みマスク、コールバック関数を設定します。

Page 52: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

52

15. CanSetEventMask 【機能】

割り込みイベントのマスク設定を行います。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanSetEventMask(

int fd, /* デバイスハンドル */

unsigned long EventMask /* イベントマスク設定 */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

EventMask 使用する割り込みイベントのマスクデータを指定してください。

識別子 値 内容

CAN_EVENT_TRANSCEIVER_ERROR

(※1)

00001000h 低速 CAN トランシーバでエラーが発生しまし

た。

CAN_EVENT_ERR_FIFO_OVER

(※2)

00000200h エラーFIFO がオーバーフローし、エラー情報を

取りこぼしました。

エラーFIFO トリガ値を下げてください。

CAN_EVENT_DETECT_OVERRUN

00000100h オーバーランエラーが発生し、受信データを取

りこぼしました。

受信 FIFO はデータがいっぱいになると、CAN コ

ントローラからデータを抜き取らなくなるた

め、このオーバーランエラーが発生します。受

信 FIFO トリガ値を下げてください。

(このオーバーランエラーは、エラー情報バッ

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

CAN_EVENT_CYCLIC_SEND_STOP

(※2)

00000080h 送信周期よりもデータ送信時間が長いため、周

期送信が停止しました。

CAN_EVENT_BUS_STATUS 00000040h バスステータスの変化(エラーアクティブ、エ

ラーパッシブ、バスオフ)でイベントが発生し

ました。

CAN_EVENT_RECV(※3) 00000020h 受信バッファに 1 つ以上の受信メッセージが蓄

えられました。

CAN_EVENT_ERROR 00000010h エラーバッファに 1 つ以上のエラーが蓄えられ

ました。

CAN_EVENT_TXB_IS_EMPTY(※4) 00000008h 送信バッファが空になりました。

CAN_EVENT_ERROR_LIMIT 00000004h 送信、受信いずれかのエラーがリミット値を越

えました。

リ ミ ッ ト 値 は CAN_PORT_CONFIG 構 造 体 の

ulErrorLimit で指定します。

Page 53: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

53

CAN_EVENT_RXB_FULL 00000002h 受信バッファがいっぱいになりました。

CAN_EVENT_ERB_FULL 00000001h エラーバッファがいっぱいになりました。

※ 1 低速 CAN のポートのみ有効です。

※ 2 高機能版、バスマスタ版、CAN FD 版 CAN 製品のみ有効です。

※ 3 CAN FD 版 CAN 製品では、CAN/CAN FD いずれかの 1つ以上の受信メッセージが蓄えられた場合に発

生します。

※ 4 CAN FD 版 CAN 製品では、CAN/CAN FD いずれかの送信バッファ内の未送信データがなくなった場合

に発生します。

次の要因は PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420 で設定できます。

識別子 値 内容

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO12

80000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 12 の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO11

40000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 11 の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO10

20000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 10 の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO9

10000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 9の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO8

08000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 8の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO7

04000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 7の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO6

02000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 6の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO5

01000000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 5の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO4

00800000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 4の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO3

00400000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 3の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO2

00200000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 2の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_S

TOP_NO1

00100000h 送信周期よりもデータ送信時間が長いため、メ

ッセージ番号 1の周期送信が停止しました。

CAN_EVENT_TIMER_COUNTER(※1) 00080000h タイマカウンタ周期イベントが発生しました。

※1 CAN FD 版 CAN 製品ではタイマカウンタ周期イベントは発生しません。

【戻り値】

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

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

Page 54: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

54

【使用例】

●C言語

int fd;

fd = CanOpenPort(“ifcan1”);

CanSetEventMask(fd, CAN_EVENT_RECV);

デバイス名「ifcan1」の CAN インタフェースの割り込みイベントマスクを設定します。

Page 55: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

55

16. CanGetEventMask 【機能】

割り込みイベントのマスク設定を取得します。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanGetEventMask(

int fd, /* デバイスハンドル */

unsigned long *EventMask /* イベントマスク取得用変数へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

EventMask 設定された割り込みイベントのマスクデータを格納する変数へのポインタを指定してください。

デフォルトは 0になっています。

識別子 値 内容

CAN_EVENT_TRANSCEIVER_ERROR

00001000h 低速 CAN トランシーバでエラーが発生しまし

た。

CAN_EVENT_ERR_FIFO_OVER 00000200h エラーFIFO がオーバーフローし、エラー情報を

取りこぼしました。

エラーFIFO トリガ値を下げてください。

CAN_EVENT_DETECT_OVERRUN 00000100h オーバーランエラーが発生し、受信データを取

りこぼしました。

受信 FIFO はデータがいっぱいになると、CAN コ

ントローラからデータを抜き取らなくなるた

め、このオーバーランエラーが発生します。受

信 FIFO トリガ値を下げてください。

(このオーバーランエラーは、エラー情報バッ

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

CAN_EVENT_CYCLIC_SEND_STOP 00000080h 送信周期よりもデータ送信時間が長いため、周

期送信が停止しました。

CAN_EVENT_BUS_STATUS 00000040h バスステータスの変化(エラーアクティブ、エ

ラーパッシブ、バスオフ)でイベントが発生し

ました。

CAN_EVENT_RECV

(※1)

00000020h 受信バッファに 1 つ以上の受信メッセージが蓄

えられました。

CAN_EVENT_ERROR 00000010h エラーバッファに 1 つ以上のエラーが蓄えられ

ました。

CAN_EVENT_TXB_IS_EMPTY

(※2)

00000008h 送信バッファが空になりました。

CAN_EVENT_ERROR_LIMIT 00000004h 送信、受信いずれかのエラーがリミット値を越

えました。

Page 56: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

56

リ ミ ッ ト 値 は CAN_PORT_CONFIG 構 造 体 の

ulErrorLimit で指定します。

CAN_EVENT_RXB_FULL 00000002h 受信バッファがいっぱいになりました。

CAN_EVENT_ERB_FULL 00000001h エラーバッファがいっぱいになりました。

※1 CAN FD 版 CAN 製品では、CAN/CAN FD いずれかの 1 つ以上の受信メッセージが蓄えられた場

合に発生します。

※2 CAN FD 版 CAN 製品では、CAN/CAN FD いずれかの送信バッファ内の未送信データがなくなっ

た場合に発生します。

次の要因は PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420、PEX-H485940P で設定できま

す。

識別子 値 内容

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO12

80000000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 12 の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO11

40000000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 11 の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO10

20000000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 10 の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO9

10000000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 9の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO8

08000000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 8の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO7

04000000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 7の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO6

02000000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 6の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO5

01000000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 5の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO4

00800000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 4の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO3

00400000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 3の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO2

00200000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 2の周期送信が停止しました。

CAN_EVENT_MULTI_CYCLIC_SEND_

STOP_NO1

00100000h 送信周期よりもデータ送信時間が長いため、メッ

セージ番号 1の周期送信が停止しました。

CAN_EVENT_TIMER_COUNTER

(※1)

00080000h タイマカウンタ周期イベントが発生しました。

※1 CAN FD 版 CAN 製品ではタイマカウンタ周期イベントは発生しません。

【戻り値】

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

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

Page 57: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

57

【使用例】

●C言語

int fd;

unsigned long EventMask;

fd = CanOpenPort(“ifcan1”);

CanGetEventMask(fd, &EventMask);

デバイス名「ifcan1」の CAN インタフェースの割り込みイベントマスクを取得します。

Page 58: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

58

17. CanKillEvent 【機能】

割り込み発生時に起動するコールバック関数、シグナルの解除を行います。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanKillEvent(

int fd /* デバイスハンドル */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

【戻り値】

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

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

【使用例】

●C言語

int fd;

fd = CanOpenPort(“ifcan1”);

CanKillEvent(fd);

デバイス名「ifcan1」の CAN インタフェースのコールバック関数の解除を行います。

Page 59: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

59

18. CanSetTimerConfig 【機能】

タイマカウンタの周期を設定します。設定した周期毎にイベントを発生させることが出来ます。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanSetTimerConfig (

int fd, /* デバイスハンドル */

unsigned long dwTimerConfig );

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

dwTimerConfig タイマカウンタの周期を指定します。

周期は 10μs 単位で設定します。設定可能範囲は 1~FFFFFFh(10μs~167,772,160μs)です。

FFFFFFh より大きい値を設定しても、自動的に FFFFFFh に設定されます。

【戻り値】

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

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

【備考】

本関数は、PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420 で使用できます。

Page 60: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

60

【使用例】

●C言語

int fd, Ret;

unsigned long dwTimerCount;

unsigned long dwTimerConfig;

fd = CanOpenPort(“ifcan1”);

// タイマカウンタの周期を取得

Ret = CanGetTimerConfig(fd, &dwTimerConfig);

// タイマカウンタの周期を 10ms に設定

Ret = CanSetTimerConfig(fd, 10*100);

// タイマカウンタのスタート

Ret = CanControlTimer(fd, CAN_TIMER_START);

// タイマカウンタ値を取得

Ret = CanGetTimerCount(fd, &dwTimerCount);

デバイス名「ifcan1」の CAN インタフェースのタイマカウンタの周期を設定します。

Page 61: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

61

19. CanGetTimerCount 【機能】

タイマカウンタ値を取得します。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanGetTimerCount (

int fd, /* デバイスハンドル */

unsigned long * pdwTimerCount );

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pdwTimerCount タイマカウンタ値を格納する変数へのポインタを指定してください。

【戻り値】

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

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

【備考】

本関数は、PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420 で使用できます。

Page 62: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

62

【使用例】

●C言語

int fd, Ret;

unsigned long dwTimerConfig;

unsigned long dwTimerCount;

fd = CanOpenPort(“ifcan1”);

// タイマカウンタの周期を取得

Ret = CanGetTimerConfig(fd, &dwTimerConfig);

// タイマカウンタの周期を 10ms に設定

Ret = CanGetTimerConfig(fd, 10*100);

// タイマカウンタのスタート

Ret = CanControlTimer(fd, CAN_TIMER_START);

// タイマカウンタ値を取得

Ret = CanGetTimerCount(fd, &dwTimerCount);

デバイス名「ifcan1」の CAN インタフェースのタイマカウンタ値を取得します。

Page 63: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

63

20. CanControlTimer 【機能】

タイマカウンタを制御します。タイマカウンタのスタート、ストップ、クリアを行えます。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanControlTimer (

int fd, /* デバイスハンドル */

unsigned long dwTimerControl );

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

dwTimerControl タイマカウンタを制御します。

制御内容を以下の識別子で指定してください。

識別子 値 内容

CAN_TIMER_START 00000001h タイマカウンタのスタート

CAN_TIMER_STOP 00000002h タイマカウントのストップ

CAN_TIMER_CLEAR 00000004h タイマカウンタのクリア

【戻り値】

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

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

【備考】

本関数は、PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420 で使用できます。

Page 64: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

64

【使用例】

●C言語

int fd, Ret;

unsigned long dwTimerConfig;

unsigned long dwTimerCount;

fd = CanOpenPort(“ifcan1”);

// タイマカウンタの周期を取得

Ret = CanGetTimerConfig(fd, &dwTimerConfig);

// タイマカウンタの周期を 10ms に設定

Ret = CanSetTimerConfig(fd, 10*100);

// タイマカウンタのスタート

Ret = CanControlTimer(fd, CAN_TIMER_START);

// タイマカウンタ値を取得

Ret = CanGetTimerCount(fd, &dwTimerCount);

デバイス名「ifcan1」の CAN インタフェースのタイマカウンタをスタートします。

Page 65: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

65

21. CanOutputSync 【機能】

CAN メッセージ受信時に内部同期信号を出力するか設定します。

※弊社製タフコントローラ製品のみ本関数を使用できます。

【書式】

●C言語

int CanOutputSync (

int fd, /* デバイスハンドル */

unsigned long TrgLine, unsigned long TrgMode );

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

TrgLine 内部同期出力を行う信号を指定します。

指定可能な識別子は下記から選択します。

識別子 値 内容

CAN_SYNC_NUM_1 00000001h 内部同期ライン 1

TrgMode 内部同期トリガ出力条件を指定します。

出力条件は下記の識別子のうち、いずれか1つを指定してください。

識別子 値 内容

CAN_SYNC_DISABLE 00000000h 内部同期トリガを出力しない

CAN_SYNC_RECV 00000001h CAN メッセージ受信時に

内部同期トリガを出力する

【戻り値】

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

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

【備考】

本関数は、ITC-A81310(L)、ITC-A71310T(L)、ITC-A61310(L)で使用できます。

Page 66: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

66

【使用例】

●C言語

int fd, Ret;

unsigned long dwTimerConfig;

unsigned long dwTimerCount;

fd = CanOpenPort(“ifcan1”);

// 内部同期トリガを受信時に出力するよう設定

Ret = CanOutputSync(fd, CAN_SYNC_NUM_1,CAN_SYNC_RECV);

デバイス名「ifcan1」の CAN インタフェースがデータ受信時に内部同期トリガを出力するよう設定し

ます。

Page 67: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

67

4.2.2 CAN インターフェース用制御関数

1. CanSetConfig 【機能】

CAN インタフェースの各種設定を行います。

本関数で設定を行うためには、CAN バスへの接続を無効化(CanDeactivate 関数)しておく必要があ

ります。(接続中のまま実行すると、エラーが返されます)

設定変更後、再度 CAN バスへ接続するためには CanActivate 関数を実行して下さい。

設定値の中には、設定の難しい物もありますので、CanGetConfig 関数で初期値を取得し、その中か

ら変更したい箇所だけ変更して設定する方法をお勧めします。

※ 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では CAN バスへの接続状態に関係なく設定を行うことができます。一部設定できない

項目があります。項目については構造体 CAN_PORT_CONFIG を参照してください。

【書式】

●C言語

int CanSetConfig(

int fd, /* デバイスハンドル */

PCAN_PORT_CONFIG PortConfig /* 通信条件設定用 */

/* 構造体へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

PortConfig 通信条件設定構造体へのポインタを指定してください。

構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

【備考】

受信フィルタの設定は、CanSetAcceptanceFilter 関数で行って下さい。

【使用例】

●C言語

int fd;

CAN_PORT_CONFIG PortConfig

fd = CanOpenPort(“ifcan1”);

CanGetConfig(fd, &PortConfig);

PortConfig.ulBaudRate = CAN_BAUDRATE_1M;

CanSetConfig(fd, &PortConfig);

デバイス名「ifcan1」の CAN インタフェースを、通信速度 1Mbps に設定します。

Page 68: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

68

2. CanSetAcceptanceFilter 【機能】

CAN バス上を流れるメッセージを取り込む際のフィルタを設定します。

特定の ID、およびデータを持つ CAN メッセージだけ取り込みたい場合に使用します。

フィルタの設定は ID、およびデータに対してビットパターンで行い、ビット毎に「0、1 どちらでも

受信する」、「0の時だけ受信する」、「1の時だけ受信する」を設定することが出来ます。

フィルタ設定により取り込まれなかったフレームに対して ACK を返します。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

※ CAN FD 版 CAN 製品では ID にのみフィルタを設定できます。データに対するフィルタは行えませ

ん。

※ CAN FD 版 CAN 製品では CanSetAcceptanceFilterFD 関数を使用してください。

【書式】

●C言語

int CanSetAcceptanceFilter(

int fd, /* デバイスハンドル */

unsigned long AcceptanceCode, /* ビットパターン設定 */

unsigned long AcceptanceMask /* マスク設定 */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

AcceptanceCode 後述の AcceptanceMask で 1 を指定したビットが 0、1のどちらでフィルタを通過して受信バッフ

ァに取り込まれるか指定します。

CAN コントローラ SJA1000 のレジスタ ACR0~3 に該当します。

デフォルトでは 0に設定されています。

AcceptanceMask どのビットにアクセプタンスフィルタを適用するか指定してください。

該当するビットに 0 を設定するとフィルタが有効になり、AcceptanceCode で指定した値と受信

メッセージの該当ビットが一致していれば、受信バッファに取り込まれます。

1 を設定しているビットはフィルタの対象外となります。

フィルタを使用せず、全てのメッセージを受信したい場合は、AcceptanceMask の全ビットに 1

を設定してください。

CAN コントローラ SJA1000 のレジスタ AMR0~3 に該当します。

デフォルトでは FFFFFFFFh(全ビット 1)に設定されています。

【戻り値】

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

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

Page 69: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

69

【備考】

AcceptanceCode、AcceptanceMask は、CanSetConfig 関数で設定する CAN_PORT_CONFIG 構造体の

ulFilterMode 及び、使用するフレームフォーマット(標準/拡張フォーマット)により、内容が異な

ります。

ulFilterMode が CAN_SINGLE_FILTER の場合

1 種類のフィルタを設定することが可能です。

●標準フォーマット

11 ビット ID 全てに対しフィルタを設定することが可能です。

また、データバイトの先頭 2バイトに対してもフィルタを設定することが出来ます。

フィルタの適用範囲は以下の通りです。

←フレームの先頭

ID(11 ビット) RTR 1 バイト目データ 2バイト目データ 3バイト目

28 27 26 … 20 19 18 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

フィルタの適用範囲

ビット(※1) bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21 フィルタ対象

ID.28~ID.21

ビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

ID.20 ID.19 ID.18 RTR 0 0 0 0 フィルタ対象

ID.20~ID.18、RTR 予約(※2)

ビット bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 フィルタ対象

受信データ 1 バイト目

ビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 フィルタ対象

受信データ 2 バイト目

※1.AcceptanceCode、AcceptanceMask のビットです。

※2.0 を指定してください。

Page 70: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

70

●拡張フォーマット

29 ビット ID 全てに対しフィルタを設定することが可能です。

フィルタの適用範囲は以下の通りです。

←フレームの先頭

ID(29 ビット) RTR 1 バイト目データ 2バイト目~

28 27 26 … 2 1 0 0 7 6 5 4 3 2 1 0

フィルタの適用範囲

ビット bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21 フィルタ対象

ID.28~ID.21

ビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

ID.20 ID.19 ID.18 ID.17 ID.16 ID.15 ID.14 ID.13 フィルタ対象

ID.20~ID.13

ビット bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

ID.12 ID.11 ID.10 ID.9 ID.8 ID.7 ID.6 ID.5 フィルタ対象

ID.12~ID.5

ビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

ID.4 ID.3 ID.2 ID.1 ID.0 RTR 0 0 フィルタ対象

ID.4~ID.0、RTR 予約

Page 71: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

71

ulFilterMode が CAN_DUAL_FILTER の場合

2 種類のフィルタ(No.1 フィルタ、No.2 フィルタ)を設定することが可能です。

No.1 フィルタ、No.2 フィルタのいずれか片方のフィルタさえ通過すれば、データは受信されます

(No.1 フィルタを通過したデータに、さらに No.2 フィルタを通過させ、両方のフィルタを通過する

データのみを受信するのではありません)。

●標準フォーマット

11 ビット ID 全てに対し 2種類のフィルタを設定することが可能です。

そのうち No.1 フィルタについては、データバイトの先頭 1 バイトに対してもフィルタを設定する

ことが出来ます。

AcceptanceCode、AcceptanceMask の bit0~bit3、および bit16~bit31 の部分が No.1 フィルタに

なり、bit4~bit15 の部分が No.2 フィルタになります。

フィルタの適用範囲は以下の通りです。

←フレームの先頭

ID(11 ビット) RTR 1 バイト目データ 2バイト目~

28 27 26 25 24 23 22 21 20 19 18 0 7 6 5 4 3 2 1 0

No.2 フィルタの適用範囲

No.1 フィルタの適用範囲

ビット bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21 フィルタ対象

ID.28~ID.21

フィルタ No No.1 フィルタ

ビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

ID.20 ID.19 ID.18 RTR bit7 bit6 bit5 bit4 フィルタ対象

ID.20~ID.18、RTR 受信データ 1バイト目上位 4ビット

フィルタ No No.1 フィルタ

ビット bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21 フィルタ対象

ID.28~ID.21

フィルタ No No.2 フィルタ

ビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

ID.20 ID.19 ID.18 RTR bit3 bit2 bit1 bit0 フィルタ対象

ID.20~ID.18、RTR 受信データ 1バイト目下位 4ビット

フィルタ No No.2 フィルタ No.1 フィルタ

Page 72: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

72

●拡張フォーマット

29 ビット ID のうち、先頭の 16 ビットに対し 2種類のフィルタを設定することが可能です。

AcceptanceCode、AcceptanceMask の bit16~bit31 の部分が No.1 フィルタになり、bit0~bit15 の

部分が No.2 フィルタになります。

フィルタの適用範囲は以下の通りです。

←フレームの先頭

ID(29 ビット) RTR 1 バイト目データ 2バイト目~

28 27 26 … 15 14 13 12~0 0 7 6 5 4 3 2 1 0

No.2 フィルタの適用範囲

No.1 フィルタの適用範囲

ビット bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21 フィルタ対象

ID.28~ID.21

フィルタ No No.1 フィルタ

ビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

ID.20 ID.19 ID.18 ID.17 ID.16 ID.15 ID.14 ID.13 フィルタ対象

ID.20~ID.13

フィルタ No No.1 フィルタ

ビット bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21 フィルタ対象

ID.28~ID.21

フィルタ No No.2 フィルタ

ビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

ID.20 ID.19 ID.18 ID.17 ID.16 ID.15 ID.14 ID.13 フィルタ対象

ID.20~ID.13

フィルタ No No.2 フィルタ

Page 73: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

73

【使用例】

●C言語

int fd;

unsigned long AcceptanceCode, AcceptanceMask;

CAN_PORT_CONFIG PortConfig

fd = CanOpenPort(“ifcan1”);

CanGetConfig(fd, &PortConfig);

PortConfig.ulFilterMode = CAN_SINGLE_FILTER;

CanSetConfig(fd, &PortConfig);

AcceptanceMask = 0x001fffff;

AcceptanceCode = 0x42200000; /* ID が 01000010001(2 進数) */

CanSetAcceptanceFilter(fd, AcceptanceCode, AcceptanceMask);

デバイス名「ifcan1」の CAN インタフェースを、シングルフィルタモードに設定し、

標準フレームの ID が 2 進数で 01000010001 のメッセージフレームのみ受信するように設定します。

もし、拡張フレーム(29 ビット ID)が送られてきた場合は、ID の上位 11 ビットが 01000010001 に

なるメッセージフレームのみ受信されます。

Page 74: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

74

3. CanGetConfig 【機能】

CAN インタフェースの現在の各種設定値を取得します。

オープン直後はデフォルト値の取得、設定値の変更後は現在の設定値を取得します。

本関数の実行時、CAN バスへの接続を無効化(CanDeactivate 関数)する必要はありません。

CanOpenPort 関数でオープン後であれば、いつでも使用することができます。

※ 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では一部取得できない項目があります。項目については構造体 CAN_PORT_CONFIG を参

照してください。

【書式】

●C言語

int CanGetConfig(

int fd, /* デバイスハンドル */

PCAN_PORT_CONFIG PortConfig /* 通信条件設定用 */

/* 構造体へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

PortConfig 通信条件設定構造体へのポインタを指定してください。

取得された値が格納されます。

構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

【備考】

受信フィルタの設定取得は、CanGetAcceptanceFilter 関数で行って下さい。

【使用例】

●C言語

int fd;

CAN_PORT_CONFIG PortConfig

fd = CanOpenPort(“ifcan1”);

CanGetConfig(fd, &PortConfig);

デバイス名「ifcan1」の CAN インタフェースの通信条件設定を取得します。

Page 75: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

75

4. CanGetAcceptanceFilter 【機能】

受信フィルタの現在の設定を取得します。

CanSetAcceptanceFilter 関数の説明も併せてご覧下さい。

※ 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

※CAN FD 版 CAN 製品ではフィルタ 1の設定が取得できます。

【書式】

●C言語

int CanGetAcceptanceFilter(

int fd, /* デバイスハンドル */

unsigned long *AcceptanceCode, /* ビットパターン設定値取得 */

/* 用の変数へのポインタ */

unsigned long *AcceptanceMask /* マスク設定値取得 */

/* 用の変数へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

AcceptanceCode ビットパターン設定値取得用変数へのポインタを指定してください。

CAN コントローラ SJA1000 のレジスタ ACR0~3 に該当します。

AcceptanceMask マスクパターン設定値取得用変数へのポインタを指定してください。

CAN コントローラ SJA1000 のレジスタ AMR0~3 に該当します。

【戻り値】

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

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

【使用例】

●C言語

int fd;

unsigned long AcceptanceCode, AcceptanceMask;

fd = CanOpenPort(“ifcan1”);

CanGetAcceptanceFilter(fd, &AcceptanceCode, &AcceptanceMask);

デバイス名「ifcan1」の CAN インタフェースのフィルタ設定状態を取得します。

Page 76: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

76

5. CanSendMessage 【機能】

CAN メッセージの送信を行います。

本関数の実行後、送信バッファにメッセージが蓄えられ、順次送信されます。

送信の完了は、CanGetStatus 関数で取得する送信バッファの状態で確認できます。

また、CanSetEvent 関数でイベントを設定することで全ての送信が完了した時点でイベントを発生さ

せることができます。(コールバック関数、シグナル)

セットするメッセージの個数を指定することで、1回の関数呼び出しで複数のメッセージを送信バッ

ファに蓄えることができます。

CAN バスへの接続が有効である場合のみ実行できます。

※ 1 回の関数呼び出しで送信バッファに蓄えられるメッセージは、バスマスタ版 CAN 製品では 2700

個まで、CAN FD 版 CAN 製品では 800 個までです。

※ 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では 1 回の関数呼び出しで複数のメッセージを送信バッファへ蓄えることはできませ

ん。また、イベントの発生をさせることができません。

【書式】

●C言語

int CanSendMessage(

int fd, /* デバイスハンドル */

PCAN_MESSAGE CanMessage, /* 送信メッセージ格納用構造体へのポインタ */

unsigned long Count /* 送信件数 */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

CanMessage 送信するメッセージを格納した構造体のポインタを指定してください。

高機能版、バスマスタ版、CAN FD版CAN製品では、CAN_MESSAGE構造体のulTimeメンバ変数がディ

レイ時間を表します。単位は 10μsです。例えば、ulTimeに 100 を指定して、CanSendMessage関

数を呼ぶと、1ms(100×10μs)待ってから、データを送信します。設定可能範囲は 0~1FFFFFh

です。1FFFFFhより大きい値を設定しても、自動的に 1FFFFFhになります。スタンダード版では、

CAN_MESSAGE構造体のulTimeは使用しません。設定値は無効となります。

Count で指定された個数分の領域を用意してください。

CAN_MESSAGE構造体の説明については、『4.3 構造体説明』をご参照ください。

Count 送信バッファにセットするメッセージの個数を指定してください。

【戻り値】

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

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

【備考】

1 回の関数呼び出しで、送信バッファのサイズを超えるメッセージを蓄えることはできません。

Page 77: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

77

【使用例】

●C言語

CAN_MESSAGE CanMessage[10];

int fd, i;

unsigned long SendValue;

fd = CanOpenPort(“ifcan1”);

for(i = 0; i < 10; i++) {

CanMessage[i].ulLength = 4; /* 送信メッセージ長 */

CanMessage[i].ulID = 0x01 | CAN_EXT_FRAME; /* メッセージ ID */

CanMessage[i].ulFlag = 0; /* フラグ */

CanMessage[i].ulTime = 0; /* 送信ディレイ時間 */

*(unsigned long *)CanMessage[i].bData = SendValue; /* 送信メッセージ */

}

CanActivate(fd);

/* 送信メッセージのセット(送信開始) */

CanSendMessage(fd, CanMessage, 10);

デバイス名「ifcan1」の CAN インタフェースから 10 件のメッセージ送信を行います。

Page 78: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

78

6. CanCyclicSendMessage 【機能】

CAN メッセージの周期送信を行います。

この関数は非同期で実行されますので、関数実行後にすぐに処理が返ります。

設定した周期でデータ送信ができなかった場合と、CanStopCyclicSendMessage 関数を実行した場合

のみ、周期送信を停止します。周期送信実行中は、CanSendMessage 関数は使用できません。

また、周期送信メッセージは、送信完了メッセージを取得できません。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanCyclicSendMessage(

int fd, // デバイスハンドル

PCAN_MESSAGE CanMessage, // 送信メッセージ格納用構造体へのポインタ

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

CanMessage 送信するメッセージを格納した構造体のポインタを指定してください。

CanCyclicSendMessage 関数では、CAN_MESSAGE 構造体の ulTime に送信を行う周期を 10μs 単位

で設定します。設定可能範囲は 1~1FFFFFh(10μs~20,971,510μs)です。1FFFFFh より大きい

値を設定しても、自動的に 1FFFFFh に設定されます。

PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420、PEX-H485940P で使用する場合には、設

定可能範囲は 5~FFFFh(50μs~655,350μs)になります。FFFFh より大きい値を設定しても、

自動的に FFFFh に設定されます。5より小さい値を設定しても、自動的に 5に設定されます。

本関数では、送信するメッセージは 1つのみ設定できます。

CAN_MESSAGE構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

Page 79: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

79

【備考】

1. データの送信時間よりも、周期時間を短く設定した場合、指定された時間に送信ができず、周期実

行は停止します。例えば、データの送信に 80msかかるのに、周期時間を 50msに設定した場合、50ms

経過したときに、まだデータが送信中なので、周期実行が停止します。

周期実行の停止は、CanSetEvent関数、CanSetEventMask関数での設定を行っている場合、イベントに

より通知されます。

また、アービトレーションロストにより、指定した周期にデータを送信できない場合もあります。ア

ービトレーションロストが発生し、データを再送しているときに、次の周期時間が来ると、上記と同

じように、周期実行が停止します。

例)周期を 50ms に設定した場合

データ送信中

時間

データ送信中

50ms 50ms・・・

周期送信開始

例)周期を 50ms に設定したが、その周期よりもデータ送信時間が長い場合

データ送信中

時間

50ms

周期送信開始

前回のデータが、まだ送信完了して

いないため、次のデータが送れずに

周期送信は停止します。

周期送信実行中でも、周期送信を行いたいデータの更新、周期の更新を行えます。更新したデータは、

次の周期から反映されます。

例)周期送信を行うデータや周期を更新したい場合

データA送信中

時間

50ms・・・

周期送信開始

データ B送信中

80ms

データ、周期の更新はいつでも可能です。

ただし、反映されるのは次の周期からになります。

例えば、この時点で、周期送信を行うデータを B に、周期を 80ms に更

新したとすると、前回の設定周期の 50ms が経過してから、データ B が

80ms 周期で送信されるようになります。

優先順位の高いメッセージを短い周期で送信していると、アービトレーションにより、それより優先

順位の低いメッセージが送信されにくくなりますので、ご注意ください。

Page 80: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

80

2. 本関数は、スタンダード版 CAN 製品では使用することはできません。

【注意事項】

1. 本関数は、受信側ノードが存在する状態で実行して下さい。

もし受信側ノードが存在しない状態で本関数を実行し、CanStopCyclicSendMessage 関数と再度

本関数を実行すると、IFCAN_ERROR_NOW_SENDING が連続して返されることがあります。この場合、

一旦 CanDeactivate 関数を実行して、バスオフ状態にして下さい。

2. CAN コントローラへのアクセスが競合すると、指定された時間に送信できず、周期送信が停止す

る場合があります。

その場合、CanGetStatus 関数によるステータスの読み出しや、データ受信と競合した場合等に

現象が発生しますので、周期送信を行うポートに対して下記のような対策をご検討下さい。

・メッセージを受信しないよう、受信フィルタを設定する。

・ステータスのポーリングを行わない。

【使用例】

●C言語

int Ret;

CAN_MESSAGE CanMessage;

int fd;

unsigned long SendValue;

fd = CanOpenPort(“ifcan1”);

// 送信メッセージ長のセット

CanMessage.ulLength = 4;

// 送信メッセージの ID をセット

CanMessage.ulID = 0x01 | CAN_EXT_FRAME;

// フラグの設定

CanMessage.ulFlag = 0;

// 300ms 周期

CanMessage.ulTime = 300*100;

// 送信メッセージの内容をコピー

*(unsigned long*)CanMessage.bData = SendValue;

Ret = CanActivate(fd);

// 300ms 周期で送信

Ret = CanCyclicSendMessage(fd, CanMessage);

デバイス名「ifcan1」の CAN インタフェースから 300ms 周期で、データを送信します。

Page 81: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

81

7. CanReceiveMessage 【機能】

受信された CAN メッセージを取り出します。CAN バス上を流れる CAN メッセージは、自動的にデバイ

スドライバ内部の受信バッファに蓄えられます。

本関数では、この蓄えられた CAN メッセージを取り出します。

受信メッセージがあるかどうかは、CanGetStatus 関数で受信バッファの状態を見ることで確認でき

ます。蓄えられたCANメッセージが無い場合、戻り値でIFCAN_ERROR_BUFFER_IS_EMPTYが返されます。

また、CanSetEvent 関数でイベントを設定することでメッセージを受信した時点でイベントを発生さ

せることができます。(コールバック関数、シグナル)

※ 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では 1 回の関数呼び出しで複数のメッセージを取り出すことはできません。メッセー

ジを受信していない状態で本関数を実行した場合、メッセージを受信するまで本関数の処理は戻

ってきません。また、イベントの発生をさせることができません。

【書式】

●C言語

int CanReceiveMessage(

int fd, /* デバイスハンドル */

PCAN_MESSAGE CanMessage, /* 受信メッセージ格納用構造体へのポインタ */

unsigned long *Count /* 受信希望件数及び取り出し件数格納用変数 */

/* へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

CanMessage 受信メッセージを格納する構造体へのポインタを指定してください。

pCount で指定された個数分の領域を用意してください。

CAN_MESSAGE構造体の説明については、『4.3 構造体説明』をご参照ください。

Count

受信バッファから取り出すメッセージの件数を指定してください。

受信バッファに蓄えられているメッセージが指定された件数よりも少ない場合、実際に

受信バッファから取り出された件数が、この変数に返されます。

例)PortStatus.ulRXBCount が 8 の時に、Count に 10 をセットし、CanReceiveMessage

関数を実行すると、Count に 8 が返され、正常終了します。

【戻り値】

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

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

Page 82: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

82

【使用例】

●C言語

int ret, i, j;

CAN_MESSAGE CanMessage[10];

unsigned long Count;

int fd;

fd = CanOpenPort(“ifcan1”);

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

Count = 10;

ret = CanReceiveMessage(fd, CanMessage, &Count);

if(ret == IFCAN_ERROR_SUCCESS) {

for(i = 0; i < Count; i++) {

printf(“受信メッセージ長 : %ld\n”, CanMessage[i].ulLength);

printf(“ID : %lx\n”, CanMessage[i].ulID);

printf(“受信データ : “);

for(j = 0; j < CanMessage[i].ulLength; j++) {

printf(“%02X “,CanMessage[i].bData[j]);

}

printf(“\n”);

}

}

デバイス名「ifcan1」の CAN インタフェースから 10 件の受信メッセージを取り出します。

取り出されたメッセージを画面に表示します。

10 件に満たない場合は、取り出された件数分だけ表示します。

Page 83: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

83

8. CanMultiCyclicSendMessage 【機能】

CAN メッセージの周期送信を行います。 大 12 種類のメッセージを周期送信できます。

この関数は非同期で実行されますので、関数実行後すぐに処理が返ります。

設定した周期でデータ送信ができなかった場合と、CanStopMultiCyclicSendMessage 関数を実行した

場合のみ、周期送信を停止します。周期送信実行中は、CanSendMessage 関数は使用できません。

また、周期送信メッセージは、送信完了メッセージを取得できません。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

INT CanMultiCyclicSendMessage(

int fd, /* デバイスハンドル */

unsigned long dwRoute, PCAN_MESSAGE * pCanMessage /* 送信メッセージ格納用構造体へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

dwRoute 周期送信するメッセージの番号を 1~12 の範囲で指定します。

pCanMessage 送信するメッセージを格納した構造体のポインタを指定してください。

送信周期は CanSetTransmissionCycle 関数にて設定します。

CAN_MESSAGE構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

【備考】

1.本関数を実行する前に必ず CanSetTransmissionCycle 関数で周期を設定してください。

Page 84: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

84

2. データの送信時間よりも、周期時間を短く設定した場合、指定された時間に送信ができず、周期実

行は停止します。例えば、データの送信に 80msかかるのに、周期時間を 50msに設定した場合、50ms

経過したときに、まだデータが送信中なので、周期実行が停止します。

周期実行の停止は、CanSetEvent関数、CanSetEventMask関数での設定を行っている場合、イベントに

より通知されます。

また、アービトレーションロストにより、指定した周期にデータを送信できない場合もあります。ア

ービトレーションロストが発生し、データを再送しているときに、次の周期時間が来ると、上記と同

じように、周期実行が停止します。

例)周期を 50ms に設定した場合

データ送信中

時間

データ送信中

50ms 50ms・・・

周期送信開始

例)周期を 50ms に設定したが、その周期よりもデータ送信時間が長い場合

データ送信中

時間

50ms

周期送信開始

前回のデータが、まだ送信完了して

いないため、次のデータが送れずに

周期送信は停止します。

周期送信実行中でも、周期送信を行いたいデータの更新、周期の更新を行えます。更新したデータは、

次の周期から反映されます。

例)周期送信を行うデータや周期を更新したい場合

データA送信中

時間

50ms・・・

周期送信開始

データ B送信中

80ms

データ、周期の更新はいつでも可能です。ただし、反映されるのは次の周期からになります。例えば、この時点で、周期送信を行うデータを B に、周期を 80ms に更新したとすると、前回の設定周期の 50ms が経過してから、データ B が80ms 周期で送信されるようになります。

優先順位の高いメッセージを短い周期で送信していると、アービトレーションにより、それより優先

順位の低いメッセージが送信されにくくなりますので、ご注意ください。

3. 本関数は、PCI-485420P、CPZ-485420P、PEX-485420、CSI-485420、PEX-H485940P で使用できます。

Page 85: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

85

【使用例】

●C言語

int fd, Ret;

CAN_MESSAGE CanMessage;

fd = CanOpenPort(“ifcan1”);

// 送信周期を 100ms に設定

nRet = CanSetTransmissionCycle(fd, CAN_ROUTE_4_6, 100*1000);

// 送信メッセージのセット

CanMessage.ulLength = 4;

CanMessage.ulID = 0x01;

CanMessage.ulFlag = 0;

CanMessage.ulTime = 0;

CanMessage.bData[0] = 0x11;

CanMessage.bData[1] = 0x22;

CanMessage.bData[2] = 0x33;

CanMessage.bData[3] = 0x44;

Ret = CanActivate(fd);

// メッセージ番号 4の周期送信開始

Ret = CanMultiCyclicSendMessage(fd, 4, &CanMessage);

デバイス名「ifcan1」の CAN インタフェースから 100ms 周期で、データを送信します。

Page 86: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

86

9. CanGetStatus 【機能】

CAN バスの現在の状態を取得します。

得られる情報は バスの状態、エラーカウンタ、送受信バッファの空き状況等です。

詳細は『4.3 構造体説明』を参照下さい。

本関数の実行時、CAN バスへの接続を無効化(CanDeactivate 関数)する必要はありません。

CanOpenPort 関数でオープン後であれば、いつでも使用することができます。

※ 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では一部取得できない項目があります。項目については構造体 CAN_PORT_STATUS を参

照してください。

【書式】

●C言語

int CanGetStatus(

int fd, /* デバイスハンドル */

PCAN_PORT_STATUS PortStatus /* ステータス取得用構造体へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

PortStatus ステータス取得用構造体へのポインタを指定してください。

構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

【使用例】

●C言語

CAN_PORT_STATUS PortStatus;

int fd;

fd = CanOpenPort(“ifcan1”);

CanGetStatus(fd, &PortStatus);

デバイス名「ifcan1」の CAN インタフェースのステータスを取得します。

Page 87: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

87

10. CanGetCompletionMessage 【機能】

送信完了メッセージを取り出します。

送信を完了したメッセージは、送信が完了した時間を CAN_MESSAGE 構造体の ulTime メンバに格納し

て、そのまま送信バッファに格納されています。

本関数では、その蓄えられた送信完了メッセージを取り出します。

送信バッファ内では、送信完了メッセージ数はカウントされませんので、ご注意ください。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では本関数を使用できません。

【書式】

●C言語

int CanGetCompletionMessage(

int fd, // デバイスハンドル

PCAN_MESSAGE CanMessage, // 送信完了メッセージ格納用構造体へのポインタ

unsigned long *Count // 取り出し希望件数及び取り出し件数格納用変数

// へのポインタ

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

CanMessage 送信完了メッセージを格納する構造体へのポインタを指定してください。

Count で指定された個数分の領域を用意してください。

CAN_MESSAGE構造体の説明については、『4.3 構造体説明』をご参照ください。

Count 取り出す送信完了メッセージの件数を指定してください。

送信完了メッセージが指定された件数よりも少ない場合、実際に取り出された送信メッセージ数

が、この変数に返されます。

例)送信完了メッセージ数が 3の時に、Count に 5 をセットし、

CanGetCompletionMessage 関数を実行すると、Count に 3 が返されます。

【戻り値】

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

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

【注意】

高機能版CAN製品で、CAN_PORT_CONFIG構造体のulLineModeを、CAN_FIFO_SEND_MODEでFIFO送信モード

に設定している場合、および、CanCyclicSendMessage関数による周期送信は、送信完了メッセージが

格納されません。

Page 88: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

88

【使用例】

●C言語

int Ret;

CAN_MESSAGE CanMessage[10];

unsigned long Count;

int fd;

fd = CanOpenPort(“ifcan1”);

// 送信完了メッセージの取り出し

Count = 10;

Ret = CanGetCompletionMessage(fd, CanMessage, &Count);

デバイス名「ifcan1」の CAN インタフェースから 10 件の送信完了メッセージを取り出します。

Page 89: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

89

4.2.3 CAN FD インターフェース用制御関数

1. CanSetConfigFD 【機能】

CAN FD インタフェースの各種設定を行います。

本関数で設定を行うためには、CAN バスへの接続を無効化(CanDeactivate 関数)しておく必要があ

ります。(接続中のまま実行すると、エラーが返されます)

設定変更後、再度 CAN バスへ接続するためには CanActivate 関数を実行して下さい。

設定値の中には、設定の難しい物もありますので、CanGetConfigFD 関数で初期値を取得し、その中

から変更したい箇所だけ変更して設定する方法をお勧めします。

※CAN FD 版 CAN 製品でのみ使用できます。

【書式】

●C言語

int CanSetConfigFD(

int fd, /* デバイスハンドル */

PCAN_PORT_CONFIG_FD pPortConfig /* 通信条件設定用 */

/* 構造体へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pPortConfig 通信条件設定構造体へのポインタを指定してください。

構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

【備考】

1. 受信フィルタの設定は、CanSetAcceptanceFilterFD 関数で行って下さい。

2. 送信中のデータがある状態で、送信バッファサイズの変更は行えません。

Page 90: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

90

【使用例】

●C言語

int nRet;

int fd;

CAN_PORT_CONFIG_FD PortConfig

fd = CanOpenPort(“ifcan1”);

nRet = CanGetConfigFD(fd, &PortConfig);

PortConfig.ulBaudRateNominal = CAN_BAUDRATE_1M;

PortConfig.ulBaudRateData = CAN_BAUDRATE_FD_5M;

nRet = CanSetConfigFD(fd, &PortConfig);

デバイス名「ifcan1」の CAN インタフェースを、CAN FD データフェーズの通信速度 5Mbps, それ以

外の通信速度 1Mbps に設定します。

Page 91: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

91

2. CanSetAcceptanceFilterFD 【機能】

CAN FD バス上を流れるメッセージを取り込む際のフィルタを設定します。

本関数で設定を行うためには、CAN バスへの接続を無効化(CanDeactivate 関数)しておく必要があ

ります。(接続中のまま実行すると、エラーが返されます)

特定の ID を持つ CAN メッセージだけ取り込みたい場合に使用します。

フィルタの設定は ID に対してビットパターンで行い、ビット毎に「0、1 どちらでも受信する」、「0

の時だけ受信する」、「1の時だけ受信する」を設定することが出来ます。

フィルタ設定により取り込まれなかったフレームに対して ACK を返します。

※CAN FD 版 CAN 製品でのみ使用できます。

【書式】

●C言語

int CanSetAcceptanceFilterFD(

int fd, /* デバイスハンドル */

unsigned char FilterNo, /* フィルタ番号 */

unsigned long AcceptanceCode, /* ビットパターン設定 */

unsigned long AcceptanceMask /* マスク設定 */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

FilterNo フィルタの番号を指定します。

CanSetConfigFD 関数で設定する CAN_PORT_CONFIG_FD 構造体の ulFilterMode の値により設定で

きる値が異なります。

CAN_SINGLE_FILTER の場合: 0(フィルタ 1)を指定してください。

CAN_DUAL_FILTER の場合: 0(フィルタ 1)または 1(フィルタ 2)が指定できます。

AcceptanceCode 後述の AcceptanceMask で 0 を指定したビットが 0、1のどちらでフィルタを通過して受信バッフ

ァに取り込まれるか指定します。

デフォルトでは 0に設定されています。

AcceptanceMask どのビットにアクセプタンスフィルタを適用するか指定してください。

該当するビットに 0 を設定するとフィルタが有効になり、AcceptanceCode で指定した値と受信

メッセージの該当ビットが一致していれば、受信バッファに取り込まれます。

1 を設定しているビットはフィルタの対象外となります。

フィルタを使用せず、全てのメッセージを受信したい場合は、AcceptanceMask の全ビットに 1

を設定してください。

デフォルトでは FFFFFFFFh(全ビット 1)に設定されています。

【戻り値】

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

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

Page 92: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

92

【備考】

AcceptanceCode、AcceptanceMask は使用するフレームフォーマット(標準/拡張フォーマット)によ

り、内容が異なります。

●標準フォーマット

11 ビット ID 全てに対しフィルタを設定することが可能です。

←フレームの先頭

ID(11 ビット) RTR 1 バイト目データ 2バイト目データ 3バイト目

10 9 8 … 2 1 0 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

フィルタの適用範囲

ビット(※1) bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

0 0 0 0 0 0 0 0 フィルタ対象

予約(※2)

ビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

0 0 0 0 0 0 0 0 フィルタ対象

予約(※2)

ビット bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

0 0 ID.10 ID.9 ID.8 ID.7 ID.6 ID.5 フィルタ対象

予約(※2) ID.10~ID.5

ビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

ID.4 ID.3 ID.2 ID.1 ID.0 0 0 0 フィルタ対象

ID.4~ID.0 予約(※2)

※1. AcceptanceCode、AcceptanceMask のビットです。

※2. 0 を指定してください。

Page 93: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

93

●拡張フォーマット

29 ビット ID 全てに対しフィルタを設定することが可能です。

フィルタの適用範囲は以下の通りです。

←フレームの先頭

ID(29 ビット) RTR 1 バイト目データ 2バイト目~

28 27 26 … 2 1 0 0 7 6 5 4 3 2 1 0

フィルタの適用範囲

ビット bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

ID.28 ID.27 ID.26 ID.25 ID.24 ID.23 ID.22 ID.21 フィルタ対象

ID.28~ID.21

ビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

ID.20 ID.19 ID.18 ID.17 ID.16 ID.15 ID.14 ID.13 フィルタ対象

ID.20~ID.13

ビット bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

ID.12 ID.11 ID.10 ID.9 ID.8 ID.7 ID.6 ID.5 フィルタ対象

ID.12~ID.5

ビット bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

ID.4 ID.3 ID.2 ID.1 ID.0 0 0 0 フィルタ対象

ID.4~ID.0 予約

Page 94: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

94

【使用例】

●C言語

int nRet;

int fd;

unsigned long AcceptanceCode,AcceptanceMask;

CAN_PORT_CONFIG_FD PortConfig

fd = CanOpenPort(“ifcan1”);

nRet = CanGetConfigFD(fd, 0, &PortConfig);

PortConfig.ulFilterMode = CAN_SINGLE_FILTER;

nRet = CanSetConfigFD(fd, 0, &PortConfig);

AcceptanceMask = 0x00000000;

AcceptanceCode = 0x00004232; // ID が 01000010001(2 進数)

nRet = CanSetAcceptanceFilterFD(fd, 0, AcceptanceCode, AcceptanceMask);

デバイス名「ifcan1」の CAN インタフェースを、シングルフィルタモードに設定し、

標準フレームの ID が 2 進数で 01000010001 のメッセージフレームのみ受信するように設定します。

もし、拡張フレーム(29 ビット ID)が送られてきた場合は、ID の下位 11 ビットが 01000010001 に

なるメッセージフレームのみ受信されます。

Page 95: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

95

3. CanGetConfigFD 【機能】

CAN FD インタフェースの現在の各種設定値を取得します。

オープン直後はデフォルト値の取得、設定値の変更後は現在の設定値を取得します。

本関数の実行時、CAN バスへの接続を無効化(CanDeactivate 関数)する必要はありません。

CanOpenPort 関数でオープン後であれば、いつでも使用することができます。

※ CAN FD 版 CAN 製品でのみ使用できます。

【書式】

●C言語

int CanGetConfigFD(

int fd, /* デバイスハンドル */

PCAN_PORT_CONFIG_FD pPortConfig /* 通信条件設定用 */

/* 構造体へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pPortConfig 通信条件設定構造体へのポインタを指定してください。

取得された値が格納されます。

構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

【備考】

受信フィルタの設定取得は、CanGetAcceptanceFilterFD 関数で行って下さい。

【使用例】

●C言語

int nRet;

int fd;

CAN_PORT_CONFIG_FD PortConfig

fd = CanOpenPort(“ifcan1”);

nRet = CanGetConfigFD(fd, &PortConfig);

デバイス名「ifcan1」の CAN インタフェースの通信条件設定を取得します。

Page 96: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

96

4. CanGetAcceptanceFilterFD 【機能】

受信フィルタの現在の設定を取得します。

CanSetAcceptanceFilterFD 関数の説明も併せてご覧下さい。

※CAN FD 版 CAN 製品でのみ使用できます。

【書式】

●C言語

int CanGetAcceptanceFilterFD(

int fd, /* デバイスハンドル */

unsigned char FilterNo, /* フィルタ番号 */

unsigned long* pAcceptanceCode, /* ビットパターン設定値取得 */

/* 用の変数へのポインタ */

unsigned long* pAcceptanceMask /* マスク設定値取得 */

/* 用の変数へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

FilterNo フィルタの番号を指定します。

CanSetConfigFD 関数で設定する CAN_PORT_CONFIG_FD 構造体の ulFilterMode の値により指定で

きる値が異なります。

CAN_SINGLE_FILTER の場合: 0(フィルタ 1)を指定してください。

CAN_DUAL_FILTER の場合: 0(フィルタ 1)または 1(フィルタ 2)が指定できます。

pAcceptanceCode ビットパターン設定値取得用変数へのポインタを指定してください。

pAcceptanceMask マスクパターン設定値取得用変数へのポインタを指定してください。

Page 97: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

97

【戻り値】

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

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

【使用例】

●C言語

int nRet;

int fd;

unsigned long AcceptanceCode,AcceptanceMask;

fd = CanOpenPort(“ifcan1”);

nRet = CanGetAcceptanceFilterFD(fd, 0, &AcceptanceCode, &AcceptanceMask);

デバイス名「ifcan1」の CAN インタフェースのフィルタ 1の設定状態を取得します。

Page 98: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

98

5. CanSendMessageFD 【機能】

CAN FD メッセージの送信を行います。

本関数の実行後、送信バッファにメッセージが蓄えられ、順次送信されます。

送信の完了は、CanGetStatusFD 関数で取得する送信バッファの状態で確認できます。

また、CanSetEvent 関数でイベントを設定することで全ての送信が完了した時点でイベントを発生さ

せることができます。(コールバック関数、シグナル)

セットするメッセージの個数を指定することで、1回の関数呼び出しで複数のメッセージを送信バッ

ファに蓄えることができます。

CAN バスへの接続が有効である場合のみ実行できます。

※ 1 回の関数呼び出しで送信バッファに蓄えられるメッセージは 800 個までです。

※CAN FD 版 CAN 製品でのみ使用できます。

【書式】

●C言語

int CanSendMessageFD(

int fd, /* デバイスハンドル */

PCAN_MESSAGE_FD pCanMessage, /* 送信メッセージ格納用構造体へのポインタ */

unsigned long Count /* 送信件数 */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pCanMessage 送信するメッセージを格納した構造体のポインタを指定してください。

CAN_MESSAGE_FD 構造体の ulTime メンバ変数がディレイ時間を表します。単位は 10μs です。例

えば、ulTime に 100 を指定して、CanSendMessageFD 関数を呼ぶと、1ms(100×10μs)待ってか

ら、データを送信します。設定可能範囲は 0~1FFFFFh です。1FFFFFh より大きい値を設定して

も、自動的に 1FFFFFh になります。。

ulCount で指定された個数分の領域を用意してください。

CAN_MESSAGE_FD構造体の説明については、『4.3 構造体説明』をご参照ください。

Count 送信バッファにセットするメッセージの個数を指定してください。

【戻り値】

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

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

【備考】

1 回の関数呼び出しで、送信バッファのサイズを超えるメッセージを蓄えることはできません。

Page 99: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

99

【使用例】

●C言語

int nRet;

CAN_MESSAGE_FD CanMessage[10];

int fd;

unsigned long SendValue;

fd = CanOpenPort(“ifcan1”);

for (i=0;i<10;i++) {

// 送信メッセージ長のセット

CanMessage[i].ulLength = 4;

// 送信メッセージの ID をセット

CanMessage[i].ulID = 0x01 | CAN_EXT_FRAME;

// フラグの設定

CanMessage[i].ulFlag = 3;

// ディレイ時間なし

CanMessage[i].ulTime = 0;

// 送信メッセージの内容をコピー

*(unsigned long*)CanMessage[i].bData = SendValue;

}

nRet = CanActivate(fd);

// 送信メッセージのセット(送信開始)

nRet = CanSendMessageFD(fd, CanMessage, 10);

デバイス名「ifcan1」の CAN インタフェースから 10 件のメッセージ送信を行います。

Page 100: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

100

6. CanCyclicSendMessageFD 【機能】

CAN FD メッセージの周期送信を行います。

この関数は非同期で実行されますので、関数実行後にすぐに処理が返ります。

設定した周期でデータ送信ができなかった場合と、CanStopCyclicSendMessage 関数を実行した場合

のみ、周期送信を停止します。周期送信実行中は、CanSendMessage、CanSendMessageFD、

CanMultiCyclicSendMessage、CanMultiCyclicSendMessageFD 関数は使用できません。

また、周期送信メッセージは、送信完了メッセージを取得できません。

※CAN FD 版 CAN 製品でのみ使用できます。

【書式】

●C言語

int CanCyclicSendMessageFD(

int fd, // デバイスハンドル

PCAN_MESSAGE_FD pCanMessage // 送信メッセージ格納用構造体へのポインタ

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pCanMessage 送信するメッセージを格納した構造体のポインタを指定してください。

CanCyclicSendMessageFD 関数では、CAN_MESSAGE_FD 構造体の ulTime に送信を行う周期を 10μs

単位で設定します。設定可能範囲は 5~FFFFh(50μs~655,350μs)になります。FFFFh より大

きい値を設定しても、自動的に FFFFh に設定されます。5より小さい値を設定しても、自動的に

5に設定されます。

本関数では、送信するメッセージは 1つのみ設定できます。

CAN_MESSAGE_FD構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

Page 101: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

101

【備考】

1. データの送信時間よりも、周期時間を短く設定した場合、指定された時間に送信ができず、周期実

行は停止します。例えば、データの送信に 80msかかるのに、周期時間を 50msに設定した場合、50ms

経過したときに、まだデータが送信中なので、周期実行が停止します。

周期実行の停止は、CanSetEvent関数、CanSetEventMask関数での設定を行っている場合、イベントに

より通知されます。

また、アービトレーションロストにより、指定した周期にデータを送信できない場合もあります。ア

ービトレーションロストが発生し、データを再送しているときに、次の周期時間が来ると、上記と同

じように、周期実行が停止します。

例)周期を 50ms に設定した場合

データ送信中

時間

データ送信中

50ms 50ms・・・

周期送信開始

例)周期を 50ms に設定したが、その周期よりもデータ送信時間が長い場合

データ送信中

時間

50ms

周期送信開始

前回のデータが、まだ送信完了して

いないため、次のデータが送れずに

周期送信は停止します。

周期送信実行中でも、周期送信を行いたいデータの更新、周期の更新を行えます。更新したデータは、

次の周期から反映されます。

Page 102: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

102

例)周期送信を行うデータや周期を更新したい場合

データA送信中

時間

50ms・・・

周期送信開始

データ B送信中

80ms

データ、周期の更新はいつでも可能です。

ただし、反映されるのは次の周期からになります。

例えば、この時点で、周期送信を行うデータを B に、周期を 80ms に更

新したとすると、前回の設定周期の 50ms が経過してから、データ B が

80ms 周期で送信されるようになります。

優先順位の高いメッセージを短い周期で送信していると、アービトレーションにより、それより優先

順位の低いメッセージが送信されにくくなりますので、ご注意ください。

2. 本関数は、スタンダード版 CAN 製品では使用することはできません。

【注意事項】

1. 本関数は、受信側ノードが存在する状態で実行して下さい。

もし受信側ノードが存在しない状態で本関数を実行し、CanStopCyclicSendMessage 関数と再度

本関数を実行すると、IFCAN_ERROR_NOW_SENDING が連続して返されることがあります。この場合、

一旦 CanDeactivate 関数を実行して、バスオフ状態にして下さい。

2. CAN コントローラへのアクセスが競合すると、指定された時間に送信できず、周期送信が停止す

る場合があります。

その場合、CanGetStatus 関数によるステータスの読み出しや、データ受信と競合した場合等に

現象が発生しますので、周期送信を行うポートに対して下記のような対策をご検討下さい。

・メッセージを受信しないよう、受信フィルタを設定する。

・ステータスのポーリングを行わない。

Page 103: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

103

【使用例】

●C言語

int nRet;

CAN_MESSAGE_FD CanMessage;

int fd;

unsigned long SendValue;

fd = CanOpenPort(“ifcan1”);

// 送信メッセージ長のセット

CanMessage.ulLength = 4;

// 送信メッセージの ID をセット

CanMessage.ulID = 0x01 | CAN_EXT_FRAME;

// フラグの設定

CanMessage.ulFlag = 3;

// 300ms 周期

CanMessage.ulTime = 300*100;

// 送信メッセージの内容をコピー

*(unsigned long*)CanMessage[i].bData = SendValue;

nRet = CanActivate(fd);

// 300ms 周期で送信

nRet = CanCyclicSendMessageFD(fd, CanMessage);

デバイス名「IFCAN1」の CAN インタフェースから 300ms 周期で、データを送信します。

Page 104: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

104

7. CanReceiveMessageFD 【機能】

受信された CAN FD メッセージを取り出します。

CAN バス上を流れる CAN FD メッセージは、自動的にデバイスドライバ内部の受信バッファに蓄えら

れます。

本関数では、この蓄えられた CAN FD メッセージを取り出します。

受信メッセージがあるかどうかは、CanGetStatusFD 関数で受信バッファの状態を見ることで確認で

きます。蓄えられた CAN FD メッセージが無い場合、戻り値で、IFCAN_ERROR_BUFFER_IS_EMPTY が返

されます。

また、CanSetEvent 関数でイベントを設定することでメッセージを受信した時点でイベントを発生さ

せることができます。(コールバック関数、シグナル)

※CAN FD 版 CAN 製品でのみ使用できます。

【書式】

●C言語

int CanReceiveMessageFD(

int fd, /* デバイスハンドル */

PCAN_MESSAGE_FD pCanMessage, /* 受信メッセージ格納用構造体へのポインタ */

unsigned long* pCount /* 受信希望件数及び取り出し件数格納用変数 */

/* へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pCanMessage 受信メッセージを格納する構造体へのポインタを指定してください。

pCount で指定された個数分の領域を用意してください。

CAN_MESSAGE_FD構造体の説明については、『4.3 構造体説明』をご参照ください。

pCount

受信バッファから取り出すメッセージの件数を指定してください。

(1~CanSetConfigFD 関数で設定した受信バッファのサイズ(デフォルト:64))

受信バッファに蓄えられているメッセージが指定された件数よりも少ない場合、実際に

受信バッファから取り出された件数が、この変数に返されます。

例)PortStatus.ulRXBCountFD が 8 の時に、pCount に 10 をセットし、CanReceiveMessageFD

関数を実行すると、pCount に 8 が返され、正常終了します。

Page 105: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

105

【戻り値】

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

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

【使用例】

●C言語

int nRet;

CAN_MESSAGE_FD CanMessage[10];

unsigned long Count;

int fd;

fd = CanOpenPort(“ifcan1”);

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

Count = 10;

nRet = CanReceiveMessageFD(fd, CanMessage, &Count);

if (nRet != IFCAN_ERROR_SUCCESS) {

if (nRet == IFCAN_ERROR_BUFFER_IS_EMPTY) {

printf(“受信メッセージがありません\n”);

}

} else {

for (i=0; i<Count; i++) {

printf(“受信メッセージ長 : %ld\n”,CanMessage[i].ulLength);

printf(“ID : %lx\n”,CanMessage[i].ulID);

printf(“受信データ : “);

for (j=0;i<CanMessage[i].ulLength;j++) {

printf(“%02x “,CanMessage[i].bData[j]);

}

printf(“\n”);

}

}

デバイス名「ifcan1」の CAN インタフェースから 10 件の受信メッセージを取り出します。

取り出されたメッセージを画面に表示します。

10 件に満たない場合は、取り出された件数分だけ表示します。

Page 106: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

106

8. CanMultiCyclicSendMessageFD 【機能】

CAN FD メッセージの周期送信を行います。 大 12 種類のメッセージを周期送信できます。

この関数は非同期で実行されますので、関数実行後すぐに処理が返ります。

設定した周期でデータ送信ができなかった場合と、CanStopMultiCyclicSendMessage 関数を実行した

場合のみ、周期送信を停止します。周期送信実行中は、CanSendMessage、CanSendMessageFD、

CanCyclicSendMessage、CanCyclicSendMessageFD 関数は使用できません。

また、周期送信メッセージは、送信完了メッセージを取得できません。

※CAN FD 版 CAN 製品でのみ使用できます。

【書式】

●C言語

int CanMultiCyclicSendMessageFD(

int fd, /* デバイスハンドル */

unsigned long Route, PCAN_MESSAGE_FD pCanMessage /* 送信メッセージ格納用構造体へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

Route 周期送信するメッセージの番号を 1~12 の範囲で指定します。

pCanMessage 送信するメッセージを格納した構造体のポインタを指定してください。

送信周期は CanSetTransmissionCycle 関数にて設定します。

CAN_MESSAGE_FD構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

Page 107: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

107

【備考】

1.本関数を実行する前に必ず CanSetTransmissionCycle 関数で周期を設定してください。

2. データの送信時間よりも、周期時間を短く設定した場合、指定された時間に送信ができず、周期実

行は停止します。例えば、データの送信に 80msかかるのに、周期時間を 50msに設定した場合、50ms

経過したときに、まだデータが送信中なので、周期実行が停止します。

周期実行の停止は、CanSetEvent関数、CanSetEventMask関数での設定を行っている場合、イベントに

より通知されます。

また、アービトレーションロストにより、指定した周期にデータを送信できない場合もあります。ア

ービトレーションロストが発生し、データを再送しているときに、次の周期時間が来ると、上記と同

じように、周期実行が停止します。

例)周期を 50ms に設定した場合

データ送信中

時間

データ送信中

50ms 50ms・・・

周期送信開始

例)周期を 50ms に設定したが、その周期よりもデータ送信時間が長い場合

データ送信中

時間

50ms

周期送信開始

前回のデータが、まだ送信完了して

いないため、次のデータが送れずに

周期送信は停止します。

周期送信実行中でも、周期送信を行いたいデータの更新、周期の更新を行えます。更新したデータは、

次の周期から反映されます。

Page 108: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

108

例)周期送信を行うデータや周期を更新したい場合

データA送信中

時間

50ms・・・

周期送信開始

データ B送信中

80ms

データ、周期の更新はいつでも可能です。

ただし、反映されるのは次の周期からになります。

例えば、この時点で、周期送信を行うデータを B に、周期を 80ms に更

新したとすると、前回の設定周期の 50ms が経過してから、データ B が

80ms 周期で送信されるようになります。

優先順位の高いメッセージを短い周期で送信していると、アービトレーションにより、それより優先

順位の低いメッセージが送信されにくくなりますので、ご注意ください。

【使用例】

●C言語

int nRet;

CAN_MESSAGE_FD CanMessage;

int fd;

fd = CanOpenPort(“ifcan1”);

// 送信周期を 100ms に設定

nRet = CanSetTransmissionCycle(fd, CAN_ROUTE_4_6, 100*1000);

// 送信メッセージのセット

CanMessage.ulLength = 4;

CanMessage.ulID = 0x01;

CanMessage.ulFlag = 3;

CanMessage.ulTime = 0;

CanMessage.bData[0] = 0x11;

CanMessage.bData[1] = 0x22;

CanMessage.bData[2] = 0x33;

CanMessage.bData[3] = 0x44;

nRet = CanActivate(fd);

// メッセージ番号 4の周期送信開始

nRet = CanMultiCyclicSendMessageFD(fd, 4, CanMessage);

デバイス名「ifcan1」の CAN インタフェースから 100ms 周期で、データを送信します。

Page 109: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

109

9. CanGetStatusFD 【機能】

CAN バスの現在の状態を取得します。

得られる情報は バスの状態、エラーカウンタ、送受信バッファの空き状況等です。

詳細は『4.3 構造体説明』を参照下さい。

本関数の実行時、CAN バスへの接続を無効化(CanDeactivate 関数)する必要はありません。

CanOpenPort 関数でオープン後であれば、いつでも使用することができます。

※CAN FD 版 CAN 製品でのみ使用できます。

【書式】

●C言語

int CanGetStatusFD(

int fd, /* デバイスハンドル */

PCAN_PORT_STATUS_FD pPortStatus /* ステータス取得用構造体へのポインタ */

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pPortStatus ステータス取得用構造体へのポインタを指定してください。

構造体の説明については、『4.3 構造体説明』をご参照ください。

【戻り値】

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

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

【使用例】

●C言語

int nRet;

CAN_PORT_STATUS_FD PortStatus;

int fd;

fd = CanOpenPort(“ifcan1”);

nRet = CanGetStatusFD(fd, &PortStatus);

デバイス名「ifcan1」の CAN インタフェースのステータスを取得します。

Page 110: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

110

10. CanGetCompletionMessageFD 【機能】

送信完了メッセージを取り出します。

送信を完了したメッセージは、送信が完了した時間を CAN_MESSAGE_FD 構造体の ulTime メンバに格納

して、そのまま送信バッファに格納されています。

本関数では、その蓄えられた送信完了メッセージを取り出します。

送信バッファ内では、送信完了メッセージ数はカウントされませんので、ご注意ください。

※CAN FD 版 CAN 製品でのみ使用できます。

【書式】

●C言語

int CanGetCompletionMessageFD(

int fd, // デバイスハンドル

PCAN_MESSAGE_FD pCanMessage, // 送信完了メッセージ格納用構造体へのポインタ

unsigned long* pCount // 取り出し希望件数及び取り出し件数格納用変数

// へのポインタ

);

【パラメータ】

fd CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pCanMessage 送信完了メッセージを格納する構造体へのポインタを指定してください。

pCount で指定された個数分の領域を用意してください。

CAN_MESSAGE_FD構造体の説明については、『4.3 構造体説明』をご参照ください。

pCount 取り出す送信完了メッセージの件数を指定してください。

送信完了メッセージが指定された件数よりも少ない場合、実際に取り出された送信メッセージ数

が、この変数に返されます。

例)送信完了メッセージ数が 3の時に、pCount に 5 をセットし、

CanGetCompletionMessageFD 関数を実行すると、pCount に 3 が返されます。

【戻り値】

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

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

【注意】

CanCyclicSendMessageFD 関数による周期送信は、送信完了メッセージが格納されません。

Page 111: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

111

【使用例】

●C言語

int nRet;

CAN_MESSAGE_FD CanMessage[10];

unsigned long Count;

int fd;

fd = CanOpenPort(“ifcan1”);

// 送信完了メッセージの取り出し

Count = 10;

nRet = CanGetCompletionMessageFD(fd, CanMessage, &Count);

デバイス名「ifcan1」の CAN インタフェースから 10 件の送信完了メッセージを取り出します。

Page 112: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

112

4.2.4 プロファイル設定用関数

1. CanQueryProfile 【機能】

受信データの ID に該当するプロファイルが登録されているかどうか問い合わせます。

該当するプロファイルが見つかった場合、その番号が返されます。

【書式】

●C言語

int CanQueryProfile(

PCAN_MESSAGE CanMessage, /* 受信メッセージ */

int *Number /* プロファイル番号 */

);

【パラメータ】

CanMessage 受信メッセージが格納されている構造体へのポインタを指定します。

Number

プロファイル番号を格納する変数へのポインタを指定します。

【戻り値】

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

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

【使用例】

●C言語

CAN_MESSAGE CanMessage;

int Number;

unsigned long Count;

Count = 1;

CanReceiveMessage(fd, &CanMessage, &Count);

CanQueryProfile(&CanMessage, &Number);

受信データの ID に該当するプロファイル番号を取得します。

Page 113: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

113

2. CanApplyProfile 【機能】

プロファイル情報を元に送受信データを変換します。

【書式】

●C言語

int CanApplyProfile(

PCAN_MESSAGE CanMessage, /* 受信メッセージ */

void *Destination, /* 変換データへのポインタ */

int Maximumlength, /* 大データサイズ */

int *Length /* 変換データサイズ格納用 */

/* 変数へのポインタ */

);

【パラメータ】

CanMessage 送受信データが格納されているバッファへのポインタを指定します。

Destination プロファイル情報適用後のデータを格納するバッファへのポインタを指定します。

Maximunlength 変換データの 大サイズをバイト単位で指定します。

変換データが本パラメータ以上のサイズになった場合エラーとなります。

Length 変換データのサイズを格納する変数へのポインタを指定します。

【戻り値】

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

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

Page 114: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

114

【使用例】

●C言語

#define TYPE1_ID 0x101

typedef struct _MSG_TYPE1 {

int data1;

float data2;

} MSG_TYPE1;

CAN_MESSAGE CanMessage;

MSG_TYPE1 dest;

int length;

unsigned long ReceiveCount;

CAN_PROFILE_DATA item[8];

int number;

/* プロファイルの登録 */

item[0].ulStartBit = 0;

item[0].ulBitCount = 8;

item[0].ulByteOrder = CAN_BYTEORDER_INTEL;

item[0].ulDataType = CAN_DATATYPE_INTEGER32;

item[1].ulStartBit = 32;

item[1].ulBitCount = 32;

item[1].ulByteOrder = CAN_BYTEORDER_INTEL;

item[1].ulDataType = CAN_DATATYPE_FLOAT;

number = CAN_ANY_NUMBER;

CanSetProfile(&number, "msg type1", TYPE1_ID, 2, &item[0]);

/* 受信データの変換 */

ReceiveCount = 1;

CanReceiveMessage(hPort, &CanMessage, &ReceiveCount);

CanQueryProfile(&CanMessage, &number);

if(number == 1) {

CanApplyProfile(&sCanMessage, (void *)&dest, sizeof(MSG_TYPE1), &length);

}

受信データにプロファイル情報を適用し、MSG_TYPE1 型構造体に変換します。

Page 115: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

115

3. CanApplyProfileInteger 【機能】

プロファイル情報を元に送受信データを 32bit 整数値に変換します。

【書式】

●C言語

int CanApplyProfileInteger(

PCAN_MESSAGE CanMessage, /* 受信メッセージ */

int *Destination, /* 変換データへのポインタ */

int Index /* 要素番号 */

);

【パラメータ】

CanMessage 受信メッセージが格納されている構造体へのポインタを指定します。

Destination プロファイル情報適用後のデータを格納する変数へのポインタを指定します。

Index 適用するプロファイルの要素番号を指定します。

【戻り値】

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

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

【備考】

プロファイルの要素が 8bit 整数値、16bit 整数値の場合は、自動的に 32bit 整数値に拡張されます。

【使用例】

●C言語

int ret, value, number, itemcount;

CAN_MESSAGE CanMessage;

CAN_PROFILE_DATA item[8];

unsigned long ReceiveCount;

ReceiveCount = 1;

CanReceiveMessage(hPort, &CanMessage, &ReceiveCount);

ret = CanQueryMessage(&CanMessage, &number);

if(ret == IFCAN_ERROR_SUCCESS) {

CanGetProfile(number, NULL, NULL, &itemcount, &item[0]);

if(item[0].ulDataType == CAN_DATATYPE_INTEGER32) {

CanApplyProfileInteger(sCanMessage, &value, 1);

}

}

受信データにプロファイル情報を適用し、32bit 整数型変数に変換します。

Page 116: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

116

4. CanApplyProfileFloat 【機能】

プロファイル情報を元に送受信データを 32bit 実数値に変換します。

【書式】

●C言語

int CanApplyProfileFloat(

PCAN_MESSAGE CanMessage, /* 受信メッセージ */

float *Destination, /* 変換データへのポインタ */

int Index /* 要素番号 */

);

【パラメータ】

CanMessage 受信メッセージが格納されているバッファへのポインタを指定します。

Destination Message プロファイル情報適用後のデータを格納する変数へのポインタを指定します。

Index 適用するプロファイルの要素番号を指定します。

【戻り値】

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

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

【使用例】

●C言語

int ret, number, itemcount;

CAN_MESSAGE sCanMessage;

CAN_PROFILE_DATA item[8];

float value;

unsigned long ReceiveCount;

ReceiveCount = 1;

CanReceiveMessage(hPort, &CanMessage, &ReceiveCount);

ret = CanQueryProfile(&CanMessage, &number);

if(ret == IFCAN_ERROR_SUCCESS) {

CanGetProfile(number, NULL, NULL, &itemcount, &item[0]);

if(signal[0].type == CAN_DATATYPE_FLOAT) {

CanApplyProfileFloat(&CanMessage, &value, 1);

}

}

受信データにプロファイル情報を適用し、32bit 実数型変数に変換します。

Page 117: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

117

5. CanSetProfile 【機能】

プロファイルの登録を行います。

【書式】

●C言語

int CanSetProfile(

int *Number, /* プロファイル番号格納変数へのポインタ */

char *Name, /* プロファイル名 */

unsigned long Id, /* ID */

int Itemcount, /* 要素数 */

PCAN_PROFILE_DATA Item /* プロファイル情報構造体 */

);

【パラメータ】

Number プロファイル番号を指定します。 大 16384 個まで指定できます。

CAN_ANY_NUMBER を指定した場合、自動的に番号を割り当てます。

関数実行後、実際に割り当てられた番号が本パラメータに返されます。

Name プロファイル名を指定します。64 文字まで指定できます。

Id プロファイルを適用するメッセージの ID を指定します。

Itemcount プロファイルの要素数を指定します。 大 64 個まで指定できます。

Item プロファイル情報が格納されている構造体へのポインタを指定します。

【戻り値】

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

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

Page 118: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

118

【使用例】

●C言語

int number;

CAN_PROFILE_DATA item[2];

item[0].ulStartBit = 0;

item[0].ulBitCount = 8;

item[0].ulByteOrder = CAN_BYTEORDER_INTEL;

item[0].ulDataType = CAN_DATATYPE_INTEGER32;

item[1].ulStartBit = 32;

item[1].ulBitCount = 32;

item[1].ulByteOrder = CAN_BYTEORDER_INTEL;

item[1].ulDataType = CAN_DATATYPE_FLOAT;

number = CAN_ANY_NUMBER;

CanSetProfile(&number, "msg type1", 0x101, 2, &item[0]);

プロファイル情報を登録します。

Page 119: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

119

6. CanGetProfile 【機能】

プロファイル情報を取得します。

【書式】

●C言語

int CanGetProfile(

int Number, /* プロファイル番号 */

char *Name, /* プロファイル名 */

unsigned long *Id, /* ID 格納用変数へのポインタ */

int *Itemcount, /* 要素数格納用変数へのポインタ */

PCAN_PROFILE_DATA Item /* プロファイル情報構造体へのポインタ */

);

【パラメータ】

Number プロファイル番号を指定します。

Name プロファイル名を格納する変数へのポインタを指定します。

Id プロファイルを適用するメッセージの ID を格納する変数へのポインタを指定します。

Itemcount プロファイルの要素数を格納する変数へのポインタを指定します。

Item プロファイル情報を格納する構造体へのポインタを指定します。

【戻り値】

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

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

【使用例】

●C言語

int itemcount;

char name[64];

unsigned long id;

CAN_PROFILE_DATA item[64];

CanGetProfile(1, name, &id, &itemcount, &item[0]);

プロファイル情報を取得します。

Page 120: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

120

7. CanDeleteProfile 【機能】

プロファイル情報を削除します。

【書式】

●C言語

int CanDeleteProfile(

int Number /* プロファイル番号 */

);

【パラメータ】

Number プロファイル番号を指定します。

【戻り値】

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

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

【使用例】

●C言語

CanDeleteProfile(1);

プロファイル番号 1のプロファイル情報を削除します。

Page 121: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

121

8. CanSaveProfile 【機能】

プロファイル情報をファイルに保存します。

【書式】

●C言語

int CanSaveProfile(

char *Filename /* ファイル名 */

);

【パラメータ】

Filename プロファイル情報を保存するファイル名を指定します。

拡張子も含めた文字列を指定してください。

【戻り値】

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

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

【使用例】

●C言語

CanSaveProfile(“T1GROUP.CFG”);

プロファイル情報を T1GROUP.CFG ファイルに保存します。

Page 122: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

122

9. CanLoadProfile 【機能】

ファイルからプロファイル情報を取得します。

【書式】

●C言語

int CanLoadProfile(

char *Filename /* ファイル名 */

);

【パラメータ】

Filename プロファイル情報が格納されているファイル名を指定します。

拡張子も含めた文字列を指定してください。相対パス、絶対パス、いずれも使用できます。

【戻り値】

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

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

【備考】

本関数呼び出し前に設定されていたプロファイルは全て削除されます。

【使用例】

●C言語

CanLoadProfile(“T1GROUP.CFG”);

T1GROUP.CFG ファイルに保存されたプロファイル情報をメモリにロードします。

Page 123: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

123

4.3 構造体説明

4.3.1 CAN_PORT_CONFIG 構造体 CanSetConfig関数、CanGetConfig関数で指定する通信条件設定構造体です。

typedef struct {

unsigned long ulLineMode;

unsigned long ulFilterMode;

unsigned long ulTXBSize;

unsigned long ulRXBSize;

unsigned long ulERBSize;

unsigned long ulErrorLimit;

unsigned long ulBaudRate;

} CAN_PORT_CONFIG, *PCAN_PORT_CONFIG;

メンバ 説明

通信のモードを選択します。

高機能版・複数周期送信版 CAN 製品では、CAN_FIFO_SEND_MODE を OR で指定す

ることができます。

識別子 値 内容

CAN_NORMAL_MODE 0 通常の通信モード

メッセージを受信したら ACK を返します。

(デフォルト値)

CAN_LISTEN_ONLY_MODE 1 モニタモード

メッセージを受信しても ACK を返しませ

ん。

※メッセージの送信を行うことはできま

せん(試行した場合の動作は未定義です)。

CAN_FIFO_SEND_MODE 80000000h FIFO 送信モード

送信 FIFO を使った送信を行います。送信

FIFO トリガを使用してパフォーマンスを

上げることが出来ますが、送信完了メッセ

ージは挿入されません。

ulLineMode

アクセプタンスフィルタのモードを選択します。

識別子 値 内容

CAN_DUAL_FILTER 0 2 つのフィルタを設定できます。

(1つのフィルタあたり、16 ビットの定義)

CAN_SINGLE_FILTER 1 1 つのフィルタを設定できます。

(32 ビットの定義が可能)

(デフォルト値)

ulFilterMode

※CAN FD 版 CAN 製品の場合は CAN_DUAL_FILTER 選択時にも 1つのフィルタあた

り、32 ビットの定義が行えます。2つのフィルタを設定するには

CanSetAcceptanceFilterFD 関数を使用してください。

Page 124: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

124

ulTXBSize

※1

送信バッファのサイズをメッセージ単位で指定します。

1 増加する毎に使用するメモリが 24 バイトずつ増加します。

バスマスタ版、CAN FD 版 CAN 製品は送信バッファにデータが格納されている場

合、送信バッファサイズの変更は行えません。

送信バッファ内に格納されているメッセージ数よりも、小さいサイズに設定し

ようとした場合、入りきらなかったデータは破棄されます。

設定値 : 64~ (デフォルト値 : 64)

ulRXBSize

※1

受信バッファのサイズをメッセージ単位で指定します。

1 増加する毎に使用するメモリが 24 バイトずつ増加します。

受信バッファ内に格納されているメッセージ数よりも、小さいサイズに設定し

ようとした場合、入りきらなかったデータは破棄されます。

設定値 : 64~ (デフォルト値 : 64)

ulERBSize

※1

エラーキャプチャに使用するバッファのサイズを件数単位で指定します。

1 増加する毎に使用するメモリが 16 バイトずつ増加します。

エラーバッファ内に格納されているエラー数よりも、小さいサイズに設定しよ

うとした場合、入りきらなかったデータは破棄されます。

設定値 : 64~ (デフォルト値 : 64)

ulErrorLimit

※1

送受信の際に発生したエラーが、この件数を超えるとイベントが発生します。

CAN のプロトコルでは 127 を越えるとエラーパッシブ状態となり、255 を越える

とバスオフ状態へ遷移します。

設定値 : 0~255 (デフォルト値 : 96)

※ CAN FD 版 CAN 製品では 0~15 の範囲で設定できます。

詳細は『4.3.2 CAN_PORT_CONFIG_FD 構造体』を参照してください。

通信速度を指定します。※2

識別子 値 内容

CAN_BAUDRATE_33_3k 00002724h 通信速度を 33.3kbps に設定します。

CAN_BAUDRATE_50k 00001D23h 通信速度を 50kbps に設定します。

CAN_BAUDRATE_83_3k 00000F24h 通信速度を 83.3kbps に設定します。

CAN_BAUDRATE_95_2k 00000D24h 通信速度を 95.2kbps に設定します。

CAN_BAUDRATE_100k 00000936h 通信速度を 100kbps に設定します。

CAN_BAUDRATE_125k 0000053Ah 通信速度を 125kbps に設定します。

(デフォルト値)

CAN_BAUDRATE_250k 0000023Ah 通信速度を 250kbps に設定します。

CAN_BAUDRATE_500k 00000127h 通信速度を 500kbps に設定します。

CAN_BAUDRATE_1M 00000027h 通信速度を 1Mbps に設定します。

ulBaudRate

CAN_BAUDRATE_BTR 80000000h SJA1000の BTRレジスタを直接制御します。

Page 125: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

125

※ CAN_BAUDRATE_BTR は、以下の値とで論理和(OR)を取ることで、CAN コン

トローラ SJA1000 の BTR レジスタに直接、値を代入することが出来ます。

bit15~8 が BTR1、bit7~0 が BTR0 に相当します。

なお、CAN コントローラに入力されるクロックは 24MHz です。

※ CAN FD 版 CAN 製品では、CAN_BAUDRATE_BTR、CAN_BAUDRATE_33_3k、

CAN_BAUDRATE_50k は指定できません。

bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

予約 予約 予約 予約 予約 予約 予約 予約

bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

予約 予約 予約 予約 予約 予約 予約 予約

bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

SJW.1 SJW.0 BRP.5 BRP.4 BRP.3 BRP.2 BRP.1 BRP.0

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

SAM TSEG2.2 TSEG2.1 TSEG2.0 TSEG1.3 TSEG1.2 TSEG1.1 TSEG1.0

※CAN_BAUDRATE_BTR でのボーレート設定方法

下記の計算式に各ビットの値をあてはめてボーレートを設定してください。

BRP.0BRP.1BRP.2BRP.3BRP.4BPR.5BRP +×+×+×+×+× 2481632=

TSEG1.0 TSEG1.1 TSEG1.2 TSEG1.3 TSEG1 +×+×+× 248=

TSEG2.0 TSEG2.1 TSEG2.2 TSEG2 +×+× 24=

( ) 21024 6

×+×

1BRPf SCL = 

)1()1(1 ++ f SCL

TSEG2 TSEG1 ++=   ボーレート

※サンプルポイントを後にずらすためには、TSEG2 の値をなるべく小さくする

ように設定してください。

その他設定値については、CAN コントローラ(SJA1000)のデータシートを参照

ください。

例:ボーレートを 500kbps に設定します。(BPR=1,TSEG1=7,TSEG2=2)

BaudRate = CAN_BAUDRATE_BTR + 100h + 20h + 07h

Page 126: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

126

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx,

TPC-B016SBxx, ETC-B016)では BTR レジスタの内容と計算式がことなります。

CAN_BAUDRATE_BTR を使用して任意のボーレートを指定する場合は下記内容

を参照してください。

bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

予約 予約 予約 予約 予約 予約 予約 予約

bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

予約 予約 予約 予約 予約 予約 予約 予約

bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

TSEQ2.3 TSEQ2.2 TSEQ2.1 TSEQ2.0 TSEQ1.3 TSEQ1.2 TSEQ1.1 TSEQ1.0

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

SJW.1 SJW.0 BRP.5 BRP.4 BRP.3 BRP.2 BRP.1 BRP.0

下記の計算式に各ビットの値をあてはめてボーレートを設定してください。

BRP.0BRP.1BRP.2BRP.3BRP.4BPR.5BRP +×+×+×+×+× 2481632=

TSEQ1.0 TSEQ1.1 TSEQ1.2 TSEQ1.3 TSEQ1 +×+×+× 248=

TSEQ2.0 TSEQ2.1 TSEQ2.2 .3TSEQ TSEQ2 +×+×+× 2482=

( )1BRPfSCL +

× 61050= 

)1 ()1 (1f SCL

++ TSEQ2 TSEQ1 ++=   ボーレート

※サンプルポイントを後にずらすためには、TSEQ2 の値をなるべく小さくする

ように設定してください。

その他設定値については、CAN コントローラ(Intel® Platform Controller Hub

EG20T)のデータシートを参照ください。

例:ボーレートを 500kbps に設定します。(BPR=4,TSEG1=15,TSEG2=2)

BaudRate = CAN_BAUDRATE_BTR + 04h + 0F00h + 2000h

※1 設定できる 大値は環境に依存します。 大値を越える値を指定すると、割り当てに失敗

して関数からエラーが返されますが、カーネルログにコールトレースが出力されることが

あります。この場合は、バッファサイズを小さくして下さい。

また、「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx,

TPC-B016SBxx, ETC-B016)では設定することができません。

※2 詳しい説明については弊社ホームページのコラム集を参照して下さい。

<http://www.interface.co.jp/column/index.asp?id=270&category=can>

Page 127: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

127

4.3.2 CAN_PORT_CONFIG_FD 構造体 CanSetConfigFD関数、CanGetConfigFD関数で指定する通信条件設定構造体です。

typedef struct {

unsigned long ulLineMode;

unsigned long ulFilterMode;

unsigned long ulTXBSize;

unsigned long ulTXBSizeFD;

unsigned long ulRXBSize;

unsigned long ulRXBSizeFD;

unsigned long ulERBSize;

unsigned long ulErrorLimit;

unsigned long UlBaudRateNominal;

unsigned long UlBaudRateData;

unsigned long ulTDC;

} CAN_PORT_CONFIG_FD, *PCAN_PORT_CONFIG_FD;

メンバ 説明

通信のモードを選択します。

識別子 値 内容

CAN_NORMAL_MODE 0 通常の通信モード

メッセージを受信したら ACK を返します。

(デフォルト値)

CAN_LISTEN_ONLY_MODE 1 モニタモード

メッセージを受信しても ACK を返しませ

ん。

※メッセージの送信を行うことはできま

せん(試行した場合の動作は未定義です)。

ulLineMode

アクセプタンスフィルタのモードを選択します。

識別子 値 内容

CAN_DUAL_FILTER 0 2 つのフィルタを設定できます。

(1つのフィルタあたり、32 ビットの定義)

CAN_SINGLE_FILTER 1 1 つのフィルタを設定できます。(デフォルト値)

(32 ビットの定義が可能)

ulFilterMode

ulTXBSize

※1

CAN メッセージ送信バッファのサイズをメッセージ単位で指定します。

1 増加する毎に使用するメモリが 24 バイトずつ増加します。

送信バッファにデータが格納されている場合、送信バッファサイズの変更は行

えません。

送信バッファ内に格納されているメッセージ数よりも、小さいサイズに設定し

ようとした場合、入りきらなかったデータは破棄されます。

設定値 : 64~ (デフォルト値 : 64)

Page 128: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

128

ulTXBSizeFD

※1

CAN FD メッセージ送信バッファのサイズをメッセージ単位で指定します。

1 増加する毎に使用するメモリが 80 バイトずつ増加します。

送信バッファにデータが格納されている場合、送信バッファサイズの変更は行

えません。

送信バッファ内に格納されているメッセージ数よりも、小さいサイズに設定し

ようとした場合、入りきらなかったデータは破棄されます。

設定値 : 64~ (デフォルト値 : 64)

ulRXBSize

※1

CAN メッセージ受信バッファのサイズをメッセージ単位で指定します。

1 増加する毎に使用するメモリが 24 バイトずつ増加します。

受信バッファ内に格納されているメッセージ数よりも、小さいサイズに設定し

ようとした場合、入りきらなかったデータは破棄されます。

設定値 : 64~ (デフォルト値 : 64)

ulRXBSizeFD

※1

CAN FD メッセージ受信バッファのサイズをメッセージ単位で指定します。

1 増加する毎に使用するメモリが 80 バイトずつ増加します。

受信バッファ内に格納されているメッセージ数よりも、小さいサイズに設定し

ようとした場合、入りきらなかったデータは破棄されます。

設定値 : 64~ (デフォルト値 : 64)

ulERBSize

※1

エラーキャプチャに使用するバッファのサイズを件数単位で指定します。

1 増加する毎に使用するメモリが 16 バイトずつ増加します。

エラーバッファ内に格納されているエラー数よりも、小さいサイズに設定しよ

うとした場合、入りきらなかったデータは破棄されます。

設定値 : 64~ (デフォルト値 : 64)

ulErrorLimit 送受信の際に発生したエラーが、この件数を超えるとイベントが発生します。

CAN のプロトコルでは 127 を越えるとエラーパッシブ状態となり、255 を越える

とバスオフ状態へ遷移します。

設定値 : 0~15 (デフォルト値 : 11)

※ここで設定した値に対し、以下の計算を行った値が件数のリミットとして設

定されます。

(ulErrorLimit + 1) * 8

8, 16, 24, 32, …, 128

(例)

ulErrorLimit = 11 とした場合、

(11 + 1) * 8 = 96 となり、96 件のエラーが発生した場合にイベントが発

生します。

Page 129: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

129

CAN 通信時の通信速度及び、CAN FD 通信時のデータフェーズ以外の部分の通信

速度です。

識別子 値 内容

CAN_BAUDRATE_FD_83_3k 1E07070Bh 通信速度を 83.3Kbps に設定します。

CAN_BAUDRATE_FD_95_2k 2E0B0B06h 通信速度を 95.2Kbps に設定します。

CAN_BAUDRATE_FD_100k 3E0F0F04h 通信速度を 100Kbps に設定します。

CAN_BAUDRATE_FD_125k 7E1F1F01h 通信速度を 125Kbps に設定します。

(デフォルト値)

CAN_BAUDRATE_FD_250k 7E1F1F00h 通信速度を 250Kbps に設定します。

CAN_BAUDRATE_FD_500k 1E070701h 通信速度を 500Kbps に設定します。

CAN_BAUDRATE_FD_1M 1E070700h 通信速度を 1Mbps に設定します。

互換のため、以下の値も指定できます。以下の値を指定した場合、ドライバ内で

上記の値に付け替えられます。そのため、以下の値を設定し、再度取得した際に

は上記の値が取得されます。

(例)

CAN_BAUDRATE_125k(0000053Ah) を 設 定 し た 場 合 、 取 得 さ れ る 値 は

CAN_BAUDRATE_FD_125k(7E1F1F01h)となります。

識別子 値 内容

CAN_BAUDRATE_83_3k 00000F24h 通信速度を 83.3Kbps に設定します。

CAN_BAUDRATE_95_2k 00000D24h 通信速度を 95.2Kbps に設定します。

CAN_BAUDRATE_100k 00000936h 通信速度を 100Kbps に設定します。

CAN_BAUDRATE_125k 0000053Ah 通信速度を 125Kbps に設定します。

(デフォルト値)

CAN_BAUDRATE_250k 0000023Ah 通信速度を 250Kbps に設定します。

CAN_BAUDRATE_500k 00000127h 通信速度を 500Kbps に設定します。

CAN_BAUDRATE_1M 00000027h 通信速度を 1Mbps に設定します。

※ 詳細な設定を行う場合は以下に値を直接指定してください。設定方法は

ulBaudRateData を参照してください。

bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

SEG1

bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

予約 SEG2

bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

予約 SJW

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

PRESC

ulBaudRateNo

minal

Page 130: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

130

CAN FD 通信時におけるデータフェーズの通信速度を設定します。CAN 通信時は

無効です。

識別子 値 内容

CAN_BAUDRATE_FD_1M 1E070700h 通信速度を 1Mbps に設定します。

(デフォルト値)

CAN_BAUDRATE_FD_2M 0E030300h 通信速度を 2Mbps に設定します。

CAN_BAUDRATE_FD_5M 04010100h 通信速度を 5Mbps に設定します。

※ 詳細な設定を行う場合は以下を参考に値を直接指定してください。

bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

予約 予約 予約 SEG1

bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

予約 予約 予約 予約 SEG2

bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

予約 予約 予約 予約 SJW

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

ulBaudRateDa

ta

PRESC

Page 131: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

131

※ボーレート設定方法

ボーレートを直接指定する場合は下記の計算式に各ビットの値をあてはめてボ

ーレートを設定してください。

ボーレート= クロック / (tseg1 + tseg2) / プリスケーラ

tseg1, tseg2, プリスケーラと各ビット(SEG1, SEG2, PRESC)の対応は以下です。

tseg1 = (SEG1 + 2)

tseg2 = (SEG2 + 1)

プリスケーラ = PRESC + 1

また、同期ジャンプ幅tsjwは以下の様に設定します。

tsjw = (SJW + 1)

ボーレート = クロック / ((SEG1+2) + (SEG2+1)) / (PRESC + 1)

例:ボーレートを 500Kbps に設定します。(プリスケーラ=2, tseg1=32, tseg2=8)

設定値 各ビットの値

tseg1 = 32 → SEG1 = 30

tseg2 = 8 → SEG2 = 7

プリスケーラ = 2 → PRESEC = 1

tsjw = 8 → SJW = 7

BaudRate = 1E000000h + 70000h + 700h + 01h

※コントローラに入力されるクロックは 40MHz です。

※サンプルポイントを後にずらすためには、tseg2の値をなるべく小さくするよう

に設定してください。

サンプルポイント

クロック

tseg1 tseg2

(プリスケーラ=2 の例)

1TQ

Page 132: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

132

送信遅延補償を設定します。

設定値 : 0(無効)~ 127 (デフォルト値 : 32)

上記の設定範囲内で任意に指定を行うか、ulBaudRateData の設定にあわせて以

下から選択してください。

識別子 値 内容

CAN_TDC_1M 32 セカンダリサンプルポイントのオフセッ

トを 32 に設定します。

CAN_TDC_2M 16 セカンダリサンプルポイントのオフセッ

トを 16 に設定します。

CAN_TDC_5M 6 セカンダリサンプルポイントのオフセッ

トを 6に設定します。

ulTDC

※1 設定できる 大値は環境に依存します。 大値を越える値を指定すると、割り当てに失敗し

て関数からエラーが返されますが、カーネルログにコールトレースが出力されることがあります。

この場合は、バッファサイズを小さくして下さい。

Page 133: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

133

4.3.3 CAN_PORT_STATUS 構造体 CanGetStatus関数で指定するステータス取得用構造体です。

typedef struct {

unsigned long ulBusStatus;

unsigned long ulTXBCount;

unsigned long ulRXBCount;

unsigned long ulERBCount;

unsigned long ulTXERRCount;

unsigned long ulRXERRCount;

} CAN_PORT_STATUS, *PCAN_PORT_STATUS;

メンバ 説明

CAN バスの状態を表します。

識別子 値 内容

CAN_BUS_OFF 00000004h バスオフ状態です。

CAN_BUS_PASSIVE 00000002h 送信か受信のエラーカウンタが 127 を越えまし

た。エラーパッシブ状態です

CAN_BUS_ACTIVE 00000001h バスは正常に動作しています。

エラーアクティブ状態です。

ulBusStatus

ulTXBCount

※2

送信バッファに蓄えられている CAN メッセージの数を返します。

0 ~ 大値 (※)

ulRXBCount

※2

受信バッファに蓄えられている CAN メッセージの数を返します。

0 ~ 大値 (※)

ulERBCount

※2

エラーバッファに蓄えられているエラー情報の数を返します。

0 ~ 大値 (※)

ulTXERRCount 送信エラーカウンタの値を返します。

0 ~ 255

ulRXERRCount 受信エラーカウンタの値を返します。

0 ~ 255

※最大値は CanSetConfig関数で設定した値です。

※2 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では取得することができません。

Page 134: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

134

4.3.4 CAN_PORT_STATUS_FD 構造体 CanGetStatusFD関数で指定するステータス取得用構造体です。

typedef struct {

unsigned long ulBusStatus;

unsigned long ulTXBCount;

unsigned long ulTXBCountFD;

unsigned long ulRXBCount;

unsigned long ulRXBCountFD;

unsigned long ulERBCount;

unsigned long ulTXERRCount;

unsigned long ulRXERRCount;

} CAN_PORT_STATUS_FD, *PCAN_PORT_STATUS_FD;

メンバ 説明

CAN バスの状態を表します。

識別子 値 内容

CAN_BUS_OFF 00000004h バスオフ状態です。

CAN_BUS_PASSIVE 00000002h 送信か受信のエラーカウンタが127を越えま

した。エラーパッシブ状態です

CAN_BUS_ACTIVE 00000001h バスは正常に動作しています。

エラーアクティブ状態です。

ulBusStatus

ulTXBCount 送信バッファに蓄えられている未送信 CAN メッセージの数を返します。

送信完了メッセージはカウントされません。

0 ~ 大値 (※)

ulTXBCountFD 送信バッファに蓄えられている未送信 CAN FD メッセージの数を返します。

送信完了メッセージはカウントされません。

0 ~ 大値 (※)

ulRXBCount 受信バッファに蓄えられている CAN メッセージの数を返します。

0 ~ 大値 (※)

ulRXBCountFD 受信バッファに蓄えられている CAN FD メッセージの数を返します。

0 ~ 大値 (※)

ulERBCount エラーバッファに蓄えられているエラー情報の数を返します。

0 ~ 大値 (※)

ulTXERRCount 送信エラーカウンタの値を返します。

0 ~ 255

ulRXERRCount 受信エラーカウンタの値を返します。

0 ~ 255

※最大値は CanSetConfig、CanSetConfigFD 関数で設定した値です。

Page 135: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

135

4.3.5 CAN_MESSAGE 構造体 CanSendMessage関数、CanReceiveMessage関数で指定するメッセージ用構造体です。

typedef struct {

unsigned long ulLength;

unsigned long ulFlag;

unsigned long ulID;

unsigned char data[8];

unsigned long ulTime;

} CAN_MESSAGE, *PCAN_MESSAGE;

メンバ 説明

ulLength 送信メッセージの長さを指定します。(バイト)

または、受信したメッセージのデータ部の長さを表しています。

ID、フラグを含まないデータ自体の長さです(0~8)。

送信するメッセージに特殊なフラグを設定します。

または、受信したメッセージのフラグを表します。

識別子 値 内容

CAN_MSG_RTR 1 メッセージはリモートフレームです。

ulFlag

送信メッセージに付加する ID、または受信したメッセージの ID を表します。

11ビットと 29ビットの IDの区別は以下のフラグをORすることで行うことがで

きます。

(指定しない場合は 11 ビット ID として上位を無視して下位 11 ビットのみが ID と

して設定されます)

識別子 値 内容

CAN_EXT_FRAME 80000000h ID は 29 ビット ID です。

11 ビット ID では、ulID のビットパターンは下記のようになります。

bit31 bit30 … bit11 bit10 bit9 bit8

0 無効 ID.28 ID.27 ID.26

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

ID.25 ID.24 ID.23 ID.22 ID.21 ID.20 ID.19 ID.18

ulID

※CAN FD 版 CAN 製品では、bit0~bit10 は、順に ID.0~ID.10 になります。

Page 136: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

136

29 ビット ID では、ulID のビットパターンは下記のようになります。

bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

1 無効 ID.28 ID.27 ID.26 ID.25 ID.24

bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

ID.23 ID.22 ID.21 ID.20 ID.19 ID.18 ID.17 ID.16

bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

ID.15 ID.14 ID.13 ID.12 ID.11 ID.10 ID.9 ID.8

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

ID.7 ID.6 ID.5 ID.4 ID.3 ID.2 ID.1 ID.0

bData[] 送信メッセージのデータ部を格納します。

または、受信したメッセージのデータ部を表します。

メッセージの先頭から bData[0], bData[1],,,,,bData[7]となっています。

送信時、ulLength に設定した値よりも長い部分は無視されます。

例えば ulLength に 3 を設定した場合、bData[0],bData[1],bData[2]はドライバ

に渡され蓄えられますが、bData[3]以降の部分は無視されます。

同様に受信時も ulLength 以上の部分は無効データです。

例えば ulLength に 2 が返ってきた場合、bData[0],bData[1]は受信したメッセー

ジの内容ですが、bData[2]以降は無効なデータです。無視してください。

ulTime

※3

※4

【送信時】

高機能版、バスマスタ版、CAN FD 版 CAN 製品では、ディレイ時間、周期送信の

周期をこのメンバで指定します。ディレイ時間が必要でない場合は、0を指定し

てください。詳しくは、各送信用関数の説明をご覧下さい。

なお、複数メッセージ周期送信の周期は、CanSetTransmissionCycle 関数で設定

します。ご注意下さい。

【受信時】

メッセージ受信、および送信完了した時刻が格納されます。(単位:μs)

実際の時刻ではなく、CanOpenPort 関数の実行後からの経過時間になります。

エラーイベントにも同じ時刻が記録されますので、受信メッセージ、エラー発生、

送信完了の時間的関係を結びつけることができます。

CanClearBuffer 関数で CAN_CLEAR_TIMERCOUNTER を指定することで、内部の経過

時間を 0クリアすることが出来ます。

単位はμs ですが、実際に返される値はスタンダード版では 1000 単位の値(ms)

が返されます。高機能版、バスマスタ版、CAN FD 版 CAN 製品では、10 単位の値

が返されます。

また、この時間は、スタンダード版 CAN 製品では、CAN コントローラから割り込

みが発生し、デバイスドライバの割り込み処理内で CAN メッセージを取り出した

時の時間ですので、正確性には欠けます。また、連続で CAN メッセージを受信し

た場合、2つのメッセージの受信時刻が同じになることがあります。

※3 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では使用できません。

Page 137: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

137

※4 IMC-T3618(L6)に搭載されている CAN デバイス(PCI-485210)では、実際の時刻ではなく、サ

ンプリング動作開始から、サンプリング動作終了までの間にカウントされる値となります。

サンプリング停止中は、サンプリング動作が停止した時間が常に取得できます。

CAN_ERROR 構造体の ulTime も同様の時刻が記録されます。

Page 138: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

138

4.3.6 CAN_MESSAGE_FD 構造体 CanSendMessageFD関数、CanReceiveMessageFD関数で指定するメッセージ用構造体です。

typedef struct {

unsigned long ulLength;

unsigned long ulFlag;

unsigned long ulID;

unsigned char data[64];

unsigned long ulTime;

} CAN_MESSAGE_FD, *PCAN_MESSAGE_FD;

メンバ 説明

送信メッセージの長さを指定します。(バイト)

または、受信したメッセージのデータ部の長さを表しています。

ID、フラグを含まないデータ自体の長さです。

識別子 値 内容

- 0~8 0~8 バイト

CAN_MSG_LEN_12 9 12 バイト

CAN_MSG_LEN_16 10 16 バイト

CAN_MSG_LEN_20 11 20 バイト

CAN_MSG_LEN_24 12 24 バイト

CAN_MSG_LEN_32 13 32 バイト

CAN_MSG_LEN_48 14 48 バイト

CAN_MSG_LEN_64 15 64 バイト

ulLength

ulFlag 予約です。送信時は 3を指定し、受信時の値は無視してください。

送信メッセージに付加する ID、または受信したメッセージの ID を表します。

11ビットと 29ビットの IDの区別は以下のフラグをORすることで行うことがで

きます。

(指定しない場合は 11 ビット ID として上位を無視して下位 11 ビットのみが ID と

して設定されます)

識別子 値 内容

CAN_EXT_FRAME 80000000h ID は 29 ビット ID です。

11 ビット ID では、ulID のビットパターンは下記のようになります。

bit31 bit30 … bit11 bit10 bit9 bit8

0 無効 ID.10 ID.9 ID.8

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

ID.7 ID.6 ID.5 ID.4 ID.3 ID.2 ID.1 ID.0

ulID

29 ビット ID では、ulID のビットパターンは下記のようになります。

bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit24

1 無効 ID.28 ID.27 ID.26 ID.25 ID.24

Page 139: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

139

bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit16

ID.23 ID.22 ID.21 ID.20 ID.19 ID.18 ID.17 ID.16

bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8

ID.15 ID.14 ID.13 ID.12 ID.11 ID.10 ID.9 ID.8

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

ID.7 ID.6 ID.5 ID.4 ID.3 ID.2 ID.1 ID.0

bData[] 送信メッセージのデータ部を格納します。

または、受信したメッセージのデータ部を表します。

メッセージの先頭から bData[0], bData[1],,,,,bData[63]となっています。

送信時、ulLength に設定した値よりも長い部分は無視されます。

例えば ulLength に 3 を設定した場合、bData[0],bData[1],bData[2]はドライバ

に渡され蓄えられますが、bData[3]以降の部分は無視されます。

同様に受信時も ulLength 以上の部分は無効データです。

例えば ulLength に 2 が返ってきた場合、bData[0],bData[1]は受信したメッセー

ジの内容ですが、bData[2]以降は無効なデータです。無視してください。

ulTime 【送信時】

ディレイ時間、周期送信の周期をこのメンバで指定します。ディレイ時間が必要

でない場合は、0を指定してください。詳しくは、各送信用関数の説明をご覧下

さい。

なお、複数メッセージ周期送信の周期は、CanSetTransmissionCycle 関数で設定

します。ご注意下さい。

【受信時】

メッセージ受信、および送信完了した時刻が格納されます。(単位 : μs)

実際の時刻ではなく、CanOpenPort 関数の実行後からの経過時間になります。

エラーイベントにも同じ時刻が記録されますので、受信メッセージ、エラー発生、

送信完了の時間的関係を結びつけることができます。

CanClearBuffer 関数で CAN_CLEAR_TIMERCOUNTER を指定することで、内部の経過

時間を 0クリアすることが出来ます。

単位はμsです。10 単位の値が返されます。

Page 140: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

140

4.3.7 CAN_ERROR 構造体 CanGetErrorEvent関数で使用する、エラーイベント取得用構造体です。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では使用しません。

typedef struct {

unsigned long ulInterruptRegister;

unsigned long ulErrorCodeRegister;

unsigned long ulArbitrationLostRegister;

unsigned long ulTime;

} CAN_ERROR, *PCAN_ERROR;

メンバ 説明

エラー割り込み発生時の発生要因が格納されています。

複数の要因が同時に成立している場合もあります。

CAN_DETECT_BUS_ERROR が有効な場合、ulErrorCodeRegister に詳細なエラー要因

が格納されています。

識別子 値 内容

CAN_DETECT_BUS_ERROR 00000080h CAN バス上のエラーを検出しまし

た。詳細は ulErrorCodeRegister

でご確認ください。

CAN_DETECT_ARBITRATION_LOST 00000040h CAN バス上でアービトレーション

ロストを検出しました。

詳細は

ulArbitrationLostRegister でご確

認ください。

CAN_IS_ERROR_PASSIVE 00000020h エラーパッシブ状態となりました。

(送信か受信のエラーカウンタが

127 を越えました)

CAN_DETECT_OVERRUN 00000008h オーバーランエラーが発生し、受信

メッセージが失われました。

ulInterruptRe

gister

CAN_IS_ERROR_WARNING 00000004h 送信か受信のエラーカウンタが

CanSetConfig 関数で設定したリミ

ット値を越えました。

Page 141: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

141

CAN バス上のエラーが発生した場合の詳細な内容が格納されています。

ulInterruptRegister の CAN_DETECT_BUS_ERROR が有効でない場合は 0 が返され

ます。(CAN コントローラ SJA1000 の ECC レジスタに相当します)

bit31~8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

予約 ERRC1 ERRC0 DIR SEG4 SEG3 SEG2 SEG1 SEG0

各ビットの意味

ERRC1 ERRC0 エラーの種類

0 0 ビットエラー

0 1 フォームエラー

1 0 ビットスタッフエラー

1 1 その他の種類のエラー

DIR エラーの発生した方向

0 送信時に発生したエラー

1 受信時に発生したエラー

SEG4 SEG3 SEG2 SEG1 SEG0 エラーの発生箇所

0 0 0 1 1 SOF(スタートオブフレーム)

0 0 0 1 0 ID.28~ID.21 の間

0 0 1 1 0 ID.20~ID.18 の間

0 0 1 0 0 SRTR(標準フォーマット時は RTR)

0 0 1 0 1 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 エラーデリミタ

ulErrorCodeRe

gister

1 1 1 0 0 オーバーロードフラグ

Page 142: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

142

※CAN FD 版 CAN 製品ではビット割り当てが異なります。以下を参照してくださ

い。

bit31~8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

予約 ERRC2 ERRC1 ERRC0 予約 予約 予約 予約 予約

各ビットの意味

ERRC

2

ERRC

1

ERRC

0

エラーの種類

0 0 0 エラー無し

0 0 1 ビットエラー

0 1 0 フォームエラー

0 1 1 スタッフエラー

1 0 0 ACK エラー

1 0 1 CRC エラー

1 1 0 その他のエラー

1 1 1 予約

CAN バス上で、送信データの衝突が発生し、その際の調停で負けた場合、どのビ

ットで調停に負けたか(アービトレーション・ロスト)を記録するレジスタです。

ulInterruptRegister の CAN_DETECT_ARBITORATION_LOST が有効でない場合は 0

が返されます。(CAN コントローラ SJA1000 の ALC レジスタに相当します)

bit31~5 bit4 bit3 bit2 bit1 bit0

予約 BITNO4 BITNO3 BITNO2 BITNO1 BITNO0

各ビットの意味は下記のようになります。

BITNO4 BITNO3 BITNO2 BITNO1 BITNO0 アービトレーションロスト位置

0 0 0 0 0 ID の 1 ビット目 (※1)

0 0 0 0 1 ID の 2 ビット目

0 0 0 1 0 ID の 3 ビット目

0 0 0 1 1 ID の 4 ビット目

0 0 1 0 0 ID の 5 ビット目

0 0 1 0 1 ID の 6 ビット目

0 0 1 1 0 ID の 7 ビット目

0 0 1 1 1 ID の 8 ビット目

0 1 0 0 0 ID の 9 ビット目

0 1 0 0 1 ID の 10 ビット目

0 1 0 1 0 ID の 11 ビット目

0 1 0 1 1 SRTR ビット (※2)(※4)

0 1 1 0 0 IDE ビット

0 1 1 0 1 ID の 12 ビット目 (※3)

0 1 1 1 0 ID の 13 ビット目 (※3)

0 1 1 1 1 ID の 14 ビット目 (※3)

1 0 0 0 0 ID の 15 ビット目 (※3)

ulArbitration

LostRegister

1 0 0 0 1 ID の 16 ビット目 (※3)

Page 143: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

143

1 0 0 1 0 ID の 17 ビット目 (※3)

1 0 0 1 1 ID の 18 ビット目 (※3)

1 0 1 0 0 ID の 19 ビット目 (※3)

1 0 1 0 1 ID の 20 ビット目 (※3)

1 0 1 1 0 ID の 21 ビット目 (※3)

1 0 1 1 1 ID の 22 ビット目 (※3)

1 1 0 0 0 ID の 23 ビット目 (※3)

1 1 0 0 1 ID の 24 ビット目 (※3)

1 1 0 1 0 ID の 25 ビット目 (※3)

1 1 0 1 1 ID の 26 ビット目 (※3)

1 1 1 0 0 ID の 27 ビット目 (※3)

1 1 1 0 1 ID の 28 ビット目 (※3)

1 1 1 1 0 ID の 29 ビット目 (※3)

1 1 1 1 1 RTR ビット (※3) (※4)

※1. ID の 1 ビット目は ID.28、2 ビット目は ID.27、…、となります。

※2. 標準フォーマットの場合、RTR ビット。

※3. 拡張フォーマットの場合のみ有効。

※4. CAN FD メッセージの場合は RRS ビット。

ulTime

※1

エラーが発生した時刻が格納されます。(単位:μs)

実際の時刻ではなく、CanOpen 関数の実行後からの経過時間になります。

受信メッセージにも同じ時刻が記録されますので、受信メッセージとエラー発生

の時間的関係を結びつけることができます。

CanClearBuffer 関数で CAN_CLEAR_TIMERCOUNTER を指定することで、内部の経過

時間を 0クリアすることが出来ます。

単位はμs ですが、実際に返される値はスタンダード版では 1000 単位の値(ms)

が返されます。高機能版、バスマスタ版 CAN 製品では、10 単位の値が返されま

す。

また、この時間は、スタンダード版 CAN 製品では、CAN コントローラから割り込

みが発生し、デバイスドライバの割り込み処理内で CAN メッセージを取り出した

時の時間ですので、正確性には欠けます。

また、連続で CAN メッセージを受信した場合、2つのメッセージの受信時刻が同

じになることがあります。

※1 IMC-T3618(L6)に搭載されている CAN デバイス(PCI-485210)では、実際の時刻で

はなく、サンプリング動作開始から、サンプリング動作終了までの間にカウント

される値となります。

サンプリング停止中は、サンプリング動作が停止した時間が常に取得できます。

CAN_MESSAGE 構造体の ulTime も同様の時刻が記録されます。

Page 144: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

144

4.3.8 CAN_EVENT_REQ 構造体 割り込みイベントを設定する構造体です。コールバック関数、シグナルの設定等に使用します。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では使用しません。

typedef struct {

int nPid;

int hInterruptEvent;

LPCANCALLBACK lpCallBackProc;

unsigned int uInterruptMsg;

unsigned long dwUser;

} CAN_EVENT_REQ, *PCAN_EVENT_REQ;

メンバ 説明

nPid シグナル送出プロセス ID。

CanSetEventMask 関数にて設定した各種割り込み発生時に送出するシグナ

ルの送出先のプロセス ID を指定します。

シグナルを送出しない場合には、0を指定してください。

hInterruptEvent 予約です。0を指定してください。

lpCallBackProc 割り込み発生時に呼び出されるユーザ・コールバック関数のポインタを指

定してください。

コールバック関数を使用しない場合は、C言語では NULL、Kylix では 0を指

定してください。

uInterruptMsg 割り込み発生時に送出するシグナルを指定します。

シグナルを送出しない場合には、0を指定してください。

dwUser コールバック関数へ引き渡すユーザ・データを指定してください。

Page 145: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

145

4.3.9 CAN_PORT_INFORMATION 構造体 ポートのハードウェア情報が格納されている構造体です。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,

ETC-B016)では使用しません。

typedef struct {

ULONG ulStructLength;

ULONG ulVendorID;

ULONG ulDeviceID;

ULONG uISubsystemID;

ULONG ulRevisionID;

ULONG ulModelNumber;

ULONG ulBoardID;

ULONG ulChannelNumber;

ULONG ulPhysicalLayer;

} CAN_PORT_INFORMATION, *PCAN_PORT_INFORMATION;

メンバ 説明

ulStructLength 本構造体のサイズです。

ulVendorID CAN デバイスのベンダ ID です。

ulDeviceID CAN デバイスのデバイス ID です。

ulSubsystemID CAN デバイスのサブシステム ID です。

ulRevisionID CAN デバイスのリビジョン ID です。

ulModelNumber CAN デバイスの型式番号です。

ulBoardID CAN デバイスの RSW1 設定値です。

ulChannelNumber チャンネル番号です。

値は 1始まりです(チャンネル 1の場合は 1、チャンネル 2の場合は 2とな

ります。)

ulPhysicalLayer CAN ポートのハードウェアインタフェースです。

識別子 値 内容

CAN_PHYSICALLAYER_LOWSPEED 0 低速 CAN(ISO 11898-3)

CAN_PHYSICALLAYER_HIGHSPEED 1 高速 CAN(ISO 11898-2)

各 CAN デバイスのデバイス ID、サブシステム ID は下記のとおりです。

デバイス型式 デバイス ID サブシステム ID

PCI-485120

LPC-485120

4851(12F3h) 2094h

3894h(タフコン)

PCI-485111

LPC-485111

4851(12F3h) 208Bh

PCI-485102

LPC-485102

4851(12F3h) 2082h

PCI-485110

4851(12F3h) 208Ah

388Ah(タフコン)

PCI-485220

LPC-485220

4852(12F4h) 2094h

Page 146: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

146

PCI-485220P

PCI-485230P 1515(05EBh) 0001h

PCI-485211

LPC-485211

PCI-485211P

4852(12F4h) 208Bh

PCI-485202

LPC-485202

PCI-485202P

4852(12F4h) 2082h

PCI-485340

PCI-485340P

4853(12F5h) 20A8h

PCI-485322

PCI-485322P

4853(12F5h) 2096h

PCI-485304

PCI-485304P

4853(12F5h) 2084h

PCI-485420P 4854(12F6h) 2094h

PCI-485230PU 4852(12F4h) 209Eh

デバイス型式 デバイス ID サブシステム ID

PEX-485120 4851(12F3h) 2C94h

PEX-485111 4851(12F3h) 2C8Bh

PEX-485102 4851(12F3h) 2C82h

PEX-485220 4852(12F4h) 2C94h

PEX-485211 4852(12F4h) 2C8Bh

PEX-485202 4852(12F4h) 2C82h

PEX-H485340

PEX-H485340P

4853(12F5h) 2CA8h

PEX-H485322

PEX-H485322P

4853(12F5h) 2C96h

PEX-H485304

PEX-H485304P

4853(12F5h) 2C84h

PEX-485420 4854(12F6h) 2C94h

PEX-H485220P 4852(12F4h) 2094h

PEX-H485940P

PEX-485910

4859(12FBh) 2CA8h

2C8Ah(車載)

Page 147: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

147

デバイス型式 デバイス ID サブシステム ID

CPZ-485340

CTP-485340

CPZ-485340P

4853(12F5h) 24A8h

CPZ-485322

CTP-485322

CPZ-485322P

4853(12F5h) 2496h

CPZ-485304

CTP-485304

CPZ-485304P

4853(12F5h) 2484h

CPZ-485220

CTP-485220

CPZ-485220P

CTP-485220P

4852(12F4h) 2494h

CPZ-485211

CTP-485211

CPZ-485211P

CTP-485211P

4852(12F4h) 248Bh

CPZ-485202

CTP-485202

CPZ-485202P

CTP-485202P

4852(12F4h) 2482h

CPZ-485420P 4854(12F6h) 2494h

デバイス型式 デバイス ID サブシステム ID

CBI-4851A

CBI-4851B

4851(12F3h) 0201h

CBI-4852A

CBI-4852B

4852(12F4h) 0201h

CBI-485120WA

CBI-485120WB

CSI-485120

4851(12F3h) 2894h

CBI-485220WA

CBI-485220WB

CSI-485220

4852(12F4h) 2894h

CSI-485420 4854(12F6h) 2894h

Page 148: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

148

4.3.10 CAN_PROFILE_DATA 構造体 CanSetProfile関数、CanGetProfile関数で指定する通信条件設定構造体です。

typedef struct {

unsigned long ulStartBit;

unsigned long ulBitCount;

unsigned long ulByteOrder;

unsigned long ulDataType;

} CAN_PROFILE_DATA, *PCAN_PROFILE_DATA;

メンバ 説明

ulStartBit 変換を開始するビット位置を指定します。範囲は 0~63 です。

ulBitCount 変換するデータサイズを指定します。範囲は 1~32 です。

ulDataType が CAN_DATATYPE_FLOAT のとき 32 ビット固定となります。

バイトオーダーを指定します。

ulDataType が CAN_DATATYPE_INTEGER8 のとき本パラメータは無効です。

識別子 値 内容

CAN_BYTEORDER_INTEL 1 Intel 形式(※)

CAN_BYTEORDER_MOTOROLA 2 Motorola 形式(※)

ulByteOrder

データ型を指定します。

識別子 値 内容

CAN_DATATYPE_INTEGER8 01h 8bit 整数型

CAN_DATATYPE_INTEGER16 02h 16bit 整数型

CAN_DATATYPE_INTEGER32 03h 32bit 整数型

CAN_DATATYPE_FLOAT 10h 32bit 実数型

(IEEE754 単精度浮動小数点数)

ulDataType

【備考】

バイトオーダーとは 2bytes 以上の幅(サイズ)を持つ数値のメモリに格納する順番のことです。

下位のバイトから順番に格納するものを Intel 方式(リトルエンディアン)、 上位のバイトから順

番に格納するものを Motorola 方式(ビッグエンディアン)といいます。

例) 12345678h のメモリ配置

リトルエンディアン

アドレス +0 +1 +2 +3

内容 78h 56h 34h 12h

ビッグエンディアン

アドレス +0 +1 +2 +3

内容 12h 34h 56h 78h

Page 149: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

149

4.4 戻り値一覧 4.4.1 デバイス制御用関数戻り値一覧

エラー識別子 値 意味 対処方法

IFCAN_ERROR_SUCCESS 0 正常終了 -

IFCAN_ERROR_NOT_READY C0000001h

(-1073741823)

現在ドライバを使用す

ることができません。

デバイスがちゃんと接続されて

いること、デバイスマネージャに

表示されていることを確認し実

行してください。 IFCAN_ERROR_INVALID_PARAMETER C0000003h

(-1073741821)

パラメータが不正です。 引数の値が不正です。 引数の値の範囲が指定範囲外で

す。 バッファを確保できま

せん。 確保しようとするバッファのサ

イズを下げてください。

IFCAN_ERROR_INSUFFICIENT_BUFFER C0000004h

(-1073741820)送信バッファの設定に

失敗しました。

少し時間を置いてから再送信し

てください。

IFCAN_ERROR_NOT_OPEN C0000005h

(-1073741819)

ポートがオープンされ

る前にクローズしよう

としました。

CanOpenPort 関数の実行中は、他

の関数を呼び出さないようにし

てください。 IFCAN_ERROR_MEMORY_NOTALLOCATED C0000006h

(-1073741818)

メモリ領域のコピーに

失敗しました。 ドライバの内部エラーです。どの

ような状況で発生したかご連絡

ください。 IFCAN_ERROR_BUFFER_IS_FULL C0000007h

(-1073741817)

バッファに空きがあり

ません。 送信バッファの空き容量以上の

データを送信しようとしました。

送信バッファサイズと、送信バッ

ファ内にあるデータ数を確認し

て、関数を実行してください。 IFCAN_ERROR_BUFFER_IS_EMPTY C0000008h

(-1073741816)

バッファが空です。 受信バッファ、エラーバッファが

空でないことを確認して、関数を

実行してください。 バスが有効時にしか実

行できない関数をバス

オフ時に実行しました。

バスオフ時にしか実行

できない関数をバスが

有効なときに実行しま

した。

バスの状態を確認後、関数を実行

してください。 IFCAN_ERROR_CANNOT_ACCESS C0000009h

(-1073741815)

周期送信データのバッ

ファ転送中です。 再度、周期送信データの設定を行

ってください。 IFCAN_ERROR_INVALID_HANDLE C000000Ah

(-1073741814)

デバイスハンドルが正

しくありません。 不正なデバイスハンドルで呼び

出しを行おうとしました。 CanOpenPort 関数で返されたデバ

イスハンドルを使用してくださ

い。 IFCAN_ERROR_NOT_SUPPORTED C000000Bh

(-1073741813)

サポートしていない機

能です。 サポートしていない機能を呼び

出そうとしました。

現在、周期送信中です。 周期送信を停止させてから関数

を実行してください。 IFCAN_ERROR_NOW_SENDING C000000Ch

(-1073741812)現在、データ送信中で

す。 データが送信完了してから関数

を実行してください。 IFCAN_ERROR_NULL_POINTTER C0000010h

(-1073741808)

引数に NULL ポインタが

指定されています。

有効なアドレスを指すポインタ

を指定してください。

()内の値は 10 進数で示した値です。

Page 150: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

150

4.4.2 プロファイル設定用関数戻り値一覧 エラー識別子 値 意味

IFCAN_ERROR_SUCCESS 0 正常終了

IFCAN_ERROR_INVALID_PARAMETER C0000003h

(-1073741821)

パラメータに誤りがあります。

IFCAN_ERROR_INSUFFICIENT_BUFFER C0000004h

(-1073741820)

パラメータに誤りがあります。

IFCAN_ERROR_PROFILE_NOT_FOUND C0004001h

(-1073725439)

指定したプロファイルは登録されていません。

IFCAN_ERROR_PROFILE_DATATYPE_MISMATCH C0004002h

(-1073725438)

指定した要素のデータ型が異なります。

IFCAN_ERROR_PROFILE_ITEM_NOT_FOUND C0004003h

(-1073725437)

指定したプロファイル要素は存在しません。

IFCAN_ERROR_PROFILE_ALREADY_EXISTS C0004004h

(-1073725436)

指定したプロファイルはすでに登録されています。

IFCAN_ERROR_INVALID_FILE_FORMAT C0004006h

(-1073725434)

指定した設定ファイルのフォーマットが不正です。

IFCAN_ERROR_CANT_ACCESS_FILE C0004007h

(-1073725433)

指定したファイルにアクセスできません。

()内の値は 10 進数で示した値です。

Page 151: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

151

4.5 テストドライバ 本ソフトウェアには、デバイスがなくてもドライバを動かすことができるテストドライバ機能がついて

おります。

テストドライバを使用する場合は、ifcan.so の代わりに ifcant.so をリンクし、コンパイルしてくださ

い。

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

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

関数 動作

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

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

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

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

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

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

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

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

ドライバデフォルトの通信設定が返されます。

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

ドライバデフォルトのフィルタ設定が返されます。

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

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

送信メッセージをドライバの受信バッファに格納しリターンします。

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

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

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

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

CanGetErrorEvent 常にエラー情報なしでリターンします。

CanGetCompletionMessage 常にメッセージなしでリターンします。

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

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

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

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

使用できるイベントは、CAN_EVENT_RECV イベントのみです。

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

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

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

Page 152: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

152

5 サンプルプログラム

サンプルプログラムは「インストールディレクトリ/gpg4851/(アーキテクチャ名)/linux/samples」に

ソースコード、Makefile を用意しています。

※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx, ETC-B016)

では sendrecv のみ使用できます。

【実行手順】

サンプルプログラムには実行形式のファイルが付属していません。

ソースコードをコンパイルして実行ファイルを生成してから、動作させてください。

サンプルプログラムディレクトリに移り、「make」を実行します。

#cd (インストールディレクトリ)/gpg4851/(アーキテクチャ名)/linux/samples/c/(サン

プルプログラム名) #make

5.1 canmon CAN バス上を流れるメッセージを取り込み、画面に表示するサンプルプログラムです。

コンパイル後、「canmon」を起動してください。

5.2 canmonfd CAN FD バス上を流れるメッセージを取り込み、画面に表示するサンプルプログラムです。

コンパイル後、「canmonfd」を起動してください。

5.3 send メッセージの送信を行うサンプルプログラムです。

コンパイル後、「send」を起動してください。

5.4 cyclic メッセージの周期送信を行うサンプルプログラムです。

コンパイル後、「cyclic」を起動してください。

5.5 receive メッセージの受信を行うサンプルプログラムです。

コンパイル後、「receive」を起動してください。

5.6 filter フィルタを設定し、メッセージの受信を行うサンプルプログラムです。

コンパイル後、「filter」を起動してください。

5.7 error エラー情報を取得するサンプルプログラムです。

コンパイル後、「error」を起動してください。

Page 153: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

153

5.8 multicyclic 周期送信を複数の周期で行うサンプルプログラムです。

100ms と 200ms の周期で一つのデバイスから周期送信を行います。

コンパイル後、「multicyclic」を起動してください。

5.9 sendrecv 「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx, ETC-B016)

用の送信と受信を行うサンプルプログラムです。

通信速度等の設定はデフォルト値を使用しています。

コンパイル後、「sendrecv」を起動してください。

5.10 sendrecvfd CAN FD メッセージの送受信を行うサンプルプログラムです。以下を行います。

1.標準フォーマットの ID13h のメッセージのみ受信するようにフィルタを設定

2.通信速度等の設定の取得と再設定。

3.ID13h,データ長 64byte の CAN FD メッセージを送信。

4.受信待機(約 30 秒でタイムアウト)。

コンパイル後、「sendrecvfd」を起動してください。

Page 154: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

154

6 ユーティリティ

以下、各ユーティリティの概要を説明します。

6.1 プロファイル設定プログラム(X Window 版) 「canutil」を起動してください。

プロファイル設定プログラムが起動します。

※一部のディストリビューションでは使用できないことがあります。

その場合は「6.2 プロファイル設定プログラム(コンソール版)」を使用してください。

起動直後にはプロファイルは設定されていない状態です。

既存のプロファイル設定ファイルからデータを読み出す場合、「File」メニューの「Open Profile」を

選択してください。

プロファイルの登録、修正、削除は「Edit」メニューから行います。

編集後は「File」メニューの「Save Profile」を選択し、プロファイルデータの保存を行ってください。

Page 155: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

155

【各メニューの説明】

メニュー 説明

Open File プロファイル設定ファイルから、プロファイルデータを読み出します。

メニューを選択するとファイルダイアログが表示され、オープンしたいプロ

ファイル設定ファイルを選択します。

プロファイルの読み出しに成功すると、プロファイルデータの一覧が画面に

表示されます。

なおファイルからの読み出しによって、直前まで設定されたプロファイルデ

ータは全てクリアされます。

Save File 現在編集中のプロファイルデータをファイルに保存します。

メニューを選択するとファイルダイアログが表示され、保存するファイル名

を入力します。

既存のファイルを入力した場合、上書き保存されます。

Add Profile プロファイルデータの追加を行います。

プロファイルダイアログの各設定を入力し、「OK」ボタンを押すとプロフ

ァイルの新規登録を行います。

プロファイルデータの各設定項目については、「プロファイルダイアログに

ついて」を参照ください。

Edit Profile プロファイルデータの修正を行います。

プロファイルダイアログの各設定を変更し、「OK」ボタンを押すとプロフ

ァイルの変更を行います。

Delete Profile プロファイルデータの削除を行います。

View Profile Bitmap プロファイルデータのビットマップを表示します。

各プロファイル要素のビット位置を図示します。

上段が 1 バイト目で、 下段が 8 バイト目になります。

表のセルの中にある番号は、要素番号を示します。

Version

Information

バージョン情報を表示します。

Page 156: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

156

【プロファイルダイアログの説明】

①「Name」エディットボックス

プロファイル名を入力します。64 文字まで入力することができます。

②「ID」エディットボックス

メッセージの ID を入力します。16 進数で入力します。

③「Items」リスト

登録されているプロファイル要素の一覧を表示します。

④「Start Bit」ドロップダウンリスト

変換を開始するビット位置を指定します。範囲は 0~63 です。

⑤「Bit Count」ドロップダウンリスト

変換するデータサイズを指定します。範囲は 1~64 です。

Page 157: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

157

⑥「Byte Order」ドロップダウンリスト

バイトオーダーを指定します。

項目 内容

Intel Intel 形式(※)

Motorola Motorola 形式(※)

バイトオーダーとは 2bytes 以上の幅(サイズ)を持つ数値のメモリに格納する順番のことです。

下位のバイトから順番に格納するものを Intel 方式(リトルエンディアン)、 上位のバイトから順

番に格納するものを Motorola 方式(ビッグエンディアン)といいます。

例) 12345678h のメモリ配置

リトルエンディアン

アドレス +0 +1 +2 +3

内容 78h 56h 34h 12h

ビッグエンディアン

アドレス +0 +1 +2 +3

内容 12h 34h 56h 78h

⑦「Data Type」ドロップダウンリスト

データ型を指定します。

項目 内容

Integer(8 bit) 8bit 整数型

Integer(16 bit) 16bit 整数型

Integer(32 bit) 32bit 整数型

Float(32 bit) 32bit 実数型

(IEEE754 単精度浮動小数点数)

⑧「Update」ボタン

選択されている要素の情報を更新します。

⑨「Add」ボタン

要素の追加を行います。

⑨「Delete」ボタン

要素の削除を行います。

Page 158: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

158

6.2 プロファイル設定プログラム(コンソール版) 「ccanutil」を起動してください。

プロファイル設定プログラムが起動します。

起動直後にはプロファイルは設定されていない状態です。

既存のプロファイル設定ファイルからデータを読み出す場合、「Open File」を選択してください。

プロファイルの登録は「Add Profile」、修正は「Edit Profile」、削除は「Delete Profile」メニュー

から行います。

編集後は「File」メニューの「Save File」を選択し、プロファイルデータの保存を行ってください。

【各メニューの説明】

メニュー 説明

Open File プロファイル設定ファイルから、プロファイルデータを読み出します。

メニューを選択するとファイルダイアログが表示され、オープンしたいプロ

ファイル設定ファイル名を入力します。

なおファイルからの読み出しによって、直前まで設定されたプロファイルデ

ータは全てクリアされます。

Save File 現在編集中のプロファイルデータをファイルに保存します。

メニューを選択するとファイルダイアログが表示され、保存するファイル名

を入力します。

既存のファイルを入力した場合、上書き保存されます。

Add Profile プロファイルデータの追加を行います。

プロファイルの各設定を入力し、「Exit」ボタンを押すとプロファイルの新

規登録を行います。

Edit Profile プロファイルデータの修正を行います。

プロファイルの一覧が表示されますので、修正を行うプロファイルを選択

し「Select」ボタンを押します。

プロファイルの各設定を変更し、「Exit」ボタンを押すとプロファイルの変

更を行います。

Delete Profile プロファイルデータの削除を行います。

プロファイルの一覧が表示されますので、削除を行うプロファイルを選択

して「Select」ボタンを押します。

Page 159: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

159

6.3 自己診断プログラム 本製品には、動作不具合時の原因がハードウェア的なものか、ソフトウェア的なものかを用意に判断す

るための自己診断プログラム(candiag)が付属しています。自己診断プログラムを用いて動作確認を行

ってください。

※ 「Intel PCH EG20T」のCANコントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx, ETC-B016)

では使用できません。

※ PCI-485230PU では使用できません

【使用機材】

型式 使用する機材

PCI-485111

PCI-485211

LPC-485111

LPC-485211

CPZ-485211

CTP-485211

PEX-485111

PEX-485211

PCI-485110

・CAN デバイス

上記以外のデバイス ・CAN デバイス

・接続ケーブル

・チャンネル間をつなぐケーブル(または端子台)

【実行手順】

1. PCI/LPC-485111、PCI/LPC-485211、CPZ/CTP-485211、PCI-485110、PCI-485230P の診断を行う場合、

デバイスからケーブルを外しておきます。

それ以外のデバイスの診断を行う場合、デバイスに接続ケーブルを接続し、チャンネル間で通信で

きる状態にします。(2CH のデバイスは CH1 と CH2、4CH のデバイスは CH1 と CH2、CH3 と CH4 をケー

ブルで接続します)

2. 「candiag」を実行します。

3. 検査開始の確認メッセージが表示されますので、リターンキーを押してください。

4. 自動的に各項目の診断が行われ、結果が表示されます。

5. 自己診断結果はファイルに保存することができます。保存する場合は「y」キーを押し、ファイル名

を入力してください。

Page 160: GPG-4851 · GPG-4851は、Linuxアプリケーションから弊社CANインタフェースモジュールを制御する為のソフト ウェアです。 本ドキュメントは、Linux上でGPG-4851を使用するための情報を掲載しています。

GPG-4851 Help for Linux

© 2003 Interface Corporation.

160

7 重要な情報

保証の内容と制限

弊社は本ドキュメントに含まれるソースプログラムの実行が中断しないこと、またはその実行に誤りが

無いことを保証していません。

本製品の品質や使用に起因する、性能に起因するいかなるリスクも使用者が負うものとします。

弊社はドキュメント内の情報の正確さに万全を期しています。万一、誤記または誤植などがあった場合、

弊社は予告無く改訂する場合があります。ドキュメントまたはドキュメント内の情報に起因するいかな

る損害に対しても弊社は責任を負いません。

ドキュメント内の図や表は説明のためであり、ユーザ個別の応用事例により変化する場合があります。

著作権、知的所有権

弊社は本製品に含まれるおよび本製品に対する権利や知的所有権を保持しています。

本製品はコンピュータ ソフトウェア、映像/音声(例えば図、文章、写真など)を含んでいます。

医療機器/器具への適用における注意

弊社の製品は人命に関わるような状況下で使用される機器に用いられる事を目的として設計、製造され

た物では有りません。

弊社の製品は人体の検査などに使用するに適する信頼性を確保する事を意図された部品や検査機器と

共に設計された物では有りません。

医療機器、治療器具などの本製品の適用により、製品の故障、ユーザ、設計者の過失などにより、損傷

/損害を引き起こす場合が有ります。

複製の禁止

弊社の許可なく、本ドキュメントの全て、または一部に関わらず、複製、改変などを行うことはできま

せん。

責任の制限

弊社は、弊社または再販売者の予見の有無にかかわらず発生したいかなる特別損害、偶発的損害、間接

的な損害、重大な損害について、責任を負いません。

本製品(ハードウェア,ソフトウェア)のシステム組み込み、使用、ならびに本製品から得られる結果に

関する一切のリスクについては、本製品の使用者に帰属するものとします。

本製品に含まれるバグ、あるいは本製品の供給(納期遅延)、性能もしくは使用に起因する付帯的損害

もしくは間接的損害に対して、弊社に全面的に責がある場合でも、弊社はその製品に対する改良(正常

に動作する)、代品交換までとし、金銭面での賠償の責任は負わないものとしますので、予めご了承く

ださい。

本製品(ソフトウェアを含む)は、日本国内仕様です。本製品を日本国外で使用された場合、弊社は一

切責任を負いかねます。また、弊社は本製品に関し、海外での保守サービスおよび技術サポート等は行

っておりません。

商標/登録商標

本書に掲載されている会社名、製品名は、それぞれ各社の商標または登録商標です。