110
www.interface.co.jp チュートリアル Visual C++によるモータ入門書

チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

www.interface.co.jp

チュートリアル

Visual C++によるモータ入門書

Page 2: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

www.interface.co.jp

商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。 保障の内容と制限 弊社はドキュメント内の情報の正確さに万全を期しています。万一、誤記または誤植等があった場合、弊社は予告なく改訂する場合があります。ドキュメントまたはドキュメント内の情報に起因するいかなる損害に対しても弊社は責任を負いません。 製品に含まれるバグ、あるいは製品の供給(納期遅延),性能、もしくは使用に起因する付帯的損害もしくは間接的損害に対して、弊社に全面的に責がある場合でも、弊社はその製品に対する改良(正常に動作する)、代品交換までとし、金銭面での賠償の責任は一切負わないものとしますので、予めご了承ください。 ドキュメント内の図や表は説明のためであり、ユーザ個別の応用事例により変化する場合があります。 著作権,知的所有権 弊社は本製品に含まれるおよび本製品に対する権利や知的所有権を保持しています。 本製品はコンピュータ ソフトウェア(プログラム),図,文章,写真等を含んでいます。 複製の禁止 弊社の許可なく、本製品(ドキュメント含む)の全て、または一部に関わらず、複製,改変等を行うことはできません。 責任の制限 弊社は、弊社または再販売者の予見の有無に関わらず、発生したいかなる特別損害,偶発的損害,間接的な損害,重大な損害について、責任を負いません。 補償の内容 本ドキュメントで使用している弊社製品の補償については、各製品のマニュアルを参照してください。

本書の内容の一部または全部を、無断で転載することを禁止します。 本書の内容は、将来予告なく変更することがありますので、予めご了承ください。

Page 3: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

改定履歴

© 2000 Interface Corporation. All rights reserved.

改訂履歴

Ver 年 月 改 訂 内 容 1.0 2000年 12月 初版

本ドキュメントは、製品の改良その他により将来予告なく改訂しますので、予めご了承ください。

Microsoft,Windows,Windows NT,MS,Visual C++は、米国Microsoft Corporationの登録商標です。

その他、本ドキュメントに記載した会社名、商品名、製品名などは、各社の商標または登録商標です。

本チュートリアルをご使用の際は、必ず最新のドキュメント(ユーザーズマニュアル,オンラインヘルプ)を

あわせて参照してください。また、最新のドライバソフトウェアをご使用ください。ユーザーズマニュア

ル, ドライバソフトウェアは弊社Webサイトからダウンロードできます。(オンラインヘルプはドライバソ

フトウェアに含まれています)

本ドキュメントの内容に関しましては、正確な記述に努めておりますが、弊社は、本ドキュメントの内容

に対してなんら保証をするものではなく、また本ドキュメントの内容により運用した結果については、い

っさいの責任を負いませんので、ご了承下さい。

Page 4: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

目次

© 2000 Interface Corporation. All rights reserved.

目次

はじめに ............................................................................................................................................................................................. 1 対応型式 ............................................................................................................................................................................................. 1 注意事項 ............................................................................................................................................................................................. 1 1. ステッピング・モータ概要 .................................................................................................................................................... 2

1.1. ステッピング・モータの特徴 ...................................................................................................................................... 2 1.2. ステッピング・モータの構造 ...................................................................................................................................... 3 1.3. 分配回路(モータ・ドライバ) .................................................................................................................................. 4

2. ステッピング・モータ コントローラボードのインストール ........................................................................................... 5 2.1. ボードの設置.................................................................................................................................................................. 5 2.2. ドライバのインストール .............................................................................................................................................. 6 2.3. サンプルプログラムのインストール .......................................................................................................................... 8

3. Visual C++ によるステッピング・モータコントローラ制御............................................................................................. 9 3.1. ピンアサインメント .................................................................................................................................................... 10 3.2. DLLプロシージャ呼び出しによるプログラミング(概要).................................................................................. 12 3.3. ステッピング・モータコントローラボード制御概略 ............................................................................................. 13

4. チュートリアル...................................................................................................................................................................... 14 4.1. モータ制御.................................................................................................................................................................... 15

Step1.メインウィンドウ作成 ................................................................................................................................................ 15 Step2. DLLプロシージャ宣言 ............................................................................................................................................... 17 Step3.初期化処理と終了処理 ................................................................................................................................................ 21 Step4.動作モード設定とモータ制御 .................................................................................................................................... 26

4.2. カウンタ値取得............................................................................................................................................................ 32 Step1. カウント...................................................................................................................................................................... 32

4.3. 割り込み処理................................................................................................................................................................ 38 Step1. モータ停止割り込みによるコールバック処理 ....................................................................................................... 38 Step2. コンパレータ割り込みによるコールバック処理 ................................................................................................... 42

4.4. 同時起動........................................................................................................................................................................ 47 5. FbiMtr.DLLリファレンス ...................................................................................................................................................... 57

5.1. 型式別DLL関数サポート一覧 .................................................................................................................................... 57 【1】MtrOpen................................................................................................................................................................................... 58 【2】MtrClose .................................................................................................................................................................................. 58 【3】MtrGetDeviceInfo.................................................................................................................................................................... 58 【4】MtrSetBaseClock ..................................................................................................................................................................... 59 【5】MtrGetBaseClock .................................................................................................................................................................... 60 【6】MtrSetPulseOut........................................................................................................................................................................ 61 【7】MtrGetPulseOut ....................................................................................................................................................................... 62 【8】MtrSetLimitConfig................................................................................................................................................................... 63 【9】MtrGetLimitConfig.................................................................................................................................................................. 64 【10】MtrSetCounterConfig(※PCI-7204では使用できません。) ........................................................................................... 65 【11】MtrGetCounterConfig(※PCI-7204では使用できません。)........................................................................................... 66 【12】MtrSetComparator(※PCI-7204では使用できません。) ................................................................................................ 67 【13】MtrGetComparator(※PCI-7204では使用できません。)................................................................................................ 68 【14】MtrSetCLR(※PCI-7209のみ有効)................................................................................................................................. 69 【15】MtrGetCLR(※PCI-7209のみ有効) ................................................................................................................................ 70 【16】MtrSetAccCurve(※PCI-7204のみ有効)......................................................................................................................... 71 【17】MtrGetAccCurve(※PCI-7204のみ有効) ........................................................................................................................ 72 【18】MtrSetMotion......................................................................................................................................................................... 72 【19】MtrGetMotion........................................................................................................................................................................ 73 【20】MtrSetMotionLine(※PCI-7204では使用できません。) ................................................................................................ 73 【21】MtrGetMotionLine(※PCI-7204では使用できません。)................................................................................................ 74 【22】MtrStartMotion ...................................................................................................................................................................... 75 【23】MtrStopMotion....................................................................................................................................................................... 76 【24】MtrRestart(※PCI-7204では使用できません。)............................................................................................................. 76 【25】MtrSetSync ............................................................................................................................................................................ 77 【26】MtrGetSync............................................................................................................................................................................ 77 【27】MtrStartSync .......................................................................................................................................................................... 78 【28】MtrSingleStep ........................................................................................................................................................................ 78 【29】MtrChangeSpeed.................................................................................................................................................................... 79 【30】MtrReadSpeed(※PCI-7204では使用できません。) ...................................................................................................... 80 【31】MtrReadCounter .................................................................................................................................................................... 80 【32】MtrWriteCounter.................................................................................................................................................................... 81

Page 5: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

目次

© 2000 Interface Corporation. All rights reserved.

【33】MtrClearCounter .................................................................................................................................................................... 81 【34】MtrGetStatus .......................................................................................................................................................................... 82 【35】MtrOutputDO(※PCI-7208では使用できません。) ....................................................................................................... 84 【36】MtrInputDI(※PCI-7208では使用できません。)............................................................................................................ 84 【37】MtrOutputDO1(※PCI-7209のみ有効) ........................................................................................................................... 85 【38】MtrOutputDO2(※PCI-7209のみ有効) ........................................................................................................................... 85 【39】MtrOutputDO3(※PCI-7209のみ有効) ........................................................................................................................... 86 【40】MtrOutputDO4(※PCI-7209のみ有効) ........................................................................................................................... 86 【41】MtrOutputCLR(※PCI-7209のみ有効) ........................................................................................................................... 87 【42】MtrOutputSON(※PCI-7209のみ有効)........................................................................................................................... 87 【43】MtrSetEvent ........................................................................................................................................................................... 88 【44】MtrGetEvent .......................................................................................................................................................................... 88 【45】MtrSetEventMask .................................................................................................................................................................. 89 【46】MtrGetEventMask.................................................................................................................................................................. 89 【47】MtrReset ................................................................................................................................................................................ 89 【48】MtrOffInterLock .................................................................................................................................................................... 90 エラーコード一覧 ........................................................................................................................................................................... 91

5.2. 構造体一覧.................................................................................................................................................................... 92 【1】MTRDEVICE構造体 .............................................................................................................................................................. 92 【2】MTRORIGINALACC構造体.................................................................................................................................................. 92 【3】MTRMOTION構造体 ............................................................................................................................................................. 93 【4】MTRMOTIONLINE構造体 .................................................................................................................................................... 96 【5】MTREVENTREQ構造体 ........................................................................................................................................................ 97 【6】MTREVENTTABLE構造体.................................................................................................................................................... 98

5.3. Visual C++ 用定数一覧................................................................................................................................................ 99 技術資料紹介 ................................................................................................................................................................................. 101 参考文献 ......................................................................................................................................................................................... 102

Page 6: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

はじめに

© 2000 Interface Corporation. All rights reserved.

1

はじめに

平素は格別のご高配を賜り、厚く御礼申し上げます。本冊子は、はじめて弊社ステッピング・

モータ コントローラボードを利用し Visual C++にて制御プログラムの作成を行われる方を対象

に、製品の導入からプログラム作成までに関し説明したものです。

プログラム初心者の方が弊社製品をご利用いただき、また Visual C++にてプログラムの開発を

行われる際の手助けになればと考えております。

記述する内容に関しましては、基本的なことにとどまっております。また、弊社ホームページ

(http://www.interface.co.jp)では FAQ,製品マニュアル,および、本チュートリアル記載のサン

プルプログラム(BPC-0810)の公開を行っておりますので、こちらもあわせてご覧頂けますと、よ

りいっそうご理解を深めていただけるものと思います。

対応型式

PCI-7204 PCI-7208 PCI-7209 ※本冊子は上記の弊社製品型式のみに対応しています。

注意事項

本冊子では、使用する環境をWindows Me/98/95+Visual C++Ver. 5.0または Ver. 6.0を想定し記載

しております。

Windows 2000/NT等をご利用の場合、ボードのインストール方法等が本冊子に記載した内容と

は異なります。こちらに関しては、弊社製品マニュアル,オンラインドキュメントをご確認くだ

さい。

Page 7: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

ステッピング・モータ概要

© 2000 Interface Corporation. All rights reserved.

2

1. ステッピング・モータ概要

私たちの身の回りでは、その用途により数多くのモータが使われています。

電車やエレベータで使われている大型のパワー・モータから、カメラのズームレンズを動かす

為に使われるマイクロモータなどいろいろなものがあります。

そのような用途の中で、高精度な位置決めに使用されているのがステッピング・モータです。

ステッピング・モータは、パルス信号が入力されるごとに一定角度ずつ回転するモータで、「プ

リンタ」や工作機械における「X-Yテーブル」等に使用されています。

XY

ステッピングモータ

X-Yテーブル

ステッピングモータ

プリンタ

印字ヘッドプラテン

図 1-1

以下に、ステッピング・モータの代表的な用途を記載します。

FDD、HDD、プリンタ、記録計、プロッタ、ファクシミリ、カメラ、コピー機、タコメータ、パワーシート(自動

車等)、エアコン、冷蔵庫、ミシン、両替機(紙幣挿入部)、カードリーダ、パチンコ

1.1. ステッピング・モータの特徴

ステッピング・モータには以下のような特徴があります。

・ 検出器なしで位置制御が可能(制御のためのフィードバック信号を必要としない)

・ システム構成が簡素で高い信頼性を確保できる

・ ブレーキを使用せず停止位置が保持できる

・ ディジタル制御系との整合性がよい

・ 位置決め誤差が累積しない

Page 8: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

ステッピング・モータ概要

© 2000 Interface Corporation. All rights reserved.

3

1.2. ステッピング・モータの構造

図 1-2にステッピング・モータの内部構造を示した図を記載します。

シャフト

軸受ブラケット

ベアリング

ロータ・コア

コイル

フレーム

ステータ・コア

VR型ステッピング・モータ

図 1-2

ステッピング・モータは構造や動作原理により次の 3つに分けることができます。図 1-2は VR

型の内部構造です。

VR 型 ( Variable Reluctance type)

巻き線電流のみで励磁され、回転子(ロータ・コア)が突極性の電磁材料でできたもの。回転子が軟鋼でできており、これを固定子巻き線(コイル)でつくられる磁力によって引きつけ回転させる。

PM型(Permanent Magnet type) 永久磁石と巻き線電流で励磁され、永久磁石を固定子巻き線でつくられる磁力によって引きつけ回転させる。

HB型(Hybrid type) VR型、PM型を組み合わせた構造をもつもの。

コイル

ステータ・コア

シャフト

ロータ・コア

N

S

シャフト コイル

永久磁石

ステータ・コア

VR型 PM型

図 1-3

Page 9: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

ステッピング・モータ概要

© 2000 Interface Corporation. All rights reserved.

4

1.3. 分配回路(モータ・ドライバ)

ステッピング・モータはモータに電源を接続しただけでは動作しません。ステッピング・モー

タを動作させるには、モータ内のコイルに対して流す電流のシーケンス(順序)を決定する「分

配回路(モータ・ドライバ)」を必要とします。

弊社ステッピング・モータ コントロールボードも直接ステッピング・モータに信号を送るので

はなく、この分配回路(モータ・ドライバ)に信号を送り、モータの制御を行います。

ステッピング・モータ モータ・ドライバ

図 1-4

Page 10: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

ステッピング・モータ コントローラボードインストール

© 2000 Interface Corporation. All rights reserved.

5

2. ステッピング・モータ コントローラボードのインストール

作成するアプリケーションからステッピング・モータ コントローラボードの制御を行う場合、

当然のことながらアプリケーションを実行するパソコンにステッピング・モータ コントローラ

ボードが組み込まれていなければなりません。

ここではWindows Me/98/95環境における、弊社ステッピング・モータコントローラボードの

インストール方法を記載します。

Windows 2000/NTではインストール方法がここに記載する内容とはことなります。こちらに関し

ましては製品マニュアルをご確認ください。

2.1. ボードの設置

① ご購入いただいた弊社ボードを用意します。ボードの部品実装面にロータリスイッチ

(RSW1)があります。(図 2-1参照)

LED1

RSW1

CN1

PCIボード識別用ロータリスイッチ

図 2-1

弊社ではこのスイッチを「PCIボード識別用ロータリスイッチ」と称します。

弊社ステッピング・モータ コントローラボードは、1台のパソコンで同一型式のボードを

複数枚利用することが可能です。ロータリスイッチには「0」から「F」までの値が設定可

能となっていますが、複数枚のボードを利用する場合には、重複しない値を設定してくださ

い。この設定された番号を弊社では「ボード ID」または「ボード番号」と称します。

ご使用になる製品によっては、「PCIボード識別用ロータリスイッチ」の位置が左図とは異なります。詳細は製品マニュアルをご確認下さい。

Page 11: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

ステッピング・モータ コントローラボードインストール

© 2000 Interface Corporation. All rights reserved.

6

② PCI ボード識別用ロータリスイッチの設定が完了したら次はボードをパソコンの PCI スロ

ットに挿入します。パソコン本体の電源が “OFF” であることを確認し、電源ケーブルを

ACコンセントから外します。その後、外装カバー、スロットカバーを外します。

③ 拡張用スロットへボードを差し込みます。

④ しっかり差し込まれたことを確認したらボードパネルをビス止めしてください。

図 2-2

注意)・ボードの金メッキ端子部や、半田面には手を触れないでください。

・衝撃や振動、磁気や静電気の加わる場所での使用は行わないでください。

2.2. ドライバのインストール

⑤ 本体へ外装カバーをもと通り取り付け、電源ケーブルを ACコンセントに接続します。

その後パソコンを起動します。

⑥ Windows Me, Windows 98, Windows95が起動するとすぐにハードウェアウィザードが起動し

ます。デバイスドライバの自動検出を促すメッセージダイアログが表示されますので、「次

へ」をクリックします。

⑦ デバイスドライバが見つからない旨のダイアログが表示され、ドライバの「場所の指定」

をするように促されます。

⑧ 製品 CDを CD-ROMドライブに挿入します。

⑨ 「場所の指定」ボタンをクリックし、場所に製品 CD内の GPC7200¥Win95フォルダを指定

し、「OK」ボタンをクリックします。

⑩ ドライバが見つかった旨のダイアログが表示されます。「完了」ボタンをクリックします。

⑪ ファイルのコピーが始まります。「GPC-7200ラベルの付いたディスクを挿入して「OK」を

押してください。」のメッセージが表示されますので、製品 CDを挿入したまま「OK」を押

してください。

⑫ 「cp72xx.vxd が見つかりませんでした」と表示される場合は、ファイルのコピー元に製品

CDの GPC7200¥Win95フォルダを指定するとコピーが完了します。

Page 12: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

ステッピング・モータ コントローラボードインストール

© 2000 Interface Corporation. All rights reserved.

7

以上で、Windows Me, Windows 98, Windows95用のドライバのインストールは完了です。

ドライバのインストール完了後以降は、パソコン起動時に手順⑥のようにハードウェアウィザー

ドが起動することはありません。インストールを完了したら、リソース(I/Oアドレス,割り込

みレベル)の設定,競合の有無の確認を行ってください。

ここにボードが追加されます。

図 2-3

ドライバのインストールが正常に行われると、システムプロパティのデバイスマネージャに表

示されます。(図 2-3は PCI-7209を 1枚、インストールした場合です。マルチファンクションデ

バイスとして認識されるので、ボードアイコンが 2つ表示されます)

Page 13: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

ステッピング・モータ コントローラボードインストール

© 2000 Interface Corporation. All rights reserved.

8

2.3. サンプルプログラムのインストール

⑬ 製品 CDを CD-ROMドライブに挿入します。自動的にインストールプログラムが起動し、

以下の画面が表示されます。

(起動しない場合には、製品 CD内の SETUP.EXEを起動してください)

図 2-4

⑭ リストボックスよりインストールする型式を選択し、「インストール」ボタンをクリックす

ることにより、インストールプログラムが起動します。画面の指示に従ってインストール

を行ってください。また、型式を選択し、「Readme の表示」ボタンをクリックすることに

より、選択した型式の最新情報ドキュメント(README.HTM)が表示されます。

⑮ インストールが成功すると、「スタート」メニューに、「Interface GPC-7200」が追加されま

す。

Page 14: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

Visual C++によるステッピング・モータコントローラ制御

© 2000 Interface Corporation. All rights reserved.

9

3. Visual C++ によるステッピング・モータコントローラ制御

Visual C++より、ステッピング・モータコントローラボードを制御するには、DLLを利用しま

す。Visual C++では直接 I/Oやメモリにアクセスすることができません。したがって、ステッピ

ング・モータコントローラボードに対して直接的に信号を送ることができません。そこで、ボー

ドに対して直接的に信号を送るプログラム(DLL)から必要な関数(プロシージャ)を呼び出し、

この DLLを介してボートの制御を行います。

ステッピング・モータ

コントローラボード

仮想デバイスドライバ(CP72xx.VxD)

Win32 API

ダイナミックリンクライブラリ(FBIMTR.DLL)

Visual C++アプリケーション

出力

Windows Me/98/95の場合

図 3-1

Page 15: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

Visual C++によるステッピング・モータコントローラ制御

© 2000 Interface Corporation. All rights reserved.

10

3.1. ピンアサインメント

ステッピング・モータコントローラボードからモータ・ドライバへの制御信号の出力はボード

のコネクタ部分より行われますが、使用する製品型式によって、各ピンに割り当てられた役割が

異なります。配線時には、これらピンアサインメントをよく確認の上、配線してください。

以下、弊社 PCI-7209のピンアサインメントを一例として記載します。

495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596

1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748

NC:未接続

-COM-COM1+EL1+SD1ORG11MARK1CMP

NCNC

1OUT1-EL1-SD1INP

1ALM1CLR1SON

NC1DIR

+COM+COMDGND

NCTRIGIN1

TRIGOUT1TRIGOUT

NCRCOM1

INTLOCK1-COM-COM

