GPC-4851
CAN インタフェースモジュール用 Windows ドライバ
目 次
第 1 章 はじめに
3
1.1 概要 ...3 1.2 特長 ...3第 2 章 製品仕様
4
2.1 基本仕様 ...4 2.2 対応型式 ...5 2.3 製品構成 ...8 2.4 注意事項 ...11第 3 章 導入方法
13
3.1 インストール手順 ...13 3.2 CBI・CSI シリーズの同一型式複数枚使用 ...13 3.3 実行手順 ...14 3.4 インタフェースモジュール固有情報 ...21 3.5 クラスライブラリの参照方法 ...24第 4 章 リファレンス
27
4.1 関数一覧 ...27 4.2 関数個別説明 ...31 4.3 構造体説明 ...310 4.4 戻り値一覧 ...346第 5 章 サンプルプログラム
348
5.1 canmon ...349 5.2 canmonfd ...351 5.3 send ...351 5.4 cyclic ...351 5.5 receive ...351 5.6 filter ...351 5.7 error ...351 5.8 multicyclic ...351 5.9 sendrecv ...352 5.10 sendrecvfd ...352第 6 章 ユーティリティ
353
6.1 プロファイル設定プログラム ...353 6.2 自己診断プログラム ...357第1章 はじめに
1.1 概要
GPC-4851 は、Windows 上のアプリケーションから、弊社 CAN インタフェースモジュールを制御す る為のソフトウェアです。 弊社 CAN インタフェースモジュールを Windows 上のアプリケーションから DLL をダイナミックリ ンクし、API をコールすることにより制御します。 本ドキュメントは、Windows 上で GPC-4851 を使用するための情報を掲載しています。1.2 特長
●CAN プロトコル Version 2.0B/CAN FD(アクティブ)に対応しています。
アプリケーションでは CAN プロトコルを意識することなく、メッセージの送受信が行えます。 ●各ポート独立に制御することが可能です。(通信速度、その他のパラメータ等) ●送受信データをメッセージ単位で扱えますので、プログラムの作成が容易です。 ●デバイスドライバ内部にバッファを用意することで、アプリケーションの処理が遅れた場合の オーバーランエラー発生の確率を低減しています。 ●CAN 製品の自己診断を行うプログラム、モニタ用プログラムが付属しています。 ●通信されるデータのフォーマットを予め登録しておくことで、データフィールドを様々な型や サイズに変換することができます。(※1) ●データの変換フォーマットを設定するユーティリティが付属しています。 ●指定したデータを周期的に送信することができます。(※2) ●データを送信する前にディレイ時間を挿入することができます。(※2) ●1 つのチャンネルから複数のメッセージを周期送信することができます。(※3) (※4) ●タイマカウンタを使用して、割り込みを発生させることができます。(※3) ※1 CAN2.0B 通信時にご利用いただけます。 ※2 高機能版、バスマスタ版 CAN 製品で対応しています。 ※3 複数同期送信版、CAN FD 版 CAN 製品で対応しています。 ※4 高機能版、バスマスタ版では1メッセージのみ周期送信できます。
第2章 製品仕様
2.1 基本仕様
CAN Ver.2.0B(アクティブ) ISO11898 拡張フレームを用いた通信が可能 対応プロトコル CAN FD CAN FD 60kbps~1Mbps(データフェーズのみ最大 5Mbps) 高速 CAN 60kbps~1Mbps 通信速度 低速 CAN 40kbps~125kbps 送信バッファサイズ 64 メッセージ(最小) (※1) 受信バッファサイズ 64 メッセージ(最小) (※1) エラーバッファサイズ 64 件(最小) (※1) 検出可能なエラーの種類 ・ビットエラー ・フォームエラー ・ビットスタッフエラー ・その他エラー エラーが発生したフレームは、バッファには格納され ません。 最大使用ポート数 255 (※2) ※1 最大サイズは、環境(使用可能な空きメモリ)に依存します。 ※2 同一型式のデバイスは最大 16 枚まで使用可能です。ただし、型式内の数字が同じものは同 一型式とみなします。例えば CBI-4851A と CBI-4851B は同一型式とみなし、最大使用可能枚数 は両型式合わせて 16 枚までとなります。
CAN FD 版 CAN 製品などの CAN FD 通信製品は、CAN コントローラのシステムクロックが異なりま す。そのため、設定値によっては CAN 通信製品と同じ通信速度とはならないことがあります。 (例)
CAN 通信製品 :24MHz / 400 = 60kbps CAN FD 通信製品 :40MHz / 666 = 60.060kbps
2.2 対応型式
PCI シリーズ(PCI バス製品) スタンダード版 PCI-485120、PCI-485111、PCI-485102、PCI-485110 高機能版 PCI-485220、PCI-485211、PCI-485202、 PCI-485220P、PCI-485211P、PCI-485202P、PCI-485230P バスマスタ版 PCI-485340、PCI-485322、PCI-485304、 PCI-485340P、PCI-485322P、PCI-485304P 複数周期送信版 PCI-485420P LPC シリーズ(LowProfilePCI バス製品) スタンダード版 LPC-485120、LPC-485111、LPC-485102 高機能版 LPC-485220、LPC-485211、LPC-485202 PEX シリーズ(PCIExpress バス製品) スタンダード版 PEX-485120、PEX-485111、PEX-485102 高機能版 PEX-485220、PEX-485211、PEX-485202 PEX-H485220P バスマスタ版 PEX-H485340、PEX-H485322、PEX-H485304、 PEX-H485340P、PEX-H485322P、PEX-H485304P 複数周期送信版 PEX-485420 CAN FD 版 PEX-H485940P CPZ シリーズ(CompactPCI バス製品) 高機能版 CPZ-485220、CPZ-485211、CPZ-485202、 CPZ-485220P、CPZ-485211P、CPZ-485202P バスマスタ版 CPZ-485340、CPZ-485322、CPZ-485304、 CPZ-485340P、CPZ-485322P、CPZ-485304P 複数周期送信版 CPZ-485420P CTP シリーズ(CompactPCI バス製品) 高機能版 CTP-485220、CTP-485211、CTP-485202、 CTP-485220P、CTP-485211P、CTP-485202P バスマスタ版 CTP-485340、CTP-485322、CTP-485304 CSI シリーズ(CardBus 製品) スタンダード版 CSI-485120 高機能版 CSI-485220 複数周期送信版 CSI-485420CBI シリーズ(CardBus 製品) スタンダード版 CBI-4851A、CBI-4851B、CBI-485120WA、CBI-485120WB 高機能版 CBI-4852A、CBI-4852B、CBI-485220WA、CBI-485220WB Classembly Devices®(温度拡張版小型タッチパネル) スタンダード版 TPC-B016SA08(S)、TPC-B016SA10(S)、TPC-B016SA12(S) TPC-B016SB08(S)、TPC-B016SB10(S)、TPC-B016SB12(S) ※仕様に制限があります。詳しくは各関数の説明を参照してください。 Classembly Devices®(省エネ温度拡張モデル) スタンダード版 ETC-B016(S) ※仕様に制限があります。詳しくは各関数の説明を参照してください。 Classembly Devices®(車載) EBC-A013、EBC-A013(S)、EBC-A113(S)、EBC-A213(S)、EBC-A313、 EBC-A313(S)、EBC-A413、EBC-A413(S)、EBC-A513、EBC-A513(S)、 EBC-A613、EBC-A613(S)、EBC-A713、EBC-A713(S)、EBC-A813、 EBC-A813(S)、ETC-A013(S)、ETC-A113(S)、ETC-A113T(S)、ETC-A213、 ETC-A213(S)、ETC-A313、ETC-A313(S)、ETC-A413、ETC-A413(S)、 ETC-A413T(S)、ETC-A513、ETC-A513(S)、ETC-A613、ETC-A613(S)、 ETC-A713、ETC-A713(S)、ETC-A713T(S)、ETC-A813、ETC-A813(S)、 ETC-A913(S)、ETC-H613、ETC-H613(S)、ETC-H713(S)、ETC-H813(S)、 ETC-H913(S)、ETC-D016(S)、ETC-D116(S)、ETC-D216(S) スタンダード版 ETC-F019(x)、ETC-E017(x)、ETC-D016(x)、SEC-D019(x) ETC-F919(x)、ETC-E917(x)、ETC-D916(x)、SEC-D919(x) x は、OS によって異なります。 Classembly Devices®(タフコントローラ) ITC-A81310(S)、ITC-A71310T(S)、ITC-A61310(S) スタンダード版
ITC-x3620(y), ITC-x3624(y), ITC-x3625(y), ITC-x2984(y) ITC-x7428(y), ITC-x4874(y), ITC-x4005(y), ITC-x4006(y) ITC-x4007(y), ITC-x5537(y), ITC-x5538(y), ITC-x3623(y) ITC-x8821(y)
※x は、ベースとなる CPU 部分によって異なります。 ※y は、OS によって異なります。
Classembly Devices®(I/O 付きタッチパネル) スタンダード版 TIO-N4005x(y)、TIO-N4006x(y) ※x は、液晶サイズによって異なります。 ※y は、OS によって異なります。 高機能版 TIO-C4855x(S) ※x は、液晶サイズによって異なります。 Classembly Devices®(エコ/エコ2/エコ3) ECC-8S15(W7)A20
ECC-E011C(x), ECC-E011E1(x), ECC-E011E4(x) ※x は、OS によって異なります。 スタンダード版 ECC-E411(S), ECC-E526(S7) 高機能版 ECC-8S15(W7)A34 Classembly Devices®(マザコン) スタンダード版 IMC-T4003(x), IMC-T4004(x) ※x は、OS によって異なります。 高機能版 IMC-T4857(x) ※x は、OS によって異なります。
2.3 製品構成
製品構成 ファイル名 説明 弊社管理用ファイル GPC4851.VER 弊社ソフトウェア管理用ファイル 最新情報ドキュメント README.HTM 最新ドキュメント掲載ファイル インストールプログラム SETUP.EXE インストール用ファイル 設定プログラム CANUTIL.EXE プロファイル設定用プログラム 自己診断プログラム DIAGCAN.EXE 自己診断プログラム サンプルプログラム(CAN) CANMON CAN バスモニタサンプルプログラム CANMONFD CAN FD バスモニタサンプルプログラム CYCLIC 周期送信サンプルプログラム ERROR エラー情報取得サンプルプログラム FILTER フィルタ設定サンプルプログラム MULTICYCLIC 周期送信サンプルプログラム RECEIVE 受信サンプルプログラム SEND 送信サンプルプログラム SENDRECV 送受信プログラム Visual C++ SENDRECVFD CAN FD メッセージ送受信プログラム CANMON CAN バスモニタサンプルプログラム CANMONFD CAN FD バスモニタサンプルプログラム CYCLIC 周期送信サンプルプログラム ERROR エラー情報取得サンプルプログラム FILTER フィルタ設定サンプルプログラム MULTICYCLIC 周期送信サンプルプログラム RECEIVE 受信サンプルプログラム SEND 送信サンプルプログラム SENDRECV 送受信プログラム Visual Basic SENDRECVFD CAN FD メッセージ送受信プログラム CANMON CAN バスモニタサンプルプログラム CYCLIC 周期送信サンプルプログラム ERROR エラー情報取得サンプルプログラム FILTER フィルタ設定サンプルプログラム MULTICYCLIC 周期送信サンプルプログラム RECEIVE 受信サンプルプログラム SEND 送信サンプルプログラム DelphiRECEIVE 受信サンプルプログラム
SEND 送信サンプルプログラム
SENDRECV 送受信プログラム
SENDRECVFD CAN FD メッセージ送受信プログラム IFCCAN Visual C# .NET 用クラスライブラリ IFCCANPF Visual C# .NET 用クラスライブラリ CANMON CAN バスモニタサンプルプログラム CANMONFD CAN FD バスモニタサンプルプログラム CYCLIC 周期送信サンプルプログラム ERROR エラー情報取得サンプルプログラム FILTER フィルタ設定サンプルプログラム MULTICYCLIC 周期送信サンプルプログラム RECEIVE 受信サンプルプログラム SEND 送信サンプルプログラム SENDRECV 送受信プログラム SENDRECVFD CAN FD メッセージ送受信プログラム IFCCAN Visual Basic .NET 用クラスライブラリ Visual Basic .NET
IFCCANPF Visual Basic .NET 用クラスライブラリ RECEIVE 受信サンプルプログラム Visual C++ CLR SEND 送信サンプルプログラム IFCAN.DLL ダイナミックリンクライブラリファイル IFCANPF.DLL プロファイル用ダイナミックリンクライブラリフ ァイル IFCAN.LIB インポートライブラリファイル IFCANPF.LIB プロファイル用インポートライブラリファイル DLL MSVCRT.DLL C ランタイム共有 DLL
CP485X.SYS (製品型式毎) ドライバファイル XXXX.INF (製品型式毎) ドライバインストールファイル デバイスドライバ XXXX.SLD (製品型式毎) Windows Embedded 用ドライバ SLD ファイル IFCAN.H Visual C++ 用ヘッダファイル IFCANPF.H Visual C++ 用ヘッダファイル(プロファイル DLL) IFCAN.BAS Visual Basic 用ヘッダファイル
IFCANPF.BAS Visual Basic 用ヘッダファイル(プロファイル DLL) IFCAN.PAS Delphi 用ヘッダファイル
ヘッダファイル
IFCANPF.PAS Delphi 用ヘッダファイル(プロファイル DLL)
Help HELP.PDF Help(PDF 形式)
※Visual C# .NET,Visual Basic.NET 用サンプルプログラムは、それぞれ Viausl C# .NET 2003, Visual Basic .NET 2003 を使用して作成しています。
※Visual C++ CLR プロジェクト用サンプルプログラムは、Visual C++ 2005 を使用して作成して います。
2.4 注意事項
2.4.1 「Intel PCH EG20T」の CAN コントローラを搭載した製品の仕様制限について
TPC-B016SAxx, TPC-B016SBxx,ETC-B016では以下の仕様制限があります。 使用できる機能 ・オープン・クローズ(CanOpenPort、CanClosePort) デバイス名はIFCAN0になります。 オープン時に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)
2.4.2 CAN FD 版 CAN 製品の仕様について
CAN FD版CAN製品はCANコントローラが弊社CAN通信製品と異なるため、仕様が一部異なります。 1. アクセプタンスフィルタ フィルタの対象は ID のみです。受信メッセージに対するフィルタは設定できません。 また、標準フレーム時のフィルタ対象は ID.0~10 となります。 2. エラーワーニングリミットの設定 設定可能範囲は 8, 16, 24,…,128 です。 3. コントローラのシステムクロックCAN FD 版 CAN 製品などの CAN FD 通信製品は、CAN コントローラのシステムクロックが異なりま す。そのため、設定値によっては CAN 通信製品と同じ通信速度とはならないことがあります。 (例) CAN 通信製品 :24MHz / 400 = 60kbps CAN FD 通信製品 :40MHz / 666 = 60.060kbps CAN 通信製品は 24MHz、CAN FD 通信製品は 40MHz のシステムクロックの分周となります。 4. CAN メッセージと CAN FD メッセージの同時使用 CAN 通信、CAN FD 通信は同時に使用することができます。ただし、同時に使用した場合、送受信 のタイミングは補償できません。 (例) CanSendMessage CanSendMessageFD CanSendMessage CanSendMessageFD 上記のように交互に実行した場合、送信順序は一定になりません。 5. 送信、受信エラーカウンタのクリア 個別にクリアを行うことはできません。CanClearBuffer 関数で CAN_CLEAR_TXERR もしくは CAN_CLEAR_RXERR いずれかを指定した場合、送信エラーカウンタと受信エラーカウンタの両方が クリアされます。 6. モニタモード モニタモードで使用する場合、同一のバス上へ ACK を返すノードが必要です。そのため、送信す るノードのほかに、受信するノードをバス上に配置している場合にモニタモードを使用できます。 受信ノードがバス上にいない(ACK を返すノードがいない)場合、モニタモードのノードはメッセ ージを受信しません。
第3章 導入方法
3.1 インストール手順
README.HTM のインストール方法を参照してください。3.2 CBI・CSI シリーズの同一型式複数枚使用
CBI・CSIシリーズの同一型式を複数枚使用する場合、ドライバインストール後に『カードバスID 設定ユーティリティ』を使用して、製品ごとに異なるID番号を設定します。このID番号により、 それぞれのカードを識別してください。3.3 実行手順
3.3.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関数で、送信が完了したメッセージを取得し ます。 送信バッファ内では、送信完了メッセージ数はカウントされません。未送信メッセージのみがカ ウントされます。 CanSendMessage 関数により、5 つのメッセ ージを送信バッファに挿入した場合。 送信バッファ内の 3 つのメッセージ が送信完了した場合。 送信バ 送信 バッ
送信バッファはリングバッファになっており、未送信メッセージが送信バッファを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関数で取得できないステータスがあります。また、CanGetErrorEvent関数で エラーの情報を取得することができません。 6.コールバック関数 各種割り込み発生時にコールバック関数を実行することができます。 CanSetEventMask関数にて、コールバック関数・メッセージを実行したい要因を設定します。 CanSetEvent関数でコールバック関数・メッセージの登録を行います。
※「Intel PCH EG20T」の CAN コントローラを搭載した製品(TPC-B016SAxx, TPC-B016SBxx,ETC-B016) ではコールバック関数を使用できません。
7.終了処理
CanClosePort関数でCANインタフェースの終了処理を行います。アプリケーションでは、必ずクロ ーズ処理を行ってから終了してください。
3.3.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関数で、送信が完了したメッセージを取 得します。 送信バッファ内では、送信完了メッセージ数はカウントされません。未送信メッセージのみがカ ウントされます。 未送信メッセージ 未送信メッセージ CanSendMessageFD 関数により、5 つのメッ セージを送信バッファに挿入した場合。 送信バッファ内の 3 つのメッセージ が送信完了した場合。 送信バ ッ 送信 バッ
送信バッファはリングバッファになっており、未送信メッセージが送信バッファを1周すると、 送信完了メッセージを上書きしてしまいますのでご注意ください。 未送信メッセージ 未送信メッセージ 未送信メッセージ 未送信メッセージ 未送信メッセージ 送信完了メッセージ 送信完了メッセージ 送信完了メッセージ 未送信メッセージ 未送信メッセージ 未送信メッセージ 未送信メッセージ 未送信メッセージ 送信完了メッセージ 送信完了メッセージ 未送信メッセージ 未送信メッセージが送信バッファの 最後まで挿入され、さらに挿入しよ うとすると・・・ リングバッファなので、次に挿入さ れるメッセージが、送信完了メッセ ージを上書きしてしまいます。 送信バ ッ フ ァ 送信バ ッ フ ァ 未送信メッセージ 未送信メッセージ 送信完了メッセージ 送信完了メッセージ 送信完了メッセージ 送信バ ッ フ ァ この時点で、CanSendMessageFD 関数 により、4 つのメッセージを送信バ ッファに追加するとします。 また、送信完了メッセージは、送信バッファサイズを変更するとクリアされますので、送信完了 メッセージを全て取り出してから、送信バッファサイズを変更するようにしてください。 4.メッセージ受信 メッセージ受信は自動的に行われ、デバイスドライバ内部のバッファに蓄えられます。 CanReceiveMessageFD関数はこのバッファから受信メッセージを取り出します。 5.動作状態モニタリング CanGetStatusFD関数で動作状態のステータスをモニタリングします。 また、CanGetErrorEvent関数で、CANバス上で発生したエラーの情報を取得することが出来ます。 6.コールバック関数 各種割り込み発生時にコールバック関数を実行することができます。 CanSetEventMask関数にて、コールバック関数・メッセージを実行したい要因を設定します。 CanSetEvent関数でコールバック関数・メッセージの登録を行います。 7.終了処理 CanClosePort関数でCANインタフェースの終了処理を行います。アプリケーションでは、必ずクロ ーズ処理を行ってから終了してください。
3.3.3 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 CanGetStatusFD3.3.4 プロファイルの使用
通信されるデータのフォーマットを予め登録しておくことで、データフィールドを様々な型やサ イズに変換することができます。その変換するためのデータフォーマットのことを、GPC-4851 で は「プロファイル」と呼び、CAN メッセージに対して使用できます。 1.プロファイルの設定/登録 プロファイルを使用するには、予めプロファイルを設定し、プロファイル用DLL内に登録する必要 があります。その設定、および登録を、CanSetProfile関数で行います。また、CanGetProfile関 数にて、登録されているプロファイルを取得することができます。 不必要なプロファイルは、CanDeleteProfile関数で、プロファイル用DLL内から削除することもで きます。 プロファイル設定プログラムでも、プロファイルの設定は可能です。プロファイル設定プログラ ムで設定したプロファイルはテキストファイルとして保存できますので、保存したファイルをプ ロファイル用DLL内に読み込み、使用することもできます。 2.プロファイルによる変換 生のデータ( CANバス上でやりとりされるデータ)から、指定した型に変換する関数は、 CanApplyProfile 関 数 、 CanApplyProfileInteger 関 数 、 CanApplyProfileFloat 関 数 、 CanApplyProfileDouble関数の 4 つがあります。 いずれの関数も、引数として受信データ( CAN_MESSAGE構造体)を渡します。プロファイル用DLL 内に登録されているプロファイルを検索し、渡された受信データのIDに一致するプロファイルを 適用し、データの変換を行います。CanApplyProfile関数は、適用されるプロファイルの要素全て に 対 し 変 換 を 行 い ま す が 、 CanApplyProfileInteger 関 数 、 CanApplyProfileFloat 関 数 、 CanApplyProfileDouble関数は、適用されるプロファイルの指定した要素のみ、それぞれ 32 ビッ ト 整 数 値 、 32 ビ ッ ト 実 数 値 、 64 ビ ッ ト 実 数 値 に 変 換 し ま す ( Visual Basic で は CanApplyProfileInteger関数、CanApplyProfileFloat関数、CanApplyProfileDouble関数のみ使用 できます)。 生データの変換に関する概念を下図に示します。 C A N バ ス CAN カード CanReceiveMessage 関数 CanApplyProfile 関数, CanApplyProfileInteger 関数, CanApplyProfileFloat 関数, CanApplyProfileDouble 関数 デー タ 受信 生デー タ 変換 後 デ ータ取得 32 ビット整数値 32 ビット実数値 ・ ・ ・ データ変換時、生データのデータ長を越えたデータは、0 埋めして変換を行います。例えば、デ ータ長が 5(ulLength が 5)の場合、bData[5]、bData[6]、bData[7]は 0 として変換します。 CanQueryProfile関数は、受信データのIDに一致するプロファイル番号を返します(データの変換 は行いません)。3.プロファイルの保存/読み込み
設定したプロファイルは、テキストファイルとして保存することができます。CanSaveProfile関 数で、プロファイルを保存し、CanLoadProfile関数で、テキストファイルからプロファイル用DLL 内に読み込みます。
3.4 インタフェースモジュール固有情報
本ソフトウェアは、弊社 PCI/CompactPCI CAN デバイスに共通なソフトウェアですが、下記に示す インタフェースモジュールについてはインタフェースモジュール固有の使用方法、または専用の 関数が用意されています。3.4.1 PCI-485230PU 固有情報
弊社ソルコン製品,弊社 I/O タッチパネル CD シリーズに搭載されている CAN の型式です。 使用できる関数、一部機能に制限があります。 ●デバイスオープン・クローズの順番について 複数 CH を同時に使用する場合、例えば以下のようにCAN デバイス(CH1)→CAN デバイス(CH2)→CAN デバイス(CH3)の順番でオープンした場合、 CAN デバイス(CH3)→CAN デバイス(CH2)→CAN デバイス(CH1)の順番でクローズしてください。
●複数の I/O 機能を同時に制御する場合 本製品を使用する際、複数 CH で同時に受信処理を行うなど、複数の I/O 機能を同時に制御する 場合、パフォーマンスに影響が出ることがあり、受信メッセージを正常に受信出来ないなど、 I/O 機能に影響が発生する場合があります。 複数 CH で同時に受信する場合は、 ・送信メッセージ間隔に余裕を持たせることで受信処理の間隔を空ける ・ボーレートを変更して受信間隔に間を空ける ・受信処理中にステータスポーリングを行なわない など、I/O 処理の重複が連続しないように制御を行なってください。 例)複数 CH で同時にメッセージを受信した場合、I/O の処理が連続してしまうため、I/O の処 理頻度を下げるために送信側のディレイ時間(CAN_MESSAGE 構造体の ulTime メンバーの設定 値)を空ける必要があるため、以下のような差が出ます。 ※下記は、複数の I/O を同時に実行する場合の一例であり、環境やプログラムの実装方法によ っては、下記パフォーマンスが出ない場合がございます。 <CH1 のみでメッセージを受信した場合> ボーレート データ長 受信件数 送信側のディレイ時間[us] 64 256 1Byte 1024 64 256 125KBps 8Byte 1024 0 64 256 1Byte 1024 64 256 1MBps 8Byte 1024 30
<CH1+CH2 で同時にメッセージを受信した場合> ボーレート データ長 受信件数 送信側のディレイ時間[us] 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 で同時にメッセージを受信した場合> ボーレート データ長 受信件数 送信側のディレイ時間[us] 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 ●CAN バス上のエラーが発生する場合 本製品を使用する際、ケーブルを未接続でメッセージの送信を行うなど、CAN バス上のエラー が短い周期で発生する場合、システムの負荷が上がり USB デバイスとの通信に失敗する場合が あります。その場合には、下記の設定を変更してください。
・CanSetFifoTrigger 関数で dwTriggerValue を 3 (CAN_TRIGGER_48)に変更する。 ・CanSetFifoTrigger 関数で dwFifoTimeout の値を大きくする。
・CanOpenPort ・CanClosePort ・CanActivate ・CanDeactivate ・CanSetConfig ※FIFO 送信モードしか使用出来ません。 ・CanSetAcceptanceFilter ・CanSetFifoTrigger ※受信 FIFO の設定を行なう場合、トリガ値は 0 固定です。 エラーFIFO の設定を行なう場合、トリガ値は、2 または 3 のみ指定出来ます。 エラーFIFO のトリガ値は、2(CAN_TRIGER_32)が初期値です。 ・CanGetConfig ・CanGetAcceptanceFilter ・CanGetFifoTrigger ・CanSendMessage ・CanCyclicSendMessage ・CanStopCyclicSendMessage ・CanReceiveMessage ・CanGetStatus ・CanGetErrorEvent ・CanClearBuffer ・CanGetPortInformation ※リビジョン ID は不定値となります。 ・CanSetEvent ・CanSetEventMask ・CanGetEventMask ・CanKillEvent
3.5 クラスライブラリの参照方法
本製品では、クラスライブラリのソースファイルを用意しています。 ソースコードをビルドしてクラスライブラリを生成し、参照することで、DLL 関数の定義を容易 にすることができます。 (DLL 関数の呼び出しをカスタマイズしたい場合は、クラスライブラリのソースを参照してくだ さい) 本製品には、デバイス制御用クラスライブラリ IFCCAN.dll、プロファイル設定用クラスライブラ リ IFCCANPF.dll の 2 種類のクラスライブラリが存在します。 クラスライブラリ 内容 IFCCAN.dll デバイス制御用クラスライブラリ。 IFCCANPF.dll プロファイル設定用クラスライブラリ。 (IFCCANPF は、IFCCAN を参照しています) 以下の「1. クラスライブラリの作成方法」、「2. クラスライブラリの参照」には、IFCCAN.dll に ついて記載しております。IFCCANPF.dll をご使用の場合は、IFCCAN を IFCCANPF に読み換えてご 利用ください。 1. クラスライブラリの作成方法 .NET, C++ CLR プロジェクトにおいて DLL 関数を呼び出すには、まずクラスライブラリを用意する 必要があります。 Visual C# .NET の場合 Visual Studio を起動し、以下のプロジェクトファイルを開きます。 <インストール先>¥interface¥GPC4851¥samples¥CS_NET¥IFCCAN¥IFCCAN.csproj このプロジェクトをビルドすると、bin フォルダにクラスライブラリ IFCCAN.dll が作成されます。Visual Basic .NET の場合
Visual Studio を起動し、以下のプロジェクトファイルを開きます。
<インストール先>¥interface¥GPC4851¥samples¥VB_NET¥IFCCAN¥IFCCAN.vbproj
このプロジェクトをビルドすると、bin フォルダにクラスライブラリ IFCCAN.dll が作成されます。
※Visual C# 2005 の場合は「*.csproj」ファイルを、Visual Basic 2005 の場合は「*.vbproj」フ ァイルを、それぞれ Visual Stdio 変換ウィザードで、プロジェクトの変換を行ってからビルド してください。
※C++ CLR プロジェクトの場合、Visual C# .NET または Visual Basic .NET のクラスライブラリ を上記作成方法で作成してください。
2. クラスライブラリの参照 Visual Studio のメニューの「プロジェクト」の「参照の追加」を選択してください。 「参照」ボタンをクリックして参照したいクラスライブラリ DLL を指定します。 例) <インストール先>¥interface¥GPC4851¥samples¥CS_NET¥IFCCAN¥bin¥Release¥ifccan.dll <インストール先>¥interface¥GPC4851¥samples¥VB_NET¥IFCCAN¥bin¥Relaase¥ifccan.dll 「選択されたコンポーネント」に指定した DLL が表示されます。 「OK」ボタンをクリックすると設定は完了です。 次にソースのヘッダで各言語毎に下記のように InterfaceCorpDllWrap の名前空間を追加すれば DLL 関数を次章の「使用例」の方法で呼び出すことができるようになります。 Visual C# .NET の場合 using InterfaceCorpDllWrap;
Visual Basic .NET の場合 Imports InterfaceCorpDllWrap
Visual C++ CLR プロジェクトの場合 using namespace InterfaceCorpDllWrap
※ Visual C# .NET または Visual Basic .NET のクラスライブラリを参照してください。 本文書では Visual C# .NET のクラスライブラリを参照した場合のコードを記載しています。
3.5.1 注意事項
1. 構造体について
StructLayout クラスのオプションに「LayoutKind.Sequential」を指定しています。
2. IFCCANPF について
IFCCANPF は、IFCCAN を参照しているため、IFCCANPF をご使用の場合は、IFCCAN.dll も参照する 必要があります。 3. 非同期処理で参照渡しする変数について 各関数はアンマネージ関数です。 非同期処理を使用する際は、ガーベジコレクションによりメモリの開放・移動があるタイミング で発生します。それにより関数内で保持しているポインタと、アプリケーション内での変数のポ インタでずれが発生し、メモリ破壊が発生する可能性があります。 下記の対策例のように対策してください。 □対象となる関数 CanSetEvent 関数、Callback 関数 □対策例 CanSetEvent 関数の使用例を参照してください。
4. (x86 専用)の定義
(x86 専用)の定義は以前のバージョンとの互換性のために残されています。
新たにアプリケーションを作成される場合には、(x86、x64 共用)の定義をご使用下さい。
5. 変数名のプレフィックス
Visual C# .NET、Visual Basic .NET 用の定義には変数名に対して型を表すプレフィックス(hHandle の場合 h の部分)をつけておりません。C 言語や Visual Basic から.NET への移行の際には注意し てください。 (例) ●C 言語 typedef struct { ULONG ulBusStatus; ULONG ulTXBCount; ULONG ulRXBCount; ULONG ulERBCount; ULONG ulTXERRCount; ULONG ulRXERRCount; } CAN_PORT_STATUS, *PCAN_PORT_STATUS; ●Visual C# .NET(x86、x64 共用) [StructLayout(LayoutKind.Sequential)] public struct CAN_PORT_CONFIG
{
public uint LineMode; public uint FilterMode; public uint TXBSize; public uint RXBSize; public uint ERBSize; public uint ErrorLimit; public uint BaudRate; }
●Visual Basic .NET(x86、x64 共用)
<StructLayout(LayoutKind.Sequential)> Structure CAN_PORT_CONFIG Dim LineMode As Integer
Dim FilterMode As Integer Dim TXBSize As Integer Dim RXBSize As Integer
第4章 リファレンス
4.1 関数一覧
CAN 通信を行なう場合と、CAN FD 通信を行なう場合で使用する関数が異なります。以下を参考に、 各関数の説明を参照してください。 4.1.4 プロファイル設定用関数 4.1.2 CAN インタフェース用制御関数 4.1.3 CAN FD インタフェース用制御関数 4.1.1 デバイス制御用共通関数 CAN FD 通信で使用する関数 CAN 通信で使用する関数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 CanStopMultiCyclicSendMessage メッセージの周期送信を停止します。(複数メッセージ版) 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(S)のみ)4.1.2 CAN インタフェース用制御関数
No 関数名 機能 ●各種設定関数 1 CanSetConfig 各種設定を行います。 2 CanSetAcceptanceFilter アクセプタンスフィルタの設定を行います。 ●各種設定の取得関数 3 CanGetConfig 各種設定を取得します。 4 CanGetAcceptanceFilter アクセプタンスフィルタの設定を取得します。 ●メッセージ送受信関数 5 CanSendMessage メッセージの送信を行います。 6 CanCyclicSendMessage メッセージの周期送信を行ないます。 7 CanReceiveMessage 受信メッセージの取り出しを行います。 ●複数メッセージ周期送信関数 8 CanMultiCyclicSendMessage メッセージの周期送信を行ないます。(複数メッセージ版) ●その他(ステータス取得等) 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 CanMultiCyclicSendMessageFD メッセージの周期送信を行ないます。(CAN FD 版) ●その他(ステータス取得等) 9 CanGetStatusFD 各種ステータスの取得を行います。(CAN FD 版) 10 CanGetCompletionMessageFD 送信完了したメッセージを取り出します。(CAN FD 版)4.1.4 プロファイル設定用関数
No 関数名 機能 ●プロファイル変換関数 1 CanQueryProfile 該当するプロファイルが登録されているかどうか問い合わせます。 2 CanApplyProfile プロファイル情報を元に受信データを変換します。 3 CanApplyProfileInteger プロファイル情報を元に受信データを 32bit 整数値に変換します。 4 CanApplyProfileFloat プロファイル情報を元に受信データを 32bit 実数値に変換します。 5 CanApplyProfileDouble プロファイル情報を元に受信データを 64bit 実数値に変換します。 ●プロファイル設定関数 6 CanSetProfile プロファイルの登録を行います。 7 CanGetProfile プロファイル情報を取得します。 8 CanDeleteProfile プロファイルを削除します。 ●プロファイル設定ファイル関数 9 CanSaveProfile プロファイルをセーブします。 10 CanLoadProfile プロファイルをロードします。4.2 関数個別説明
4.2.1 デバイス制御用共通関数
1. CanOpenPort
【機能】 CAN インタフェースのオープンを行い、以後のアクセスを行えるようにします。 Windows の「デバイス マネージャ」に認識された弊社 CAN インタフェースが一覧表示されま す。一覧の製品型式の横にチャンネル番号とデバイス名(IFCANx)が表示されます。 ※ チャンネル 1 とチャンネル 2 は別のデバイス名で登録されます。※ 「 Intel PCH EG20T 」 の CAN コ ン ト ロ ー ラ を 搭 載 し た 製 品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016)ではデバイスマネジャにデバイス名は表示されません。デバイス 名は IFCAN0 になります。 デバイス名はスロット位置の変更等でシステム構成が変化すると割り当てられる名前が変化 する場合があります。システム構成が変化する環境でご使用になる場合は、デバイス名の指定 が変更できるようにアプリケーションを作成ください。 【書式】 ●C 言語(x86 専用) HANDLE CanOpenPort( LPCTSTR lpszName ); ●C 言語(x64 専用) HANDLE CanOpenPort( LPCSTR lpszName ); ●Visual Basic
Declare Function CanOpenPort Lib "IFCan.DLL"( _ ByVal lpszName As String _
)As Long
●Delphi
function CanOpenPort( lpszName: String
):THandle; stdcall; external ‘IFCan.DLL’;
●Visual C# .NET(x86、x64 共用) [DllImport(“IFCan.dll”)]
public static extern IntPtr CanOpenPort( string Name
●Visual C# .NET(x86 専用) [DllImport(“IFCan.dll”)]
public static extern uint CanOpenPort( string Name
);
●Visual Basic .NET(x86、x64 共用)
Declare Function CanOpenPort Lib "IFCan.DLL"( _ ByVal Name As String _
) As IntPtr
●Visual Basic .NET(x86 専用)
Declare Function CanOpenPort Lib "IFCan.DLL"( _ ByVal Name As String _
) As Integer 【パラメータ】 lpszName オープンする CAN インタフェースのデバイス名を指定してください。 【戻り値】 CanOpenPort 関数が正常に終了した場合には、有効なハンドルが返されます。 他の関数は、本関数により取得したハンドルを使用してデバイスの制御を行います。 オープンに失敗した場合には、INVALID_HANDLE_VALUE(FFFFFFFFh)が返されます。 【備考】
●「Intel PCH EG20T」の CAN コントローラを搭載した製品ついて
「 Intel PCH EG20T 」 の CAN コ ン ト ロ ー ラ を 搭 載 し た 製 品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016)では本関数実行時に、自動的に CAN バスへの接続を有効(データの 送受信が行える状態)化します。CanActivate 関数で有効化することはできません。 ●UNICODE 文字列について C 言語(x86 専用)で、CanOpenPort の引数 lpszName に指定する文字列は LPCTSTR 型として定義 していますが、UNICODE 文字列には対応しておりません。 x86 環境でご使用になる場合、使用例に沿って記述してください。
【使用例】 ●C 言語(x86)
HANDLE hDeviceHandle;
hDeviceHandle = CanOpenPort((LPCTSTR)“IFCAN1”);
HANDLE hDeviceHandle; char* lpszName = “IFCAN1”;
hDeviceHandle = CanOpenPort((LPCTSTR)lpszName);
●C 言語(x64)
HANDLE hDeviceHandle;
hDeviceHandle = CanOpenPort(“IFCAN1”);
HANDLE hDeviceHandle; char* lpszName = “IFCAN1”;
hDeviceHandle = CanOpenPort(lpszName);
●Visual Basic
Dim lpszName As String Dim hDeviceHandle As Long
lpszName = "IFCAN1" & Chr( 0 )
hDeviceHandle = CanOpenPort(lpszName ) ●Delphi var lpszName: String; hDeviceHandle: THandle; lpszName := ‘IFCAN1’; hDeviceHandle := CanOpenPort(lpszName ); ●Visual C# .NET IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”);
●Visual Basic .NET
Dim DeviceHandle As Integer
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”)
●Visual C++ CLR プロジェクト IntPtr DeviceHandle;
DeviceHandle = IFCCAN_ANY::CanOpenPort(“IFCAN1”);
2. CanClosePort
【機能】 CAN インタフェースをクローズします。 アクセスのために使用されていた各種リソースの解放を行い、以後の CAN インタフェースへの アクセスを禁止します。 【書式】 ●C 言語 INT CanClosePort( HANDLE hDeviceHandle ); ●Visual BasicDeclare Function CanClosePort Lib "IFCan.DLL"( _ ByVal hDeviceHandle As Long _
)As Long
●Delphi
function CanClosePort ( hDeviceHandle: THandle
): Integer; stdcall; external ‘IFCan.DLL’;
●Visual C# .NET(x86、x64 共用) [DllImport(“IFCan.dll”)]
public static extern uint CanClosePort( IntPtr DeviceHandle
);
●Visual C# .NET(x86 専用) [DllImport(“IFCan.dll”)]
public static extern uint CanClosePort( uint DeviceHandle
);
●Visual Basic .NET(x86、x64 共用)
Declare Function CanClosePort Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr _
) As Integer
●Visual Basic .NET(x86 専用)
Declare Function CanClosePort Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer _
【パラメータ】 hDeviceHandle CanOpenPort 関数で取得したデバイスハンドルを指定してください。 【戻り値】 正常終了した場合は、IFCAN_ERROR_SUCCESSが返されます。 IFCAN_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ い。 【備考】 再度、CAN インタフェースへのアクセスを行う場合にはオープン処理(CanOpenPort 関数)を呼 び出してください。 メッセージの送受信中に本関数を実行した場合、全て中断されます。 クローズ後の各種設定はクリアされます。
「 Intel PCH EG20T 」 の CAN コ ン ト ロ ー ラ を 搭 載 し た 製 品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016)では本関数実行時に、自動的にバスオフ状態(CAN バスへの接続を無 効化)にします。CanDeactivate 関数で無効化することはできません。 【使用例】 ●C 言語 INT nRet; HANDLE hDeviceHandle; hDeviceHandle = CanOpenPort(“IFCAN1”); : : nRet = CanClosePort(hDeviceHandle); ●Visual Basic
Dim lpszName As String Dim hDeviceHandle As Long Dim nRet As Long
lpszName = "IFCAN1" & Chr( 0 )
hDeviceHandle = CanOpenPort(lpszName) :
●Delphi var lpszName: String; hDeviceHandle: THandle; nRet: Integer; lpszName := ‘IFCAN1’; hDeviceHandle := CanOpenPort(lpszName); : : nRet := CanClosePort(hDeviceHandle); ●Visual C# .NET uint Ret; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”); : Ret = IFCCAN_ANY.CanClosePort(DeviceHandle);
●Visual Basic .NET Dim Ret As Integer
Dim DeviceHandle As Integer
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”) :
Ret = IFCCAN_ANY.CanClosePort(DeviceHandle)
●Visual C++ CLR プロジェクト unsigned int Ret;
IntPtr DeviceHandle;
DeviceHandle = IFCCAN_ANY::CanOpenPort(“IFCAN1”); :
Ret = IFCCAN_ANY::CanClosePort(DeviceHandle);
3. CanActivate
【機能】 CAN バスへの接続を有効(データの送受信が行える状態)化します。 CanOpenPort 関数でオープンした直後は、バスオフ状態(接続が無効な状態)ですので、本関 数を使用し、CAN バスへ接続する必要があります。 送信エラー数が 255 を越え、バスオフ状態になったときにも、本関数を使い再接続します。 送信バッファに送信メッセージが残っている場合、送信を再開します。 既に CAN バスへの接続が有効であるときに、本関数を呼び出すとエラーとなります。※ 「 Intel PCH EG20T 」 の CAN コ ン ト ロ ー ラ を 搭 載 し た 製 品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016 ) で は 本 関 数 を 使 用 で き ま せ ん 。 CAN バ ス へ の 接 続 有 効 化 は CanOpenPort 関数実行時に自動的に行われます。 【書式】 ●C 言語 INT CanActivate( HANDLE hDeviceHandle ); ●Visual Basic
Declare Function CanActivate Lib "IFCan.DLL"( _ ByVal hDeviceHandle As Long _
)As Long
●Delphi
function CanActivate( hDeviceHandle: THandle
): Integer; stdcall; external ‘IFCan.DLL’;
●Visual C# .NET(x86、x64 共用) [DllImport(“IFCan.dll”)]
public static extern uint CanActivate( IntPtr DeviceHandle
);
●Visual C# .NET(x86 専用) [DllImport(“IFCan.dll”)]
public static extern uint CanActivate( uint DeviceHandle
●Visual Basic .NET(x86 専用)
Declare Function CanActivate Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer _
) As Integer 【パラメータ】 hDeviceHandle CanOpenPort 関数で取得したデバイスハンドルを指定してください。 【戻り値】 正常終了した場合は、IFCAN_ERROR_SUCCESSが返されます。 IFCAN_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ い。 【使用例】 ●C 言語 INT nRet; HANDLE hDeviceHandle; hDeviceHandle = CanOpenPort(“IFCAN1”); : : nRet = CanActivate(hDeviceHandle); ●Visual Basic
Dim lpszName As String Dim hDeviceHandle As Long Dim nRet As Long
lpszName = "IFCAN1" & Chr( 0 )
hDeviceHandle = CanOpenPort(lpszName) :
:
●Delphi var lpszName: String; hDeviceHandle: THandle; nRet: Integer; lpszName := ‘IFCAN1’; hDeviceHandle := CanOpenPort(lpszName); : : nRet := CanActivate(hDeviceHandle); ●Visual C# .NET uint Ret; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”); : Ret = IFCCAN_ANY.CanActivate(DeviceHandle);
●Visual Basic .NET
Dim DeviceHandle As Integer Dim Ret As Integer
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”) :
Ret = IFCCAN_ANY.CanActivate(DeviceHandle)
●Visual C++ CLR プロジェクト unsigned int Ret;
IntPtr DeviceHandle;
DeviceHandle = IFCCAN_ANY::CanOpenPort(“IFCAN1”); :
Ret = IFCCAN_ANY::CanActivate(DeviceHandle);
4. CanDeactivate
【機能】
バスオフ状態(CAN バスへの接続を無効化)にします。(メッセージの送受信が行えない状態) CanSetConfig 関数、CanSetAcceptanceFillter 関数、CanSetFifoTrigger 関数を実行するには 本関数でバスオフ状態にしておく必要があります。 バスオフ状態かどうかは、CanGetStatus 関数で確認することができます。 メッセージの送信中の場合、そのメッセージは途中で中断されます。 (そのメッセージは正規のフォーマットではなくなるので、受信側でエラーが発生します) 送信待機中のメッセージはそのまま送信バッファに残りますが、送信 FIFO 内のデータはクリ アされます(受信 FIFO、エラーFIFO のデータは各バッファに格納されます)。 再度、CanActivate 関数を実行し、バスに接続後、自動的に送信が再開されます。 送信したくない場合は、CanActivate 関数を実行する前に CanClearBuffer 関数で送信バッファ をクリアしておいてください。 メッセージの受信中に、本関数を実行した場合、その受信中のメッセージは受信バッファには 蓄えられません。(破棄されます) 受信バッファの中身は変化しませんので、バスオフ状態でもメッセージを取り出すことは可能 ですが、新たな受信メッセージは CanActivate 関数を実行するまで蓄えられません。 既にバスオフ状態のときに、本関数を呼び出すとエラーとなります。
※ 「 Intel PCH EG20T 」 の CAN コ ン ト ロ ー ラ を 搭 載 し た 製 品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016 ) で は 本 関 数 を 使 用 で き ま せ ん 。 CAN バ ス の 接 続 無 効 化 は CanClosePort 関数実行時に自動的に行われます。 【書式】 ●C 言語 INT CanDeactivate( HANDLE hDeviceHandle ); ●Visual Basic
Declare Function CanDeactivate Lib "IFCan.DLL"( _ ByVal hDeviceHandle As Long _
)As Long
●Delphi
function CanDeactivate( hDeviceHandle: THandle
): Integer; stdcall; external ‘IFCan.DLL’;
●Visual C# .NET(x86、x64 共用) [DllImport(“IFCan.dll”)]
public static extern uint CanDeactivate( IntPtr DeviceHandle
●Visual C# .NET(x86 専用) [DllImport(“IFCan.dll”)]
public static extern uint CanDeactivate( uint DeviceHandle
);
●Visual Basic .NET(x86、x64 共用)
Declare Function CanDeactivate Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr _
) As Integer
●Visual Basic .NET(x86 専用)
Declare Function CanDeactivate Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer _
) As Integer 【パラメータ】 hDeviceHandle CanOpenPort 関数で取得したデバイスハンドルを指定してください。 【戻り値】 正常終了した場合は、IFCAN_ERROR_SUCCESSが返されます。 IFCAN_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ い。 【使用例】 ●C 言語 INT nRet; HANDLE hDeviceHandle; hDeviceHandle = CanOpenPort(“IFCAN1”); : nRet = CanActivate(hDeviceHandle); : nRet = CanDeactivate(hDeviceHandle);
●Visual Basic
Dim lpszName As String Dim hDeviceHandle As Long Dim nRet As Long
lpszName = "IFCAN1" & Chr( 0 )
hDeviceHandle = CanOpenPort(lpszName) : nRet = CanActivate(hDeviceHandle) : nRet = CanDeactivate(hDeviceHandle) ●Delphi var lpszName: String; hDeviceHandle: THandle; nRet: Integer; lpszName := ‘IFCAN1’; hDeviceHandle := CanOpenPort(lpszName); : nRet := CanActivate(hDeviceHandle); : nRet := CanDeactivate(hDeviceHandle); ●Visual C# .NET uint Ret; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”); : Ret = IFCCAN_ANY.CanActivate(DeviceHandle); : Ret = IFCCAN_ANY.CanDeactivate(DeviceHandle);
●Visual Basic .NET
Dim DeviceHandle As Integer Dim Ret As Integer
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”) :
Ret = IFCCAN_ANY.CanActivate(DeviceHandle) :
●Visual C++ CLR プロジェクト unsigned int Ret;
IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY::CanOpenPort(“IFCAN1”); : Ret = IFCCAN_ANY::CanActivate(DeviceHandle); : Ret = IFCCAN_ANY::CanDeactivate(DeviceHandle); デバイス名「IFCAN1」の CAN インタフェースをバスオフ状態にします。
5. CanSetFifoTrigger
【機能】 受信 FIFO、エラーFIFO、送信 FIFO のトリガ値を設定します。ここでいうトリガとは、ドライ バ内で割り込みが発生するタイミングのことをいいます。従って、通常はこのトリガ値を意識 する必要はありません。本関数はバスオフ状態でのみ実行できます。 高速でデータをやり取りする場合、トリガ値を上げることにより、ドライバ内での割り込み発 生率が下がり、システムの負荷を下げることができます。トリガ値を上げることにより、オー バーフローが発生する場合は、トリガ値を下げるようにして下さい。※ 「 Intel PCH EG20T 」 の CAN コ ン ト ロ ー ラ を 搭 載 し た 製 品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016)では本関数を使用できません。 【書式】 ●C 言語 INT CanSetFifoTrigger( HANDLE hDeviceHandle, DWORD dwFifoKind, DWORD dwTriggerValue, DWORD dwFifoTimeout ); ●Visual Basic
Declare Function CanSetFifoTrigger Lib "IFCan.DLL"( _ ByVal hDeviceHandle As Long, _
ByVal dwFifoKind As Long, _ ByVal dwTriggerValue As Long, _ ByVal dwFifoTimeout As Long _ )As Long ●Delphi function CanSetFifoTrigger( hDeviceHandle: THandle; dwFifoKind: DWORD; dwTriggerValue: DWORD; dwFifoTimeout: DWORD
): Integer; stdcall; external ‘IFCan.DLL’;
●Visual C# .NET(x86、x64 共用) [DllImport(“IFCan.dll”)]
public static extern uint CanSetFifoTrigger( IntPtr DeviceHandle,
uint FifoKind, uint TriggerValue, uint FifoTimeout );
●Visual C# .NET(x86 専用) [DllImport(“IFCan.dll”)]
public static extern uint CanSetFifoTrigger( uint DeviceHandle,
uint FifoKind, uint TriggerValue, uint FifoTimeout );
●Visual Basic .NET(x86、x64 共用)
Declare Function CanSetFifoTrigger Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _
ByVal FifoKind As Integer, _ ByVal TriggerValue As Integer, _ ByVal FifoTimeout As Integer _ ) As Integer
●Visual Basic .NET(x86 専用)
Declare Function CanSetFifoTrigger Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _
ByVal FifoKind As Integer, _ ByVal TriggerValue As Integer, _ ByVal FifoTimeout As Integer _ ) As Integer 【パラメータ】 hDeviceHandle CanOpenPort 関数で取得したデバイスハンドルを指定してください。 dwFifoKind 設定する 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 送信モードに設定していない場合はエラーとなります。
dwTriggerValue トリガ値を下記の値で指定します。デフォルトは 0 です。 識別子 値 内容 CAN_TRIGGER_1 0 受信/エラーFIFO 内のデータ数が 0→1 で割り込み発生。 送信 FIFO の場合、FIFO 内のデータ数が 1→0 で割り込み発生。 CAN_TRIGGER_16 1 受信/エラーFIFO 内のデータ数が 15→16 で割り込み発生。 送信 FIFO の場合、FIFO 内のデータ数が 16→15 で割り込み発生。 CAN_TRIGGER_32 2 受信/エラーFIFO 内のデータ数が 31→32 で割り込み発生。 送信 FIFO の場合、FIFO 内のデータ数が 32→31 で割り込み発生。 CAN_TRIGGER_48 3 受信/エラーFIFO 内のデータ数が 47→48 で割り込み発生。 送信 FIFO の場合、FIFO 内のデータ数が 48→47 で割り込み発生。 dwFifoTimeout 受信 FIFO、エラーFIFO 内のタイムアウト時間を設定します。単位は 100μs です。 新しく FIFO 内にデータが挿入されてから、dwFifoTimeout 時間の間にトリガが発生しない 場合、割り込みが発生するようになります。
例えば、受信 FIFO のトリガ設定を行うために、dwFifoKind に CAN_RECEIVE_FIFO を設定 し、dwTriggerValue に CAN_TRIGGER_48、dwFifoTimeout に 5 を設定した場合、受信 FIFO 内のデータ数が 48 になれば、トリガ条件が満たされたことになり、(ドライバ内で)割り 込みが発生します。また、受信 FIFO 内のデータ数が 48 より少ない場合、受信データが受 信 FIFO に挿入されてから、次のデータが受信 FIFO に挿入される前に、500μs(5×100μ s)が経過すると、タイムアウトとみなされ、(ドライバ内で)割り込みが発生します。 デフォルトは、エラーFIFO、受信 FIFO いずれも 4 です。 設定可能範囲は 1~255 です。 送信 FIFO 設定時は、設定値は無効となります。 【戻り値】 正常終了した場合は、IFCAN_ERROR_SUCCESSが返されます。 IFCAN_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ い。 【備考】 本関数は、スタンダード版 CAN 製品では使用することはできません。
【使用例】 ●C 言語 INT nRet; HANDLE hDeviceHandle; DWORD dwTrigger; DWORD dwTimeout; hDeviceHandle = CanOpenPort(“IFCAN1”); : : // 受信 FIFO トリガを設定します dwTrigger = CAN_TRIGGER_16; dwTimeout = 8;
nRet = CanSetFifoTrigger(hDeviceHandle, CAN_RECEIVE_FIFO, dwTrigger, dwTimeout);
●Visual Basic
Dim lpszName As String Dim hDeviceHandle As Long Dim nRet As Long
Dim dwTrigger As Long Dim dwTimeout As Long
lpszName = "IFCAN1" & Chr( 0 )
hDeviceHandle = CanOpenPort(lpszName) : : ‘ 受信 FIFO トリガを設定します dwTrigger = CAN_TRIGGER_16 dwTimeout = 8
●Delphi var lpszName: String; hDeviceHandle: THandle; nRet: Integer; dwTrigger: DWORD; dwTimeout: DWORD; lpszName := ‘IFCAN1’; hDeviceHandle := CanOpenPort(lpszName); : : // 受信 FIFO トリガを設定します dwTrigger := CAN_TRIGGER_16; dwTimeout := 8;
nRet := CanSetFifoTrigger(hDeviceHandle, CAN_RECEIVE_FIFO, dwTrigger, dwTimeout);
●Visual C# .NET uint Ret; IntPtr DeviceHandle; uint Trigger; uint Timeout; DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”); : // 受信 FIFO トリガを設定します Trigger = IFCCAN_ANY.CAN_TRIGGER_16; Timeout = 8;
Ret = IFCCAN_ANY.CanSetFifoTrigger(DeviceHandle, IFCCAN_ANY.CAN_RECEIVE_FIFO, Trigger, Timeout);
●Visual Basic .NET
Dim DeviceHandle As Integer Dim Ret As Integer
Dim Trigger As Integer Dim Timeout As Integer
DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”) :
‘ 受信 FIFO トリガを設定します
Trigger = IFCCAN_ANY.CAN_TRIGGER_16 Timeout = 8
Ret = IFCCAN_ANY.CanSetFifoTrigger(DeviceHandle, IFCCAN_ANY.CAN_RECEIVE_FIFO, _ Trigger, Timeout)