GPC-4851

Size: px
Start display at page:

Download "GPC-4851"

Transcription

1 CAN(PCI/C-PCI) GPC-4851 CAN インタフェースモジュール用 Windows ドライバ Help for Windows

2 目次 第 1 章はじめに 概要 特長...3 第 2 章製品仕様 基本仕様 対応型式 製品構成 注意事項...11 第 3 章導入方法 インストール手順 CBI CSI シリーズの同一型式複数枚使用 実行手順 インタフェースモジュール固有情報 クラスライブラリの参照方法...24 第 4 章リファレンス 関数一覧 関数個別説明 構造体説明 戻り値一覧 第 5 章サンプルプログラム canmon canmonfd send cyclic receive filter error multicyclic sendrecv sendrecvfd 第 6 章ユーティリティ プロファイル設定プログラム 自己診断プログラム カードバス ID 設定ユーティリティ 第 7 章重要な情報 360 2

3 第 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 メッセージのみ周期送信できます 3

4 第 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 = kbps CAN 通信製品は 24MHz CAN FD 通信製品は 40MHz のシステムクロックの分周となります 4

5 2.2 対応型式 PCI シリーズ (PCI バス製品 ) スタンダード版 PCI PCI PCI PCI 高機能版 PCI PCI PCI PCI P PCI P PCI P PCI P バスマスタ版 PCI PCI PCI PCI P PCI P PCI P 複数周期送信版 PCI P LPC シリーズ (LowProfilePCI バス製品 ) スタンダード版 LPC LPC LPC 高機能版 LPC LPC LPC PEX シリーズ (PCIExpress バス製品 ) スタンダード版 PEX PEX PEX 高機能版 PEX PEX PEX PEX-H485220P バスマスタ版 PEX-H PEX-H PEX-H PEX-H485340P PEX-H485322P PEX-H485304P 複数周期送信版 PEX CAN FD 版 PEX-H485940P CPZ シリーズ (CompactPCI バス製品 ) 高機能版 CPZ CPZ CPZ CPZ P CPZ P CPZ P バスマスタ版 CPZ CPZ CPZ CPZ P CPZ P CPZ P 複数周期送信版 CPZ P CTP シリーズ (CompactPCI バス製品 ) 高機能版 CTP CTP CTP CTP P CTP P CTP P バスマスタ版 CTP CTP CTP CSI シリーズ (CardBus 製品 ) スタンダード版 CSI 高機能版 CSI 複数周期送信版 CSI

6 CBI シリーズ (CardBus 製品 ) スタンダード版 CBI-4851A CBI-4851B CBI WA CBI WB 高機能版 CBI-4852A CBI-4852B CBI WA CBI WB 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 ( ソルコン ) 高機能版 IUC-x4855(y) x は ベースとなる CPU 部分によって異なります y は OS によって異なります 6

7 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 によって異なります 7

8 2.3 製品構成 製品構成 ファイル名 説明 弊社管理用ファイル GPC4851.VER 弊社ソフトウェア管理用ファイル 最新情報ドキュメント README.HTM 最新ドキュメント掲載ファイル インストールプログラム SETUP.EXE インストール用ファイル 設定プログラム CANUTIL.EXE プロファイル設定用プログラム 自己診断プログラム DIAGCAN.EXE 自己診断プログラム サンプルプログラム (CAN) Visual C++ CANMON CAN バスモニタサンプルプログラム CANMONFD CAN FD バスモニタサンプルプログラム CYCLIC 周期送信サンプルプログラム ERROR エラー情報取得サンプルプログラム FILTER フィルタ設定サンプルプログラム MULTICYCLIC 周期送信サンプルプログラム RECEIVE 受信サンプルプログラム SEND 送信サンプルプログラム SENDRECV 送受信プログラム SENDRECVFD CAN FD メッセージ送受信プログラム Visual Basic CANMON CAN バスモニタサンプルプログラム CANMONFD CAN FD バスモニタサンプルプログラム CYCLIC 周期送信サンプルプログラム ERROR エラー情報取得サンプルプログラム FILTER フィルタ設定サンプルプログラム MULTICYCLIC 周期送信サンプルプログラム RECEIVE 受信サンプルプログラム SEND 送信サンプルプログラム SENDRECV 送受信プログラム SENDRECVFD CAN FD メッセージ送受信プログラム Delphi CANMON CAN バスモニタサンプルプログラム CYCLIC 周期送信サンプルプログラム ERROR エラー情報取得サンプルプログラム FILTER フィルタ設定サンプルプログラム MULTICYCLIC 周期送信サンプルプログラム RECEIVE 受信サンプルプログラム SEND 送信サンプルプログラム SENDRECV 送受信プログラム Visual C#.NET CANMON CAN バスモニタサンプルプログラム CANMONFD CAN FD バスモニタサンプルプログラム CYCLIC 周期送信サンプルプログラム ERROR エラー情報取得サンプルプログラム FILTER フィルタ設定サンプルプログラム 8

9 DLL Visual Basic.NET Visual C++ CLR MULTICYCLIC RECEIVE SEND SENDRECV SENDRECVFD IFCCAN IFCCANPF CANMON CANMONFD CYCLIC ERROR FILTER MULTICYCLIC RECEIVE SEND SENDRECV SENDRECVFD IFCCAN IFCCANPF RECEIVE SEND IFCAN.DLL IFCANPF.DLL IFCAN.LIB IFCANPF.LIB MSVCRT.DLL 周期送信サンプルプログラム受信サンプルプログラム送信サンプルプログラム送受信プログラム CAN FD メッセージ送受信プログラム Visual C#.NET 用クラスライブラリ Visual C#.NET 用クラスライブラリ CAN バスモニタサンプルプログラム CAN FD バスモニタサンプルプログラム周期送信サンプルプログラムエラー情報取得サンプルプログラムフィルタ設定サンプルプログラム周期送信サンプルプログラム受信サンプルプログラム送信サンプルプログラム送受信プログラム CAN FD メッセージ送受信プログラム Visual Basic.NET 用クラスライブラリ Visual Basic.NET 用クラスライブラリ受信サンプルプログラム送信サンプルプログラムダイナミックリンクライブラリファイルプロファイル用ダイナミックリンクライブラリファイル インポートライブラリファイル プロファイル用インポートライブラリファイル C ランタイム共有 DLL 9

10 デバイスドライバ ヘッダファイル CP485X.SYS ( 製品型式毎 ) XXXX.INF ( 製品型式毎 ) XXXX.SLD ( 製品型式毎 ) IFCAN.H IFCANPF.H IFCAN.BAS IFCANPF.BAS IFCAN.PAS ドライバファイル ドライバインストールファイル Windows Embedded 用ドライバ SLD ファイル Visual C++ 用ヘッダファイル Visual C++ 用ヘッダファイル ( プロファイル DLL) Visual Basic 用ヘッダファイル Visual Basic 用ヘッダファイル ( プロファイル DLL) 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 を使用して作成しています 10

11 2.4 注意事項 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) 11

12 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 = kbps 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 を返すノードがいない ) 場合 モニタモードのノードはメッセージを受信しません 12

13 第 3 章導入方法 3.1 インストール手順 README.HTM のインストール方法を参照してください 3.2 CBI CSI シリーズの同一型式複数枚使用 CBI CSI シリーズの同一型式を複数枚使用する場合 ドライバインストール後に カードバス ID 設定ユーティリティ を使用して 製品ごとに異なる ID 番号を設定します この ID 番号により それぞれのカードを識別してください 13

14 送信バッファ送信バッファ 3.3 実行手順 デバイス制御 (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 つのメッセージが送信完了した場合 未送信メッセージ未送信メッセージ未送信メッセージ未送信メッセージ未送信メッセージ ultxbcount = 5 未送信メッセージ未送信メッセージ送信完了メッセージ送信完了メッセージ送信完了メッセージ ultxbcount = 2 そのため 未送信データが 0 になった時点で CAN_EVENT_TXB_IS_EMPTY( 送信バッファから 未送信データがなくなった ) イベントが発生します 14

15 送信バッファ未送信メッセージ 送信バッファはリングバッファになっており 未送信メッセージが送信バッファを 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 インタフェースの終了処理を行います アプリケーションでは 必ずクローズ処理を行ってから終了してください 15

16 送信バッファ送信バッファ デバイス制御 (CAN FD メッセージの送受信 ) CAN FD メッセージの送受信は CAN FD 版 CAN 製品のみ可能です CAN FD 版 CAN 製品で CAN メッセージの送受信を行う場合は デバイス制御 (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 つのメッセージが送信完了した場合 未送信メッセージ未送信メッセージ未送信メッセージ未送信メッセージ未送信メッセージ ultxbcount = 5 未送信メッセージ未送信メッセージ送信完了メッセージ送信完了メッセージ送信完了メッセージ ultxbcount = 2 そのため 未送信データが 0 になった時点で CAN_EVENT_TXB_IS_EMPTY( 送信バッファから 未送信データがなくなった ) イベントが発生します 16

17 送信バッファ未送信メッセージ 送信バッファはリングバッファになっており 未送信メッセージが送信バッファを 1 周すると 送信完了メッセージを上書きしてしまいますのでご注意ください CanSendMessageFD 関数により 4 つのメッセージを送信バッファに追加するとします 信バッフ未送信メッセージァこの時点で 送信完了メッセージ送信完了メッセージ送信完了メッセージ送未送信メッセージが送信バッファの最後まで挿入され さらに挿入しようとすると ージを上書きしてしまいます 送信バッファ未送信メッセージ未送信メッセージ未送信メッセージ未送信メッセージ未送信メッセージ送信完了メッセージ送信完了メッセージ送信完了メッセージ リングバッファなので 次に挿入されるメッセージが 送信完了メッセ 未送信メッセージ未送信メッセージ未送信メッセージ未送信メッセージ未送信メッセージ送信完了メッセージ送信完了メッセージ未送信メッセージ また 送信完了メッセージは 送信バッファサイズを変更するとクリアされますので 送信完了メッセージを全て取り出してから 送信バッファサイズを変更するようにしてください 4. メッセージ受信メッセージ受信は自動的に行われ デバイスドライバ内部のバッファに蓄えられます CanReceiveMessageFD 関数はこのバッファから受信メッセージを取り出します 5. 動作状態モニタリング CanGetStatusFD 関数で動作状態のステータスをモニタリングします また CanGetErrorEvent 関数で CAN バス上で発生したエラーの情報を取得することが出来ます 6. コールバック関数各種割り込み発生時にコールバック関数を実行することができます CanSetEventMask 関数にて コールバック関数 メッセージを実行したい要因を設定します CanSetEvent 関数でコールバック関数 メッセージの登録を行います 7. 終了処理 CanClosePort 関数で CAN インタフェースの終了処理を行います アプリケーションでは 必ずクローズ処理を行ってから終了してください 17

18 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 CanGetStatusFD 18

19 データ受信 プロファイルの使用通信されるデータのフォーマットを予め登録しておくことで データフィールドを様々な型やサイズに変換することができます その変換するためのデータフォーマットのことを 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 関数のみ使用できます ) 生データの変換に関する概念を下図に示します 変換後データ取得32 ビット整数値 32 ビット実数値 生データCanApplyProfile 関数, CanApplyProfileInteger 関数, CanApplyProfileFloat 関数, CanApplyProfileDouble 関数 CanReceiveMessage 関数 CAN カード C A N バス データ変換時 生データのデータ長を越えたデータは 0 埋めして変換を行います 例えば データ長が 5(ulLength が 5) の場合 bdata[5] bdata[6] bdata[7] は 0 として変換します CanQueryProfile 関数は 受信データのIDに一致するプロファイル番号を返します ( データの変換は行いません ) 19

20 3. プロファイルの保存 / 読み込み設定したプロファイルは テキストファイルとして保存することができます CanSaveProfile 関数で プロファイルを保存し CanLoadProfile 関数で テキストファイルからプロファイル用 DLL 内に読み込みます プロファイル設定プログラムで保存したプロファイルは CanLoadProfile 関数で読み込みます 20

21 3.4 インタフェースモジュール固有情報本ソフトウェアは 弊社 PCI/CompactPCI CAN デバイスに共通なソフトウェアですが 下記に示すインタフェースモジュールについてはインタフェースモジュール固有の使用方法 または専用の関数が用意されています PCI PU 固有情報弊社ソルコン製品, 弊社 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] 1Byte KBps Byte Byte MBps Byte

22 <CH1+CH2 で同時にメッセージを受信した場合 > ボーレート データ長 受信件数 送信側のディレイ時間 [us] Byte KBps Byte Byte MBps Byte <CH1+CH2+CH3 で同時にメッセージを受信した場合 > ボーレート データ長 受信件数 送信側のディレイ時間 [us] Byte KBps Byte Byte MBps Byte CAN バス上のエラーが発生する場合本製品を使用する際 ケーブルを未接続でメッセージの送信を行うなど CAN バス上のエラーが短い周期で発生する場合 システムの負荷が上がり USB デバイスとの通信に失敗する場合があります その場合には 下記の設定を変更してください CanSetFifoTrigger 関数で dwtriggervalue を 3 (CAN_TRIGGER_48) に変更する CanSetFifoTrigger 関数で dwfifotimeout の値を大きくする 22

23 使用可能関数 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 23

24 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 のクラスライブラリを上記作成方法で作成してください 24

25 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 のクラスライブラリを参照した場合のコードを記載しています 注意事項 1. 構造体について StructLayout クラスのオプションに LayoutKind.Sequential を指定しています 2. IFCCANPF について IFCCANPF は IFCCAN を参照しているため IFCCANPF をご使用の場合は IFCCAN.dll も参照する必要があります 3. 非同期処理で参照渡しする変数について各関数はアンマネージ関数です 非同期処理を使用する際は ガーベジコレクションによりメモリの開放 移動があるタイミングで発生します それにより関数内で保持しているポインタと アプリケーション内での変数のポインタでずれが発生し メモリ破壊が発生する可能性があります 下記の対策例のように対策してください 対象となる関数 CanSetEvent 関数 Callback 関数 対策例 CanSetEvent 関数の使用例を参照してください 25

26 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 Dim ERBSize As Integer Dim ErrorLimit As Integer Dim BaudRate As Integer End Structure 26

27 第 4 章リファレンス 4.1 関数一覧 CAN 通信を行なう場合と CAN FD 通信を行なう場合で使用する関数が異なります 以下を参考に 各関数の説明を参照してください CAN 通信で使用する関数 CAN FD 通信で使用する関数 デバイス制御用共通関数 CAN インタフェース用制御関数 CAN FD インタフェース用制御関数 プロファイル設定用関数 27

28 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) のみ ) 28

29 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 送信完了したメッセージを取り出します 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 版 ) 29

30 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 プロファイルをロードします 30

31 4.2 関数個別説明 デバイス制御用共通関数 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 ); 31

32 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 環境でご使用になる場合 使用例に沿って記述してください 32

33 使用例 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 ); 33

34 Visual Basic.NET Dim DeviceHandle As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Visual C++ CLR プロジェクト IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); デバイス名 IFCAN1 の CAN インタフェースをオープンします 34

35 2. CanClosePort 機能 CAN インタフェースをクローズします アクセスのために使用されていた各種リソースの解放を行い 以後の CAN インタフェースへのアクセスを禁止します 書式 C 言語 INT CanClosePort( HANDLE hdevicehandle ); Visual Basic Declare 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 _ ) As Integer 35

36 パラメータ 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) nret = CanClosePort(hDeviceHandle) 36

37 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_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanClosePort(DeviceHandle); デバイス名 IFCAN1 の CAN インタフェースのクローズ処理を行います 37

38 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 x64 共用 ) Declare Function CanActivate Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr _ ) As Integer 38

39 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) nret = CanActivate(hDeviceHandle) 39

40 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_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanActivate(DeviceHandle); デバイス名 IFCAN1 の CAN インタフェースをメッセージの送受信が可能な状態にします 40

41 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 ); 41

42 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); 42

43 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) Ret = IFCCAN_ANY.CanDeactivate(DeviceHandle) 43

44 Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanActivate(DeviceHandle); Ret = IFCCAN_ANYCanDeactivate(DeviceHandle); デバイス名 IFCAN1 の CAN インタフェースをバスオフ状態にします 44

45 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 ); 45

46 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 送信モードに設定していない場合はエラーとなります 46

47 dwtriggervalue トリガ値を下記の値で指定します デフォルトは 0 です 識別子 値 内容 CAN_TRIGGER_1 0 受信 / エラー FIFO 内のデータ数が 0 1 で割り込み発生 送信 FIFO の場合 FIFO 内のデータ数が 1 0 で割り込み発生 CAN_TRIGGER_16 1 受信 / エラー FIFO 内のデータ数が で割り込み発生 送信 FIFO の場合 FIFO 内のデータ数が で割り込み発生 CAN_TRIGGER_32 2 受信 / エラー FIFO 内のデータ数が で割り込み発生 送信 FIFO の場合 FIFO 内のデータ数が で割り込み発生 CAN_TRIGGER_48 3 受信 / エラー FIFO 内のデータ数が で割り込み発生 送信 FIFO の場合 FIFO 内のデータ数が で割り込み発生 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 製品では使用することはできません 47

48 使用例 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 nret = CanSetFifoTrigger(hDeviceHandle, CAN_RECEIVE_FIFO, dwtrigger, dwtimeout) 48

49 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) 49

50 Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; unsigned int Trigger; unsigned int Timeout; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 受信 FIFO トリガを設定します Trigger = IFCCAN_ANYCAN_TRIGGER_16; Timeout = 8; Ret = IFCCAN_ANYCanSetFifoTrigger(DeviceHandle, IFCCAN_ANYCAN_RECEIVE_FIFO, Trigger, Timeout); デバイス名 IFCAN1 の CAN インタフェースの受信 FIFO トリガを設定します 50

51 6. CanGetFifoTrigger 機能 受信 FIFO エラー FIFO 送信 FIFO のトリガ値を取得します Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanGetFifoTrigger( HANDLE hdevicehandle, DWORD dwfifokind, PDWORD dwtriggervalue, PDWORD dwfifotimeout ); Visual Basic Declare Function CanGetFifoTrigger Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwfifokind As Long, _ ByRef dwtriggervalue As Long, _ ByRef dwfifotimeout As Long _ )As Long Delphi function CanGetFifoTrigger( hdevicehandle THandle; dwfifokind DWORD; var dwtriggervalue DWORD; var dwfifotimeout DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanGetFifoTrigger( IntPtr DeviceHandle, uint FifoKind, out uint TriggerValue, out uint FifoTimeout ); 51

52 Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanGetFifoTrigger( uint DeviceHandle, uint FifoKind, out uint TriggerValue, out uint FifoTimeout ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanGetFifoTrigger Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal FifoKind As Integer, _ ByRef TriggerValue As Integer, _ ByRef FifoTimeout As Integer _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanGetFifoTrigger Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByVal FifoKind As Integer, _ ByRef TriggerValue As Integer, _ ByRef 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 送信モードに設定していない場合はエラーとなります 52

53 dwtriggervalue 取得するトリガ値が下記の値で格納されます デフォルトは 0 です 識別子 値 内容 CAN_TRIGGER_1 0 受信 / エラー FIFO 内のデータ数が 0 1 で割り込み発生 送信 FIFO の場合 FIFO 内のデータ数が 1 0 で割り込み発生 CAN_TRIGGER_16 1 受信 / エラー FIFO 内のデータ数が で割り込み発生 送信 FIFO の場合 FIFO 内のデータ数が で割り込み発生 CAN_TRIGGER_32 2 受信 / エラー FIFO 内のデータ数が で割り込み発生 送信 FIFO の場合 FIFO 内のデータ数が で割り込み発生 CAN_TRIGGER_48 3 受信 / エラー FIFO 内のデータ数が で割り込み発生 送信 FIFO の場合 FIFO 内のデータ数が で割り込み発生 dwfifotimeout 取得する FIFO 内のタイムアウト時間が格納されます 単位は 100μs です 新しく FIFO 内にデータが挿入されてから dwfifotimeout 時間の間にトリガが発生しない場合 割り込みが発生するようになります 例えば dwfifokind に CAN_RECEIVE_FIFO dwtriggervalue に CAN_TRIGGER_48 dwfifotimeout に 5 を設定した場合 受信 FIFO 内のデータ数が 48 になれば トリガ条件が満たされたことになり 割り込みが発生しますが 受信 FIFO 内のデータ数が 48 より少ない場合 受信データが受信 FIFO に挿入されてから 次のデータが受信 FIFO に挿入される前に 500μs(5 100μs) が経過すると タイムアウトとみなされ 割り込みが発生します デフォルトは エラー FIFO 受信 FIFO いずれも 4 です 送信 FIFO 設定時は 0 が返されます 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 本関数は スタンダード版 CAN 製品では使用することはできません 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dwtrigger; DWORD dwtimeout; hdevicehandle = CanOpenPort( IFCAN1 ); // 受信 FIFO トリガを取得します nret = CanGetFifoTrigger(hDeviceHandle, CAN_RECEIVE_FIFO, &dwtrigger, &dwtimeout); 53

54 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 トリガを取得します nret = CanGetFifoTrigger(hDeviceHandle, CAN_RECEIVE_FIFO, dwtrigger, dwtimeout) Delphi var lpszname String; hdevicehandle THandle; nret Integer; dwtrigger DWORD; dwtimeout DWORD; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); // 受信 FIFO トリガを取得します nret = CanGetFifoTrigger(hDeviceHandle, CAN_RECEIVE_FIFO, dwtrigger, dwtimeout); Visual C#.NET uint Ret; IntPtr DeviceHandle; uint Trigger; uint Timeout; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // 受信 FIFO トリガを取得します Ret = IFCCAN_ANY.CanGetFifoTrigger(DeviceHandle, IFCCAN_ANY.CAN_RECEIVE_FIFO, out Trigger, out Timeout); 54

55 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 トリガを取得します Ret = IFCCAN_ANY.CanGetFifoTrigger(DeviceHandle, IFCCAN_ANY.CAN_RECEIVE_FIFO, _ Trigger, Timeout) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; unsigned int Trigger; unsigned int Timeout; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 受信 FIFO トリガを取得します Ret = IFCCAN_ANYCanGetFifoTrigger(DeviceHandle, IFCCAN_ANYCAN_RECEIVE_FIFO, Trigger, Timeout); デバイス名 IFCAN1 の CAN インタフェースの受信 FIFO トリガを取得します 55

56 7. CanStopCyclicSendMessage 機能 CAN メッセージの周期送信を停止します データ送信中にこの関数を実行すると 現在送信中のデータの送信が完了してから 周期送信が停止されます この関数で周期送信を停止した場合 周期送信停止イベントは発生しません Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanStopCyclicSendMessage( HANDLE hdevicehandle ); Visual Basic Declare Function CanStopCyclicSendMessage Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long _ )As Long Delphi function CanStopCyclicSendMessage( hdevicehandle THandle ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanStopCyclicSendMessage( IntPtr DeviceHandle ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanStopCyclicSendMessage( uint DeviceHandle ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanStopCyclicSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanStopCyclicSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer _ ) As Integer 56

57 パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 本関数は スタンダード版 CAN 製品では使用することはできません 使用例 C 言語 INT nret; CAN_MESSAGE CanMessage; HANDLE hdevicehandle; unsigned long ulsendvalue; hdevicehandle = CanOpenPort( IFCAN1 ); // 送信メッセージ長のセット CanMessage.ulLength = 4; // 送信メッセージの ID をセット CanMessage.ulID = 0x01 CAN_EXT_FRAME; // フラグの設定 CanMessage.ulFlag = 0; // 300ms 周期 CanMessage.ulTime = 300*100; // 送信メッセージの内容をコピー *(unsigned long*)canmessage[i].bdata = ulsendvalue; nret = CanActivate(hDeviceHandle); // 300ms 周期で送信 nret = CanCyclicSendMessage(hDeviceHandle, CanMessage); // 周期送信の停止 nret = CanStopCyclicSendMessage(hDeviceHandle); 57

58 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim CanMessage As CAN_MESSAGE Dim bsendvalue(0 To 3) As Byte Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) 送信メッセージ長のセット CanMessage.ulLength = 4 送信メッセージの ID をセット CanMessage.ulID = &H01 Or CAN_EXT_FRAME フラグの設定 CanMessage.ulFlag = 0 300ms 周期 CanMessage.ulTime = 300*100 送信メッセージの内容をコピー CanMessage.bData(0) = bsendvalue(0) CanMessage.bData(1) = bsendvalue(1) CanMessage.bData(2) = bsendvalue(2) CanMessage.bData(3) = bsendvalue(3) nret = CanActivate(hDeviceHandle) 300ms 周期で送信 nret = CanCyclicSendMessage(hDeviceHandle, CanMessage) 周期送信の停止 nret = CanStopCyclicSendMessage(hDeviceHandle) 58

59 Delphi var lpszname String; hdevicehandle THandle; CanMessage CAN_MESSAGE; bsendvalue array[0..3] of Byte; nret Integer; i Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); // 送信メッセージ長のセット CanMessage.ulLength = 4; // 送信メッセージの ID をセット CanMessage.ulID = $01 CAN_EXT_FRAME; // フラグの設定 CanMessage.ulFlag = 0; // 300ms 周期 CanMessage.ulTime = 300*100; // 送信メッセージの内容をコピー CanMessage.bData[0] = bsendvalue[0]; CanMessage.bData[1] = bsendvalue[1]; CanMessage.bData[2] = bsendvalue[2]; CanMessage.bData[3] = bsendvalue[3]; nret = CanActivate(hDeviceHandle); // 300ms 周期で送信 nret = CanCyclicSendMessage(hDeviceHandle, CanMessage); // 周期送信の停止 nret = CanStopCyclicSendMessage(hDeviceHandle); 59

60 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // Data 配列の初期化 CanMessage.InitializeArray(); // 送信メッセージ長のセット CanMessage.Length = 4; // 送信メッセージの ID をセット CanMessage.ID = 0x01 IFCCAN_ANY.CAN_EXT_FRAME; // フラグの設定 CanMessage.Flag = 0; // 300ms 周期 CanMessage.Time = 300*100; // 送信メッセージの内容をセット CanMessage.Data[0] = 0x01; CanMessage.Data[1] = 0x02; CanMessage.Data[2] = 0x03; CanMessage.Data[3] = 0x04; Ret = IFCCAN_ANY.CanActivate(DeviceHandle); // 300ms 周期で送信 Ret = IFCCAN_ANY.CanCyclicSendMessage(DeviceHandle, ref CanMessage); // 周期送信の停止 Ret = IFCCAN_ANY.CanStopCyclicSendMessage(DeviceHandle); 60

61 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Data 配列の初期化 CanMessage.InitializeArray() 送信メッセージ長のセット CanMessage.Length = 4 送信メッセージの ID をセット CanMessage.ID = &H01 Or IFCCAN_ANY.CAN_EXT_FRAME フラグの設定 CanMessage.Flag = 0 300ms 周期 CanMessage.Time = 300*100 送信メッセージの内容をコピー CanMessage.Data(0) = &H01 CanMessage.Data(1) = &H02 CanMessage.Data(2) = &H03 CanMessage.Data(3) = &H04 Ret = IFCCAN_ANY.CanActivate(DeviceHandle) 300ms 周期で送信 Ret = IFCCAN_ANY.CanCyclicSendMessage(DeviceHandle, CanMessage) 周期送信の停止 Ret = IFCCAN_ANY.CanStopCyclicSendMessage(DeviceHandle) 61

62 Visual C++ CLR プロジェクト uint Ret; IFCCAN_ANYCAN_MESSAGE CanMessage; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // Data 配列の初期化 CanMessage.InitializeArray(); // 送信メッセージ長のセット CanMessage.Length = 4; // 送信メッセージの ID をセット CanMessage.ID = 0x01 IFCCAN_ANYCAN_EXT_FRAME; // フラグの設定 CanMessage.Flag = 0; // 300ms 周期 CanMessage.Time = 300*100; // 送信メッセージの内容をセット CanMessage.Data[0] = 0x01; CanMessage.Data[1] = 0x02; CanMessage.Data[2] = 0x03; CanMessage.Data[3] = 0x04; Ret = IFCCAN_ANYCanActivate(DeviceHandle); // 300ms 周期で送信 Ret = IFCCAN_ANYCanCyclicSendMessage(DeviceHandle, CanMessage); // 周期送信の停止 Ret = IFCCAN_ANYCanStopCyclicSendMessage(DeviceHandle); デバイス名 IFCAN1 の CAN インタフェースの周期送信を停止します 62

63 8. CanStopMultiCyclicSendMessage 機能 CAN メッセージの周期送信を停止します データ送信中にこの関数を実行すると 現在送信中のデータの送信が完了してから 周期送信が停止されます この関数で周期送信を停止した場合 周期送信停止イベントは発生しません 書式 C 言語 INT CanStopMultiCyclicSendMessage( HANDLE hdevicehandle, DWORD dwroute ); Visual Basic Declare Function CanStopMultiCyclicSendMessage Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwroute As Long _ )As Long Delphi function CanStopMultiCyclicSendMessage( hdevicehandle THandle; dwroute DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanStopMultiCyclicSendMessage( IntPtr DeviceHandle, uint Route ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanStopMultiCyclicSendMessage( uint DeviceHandle, uint Route ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanStopMultiCyclicSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Route As Integer _ ) As Integer 63

64 Visual Basic.NET(x86 専用 ) Declare Function CanStopMultiCyclicSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByVal Route As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dwroute 周期送信を停止するメッセージの番号を 1~12 の範囲で指定します 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 本関数は PCI P CPZ P PEX CSI PEX-H485940P で使用できます 64

65 使用例 C 言語 INT nret; CAN_MESSAGE CanMessage; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, 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; nret = CanActivate(hDeviceHandle); // メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage); // メッセージ番号 4 の周期送信の停止 nret = CanStopMultiCyclicSendMessage(hDeviceHandle, 4); 65

66 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim CanMessage As CAN_MESSAGE Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, CAN_ROUTE_4_6, 100*1000) 送信メッセージのセット CanMessage.ulLength = 4 CanMessage.ulID = &H01 CanMessage.ulFlag = 0 CanMessage.ulTime = 0 CanMessage[0].bData = &H11 CanMessage[1].bData = &H22 CanMessage[2].bData = &H33 CanMessage[3].bData = &H44 nret = CanActivate(hDeviceHandle) メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage) メッセージ番号 4 の周期送信の停止 nret = CanStopMultiCyclicSendMessage(hDeviceHandle, 4) 66

67 Delphi nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); // 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, CAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.ulLength = 4; CanMessage.ulID = $01; CanMessage.ulFlag = 0; CanMessage.ulTime = 0; CanMessage.bData[0] = $11; CanMessage.bData[1] = $22; CanMessage.bData[2] = $33; CanMessage.bData[3] = $44; nret = CanActivate(hDeviceHandle); // メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage); // メッセージ番号 4 の周期送信の停止 nret = CanStopMultiCyclicSendMessage(hDeviceHandle, 4); 67

68 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 Ret = IFCCAN_ANY.CanSetTransmissionCycle(DeviceHandle, CAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.InitializezArray(); CanMessage.Length = 4; CanMessage.ID = 0x01; CanMessage.Flag = 0; CanMessage.Time = 0; CanMessage.Data[0] = 0x11; CanMessage.Data[1] = 0x22; CanMessage.Data[2] = 0x33; CanMessage.Data[3] = 0x44; Ret = IFCCAN_ANY.CanActivate(DeviceHandle); // メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANY.CanMultiCyclicSendMessage(DeviceHandle, 4, ref CanMessage); // メッセージ番号 4 の周期送信の停止 Ret = IFCCAN_ANY.CanStopMultiCyclicSendMessage(DeviceHandle, 4); 68

69 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) 送信周期を 100ms に設定 Ret = IFCCAN_ANY.CanSetTransmissionCycle(DeviceHandle, CAN_ROUTE_4_6, 100*1000) 送信メッセージのセット CanMessage.InitializeArray() CanMessage.Length = 4 CanMessage.ID = &H01 CanMessage.Flag = 0 CanMessage.Time = 0 CanMessage.Data(0) = &H11 CanMessage.Data(1) = &H22 CanMessage.Data(2) = &H33 CanMessage.Data(3) = &H44 Ret = IFCCAN_ANY.CanActivate(DeviceHandle) メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANY.CanMultiCyclicSendMessage(DeviceHandle, 4, CanMessage) メッセージ番号 4 の周期送信の停止 Ret = IFCCAN_ANY.CanStopMultiCyclicSendMessage(hDeviceHandle, 4) 69

70 Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_MESSAGE CanMessage; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 Ret = IFCCAN_ANYCanSetTransmissionCycle(DeviceHandle, IFCCAN_ANYCAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.InitializezArray(); CanMessage.Length = 4; CanMessage.ID = 0x01; CanMessage.Flag = 0; CanMessage.Time = 0; CanMessage.Data[0] = 0x11; CanMessage.Data[1] = 0x22; CanMessage.Data[2] = 0x33; CanMessage.Data[3] = 0x44; Ret = IFCCAN_ANYCanActivate(DeviceHandle); // メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANYCanMultiCyclicSendMessage(DeviceHandle, 4, CanMessage); // メッセージ番号 4 の周期送信の停止 Ret = IFCCAN_ANYCanStopMultiCyclicSendMessage(DeviceHandle, 4); デバイス名 IFCAN1 の CAN インタフェースの周期送信を停止します 70

71 9. CanSetTransmissionCycle 機能 CanMultiCyclicSendMessage 関数で送信する CAN メッセージの送信周期を設定します 3 メッセージ毎に 1 つの周期が設定できます メッセージ番号 1~3 メッセージ番号 4~6 メッセージ番号 7~9 メッセージ番号 10~12 にそれぞれ 1 つずつ 計 4 つの周期を設定できます 書式 C 言語 INT CanSetTransmissionCycle ( HANDLE hdevicehandle, DWORD dwroute, DWORD dwcycle ); Visual Basic Declare Function CanSetTransmissionCycle Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwroute As Long, _ ByVal dwcycle As Long _ )As Long Delphi function CanSetTransmissionCycle ( hdevicehandle THandle; dwroute DWORD; dwcycle DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanSetTransmissionCycle ( IntPtr DeviceHandle, uint Route, uint Cycle ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanSetTransmissionCycle ( uint DeviceHandle, uint Route, uint Cycle ); 71

72 Visual Basic.NET(x86 x64 共用 ) Declare Function CanSetTransmissionCycle Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Route As Integer, _ ByVal Cycle As Integer _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanSetTransmissionCycle Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByVal Route As Integer, _ ByVal Cycle As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dwroute 周期を設定するメッセージの番号を以下の識別子で指定してください 識別子 値 内容 CAN_ROUTE_1_ h メッセージ番号 1~3 で使用する周期を設定 CAN_ROUTE_4_ h メッセージ番号 4~6 で使用する周期を設定 CAN_ROUTE_7_ h メッセージ番号 7~9 で使用する周期を設定 CAN_ROUTE_10_ h メッセージ番号 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 P CPZ P PEX CSI PEX-H485940P で使用できます 72

73 使用例 C 言語 INT nret; CAN_MESSAGE CanMessage; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, 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; nret = CanActivate(hDeviceHandle); // メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage); 73

74 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim CanMessage As CAN_MESSAGE Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, CAN_ROUTE_4_6, 100*1000) 送信メッセージのセット CanMessage.ulLength = 4 CanMessage.ulID = &H01 CanMessage.ulFlag = 0 CanMessage.ulTime = 0 CanMessage[0].bData = &H11 CanMessage[1].bData = &H22 CanMessage[2].bData = &H33 CanMessage[3].bData = &H44 nret = CanActivate(hDeviceHandle) メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage) 74

75 Delphi var lpszname String; hdevicehandle THandle; CanMessage CAN_MESSAGE; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); // 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, CAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.ulLength = 4; CanMessage.ulID = $01; CanMessage.ulFlag = 0; CanMessage.ulTime = 0; CanMessage.bData[0] = $11; CanMessage.bData[1] = $22; CanMessage.bData[2] = $33; CanMessage.bData[3] = $44; nret = CanActivate(hDeviceHandle); // メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage); 75

76 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 Ret = IFCCAN_ANY.CanSetTransmissionCycle(DeviceHandle, CAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.InitializezArray(); CanMessage.Length = 4; CanMessage.ID = 0x01; CanMessage.Flag = 0; CanMessage.Time = 0; CanMessage.Data[0] = 0x11; CanMessage.Data[1] = 0x22; CanMessage.Data[2] = 0x33; CanMessage.Data[3] = 0x44; Ret = IFCCAN_ANY.CanActivate(DeviceHandle); // メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANY.CanMultiCyclicSendMessage(DeviceHandle, 4, ref CanMessage); 76

77 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) 送信周期を 100ms に設定 Ret = IFCCAN_ANY.CanSetTransmissionCycle(DeviceHandle, CAN_ROUTE_4_6, 100*1000) 送信メッセージのセット CanMessage.InitializeArray() CanMessage.Length = 4 CanMessage.ID = &H01 CanMessage.Flag = 0 CanMessage.Time = 0 CanMessage.Data(0) = &H11 CanMessage.Data(1) = &H22 CanMessage.Data(2) = &H33 CanMessage.Data(3) = &H44 Ret = IFCCAN_ANY.CanActivate(DeviceHandle) メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANY.CanMultiCyclicSendMessage(DeviceHandle, 4, CanMessage) 77

78 Visual C++ CLR プロジェクト uint Ret; IFCCAN_ANYCAN_MESSAGE CanMessage; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 Ret = IFCCAN_ANYCanSetTransmissionCycle(DeviceHandle, IFCCAN_ANYCAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.InitializezArray(); CanMessage.Length = 4; CanMessage.ID = 0x01; CanMessage.Flag = 0; CanMessage.Time = 0; CanMessage.Data[0] = 0x11; CanMessage.Data[1] = 0x22; CanMessage.Data[2] = 0x33; CanMessage.Data[3] = 0x44; Ret = IFCCAN_ANYCanActivate(DeviceHandle); // メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANYCanMultiCyclicSendMessage(DeviceHandle, 4, CanMessage); デバイス名 IFCAN1 の CAN インタフェースの送信周期を 100ms に設定します 78

79 10. CanGetErrorEvent 機能 エラーバッファに蓄えられたエラー情報を取り出します CAN バス上で発生したエラーは 自動的にデバイスドライバ内部のエラーバッファに蓄えられます 本関数では この蓄えられたエラー情報を取り出します エラー情報があるかどうかは CanGetStatus 関数でエラーバッファの状態を見ることで確認できます 蓄えられたエラー情報が無い場合 戻り値で IFCAN_ERROR_BUFFER_IS_EMPTY が返されます また CanSetEvent 関数でイベントを設定することでエラーが発生した時点でイベントを発生させることができます ( イベント コールバック関数 ウィンドウメッセージ ) Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanGetErrorEvent( HANDLE hdevicehandle, PCAN_ERROR pcanerror, unsigned long* pulcount ); Visual Basic Declare Function CanGetErrorEvent Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pcanerror As CAN_ERROR, _ ByRef pulcount As Long _ )As Long Delphi function CanGetErrorEvent( hdevicehandle THandle; var pcanerror CAN_ERROR; var pulcount ULONG ) Integer; stdcall; external IFCan.DLL ; 79

80 Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanGetErrorEvent( IntPtr DeviceHandle, out CAN_ERROR CanError, ref uint Count ); [DllImport( IFCan.dll )] public static extern uint CanGetErrorEvent( IntPtr DeviceHandle, [Out] CAN_ERROR[] CanError, ref uint Count ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanGetErrorEvent( uint DeviceHandle, out CAN_ERROR CanError, ref uint Count ); [DllImport( IFCan.dll )] public static extern uint CanGetErrorEvent( uint DeviceHandle, [Out] CAN_ERROR[] CanError, ref uint Count ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanGetErrorEvent Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef CanError As CAN_ERROR, _ ByRef Count As Integer _ ) As Integer Declare Function CanGetErrorEvent Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ <Out()> ByVal CanError() As CAN_ERROR, _ ByRef Count As Integer _ ) As Integer 80

81 Visual Basic.NET(x86 専用 ) Declare Function CanGetErrorEvent Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef CanError As CAN_ERROR, _ ByRef Count As Integer _ ) As Integer Declare Function CanGetErrorEvent Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ <Out()> ByVal CanError() As CAN_ERROR, _ ByRef Count As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pcanerror エラー情報を格納する構造体へのポインタを指定してください pcount で指定された個数分の領域を用意してください CAN_ERROR 構造体の説明については 4.3 構造体説明 をご参照ください pulcount エラーバッファから取り出すエラー情報の件数を指定してください エラーバッファに蓄えられているエラー情報が指定された件数よりも少ない場合 実際にエラーバッファから取り出された件数が この変数に返されます 例 )PortStatus.ulERBCount が 3 の時に pulcount に 5 をセットし CanGetErrorEvent 関数を実行すると pulcount に 3 が返されます 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 81

82 使用例 C 言語 INT nret; CAN_ERROR CanError[10]; unsigned long ulcount; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); // エラー情報の取り出し ulcount = 10; nret = CanGetErrorEvent(hDeviceHandle, CanError, &ulcount); if (nret!= IFCAN_ERROR_SUCCESS) { if (nret == IFCAN_ERROR_BUFFER_IS_EMPTY) { printf( エラー情報がありません ); } } else { for (i=0; i<ulcount; i++) { printf( エラー割り込み発生要因 %lx\n,canerror[i].ulinterruptregister); printf( エラーコード %lx\n,canerror[i].ulerrorcoderegister); printf( アービトレーションロスト %lx\n,canerror[i].ularbitrationlostregister); } } 82

83 Visual Basic Dim lpszname As String Dim lpszmessage As String Dim hdevicehandle As Long Dim CanError(0 To 9) As CAN_ERROR Dim ulcount As Long Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) ulcount = 10 エラー情報の取り出し nret = CanGetErrorEvent(hDeviceHandle, CanError(0), ulcount) If nret <> IFCAN_ERROR_SUCCESS Then If nret = IFCAN_ERROR_BUFFER_IS_EMPTY Then MsgBox( エラー情報がありません ) End If Else For i=0 To ulcount - 1 lpszmessage = lpszmessage & Str(i+1) & 件目のエラー情報 & vbcrlf & _ エラー割り込み発生要因 & Hex(CanError(i).ulInterruptRegister) & _ vbcrlf & エラーコード & Hex(CanError(i).ulErrorCodeRegister) & _ vbcrlf & アービトレーションロスト & _ Hex(CanError(i).ulArbitrationLostRegister & vbcrlf Next MsgBox(lpszMessage) End If 83

84 Delphi var lpszname String; lpszmessage String; hdevicehandle THandle; CanError array[0..9] of CAN_ERROR; nret Integer; ulcount ULONG; i Integer; j Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); ulcount = 10; nret = CanGetErrorEvent(hDeviceHandle, CanError[0], ulcount); if nret <> IFCAN_ERROR_SUCCESS then begin if nret = IFCAN_ERROR_BUFFER_IS_EMPTY then begin MessageDlg( エラー情報がありません, mterror, [mbok], 0); end else for i = 0 To ulcount - 1 do begin lpszmessage = IntToStr(ulCount) + 件目のエラー情報 \n ; lpszmessage = lpszmessage + 受信メッセージ長 + IntToStr(CanMessage[i].ulLength) + \n ; lpszmessage = lpszmessage + ID + IntToStr(CanMessage[i].ulID) + \n ; lpszmessage = lpszmessage + 受信データ ; for j = 0 To CanMessage[i].ulLength - 1 do begin lpszmessage = lpszmessage + IntToHex(CanMessage[i].bData[j], 2) + ; end; MessageDlg(lpszMessage, mtinformation, [mbok], 0); end; end; end; 84

85 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_ERROR[] CanError = new IFCCAN_ANY.CAN_ERROR[10]; uint Count; IntPtr DeviceHandle; int i; string Message; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // エラー情報の取り出し Count = 10; Ret = IFCCAN_ANY.CanGetErrorEvent(DeviceHandle, CanError, ref Count); if (Ret!= IFCCAN_ANY.IFCAN_ERROR_SUCCESS) { if (Ret == IFCAN_ERROR_BUFFER_IS_EMPTY) { MessageBox.Show( エラー情報がありません ); } } else { for (i = 0; i < Count; i++) { Message = エラー割り込み発生要因 + CanError[i].InterruptRegister.ToString(); MessageBox.Show(Message); Message = エラーコード + CanError[i].ErrorCodeRegister; MessageBox.Show(Message); Message = + CanError[i].ArbitrationLostRegister; MessageBox.Show(Message); } } 85

86 Visual Basic.NET Dim Message As String Dim DeviceHandle As Integer Dim CanError(9) As IFCCAN_ANY.CAN_ERROR Dim Count As Integer Dim Ret As Integer Dim i As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Count = 10 エラー情報の取り出し Ret = IFCCAN_ANY.CanGetErrorEvent(DeviceHandle, CanError, Count) If Ret <> IFCCAN_ANY.IFCAN_ERROR_SUCCESS Then If Ret = IFCCAN_ANY.IFCAN_ERROR_BUFFER_IS_EMPTY Then MsgBox( エラー情報がありません ) End If Else For i = 0 To Count - 1 Message = Message & Str(i+1) & 件目のエラー情報 & vbcrlf & _ エラー割り込み発生要因 & Hex(CanError(i).InterruptRegister) & _ vbcrlf & エラーコード & Hex(CanError(i).ErrorCodeRegister) & _ vbcrlf & アービトレーションロスト & _ Hex(CanError(i).ArbitrationLostRegister & vbcrlf Next MsgBox(Message) End If 86

87 Visual C++ CLR プロジェクト unsigned int Ret; array<ifccan_anycan_error>^ CanError = gcnew array<ifccan_anycan_error>(10); unsigned int Count; IntPtr DeviceHandle; unsigned int i; String^ Message = ; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // エラー情報の取り出し Count = 10; Ret = IFCCAN_ANYCanGetErrorEvent(DeviceHandle, CanError, Count); if (Ret!= IFCCAN_ANYIFCAN_ERROR_SUCCESS) { if (Ret == IFCCAN_ANYIFCAN_ERROR_BUFFER_IS_EMPTY) { MessageBoxShow( エラー情報がありません ); } } else { for (i = 0; i < Count; i++) { Message = エラー割り込み発生要因 + CanError[i].InterruptRegister.ToString(); MessageBoxShow(Message); Message = エラーコード + CanError[i].ErrorCodeRegister; MessageBoxShow(Message); Message = + CanError[i].ArbitrationLostRegister; MessageBoxShow(Message); } } デバイス名 IFCAN1 の CAN インタフェースから 10 件のエラー情報を取り出します 取り出されたエラーメッセージを画面に表示します 10 件に満たない場合は 取り出された件数分だけ表示します 87

88 11. CanClearBuffer 機能 デバイスドライバ内に蓄えられている送信 受信メッセージ等を削除します Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanClearBuffer( HANDLE hdevicehandle, DWORD dwclearbuffer ); Visual Basic Declare Function CanClearBuffer Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwclearbuffer As Long _ )As Long Delphi function CanClearBuffer( hdevicehandle THandle; dwclearbuffer DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanClearBuffer( IntPtr DeviceHandle, uint ClearBuffer ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanClearBuffer( uint DeviceHandle, uint ClearBuffer ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanClearBuffer Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal ClearBuffer As Integer _ ) As Integer 88

89 Visual Basic.NET(x86 専用 ) Declare Function CanClearBuffer Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByVal ClearBuffer As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dwclearbuffer クリアするバッファの種類を指定してください 複数のバッファを OR で指定できます 送信バッファクリア時は 送信完了メッセージもクリアされます 識別子 値 内容 CAN_CLEAR_TXB h 送信バッファの内容をクリアします 送信 FIFO 内のデータもクリアされます CAN_CLEAR_RXB h 受信バッファの内容をクリアします 受信 FIFO 内のデータもクリアされます CAN_CLEAR_TXERR h 送信エラーカウンタをクリアします CAN_CLEAR_RXERR h 受信エラーカウンタをクリアします CAN_CLEAR_ERB h エラーバッファの内容をクリアします エラー FIFO 内のデータもクリアされます CAN_CLEAR_TIMERCOUNTER h 内部カウンタをクリアします バスオフ状態でのみ使用可能です 使用時には 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 のいずれかを指定すると送信エラーカウンタ 受信エラーカウンタの両方がクリアされます 個別にクリアすることはできません 89

90 使用例 C 言語 INT nret; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanClearBuffer(hDeviceHandle,CAN_CLEAR_RXB); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanClearBuffer(hDeviceHandle,CAN_CLEAR_RXB) Delphi var lpszname String; hdevicehandle THandle; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); nret = CanClearBuffer(hDeviceHandle,CAN_CLEAR_RXB); Visual C#.NET uint Ret; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanClearBuffer(DeviceHandle, IFCCAN_ANY.CAN_CLEAR_RXB); 90

91 Visual Basic.NET Dim DeviceHandle As Integer Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanClearBuffer(DeviceHandle, IFCCAN_ANY.CAN_CLEAR_RXB) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanClearBuffer(DeviceHandle, IFCCAN_ANYCAN_CLEAR_RXB); デバイス名 IFCAN1 の CAN インタフェースの受信バッファをクリアします 91

92 12. CanGetPortInformation 機能 ポートのハードウェア情報を取得します Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanGetPortInforamtion( HANDLE PCAN_PORT_INFORMATION ); hdevicehandle, pinfo Visual Basic Declare Function CanGetPortInforamtion Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pinfo As CAN_PORT_INFORMATION _ ) As Long Delphi function CanGetPortInforamtion( hdevicehandle THandle; var pinfo CAN_PORT_INFORMATION ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanGetPortInforamtion( IntPtr DeviceHandle, ref CAN_PORT_INFORMATION Info ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanGetPortInforamtion( uint DeviceHandle, ref CAN_PORT_INFORMATION Info ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanGetPortInforamtion Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef Info As CAN_PORT_INFORMATION _ ) As Integer 92

93 Visual Basic.NET(x86 専用 ) Declare Function CanGetPortInforamtion Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef Info As CAN_PORT_INFORMATION _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pinfo ハードウェア情報構造体へのポインタを指定してください 取得された値が格納されます 構造体の説明については 4.3 構造体説明 をご参照ください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 INT nret, ndevicenumber; char szdevicename[256]; HANDLE hdevicehandle; CAN_PORT_INFORMATION PortInfo; for(ndevicenumber = 1; ndevicenumber < 256; ndevicenumber++) { sprintf(szdevicename, "IFCAN%d", ndevicenumber); hdevicehandle = CanOpenPort(szDeviceName); if(hdevicehandle == INVALID_HANDLE_VALUE) continue; PortInfo.ulStructLength = sizeof(can_port_information); nret = CanGetPortInformation(hDeviceHandle, &PortInfo); if(nret == IFCAN_ERROR_SUCCESS) { if((portinfo.ulmodelnumber == ) && (PortInfo.ulSubsystemID == 0x2094)) { break; } } nret = CanClosePort(hDeviceHandle); } 93

94 Visual Basic Dim szdevicename As String Dim hdevicehandle As Long Dim nret, ndevicenumber As Long Dim PortInfo As CAN_PORT_INFORMATION For ndevicenumber = 1 To 255 szdevicename = "IFCAN" & Format(nDeviceNumber) hdevicehandle = CanOpenPort(szDeviceName) If hdevicehandle <> -1 Then PortInfo.ulStructLength = CAN_PORT_INFORMATION_LENGTH nret = CanGetPortInformation(hDeviceHandle, PortInfo) If nret = IFCAN_ERROR_SUCCESS Then If (PortInfo.ulModelNumber = ) and _ (PortInfo.ulSubsystemID = &H2094) Then Exit For End If End If nret = CanClosePort(hDeviceHandle) End If Next Delphi var szdevicename String; hdevicehandle THandle; nret, ndevicenumber Integer; PortInfo CAN_PORT_INFORMATION; for ndevicenumber = 1 to 255 do begin szdevicename = IFCAN + IntToStr(nDeviceNumber); hdevicehandle = CanOpenPort(szDeviceName); if hdevicehandle = -1 then Continue; PortInfo.ulStructLength = SizeOf(CAN_PORT_INFORMATION); nret = CanGetPortInformation(hDeviceHandle, PortInfo); if nret = IFCAN_ERROR_SUCCESS then begin if (PortInfo.ulModelNumber = ) and (PortInfo.ulSubsystemID = $2094) then break; end; nret = CanClosePort(hDeviceHandle); end; PCI のポートをオープンします 94

95 Visual C#.NET uint Ret; IntPtr DeviceHandle; IFCCAN_ANY.CAN_PORT_INFORMATION Info = new IFCCAN_ANY.CAN_PORT_INFORMATION(); DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Info.StructLength = System.Runtime.InteropServices.Marshal.SizeOf(Info); Ret = IFCCAN_ANY.CanGetPortInformation(DeviceHandle, ref Info); Visual Basic.NET Dim DeviceHandle As Integer Dim Ret As Integer Dim Info As IFCCAN_ANY.CAN_PORT_INFORMATION = New IFCCAN_ANY.CAN_PORT_INFORMATION DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Info.StructLength = System.Runtime.InteropServices.Marshal.SizeOf(Info) Ret = IFCCAN_ANY.CanGetPortInformation(DeviceHandle, Info) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; IFCCAN_ANYCAN_PORT_INFORMATION Info; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Info.StructLength = SystemRuntimeInteropServicesMarshalSizeOf(Info); Ret = IFCCAN_ANYCanGetPortInformation(DeviceHandle, Info); デバイス名 IFCCAN1 の CAN インタフェースのハードウェア情報を取得します 95

96 13. CanGetSendFifoCount 機能 送信 FIFO 内のメッセージ件数を取得します CanGetStatus 関数で取得できる送信バッファ内のメッセージ件数と 本関数で取得できる送信 FIFO 内のメッセージ件数を足すことで FIFO 送信モード中の未送信メッセージの件数を確認することができます 本関数は高機能版 複数周期送信版 CAN 製品で使用できます 書式 C 言語 INT CanGetSendFifoCount ( HANDLE hdevicehandle, PUCHAR pcount ); Visual Basic Declare Function CanGetSendFifoCount Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pcount As Byte _ )As Long Delphi function CanGetSendFifoCount ( hdevicehandle THandle; var pcount Byte ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanGetSendFifoCount ( IntPtr DeviceHandle, out byte Count ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanGetSendFifoCount ( uint DeviceHandle, out byte Count ); 96

97 Visual Basic.NET(x86 x64 共用 ) Declare Function CanGetSendFifoCount Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef Count As Byte _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanGetSendFifoCount Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef Count As Byte _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pcount 送信 FIFO 内に格納されている送信メッセージ数が取得できます 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 INT nret; UCHAR Count; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetSendFifoCount(hDeviceHandle, &Count); 97

98 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim Count As Byte Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetSendFifoCount(hDeviceHandle, Count) Delphi var lpszname String; hdevicehandle THandle; Count Byte; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); nret = CanGetSendFifoCount(hDeviceHandle, Count); Visual C#.NET uint Ret; byte Count; int DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetSendFifoCount(DeviceHandle, out Count); Visual Basic.NET Dim DeviceHandle As Integer Dim Count As Byte Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetSendFifoCount(DeviceHandle, Count) 98

99 Visual C++ CLR プロジェクト unsigned int Ret; unsigned char Count; int DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetSendFifoCount(DeviceHandle, Count); デバイス名 IFCAN1 の CAN インタフェースの送信 FIFO 内のメッセージ件数を取得します 99

100 14. CanSetEvent 機能 割り込み発生時に起動するコールバック関数 メッセージの登録を行います Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanSetEvent( HANDLE hdevicehandle, PCAN_EVENT_REQ pevent ); Visual Basic Declare Function CanSetEvent Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pevent CAN_EVENT_REQ _ )As Long Delphi function CanSetEvent( hdevicehandle THandle; var pevent CAN_EVENT_REQ ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanSetEvent( IntPtr DeviceHandle, ref CAN_EVENT_REQ EventReq ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanSetEvent( uint DeviceHandle, ref CAN_EVENT_REQ EventReq ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanSetEvent Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef EventReq As CAN_EVENT_REQ _ ) As Integer 100

101 Visual Basic.NET(x86 専用 ) Declare Function CanSetEvent Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef EventReq As CAN_EVENT_REQ _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pevent 割り込み発生時に呼び出されるユーザ コールバック関数 メッセージの設定を行う構造体へのポインタを指定してください 構造体の説明については 4.3 構造体説明 をご参照ください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 コールバック関数の書式 コールバック関数の書式は以下の通りです 関数名 ( ここでは lpcallback) は任意です C 言語 x86 用 VOID CALLBACK lpcallback( DWORD dwevent, // コールバック関数発生要因 DWORD dwuser // ユーザデータ ); C 言語 x64 用 VOID CALLBACK lpcallback( DWORD dwevent, // コールバック関数発生要因 PVOID dwuser // ユーザデータ ); Visual C#.NET(x86 x64 共用 ) void CallBack( uint EventFactor, // コールバック関数発生要因 IntPtr User // ユーザデータ ); Visual C#.NET(x86 専用 ) void CallBack( uint EventFactor, // コールバック関数発生要因 uint User // ユーザデータ ); 101

102 Visual Basic.NET (x86 x64 共用 ) Declare Sub CallBack( _ ByVal EventFactor, As Integer, _ コールバック関数発生要因 ByVal User As IntPtr _ ユーザデータ ) Visual Basic.NET (x86 専用 ) Declare Sub CallBack( _ ByVal EventFactor, As Integer, _ コールバック関数発生要因 ByVal User As Integer _ ユーザデータ ) 102

103 パラメータ dwevent コールバック関数発生要因 コールバック関数が発生した要因が渡されます 識別子 値 内容 CAN_EVENT_TRANSCEIVER_ERROR h 低速 CAN トランシーバでエラーが発生しました CAN_EVENT_ERR_FIFO_OVER h エラー FIFO がオーバーフローし エラー情報を取りこぼしました エラー FIFO トリガ値を下げてください CAN_EVENT_DETECT_OVERRUN h オーバーランエラーが発生し 受信データを取りこぼしました 受信 FIFO はデータがいっぱいになると CAN コントローラからデータを抜き取らなくなるため このオーバーランエラーが発生します 受信 FIFO トリガ値を下げてください ( このオーバーランエラーは エラー情報バッファにも格納されます ) CAN_EVENT_CYCLIC_SEND_STOP h 送信周期よりもデータ送信時間が長いため 周期送信が停止しました CAN_EVENT_BUS_STATUS h バスステータスの変化 ( エラーアクティブ エラーパッシブ バスオフ ) でイベントが発生しました CAN_EVENT_RECV ( 1) h 受信バッファに 1 つ以上の受信メッセージが蓄えられました CAN_EVENT_ERROR h エラーバッファに 1 つ以上のエラーが蓄えられました CAN_EVENT_TXB_IS_EMPTY ( 2) h 送信バッファ内の未送信データがなくなりました CAN_EVENT_ERROR_LIMIT h 送信 受信いずれかのエラーがリミット値を越えました リミット値は CAN_PORT_CONFIG 構造体の ulerrorlimit で指定します CAN_EVENT_RXB_FULL h 受信バッファがいっぱいになりました CAN_EVENT_ERB_FULL h エラーバッファがいっぱいになりました 1 CAN FD 版 CAN 製品では CAN/CAN FD いずれかの 1 つ以上の受信メッセージが蓄えられ た場合に発生します 2 CAN FD 版 CAN 製品では CAN/CAN FD いずれかの送信バッファ内の未送信データがなく なった場合に発生します 103

104 次の要因は PCI P CPZ P PEX CSI PEX-H485940P で発生し ます 識別子 値 内容 CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 12 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 11 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 10 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 9 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 8 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 7 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 6 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 5 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 4 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 3 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 2 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 1 の周期送信が停止しました CAN_EVENT_TIMER_COUNTER ( 1) h タイマカウンタ周期イベントが発生しました 1 PEX-H485940P(CAN FD 版 CAN 製品 ) ではタイマカウンタ周期イベントは発生しません dwuser CanSetEvent 関数実行時 CAN_EVENT_REQ 構造体の dwuser 変数に指定したユーザ データが取得されます また メッセージ機能を使用する場合 メッセージハンドラの WPARAM には dwevent が LPARAM には dwuser が渡されます 104

105 使用例 C 言語 (x86) // コールバック関数 VOID CALLBACK lpeventproc(dword dwevent, DWORD dwuser){ // 割り込み処理を記述します } // メインルーチン INT nret; HANDLE hdevicehandle; DWORD dweventmask; CAN_EVENT_REQ Event; hdevicehandle = CanOpenPort( IFCAN1 ); dweventmask = CAN_EVENT_RECV; nret = CanSetEventMask(hDeviceHandle, dweventmask); Event.hWnd = NULL; Event.hInterruptEvent = NULL; Event.lpCallBackProc = (LPCANCALLBACK)lpEventProc; Event.uInterruptMsg = WM_NULL; Event.dwUser = 0x1234; nret = CanSetEvent(hDeviceHandle, &Event); 105

106 C 言語 (x64) // UserData はグローバル引数である事 DWORD UserData = 0x1234; // コールバック関数 VOID CALLBACK lpeventproc(dword dwevent, PVOID dwuser){ DWORD Data = *((PDWORD)dwUser); } // 割り込み処理を記述します // メインルーチン INT nret; HANDLE hdevicehandle; DWORD dweventmask; CAN_EVENT_REQ Event; hdevicehandle = CanOpenPort( IFCAN1 ); dweventmask = CAN_EVENT_RECV; nret = CanSetEventMask(hDeviceHandle, dweventmask); Event.hWnd = NULL; Event.hInterruptEvent = NULL; Event.lpCallBackProc = (LPCANCALLBACK)lpEventProc; Event.uInterruptMsg = WM_NULL; Event.dwUser = &UserData; nret = CanSetEvent(hDeviceHandle, &Event); 106

107 Visual Basic コールバックルーチンは CanSetEvent 関数の呼び出しを行うプロジェクト内の標準モジュールの中に記述しなければなりません CanSetEvent 関数の引数パラメータでプロシージャのアドレスを渡す為に AddressOf 演算子を使用します AddressOf 演算子を使うと プロシージャからの戻り値ではなく プロシージャ自体のアドレスが ダイナミックリンクライブラリ (DLL) の CanSetEvent 関数に渡されます コールバックルーチン Sub lpeventproc(dwevent As Long, dwuser As Long) 割り込み処理を記述します End Sub コールバックルーチンのアドレス変換用関数 Function Trans(Proc As Long) As Long Trans = Proc End Function メインルーチン Dim lpszname As String Dim hdevicehandle As Long Dim EventReq As CAN_EVENT_REQ Dim dweventmask As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) dweventmask = CAN_EVENT_RECV nret = CanSetEventMask(hDeviceHandle, dweventmask) EventReq.hWnd = 0 EventReq.hInterruptEvent = 0 EventReq.lpCallBackProc = Trans(AddressOf lpeventproc) EventReq.uInterruptMsg = 0 EventReq.dwUser = &H1234 nret = CanSetEvent(hDeviceHandle, EventReq) 107

108 Delphi // コールバック関数 procedure lpeventproc(dwevent DWORD, dwuser DWORD) Stdcall; var // 変数定義 begin // 割り込み処理を記述します end; // メインルーチン var lpszname String; hdevicehandle THandle; Event CAN_EVENT_REQ; dweventmask DWORD; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); dweventmask = CAN_EVENT_RECV; nret = CanSetEventMask(hDeviceHandle, dweventmask); Event.hWnd = 0; Event.hInterruptEvent = 0; Event.lpCallBackProc = Addr(lpEventProc); Event.uInterruptMsg = WM_NULL; Event.dwUser = $1234; nret = CanSetEvent(hDeviceHandle, Event); 108

109 Visual C#.NET // コールバック関数 void EventProc(uint EventFactor, IntPtr User){ // 割り込み処理を記述します } // メインルーチン uint Ret; IntPtr DeviceHandle; uint EventMask; uint UserData; GCHandle PinnedBuffer; IFCCAN_ANY.CAN_EVENT_REQ Event = new IFCCAN_ANY.CAN_EVENT_REQ(); DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); EventMask = IFCCAN_ANY.CAN_EVENT_RECV; UserData = 0x1234; PinnedBuffer = GCHandle.Alloc(UserData, GCHandleType.Pinned); Event.Wnd = IntPtr.Zero; Event.InterruptEvent = IntPtr.Zero; Event.CallBackProc = new IFCCAN_ANY.PCANCALLBACK(EventProc); Event.InterruptMsg = 0; Event.User = PinnedBuffer.AddrOfPinnedObject(); Ret = IFCCAN_ANY.CanSetEvent(DeviceHandle, ref Event); Ret = IFCCAN_ANY.CanSetEventMask(DeviceHandle, EventMask); // 割り込み処理完了 PinnedBuffer.Free(); 109

110 Visual Basic.NET コールバックルーチン Public Sub EventProc(ByVal EventFactor As Integer, ByVal User As IntPtr) 割り込み処理を記述します End Sub メインルーチン Dim DeviceHandle As Integer Dim EventReq As IFCCAN_ANY.CAN_EVENT_REQ = New IFCCAN_ANY.CAN_EVENT_REQ Dim EventMask As Integer Dim proc As IFCCAN_ANY.PCANCALLBACK = New IFCCAN_ANY.PCANCALLBACK(AddressOf EventProc) Dim UserData As Integer Dim PinnedBuffer As GCHandle DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) EventMask = IFCCAN_ANY.CAN_EVENT_RECV Ret = IFCCAN_ANY.CanSetEventMask(DeviceHandle, EventMask) UserData = &H1234 PinnedBuffer = GCHandle.Alloc(UserData, GCHandleType.Pinned) EventReq.Wnd = IntPtr.Zero EventReq.InterruptEvent = 0 EventReq.CallBackProc = proc EventReq.InterruptMsg = 0 EventReq.User = PinnedBuffer.AddrOfPinnedObject() Ret = IFCCAN_ANY.CanSetEvent(DeviceHandle, EventReq) 割り込み処理完了 PinnedBuffer.Free() 110

111 Visual C++ CLR プロジェクト // コールバック関数 void EventProc(unsigned int EventFactor, IntPtr User){ // 割り込み処理を記述します } // メインルーチン unsigned int Ret; IntPtr DeviceHandle; unsigned int EventMask; unsigned int UserData; GCHandle PinnedBuffer; IFCCAN_ANYCAN_EVENT_REQ Event; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); EventMask = IFCCAN_ANYCAN_EVENT_RECV; UserData = 0x1234; PinnedBuffer = GCHandleAlloc(UserData, GCHandleTypePinned); Event.Wnd = IntPtr.Zero; Event.InterruptEvent = IntPtr.Zero; Event.CallBackProc = gcnew IFCCAN_ANYPCANCALLBACK(EventProc); Event.InterruptMsg = 0; Event.User = PinnedBuffer.AddrOfPinnedObject(); Ret = IFCCAN_ANYCanSetEvent(DeviceHandle, Event); Ret = IFCCAN_ANYCanSetEventMask(DeviceHandle, EventMask); デバイス名 IFCAN1 の CAN インタフェースの割り込みマスク コールバック関数を設定します 111

112 15. CanSetEventMask 機能 割り込みイベントのマスク設定を行います Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanSetEventMask( HANDLE hdevicehandle, DWORD dweventmask ); Visual Basic Declare Function CanSetEventMask Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dweventmask As Long _ )As Long Delphi function CanSetEventMask( hdevicehandle THandle; dweventmask DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanSetEventMask( IntPtr DeviceHandle, uint EventMask ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanSetEventMask( uint DeviceHandle, uint EventMask ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanSetEventMask Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal EventMask As Integer _ ) As Integer 112

113 Visual Basic.NET(x86 専用 ) Declare Function CanSetEventMask Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByVal EventMask As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dweventmask 使用する割り込みイベントのマスクデータを指定してください 識別子 値 内容 CAN_EVENT_TRANSCEIVER_ERROR ( 1) h 低速 CAN トランシーバでエラーが発生しました CAN_EVENT_ERR_FIFO_OVER ( 2) h エラー FIFO がオーバーフローし エラー情報を取りこぼしました エラー FIFO トリガ値を下げてください CAN_EVENT_DETECT_OVERRUN h オーバーランエラーが発生し 受信データを取りこぼしました 受信 FIFO はデータがいっぱいになると CAN コントローラからデータを抜き取らなくなるため このオーバーランエラーが発生します 受信 FIFO トリガ値を下げてください ( このオーバーランエラーは エラー情報バッファにも格納されます ) CAN_EVENT_CYCLIC_SEND_STOP ( 2) h 送信周期よりもデータ送信時間が長いため 周期送信が停止しました CAN_EVENT_BUS_STATUS h バスステータスの変化 ( エラーアクティブ エラーパッシブ バスオフ ) でイベントが発生しました CAN_EVENT_RECV ( 3) h 受信バッファに 1 つ以上の受信メッセージが蓄えられました CAN_EVENT_ERROR h エラーバッファに 1 つ以上のエラーが蓄えられました CAN_EVENT_TXB_IS_EMPTY ( 4) h 送信バッファ内の未送信データがなくなりました CAN_EVENT_ERROR_LIMIT h 送信 受信いずれかのエラーがリミット値を越えました リミット値は CAN_PORT_CONFIG 構造体の ulerrorlimit で指定します CAN_EVENT_RXB_FULL h 受信バッファがいっぱいになりました CAN_EVENT_ERB_FULL h エラーバッファがいっぱいになりました 1 低速 CAN のポートのみ有効です 2 高機能版 バスマスタ版 CAN FD 版 CAN 製品のみ有効です 113

114 3 CAN FD 版 CAN 製品では CAN/CAN FD いずれかの 1 つ以上の受信メッセージが蓄えられた場合に発生します 4 CAN FD 版 CAN 製品では CAN/CAN FD いずれかの送信バッファ内の未送信データがなくなった場合に発生します 次の要因は PCI P CPZ P PEX CSI PEX-H485940P で設定で きます 識別子 値 内容 CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 12 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 11 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 10 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 9 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 8 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 7 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 6 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 5 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 4 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 3 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 2 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_ STOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 1 の周期送信が停止しました CAN_EVENT_TIMER_COUNTER ( 1) h タイマカウンタ周期イベントが発生しました 1 PEX-H485940P(CAN FD 版 CAN 製品 ) ではタイマカウンタ周期イベントは発生しません 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 114

115 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dweventmask; hdevicehandle = CanOpenPort( IFCAN1 ); dweventmask = CAN_EVENT_RECV; nret = CanSetEventMask(hDeviceHandle, dweventmask); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim dweventmask As Long Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) dweventmask = CAN_EVENT_RECV nret = CanSetEventMask(hDeviceHandle, dweventmask) Delphi var lpszname String; hdevicehandle THandle; dweventmask DWORD; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); dweventmask = CAN_EVENT_RECV; nret = CanSetEventMask(hDeviceHandle, dweventmask); 115

116 Visual C#.NET uint Ret; IntPtr DeviceHandle; uint EventMask; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); EventMask = IFCCAN_ANY.CAN_EVENT_RECV; Ret = IFCCAN_ANY.CanSetEventMask(DeviceHandle, EventMask); Visual Basic.NET Dim DeviceHandle As Integer Dim EventMask As Integer Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) EventMask = IFCCAN_ANY.CAN_EVENT_RECV Ret = IFCCAN_ANY.CanSetEventMask(DeviceHandle, EventMask) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; unsigned int EventMask; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); EventMask = IFCCAN_ANYCAN_EVENT_RECV; Ret = IFCCAN_ANYCanSetEventMask(DeviceHandle, EventMask); デバイス名 IFCAN1 の CAN インタフェースの割り込みイベントマスクを設定します 116

117 16. CanGetEventMask 機能 割り込みイベントのマスク設定を取得します Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanGetEventMask( HANDLE hdevicehandle, PDWORD pdweventmask ); Visual Basic Declare Function CanGetEventMask Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pdweventmask As Long _ )As Long Delphi function CanGetEventMask( hdevicehandle THandle; var pdweventmask DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanGetEventMask( IntPtr DeviceHandle, out uint EventMask ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanGetEventMask( uint DeviceHandle, out uint EventMask ); 117

118 Visual Basic.NET(x86 x64 共用 ) Declare Function CanGetEventMask Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef EventMask As Integer _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanGetEventMask Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef EventMask As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください 118

119 pdweventmask 設定された割り込みイベントのマスクデータを格納する変数へのポインタを指定してく ださい デフォルトは 0 になっています 識別子 値 内容 CAN_EVENT_TRANSCEIVER_ERROR h 低速 CAN トランシーバでエラーが発生しました CAN_EVENT_ERR_FIFO_OVER h エラー FIFO がオーバーフローし エラー情報を取りこぼしました エラー FIFO トリガ値を下げてください CAN_EVENT_DETECT_OVERRUN h オーバーランエラーが発生し 受信データを取りこぼしました 受信 FIFO はデータがいっぱいになると CAN コントローラからデータを抜き取らなくなるため このオーバーランエラーが発生します 受信 FIFO トリガ値を下げてください ( このオーバーランエラーは エラー情報バッファにも格納されます ) CAN_EVENT_CYCLIC_SEND_STOP h 送信周期よりもデータ送信時間が長いため 周期送信が停止しました CAN_EVENT_BUS_STATUS h バスステータスの変化 ( エラーアクティブ エラーパッシブ バスオフ ) でイベントが発生しました CAN_EVENT_RECV ( 1) h 受信バッファに 1 つ以上の受信メッセージが蓄えられました CAN_EVENT_ERROR h エラーバッファに 1 つ以上のエラーが蓄えられました CAN_EVENT_TXB_IS_EMPTY ( 2) h 送信バッファ内の未送信データがなくなりました CAN_EVENT_ERROR_IMIT h 送信 受信いずれかのエラーがリミット値を越えました リミット値は CAN_PORT_CONFIG 構造体の ulerrorlimit で指定します CAN_EVENT_RXB_FULL h 受信バッファがいっぱいになりました CAN_EVENT_ERB_FULL h エラーバッファがいっぱいになりました 1 CAN FD 版 CAN 製品では CAN/CAN FD いずれかの 1 つ以上の受信メッセージが蓄えられ た場合に発生します 2 CAN FD 版 CAN 製品では CAN/CAN FD いずれかの送信バッファ内の未送信データがなく なった場合に発生します 119

120 次の要因は PCI P CPZ P PEX CSI PEX-H485940P で設定で きます 識別子 値 内容 CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 12 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 11 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 10 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 9 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 8 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 7 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 6 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 5 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 4 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 3 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 2 の周期送信が停止しました CAN_EVENT_MULTI_CYCLIC_SEND_S TOP_NO h 送信周期よりもデータ送信時間が長いため メッセージ番号 1 の周期送信が停止しました CAN_EVENT_TIMER_COUNTER ( 1) h タイマカウンタ周期イベントが発生しました 1 PEX-H485940P(CAN FD 版 CAN 製品 ) ではタイマカウンタ周期イベントは発生しません 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 120

121 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dweventmask; hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetEventMask(hDeviceHandle, &dweventmask); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim dweventmask As Long Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetEventMask(hDeviceHandle, dweventmask) Delphi var lpszname String; hdevicehandle THandle; dweventmask DWORD; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); nret = CanGetEventMask(hDeviceHandle, dweventmask); 121

122 Visual C#.NET uint Ret; IntPtr DeviceHandle; uint EventMask; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetEventMask(DeviceHandle, out EventMask); Visual Basic.NET Dim DeviceHandle As Integer Dim EventMask As Integer Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetEventMask(DeviceHandle, EventMask) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; unsigned int EventMask; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetEventMask(DeviceHandle, EventMask); デバイス名 IFCAN1 の CAN インタフェースの割り込みイベントマスクを取得します 122

123 17. CanKillEvent 機能 割り込み発生時に起動するコールバック関数 メッセージの解除を行います Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanKillEvent( HANDLE hdevicehandle ); Visual Basic Declare Function CanKillEvent Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long _ )As Long Delphi INT CanKillEvent( hdevicehandle THandle ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanKillEvent( IntPtr DeviceHandle ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanKillEvent( uint DeviceHandle ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanKillEvent Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanKillEvent Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer _ ) As Integer 123

124 パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 INT nret; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanKillEvent(hDeviceHandle); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanKillEvent(hDeviceHandle) Delphi var lpszname String; hdevicehandle THandle; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); nret = CanKillEvent(hDeviceHandle); 124

125 Visual C#.NET uint Ret; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanKillEvent(DeviceHandle); Visual Basic.NET Dim DeviceHandle As Integer Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanKillEvent(DeviceHandle) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanKillEvent(DeviceHandle); デバイス名 IFCAN1 の CAN インタフェースのコールバック関数の解除を行います 125

126 18. CanSetTimerConfig 機能 タイマカウンタの周期を設定します 設定した周期毎にイベントを発生させることが出来ます 書式 C 言語 INT CanSetTimerConfig ( HANDLE hdevicehandle, DWORD dwtimerconfig ); Visual Basic Declare Function CanSetTimerConfig Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwtimerconfig As Long _ )As Long Delphi function CanSetTimerConfig ( hdevicehandle THandle; dwtimerconfig DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanSetTimerConfig ( IntPtr DeviceHandle, uint TimerConfig ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanSetTimerConfig ( uint DeviceHandle, uint TimerConfig ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanSetTimerConfig Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal TimerConfig As Integer _ ) As Integer 126

127 Visual Basic.NET(x86 専用 ) Declare Function CanSetTimerConfig Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByVal TimerConfig As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dwtimerconfig タイマカウンタの周期を指定します 周期は 10μs 単位で設定します 設定可能範囲は 0~FFFFFFh(10μs~167,772,160μs) です FFFFFFh より大きい値を設定しても 自動的に FFFFFFh に設定されます 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 本関数は PCI P CPZ P PEX CSI で使用できます 127

128 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dwtimercount; DWORD dwtimerconfig; hdevicehandle = CanOpenPort( IFCAN1 ); // タイマカウンタの周期を取得 nret = CanGetTimerConfig(hDeviceHandle, &dwtimerconfig); // タイマカウンタの周期を 10ms に設定 nret = CanSetTimerConfig(hDeviceHandle, 10*100); // タイマカウンタのスタート nret = CanControlTimer(hDeviceHandle, CAN_TIMER_START); // タイマカウンタ値を取得 nret = CanGetTimerCount(hDeviceHandle, &dwtimercount); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim nret As Long Dim dwtimerconfig As Long Dim dwtimercount As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) ' タイマカウンタの周期を取得 nret = CanGetTimerConfig(hDeviceHandle, dwtimerconfig) ' タイマカウンタの周期を 10ms に設定 nret = CanSetTimerConfig(hDeviceHandle, 10*100) ' タイマカウンタのスタート nret = CanControlTimer(hDeviceHandle, CAN_TIMER_START) ' タイマカウンタ値を取得 nret = CanGetTimerCount(hDeviceHandle, dwtimercount) 128

129 Delphi var lpszname String; hdevicehandle THandle; nret Integer; dwtimerconfig DWORD; dwtimercount DWORD; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); // タイマカウンタの周期を取得 nret = CanGetTimerConfig(hDeviceHandle, dwtimerconfig); // タイマカウンタの周期を 10ms に設定 nret = CanSetTimerConfig(hDeviceHandle, 10*100); // タイマカウンタのスタート nret = CanControlTimer(hDeviceHandle, CAN_TIMER_START); // タイマカウンタ値を取得 nret = CanGetTimerCount(hDeviceHandle, dwtimercount); Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IntPtr DeviceHandle; uint TimerConfig; uint TimerCount; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // タイマカウンタの周期を取得 Ret = IFCCAN_ANY.CanGetTimerConfig(DeviceHandle, out TimerConfig); // タイマカウンタの周期を 10ms に設定 Ret = IFCCAN_ANY.CanSetTimerConfig(DeviceHandle, 10*100); // タイマカウンタのスタート nret = IFCCAN_ANY.CanControlTimer(DeviceHandle, CAN_TIMER_START); // タイマカウンタ値を取得 nret = IFCCAN_ANY.CanGetTimerCount(DeviceHandle, out TimerCount); 129

130 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer Dim TimerConfig As Integer Dim TimerCount As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) ' タイマカウンタの周期を取得 Ret = IFCCAN_ANY.CanGetTimerConfig(DeviceHandle, TimerConfig) ' タイマカウンタの周期を 10ms に設定 Ret = IFCCAN_ANY.CanSetTimerConfig(DeviceHandle, 10*100) ' タイマカウンタのスタート Ret = IFCCAN_ANY.CanControlTimer(DeviceHandle, CAN_TIMER_START) ' タイマカウンタ値を取得 Ret = IFCCAN_ANY.CanGetTimerCount(DeviceHandle, TimerCount) Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_MESSAGE CanMessage; IntPtr DeviceHandle; unsigned int TimerConfig; unsigned int TimerCount; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // タイマカウンタの周期を取得 Ret = IFCCAN_ANYCanGetTimerConfig(DeviceHandle, TimerConfig); // タイマカウンタの周期を 10ms に設定 Ret = IFCCAN_ANYCanSetTimerConfig(DeviceHandle, 10*100); // タイマカウンタのスタート nret = IFCCAN_ANYCanControlTimer(DeviceHandle, IFCCAN_ANYCAN_TIMER_START); // タイマカウンタ値を取得 nret = IFCCAN_ANYCanGetTimerCount(DeviceHandle, TimerCount); デバイス名 IFCAN1 の CAN インタフェースのタイマカウンタの周期を設定します 130

131 19. CanGetTimerCount 機能 タイマカウンタ値を取得します 書式 C 言語 INT CanGetTimerCount ( HANDLE hdevicehandle, PDWORD pdwtimercount ); Visual Basic Declare Function CanGetTimerCount Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pdwtimercount As Long _ )As Long Delphi function CanGetTimerCount ( hdevicehandle THandle; var pdwtimercount DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanGetTimerCount ( IntPtr DeviceHandle, out uint TimerCount ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanGetTimerCount ( uint DeviceHandle, out uint TimerCount ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanGetTimerCount Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef TimerCount As Integer _ ) As Integer 131

132 Visual Basic.NET(x86 専用 ) Declare Function CanGetTimerCount Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef TimerCount As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pdwtimercount タイマカウンタ値を格納する変数へのポインタを指定してください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 本関数は PCI P CPZ P PEX CSI で使用できます 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dwtimerconfig; DWORD dwtimercount; hdevicehandle = CanOpenPort( IFCAN1 ); // タイマカウンタの周期を取得 nret = CanGetTimerConfig(hDeviceHandle, &dwtimerconfig); // タイマカウンタの周期を 10ms に設定 nret = CanGetTimerConfig(hDeviceHandle, 10*100); // タイマカウンタのスタート nret = CanControlTimer(hDeviceHandle, CAN_TIMER_START); // タイマカウンタ値を取得 nret = CanGetTimerCount(hDeviceHandle, &dwtimercount); 132

133 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim nret As Long Dim dwtimerconfig As Long Dim dwtimercount As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) ' タイマカウンタの周期を取得 nret = CanGetTimerConfig(hDeviceHandle, dwtimerconfig) ' タイマカウンタの周期を 10ms に設定 nret = CanSetTimerConfig(hDeviceHandle, 10*100) ' タイマカウンタのスタート nret = CanControlTimer(hDeviceHandle, CAN_TIMER_START) ' タイマカウンタ値を取得 nret = CanGetTimerCount(hDeviceHandle, dwtimercount) 133

134 Delphi var lpszname String; hdevicehandle THandle; nret Integer; dwtimerconfig DWORD; dwtimercount DWORD; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); // タイマカウンタの周期を取得 nret = CanGetTimerConfig(hDeviceHandle, dwtimerconfig); // タイマカウンタの周期を 10ms に設定 nret = CanGetTimerConfig(hDeviceHandle, 10*100); // タイマカウンタのスタート nret = CanControlTimer(hDeviceHandle, CAN_TIMER_START); // タイマカウンタ値を取得 nret = CanGetTimerCount(hDeviceHandle, dwtimercount); Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IntPtr DeviceHandle; uint TimerConfig; uint TimerCount; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // タイマカウンタの周期を取得 Ret = IFCCAN_ANY.CanGetTimerConfig(DeviceHandle, out TimerConfig); // タイマカウンタの周期を 10ms に設定 Ret = IFCCAN_ANY.CanSetTimerConfig(DeviceHandle, 10*100); // タイマカウンタのスタート nret = IFCCAN_ANY.CanControlTimer(DeviceHandle, CAN_TIMER_START); // タイマカウンタ値を取得 nret = IFCCAN_ANY.CanGetTimerCount(DeviceHandle, out TimerCount); 134

135 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer Dim TimerConfig As Integer Dim TimerCount As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) ' タイマカウンタの周期を取得 Ret = IFCCAN_ANY.CanGetTimerConfig(DeviceHandle, TimerConfig) ' タイマカウンタの周期を 10ms に設定 Ret = IFCCAN_ANY.CanSetTimerConfig(DeviceHandle, 10*100) ' タイマカウンタのスタート Ret = IFCCAN_ANY.CanControlTimer(DeviceHandle, CAN_TIMER_START) ' タイマカウンタ値を取得 Ret = IFCCAN_ANY.CanGetTimerCount(DeviceHandle, TimerCount) 135

136 Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_MESSAGE CanMessage; IntPtr DeviceHandle; unsigned int TimerConfig; unsigned int TimerCount; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // タイマカウンタの周期を取得 Ret = IFCCAN_ANYCanGetTimerConfig(DeviceHandle, TimerConfig); // タイマカウンタの周期を 10ms に設定 Ret = IFCCAN_ANYCanSetTimerConfig(DeviceHandle, 10*100); // タイマカウンタのスタート nret = IFCCAN_ANYCanControlTimer(DeviceHandle, IFCCAN_ANYCAN_TIMER_START); // タイマカウンタ値を取得 nret = IFCCAN_ANYCanGetTimerCount(DeviceHandle, TimerCount); デバイス名 IFCAN1 の CAN インタフェースのタイマカウンタ値を取得します 136

137 20. CanControlTimer 機能 タイマカウンタを制御します タイマカウンタのスタート ストップ クリアを行えます 書式 C 言語 INT CanControlTimer ( HANDLE hdevicehandle, DWORD dwtimercontrol ); Visual Basic Declare Function CanControlTimer Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwtimercontrol As Long _ )As Long Delphi function CanControlTimer ( hdevicehandle THandle; dwtimercontrol DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanControlTimer ( IntPtr DeviceHandle, uint TimerControl ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanControlTimer ( uint DeviceHandle, uint TimerControl ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanControlTimer Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal TimerControl As Integer _ ) As Integer 137

138 Visual Basic.NET(x86 専用 ) Declare Function CanControlTimer Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByVal TimerControl As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dwtimercontrol タイマカウンタを制御します 制御内容を以下の識別子で指定してください 識別子 値 内容 CAN_TIMER_START h タイマカウンタのスタート CAN_TIMER_STOP h タイマカウントのストップ CAN_TIMER_CLEAR h タイマカウンタのクリア 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 本関数は PCI P CPZ P PEX CSI で使用できます 138

139 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dwtimerconfig; DWORD dwtimercount; hdevicehandle = CanOpenPort( IFCAN1 ); // タイマカウンタの周期を取得 nret = CanGetTimerConfig(hDeviceHandle, &dwtimerconfig); // タイマカウンタの周期を 10ms に設定 nret = CanGetTimerConfig(hDeviceHandle, 10*100); // タイマカウンタのスタート nret = CanControlTimer(hDeviceHandle, CAN_TIMER_START); // タイマカウンタ値を取得 nret = CanGetTimerCount(hDeviceHandle, &dwtimercount); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim nret As Long Dim dwtimerconfig As Long Dim dwtimercount As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) ' タイマカウンタの周期を取得 nret = CanGetTimerConfig(hDeviceHandle, dwtimerconfig) ' タイマカウンタの周期を 10ms に設定 nret = CanSetTimerConfig(hDeviceHandle, 10*100) ' タイマカウンタのスタート nret = CanControlTimer(hDeviceHandle, CAN_TIMER_START) ' タイマカウンタ値を取得 nret = CanGetTimerCount(hDeviceHandle, dwtimercount) 139

140 Delphi var lpszname String; hdevicehandle THandle; nret Integer; dwtimerconfig DWORD; dwtimercount DWORD; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); // タイマカウンタの周期を取得 nret = CanGetTimerConfig(hDeviceHandle, dwtimerconfig); // タイマカウンタの周期を 10ms に設定 nret = CanGetTimerConfig(hDeviceHandle, 10*100); // タイマカウンタのスタート nret = CanControlTimer(hDeviceHandle, CAN_TIMER_START); // タイマカウンタ値を取得 nret = CanGetTimerCount(hDeviceHandle, dwtimercount); Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IntPtr DeviceHandle; uint TimerConfig; uint TimerCount; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // タイマカウンタの周期を取得 Ret = IFCCAN_ANY.CanGetTimerConfig(DeviceHandle, out TimerConfig); // タイマカウンタの周期を 10ms に設定 Ret = IFCCAN_ANY.CanSetTimerConfig(DeviceHandle, 10*100); // タイマカウンタのスタート nret = IFCCAN_ANY.CanControlTimer(DeviceHandle, CAN_TIMER_START); // タイマカウンタ値を取得 nret = IFCCAN_ANY.CanGetTimerCount(DeviceHandle, out TimerCount); 140

141 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer Dim TimerConfig As Integer Dim TimerCount As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) ' タイマカウンタの周期を取得 Ret = IFCCAN_ANY.CanGetTimerConfig(DeviceHandle, TimerConfig) ' タイマカウンタの周期を 10ms に設定 Ret = IFCCAN_ANY.CanSetTimerConfig(DeviceHandle, 10*1000) ' タイマカウンタのスタート Ret = IFCCAN_ANY.CanControlTimer(DeviceHandle, CAN_TIMER_START) ' タイマカウンタ値を取得 Ret = IFCCAN_ANY.CanGetTimerCount(DeviceHandle, TimerCount) Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_MESSAGE CanMessage; IntPtr DeviceHandle; unsigned int TimerConfig; unsigned int TimerCount; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // タイマカウンタの周期を取得 Ret = IFCCAN_ANYCanGetTimerConfig(DeviceHandle, TimerConfig); // タイマカウンタの周期を 10ms に設定 Ret = IFCCAN_ANYCanSetTimerConfig(DeviceHandle, 10*100); // タイマカウンタのスタート nret = IFCCAN_ANYCanControlTimer(DeviceHandle, IFCCAN_ANYCAN_TIMER_START); // タイマカウンタ値を取得 nret = IFCCAN_ANYCanGetTimerCount(DeviceHandle, TimerCount); デバイス名 IFCAN1 の CAN インタフェースのタイマカウンタをスタートします 141

142 21. CanOutputSync 機能 CAN インタフェースモジュールの内部同期制御を設定します 弊社製タフコントローラ製品のみ本関数を使用できます 書式 C 言語 INT CanOutputSync ( HANDLE hdevicehandle, DWORD TrgLine, DWORD TrgMode ); Visual Basic Declare Function CanOutputSync Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal TrgLine As Long _ ByVal TrgMode As Long _ )As Long Delphi function CanOutputSync ( hdevicehandle THandle; TrgLine DWORD TrgMode DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanOutputSync ( IntPtr DeviceHandle, uint TrgLine, uint TrgMode ); Visual Basic.NET Declare Function CanControlTimer Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal TrgLine As Integer, _ ByVal TrgMode As Integer ) As Integer 142

143 パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください TrgLine 内部同期出力を行う信号を指定します 指定可能な識別子は下記から選択します 識別子 値 内容 CAN_SYNC_NUM h 内部同期ライン 1 TrgMode 内部同期トリガ出力条件を指定識別子のうちいずれか 1 つを指定します 内部同期トリガ出力は 下記の識別子で指定されます 識別子 値 内容 CAN_SYNC_DISABLE h 外部トリガ出力なし ( デフォルト ) CAN_SYNC_RECV h 内部同期トリガを受信時に出力する 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 本関数は ITC-A81310(S) ITC-A71310T(S) ITC-A61310(S) で使用できます 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dwtimerconfig; DWORD dwtimercount; hdevicehandle = CanOpenPort( IFCAN1 ); // 内部同期トリガを受信時に出力するよう設定 nret = CanOutputSync(hDeviceHandle, CAN_SYNC_NUM_1, CAN_SYNC_RECV); 143

144 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim nret As Long Dim dwtimerconfig As Long Dim dwtimercount As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) ' 内部同期トリガを受信時に出力するよう設定 nret = CanOutputSync(hDeviceHandle, CAN_SYNC_NUM_1, CAN_SYNC_RECV) Delphi var lpszname String; hdevicehandle THandle; nret Integer; dwtimerconfig DWORD; dwtimercount DWORD; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); // 内部同期トリガを受信時に出力するよう設定 nret = CanOutputSync(hDeviceHandle, CAN_SYNC_NUM_1, CAN_SYNC_RECV); Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // 内部同期トリガを受信時に出力するよう設定 Ret=IFCCAN_ANY.CanOutputSync(DeviceHandle,IFCCAN_ANY.CAN_SYNC_NUM_1, IFCCAN_ANY.CAN_SYNC_RECV); 144

145 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer Dim TimerConfig As Integer Dim TimerCount As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) ' 内部同期トリガを受信時に出力するよう設定 Ret=IFCCAN_ANY.CanOutputSync(DeviceHandle,IFCCAN_ANY.CAN_SYNC_NUM_1, IFCCAN_ANY.CAN_SYNC_RECV) Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_MESSAGE CanMessage; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 内部同期トリガを受信時に出力するよう設定 Ret=IFCCAN_ANYCanOutputSync(DeviceHandle,IFCCAN_ANYCAN_SYNC_NUM_1, IFCCAN_ANYCAN_SYNC_RECV); デバイス名 IFCAN1 の CAN インタフェースがデータ受信時に内部同期トリガを出力するよう設定します 145

146 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( HANDLE PCAN_PORT_CONFIG ); hdevicehandle, pportconfig Visual Basic Declare Function CanSetConfig Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pportconfig As CAN_PORT_CONFIG _ )As Long Delphi function CanSetConfig( hdevicehandle THandle; var pportconfig CAN_PORT_CONFIG ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanSetConfig( IntPtr DeviceHandle, ref CAN_PORT_CONFIG PortConfig ); 146

147 Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanSetConfig( uint DeviceHandle, ref CAN_PORT_CONFIG PortConfig ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanSetConfig Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef PortConfig As CAN_PORT_CONFIG _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanSetConfig Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef PortConfig As CAN_PORT_CONFIG _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pportconfig 通信条件設定構造体へのポインタを指定してください 構造体の説明については 4.3 構造体説明 をご参照ください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 1. 受信フィルタの設定は CanSetAcceptanceFilter 関数で行って下さい 2. バスマスタ版 CAN 製品は送信中のデータがある状態で 送信バッファサイズの変更は行えません 147

148 使用例 C 言語 INT nret; HANDLE hdevicehandle; CAN_PORT_CONFIG PortConfig hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetConfig(hDeviceHandle, &PortConfig); PortConfig.ulBaudRate = CAN_BAUDRATE_1M; nret = CanSetConfig(hDeviceHandle, &PortConfig); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim PortConfig As CAN_PORT_CONFIG Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetConfig(hDeviceHandle, PortConfig) PortConfig.ulBaudRate = CAN_BAUDRATE_1M nret = CanSetConfig(hDeviceHandle, PortConfig) Delphi var lpszname String; hdevicehandle THandle; PortConfig CAN_PORT_CONFIG; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); nret = CanGetConfig(hDeviceHandle, PortConfig); PortConfig.ulBaudRate = CAN_BAUDRATE_1M; nret = CanSetConfig(hDeviceHandle, PortConfig); 148

149 Visual C#.NET uint Ret; IntPtr DeviceHandle; IFCCAN_ANY.CAN_PORT_CONFIG PortConfig = new IFCCAN_ANY.CAN_PORT_CONFIG(); DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetConfig(DeviceHandle, out PortConfig); PortConfig.BaudRate = IFCCAN_ANY.CAN_BAUDRATE_1M; Ret = IFCCAN_ANY.CanSetConfig(DeviceHandle, ref PortConfig); Visual Basic.NET Dim DeviceHandle As Integer Dim PortConfig As IFCCAN_ANY.CAN_PORT_CONFIG = New IFCCAN_ANY.CAN_PORT_CONFIG Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetConfig(DeviceHandle, PortConfig) PortConfig.BaudRate = IFCCAN_ANY.CAN_BAUDRATE_1M Ret = IFCCAN_ANY.CanSetConfig(DeviceHandle, PortConfig) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; IFCCAN_ANYCAN_PORT_CONFIG PortConfig; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetConfig(DeviceHandle, PortConfig); PortConfigBaudRate = IFCCAN_ANYCAN_BAUDRATE_1M; Ret = IFCCAN_ANYCanSetConfig(DeviceHandle, PortConfig); デバイス名 IFCAN1 の CAN インタフェースを 通信速度 1Mbps に設定します 149

150 2. CanSetAcceptanceFilter 機能 CAN バス上を流れるメッセージを取り込む際のフィルタを設定します 本関数で設定を行うためには CAN バスへの接続を無効化 (CanDeactivate 関数 ) しておく必要があります ( 接続中のまま実行すると エラーが返されます ) 特定の 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 製品では CanSetAcceptanceFilerFD 関数を使用してください 書式 C 言語 INT CanSetAcceptanceFilter( HANDLE hdevicehandle, DWORD dwacceptancecode, DWORD dwacceptancemask ); Visual Basic Declare Function CanSetAcceptanceFilter Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwacceptancecode As Long, _ ByVal dwacceptancemask As Long _ )As Long Delphi function CanSetAcceptanceFilter( hdevicehandle THandle; dwacceptancecode DWORD; dwacceptancemask DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanSetAcceptanceFilter( IntPtr DeviceHandle, uint AcceptanceCode, uint AcceptanceMask ); 150

151 Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanSetAcceptanceFilter( uint DeviceHandle, uint AcceptanceCode, uint AcceptanceMask ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanSetAcceptanceFilter Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal AcceptanceCode As Integer, _ ByVal AcceptanceMask As Integer _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanSetAcceptanceFilter Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByVal AcceptanceCode As Integer, _ ByVal AcceptanceMask As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dwacceptancecode 後述の dwacceptancemask で 0 を指定したビットが 0 1 のどちらでフィルタを通過して受信バッファに取り込まれるか指定します CAN 通信製品では CAN コントローラ SJA1000 のレジスタ ACR0~3 に該当します デフォルトでは 0 に設定されています dwacceptancemask どのビットにアクセプタンスフィルタを適用するか指定してください 該当するビットに 0 を設定するとフィルタが有効になり dwacceptancecode で指定した値と受信メッセージの該当ビットが一致していれば 受信バッファに取り込まれます 1 を設定しているビットはフィルタの対象外となります フィルタを使用せず 全てのメッセージを受信したい場合は dwacceptancemask の全ビットに 1 を設定してください CAN 通信製品では CAN コントローラ SJA1000 のレジスタ AMR0~3 に該当します デフォルトでは FFFFFFFFh( 全ビット 1) に設定されています 151

152 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 dwacceptancecode dwacceptancemask は CanSetConfig 関数で設定する CAN_PORT_CONFIG 構造体の ulfiltermode 及び 使用するフレームフォーマット ( 標準 / 拡張フォーマット ) により 内容が異なります ulfiltermode が CAN_SINGLE_FILTER の場合 1 種類のフィルタを設定することが可能です 標準フォーマット 11 ビット ID 全てに対しフィルタを設定することが可能です また データバイトの先頭 2 バイトに対してもフィルタを設定することが出来ます フィルタの適用範囲は以下の通りです フレームの先頭 ID(11 ビット ) RTR 1 バイト目データ 2 バイト目データ 3 バイト目 フィルタの適用範囲 ビット ( 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 フィルタ対象 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.dwAcceptanceCode dwacceptancemask のビットです 2.0 を指定してください 152

153 拡張フォーマット 29 ビット ID 全てに対しフィルタを設定することが可能です フィルタの適用範囲は以下の通りです フレームの先頭 ID(29 ビット ) RTR 1 バイト目データ 2 バイト目 ~ フィルタの適用範囲 ビット 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 予約 153

154 ulfiltermode が CAN_DUAL_FILTER の場合 2 種類のフィルタ (No.1 フィルタ No.2 フィルタ ) を設定することが可能です No.1 フィルタ No.2 フィルタのいずれか片方のフィルタさえ通過すれば データは受信されます (No.1 フィルタを通過したデータに さらに No.2 フィルタを通過させ 両方のフィルタを通過するデータのみを受信するのではありません ) 標準フォーマット 11 ビット ID 全てに対し 2 種類のフィルタを設定することが可能です そのうち No.1 フィルタについては データバイトの先頭 1 バイトに対してもフィルタを設定することが出来ます dwacceptancecode dwacceptancemask の bit0~bit3 および bit16~bit31 の部分が No.1 フィルタになり bit4~bit15 の部分が No.2 フィルタになります フィルタの適用範囲は以下の通りです フレームの先頭 ID(11 ビット ) RTR 1 バイト目データ 2 バイト目 ~ 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 フィルタ 154

155 拡張フォーマット 29 ビット ID のうち 先頭の 16 ビットに対し 2 種類のフィルタを設定することが可能です dwacceptancecode dwacceptancemask の bit16~bit31 の部分が No.1 フィルタになり bit0 ~bit15 の部分が No.2 フィルタになります フィルタの適用範囲は以下の通りです フレームの先頭 ID(29 ビット ) RTR 1 バイト目データ 2 バイト目 ~ ~ 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 フィルタ 155

156 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dwacceptancecode,dwacceptancemask; CAN_PORT_CONFIG PortConfig hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetConfig(hDeviceHandle, &PortConfig); PortConfig.ulFilterMode = CAN_SINGLE_FILTER; nret = CanSetConfig(hDeviceHandle, &PortConfig); dwacceptancemask = 0x001fffff; dwacceptancecode = 0x ; // ID が (2 進数 ) nret = CanSetAcceptanceFilter(hDeviceHandle, dwacceptancecode, dwacceptancemask); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim dwacceptancecode As Long Dim dwacceptancemask As Long Dim PortConfig As CAN_PORT_CONFIG Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetConfig(hDeviceHandle, PortConfig) PortConfig.ulFilterMode = CAN_SINGLE_FILTER nret = CanSetConfig(hDeviceHandle, PortConfig) dwacceptancemask = &H001fffff dwacceptancecode = &H ID が (2 進数 ) nret = CanSetAcceptanceFilter(hDeviceHandle, dwacceptancecode, dwacceptancemask) 156

157 Delphi var lpszname String; hdevicehandle THandle; PortConfig CAN_PORT_CONFIG; dwacceptancecode DWORD; dwacceptancemask DWORD; nret Integer lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); nret = CanGetConfig(hDeviceHandle, PortConfig); PortConfig.ulFilterMode = CAN_SINGLE_FILTER; nret = CanSetConfig(hDeviceHandle, PortConfig); dwacceptancemask = $001fffff; dwacceptancecode = $ ; // ID が (2 進数 ) nret = CanSetAcceptanceFilter(hDeviceHandle, dwacceptancecode, dwacceptancemask); Visual C#.NET uint Ret; IntPtr DeviceHandle; uint AcceptanceCode; uint AcceptanceMask; IFCCAN_ANY.CAN_PORT_CONFIG PortConfig = new IFCCAN_ANY.CAN_PORT_CONFIG(); DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetConfig(DeviceHandle, out PortConfig); PortConfig.FilterMode = IFCCAN_ANY.CAN_SINGLE_FILTER; Ret = IFCCAN_ANY.CanSetConfig(DeviceHandle, ref PortConfig); AcceptanceMask = 0x001fffff; AcceptanceCode = 0x ; // ID が (2 進数 ) Ret = IFCCAN_ANY.CanSetAcceptanceFilter(DeviceHandle, AcceptanceCode, AcceptanceMask); 157

158 Visual Basic.NET Dim DeviceHandle As Integer Dim AcceptanceCode As Integer Dim AcceptanceMask As Integer Dim PortConfig As IFCCAN_ANY.CAN_PORT_CONFIG = New IFCCAN_ANY.CAN_PORT_CONFIG Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetConfig(DeviceHandle, PortConfig) PortConfig.FilterMode = IFCCAN_ANY.CAN_SINGLE_FILTER Ret = IFCCAN_ANY.CanSetConfig(DeviceHandle, PortConfig) AcceptanceMask = &H001fffff AcceptanceCode = &H ID が (2 進数 ) Ret = IFCCAN_ANY.CanSetAcceptanceFilter(DeviceHandle, AcceptanceCode, AcceptanceMask) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; unsigned int AcceptanceCode; unsigned int AcceptanceMask; IFCCAN_ANYCAN_PORT_CONFIG PortConfig; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetConfig(DeviceHandle, PortConfig); PortConfig.FilterMode = IFCCAN_ANYCAN_SINGLE_FILTER; Ret = IFCCAN_ANYCanSetConfig(DeviceHandle, PortConfig); AcceptanceMask = 0x001fffff; AcceptanceCode = 0x ; // ID が (2 進数 ) Ret = IFCCAN_ANYCanSetAcceptanceFilter(DeviceHandle, AcceptanceCode, AcceptanceMask); デバイス名 IFCAN1 の CAN インタフェースを シングルフィルタモードに設定し 標準フレームの ID が 2 進数で のメッセージフレームのみ受信するように設定します もし 拡張フレーム (29 ビット ID) が送られてきた場合は ID の上位 11 ビットが になるメッセージフレームのみ受信されます 158

159 3. CanGetConfig 機能 CAN インタフェースの現在の各種設定値を取得します オープン直後はデフォルト値の取得 設定値の変更後は現在の設定値を取得します 本関数の実行時 CAN バスへの接続を無効化 (CanDeactivate 関数 ) する必要はありません CanOpenPort 関数でオープン後であれば いつでも使用することができます Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では一部取得できない項目があります 項目については構造体 CAN_PORT_CONFIG を参照してください 書式 C 言語 INT CanGetConfig( HANDLE PCAN_PORT_CONFIG ); hdevicehandle, pportconfig Visual Basic Declare Function CanGetConfig Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pportconfig As CAN_PORT_CONFIG _ )As Long Delphi function CanGetConfig( hdevicehandle THandle; var pportconfig CAN_PORT_CONFIG ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanGetConfig( IntPtr DeviceHandle, out CAN_PORT_CONFIG PortConfig ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanGetConfig( uint DeviceHandle, out CAN_PORT_CONFIG PortConfig ); 159

160 Visual Basic.NET(x86 x64 共用 ) Declare Function CanGetConfig Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef PortConfig As CAN_PORT_CONFIG _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanGetConfig Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef PortConfig As CAN_PORT_CONFIG _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pportconfig 通信条件設定構造体へのポインタを指定してください 取得された値が格納されます 構造体の説明については 4.3 構造体説明 をご参照ください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 受信フィルタの設定取得は CanGetAcceptanceFilter 関数で行って下さい 使用例 C 言語 INT nret; HANDLE hdevicehandle; CAN_PORT_CONFIG PortConfig hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetConfig(hDeviceHandle, &PortConfig); 160

161 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim PortConfig As CAN_PORT_CONFIG Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetConfig(hDeviceHandle, PortConfig) Delphi var lpszname String; hdevicehandle THandle; PortConfig CAN_PORT_CONFIG; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); nret = CanGetConfig(hDeviceHandle, PortConfig); Visual C#.NET uint Ret; IntPtr DeviceHandle; IFCCAN_ANY.CAN_PORT_CONFIG PortConfig = new IFCCAN_ANY.CAN_PORT_CONFIG(); DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetConfig(DeviceHandle, out PortConfig); Visual Basic.NET Dim DeviceHandle As Integer Dim PortConfig As IFCCAN_ANY.CAN_PORT_CONFIG = New IFCCAN_ANY.CAN_PORT_CONFIG Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetConfig(DeviceHandle, PortConfig) 161

162 Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; IFCCAN_ANYCAN_PORT_CONFIG PortConfig; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetConfig(DeviceHandle, PortConfig); デバイス名 IFCAN1 の CAN インタフェースの通信条件設定を取得します 162

163 4. CanGetAcceptanceFilter 機能 受信フィルタの現在の設定を取得します CanSetAcceptanceFilter 関数の説明も併せてご覧下さい Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません CAN FD 版 CAN 製品ではフィルタ 1 の設定が取得できます 書式 C 言語 INT CanGetAcceptanceFilter( HANDLE hdevicehandle, PDWORD pdwacceptancecode, PDWORD pdwacceptancemask ); Visual Basic Declare Function CanGetAcceptanceFilter Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pdwacceptancecode As Long, _ ByRef pdwacceptancemask As Long _ )As Long Delphi function CanGetAcceptanceFilter( hdevicehandle THandle; var pdwacceptancecode DWORD; var pdwacceptancemask DWORD ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanGetAcceptanceFilter( IntPtr DeviceHandle, out uint AcceptanceCode, out uint AcceptanceMask ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanGetAcceptanceFilter( uint DeviceHandle, out uint AcceptanceCode, out uint AcceptanceMask ); 163

164 Visual Basic.NET(x86 x64 共用 ) Declare Function CanGetAcceptanceFilter Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef AcceptanceCode As Integer, _ ByRef AcceptanceMask As Integer _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanGetAcceptanceFilter Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef AcceptanceCode As Integer, _ ByRef AcceptanceMask As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pdwacceptancecode ビットパターン設定値取得用変数へのポインタを指定してください CAN 通信製品では CAN コントローラ SJA1000 のレジスタ ACR0~3 に該当します pdwacceptancemask マスクパターン設定値取得用変数へのポインタを指定してください CAN 通信製品では CAN コントローラ SJA1000 のレジスタ AMR0~3 に該当します 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dwacceptancecode,dwacceptancemask; hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetAcceptanceFilter(hDeviceHandle, &dwacceptancecode, &dwacceptancemask); 164

165 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim dwacceptancecode As Long Dim dwacceptancemask As Long Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetAcceptanceFilter(hDeviceHandle, dwacceptancecode, dwacceptancemask) Delphi var lpszname String; hdevicehandle THandle; dwacceptancecode DWORD; dwacceptancemask DWORD; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); nret = CanGetAcceptanceFilter(hDeviceHandle, dwacceptancecode, dwacceptancemask); Visual C#.NET uint Ret; IntPtr DeviceHandle; uint AcceptanceCode; uint AcceptanceMask; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetAcceptanceFilter(DeviceHandle, out AcceptanceCode, out AcceptanceMask); 165

166 Visual Basic.NET Dim DeviceHandle As Integer Dim AcceptanceCode As Integer Dim AcceptanceMask As Integer Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetAcceptanceFilter(DeviceHandle, AcceptanceCode, AcceptanceMask) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; unsigned int AcceptanceCode; unsigned int AcceptanceMask; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetAcceptanceFilter(DeviceHandle, AcceptanceCode, AcceptanceMask); デバイス名 IFCAN1 の CAN インタフェースのフィルタ設定状態を取得します 166

167 5. CanSendMessage 機能 CAN メッセージの送信を行います 本関数の実行後 送信バッファにメッセージが蓄えられ 順次送信されます 送信の完了は 送信完了メッセージの取得により確認できます また CanSetEvent 関数でイベントを設定することで送信バッファが空になった時点でイベントを発生させることができます ( イベント コールバック関数 ウィンドウメッセージ ) セットするメッセージの個数を指定することで 1 回の関数呼び出しで複数のメッセージを送信バッファに蓄えることができます CAN バスへの接続が有効である場合のみ実行できます バスマスタ版 CAN FD 版 CAN 製品では 1 回の関数呼び出しで送信バッファに蓄えられるメッセージは 960 個までです Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では 1 回の関数呼び出しで複数のメッセージを送信バッファへ蓄えることはできません また イベントの発生をさせることができません 書式 C 言語 INT CanSendMessage( HANDLE hdevicehandle, PCAN_MESSAGE pcanmessage, unsigned long ulcount ); Visual Basic Declare Function CanSendMessage Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pcanmessage As CAN_MESSAGE, _ ByVal ulcount As Long _ )As Long Delphi function CanSendMessage( hdevicehandle THandle; var pcanmessage CAN_MESSAGE; ulcount ULONG ) Integer; stdcall; external IFCan.DLL ; 167

168 Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanSendMessage( IntPtr DeviceHandle, ref CAN_MESSAGE CanMessage, uint Count ); [DllImport( IFCan.dll )] public static extern uint CanSendMessage( IntPtr DeviceHandle, CAN_MESSAGE[] CanMessage, uint Count ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanSendMessage( uint DeviceHandle, ref CAN_MESSAGE CanMessage, uint Count ); [DllImport( IFCan.dll )] public static extern uint CanSendMessage( uint DeviceHandle, CAN_MESSAGE[] CanMessage, uint Count ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef CanMessage As CAN_MESSAGE, _ ByVal Count As Integer _ ) As Integer Declare Function CanSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal CanMessage() As CAN_MESSAGE, _ ByVal Count As Integer _ ) As Integer 168

169 Visual Basic.NET(x86 専用 ) Declare Function CanSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef CanMessage As CAN_MESSAGE, _ ByVal Count As Integer _ ) As Integer Declare Function CanSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByVal CanMessage() As CAN_MESSAGE, _ ByVal Count As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pcanmessage 送信するメッセージを格納した構造体のポインタを指定してください 高機能版 バスマスタ版 CAN 製品では CAN_MESSAGE 構造体の ultime メンバ変数がディレイ時間を表します 単位は 10μs です 例えば ultime に 100 を指定して CanSendMessage 関数を呼ぶと 1ms(100 10μs) 待ってから データを送信します 設定可能範囲は 0 ~1FFFFFh です 1FFFFFh より大きい値を設定しても 自動的に 1FFFFFh になります スタンダード版では CAN_MESSAGE 構造体の ultime は使用しません 設定値は無効となります ulcount で指定された個数分の領域を用意してください CAN_MESSAGE 構造体の説明については 4.3 構造体説明 をご参照ください ulcount 送信バッファにセットするメッセージの個数を指定してください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 169

170 使用例 C 言語 INT nret; CAN_MESSAGE CanMessage[10]; HANDLE hdevicehandle; unsigned long ulsendvalue; hdevicehandle = CanOpenPort( IFCAN1 ); for (i=0;i<10;i++) { // 送信メッセージ長のセット CanMessage[i].ulLength = 4; // 送信メッセージの ID をセット CanMessage[i].ulID = 0x01 CAN_EXT_FRAME; // フラグの設定 CanMessage[i].ulFlag = 0; // ディレイ時間なし ( 高機能版 バスマスタ版 CAN 製品のみ有効 ) CanMessage[i].ulTime = 0; // 送信メッセージの内容をコピー *(unsigned long*)canmessage[i].bdata = ulsendvalue; } nret = CanActivate(hDeviceHandle); // 送信メッセージのセット ( 送信開始 ) nret = CanSendMessage(hDeviceHandle, CanMessage, 10); 170

171 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim CanMessage(0 To 9) As CAN_MESSAGE Dim bsendvalue(0 To 3) As Byte Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) For i = 0 To 9 送信メッセージ長のセット CanMessage(i).ulLength = 4 送信メッセージの ID をセット CanMessage(i).ulID = &H01 Or CAN_EXT_FRAME フラグの設定 CanMessage(i).ulFlag = 0 ディレイ時間なし ( 高機能版 バスマスタ版 CAN 製品のみ有効 ) CanMessage(i).ulTime = 0 送信メッセージの内容をコピー CanMessage(i).bData(0) = bsendvalue(0) CanMessage(i).bData(1) = bsendvalue(1) CanMessage(i).bData(2) = bsendvalue(2) CanMessage(i).bData(3) = bsendvalue(3) Next nret = CanActivate(hDeviceHandle) 送信メッセージのセット ( 送信開始 ) nret = CanSendMessage(hDeviceHandle, CanMessage(0), 10) 171

172 Delphi var lpszname String; hdevicehandle THandle; CanMessage array[0..9] of CAN_MESSAGE; bsendvalue array[0..3] of Byte; nret Integer; i Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); for i = 0 to 9 do begin // 送信メッセージ長のセット CanMessage[i].ulLength = 4; // 送信メッセージの ID をセット CanMessage[i].ulID = $01 CAN_EXT_FRAME; // フラグの設定 CanMessage[i].ulFlag = 0; // ディレイ時間なし ( 高機能版 バスマスタ版 CAN 製品のみ有効 ) CanMessage[i].ulFlag = 0; // 送信メッセージの内容をコピー CanMessage[i].bData[0] = bsendvalue[0]; CanMessage[i].bData[1] = bsendvalue[1]; CanMessage[i].bData[2] = bsendvalue[2]; CanMessage[i].bData[3] = bsendvalue[3]; end; nret = CanActivate(hDeviceHandle); // 送信メッセージのセット ( 送信開始 ) nret = CanSendMessage(hDeviceHandle, CanMessage[0], 10); 172

173 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE[] CanMessage = new IFCCAN_ANY.CAN_MESSAGE[10]; IntPtr DeviceHandle; byte SendValue; int i; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); for (i = 0; i < 10; i++) { // Data 配列の初期化 CanMessage[i].InitializeArray(); // 送信メッセージ長のセット CanMessage[i].Length = 1; // 送信メッセージの ID をセット CanMessage[i].ID = 0x01 IFCCAN_ANY.CAN_EXT_FRAME; // フラグの設定 CanMessage[i].Flag = 0; // ディレイ時間なし ( 高機能版 バスマスタ版 CAN 製品のみ有効 ) CanMessage[i].Time = 0; // 送信メッセージの内容をコピー CanMessage[i].Data[0] = SendValue; } Ret = IFCCAN_ANY.CanActivate(DeviceHandle); // 送信メッセージのセット ( 送信開始 ) Ret = IFCCAN_ANY.CanSendMessage(DeviceHandle, CanMessage, 10); 173

174 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage(9) As IFCCAN_ANY.CAN_MESSAGE Dim SendValue As Byte Dim Ret As Integer DeviceHandle = CanOpenPort( IFCAN1 ) For i = 0 To 9 Data 配列の初期化 CanMessage(i).InitializeArray() 送信メッセージ長のセット CanMessage(i).Length = 4 送信メッセージの ID をセット CanMessage(i).ID = &H01 Or IFCCAN_ANY.CAN_EXT_FRAME フラグの設定 CanMessage(i).Flag = 0 ディレイ時間なし ( 高機能版 バスマスタ版 CAN 製品のみ有効 ) CanMessage(i).Time = 0 送信メッセージの内容をコピー CanMessage(i).Data(0) = SendValue Next Ret = IFCCAN_ANY.CanActivate(DeviceHandle) 送信メッセージのセット ( 送信開始 ) Ret = IFCCAN_ANY.CanSendMessage(DeviceHandle, CanMessage, 10) 174

175 Visual C++ CLR プロジェクト unsigned int Ret; array<ifccan_anycan_message>^ CanMessage = gcnew array<ifccan_anycan_message>(10); IntPtr DeviceHandle; unsigned char SendValue; int i; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); for (i = 0; i < 10; i++) { // Data 配列の初期化 CanMessage[i].InitializeArray(); // 送信メッセージ長のセット CanMessage[i].Length = 1; // 送信メッセージの ID をセット CanMessage[i].ID = 0x01 IFCCANCAN_EXT_FRAME; // フラグの設定 CanMessage[i].Flag = 0; // ディレイ時間なし ( 高機能版 バスマスタ版 CAN 製品のみ有効 ) CanMessage[i].Time = 0; // 送信メッセージの内容をコピー CanMessage[i].Data[0] = SendValue; } Ret = IFCCAN_ANYCanActivate(DeviceHandle); // 送信メッセージのセット ( 送信開始 ) Ret = IFCCAN_ANYCanSendMessage(DeviceHandle, CanMessage, 10); デバイス名 IFCAN1 の CAN インタフェースから 10 件のメッセージ送信を行います 175

176 6. CanCyclicSendMessage 機能 CAN メッセージの周期送信を行います この関数は非同期で実行されますので 関数実行後にすぐに処理が返ります 設定した周期でデータ送信ができなかった場合と CanStopCyclicSendMessage 関数を実行した場合のみ 周期送信を停止します 周期送信実行中は CanSendMessage CanSendMessageFD CanMultiCyclicSendMessage CanMultiCyclicSendMessageFD 関数は使用できません また 周期送信メッセージは 送信完了メッセージを取得できません Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanCyclicSendMessage( HANDLE hdevicehandle, PCAN_MESSAGE PCanMessage ); Visual Basic Declare Function CanCyclicSendMessage Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pcanmessage As CAN_MESSAGE _ )As Long Delphi function CanCyclicSendMessage( hdevicehandle THandle; var pcanmessage CAN_MESSAGE ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanCyclicSendMessage( IntPtr DeviceHandle, ref CAN_MESSAGE CanMessage ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanCyclicSendMessage( uint DeviceHandle, ref CAN_MESSAGE CanMessage ); 176

177 Visual Basic.NET(x86 x64 共用 ) Declare Function CanCyclicSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef CanMessage As CAN_MESSAGE _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanCyclicSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef CanMessage As CAN_MESSAGE _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pcanmessage 送信するメッセージを格納した構造体のポインタを指定してください CanCyclicSendMessage 関数では CAN_MESSAGE 構造体の ultime に送信を行う周期を 10μs 単位で設定します 設定可能範囲は 1~1FFFFFh(10μs~20,971,510μs) です 1FFFFFh より大きい値を設定しても 自動的に 1FFFFFh に設定されます PCI P CPZ P PEX CSI 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 戻り値一覧 をご参照ください 177

178 備考 1. データの送信時間よりも 周期時間を短く設定した場合 指定された時間に送信ができず 周期実行は停止します 例えば データの送信に 80ms かかるのに 周期時間を 50ms に設定した場合 50ms 経過したときに まだデータが送信中なので 周期実行が停止します 周期実行の停止は CanSetEvent 関数 CanSetEventMask 関数での設定を行っている場合 イベントにより通知されます また アービトレーションロストにより 指定した周期にデータを送信できない場合もあります アービトレーションロストが発生し データを再送しているときに 次の周期時間が来ると 上記と同じように 周期実行が停止します 例 ) 周期を 50ms に設定した場合 データ送信中 周期送信開始 50ms データ送信中 50ms 時間 例 ) 周期を 50ms に設定したが その周期よりもデータ送信時間が長い場合 データ送信中 50ms 前回のデータが まだ送信完了していないため 次のデータが送れずに周期送信は停止します 時間 周期送信開始 周期送信実行中でも 周期送信を行いたいデータの更新 周期の更新を行えます 更新したデータは 次の周期から反映されます 178

179 例 ) 周期送信を行うデータや周期を更新したい場合 データ A 送信中 50ms データ B 送信中 80ms 周期送信開始 時間データ 周期の更新はいつでも可能です ただし 反映されるのは次の周期からになります 例えば この時点で 周期送信を行うデータを B に 周期を 80ms に更新したとすると 前回の設定周期の 50ms が経過してから データ B が 80ms 周期で送信されるようになります 優先順位の高いメッセージを短い周期で送信していると アービトレーションにより それより優先順位の低いメッセージが送信されにくくなりますので ご注意ください 2. 本関数は スタンダード版 CAN 製品では使用することはできません 注意事項 CAN コントローラへのアクセスが競合すると 指定された時間に送信できず 周期送信が停止する場合があります その場合 CanGetStatus 関数によるステータスの読み出しや データ受信と競合した場合等に現象が発生しますので 周期送信を行うポートに対して下記のような対策をご検討下さい メッセージを受信しないよう 受信フィルタを設定する ステータスのポーリングを行わない 179

180 使用例 C 言語 INT nret; CAN_MESSAGE CanMessage; HANDLE hdevicehandle; unsigned long ulsendvalue; hdevicehandle = CanOpenPort( IFCAN1 ); // 送信メッセージ長のセット CanMessage.ulLength = 4; // 送信メッセージの ID をセット CanMessage.ulID = 0x01 CAN_EXT_FRAME; // フラグの設定 CanMessage.ulFlag = 0; // 300ms 周期 CanMessage.ulTime = 300*100; // 送信メッセージの内容をコピー *(unsigned long*)canmessage[i].bdata = ulsendvalue; nret = CanActivate(hDeviceHandle); // 300ms 周期で送信 nret = CanCyclicSendMessage(hDeviceHandle, CanMessage); 180

181 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim CanMessage As CAN_MESSAGE Dim bsendvalue(0 To 3) As Byte Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) 送信メッセージ長のセット CanMessage.ulLength = 4 送信メッセージの ID をセット CanMessage.ulID = &H01 Or CAN_EXT_FRAME フラグの設定 CanMessage.ulFlag = 0 300ms 周期 CanMessage.ulTime = 300*100 送信メッセージの内容をコピー CanMessage.bData(0) = bsendvalue(0) CanMessage.bData(1) = bsendvalue(1) CanMessage.bData(2) = bsendvalue(2) CanMessage.bData(3) = bsendvalue(3) nret = CanActivate(hDeviceHandle) 300ms 周期で送信 nret = CanCyclicSendMessage(hDeviceHandle, CanMessage) 181

182 Delphi var lpszname String; hdevicehandle THandle; CanMessage CAN_MESSAGE; bsendvalue array[0..3] of Byte; nret Integer; i Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); // 送信メッセージ長のセット CanMessage.ulLength = 4; // 送信メッセージの ID をセット CanMessage.ulID = $01 CAN_EXT_FRAME; // フラグの設定 CanMessage.ulFlag = 0; // 300ms 周期 CanMessage.ulTime = 300*100; // 送信メッセージの内容をコピー CanMessage.bData[0] = bsendvalue[0]; CanMessage.bData[1] = bsendvalue[1]; CanMessage.bData[2] = bsendvalue[2]; CanMessage.bData[3] = bsendvalue[3]; nret = CanActivate(hDeviceHandle); // 300ms 周期で送信 nret = CanCyclicSendMessage(hDeviceHandle, CanMessage); 182

183 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // Data 配列の初期化 CanMessage.InitializezArray(); // 送信メッセージ長のセット CanMessage.Length = 4; // 送信メッセージの ID をセット CanMessage.ID = 0x01 IFCCAN_ANY.CAN_EXT_FRAME; // フラグの設定 CanMessage.Flag = 0; // 300ms 周期 CanMessage.Time = 300*100; // 送信メッセージの内容をセット CanMessage.Data[0] = 0x01; CanMessage.Data[1] = 0x02; CanMessage.Data[2] = 0x03; CanMessage.Data[3] = 0x04; Ret = IFCCAN_ANY.CanActivate(DeviceHandle); // 300ms 周期で送信 Ret = IFCCAN_ANY.CanCyclicSendMessage(DeviceHandle, ref CanMessage); 183

184 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Data 配列の初期化 CanMessage.InitializeArray() 送信メッセージ長のセット CanMessage.Length = 4 送信メッセージの ID をセット CanMessage.ID = &H01 Or IFCCAN_ANY.CAN_EXT_FRAME フラグの設定 CanMessage.Flag = 0 300ms 周期 CanMessage.Time = 300*100 送信メッセージの内容をコピー CanMessage.Data(0) = &H01 CanMessage.Data(1) = &H02 CanMessage.Data(2) = &H03 CanMessage.Data(3) = &H04 Ret = IFCCAN_ANY.CanActivate(DeviceHandle) 300ms 周期で送信 Ret = IFCCAN_ANY.CanCyclicSendMessage(DeviceHandle, CanMessage) 184

185 Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_MESSAGE CanMessage; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // Data 配列の初期化 CanMessage.InitializezArray(); // 送信メッセージ長のセット CanMessage.Length = 4; // 送信メッセージの ID をセット CanMessage.ID = 0x01 IFCCAN_ANYCAN_EXT_FRAME; // フラグの設定 CanMessage.Flag = 0; // 300ms 周期 CanMessage.Time = 300*100; // 送信メッセージの内容をセット CanMessage.Data[0] = 0x01; CanMessage.Data[1] = 0x02; CanMessage.Data[2] = 0x03; CanMessage.Data[3] = 0x04; Ret = IFCCAN_ANYCanActivate(DeviceHandle); // 300ms 周期で送信 Ret = IFCCAN_ANYCanCyclicSendMessage(DeviceHandle, CanMessage); デバイス名 IFCAN1 の CAN インタフェースから 300ms 周期で データを送信します 185

186 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( HANDLE hdevicehandle, PCAN_MESSAGE pcanmessage, unsigned long* pulcount ); Visual Basic Declare Function CanReceiveMessage Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pcanmessage As CAN_MESSAGE, _ ByRef pulcount As Long _ )As Long Delphi function CanReceiveMessage( hdevicehandle THandle; var pcanmessage CAN_MESSAGE; var pulcount ULONG ) Integer; stdcall; external IFCan.DLL ; 186

187 Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanReceiveMessage( IntPtr DeviceHandle, out CAN_MESSAGE CanMessage, ref uint Count ); [DllImport( IFCan.dll )] public static extern uint CanReceiveMessage( IntPtr DeviceHandle, [Out] CAN_MESSAGE[] CanMessage, ref uint Count ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanReceiveMessage( uint DeviceHandle, out CAN_MESSAGE CanMessage, ref uint Count ); [DllImport( IFCan.dll )] public static extern uint CanReceiveMessage( uint DeviceHandle, [Out] CAN_MESSAGE[] CanMessage, ref uint Count ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanReceiveMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef CanMessage As CAN_MESSAGE, _ ByRef Count As Integer _ ) As Integer Declare Function CanReceiveMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ <Out()> ByVal CanMessage() As CAN_MESSAGE, _ ByRef Count As Integer _ ) As Integer 187

188 Visual Basic.NET(x86 専用 ) Declare Function CanReceiveMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef CanMessage As CAN_MESSAGE, _ ByRef Count As Integer _ ) As Integer Declare Function CanReceiveMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ <Out()> ByVal CanMessage() As CAN_MESSAGE, _ ByRef Count As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pcanmessage 受信メッセージを格納する構造体へのポインタを指定してください pcount で指定された個数分の領域を用意してください CAN_MESSAGE 構造体の説明については 4.3 構造体説明 をご参照ください pulcount 受信バッファから取り出すメッセージの件数を指定してください (1~CanSetConfig 関数で設定した受信バッファのサイズ ( デフォルト 64)) 受信バッファに蓄えられているメッセージが指定された件数よりも少ない場合 実際に受信バッファから取り出された件数が この変数に返されます 例 )PortStatus.ulRXBCount が 8 の時に pulcount に 10 をセットし CanReceiveMessage 関数を実行すると pulcount に 8 が返され 正常終了します 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 188

189 使用例 C 言語 INT nret; CAN_MESSAGE CanMessage[10]; unsigned long ulcount; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); // 受信メッセージの取り出し ulcount = 10; nret = CanReceiveMessage(hDeviceHandle, CanMessage, &ulcount); if (nret!= IFCAN_ERROR_SUCCESS) { if (nret == IFCAN_ERROR_BUFFER_IS_EMPTY) { printf( 受信メッセージがありません ); } } else { for (i=0; i<ulcount; 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 ); } } 189

190 Visual Basic Dim lpszname As String Dim lpszmessage As String Dim hdevicehandle As Long Dim CanMessage(0 To 9) As CAN_MESSAGE Dim ulcount As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) ulcount = 10 受信メッセージの取り出し nret = CanReceiveMessage(hDeviceHandle, CanMessage(0), ulcount) If nret <> IFCAN_ERROR_SUCCESS Then If nret = IFCAN_ERROR_BUFFER_IS_EMPTY Then MsgBox( 受信メッセージがありません ) End If Else For i=0 To ulcount - 1 lpszmessage = lpszmessage & Str(i+1) & 件目のメッセージ & vbcrlf & _ 受信メッセージ長 & Str(CanMessage(i).ulLength) & vbcrlf & _ ID & Str(CanMessage(i).ulID) & vbcrlf & 受信データ For j=0 To CanMessage(i).ulLength - 1 lpszmessage = lpszmessage & Hex(CanMessage(i).bData(j)) & Next lpszmessage = lpszmessage & vbcrlf Next MsgBox(lpszMessage) End If 190

191 Delphi var lpszname String; lpszmessage String; hdevicehandle THandle; CanMessage array[0..9] of CAN_MESSAGE; nret Integer; ulcount ULONG; i Integer; j Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); ulcount = 10; nret = CanReceiveMessage(hDeviceHandle, CanMessage[0], ulcount); if nret <> IFCAN_ERROR_SUCCESS then begin if nret = IFCAN_ERROR_BUFFER_IS_EMPTY then begin MessageDlg( 受信メッセージがありません, mterror, [mbok], 0); end else for i = 0 To ulcount - 1 do begin lpszmessage = IntToStr(ulCount) + 件目のメッセージ \n ; lpszmessage = lpszmessage + 受信メッセージ長 + IntToStr(CanMessage[i].ulLength) + \n ; lpszmessage = lpszmessage + ID + IntToStr(CanMessage[i].ulID) + \n ; lpszmessage = lpszmessage + 受信データ ; for j = 0 To CanMessage[i].ulLength - 1 do begin lpszmessage = lpszmessage + IntToHex(CanMessage[i].bData[j], 2) + ; end; MessageDlg(lpszMessage, mtinformation, [mbok], 0); end; end; end; 191

192 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE[] CanMessage = new IFCCAN_ANY.CAN_MESSAGE[10]; uint Count; IntPtr DeviceHandle; string Message = ; int i; uint j; for(i = 0; i < 10; i++) { CanMessage[i].InitializeArray(); } DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // 受信メッセージの取り出し Count = 10; Ret = IFCCAN_ANY.CanReceiveMessage(DeviceHandle, CanMessage, ref Count); if(ret!= IFCCAN_ANY.IFCAN_ERROR_SUCCESS) { if(ret == IFCCAN_ANY.IFCAN_ERROR_BUFFER_IS_EMPTY) { MessageBox.Show( 受信メッセージがありません ); } } else { for(i = 0; i < ulcount; i++) { Message = 受信メッセージ長 + CanMessage[i].Length.ToString(); MessageBox.Show(Message); Message = ID + CanMessage[i].ID.ToString(); MessageBox.Show(szMessage); Message = 受信データ ; for(j = 0; j < CanMessage[i].Length; j++) { Message += CanMessage[i].Data[j].ToString(); } MessageBox.Show(Message); } } 192

193 Visual Basic.NET Dim Message As String Dim DeviceHandle As Integer Dim CanMessage(9) As IFCCAN_ANY.CAN_MESSAGE Dim Count As Integer Dim i As Integer Dim j As Integer Dim Ret As Integer for i = 0 To 9 CanMessage(i).InitializeArray() Next DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Count = 10 受信メッセージの取り出し Ret = IFCCAN_ANY.CanReceiveMessage(DeviceHandle, CanMessage, Count) If Ret <> IFCCAN_ANY.IFCAN_ERROR_SUCCESS Then If Ret = IFCCAN_ANY.IFCAN_ERROR_BUFFER_IS_EMPTY Then MsgBox( 受信メッセージがありません ) End If Else For i = 0 To Count 1 Message = Message & Str(i + 1) & 件目のメッセージ & vbcrlf & _ 受信メッセージ長 & Str(CanMessage(i).Length) & vbcrlf & _ ID & Str(CanMessage(i).ID) & vbcrlf & 受信データ For j = 0 To CanMessage(i).Length Message = Message & Hex(CanMessage(i).Data(j)) & Next Message = Message & vbcrlf Next MsgBox(Message) End If 193

194 Visual C++ CLR プロジェクト unsigned int Ret; array<ifccan_anycan_message>^ CanMessage = gcnew array<ifccan_anycan_message>(10); unsigned int Count; IntPtr DeviceHandle; String^ Message = ; unsigned int i; unsigned int j; for(i = 0; i < 10; i++) { CanMessage[i].InitializeArray(); } DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 受信メッセージの取り出し Count = 10; Ret = IFCCAN_ANYCanReceiveMessage(DeviceHandle, CanMessage, Count); if(ret!= IFCCAN_ANYIFCAN_ERROR_SUCCESS) { if(ret == IFCCAN_ANYIFCAN_ERROR_BUFFER_IS_EMPTY) { MessageBoxShow( 受信メッセージがありません ); } } else { for(i = 0; i < Count; i++) { Message = 受信メッセージ長 + CanMessage[i].Length.ToString(); MessageBoxShow(Message); Message = ID + CanMessage[i].ID.ToString(); MessageBoxShow(Message); Message = 受信データ ; for(j = 0; j < CanMessage[i].Length; j++) { Message += CanMessage[i].Data[j].ToString(); } MessageBoxShow(Message); } } デバイス名 IFCAN1 の CAN インタフェースから 10 件の受信メッセージを取り出します 取り出されたメッセージを画面に表示します 10 件に満たない場合は 取り出された件数分だけ表示します 194

195 8. CanMultiCyclicSendMessage 機能 CAN メッセージの周期送信を行います 最大 12 種類のメッセージを周期送信できます この関数は非同期で実行されますので 関数実行後すぐに処理が返ります 設定した周期でデータ送信ができなかった場合と CanStopMultiCyclicSendMessage 関数を実行した場合のみ 周期送信を停止します 周期送信実行中は CanSendMessage CanSendMessageFD CanCyclicSendMessage CanCyclicSendMessageFD 関数は使用できません また 周期送信メッセージは 送信完了メッセージを取得できません 書式 C 言語 INT CanMultiCyclicSendMessage( HANDLE hdevicehandle, DWORD dwroute, PCAN_MESSAGE PCanMessage ); Visual Basic Declare Function CanMultiCyclicSendMessage Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwroute As Long, _ ByRef pcanmessage As CAN_MESSAGE _ )As Long Delphi function CanMultiCyclicSendMessage( hdevicehandle THandle; dwroute DWORD; var pcanmessage CAN_MESSAGE ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanMultiCyclicSendMessage( IntPtr DeviceHandle, uint Route, ref CAN_MESSAGE CanMessage ); 195

196 Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanMultiCyclicSendMessage( uint DeviceHandle, uint Route, ref CAN_MESSAGE CanMessage ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanMultiCyclicSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Route As Integer, _ ByRef CanMessage As CAN_MESSAGE _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanMultiCyclicSendMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByVal Route As Integer, _ ByRef CanMessage As CAN_MESSAGE _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dwroute 周期送信するメッセージの番号を 1~12 の範囲で指定します pcanmessage 送信するメッセージを格納した構造体のポインタを指定してください 送信周期は CanSetTransmissionCycle 関数にて設定します CAN_MESSAGE 構造体の説明については 4.3 構造体説明 をご参照ください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 196

197 備考 1. 本関数を実行する前に必ず CanSetTransmissionCycle 関数で周期を設定してください 2. データの送信時間よりも 周期時間を短く設定した場合 指定された時間に送信ができず 周期実行は停止します 例えば データの送信に 80ms かかるのに 周期時間を 50ms に設定した場合 50ms 経過したときに まだデータが送信中なので 周期実行が停止します 周期実行の停止は CanSetEvent 関数 CanSetEventMask 関数での設定を行っている場合 イベントにより通知されます また アービトレーションロストにより 指定した周期にデータを送信できない場合もあります アービトレーションロストが発生し データを再送しているときに 次の周期時間が来ると 上記と同じように 周期実行が停止します 例 ) 周期を 50ms に設定した場合 データ送信中 周期送信開始 50ms データ送信中 50ms 時間 例 ) 周期を 50ms に設定したが その周期よりもデータ送信時間が長い場合 データ送信中 50ms 前回のデータが まだ送信完了していないため 次のデータが送れずに周期送信は停止します 時間 周期送信開始 周期送信実行中でも 周期送信を行いたいデータの更新 周期の更新を行えます 更新したデータは 次の周期から反映されます 197

198 例 ) 周期送信を行うデータや周期を更新したい場合 データ A 送信中 50ms データ B 送信中 80ms 周期送信開始 時間データ 周期の更新はいつでも可能です ただし 反映されるのは次の周期からになります 例えば この時点で 周期送信を行うデータを B に 周期を 80ms に更新したとすると 前回の設定周期の 50ms が経過してから データ B が 80ms 周期で送信されるようになります 優先順位の高いメッセージを短い周期で送信していると アービトレーションにより それより優先順位の低いメッセージが送信されにくくなりますので ご注意ください 3. 本関数は PCI P CPZ P PEX CSI PEX-H485940P で使用できます 198

199 使用例 C 言語 INT nret; CAN_MESSAGE CanMessage; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, 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; nret = CanActivate(hDeviceHandle); // メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage); 199

200 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim CanMessage As CAN_MESSAGE Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, CAN_ROUTE_4_6, 100*1000) 送信メッセージのセット CanMessage.ulLength = 4 CanMessage.ulID = &H01 CanMessage.ulFlag = 0 CanMessage.ulTime = 0 CanMessage[0].bData = &H11 CanMessage[1].bData = &H22 CanMessage[2].bData = &H33 CanMessage[3].bData = &H44 nret = CanActivate(hDeviceHandle) メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage) 200

201 Delphi var lpszname String; hdevicehandle THandle; CanMessage CAN_MESSAGE; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); // 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, CAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.ulLength = 4; CanMessage.ulID = $01; CanMessage.ulFlag = 0; CanMessage.ulTime = 0; CanMessage.bData[0] = $11; CanMessage.bData[1] = $22; CanMessage.bData[2] = $33; CanMessage.bData[3] = $44; nret = CanActivate(hDeviceHandle); // メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessage(hDeviceHandle, 4, CanMessage); 201

202 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 Ret = IFCCAN_ANY.CanSetTransmissionCycle(DeviceHandle, CAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.InitializezArray(); CanMessage.Length = 4; CanMessage.ID = 0x01; CanMessage.Flag = 0; CanMessage.Time = 0; CanMessage.Data[0] = 0x11; CanMessage.Data[1] = 0x22; CanMessage.Data[2] = 0x33; CanMessage.Data[3] = 0x44; Ret = IFCCAN_ANY.CanActivate(DeviceHandle); // メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANY.CanMultiCyclicSendMessage(DeviceHandle, 4, ref CanMessage); 202

203 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) 送信周期を 100ms に設定 Ret = IFCCAN_ANY.CanSetTransmissionCycle(DeviceHandle, CAN_ROUTE_4_6, 100*1000) 送信メッセージのセット CanMessage.InitializeArray() CanMessage.Length = 4 CanMessage.ID = &H01 CanMessage.Flag = 0 CanMessage.Time = 0 CanMessage.Data(0) = &H11 CanMessage.Data(1) = &H22 CanMessage.Data(2) = &H33 CanMessage.Data(3) = &H44 Ret = IFCCAN_ANY.CanActivate(DeviceHandle) メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANY.CanMultiCyclicSendMessage(DeviceHandle, 4, CanMessage) 203

204 Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_MESSAGE CanMessage; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 Ret = IFCCAN_ANYCanSetTransmissionCycle(DeviceHandle, IFCCAN_ANYCAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.InitializezArray(); CanMessage.Length = 4; CanMessage.ID = 0x01; CanMessage.Flag = 0; CanMessage.Time = 0; CanMessage.Data[0] = 0x11; CanMessage.Data[1] = 0x22; CanMessage.Data[2] = 0x33; CanMessage.Data[3] = 0x44; Ret = IFCCAN_ANYCanActivate(DeviceHandle); // メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANYCanMultiCyclicSendMessage(DeviceHandle, 4, CanMessage); デバイス名 IFCAN1 の CAN インタフェースから 100ms 周期で データを送信します 204

205 9. CanGetStatus 機能 CAN バスの現在の状態を取得します 得られる情報はバスの状態 エラーカウンタ 送受信バッファの空き状況等です 詳細は 4.3 構造体説明 を参照下さい 本関数の実行時 CAN バスへの接続を無効化 (CanDeactivate 関数 ) する必要はありません CanOpenPort 関数でオープン後であれば いつでも使用することができます Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では一部取得できない項目があります 項目については構造体 CAN_PORT_STATUS を参照してください 書式 C 言語 INT CanGetStatus( HANDLE hdevicehandle, PCAN_PORT_STATUS pportstatus ); Visual Basic Declare Function CanGetStatus Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pportstatus As CAN_PORT_STATUS _ )As Long Delphi function CanGetStatus( hdevicehandle THandle; var pportstatus CAN_PORT_STATUS ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanGetStatus( IntPtr DeviceHandle, out CAN_PORT_STATUS PortStatus ); Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanGetStatus( uint DeviceHandle, out CAN_PORT_STATUS PortStatus ); 205

206 Visual Basic.NET(x86 x64 共用 ) Declare Function CanGetStatus Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef PortStatus As CAN_PORT_STATUS _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanGetStatus Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef PortStatus As CAN_PORT_STATUS _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pportstatus ステータス取得用構造体へのポインタを指定してください 構造体の説明については 4.3 構造体説明 をご参照ください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 INT nret; CAN_PORT_STATUS PortStatus; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetStatus(hDeviceHandle, &PortStatus); 206

207 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim PortStatus As CAN_PORT_STATUS Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetStatus(hDeviceHandle, PortStatus) Delphi var lpszname String; hdevicehandle THandle; PortStatus CAN_PORT_STATUS; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); nret = CanGetStatus(hDeviceHandle, PortStatus); Visual C#.NET uint Ret; IFCCAN_ANY.CAN_PORT_STATUS PortStatus = new IFCCAN_ANY.CAN_PORT_STATUS(); int DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetStatus(DeviceHandle, out PortStatus); Visual Basic.NET Dim DeviceHandle As Integer Dim PortStatus As IFCCAN_ANY.CAN_PORT_STATUS = New IFCCAN_ANY.CAN_PORT_STATUS Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetStatus(DeviceHandle, PortStatus) 207

208 Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_PORT_STATUS PortStatus; int DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetStatus(DeviceHandle, PortStatus); デバイス名 IFCAN1 の CAN インタフェースのステータスを取得します 208

209 10. CanGetCompletionMessage 機能 送信完了メッセージを取り出します 送信を完了したメッセージは 送信が完了した時間を CAN_MESSAGE 構造体の ultime メンバに格納して そのまま送信バッファに格納されています 本関数では その蓄えられた送信完了メッセージを取り出します 送信バッファ内では 送信完了メッセージ数はカウントされませんので ご注意ください Intel PCH EG20T の CAN コントローラを搭載した製品 ( TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では本関数を使用できません 書式 C 言語 INT CanGetCompletionMessage( HANDLE hdevicehandle, PCAN_MESSAGE pcanmessage, unsigned long* pulcount ); Visual Basic Declare Function CanGetCompletionMessage Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pcanmessage As CAN_MESSAGE, _ ByRef pulcount As Long _ )As Long Delphi function CanGetCompletionMessage( hdevicehandle THandle; var pcanmessage CAN_MESSAGE; var pulcount ULONG ) Integer; stdcall; external IFCan.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCan.dll )] public static extern uint CanGetCompletionMessage( IntPtr DeviceHandle, out CAN_MESSAGE CanMessage, ref uint Count ); [DllImport( IFCan.dll )] public static extern uint CanGetCompletionMessage( IntPtr DeviceHandle, [Out] CAN_MESSAGE[] CanMessage, ref uint Count ); 209

210 Visual C#.NET(x86 専用 ) [DllImport( IFCan.dll )] public static extern uint CanGetCompletionMessage( uint DeviceHandle, out CAN_MESSAGE CanMessage, ref uint Count ); [DllImport( IFCan.dll )] public static extern uint CanGetCompletionMessage( uint DeviceHandle, [Out] CAN_MESSAGE[] CanMessage, ref uint Count ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanGetCompletionMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef CanMessage As CAN_MESSAGE, _ ByRef Count As Integer _ ) As Integer Declare Function CanGetCompletionMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ <Out()> ByVal CanMessage() As CAN_MESSAGE, _ ByRef Count As Integer _ ) As Integer Visual Basic.NET(x86 専用 ) Declare Function CanGetCompletionMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ ByRef CanMessage As CAN_MESSAGE, _ ByRef Count As Integer _ ) As Integer Declare Function CanGetCompletionMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _ <Out()> ByVal CanMessage() As CAN_MESSAGE, _ ByRef Count As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください 210

211 pcanmessage 送信完了メッセージを格納する構造体へのポインタを指定してください pcount で指定された個数分の領域を用意してください CAN_MESSAGE 構造体の説明については 4.3 構造体説明 をご参照ください pulcount 取り出す送信完了メッセージの件数を指定してください 送信完了メッセージが指定された件数よりも少ない場合 実際に取り出された送信メッセージ数が この変数に返されます 例 ) 送信完了メッセージ数が 3 の時に pulcount に 5 をセットし CanGetCompletionMessage 関数を実行すると pulcount に 3 が返されます 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 注意 高機能版 CAN 製品で CAN_PORT_CONFIG 構造体の ullinemode を CAN_FIFO_SEND_MODE で FIFO 送信モードに設定している場合 および CanCyclicSendMessage 関数による周期送信は 送信完了メッセージが格納されません 使用例 C 言語 INT nret; CAN_MESSAGE CanMessage[10]; unsigned long ulcount; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); // 送信完了メッセージの取り出し ulcount = 10; nret = CanGetCompletionMessage(hDeviceHandle, CanMessage, &ulcount); 211

212 Visual Basic Dim lpszname As String Dim lpszmessage As String Dim hdevicehandle As Long Dim CanMessage(0 To 9) As CAN_MESSAGE Dim ulcount As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) ulcount = 10 送信完了メッセージの取り出し nret = CanGetCompletionMessage(hDeviceHandle, CanMessage(0), ulcount) Delphi var lpszname String; lpszmessage String; hdevicehandle THandle; CanMessage array[0..9] of CAN_MESSAGE; nret Integer; ulcount ULONG; i Integer; j Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); ulcount = 10; nret = CanGetCompletionMessage(hDeviceHandle, CanMessage[0], ulcount); 212

213 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE[] CanMessage = new IFCCAN_ANY.CAN_MESSAGE[10]; uint Count; IntPtr DeviceHandle; int i; for(i = 0; i < 10; i++) { CanMessage[i].InitializeArray(); } DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // 送信完了メッセージの取り出し Count = 10; Ret = IFCCAN_ANY.CanGetCompletionMessage(DeviceHandle, CanMessage, ref Count); Visual Basic.NET Dim Message As String Dim DeviceHandle As Integer Dim CanMessage(9) As IFCCAN_ANY.CAN_MESSAGE Dim Count As Integer Dim i As Integer For i = 0 To 9 CanMessage(i).InitializeArray() Next DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Count = 10 送信完了メッセージの取り出し Ret = IFCCAN_ANY.CanGetCompletionMessage(DeviceHandle, CanMessage, Count) 213

214 Visual C++ CLR プロジェクト unsigned int Ret; array<ifccan_anycan_message>^ CanMessage = gcnew array<ifccan_anycan_message>(10); unsigned int Count; IntPtr DeviceHandle; int i; for(i = 0; i < 10; i++) { CanMessage[i].InitializeArray(); } DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 送信完了メッセージの取り出し Count = 10; Ret = IFCCAN_ANYCanGetCompletionMessage(DeviceHandle, CanMessage, Count); デバイス名 IFCAN1 の CAN インタフェースから 10 件の送信完了メッセージを取り出します 214

215 4.2.3 CAN FD インタフェース制御用関数 1. CanSetConfigFD 機能 CAN FD インタフェースの各種設定を行います 本関数で設定を行うためには CAN バスへの接続を無効化 (CanDeactivate 関数 ) しておく必要があります ( 接続中のまま実行すると エラーが返されます ) 設定変更後 再度 CAN バスへ接続するためには CanActivate 関数を実行して下さい 設定値の中には 設定の難しい物もありますので CanGetConfigFD 関数で初期値を取得し その中から変更したい箇所だけ変更して設定する方法をお勧めします CAN FD 版 CAN 製品でのみ使用できます 書式 C 言語 INT CanSetConfigFD( HANDLE PCAN_PORT_CONFIG_FD ); hdevicehandle, pportconfig Visual Basic Declare Function CanSetConfigFD Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pportconfig As CAN_PORT_CONFIG_FD _ )As Long Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanSetConfigFD ( IntPtr DeviceHandle, ref CAN_PORT_CONFIG_FD PortConfig ); Visual Basic.NET Declare Function CanSetConfigFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef PortConfig As CAN_PORT_CONFIG_FD _ ) As Integer 215

216 パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pportconfig 通信条件設定構造体へのポインタを指定してください 構造体の説明については 4.3 構造体説明 をご参照ください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 1. 受信フィルタの設定は CanSetAcceptanceFilterFD 関数で行って下さい 2. 送信中のデータがある状態で 送信バッファサイズの変更は行えません 使用例 C 言語 INT nret; HANDLE hdevicehandle; CAN_PORT_CONFIG_FD PortConfig hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetConfigFD(hDeviceHandle, &PortConfig); PortConfig.ulBaudRateNominal = CAN_BAUDRATE_1M; PortConfig.ulBaudRateData = CAN_BAUDRATE_FD_5M; nret = CanSetConfigFD(hDeviceHandle, &PortConfig); 216

217 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim PortConfig As CAN_PORT_CONFIG_FD Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetConfigFD(hDeviceHandle, PortConfig) PortConfig.ulBaudRateNominal = CAN_BAUDRATE_1M PortConfig.ulBaudRateData = CAN_BAUDRATE_FD_5M nret = CanSetConfigFD(hDeviceHandle, PortConfig) Delphi var lpszname String; hdevicehandle THandle; PortConfig CAN_PORT_CONFIG_FD; nret Integer; lpszname = IFCAN1 ; hdevicehandle = CanOpenPort(lpszName); nret = CanGetConfigFD(hDeviceHandle, PortConfig); PortConfig.ulBaudRateNominal = CAN_BAUDRATE_1M; PortConfig.ulBaudRateData = CAN_BAUDRATE_FD_5M; nret = CanSetConfigFD(hDeviceHandle, PortConfig); 217

218 Visual C#.NET uint Ret; IntPtr DeviceHandle; IFCCAN_ANY.CAN_PORT_CONFIG_FD PortConfig = new IFCCAN_ANY.CAN_PORT_CONFIG_FD(); DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetConfig_FD(DeviceHandle, out PortConfig); PortConfig.BaudRateNominal = IFCCAN_ANY.CAN_BAUDRATE_1M; PortConfig.BaudRateData = IFCCAN_ANY.CAN_BAUDRATE_FD_5M; Ret = IFCCAN_ANY.CanSetConfigFD(DeviceHandle, ref PortConfig); Visual Basic.NET Dim DeviceHandle As Integer Dim PortConfig As IFCCAN_ANY.CAN_PORT_CONFIG_FD = New IFCCAN_ANY.CAN_PORT_CONFIG_FD Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetConfigFD(DeviceHandle, PortConfig) PortConfig.BaudRateNominal = IFCCAN_ANY.CAN_BAUDRATE_1M PortConfig.BaudRateData = IFCCAN_ANY.CAN_BAUDRATE_FD_5M Ret = IFCCAN_ANY.CanSetConfigFD(DeviceHandle, PortConfig) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; IFCCAN_ANYCAN_PORT_CONFIG_FD PortConfig; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetConfigFD(DeviceHandle, PortConfig); PortConfigBaudRateNominal = IFCCAN_ANYCAN_BAUDRATE_1M; PortConfigBaudRateData = IFCCAN_ANYCAN_BAUDRATE_FD_5M; Ret = IFCCAN_ANYCanSetConfigFD(DeviceHandle, PortConfig); デバイス名 IFCAN1 の CAN インタフェースを 通信速度 1Mbps に設定します 218

219 2. CanSetAcceptanceFilterFD 機能 CAN FD バス上を流れるメッセージを取り込む際のフィルタを設定します 本関数で設定を行うためには CAN バスへの接続を無効化 (CanDeactivate 関数 ) しておく必要があります ( 接続中のまま実行すると エラーが返されます ) 特定の ID を持つ CAN メッセージだけ取り込みたい場合に使用します フィルタの設定は ID に対してビットパターンで行い ビット毎に 0 1 どちらでも受信する 0 の時だけ受信する 1 の時だけ受信する を設定することが出来ます フィルタ設定により取り込まれなかったフレームに対して ACK を返します CAN FD 版 CAN 製品でのみ使用できます 書式 C 言語 INT CanSetAcceptanceFilterFD( HANDLE hdevicehandle, DWORD dwfilterno, DWORD dwacceptancecode, DWORD dwacceptancemask ); Visual Basic Declare Function CanSetAcceptanceFilterFD Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwfilterno As Long, _ ByVal dwacceptancecode As Long, _ ByVal dwacceptancemask As Long _ )As Long Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanSetAcceptanceFilterFD( IntPtr DeviceHandle, uint dwfilerno, uint AcceptanceCode, uint AcceptanceMask ); 219

220 Visual Basic.NET Declare Function CanSetAcceptanceFilterFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal dwfilerno As Integer, _ ByVal AcceptanceCode As Integer, _ ByVal AcceptanceMask As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dwfilerno フィルタの番号を指定します CanSetConfigFD 関数で設定する CAN_PORT_CONFIG_FD 構造体の ulfiltermode の値により設定できる値が異なります CAN_SINGLE_FILTER の場合 0( フィルタ 1) を指定してください CAN_DUAL_FILTER の場合 0( フィルタ 1) または 1( フィルタ 2) が指定できます dwacceptancecode 後述の dwacceptancemask で 0 を指定したビットが 0 1 のどちらでフィルタを通過して受信バッファに取り込まれるか指定します デフォルトでは 0 に設定されています dwacceptancemask どのビットにアクセプタンスフィルタを適用するか指定してください 該当するビットに 0 を設定するとフィルタが有効になり dwacceptancecode で指定した値と受信メッセージの該当ビットが一致していれば 受信バッファに取り込まれます 1 を設定しているビットはフィルタの対象外となります フィルタを使用せず 全てのメッセージを受信したい場合は dwacceptancemask の全ビットに 1 を設定してください デフォルトでは FFFFFFFFh( 全ビット 1) に設定されています 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 220

221 備考 dwacceptancecode dwacceptancemask は使用するフレームフォーマット ( 標準 / 拡張フォーマット ) により 内容が異なります 標準フォーマット 11 ビット ID 全てに対しフィルタを設定することが可能です フレームの先頭 ID(11 ビット ) RTR 1 バイト目データ 2 バイト目データ 3 バイト目 フィルタの適用範囲 ビット ( 1) bit31 bit30 bit29 bit28 bit27 bit26 bit25 bit フィルタ対象予約 ( 2) ビット bit23 bit22 bit21 bit20 bit19 bit18 bit17 bit フィルタ対象予約 ( 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 フィルタ対象 ID.4~ID.0 予約 ( 2) 1. dwacceptancecode dwacceptancemask のビットです 2. 0 を指定してください 221

222 拡張フォーマット 29 ビット ID 全てに対しフィルタを設定することが可能です フィルタの適用範囲は以下の通りです フレームの先頭 ID(29 ビット ) RTR 1 バイト目データ 2 バイト目 ~ フィルタの適用範囲 ビット 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 フィルタ対象 ID.4~ID.0 予約 222

223 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dwacceptancecode,dwacceptancemask; CAN_PORT_CONFIG_FD PortConfig hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetConfigFD(hDeviceHandle, &PortConfig); PortConfig.ulFilterMode = CAN_SINGLE_FILTER; nret = CanSetConfigFD(hDeviceHandle, &PortConfig); dwacceptancemask = 0x001fffff; dwacceptancecode = 0x ; // ID が (2 進数 ) nret = CanSetAcceptanceFilterFD(hDeviceHandle, 0, dwacceptancecode, dwacceptancemask); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim dwacceptancecode As Long Dim dwacceptancemask As Long Dim PortConfig As CAN_PORT_CONFIG_FD Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetConfigFD(hDeviceHandle, PortConfig) PortConfig.ulFilterMode = CAN_SINGLE_FILTER nret = CanSetConfigFD(hDeviceHandle, PortConfig) dwacceptancemask = &H001fffff dwacceptancecode = &H ID が (2 進数 ) nret = CanSetAcceptanceFilterFD(hDeviceHandle, 0, dwacceptancecode, dwacceptancemask) 223

224 Visual C#.NET uint Ret; IntPtr DeviceHandle; uint AcceptanceCode; uint AcceptanceMask; IFCCAN_ANY.CAN_PORT_CONFIG_FD PortConfig = new IFCCAN_ANY. CAN_PORT_CONFIG_FD(); DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetConfigFD(DeviceHandle, out PortConfig); PortConfig.FilterMode = IFCCAN_ANY.CAN_SINGLE_FILTER; Ret = IFCCAN_ANY.CanSetConfigFD(DeviceHandle, ref PortConfig); AcceptanceMask = 0x001fffff; AcceptanceCode = 0x ; // ID が (2 進数 ) Ret = IFCCAN_ANY.CanSetAcceptanceFilter(DeviceHandle, 0, AcceptanceCode, AcceptanceMask); Visual Basic.NET Dim DeviceHandle As Integer Dim AcceptanceCode As Integer Dim AcceptanceMask As Integer Dim PortConfig As IFCCAN_ANY.CAN_PORT_CONFIG_FD = New IFCCAN_ANY.CAN_PORT_CONFIG_FD Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetConfigFD(DeviceHandle, PortConfig) PortConfig.FilterMode = IFCCAN_ANY.CAN_SINGLE_FILTER Ret = IFCCAN_ANY.CanSetConfigFD(DeviceHandle, PortConfig) AcceptanceMask = &H001fffff AcceptanceCode = &H ID が (2 進数 ) Ret = IFCCAN_ANY.CanSetAcceptanceFilterFD(DeviceHandle,, 0, AcceptanceCode, AcceptanceMask) 224

225 Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; unsigned int AcceptanceCode; unsigned int AcceptanceMask; IFCCAN_ANYCAN_PORT_CONFIG_FD PortConfig; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetConfigFD(DeviceHandle, PortConfig); PortConfig.FilterMode = IFCCAN_ANYCAN_SINGLE_FILTER; Ret = IFCCAN_ANYCanSetConfigFD(DeviceHandle, PortConfig); AcceptanceMask = 0x001fffff; AcceptanceCode = 0x ; // ID が (2 進数 ) Ret = IFCCAN_ANYCanSetAcceptanceFilterFD(DeviceHandle, 0, AcceptanceCode, AcceptanceMask); デバイス名 IFCAN1 の CAN インタフェースを シングルフィルタモードに設定し 標準フレームの ID が 2 進数で のメッセージフレームのみ受信するように設定します もし 拡張フレーム (29 ビット ID) が送られてきた場合は ID の下位 11 ビットが になるメッセージフレームのみ受信されます 225

226 3. CanGetConfigFD 機能 CAN FD インタフェースの現在の各種設定値を取得します オープン直後はデフォルト値の取得 設定値の変更後は現在の設定値を取得します 本関数の実行時 CAN バスへの接続を無効化 (CanDeactivate 関数 ) する必要はありません CanOpenPort 関数でオープン後であれば いつでも使用することができます CAN FD 版 CAN 製品でのみ使用できます 書式 C 言語 INT CanGetConfigFD( HANDLE hdevicehandle, PCAN_PORT_CONFIG_FD pportconfig ); Visual Basic Declare Function CanGetConfigFD Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pportconfig As CAN_PORT_CONFIG_FD _ )As Long Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanGetConfigFD ( IntPtr DeviceHandle, out CAN_PORT_CONFIG_FD PortConfig ); Visual Basic.NET Declare Function CanGetConfigFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef PortConfig As CAN_PORT_CONFIG_FD _ ) As Integer 226

227 パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pportconfig 通信条件設定構造体へのポインタを指定してください 取得された値が格納されます 構造体の説明については 4.3 構造体説明 をご参照ください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 受信フィルタの設定取得は CanGetAcceptanceFilterFD 関数で行って下さい 使用例 C 言語 INT nret; HANDLE hdevicehandle; CAN_PORT_CONFIG_FD PortConfig hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetConfigFD(hDeviceHandle, &PortConfig); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim PortConfig As CAN_PORT_CONFIG_FD Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetConfigFD(hDeviceHandle, PortConfig) 227

228 Visual C#.NET uint Ret; IntPtr DeviceHandle; IFCCAN_ANY.CAN_PORT_CONFIG_FD PortConfig = new IFCCAN_ANY.CAN_PORT_CONFIG_FD(); DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetConfigFD(DeviceHandle, out PortConfig); Visual Basic.NET Dim DeviceHandle As Integer Dim PortConfig As IFCCAN_ANY.CAN_PORT_CONFIG_FD = New IFCCAN_ANY.CAN_PORT_CONFIG_FD Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetConfigFD(DeviceHandle, PortConfig) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; IFCCAN_ANYCAN_PORT_CONFIG_FD PortConfig; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetConfigFD(DeviceHandle, PortConfig); デバイス名 IFCAN1 の CAN インタフェースの通信条件設定を取得します 228

229 4. CanGetAcceptanceFilterFD 機能 受信フィルタの現在の設定を取得します CanSetAcceptanceFilterFD 関数の説明も併せてご覧下さい CAN FD 版 CAN 製品でのみ使用できます 書式 C 言語 INT CanGetAcceptanceFilterFD( HANDLE hdevicehandle, DWORD dwfilerno, PDWORD pdwacceptancecode, PDWORD pdwacceptancemask ); Visual Basic Declare Function CanGetAcceptanceFilterFD Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwfilerno As Long, _ ByRef pdwacceptancecode As Long, _ ByRef pdwacceptancemask As Long _ )As Long Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanGetAcceptanceFilterFD( IntPtr DeviceHandle, out uint dwfilerno, out uint AcceptanceCode, out uint AcceptanceMask ); 229

230 Visual Basic.NET Declare Function CanGetAcceptanceFilterFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef dwfilerno As Integer, _ ByRef AcceptanceCode As Integer, _ ByRef AcceptanceMask As Integer _ ) As Integer ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dwfilerno フィルタの番号を指定します CanSetConfig 関数で設定する CAN_PORT_CONFIG 構造体の ulfiltermode の値により指定できる値が異なります CAN_SINGLE_FILTER の場合 0( フィルタ 1) を指定してください CAN_DUAL_FILTER の場合 0( フィルタ 1) または 1( フィルタ 2) が指定できます pdwacceptancecode ビットパターン設定値取得用変数へのポインタを指定してください pdwacceptancemask マスクパターン設定値取得用変数へのポインタを指定してください 230

231 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 INT nret; HANDLE hdevicehandle; DWORD dwacceptancecode,dwacceptancemask; hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetAcceptanceFilterFD(hDeviceHandle, 0, &dwacceptancecode, &dwacceptancemask); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim dwacceptancecode As Long Dim dwacceptancemask As Long Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetAcceptanceFilterFD(hDeviceHandle, 0, dwacceptancecode, dwacceptancemask) 231

232 Visual C#.NET uint Ret; IntPtr DeviceHandle; uint AcceptanceCode; uint AcceptanceMask; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetAcceptanceFilterFD(DeviceHandle, 0, out AcceptanceCode, out AcceptanceMask); Visual Basic.NET Dim DeviceHandle As Integer Dim AcceptanceCode As Integer Dim AcceptanceMask As Integer Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetAcceptanceFilterFD(DeviceHandle, 0, AcceptanceCode, AcceptanceMask) Visual C++ CLR プロジェクト unsigned int Ret; IntPtr DeviceHandle; unsigned int AcceptanceCode; unsigned int AcceptanceMask; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetAcceptanceFilterFD(DeviceHandle, 0, AcceptanceCode, AcceptanceMask); デバイス名 IFCAN1 の CAN インタフェースのフィルタ設定状態を取得します 232

233 5. CanSendMessageFD 機能 CAN FD メッセージの送信を行います 本関数の実行後 送信バッファにメッセージが蓄えられ 順次送信されます 送信の完了は 送信完了メッセージの取得により確認できます また CanSetEvent 関数でイベントを設定することで送信バッファが空になった時点でイベントを発生させることができます ( イベント コールバック関数 ウィンドウメッセージ ) セットするメッセージの個数を指定することで 1 回の関数呼び出しで複数のメッセージを送信バッファに蓄えることができます CAN バスへの接続が有効である場合のみ実行できます 1 回の関数呼び出しで送信バッファに蓄えられるメッセージは 960 個までです CAN FD 版 CAN 製品でのみ使用できます 書式 C 言語 INT CanSendMessageFD( HANDLE hdevicehandle, PCAN_MESSAGE_FD pcanmessage, unsigned long ulcount ); Visual Basic Declare Function CanSendMessageFD Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pcanmessage As CAN_MESSAGE_FD, _ ByVal ulcount As Long _ )As Long 233

234 Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanSendMessageFD( IntPtr DeviceHandle, ref CAN_MESSAGE_FD CanMessage, uint Count ); [DllImport( IFCan.dll )] public static extern uint CanSendMessageFD( IntPtr DeviceHandle, CAN_MESSAGE_FD[] CanMessage, uint Count ); Visual Basic.NET Declare Function CanSendMessageFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef CanMessage As CAN_MESSAGE_FD, _ ByVal Count As Integer _ ) As Integer Declare Function CanSendMessageFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal CanMessage() As CAN_MESSAGE_FD, _ ByVal Count As Integer _ ) As Integer 234

235 パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pcanmessage 送信するメッセージを格納した構造体のポインタを指定してください CAN_MESSAGE_FD 構造体の ultime メンバ変数がディレイ時間を表します 単位は 10μs です 例えば ultime に 100 を指定して CanSendMessageFD 関数を呼ぶと 1ms( μs) 待ってから データを送信します 設定可能範囲は 0~1FFFFFh です 1FFFFFh より大きい値を設定しても 自動的に 1FFFFFh になります ulcount で指定された個数分の領域を用意してください CAN_MESSAGE_FD 構造体の説明については 4.3 構造体説明 をご参照ください ulcount 送信バッファにセットするメッセージの個数を指定してください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 235

236 使用例 C 言語 INT nret; CAN_MESSAGE_FD CanMessage[10]; HANDLE hdevicehandle; unsigned long ulsendvalue; hdevicehandle = 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 = ulsendvalue; } nret = CanActivate(hDeviceHandle); // 送信メッセージのセット ( 送信開始 ) nret = CanSendMessageFD(hDeviceHandle, CanMessage, 10); 236

237 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim CanMessage(0 To 9) As CAN_MESSAGE_FD Dim bsendvalue(0 To 3) As Byte Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) For i = 0 To 9 送信メッセージ長のセット CanMessage(i).ulLength = 4 送信メッセージの ID をセット CanMessage(i).ulID = &H01 Or CAN_EXT_FRAME フラグの設定 CanMessage(i).ulFlag = 3 ディレイ時間なし CanMessage(i).ulTime = 0 送信メッセージの内容をコピー CanMessage(i).bData(0) = bsendvalue(0) CanMessage(i).bData(1) = bsendvalue(1) CanMessage(i).bData(2) = bsendvalue(2) CanMessage(i).bData(3) = bsendvalue(3) Next nret = CanActivate(hDeviceHandle) 送信メッセージのセット ( 送信開始 ) nret = CanSendMessageFD(hDeviceHandle, CanMessage(0), 10) 237

238 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE_FD[] CanMessage = new IFCCAN_ANY.CAN_MESSAGE_FD[10]; IntPtr DeviceHandle; byte SendValue; int i; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); for (i = 0; i < 10; i++) { // Data 配列の初期化 CanMessage[i].InitializeArray(); // 送信メッセージ長のセット CanMessage[i].Length = 1; // 送信メッセージの ID をセット CanMessage[i].ID = 0x01 IFCCAN_ANY.CAN_EXT_FRAME; // フラグの設定 CanMessage[i].Flag = 3; // ディレイ時間なし CanMessage[i].Time = 0; // 送信メッセージの内容をコピー CanMessage[i].Data[0] = SendValue; } Ret = IFCCAN_ANY.CanActivate(DeviceHandle); // 送信メッセージのセット ( 送信開始 ) Ret = IFCCAN_ANY.CanSendMessageFD(DeviceHandle, CanMessage, 10); 238

239 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage(9) As IFCCAN_ANY.CAN_MESSAGE_FD Dim SendValue As Byte Dim Ret As Integer DeviceHandle = CanOpenPort( IFCAN1 ) For i = 0 To 9 Data 配列の初期化 CanMessage(i).InitializeArray() 送信メッセージ長のセット CanMessage(i).Length = 4 送信メッセージの ID をセット CanMessage(i).ID = &H01 Or IFCCAN_ANY.CAN_EXT_FRAME フラグの設定 CanMessage(i).Flag = 3 ディレイ時間なし CanMessage(i).Time = 0 送信メッセージの内容をコピー CanMessage(i).Data(0) = SendValue Next Ret = IFCCAN_ANY.CanActivate(DeviceHandle) 送信メッセージのセット ( 送信開始 ) Ret = IFCCAN_ANY.CanSendMessageFD(DeviceHandle, CanMessage, 10) 239

240 Visual C++ CLR プロジェクト unsigned int Ret; array<ifccan_anycan_message_fd>^ CanMessage = gcnew array<ifccan_anycan_message_fd>(10); IntPtr DeviceHandle; unsigned char SendValue; int i; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); for (i = 0; i < 10; i++) { // Data 配列の初期化 CanMessage[i].InitializeArray(); // 送信メッセージ長のセット CanMessage[i].Length = 1; // 送信メッセージの ID をセット CanMessage[i].ID = 0x01 IFCCANCAN_EXT_FRAME; // フラグの設定 CanMessage[i].Flag = 3; // ディレイ時間なし CanMessage[i].Time = 0; // 送信メッセージの内容をコピー CanMessage[i].Data[0] = SendValue; } Ret = IFCCAN_ANYCanActivate(DeviceHandle); // 送信メッセージのセット ( 送信開始 ) Ret = IFCCAN_ANYCanSendMessageFD(DeviceHandle, CanMessage, 10); デバイス名 IFCAN1 の CAN インタフェースから 10 件のメッセージ送信を行います 240

241 6. CanCyclicSendMessageFD 機能 CAN FD メッセージの周期送信を行います この関数は非同期で実行されますので 関数実行後にすぐに処理が返ります 設定した周期でデータ送信ができなかった場合と CanStopCyclicSendMessage 関数を実行した場合のみ 周期送信を停止します 周期送信実行中は CanSendMessage CanSendMessageFD CanMultiCyclicSendMessage CanMultiCyclicSendMessageFD 関数は使用できません また 周期送信メッセージは 送信完了メッセージを取得できません CAN FD 版 CAN 製品でのみ使用できます 書式 C 言語 INT CanCyclicSendMessageFD( HANDLE hdevicehandle, PCAN_MESSAGE_FD PCanMessage ); Visual Basic Declare Function CanCyclicSendMessageFD Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pcanmessage As CAN_MESSAGE_FD _ )As Long Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanCyclicSendMessageFD( IntPtr DeviceHandle, ref CAN_MESSAGE_FD CanMessage ); Visual Basic.NET Declare Function CanCyclicSendMessageFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef CanMessage As CAN_MESSAGE_FD _ ) As Integer 241

242 パラメータ hdevicehandle 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 戻り値一覧 をご参照ください 242

243 備考 1. データの送信時間よりも 周期時間を短く設定した場合 指定された時間に送信ができず 周期実行は停止します 例えば データの送信に 80ms かかるのに 周期時間を 50ms に設定した場合 50ms 経過したときに まだデータが送信中なので 周期実行が停止します 周期実行の停止は CanSetEvent 関数 CanSetEventMask 関数での設定を行っている場合 イベントにより通知されます また アービトレーションロストにより 指定した周期にデータを送信できない場合もあります アービトレーションロストが発生し データを再送しているときに 次の周期時間が来ると 上記と同じように 周期実行が停止します 例 ) 周期を 50ms に設定した場合 データ送信中 周期送信開始 50ms データ送信中 50ms 時間 例 ) 周期を 50ms に設定したが その周期よりもデータ送信時間が長い場合 データ送信中 50ms 前回のデータが まだ送信完了していないため 次のデータが送れずに周期送信は停止します 時間 周期送信開始 周期送信実行中でも 周期送信を行いたいデータの更新 周期の更新を行えます 更新したデータは 次の周期から反映されます 243

244 例 ) 周期送信を行うデータや周期を更新したい場合 データ A 送信中 50ms データ B 送信中 80ms 周期送信開始 時間データ 周期の更新はいつでも可能です ただし 反映されるのは次の周期からになります 例えば この時点で 周期送信を行うデータを B に 周期を 80ms に更新したとすると 前回の設定周期の 50ms が経過してから データ B が 80ms 周期で送信されるようになります 優先順位の高いメッセージを短い周期で送信していると アービトレーションにより それより優先順位の低いメッセージが送信されにくくなりますので ご注意ください 2. 本関数は スタンダード版 CAN 製品では使用することはできません 注意事項 CAN コントローラへのアクセスが競合すると 指定された時間に送信できず 周期送信が停止する場合があります その場合 CanGetStatus 関数によるステータスの読み出しや データ受信と競合した場合等に現象が発生しますので 周期送信を行うポートに対して下記のような対策をご検討下さい メッセージを受信しないよう 受信フィルタを設定する ステータスのポーリングを行わない 244

245 使用例 C 言語 INT nret; CAN_MESSAGE_FD CanMessage; HANDLE hdevicehandle; unsigned long ulsendvalue; hdevicehandle = 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 = ulsendvalue; nret = CanActivate(hDeviceHandle); // 300ms 周期で送信 nret = CanCyclicSendMessageFD(hDeviceHandle, CanMessage); 245

246 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim CanMessage As CAN_MESSAGE_FD Dim bsendvalue(0 To 3) As Byte Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) 送信メッセージ長のセット CanMessage.ulLength = 4 送信メッセージの ID をセット CanMessage.ulID = &H01 Or CAN_EXT_FRAME フラグの設定 CanMessage.ulFlag = 3 300ms 周期 CanMessage.ulTime = 300*100 送信メッセージの内容をコピー CanMessage.bData(0) = bsendvalue(0) CanMessage.bData(1) = bsendvalue(1) CanMessage.bData(2) = bsendvalue(2) CanMessage.bData(3) = bsendvalue(3) nret = CanActivate(hDeviceHandle) 300ms 周期で送信 nret = CanCyclicSendMessageFD(hDeviceHandle, CanMessage) 246

247 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE_FD CanMessage = new IFCCAN_ANY.CAN_MESSAGE_FD(); IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // Data 配列の初期化 CanMessage.InitializezArray(); // 送信メッセージ長のセット CanMessage.Length = 4; // 送信メッセージの ID をセット CanMessage.ID = 0x01 IFCCAN_ANY.CAN_EXT_FRAME; // フラグの設定 CanMessage.Flag = 3; // 300ms 周期 CanMessage.Time = 300*100; // 送信メッセージの内容をセット CanMessage.Data[0] = 0x01; CanMessage.Data[1] = 0x02; CanMessage.Data[2] = 0x03; CanMessage.Data[3] = 0x04; Ret = IFCCAN_ANY.CanActivate(DeviceHandle); // 300ms 周期で送信 Ret = IFCCAN_ANY.CanCyclicSendMessageFD(DeviceHandle, ref CanMessage); 247

248 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE_FD = New IFCCAN_ANY.CAN_MESSAGE_FD Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Data 配列の初期化 CanMessage.InitializeArray() 送信メッセージ長のセット CanMessage.Length = 4 送信メッセージの ID をセット CanMessage.ID = &H01 Or IFCCAN_ANY.CAN_EXT_FRAME フラグの設定 CanMessage.Flag = 3 300ms 周期 CanMessage.Time = 300*100 送信メッセージの内容をコピー CanMessage.Data(0) = &H01 CanMessage.Data(1) = &H02 CanMessage.Data(2) = &H03 CanMessage.Data(3) = &H04 Ret = IFCCAN_ANY.CanActivate(DeviceHandle) 300ms 周期で送信 Ret = IFCCAN_ANY.CanCyclicSendMessageFD(DeviceHandle, CanMessage) 248

249 Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_MESSAGE_FD CanMessage; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // Data 配列の初期化 CanMessage.InitializezArray(); // 送信メッセージ長のセット CanMessage.Length = 4; // 送信メッセージの ID をセット CanMessage.ID = 0x01 IFCCAN_ANYCAN_EXT_FRAME; // フラグの設定 CanMessage.Flag = 3; // 300ms 周期 CanMessage.Time = 300*100; // 送信メッセージの内容をセット CanMessage.Data[0] = 0x01; CanMessage.Data[1] = 0x02; CanMessage.Data[2] = 0x03; CanMessage.Data[3] = 0x04; Ret = IFCCAN_ANYCanActivate(DeviceHandle); // 300ms 周期で送信 Ret = IFCCAN_ANYCanCyclicSendMessageFD(DeviceHandle, CanMessage); デバイス名 IFCAN1 の CAN インタフェースから 300ms 周期で データを送信します 249

250 7. CanReceiveMessageFD 機能 受信された CAN FD メッセージを取り出します CAN バス上を流れる CAN FD メッセージは 自動的にデバイスドライバ内部の受信バッファに蓄えられます 本関数では この蓄えられた CAN FD メッセージを取り出します 受信メッセージがあるかどうかは CanGetStatusFD 関数で受信バッファの状態を見ることで確認できます 蓄えられた CAN FD メッセージが無い場合 戻り値で IFCAN_ERROR_BUFFER_IS_EMPTY が返されます また CanSetEvent 関数でイベントを設定することでメッセージを受信した時点でイベントを発生させることができます ( イベント コールバック関数 ウィンドウメッセージ ) CAN FD 版 CAN 製品でのみ使用できます 書式 C 言語 INT CanReceiveMessageFD( HANDLE hdevicehandle, PCAN_MESSAGE_FD pcanmessage, unsigned long* pulcount ); Visual Basic Declare Function CanReceiveMessageFD Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pcanmessage As CAN_MESSAGE_FD, _ ByRef pulcount As Long _ )As Long Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanReceiveMessageFD( IntPtr DeviceHandle, out CAN_MESSAGE_FD CanMessage, ref uint Count ); [DllImport( IFCan.dll )] public static extern uint CanReceiveMessageFD( IntPtr DeviceHandle, [Out] CAN_MESSAGE_FD[] CanMessage, ref uint Count ); 250

251 Visual Basic.NET Declare Function CanReceiveMessageFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef CanMessage As CAN_MESSAGE_FD, _ ByRef Count As Integer _ ) As Integer Declare Function CanReceiveMessageFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ <Out()> ByVal CanMessage() As CAN_MESSAGE_FD, _ ByRef Count As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pcanmessage 受信メッセージを格納する構造体へのポインタを指定してください pcount で指定された個数分の領域を用意してください CAN_MESSAGE_FD 構造体の説明については 4.3 構造体説明 をご参照ください pulcount 受信バッファから取り出すメッセージの件数を指定してください (1~CanSetConfig 関数で設定した受信バッファのサイズ ( デフォルト 64)) 受信バッファに蓄えられているメッセージが指定された件数よりも少ない場合 実際に受信バッファから取り出された件数が この変数に返されます 例 )PortStatus.ulRXBCountFD が 8 の時に pulcount に 10 をセットし CanReceiveMessageFD 関数を実行すると pulcount に 8 が返され 正常終了します 251

252 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 INT nret; CAN_MESSAGE_FD CanMessage[10]; unsigned long ulcount; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); // 受信メッセージの取り出し ulcount = 10; nret = CanReceiveMessageFD(hDeviceHandle, CanMessage, &ulcount); if (nret!= IFCAN_ERROR_SUCCESS) { if (nret == IFCAN_ERROR_BUFFER_IS_EMPTY) { printf( 受信メッセージがありません ); } } else { for (i=0; i<ulcount; 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 ); } } 252

253 Visual Basic Dim lpszname As String Dim lpszmessage As String Dim hdevicehandle As Long Dim CanMessage(0 To 9) As CAN_MESSAGE_FD Dim ulcount As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) ulcount = 10 受信メッセージの取り出し nret = CanReceiveMessageFD(hDeviceHandle, CanMessage(0), ulcount) If nret <> IFCAN_ERROR_SUCCESS Then If nret = IFCAN_ERROR_BUFFER_IS_EMPTY Then MsgBox( 受信メッセージがありません ) End If Else For i=0 To ulcount - 1 lpszmessage = lpszmessage & Str(i+1) & 件目のメッセージ & vbcrlf & _ 受信メッセージ長 & Str(CanMessage(i).ulLength) & vbcrlf & _ ID & Str(CanMessage(i).ulID) & vbcrlf & 受信データ For j=0 To CanMessage(i).ulLength - 1 lpszmessage = lpszmessage & Hex(CanMessage(i).bData(j)) & Next lpszmessage = lpszmessage & vbcrlf Next MsgBox(lpszMessage) End If 253

254 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE_FD[] CanMessage = new IFCCAN_ANY.CAN_MESSAGE_FD[10]; uint Count; IntPtr DeviceHandle; string Message = ; int i; uint j; for(i = 0; i < 10; i++) { CanMessage[i].InitializeArray(); } DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // 受信メッセージの取り出し Count = 10; Ret = IFCCAN_ANY.CanReceiveMessageFD(DeviceHandle, CanMessage, ref Count); if(ret!= IFCCAN_ANY.IFCAN_ERROR_SUCCESS) { if(ret == IFCCAN_ANY.IFCAN_ERROR_BUFFER_IS_EMPTY) { MessageBox.Show( 受信メッセージがありません ); } } else { for(i = 0; i < ulcount; i++) { Message = 受信メッセージ長 + CanMessage[i].Length.ToString(); MessageBox.Show(Message); Message = ID + CanMessage[i].ID.ToString(); MessageBox.Show(szMessage); Message = 受信データ ; for(j = 0; j < CanMessage[i].Length; j++) { Message += CanMessage[i].Data[j].ToString(); } MessageBox.Show(Message); } } 254

255 Visual Basic.NET Dim Message As String Dim DeviceHandle As Integer Dim CanMessage(9) As IFCCAN_ANY.CAN_MESSAGE_FD Dim Count As Integer Dim i As Integer Dim j As Integer Dim Ret As Integer for i = 0 To 9 CanMessage(i).InitializeArray() Next DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Count = 10 受信メッセージの取り出し Ret = IFCCAN_ANY.CanReceiveMessageFD(DeviceHandle, CanMessage, Count) If Ret <> IFCCAN_ANY.IFCAN_ERROR_SUCCESS Then If Ret = IFCCAN_ANY.IFCAN_ERROR_BUFFER_IS_EMPTY Then MsgBox( 受信メッセージがありません ) End If Else For i = 0 To Count 1 Message = Message & Str(i + 1) & 件目のメッセージ & vbcrlf & _ 受信メッセージ長 & Str(CanMessage(i).Length) & vbcrlf & _ ID & Str(CanMessage(i).ID) & vbcrlf & 受信データ For j = 0 To CanMessage(i).Length Message = Message & Hex(CanMessage(i).Data(j)) & Next Message = Message & vbcrlf Next MsgBox(Message) End If 255

256 Visual C++ CLR プロジェクト unsigned int Ret; array<ifccan_anycan_message_fd>^ CanMessage = gcnew array<ifccan_anycan_message_fd>(10); unsigned int Count; IntPtr DeviceHandle; String^ Message = ; unsigned int i; unsigned int j; for(i = 0; i < 10; i++) { CanMessage[i].InitializeArray(); } DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 受信メッセージの取り出し Count = 10; Ret = IFCCAN_ANYCanReceiveMessageFD(DeviceHandle, CanMessage, Count); if(ret!= IFCCAN_ANYIFCAN_ERROR_SUCCESS) { if(ret == IFCCAN_ANYIFCAN_ERROR_BUFFER_IS_EMPTY) { MessageBoxShow( 受信メッセージがありません ); } } else { for(i = 0; i < Count; i++) { Message = 受信メッセージ長 + CanMessage[i].Length.ToString(); MessageBoxShow(Message); Message = ID + CanMessage[i].ID.ToString(); MessageBoxShow(Message); Message = 受信データ ; for(j = 0; j < CanMessage[i].Length; j++) { Message += CanMessage[i].Data[j].ToString(); } MessageBoxShow(Message); } } デバイス名 IFCAN1 の CAN インタフェースから 10 件の受信メッセージを取り出します 取り出されたメッセージを画面に表示します 10 件に満たない場合は 取り出された件数分だけ表示します 256

257 8. CanMultiCyclicSendMessageFD 機能 CAN FD メッセージの周期送信を行います 最大 12 種類のメッセージを周期送信できます この関数は非同期で実行されますので 関数実行後すぐに処理が返ります 設定した周期でデータ送信ができなかった場合と CanStopMultiCyclicSendMessage 関数を実行した場合のみ 周期送信を停止します 周期送信実行中は CanSendMessage CanSendMessageFD CanCyclicSendMessage CanCyclicSendMessageFD 関数は使用できません また 周期送信メッセージは 送信完了メッセージを取得できません CAN FD 版 CAN 製品でのみ使用できます 書式 C 言語 INT CanMultiCyclicSendMessageFD( HANDLE hdevicehandle, DWORD dwroute, PCAN_MESSAGE_FD pcanmessage ); Visual Basic Declare Function CanMultiCyclicSendMessageFD Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByVal dwroute As Long, _ ByRef pcanmessage As CAN_MESSAGE_FD _ )As Long Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanMultiCyclicSendMessageFD( IntPtr DeviceHandle, uint Route, ref CAN_MESSAGE_FD CanMessage ); 257

258 Visual Basic.NET Declare Function CanMultiCyclicSendMessageFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByVal Route As Integer, _ ByRef CanMessage As CAN_MESSAGE_FD _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください dwroute 周期送信するメッセージの番号を 1~12 の範囲で指定します pcanmessage 送信するメッセージを格納した構造体のポインタを指定してください 送信周期は CanSetTransmissionCycle 関数にて設定します CAN_MESSAGE_FD 構造体の説明については 4.3 構造体説明 をご参照ください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 258

259 備考 1. 本関数を実行する前に必ず CanSetTransmissionCycle 関数で周期を設定してください 2. データの送信時間よりも 周期時間を短く設定した場合 指定された時間に送信ができず 周期実行は停止します 例えば データの送信に 80ms かかるのに 周期時間を 50ms に設定した場合 50ms 経過したときに まだデータが送信中なので 周期実行が停止します 周期実行の停止は CanSetEvent 関数 CanSetEventMask 関数での設定を行っている場合 イベントにより通知されます また アービトレーションロストにより 指定した周期にデータを送信できない場合もあります アービトレーションロストが発生し データを再送しているときに 次の周期時間が来ると 上記と同じように 周期実行が停止します 例 ) 周期を 50ms に設定した場合 データ送信中 周期送信開始 50ms データ送信中 50ms 時間 例 ) 周期を 50ms に設定したが その周期よりもデータ送信時間が長い場合 データ送信中 50ms 前回のデータが まだ送信完了していないため 次のデータが送れずに周期送信は停止します 時間 周期送信開始 周期送信実行中でも 周期送信を行いたいデータの更新 周期の更新を行えます 更新したデータは 次の周期から反映されます 259

260 例 ) 周期送信を行うデータや周期を更新したい場合 データ A 送信中 50ms データ B 送信中 80ms 周期送信開始 時間データ 周期の更新はいつでも可能です ただし 反映されるのは次の周期からになります 例えば この時点で 周期送信を行うデータを B に 周期を 80ms に更新したとすると 前回の設定周期の 50ms が経過してから データ B が 80ms 周期で送信されるようになります 優先順位の高いメッセージを短い周期で送信していると アービトレーションにより それより優先順位の低いメッセージが送信されにくくなりますので ご注意ください 使用例 C 言語 INT nret; CAN_MESSAGE_FD CanMessage; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, 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(hDeviceHandle); // メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessageFD(hDeviceHandle, 4, CanMessage); 260

261 Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim CanMessage As CAN_MESSAGE_FD Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) 送信周期を 100ms に設定 nret = CanSetTransmissionCycle(hDeviceHandle, CAN_ROUTE_4_6, 100*1000) 送信メッセージのセット CanMessage.ulLength = 4 CanMessage.ulID = &H01 CanMessage.ulFlag = 3 CanMessage.ulTime = 0 CanMessage.bData(0) = &H11 CanMessage.bData(1) = &H22 CanMessage.bData(2) = &H33 CanMessage.bData(3) = &H44 nret = CanActivate(hDeviceHandle) メッセージ番号 4 の周期送信開始 nret = CanMultiCyclicSendMessageFD(hDeviceHandle, 4, CanMessage) 261

262 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE_FD CanMessage = new IFCCAN_ANY.CAN_MESSAGE_FD(); IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 Ret = IFCCAN_ANY.CanSetTransmissionCycle(DeviceHandle, CAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.InitializezArray(); CanMessage.Length = 4; CanMessage.ID = 0x01; CanMessage.Flag = 3; CanMessage.Time = 0; CanMessage.Data[0] = 0x11; CanMessage.Data[1] = 0x22; CanMessage.Data[2] = 0x33; CanMessage.Data[3] = 0x44; Ret = IFCCAN_ANY.CanActivate(DeviceHandle); // メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANY.CanMultiCyclicSendMessageFD(DeviceHandle, 4, ref CanMessage); 262

263 Visual Basic.NET Dim DeviceHandle As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE_FD = New IFCCAN_ANY.CAN_MESSAGE_FD Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) 送信周期を 100ms に設定 Ret = IFCCAN_ANY.CanSetTransmissionCycle(DeviceHandle, CAN_ROUTE_4_6, 100*1000) 送信メッセージのセット CanMessage.InitializeArray() CanMessage.Length = 4 CanMessage.ID = &H01 CanMessage.Flag = 3 CanMessage.Time = 0 CanMessage.Data(0) = &H11 CanMessage.Data(1) = &H22 CanMessage.Data(2) = &H33 CanMessage.Data(3) = &H44 Ret = IFCCAN_ANY.CanActivate(DeviceHandle) メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANY.CanMultiCyclicSendMessageFD(DeviceHandle, 4, CanMessage) 263

264 Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_MESSAGE_FD CanMessage; IntPtr DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 送信周期を 100ms に設定 Ret = IFCCAN_ANYCanSetTransmissionCycle(DeviceHandle, IFCCAN_ANYCAN_ROUTE_4_6, 100*1000); // 送信メッセージのセット CanMessage.InitializezArray(); CanMessage.Length = 4; CanMessage.ID = 0x01; CanMessage.Flag = 3; CanMessage.Time = 0; CanMessage.Data[0] = 0x11; CanMessage.Data[1] = 0x22; CanMessage.Data[2] = 0x33; CanMessage.Data[3] = 0x44; Ret = IFCCAN_ANYCanActivate(DeviceHandle); // メッセージ番号 4 の周期送信開始 Ret = IFCCAN_ANYCanMultiCyclicSendMessageFD(DeviceHandle, 4, CanMessage); デバイス名 IFCAN1 の CAN インタフェースから 100ms 周期で データを送信します 264

265 9. CanGetStatusFD 機能 CAN バスの現在の状態を取得します 得られる情報はバスの状態 エラーカウンタ 送受信バッファの空き状況等です 詳細は 4.3 構造体説明 を参照下さい 本関数の実行時 CAN バスへの接続を無効化 (CanDeactivate 関数 ) する必要はありません CanOpenPort 関数でオープン後であれば いつでも使用することができます CAN FD 版 CAN 製品でのみ使用できます 書式 C 言語 INT CanGetStatusFD( HANDLE hdevicehandle, PCAN_PORT_STATUS_FD pportstatus ); Visual Basic Declare Function CanGetStatusFD Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pportstatus As CAN_PORT_STATUS_FD _ )As Long Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanGetStatusFD( IntPtr DeviceHandle, out CAN_PORT_STATUS_FD PortStatus ); Visual Basic.NET Declare Function CanGetStatusFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef PortStatus As CAN_PORT_STATUS_FD _ ) As Integer 265

266 パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pportstatus ステータス取得用構造体へのポインタを指定してください 構造体の説明については 4.3 構造体説明 をご参照ください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 INT nret; CAN_PORT_STATUS_FD PortStatus; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); nret = CanGetStatusFD(hDeviceHandle, &PortStatus); Visual Basic Dim lpszname As String Dim hdevicehandle As Long Dim PortStatus As CAN_PORT_STATUS_FD Dim nret As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) nret = CanGetStatusFD(hDeviceHandle, PortStatus) 266

267 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_PORT_STATUS_FD PortStatus = new IFCCAN_ANY.CAN_PORT_STATUS_FD(); int DeviceHandle; DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); Ret = IFCCAN_ANY.CanGetStatusFD(DeviceHandle, out PortStatus); Visual Basic.NET Dim DeviceHandle As Integer Dim PortStatus As IFCCAN_ANY.CAN_PORT_STATUS_FD = New IFCCAN_ANY.CAN_PORT_STATUS_FD Dim Ret As Integer DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Ret = IFCCAN_ANY.CanGetStatusFD(DeviceHandle, PortStatus) Visual C++ CLR プロジェクト unsigned int Ret; IFCCAN_ANYCAN_PORT_STATUS_FD PortStatus; int DeviceHandle; DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); Ret = IFCCAN_ANYCanGetStatusFD(DeviceHandle, PortStatus); デバイス名 IFCAN1 の CAN インタフェースのステータスを取得します 267

268 10. CanGetCompletionMessageFD 機能 送信完了メッセージを取り出します 送信を完了したメッセージは 送信が完了した時間を CAN_MESSAGE_FD 構造体の ultime メンバに格納して そのまま送信バッファに格納されています 本関数では その蓄えられた送信完了メッセージを取り出します 送信バッファ内では 送信完了メッセージ数はカウントされませんので ご注意ください CAN FD 版 CAN 製品でのみ使用できます 書式 C 言語 INT CanGetCompletionMessageFD( HANDLE hdevicehandle, PCAN_MESSAGE_FD pcanmessage, unsigned long* pulcount ); Visual Basic Declare Function CanGetCompletionMessageFD Lib "IFCan.DLL"( _ ByVal hdevicehandle As Long, _ ByRef pcanmessage As CAN_MESSAGE_FD, _ ByRef pulcount As Long _ )As Long Visual C#.NET [DllImport( IFCan.dll )] public static extern uint CanGetCompletionMessageFD( IntPtr DeviceHandle, out CAN_MESSAGE_FD CanMessage, ref uint Count ); [DllImport( IFCan.dll )] public static extern uint CanGetCompletionMessageFD( IntPtr DeviceHandle, [Out] CAN_MESSAGE_FD[] CanMessage, ref uint Count ); 268

269 Visual Basic.NET Declare Function CanGetCompletionMessageFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ ByRef CanMessage As CAN_MESSAGE_FD, _ ByRef Count As Integer _ ) As Integer Declare Function CanGetCompletionMessageFD Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _ <Out()> ByVal CanMessage() As CAN_MESSAGE_FD, _ ByRef Count As Integer _ ) As Integer パラメータ hdevicehandle CanOpenPort 関数で取得したデバイスハンドルを指定してください pcanmessage 送信完了メッセージを格納する構造体へのポインタを指定してください pcount で指定された個数分の領域を用意してください CAN_MESSAGE_FD 構造体の説明については 4.3 構造体説明 をご参照ください pulcount 取り出す送信完了メッセージの件数を指定してください 送信完了メッセージが指定された件数よりも少ない場合 実際に取り出された送信メッセージ数が この変数に返されます 例 ) 送信完了メッセージ数が 3 の時に pulcount に 5 をセットし CanGetCompletionMessageFD 関数を実行すると pulcount に 3 が返されます 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 注意 CanCyclicSendMessageFD 関数による周期送信は 送信完了メッセージが格納されません 269

270 使用例 C 言語 INT nret; CAN_MESSAGE_FD CanMessage[10]; unsigned long ulcount; HANDLE hdevicehandle; hdevicehandle = CanOpenPort( IFCAN1 ); // 送信完了メッセージの取り出し ulcount = 10; nret = CanGetCompletionMessageFD(hDeviceHandle, CanMessage, &ulcount); Visual Basic Dim lpszname As String Dim lpszmessage As String Dim hdevicehandle As Long Dim CanMessage(0 To 9) As CAN_MESSAGE_FD Dim ulcount As Long lpszname = "IFCAN1" & Chr( 0 ) hdevicehandle = CanOpenPort(lpszName) ulcount = 10 送信完了メッセージの取り出し nret = CanGetCompletionMessageFD(hDeviceHandle, CanMessage(0), ulcount) 270

271 Visual C#.NET uint Ret; IFCCAN_ANY.CAN_MESSAGE_FD[] CanMessage = new IFCCAN_ANY.CAN_MESSAGE_FD[10]; uint Count; IntPtr DeviceHandle; int i; for(i = 0; i < 10; i++) { CanMessage[i].InitializeArray(); } DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ); // 送信完了メッセージの取り出し Count = 10; Ret = IFCCAN_ANY.CanGetCompletionMessageFD(DeviceHandle, CanMessage, ref Count); Visual Basic.NET Dim Message As String Dim DeviceHandle As Integer Dim CanMessage(9) As IFCCAN_ANY.CAN_MESSAGE_FD Dim Count As Integer Dim i As Integer For i = 0 To 9 CanMessage(i).InitializeArray() Next DeviceHandle = IFCCAN_ANY.CanOpenPort( IFCAN1 ) Count = 10 送信完了メッセージの取り出し Ret = IFCCAN_ANY.CanGetCompletionMessageFD(DeviceHandle, CanMessage, Count) 271

272 Visual C++ CLR プロジェクト unsigned int Ret; array<ifccan_anycan_message_fd>^ CanMessage = gcnew array<ifccan_anycan_message_fd>(10); unsigned int Count; IntPtr DeviceHandle; int i; for(i = 0; i < 10; i++) { CanMessage[i].InitializeArray(); } DeviceHandle = IFCCAN_ANYCanOpenPort( IFCAN1 ); // 送信完了メッセージの取り出し Count = 10; Ret = IFCCAN_ANYCanGetCompletionMessageFD(DeviceHandle, CanMessage, Count); デバイス名 IFCAN1 の CAN インタフェースから 10 件の送信完了メッセージを取り出します 272

273 4.2.4 プロファイル設定用関数 1. CanQueryProfile 機能 受信データの ID に該当するプロファイルが登録されているかどうか問い合わせます 該当するプロファイルが見つかった場合 その番号が返されます 書式 C 言語 int CanQueryProfile( PCAN_MESSAGE pcanmessage, int* nnumber ); Visual Basic Declare Function CanQueryProfile Lib "IFCanPf.DLL" ( _ ByRef pcanmessage As CAN_MESSAGE, _ ByRef nnumber As Long _ ) As Long Delphi function CanQueryProfile( var pcanmessage CAN_MESSAGE; var nnumber Integer ) Integer; stdcall; external IFCanPf.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCanPf.dll )] public static extern uint CanQueryProfile( ref CAN_MESSAGE CanMessage, out int Number ); Visual Basic.NET(x86 x64 共用 ) Declare Function CanQueryProfile Lib "IFCanPf.DLL" ( _ ByRef CanMessage As CAN_MESSAGE, _ ByRef Number As Integer _ ) As Integer パラメータ pcanmessage 受信メッセージが格納されている構造体へのポインタを指定します 273

274 nnumber プロファイル番号を格納する変数へのポインタを指定します 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 CAN_MESSAGE CanMessage; int nnumber; ULONG ulcount; int nret; ulcount = 1; nret = CanReceiveMessage(hDeviceHandle, &CanMessage, &ulcount); nret = CanQueryProfile(&CanMessage, &nnumber); Visual Basic Dim CanMessage As CAN_MESSAGE Dim nnumber As Long Dim ulcount As Long Dim nret As Long ulcount = 1 nret = CanReceiveMessage(hDeviceHandle, CanMessage, ulcount) nret = CanQueryProfile(CanMessage, nnumber) Delphi var CanMessage CAN_MESSAGE; nnumber Integer; ulcount ULONG; nret Integer; ulcount = 1; nret = CanReceiveMessage(hDeviceHandle, CanMessage, ulcount); nret = CanQueryProfile(CanMessage, nnumber); 274

275 Visual C#.NET IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); int Number; uint Count; uint Ret; CanMessage.InitializeArray(); Count = 1; Ret = IFCCAN_ANY.CanReceiveMessage(DeviceHandle, out CanMessage, ref Count); Ret = IFCCANPF.CanQueryProfile(ref CanMessage, out Number); Visual Basic.NET Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim Number As Integer Dim Count As Integer Dim Ret As Integer CanMessage.InitializeArray() Count = 1 Ret = IFCCAN_ANY.CanReceiveMessage(DeviceHandle, CanMessage, Count) Ret = IFCCANPF.CanQueryProfile(CanMessage, Number) Visual C++ CLR プロジェクト IFCCAN_ANYCAN_MESSAGE CanMessage; int Number; unsigned int Count; unsigned int Ret; CanMessage.InitializeArray(); Count = 1; Ret = IFCCAN_ANYCanReceiveMessage(DeviceHandle, CanMessage, Count); Ret = IFCCANPFCanQueryProfile(CanMessage, Number); 受信データの ID に該当するプロファイル番号を取得します 275

276 2. CanApplyProfile 機能 プロファイル情報を元に受信データを変換します 書式 C 言語 int CanApplyProfile( PCAN_MESSAGE void* int int* ); pcanmessage, pdestination, nmaximumlength, pnlength Delphi function CanApplyProfile( var pcanmessage CAN_MESSAGE; pdestination pointer; nmaximumlength Integer; var pnlength Integer ) Integer; stdcall; external IFCanPf.DLL ; パラメータ pcanmessage 受信データが格納されているバッファへのポインタを指定します pdestination プロファイル情報適用後のデータを格納するバッファへのポインタを指定します nmaximumlength 変換データの最大サイズをバイト単位で指定します 変換データが本パラメータ以上のサイズになった場合エラーとなります pnlength 変換データのサイズを格納する変数へのポインタを指定します 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 Visual Basic, Visual C#.NET, Visual Basic.NET では本関数を呼び出すことはできません CanApplyProfileInteger 関数 CanApplyProfileFloat 関数 CanApplyProfileDouble 関数を使用します 276

277 使用例 C 言語 #define TYPE1_ID 0x101 typedef struct _MSG_TYPE1 { int data1; float data2; } MSG_TYPE1; CAN_MESSAGE scanmessage; 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, &scanmessage, &ReceiveCount); CanQueryProfile(&sCanMessage, &number); if(number == 1) { CanApplyProfile(&sCanMessage, (void *)&dest, sizeof(msg_type1), &length); } 277

278 Delphi type MST_TYPE1 = record data1 Integer; data2 Single; end; var ReceiveCount Integer; length Integer; dest MSG_TYPE1; scanmessage CAN_MESSAGE; itemdata array[0..8] of CAN_PROFILE_DATA; number Integer; // プロファイルの登録 itemdata[0].ulstartbit = 0; itemdata[0].ulbitcount = 8; itemdata[0].ulbyteorder = CAN_BYTEORDER_INTEL; itemdata[0].uldatatype = CAN_DATATYPE_INTEGER32; itemdata[1].ulstartbit = 32; itemdata[1].ulbitcount = 32; itemdata[1].ulbyteorder = CAN_BYTEORDER_INTEL; itemdata[1].uldatatype = CAN_DATATYPE_FLOAT; number = CAN_ANY_NUMBER; CanSetProfile(number, msg type1, $101, 2, item[0]); // 受信データの変換 ReceiveCount = 1; CanReceiveMessage(hPort, scanmessage, ReceiveCount); CanQueryProfile(sCanMessage, number); if number = 1 then begin SizeOf(MSG_TYPE1), length); end; 受信データにプロファイル情報を適用し MSG_TYPE1 型構造体に変換します 278

279 3. CanApplyProfileInteger 機能 プロファイル情報を元に送受信データを 32bit 整数値に変換します 書式 C 言語 int CanApplyProfileInteger( PCAN_MESSAGE pcanmessage, int* pndestination, int nindex ); Visual Basic Declare function CanApplyProfileInteger Lib "IFCanPf.DLL" ( _ ByRef pcanmessage As CAN_MESSAGE, _ ByRef pndestination As Long, _ ByVal nindex As Long _ ) As Long Delphi function CanApplyProfileInteger( var pcanmessage CAN_MESSAGE; var pndestination Integer; nindex Integer ) Integer; stdcall; external IFCanPf.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCanPf.dll )] public static extern uint CanApplyProfileInteger( ref CAN_MESSAGE CanMessage, out int Destination, uint Index ); Visual Basic.NET(x86 x64 共用 ) Declare function CanApplyProfileInteger Lib "IFCanPf.DLL" ( _ ByRef CanMessage As CAN_MESSAGE, _ ByRef Destination As Integer, _ ByVal Index As Integer _ ) As Integer パラメータ pcanmessage 受信メッセージが格納されている構造体へのポインタを指定します 279

280 pndestination プロファイル情報適用後のデータを格納する変数へのポインタを指定します nindex 適用するプロファイルの要素番号を指定します 要素番号は 1 始まりです ( プロファイル要素の先頭は 1 その次の要素は 2 となります ) 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 プロファイルの要素が 8bit 整数値 16bit 整数値の場合は 自動的に 32bit 整数値に拡張されます 使用例 C 言語 int length, value, number, itemcount; CAN_MESSAGE scanmessage; CAN_PROFILE_DATA item[8]; unsigned long id; char name[64]; unsigned long ReceiveCount; int nret; ReceiveCount = 1; nret = CanReceiveMessage(hPort, &scanmessage, &ReceiveCount); nret = CanQueryMessage(&sCanMessage, &number); nret = CanGetProfile(number, name, &id, &itemcount, &item[0]); if(item[0].uldatatype == CAN_DATATYPE_INTEGER32) { nret = CanApplyProfileInteger(&sCanMessage, &value, 1); } 280

281 Visual Basic Dim length As Integer Dim number As Integer Dim itemcount As Long Dim scanmessage As CAN_MESSAGE Dim item(0 to 7) As CAN_PROFILE_DATA Dim value As Long Dim id As Long Dim name As String Dim ReceiveCount As Long Dim nret As Integer ReceiveCount = 1 nret = CanReceiveMessage(hPort, scanmessage, ReceiveCount) nret = CanQueryProfile(sCanMessage, number) nret = CanGetProfile(number, name, id, itemcount, item(0)) If item(0).uldatatype = CAN_DATATYPE_INTEGER32 Then nret = CanApplyProfileInteger(sCanMessage, value, 1) End If Delphi var length Integer; number Integer; itemcount Integer; scanmessage CAN_MESSAGE; item array[0..7] of CAN_PROFILE_DATA; value Integer; id ULONG; name string; ReceiveCount Integer; nret Integer; ReceiveCount = 1; nret = CanReceiveMessage(hPort, scanmessage, ReceiveCount); nret = CanQueryProfile(sCanMessage, number); nret = CanGetProfile(number, name, id, itemcount, item[0]); if item[0].uldatatype = CAN_DATATYPE_INTEGER32 then begin nret = CanApplyProfileInteger(sCanMessage, value, 1); end 281

282 Visual C#.NET int length; int value; int number; int itemcount; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IFCCANPF.CAN_PROFILE_DATA[] item = new IFCCANPF.CAN_PROFILE_DATA[8]; uint id; string name; System.Text.StringBuilder name = New System.Text.StringBuilder() uint ReceiveCount; uint Ret; CanMessage.InitializeArray(); ReceiveCount = 1; Ret = IFCCAN_ANY.CanReceiveMessage(Port, out CanMessage, ref ReceiveCount); Ret = IFCCANPF.CanQueryProfile(ref CanMessage, out number); Ret = IFCCANPF.CanGetProfile(number, out name, out id, out itemcount, out item); if(item[0].datatype == IFCCANPF.CAN_DATATYPE_INTEGER32) { Ret = IFCCANPF.CanApplyProfileInteger(ref CanMessage, out value, 1); } Visual Basic.NET Dim length As Integer Dim number As Integer Dim itemcount As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim item(7) As IFCCANPF.CAN_PROFILE_DATA Dim value As Integer Dim id As Integer Dim name As System.Text.StringBuilder = New System.Text.StringBuilder Dim ReceiveCount As Integer Dim Ret As Integer CanMessage.InitializeArray() ReceiveCount = 1 Ret = IFCCAN_ANY.CanReceiveMessage(Port, CanMessage, ReceiveCount) Ret = IFCCANPF.CanQueryProfile(CanMessage, number) Ret = IFCCANPF.CanGetProfile(number, name, id, itemcount, item) If item(0).datatype = IFCCANPF.CAN_DATATYPE_INTEGER32 Then Ret = IFCCAN_ANY.CanApplyProfileInteger(CanMessage, value, 1) End If 282

283 Visual C++ CLR プロジェクト int length; int value; int number; int itemcount; IFCCAN_ANYCAN_MESSAGE CanMessage; array<ifccanpfcan_profile_data>^ item = gcnew array<ifccanpfcan_profile_data>(8); unsigned int id; SystemTextStringBuilder^ name; unsigned int ReceiveCount; unsigned int Ret; CanMessage.InitializeArray(); ReceiveCount = 1; Ret = IFCCAN_ANY.CanReceiveMessage(Port, CanMessage, ReceiveCount); Ret = IFCCANPF.CanQueryProfile(CanMessage, number); Ret = IFCCANPF.CanGetProfile(number, name, id, itemcount, item); if(item[0].datatype == IFCCANPFCAN_DATATYPE_INTEGER32) { Ret = IFCCANPFCanApplyProfileInteger(CanMessage, value, 1); } 受信データにプロファイル情報を適用し 32bit 整数型変数に変換します 283

284 4. CanApplyProfileFloat 機能 プロファイル情報を元に送受信データを 32bit 実数値に変換します 書式 C 言語 int CanApplyProfileFloat( PCAN_MESSAGE float* int ); pcanmessage, pfdestination, nindex Visual Basic Declare function CanApplyProfileFloat Lib "IFCanPf.DLL" ( _ ByRef pcanmessage As CAN_MESSAGE, _ ByRef pfdestination As Single, _ ByVal nindex As Long _ ) As Long Delphi function CanApplyProfileFloat( var pcanmessage CAN_MESSAGE; var pfdestination Single; nindex Integer ) Integer; stdcall; external IFCanPf.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCanPf.dll )] public static extern uint CanApplyProfileFloat( ref CAN_MESSAGE CanMessage, out float Destination, uint Index ); Visual Basic.NET(x86 x64 共用 ) Declare function CanApplyProfileFloat Lib "IFCanPf.DLL" ( _ ByRef CanMessage As CAN_MESSAGE, _ ByRef Destination As Single, _ ByVal Index As Integer _ ) As Integer パラメータ pcanmessage 受信メッセージが格納されているバッファへのポインタを指定します 284

285 pfdestination Message プロファイル情報適用後のデータを格納する変数へのポインタを指定します nindex 適用するプロファイルの要素番号を指定します 要素番号は 1 始まりです ( プロファイル要素の先頭は 1 その次の要素は 2 となります ) 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 int length, number, itemcount; CAN_MESSAGE scanmessage; CAN_PROFILE_DATA item[8]; float value; unsigned long id; char name[64]; unsigned long ReceiveCount; int nret; ReceiveCount = 1; nret = CanReceiveMessage(hPort, &scanmessage, &ReceiveCount); nret = CanQueryProfile(&sCanMessage, &number); nret = CanGetProfile(number, name, &id, &itemcount, &item[0]); if(signal[0].type == CAN_DATATYPE_FLOAT) { nret = CanApplyProfileFloat(&sCanMessage, &value, 1); } 285

286 Visual Basic Dim length As Integer Dim number As Integer Dim itemcount As Long Dim scanmessage As CAN_MESSAGE Dim item(0 to 7) As CAN_PROFILE_DATA Dim value As Single Dim id As Long Dim name As String Dim ReceiveCount As Long Dim nret As Integer ReceiveCount = 1 nret = CanReceiveMessage(hPort, scanmessage, ReceiveCount) nret = CanQueryProfile(sCanMessage, number) nret = CanGetProfile(number, name, id, itemcount, item(0)) If item(0).uldatatype = CAN_DATATYPE_FLOAT Then nret = CanApplyProfileFloat(sCanMessage, value, 1) End If Delphi var length Integer; number Integer; itemcount Integer; scanmessage CAN_MESSAGE; item array[0..7] of CAN_PROFILE_DATA; value Single; id Integer; name string; ReceiveCount ULONG; Ret Integer; ReceiveCount = 1; Ret = CanReceiveMessage(hPort, scanmessage, ReceiveCount); Ret = CanQueryProfile(sCanMessage, number); Ret = CanGetProfile(number, name, id, itemcount, item[0]); if item[0].uldatatype = CAN_DATATYPE_FLOAT then begin Ret = CanApplyProfileFloat(sCanMessage, value, 1); end 286

287 Visual C#.NET int length; float value; int number; int itemcount; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IFCCANPF.CAN_PROFILE_DATA[] item = new IFCCANPF.CAN_PROFILE_DATA[8]; uint id; string name; uint ReceiveCount; uint Ret; CanMessage.InitializeArray(); ReceiveCount = 1; Ret = IFCCAN_ANY.CanReceiveMessage(Port, out CanMessage, ref ReceiveCount); Ret = IFCCANPF.CanQueryProfile(ref CanMessage, out number); Ret = IFCCANPF.CanGetProfile(number, out name, out id, out itemcount, out item); if(item[0].datatype == IFCCANPF.CAN_DATATYPE_FLOAT) { Ret = IFCCANPF.CanApplyProfileFloat(ref CanMessage, out value, 1); } Visual Basic.NET Dim length As Integer Dim number As Integer Dim itemcount As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim item(7) As IFCCANPF.CAN_PROFILE_DATA Dim value As Single Dim id As Integer Dim name As String Dim ReceiveCount As Integer Dim Ret As Integer CanMessage.InitializeArray() ReceiveCount = 1 Ret = IFCCAN_ANY.CanReceiveMessage(Port, CanMessage, ReceiveCount) Ret = IFCCANPF.CanQueryProfile(CanMessage, number) Ret = IFCCANPF.CanGetProfile(number, name, id, itemcount, item) If item(0).datatype = IFCCANPF.CAN_DATATYPE_FLOAT Then Ret = IFCCAN_ANY.CanApplyProfileFloat(CanMessage, value, 1) End If 287

288 Visual C++ CLR プロジェクト int length; float value; int number; int itemcount; IFCCAN_ANYCAN_MESSAGE CanMessage; array<ifccanpfcan_profile_data>^ item = gcnew array<ifccanpfcan_profile_data>(8); unsigned int id; SystemTextStringBuilder^ name; unsigned int ReceiveCount; unsigned int Ret; CanMessage.InitializeArray(); ReceiveCount = 1; Ret = IFCCAN_ANYCanReceiveMessage(Port, CanMessage, ReceiveCount); Ret = IFCCANPFCanQueryProfile(CanMessage, number); Ret = IFCCANPFCanGetProfile(number, name, id, itemcount, item); if(item[0].datatype == IFCCANPFCAN_DATATYPE_FLOAT) { Ret = IFCCANPFCanApplyProfileFloat(CanMessage, value, 1); } 受信データにプロファイル情報を適用し 32bit 実数型変数に変換します 288

289 5. CanApplyProfileDouble 機能 プロファイル情報を元に送受信データを 64bit 実数値に変換します 書式 C 言語 int CanApplyProfileDouble( PCAN_MESSAGE double* int ); pcanmessage, pddestination, nindex Visual Basic Declare function CanApplyProfileDouble Lib "IFCanPf.DLL" ( _ ByRef pcanmessage As CAN_MESSAGE, _ ByRef pddestination As Double, _ ByVal nindex As Long _ ) As Long Delphi function CanApplyProfileDouble( var pcanmessage CAN_MESSAGE; var pddestination Double; nindex Integer ) Integer; stdcall; external IFCanPf.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCanPf.dll )] public static extern uint CanApplyProfileDouble( ref CAN_MESSAGE CanMessage, out double Destination, uint Index ); Visual Basic.NET(x86 x64 共用 ) Declare function CanApplyProfileDouble Lib "IFCanPf.DLL" ( _ ByRef CanMessage As CAN_MESSAGE, _ ByRef Destination As Double, _ ByVal Index As Integer _ ) As Integer パラメータ pcanmessage 受信メッセージが格納されているバッファへのポインタを指定します 289

290 pddestination Message プロファイル情報適用後のデータを格納する変数へのポインタを指定します nindex 適用するプロファイルの要素番号を指定します 要素番号は 1 始まりです ( プロファイル要素の先頭は 1 その次の要素は 2 となります ) 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 int length, number, itemcount; CAN_MESSAGE scanmessage; CAN_PROFILE_DATA item[8]; double value; unsigned long id; char name[64]; unsigned long ReceiveCount; int nret; ReceiveCount = 1; nret = CanReceiveMessage(hPort, &scanmessage, &ReceiveCount); nret = CanQueryProfile(&sCanMessage, &number); nret = CanGetProfile(number, name, &id, &itemcount, &item[0]); if(signal[0].type == CAN_DATATYPE_FLOAT64) { nret = CanApplyProfileDouble(&sCanMessage, &value, 1); } 290

291 Visual Basic Dim length As Integer Dim number As Integer Dim itemcount As Long Dim scanmessage As CAN_MESSAGE Dim item(0 to 7) As CAN_PROFILE_DATA Dim value As Double Dim id As Long Dim name As String Dim ReceiveCount As Long Dim nret As Integer ReceiveCount = 1 nret = CanReceiveMessage(hPort, scanmessage, ReceiveCount) nret = CanQueryProfile(sCanMessage, number) nret = CanGetProfile(number, name, id, itemcount, item(0)) If item(0).uldatatype = CAN_DATATYPE_FLOAT64 Then nret = CanApplyProfileDouble(sCanMessage, value, 1) End If Delphi var length Integer; number Integer; itemcount Integer; scanmessage CAN_MESSAGE; item array[0..7] of CAN_PROFILE_DATA; value Double; id Integer; name string; ReceiveCount ULONG; Ret Integer; ReceiveCount = 1; Ret = CanReceiveMessage(hPort, scanmessage, ReceiveCount); Ret = CanQueryProfile(sCanMessage, number); Ret = CanGetProfile(number, name, id, itemcount, item[0]); if item[0].uldatatype = CAN_DATATYPE_FLOAT64 then begin Ret = CanApplyProfileDouble(sCanMessage, value, 1); end 291

292 Visual C#.NET int length; double value; int number; int itemcount; IFCCAN_ANY.CAN_MESSAGE CanMessage = new IFCCAN_ANY.CAN_MESSAGE(); IFCCANPF.CAN_PROFILE_DATA[] item = new IFCCANPF.CAN_PROFILE_DATA[8]; uint id; string name; uint ReceiveCount; uint Ret; CanMessage.InitializeArray(); ReceiveCount = 1; Ret = IFCCAN_ANY.CanReceiveMessage(Port, out CanMessage, ref ReceiveCount); Ret = IFCCANPF.CanQueryProfile(ref CanMessage, out number); Ret = IFCCANPF.CanGetProfile(number, out name, out id, out itemcount, out item); if(item[0].datatype == IFCCANPF.CAN_DATATYPE_FLOAT64) { Ret = IFCCANPF.CanApplyProfileDouble(ref CanMessage, out value, 1); } Visual Basic.NET Dim length As Integer Dim number As Integer Dim itemcount As Integer Dim CanMessage As IFCCAN_ANY.CAN_MESSAGE = New IFCCAN_ANY.CAN_MESSAGE Dim item(7) As IFCCANPF.CAN_PROFILE_DATA Dim value As Double Dim id As Integer Dim name As String Dim ReceiveCount As Integer Dim Ret As Integer CanMessage.InitializeArray() ReceiveCount = 1 Ret = IFCCAN_ANY.CanReceiveMessage(Port, CanMessage, ReceiveCount) Ret = IFCCANPF.CanQueryProfile(CanMessage, number) Ret = IFCCANPF.CanGetProfile(number, name, id, itemcount, item) If item(0).datatype = IFCCANPF.CAN_DATATYPE_FLOAT64 Then Ret = IFCCAN_ANY.CanApplyProfileDouble(CanMessage, value, 1) End If 292

293 Visual C++ CLR プロジェクト int length; double value; int number; int itemcount; IFCCAN_ANYCAN_MESSAGE CanMessage; array<ifccanpfcan_profile_data>^ item = gcnew array<ifccanpfcan_profile_data>(8); unsigned int id; SystemTextStringBuilder^ name; unsigned int ReceiveCount; unsigned int Ret; CanMessage.InitializeArray(); ReceiveCount = 1; Ret = IFCCAN_ANYCanReceiveMessage(Port, CanMessage, ReceiveCount); Ret = IFCCANPFCanQueryProfile(ref CanMessage, number); Ret = IFCCANPFCanGetProfile(number, name, id, itemcount, item); if(item[0].datatype == IFCCANPFCAN_DATATYPE_FLOAT64) { Ret = IFCCANPFCanApplyProfileDouble(CanMessage, value, 1); } 受信データにプロファイル情報を適用し 64bit 実数型変数に変換します 293

294 6. CanSetProfile 機能 プロファイルの登録を行います 書式 C 言語 int CanSetProfile( int* char* unsigned long int PCAN_PROFILE_DATA ); pnnumber, szname, ulid, nitemcount, pitem Visual Basic Declare function CanSetProfile Lib "IFCanPf.DLL" ( _ ByRef pnnumber As Long, _ ByVal szname As String, _ ByVal ulid As Long, _ ByVal nitemcount As Long, _ ByRef pitem As CAN_PROFILE_DATA _ ) As Long Delphi function CanSetProfile( var pnnumber Integer; szname String; ulid ULONG; nitemcount Integer; var pitem CAN_PROFILE_DATA ) Integer; stdcall; external IFCanPf.DLL ; 294

295 Visual C#.NET(x86 x64 共用 ) [DllImport( IFCanPf.dll )] public static extern uint CanSetProfile( ref int Number, string Name, uint Id, uint Itemcount, ref CAN_PROFILE_DATA Item ); [DllImport( IFCanPf.dll )] public static extern uint CanSetProfile( ref int Number, string Name, uint Id, uint Itemcount, CAN_PROFILE_DATA[] Item ); Visual Basic.NET(x86 x64 共用 ) Declare function CanSetProfile Lib "IFCanPf.DLL" ( _ ByRef Number As Integer, _ ByVal Name As String, _ ByVal Id As Integer, _ ByVal Itemcount As Integer, _ ByRef Item As CAN_PROFILE_DATA, _ ) As Integer Declare function CanSetProfile Lib "IFCanPf.DLL" ( _ ByRef Number As Integer, _ ByVal Name As String, _ ByVal Id As Integer, _ ByVal Itemcount As Integer, _ ByVal Item() As CAN_PROFILE_DATA, _ ) As Integer パラメータ pnnumber プロファイル番号を指定します 最大 個まで指定できます CAN_ANY_NUMBER を指定した場合 自動的に番号を割り当てます 関数実行後 実際に割り当てられた番号が本パラメータに返されます szname プロファイル名を指定します 1~64 文字まで指定できます 295

296 ulid プロファイルを適用するメッセージの ID を指定します nitemcount プロファイルの要素数を指定します 最大 64 個まで指定できます pitem プロファイル情報が格納されている構造体へのポインタを指定します 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 int number; CAN_PROFILE_DATA item[2]; int nret; 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; nret = CanSetProfile(&number, "msg type1", 0x101, 2, &item[0]); 296

297 Visual Basic Dim number As Long Dim item(0 to 1) As CAN_PROFILE_DATA Dim nret As Long 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 nret = CanSetProfile(number, "msg type1", &H101, 2, item(0)) Delphi var number Integer; item array[0..1] of CAN_PROFILE_DATA; nret Integer; 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; nret = CanSetProfile(number, msg type1, $101, 2, item[0]); 297

298 Visual C#.NET int number; IFCCANPF.CAN_PROFILE_DATA[] item = new IFCCANPF.CAN_PROFILE_DATA[2]; uint Ret; item[0].startbit = 0; item[0].bitcount = 32; item[0].byteorder = IFCCANPF.CAN_BYTEORDER_INTEL; item[0].datatype = IFCCANPF.CAN_DATATYPE_INTEGER32; item[1].startbit = 32; item[1].bitcount = 32; item[1].byteorder = IFCCANPF.CAN_BYTEORDER_INTEL; item[1].datatype = IFCCANPF.CAN_DATATYPE_FLOAT; number = IFCCANPF.CAN_ANY_NUMBER; Ret = IFCCANPF.CanSetProfile(ref number, "msg type1", 0x101, 2, item); Visual Basic.NET Dim number As Integer Dim item(1) As IFCCANPF.CAN_PROFILE_DATA Dim Ret As Integer item(0).startbit = 0 item(0).bitcount = 32 item(0).byteorder = IFCCANPF.CAN_BYTEORDER_INTEL item(0).datatype = IFCCANPF.CAN_DATATYPE_INTEGER32 item(1).startbit = 32 item(1).bitcount = 32 item(1).byteorder = IFCCANPF.CAN_BYTEORDER_INTEL item(1).datatype = IFCCANPF.CAN_DATATYPE_FLOAT number = IFCCANPF.CAN_ANY_NUMBER Ret = IFCCANPF.CanSetProfile(number, "msg type1", &H101, 2, item) 298

299 Visual C++ CLR プロジェクト int number; array<ifccanpfcan_profile_data>^ item = gcnew array<ifccanpfcan_profile_data>(2); unsigned int Ret; item[0].startbit = 0; item[0].bitcount = 32; item[0].byteorder = IFCCANPFCAN_BYTEORDER_INTEL; item[0].datatype = IFCCANPFCAN_DATATYPE_INTEGER32; item[1].startbit = 32; item[1].bitcount = 32; item[1].byteorder = IFCCANPFCAN_BYTEORDER_INTEL; item[1].datatype = IFCCANPFCAN_DATATYPE_FLOAT; number = IFCCANPFCAN_ANY_NUMBER; Ret = IFCCANPFCanSetProfile(number, "msg type1", 0x101, 2, item); プロファイル情報を登録します 299

300 7. CanGetProfile 機能 プロファイル情報を取得します 書式 C 言語 int CanGetProfile( int char* unsigned long* int* PCAN_PROFILE_DATA ); nnumber, szname, pulid, pnitemcount, pitem Visual Basic Declare function CanGetProfile Lib "IFCanPf.DLL" ( _ ByVal nnumber As Long, _ ByVal szname As String, _ ByRef pulid As Long, _ ByRef pnitemcount As Long, _ ByRef pitem As CAN_PROFILE_DATA _ ) As Long Delphi function CanGetProfile( nnumber Integer; szname pointer; var pulid ULONG; var pnitemcount Integer; var pitem CAN_PROFILE_DATA ) Integer; stdcall; external IFCanPf.DLL ; 300

301 Visual C#.NET(x86 x64 共用 ) [DllImport( IFCanPf.dll )] public static extern uint CanGetProfile( int Number, StringBuilder Name, out uint Id, out uint Itemcount, out CAN_PROFILE_DATA Item ); [DllImport( IFCanPf.dll )] public static extern uint CanGetProfile( int Number, StringBuilder Name, out uint Id, out uint Itemcount, [Out] CAN_PROFILE_DATA[] Item ); Visual Basic.NET(x86 x64 共用 ) Declare function CanGetProfile Lib "IFCanPf.DLL" ( _ ByVal Number As Integer, _ ByVal Name As StringBuilder, _ ByRef Id As Integer, _ ByRef Itemcount As Integer, _ ByRef Item As CAN_PROFILE_DATA _ ) As Integer Declare function CanGetProfile Lib "IFCanPf.DLL" ( _ ByVal Number As Integer, _ ByVal Name As StringBuilder, _ ByRef Id As Integer, _ ByRef Itemcount As Integer, _ <Out()> ByVal Item() As CAN_PROFILE_DATA _ ) As Integer パラメータ nnumber プロファイル番号を指定します szname プロファイル名を格納する変数へのポインタを指定します 最大で 64 文字のプロファイル名が返ってきます (Max65byte) バッファのサイズに注意してください 301

302 pulid プロファイルを適用するメッセージの ID を格納する変数へのポインタを指定します pnitemcount プロファイルの要素数を格納する変数へのポインタを指定します pitem プロファイル情報を格納する構造体へのポインタを指定します 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 int itemcount; char name[65]; unsigned long id; CAN_PROFILE_DATA item[64]; int Ret; Ret = CanGetProfile(1, name, &id, &itemcount, &item[0]); Visual Basic Dim itemcount As Long Dim name As String Dim id As Long Dim item(0 to 63) As CAN_PROFILE_DATA Dim nret As Long nret = CanGetProfile(1, name, id, itemcount, item(0)) Delphi var itemcount Integer; name array[0..64] of Char; id ULONG; item array[0..63] of CAN_PROFILE_DATA nret Integer; nret = id, itemcount, item[0]); 302

303 Visual C#.NET int itemcount; System.Text.StringBuilder name = new System.Text.StringBuilder(65); uint id; IFCCANPF.CAN_PROFILE_DATA[] item = new IFCCANPF.CAN_PROFILE_DATA[64]; int Ret; Ret = IFCCANPF.CanGetProfile(1, name, out id, out itemcount, item); Visual Basic.NET Dim itemcount As Integer Dim name As System.Text.StringBuilder = New System.Text.StringBuilder(65) Dim id As Integer Dim item(63) As IFCCANPF.CAN_PROFILE_DATA Dim Ret As Integer Ret = IFCCANPF.CanGetProfile(1, name, id, itemcount, item) Visual C++ CLR プロジェクト int itemcount; SystemTextStringBuilder^ name = gcnew SystemTextStringBuilder(65); unsigned int id; array<ifccanpfcan_profile_data>^ item = gcnew array<ifccanpfcan_profile_data>(64); int Ret; Ret = IFCCANPF.CanGetProfile(1, name, id, itemcount, item); プロファイル情報を取得します 303

304 8. CanDeleteProfile 機能 プロファイル情報を削除します 書式 C 言語 int CanDeleteProfile( int nnumber ); Visual Basic Declare function CanDeleteProfile Lib "IFCanPf.DLL" ( _ ByVal nnumber As Long _ ) As Long Delphi function CanDeleteProfile( nnumber Integer ) Integer; stdcall; external IFCanPf.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCanPf.dll )] public static extern uint CanDeleteProfile( int Number ); Visual Basic.NET(x86 x64 共用 ) Declare function CanDeleteProfile Lib "IFCanPf.DLL" ( _ ByVal Number As Integer _ パラメータ nnumber プロファイル番号を指定します 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 使用例 C 言語 int Ret; Ret = CanDeleteProfile(1); 304

305 Visual Basic Dim Ret As Long Ret = CanDeleteProfile(1) Delphi var Ret Integer; Ret = CanDeleteProfile(1); Visual C#.NET uint Ret; Ret = IFCCANPF.CanDeleteProfile(1); Visual Basic.NET Dim Ret As Integer Ret = IFCCANPF.CanDeleteProfile(1) Visual C++ CLR プロジェクト unsigned int Ret; Ret = IFCCANPFCanDeleteProfile(1); プロファイル番号 1 のプロファイル情報を削除します 305

306 9. CanSaveProfile 機能 プロファイル情報をファイルに保存します 書式 C 言語 int CanSaveProfile( char* ); szfilename Visual Basic Declare function CanSaveProfile Lib "IFCanPf.DLL" ( _ ByVal szfilename As String _ ) As Long Delphi function CanSaveProfile( szfilename String ) Integer; stdcall; external IFCanPf.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCanPf.dll )] public static extern uint CanSaveProfile( string Filename ); Visual Basic.NET(x86 x64 共用 ) Declare function CanSaveProfile Lib "IFCanPf.DLL" ( _ ByVal Filename As String _ ) As Integer パラメータ szfilename プロファイル情報を保存するファイル名を指定します 拡張子も含めた文字列を指定してください 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 306

307 使用例 C 言語 int Ret; Ret = CanSaveProfile( T1GROUP.CFG ); Visual Basic Dim Ret As Long Ret = CanSaveProfile( T1GROUP.CFG ) Delphi var Ret Integer; Ret = CanSaveProfile( T1GROUP.CFG ); Visual C#.NET uint Ret; Ret = IFCCANPF.CanSaveProfile( T1GROUP.CFG ); Visual Basic.NET Dim Ret As Integer Ret = IFCCANPF.CanSaveProfile( T1GROUP.CFG ) Visual C++ CLR プロジェクト unsigned int Ret; Ret = IFCCANPFCanSaveProfile( T1GROUP.CFG ); プロファイル情報を T1GROUP.CFG ファイルに保存します 307

308 10. CanLoadProfile 機能 ファイルからプロファイル情報を取得します 書式 C 言語 int CanLoadProfile( char* szfilename ); Visual Basic Declare function CanLoadProfile Lib "IFCanPf.DLL" ( _ ByVal szfilename As String _ ) As Long Delphi function CanLoadProfile( szfilename String ) Integer; stdcall; external IFCanPf.DLL ; Visual C#.NET(x86 x64 共用 ) [DllImport( IFCanPf.dll )] public static extern uint CanLoadProfile( string Filename ); Visual Basic.NET(x86 x64 共用 ) Declare function CanLoadProfile Lib "IFCanPf.DLL" ( _ ByVal Filename As String _ ) As Integer パラメータ szfilename プロファイル情報が格納されているファイル名を指定します 拡張子も含めた文字列を指定してください 相対パス 絶対パス いずれも使用できます 戻り値 正常終了した場合は IFCAN_ERROR_SUCCESS が返されます IFCAN_ERROR_SUCCESS 以外の値が返された場合については 4.4 戻り値一覧 をご参照ください 備考 本関数呼び出し前に設定されていたプロファイルは全て削除されます 308

309 使用例 C 言語 int Ret; Ret = CanLoadProfile( T1GROUP.CFG ); Visual Basic Dim Ret As Long Ret = CanLoadProfile( T1GROUP.CFG ) Delphi var Ret Integer; Ret = CanLoadProfile( T1GROUP.CFG ); Visual C#.NET uint Ret; Ret = IFCCANPF.CanLoadProfile( T1GROUP.CFG ); Visual Basic.NET Dim Ret As Integer Ret = IFCCANPF.CanLoadProfile( T1GROUP.CFG ) Visual C++ CLR プロジェクト unsigned int Ret; Ret = IFCCANPFCanLoadProfile( T1GROUP.CFG ); T1GROUP.CFG ファイルに保存されたプロファイル情報をメモリにロードします 309

310 4.3 構造体説明 CAN_PORT_CONFIG 構造体 CanSetConfig 関数 CanGetConfig 関数で指定する通信条件設定構造体です C 言語 typedef struct { ULONG ullinemode; ULONG ulfiltermode; ULONG ultxbsize; ULONG ulrxbsize; ULONG ulerbsize; ULONG ulerrorlimit; ULONG ulbaudrate; } CAN_PORT_CONFIG, *PCAN_PORT_CONFIG; Visual C#.NET(x86 x64 共用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_PORT_CONFIG { public uint LineMode; public uint FilterMode; public uint TXBSize; public uint RXBSize; public uint ERBSize; public uint ErrorLimit; public uint BaudRate; } Visual Basic.NET(x86 x64 共用 ) <StructLayout(LayoutKind.Sequential)> Structure CAN_PORT_CONFIG Dim LineMode As Integer Dim FilterMode As Integer Dim TXBSize As Integer Dim RXBSize As Integer Dim ERBSize As Integer Dim ErrorLimit As Integer Dim BaudRate As Integer End Structure 310

311 メンバ ullinemode ulfiltermode 説明通信のモードを選択します 高機能版 CAN 製品では CAN_FIFO_SEND_MODE を OR で指定することができます 識別子値内容 CAN_NORMAL_MODE 0 通常の通信モードメッセージを受信したら ACK を返します ( デフォルト値 ) CAN_LISTEN_ONLY_MODE 1 モニタモードメッセージを受信しても ACK を返しません CAN_FIFO_SEND_MODE h FIFO 送信モード送信 FIFO を使った送信を行います 送信 FIFO トリガを使用してパフォーマンスを上げることが出来ますが 送信完了メッセージは挿入されません アクセプタンスフィルタのモードを選択します 識別子 値 内容 CAN_DUAL_FILTER 0 2 つのフィルタを設定できます (1 つのフィルタあたり 16 ビットの定義 ) CAN_SINGLE_FILTER 1 1 つのフィルタを設定できます ( デフォルト値 ) (32 ビットの定義が可能 ) CAN FD 版 CAN 製品の場合は CAN_DUAL_FILTER 選択時にも 1 つのフィルタあた り 32 ビットの定義が行えます 2 つのフィルタを設定するには CanSetAcceptanceFilterFD 関数を使用してください ultxbsize 1 ulrxbsize 1 ulerbsize 1 送信バッファのサイズをメッセージ単位で指定します 1 増加する毎に使用するメモリが 24 バイトずつ増加します バスマスタ版 CAN FD 版 CAN 製品は送信バッファにデータが格納されている場合 送信バッファサイズの変更は行えません 送信バッファ内に格納されているメッセージ数よりも 小さいサイズに設定しようとした場合 入りきらなかったデータは破棄されます 設定値 64~ ( デフォルト値 64) 受信バッファのサイズをメッセージ単位で指定します 1 増加する毎に使用するメモリが 24 バイトずつ増加します 受信バッファ内に格納されているメッセージ数よりも 小さいサイズに設定しようとした場合 入りきらなかったデータは破棄されます 設定値 64~ ( デフォルト値 64) エラーキャプチャに使用するバッファのサイズを件数単位で指定します 1 増加する毎に使用するメモリが 16 バイトずつ増加します エラーバッファ内に格納されているエラー数よりも 小さいサイズに設定しようとした場合 入りきらなかったデータは破棄されます 設定値 64~ ( デフォルト値 64) 311

312 ulerrorlimit 1 ulbaudrate 送受信の際に発生したエラーが この件数を超えるとイベントが発生します CAN のプロトコルでは 127 を越えるとエラーパッシブ状態となり 255 を越える とバスオフ状態へ遷移します 設定値 0~255 ( デフォルト値 96) CAN FD 版 CAN 製品では 0~15 の範囲で設定できます 詳細は CAN_PORT_CONFIG_FD 構造体 を参照してください 通信速度を指定します 2 識別子 値 内容 CAN_BAUDRATE_33_3k h 通信速度を 33.3Kbps に設定します CAN_BAUDRATE_50k 00001D23h 通信速度を 50Kbps に設定します CAN_BAUDRATE_83_3k 00000F24h 通信速度を 83.3Kbps に設定します CAN_BAUDRATE_95_2k 00000D24h 通信速度を 95.2Kbps に設定します CAN_BAUDRATE_100k h 通信速度を 100Kbps に設定します CAN_BAUDRATE_125k Ah 通信速度を 125Kbps に設定します ( デフォルト値 ) CAN_BAUDRATE_250k Ah 通信速度を 250Kbps に設定します CAN_BAUDRATE_500k h 通信速度を 500Kbps に設定します CAN_BAUDRATE_1M h 通信速度を 1Mbps に設定します CAN_BAUDRATE_BTR h SJA1000 の BTR レジスタを直接制御します CAN 通信製品では 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 TSEG

313 CAN_BAUDRATE_BTR でのボーレート設定方法 下記の計算式に各ビットの値をあてはめてボーレートを設定してください BRP = BPR BRP BRP BRP BRP BRP.0 TSEG1 = TSEG TSEG TSEG TSEG1.0 TSEG2 = TSEG TSEG TSEG2.0 f SCL = ( BRP + 1) 2 ボーレート = f SCL 1 +( TSEG1 + 1) +( TSEG2 + 1) サンプルポイントを後にずらすためには TSEG2 の値をなるべく小さくするように設定してください その他設定値については CAN コントローラ (SJA1000) のデータシートを参照ください 例 ボーレートを 500Kbps に設定します (BPR=1,TSEG1=7,TSEG2=2) BaudRate = CAN_BAUDRATE_BTR + 100h + 20h + 07h 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 313

314 下記の計算式に各ビットの値をあてはめてボーレートを設定してください BRP =BPR BRP BRP BRP BRP BRP.0 TSEQ1 = TSEQ TSEQ TSEQ TSEQ1.0 TSEQ2 = TSEQ TSEQ TSEQ TSEQ f SCL = + 6 ( BRP 1) ボーレート = f SCL 1+ ( TSEQ1 + 1) +( TSEQ2 + 1) サンプルポイントを後にずらすためには TSEQ2 の値をなるべく小さくするように設定してください その他設定値については CAN コントローラ (Intel Platform Controller Hub EG20T) のデータシートを参照ください 例 ボーレートを 500Kbps に設定します (BPR=4,TSEG1=15,TSEG2=2) BaudRate = CAN_BAUDRATE_BTR + 04h + 0F00h h 1 Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では設定することができません 2 詳しい説明については弊社ホームページのコラム集を参照して下さい <http// 314

315 4.3.2 CAN_PORT_CONFIG_FD 構造体 CanSetConfigFD 関数 CanGetConfigFD 関数で指定する通信条件設定構造体です C 言語 typedef struct { ULONG ullinemode; ULONG ulfiltermode; ULONG ultxbsize; ULONG ultxbsizefd; ULONG ulrxbsize; ULONG ulrxbsizefd; ULONG ulerbsize; ULONG ulerrorlimit; ULONG ulbaudratenominal; ULONG ulbaudratedata; ULONG ultdc; } CAN_PORT_CONFIG, *PCAN_PORT_CONFIG; Visual C#.NET(x86 x64 共用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_PORT_CONFIG { public uint LineMode; public uint FilterMode; public uint TXBSize; public uint TXBSizeFD; public uint RXBSize; public uint RXBSizeFD; public uint ERBSize; public uint ErrorLimit; public uint BaudRateNominal; public uint BaudRateData; public uint TDC; } 315

316 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 TXBSizeFD As Integer Dim RXBSize As Integer Dim RXBSizeFD As Integer Dim ERBSize As Integer Dim ErrorLimit As Integer Dim BaudRateNominal As Integer Dim BaudRateData As Integer Dim TDC As Integer End Structure メンバ ullinemode ulfiltermode ultxbsize 説明通信のモードを選択します 識別子値内容 CAN_NORMAL_MODE 0 通常の通信モードメッセージを受信したら ACK を返します ( デフォルト値 ) CAN_LISTEN_ONLY_MODE 1 モニタモードメッセージを受信しても ACK を返しません アクセプタンスフィルタのモードを選択します 識別子 値 内容 CAN_DUAL_FILTER 0 2 つのフィルタを設定できます (1 つのフィルタあたり 32 ビットの定義 ) CAN_SINGLE_FILTER 1 1 つのフィルタを設定できます ( デフォルト値 ) (32 ビットの定義が可能 ) CAN メッセージ送信バッファのサイズをメッセージ単位で指定します 1 増加する毎に使用するメモリが 24 バイトずつ増加します 送信バッファにデータが格納されている場合 送信バッファサイズの変更は行えません 送信バッファ内に格納されているメッセージ数よりも 小さいサイズに設定しようとした場合 入りきらなかったデータは破棄されます 設定値 64~ ( デフォルト値 64) 316

317 ultxbsizefd CAN FD メッセージ送信バッファのサイズをメッセージ単位で指定します 1 増加する毎に使用するメモリが 80 バイトずつ増加します 送信バッファにデータが格納されている場合 送信バッファサイズの変更は行えません 送信バッファ内に格納されているメッセージ数よりも 小さいサイズに設定しようとした場合 入りきらなかったデータは破棄されます 設定値 64~ ( デフォルト値 64) ulrxbsize CAN メッセージ受信バッファのサイズをメッセージ単位で指定します 1 増加する毎に使用するメモリが 24 バイトずつ増加します 受信バッファ内に格納されているメッセージ数よりも 小さいサイズに設定しようとした場合 入りきらなかったデータは破棄されます 設定値 64~ ( デフォルト値 64) ulrxbsizefd CAN FD メッセージ受信バッファのサイズをメッセージ単位で指定します 1 増加する毎に使用するメモリが 80 バイトずつ増加します 受信バッファ内に格納されているメッセージ数よりも 小さいサイズに設定しようとした場合 入りきらなかったデータは破棄されます 設定値 64~ ( デフォルト値 64) ulerbsize エラーキャプチャに使用するバッファのサイズを件数単位で指定します 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 件のエラーが発生した場合にイベントが発生します 317

318 ulbaudrateno minal 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( Ah) を設定した場合 取得される値は CAN_BAUDRATE_FD_125k(7E1F1F01h) となります 識別子 値 内容 CAN_BAUDRATE_83_3k 00000F24h 通信速度を 83.3Kbps に設定します CAN_BAUDRATE_95_2k 00000D24h 通信速度を 95.2Kbps に設定します CAN_BAUDRATE_100k h 通信速度を 100Kbps に設定します CAN_BAUDRATE_125k Ah 通信速度を 125Kbps に設定します ( デフォルト値 ) CAN_BAUDRATE_250k Ah 通信速度を 250Kbps に設定します CAN_BAUDRATE_500k h 通信速度を 500Kbps に設定します CAN_BAUDRATE_1M h 通信速度を 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 318

319 ulbaudrateda ta CAN FD 通信時におけるデータフェーズの通信速度を設定します CAN 通信時は 無効です 識別子 値 内容 CAN_BAUDRATE_FD_1M 1E070700h 通信速度を 1Mbps に設定します ( デフォルト値 ) CAN_BAUDRATE_FD_2M 0E030300h 通信速度を 2Mbps に設定します CAN_BAUDRATE_FD_5M h 通信速度を 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 PRESC 319

320 ボーレート設定方法 ボーレートを直接指定する場合は下記の計算式に各ビットの値をあてはめてボーレートを設定してください ( プリスケーラ =2の例 ) クロック 1TQ t seg1 t seg2 サンプルポイント ボーレート = クロック / (t seg1 + tseg2) / プリスケーラ t seg1, t seg2, プリスケーラと各ビット (SEG1, SEG2, PRESC) の対応は以下です t seg1 = (SEG1 + 2) t seg2 = (SEG2 + 1) プリスケーラ = PRESC + 1 また 同期ジャンプ幅 t sjw は以下の様に設定します t sjw = (SJW + 1) ボーレート = クロック / ((SEG1+2) + (SEG2+1)) / (PRESC + 1) 例 ボーレートを 500Kbpsに設定します ( プリスケーラ =2, t seg1=32, tseg2=8) 設定値各ビットの値 t seg1 = 32 SEG1 = 30 t seg2 = 8 SEG2 = 7 プリスケーラ = 2 PRESEC = 1 t sjw = 8 SJW = 7 BaudRate = 1E000000h h + 700h + 01h コントローラに入力されるクロックは 40MHz です サンプルポイントを後にずらすためには t seg2 の値をなるべく小さくするように設定してください 320

321 ultdc 送信遅延補償を設定します 設定値 0( 無効 )~ 127 ( デフォルト値 32) 上記の設定範囲内で任意に指定を行うか ulbaudratedata の設定にあわせて以 下から選択してください 識別子 値 内容 CAN_TDC_1M 32 セカンダリサンプルポイントのオフセットを 32 に設定します CAN_TDC_2M 16 セカンダリサンプルポイントのオフセットを 16 に設定します CAN_TDC_5M 6 セカンダリサンプルポイントのオフセットを 6 に設定します 321

322 4.3.3 CAN_PORT_STATUS 構造体 CanGetStatus 関数で指定するステータス取得用構造体です C 言語 typedef struct { ULONG ulbusstatus; ULONG ultxbcount; ULONG ulrxbcount; ULONG ulerbcount; ULONG ultxerrcount; ULONG ulrxerrcount; } CAN_PORT_STATUS, *PCAN_PORT_STATUS; Visual C#.NET(x86 x64 共用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_PORT_STATUS { public uint BusStatus; public uint TXBCount; public uint RXBCount; public uint ERBCount; public uint TXERRCount; public uint RXERRCount; } Visual Basic.NET(x86 x64 共用 ) <StructLayout(LayoutKind.Sequential)> Structure CAN_PORT_STATUS Dim BusStatus As Integer Dim TXBCount As Integer Dim RXBCount As Integer Dim ERBCount As Integer Dim TXERRCount As Integer Dim RXERRCount As Integer End Structure メンバ ulbusstatus 説明 CAN バスの状態を表します 識別子 値 内容 CAN_BUS_OFF h バスオフ状態です CAN_BUS_PASSIVE h 送信か受信のエラーカウンタが 127 を越えました エラーパッシブ状態です CAN_BUS_ACTIVE h バスは正常に動作しています エラーアクティブ状態です 322

323 ultxbcount 2 ulrxbcount 2 ulerbcount 2 ultxerrcount ulrxerrcount 送信バッファに蓄えられている未送信 CAN メッセージの数を返します 送信完了メッセージはカウントされません 高機能版 複数周期送信版 CAN 製品で FIFO 送信モードに設定している場合の送信 FIFO 内のメッセージ数はカウントされません 0 ~ 最大値 ( ) 受信バッファに蓄えられている CAN メッセージの数を返します 0 ~ 最大値 ( ) エラーバッファに蓄えられているエラー情報の数を返します 0 ~ 最大値 ( ) 送信エラーカウンタの値を返します 0 ~ 255 受信エラーカウンタの値を返します 0 ~ 255 最大値は CanSetConfig 関数で設定した値です 2 Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では取得することができません 323

324 4.3.4 CAN_PORT_STATUS_FD 構造体 CanGetStatusFD 関数で指定するステータス取得用構造体です C 言語 typedef struct { ULONG ulbusstatus; ULONG ultxbcount; ULONG ultxbcountfd; ULONG ulrxbcount; ULONG ulrxbcount_fd; ULONG ulerbcount; ULONG ultxerrcount; ULONG ulrxerrcount; } CAN_PORT_STATUS_FD, *PCAN_PORT_STATUS_FD; Visual C#.NET(x86 x64 共用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_PORT_STATUS_FD { public uint BusStatus; public uint TXBCount; public uint TXBCountFD; public uint RXBCount; public uint RXBCountFD; public uint ERBCount; public uint TXERRCount; public uint RXERRCount; } Visual Basic.NET(x86 x64 共用 ) <StructLayout(LayoutKind.Sequential)> Structure CAN_PORT_STATUS_FD Dim BusStatus As Integer Dim TXBCount As Integer Dim TXBCountFD As Integer Dim RXBCount As Integer Dim RXBCountFD As Integer Dim ERBCount As Integer Dim TXERRCount As Integer Dim RXERRCount As Integer End Structure 324

325 メンバ ulbusstatus ultxbcount ultxbcountfd ulrxbcount ulrxbcountfd ulerbcount ultxerrcount ulrxerrcount 説明 CAN バスの状態を表します 識別子 値 内容 CAN_BUS_OFF h バスオフ状態です CAN_BUS_PASSIVE h 送信か受信のエラーカウンタが 127 を越えました エラーパッシブ状態です CAN_BUS_ACTIVE h バスは正常に動作しています エラーアクティブ状態です 送信バッファに蓄えられている未送信 CAN メッセージの数を返します 送信完了メッセージはカウントされません 0 ~ 最大値 ( ) 送信バッファに蓄えられている未送信 CAN FD メッセージの数を返します 送信完了メッセージはカウントされません 0 ~ 最大値 ( ) 受信バッファに蓄えられている CAN メッセージの数を返します 0 ~ 最大値 ( ) 受信バッファに蓄えられている CAN FD メッセージの数を返します 0 ~ 最大値 ( ) エラーバッファに蓄えられているエラー情報の数を返します 0 ~ 最大値 ( ) 送信エラーカウンタの値を返します 0 ~ 255 受信エラーカウンタの値を返します 0 ~ 255 最大値は CanSetConfig CanSetConfigFD 関数で設定した値です 325

326 4.3.5 CAN_MESSAGE 構造体 CanSendMessage 関数 CanReceiveMessage 関数で指定するメッセージ用構造体です C 言語 typedef struct { ULONG ullength; ULONG ulflag; ULONG ulid; BYTE bdata[8]; ULONG ultime; } CAN_MESSAGE, *PCAN_MESSAGE; Visual C#.NET(x86 x64 共用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_MESSAGE public uint Length; public uint Flag; public uint ID; [MarshalAs(UnmanagedType.ByValArray, SizeConst=8)] public byte[] Data; public uint Time; public void InitializeArray() { Data = new byte[8]; } } Visual Basic.NET(x86 x64 共用 ) <StructLayout(LayoutKind.Sequential)> Structure CAN_MESSAGE Dim Length As Integer Dim Flag As Integer Dim ID As Integer <MarshalAs(UnmanagedType.ByValArray, SizeConst=8)> _ Dim Data() As Byte Dim Time As Integer Public Sub InitializeArray() ReDim Data(7) End Sub } CAN_MESSAGE, *PCAN_MESSAGE; 326

327 メンバ説明 ullength 送信メッセージの長さを指定します ( バイト ) または 受信したメッセージの長さを表しています ID フラグを含まないデータ本体の長さになります(0~8) ulflag ulid 送信するメッセージに特殊なフラグを設定します または 受信したメッセージのフラグを表します 識別子 値 内容 CAN_MSG_RTR 1 メッセージはリモートフレームです 送信メッセージに付加する ID または受信したメッセージの ID を表します 11 ビットと 29 ビットの ID の区別は以下のフラグを OR することで行うことができます ( 指定しない場合は 11 ビット ID として上位を無視して下位 11 ビットのみが ID として設定されます ) 識別子値内容 CAN_EXT_FRAME h 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 CAN FD 版 CAN 製品では bit0~bit10 は 順に ID.0~ID.10 になります 327

328 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[] ultime 3 送信メッセージを格納します または 受信したメッセージの本体を表します メッセージの先頭から bdata[0], bdata[1],,,,,bdata[7] となっています 送信時 ullength に設定した値よりも長いデータは無視されます 例えば ullength に 3 を設定した場合 bdata[0],bdata[1],bdata[2] はドライバに渡され蓄えられますが bdata[3] 以降のデータは無視されます 同様に受信時も ullength 以上のデータは無効データです 例えば ullength に 2 が返ってきた場合 bdata[0],bdata[1] は受信したメッセージの内容ですが bdata[2] 以降は無効なデータです 無視してください メッセージ受信 および送信完了した時刻が格納されます ( 単位 μs) 実際の時刻ではなく CanOpenPort 関数の実行後からの経過時間になります エラーイベントにも同じ時刻が記録されますので 受信メッセージ エラー発生 送信完了の時間的関係を結びつけることができます CanClearBuffer 関数で CAN_CLEAR_TIMERCOUNTER を指定することで 内部の経過時間を 0 クリアすることが出来ます 単位は μs ですが 実際に返される値はスタンダード版では 1000 単位の値 (ms) が返されます 高機能版 バスマスタ版 CAN FD 版 CAN 製品では 10 単位の値が返されます また この時間は スタンダード版 CAN 製品では CAN コントローラから割り込みが発生し デバイスドライバの割り込み処理内で CAN メッセージを取り出した時の時間ですので 正確性には欠けます また 連続で CAN メッセージを受信した場合 2 つのメッセージの受信時刻が同じになることがあります また 高機能版 バスマスタ版 CAN FD 版 CAN 製品では ディレイ時間 周期送信の周期もこのメンバで指定します 3 Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では使用できません 328

329 4.3.6 CAN_MESSAGE_FD 構造体 CanSendMessageFD 関数 CanReceiveMessageFD 関数で指定するメッセージ用構造体です C 言語 typedef struct { ULONG ullength; ULONG ulflag; ULONG ulid; BYTE bdata[64]; ULONG ultime; } CAN_MESSAGE_FD, *PCAN_MESSAGE_FD; Visual C#.NET(x86 x64 共用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_MESSAGE public uint Length; public uint Flag; public uint ID; [MarshalAs(UnmanagedType.ByValArray, SizeConst=64)] public byte[] Data; public uint Time; public void InitializeArray() { Data = new byte[64]; } } Visual Basic.NET(x86 x64 共用 ) <StructLayout(LayoutKind.Sequential)> Structure CAN_MESSAGE Dim Length As Integer Dim Flag As Integer Dim ID As Integer <MarshalAs(UnmanagedType.ByValArray, SizeConst=64)> _ Dim Data() As Byte Dim Time As Integer Public Sub InitializeArray() ReDim Data(63) End Sub } CAN_MESSAGE, *PCAN_MESSAGE; 329

330 メンバ ullength 説明送信メッセージの長さを指定します ( バイト ) または 受信したメッセージの長さを表しています ID フラグを含まないデータ本体の長さになります 識別子 値 内容 - 0~8 0~8 バイト CAN_MSG_LEN_ バイト CAN_MSG_LEN_ バイト CAN_MSG_LEN_ バイト CAN_MSG_LEN_ バイト CAN_MSG_LEN_ バイト CAN_MSG_LEN_ バイト CAN_MSG_LEN_ バイト ulflag ulid 予約です 送信時は 3 を指定し 受信時の値は無視してください 送信メッセージに付加する ID または受信したメッセージの ID を表します 11 ビットと 29 ビットの ID の区別は以下のフラグを OR することで行うことができます ( 指定しない場合は 11 ビット ID として上位を無視して下位 11 ビットのみが ID として設定されます ) 識別子値内容 CAN_EXT_FRAME h 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 ビット 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 330

331 bdata[] ultime 送信メッセージを格納します または 受信したメッセージの本体を表します メッセージの先頭から 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] 以降は無効なデータです 無視してください メッセージ受信 および送信完了した時刻が格納されます ( 単位 μs) 実際の時刻ではなく CanOpenPort 関数の実行後からの経過時間になります エラーイベントにも同じ時刻が記録されますので 受信メッセージ エラー発生 送信完了の時間的関係を結びつけることができます CanClearBuffer 関数で CAN_CLEAR_TIMERCOUNTER を指定することで 内部の経過時間を 0 クリアすることが出来ます 単位は μs です 10 単位の値が返されます ディレイ時間 周期送信の周期もこのメンバで指定します 331

332 4.3.7 CAN_ERROR 構造体 CanGetErrorEvent 関数で使用する エラーイベント取得用構造体です Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では使用しません C 言語 typedef struct { ULONG ulinterruptregister; ULONG ulerrorcoderegister; ULONG ularbitrationlostregister; ULONG ultime; } CAN_ERROR, *PCAN_ERROR; Visual C#.NET(x86 x64 共用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_ERROR { public uint InterruptRegister; public uint ErrorCodeRegister; public uint ArbitrationLostRegister; public uint Time; } Visual Basic.NET(x86 x64 共用 ) <StructLayout(LayoutKind.Sequential)> Structure CAN_ERROR Dim InterruptRegister As Integer Dim ErrorCodeRegister As Integer Dim ArbitrationLostRegister As Integer Dim Time As Integer End Structure 332

333 メンバ ulinterruptre gister 説明 エラー割り込み発生時の発生要因が格納されています 複数の要因が同時に成立している場合もあります CAN_DETECT_BUS_ERROR が有効な場合 ulerrorcoderegister に詳細なエラー要因 が格納されています 識別子 値 内容 CAN_DETECT_BUS_ERROR h CAN バス上のエラーを検出しました 詳細は ulerrorcoderegister でご確認ください CAN_DETECT_ARBITRATION_LOST h CAN バス上でアービトレーションロストを検出しました 詳細は ularbitrationlostregister でご確認ください CAN_IS_ERROR_PASSIVE h エラーパッシブ状態となりました ( 送信か受信のエラーカウンタが 127 を越えました ) CAN_DETECT_OVERRUN h オーバーランエラーが発生し 受信メッセージが失われました CAN_IS_ERROR_WARNING h 送信か受信のエラーカウンタが CanSetConfig CanSetConfigFD 関 数で設定したリミット値を越えま した 333

334 ulerrorcodere gister CAN バス上のエラーが発生した場合の詳細な内容が格納されています ulinterruptregister の CAN_DETECT_BUS_ERROR が有効でない場合は 0 が返されます (CAN 通信製品では 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 エラーの発生箇所 SOF( スタートオブフレーム ) ID.28~ID.21 の間 ID.20~ID.18 の間 SRTR( 標準フォーマット時は RTR) IDE ID.17~ID.13 の間 ID.12~ID.5 の間 ID.4~ID.0 の間 RTR R1( 予約ビット ) R0( 予約ビット ) DLC( データ長コード ) データフィールド CRC シーケンス CRC デリミタ ACK スロット ACK デリミタ EOF( エンドオブフレーム ) インターミッション アクティブエラーフラグ パッシブエラーフラグ 重ね合わせエラーフラグ エラーデリミタ オーバーロードフラグ 334

335 CAN FD 版 CAN 製品ではビット割り当てが異なります 以下を参照してください bit31~8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 予約 ERRC2 ERRC1 ERRC0 予約 予約 予約 予約 予約 各ビットの意味 ERRC2 ERRC1 ERRC エラー無し ビットエラー フォームエラー スタッフエラー ACK エラー CRC エラー その他のエラー 予約 エラーの種類 ularbitration LostRegister CAN バス上で 送信データの衝突が発生し その際の調停で負けた場合 どのビットで調停に負けたか ( アービトレーション ロスト ) を記録するレジスタです ulinterruptregister の CAN_DETECT_ARBITORATION_LOST が有効でない場合は 0 が返されます (CAN 通信製品では CAN コントローラ SJA1000 の ALC レジスタに相当します ) bit31~5 bit4 bit3 bit2 bit1 bit0 予約 BITNO4 BITNO3 BITNO2 BITNO1 BITNO0 各ビットの意味は下記のようになります BITNO4 BITNO3 BITNO2 BITNO1 BITNO0 アービトレーションロスト位置 ID の 1 ビット目 ( 1) ID の 2 ビット目 ID の 3 ビット目 ID の 4 ビット目 ID の 5 ビット目 ID の 6 ビット目 ID の 7 ビット目 ID の 8 ビット目 ID の 9 ビット目 ID の 10 ビット目 ID の 11 ビット目 SRTR ビット ( 2)( 4) IDE ビット ID の 12 ビット目 ( 3) ID の 13 ビット目 ( 3) ID の 14 ビット目 ( 3) ID の 15 ビット目 ( 3) ID の 16 ビット目 ( 3) 335

336 ultime ID の 17 ビット目 ( 3) ID の 18 ビット目 ( 3) ID の 19 ビット目 ( 3) ID の 20 ビット目 ( 3) ID の 21 ビット目 ( 3) ID の 22 ビット目 ( 3) ID の 23 ビット目 ( 3) ID の 24 ビット目 ( 3) ID の 25 ビット目 ( 3) ID の 26 ビット目 ( 3) ID の 27 ビット目 ( 3) ID の 28 ビット目 ( 3) ID の 29 ビット目 ( 3) RTR ビット ( 3) ( 4) 1. ID の 1 ビット目は ID.28 2 ビット目は ID.27 となります 2. 標準フォーマットの場合 RTR ビット 3. 拡張フォーマットの場合のみ有効 4. CAN FD メッセージの場合は RRS ビット エラーが発生した時刻が格納されます ( 単位 μs) 実際の時刻ではなく CanOpen 関数の実行後からの経過時間になります 受信メッセージ 送信完了メッセージにも同じ時刻が記録されますので 受信メ ッセージ エラー発生 送信完了の時間的関係を結びつけることができます CanClearBuffer 関数で CAN_CLEAR_TIMERCOUNTER を指定することで 内部の経過 時間を 0 クリアすることが出来ます 単位はμs ですが 実際に返される値はスタンダード版では 1000 単位の値 (ms) が返されます 高機能版 バスマスタ版 CAN 製品では 10 単位の値が返されま す また この時間は スタンダード版 CAN 製品では CAN コントローラから割り込 みが発生し デバイスドライバの割り込み処理内で CAN メッセージを取り出した 時の時間ですので 正確性には欠けます また 連続で CAN メッセージを受信した場合 2 つのメッセージの受信時刻が同 じになることがあります 336

337 4.3.8 CAN_EVENT_REQ 構造体割り込みイベントを設定する構造体です イベント コールバック関数 ウィンドウメッセージの設定等に使用します Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では使用しません C 言語 (x86 用 ) typedef struct { HWND hwnd; HANDLE hinterruptevent; LPCANCALLBACK lpcallbackproc; UINT uinterruptmsg; DWORD dwuser; } CAN_EVENT_REQ, *PCAN_EVENT_REQ; C 言語 (x64 用 ) typedef struct { HWND hwnd; HANDLE hinterruptevent; LPCANCALLBACK lpcallbackproc; UINT uinterruptmsg; PVOID dwuser; } CAN_EVENT_REQ, *PCAN_EVENT_REQ; Visual C#.NET(x86 x64 共用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_EVENT_REQ { public IntPtr Wnd; public IntPtr InterruptEvent; public PCANCALLBACK CallBackProc; public uint InterruptMsg; public IntPtr User; } Visual C#.NET(x86 専用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_EVENT_REQ { public IntPtr Wnd; public uint InterruptEvent; public PCANCALLBACK CallBackProc; public uint InterruptMsg; public uint User; } 337

338 Visual Basic.NET(x86 x64 共用 ) <StructLayout(LayoutKind.Sequential)> Structure CAN_EVENT_REQ Dim Wnd As IntPtr Dim InterruptEvent As IntPtr Dim CallBackProc As PCANCALLBACK Dim InterruptMsg As Integer Dim User As IntPtr End Structure Visual Basic.NET(x86 専用 ) <StructLayout(LayoutKind.Sequential)> Structure CAN_EVENT_REQ Dim Wnd As IntPtr Dim InterruptEvent As Integer Dim CallBackProc As PCANCALLBACK Dim InterruptMsg As Integer Dim User As Integer End Structure メンバ hwnd hinterruptevent lpcallbackproc uinterruptmsg 説明メッセージ送出ウィンドウハンドル CanSetEventMask 関数にて設定した各種割り込み発生時に送出するメッセージのポスト先ウィンドウハンドルを指定します ( メッセージ送出時に メッセージハンドラの WPARAM には割り込み要因が格納されます LPARAM には dwuser の値が格納されます フォーマットはCanSetEventMask/CanGetEventMaskで使用する各要因と同じになります ) メッセージポストを行わない場合には C 言語では NULL,Visual Basic Delphi では 0 を指定してください イベント発生時にシグナル状態となるイベントオブジェクトのハンドルを指定してください イベントオブジェクトを使用しない場合には C 言語では NULL Visual Basic Delphi では 0 を指定してください 割り込み発生時に呼び出されるユーザ コールバック関数のポインタを指定してください コールバック関数を使用しない場合は C 言語では NULL Visual Basic Delphi では 0 を指定してください 割り込みメッセージ 割り込み発生時に送出するメッセージコードを指定します メッセージポストを行わない場合には C 言語では WM_NULL,Visual Basic では 0,Delphi では WM_NULL を指定してください dwuser コールバック関数 およびメッセージハンドラへ引き渡すユーザ データを指定してください 338

339 4.3.9 CAN_PORT_INFORMATION 構造体ポートのハードウェア情報が格納されている構造体です Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では使用しません C 言語 typedef struct { ULONG ulstructlength; ULONG ulvendorid; ULONG uldeviceid; ULONG ulsubsystemid; ULONG ulrevisionid; ULONG ulmodelnumber; ULONG ulboardid; ULONG ulchannelnumber; ULONG ulphysicallayer; } CAN_PORT_INFORMATION, *PCAN_PORT_INFORMATION; Visual C#.NET(x86 x64 共用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_PORT_INFORMATION { public uint StructLength; public uint VendorID; public uint DeviceID; public uint SubsystemID; public uint RevisionID; public uint ModelNumber; public uint BoardID; public uint ChannelNumber; public uint PhysicalLayer; } Visual Basic.NET(x86 x64 共用 ) <StructLayout(LayoutKind.Sequential)> Structure CAN_PORT_INFORMATION Dim StructLength As Integer Dim VendorID As Integer Dim DeviceID As Integer Dim SubsystemID As Integer Dim RevisionID As Integer Dim ModelNumber As Integer Dim BoardID As Integer Dim ChannelNumber As Integer Dim PhysicalLayer As Integer End Structure 339

340 メンバ ulstructlength ulvendorid uldeviceid ulsubsystemid ulrevisionid ulmodelnumber ulboardid ulchannelnumber ulphysicallayer 説明本構造体のサイズです CAN 製品のベンダ ID です CAN 製品のデバイス ID です CAN 製品のサブシステム ID です CAN 製品のリビジョン ID です CAN 製品の型式番号です CAN 製品の RSW1 設定値です チャンネル番号です 値は 1 始まりです ( チャンネル 1 の場合は 1 チャンネル 2 の場合は 2 となります ) CAN ポートのハードウェアインタフェースです 識別子 値 内容 CAN_PHYSICALLAYER_LOWSPEED 0 低速 CAN(ISO ) CAN_PHYSICALLAYER_HIGHSPEED 1 高速 CAN(ISO ) 340

341 各 CAN 製品のデバイス ID サブシステム ID は下記のとおりです 製品型式 デバイス ID サブシステム ID PCI LPC (12F3h) 2094h 3894h( タフコン ) PCI (12F3h) 208Bh LPC PCI (12F3h) 2082h LPC PCI (P) 4852(12F4h) 2094h LPC PCI (P) 4852(12F4h) 208Bh LPC PCI (P) 4852(12F4h) 2082h LPC PCI (P) 4853(12F5h) 20A8h PCI (P) 4853(12F5h) 2096h PCI (P) 4853(12F5h) 2084h PCI (12F3h) 208Ah 388Ah( タフコン ) PCI P 4854(12F6h) 2094h PCI P 4852(12F4h) 209Eh PCI PU 4852(12F4h) 209Eh 製品型式 デバイス ID サブシステム ID PEX (12F3h) 2C94h PEX (12F3h) 2C8Bh PEX (12F3h) 2C82h PEX (12F4h) 2C94h PEX (12F4h) 2C8Bh PEX (12F4h) 2C82h PEX-H485340(P) 4853(12F5h) 2CA8h PEX-H485322(P) 4853(12F5h) 2C96h PEX-H485304(P) 4853(12F5h) 2C84h PEX (12F6h) 2C94h PEX-H485220P 4852(12F4h) 2094h PEX-H485940P 4859(12FBh) 2CA8h 341

342 製品型式 デバイス ID サブシステム ID CPZ (P) 4853(12F5h) 24A8h CTP CPZ (P) 4853(12F5h) 2496h CTP CPZ (P) 4853(12F5h) 2484h CTP CPZ (P) 4852(12F4h) 2494h CTP (P) CPZ (P) 4852(12F4h) 248Bh CTP (P) CPZ (P) 4852(12F4h) 2482h CTP (P) CPZ P 4854(12F6h) 2494h 製品型式 デバイス ID サブシステム ID CBI-4851A 4851(12F3h) 0201h CBI-4851B CBI-4852A 4852(12F4h) 0201h CBI-4852B CBI WA 4851(12F3h) 2894h CBI WB CSI CBI WA 4852(12F4h) 2894h CBI WB CSI CSI (12F6h) 2894h 342

343 CAN_PROFILE_DATA 構造体 CanGetProfile 関数 CanGetProfile 関数で指定する通信条件設定構造体です C 言語 typedef struct { ULONG ulstartbit; ULONG ulbitcount; ULONG ulbyteorder; ULONG uldatatype; } CAN_PROFILE_DATA, *PCAN_PROFILE_DATA; Visual C#.NET(x86 x64 共用 ) [StructLayout(LayoutKind.Sequential)] public struct CAN_PROFILE_DATA { public uint StartBit; public uint BitCount; public uint ByteOrder; public uint DataType; } Visual Basic.NET(x86 x64 共用 ) <StructLayout(LayoutKind.Sequential)> Structure CAN_PROFILE_DATA Dim StartBit As Integer Dim BitCount As Integer Dim ByteOrder As Integer Dim DataType As Integer End Structure 343

344 メンバ ulstartbit ulbitcount ulbyteorder uldatatype 説明変換を開始するビット位置を指定します 範囲は 0~63 です 変換するデータサイズを指定します 範囲は 1~64 です uldatatype が CAN_DATATYPE_FLOAT のとき 32 ビット固定となります uldatatype が CAN_DATATYPE_FLOAT64 のとき 64 ビット固定となります 変換後のデータ型のサイズより小さい値を指定した場合 本メンバで指定した値までのデータを変換します 変換後のデータ型のサイズより大きい値を指定した場合 変換されるのは変換後のデータ型のサイズまでとなります 例えば uldatatype に CAN_DATATYPE_INTEGER16 ulbitcount に 10 を指定した場合は 10 ビット分が変換されます また uldatatype に CAN_DATATYPE_INTEGER16 ulbitcount に 20 を指定した場合 変換されるのは CAN_DATATYPE_INTEGER16 のビット数である 16 ビット分となります バイトオーダーを指定します uldatatype が CAN_DATATYPE_INTEGER8 のとき本パラメータは無効です 識別子 値 内容 CAN_BYTEORDER_INTEL 1 Intel 形式 ( ) CAN_BYTEORDER_MOTOROLA 2 Motorola 形式 ( ) データ型を指定します 識別子 値 内容 CAN_DATATYPE_INTEGER8 01h 8 bits 整数型 CAN_DATATYPE_INTEGER16 02h 16 bits 整数型 CAN_DATATYPE_INTEGER32 03h 32 bits 整数型 CAN_DATATYPE_FLOAT 10h 32 bits 実数型 (IEEE754 単精度浮動小数点数 ) CAN_DATATYPE_FLOAT64 20h 64 bits 実数型 (IEEE754 倍精度浮動小数点数 ) 344

345 備考 バイトオーダーとは 2bytes 以上の幅 ( サイズ ) を持つ数値のメモリに格納する順番のことです 最下位のバイトから順番に格納するものを Intel 方式 ( リトルエンディアン ) 最上位のバイトから順番に格納するものを Motorola 方式 ( ビッグエンディアン ) といいます 例 ) h のメモリ配置 リトルエンディアン アドレス 内容 78h 56h 34h 12h ビッグエンディアン アドレス 内容 12h 34h 56h 78h 345

346 4.4 戻り値一覧 制御用関数戻り値一覧エラー識別子値 (10 進数 ) 意味対処方法 IFCAN_ERROR_SUCCESS 0 正常終了 - IFCAN_ERROR_NOT_READY C h ( ) 現在ドライバを使用することができません デバイスがちゃんと接続されていること デバイスマネージャに表示されていることを確認し実行してください IFCAN_ERROR_ACCESS_DENIED IFCAN_ERROR_INVALID_PARAMETER IFCAN_ERROR_INSUFFICIENT_BUFFER IFCAN_ERROR_NOT_OPEN IFCAN_ERROR_MEMORY_NOTALLOCATED IFCAN_ERROR_BUFFER_IS_FULL IFCAN_ERROR_BUFFER_IS_EMPTY IFCAN_ERROR_CANNOT_ACCESS IFCAN_ERROR_INVALID_HANDLE IFCAN_ERROR_NOT_SUPPORTED IFCAN_ERROR_NOW_SENDING C h ( ) C h ( ) C h ( ) C h ( ) C h ( ) C h ( ) C h ( ) C h ( ) C000000Ah ( ) C000000Bh ( ) C000000Ch ( ) 現在デバイスの削除中です パラメータが不正です システムコールに渡されたデータ領域が小さすぎます ポートがオープンされる前にクローズしようとしました メモリを確保できません バッファに空きがありません バッファが空です バスが有効時にしか実行できない関数をバスオフ時に実行しました バスオフ時にしか実行できない関数をバスが有効なときに実行しました 周期送信データのバッファ転送中です デバイスハンドルが正しくありません サポートしていない機能です 現在 周期送信中です 現在 データ送信中です デバイスの削除が完了後 再度デバイスを組み込んでから実行してください 引数の値が不正です 引数の値の範囲が指定範囲外です ドライバの内部エラーです どのような状況でエラーが発生したかをご連絡ください CanOpenPort 関数の実行中は 他の関数を呼び出さないようにして下さい ドライバ内部のバッファメモリの確保に失敗しました 送信バッファの空き容量以上のデータを送信しようとしました 送信バッファサイズと 送信バッファ内にあるデータ数を確認して 関数を実行してください 受信バッファ エラーバッファが空でないことを確認して 関数を実行してください バスの状態を確認後 関数を実行してください 再度 周期送信データの設定を行ってください 不正なデバイスハンドルで呼び出しを行おうとしました CanOpenPort 関数で返されたデバイスハンドルを使用してください サポートしていない機能を呼び出そうとしました 周期送信を停止させてから関数を実行してください データが送信完了してから関数を実行してください 346

347 IFCAN_ERROR_USB_TIMEOUT IFCAN_ERROR_USBIO_FAILED C000000Dh ( ) C000000Eh ( ) USB デバイスとの通信がタイムアウトしました USB デバイスの実行に失敗しました 再起動を行なうか DPC-0401 の IfUsbDevicePowerCtl 関数を使用し USB デバイスの電源を OFF ON して下さい IfUsbDevicePowerCtl 関数の使用方法は DPC-0401 の Help を参照してください 再起動を行なうか DPC-0401 の IfUsbDevicePowerCtl 関数を使用し USB デバイスの電源を OFF ON して下さい IfUsbDevicePowerCtl 関数の使用方法は DPC-0401 の Help を参照してください プロファイル設定用関数戻り値一覧エラー識別子値 (10 進数 ) 意味 IFCAN_ERROR_SUCCESS 0 正常終了 IFCAN_ERROR_INVALID_PARAMETER C h パラメータに誤りがあります ( ) IFCAN_ERROR_INSUFFICIENT_BUFFER C h パラメータに誤りがあります ( ) IFCAN_ERROR_PROFILE_NOT_FOUND C h 指定したプロファイルは登録されていません ( ) IFCAN_ERROR_PROFILE_DATATYPE_MISMATCH C h 指定した要素のデータ型が異なります ( ) IFCAN_ERROR_PROFILE_ITEM_NOT_FOUND C h 指定したプロファイル要素は存在しません ( ) IFCAN_ERROR_PROFILE_ALREADY_EXISTS C h 指定したプロファイルはすでに登録されています ( ) IFCAN_ERROR_PROFILE_OVERFLOW C h 登録できるプロファイル件数を超えています ( ) IFCAN_ERROR_INVALID_FILE_FORMAT C h 指定した設定ファイルのフォーマットが不正です ( ) IFCAN_ERROR_CANT_ACCESS_FILE C h 指定したファイルにアクセスできません ( ) () 内の値は 10 進数で示した値です 347

348 第 5 章サンプルプログラム 以下 各サンプルプログラムの概要を説明します 各サンプルプログラムには実行形式のファイルが付属していません ソースコードをコンパイルして実行ファイルを生成してから 動作させてください Visual C++ の場合 Visual C++(Visual Studio) を起動し ファイル メニューから ワークスペースを開く を選び メイクファイル *.mak を開き ビルドしてください Visual C++ の場合 (Microsoft Visual C++.NET 2003~2008) Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル *.vcproj を開き ビルドしてください Visual C++ の場合 (Microsoft Visual C++.NET 2010 以降 ) Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル *.vcxproj を開き ビルドしてください *.vcxproj ファイルは Visual Studio 2010 で作成しております Visual Studio 2010 より新しい Version で実行する場合には 下記設定を行ってください Visual Studio のメニューから プロジェクト - プロパティ - 構成プロパティ - 全般 を開き プラットフォームツールセット を使用している環境に合わせて変更 例 ) Visual Studio 2012 を使用している場合 Visual Studio 2012(v110) を選択 ( プルダウンメニューより選択できます ) Visual Basic の場合 Visual Basic を起動し プロジェクトファイル *.vbp を開き ビルドしてください Delphi の場合 Delphi を起動し プロジェクトファイル *.dpr を開き ビルドしてください Visual C#.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル *.csproj 1 を開き ビルドしてください Visual Basic.NET の場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル *.vbproj 1 を開き ビルドしてください Visual C++ CLR プロジェクトの場合 Visual Studio を起動し ファイル メニューから 開く プロジェクト を選び プロジェクトファイル *.vcproj 1, を開き ビルドしてください 1 クラスライブラリもビルドされます 作成後 *.exe を起動してください Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では sendrecv のみ使用できます Visual C++ のサンプルプログラム canmon canmonfd は Visual Studio 2013 では使用できません ご注意下さい 348

349 5.1 canmon サンプルプログラム canmon は CAN バス上を流れるメッセージを取り込み 画面に表示するサンプルプログラムです また メッセージ送信も行えますので 様々な CAN 対応機器の動作確認にお使い頂けます そのままお使い頂くことも可能ですが お客様のご使用環境に応じ カスタマイズして頂くことで お客様のプログラム作成時間を短縮することが出来ます 内容 ポートのオープン canmon を実行すると空のウィンドウが開かれます メニューの File Open New Port(N) を選択します 使用するCANインタフェースを選択する画面が表示されます 使用するCANインタフェース 通信速度 モード (ACKを返すNORMAL モードか ACKを返さないMONITORモード ) を選択し OK をクリックすると モニターが開始されます 349

350 受信メッセージの表示モニターが開始されると受信された CAN メッセージが画面に表示されます Time CAN メッセージが受信された時刻です ID CAN メッセージの ID フィールドの値です (16 進数表示 ) Length CAN メッセージに含まれるデータの長さです Data CAN メッセージに含まれるデータです (16 進数表示 ) メッセージ送信 ALT キーを押しながら S を押すことでメッセージ送信用のダイアログが開かれます 送信するメッセージに付加する ID を 16 進数で入力してください データ本体は ASCII 文字列で入力してください 最大 8 文字 (8 バイト ) まで送信することができます OK ボタンをクリックすると メッセージが送信されます 350

351 5.2 canmonfd サンプルプログラム canmonfd は CAN FD バス上を流れるメッセージを取り込み 画面に表示するサンプルプログラムです また メッセージ送信も行えますので 様々な CAN FD 対応機器の動作確認に利用できます 基本的な使用方法はサンプルプログラム 5.1 canmon と同じですが 以下が異なります ボーレートの設定データフェーズとデータフェーズ以外の通信速度を個別に設定できます メッセージ送信最大 64 文字 (64 バイト ) まで送信することができます 5.3 send 送信を行うサンプルプログラムです 通信速度等の設定はデフォルト値を使用しています データ長 1 ID30h データ 55h のデータフレームを 1 メッセージを送信します 5.4 cyclic 周期送信を行うサンプルプログラムです 通信速度等の設定はデフォルト値を使用しています データ長 1 ID30h データ 55h のデータフレームを 1000ms 周期で 10 秒間周期送信します 高機能版 バスマスタ版 CAN 製品のみ対応しています PCI P CPZ P PEX CSI で使用する場合には 655,350μs 周期となります 5.5 receive 受信を行うサンプルプログラムです 通信速度等の設定はデフォルト値を使用しています 受信するまで処理は戻りません 5.6 filter フィルタを適用し受信を行うサンプルプログラムです 通信速度等の設定はデフォルト値を使用しています 標準フォーマットの ID13h のメッセージのみ受信するようにフィルタを設定します 受信するまで処理は戻りません 5.7 error エラー情報を取得するサンプルプログラムです 通信速度等の設定はデフォルト値を使用しています エラーが発生するまで処理は戻りません 5.8 multicyclic 周期送信を複数の周期で行うサンプルプログラムです 通信速度等の設定はデフォルト値を使用しています 100ms と 200ms の周期で一つのデバイスから周期送信を行います 精度は 10ms までです 351

352 5.9 sendrecv Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) 用の送信と受信を行うサンプルプログラムです 通信速度等の設定はデフォルト値を使用しています 5.10 sendrecvfd CAN FD メッセージの送受信を行うサンプルプログラムです 以下を行います 1. 標準フォーマットの ID13h のメッセージのみ受信するようにフィルタを設定 2. 通信速度等の設定の取得と再設定 3.ID13h, データ長 64byte の CAN FD メッセージを送信 4. 受信待機 ( 約 30 秒でタイムアウト ) 352

353 第 6 章ユーティリティ 以下 各ユーティリティの概要を説明します 6.1 プロファイル設定プログラム スタート メニューから プロファイル設定ユーティリティ を起動してください プロファイル設定ユーティリティが起動します 起動直後にはプロファイルは設定されていない状態です 既存のプロファイル設定ファイルからデータを読み出す場合 File メニューの Open Profiles を選択してください プロファイルの登録 修正 削除は Edit メニューから行います 編集後は File メニューの Save Profiles を選択し プロファイルデータの保存を行ってください 353

354 各メニューの説明 メニュー Open Profiles Save Profiles Exit Add Profiles Edit Profiles Delete Profiles View Profiles Bitmap 説明プロファイル設定ファイルから プロファイルデータを読み出します メニューを選択するとファイルダイアログが表示され オープンしたいプロファイル設定ファイルを選択します プロファイルの読み出しに成功すると プロファイルデータの一覧が画面に表示されます なおファイルからの読み出しによって 直前まで設定されたプロファイルデータは全てクリアされます 現在編集中のプロファイルデータをファイルに保存します メニューを選択するとファイルダイアログが表示され 保存するファイル名を入力します 既存のファイルを入力した場合 上書き保存されます プログラムを終了します プロファイルデータの追加を行います プロファイルダイアログの各設定を入力し OK ボタンを押すとプロファイルの新規登録を行います プロファイルデータの各設定項目については プロファイルダイアログについて を参照ください プロファイルデータの修正を行います プロファイルダイアログの各設定を変更し OK ボタンを押すとプロファイルの変更を行います プロファイルデータの削除を行います プロファイルデータのビットマップを表示します 各プロファイル要素のビット位置を図示します 最上段が 1 バイト目で 最下段が 8 バイト目になります 表のセルの中にある番号は 要素番号を示します Version Information バージョン情報を表示します 354

355 プロファイルダイアログの説明 1 Name エディットボックスプロファイル名を入力します 64 文字まで入力することができます 2 ID エディットボックスメッセージの ID を入力します 16 進数で入力します 3 Items リスト登録されているプロファイル要素の一覧を表示します 4 Start bit ドロップダウンリスト変換を開始するビット位置を指定します 範囲は 0~63 です 5 Bit count ドロップダウンリスト変換するデータサイズを指定します 範囲は 1~64 です 355

356 6 Byte order ドロップダウンリストバイトオーダーを指定します 項目 内容 Intel Intel 形式 ( ) Motorola Motorola 形式 ( ) バイトオーダーとは 2bytes 以上の幅 ( サイズ ) を持つ数値のメモリに格納する順番のことです 最下位のバイトから順番に格納するものを Intel 方式 ( リトルエンディアン ) 最上位のバイトから順番に格納するものを Motorola 方式 ( ビッグエンディアン ) といいます 例 ) h のメモリ配置 リトルエンディアン アドレス 内容 78h 56h 34h 12h ビッグエンディアン アドレス 内容 12h 34h 56h 78h 7 Data type ドロップダウンリストデータ型を指定します 項目内容 Integer(8 bits) 8 bits 整数型 Integer(16 bits) 16 bits 整数型 Integer(32 bits) 32 bits 整数型 Integer(64 bits) 将来拡張用です 使用しないで下さい Float(32 bits) 32 bits 実数型 (IEEE754 単精度浮動小数点数 ) Double(64 bits) 64 bits 実数型 (IEEE754 倍精度浮動小数点数 ) String 将来拡張用です 使用しないで下さい 8 Update ボタン選択されている要素の情報を更新します 9 Add ボタン要素の追加を行います 10 Delete ボタン要素の削除を行います 356

357 6.2 自己診断プログラム本製品には 動作不具合時の原因がハードウェア的なものか ソフトウェア的なものかを用意に判断するための自己診断プログラム (DiagCan) が付属しています 自己診断プログラムを用いて動作確認を行ってください 高速 CAN インタフェースで自己診断プログラムを動作させる場合 PCI シリーズ LPC シリーズ CPZ シリーズ CTP シリーズをご使用の場合は ディップスイッチにより各チャンネルを 終端抵抗あり に設定してください 詳しくはマニュアルをご参照ください 終端抵抗がない場合 診断結果が NG となる場合があります Intel PCH EG20T の CAN コントローラを搭載した製品 (TPC-B016SAxx, TPC-B016SBxx,ETC-B016) では使用できません 車載 (ETC-D016(S) ETC-D116(S) ETC-D216(S) 等 ) では IRQ 番号は不定値です PCI PU では使用できません 使用機材 型式 PCI ,PCI LPC ,LPC CPZ ,CTP PEX ,PEX PCI ,PCI P 上記以外の CAN 製品 使用する機材 CAN 製品 CAN 製品 付属ケーブル (CardBus 製品のみ ) チャンネル間をつなぐケーブル ( または端子台 ) 実行手順 1. PCI PCI LPC LPC CPZ CTP PEX PEX PCI PCI P PCI PU の診断を行う場合 CAN 製品からケーブルを外しておきます それ以外の CAN 製品の診断を行う場合 CAN 製品にケーブルを接続し チャンネル間で通信できる状態にします (2 チャンネルの CAN 製品はチャンネル 1 とチャンネル 2 4 チャンネルの CAN 製品はチャンネル 1 とチャンネル 2 チャンネル 3 とチャンネル 4 をケーブルで接続します ) 2. DiagCan を実行します 3. メニューから File (F) Select New Device (O) を選択します 4. システムに実装されている CAN 製品が表示されますので 診断を行いたい CAN 製品を選択し OK ボタンをクリックします 5. メインダイアログに 選択した CAN 製品のリソースが表示されますので メニューから Diagnosis (D) Start Diagnosis (S) を実行し 診断を開始してください 357

358 6. 診断結果がメインダイアログに表示されます 診断結果が NG の場合には メニューから File (F) - Save the Result(S) を選択して 診断結果をファイルに保存してください その診断結果とともに弊社カスタマーサポートセンタまでお問い合わせください 358

359 6.3 カードバス ID 設定ユーティリティこのユーティリティは複数枚の同一型式 CardBus 製品を使用するためのものです 製品ごとに異なる ID 番号を設定します この ID 番号は PCI インタフェースモジュールで言えば RSW 番号と同等の意味を持ち デバイスマネージャ 自己診断プログラムでも RSW1 として表示されます 操作方法 1. ドライバソフトウェアのインストール完了後 コントロールパネル の Interface CardBus ID Utility を開きます 2. 現在挿入されている弊社 CardBus 製品の情報が表示されます 左から バス番号 デバイス番号 ファンクション番号 型式 ID 番号 を示します ID 番号の設定を行いたい製品をダブルクリックして下さい 3. ID 番号を設定するダイアログが開きますので コンボボックス内で設定したい ID 番号を選択し Ok ボタンをクリックします 4. これで ID 番号の設定は完了です 設定できる ID 番号は 0h~Fh までです 変更した ID 番号をドライバに認識させるには 一度カードを抜き差しするか システムを再起動して下さい 設定した ID 番号が分かるように番号を記したシールをカードに貼ることをお勧めします 359

DPC-0401

DPC-0401 Interface USB Driver (I/O-CD) DPC-0401 USB 拡張 I/O 用 Windows ドライバ Help for Windows www.interface.co.jp 目次 第 1 章はじめに...3 1.1 概要...3 1.2 各 I/O に対応したドライバ...3 第 2 章製品仕様...4 2.1 基本仕様...4 2.2 製品構成...4 2.3 クラスライブラリの参照方法...5

More information

GPC-6105

GPC-6105 PULSE4(PCI)GEN GPC-6105 パルス出力製品 Windows 対応ドライバソフトウェア Help for Windows www.interface.co.jp 目次 第 1 章はじめに 2 1.1 概要...2 1.2 特長...2 第 2 章製品仕様 3 2.1 基本仕様...3 第 3 章導入方法 4 3.1 インストール手順...4 3.2 実行手順...4 3.3 クラスライブラリの参照方法...7

More information

FBWFMemoryWatcher

FBWFMemoryWatcher IFFBWFMEMORYWATCHER.WIN FBWF Memory Watcher Classembly Devices 用 Windows ドライバソフトウェア Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章製品仕様 4 2.1 基本仕様...4 2.2 製品構成...4 第 3 章導入方法

More information

DPC-0244

DPC-0244 DIO(PCI/C-PCI) DPC-0224 汎用入出力モジュール用 Windows ライブラリ Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 第 2 章導入方法 4 2.1 インストール手順...4 2.2 使用方法...4 2.3 実行手順...7 第 3 章リファレンス 9 3.1 関数一覧...9 3.2 未サポート関数...10

More information

BPC-0821 Help for Windows

BPC-0821 Help for Windows IFMEM4G.WIN BPC-0821 Windows 用メモリアクセスツール Help for Windows www.interface.co.jp 目次 第 1 章はじめに 2 1.1 概要...2 1.2 特長...2 第 2 章製品仕様 3 2.1 基本仕様...3 2.2 製品構成...3 第 3 章導入方法 4 3.1 インストール手順...4 3.2 実行手順...4 第 4 章リファレンス

More information

EWF管理ソフトウェア

EWF管理ソフトウェア IFEWF.WIN EWF 管理ソフトウェア Classembly Devices /FA コントローラ用 Windows ソフトウェア Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章 製品仕様 4 2.1 基本仕様...4 2.2 製品構成...4 第 3 章 導入方法 5 3.1 インストール手順...5

More information

CANチュートリアル

CANチュートリアル TUT-0054 Ver. 1.1 www.interface.co.jp Ver 1.0 2004 7 1.1 2005 6 CPZ BPC-08xx BPC-0820 2-4 (, ), Web site () / ( ) ...1...1...1...2 1. CAN...3 2. CAN...4 2.1. CAN...4 2.2. CAN...4 2.3....5 2.3.1....6 2.3.2.

More information

システム監視ライブラリ

システム監視ライブラリ IFCPMGR.WIN システム監視ライブラリ ATX マザーボード用 Windows ドライバソフトウェア www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章製品仕様 4 2.1 基本仕様...4 2.2 製品構成...4 第 3 章導入方法 5 3.1 インストール手順...5 3.2 クラスライブラリの参照方法...5

More information

<4D F736F F D20B6BCB5D7B2CCDED7D8CFC6ADB1D9315F43532E444F43>

<4D F736F F D20B6BCB5D7B2CCDED7D8CFC6ADB1D9315F43532E444F43> CASSIOPEIA DT-10 ライブラリマニュアル for C# Bluetooth 編 Ver 1.00 変更履歴 No Revision 更新日 項 改訂内容 1 1.00 05/2/22 初版初版発行 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 目次 1. 概要...1 2. 動作環境...1 3. 開発環境...1

More information

DPC-0403

DPC-0403 IFUSBIO(I/O-CD) DPC-0403 CoolIOs USB 製品用 Windows ドライバ Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章製品仕様 4 2.1 基本仕様...4 2.2 製品構成...5 第 3 章導入方法 7 3.1 インストール手順...7 3.2 実行手順...7

More information

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1 型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1 第 1 章製品概要本開発キットは RF007 ラジオコミュニケーションテスタ ( 本器 ) を使用したソフトウェアを開発するためのライブラリソフトウェアです

More information

GPC-2000

GPC-2000 DIO(PCI/C-PCI) GPC-2000 デジタル入出力インタフェースモジュール用 Windows ドライバ Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章製品仕様 4 2.1 基本仕様...4 2.2 製品構成...5 第 3 章導入方法 7 3.1 インストール手順...7 3.2

More information

Microsoft Word - DT-5100Lib_Manual_DotNet.doc

Microsoft Word - DT-5100Lib_Manual_DotNet.doc CASSIOPEIA DT-5100 シリーズ.NET ライブラリマニュアル 概要編 Ver 3.00 変更履歴 No Revision 更新日項改訂内容 1 1.00 03/1/20 初版初版発行 2 3.00 05/03/15 3 カシオライブラリマニュアル (.NET) 開発マニュアルの 1~4 をひとまとめ にしました 4 5 6 7 8 9 10 11 12 13 14 15 16 17

More information

GPC-8826

GPC-8826 IFHNL(PCI/C-PCI) GPC-8826 光メモリンクインタフェースモジュール用 Windows ドライバ Ver. 1.70 Help for Windows www.interface.co.jp 目次 第 1 章はじめに 4 1.1 概要...4 1.2 特長...4 1.3 用語解説...5 1.4 共有メモリとは...5 1.5 ウィンドウとは...9 第 2 章製品仕様 11

More information

CONTEC DIOプロバイダ ユーザーズガイド

CONTEC DIOプロバイダ ユーザーズガイド DIO プロバイダユーザーズガイド - 1 - DIO プロバイダ CONTEC DIO ボード Version 1.1.2 ユーザーズガイド July 17, 2012 備考 ORiN2SDK2.0.14 以降, このプロバイダは CONTEC 社の API-DIO(WDM) を使用しています. 以前 までの API-DIO(98PC) を使用する場合は,DIO98 プロバイダを使用してください.

More information

Microsoft Word - 7_rusb.doc

Microsoft Word - 7_rusb.doc お客様各位 有限会社らびっとはうす Windows 7 でのドライバ インストール方法 平素は弊社製品をご愛用いただき 誠にありがとうございます 以下に Windows 7 でのドライバ インストール方法を説明いたします ご使用になるパソコンは Windows XP が動作可能な環境を前提としています 対象製品 :R-USB シリーズ (R-USB-PIO8/8R, R-USB-PIO8/8, R-USB-PI16,

More information

型名 RF014 デジタル ラジオコミュニケーションテスタ Digital Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation 参考資料 RF014SDK-M001 第 1 章製品概要本開発キットは RF014 デジタルラジオコミュニケーションテスタ ( 本器 ) を使用したソフトウェアを開発するためのライブラリソフトウェアです

More information

このダイナミックリンクライブラリ GaugeC48.dll は 8CH から 48CH 用の DigitalGaugeCounterDG3000 シリーズ共通の DLL です この説明書は GaugeC48.dll を使ったアプリケーションを作成するためのものです 開発環境は MicrosoftVi

このダイナミックリンクライブラリ GaugeC48.dll は 8CH から 48CH 用の DigitalGaugeCounterDG3000 シリーズ共通の DLL です この説明書は GaugeC48.dll を使ったアプリケーションを作成するためのものです 開発環境は MicrosoftVi DigitalGaugeCounter DG3000 シリーズ ダイナミックリンクライブラリ GaugeC48.dll(DLL) 取扱説明書 このダイナミックリンクライブラリ GaugeC48.dll は 8CH から 48CH 用の DigitalGaugeCounterDG3000 シリーズ共通の DLL です この説明書は GaugeC48.dll を使ったアプリケーションを作成するためのものです

More information

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev. 00.0.04 1 / 10 目次 1. ファイル構成... 3 2. 環境 3 2.1. 動作環境 OS... 3 2.2. コンパイル時の注意点... 3 2.3. USB ドライバ... 3 3. 関数一覧... 4 3.1. USB 接続確認処理 (CD_checkConnect CD_checkConnect)

More information

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for ARM Lite 4.2.0 で作成した STM32F4 Discovery 基板用のプロジェクトです

More information

UIOUSBCOM.DLLコマンドリファレンス

UIOUSBCOM.DLLコマンドリファレンス UIOUSBCOM.DLL UIOUSBCOM.DLL Command Reference Rev A.1.0 2008/11/24 オールブルーシステム (All Blue System) ウェブページ : www.allbluesystem.com コンタクト :contact@allbluesystem.com 1 このマニュアルについて...3 1.1 著作権および登録商標...3 1.2

More information

プロバイダ ユーザーズガイド

プロバイダ ユーザーズガイド AIO プロバイダユーザーズガイド 1 AIO プロバイダ CONTEC AIO ボード Version 1.0.1 ユーザーズガイド July 17,2012 備考 AIO プロバイダユーザーズガイド 2 改版履歴 バージョン 日付 内容 1.0.0.0 2011712 初版. 1.0.1.0 2012529 メタモード追加. 1.0.1 2012717 ドキュメントのバージョンルールを変更. 対応機器

More information

GPC-4161

GPC-4161 COM-EX(PCI/C-PCI) GPC-4161 調歩同期シリアル通信インタフェースモジュール用 Windows ドライバ Help for Windows www.interface.co.jp COM-EX(PCI/C-PCI) 2002 Interface Corporation. All rights reserved. 2 目次 第 1 章はじめに...5 1.1 概要...5 1.2

More information

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D GS1-128 の描画 DLL について (ver. 2.2) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される必要があります 使用条件 プリンタの解像度 300dpi 以上 機能 バーコードの基本幅を 1 ドット単位で指定できる

More information

目次 目次... 1 はじめに... 3 概要... 4 サポート環境... 5 関数... 6 MEC_OpenDevice... 7 MECDevice_Release... 8 MECDevice_GetFirmVersion... 9 MECDevice_GetCoreTemperature

目次 目次... 1 はじめに... 3 概要... 4 サポート環境... 5 関数... 6 MEC_OpenDevice... 7 MECDevice_Release... 8 MECDevice_GetFirmVersion... 9 MECDevice_GetCoreTemperature MECodecAPI Reference Manual 2015 年 9 月 1 日 MEDIAEDGE 株式会社 目次 目次... 1 はじめに... 3 概要... 4 サポート環境... 5 関数... 6 MEC_OpenDevice... 7 MECDevice_Release... 8 MECDevice_GetFirmVersion... 9 MECDevice_GetCoreTemperature...

More information

GPC-4116

GPC-4116 HDLC(PCI/C-PCI) GPC-4116 HDLC 通信インタフェースモジュール用 Windows ドライバ Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要... 3 1.2 特長... 3 第 2 章製品仕様 4 2.1 基本仕様... 4 2.2 製品構成... 6 第 3 章導入方法 8 3.1 インストール手順...

More information

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です ACTIVE TOUCH 拡張部品取扱説明書 - 共有メモリアクセスコンポーネント - 1. はじめに 1 (1) 概要... 1 (2) INpMac のインストール... 1 2. Windows アプリケーションとの連携 2 (1) コントロール ( 部品 ) の登録... 2 (2) データの関連付け... 3 3. INtime アプリケーションとの連携 4 (1) 部品 ( コンポーネント

More information

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される必要があります 使用条件 プリンタの解像度 300dpi 以上 機能 バーコードの基本幅を 1 ドット単位で指定できる

More information

AquesTalk プログラミングガイド

AquesTalk プログラミングガイド AquesTalk プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2 種類があります 使用するアプリケーションに応じて選択してください

More information

インテル(R) Visual Fortran コンパイラ 10.0

インテル(R) Visual Fortran コンパイラ 10.0 インテル (R) Visual Fortran コンパイラー 10.0 日本語版スペシャル エディション 入門ガイド 目次 概要インテル (R) Visual Fortran コンパイラーの設定はじめに検証用ソースファイル適切なインストールの確認コンパイラーの起動 ( コマンドライン ) コンパイル ( 最適化オプションなし ) 実行 / プログラムの検証コンパイル ( 最適化オプションあり ) 実行

More information

Taro-82ADAカ.jtd

Taro-82ADAカ.jtd デジタル & アナログ絶縁入出力ユニット解説書製品型式 8 2 A D A - K C 製品型式 8 2 A D A - B D 製品型式 D A C S - 8 2 0 0 この解説書は 8 2 A D A または D A C S - 8 2 0 0 の動作と使用方法について簡単に説明したものです D A C S - 8 2 0 0 の場合は この解説書の 8 2 A D A という表現を 一部

More information

NetworkVantage 9

NetworkVantage 9 DevPartner エラー検出 はじめてのエラー検出 (Unmanaged VC++ 版 ) 本書は はじめてエラー検出を使用する際に参考していただくドキュメントです 詳細な情報につきましては 製品に付属しているオンラインドキュメントならびにオンラインヘルプをご参照ください なお 本書は Visual Studio 2010 をベースとして説明しております Visual Studio 6.0 の場合は

More information

生存確認調査ツール

生存確認調査ツール Hos-CanR.0 独自項目運用マニュアル FileMaker pro を使用 登録作業者用 Ver. バージョン改訂日付改訂内容 Ver. 00//5 初版 Ver. 0// FileMaker Pro の動作確認の追加 はじめに 本マニュアルについて Hos-CanR.0 院内がん登録システム ( 以降は Hos-CanR.0 と記述します ) では 独自項目の作成 登録 サポートはなくなり

More information

ホストプログラム操作説明書

ホストプログラム操作説明書 様 インストール操作説明書 USB ドライバインストール操作説明 JT-KP41U 32bit 対応カードリーダー用 NOTE: Windows XP / Server 2003 / Windows Vista / Server 2008 / Windows 7 / Windows 8 対応 バージョン :1.1.0.0 受領印欄 パナソニックシステムネットワークス株式会社モビリティビジネスユニット

More information

ホストプログラム操作説明書

ホストプログラム操作説明書 様 インストール操作説明書 USB ドライバインストール操作説明 JT-KP41U 64bit 対応カードリーダー用 NOTE: Windows XP / Server 2003 / Windows Vista / Server 2008 / Windows 7 / Windows 8 / Server2012 対応 バージョン :1.1.0.0 受領印欄 パナソニックシステムネットワークス株式会社モビリティビジネスユニット

More information

プロセス間通信

プロセス間通信 プロセス間通信 プロセス間通信 (SendMessage) プロセス間通信とは 同一コンピューター上で起動して居るアプリケーション間でデータを受け渡し度い事は時々有る Framework には リモート処理 と謂う方法でデータの受け渡しを行なう方法が有る 此処では 此の方法では無く 従来の方法の API を使用したプロセス間通信を紹介する 此の方法は 送信側は API の SendMessage で送り

More information

24th Embarcadero Developer Camp

24th Embarcadero Developer Camp 17 Th Developer Camp B4 Delphi/C++Builder テクニカルワークショップ Delphi / C++Builder 旧バージョンアプリケーションの移行 エンバカデロ テクノロジーズサポートチーム with 高橋智宏 1 17 Th Developer Camp Delphi Q1 2 midas.dll Q. 別々のバージョンで作成したデータベースアプリケーションがあります

More information

GPC-4150

GPC-4150 COM/PRT(PCI) GPC-4150 調歩同期シリアル通信 / プリンタインタフェースモジュール用 Windows ドライバ Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要...3 1.2 特長...3 第 2 章 製品仕様 4 2.1 基本仕様...4 2.2 製品構成...5 第 3 章 導入方法 7 3.1 インストール手順...7

More information

Microsoft Word - CAN Monitor の使い方.doc

Microsoft Word - CAN Monitor の使い方.doc CAN Monitor の使い方 1. 仕様項目内容ポート数 1ch 対応速度 125kbps,250kbps,500kbps,1Mbps ログ記録 CSV フォーマットで時系列に記録時間は msec 単位 H/W mailbox 受信 :16ch 送信 :8ch 受信フィルタチャネル毎にデータ ID および MASK 機能設定可能 Bit Timing 調整可能 サンプリングポイントを約 30%~

More information

第 7.0 版 利用履歴管理 ETCPRO5 セットアップマニュアル (Ver5.002) カードリーダモデル変更 ( 表示付き 表示なし ) に伴い 改訂 Windows10 対応に伴い 改訂 参考ホームページサイト :

第 7.0 版 利用履歴管理 ETCPRO5 セットアップマニュアル (Ver5.002) カードリーダモデル変更 ( 表示付き 表示なし ) に伴い 改訂 Windows10 対応に伴い 改訂 参考ホームページサイト : 第 7.0 版 利用履歴管理 ETCPRO5 セットアップマニュアル (Ver5.002) カードリーダモデル変更 ( 表示付き 表示なし ) に伴い 改訂 Windows10 対応に伴い 改訂 参考ホームページサイト : http://www.denso-wave.com/download/etcp/etcpro.html 2016 年 2 月 株式会社デンソーウェーブ 目次 1. はじめに......

More information

AquesTalk for WinCE プログラミングガイド

AquesTalk for WinCE プログラミングガイド AquesTalk for WinCE プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk for WinCE ( 以下 AquesTalk) をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと

More information

MS5145 USB シリアル エミュレーション モードの設定

MS5145 USB シリアル エミュレーション モードの設定 MS5145-AC-U 補足設定 2010 年 7 月株式会社エイポック http://www.a-poc.co.jp/ USB シリアルエミュレーションモードの設定 1. 概要 USB シリアル エミュレーション モードとはバーコードリーダーを USB で接続していながら RS-232C 接続機器としてパソコンに認識させる設定です 読み取ったバーコード データは COM ポートにシリアルデータとして入力します

More information

Driver Specification for JX65x, 67x, 598

Driver Specification for JX65x, 67x, 598 .12 自販機プロトコル 12-1. 機能 自販機プロトコルは ASK 方式の赤外線通信で JVMA( 日本自動販売機工業会 ) 仕様の自販機と交信 するプロトコルです 12-2. 動作環境 機種 DT-9700 OS Microsoft WindowsCE.NET 4.1 12-3. 開発環境 Microsoft embedded C++ Version4.0 + SP1 Microsoft Visual

More information

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A STM32L_ADC の説明 V003 2014/03/30 STM32L-Discovery の A/D 入力を行うプログラムです A/D CH0 ~ A/D CH3 の 4 本の入力が可能です 提供する PC のアプリケーション Access_SerialPort を使用して UART( 非同期シリアル通信 ) により A/D 入力の表示を行うことができます 無料の開発ツール Atollic TrueSTUDIO

More information

CommCheckerManual_Ver.1.0_.doc

CommCheckerManual_Ver.1.0_.doc 通信チェックツール (CommChecker) 取扱説明書 (Ver.1.0) 2009 ESPEC Corp. 目次 1. 使用条件 4 2. ダウンロード & インストール 5 3. 環境設定 6 3-1.RS-485 通信 6 3-2.RS-232C 通信 7 3-3.GPIB 通信 8 4. ソフトウェアの使用方法 9 4-1. 起動 9 4-2. 通信設定 10 (1)RS485 通信 10

More information

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート ) TrueSTUDIO 用 F4D_VCP の説明 V001 2014/07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです 無料の試用版開発ツール Atollic TrueSTUDIO for ARM Lite で作成したプロジェクトです ビルド可能なプログラムのコードサイズが 32Kbyte 以内の制限があります プログラムの開始番地は 0x08000000

More information

AquesTalk Win Manual

AquesTalk Win Manual AquesTalk Win マニュアル 株式会社アクエスト http://www.a-quest.com/ 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2

More information

Windows2000/XPインストール手順

Windows2000/XPインストール手順 日歯生涯研修事業 IC カード用研修受付ソフト インストール手順書 (Windows 10 用 ) 日本歯科医師会 1 IC カード用研修受付ソフト の Windows 10 へのインストール手順... 3 1. インストール前の確認事項... 3 2. インストール手順の概略説明... 4 3. 新規インストール... 5 4. 既に IC カード用研修受付ソフト がインストールされている場合...

More information

Microsoft Word - DTX7LM.doc

Microsoft Word - DTX7LM.doc カシオハンディターミナル DT-X7 LMWIN 操作ガイド Rev 1.00 カシオ計算機株式会社 目次 1 IO-BOX...2 1-1.B.S.( ブリッジ サテライト ) クレイドル...2 1-2.B.S クレイドルの機能...3 2. ドライバのインストール...4 2-1.USB ドライバのインストール...4 2-2.USB モード使用時の設定...8 3. アップダウンロードシステム

More information

GPC-4301

GPC-4301 GPIB-HG(PCI/C-PCI) GPC-4301 GP-IB インタフェースモジュール用 Windows ドライバ Help for Windows www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要... 3 1.2 特長... 3 第 2 章製品仕様 4 2.1 基本仕様... 4 2.2 インタフェース ファンクション... 5 2.3 製品構成... 6

More information

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x CoIDE 用 F4D_VCP の説明 V001 2014/07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x08000000 です デバッグが可能です 目次 1. USB の VCP( 仮想 COM ポート )

More information

1.dll の配置場所配布時はプログラムの実行フォルダーへ配置 2. 開発環境での使用 プロジェクトのプロパティーで [USBPIO.dll] を参照追加してください 開発環境 dll ファイルの場所 VB.Net Express Edition 境プロジェクトのフォルダ \bin\release VB.Netebugビルドの場合プロジェクトのフォルダ \bin\debug VB.Net Releaseビルドの場合プロジェクトのフォルダ

More information

MS5145、MS7120,USB通信の設定

MS5145、MS7120,USB通信の設定 株式会社エイポック http://www.a-poc.co.jp/ MS5145-AC-U,MS7120-AC-U 設定用バーコード 1.USB(Low Speed) 通信の設定対象機種 MS5145-AC-U (USBインターフェース) Fバージョン以上 MS7120-AC-U (USBインターフェース) Lバージョン以上説明 [ 説明 1] USB Serial Emulation Mode (USBシリアルエミュレーションモード)

More information

CentreCOM VT-Kit2 plus リリースノート

CentreCOM VT-Kit2 plus リリースノート VT-Kit2 plus この度は をお買いあげいただき 誠にありがとうございます このは 付属のマニュアルに記載されていない内容や ご使用の前にご理解いただきたい注意点など お客様に最新の情報をお知らせするものです 最初にこのをよくお読みになり 本製品を正しくご使用ください 1 取扱説明書の補足 ユーザーマニュアル (J613-M0617-00 Rev.A) の補足事項です 1.1 USB ドライバーのインストールについて

More information

起動画面

起動画面 RS-232C 通信データロギングツール Logger Lite 取扱説明書 E-mail: support@j-startechno.com http://www.j-startechno.com Rev.1.0.2.6 はじめにこのアプリケーションツール Logger Lite は RS-232C 通信により指示計から表示データをロギングするツールです ロギングしたデータは CSV 形式で保存しますので

More information

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2016/06/23 R03 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controll

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2016/06/23 R03 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controll USB_IR_Remote_Controller_Advance_Library 取扱説明書 2016/06/23 R03 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controller Advance から赤外線コードを送信する Windows アプリケーション (x86 版 )

More information

XNA Framework

XNA Framework XNA Framework 2.0 M@STER SESSION 01 XNA Framework の技術的背景 システム基盤は.NET Framework マネージ環境で実行 クロスプラットフォーム Windows, Xbox360, Zune DirectX, MDX から独立している 開発 実行環境の構造 XNA Game Studio (Visual Studio 2005) XNA Framework

More information

Microsoft Word - SREX_SDK2_R31.doc

Microsoft Word - SREX_SDK2_R31.doc 2017 年 4 月 - 目次 - 1-1. はじめに 2 1-2. 動作環境 2 1-3. ファイル構成 2 1-4. 注意事項 2 2-1. セットアップ 3 2-2. アンインストール 4 3-1. アプリケーション開発について 5 3-2. サンプルアプリケーションについて 10 3-3. ライブラリ関数仕様 13 3-4. 指紋情報構造体について 19 3-5. 通知メッセージ一覧 20

More information

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受 STM32L_UART1 の説明 V004 2014/03/30 STM32L-Discovery の UART 1 の送受信を行うプログラムです 無料の開発ツール Atollic TrueSTUDIO for ARM Lite( 試用版 ) で作成したプロジェクトです プログラムの開始番地は 0x08000000 です デバッグが可能です PC アプリケーションの Access_SerialPort

More information

Windows2000/XPインストール手順

Windows2000/XPインストール手順 日歯生涯研修事業 IC カード用研修受付ソフト インストール手順書 (NFC Port Software 用 ) 日本歯科医師会 1 IC カード用研修受付ソフト の NFC Port Software のインストール手順... 3 1. インストール前の確認事項... 3 2. インストール手順の概略説明... 4 3. 新規インストール... 5 4. 既に FeliCa Port Software

More information

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一 RX210 グループ IRQ 割り込みを使用したパルス出力 要旨 本サンプルコードでは IRQ 割り込みが発生すると 一定期間タイマでパルスを出力する 方法について説明します 対象デバイス RX210 1 / 25 内容 1. 仕様... 3 2. 動作確認条件... 3 3. ハードウェア説明... 3 3.1 使用端子一覧... 3 4. ソフトウェア説明... 4 4.1 動作概要... 4

More information

Android Layout SDK プログラミング マニュアル

Android Layout SDK プログラミング マニュアル プログラミングマニュアル Version 1.3.0 用 更新履歴 年月日 バージョン 履歴 2014.09.08 1.2.0.0 新規 (Layout Utilities ユーザーズ ガイド ) 2016.08.16 1.3.0.0 モバイル端末用レイアウトで直線部品と矩形部品に対応 モバイル端末用レイアウトファイルを CLFX から XML へ変更 Layout Print Engine から

More information

Microsoft Word - CBET100-CL_02a†iWinXP_PDFŠp†j.doc

Microsoft Word - CBET100-CL_02a†iWinXP_PDFŠp†j.doc Windows XP でのインストール手順 (CBET100-CL CBET100-CL) 取り付けとネットワークへの接続 2 各部の名称 機能 3 ネットワークに接続する前に 4 ネットワークへの接続 6 Windows XP へのインストール 8 インストール 9 インストール後の確認 14 PCカードスロットから取り出す場合 17 Windows XP からのアンインストール 18 インストールしたソフトを削除するには

More information

FSUx-SDK2

FSUx-SDK2 2008 年 11 月 - 目次 - 1-1. はじめに 2 1-2. 動作環境 2 1-3. ファイル構成 2 1-4. 注意事項 2 2-1. セットアップ 3 2-2. アンインストール 4 3-1. アプリケーション開発について 5 3-2. サンプルアプリケーションについて 10 3-3. ライブラリ関数仕様 13 3-4. 指紋情報構造体について 17 3-5. 通知メッセージ一覧 18

More information

FlashAir ソフトウェア更新ツール Version 東芝メモリ株式会社 Copyright 2017 Toshiba Memory Corporation, All Rights Reserved. 対応 OS: 最新の対応 OS は Web サイトをご参照ください 概要本ソフ

FlashAir ソフトウェア更新ツール Version 東芝メモリ株式会社 Copyright 2017 Toshiba Memory Corporation, All Rights Reserved. 対応 OS: 最新の対応 OS は Web サイトをご参照ください 概要本ソフ FlashAir W-03 ソフトウェア更新ツール Ver.3.00.02 ユーザーズマニュアル 1 FlashAir ソフトウェア更新ツール Version 3.00.02 東芝メモリ株式会社 Copyright 2017 Toshiba Memory Corporation, All Rights Reserved. 対応 OS: 最新の対応 OS は Web サイトをご参照ください 概要本ソフトウェア更新ツールは

More information

MINI2440マニュアル

MINI2440マニュアル USB-CAN アダプタ http://www.nissin-tech.com info@nissin-tech.com 2010/6/30 copyright@2010 1 第一章 USB-CANアダプタの概要...3 第二章 USBドライバのインストール...4 第三章ソフトウェア...7 第四章 USBCANライブラリの紹介...9 使用されたソースコードはhttp://www.nissin-tech.com/

More information

FlashAir 設定ソフトウエア株式会社東芝セミコンダクター & ストレージ社 Copyright 2012 TOSHIBA CORPORATION, All Rights Reserved. 対応 OS: Windows XP SP3 / Vista SP2 / 7 (32bit/64bit)

FlashAir 設定ソフトウエア株式会社東芝セミコンダクター & ストレージ社 Copyright 2012 TOSHIBA CORPORATION, All Rights Reserved. 対応 OS: Windows XP SP3 / Vista SP2 / 7 (32bit/64bit) FlashAir 設定ソフトウエア ユーザーズマニュアル Revision 4 1 FlashAir 設定ソフトウエア株式会社東芝セミコンダクター & ストレージ社 Copyright 2012 TOSHIBA CORPORATION, All Rights Reserved. 対応 OS: Windows XP SP3 / Vista SP2 / 7 (32bit/64bit) はじめに設定ソフトウエアを

More information

GPG-4101

GPG-4101 SIO(PCI/C-PCI)Linux/RT GPG-4101 無手順通信インタフェースモジュール用 Linux/RT ドライバ Help for Linux www.interface.co.jp 目次 第 1 章はじめに 3 1.1 概要... 3 1.2 特長... 3 第 2 章製品仕様 4 2.1 動作環境... 4 2.2 対象製品... 4 2.3 基本仕様... 5 第 3 章実行手順

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プロシージャ プロシージャの種類 Subプロシージャ Functionプロシージャ Propertyプロシージャ Sub プロシージャ Subステートメント~ステートメントで囲まれる 実行はするけど 値は返さない 途中で抜けたいときは Exit Sub を行なう Public Sub はマクロの実行候補に表示される Sub プロシージャの例 Public Sub TestSubProc() Call

More information

AN178 USB仮想シリアルドライバ インストールガイド

AN178 USB仮想シリアルドライバ インストールガイド アルファボードシリーズ USB 仮想シリアルドライバインストールガイド 第 2 版 2015 年 12 月 15 日 1. 概要 1.1 概要 本アプリケーションノートでは USB Function 機能を持つアルファボードシリーズに付属する USB 仮想シリアルドライバのインストール方法について解説します USB 仮想シリアルを使用する場合の各ボードの設定方法 動作方法につきましては 各ボードのサンプルプログラム解説

More information

VFD256 サンプルプログラム

VFD256 サンプルプログラム VFD256 サンプルプログラム 目次 1 制御プログラム... 1 2.Net 用コントロール Vfd256 の使い方... 11 2.1 表示文字列の設定... 11 2.2 VFD256 書込み前のクリア処理... 11 2.3 書き出しモード... 11 2.4 表示モード... 12 2.5 表示... 13 2.6 クリア... 13 2.7 接続方法 ボーレートの設定... 13 2.8

More information

ホストプログラム操作説明書

ホストプログラム操作説明書 様 インストール操作説明書 USB ドライバインストール操作説明 RCP40a 32bit 対応 USB ドライバ用 NOTE: Windows XP / Server 2003 / Windows Vista / Server 2008 / Windows 7 / Windows 8 対応 バージョン :1.0.0.0 受領印欄 パナソニックシステムネットワークス株式会社モビリティビジネスユニット

More information

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000 CoIDE 用 STM32F4_UART2 の説明 V002 2014/03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000000 です デバッグが可能です 提供する PC のアプリケーションの Access_SerialPort

More information

NFCライブラリマニュアル

NFCライブラリマニュアル abc SAM ライブラリマニュアル このマニュアルは SAM ライブラリの仕様について記載します Ver. 1.08 ご注意 このソフトウェアおよびマニュアルの 一部または全部を無断で使用 複製することはできません このソフトウェアおよびマニュアルは 本製品の使用許諾契約書のもとでのみ使用することができます このソフトウェアおよびマニュアルを運用した結果の影響については 一切の責任を負いかねますのでご了承ください

More information

K006/ K006 < カメラなしモデル >

K006/ K006 < カメラなしモデル > K006/ K006 < カメラなしモデル > はじめに 本書は K006 K006 < カメラなしモデル > ( 以降 K006 ) とパソコンを指定の USB ケーブル ( 別売 ) を使用して接続し インターネット通信や au ホームページで公開している各種ツールをご利用になるための USB ドライバ のインストール方法を説明しています USB ドライバをインストールする 3 パソコンに接続する

More information

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組 レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン HULFT BB クライアント for Windows Type BB1 6.3.0 HULFT BB クライアント for Windows Type BB2 6.3.0 < 対応 OS> Windows2000, WindowsXP, WindowsServer2003 < 追加機能一覧 > HULFT BB クライアント 管理番号 内容

More information

FTP_RW_ProgramDescription_jp_V100

FTP_RW_ProgramDescription_jp_V100 FTP 通信を利用利用してしてファイルファイルの送受信送受信をするサンプルプログラム V1.0.0 11/09/30 1 本サンプルプログラムの概要 このサンプルプログラムは FTP 通信プロトコルを使用して WebVisu 画面からファイルの送信 受信を行うサンプルプログラムです バスカプラ間のファイル交換及び FTP サーバソフトを起動したパーソナルコンピュータとの通信が可能です 本サンプルプログラムを応用することによって

More information

Microsoft Word - PCET10-CL_02a†iWinNT40_PDFŠp†j.doc

Microsoft Word - PCET10-CL_02a†iWinNT40_PDFŠp†j.doc Windows NT 4.0 でのインストール手順 (PCET10-CL PCET10-CL) 取り付け前の確認 2 各部の名称 機能 3 Windows NT 4.0 へのインストール 4 インストール 5 インストール後の確認 14 Windows NT 4.0 からのアンインストール 18 インストールしたソフトを削除するには 19 101691-02(Windows NT 4.0) 取り付け前の確認

More information

項番 現象 原因 対応手順書など 4 代理店コードでのダウンロード時に以下のメッセージの画面が表示される サービス時間外のため 現在 このサービスはご利用になれません 当機能のサービス時間外です 以下の時間帯にダウンロードしてください 月曜日 ~ 金曜日 7:00~21:00 土曜日 7:00~17

項番 現象 原因 対応手順書など 4 代理店コードでのダウンロード時に以下のメッセージの画面が表示される サービス時間外のため 現在 このサービスはご利用になれません 当機能のサービス時間外です 以下の時間帯にダウンロードしてください 月曜日 ~ 金曜日 7:00~21:00 土曜日 7:00~17 D-Web インストールエラー対応 順書 Ⅰ. エラー対象 1. エラー対象の確認 Setup.exe (D-Web 実行環境 ) インストール中にエラーが発生した場合は はじめに D-Web を利用できるパソコン環境であることをご確認ください 利用環境の詳細は 下記ボタンよりご確認ください 利用可能環境について詳しく見る 表 1: エラー対象一覧項番 現象 原因 対応手順書など 1 Setup.exe

More information

もくじ 2 はじめに... 3 概要... 4 動作環境... 4 利用制限モードについて... 4 本マニュアルの見かた... 4 HOME アプリマネージャの基本操作... 5 HOME アプリマネージャをインストールする... 6 HOME アプリマネージャを起動する... 8 HOME アプ

もくじ 2 はじめに... 3 概要... 4 動作環境... 4 利用制限モードについて... 4 本マニュアルの見かた... 4 HOME アプリマネージャの基本操作... 5 HOME アプリマネージャをインストールする... 6 HOME アプリマネージャを起動する... 8 HOME アプ HOME アプリマネージャ HOME アプリマネージャユーザーマニュアル 最終更新日 204 年 7 月 8 日 もくじ 2 はじめに... 3 概要... 4 動作環境... 4 利用制限モードについて... 4 本マニュアルの見かた... 4 HOME アプリマネージャの基本操作... 5 HOME アプリマネージャをインストールする... 6 HOME アプリマネージャを起動する... 8 HOME

More information

(2) [ バックアップツール ] が表示されます [1] [2] [3] [4] [5] [6] Windows Storage Server 2012 バックアップ手順 (V_01) < 画面の説明 > [1] バックアップ項目リスト登録されているバックアップセットの一覧です [2] 新規 ボタ

(2) [ バックアップツール ] が表示されます [1] [2] [3] [4] [5] [6] Windows Storage Server 2012 バックアップ手順 (V_01) < 画面の説明 > [1] バックアップ項目リスト登録されているバックアップセットの一覧です [2] 新規 ボタ バックアップ手順 (Windows Storage Server 2012) V_01 1 バックアップツール を用いた定期バックアップ バックアップツール は Windows Storage Server 2012 標準の Windows Server バックアップ の制限事項を解消するためのオリジナルのツールです バックアップツール はバックアップ設定を複数作成出来るものになります < バックアップツール

More information

構造体

構造体 構造体 Byte 配列 構造体とコピーする方法 構造体とバイト配列の変換を行うには System.Runtime.InteropServices 名前空間をインポートして置くと便利で有る Imports System.Runtime.InteropServices using System.Runtime.InteropServices; 下記の 3 種類の構造体にバイト配列の値を格納した場合に付いて検証する

More information

取り付けの準備 確認 この章では パソコンへの本製品取り付けに際しての準備や 確認について説明します ネットワークへの接続 3 ヘ ーシ 本製品をネットワークに接続します 2

取り付けの準備 確認 この章では パソコンへの本製品取り付けに際しての準備や 確認について説明します ネットワークへの接続 3 ヘ ーシ 本製品をネットワークに接続します 2 Windows NT 4.0 でのインストール手順 (ET ETX-PCI PCI) もくじ 取り付けの準備 確認 2 ネットワークへの接続 3 Windows NT 4.0 へのインストール 6 インストール 7 インストール後の確認 16 Windows NT 4.0 からのアンインストール 20 インストールしたソフトを削除するには 21 (ETXPCINT4-01) 取り付けの準備 確認 この章では

More information

MISAO with WPF

MISAO with WPF System.AddIn を利用した アプリケーション拡張 - アドインの開発 - JZ5( 松江祐輔 )@ わんくま http://katamari.jp http://katamari.wankuma.com 2008/9/13 What s System.AddIn System.AddIn 名前空間 Visual Studio Orcus から利用可能 アプリケーションに拡張機能を提 供 なんかいろいろ特長が?

More information

商標類 Microsoft は, 米国およびその他の国における米国 Microsoft Corp. の登録商標です Microsoft Office は, 米国 Microsoft Corp. の商品名称です Microsoft Excel は, 米国 Microsoft Corp. の商品名称です

商標類 Microsoft は, 米国およびその他の国における米国 Microsoft Corp. の登録商標です Microsoft Office は, 米国 Microsoft Corp. の商品名称です Microsoft Excel は, 米国 Microsoft Corp. の商品名称です 報告書集計システム 集計ツール Version 08-03/CL セットアップガイド 株式会社日立システムズ 商標類 Microsoft は, 米国およびその他の国における米国 Microsoft Corp. の登録商標です Microsoft Office は, 米国 Microsoft Corp. の商品名称です Microsoft Excel は, 米国 Microsoft Corp. の商品名称です

More information

LANカード(PG-2871) 取扱説明書

LANカード(PG-2871) 取扱説明書 B7FY-2821-01 Z0-00 PG-2871 はじめに このたびは 弊社の LAN カード (PG-2871) をお買い上げいただき 誠にありがとうございます 本書は LAN カード ( 以降 本製品 ) の仕様について説明します LAN ドライバの詳細設定については 最新の LAN ドライバのマニュアルを参照してください 2010 年 8 月 目次 1 LANカードの仕様........................................

More information

おことわり 本書の内容の一部又は全部を無断転載することは禁止されています 本機の外観及び仕様は改良のため 将来予告無しに変更することがあります 本書の内容について万一不審な点や誤りなどのお気付きの点がありましたらご連絡ください 本書に記載されている会社名 商品名などは 一般に各社の商標又は登録商標で

おことわり 本書の内容の一部又は全部を無断転載することは禁止されています 本機の外観及び仕様は改良のため 将来予告無しに変更することがあります 本書の内容について万一不審な点や誤りなどのお気付きの点がありましたらご連絡ください 本書に記載されている会社名 商品名などは 一般に各社の商標又は登録商標で USB ドライバ CDM Drivers インストールガイド グラフテック株式会社 おことわり 本書の内容の一部又は全部を無断転載することは禁止されています 本機の外観及び仕様は改良のため 将来予告無しに変更することがあります 本書の内容について万一不審な点や誤りなどのお気付きの点がありましたらご連絡ください 本書に記載されている会社名 商品名などは 一般に各社の商標又は登録商標です 本文中には (R)

More information

U/Cサーバ 業務システム間転送プログラムインターフェース仕様書

U/Cサーバ 業務システム間転送プログラムインターフェース仕様書 U/C サーバ業務システム間転送プログラムインターフェース仕様書 株式会社広告 EDI センター - 1 - 注意事項 本資料を無断で他に転載しないようお願いします 本資料は 予告なしに変更する場合があります 本資料の内容に不備がある場合は ご連絡ください - 2 - 変更履歴 版 更新日 変更内容 1 2013/9/19 新規作成 2 2017/8/30 図 2-3 転送プログラム起動後処理フロー

More information

2015/04/01 改定 オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカ

2015/04/01 改定 オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカ オムロン DeviceNet ユニット CJ1W-DRM21 に関するコンフィグレーション作業について 1. 概要 DeviceNet ユニット CJ1W-DRM21 を装着したオムロン製 CJ2 シリーズと WAGO-I/0-SYSTEM DeviceNet 対応バスカプラ 750-306 を使ったリモート I/O システムとの接続に関するコンフィグレーション方法について説明いたします 2. システム構成本書で用いるシステム構成例の内容を以下の表に示します

More information

SoftBank 101SI 取扱説明書

SoftBank 101SI 取扱説明書 6 ユーティリティソフトの使い方 概要 6-2 ユーティリティソフトをインストールする 6-2 ユーティリティソフトを起動する 6-2 モデムの状態 6-3 各設定の確認 変更 6-4 共通の設定 6-4 接続先の設定 6-5 接続ネットワーク選択 6-6 PINの設定 6-6 情報の表示 6-7 ヘルプの表示 6-8 概要 ユーティリティソフトとは 本機とパソコンを USBケーブルで接続し 4G/3G

More information

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2015/8/21 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controller Ad

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2015/8/21 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controller Ad USB_IR_Remote_Controller_Advance_Library 取扱説明書 2015/8/21 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controller Advance から赤外線コードを送信する Windows アプリケーション (x86 版 ) を簡単に作成することができます

More information

TF Series with Tio1608-D System Setup Guide

TF Series with Tio1608-D System Setup Guide システムセットアップガイド 第 1 版 : 2016 年 6 月 このガイドでは ヤマハデジタルミキシングコンソール TF シリーズ と I/O ラック Tio1608-D を使用したミキシングシステムのセットアップ手順や Tio1608-D の台数に応じたシステム例を紹介します TF シリーズは単体でも使用することができますが Tio1608-D を併用することで簡単にシステムを拡張することができ

More information

PowerPoint Presentation

PowerPoint Presentation 製品ソフトウェアのセットアップ手順 UNIX/Linux 編 1. セットアップファイルの選択開発環境 / 実行環境 / バージョン /Hotfix/ インストール先 OS 2. 対象セットアップファイルのダウンロード開発環境の場合は 2 つのファイルが対象 3. ソフトウェア要件の確認 4. ソフトウェアのインストール 5. ライセンスの認証 1 1. セットアップファイルの選択 選択項目選択肢該当チェック

More information

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R TrueSTUDIO 用 L152CD_UART1 の説明 V001 2014/10/22 UART( 非同期シリアル通信 ) で送受信を行う STM32L152C-DISCO のプロジェクトサンプルです STM32L152C-DISCO は STMicroelectronics 社製の Cortex-M3 ARM CPU である STM32L152RCT6 を搭載した基板です 試用版の開発ツール

More information

<4D F736F F D20837D836A B5F93C192E88C AC888D593FC97CD5F2E646F63>

<4D F736F F D20837D836A B5F93C192E88C AC888D593FC97CD5F2E646F63> Style シリーズ Style for ME 特定健診簡易入力ソフト - 簡易版 - マニュアル第 1 版 1 変更履歴日付 内容 備考 2008/04/14 第 1 版作成 デモ版 2008/04/21 デモ版 正規版統合 画面 ソフト名に修正 2 目次 1. 概要... 4 (1) 概要...4 (2) 環境...4 (3) 事前準備... 4 2. インストール / アンインストール...

More information

Windows AIKを使用したPE2

Windows AIKを使用したPE2 Windows AIK を使用した PE2.0 ベースの起動 CD 作成方法 この資料では マイクロソフト社から提供されている Windows AIK( 自動インストールキット ) を使用して Windows PE 2.0 ベースの起動 CD を作成する方法をご紹介します Image Backup や LB コピーコマンダーなどの製品 CD やリカバリーメディアは 主に DOS や Linux 環境で動作するため

More information

GOT機能サンプル バックアップ/リストア機能説明書

GOT機能サンプル バックアップ/リストア機能説明書 GOT 機能サンプルバックアップ / リストア機能説明書 三菱電機株式会社 1 2 1. バックアップ / リストア機能機能の特長 対象データ プログラム パラメータ デバイスコメント デバイス初期値データ ファイルレジスタ 対象機種 MELSEC-Q シリーズ (Q12PRH/Q25PRHCPU は除く ) モーションコントローラ Q シリーズ (SV13/SV22 のみ ) CNC C70 使用可能な接続形態

More information

親指シフトキーボード(FMV-KB611)、JISキーボード(FMV-KB621)、FMV-LIFEBOOK(親指シフトキーボードモデル)をお使いになる方へ

親指シフトキーボード(FMV-KB611)、JISキーボード(FMV-KB621)、FMV-LIFEBOOK(親指シフトキーボードモデル)をお使いになる方へ B5FJ-5921-01 目次 はじめに................................................... 2 商標および著作権について..................................... 2 Windows セットアップ時の文字入力について..................... 3 1 親指シフトキーボードをお使いになるための準備.............

More information

もくじエラーメッセージ... 3 測色器が接続できない時... 6 MPM3 のインストール CD を装着する... 6 測色器のドライバを確認する... 6 デバイスドライバーをインストールする

もくじエラーメッセージ... 3 測色器が接続できない時... 6 MPM3 のインストール CD を装着する... 6 測色器のドライバを確認する... 6 デバイスドライバーをインストールする エラーメッセージ Version1.00 D203074-10 もくじエラーメッセージ... 3 測色器が接続できない時... 6 MPM3 のインストール CD を装着する... 6 測色器のドライバを確認する... 6 デバイスドライバーをインストールする... 8-2 - エラーメッセージ MPM3 で表示されるエラーメッセージと対処方法を説明します エラーメッセージ 表示条件 対処方法 ライセンスの再認証が必要です

More information

はじめに 京セラ製スマートフォンを指定の microusb ケーブル ( 別売 ) またはこれと共通仕様の microusb ケーブル ( 別売 )( 以下 USB ケーブル ) と接続して USB テザリング機能をご使用いただくためには あらかじめパソコンに USB ドライバ をインストールしてい

はじめに 京セラ製スマートフォンを指定の microusb ケーブル ( 別売 ) またはこれと共通仕様の microusb ケーブル ( 別売 )( 以下 USB ケーブル ) と接続して USB テザリング機能をご使用いただくためには あらかじめパソコンに USB ドライバ をインストールしてい 京セラ製スマートフォン用 USB ドライバインストールマニュアル 本書内で使用されている表示画面は説明用に作成されたものです OS のバージョンやお使いのパソコンの環境 セキュリティ設定によっては表示画面の有無 詳細内容 名称が異なる場合があります 本書は お客様が Windows の基本操作に習熟していることを前提にしています パソコンの操作については お使いのパソコンの取扱説明書をご覧ください

More information