(57)【特許請求の範囲】
【請求項１】
コントローラが実行するプログラムの実行コードを生成するプログラミング装置であって、  前記コントローラは、  前記コントローラに接続された駆動装置の駆動制御を行う駆動ＣＰＵと、  安全制御を行う安全ＣＰＵと  を備え、  前記プログラミング装置は、前記駆動ＣＰＵが実行する駆動ＣＰＵ実行コードと前記安全ＣＰＵが実行する安全ＣＰＵ実行コードとを生成するコンパイラを備え、  前記コンパイラは、前記駆動制御のための駆動機能ブロックと前記安全制御のための安全機能ブロックとの両方を含むソースプログラムをコンパイルし、前記駆動機能ブロックを前記駆動ＣＰＵに割り当てることによって前記駆動ＣＰＵ実行コードを生成し、また、前記安全機能ブロックを前記安全ＣＰＵに割り当てることによって前記安全ＣＰＵ実行コードを生成する  ことを特徴とするプログラミング装置。
【請求項２】
前記安全ＣＰＵは、安全規格に適合した安全機能ブロックである認証安全機能ブロックを内蔵しており、  前記コンパイラは、前記認証安全機能ブロックに関する構成情報を読み込み、  前記ソースプログラムに含まれる前記安全機能ブロックと同一名の前記認証安全機能ブロックが前記安全ＣＰＵに内蔵されている場合、前記コンパイラは、前記ソースプログラム中の前記安全機能ブロックをコンパイルする代わりに、前記安全ＣＰＵの前記認証安全機能ブロックを使用するように前記安全ＣＰＵ実行コードを生成する  ことを特徴とする請求項１に記載のプログラミング装置。
【請求項３】
前記駆動装置は、安全規格に適合した安全機能ブロックである認証安全機能ブロックを内蔵しており、  前記駆動ＣＰＵは、前記駆動装置に内蔵された前記認証安全機能ブロックを利用可能であり、  前記コンパイラは、前記認証安全機能ブロックに関する構成情報を読み込み、  前記ソースプログラムに含まれる前記安全機能ブロックと同一名の前記認証安全機能ブロックが前記駆動装置に内蔵されている場合、前記コンパイラは、前記ソースプログラム中の前記安全機能ブロックをコンパイルする代わりに、前記駆動装置の前記認証安全機能ブロックを使用するように前記駆動ＣＰＵ実行コードを生成する  ことを特徴とする請求項１に記載のプログラミング装置。
【請求項４】
前記安全ＣＰＵと前記駆動装置の各々は、安全規格に適合した安全機能ブロックである認証安全機能ブロックを内蔵しており、  前記駆動ＣＰＵは、前記駆動装置に内蔵された前記認証安全機能ブロックを利用可能であり、  前記コンパイラは、前記認証安全機能ブロックに関する構成情報を読み込み、  前記ソースプログラムに含まれる前記安全機能ブロックと同一名の前記認証安全機能ブロックが前記安全ＣＰＵと前記駆動装置の両方に内蔵されている場合、前記コンパイラは、前記ソースプログラム中の前記安全機能ブロックをコンパイルする代わりに、前記駆動装置の前記認証安全機能ブロックを使用するように前記駆動ＣＰＵ実行コードを生成する  ことを特徴とする請求項１に記載のプログラミング装置。
【請求項５】
前記駆動ＣＰＵと前記安全ＣＰＵのいずれもが実行可能な処理が前記ソースプログラムに含まれる場合、前記コンパイラは、当該処理を前記駆動ＣＰＵに割り当てて前記駆動ＣＰＵ実行コードを生成する  ことを特徴とする請求項１から４のいずれか一項に記載のプログラミング装置。
【請求項６】
前記コンパイラは、前記駆動機能ブロックと前記安全機能ブロックとをつなぐインタフェースを、前記駆動ＣＰＵと前記安全ＣＰＵとの間の通信に用いられる共有メモリに割り当てる  ことを特徴とする請求項１から５のいずれか一項に記載のプログラミング装置。
【請求項７】
コントローラが実行するプログラムの実行コードを生成する実行コード生成方法であって、  前記コントローラは、  前記コントローラに接続された駆動装置の駆動制御を行う駆動ＣＰＵと、  安全制御を行う安全ＣＰＵと  を備え、  前記実行コード生成方法は、前記駆動ＣＰＵが実行する駆動ＣＰＵ実行コードと前記安全ＣＰＵが実行する安全ＣＰＵ実行コードとを生成するステップを有し、  前記生成するステップは、前記駆動制御のための駆動機能ブロックと前記安全制御のための安全機能ブロックとの両方を含むソースプログラムをコンパイルし、前記駆動機能ブロックを前記駆動ＣＰＵに割り当てることによって前記駆動ＣＰＵ実行コードを生成し、また、前記安全機能ブロックを前記安全ＣＰＵに割り当てることによって前記安全ＣＰＵ実行コードを生成するステップを含む  ことを特徴とする実行コード生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、駆動制御と安全制御を行うコントローラが実行するプログラムの実行コードを生成する技術に関する。
【背景技術】
【０００２】  工場等における自動機械の制御に用いられるＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）等のコントローラが知られている。そのようなコントローラは、駆動制御やシーケンス制御を行う。駆動制御として、例えば、サーボモータを駆動するサーボアンプを制御して、駆動軸の速度や回転角度を制御することが挙げられる。シーケンス制御として、例えば、外部スイッチの動作に応答してサーボモータ周辺の機器の動作を制御することが挙げられる。【０００３】  特許文献１は、駆動制御とシーケンス制御を行うＰＬＣを開示している。具体的には、カム動作が、カムテーブルを用いたモーション制御によって実現される。一方、カムテーブルの切り替えが、シーケンス制御により実現される。それらモーション制御とシーケンス制御は、ＰＬＣの１つのＣＰＵユニットによって実行される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４８０７４７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】  ＰＬＣ等のコントローラにおいて、システムの非常停止、駆動軸の速度監視や停止といった安全機能も重要である。そのような安全機能はシーケンス制御により実現され得る。安全機能のためのシーケンス制御は、以下「安全制御」と呼ばれる。【０００６】  駆動制御と安全制御は、異なる概念で設計されるため、それらを別々のプログラムに記述することも考えられる。しかしながら、その場合、プログラミング工数が増大する。【０００７】  本発明の１つの目的は、駆動制御と安全制御を行うコントローラに対するプログラミングに有用な技術を提供することにある。
【課題を解決するための手段】
【０００８】  本発明の１つの観点において、コントローラが実行するプログラムの実行コードを生成するプログラミング装置が提供される。コントローラは、コントローラに接続された駆動装置の駆動制御を行う駆動ＣＰＵと、駆動装置の安全制御を行う安全ＣＰＵと、を備える。プログラミング装置は、駆動ＣＰＵが実行する駆動ＣＰＵ実行コードと安全ＣＰＵが実行する安全ＣＰＵ実行コードとを生成するコンパイラを備える。コンパイラは、駆動制御のための駆動機能ブロックと安全制御のための安全機能ブロックとの両方を含むソースプログラムをコンパイルし、駆動機能ブロックを駆動ＣＰＵに割り当てることによって駆動ＣＰＵ実行コードを生成し、また、安全機能ブロックを安全ＣＰＵに割り当てることによって安全ＣＰＵ実行コードを生成する。【０００９】  本発明の他の観点において、コントローラが実行するプログラムの実行コードを生成する実行コード生成方法が提供される。コントローラは、コントローラに接続された駆動装置の駆動制御を行う駆動ＣＰＵと、駆動装置の安全制御を行う安全ＣＰＵと、を備える。実行コード生成方法は、駆動ＣＰＵが実行する駆動ＣＰＵ実行コードと安全ＣＰＵが実行する安全ＣＰＵ実行コードとを生成するステップを有する。当該生成するステップは、駆動制御のための駆動機能ブロックと安全制御のための安全機能ブロックとの両方を含むソースプログラムをコンパイルし、駆動機能ブロックを駆動ＣＰＵに割り当てることによって駆動ＣＰＵ実行コードを生成し、また、安全機能ブロックを安全ＣＰＵに割り当てることによって安全ＣＰＵ実行コードを生成するステップを含む。
【発明の効果】
【００１０】  本発明は、駆動制御と安全制御を行うコントローラに対するプログラミングに有用である。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明の実施の形態１の概要を示すブロック図である。
【図２】図２は、本発明の実施の形態１に係るプログラミング装置の構成例を示すブロック図である。
【図３】図３は、本発明の実施の形態２の概要を示すブロック図である。
【図４】図４は、本発明の実施の形態２における安全ＰＯＵ構成情報の例を示すテーブルである。
【図５】図５は、本発明の実施の形態２に係るプログラミング装置の構成例を示すブロック図である。
【図６】図６は、安全ＰＯＵ構成情報が利用される場合の処理を要約的に示すフローチャートである。
【図７】図７は、本発明の実施の形態３の概要を示すブロック図である。
【図８】図８は、本発明の実施の形態３における安全ＰＯＵ構成情報の例を示すテーブルである。
【図９】図９は、本発明の実施の形態４の概要を示すブロック図である。
【図１０】図１０は、本発明の実施の形態４における安全ＰＯＵ構成情報の例を示すテーブルである。
【発明を実施するための形態】
【００１２】  添付図面に基づいて、本発明の実施の形態を説明する。
【００１３】実施の形態１．  図１は、本発明の実施の形態１の概要を示すブロック図である。安全駆動コントローラ１は、工場等で使用されるＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）等のコントローラである。
【００１４】  安全駆動コントローラ１は、駆動装置３０に接続されており、その駆動装置３０の駆動制御を行う。駆動装置３０としては、インバータや、サーボモータを駆動するサーボアンプが例示される。この場合、駆動制御として、インバータやサーボアンプを制御することによって、駆動軸の速度や回転角度を制御することが挙げられる。
【００１５】  また、安全駆動コントローラ１は、駆動装置３０に関する安全制御も行う。具体的には、安全駆動コントローラ１は、安全装置４０に接続されており、その安全装置４０からの入力に応答して安全制御を行う、あるいは、安全制御のために安全装置４０を動作させる。例えば、安全装置４０が外部の非常停止スイッチである場合、安全制御として、非常停止スイッチの操作に応答してシステムを非常停止させることが挙げられる。また、安全装置４０がモータに設けられたエンコーダである場合、安全制御として、エンコーダによって検出された回転速度に基づいて駆動軸の速度制限を行うことが挙げられる。また、安全装置４０が外部のリレーである場合、安全制御として、そのリレーをＯＦＦすることが挙げられる。
【００１６】  このように、安全駆動コントローラ１は、駆動制御と安全制御の両方を行う。ここで、本実施の形態では、駆動制御における高速且つ高精度な演算処理を実現するために、駆動制御と安全制御のために別々のＣＰＵが用いられる。より詳細には、図１に示されるように、安全駆動コントローラ１は、駆動ＣＰＵ１０と安全ＣＰＵ２０とを別々に搭載している。駆動ＣＰＵ１０は、駆動装置３０に接続されており、上述のような駆動制御を行う機能を有する。一方、安全ＣＰＵ２０は、安全装置４０に接続されており、上述のような安全制御を行う機能を有する。また、駆動ＣＰＵ１０と安全ＣＰＵ２０は、互いに通信可能に接続されている。駆動ＣＰＵ１０と安全ＣＰＵ２０は、デュアルコアプロセッサで実現されてもよい。
【００１７】  尚、一般に、駆動制御に対しては、安全制御よりも高速処理が要求される。例えば、駆動制御にはｍｓ以下の処理速度が要求される一方、安全制御の処理速度は１０ｍｓ程度でもよい。従って、駆動ＣＰＵ１０として、安全ＣＰＵ２０よりも処理性能が高いものが使用される。
【００１８】  本実施の形態では、このような安全駆動コントローラ１が実行するプログラムの実行コードを作成する技術が提案される。本実施の形態に係る安全駆動コントローラ１が実行するプログラムのソースコードは、駆動制御と安全制御の両方を含んでおり、以下「安全駆動プログラムＳＲＣ」と呼ばれる。すなわち、１つのソースコードである安全駆動プログラムＳＲＣに、駆動制御と安全制御の両方が記述されている。
【００１９】  より詳細には、安全駆動プログラムＳＲＣの制御ロジックは、ＰＯＵ（Ｐｒｏｇｒａｍ  Ｏｒｇａｎｉｚａｔｉｏｎ  Ｕｎｉｔ：プログラム構成単位）の組み合わせで記述される。ＰＯＵは、機能ブロックに相当する。駆動制御及び安全制御のためのＰＯＵは、以下、「駆動ＰＯＵ」及び「安全ＰＯＵ」とそれぞれ呼ばれる。図１に示されるように、本実施の形態では、１つの安全駆動プログラムＳＲＣが、駆動ＰＯＵと安全ＰＯＵの両方を含んでいる。つまり、１つの安全駆動プログラムＳＲＣ中に、駆動ＰＯＵと安全ＰＯＵが組み合わされて記述されている。
【００２０】  安全駆動プログラムＳＲＣの実行コードは、駆動ＣＰＵ１０が実行する駆動ＣＰＵ実行コードＥＸＥ１と、安全ＣＰＵ２０が実行する安全ＣＰＵ実行コードＥＸＥ２とを含んでいる。これら駆動ＣＰＵ実行コードＥＸＥ１と安全ＣＰＵ実行コードＥＸＥ２は、別々の実行コードであり、それぞれ駆動ＣＰＵ１０と安全ＣＰＵ２０に供給される。駆動ＣＰＵ１０は駆動ＣＰＵ実行コードＥＸＥ１を実行することにより駆動制御を行い、安全ＣＰＵ２０は安全ＣＰＵ実行コードＥＸＥ２を実行することにより安全制御を行う。これにより、安全駆動コントローラ１全体として、駆動装置３０の駆動制御と安全制御が実現される。
【００２１】  安全駆動プログラムＳＲＣからこれら駆動ＣＰＵ実行コードＥＸＥ１及び安全ＣＰＵ実行コードＥＸＥ２を生成するのが、コンパイラ１００である。コンパイラ１００は、１つの安全駆動プログラムＳＲＣを読み込み、その安全駆動プログラムＳＲＣをコンパイルすることによって、駆動ＣＰＵ実行コードＥＸＥ１と安全ＣＰＵ実行コードＥＸＥ２を同時且つ別々に生成する。
【００２２】  より詳細には、コンパイラ１００は、ＰＯＵの名称または名称プリフィックスに基づいて、駆動ＰＯＵと安全ＰＯＵを識別する。そして、コンパイラ１００は、安全ＰＯＵや、異なる安全ＰＯＵ間をつなぐインタフェースを、安全ＣＰＵ２０とそのメモリに割り当てる。また、コンパイラ１００は、駆動ＰＯＵと安全ＰＯＵとをつなぐインタフェースを、駆動ＣＰＵ１０と安全ＣＰＵ２０との間に通信に用いられる共有メモリに割り当てる。ここで、インタフェースとは、メモリアドレスや変数を意味する。
【００２３】  それ以外については、コンパイラ１００は、処理性能の優れた駆動ＣＰＵ１０とそのメモリへの割り当てを行う。つまり、コンパイラ１００は、駆動ＰＯＵや、異なる駆動ＰＯＵ間をつなぐインタフェースを、駆動ＣＰＵ１０とそのメモリに割り当てる。また、ある処理に関するＰＯＵを駆動ＣＰＵ１０と安全ＣＰＵ２０のいずれにも割り当て可能な場合、すなわちいずれでも実行可能な場合、コンパイラ１００は、当該ＰＯＵとそのインタフェースを優先的に駆動ＣＰＵ１０とそのメモリに割り当てる。
【００２４】  このような割り当てにより、コンパイラ１００は、駆動ＣＰＵ実行コードＥＸＥ１と安全ＣＰＵ実行コードＥＸＥ２を同時に生成する。生成された駆動ＣＰＵ実行コードＥＸＥ１と安全ＣＰＵ実行コードＥＸＥ２は、安全駆動コントローラ１の駆動ＣＰＵ１０と安全ＣＰＵ２０のそれぞれに転送される。そして、安全駆動コントローラ１のリセット後、駆動ＣＰＵ１０と安全ＣＰＵ２０のそれぞれが、駆動ＣＰＵ実行コードＥＸＥ１と安全ＣＰＵ実行コードＥＸＥ２の実行を開始する。
【００２５】  図２は、本実施の形態に係るコンパイラ１００を実現するプログラミング装置１１０の構成例を示すブロック図である。このプログラミング装置１１０は、コンピュータであり、処理装置１２０、記憶装置１３０、コントローラ通信部１４０、入力装置１５０、及び表示装置１６０を備えている。
【００２６】  処理装置１２０は、ＣＰＵ等のプロセッサであり、各種の演算処理や制御処理を実行する。記憶装置１３０は、ＲＡＭやＨＤＤを含んでいる。この記憶装置１３０には、ソースコードである安全駆動プログラムＳＲＣ、コンパイル処理用のライブラリＬＩＢ、コンパイルによって生成される実行コードＥＸＥ１、ＥＸＥ２などが格納される。コントローラ通信部１４０は、安全駆動コントローラ１とのデータ通信に用いられる。入力装置１５０は、キーボードやマウスを含んでいる。ユーザは、表示装置１６０に表示される情報を参照しながら、入力装置１５０を使用して、安全駆動プログラムＳＲＣの作成及び編集、コマンドや各種データの入力が可能である。コマンドとしては、例えばコンパイル実行が挙げられる。
【００２７】  コンパイラ１００は、処理装置１２０がコンパイラプログラムを実行することにより実現される。尚、コンパイラプログラムは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。ユーザからの指示に従い、コンパイラ１００は、記憶装置１３０に保存されている安全駆動プログラムＳＲＣを取得し、その安全駆動プログラムＳＲＣをコンパイルする。このとき、コンパイラ１００は、既に作成されているライブラリＬＩＢのファイルを利用してもよい。このコンパイルの結果、駆動ＣＰＵ実行コードＥＸＥ１及び安全ＣＰＵ実行コードＥＸＥ２が生成される。生成された駆動ＣＰＵ実行コードＥＸＥ１と安全ＣＰＵ実行コードＥＸＥ２は、コントローラ通信部１４０を介して、安全駆動コントローラ１へ転送される。
【００２８】  以上に説明されたように、本実施の形態に係るコンパイラ１００は、駆動制御と安全制御の両方を含む安全駆動プログラムＳＲＣをコンパイルして、駆動ＣＰＵ実行コードＥＸＥ１と安全ＣＰＵ実行コードＥＸＥ２をそれぞれ別々に生成することができる。つまり、駆動制御と安全制御を１つのソースコードに記述しておき、１回のコンパイルで駆動ＣＰＵ１０と安全ＣＰＵ２０のそれぞれ用の実行コードを得ることができる。駆動制御と安全制御を別々のプログラムに記述する必要がなくなるため、プログラミング工数を削減することが可能となる。
【００２９】  また、本実施の形態によれば、駆動制御のための駆動ＣＰＵ１０と安全制御のための安全ＣＰＵ２０とが別々に設けられる。ここで、駆動制御に対しては安全制御よりも高速処理が要求されるため、駆動ＣＰＵ１０として、安全ＣＰＵ２０よりも処理性能が高いものが使用される。そして、コンパイルにおいては、処理性能の優れた駆動ＣＰＵ１０に対して優先的に処理が割り当てられる。これにより、全体としての処理速度が向上する。
【００３０】実施の形態２．  図３は、本発明の実施の形態２の概要を示すブロック図である。尚、既出の実施の形態と重複する説明は適宜省略する。
【００３１】  本実施の形態では、安全駆動コントローラ１の安全ＣＰＵ２０が、認証安全ＰＯＵ２１を内蔵している。認証安全ＰＯＵとは、安全規格に適合した安全ＰＯＵのことである。本実施の形態では、安全駆動コントローラ１が、安全ＣＰＵ２０における認証安全ＰＯＵ２１に関する構成情報を収集し、安全ＰＯＵ構成情報ＣＯＮＦを作成する。
【００３２】  一例として、安全ＣＰＵ２０が“ＳＴＯ（Ｓａｆｅ  Ｔｏｒｑｕｅ  Ｏｆｆ）”という認証安全ＰＯＵ２１を内蔵している場合を考える。安全ＣＰＵ２０が内蔵する“ＳＴＯ”は、例えば、サーボモータへの電力供給を遮断するために、サーボアンプとサーボモータとの間に設けられたリレーをＯＦＦする関数である。図４は、この例の場合の安全ＰＯＵ構成情報ＣＯＮＦを示している。一般に、ＰＯＵのデータ構造は、名称、インタフェース、及び処理ロジックを有している。ＣＰＵ内蔵のＰＯＵの場合、インタフェースは構造体であり、処理ロジックは関数へのポインタである。図４の例では、ＳＴＯが、２つの入力（Ｅｍｇ０／Ｅｍｇ１）の論理積に基づいて安全出力（Ｓｏｕｔ）を制御する。
【００３３】  電源投入時の構成管理フェーズにおいて、安全駆動コントローラ１は、安全ＣＰＵ２０が内蔵している認証安全ＰＯＵ２１に関する構成情報を収集し、その一覧を示す安全ＰＯＵ構成情報ＣＯＮＦを作成する。そして、安全駆動コントローラ１は、作成した安全ＰＯＵ構成情報ＣＯＮＦを、プログラミング装置１１０に送信する。あるいは、プログラミング装置１１０が、あるタイミングで、例えばコンパイル実施時に、安全駆動コントローラ１から安全ＰＯＵ構成情報ＣＯＮＦを読みだしてもよい。いずれにせよ、プログラミング装置１１０は、図５に示されるように、安全ＰＯＵ構成情報ＣＯＮＦを取得し、その安全ＰＯＵ構成情報ＣＯＮＦを記憶装置１３０に格納する。
【００３４】  コンパイル時、コンパイラ１００は、記憶装置１３０から安全ＰＯＵ構成情報ＣＯＮＦを読み込む。そして、コンパイラ１００は、安全ＰＯＵ構成情報ＣＯＮＦを参照して、安全駆動プログラムＳＲＣに含まれる安全ＰＯＵと同一名の認証安全ＰＯＵ２１が安全ＣＰＵ２０に内蔵されているかチェックする。
【００３５】  安全駆動プログラムＳＲＣ中の安全ＰＯＵと同一名の認証安全ＰＯＵ２１が安全ＣＰＵ２０に内蔵されている場合、コンパイラ１００は、当該安全ＰＯＵをコンパイルする代わりに、安全ＣＰＵ２０に内蔵されている認証安全ＰＯＵ２１を使用するように安全ＣＰＵ実行コードＥＸＥ２を生成する。このとき、コンパイラ１００は、両者のインタフェースを比較して、インタフェースの調整を行う。具体的には、一致するインタフェースについてはそのまま使用し、余剰または不足するインタフェースについては安全ＰＯＵ構成情報ＣＯＮＦに合わせて無視または補完する。その他は、実施の形態１と同様である。
【００３６】  図６は、安全ＰＯＵ構成情報ＣＯＮＦが利用される場合の処理を要約的に示すフローチャートである。
【００３７】  ステップＳ１：  安全駆動コントローラ１は、安全ＰＯＵ構成情報ＣＯＮＦを作成する。プログラミング装置１１０は、その安全ＰＯＵ構成情報ＣＯＮＦを取得する。
【００３８】  ステップＳ１０：  コンパイラ１００は、安全駆動プログラムＳＲＣをコンパイルし、駆動ＣＰＵ実行コードＥＸＥ１及び安全ＣＰＵ実行コードＥＸＥ２を生成する。このとき、コンパイラ１００は、安全ＰＯＵ構成情報ＣＯＮＦを参照する（ステップＳ１１）。安全駆動プログラムＳＲＣ中の安全ＰＯＵと同一名の認証安全ＰＯＵ２１が安全ＣＰＵ２０に内蔵されているとする（ステップＳ１２；Ｎｏ、ステップＳ１４；Ｙｅｓ）。この場合、コンパイラ１００は、安全ＣＰＵ２０の認証安全ＰＯＵ２１を使用するように安全ＣＰＵ実行コードＥＸＥ２を生成する（ステップＳ１５）。
【００３９】  ステップＳ２０：  プログラミング装置１１０は、生成された駆動ＣＰＵ実行コードＥＸＥ１と安全ＣＰＵ実行コードＥＸＥ２を、安全駆動コントローラ１の駆動ＣＰＵ１０と安全ＣＰＵ２０のそれぞれに転送する。
【００４０】  本実施の形態によれば、前述の実施の形態１の場合と同じ効果が得られる。更に、次の効果も得られる。
【００４１】  すなわち、本実施の形態によれば、未認証の安全ＰＯＵの代わりに、安全ＣＰＵ２０が内蔵する認証安全ＰＯＵ２１を利用した安全制御が可能となる。従って、安全規格の認証審査を受けていない安全駆動プログラムＳＲＣを用いる場合であっても、安全規格に適合した実行環境を実現することが可能となる。このことは、安全性の向上の観点から好適である。
【００４２】  また、安全ＣＰＵ２０に内蔵された認証安全ＰＯＵ２１が利用されるため、安全ＣＰＵ実行コードＥＸＥ２のサイズが削減される。
【００４３】  また、コンパイラ１００は、安全ＰＯＵ構成情報ＣＯＮＦを参照することによって、自動的に、未認証の安全ＰＯＵを認証安全ＰＯＵ２１に置き換える。つまり、未認証の安全ＰＯＵを含む安全駆動プログラムＳＲＣを書き換える必要はない。このことも、プログラム工数の削減に寄与する。
【００４４】  また、安全ＰＯＵ構成情報ＣＯＮＦは、安全駆動コントローラ１によって自動的に作成され、プログラミング装置１１０に送られる。つまり、安全ＰＯＵ構成情報ＣＯＮＦは自動的に更新される。従って、認証安全ＰＯＵ２１に関する設定の工数も削減される。
【００４５】  例えば、安全ＣＰＵ２０が、認証安全ＰＯＵ２１を内蔵する最新の安全ＣＰＵ２０に交換されたとする。この場合、安全駆動コントローラ１のリセット後に、安全ＰＯＵ構成情報ＣＯＮＦは自動的に更新される。そして、コンパイラ１００は、最新の安全ＰＯＵ構成情報ＣＯＮＦに基づいて、駆動ＣＰＵ実行コードＥＸＥ１及び安全ＣＰＵ実行コードＥＸＥ２を生成する。すなわち、安全ＣＰＵ２０の交換後に一度コンパイルを実施するだけで、最新の構成に最適化された実行コードを得ることができる。
【００４６】  尚、実際の開発では、安全駆動コントローラ１の実機が無く、そのシミュレータを用いることによって、安全駆動プログラムＳＲＣの開発及びデバックを行うこともある。この場合は、安全駆動コントローラ１の実機から安全ＰＯＵ構成情報ＣＯＮＦを取得することはできないが、プログラミング装置１１０の入力装置１５０を用いて、安全ＰＯＵ構成情報ＣＯＮＦを適宜作成することは可能である。この場合、コンパイラ１００は、その安全ＰＯＵ構成情報ＣＯＮＦを参照することにより、シミュレータ用の駆動ＣＰＵ実行コードＥＸＥ１及び安全ＣＰＵ実行コードＥＸＥ２を生成する。つまり、安全駆動コントローラ１の実機が無くても、安全駆動プログラムＳＲＣの開発及びデバックを行うことはできる。安全駆動コントローラ１の実機に接続した際には、実機の安全ＰＯＵ構成情報ＣＯＮＦに基づいて再度コンパイルを実施すればよい。
【００４７】実施の形態３．  図７は、本発明の実施の形態３の概要を示すブロック図である。尚、既出の実施の形態と重複する説明は適宜省略する。
【００４８】  本実施の形態では、駆動ＣＰＵ１０に接続された駆動装置３０が、認証安全ＰＯＵ３１を内蔵している。駆動ＣＰＵ１０は、駆動装置３０に内蔵されている認証安全ＰＯＵ３１を利用可能である。
【００４９】  一例として、駆動装置３０がサーボアンプであり、そのサーボアンプが“ＳＴＯ（Ｓａｆｅ  Ｔｏｒｑｕｅ  Ｏｆｆ）”という認証安全ＰＯＵ３１を内蔵している場合を考える。駆動ＣＰＵ１０は、サーボアンプに外部信号を出力することにより、サーボアンプに内蔵されたＳＴＯを利用することができる。図８は、この例の場合の安全ＰＯＵ構成情報ＣＯＮＦを示している。サーボアンプ内蔵のＰＯＵの場合、インタフェースは駆動ＣＰＵ１０のＩ／Ｏアドレスであり、処理ロジックはダミーである。つまり、駆動ＣＰＵ１０がインタフェースに信号を出力すれば、サーボアンプ側でＳＴＯが実行される。
【００５０】  電源投入時の構成管理フェーズにおいて、安全駆動コントローラ１は、駆動ＣＰＵ１０及び駆動装置３０における認証安全ＰＯＵ３１に関する構成情報を収集し、その一覧を示す安全ＰＯＵ構成情報ＣＯＮＦを作成する。そして、安全駆動コントローラ１は、作成した安全ＰＯＵ構成情報ＣＯＮＦを、プログラミング装置１１０に送信する。あるいは、プログラミング装置１１０が、あるタイミングで、例えばコンパイル実施時に、安全駆動コントローラ１から安全ＰＯＵ構成情報ＣＯＮＦを読みだしてもよい。いずれにせよ、プログラミング装置１１０は、図５に示されるように、安全ＰＯＵ構成情報ＣＯＮＦを取得し、その安全ＰＯＵ構成情報ＣＯＮＦを記憶装置１３０に格納する。
【００５１】  コンパイル時、コンパイラ１００は、記憶装置１３０から安全ＰＯＵ構成情報ＣＯＮＦを読み込む。そして、コンパイラ１００は、安全ＰＯＵ構成情報ＣＯＮＦを参照して、安全駆動プログラムＳＲＣに含まれる安全ＰＯＵと同一名の認証安全ＰＯＵ３１が駆動装置３０に内蔵されているかチェックする。
【００５２】  安全駆動プログラムＳＲＣ中の安全ＰＯＵと同一名の認証安全ＰＯＵ３１が駆動装置３０に内蔵されている場合、コンパイラ１００は、当該安全ＰＯＵをコンパイルする代わりに、駆動装置３０に内蔵されている認証安全ＰＯＵ３１を使用するように駆動ＣＰＵ実行コードＥＸＥ１を生成する。このとき、コンパイラ１００は、両者のインタフェースを比較して、インタフェースの調整を行う。具体的には、一致するインタフェースについてはそのまま使用し、余剰または不足するインタフェースについては安全ＰＯＵ構成情報ＣＯＮＦに合わせて無視または補完する。その他は、実施の形態１と同様である。
【００５３】  既出の図６において、ステップＳ１、Ｓ１１、Ｓ２０は、実施の形態２の場合と同じである。安全駆動プログラムＳＲＣ中の安全ＰＯＵと同一名の認証安全ＰＯＵ３１が駆動装置３０に内蔵されているとする（ステップＳ１２；Ｙｅｓ）。この場合、コンパイラ１００は、駆動装置３０の認証安全ＰＯＵ３１を使用するように駆動ＣＰＵ実行コードＥＸＥ１を生成する（ステップＳ１３）。
【００５４】  本実施の形態によれば、前述の実施の形態１の場合と同じ効果が得られる。更に、次の効果も得られる。
【００５５】  すなわち、本実施の形態によれば、未認証の安全ＰＯＵの代わりに、駆動装置３０が内蔵する認証安全ＰＯＵ３１を利用した安全制御が可能となる。従って、安全規格の認証審査を受けていない安全駆動プログラムＳＲＣを用いる場合であっても、安全規格に適合した実行環境を実現することが可能となる。このことは、安全性の向上の観点から好適である。
【００５６】  また、駆動装置３０に内蔵された認証安全ＰＯＵ３１が利用されるため、駆動ＣＰＵ実行コードＥＸＥ１のサイズが削減される。
【００５７】  また、コンパイラ１００は、安全ＰＯＵ構成情報ＣＯＮＦを参照することによって、自動的に、未認証の安全ＰＯＵを認証安全ＰＯＵ３１に置き換える。つまり、未認証の安全ＰＯＵを含む安全駆動プログラムＳＲＣを書き換える必要はない。このことも、プログラム工数の削減に寄与する。
【００５８】  また、安全ＰＯＵ構成情報ＣＯＮＦは、安全駆動コントローラ１によって自動的に作成され、プログラミング装置１１０に送られる。つまり、安全ＰＯＵ構成情報ＣＯＮＦは自動的に更新される。従って、認証安全ＰＯＵ３１に関する設定の工数も削減される。
【００５９】  例えば、駆動装置３０が、認証安全ＰＯＵ３１を内蔵する最新の駆動装置３０に交換されたとする。この場合、安全駆動コントローラ１のリセット後に、安全ＰＯＵ構成情報ＣＯＮＦは自動的に更新される。そして、コンパイラ１００は、最新の安全ＰＯＵ構成情報ＣＯＮＦに基づいて、駆動ＣＰＵ実行コードＥＸＥ１及び安全ＣＰＵ実行コードＥＸＥ２を生成する。すなわち、駆動装置３０の交換後に一度コンパイルを実施するだけで、最新の構成に最適化された実行コードを得ることができる。
【００６０】実施の形態４．  図９は、本発明の実施の形態４の概要を示すブロック図である。尚、既出の実施の形態と重複する説明は適宜省略する。
【００６１】  本実施の形態の構成は、既出の実施の形態２、３の組み合わせである。すなわち、安全駆動コントローラ１の安全ＣＰＵ２０が、認証安全ＰＯＵ２１を内蔵している。また、駆動ＣＰＵ１０に接続された駆動装置３０が、認証安全ＰＯＵ３１を内蔵している。駆動ＣＰＵ１０は、駆動装置３０に内蔵されている認証安全ＰＯＵ３１を利用可能である。
【００６２】  安全駆動コントローラ１は、安全ＣＰＵ２０、駆動ＣＰＵ１０及び駆動装置３０における認証安全ＰＯＵ２１、３１に関する構成情報を収集し、その一覧を示す安全ＰＯＵ構成情報ＣＯＮＦを作成する。図１０は、本実施の形態における安全ＰＯＵ構成情報ＣＯＮＦの一例を示している。図１０に示される例は、既出の図４、図８の組み合わせである。
【００６３】  既出の図６で示されたフローチャートに基づいて、本実施の形態におけるコンパイルを説明する。尚、ステップＳ１、Ｓ１１、Ｓ２０は、既出の実施の形態の場合と同じである。
【００６４】  まず、コンパイラ１００は、安全ＰＯＵ構成情報ＣＯＮＦを参照して、安全駆動プログラムＳＲＣに含まれる安全ＰＯＵと同一名の認証安全ＰＯＵ３１が駆動装置３０に内蔵されているかチェックする（ステップＳ１２）。安全駆動プログラムＳＲＣ中の安全ＰＯＵと同一名の認証安全ＰＯＵ３１が駆動装置３０に内蔵されている場合（ステップＳ１２；Ｙｅｓ）、コンパイラ１００は、当該安全ＰＯＵをコンパイルする代わりに、駆動装置３０に内蔵されている認証安全ＰＯＵ３１を使用するように駆動ＣＰＵ実行コードＥＸＥ１を生成する（ステップＳ１３）。一方、安全駆動プログラムＳＲＣ中の安全ＰＯＵと同一名の認証安全ＰＯＵ３１が駆動装置３０に内蔵されていない場合（ステップＳ１２；Ｎｏ）、処理はステップＳ１４に進む。
【００６５】  ステップＳ１４において、コンパイラ１００は、安全ＰＯＵ構成情報ＣＯＮＦを参照して、安全駆動プログラムＳＲＣに含まれる安全ＰＯＵと同一名の認証安全ＰＯＵ２１が安全ＣＰＵ２０に内蔵されているかチェックする。安全駆動プログラムＳＲＣ中の安全ＰＯＵと同一名の認証安全ＰＯＵ２１が安全ＣＰＵ２０に内蔵されている場合（ステップＳ１４；Ｙｅｓ）、コンパイラ１００は、当該安全ＰＯＵをコンパイルする代わりに、安全ＣＰＵ２０に内蔵されている認証安全ＰＯＵ２１を使用するように安全ＣＰＵ実行コードＥＸＥ２を生成する（ステップＳ１５）。一方、安全駆動プログラムＳＲＣ中の安全ＰＯＵと同一名の認証安全ＰＯＵ２１が安全ＣＰＵ２０に内蔵されていない場合（ステップＳ１４；Ｎｏ）、処理はステップＳ１６に進む。
【００６６】  ステップＳ１６において、コンパイラ１００は、実施の形態１の場合と同様にコンパイルを実施する。尚、安全性の向上のためには、ライブラリＬＩＢが安全規格適合の認証を受けていることが好ましい。
【００６７】  ここで、安全駆動プログラムＳＲＣに含まれる安全ＰＯＵと同一名の認証安全ＰＯＵ（２１、３１）が、安全ＣＰＵ２０と駆動装置３０の両方に内蔵されている場合を考える。この場合、図６で示されたフローによれば、コンパイラ１００は、駆動装置３０に内蔵されている認証安全ＰＯＵ３１の方を使用するように駆動ＣＰＵ実行コードＥＸＥ１を生成することになる（ステップＳ１３）。すなわち、可能であれば、処理速度に優れた駆動ＣＰＵ１０に認証安全ＰＯＵに係る処理を実行させるようにコンパイルが行われる。このことは、処理速度と安全機能の応答性の観点から好適である。また、安全ＣＰＵ２０に内蔵された認証安全ＰＯＵ２１を使用しないため、その分、部品点数を削減できる可能性がある。
【００６８】  例えば、図１０で示された例の場合、“ＳＴＯ”が安全ＣＰＵ２０と駆動装置３０であるサーボアンプの両方に内蔵されている。この場合、コンパイラ１００は、安全駆動プログラムＳＲＣ中の“ＳＴＯ”をコンパイルする代わりに、サーボアンプの方のＳＴＯを使用するように駆動ＣＰＵ実行コードＥＸＥ１を生成する。すなわち、ＳＴＯに関する処理を駆動ＣＰＵ１０が実行する。このことは、処理速度と安全機能の応答性の観点から好適である。また、安全ＣＰＵ２０の方のＳＴＯは使用しないため、サーボアンプとサーボモータとの間にリレーを設ける必要がなくなる。つまり、部品点数を削減することが可能となる。
【００６９】  本実施の形態によれば、前述の実施の形態２、３の場合と同じ効果が得られる。更に、次の効果も得られる。すなわち、駆動装置３０に内蔵された認証安全ＰＯＵ３１を優先的に使用することにより、処理速度と安全機能の応答性が向上する。また、部品点数が削減される。
【００７０】  尚、以上の説明において、ＳＴＯが安全ＰＯＵの一例として挙げられた。しかし、安全ＰＯＵはそれだけに限られない。サーボアンプの安全ＰＯＵとして、安全速度監視（ＳＬＳ）なども考えられる。安全ＣＰＵ２０の安全ＰＯＵとして、非常停止スイッチが押された時の停止（ＥＳＴＯＰ）や、ライトカーテン遮光時の停止（ＥＳＰＥ）なども考えられる。これら安全ＰＯＵの場合であっても、既出の実施の形態は同様に適用可能である。
【００７１】  以上、本発明の実施の形態が添付の図面に基づいて説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【符号の説明】
【００７２】  １  安全駆動コントローラ、１０  駆動ＣＰＵ、２０  安全ＣＰＵ、２１  認証安全ＰＯＵ、３０  駆動装置、３１  認証安全ＰＯＵ、４０  安全装置、１００  コンパイラ、１１０  プログラミング装置、１２０  処理装置、１３０  記憶装置、１４０  コントローラ通信部、１５０  入力装置、１６０  表示装置、ＣＯＮＦ  安全ＰＯＵ構成情報、ＥＸＥ１  駆動ＣＰＵ実行コード、ＥＸＥ２  安全ＣＰＵ実行コード、ＬＩＢ  ライブラリ、ＳＲＣ  安全駆動プログラム。
【要約】  コントローラ（１）は、駆動制御を行う駆動ＣＰＵ（１０）と、安全制御を行う安全ＣＰＵ（２０）と、を備える。プログラミング装置は、駆動ＣＰＵ（１０）が実行する駆動ＣＰＵ実行コードと安全ＣＰＵ（２０）が実行する安全ＣＰＵ実行コードとを生成するコンパイラ（１００）を備える。コンパイラ（１００）は、駆動制御のための駆動機能ブロックと安全制御のための安全機能ブロックとの両方を含むソースプログラムをコンパイルし、駆動機能ブロックを駆動ＣＰＵ（１０）に割り当てることによって駆動ＣＰＵ実行コードを生成し、また、安全機能ブロックを安全ＣＰＵ（２０）に割り当てることによって安全ＣＰＵ実行コードを生成する。【図１】
0005619331.tif 000002
【図２】
0005619331.tif 000003
【図３】
0005619331.tif 000004
【図４】
0005619331.tif 000005
【図５】
0005619331.tif 000006
【図６】
0005619331.tif 000007
【図７】
0005619331.tif 000008
【図８】
0005619331.tif 000009
【図９】
0005619331.tif 000010
【図１０】
0005619331.tif 000011