1DI11DI21DI31DI4NC1A+1B+1Z+

1DO11DO21DO31DO4

NC1A-1B-1Z-+COM+COM

使用コネクタ:PCR-E96LMDC(本多通信工業)

-COM-COM2+EL2+SD2ORG12MARK2CMP

NCNC

2OUT2-EL2-SD2INP

2ALM2CLR2SON

NC2DIR+COM+COMDGND

NCTRIGOUT2

TRIGIN2NCNCNCNC-COM-COM

2DI12DI22DI32DI4NC2A+2B+2Z+

2DO12DO22DO32DO4

NC2A-2B-2Z-+COM+COM

図 3-2

●COMの対応 入出力信号はそれぞれ対応した COM及び GNDをご使用ください。

信 号 COM/GND 1+EL,1+SD 2+EL,2+SD 1-EL,1-SD 2-EL,2-SD 1ALM, 2ALM

1ORG1, 2ORG1 1MARK, 2MARK

1DI1~1DI4 2DI1~2DO4

+COM/-COM

1DIR, 1OUT 2DIR, 2OUT 1SON, 2SON 1CLR, 2CLR 1CMP, 2CMP 2DO1~2DO4 2DO1~2DO4

-COM

TRIGOUT TRIGIN1~2

TRIGOUT1~2

DGND (非絶縁 GND)

INTLOCK1 RCOM1

Page 16: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

Visual C++によるステッピング・モータコントローラ制御

© 2000 Interface Corporation. All rights reserved.

11

信号名

表 3-1

信号名 内 容 入出力方向 1+EL 1軸側正方向停止リミット入力 IN 1+SD 1軸側正方向減速リミット入力 IN 1-EL 1軸側逆方向停止リミット入力 IN 1-SD 1軸側逆方向減速リミット入力 IN 1ORG1 1軸側原点 IN 1INP 1軸側位置決め完了信号 IN 1MARK 1軸側位置決め開始信号 IN 1SON 1軸側サーボオン信号出力 OUT 1CLR 1軸側偏差カウンタクリア出力 OUT 1CMP 1軸側コンパレータ比較出力 OUT 1OUT 1軸側パルス出力 OUT 1ALM 1軸側アラーム信号 IN 1DIR 1軸側回転方向出力 OUT 1A+ 1軸側エンコーダ入力(A相+側) IN 1B+ 1軸側エンコーダ入力(B相+側) IN 1Z+ 1軸側エンコーダ入力(Z相+側) IN 1A- 1軸側エンコーダ入力(A相-側) IN 1B- 1軸側エンコーダ入力(B相-側) IN 1Z- 1軸側エンコーダ入力(Z相-側) IN 1DI1~1DI4 1軸側汎用入力 IN 1DO1~1DO4 1軸側汎用出力 OUT TRIGIN1 1軸側同時起動トリガ入力 IN TRIGOUT1 TRIGIN1のスルー出力 OUT 2+EL 2軸側正方向停止リミット入力 IN 2+SD 2軸側正方向減速リミット入力 IN 2-EL 2軸側逆方向停止リミット入力 IN 2-SD 2軸側逆方向減速リミット入力 IN 2ORG1 2軸側原点 IN 2INP 2軸側位置決め完了信号 IN 2MARK 2軸側位置決め開始信号 IN 2SON 2軸側サーボオン信号出力 OUT 2CLR 2軸側偏差カウンタクリア出力 OUT 2CMP 2軸側コンパレータ比較出力 OUT 2OUT 2軸側パルス出力 OUT 2ALM 2軸側アラーム信号 IN 2DIR 2軸側回転方向出力 OUT 2A+ 2軸側エンコーダ入力(A相+側) IN 2B+ 2軸側エンコーダ入力(B相+側) IN 2Z+ 2軸側エンコーダ入力(Z相+側) IN 2A- 2軸側エンコーダ入力(A相-側) IN 2B- 2軸側エンコーダ入力(B相-側) IN 2Z- 2軸側エンコーダ入力(Z相-側) IN 2DI2~2DI4 2軸側汎用入力 IN 2DO1~2DO4 2軸側汎用出力 OUT TRIGIN2 2軸側同時起動トリガ入力 IN TRGOUT2 TRIGIN2のスルー出力 OUT TRGOUT 同期タイミング信号 OUT

他製品型式に関しては、製品マニュアルか弊社製品カタログを参照してください。

Page 17: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

Visual C++によるステッピング・モータコントローラ制御

© 2000 Interface Corporation. All rights reserved.

12

3.2. DLLプロシージャ呼び出しによるプログラミング(概要)

Visual C++よりDLLプロシージャ呼び出しプログラミングを行うには、弊社、ステッピング・

モータ制御用ソフトウェア(FBIMTR.DLL)をダイナミックリンクし使用します。DLLとはダイ

ナミック リンク ライブラリ(Dynamic Link Library)の略でアプリケーションの実行時に動的

にリンクして利用できるプロシージャのライブラリです。プロシージャとは実行時に1つの単位

として処理されるコードの集まりを意味します。

Visual C++にて DLL プロシージャを利用するには、FBIMTR.LIBファイルをリンクして DLL

プロシージャのアドレスを指定します。(リンクの方法は後で記載しています)

Page 18: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

Visual C++によるステッピング・モータコントローラ制御

© 2000 Interface Corporation. All rights reserved.

13

3.3. ステッピング・モータコントローラボード制御概略

ステッピング・モータコントローラボードの制御を行う場合、基本的に下記の制御シーケンス

(順番)で行います。

ボード初期化

各種処理

終了処理

2

1

4

プログラム起動

パルス出力

プログラム終了

各種設定パルス出力、リミット信号動作パラメータの設定

3

図 3-3

① ボード初期化

Visual C++で作成されたアプリケーションがステッピング・モータコントローラボードへ

の操作を行う場合、まずアプリケーションは、ステッピング・モータコントローラボード

を利用可能な状態にする必要があります。

この処理がボードの初期化です。ボードの初期化を行うと、プログラムはボードへのアク

セスが可能となります。本処理が行われないとボードへのアクセスは行えません。

ステッピング・モータコントローラでは軸単位で初期化を行います。

② 各種設定

ボードのパルス出力、リミット信号、動作パラメータの各種設定を行います。

③ 各種処理

モータ・ドライバに制御信号を出力します。

④ 終了処理

ボードの使用終了を行うための手続きです。プログラム終了時に行います。

ステッピングモータコントローラでは軸単位で終了処理を行います。

Page 19: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(ステッピング・モータ)

© 2000 Interface Corporation. All rights reserved.

14

4. チュートリアル

ここでは、実際に弊社ステッピング・モータコントローラボードを用いて、ステッピング・モ

ータの制御を行います。本チュートリアルを行うにあたっては、以下のものが必要となります。

PCI-7209 (PCI-7204,7208)

1枚:ステッピング・モータコントローラボード

ECO-66xx 1本:96芯ハーフピッチコネクタ両端ケーブル TNS-9601 1個:96点裸線接続端子台 ステッピング・モータユニット※ 1個(ステッピング・モータ+モータドライバ)

※ 本チュートリアルではステッピング・モータユニットにオリエンタル・モータ社の EM569H-NB(モータ)と UDX5128N(ドライバ)を使用しています。

パソコンにステッピング・モータコントローラボード PCI-7209(または PCI-7204,7208)を実

装し、ケーブル(ECO-66xx)を用いてボードと 96 点裸線接続端子台(TNS-9601)を接続して

ください。 次に端子台、モータドライバ、ステッピング・モータ、電源の接続を行ってくださ

い。使用するステッピング・モータユニットによっては接続方法が異なる場合がありますが、以

下の接続例を参考に接続を行ってください。

※PCI-7208については接続が異なります。弊社製品マニュアルかカタログを参照してください。

モータ・ドライバとの接続例

1OUT(ピン番号 10)

1DIR(ピン番号 18)

TNS-9601

-COM

専用のモータドライバ

外部電源 DC+5V~DC+24V

+ -

+

+-

-

cw

ccw

フォトカプラ入力TTL入力方式

インタロックスイッチ

SW

RCOM1ピン番号 27)

INTLOCK1ピン番号 28)

ON

図 4-1

Page 20: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

15

4.1. モータ制御

ここでは、実際にステッピング・モータコントローラボードからモータ・ドライバに信号を送

りモータ・ドライバに接続されたステッピング・モータを作動させます。

OUTPUT モータ・ドライバ

ステッピング・モータ

端子台

図 4-2

Step1.メインウィンドウ作成

ここでは、これから作成するプログラムの画面作成を行います。

Visual C++を起動し新しいプロジェクトを作成します。

1. 「ファイル」メニューより「新規作成」を選択します。

2. 新規作成ダイアログが表示されますので、「プロジェクト」タブを選択します。

・ MFC AppWizard(exe)を選択し、「プロジェクト名」に“Motor”と記入します。

・ 「位置」には作業するフォルダを指定してください。その後「OK」をクリックします。

図 4-3

プロジェクト名を書き込みます MFC AppWizard (exe)を選択します

作業するフォルダを指定します

Page 21: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

16

3. 作成するアプリケーションの種類は「ダイアログベース」、リソースで使用する言語の指定

は「日本語」を選択し、「次へ」をクリックします。

図 4-4

4. ステップ 2、ステップ 3では「次へ」をクリックし、ステップ 4で「終了」をクリックします。

5. 新規プロジェクト情報というダイアログが表示されますので「OK」をクリックします。

図 4-5

ここまでで、新規プロジェクトの作成は完了です。

ダイアログベースを

選択します

Page 22: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

17

Step2. DLLプロシージャ宣言

DLL プロシージャを利用するには、FBIMTR.LIBファイルを使ってプロシージャの位置を

指定し、プロシージャの呼び出しに使う引数の識別を行わなければなりません。

DLLとはダイナミック リンク ライブラリ(Dynamic Link Library)の略でアプリケーショ

ンの実行時に動的にリンクして利用できるプロシージャのライブラリです。 そもそも、

Windowsアプリケーションプログラミングでは直接I/Oやメモリにアクセスすることが禁止

されています。言い換えれば、ステッピング・モータコントローラボードに対して直接的に

信号を送ることができません。そこで、ボードに対して直接的に信号を送るプログラム

(DLL)から必要なプロシージャを呼び出し、このDLLを介してボートの制御を行います。

ここで一度リンクさせたDLL プロシージャは、Visual C++ のプロシージャと同じようにコ

ードで呼び出すことが可能となります。

また、構造体や識別子はGPCMTR.Hに定義されています。(GPCMTR.Hファイルは

FBIMTR.Hファイルの中で宣言されています。)

ステッピング・モータコントローラボードを制御するには

・ FBIMTR.LIBファイルをリンクさせる。

・ FBIMTR.Hファイルをインクルードする。

という2つの作業が必要となるわけです。 1. プロジェクトに FBIMTR.LIB、FBIMTR.Hのパス設定を行います。 ・ 「ツール」→「オプション」を選択し、「ディレクトリ」タブを選択します。

図 4-6

Page 23: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

18

・ 表示するディレクトリを「インクルードファイル」にします。

・ 空白の部分をダブルクリックします。(下図参照)

図 4-7

・ ディレクトリの追加を行います。ディレクトリ先を<Program Files>¥Interface¥Gpc7200¥inc

に設定して「OK」をクリックします。(図4-8参照)

図 4-8

ダブルクリックします インクルードファイルにします

クリックします

incを選択します

Page 24: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

19

・ 図 4-9のようにディレクトリに追加されます。

図 4-9

・ 次に、表示するディレクトリを「ライブラリファイル」にします。

・ ディレクトリの追加を行います。ディレクトリ先を<Program Files>¥Interface¥Gpc7200¥lib

と設定して「OK」をクリックします。(図 4-10参照)

図 4-10

libを選択します

追加されたディレクトリ

Page 25: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

20

・ 図 4-11のようにディレクトリに追加されます。

図 4-11

2. プロジェクトに FBIMTR.LIBファイルをリンクします。

・ 「プロジェクト」→「設定」を選択し、「リンク」タブを選択します。

・ 設定の対象を「すべての構成」に設定し、「オブジェクト/ライブラリモジュール」に

“fbimtr.lib”と書き込み「OK」をクリックします。

図 4-11

“FBIMTR.LIB”,“FBIMTR.H”は、Setupでインストールされる<インストール先>¥lib,

<インストール先>¥incにあります。(インストール先:<Program Files>¥Interface¥Gpc7200)

FBIMTR.LIBをリンクします。すべての構成にします。

ライブラリファイルにします追加されたディレクトリ

Page 26: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

21

Step3.初期化処理と終了処理 ここでは、実際のプログラム作成を行う前に、ステッピング・モータコントローラボードの初期化

処理と終了処理に関して、知っておかなければならないこと、及び制約事項について記載します。

ステッピング・モータコントローラボードはボード単位でなく、軸単位での制御となるため、使

用する軸毎に初期化を行わなければなりません。軸毎の初期化は以下のコード(List 1-1)によ

り行います。

(List 1-1:軸の初期化) //軸の初期化を行います。(1軸目の初期化) HANDLE hDeviceHandle; //デバイスハンドル hDeviceHandle = MtrOpen(“FBIMC1”, MTR_FLAG_NORMAL);

このとき、FBIMC1 に設定する値は、使用する軸のデバイス名を指定します。デバイス名は、

「コントロールパネル」より「システム」を選択し「システムのプロパティ」の「デバイスマネ

ージャ」タブを選択すると確認できます。

図 4-13

※ PCI-7209は 2軸制御の為、1軸目をオープンしたい場合は、AXIS:1のデバイス名

2軸目をオープンしたい場合は AXIS:2の部分のデバイス名を設定します。

ここにデバイス名が表示されます

Page 27: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

22

ボードの初期化はMtrOpen関数により行います。

また、アプリケーションの終了時、もしくは処理の終了時に、オープンした軸に対して必ず終

了処理を行わなければなりません。軸の終了処理は以下のコード(List 1-2)により行います。

(List 1-2:軸の終了処理) //終了処理 INT nRet; //関数の実行結果 nRet = MtrClose(hDeviceHandle);

軸の終了処理は MtrClose 関数より行います。ここで、注意しなければならないのは、設定す

る引数の hDeviceHandleです。hDeviceHandle には軸の初期化の際に取得した、MtrOpen関数の

戻り値を指定します。MtrOpen 実行時、その戻り値である hDeviceHandle には有効なハンドル

(番号)が格納されています(List 1-2参照)。 ハンドルとは使用するデバイスの接続に関する

情報が格納されたメモリ領域を、識別するための値を示します。

プログラム作成時、終了処理を行うデバイスの hDeviceHandle の値が、MtrOpen 実行時に取得

された値となるように、MtrOpenとMtrCloseは必ず組になるよう注意してください。(図 4-14)

MtrOpen

MtrClose

ハンドル

図 4-14

使用するボードのデバイス名を指定します。

「使用例」

HANDLE hDeviceHandle;

hDeviceHandle = MtrOpen(“FBIMC1”, MTR_FLAG_NORMAL);

使用する軸のデバイス名を指定します。

デバイスハンドルを格納する HANDLE型の変数を指定します。

同期制御を行うフラグを指定します。

「使用例」

nRet = MtrClose(hDeviceHandle);

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

Page 28: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

23

では実際に軸の初期化と終了を行うプログラムを作成します。

1. 表示メニューから ClassWizardを起動する。

2. 「メッセージマップ」タブを選択し、以下のように設定します。(図 4-15参照)

プロジェクト Motor

クラス名 CMotorDlg

オブジェクト CMotorDlg

メッセージ WM_CREATE

図 4-15

3. 「関数の追加」をクリックします。

4. 同様にメッセージに「WM_DESTROY」を選択し、「関数の追加」をクリックします。

5. 「OK」をクリックし、Class Wizardを終了します

6. ワークスペースの「FileView」タブをクリックし、「Source Files」フォルダを展開します。

「MotorDlg.cpp」をダブルクリックしてファイルを開き、(List 1-3)の網掛け部分を記述します。

関数の追加をクリックします。WM_CREATEを指定します。CMotorDlgを指定します。

CMotorDlgを指定します。Motorを指定します。

Page 29: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

24

(List 1-3:MotorDlg.cppの変更コード) // Motor.cpp : アプリケーション用クラスの定義を行います。 // #include "stdafx.h" #include "Motor.h" #include "MotorDlg.h" #include "fbimtr.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

7. 「Header Files」フォルダを展開し「MotorDlg.h」をダブルクリックし、MotorDlg.h に(List 1-4)

の網掛け部分を追加します。

(List 1-4:MotorDlg.hの変更コード) // MotorDlg.h : ヘッダー ファイル //

#if !defined(AFX_MOTORDLG_H__714D8487_BBB4_11D4_9807_00004CBDFA8C__INCLUDED_) #define AFX_MOTORDLG_H__714D8487_BBB4_11D4_9807_00004CBDFA8C__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 ///////////////////////////////////////////////////////////////////////////// // CMotorDlg dialog class CMotorDlg : public CDialog { // 構築 public: CMotorDlg(CWnd* pParent = NULL); // 標準のコンストラクタ HANDLE hDeviceHandle; //デバイスハンドル // Dialog Data //{{AFX_DATA(CMotorDlg) enum { IDD = IDD_MOTOR_DIALOG }; // メモ: この位置に ClassWizard によってデータ メンバが追加されます。 //}}AFX_DATA

8. ワークスペースの「ClassView」タブをクリックし、「CMotorDlg」フォルダを展開します。

9. フォルダの下の「OnCreate」をダブルクリックし OnCreate関数に(List 1-5)の網掛け部分

を追加します。

Page 30: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

25

(List 1-5:CMotorDlgクラスの OnCreate関数のコード) int CMotorDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; //ボードの初期化処理 hDeviceHandle = MtrOpen("FBIMC1", MTR_FLAG_NORMAL); if(hDeviceHandle == INVALID_HANDLE_VALUE){ AfxMessageBox("デバイスのオープンに失敗しました"); return -1; } return 0; }

10. 同様に、「OnDestroy」をダブルクリックし、OnDestroy関数に(List 1-6)の網掛け部分を追

加します。

