(57)【要約】【課題】ユーザが、機械のモーションコントロールに使用されている命令語の処理内容を変更したり、新しい命令語を追加することができる。【解決手段】機械のモーションを制御するコントローラ（１）で動作するユーザプログラムを作成するプログラム開発装置（５）であって、命令語に対応付けて、既定の第１モーション制御命令を格納する第１記憶部（５１０）と、ユーザの指示に従って、命令語に対応するモーション制御命令を編集する編集部（５０２、５０４）とを備える。【選択図】図１
2020013211.tif 000002
【特許請求の範囲】
【請求項１】
機械のモーションを制御するコントローラで動作するユーザプログラムを作成するプログラム開発装置であって、
命令語に対応付けて、既定の第１モーション制御命令を格納する第１記憶部と、
ユーザの指示に従って、命令語に対応するモーション制御命令を編集する編集部とを備える、プログラム開発装置。
【請求項２】
前記命令語に対応付けて、編集されたモーション制御命令を第２モーション制御命令として格納する第２記憶部を備える、請求項１に記載のプログラム開発装置。
【請求項３】
前記ユーザプログラムのソースコードをビルドする第１ビルド部と、
前記第２モーション制御命令をビルドする第２ビルド部とを備え、
前記第１ビルド部は、
前記ソースコードに記述された前記命令語に対応する前記第２モーション制御命令が前記第２記憶部に存在すれば、前記第２モーション制御命令に関連付けて前記ソースコードをビルドし、
前記ソースコードに記述された前記命令語に対応する前記第２モーション制御命令が前記第２記憶部に存在しなければ、前記第１モーション制御命令に関連付けて前記ソースコードをビルドする、請求項２に記載のプログラム開発装置。
【請求項４】
前記ユーザプログラムのソースコードをビルドする第１ビルド部と、
前記第２モーション制御命令をビルドする第２ビルド部と、
前記ソースコードに記述された前記命令語の処理として、前記第１モーション制御命令を優先させるか、前記第２モーション制御命令を優先させるかについて、ユーザの指示を受け付ける命令語指定部とを備え、
前記第１ビルド部は、
前記第１モーション制御命令を優先させる場合、前記第１モーション制御命令に関連付けて前記ソースコードをビルドし、
前記第２モーション制御命令を優先させる場合、前記第２モーション制御命令に関連付けて前記ソースコードをビルドする、請求項２に記載のプログラム開発装置。
【請求項５】
ユーザプログラムに従って、機械のモーションを制御するコントローラであって、
前記ユーザプログラムを実行する実行部と、
命令語に対応する、既定の第１モーション制御命令の実行コードを格納する第１命令ライブラリと、
命令語に対応する、ユーザによって定義された第２モーション制御命令の実行コードを格納する第２命令ライブラリとを備え、
前記実行部は、前記ユーザプログラムに応じて、前記第１モーション制御命令の前記実行コードを呼び出すか、前記第２モーション制御命令の前記実行コードを呼び出すかを決定する、コントローラ。
【請求項６】
呼び出しを許可する第１状態と、呼び出しを許可しない第２状態とを遷移するファームウェアＡＰＩ（application program interface）を備え、
前記実行部は、
前記ユーザプログラムに従って前記第２モーション制御命令の前記実行コードを呼び出した場合、前記第２モーション制御命令の前記実行コードを実行するために、前記ファームウェアＡＰＩを呼び出し、
前記ユーザプログラムに従って前記第１モーション制御命令の前記実行コードを呼び出した場合、前記第１モーション制御命令の前記実行コードを実行するために、前記ファームウェアＡＰＩを呼び出さない、請求項５に記載のコントローラ。
【請求項７】
前記ファームウェアＡＰＩは、前記第２モーション制御命令の前記実行コードの実行を開始すると、前記第２状態に遷移し、前記第２モーション制御命令の前記実行コードの実行を終了すると、前記第１状態に遷移する、請求項６に記載のコントローラ。
【請求項８】
前記実行部は、
前記ユーザプログラムに記述された命令語に対応する前記実行コードが前記第２命令ライブラリに存在する場合、前記第２モーション制御命令の実行コードを呼び出し、
前記ユーザプログラムに記述された命令語に対応する前記実行コードが前記第２命令ライブラリに存在しない場合、前記第１モーション制御命令の実行コードを呼び出す、請求項５から７のいずれか一項に記載のコントローラ。
【請求項９】
前記ユーザプログラムを作成するプログラム開発装置と通信する通信部を備え、
前記通信部は、
前記プログラム開発装置から前記第２モーション制御命令の実行コードおよび前記第２モーション制御命令のソースコードを受け取り、前記第２モーション制御命令の前記実行コードおよび前記第２モーション制御命令の前記ソースコードを前記第２命令ライブラリに格納し、
他のプログラム開発装置からの要求に応じて、前記第２命令ライブラリに格納された前記第２モーション制御命令の前記実行コードおよび前記第２モーション制御命令の前記ソースコードを前記他のプログラム開発装置に送信する、請求項５から８のいずれか一項に記載のコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム開発装置、およびコントローラに関する。
【背景技術】
【０００２】
ＰＬＣ（Programmable Logic Controller）、工作機械、またはロボットなどの機械のモーションコントロールに使用されている命令語（プログラムソース中の個々のコード）には、それぞれ規格化、または体系化されたものが使用されている。例えば、ＰＬＣの命令語としては、ＩＥＣ６１１３１−３（JIS B 3503）に準拠したコードがある。また、ＣＮＣ（Computer Numerical Control）で使用されるＧコードもＩＳＯによって規格化されており、命令語とすることができる。
【０００３】
従来、ＰＬＣや工作機では、動作保証のために、ユーザが命令語の処理内容を変更したり、新しい命令語を追加することができない構成であった。
【０００４】
そこで、ＰＬＣにおいて、ユーザプログラムの一部をライブラリ化して、ユニットに保存することで、ユーザプログラムにユーザのノウハウを実装させ、ユーザプログラムの再利用性を高める技術が知られている（例えば、特許文献１、および特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３５４８８２９号明細書
【特許文献２】特許第４９７３８６７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１、または特許文献２に記載の技術では、ファームウェアやオペレーティングシステムが提供するＡＰＩの不正な使用により、ファームウェアやオペレーティングシステムが暴走したり、デッドロックしたりするのを防ぐために、メーカが提供した命令語を使用したユーザプログラムを、ユーザがライブラリ化できた。ライブラリとは、ＩＥＣ６１１３１−３で記述されたユーザプログラムをファンクションブロックやファンクションの形式で部品化したものであり、プログラムの再利用性を高めたり、ユーザプログラムの隠ぺい化を図ることができる。しかし、メーカが提供する命令語は動作保証のために機能上の制約をかけている場合があるため、命令語の組み合わせであるライブラリでも実現できる機能に制約が生じ、ユーザが望む変更を行うことができなかった。
【０００７】
本発明の一態様は、上述した事情に鑑みてなされたものであり、ユーザが、機械のモーションコントロールに使用されている命令語の処理内容を変更したり、新しい命令語を追加することで、メーカが定義していない新しい機能を実現できる技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記の課題を解決するために、本発明の一態様に係るプログラム開発装置は、機械のモーションを制御するコントローラで動作するユーザプログラムを作成するプログラム開発装置であって、命令語に対応付けて、既定の第１モーション制御命令を格納する第１記憶部と、ユーザの指示に従って、命令語に対応するモーション制御命令を編集する編集部とを備える構成である。
【０００９】
上記の構成によれば、機械のモーションを制御するためのモーション制御命令を、ユーザの指示に従って、命令語に対応付けて編集することができる。これにより、ユーザが、機械のモーションコントロールに使用されている命令語の処理内容を変更したり、新しい命令語を追加することが可能となる。
【００１０】
また、本発明の一態様に係るプログラム開発装置は、前記命令語に対応付けて、編集されたモーション制御命令を第２モーション制御命令として格納する第２記憶部を備えていてもよい。
【００１１】
上記の構成によれば、ユーザが定義した処理を実行させる第２モーション制御命令を命令語に対応付けて、既定の第１モーション制御命令を書き換えることなく、既定の第１モーション制御命令とは別に保存しておくことができる。
【００１２】
また、本発明の一態様に係るプログラム開発装置は、前記ユーザプログラムのソースコードをビルドする第１ビルド部と、前記第２モーション制御命令をビルドする第２ビルド部とを備え、前記第１ビルド部は、前記ソースコードに記述された前記命令語に対応する前記第２モーション制御命令が前記第２記憶部に存在すれば、前記第２モーション制御命令に関連付けて前記ソースコードをビルドし、前記ソースコードに記述された前記命令語に対応する前記第２モーション制御命令が前記第２記憶部に存在しなければ、前記第１モーション制御命令に関連付けて前記ソースコードをビルドしてもよい。
【００１３】
上記の構成によれば、第２モーション制御命令が第２記憶部に存在する場合には、ユーザプログラムのソースコードが、第２モーション制御命令に関連付けてビルドされる。これにより、ユーザ定義の第２モーション制御命令が存在する場合には、ユーザプログラムが第２モーション制御命令を自動で実行する。よって、ユーザは、第２モーション制御命令を作成することで、第１モーション制御命令と、第２モーション制御命令との何れを実行するかを別途指定することなく、第２モーション制御命令を実行させることができる。
【００１４】
また、本発明の一態様に係るプログラム開発装置は、前記ユーザプログラムのソースコードをビルドする第１ビルド部と、前記第２モーション制御命令をビルドする第２ビルド部と、前記ソースコードに記述された前記命令語の処理として、前記第１モーション制御命令を優先させるか、前記第２モーション制御命令を優先させるかについて、ユーザの指示を受け付ける命令語指定部とを備え、前記第１ビルド部は、前記第１モーション制御命令を優先させる場合、前記第１モーション制御命令に関連付けて前記ソースコードをビルドし、前記第２モーション制御命令を優先させる場合、前記第２モーション制御命令に関連付けて前記ソースコードをビルドしてもよい。
【００１５】
上記の構成によれば、ユーザは、ユーザ操作によって、第１モーション制御命令を優先させるか、第２モーション制御命令を優先させるかを指定することができる。よって、ユーザは、例えば工作機械において、作成する部品に応じて、第１モーション制御命令に応じたモーションを実行させるか、第２モーション制御命令に応じたモーションを実行させるかを都度指定することができる構成とすることもできる。
【００１６】
上記の課題を解決するために、本発明の一態様に係るコントローラは、ユーザプログラムに従って、機械のモーションを制御するコントローラであって、前記ユーザプログラムを実行する実行部と、命令語に対応する、既定の第１モーション制御命令の実行コードを格納する第１命令ライブラリと、命令語に対応する、ユーザによって定義された第２モーション制御命令の実行コードを格納する第２命令ライブラリとを備え、前記実行部は、前記ユーザプログラムに応じて、前記第１モーション制御命令の前記実行コードを呼び出すか、前記第２モーション制御命令の前記実行コードを呼び出すかを決定する構成である。
【００１７】
上記の構成によれば、既定の第１モーション制御命令の実行コード、またはユーザによって定義された第２モーション制御命令の実行コードの何れかを呼び出して機械のモーションを制御することができる。よって、ユーザによって定義された第２モーション制御命令の実行コードを呼び出すことで、ユーザが望むモーションを機械に実行させることができる。
【００１８】
また、本発明の一態様に係るコントローラは、呼び出しを許可する第１状態と、呼び出しを許可しない第２状態とを遷移するファームウェアＡＰＩ（application program interface）を備え、前記実行部は、前記ユーザプログラムに従って前記第２モーション制御命令の前記実行コードを呼び出した場合、前記第２モーション制御命令の前記実行コードを実行するために、前記ファームウェアＡＰＩを呼び出し、前記ユーザプログラムに従って前記第１モーション制御命令の前記実行コードを呼び出した場合、前記第１モーション制御命令の前記実行コードを実行するために、前記ファームウェアＡＰＩを呼び出さない構成であってもよい。
【００１９】
上記の構成によれば、ファームウェアＡＰＩにより、第２モーション制御命令の実行コードの実行により、ファームウェアが使用するメモリ領域が指定され、ファームウェアの動作が不安定なるのを防ぐことができる。
【００２０】
また、本発明の一態様に係るコントローラは、前記ファームウェアＡＰＩは、前記第２モーション制御命令の前記実行コードの実行を開始すると、前記第２状態に遷移し、前記第２モーション制御命令の前記実行コードの実行を終了すると、前記第１状態に遷移してもよい。
【００２１】
上記の構成によれば、第２モーション制御命令の実行コードの実行中や、ファームウェアでのエラー発生中には、ファームウェアＡＰＩの呼び出しを許可しないため、ファームウェアＡＰＩが不正に使用されたり、ファームウェアやオペレーティングシステムが暴走したり、デッドロックされるのを防止することができる。
【００２２】
また、本発明の一態様に係るコントローラは、前記実行部は、前記ユーザプログラムに記述された命令語に対応する前記実行コードが前記第２命令ライブラリに存在する場合、前記第２モーション制御命令の実行コードを呼び出し、前記ユーザプログラムに記述された命令語に対応する前記実行コードが前記第２命令ライブラリに存在しない場合、前記第１モーション制御命令の実行コードを呼び出してもよい。
【００２３】
上記の構成によれば、第２命令ライブラリに存在する第２モーション制御命令の実行コードを優先的に呼び出して実行することができる。よって、ユーザ定義の命令語に対応する第２モーション制御命令により、制御対象の機械のモーションを制御することができる。
【００２４】
また、本発明の一態様に係るコントローラは、前記ユーザプログラムを作成するプログラム開発装置と通信する通信部を備え、前記通信部は、前記プログラム開発装置から前記第２モーション制御命令の実行コードおよび前記第２モーション制御命令のソースコードを受け取り、前記第２モーション制御命令の前記実行コードおよび前記第２モーション制御命令の前記ソースコードを前記第２命令ライブラリに格納し、他のプログラム開発装置からの要求に応じて、前記第２命令ライブラリに格納された前記第２モーション制御命令の前記実行コードおよび前記第２モーション制御命令の前記ソースコードを前記他のプログラム開発装置に送信してもよい。
【００２５】
上記の構成によれば、コントローラで動作しているユーザプログラムについて、ユーザ定義の命令語が用いられている場合、他のプログラム開発装置でもその動作の内容を知ることができる。
【発明の効果】
【００２６】
本発明の一態様によれば、ユーザが、機械のモーションコントロールに使用されている命令語の処理内容を変更したり、新しい命令語を追加することができる。
【図面の簡単な説明】
【００２７】
【図１】本発明の実施形態に係るプログラム開発装置、及びコントローラが使用されるシステム環境の概要構成を示すブロック図である。
【図２】コントローラの要部構成を示すブロック図である。
【図３】プログラム開発装置の要部構成を示すブロック図である
【図４】各規格に基づいたコードと、その既定の処理内容と、を示す対比表である。
【図５】（ａ）はＧコードを用いたユーザプログラムの例を示し、（ｂ）は（ａ）に示したユーザプログラムによる工作機械の工具の移動の軌跡をＸＹ座標系で示した図であり、（ｃ）はＩＥＣ６１１３１−３に準拠したコードを用いたユーザプログラムの例を示している。
【図６】プログラム開発装置の表示画面の例を示す図である。
【図７】処理フローの編集の流れを示すフローチャートである。
【図８】既定の処理フローの例を示す図である
【図９】ユーザ定義の処理フローの例を示す図である。
【図１０】ファームウェアＡＰの処理の流れを示す図である。
【発明を実施するための形態】
【００２８】
以下、本発明の一側面に係る実施形態（以下、「本実施形態」とも表記する）を、図面に基づいて説明する。
【００２９】
§１  適用例
まず、図１を用いて、本発明が適用される場面の一例について説明する。図１は、本実施形態に係るプログラム開発装置５、およびコントローラ１が使用されるシステム環境の概要を示す図である。コントローラ１は、モーションネットワークケーブル２を介して接続された機械のモーションを制御する。コントローラ１は、例えば、ＰＬＣ、工作機械コントローラ、ロボットコントローラ等である。コントローラ１が工作機械コントローラである場合には、例えば、コントローラ１は、モーションネットワークケーブル２を介してサーボドライバ２００に接続され、サーボドライバ２００に接続されたサーボモータ２０１を駆動する。モーションネットワークとしては、例えばEtherCAT(登録商標)を用いる。
【００３０】
プログラム開発装置５は、ユーザ操作に応じて、ユーザプログラム、および命令語を編集する機能を有する。また、プログラム開発装置５は、編集された命令語のコードのチェックを行い、コントローラ１の制御対象の機械が正常に動作するか否かを判定する。また、プログラム開発装置５は、編集したユーザプログラム、および命令語をビルドし、実行可能なファイル形式にした後に、コントローラ１に転送し、保存する。
【００３１】
ユーザは、プログラム開発装置５による操作で、命令語の処理内容を変更したり、新しい命令語を追加することができる。プログラム開発装置５では、ユーザは、命令語にて実現したい処理内容を、プログラム開発装置５との間での対話形式で設定することができる。プログラム開発装置５は、ユーザにより設定された処理内容をＣやＣ＋＋等の高級言語で生成する。また、ユーザがプログラム開発装置５において、命令語にて実現したい処理内容を、ＣやＣ＋＋等の高級言語でプログラミングすることができてもよい。
【００３２】
ユーザによって編集されたユーザプログラム、および命令語は、コントローラファームウェアのＡＰＩの呼び出しエラーが発生しないことがシミュレーションで確認された後に、生成完了となる。また、コントローラファームウェアのＡＰＩは、ファームウェアが待機中しか実行できないため、ファームウェアの状態持ちを行い、受付可能状態の時にはＡＰＩ処理を受け付け、受付不可状態の時はＡＰＩがエラーを返す構成であるため、ファームウェアが不正な状態になることを防ぐ。
【００３３】
このように、本実施形態に係るプログラム開発装置５、およびコントローラ１が使用されるシステム環境では、ユーザが、機械のモーションコントロールに使用されている命令語の処理内容を変更したり、新しい命令語を追加することができる。また、プログラム開発装置５は、編集されたユーザプログラム、および命令語を、コントローラファームウェアのＡＰＩを用いて、機械のモーションコントロールが正常に行われることが確認された後にコントローラ１に実装させることができる。
【００３４】
§２  構成例
以下、本発明の実施形態に係るプログラム開発装置５、およびコントローラ１の構成について、図１、図２、および図３に基づいて詳細に説明する。図１は、プログラム開発装置５、およびコントローラ１が使用されるシステム環境の概要を示す図である。図２は、コントローラ１の要部構成を示すブロック図である。図３は、プログラム開発装置５の要部構成を示すブロック図である。
【００３５】
〔システム環境について〕
図１に示すように、コントローラ１は、モーションネットワークケーブル２を介して、制御対象の工作機械のサーボドライバ２００に接続され、サーボドライバ２００に接続されたサーボモータ２０１を駆動する。コントローラ１の制御対象の工作機械は、複数のサーボドライバ２００を備え、サーボドライバ２００のそれぞれに接続されたサーボモータ２０１を駆動することで、加工対象部に加工を施す。なお、図１では、コントローラ１は、工作機械のモーションを制御する構成について示しているが、コントローラ１は、工作機械のコントローラに限らず、ＰＬＣであってもよいし、ロボットコントローラであってもよい。
【００３６】
コントローラ１には、モーションネットワークケーブル２を介して、サーボドライバ２００の他、通信カプラ２０２が接続できる。図１では、デイジーチェーン方式で接続した例を示しているが、その他の接続方式でサーボドライバ２００や通信カプラ２０２を接続してもよい。また、汎用アナログ出力ユニット２０５、汎用アナログ入力ユニット２０４、汎用デジタル入出力ユニット２０３は、内部バスを介して通信カプラ２０２とデータ交換を行うことができる。
【００３７】
また、コントローラ１には、ネットワークＨＵＢ３を介して、タッチパネル４が接続されている。タッチパネル４は、コントローラ１の操作盤である。タッチパネル４は、制御対象の工作機械やロボットに取り付けられている構成であってもよいし、制御対象の工作機械やロボットとは別に設けられていてもよい。
【００３８】
また、コントローラ１には、ネットワークＨＵＢ３を介して、イーサネット（登録商標）ケーブル３０１によりプログラム開発装置５が接続されている。プログラム開発装置５は、例えば、汎用的なコンピュータである。プログラム開発装置５には、コントローラ１において実行されるユーザプログラム、およびコントローラ１による工作機械のモーションコントロールに使用されている命令語を記憶している。詳細については後述するが、ユーザは、プログラム開発装置５に対する操作で、コントローラ１において実行されるユーザプログラム、および命令語を編集することができる。
【００３９】
〔コントローラ１の構成について〕
図２に示すように、コントローラ１は、プログラム開発装置５との間でデータの送受信を行うインターフェース６０７（通信部）を備え、インターフェース６０７を介して、プログラム開発装置５に接続されている。コントローラ１は、サーボドライバ２００との間でデータの送受信を行うインターフェースであるモーションネットワーク部６０８を備える。モーションネットワーク部６０８は、モーションネットワークポート１０１を介して、サーボドライバ２００と通信を行う。
【００４０】
コントローラ１は、記憶部６１０と、実行部６２０と、を備えている。また、コントローラ１は、ファームウェアＡＰＩ（application program interface）６０２、ファームウェア６０３、オペレーティングシステム（ＯＳ）６０４、およびデバイスドライバ６０５を含んでいる。なお、以下の説明において、ハードウェアと、ソフトウェアとを特段区別することなく各部の機能を説明するものについては、各部の機能の一部または全てが、それぞれハードウェア、およびソフトウェアの何れか一方により実行されてもよいし、ハードウェアとソフトウェアとの協働により実行されてもよい。
【００４１】
記憶部６１０には、ユーザプログラム６０６、メーカ定義命令語群６００、ユーザ定義命令語群６０１が格納されている。ユーザプログラム６０６、メーカ定義命令語群６００、ユーザ定義命令語群６０１のそれぞれには、コントローラ１がＰＬＣの場合にはＩＥＣ６１１３１−３に準拠したコードで記述されたプログラム、コントローラ１が工作機械のモーションコントローラである場合にはＩＳＯによって規格化されているＧコードで記述されたプログラムが格納されている。
【００４２】
ユーザプログラム６０６は、コントローラ１上で実行されるプログラムであり、コントローラ１の動作を制御するプログラムである。つまり、コントローラ１は、ユーザプログラムに従って、制御対象の機械のモーションを制御する。
【００４３】
ユーザプログラム６０６は、コントローラ１がＰＬＣの場合には、ビルドされてバイナリ形式で記憶部６１０内に格納されている。コントローラ１が工作機械のコントローラの場合には、ＣＮＣユーザプログラムは、ビルドされておらず、Ｇコードで記述されたソースコードが、テキスト形式で記憶部６１０内に格納されている。
【００４４】
メーカ定義命令語群６００には、複数の命令語と、各命令語に対応付けられた、当該命令語にて実現する既定の処理の内容と、とが含まれている。既定の処理の内容とは、コントローラ１を製造するメーカによって定義された、各命令語に対応付けられた処理の内容であり、例えば、ＩＳＯ規格に準拠したＧコードに応じた処理の内容である。この、命令語に対応する、既定の処理を実行させる制御命令を、第１モーション制御命令と称する。
【００４５】
メーカ定義命令語群６００には、各命令語に対応付けて、第１モーション制御命令の実行コードであるライブラリが、ビルドされたバイナリ形式で含まれている。なお、記憶部６１０において、メーカ定義命令語群６００を格納する領域を、第１命令ライブラリとも称する。
【００４６】
ユーザ定義命令語群６０１には、複数の命令語と、各命令語に対応付けられた、当該命令語にて実現するユーザによって定義された処理の内容と、が含まれている。この、命令語に対応する、ユーザ定義の処理を実行させる制御命令を、第２モーション制御命令と称する。ユーザ定義命令語群６０１には、各命令語に対応付けて、第２モーション制御命令の実行コードであるユーザ定義の命令語が、ビルドされたバイナリ形式で含まれている。なお、記憶部６１０において、ユーザ定義命令語群６０１を格納する領域を、第２命令ライブラリとも称する。
【００４７】
実行部６２０は、記憶部６１０に記憶されているユーザプログラム、および命令ライブラリをロードして実行する。実行部６２０は、例えば演算装置であるＣＰＵとメモリとで構成されていてもよい。実行部６２０は、ユーザプログラムに応じて、メーカ定義命令語群６００に格納されている既定の命令語を呼び出すか、ユーザ定義命令語群６０１に格納されているユーザ定義の命令語を呼び出すかを決定する。
【００４８】
コントローラ１がＰＬＣであり、ユーザプログラムがコンパイラ型のプログラムである場合には、ユーザプログラムには、第１モーション制御命令の実行コードと、第２モーション制御命令の実行コードとの何れを呼び出すべきかが記述されている。実行部６２０はユーザプログラムを実行することで、第１命令ライブラリに存在する実行コードを呼び出す（コール）するか、第２命令ライブラリに存在する実行コードを呼び出すかを決定することができ。
【００４９】
また、ユーザプログラムがＣＮＣユーザプログラムである場合には、実行部６２０は、ユーザプログラムのソースファイルを行毎に読み込み、各行のコマンドを順に実行する。実行部６２０は、ユーザプログラムに記述された命令語に対応する実行コードが第２命令ライブラリに存在する場合は、第２モーション制御命令の実行コードを呼び出す。一方で、実行部６２０は、ユーザプログラムに記述された命令語に対応する実行コードが第２命令ライブラリに存在しない場合は、第１命令ライブラリから第１モーション制御命令の実行コードを呼び出す。
【００５０】
ファームウェアＡＰＩ６０２は、ユーザ定義の命令語を実行する実行部６２０により呼び出される。ファームウェアＡＰＩは、実行部６２０による呼び出しを許可する第１状態と、呼び出しを許可しない第２状態とを遷移する。
【００５１】
ファームウェアＡＰＩ６０２は、実行部６２０が、ユーザプログラムに従って第２モーション制御命令の実行コードを呼び出した場合、第２モーション制御命令の実行コードを実行するために、実行部６２０によって呼び出される。なお、ファームウェアＡＰＩ６０２は、実行部６２０が、ユーザプログラムに従って第１モーション制御命令の実行コードを呼び出した場合、第１モーション制御命令の実行コードを実行するためには、呼び出されない。
【００５２】
ファームウェアＡＰＩは、実行部６２０によって、第２モーション制御命令の実行コードの実行開始のために呼び出されると、再度の呼び出しを許可しない第２状態に遷移する。また、ファームウェアＡＰＩは、実行部６２０が、第２モーション制御命令の実行コードの実行を終了すると、呼び出しを許可する第１状態に遷移する。
【００５３】
ファームウェア６０３は、実行部６２０によって実行されるモーション制御命令に応じて制御対象の機械を動作させる。
【００５４】
オペレーティングシステム６０４は、コントローラ１のシステムソフトウェアであり、コントローラ１の各部を統括的に制御する。
【００５５】
デバイスドライバ６０５は、コントローラ１が持つイーサネット（登録商標）ポート１００やモーションネットワークポート１０１など、ハードウェアデバイスをオペレーティングシステム６０４によって制御可能にするためのソフトウェアである。ファームウェア６０３およびオペレーティングシステム６０４は、デバイスドライバ６０５を介して、モーションネットワークポート１０１に接続されたサーボドライバ２００等の制御対象と通信を行い、制御対象の制御を行う。また、オペレーティングシステム６０４は、デバイスドライバ６０５を介して、イーサネット（登録商標）ポート１００に接続されたプログラム開発装置５との間でデータの送受信を行う。
【００５６】
コントローラ１は、インターフェース６０７を介してプログラム開発装置５と通信し、プログラム開発装置５から第２モーション制御命令の実行コードおよび第２モーション制御命令のソースコードを受け取る。また、インターフェース６０７は、受け取った第２モーション制御命令の実行コードおよび第２モーション制御命令のソースコードを記憶部６１０のユーザ定義命令語群６０１に含ませる（格納する）。
【００５７】
また、コントローラ１は、インターフェース６０７を介して複数のプログラム開発装置５に接続されている構成であってもよい。そして、インターフェース６０７は、プログラム開発装置５から受信し、記憶部６１０に格納した第２モーション制御命令の実行コードおよび第２モーション制御命令のソースコードを、他のプログラム開発装置からの要求に応じて、他のプログラム開発装置に送信してもよい。これにより、コントローラ１で動作しているユーザプログラムについて、ユーザ定義の命令語が用いられている場合、他のプログラム開発装置でもその動作の内容を知ることができる。
【００５８】
〔プログラム開発装置５の構成について〕
図３に示すように、プログラム開発装置５は、コントローラ１で動作するユーザプログラムを作成するプログラム開発環境を提供する。ユーザプログラムコード保存部５０８、ユーザプログラム実行ファイル保存部５０９、第１命令語記憶部５１０、および第２命令語記憶部５１１を有する。
【００５９】
ユーザプログラムコード保存部５０８には、コントローラ１のユーザプログラム６０６に書き込まれているソースコードと同じソースコードが保存されている。
【００６０】
ユーザプログラム実行ファイル保存部５０９には、コントローラ１のユーザプログラム６０６に書き込まれているユーザプログラムの実行ファイルと同じ実行ファイルが保存されている。また、このように、プログラム開発装置５には、ユーザプログラムのソースコードと、実行ファイルとは、個別に保存されている。
【００６１】
第１命令語記憶部５１０（第１記憶部）には、命令語に対応付けて、コントローラ１を製造するメーカによって定義された既定の処理を実行させる第１モーション制御命令が格納されている。第１命令語記憶部５１０には、命令語に対応付けて、コントローラ１のメーカ定義命令語群６００に含まれている既定の第１モーション制御命令に対応するソースコード、実行コード、および処理内容が記憶されている。
【００６２】
第２命令語記憶部５１１（第２記憶部）には、命令語に対応付けて、ユーザによって定義された処理を実行させる第２モーション制御命令が格納されている。第２命令語記憶部５１１には、命令語に対応付けて、ユーザ定義命令語群６０１に含まれているユーザ定義の第２モーション制御命令に対応するソースコード、実行コード、および処理内容が記憶されている。
【００６３】
このように、プログラム開発装置５には、コントローラ１のユーザプログラム６０６、メーカ定義命令語群６００、およびユーザ定義命令語群６０１に含まれるソースコード、および実行コードに対応するコードが保存されている。
【００６４】
ここで、モーション制御命令について説明する。図４は、各規格に基づいたコードと、その既定の処理内容と、を示す対比表である。図５の（ａ）、（ｃ）は、各コードを用いたユーザプログラムの例を示している。図４に示すように、モーション制御命令は、Ｇコードを用いた命令、ＩＥＣ６１１３１−３に準拠した命令、ロボット用言語を用いた命令のそれぞれに対応する、同様の内容の処理を示すコードを有していてもよい。例えば、Ｇコードを用いたＧ０１、ＩＥＣ６１１３１−３に準拠したコードを用いたＭＣ＿ＭｏｖｅＬｉｎｅａｒ、およびロボット用言語を用いたＭＯＶＥＳは、どれも直線補間の動作を示すコマンド（命令語）である。
【００６５】
ユーザプログラムは、これらのコマンドを用いて、図５の（ａ）、および（ｃ）に示したように作成されている。図５の（ａ）は、Ｇコードを用いたユーザプログラムのソースファイルの例を示している。図５の（ａ）に示されるように、Ｇコードを用いたユーザプログラムでは、コマンドが各行に記載されている。００１行目のコマンドは、Ｘ１００、Ｙ１００の位置までの直線補間（直線移動）を行い、００２行目のコマンドは、Ｘ１００、Ｙ２００の位置までの直線補間を行うことを命令する。
【００６６】
なお、Ｇコードの各コマンドは、移動先座標設定、移動速度指定、移動開始、移動完了まで待機といった処理の流れが１セットになっており、一通りの処理の流れが完了して、１コマンドが終了となる。
【００６７】
図５の（ｂ）は、図５の（ａ）に示したユーザプログラムをコントローラ１の実行部６２０により実行させた際の、工作機械の工具の移動の軌跡をXY座標系で示した図である。コントローラ１の実行部６２０は、図５の（ａ）に示したソースコードを行毎に読み込んで各行のコマンドを順に実行することで、図５の（ｂ）に矢印で示したように工作機械の工具を、移動させる。
【００６８】
また、図５の（ｃ）は、ＩＥＣ６１１３１−３に準拠したコードを用いたユーザプログラムのソースファイルの例を示している。ＩＥＣ６１１３１−３を用いたユーザプログラムでは、移動の方向に加えて、速度、加速度、減速度、およびジャークをコマンドで指定することができる。図５の（ｃ）に示した例は、図５の（ａ）に示したＧコードを用いたユーザプログラムと同様に、Ｘ１００、Ｙ１００の位置まで直線補間した後、Ｘ１００、Ｙ２００の位置まで直線補間を行うことを命令するソースファイルである。ＩＥＣ６１１３１−３を用いたユーザプログラムでは、さらに、速度１０ｍｍ／ｓ，加速１００ｍｍ／ｓ２，減速１００ｍｍ／ｓ２，ジャーク０で工作機械の工具を移動させる制御が行われる。
【００６９】
プログラム開発装置５は、命令語指定部５０１、ユーザプログラム編集部５０２、ユーザプログラムビルド部５０３（第１ビルド部）、命令語編集部５０４、命令語コードチェック部５０５、および命令語ビルド部５０６（第２ビルド部）を備えている。なお、ユーザプログラム編集部５０２、および命令語編集部５０４を総称して編集部とも呼ぶ。また、プログラム開発装置５は、通信部５０７を備えている。
【００７０】
命令語指定部５０１は、コントローラ１にて実行されるユーザプログラムのソースコードに記述された命令語の処理として、第１モーション制御命令を優先させるか、第２モーション制御命令を優先させるかについて、ユーザの指示を受け付ける。これにより、命令語指定部５０１は、コントローラ１にて実行される命令語に対応するモーション制御命令を、既定の第１モーション制御命令とするか、ユーザ定義の第２モーション制御命令とするかを指定する。
【００７１】
ユーザプログラム編集部５０２は、ユーザの指示に従って、ユーザプログラムを編集する。ユーザは、ユーザプログラムコード保存部５０８に記憶されているユーザプログラムのソースコードを編集することができる。ユーザプログラムコード保存部５０８に記憶されているユーザプログラムは、上書きされる構成であってもよいし、リビジョンとして記憶される構成であってもよい。
【００７２】
ユーザプログラムビルド部５０３は、ユーザプログラムのソースコードをビルドする。ユーザプログラムビルド部５０３は、ユーザプログラムをコンパイルしバイナリ（機械語）ファイルとすると共に、ライブラリにリンクさせる。なお、ユーザプログラムビルド部５０３は、Ｇコードで記述されるＣＮＣユーザプログラムの場合はビルドする必要が無いため、ビルドしない。ユーザプログラムビルド部５０３は、ＩＥＣ６１１３１−３に準拠したコードを用いたＰＬＣユーザプログラム、またはロボット命令語を用いたロボット制御のユーザプログラムをビルドする。
【００７３】
ユーザプログラムビルド部５０３は、ユーザプログラムのソースコードに記述された命令語に対応する第２モーション制御命令が第２命令語記憶部５１１に存在すれば、第２モーション制御命令に関連付けてソースコードをビルドする。また、ユーザプログラムビルド部５０３は、ユーザプログラムのソースコードに記述された命令語に対応する第２モーション制御命令が第２命令語記憶部５１１に存在しなければ、第１モーション制御命令に関連付けてソースコードをビルドする。
【００７４】
ユーザプログラムビルド部５０３は、命令語指定部５０１によって指定された優先させる制御命令に基づいて、ソースコードをビルドする。ユーザプログラムビルド部５０３は、第１モーション制御命令を優先させる場合、第１モーション制御命令に関連付けてソースコードをビルドし、第２モーション制御命令を優先させる場合、第２モーション制御命令に関連付けてソースコードをビルドする。
【００７５】
第２モーション制御命令を優先させるよう指定されている場合のユーザプログラムビルド部５０３の動作について説明する。ユーザプログラムビルド部５０３は、ユーザプログラムのソースコードに記述された命令語に対応する第２モーション制御命令が第２命令語記憶部５１１に存在すれば、第２モーション制御命令に関連付けてソースコードをビルドする。また、ユーザプログラムビルド部５０３は、ユーザプログラムのソースコードに記述された命令語に対応する第２モーション制御命令が第２命令語記憶部５１１に存在しなければ、第１モーション制御命令に関連付けてソースコードをビルドする。すなわち、例えばユーザプログラムに記述されたＭＣ＿ＭｏｖｅＬｉｎｅａｒという命令語に対して、ユーザ定義のＭＣ＿ＭｏｖｅＬｉｎｅａｒが存在すれば、ユーザプログラムをユーザ定義の第２モーション制御命令にリンクさせる。ＭＣ＿ＭｏｖｅＬｉｎｅａｒという命令語に対して、ユーザ定義のＭＣ＿ＭｏｖｅＬｉｎｅａｒが存在しなければ、ユーザプログラムを既定の第２モーション制御命令にリンクさせる。
【００７６】
命令語編集部５０４は、ユーザの指示に従って、第１命令語記憶部５１０、または第２命令語記憶部５１１に命令語に対応付けて記憶されているモーション制御命令を編集する。
【００７７】
命令語編集部５０４によって編集されたモーション制御命令は、第２モーション制御命令として、第２命令語記憶部５１１に記憶される。
【００７８】
命令語コードチェック部５０５は、命令語編集部５０４によって編集されたモーション制御命令のコードをチェックするコンパイラとして機能する。なお、命令語コードチェック部５０５の機能が、命令語ビルド部５０６に備えられている構成であってもよい。
【００７９】
命令語ビルド部５０６は、第２モーション制御命令をビルドする。命令語ビルド部５０６は、第２モーション制御命令が、Ｇコードによるものであっても、ＩＥＣ６１１３１−３に準拠したコードによるものであっても、またはロボット命令語によるものであっても、ビルドを行う。
【００８０】
通信部５０７は、コントローラ１と通信する。通信部５０７は、第２モーション制御命令の実行コードおよび第２モーション制御命令のソースコードをコントローラ１に送信する。また、通信部５０７は、コントローラ１に対して、第２モーション制御命令の実行コードおよび第２モーション制御命令のソースコードの送信を要求し、コントローラ１から、第２モーション制御命令の実行コードおよび第２モーション制御命令のソースコードを受信してもよい。
【００８１】
〔プログラム開発装置５における処理フローの編集について〕
図６は、プログラム開発装置５における処理フローの編集時の表示画面５５１の一例を示す図である。表示画面５５１には、代表的な処理を示す選択ボタン（処理Ａ、処理Ｂ、処理Ｃ、処理Ｄ等）が表示されてもよい。また、表示画面５５１には、処理の流れを示す矢印、条件分岐、コメント用のテキスト等の入力を行うための制御処理ボタン５５２が表示されてもよい。
【００８２】
ユーザは、代表的な処理を示す選択ボタンの中から、編集を所望する処理を選択すると、当該処理にかかるフローが、フロー表示編集部５５０に表示される。ユーザは、フロー表示編集部５５０に表示されたフローに制御処理ボタン５５２を操作して、処理の追加、処理の削除、処理内容の変更等を行うことができる。また、ユーザは、新たな処理名を入力して、命令語のコードを生成することもできる。
【００８３】
〔処理フローの編集の流れについて〕
図７は、処理フローの編集の流れを示すフローチャートである。
【００８４】
（ステップＳ１）
ユーザは、プログラム開発装置５に対する操作で、編集する命令語を設定（指定）する。ユーザは、編集する命令語を、名称、および番号の何れか一方で設定することができてもよい。例えば、ユーザは、Ｇ０１の処理を編集する場合には、プログラム開発装置５に対して、Ｇ０１を設定する操作を行う。ユーザは、例えば、プログラム開発装置５の処理フロー編集画面で、編集する対象の命令語として、Ｇ０１を入力または選択する操作を行うことで、編集する命令語をＧ０１に設定することができてもよい。
【００８５】
（ステップＳ２）
プログラム開発装置５は、ユーザにより設定された命令語が新規であるか否かを判定する。例えば、ユーザにより設定された命令語がＧ０１である場合には、当該命令語はＧコードの既定の命令語であるため、プログラム開発装置５は、ユーザにより設定された命令語は新規ではない（ステップＳ２でＮＯ）と判定し、ステップＳ３に進む。プログラム開発装置５は、ユーザにより設定された命令語は新規である（ステップＳ２でＹＥＳ）と判定すると、ステップＳ５に進む。
【００８６】
（ステップＳ３）
プログラム開発装置５は、ユーザにより設定された命令語の既定の処理フローを表示画面５５１のフロー表示編集部５５０に表示する。
【００８７】
（ステップＳ４）
ユーザは、フロー表示編集部５５０に表示された処理フローの中で、変更したい箇所を指定する。
【００８８】
（ステップＳ５）
プログラム開発装置５は、表示画面５５１に新規の処理フローを作成、編集するための画面を表示する。表示画面５５１には、図６で示したように、代表的な処理を示す選択ボタン、制御処理ボタン５５２、およびフロー表示編集部５５０が表示される。
【００８９】
（ステップＳ６）
ユーザは、新規に設定した命令語に対応する処理フローを表示画面５５１上で作成する。
【００９０】
ステップＳ４、およびステップＳ６では、ユーザは、表示画面５５１上に表示されるアイコンを選択して、処理の追加や削除、内容の編集を行い、処理フローを作成、または編集する。
【００９１】
（ステップＳ７）
プログラム開発装置５は、編集部の機能により、ステップＳ４、またはステップＳ６で作成、または編集された処理フローに対応するソースコード（例えば高級言語で記述されたソースコード）を自動生成する。例えば、プログラム開発装置５は、処理フローに対応する高級言語で記述されたソースコードをあらかじめ記憶している。
【００９２】
（ステップＳ８）
ユーザは、ステップＳ４、及び、ステップＳ６で作成、または編集した処理フローの変更したい処理について、ＣやＣ＋＋等の高級言語を用いて内容を追加で実装（編集）してもよい。
【００９３】
（ステップＳ９）
プログラム開発装置５は、編集部の機能により、ステップＳ８で実装されたコードの文法チェックを行う。
【００９４】
（ステップＳ１０）
プログラム開発装置５は、命令語ビルド部５０６の機能により、作成、編集、または実装されたコードをビルドする。
【００９５】
（ステップＳ１１）
プログラム開発装置５は、ビルドされたユーザ定義の命令語の第２モーション制御命令によってコントローラ１のファームウェアＡＰＩ６０２の呼び出しエラーが発生しないことを、プログラム開発装置５上のシミュレーションで確認する。
【００９６】
（ステップＳ１２）
プログラム開発装置５は、コントローラ１のファームウェアＡＰＩ６０２の呼び出しエラーが発生しないか否かを判定する。プログラム開発装置５は、エラーが発生しない場合には（ステップＳ１２でＹＥＳ）、ステップＳ１４に進む。プログラム開発装置５は、エラーが発生する場合には（ステップＳ１２でＮＯ）、ステップＳ１３に進む。
【００９７】
（ステップＳ１３）
プログラム開発装置５は、表示画面５５１に修正すべき箇所を表示して、ステップＳ８に戻り、ユーザによる修正を要求する。
【００９８】
（ステップＳ１４）
プログラム開発装置５は、命令語の作成、編集、または追加実装を完了させ、処理を終了する。なお、プログラム開発装置５は、生成が完了した命令語に対応する第２モーション制御命令を該命令語に対応付けて、通信部５０７を介して、コントローラ１に送信する。
【００９９】
このように、プログラム開発装置５において、作成、編集、または追加実装が行われた命令語は、ファームウェアＡＰＩ６０２の呼び出しエラーが発生しないことが確認されてからコントローラ１に送信される。これにより、プログラム開発装置５によって、新規の命令語を作成したり、既定の命令語を編集したりすることを可能にしても、これらのユーザ定義の命令語が、コントローラ１の挙動や、コントローラ１による制御に影響を与える事がないようにすることができる。
【０１００】
また、ユーザは、プログラム開発装置５の表示画面５５１に表示されたアイコン等を用いて新規の命令語の作成や、既定の命令語の編集を対話形式で設定することができ、更にはソースコードが自動生成されるため、ユーザは、簡単に、ユーザ定義の命令語の生成を行うことができる。また、ユーザは、命令語の処理フローについて、変更したい処理を高級言語を用いて追加実装できるため、ユーザは、コントローラ１によって実現を望む制御を精度良く実現させることができる。
【０１０１】
図８は、フロー表示編集部５５０に表示される既定の処理フローの一例を示す図である。図９は、図８に示した処理フローに対して、ユーザが変更を行った後の、フロー表示編集部５５０に表示されるユーザ定義の処理フローの一例を示す図である。
【０１０２】
図８に示すように、１つの命令語（例えばＧ０１またはＭＣ＿ＭｏｖｅＬｉｎｅａｒ）によって定義される処理フローは、目標位置の設定（プロセスＰ１）、目標速度の設定（プロセスＰ２）、動作開始（プロセスＰ３）、動作完了待ち（プロセスＰ４）、動作完了（プロセスＰ５）というように、プロセスＰ１〜Ｐ５の複数のプロセスを含んでいる。ユーザは、プログラム開発装置５に対する操作で、プロセスＰ１〜Ｐ５のそれぞれのパラメータを編集することもできるし、プロセスの順番を並べ替えたり、プロセスを削除したり、プロセスを新たに追加することもできる。
【０１０３】
例えば、図９に示すように、ユーザは、目標位置の設定（プロセスＰ１）、目標速度の設定（プロセスＰ２）、動作開始（プロセスＰ３）、動作完了待ち（プロセスＰ４）、の後に、第２目標位置の設定（プロセスＰ１５）、第２動作開始（プロセスＰ１６）、第２動作完了待ち（プロセスＰ１７）の処理を追加する編集を行うこともできる。
【０１０４】
このように、ユーザによって定義された命令語は、通信部５０７を介してコントローラ１に転送され、コントローラ１の記憶部６１０に記憶される。
【０１０５】
実行部６２０は、上述したように、ユーザ定義の第２モーション制御命令を優先させるよう指定されている場合、ユーザ定義命令語群６０１に格納されている命令語を優先的に使用して、モーション制御命令を実行する。
【０１０６】
なお、ステップＳ７〜Ｓ８（高級言語での直接編集）は省略することもできる。ステップＳ９またはＳ１１〜Ｓ１２を省略することもできる。また、Ｓ３〜Ｓ６を省略し、命令語に対応する処理フローを高級言語で直接編集するステップＳ７〜Ｓ８を行ってもよい。
【０１０７】
〔ファームウェアＡＰＩの働きについて〕
ところで、ＰＬＣで用いられるラダー言語アプリケーションプログラムから、ラダー言語アプリケーションプログラムとは異なるマイクロプロセッサ上で動作するＣ言語アプリケーションプログラムを関数としてコールすることを可能とする技術が知られている。
【０１０８】
上述の技術のように、ＰＬＣ上で実行されるアプリケーションプログラムから、Ｃ言語アプリケーションプログラムを関数としてコールした場合、ポインタによりファームウェアが使用するメモリ領域が指定され、データが書き込まれる場合がある。このような場合には、ファームウェアの動作が不安定なるという問題がある。また、従来技術では、ファームウェアやオペレーティングシステムに対する影響についての対策がなされておらず、ＰＬＣの動作が不安定になる可能性があった。
【０１０９】
本実施形態では、ファームウェアＡＰＩ（application program interface）６０２の機能により、第２モーション制御命令の実行を制御することで、第２モーション制御命令によって、ファームウェアやオペレーティングシステムに対して悪影響が生じるのを防止している。
【０１１０】
図１０は、ファームウェアＡＰＩ６０２の処理の流れを模式的に示す図である。図１０に示すように、ファームウェアＡＰＩ６０２は、初期化中（ステップＳ１０１）、待機中（ステップＳ１０２）、終了中（ステップＳ１０５）と状態を遷移する機能を有している。
【０１１１】
（ステップＳ１０１）
コントローラ１の実行部６２０は、ユーザプログラムに従って、第２モーション制御命令の実行コードを実行するために、ファームウェアＡＰＩ６０２を呼び出す。ファームウェアＡＰＩ６０２は、状態を初期化中から待機中へと遷移させる。
【０１１２】
（ステップＳ１０２）
ファームウェアＡＰＩ６０２は、待機中の時にのみ呼び出しを許可する第１状態となる。
【０１１３】
（ステップＳ１０３）
ファームウェアＡＰＩ６０２は、待機中において呼び出され、第２モーション制御命令の実行コードが実行中となると、呼び出しを許可しない第２状態に遷移する。第２状態において呼び出されるファームウェアＡＰＩ６０２は呼び出しエラーとなる。
【０１１４】
ファームウェアＡＰＩ６０２は、第２モーション制御命令の実行コードが終了すると、状態が待機中（ステップＳ１０２）に遷移する。
【０１１５】
（ステップＳ１０４）
ファームウェアＡＰＩ６０２は、第２モーション制御命令の実行コードの実行中に、ファームウェアＡＰＩ６０２の異常や、第２モーション制御命令の実行コードの異常が発生すると、停止処理中となる。ファームウェアＡＰＩ６０２は、停止処理が完了すると、状態が待機中（ステップＳ１０２）に遷移する。
【０１１６】
（ステップＳ１０５）
ファームウェアＡＰＩ６０２は、コントローラ１の実行部６２０の動作が停止すると、機能を終了させる。
【０１１７】
（ステップＳ１２０）
また、ファームウェアＡＰＩ６０２は、ファームウェア６０３でエラーが発生している場合には、呼び出しを許可しない第２状態に遷移する。ファームウェアＡＰＩ６０２は、ファームウェア６０３におけるエラーが解除されるまで第２状態を保ち、呼び出しを許可しない。
【０１１８】
このように、本実施形態では、ファームウェアＡＰＩ６０２が、第２モーション制御命令の実行コードの実行中や、ファームウェア６０３でのエラー発生中には、ファームウェアＡＰＩ６０２の呼び出しを許可しない第２状態に遷移する。これにより、ファームウェアＡＰＩ６０２が不正に使用されたり、ファームウェア６０３やオペレーティングシステム６０４が暴走したり、デッドロックされるのを防止することができる。
【０１１９】
〔ソフトウェアによる実現例〕
コントローラ１の制御ブロック（特に実行部６２０、ファームウェア６０３、およびファームウェアＡＰＩ６０２）、およびプログラム開発装置５の制御ブロック（特に命令語指定部５０１、ユーザプログラム編集部５０２、ユーザプログラムビルド部５０３、命令語編集部５０４、命令語コードチェック部５０５、および命令語ビルド部５０６）は、集積回路（ＩＣチップ）等に形成された論理回路（ハードウェア）によって実現してもよいし、ソフトウェアによって実現してもよい。
【０１２０】
後者の場合、コントローラ１、およびプログラム開発装置５は、各機能を実現するソフトウェアであるプログラムの命令を実行するコンピュータを備えている。このコンピュータは、例えば１つ以上のプロセッサを備えていると共に、上記プログラムを記憶したコンピュータ読み取り可能な記録媒体を備えている。そして、上記コンピュータにおいて、上記プロセッサが上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記プロセッサとしては、例えばＣＰＵ（Central Processing Unit）を用いることができる。上記記録媒体としては、「一時的でない有形の媒体」、例えば、ＲＯＭ（Read Only Memory）等の他、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。また、上記プログラムを展開するＲＡＭ（Random Access Memory）などをさらに備えていてもよい。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体（通信ネットワークや放送波等）を介して上記コンピュータに供給されてもよい。なお、本発明の一態様は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【０１２１】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【０１２２】
１  コントローラ
５  プログラム開発装置
５０１  命令語指定部
５０２  ユーザプログラム編集部（編集部）
５０３  ユーザプログラムビルド部
５０４  命令語編集部（編集部）
５０５  命令語コードチェック部
５０６  命令語ビルド部
５０７  通信部
５０８  ユーザプログラムコード保存部
５０９  ユーザプログラム実行ファイル保存部
５１０  第１命令語記憶部（第１記憶部）
５１１  第２命令語記憶部（第２記憶部）
６０２  ファームウェアＡＰＩ
６０４  オペレーティングシステム
６０５  デバイスドライバ
６０６  ユーザプログラム
６０７  インターフェース（通信部）
６１０  記憶部
６２０  実行部
【図１】
2020013211.tif 000003
【図２】
2020013211.tif 000004
【図３】
2020013211.tif 000005
【図４】
2020013211.tif 000006
【図５】
2020013211.tif 000007
【図６】
2020013211.tif 000008
【図７】
2020013211.tif 000009
【図８】
2020013211.tif 000010
【図９】
2020013211.tif 000011
【図１０】
2020013211.tif 000012