(List 1-6:CMotorDlgクラスの OnDestory関数のコード) void CMotorDlg::OnDestroy() { CDialog::OnDestroy(); INT nRet; //関数の実行結果 //終了処理 if(hDeviceHandle != INVALID_HANDLE_VALUE){ //オープンできていれば nRet = MtrClose(hDeviceHandle); if(nRet != MTR_ERROR_SUCCESS){ AfxMessageBox("デバイスのクローズに失敗しました"); } } }

プログラムの入力が終わったら、保存した後、プログラムを実行してみてください。何もエラー

が表示されなければ、軸の初期化及び終了処理部分のプログラムは完成です。

Page 31: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

26

Step4.動作モード設定とモータ制御 弊社ステッピング・モータコントローラボードには、用途に応じた4つ動作のモードが準備さ

れています。それぞれのモードにより以下の動作を行います。 連続動作 リミット信号,停止命令が有効になるまで連続してパルスを

出力し、モータを連続動作させます。 原点復帰動作 原点信号、リミット信号、停止命令が有効になるまで連続し

てパルスを出力し、モータを連続動作させます。 PTP【Point To Point】動作 指定したパルス数だけパルスを出力し、モータをパルス数分

移動させます。指定パルス数の範囲はボードによって異なります。

直線補間動作 2つのモータを使用し制御対象物を X-Y 平面上で移動させる場合、移動の軌跡がコントローラによって補われ動作します。(PCI-7208,7209のみ有効)

開始点 X軸

Y軸

目標点

では、実際にプログラムの作成を行います。 1. ResourceViewを表示し、Dialogフォルダを展開して「IDD_MOTOR_DIALOG」をダブルク

リックします。

図 4-16

ダブルクリックします

Page 32: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

27

2. ダイアログボックスの必要のないボタン、スタティックテキストを削除します。

「OK」ボタン、「キャンセル」ボタン、「TODO:ダイアログのコントロールをここに配置」

というスタティックテキストをそれぞれ選択し、Deleteキーを押してください。

図 4-17

3. モータ駆動を行う為のピクチャボックスの設定を行ないます。

・コントロールから「ボタン」を選択し、ダイアログにボタンを貼りつけます。

図 4-18

それぞれ選択して Deleteキーで削除します

ボタンを選択します。 ここにボタンを貼り付けます。

Page 33: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

28

・配置したボタンにカーソルを合わせ、右クリック→「プロパティ」を選択し、以下のよう設

定します。

ID IDC_PULSEOUT

キャプション モータ駆動

図 4-19

4. メンバ関数”OnPulseOut”を作成します。

・さきほど作成した「モータ駆動」ボタンにカーソルを合わせ、右クリック→「Class Wizard」

を選択します。「メッセージマップ」タブを選択し、以下のように設定した後、「関数の追加」

をクリックします。

プロジェクト Motor

クラス名 CMotorDlg

オブジェクト IDC_PULSEOUT

メッセージ BN_CLICKED

・メンバ関数名を決定するダイアログが表示されますので、”OnPulseOut”となっている事を確

認し、「OK」をクリックします。その後 ClassWizardを終了します。

・OnPulseOut関数に(List 1-7)の網掛け部分を記述します(ワークスペースの ClassView

を表示し、CMotorDlgクラスを展開して OnPulseOut()をダブルクリックすると OnPulseOut

関数が編集できる位置にカーソルがジャンプしてくれます)。プログラムリストの説明につ

いては後述します。

IDC_PULSEOUTにします。 モータ駆動にします。

Page 34: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

29

(List 1-7:CMotorDlgクラスの OnPulseOut関数のコード) void CMotorDlg::OnPulseout() { INT nRet; //関数の実行結果 MTRMOTION Motion; //動作パラメータ情報構造体 //クロックの設定 //PCI-7204の場合は以下を設定します //nRet = MtrSetBaseClock(hDeviceHandle, MTR_CLOCK_1M); //PCI-7208,7209の場合は以下を設定します nRet = MtrSetBaseClock(hDeviceHandle, 2500); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox ("基準クロックの設定に失敗しました"); //パルス出力設定(パルス出力モード, 負論理, 2パルス出力に設定) nRet = MtrSetPulseOut(hDeviceHandle, MTR_METHOD, 0); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox ("パルス出力設定に失敗しました"); //PTP動作設定 Motion.dwMode = MTR_ACC_SIN; //S字加減速 Motion.dwLowSpeed = 100; //起動時速度 100Hz Motion.dwSpeed = 1000; //移動速度 1000Hz Motion.dwAcc = 500; //加速パルス数 500 パルス/ms Motion.dwDec = 500; //減速パルス数 500 パルス/ms Motion.dwSSpeed = 300; //S字加減速区間速度 300Hz Motion.nStep = 1000; //移動パルス数 1000パルス Motion.nReserved = 0; //拡張

//PTP動作設定 nRet = MtrSetMotion(hDeviceHandle, MTR_PTP, &Motion); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("動作設定に失敗しました"); else{ //PTP起動 nRet = MtrStartMotion(hDeviceHandle, MTR_PTP); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("PTP起動に失敗しました"); } }

以上で、プログラムの作成は完了です。

では、保存した後実行してください。

「モータ駆動」ボタンをクリックしてください。ステッピング・モータコントロールボードより

モータ・ドライバにパルス信号が送られ、モータの軸が回転します。

では、入力したプログラムを読み取ってみましょう。

まずプログラムは速度分解能(PCI-7204の場合は基準クロック)の設定を行っています。速度

分解能とは、速度をどれだけ細かく分解するかを表わすもので、この値が大きい程速度の範囲を

細かく設定できますが、速い速度は設定できません。逆にこの値が小さいと速度の範囲はおおま

かにしか設定できませんが、速い速度での設定が可能となります。ここに設定した値により、設

定可能な軸の速度範囲が異なってきます。

Page 35: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

30

詳しくは巻末の「FbiMtr.DLL リファレンス」のMtrSetBaseClockの項目を参照してください。

速度分解能(または基準クロック)の設定にはMtrSetBaseClock関数を使用します。

次にプログラムはパルス出力の設定を行っています。使用するモータ・ドライバに合わせ出力

パルスの仕様を設定しています。本チュートリアルで使用しているモータ・ドライバは負論理,

2パルス方式で動作するので、サンプルプログラムではそのように設定しています。

パルス出力の設定にはMtrSetPulseOut関数を使用します。

第 2引数に設定する項目を指定し、第 3引数に設定する値を指定します。

次にプログラムは動作の設定を行っています。動作の設定にはMtrSetMotion関数を使用します。

本チュートリアルでは PTP動作の設定を行っています。

「使用例」

nRet = MtrSetBaseClock(hDeviceHandle, 2500);

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

速度分解能、基準/クロックを指定します。

「使用例」

nRet = MtrSetPulseOut(hDeviceHandle, MTR_METHOD, 0);

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

設定する項目を指定します。

設定値を指定します。

「使用例」

nRet = MtrSetMotion(hDeviceHandle, MTR_PTP, &Motion);

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

動作モードを指定します。

動作パラメータ設定用構造体へのポインタを指定します。

Page 36: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ制御)

© 2000 Interface Corporation. All rights reserved.

31

動作モードのパラメータは動作パラメータ設定用構造体(MTRMOTION構造体)に設定します。

(List 1-7)ではMTRMOTION構造体をMotion変数に定義しパラメータの設定を行っています。

Motion.dwMode = MTR_ACC_SIN; //S字加減速 Motion.dwLowSpeed = 100; //起動時速度 100Hz Motion.dwSpeed = 1000; //移動速度 1000Hz Motion.dwAcc = 500; //加速パルス数 500 パルス/ms Motion.dwDec = 500; //減速パルス数 500 パルス/ms Motion.dwSSpeed = 300; //S字加減速区間速度 300Hz Motion.nStep = 1000; //移動パルス数 1000パルス

設定項目の詳細に関しては、巻末の「FbiMtr.DLL リファレンス」の MTRMOTION 構造体の

項目を参照してください。

最後にプログラムはモータ・ドライバに対し制御信号を出力しモータを起動しています。動作

の起動にはMtrStartMotion関数を使用します。

「使用例」

nRet = MtrStartMotion(hDeviceHandle, MTR_PTP);

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

起動する動作を指定します。

Page 37: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(カウンタ値取得)

© 2000 Interface Corporation. All rights reserved.

32

4.2. カウンタ値取得

ステッピング・モータコントローラボードはボード内に出力したパルスの情報を保持していま

す。このカウンタ値を利用するとモータの分解能からモータの軸がどれだけ回転したかといった

位置情報を検知することが可能です。ここでは、このカウンタ値を取得するプログラムの作成を

行います。

図 4-20

Step1. カウント

では、§4.1で作成したダイアログを利用し、実際にプログラムの作成を行います。

1. コントロールから「エディットボックス」を選択し、作成したダイアログ

「IDD_MOTOR_DIALOG」に張りつけます。

図 4-21

エディットボックスを貼り付けます。

エディットボックスを選択します。

回転 1 2 3

Page 38: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(カウンタ値取得)

© 2000 Interface Corporation. All rights reserved.

33

2. 配置したエディット ボックスにカーソルを合わせ、右クリック→「プロパティ」を選択し、

以下のように設定します。

ID IDC_PULSECOUNT

図 4-22

3. 「スタイル」タブを選択し、テキストの配置を「右端」に変更し、「複数行」にチェックを

入れます。

図 4-23

4. 次にタイマ関数の設置を行うために、「表示」メニューから「ClassWizard」を起動します。

「メッセージマップ」タブを選択して以下のように設定し、「関数の追加」をクリックします。

プロジェクト Motor

クラス名 CMotorDlg

オブジェクト CMotorDlg

メッセージ WM_TIMER

IDC_PULSECOUNTにします。

複数行にチェックを入れます。

右端にします。

Page 39: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(カウンタ値取得)

© 2000 Interface Corporation. All rights reserved.

34

5. 「メンバ変数」タブを選択して以下のように設定し、「変数の追加」をクリックします。

プロジェクト Motor

クラス名 CMotorDlg

図 4-24

6. 「メンバ変数の追加」ダイアログで以下のように設定し、「OK」をクリックします。

メンバ変数 m_count

カテゴリ 値

変数のタイプ int

図 4-25

変数の追加をクリックします。

OK をクリックします。

Page 40: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(カウンタ値取得)

© 2000 Interface Corporation. All rights reserved.

35

7. 「ClassWizard」のダイアログに戻ったら「OK」をクリックし、「ClassWizard」を終了しま

す。

8. ワークスペースの「FileView」タブを選択し、「Header Files」フォルダを展開します。

9. 「MotorDlg.h」をダブルクリックし、「CMotorDlg」クラスに(List 2-1)の網掛け部分を追

加します。

(List 2-1:MotorDlg.hの追加コード) class CMotorDlg : public CDialog { // 構築 public: CMotorDlg(CWnd* pParent = NULL); // 標準のコンストラクタ HANDLE hDeviceHandle; //デバイスハンドル UINT m_timerID; //タイマ識別変数 // Dialog Data //{{AFX_DATA(CMotorDlg) enum { IDD = IDD_MOTOR_DIALOG }; int m_count; //}}AFX_DATA

(List 2-1)ではMotorDlg.hの CMotorDlgクラスの宣言に、タイマを識別する UINT型の変数

を追加しています。

10. ワークスペースの「ClassView」タブを選択し、「CMotorDlg」フォルダを展開します。

11. 「CMotorDlg」フォルダの下の「OnCreate」をダブルクリックし OnCreate関数に(List 2-2)

の網掛け部分を追加します。

(List 2-2:CMotorクラスの OnCreate関数の追加コード) int CMotorDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; //ボードの初期化処理 hDeviceHandle = MtrOpen("FBIMC1", MTR_FLAG_NORMAL); if(hDeviceHandle == INVALID_HANDLE_VALUE){ AfxMessageBox("デバイスのオープンに失敗しました"); return 0; } m_timerID=SetTimer(1, 10, NULL); // タイマの作成 if(m_timerID == 0) AfxMessageBox("タイマの作成に失敗しました", MB_ICONSTOP); return 0; }

Page 41: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(カウンタ値取得)

© 2000 Interface Corporation. All rights reserved.

36

12. 同様に、「OnDestroy」をダブルクリックし、OnDestroy関数に(List 2-3)の網掛け部分を追

加します。

(List 2-3:CMotorクラスの OnDestroy関数の追加コード) void CMotorDlg::OnDestroy() { CDialog::OnDestroy(); INT nRet; //関数の実行結果 //終了処理 if(hDeviceHandle != INVALID_HANDLE_VALUE){ //オープンできていれば nRet = MtrClose(hDeviceHandle); if(nRet != MTR_ERROR_SUCCESS){ AfxMessageBox("デバイスのクローズに失敗しました"); } } if(m_timerID != 0) // もしタイマがあれば KillTimer(m_timerID); }

(List 2-2, 2-3)ではダイアログの作成時にタイマの作成を行い、ダイアログの破棄と同時にタイ

マの終了を行っています。

13. 先ほど追加した「OnTimer」をダブルクリックし、OnTimer関数に(List 2-4)の網掛け部分

を記述します。

9行目の UpdateData関数はダイアログ ボックスの初期化を行っています。これによりエデ

ィットボックスのカウンタ値が更新されます。

(List 2-4:CMotorクラスの OnTimer関数のコード) void CMotorDlg::OnTimer(UINT nIDEvent) { INT nRet; //関数の実行結果 // TODO:この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください if(nIDEvent == m_timerID){ nRet = MtrReadCounter(hDeviceHandle, MTR_COUNTER, &m_count); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("カウンタ値の取得に失敗"); UpdateData(FALSE); // 表示するカウンタ値の更新 } CDialog::OnTimer(nIDEvent); }

以上で、プログラムの作成は完了です。保存した後実行してみてください。

「モータ駆動」ボタンをクリックすると、その移動量(出力パルス)がダイアログ上に配置した

エディットボックス(IDC_PULSECOUNT)に表示されます。

Page 42: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(カウンタ値取得)

© 2000 Interface Corporation. All rights reserved.

37

では、入力したプログラムを読み取ってみましょう。

ここではボードに保持されるカウンタの値の取得を行っています。カウンタ値の取得には

MtrReadCounter関数を使用します。

第 2引数の読み取るカウンタの指定ですが、出力パルスの「カウンタ値」以外にも、PCI-7208,7209

では、「エンコーダカウンタ値」、「残りパルス数」を指定することができます。

いずれの値も第 3引数の変数に格納されます。

「使用例」

nRet = MtrReadCounter(hDeviceHandle, MTR_COUNTER, &nPos);

ボードのオープン時に取得したデバイスハンドルを指定します。

読み取るカウンタを指定します。

関数が失敗するとエラーコードが格納されます。

読み取ったカウンタ値を格納する変数のポインタを指定します。

Page 43: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ停止割り込み処理)

© 2000 Interface Corporation. All rights reserved.

38

4.3. 割り込み処理

ここでは、割り込み処理の方法に関し記載します。フォアグラウンドでプログラムが実行中、

バックグランドにて非同期にボードの状態を監視し、ボートが指定した条件に至った場合、割り

込みを発生させフォアグラウンドのプログラムを停止し(割り込み)ユーザーに知らせる方法を

記載します。

Step1. モータ停止割り込みによるコールバック処理

ここでは、§4.2で作成したモータ駆動のプログラムに、モータ停止割り込みが発生したときに

呼び出される処理の追加を行います。

1. ワークスペースの「FileView」タブを選択し、「Source Files」フォルダを展開します。

2. 「MotorDlg.cpp」をダブルクリックし(List 3-1)の網掛け部分を追加します。

(List 3-1:MotorDlg.cppのグローバル関数宣言のソースコード) // MotorDlg.cpp : インプリメンテーション ファイル // #include "stdafx.h" #include "Motor.h" #include "MotorDlg.h" #include "fbimtr.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // コールバックで使用する構造体 MTREVENTTABLE Mask; // イベントマスクを格納する構造体 MTREVENTREQ Event; // イベントの設定を格納する構造体 // コールバックイベントの関数 void CALLBACK fnEvent(MTREVENTTABLE, DWORD); // 停止割り込み用コールバック関数

3. ワークスペースの「ClassView」タブを選択し、「CMotorDlg」フォルダを展開します。

4. 「CMotorDlg」フォルダの下の「OnCreate」をダブルクリックし、OnCreate関数に(List 3-2)

の網掛け部分を追加します。

Page 44: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ停止割り込み処理)

© 2000 Interface Corporation. All rights reserved.

39

(List 3-2:OnCreate関数の割り込みイベント設定のソースコード) int CMotorDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { INT nRet; //関数の実行結果 if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; //ボードの初期化処理 hDeviceHandle = MtrOpen("FBIMC1", MTR_FLAG_NORMAL); if(hDeviceHandle == INVALID_HANDLE_VALUE){ AfxMessageBox("デバイスのオープンに失敗しました"); return -1; } m_timerID = SetTimer(1, 10, NULL); // タイマの作成 if(m_timerID == 0) AfxMessageBox("タイマーの作成に失敗しました", MB_ICONSTOP); // 割り込みマスクの設定をします Mask.dwPulseOut = 0x01; // パルス出力割り込み設定 Mask.dwCounter = 0x00; // カウンタ割り込み設定 Mask.dwComparator = 0x00; // コンパレータ割り込み設定 Mask.dwSignal = 0x00; // 外部信号割り込み Mask.dwReserved = 0x00; // 将来拡張用 nRet = MtrSetEventMask( hDeviceHandle, &Mask ); // 割り込みマスクの設定 if (nRet != MTR_ERROR_SUCCESS) AfxMessageBox("割り込みマスクの設定に失敗しました"); // 割り込みイベントの設定をします Event.hWnd = NULL; // メッセージ送出ウィンドウハンドル設定 Event.uPulseOut = WM_NULL; // パルス出力割り込みメッセージ設定 Event.uCounter = WM_NULL; // カウンタ割り込みメッセージ設定 Event.uComparator = WM_NULL; // コンパレータ割り込みメッセージ設定 Event.uSignal = WM_NULL; // 外部信号メッセージ設定 Event.uReserved = WM_NULL; // 将来拡張用 Event.lpCallBackProc = (PLPMTRCALLBACK)fnEvent; // ユーザ・コールバック関数アドレス設定 Event.dwUser = 0; // ユーザ・コールバック関数へ引き渡すユーザ・データ設定 nRet = MtrSetEvent( hDeviceHandle, &Event ); // 割り込みイベントの設定 if (nRet != MTR_ERROR_SUCCESS) AfxMessageBox("割り込みイベントの設定に失敗しました"); return 0; }

5. 次に、停止割り込みによるコールバックイベントの関数(List 3-3)の網掛け部分を OnTimer

関数の下に追加します。

Page 45: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ停止割り込み処理)

© 2000 Interface Corporation. All rights reserved.

40

(List 3-3:コールバック関数のソースコード) void CMotorDlg::OnTimer(UINT nIDEvent) { INT nRet; //関数の実行結果 // TODO:この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください if(nIDEvent == m_timerID){ nRet = MtrReadCounter(hDeviceHandle, MTR_COUNTER, &m_count); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("カウンタ値の取得に失敗"); UpdateData(FALSE); } CDialog::OnTimer(nIDEvent); } void CALLBACK fnEvent(MTREVENTTABLE EventInfo, DWORD dwUser) { // モータ停止割り込みによるユーザ・コールバック関数 AfxMessageBox("モータ停止!"); }

以上で、プログラムの作成は完了です。 では、保存した後実行してください。

「モータ駆動」ボタンをクリックしてください。ステッピング・モータコントロールボードより

モータ・ドライバにパルス信号が送られ、モータの軸が回転します。指定パルス分軸が回転する

と軸の回転が停止しますが、それと同時に以下のメッセージボックスが表示されます。

図 4-26

では、入力したプログラムを読み取ってみましょう。 (List 3-1)ですが、割り込みイベントに使用するグローバル関数と構造体の宣言を行っています。 (List 3-2)ですが、初期化処理の後、割り込み発生条件の設定と割り込み信号を取得した際に実

行するコールバックの定義を行っています。この定義によりボードへの割り込みを割り込みイベ

ントとしてとらえることが可能です。 (List 3-3)ですが、割り込みが発生した場合に実行されるコールバック関数を記述しています。

割り込みが発生した場合、この関数が呼び出され処理されます。

Page 46: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(モータ停止割り込み処理)

© 2000 Interface Corporation. All rights reserved.

41

本サンプルではパルスの出力が停止(モータの軸が停止)した場合、それをイベントとして定

義しています。割り込みイベントの定義には、MtrSetEventMask関数,MtrSetEvent関数を使用

します。MtrSetEventMask関数で割り込みイベントの有効/無効を定義し、MtrSetEvent関数に

て実際のイベントを定義しています。

コールバックルーチンはMtrSetEvent関数の呼び出しを行うプロジェクト内の標準モジュール

の中に記述しなければなりません。

また、MtrSetEventMask関数、MtrSetEvent関数、ともにパラメータを構造体にて渡していま

す。それぞれ、MTREVENTTABLE構造体、MTREVENTREQ構造体を使用しています。それぞ

れの構造体の設定内容詳細に関しましては、巻末の「FbiMtr.DLL リファレンス」を参照くださ

い。

MTREVENTREQ構造体のメンバで lpCallBaclProcがありますが、ここにはコールバック関数の

アドレスを指定します。

ここまでが、モータ停止割り込みによるコールバック処理のプログラム例です。

「使用例」

nRet = MtrSetEvent(hDeviceHandle, &pEvent);

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

コールバック関数の指定及びコールバック関数に渡す、任意の値を格納した構造体のポインタを指定します。

「使用例」

nRet = MtrSetEventMask(hDeviceHandle, &Mask);

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。 イベントのマスクデー

タを格納した構造体のポインタを指定します。

Page 47: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(コンパレータ割り込み処理)

42

© 2000 Interface Corporation. All rights reserved.

Step2. コンパレータ割り込みによるコールバック処理

次に、コンパレータ割り込みによるコールバック処理を行うプログラムを作成します。

ここでは、§4.2で作成したモータ駆動のプログラムに、コンパレータ割り込みが発生したとき

に呼び出される処理の追加を行います。(※モータ停止割り込みの処理(Step1)を追加する前の

ソースコードを用意してください。)

※ コンパレータ割り込みは PCI-7208,7209でのみサポートされている機能です。

1. ワークスペースの「FileView」タブを選択し、「Source Files」フォルダを展開します。

2. 「MotorDlg.cpp」をダブルクリックし(List 3-4)の網掛け部分を追加します。

(List 3-4:MotorDlg.cppのグローバル関数宣言のソースコード) // MotorDlg.cpp : インプリメンテーション ファイル // #include "stdafx.h" #include "Motor.h" #include "MotorDlg.h" #include "fbimtr.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // コールバックで使用する構造体 MTREVENTTABLE Mask; // イベントマスクを格納する構造体 MTREVENTREQ Event; // イベントの設定を格納する構造体 // コールバックイベントの関数 void CALLBACK CmpEvent(MTREVENTTABLE, DWORD); // コンパレータ割り込み用コールバック関数

3. ワークスペースの「ClassView」タブを選択し、「CMotorDlg」フォルダを展開します。

4. 「CMotorDlg」フォルダの下の「OnCreate」をダブルクリックし、OnCreate関数に(List3-5)

の網掛け部分を追加して、コンパレータ割り込みの設定を行います。

(List 3-5:コンパレータ割り込み設定のソースコード) int CMotorDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { INT nRet; //関数の実行結果 if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; //ボードの初期化処理 hDeviceHandle = MtrOpen("FBIMC1", MTR_FLAG_NORMAL);

Page 48: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(コンパレータ割り込み処理)

© 2000 Interface Corporation. All rights reserved.

43

if(hDeviceHandle == INVALID_HANDLE_VALUE){ AfxMessageBox("デバイスのオープンに失敗しました"); return -1; } m_timerID=SetTimer(1, 10, NULL); // タイマの作成 if(m_timerID == 0) AfxMessageBox("タイマーの作成に失敗しました", MB_ICONSTOP); // コンパレータの設定をします。 nRet = MtrSetComparator(hDeviceHandle, MTR_COMP_CONFIG1, MTR_EQ_COMP); // 比較条件1を"="に設定 if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("比較条件 1の設定に失敗しました"); // プリセットに 2500を設定 nRet = MtrSetComparator(hDeviceHandle, MTR_PRESET1, 2500); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("PRESET1の設定に失敗しました"); nRet = MtrSetComparator(hDeviceHandle, MTR_COMP_OBJECT1, MTR_PRESET1); // 比較対象 1をプリセットに設定 if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("比較対象 1の設定に失敗しました"); nRet = MtrSetComparator(hDeviceHandle, MTR_COMP_OBJECT2, MTR_COUNTER); // 比較対象 2を内部パルスカウンタに設定 if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("比較対象 2の設定に失敗しました"); //割り込みマスクの設定をします Mask.dwPulseOut = 0x00; // パルス出力割り込み設定 Mask.dwCounter = 0x00; // カウンタ割り込み設定 Mask.dwComparator = 0x01; // コンパレータ割り込み設定 Mask.dwSignal = 0x00; // 外部信号割り込み Mask.dwReserved = 0x00; // 将来拡張用 nRet = MtrSetEventMask( hDeviceHandle, &Mask ); // 割り込みマスクの設定 if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("割り込みマスクの設定に失敗しました"); //割り込みイベントの設定をします Event.hWnd = NULL; // メッセージ送出ウィンドウハンドル設定 Event.uPulseOut = WM_NULL; // パルス出力割り込みメッセージ設定 Event.uCounter = WM_NULL; // カウンタ割り込みメッセージ設定 Event.uComparator = WM_NULL; // コンパレータ割り込みメッセージ設定 Event.uSignal = WM_NULL; // 外部信号メッセージ設定 Event.uReserved = WM_NULL; // 将来拡張用 Event.lpCallBackProc = (PLPMTRCALLBACK) CmpEvent; // ユーザ・コールバック関数アドレス設定 Event.dwUser = 0; // ユーザ・コールバック関数へ引き渡すユーザ・データ設定 nRet = MtrSetEvent( hDeviceHandle, &Event ); // 割り込みイベントの設定 if (nRet != MTR_ERROR_SUCCESS) AfxMessageBox("割り込みイベントの設定に失敗しました"); return 0; }

網掛け部分の設定を OnCreate関数に追加します。

Page 49: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(コンパレータ割り込み処理)

© 2000 Interface Corporation. All rights reserved.

44

5. 次に、コンパレータ割り込みによるコールバックイベントの関数(List 3-6)の網掛け部分

を OnTimer関数の下に追加します。

(List 3-6:コールバック関数のソースコード) void CMotorDlg::OnTimer(UINT nIDEvent) { INT nRet; //関数の実行結果 // TODO:この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください if(nIDEvent == m_timerID){ nRet = MtrReadCounter(hDeviceHandle, MTR_COUNTER, &m_count); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("カウンタ値の取得に失敗"); UpdateData(FALSE); } CDialog::OnTimer(nIDEvent); } void CALLBACK CmpEvent(MTREVENTTABLE EventInfo, DWORD dwUser) { // コンパレータ一致割り込みによるユーザ・コールバック関数 AfxMessageBox("コンパレータ一致割り込み発生!"); }

6. 最後に、「OnPulseout」をダブルクリックしてソースを開き、移動パルス数の設定値を 5000

に変更します。(List 3-7)の網掛け部分を変更してください。

(List 3-7:移動パルス数の設定変更コード) void CMotorDlg::OnPulseout() { INT nRet; //関数の実行結果 MTRMOTION Motion; //動作パラメータ情報構造体 //クロックの設定 //PCI-7204の場合は以下を設定します。 //nRet = MtrSetBaseClock(hDeviceHandle, MTR_CLOCK_1M); //PCI-7208,7209の場合は以下を設定します。 nRet = MtrSetBaseClock(hDeviceHandle, 2500); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("基準クロックの設定に失敗しました"); //パルス出力設定(パルス出力モード, 負論理, 2パルス出力に設定) nRet = MtrSetPulseOut(hDeviceHandle, MTR_METHOD, 0); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("パルス出力設定に失敗しました"); //PTP動作設定 Motion.dwMode = MTR_ACC_SIN; // S字加減速 Motion.dwLowSpeed = 100; // 起動時速度 100Hz Motion.dwSpeed = 1000; // 移動速度 1000Hz Motion.dwAcc = 500; // 加速パルス数 500 パルス/ms Motion.dwDec = 500; // 減速パルス数 500 パルス/ms Motion.dwSSpeed = 300; // S字加減速区間速度 300Hz Motion.nStep = 5000; // 移動パルス数 5000パルス Motion.nReserved = 0; // 拡張 // PTP動作設定

Page 50: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(コンパレータ割り込み処理)

© 2000 Interface Corporation. All rights reserved.

45

nRet = MtrSetMotion(hDeviceHandle, MTR_PTP, &Motion); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("動作設定に失敗しました"); else{ // PTP起動 nRet = MtrStartMotion(hDeviceHandle, MTR_PTP); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("PTP起動に失敗しました"); }

以上で、プログラムの作成は完了です。

では、保存した後実行してください。

「モータ駆動」ボタンをクリックしてください。ステッピング・モータコントロールボードより

モータ・ドライバにパルス信号が送られ、モータの軸が回転します。プリセットカウンタに設定

したカウンタ値と出力したパルス数が一致すると、コンパレータ一致割り込みが発生し、それと

同時に以下のメッセージボックスが表示されます。

図 4-27

続けて、「モータ駆動」ボタンをもう一度クリックすると、今度はカウンタ値は加算されていき

プリセットと一致しないので、割り込みは発生しません。

では、入力したプログラムを読み取ってみましょう。

(List 3-4)では、割り込みイベントに使用するグローバル関数と構造体の宣言を行っています。

(List 3-5)では、初期化処理の後コンパレータに関する各設定を行い、Step1の(List 3-2)と同様

に割り込み発生条件の設定と割込み信号を取得した際に実行するコールバックの定義を行って

います。

次に(List 3-6)ですが、割り込みが発生した場合に実行されるコールバック関数を記述していま

す。割り込みが発生した場合、この関数が呼び出されメッセージボックスが表示されます。

(List 3-7)では、出力するパルス数を 5000に変更しています。

Page 51: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(コンパレータ割り込み処理)

© 2000 Interface Corporation. All rights reserved.

46

割り込みイベントの定義はモータ停止割り込みの時と同様に、MtrSetEventMask 関数,

MtrSetEvent 関数を使用します。また、コンパレータ割り込みに関する設定は、

MtrSetComparator 関数を使用して行います。

この関数では、比較条件・比較対象・プリセット値・信号出力条件などの、コンパレータに関

する各種の設定を行う事が出来ます。各設定値に関しては、巻末の「FbiMtr.DLL リファレンス」

のMtrSetComparator の項目を参照してください。

ここまでが、コンパレータ割り込みによるコールバック処理のプログラム例です。

「使用例」

nRet = MtrSetComparator (hDeviceHandle, dwMode, nConfig);

設定項目を指定します。

設定値を指定します。

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

Page 52: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(同時起動)

47

© 2000 Interface Corporation. All rights reserved.

4.4. 同時起動

次に、同時起動を行うプログラムを作成します。

同時起動とは、複数軸のモータを同時に起動させる機能です。(複数枚のボードでも同時起動が

可能です。)これにより、複数の軸を異なる速度や動作で同時に起動できます。

ここでは、1枚の PCI-7209において、2軸のモータを同時に起動させるプログラムを作成してい

きます。

1. まず、同時起動を実現させる為には外部接続が必要となります。

「TRIGOUT」(ピン番号 25)と「TRIGIN1」(ピン番号 23)、

「TRIGOUT1」(ピン番号 24)と「TRIGIN2」(ピン番号 72)を接続して下さい。

全体的な接続例は以下のようになります。

※PCI-7208においては接続が異なります。弊社製品マニュアルかカタログを参照してください。

1OUT(ピン番号 10)

1DIR(ピン番号 18)

同時起動を行う時の接続例

TNS-9601

外部電源 DC+5V~DC+24V

+ -

専用のモータドライバ

+

+-

-

cw

ccw

フォトカプラ入力TTL入力方式

インタロックスイッチ

SW

RCOM1(ピン番号 27)

INTLOCK1(ピン番号 28)

ON

専用のモータドライバ

+

+-

-

cw

ccw

フォトカプラ入力TTL入力方式

-COM

2DIR(ピン番号 66)

2OUT(ピン番号 58)

1軸

2軸

25

24

23 70

71

72

73 TRGOUT(ピン番号 25)

TRGIN1(ピン番号 23)

TRGOUT1(ピン番号 24)

TRGIN2(ピン番号 72)

図 4-28

Page 53: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(同時起動)

© 2000 Interface Corporation. All rights reserved.

48

2. では同時起動を行う手順を説明します。

同時起動を行う場合、基本的に下記の制御シーケンス(順番)で行います。

ボード初期化(各軸)1

各種設定(各軸)2

同時起動設定(各軸)3

各種動作起動(各軸)4

同時起動開始5

終了処理(各軸)6

MtrOpen

MtrSetMotion等

MtrSetSync

MtrStartMotion

MtrStartSync

MtrClose

図 4-29 3. Visual C++を起動し新しいプロジェクト(プロジェクト名:SyncStart)を作成し、§4.1の

Step2まで同様の手順で作成します。

4. ResourceViewを表示し、Dialogフォルダを展開して、「IDD_SYNCSTART_DIALOG」をダブ

ルクリックします。

図 4-29

5. ダイアログボックスの必要のないボタン、スタティックテキストを削除します。

「OK」ボタン、「キャンセル」ボタン、「TODO:ダイアログのコントロールをここに配置」

というスタティックテキストをそれぞれ選択し、Deleteキーを押してください。

クリックします。

Page 54: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(同時起動)

© 2000 Interface Corporation. All rights reserved.

49

6. ダイアログ上に、同時起動を行う為の「ボタン」を配置します。

「右クリック」→「プロパティ」で以下のように設定してください。

ID IDC_SYNCSTART

キャプション 同時起動

図 4-30

では手順に従ってプログラムを作成していきましょう。

7. まず、初期化と終了処理を行います。ここで注意しなければならないのは、同時起動を行

う各軸に対してデバイスのオープンとクローズをしなければなりません。

§4.1の Step3を参考に、「ON_CREATE」「ON_DESTROY」関数を追加し、(List 4-1)

(List 4-2)(List 4-3)(List 4-4)の網掛け部分を追加してください。

(List 4-1 : SyncStartDlg.cppの変更コード) // SyncStartDlg.cpp : インプリメンテーション ファイル // #include "stdafx.h" #include "SyncStart.h" #include "SyncStartDlg.h" #include "fbimtr.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

(List 4-2: SyncStartDlg.hの変更コード) // SyncStartDlg.h : ヘッダー ファイル // #if !defined(AFX_SYNCSTARTDLG_H__DFA0B989_CB58_11D4_9807_00004CBDFA8C__INCLUDED_) #define AFX_SYNCSTARTDLG_H__DFA0B989_CB58_11D4_9807_00004CBDFA8C__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000

Page 55: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(同時起動)

© 2000 Interface Corporation. All rights reserved.

50

///////////////////////////////////////////////////////////////////////////// // CSyncStartDlg dialog class CSyncStartDlg : public CDialog { // 構築 public: CSyncStartDlg(CWnd* pParent = NULL); // 標準のコンストラクタ HANDLE hDeviceHandle1; //デバイスハンドル(1軸目) HANDLE hDeviceHandle2; //デバイスハンドル(2軸目) // Dialog Data //{{AFX_DATA(CSyncStartDlg) enum { IDD = IDD_SYNCSTART_DIALOG }; // メモ: この位置に ClassWizard によってデータ メンバが追加されます。 //}}AFX_DATA

(List 4-3:CSyncStartDlgクラスの OnCreate関数のコード 初期化処理) int CSyncStartDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; //ボードの初期化処理(1軸目) hDeviceHandle1 = MtrOpen("FBIMC1", MTR_FLAG_NORMAL); if(hDeviceHandle1 == INVALID_HANDLE_VALUE){ AfxMessageBox("1軸目のデバイスのオープンに失敗しました"); }

//ボードの初期化処理(2軸目) hDeviceHandle2 = MtrOpen("FBIMC2", MTR_FLAG_NORMAL); if(hDeviceHandle2 == INVALID_HANDLE_VALUE){ AfxMessageBox("2軸目のデバイスのオープンに失敗しました"); } //1軸と 2軸のどちらかがデバイスオープンに失敗した場合に終了します if(hDeviceHandle1 == INVALID_HANDLE_VALUE || hDeviceHandle2 == INVALID_HANDLE_VALUE) return -1; return 0; }

(List 4-4:CMotorDlgクラスの OnDestory関数のコード 終了処理) void CMotorDlg::OnDestroy() { CDialog::OnDestroy(); INT nRet; //関数の実行結果 //終了処理 if(hDeviceHandle1 != INVALID_HANDLE_VALUE){ nRet = MtrClose(hDeviceHandle1); if(nRet != MTR_ERROR_SUCCESS){ AfxMessageBox("1軸目のデバイスのクローズに失敗しました"); } } if(hDeviceHandle2 != INVALID_HANDLE_VALUE){ nRet = MtrClose(hDeviceHandle2); if(nRet != MTR_ERROR_SUCCESS){ AfxMessageBox("2軸目のデバイスのクローズに失敗しました"); } } }

Page 56: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(同時起動)

© 2000 Interface Corporation. All rights reserved.

51

8. 次に、各軸に対してパルス出力設定などの各種設定を行います。先ほど作成した

「ON_CREATE」関数に(List 4-5)の網掛け部分を追加します。

(List 4-5 CSyncStartDlgクラスの OnCreate関数の追加コード 各種設定) int CSyncStartDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { INT nRet; //関数の実行結果 MTRMOTION Motion1; //動作パラメータ情報構造体(1軸用) MTRMOTION Motion2; //動作パラメータ情報構造体(2軸用) if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; //ボードの初期化処理(1軸目) hDeviceHandle1 = MtrOpen("FBIMC1", MTR_FLAG_NORMAL); if(hDeviceHandle1 == INVALID_HANDLE_VALUE){ AfxMessageBox("1軸目のデバイスのオープンに失敗しました"); return -1; } //ボードの初期化処理(2軸目) hDeviceHandle2 = MtrOpen("FBIMC2", MTR_FLAG_NORMAL); if(hDeviceHandle2 == INVALID_HANDLE_VALUE){ AfxMessageBox("2軸目のデバイスのオープンに失敗しました"); return -1; } //1軸目の基準クロックの設定 //PCI-7204の場合は以下を設定します //nRet = MtrSetBaseClock(hDeviceHandle1, MTR_CLOCK_1_16M); //PCI-7208,7209の場合は以下を設定します nRet = MtrSetBaseClock(hDeviceHandle1, 2500); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("1軸目の基準クロックの設定に失敗しました");

//1軸目パルス出力設定(パルス出力モード, 負論理, 2パルス出力に設定) nRet = MtrSetPulseOut(hDeviceHandle1, MTR_METHOD, 0); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("1軸目のパルス出力設定に失敗しました"); //1軸目の PTP動作設定 Motion1.dwMode = MTR_ACC_NORMAL; //直線加減速 Motion1.dwLowSpeed = 100; //起動時速度 100Hz Motion1.dwSpeed = 1000; //移動速度 1000Hz Motion1.dwAcc = 100; //加速パルス数 0 パルス/ms Motion1.dwDec = 100; //減速パルス数 0 パルス/ms Motion1.dwSSpeed = 0; //S字加減速区間速度 0Hz Motion1.nStep = 10000; //移動パルス数 10000パルス Motion1.nReserved = 0; //拡張 //1軸目の PTP動作設定 nRet = MtrSetMotion(hDeviceHandle1, MTR_PTP, &Motion1); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("1軸目の動作設定に失敗しました"); //2軸目の基準クロックの設定 //PCI-7204の場合は以下を設定します //nRet = MtrSetBaseClock(hDeviceHandle2, MTR_CLOCK_1_16M); //PCI-7208,7209の場合は以下を設定します nRet = MtrSetBaseClock(hDeviceHandle2, 2500);

Page 57: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(同時起動)

© 2000 Interface Corporation. All rights reserved.

52

if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("2軸目の基準クロックの設定に失敗しました"); //2軸目パルス出力設定(パルス出力モード, 負論理, 2パルス出力に設定) nRet = MtrSetPulseOut(hDeviceHandle2, MTR_METHOD, 0); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("2軸目のパルス出力設定に失敗しました"); //2軸目の PTP動作設定 Motion2.dwMode = MTR_ACC_SIN; //S字加減速 Motion2.dwLowSpeed = 100; //起動時速度 100Hz Motion2.dwSpeed = 1000; //移動速度 1000Hz Motion2.dwAcc = 500; //加速パルス数 500 パルス/ms Motion2.dwDec = 500; //減速パルス数 500 パルス/ms Motion2.dwSSpeed = 300; //S字加減速区間速度 300Hz Motion2.nStep = 10000; //移動パルス数 10000パルス Motion2.nReserved = 0; //拡張

//2軸目の PTP動作設定 nRet = MtrSetMotion(hDeviceHandle2, MTR_PTP, &Motion2); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("2軸目の動作設定に失敗しました"); return 0; }

9. 次に、各軸に対して同時起動設定を行います。

先ほど追加した「ON_CREATE」関数に(List 4-6)の網掛け部分を追加してください。

(List 4-6 CSyncStartDlgクラスの OnCreate関数の追加コード 同時起動設定) int CSyncStartDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { INT nRet; //関数の実行結果 MTRMOTION Motion1; //動作パラメータ情報構造体(1軸用) MTRMOTION Motion2; //動作パラメータ情報構造体(2軸用) if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; //ボードの初期化処理(1軸目) hDeviceHandle1 = MtrOpen("FBIMC1", MTR_FLAG_NORMAL); ・

・ ・

(省略) ・

・ ・

//2軸目の PTP動作設定 nRet = MtrSetMotion(hDeviceHandle2, MTR_PTP, &Motion2); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("2軸目の動作設定に失敗しました"); //1軸目の同時起動設定 nRet = MtrSetSync(hDeviceHandle1, MTR_SET_SYNC_START); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("1軸目の同時起動設定に失敗しました"); //2軸目の同時起動設定 nRet = MtrSetSync(hDeviceHandle2, MTR_SET_SYNC_START); if(nRet != MTR_ERROR_SUCCESS)

Page 58: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(同時起動)

© 2000 Interface Corporation. All rights reserved.

53

AfxMessageBox("2軸目の同時起動設定に失敗しました"); return 0; }

10. 次に、各軸に対して各種動作起動を行います。

先ほど作成した「IDD_SYNCSTART_DIALOG」の同時起動の部分にマウスカーソルをあわ

せ、右クリック→「Class Wizard」を選択します。「メッセージマップ」を選択し、以下のよ

うに設定した後、「関数の追加」をクリックします。

プロジェクト SyncStart

クラス名 CSyncStartDlg

オブジェクト IDC_SYNCSTART

メッセージ BN_CLICKED

メンバ関数名を決定するダイアログが表示されますので、“OnSyncStart”となっていること

を確認し、「OK」をクリックします。

そのまま「コード編集」をクリックし、メンバ関数“OnSyncStart”を実装します。(List 4-7)

の網掛け部分を記述してください。

(List 4-7 CSyncStartDlgクラスの OnSyncStartのコード 各種動作起動) void CSyncStartDlg::OnSyncstart() { INT nRet; //関数の実行結果 //1軸目の動作起動 nRet = MtrStartMotion(hDeviceHandle1, MTR_PTP); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("1軸目の動作起動に失敗しました"); //2軸目の動作起動 nRet = MtrStartMotion(hDeviceHandle2, MTR_PTP); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("2軸目の動作起動に失敗しました"); }

入力が終わったら保存して実行してみてください。同時起動ボタンをクリックしても

モータは起動しません。

(List 4-6)のように同時起動要求を出している時は、各種動作起動をしてもモータは起動し

ないことが確認できると思います。

11. 最後に同時起動を行います。先ほど記述した“OnSyncStart”に(List 4-8)の網掛け部分を追加し

てください。

Page 59: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(同時起動)

© 2000 Interface Corporation. All rights reserved.

54

(List 4-8 CSyncStartDlgクラスの OnSyncStartの追加コード 同時起動開始) void CSyncStartDlg::OnSyncstart() { INT nRet; //関数の実行結果 //1軸目の動作起動 nRet = MtrStartMotion(hDeviceHandle1, MTR_PTP); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("1軸目の動作起動に失敗しました"); //2軸目の動作起動 nRet = MtrStartMotion(hDeviceHandle2, MTR_PTP); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("2軸目の動作起動に失敗しました"); //同時起動スタート nRet = MtrStartSync(hDeviceHandle1); if(nRet != MTR_ERROR_SUCCESS) AfxMessageBox("同時起動に失敗しました"); }

入力が終わったら保存して実行してみてください。モータが 2軸とも同時に起動します。

※ PCI-7204ではコントローラの仕様上、MtrStartMotionと MtrStartSyncの間に十分なウェイト

を入れる必要があります。

では、入力したプログラムを読み取ってみましょう。

(List 4-1),(Lis t 4-2),(List 4-3) (List 4-4)はボードの初期化処理と終了処理を行っています。こちら

に関しては§4.1を参照してください。

(List 4-5)は各軸に対して各種動作設定を行っています。プログラムでは 1軸を直線加減速で、2

軸をS字加減速に設定しています。これらの動作は各軸に対して任意に設定可能です。

こちらに関しては§4.1を参照してください。

(List 4-6)は各軸に対して、同時起動の設定を行っています。

同時起動の設定にはMtrSetSync関数を使用します。

「使用例」

nRet = MtrSetSync(hDeviceHandle, MTR_SET_SYNC_START);

ボードのオープン時に取得したデバイスハンドルを指定します。

関数が失敗するとエラーコードが格納されます。

同時起動の設定を指定します。

Page 60: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(同時起動)

© 2000 Interface Corporation. All rights reserved.

55

第 2引数の「MTR_SET_SYNC_START」は、同時起動の要求を出すこと表わしています。

MTR_RESET_SYNC_STARTを指定すると、同時起動の要求を解除します。

(List 4-7)では、各軸に対して各種動作起動を行います。こちらに関しては§4.1を参照してくだ

さい。同時起動の要求を出している場合、ここで各種動作起動を行ってもモータは起動しません。

(List 4-8)では、同時起動の開始を行います。

同時起動の開始にはMtrStartSync関数を使用します。

この関数は各軸に対して行う必要はありません。プログラムでは 1軸側に対して行っています。

同期タイミング信号は、ボード 1枚に対して 1点が用意されています。

このため、1軸側、2軸側のどちらに対してMtrStartSync関数を実行しても、同期タイミング信

号が出力されます。複数枚のボードでの同時起動を行う場合には同期タイミング信号が接続され

ているボード上のデバイス(どちらかの軸)に対してMtrStartSync関数を実行する必要がありま

す。

例えば、PCI-7209を 2枚使って 4軸の同時起動を行う場合には図 4-31のように接続します。こ

の場合、1枚目のボードの TRGOUT 端子を同期タイミング信号として使用しますので 1枚目の

ボード上のデバイス(どちらかの軸)に対してMtrStartSync関数を実行することにより、4軸の

同時起動が行われます。

「使用例」

nRet = MtrStartSync(hDeviceHandle);

関数が失敗するとエラーコードが格納されます。

ボードのオープン時に取得したデバイスハンドルを指定します。

Page 61: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

チュートリアル(同時起動)

© 2000 Interface Corporation. All rights reserved.

56

PCI-7209を 2枚使って 4軸の同時起動する際の同時起動部分の接続例

TRGOUT

TRGIN1

TRGOUT1

TRGIN2

TRGOUT2

TRGOUT

TRGIN1

TRGOUT1

TRGIN2

TRGOUT2

1枚目の端子 2枚目の端子

② ③ ④

1枚目の TRGOUT端子か

ら信号が出力されると

4軸共、同時起動します。

図 4-31

① TRGOUT端子から TRGIN1端子へ信号が出力されます。

② ボードの内部で TRGIN1端子と TRGOUT1端子は接続されていますので TRGOUT1

端子と TRGIN2端子を接続することで 1枚目の 1軸と 2軸が同時に起動します。

③ 1枚目の TRGOUT2端子と 2枚目の TRGIN1端子を接続します。

これで 1枚目の 1軸,2軸,2枚目の 1軸の計 3つの軸が同時に起動します。

④ 2 枚目の TRGOUT1 と TRGIN2 を接続することで 4 軸を同時に起動させることができ

ます。

※PCI-7208はボード 1枚で 4軸の制御ができますので、①で 2軸同時に起動、②で 4軸の起動

が同時に行えます。

ここまでが同時起動のプログラム例です。

Page 62: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

57

© 2000 Interface Corporation. All rights reserved.

5. FbiMtr.DLLリファレンス 5.1. 型式別DLL関数サポート一覧

No 関 数 名 PCI-7204 PCI-7208 PCI-7209 1 MtrOpen ○ ○ ○ 2 MtrClose ○ ○ ○ 3 MtrGetDeviceInfo ○ ○ ○ 4 MtrSetBaseClock ○ ○ ○ 5 MtrGetBaseClock ○ ○ ○ 6 MtrSetPulseOut ○ ○ ○ 7 MtrGetPulseOut ○ ○ ○ 8 MtrSetLimitConfig ○ ○ ○ 9 MtrGetLimitConfig ○ ○ ○

10 MtrSetCounterConfig × ○ ○ 11 MtrGetCounterConfig × ○ ○ 12 MtrSetComparator × ○ ○ 13 MtrGetComparator × ○ ○ 14 MtrSetCLR × × ○ 15 MtrGetCLR × × ○ 16 MtrSetAccCurve ○ × × 17 MtrGetAccCurve ○ × × 18 MtrSetMotion ○ ○ ○ 19 MtrGetMotion ○ ○ ○ 20 MtrSetMotionLine × ○ ○ 21 MtrGetMotionLine × ○ ○ 22 MtrStartMotion ○ ○ ○ 23 MtrStopMotion ○ ○ ○ 24 MtrRestart × ○ ○ 25 MtrSetSync ○ ○ ○ 26 MtrGetSync ○ ○ ○ 27 MtrStartSync ○ ○ ○ 28 MtrSingleStep ○ ○ ○ 29 MtrChangeSpeed ○ ○ ○ 30 MtrReadSpeed × ○ ○ 31 MtrReadCounter ○ ○ ○ 32 MtrWriteCounter ○ ○ ○ 33 MtrClearCounter ○ ○ ○ 34 MtrGetStatus ○ ○ ○ 35 MtrOutputDO ○ × ○ 36 MtrInputDI ○ × ○ 37 MtrOutputDO1 × × ○ 38 MtrOutputDO2 × × ○ 39 MtrOutputDO3 × × ○ 40 MtrOutputDO4 × × ○ 41 MtrOutputCLR × × ○ 42 MtrOutputSON × × ○ 43 MtrSetEvent ○ ○ ○ 44 MtrGetEvent ○ ○ ○ 45 MtrSetEventMask ○ ○ ○ 46 MtrGetEventMask ○ ○ ○ 47 MtrReset ○ ○ ○ 48 MtrOffInterLock ○ ○ ○

Page 63: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

58

【1】MtrOpen 指定されたデバイス名のボードのオープンを行い、以後のボードへのアクセスを行えるようにします。 モータコントローラボードが制御する各軸には、それぞれ ”FBIMC** ”という名前のデバイス名がつけられます。本関数ではこのデバイス名を指定することにより、モータコントローラの各軸のオープンを行います。 宣言 HANDLE MtrOpen(LPCTSTR lpszName, DWORD dwFlags); パラメータ

lpszName 任意のデバイス名を指定します。 dwFlags オープン時のフラグを指定します。

フラグは以下のコードを指定してください。 フラグ 意 味 MTR_FLAG_NORMAL(0x0000) 同期制御を行うフラグです。

戻り値 MtrOpen関数が正常に終了した場合には、有効なハンドルが返されます。 他の関数は、本関数により取得したハンドルを使用してデバイスの制御を行います。 オープンに失敗した場合には、INVALID_HANDLE_VALUE(0xFFFFFFFF)が返されます。

【2】MtrClose 指定されたデバイス名のボードのクローズを行い、ボードアクセスのために使用されていた各種リソースの解放し、以後のボードへのアクセスを禁止します。 宣言 INT MtrClose(Handle hDeviceHandle); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

【3】MtrGetDeviceInfo デバイス情報を取得します。(型式、RSW1番号、軸番号) 宣言 INT MtrGetDeviceInfo(HANDLE hDeviceHandle, PMTRDEVICE lpDevInfo); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します lpDevInfo デバイス情報を格納する構造体(MTRDEVICE構造体)へのポインタです。

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 64: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

59

【4】MtrSetBaseClock

基準クロック/速度分解能の設定を行います。 (基準クロック/速度分解能により設定可能な速度の範囲が変わります。)

宣言 INT MtrSetBaseClock(HANDLE hDeviceHandle, DWORD dwClock); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します dwClock PCI-7204 の場合は基準クロックを,PCI-7208,7209 の場合は速度分解能を指定

します。

【PCI-7204の場合】 基準クロック:

定数 値 意味 MTR_CLOCK_1M 0 1MHz MTR_CLOCK_1_4M 1 1/4MHz MTR_CLOCK_1_16M 2 1/16MHz 【PCI-7208,7209の場合】

速度分解能:1~4096 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 型式により、dwClockに設定する値の意味が異なります。(PCI-7204の場合は基準クロック、PCI-7208,7209の場合は速度分解能となります。) 【PCI-7204の場合】 PCI-7204では基準クロックにより設定可能な移動速度の範囲が異なります。 ① 31Hz~66.67kHz(基準クロック 1MHz) ② 8Hz~16.67kHz(基準クロック 1/4MHz) ③ 2Hz~ 4.17kHz(基準クロック 1/16MHz) 基準クロックと移動速度の関係式は次の通りです。 Speed = Tclock / Rate [Hz] Tclock:1,000,000、1,000,000/4、1,000,000/16 Rate:15~32,767

【PCI-7208,7209の場合】 PCI-7208,7209では、速度分解能により設定可能な速度範囲が異なります。

速度範囲 [Hz] 速度分解能 倍率

[Hz / step] 直線加減速 S字加減速 2,500 0.1 0.1~1,638.3 0.1~1,000 250 1 1~16,383 1~10,000 50 5 5~81,915 5~50,000 10 25 25~409,575 25~250,000 1 250 250~4,095,750 250~2,500,000

速度分解能と移動速度の関係式は次の通りです。 Speed = 250×Rate / Range [Hz] Range:1~4,096 Rate:1~16,383(直線加減速),1~10,000(S字加減速) なお、PCI-7208,7209では、移動速度は 1Hz~1MHzまでのサポートとなります。 モータ駆動中には、本関数は実行できません。 また、MtrSetMotion関数,MtrSetMotionLine関数で起動時速度,移動速度等を設定する前に本関数を実行してください。

Page 65: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

60

【5】MtrGetBaseClock 基準クロック/速度分解能の設定を取得します。 宣言 INT MtrGetBaseClock(HANDLE hDeviceHandle, PDWORD lpdwClock); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します lpdwClock バッファへのポインタを指定します。このバッファに PCI-7204 の場合は基準

クロックを,PCI-7208,7209の場合は速度分解能を示す値が格納されます。

【PCI-7204の場合】 基準クロック:

定数 値 意味 MTR_CLOCK_1M 0 1MHz MTR_CLOCK_1_4M 1 1/4MHz MTR_CLOCK_1_16M 2 1/16MHz 【PCI-7208,7209の場合】

速度分解能:1~4096 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 66: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

61

【6】MtrSetPulseOut パルス出力の各種設定を行います。 宣言 INT MtrSetPulseOut(HANDLE hDeviceHandle, DWORD dwMode, DWORD dwConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 設定項目を指定します。 定数 値 意味 7204 7208 7209 MTR_METHOD 0 パルス出力モード ○ ○ ○ MTR_IDLING 1 アイドリング × ○ ○ MTR_FINISH_FLAG 3 動作完了フラグ × × ○ dwConfig 設定値を指定します。 【パルス出力モードの場合】 以下のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - - LOGIC PULSE bit31~2 未使用( 0を指定 )

LOGIC 0:負論理 1:正論理 PULSE 0:2パルス方式 1:1パルス方式

【アイドリングの場合】 定数 値 意味 MTR_0P5PULSE 1 0.5パルス アイドリング MTR_1P5PULSE 3 1.5パルス アイドリング 【動作完了フラグの場合】 定数 値 意味

MTR_PULSE_OUT 0 パルス出力完了により、動作完了フラグがON

MTR_INP 1 パルス出力完了後、INP信号入力により、動作完了フラグが ON

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数により設定するパルス出力方式は、使用するモータドライバの設定と必ず一致させて下さい。一致していない場合には、誤動作の原因となります。 アイドリングは、PCI-7208,7209でのみ設定可能となっています。(それ以外の型式では、設定することはできません。) 動作完了フラグは、PCI-7209でのみ設定可能となっています。(それ以外の型式では、設定することはできません。)

Page 67: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

62

【7】MtrGetPulseOut パルス出力の各種設定値を取得します。 宣言 HANDLE MtrGetPulseOut(HANDLE hDeviceHandle, DWORD dwMode, PDWORD lpdwConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 設定項目を指定します。 定数 値 意味 7204 7208 7209 MTR_METHOD 0 パルス出力モード ○ ○ ○ MTR_IDLING 1 アイドリング × ○ ○ MTR_FINISH_FLAG 3 動作完了フラグ × × ○ lpdwConfig バッファへのポインタを指定します。このバッファに設定値が格納されます。 【パルス出力モードの場合】 以下のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - - LOGIC PULSE bit31~2 未使用( 0を指定 )

LOGIC 0:負論理 1:正論理 PULSE 0:2パルス方式 1:1パルス方式

【アイドリングの場合】 定数 値 意味 MTR_0P5PULSE 1 0.5パルス アイドリング MTR_1P5PULSE 3 1.5パルス アイドリング 【動作完了フラグの場合】 定数 値 意味

MTR_PULSE_OUT 0 パルス出力完了により、動作完了フラグがON

MTR_INP 1 パルス出力完了後、INP信号入力により、動作完了フラグが ON

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 68: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

63

【8】MtrSetLimitConfig リミット信号の各種設定を行います。 宣言 INT MtrSetLimitConfig(HANDLE hDeviceHandle, DWORD dwMode, DWORD dwConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 設定項目を指定します。 定数 値 意味 7204 7208 7209 MTR_MASK 0 マスク設定 ○ × × MTR_LOGIC 1 入力論理 ○ ○ ○ MTR_SD_FUNC 2 SD信号機能 × ○ ○ MTR_SD_ACTIVE 3 SD信号動作入力 × ○ ○ dwConfig 設定値を指定します。 【マスク設定の場合】 以下のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - ALM ORG - -EL +EL -SD +SD bit31~7,4 未使用(0を指定)

bit6,5,3~0 0:信号入力有効 1: 信号入力無効 【入力論理の場合】 以下のビット構成で指定します。 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 - - - - - - MARK INP Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - ALM ORG Z -EL +EL -SD +SD bit31~10,7 未使用(0を指定)

bit9,8,6~0 0:負論理 1:正論理 【SD信号機能の場合】 定数 値 意味 MTR_CHANGE_SD_SPEED 0 減速入力 MTR_DEC_STOP_SIGNAL 1 減速停止入力 【SD信号動作入力】 定数 値 意味 MTR_SIGNAL_LEVEL 0 レベル動作入力 MTR_SIGNAL_EDGE 1 エッジ動作入力

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 マスク設定は、PCI-7204でのみ設定可能となっています。(それ以外の型式では、設定できません。) PCI-7204では、エンコーダおよびMARK,INP信号をサポートしていないため、入力論理における bit4,8,9の設定内容は無効となります。(0を指定して下さい。) PCI-7208 では、MARK,INP 信号をサポートしていないため、入力論理における bit8,9 の設定内容は無効となります。(0を指定して下さい。) SD信号機能,SD信号動作入力は、PCI-7208,7209でのみ設定可能となっています。(それ以外の型式では、設定できません。)

Page 69: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

64

【9】MtrGetLimitConfig リミット信号の各種設定を取得します。 宣言 INT MtrGetLimitConfig(HANDLE hDeviceHandle, DWORD dwMode, PDWORD lpdwConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 取得する設定項目を指定します。 定数 値 意味 7204 7208 7209 MTR_MASK 0 マスク設定 ○ × × MTR_LOGIC 1 入力論理 ○ ○ ○ MTR_SD_FUNC 2 SD信号機能 × ○ ○ MTR_SD_ACTIVE 3 SD信号動作入力 × ○ ○ dwConfig 設定値を指定します。 【マスク設定の場合】 以下のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - ALM ORG - -EL +EL -SD +SD bit31~7,4 未使用(0を指定)

bit6,5,3~0 0:信号入力有効 1: 信号入力無効 【入力論理の場合】 以下のビット構成で指定します。 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 - - - - - - MARK INP Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - ALM ORG Z -EL +EL -SD +SD bit31~10,7 未使用(0を指定)

bit9,8,6~0 0:負論理 1:正論理 【SD信号機能の場合】 定数 値 意味 MTR_CHANGE_SD_SPEED 0 減速入力 MTR_DEC_STOP_SIGNAL 1 減速停止入力 【SD信号動作入力】 定数 値 意味 MTR_SIGNAL_LEVEL 0 レベル動作入力 MTR_SIGNAL_EDGE 1 エッジ動作入力

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 70: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

65

【10】MtrSetCounterConfig(※PCI-7204では使用できません。) カウンタ(エンコーダ)の各種設定を行います。 宣言 INT MtrSetCounterConfig(HANDLE hDeviceHandle, DWORD dwMode, DWORD dwConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 設定項目を指定します。 定数 値 意味 MTR_ENCODER_MODE 0 エンコーダ入力モード MTR_ENCODER_CLEAR 1 エンコーダ値クリア条件 dwConfig 設定値を指定します。 【エンコーダ入力モードの場合】 定数 値 意味 MTR_NOT_COUNT 0 カウントしない MTR_SINGLE 1 1逓倍 MTR_DOUBLE 2 2逓倍 MTR_QUAD 3 4逓倍 MTR_UP_DOWN 4 アップダウンパルス 【エンコーダ値クリア条件の場合】 以下のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - LIMIT NORMAL - - bit31~4,1,0 未使用( 0を指定 )

bit3 リミット信号による停止時 0:クリアしない 1:クリアする bit2 正常停止時 0:クリアしない 1:クリアする

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 PCI-7204ではエンコーダをサポートしていないため、本関数は使用できません。

Page 71: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

66

【11】MtrGetCounterConfig(※PCI-7204では使用できません。) カウンタ(エンコーダ)の各種設定を取得します。 宣言 INT MtrGetCounterConfig(HANDLE hDeviceHandle, DWORD dwMode, PDWORD lpdwConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 取得する設定項目を指定します。 定数 値 意味 MTR_ENCODER_MODE 0 エンコーダ入力モード MTR_ENCODER_CLEAR 1 エンコーダ値クリア条件 lpdwConfig バッファへのポインタを指定します。このバッファに設定値が格納されます。 【エンコーダ入力モードの場合】 定数 値 意味 MTR_NOT_COUNT 0 カウントしない MTR_SINGLE 1 1逓倍 MTR_DOUBLE 2 2逓倍 MTR_QUAD 3 4逓倍 MTR_UP_DOWN 4 アップダウンパルス 【エンコーダ値クリア条件の場合】 以下のビット構成で格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - LIMIT NORMAL - - bit31~4,1,0 未使用( 0を指定 )

bit3 リミット信号による停止時 0:クリアしない 1:クリアする bit2 正常停止時 0:クリアしない 1:クリアする

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値についてはエラーコード一覧を参照してください。 解説 PCI-7204ではエンコーダをサポートしていないため、本関数は使用できません。

Page 72: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

67

【12】MtrSetComparator(※PCI-7204では使用できません。) コンパレータの各種設定を行います。 宣言 INT MtrSetComparator(HANDLE hDeviceHandle, DWORD dwMode, INT nConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 設定項目を指定します。 定数 値 意味 7204 7208 7209 MTR_COMP_CONFIG1 0 比較条件 1 × ○ ○ MTR_COMP_CONFIG2 1 比較条件 2 × ○ ○ MTR_PRESET1 3 プリセット 1 × ○ ○ MTR_COMP_OBJECT1 6 比較対象 1(P) × ○ ○ MTR_COMP_OBJECT2 7 比較対象 2(Q) × ○ ○ MTR_COMP_OUT 9 CMP信号出力条件 × × ○ nConfig 設定値を指定します。 【比較条件 1,比較条件 2の場合】 定数 値 意味 MTR_NO_COMP 0 設定しない MTR_GT_COMP 1 P > Q MTR_EQ_COMP 2 P = Q 【プリセット 1設定の場合】 -8,388,608~+16,777,215 【比較対象 1(P),比較対象 2(Q)の場合】 定数 値 意味 MTR_ENCODER 0 エンコーダ MTR_COUNTER 1 カウンタ MTR_REMAINS 2 残りパルス数 MTR_PRESET1 3 プリセット 1 【CMP信号出力条件の場合】 定数 値 意味 MTR_GT_COMP 1 P > Q MTR_EQ_COMP 2 P = Q

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 PCI-7204ではコンパレータをサポートしていないため、本関数は使用できません。 CMP信号出力条件は、PCI-7209でのみ設定可能となっています。(それ以外の型式では、設定できません。)

Page 73: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

68

【13】MtrGetComparator(※PCI-7204では使用できません。) コンパレータの各種設定を取得します。 宣言 INT MtrGetComparator(HANDLE hDeviceHandle, DWORD dwMode, PINT lpnConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 取得する設定項目を指定します。 定数 値 意味 7204 7208 7209 MTR_COMP_CONFIG1 0 比較条件 1 × ○ ○ MTR_COMP_CONFIG2 1 比較条件 2 × ○ ○ MTR_PRESET1 3 プリセット 1 × ○ ○ MTR_COMP_OBJECT1 6 比較対象 1(P) × ○ ○ MTR_COMP_OBJECT2 7 比較対象 2(Q) × ○ ○ MTR_COMP_OUT 9 CMP信号出力条件 × × ○ nConfig 設定値を指定します。 【比較条件 1,比較条件 2の場合】 定数 値 意味 MTR_NO_COMP 0 設定しない MTR_GT_COMP 1 P > Q MTR_EQ_COMP 2 P = Q 【プリセット 1設定の場合】 -8,388,608~+16,777,215 【比較対象 1(P),比較対象 2(Q)の場合】 定数 値 意味 MTR_ENCODER 0 エンコーダ MTR_COUNTER 1 カウンタ MTR_REMAINS 2 残りパルス数 MTR_PRESET1 3 プリセット 1 【CMP信号出力条件の場合】 定数 値 意味 MTR_GT_COMP 1 P > Q MTR_EQ_COMP 2 P = Q

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 PCI-7204ではコンパレータをサポートしていないため、本関数は使用できません。 CMP信号出力条件は、PCI-7209でのみ取得可能となっています。(それ以外の型式では、取得できません。)

Page 74: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

69

【14】MtrSetCLR(※PCI-7209のみ有効) CLR信号の各種設定を行います。 宣言 INT MtrSetCLR(HANDLE hDeviceHandle, DWORD dwMode, DWORD dwConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 設定項目を指定します。 定数 値 意味 MTR_METHOD 0 CLR信号出力モード MTR_LOGIC 1 出力論理 MTR_CLR_OUT 2 CLR信号出力条件 dwConfig 設定値を指定します。 【CLR信号出力モードの場合】 定数 値 意味 MTR_ONESHOT 0 ワンショット出力 MTR_LEVEL 1 レベル出力 【出力論理の場合】 以下のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - - - CLR bit31~1 未使用(0を指定)

bit0 0:負論理 1: 正論理 【CLR信号出力条件の場合】 以下のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - LIMIT NORMAL - - bit31~4,1,0 未使用(0を指定)

bit3 リミット信号による停止時 0:出力しない 1:出力する bit2 正常停止時 0:出力しない 1:出力する

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 CLR信号の各種設定は、PCI-7209でのみ設定可能となっています。(それ以外の型式では設定できません。)

Page 75: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

70

【15】MtrGetCLR(※PCI-7209のみ有効) CLR信号の各種設定を取得します。 宣言 INT MtrGetCLR(HANDLE hDeviceHandle, DWORD dwMode, PDWORD lpdwConfig); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 取得する設定項目を指定します。 定数 値 意味 MTR_METHOD 0 CLR信号出力モード MTR_LOGIC 1 出力論理 MTR_CLR_OUT 2 CLR信号出力条件 lpdwConfig 取得値 【CLR信号出力モードの場合】 定数 値 意味 MTR_ONESHOT 0 ワンショット出力 MTR_LEVEL 1 レベル出力 【出力論理の場合】 以下のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - - - CLR bit31~1 未使用(0を指定)

bit0 0:負論理 1: 正論理 【CLR信号出力条件の場合】 以下のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - LIMIT NORMAL - - bit31~4,1,0 未使用(0を指定)

bit3 リミット信号による停止時 0:出力しない 1:出力する bit2 正常停止時 0:出力しない 1:出力する

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 CLR信号の各種設定は、PCI-7209でのみ取得可能となっています。(それ以外の型式では取得できません。)

Page 76: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

71

【16】MtrSetAccCurve(※PCI-7204のみ有効) 自由曲線加減速の設定を行います。 宣言 INT MtrSetAccCurve(HANDLE hDeviceHandle, DWORD dwStageNum, PMTRORIGINALACC lpOriginalAcc); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwStageNum 自由曲線加減速の段数を指定します。(2~96) lpOriginalAcc 自由曲線加減速情報を格納する構造体(MTRORIGINALACC 構造体)へのポイ

ンタです。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 自由曲線加減速は PCI-7204でのみ設定可能となっています。(それ以外の型式では設定できません。) 本関数で設定した自由曲線加減速を実行するには、MtrSetMotion 関数で動作パラメータを設定する構造体(MTRMOTION構造体)に"MTR_ACC_ORIGINAL"を設定してください。 また、自由曲線加減速とは下図のようにMtrSetMotion関数で設定する移動速度までの加減速を、N個の段数(この関数では dwStageNumの引数で与えられる)の加減速度、移動パルス数に分散して設定する加減速です。

Page 77: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

72

【17】MtrGetAccCurve(※PCI-7204のみ有効) 自由曲線加減速の設定を取得します。 宣言 INT MtrGetAccCurve(HANDLE hDeviceHandle, PDWORD lpdwStageNum, PMTRORIGINALACC lpOriginalAcc); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 lpdwStageNum バッファへのポインタを指定します。このポインタに自由曲線加減速の段数を

示す値が格納されます。 lpOriginalAcc 自由曲線加減速情報を格納する構造体(MTRORIGINALACC 構造体)へのポイ

ンタです。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 自由曲線加減速は PCI-7204でのみ設定可能となっています。(それ以外の型式では設定できません。) lpOriginalAcc は十分な領域(設定した段数以上の領域)を確保してください。 速度値については、設定した値と異なる値が戻ってくる場合があります。これはモータコントローラの仕様上(分解能)起こるものです。正確には取得された値で制御を行っています。

【18】MtrSetMotion 各種動作(連続動作,原点復帰動作,PTP動作)パラメータの設定を行います。 宣言 INT MtrSetMotion(HANDLE hDeviceHandle, DWORD dwMove, PMTRMOTION lpMotion); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMove 設定する動作を指定します。 定数 値 意味 MTR_JOG 0 連続動作 MTR_ORG 1 原点復帰動作 MTR_PTP 2 PTP動作 lpMotion 動作パラメータ情報を格納する構造体(MTRMOTION 構造体)へのポインタで

す。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数では動作パラメータをセットするのみで、実際の動作(パルス出力)は行いません。モータ動作の起動はMtrStartMotion関数で行います。 lpMotionの各メンバ変数に設定する値の範囲は、型式により異なります。(MTRMOTION構造体を参照して下さい。)

Page 78: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

73

【19】MtrGetMotion 各種動作(連続動作,原点復帰動作,PTP動作)パラメータの設定を取得します。 宣言 INT MtrGetMotion(HANDLE hDeviceHandle, DWORD dwMode, PMTRMOTION lpMotion); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMove 取得する動作項目を指定します。 定数 値 意味 MTR_JOG 0 連続動作 MTR_ORG 1 原点復帰動作 MTR_PTP 2 PTP動作 lpMotion 動作パラメータ情報を格納する構造体(MTRMOTION構造体)へのポインタです。

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 速度値については、設定した値と異なる値が戻ってくる場合があります。これはモータコントローラの仕様上(分解能)起こるものです。正確には取得された値で制御を行っています。

【20】MtrSetMotionLine(※PCI-7204では使用できません。) 直線補間動作パラメータの設定をします。 宣言 INT MtrSetMotionLine(HANDLE hDeviceHandle, PMTRMOTIONLINE lpMotionLine); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 lpMotionLine 動作パラメータ情報を格納する構造体(MTRMOTIONLINE 構造体)へのポインタ

です。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 直線補間動作パラメータは PCI-7208,9でのみ設定可能となっています。(その他の型式では設定できません。) 直線補間動作は、同一ボード上のデバイスでのみ可能となっています。(異なるボード上のデバイスによる直線補間動作を行うことはできません。)このため、PCI-7208では最大で 4デバイス(4軸)、PCI-7209では2デバイス(2軸)での直線補間動作が可能となります。 本関数では動作パラメータをセットするのみで、実際の動作(パルス出力)は行いません。直線補間動作の起動はMtrStartMotion関数および、MtrSetSync関数,MtrStartSync関数による同時起動により行います。 実行手順 ①MtrStartMotionLine関数による直線補間動作パラメータの設定。 ②MtrSetSync関数による同時起動要求。 ③MtrSetMotion関数による動作起動待ち状態。 ④MtrStartSync関数による同時起動スタート(外部接続が必要となります。)

Page 79: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

74

【21】MtrGetMotionLine(※PCI-7204では使用できません。) 直線補間動作パラメータの設定を取得します。 宣言 INT MtrGetMotionLine(HANDLE hDeviceHandle, PMTRMOTIONLINE lpMotionLine); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 lpMotionLine 動作パラメータ情報を格納する構造体(MTRMOTIONLINE 構造体)へのポイ

ンタです。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

解説 直線補間動作パラメータは PCI-7208,7209でのみ取得可能となっています。(それ以外の型式では取得でき ません。) 設定した値と異なる値が戻ってくる場合があります。これはモータコントローラの仕様上(分解能)起こるものです。正確には取得された値で制御を行っています。

Page 80: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

75

【22】MtrStartMotion 各種動作(連続動作,原点復帰動作,PTP動作,直線補間動作)を起動します。 宣言 INT MtrStartMotion(HANDLE hDeviceHandle, DWORD dwMode); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 起動動作を指定します。 定数 値 意味 7204 7208 7209 MTR_JOG 0 連続動作 ○ ○ ○ MTR_ORG 1 原点復帰動作 ○ ○ ○ MTR_PTP 2 PTP動作 ○ ○ ○ MTR_LINE 6 直線補間動作 × ○ ○ 【加減速オプション】 MTR_CONST 0x10000 定速動作をします

※加減速オプションは起動動作に OR 指定することにより設定します。(オプションを設定しない場合は、加減速動作を行います。) 例)"MTR_CONST | MTR_PTP" (0x10002)と指定することにより、定速 PTP動作を起動します。 ("MTR_PTP"と指定すると、加減速 PTP動作を起動します。)

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 直線補間動作は、PCI-7208,7209でのみ起動可能となっています。(それ以外の型式では、起動することはできません。)なお、直線補間動作は、MtrStartSync関数による同時起動を使用して行います。(外部接続が必要となります。)MtrSetSync関数による同時起動要求後、本関数により直線補間動作の起動待ち状態とし、MtrStartSync関数を実行することにより直線補間動作を起動します。

また、直線補間動作に加減速オプションMTR_CONSTを指定する場合には、直線補間動作を行うすべてのデバイスに対して MTR_CONST を指定してください。(指定していない場合には、誤動作,暴走の危険性があります。) PCI-7204 における原点復帰動作は、定速動作のみとなります。(MTR_CONST を指定しない場合においても定速動作となります。)また、PCI-7204では、原点復帰動作において ORG信号(原点信号)の検知により動作を停止した場合、カウンタ値は"0"にクリアされます。 MtrSetSync関数により同時起動が要求されている場合には、MtrStartMotion関数実行後、対応する TRIGIN端子に同期信号が入力されるまで動作は起動されません。同時起動が要求されている場合には、同期信号の外部接続を行い、同期タイミング信号(TRGOUT)が接続されているデバイスにおいて MtrStartSync 関数を実行して下さい。

PCI-7208,7209において加減速オプション MTR_CONSTを指定した場合には、±SD信号入力による減速(減速停止)は行いません。(MtrStopMotion関数による減速停止も行うことはできません。)

Page 81: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

76

【23】MtrStopMotion 動作を停止させます。 宣言 INT MtrStopMotion(HANDLE hDeviceHandle, DWORD dwMode); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 停止方法を指定します。 定数 値 意味 7204 7208 7209 MTR_DEC_STOP 0 減速停止 ○ ○ ○ MTR_IMMEDIATE_STOP 1 即時停止 ○ ○ ○ MTR_STOP_ALL 2 一斉停止 × ○ ○

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 一斉停止は、PCI-7208,7209 における直線補間動作時にのみ指定可能となっています。(それ以外の型式、および直線補間動作以外の場合には指定することはできません。) PCI-7208,7209 における直線補間動作時に減速停止を指定した場合、直線補間動作を行っているすべてのデバイスが減速停止します。 PCI-7208,7209 における直線補間動作時に即時停止を指定した場合、指定したデバイスのみが即時停止します。 PCI-7208,7209における定速動作時(MtrStartMotion関数において、加減速オプション MTR_CONSTを指定)には、減速停止を指定した場合においても、停止は即時停止となります。

【24】MtrRestart(※PCI-7204では使用できません。) 停止した動作を再開させます。 宣言 INT MtrRestart(HANDLE hDeviceHandle); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 PCI-7204では、動作を再開させることはできません。 本関数では、MtrStopMotion 関数により停止させたデバイスの動作のみを再開させます。それ以外の要因により停止した場合(パルス出力完了,リミット信号による停止等)には、動作を再開させることはできません。 MtrSetSync関数により同時起動が要求されている場合には、本関数実行後、対応する TRIGIN端子に同期信号が入力されるまで動作は起動(再開)されません。同時起動が要求されている場合には、同期信号の外部接続を行い、同期タイミング信号(TRGOUT)が接続されているデバイスにおいてMtrStartSync関数を実行して下さい。

Page 82: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

77

【25】MtrSetSync

同時起動の設定を行います。 宣言 INT MtrSetSync(HANDLE hDeviceHandle, DWORD dwSynchronize); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwSynchronize 同時起動の設定を指定します。 定数 値 意味 MTR_RESET_SYNC_START 0 同時起動要求解除 MTR_SET_SYNC_START 1 同時起動要求

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数では同時起動を要求するのみで、実際の動作(パルス出力)は行いません。起動させるためには、同時起動させる各デバイスの同期信号を外部接続する必要があります。起動の開始はベースとなるデバイスにおいてMtrStartSync関数を実行することにより行います。 PCI-7204,7208,7209では、本関数による同時起動要求(MTR_SET_SYNC_STARTを指定)後、MtrStartMotion関数を実行し同時起動待ち状態に移行後、同時起動要求を解除(MTR_RESET_SYNC_START を指定)した場合、MtrStartMotion関数により指定された動作が起動されます。

【26】MtrGetSync 同時起動の設定を取得します。 宣言 INT MtrGetSync(HANDLE hDeviceHandle, PDWORD lpdwSynchronize); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 lpdwSynchronize バッファへのポインタを指定します。このバッファに同時起動の設定を示す値

が格納されます。 定数 値 意味 MTR_RESET_SYNC_START 0 同時起動要求解除 MTR_SET_SYNC_START 1 同時起動要求

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 83: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

78

【27】MtrStartSync 同時起動を行います。 宣言 INT MtrStartSync(HANDLE hDeviceHandle); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 同時起動を行う際には、同時起動させる各デバイスの同期信号を外部接続し、MtrSetSync 関数を実行して同時起動の要求を行ってください。 PCI-7208,7209における直線補間動作は、本関数による同時起動を使用して行います。(外部接続が必要となります。)

【28】MtrSingleStep 1パルス出力を行います。 宣言 INT MtrSingleStep(HANDLE hDeviceHandle, INT nDi); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 nDir 移動方向を指定します。 定数 値 意味 MTR_CW 1 CW方向へ移動 MTR_CCW -1 CCW方向へ移動

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 MtrSetSync 関数により同時起動が要求されている場合には、本関数実行後、対応する TRIGIN 端子に同期信号が入力されるまで動作は起動されません。同時起動が要求されている場合には、同期信号の外部接続を行い、同期タイミング信号(TRGOUT)が接続されているデバイスにおいてMtrStartSync関数を実行して下さい。

Page 84: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

79

【29】MtrChangeSpeed 動作中に移動速度を変更します。 宣言 INT MtrChangeSpeed(HANDLE hDeviceHandle, DWORD dwMode, DWORD dwSpeed); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 速度変更方式を指定します。 定数 値 意味 7204 7208 7209 MTR_IMMEDIATE_CHANGE 0 即時速度変更 ○ × × MTR_ACCDEC_CHANGE 1 加減速速度変更 ○ ○ ○ MTR_DEC_LOW_SPEED 4 起動時速度へ減速 × ○ ○ MTR_RELEASE_DEC 5 起動時速度への減速解除 × ○ ○ MTR_HOLD_NOW_SPEED 6 現在の速度へ固定 × ○ ○ MTR_RELEASE_HOLD 7 現在の速度への固定解除 × ○ ○ dwSpeed 変更速度を指定します 【即時速度変更の場合】 PCI-7204:2~66,670[Hz]

※基準クロックにより設定範囲が異なります。 【加減速速度変更の場合】 PCI-7204: 2~66,670[Hz]

PCI-7208,7209:1~1,000,000[Hz] ※基準クロック/速度分解能により設定範囲が異なります。

【起動時速度へ減速,起動時速度への減速解除,現在の速度へ固定, 現在の速度への固定解除の場合】 0を指定して下さい。

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 dwSpeed にて指定した速度まで、正確に変更されない場合があります。これはモータコントローラの仕様上(分解能)起こるものです。 加減速速度変更における加減速時間/加減速パルス数は、MtrSetMotion関数で指定した値に従います。 即時速度変更は、PCI-7204のみで使用可能となっています。(それ以外の型式では、使用できません。) 起動時速度へ減速,起動時速度への減速解除,現在の速度へ固定,現在の速度への固定解除は、PCI-7208,7209でのみ使用可能となっています。(それ以外の型式では、使用できません。)また、この場合には dwSpeedの設定内容は無効となります。(0を指定して下さい。) PCI-7204 における即時速度変更,加減速速度変更は、起動時速度~移動速度の速度区間でのみ可能となっています。 PCI-7208,7209 における速度変更は、加減速動作時にのみ可能となっています。(MtrStartMotion 関数における加減速オプションMTR_CONSTの指定による定速動作時には、速度変更を行うことはできません。)

Page 85: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

80

【30】MtrReadSpeed(※PCI-7204では使用できません。) 現在の移動速度を読み出します。 宣言 INT MtrReadSpeed(HANDLE hDeviceHandle, PDWORD lpdwSpeed); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 lpdwSpeed バッファへのポインタを指定します。このバッファに移動速度を示す値が格納

されます。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 移動速度の読み出しは、PCI-7208,7209 でのみ可能となっています。(それ以外の型式では、読み出すことはできません。)

【31】MtrReadCounter 各種カウンタ値の読み込みを行います。 宣言 INT MtrReadCounter(HANDLE hDeviceHandle, DWORD dwMode, PINT lpnPos); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 対象カウンタを指定します。 定数 値 意味 7204 7208 7209 MTR_ENCODER 0 エンコーダ値 × ○ ○ MTR_COUNTER 1 カウンタ値 ○ ○ ○ MTR_REMAINS 2 残りパルス数 × ○ ○ lpnPos バッファへのポインタを指定します。このバッファにカウンタ値が格納されます。

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 PCI-7204ではエンコーダをサポートしていないため、MTR_ENCODERを指定することはできません。また、PCI-7204では残りパルス数を読み込むことができないため、MTR_REMAINSを指定することはできません。

Page 86: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

81

【32】MtrWriteCounter 各種カウンタ値の書き込みを行います。 宣言 INT MtrWriteCounter(HANDLE hDeviceHandle, DWORD dwMode, INT nPos); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 書込みを行うカウンタを指定します。 定数 値 意味 7204 7208 7209 MTR_ENCODER 0 エンコーダ値 × ○ ○ MTR_COUNTER 1 カウンタ値 ○ ○ ○ nPos バッファへのポインタを指定します。このバッファにカウンタ値を指定します。

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 PCI-7204ではエンコーダをサポートしていないため、MTR_ENCODERを指定することはできません。

【33】MtrClearCounter 各種カウンタ値をクリアします。 宣言 INT MtrClearCounter(HANDLE hDeviceHandle, DWORD dwMode); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode クリアするカウンタを指定します。 定数 値 意味 7204 7208 7209 MTR_ENCODER 0 エンコーダ値 × ○ ○ MTR_COUNTER 1 カウンタ値 ○ ○ ○

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 PCI-7204ではエンコーダをサポートしていないため、MTR_ENCODERを指定することはできません。

Page 87: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

82

【34】MtrGetStatus 各種ステータスを取得します。 宣言 INT MtrGetStatus(HANDLE hDeviceHandle, DWORD dwMode, PDWORD lpdwStatus); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwMode 取得するステータスを指定します。 定数 値 意味 7204 7208,7209 MTR_BUSY 0 動作状態 ○ ○ MTR_FINISH_STATUS 1 終了ステータス ○ ○ MTR_LIMIT_STATUS 2 リミット信号 ○ ○ MTR_INTERLOCK_STATUS 4 インタロック信号 ○ ○ MTR_ERROR_CODE 5 エラーステータス ○ × MTR_COMPARATOR_STATUS 7 コンパレータステータス × ○ lpdwStatus バッファへのポインタを指定します。このバッファに設定値が格納されます。 【動作状態の場合】 以下のビット構成で格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 CLR - STOP ERR - DEC ACC BUSY bit31~8,6,3 不定

bit7 CLR信号 0:OFF 1:ON bit5 動作完了フラグ 0:OFF 1:ON bit4 エラーフラグ 0:OFF 1:ON bit2 減速中 0:NO 1:YES bit1 加速中 0:NO 1:YES bit0 動作中 0:NO 1:YES

【終了ステータスの場合】 以下のビット構成で格納されます。 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 - ALM ORG Z -EL +EL -SD +SD Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - - CMD FNS bit31~15 不定

bit14 ALM信号により停止 0:NO 1:YES bit13 ORG信号により停止 0:NO 1:YES bit12 Z相信号により停止 0:NO 1:YES bit11 -EL信号により停止 0:NO 1:YES bit10 +EL信号により停止 0:NO 1:YES bit9 -SD信号により停止 0:NO 1:YES bit8 +SD信号により停止 0:NO 1:YES bit7~2 不定 bit1 MtrStopMotion関数により停止 0:NO 1:YES bit0 パルス出力完了により停止 0:NO 1:YES

【リミット信号の場合】 以下のビット構成で格納されます。 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 - - - - - - MARK INP Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - ALM ORG Z -EL +EL -SD +SD bit31~10,7 不定

bit9,8,6~0 0:入力なし 1:入力あり

Page 88: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

83

【インタロック信号の場合】 定数 値 意味 MTR_ILOCK_OFF 0 インタロック信号入力なし MTR_ILOCK_ON 1 インタロック信号入力あり 【エラーステータスの場合】PCI-7204のみ 値 意味 00h エラーなし 01h 未定義命令を受け取った 02h 初期設定命令がされていない

03h リミット信号または ALM信号が入力されているため、動作を起動できない

04h 移動量が 0のため、動作を起動できない 05h 停止中に停止命令を受け取った 06h コマンドの先行しないデータを受け取った 07h データ待ち中にコマンドを受け取った 08h ORG信号が入力されているため、原点復帰動作を起動できない 0Ah 初期設定命令の速度値が異常 0Bh 初期設定命令の加減速パルス数が過小 0Ch 初期設定命令の起動時速度が移動速度より大きい 0Dh 動作命令または速度変更命令時に指定された速度が範囲外

0Eh ±SD 信号検知または減速停止による減速中に速度変更命令を受け取った

0Fh ±SD 信号検知または減速停止による減速中に減速停止命令を受け取った

10h 停止中に速度変更命令を受け取った 11h 初期設定命令時の加減速階段数の異常(自由曲線加減速指定時)

12h 初期設定命令時の加減速階段における速度異常(自由曲線加減速指定時)

13h 初期設定命令時の加減速階段における加減速パルス数異常(自由曲線加減速指定時)

【コンパレータステータスの場合】PCI-7208,7209のみ 以下のビット構成で格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - - CMP2 CMP1

bit31~2 不定 bit1 比較条件 2 0:NO 1:YES bit0 比較条件 1 0:NO 1:YES

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 PCI-7204 における動作状態は、bit0 のみ有効となります。(それ以外の bit は、すべて不定となります。)また、PCI-7204 ではエンコーダ,MARK信号,INP 信号をサポートしていないため、終了ステータスの bit12およびリミット信号の bit4,8,9は不定となります。 PCI-7208では CLR 信号,MARK信号,INP信号をサポートしていないため、動作状態の bit7,リミット信号の bit8,9は不定となります。 エラーステータスは、PCI-7204でのみ使用可能となっています。(それ以外の型式では。使用できません。) コンパレータステータスは、PCI-7208,7209 でのみ使用可能となっています。(それ以外の型式では、使用できません。)

Page 89: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

84

【35】MtrOutputDO(※PCI-7208では使用できません。) 汎用出力を制御します。 宣言 INT MtrOutputDO(HANDLE hDeviceHandle, DWORD dwDO); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwDO バッファへのポインタを指定します。このバッファに汎用出力端子の出力接点

状態を下記のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - DO4 DO3 DO2 DO1

bit31~4 未使用(0を指定) bit3~0 0:Highを出力 1:Lowを出力

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 PCI-7208では汎用出力をサポートしていないため、本関数を使用することはできません

【36】MtrInputDI(※PCI-7208では使用できません。) 汎用入力の状態を取得します。 宣言 INT MtrInputDI(HANDLE hDeviceHandle, PDWORD lpdwDI); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 lpdwDI バッファへのポインタを指定します。このバッファに汎用入力端子の入力接点

状態が下記のビット構成で格納されます。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - DI4 DI3 DI2 DI1

bit31~4 不定 bit3~0 0:外部機器の状態が High 1:外部機器の状態が Low

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 PCI-7208では汎用入力をサポートしていないため、本関数を使用することはできません

Page 90: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

85

【37】MtrOutputDO1(※PCI-7209のみ有効) 汎用出力 DO1を制御します。 宣言 INT MtrOutputDO1(HANDLE hDeviceHandle, DWORD dwDO1); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwDO1 バッファへのポインタを指定します。このバッファに汎用出力端子の出力接点

状態を下記のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - - - DO1

bit31~1 未使用(0を指定) bit0 0:Highを出力 1:Lowを出力

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数は、PCI-7209でのみ使用可能となっています。(それ以外の型式では、使用することはできません。) 本関数では、MtrOutputDO関数とは異なり、DO1のみを制御することが可能です。(MtrOutputDO関数では、DO1~DO4を一括して制御します。)

【38】MtrOutputDO2(※PCI-7209のみ有効) 汎用出力 DO2を制御します。 宣言 INT MtrOutputDO2(HANDLE hDeviceHandle, DWORD dwDO2); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwDO2 バッファへのポインタを指定します。このバッファに汎用出力端子の出力接点

状態を下記のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - - DO2 -

bit31~2,0 未使用(0を指定) bit1 0:Highを出力 1:Lowを出力

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数は、PCI-7209でのみ使用可能となっています。(それ以外の型式では、使用することはできません。) 本関数では、MtrOutputDO関数とは異なり、DO2のみを制御することが可能です。(MtrOutputDO関数では、DO1~DO4を一括して制御します。)

Page 91: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

86

【39】MtrOutputDO3(※PCI-7209のみ有効) 汎用出力 DO3を制御します。 宣言 INT MtrOutputDO3(HANDLE hDeviceHandle, DWORD dwDO3); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwDO3 バッファへのポインタを指定します。このバッファに汎用出力端子の出力接点

状態を下記のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - DO3 - -

bit31~3,1,0 未使用(0を指定) bit2 0:Highを出力 1:Lowを出力

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数は、PCI-7209でのみ使用可能となっています。(それ以外の型式では、使用することはできません。) 本関数では、MtrOutputDO関数とは異なり、DO3のみを制御することが可能です。(MtrOutputDO関数では、DO1~DO4を一括して制御します。)

【40】MtrOutputDO4(※PCI-7209のみ有効) 汎用出力 DO4を制御します。 宣言 INT MtrOutputDO4(HANDLE hDeviceHandle, DWORD dwDO4); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwDO4 バッファへのポインタを指定します。このバッファに汎用出力端子の出力接点

状態を下記のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - DO4 - - -

bit31~4,2~1 未使用(0を指定) bit3 0:Highを出力 1:Lowを出力

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数は、PCI-7209でのみ使用可能となっています。(それ以外の型式では、使用することはできません。) 本関数では、MtrOutputDO関数とは異なり、DO4のみを制御することが可能です。(MtrOutputDO関数では、DO1~DO4を一括して制御します。)

Page 92: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

87

【41】MtrOutputCLR(※PCI-7209のみ有効) CLR信号を制御します。 宣言 INT MtrOutputCLR(HANDLE hDeviceHandle, DWORD dwCLR); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwCLR バッファへのポインタを指定します。このバッファに CLR 信号端子の出力接

点状態を下記のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 CLR - - - - - - -

bit31~8,6~0 未使用(0を指定) bit7 0:Highを出力 1:Lowを出力

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数は、PCI-7209でのみ使用可能となっています。(それ以外の型式では、使用することはできません。)

【42】MtrOutputSON(※PCI-7209のみ有効) SON信号を制御します。 宣言 INT MtrOutputSON(HANDLE hDeviceHandle, DWORD dwSON); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 dwSON バッファへのポインタを指定します。このバッファに SON 信号端子の出力接

点状態を下記のビット構成で指定します。 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - SON - - - - - -

bit31~7,5~0 未使用(0を指定) bit6 0:Highを出力 1:Lowを出力

戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数は、PCI-7209でのみ使用可能となっています。(それ以外の型式では、使用することはできません。)

Page 93: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

88

【43】MtrSetEvent 割り込みの設定(メッセージ、コールバック関数の登録)を行います。 宣言 INT MtrSetEvent(HANDLE hDevice, PMTREVENTREQ Event);

パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 Event 割り込み設定情報を格納する構造体(MTREVENTREQ構造体)へのポインタで

す。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数で割り込みメッセージを設定し、割り込み要因はMtrSetEventMask関数により設定します。 従って割り込みの設定は、本関数とMtrSetEventMask関数を実行する必要があります。 メッセージ送出時、LPARAMには割り込み要因が格納されます。フォーマットは、MTREVENTTABLE構造体の各要因と同じになります。

【44】MtrGetEvent 割り込みの設定を取得します。 宣言 INT MtrGetEvent(HANDLE hDeviceHandle, PMTREVENTREQ Event); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 Event 割り込み設定情報を格納する構造体(MTREVENTREQ構造体)へのポインタで

す。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

Page 94: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

89

【45】MtrSetEventMask 割り込みマスクの設定を行います。 宣言 INT MtrSetEventMask(HANDLE hDeviceHandle, PMTREVENTTABLE Mask); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 Mask イベントマスク情報を格納する構造体(MTREVENTTABLE 構造体)へのポイ

ンタです。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 本関数で割り込み要因を設定し、割り込みメッセージはMtrSetEvent関数により設定します。 従って割り込みの設定は、本関数とMtrSetEvent関数を実行する必要があります。

【46】MtrGetEventMask 割り込みマスクの設定を取得します。 宣言 INT MtrGetEventMask(HANDLE hDeviceHandle, PMTREVENTTABLE Mask); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 Mask イベントマスク情報を格納する構造体(MTREVENTTABLE 構造体)へのポイ

ンタです。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。

【47】MtrReset モータコントローラのリセットを行います。リセットで初期化されるものは次の5項目です。 ・対応軸のコントローラ IC ・対応軸のリミット信号マスク設定 ・対応軸の同時起動コマンド要求設定 ・対応軸のパルス出力モード設定 ・対応軸のリミット信号入力論理設定

宣言 INT MtrReset(HANDLE hDeviceHandle); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 MtrReset関数によるリセットでは、割り込みは発生しません。

Page 95: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

90

【48】MtrOffInterLock インタロック解除を行います。(ソフトウェア) 宣言 INT MtrOffInterLock(HANDLE hDeviceHandle); パラメータ

hDeviceHandle 有効なデバイスハンドルを指定します。 戻り値 関数が成功するとMTR_ERROR_SUCCESSが返されます。 関数が失敗すると MTR_ERROR_SUCCESS 以外の値が返ります。関数が失敗した場合の戻り値については「エラーコード一覧」を参照してください。 解説 インタロック信号が入力されると、ボードはリセットされ初期化されます。初期値から変更して制御を行なわれている場合には再設定が必要です。(MtrSetPulseOut関数,MtrSetLimitConfig関数等) インタロック解除は、インタロック信号の入力(ハードウェア)を解除した後、本関数(ソフトウェアによるインタロック解除)を実行してください。 また、インタロック解除を行うまで、起動関数(MtrStartMotion関数等)の実行はできません。

Page 96: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

91

エラーコード一覧

定数 値 意味 要因

MTR_ERROR_SUCCESS 0 正常終了 MTR_ERROR_NOT_DEVICE 0xC0000001 ドライバが呼び出せません。 指定されたデバイスが見つかり

ませんでした。指定しているデバイス名が存在するかどうかを確認してください。

MTR_ERROR_NOT_OPEN 0xC0000002 ドライバが OPENできません。 デバイスのオープン時に何らかのエラーが発生しました。ドライバの内部作業領域の確保に失敗したなど。

MTR_ERROR_INVALID_HANDLE 0xC0000003 デバイスハンドルが正しくありません。

不正なデバイスハンドルで呼び出しを行おうとしました。OPEN関数で返されたデバイスハンドルを使用してください。

MTR_ERROR_ALREADY_OPEN 0xC0000004 すでに OPENしているデバイスを OPENしようとしました。

既に OPEN されているデバイスです。

MTR_ERROR_NOT_SUPPORTED 0xC0000009 サポートされていない機能です。

指定したデバイスにおいて、サポートされていない機能を選択しました。

MTR_ERROR_NOW_MOVING 0xC0001000 モータ動作中です。 モータが動作中のため、実行できません。

MTR_ERROR_NOW_STOPPED 0xC0001001 モータ停止中です。 モータが停止中のため、実行できません。

MTR_ERROR_WRITE_FAILED 0xC0001010 モータコントローラへの書き込みに失敗しました。

MTR_ERROR_READ_FAILED 0xC0001011 モータコントローラからの読み込みに失敗しました。

MTR_ERROR_INVALID_AXIS 0xC0001013 軸番号指定に誤りがあります。 軸番号が正しくない。 現在使用できない軸番号を指定している。

MTR_ERROR_INVALID_SPEED 0xC0001014 速度指定に誤りがあります。 設定速度が範囲を超えている。MTR_ERROR_INVALID_ACCDEC 0xC0001015 加減速時間指定に誤りがありま

す。 設定加減速時間が範囲を超えている。

MTR_ERROR_INVALID_PULSE 0xC0001016 移動量の指定に誤りがあります。

移動量が範囲を超えている。

MTR_ERROR_INVALID_PARAMETER

0xC0001017 パラメータが不正です。 引数の値が不正です。 引数の値の範囲が指定外です。

MTR_ERROR_NOW_INTERLOCKED

0xC0001020 インタロック中。 インタロックを解除するまで実行できません。

MTR_ERROR_IMPOSSIBLE 0xC0001021 実行不可。 ボードにない機能を使用した。現在、実行できない状態にある。

MTR_ERROR_NOT_ALLOCATE_MEMORY

0xC0001024 メモリが確保できません。 ドライバ内部で作業をするためのメモリ確保に失敗しました。

Page 97: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

92

5.2. 構造体一覧

No 構造体名 使用関数名 PCI-7204 PCI-7208 PCI-7209 1 MTRDEVICE MtrGetDeviceInfo ○ ○ ○

2 MTRORIGINALACC MtrSetAccCurve MtrGetAccCurve ○ × ×

3 MTRMOTION MtrSetMotion MtrGetMotion ○ ○ ○

4 MTRMOTIONLINE MtrSetMotionLine MtrGetMotionLine × ○ ○

5 MTREVENTTABLE MtrSetEventMask MtrGetEventMask ○ ○ ○

6 MTREVENTREQ MtrSetEvent MtrGetEvent ○ ○ ○

【1】MTRDEVICE構造体 typedef struct { DWORD dwType; DWORD dwRSW; DWORD dwAxis; } MTRDEVICE; メンバ 説明 dwType ボード型式 dwRSW RSW番号 dwAxis 軸番号

【2】MTRORIGINALACC構造体 typedef struct { DWORD dwSpeed; DWORD dwAcc; } MTRORIGINALACC; メンバ 説明 dwSpeed 自由曲線加減速速度[Hz] dwAcc 自由曲線加減速パルス数

Page 98: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

93

【3】MTRMOTION構造体 typedef struct { DWORD dwMode; DWORD dwLowSpeed; DWORD dwSpeed; DWORD dwAcc; DWORD dwDec; DWORD dwSSpeed; INT nStep; INT nReserved; } MTRMOTION; メンバ 説明 dwMode 加減速設定 定数 値 意味 7204 7208 7209 MTR_ACC_NORMAL 0 直線加減速 ○ ○ ○ MTR_ACC_SIN 1 S字加減速 ○ ○ ○ MTR_ACC_EXP 2 放物線加減速 ○ ○ ○ MTR_ACC_ORIGINAL 3 自由曲線加減速 ○ × × 【原点復帰動作オプション】 MTR_STOP_ORG_EZ 0100 h ORG信号入力後Z相信号入力により停止 原点復帰動作オプションは、加減速設定にOR指定することにより設定します。

(オプションを指定しない場合には、ORG信号入力により停止します。) 例)"MTR_ACC_SIN | MTR_STOP_ORG_EZ"(0x0101)と指定することにより、S 字加減速,ORG 信号入力後、Z 相信号入力により停止に設定します。("MTR_ACC_SIN"と指定すると、S字加減速,ORG信号入力により停止に設定します。)

【PTP動作オプション】 MTR_MARK 0400 h MARK信号入力により位置決め開始

MTR_MARK_ACC 0800 h MARK信号入力により加速し、位置決め開始

Page 99: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

94

PTP動作オプションは、加減速設定に OR指定することにより設定します。(オプションを指定しない場合には、通常の位置決めを行います。) 例)"MTR_ACC_SIN | MTR_MARK"(0x0401)と指定することにより、S字加減速,MARK 信号入力により位置決め開始に設定します。("MTR_ACC_SIN"と指定すると、S字加減速による位置決めに設定します。)

※1 自由曲線加減速は、PCI-7204 でのみ指定可能となっています。(それ以外

の型式では、指定することはできません。) ※2 原点復帰動作オプションは、原点復帰動作パラメータ設定時のみ有効となります。(それ以外の動作パラメータ設定時には無効となります。)また、PCI-7204ではエンコーダをサポートしていないため、原点復帰動作オプションは無効となります。 ※3 PTP動作オプションは、PCI-7209における PTP動作パラメータ設定時のみ有効となります。(それ以外の型式では、無効となります。)

dwLowSpeed 起動時速度 PCI-7204: 2~66,670[Hz] (基準クロックにより、設定範囲が変わります。) ※自由曲線加減速指定時には、起動時速度の設定値は無効になります。(起動時速度は、自由曲線加減速設定の 1段目の速度となります。) PCI-7208,7209: 1~1,000,000[Hz] (速度分解能により、設定範囲が変わります。)

dwSpeed 移動速度(起動時速度以上の値を設定してください。) PCI-7204: 2~66,670[Hz] (基準クロックにより、設定範囲が変わります。) PCI-7208,7209: 1~1,000,000[Hz] (速度分解能により、設定範囲が変わります。)

dwAcc 加速時間/加速パルス数 PCI-7204: 加速パルス数 8~65,635 ※自由曲線加減速指定時には、加速パルス数の設定値は無効となります。 PCI-7208,7209: 加速時間 直線加減速時:0~130,000[ms] S字加減速時:0~110,000[ms] (速度分解能により、設定可能範囲が変わります。)

Page 100: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

95

dwDec 減速時間/減速パルス数 PCI-7204: 減速パルス数 8~65,635 (加速パルス数:dwAccと同じ値を設定してください。) ※自由曲線加減速指定時には、減速パルス数の設定値は無効となります。 PCI-7208,7209: 減速時間 直線加減速時:0~130,000[ms] S字加減速時:0~110,000[ms] (速度分解能により、設定可能範囲が変わります。)

dwSSpeed S字加減速区間速度 PCI-7204: 指定できません。(無効となります。) PCI-7208,7209: 1~499,999[Hz] (速度分解能,起動時速度,移動速度により、設定可能範囲が変わります。)※直線加減速時には、無効となります(0を指定してください)。

nStep 移動パルス数 PCI-7204,7208,7209: -16,777,215~+16,777,215 ※連続動作,原点復帰では CW 方向の場合は MTR_CW(1)、CCW 方向の場合は MTR_CCW(-1)を指定してください。

nReserved 将来拡張用(0を指定して下さい。)

Page 101: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

96

【4】MTRMOTIONLINE構造体 typedef struct { DWORD dwMode; DWORD dwLowSpeed; DWORD dwSpeed; DWORD dwAcc; DWORD dwDec; DWORD dwSSpeed; INT nXStep; INT nYStep; INT nReserved; } MTRMOTIONLINE; メンバ 説明 dwMode 加減速設定 定数 値 意味 MTR_ACC_NORMAL 0 直線加減速 MTR_ACC_SIN 1 S字加減速 MTR_ACC_EXP 2 放物線加減速 ※直線補間動作を行うすべてのデバイスにおいて、同じ値を設定してくださ

い。 dwLowSpeed 最大移動デバイスの起動時速度 PCI-7208,7209: 1~1,000,000[Hz]

(速度分解能により、設定範囲が変わります。) ※直線補間動作を行うすべてのデバイスにおいて、同じ値を設定してください。

dwSpeed 最大移動デバイスの移動速度(起動時速度以上の値を設定してください。)PCI-7208,7209: 1~1,000,000[Hz] (速度分解能により、設定範囲が変わります。) ※直線補間動作を行うすべてのデバイスにおいて、同じ値を設定してください。

dwAcc 最大移動デバイスの加速時間 PCI-7208,7209: 直線加減速時:0~130,000[ms]S字加減速時:0~110,000[ms] (速度分解能により、設定可能範囲が変わります。) ※直線補間動作を行うすべてのデバイスにおいて、同じ値を設定してください。

dwDec 最大移動デバイスの減速時間 PCI-7208,7209: 直線加減速時:0~130,000[ms]S字加減速時:0~110,000[ms] (速度分解能により、設定可能範囲が変わります。) ※直線補間動作を行うすべてのデバイスにおいて、同じ値を設定してください。

dwSSpeed 最大移動デバイスの S字加減速区間速度 PCI-7208,7209: 1~499,999[Hz] (速度分解能,起動時速度,移動速度により、設定可能範囲が変わります。)※直線加減速時には、無効となります(0を指定してください)。 ※直線補間動作を行うすべてのデバイスにおいて、同じ値を設定してください。

nXStep 自デバイスの移動パルス数 PCI-7208,7209: -16,777,215~+16,777,215

nYStep 最大移動デバイスの移動パルス数 PCI-7208,7209: -16,777,215~+16,777,215 ※直線補間動作を行うすべてのデバイスにおいて、同じ値を設定してください。

nReserved 将来拡張用(0を指定して下さい。)

Page 102: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

97

【5】MTREVENTREQ構造体 typedef struct { HANDLE hWnd; UINT uPulseOut; UINT uCounter; UINT uComparator; UINT uSignal; UINT uReserved; LPMTRCALLBACK lpCallBackProc; DWORD dwUser; } MTREVENTREQ; メンバ 説明 hWnd メッセージ送出ウィンドウハンドル

MtrSetEventMask 関数にて設定した各種割り込み発生時に送出するメッセージのポスト先ウィンドウハンドルを指定します。 (メッセージ送出時に、LPARAM には割り込み要因が格納されます。フォーマットはMTREVENTTABLE構造体の各要因と同じになります。) メッセージポストを行わない場合には NULLを指定してください。

uPulseOut パルス出力割り込みメッセージ MTREVENTTABLE 構造体の dwPulseOut にて設定した割り込み発生時に送出するメッセージコードを指定します。 メッセージポストを行わない場合にはWM_NULLを指定してください。

uCounter カウンタ割り込みメッセージ MTREVENTTABLE構造体の dwCounterにて設定した割り込み発生時に送出するメッセージコードを指定します。 メッセージポストを行わない場合にはWM_NULLを指定してください。 ※PCI-7204では使用できません。(WM_NULLを指定してください。)

uComparator コンパレータ割り込みメッセージ MTREVENTTABLE 構造体の dwComparator にて設定した割り込み発生時に送出するメッセージコードを指定します。 メッセージポストを行わない場合には、WM_NULLを指定してください。 ※PCI-7204では使用できません。(WM_NULLを指定してください。)

uSignal 外部信号メッセージ MTREVENTTABLE構造体のdwSignalにて設定した割り込み発生時に送出するメッセージコードを指定します。 メッセージポストを行わない場合にはWM_NULLを指定してください。 ※インタロックによるリセット時にも、uSignal で指定したメッセージが送出されます。

uReserved 将来拡張用 WM_NULLを指定してください。

lpCallBackProc MtrSetEventMask 関数にて設定した各種割り込み発生時に呼び出されるユーザ・コールバック関数のアドレスを指定します。 ユーザ・コールバック関数の呼び出しを行わない場合には NULLを指定してください。

dwUser ユーザ・コールバック関数へ引き渡すユーザ・データを指定します。

Page 103: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

98

【6】MTREVENTTABLE構造体 typedef struct { DWORD dwPulseOut; DWORD dwCounter; DWORD dwComparator; DWORD dwSignal; DWORD dwReserved; } MTREVENTTABLE;

メンバ 説明 dwPulseOut パルス出力割り込み Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - MAX - UNI DEC - STOP dwSpeed bit31~6,4,1 未使用(0を指定してください。)

bit5 最大加速度割り込み 0:禁止 1:許可 bit3 等速度割り込み 0:禁止 1:許可 bit2 減速開始割り込み 0:禁止 1:許可 bit0 モータ停止割り込み 0:禁止 1:許可 ※PCI-7204では、モータ停止割り込み(bit0)のみを使用します。(それ以外のbitは、すべて 0を指定して下さい。)

dwCounter カウンタ割り込み Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - RB - CB CC EB EC bit31~6,4 未使用(0を指定してください。)

bit5 残りパルス数 ボロー割り込み 0:禁止 1:許可 bit3 カウンタ ボロー割り込み 0:禁止 1:許可 bit2 カウンタ キャリー割り込み 0:禁止 1:許可 bit1 エンコーダ ボロー割り込み 0:禁止 1:許可 bit0 エンコーダ キャリー割り込み 0:禁止 1:許可 ※PCI-7204では使用できません。(0を指定して下さい。)

wComparator コンパレータ割り込み Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - - - CMP2 CMP1 bit31~2 未使用(0を指定して下さい。)

bit1 比較条件 2成立割り込み 0:禁止 1:許可 bit0 比較条件 1成立割り込み 0:禁止 1:許可 ※PCI-7204では使用できません。(0を指定して下さい。)

dwSignal 外部信号割り込み Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - RST MARK DI1 Z ORG bit31~5 未使用(0を指定してください。)

bit4 インタロック(リセット)割り込み (禁止に設定することはできません。) bit3 MARK信号割り込み 0:禁止 1:許可 bit2 DI1割り込み 0:禁止 1:許可 bit1 Z相信号割り込み 0:禁止 1:許可 bit0 ORG信号割り込み 0:禁止 1:許可 ※1 PCI-7204では使用できません。(0を指定して下さい。) ※2 PCI-7208 では汎用入力,MARK 信号をサポートしていないため、bit2,3の設定は無効になります。(0を指定して下さい。)

dwReserved 将来拡張用(0を指定して下さい。)

Page 104: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

99

5.3. Visual C++ 用定数一覧 #define MTR_FLAG_NORMAL 0 // 同期制御 #define MTR_FLAG_OVERLAPPED 1 // 非同期制御 // Set/GetBaseClock #define MTR_CLOCK_1M 0 // 1MHz #define MTR_CLOCK_1_4M 1 // 1/4MHz #define MTR_CLOCK_1_16M 2 // 1/16MHz // Set/GetPulseOut #define MTR_METHOD 0 // パルス出力設定 #define MTR_IDLING 1 // アイドリング設定 #define MTR_0P5PULSE 1 // 0.5パルス #define MTR_1P5PULSE 3 // 1.5パルス #define MTR_WIDTH 2 // パルス幅設定 #define MTR_FINISH_FLAG 3 // 動作完了フラグ設定 #define MTR_PULSE_OUT 0 // パルス出力完了 #define MTR_INP 1 // INP信号入力 // Set/GetLimitConfig #define MTR_MASK 0 // マスク設定 #define MTR_LOGIC 1 // 論理設定 #define MTR_SD_FUNC 2 // SD動作設定 #define MTR_CHANGE_SD_SPEED 0 // SD速度変更 #define MTR_DEC_STOP_SIGNAL 1 // 減速停止入力 #define MTR_SD_ACTIVE 3 // SD信号レベル #define MTR_SIGNAL_LEVEL 0 // レベル入力 #define MTR_SIGNAL_EDGE 1 // エッジ入力 // Set/GetCounterConfig #define MTR_ENCODER_MODE 0 // エンコーダモード設定 #define MTR_NOT_COUNT 0 // カウントしない #define MTR_SINGLE 1 // 1逓倍 #define MTR_DOUBLE 2 // 2逓倍 #define MTR_QUAD 3 // 4逓倍 #define MTR_UP_DOWN 4 // アップダウンカウント #define MTR_ENCODER_CLEAR 1 // エンコーダクリア条件 #define MTR_NOT_CLEAR 0x0000 // クリアしない #define MTR_STOPPED_BY_ORG 0x0001 // ORG信号停止時 #define MTR_STOPPED_BY_ORG_Z 0x0002 // OGR+Z信号停止時 #define MTR_NORMAL_STOPPED 0x0004 // 正常停止時 #define MTR_STOPPED_BY_LIMIT 0x0008 // リミット信号停止時 // Set/GetComparator #define MTR_COMP_CONFIG1 0 // 比較条件 1設定 #define MTR_COMP_CONFIG2 1 // 比較条件 2設定 #define MTR_COMP_CONFIG3 2 // 比較条件 3設定 #define MTR_NO_COMP 0 // 設定なし #define MTR_GT_COMP 1 // P > Q #define MTR_EQ_COMP 2 // P = Q #define MTR_PRESET1 3 // プリセット値 1設定 #define MTR_PRESET2 4 // プリセット値 2設定 #define MTR_PRESET3 5 // プリセット値 3設定 #define MTR_COMP_OBJECT 6 // 比較対象設定 #define MTR_COMP_OBJECT1 6 // 比較対象 1設定 #define MTR_COMP_OBJECT2 7 // 比較対象 2設定 #define MTR_COMP_OUT 9 // CMP信号出力条件 // Set/GetCLR #define MTR_ONESHOT 0 // 1ショット出力 #define MTR_LEVEL 1 // レベル出力 #define MTR_CLR_OUT 2 // CLR信号出力条件

Page 105: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

FbiMtr.DLLリファレンス

© 2000 Interface Corporation. All rights reserved.

100

// Set/Get/StartMotion #define MTR_JOG 0 // JOG動作 #define MTR_ORG 1 // ORG動作 #define MTR_PTP 2 // PTP動作 #define MTR_AUTO_PTP 3 // 自起動 PTP動作 #define MTR_CP 4 // CP動作 #define MTR_LINE 6 // 直線補間動作 #define MTR_ARC 7 // 円弧補間動作 #define MTR_DRAW_IN 8 // 動作終点への引き込み #define MTR_RESTART 9 // 再起動 #define MTR_NORMAL 0x00000 // 加減速動作 #define MTR_CONST 0x10000 // 定速動作 #define MTR_ACC_NORMAL 0 // 直線加減速 #define MTR_ACC_SIN 1 // S字加減速 #define MTR_ACC_EXP 2 // 放物線加減速 #define MTR_ACC_ORIGINAL 3 // 自由曲線加減速 #define MTR_STOP_ORG 0x0000 // ORG信号で停止 #define MTR_STOP_ORG_EZ 0x0100 // ORG+Z信号で停止 #define MTR_SQUEAR_ROOT2 0x0200 // 周速制御 #define MTR_MARK 0x0400 // MARK信号により PTP開始 #define MTR_MARK_ACC 0x0800 // MARK信号により加速し、PTP開始 #define MTR_CW 1 // CW方向 #define MTR_CCW -1 // CCW方向 // StopMotion #define MTR_DEC_STOP 0 // 減速停止 #define MTR_IMMEDIATE_STOP 1 // 即停止 #define MTR_STOP_ALL 2 // 一斉停止 // Set/GetSync #define MTR_RESET_SYNC_START 0 // 同時起動要求 解除 #define MTR_SET_SYNC_START 1 // 同時起動要求 設定 // ChangeSpeed #define MTR_IMMEDIATE_CHANGE 0 // 即速度変更 #define MTR_ACCDEC_CHANGE 1 // 加減速速度変更 #define MTR_DEC_LOW_SPEED 4 // 起動時速度へ減速 #define MTR_RELEASE_DEC 5 // 減速解除 #define MTR_HOLD_NOW_SPEED 6 // 現在の速度に固定 #define MTR_RELEASE_HOLD 7 // 固定解除 // Read/Write/ClearCounter, SetSampleCounter #define MTR_ENCODER 0 // エンコーダ #define MTR_COUNTER 1 // 位置カウンタ #define MTR_REMAINS 2 // 残りパルス数 // GetStatus #define MTR_BUSY 0 // 動作確認 #define MTR_FINISH_STATUS 1 // 終了ステータス #define MTR_LIMIT_STATUS 2 // リミット信号入力 #define MTR_INTERLOCK_STATUS 4 // インタロック信号入力 #define MTR_ILOCK_OFF 0 // 入力なし #define MTR_ILOCK_ON 1 // 入力あり #define MTR_ERROR_CODE 5 // エラーコード #define MTR_CONFIRM_END 6 // 動作完了確認 #define MTR_COMPLETE 0 // 動作終点に到達 #define MTR_NOT_COMPLETE 1 // 動作終点に到達していない #define MTR_COMPARATOR 7 // コンパレータ ステータス // SetSampleCounter #define MTR_NORMAL_SAMP 0x0000 // 即 サンプリング開始 #define MTR_BUSY_SAMP 0x0100 // 動作開始からサンプリング #define MTR_ONETIME 0x0000 // 指定件数でサンプリング終了 #define MTR_REPEAT 0x1000 // 繰り返しサンプリング

Page 106: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

技術資料

101

© 2000 Interface Corporation. All rights reserved.

技術資料紹介

弊社では下記の技術資料を提供しております。

詳しくは、弊社Web site(www.interface.co.jp)、または弊社窓口までお問い合わせ下さい。

カタログ PRM-0001 PCIバスインタフェースカタログ PRM-0004 CompactPCI ガイドブック PRM-0005 CompactPCIデータブック ハードウェア編 PRM-0006 CompactPCIデータブック ソフトウェア編

チュートリアル TUT-0014 Microsoft Visual Studio .NET移行ガイド TUT-0006 C・ISAバス製品から PCIバス製品への移行マニュアル【MS-DOS編】 TUT-0007 拡張ユニット チュートリアル(入門編) TUT-0008 拡張ユニット チュートリアル(問題解決編) TUT-0009 システムユニット チュートリアル TUT-0025 Visual Basic による DIO 入門書 TUT-0016 Visual Basic による PPI 入門書 TUT-0021 Visual Basic による AD 入門書 TUT-0023 Visual Basic による DA 入門書 TUT-0029 Visual Basic による HDLC 入門書 TUT-0027 Visual Basic による GP-IB 入門書 TUT-0033 Visual Basic による メモリンク 入門書 TUT-0031 Visual Basic による エンコーダカウンタ 入門書 TUT-0019 Visual Basic による モータコントローラ 入門書 TUT-0024 Visual C++ による DIO 入門書 TUT-0034 Visual C++ による PPI 入門書 TUT-0020 Visual C++ による AD 入門書 TUT-0022 Visual C++ による DA 入門書 TUT-0028 Visual C++ による HDLC 入門書 TUT-0026 Visual C++ による GP-IB 入門書 TUT-0032 Visual C++ による メモリンク 入門書 TUT-0030 Visual C++ による エンコーダカウンタ 入門書 TUT-0018 Visual C++ による モータコントローラ 入門書 TUT-0015 モーションコントロール チュートリアル TUT-0053 モーションコントロール チュートリアル(PCI/CompactPCI) TUT-0001 弊社バスブリッジを使用した PCIバスによる Cバスボード制御 手順書 TUT-0002 弊社バスブリッジを使用した PCIバスによる ISAバスボード制御 手順書 TUT-0003 Linuxによる PCIボード・CompactPCIボード制御 入門書 TUT-0017 システム事例 メモリンクを使用した負荷分散システム チュートリアル TUT-0036 RTLinuxによる PCIボード・CompactPCIボード制御(導入編) TUT-0037 RTLinuxによる HDLCボード制御プログラミング チュートリアル TUT-0038 RTLinuxによる DIOボード制御プログラミング チュートリアル TUT-0039 RTLinuxによる ADボード制御プログラミング チュートリアル TUT-0043 RTLinuxによる調歩同期シリアル通信ボード制御プログラミング チュートリアル TUT-0040 RTLinuxによる DAボード制御プログラミング チュートリアル TUT-0041 RTLinuxによる GP-IBボード制御プログラミング チュートリアル TUT-0044 RTLinuxによるメモリ共有インタフェースボード制御プログラミング チュートリアル TUT-0048 RTLinuxによるカウンタボード制御プログラミング チュートリアル TUT-0050 RTLinuxによるモーションコントローラボード制御プログラミング チュートリアル

技術情報資料 弊社 PCIボードをMS-DOSで使うノウハウ MS-DOSによる PCIバス割り込み処理 ActiveXによるシステム組み込み技術 Linuxから PCI/CompactPCIボードを制御する方法 Compact PCIへの置き換え+システム構築/移行ガイド

Page 107: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

参考文献

102

© 2000 Interface Corporation. All rights reserved.

参考文献

・ 見城 尚志,新村 佳久 著:ステッピングモータの基礎と応用(総合電子出版社:1979年)

・ 平山 良裕 著:ステッピング・モータ&駆動回路の種類と特徴

[トランジスタ技術 2000年 2月号 P253~264](CQ出版社:2000年)

警告!

本ドキュメントの一部または全てを弊社の許可なく、複写, 複製, 転載, 電子化す

ることを禁じます。

Page 108: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

© 2000 Interface Corporation. All rights reserved.

チュートリアル Visual C++によるステッピングモータコントローラ入門書

2000年 12月 Ver. 1.0 発行 発行所

〒732-0828 広島県広島市南区京橋町 10-21 TEL 082-262-7777 FAX 082-262-5066

定価 ¥2,100

本書の内容の一部または全部を、無断で転載することを禁止します。 本書の内容は、将来予告なく変更することがありますので、あらかじめご了承ください。

Page 109: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

サポート体制

本製品についてのお問い合わせは、カスタマーサポートセンタで承ります。弊社Web siteのオンラインQA(「サポート」→「カスタマーサポートセンタ」をクリック)、E-mailまたはフリーダイヤルをご利用ください。

お問い合わせ先 <カスタマーサポートセンタ> TEL 0120-447213 FAX 0120-458257 (祝日および弊社休業日を除く月~金 AM9:00~PM5:00迄) E-mail [email protected]

TUT-0018 Ver. 1.0 Vol. 1/1

Page 110: チュートリアル Visual C++によるモータ入門書 商標/登録商標 本ドキュメントに掲載されている会社名,製品名は、それぞれ各社の商標または登録商標です。

Visual C++ による ステッピングモータコントローラ入門書TUT-0018 Ver1.0