(57)【特許請求の範囲】
【請求項１】
プログラムにより機器をシーケンス制御するプログラマブルコントローラであって、
実行コード化され、当該プログラマブルコントローラのシーケンス制御に専用の専用言語プログラムから実行可能な関数が登録されたまたはＲＵＮ直後に実行される関数もしくはスキャン終了毎に実行される関数のアドレスが登録された汎用言語プログラムを、外部コンピュータから取込むインターフェース部と、
上記取込んだ汎用言語プログラムと、上記専用言語プログラムと、該専用言語プログラム及び該汎用言語プログラムのそれぞれの実行の仕方を決めるシステムプログラムとを格納する格納手段と、
上記専用言語プログラム、上記汎用言語プログラム及び上記システムプログラムのそれぞれを上記格納手段から読み出し、該読み出した該専用言語プログラムまたは該汎用言語プログラムにより、対応する手順を実行する処理手段と、
を備え、
上記実行コード化された汎用言語プログラムは、上記専用言語プログラムから実行可能な関数が複数個登録された関数登録テーブルと、上記処理手段から実行する関数が格納されたプログラム本体とを備えた構成であり、
上記処理手段が、上記汎用言語プログラムを上記専用言語プログラムとしてのラダープログラムから実行するラダーの命令Ｆｕｎｃｔｉｏｎを定義し、上記関数登録テーブルより実行したい関数の先頭アドレスを参照し、該先頭アドレスを基に、上記プログラム本体に格納されている関数を実行することで、上記汎用言語プログラムを実行し、該実行した汎用言語プログラムが終了すると次の処理に移る構成としたことを特徴とするプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムにより機器をシーケンス制御するプログラマブルコントローラに係り、特に、専用言語プログラムの他、汎用言語プログラムによっても作動可能な構成に関する。
【背景技術】
【０００２】
設備機器を制御するために用いられている汎用パーソナルコンピュータ（以下、パソコンという）や専用のボードコンピュータなどを、プログラマブルコントローラ（以下、ＰＬＣという）に置き換えるための検討が盛んに行われている。しかしながら、パソコン向けや専用ボードコンピュータ向けなどに作成されたプログラムをＰＬＣへ移植する作業は一般に難しいとされる。これは、ＰＬＣの業界では、ラダーと呼ばれるＰＬＣのシーケンス制御専用のプログラム記述言語の仕様がメーカ間で統一されていないことや、パソコン向けの汎用言語プログラミングの経験者の数に比べて、ラダー言語プログラミングの経験者の数が少ないことなどがその主な理由として考えられる。
【０００３】
従来、パソコンや専用ボードコンピュータを制御するための汎用言語プログラムをＰＬＣへ移植するためには、以下の（１）〜（３）により対応している。すなわち、
（１）汎用言語で記述されたプログラム（以下、汎用言語プログラムという）を解析して、ＰＬＣの記述言語であるラダープログラムに記述し直す。
（２）ＰＬＣメーカに対して、ラダー記述専用命令の開発を依頼する。
（３）ＰＬＣメーカが提供している汎用言語を処理することのできる専用のハードウェアを利用する、
である。
【０００４】
また、本発明に関連した従来技術であって、特許文献に記載された技術としては、例えば、特開平０７−０４４０９２号公報（特許文献１）に記載されたものがある。該公報には、パーソナルコンピュータ等の汎用コンピュータ上において、変換ソフトウェアにより、Ｃ言語等の汎用言語を使用したプログラムから、プログラマブルコントローラ（ＰＬＣ）において使用するシーケンス言語を使用したプログラムに変換するとした技術が記載されている。
【０００５】
【特許文献１】特開平０７−０４４０９２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上記従来技術のうち、上記（１）は、移植作業とデバッグに要する工数が多くなるという不都合があり、上記（２）は、多額の開発費用が必要であり、上記（３）は、ラダープログラムで制御する内容と汎用言語プログラムで制御する内容とを連動させにくいという問題点がある。また、特開平０７−０４４０９２号公報記載の技術は、プログラマブルコントローラ（ＰＬＣ）においては、汎用言語プログラムを使用せず、該汎用言語プログラムから変換したシーケンス言語プログラムを使用するものである。
本発明の課題点は、ＰＬＣにおいて、上記従来技術の状況に鑑み、簡易な構成下で、ラダープログラムなどの専用言語プログラムと、汎用言語プログラムとを容易かつ確実に連動させ、異なるプラットフォームの機器をシーケンス制御可能にすることである。
本発明の目的は、かかる課題点を解決し、汎用言語プログラムの再利用性を高めるとともに、使い勝手が良いＰＬＣを提供することにある。
【課題を解決するための手段】
【０００７】
上記課題点を解決するために、本発明では、ＰＬＣとして、実行コード化された汎用言語プログラムを外部コンピュータから取込み、当該ＰＬＣのシーケンス制御専用のラダープログラムなど専用言語プログラムやシステムプログラムとともにＰＬＣ内部に格納し、機器のシーケンス制御時に、ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などの処理手段が、これらを読み出し、該読み出した専用言語プログラムまたは該汎用言語プログラムにより、対応する手順を実行する構成とする。該汎用言語プログラムとしては、上記専用言語プログラムから実行可能な関数が登録された内容またはＲＵＮ直後に実行される関数もしくはスキャン終了毎に実行される関数のアドレスが登録された内容のものとする。具体的には、上記実行コード化された汎用言語プログラムは、上記専用言語プログラムから実行可能な関数が複数個登録された関数登録テーブルと、上記処理手段から実行する関数が格納されたプログラム本体とを備えた構成であり、上記処理手段が、上記汎用言語プログラムを上記専用言語プログラムとしてのラダープログラムから実行するラダーの命令Ｆｕｎｃｔｉｏｎを定義し、上記関数登録テーブルより実行したい関数の先頭アドレスを参照し、該先頭アドレスを基に、上記プログラム本体に格納されている関数を実行することで、上記汎用言語プログラムを実行し、該実行した汎用言語プログラムが終了すると次の処理に移る構成とする。
【発明の効果】
【０００８】
本発明によれば、ＰＬＣにおいて、簡易な構成下で、ラダープログラムなどの専用言語プログラムと、汎用言語プログラムとを容易かつ確実に連動させることができ、異なるプラットフォームの機器のシーケンス制御が可能となる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の実施例につき、図面を用いて説明する。
図１〜図９は、本発明の実施例の説明図である。図１は、本発明の実施例としてのプログラマブルコントローラ（以下、ＰＬＣという）の構成図、図２は、図１のＰＬＣを外部コンピュータと接続した状態を示す図、図３は、図１のＰＬＣに用いる汎用言語プログラムの構成例図、図４は、図３の汎用言語プログラム中の関数登録テーブルの構成例図、図５は、図１のＰＬＣにおいて汎用言語プログラムを実行する手順の説明図、図６は、汎用言語プログラムの実行タイミングの説明図、図７は、他の関数登録テーブルの構成例図、図８は、汎用言語プログラムの実行可否の判定の動作説明図、図９は、図１のＰＬＣにおいてプログラムからデータメモリへアクセスするときの説明図である。
【００１０】
図１において、１はＰＬＣ、１０は、処理手段としてのＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、２０は、格納手段としてのメモリ、２１はシステムプログラム、２２は、ＰＬＣ１のシーケンス制御に専用の専用言語プログラムとしてのラダープログラム、２３はデータメモリ、２４は汎用言語プログラム、３０は、外部に対し信号の入出力を行う入出力インターフェース、４０は、外部機器とデータの送受信を行う通信インターフェース、５０はバスラインである。メモリ２０、ＭＰＵ３０、入出力インターフェース３０及び通信インターフェース４０はそれぞれ、バスライン５０に接続されている。システムプログラム２１、ラダープログラム２２、データメモリ２３、汎用言語プログラム２４はそれぞれ、メモリ２０中に格納されている。
【００１１】
汎用言語プログラム２４は、パソコンなどの外部コンピュータ（図示なし）により、ＰＬＣ１が実行可能な実行コードの状態にされ（実行コード化され）、かつ、該汎用言語プログラム２４内には、専用言語プログラムとしてのラダープログラム２２から実行可能な関数が登録される。
汎用言語プログラム２４の作成及び実行コード化は、予め、ユーザにより、パソコンなどの外部コンピュータ（図示なし）において行われる。外部コンピュータで作成され実行コード化された汎用言語プログラム２４は、該外部コンピュータから入出力インターフェース３０を介してＰＬＣ１内に取込まれる。該取込まれた汎用言語プログラム２４はさらに、バスライン５０を介してメモリ２０に格納される。システムプログラム２１は、ラダープログラム２２及び該汎用言語プログラム２４のそれぞれの実行の仕方を決める。処理手段としてのＭＰＵ１０は、ＰＬＣ１がプラットフォームの機器のシーケンス制御を行うとき、上記ラダープログラム２２、上記汎用言語プログラム２４及び上記システムプログラム２１のそれぞれをメモリ２０から読み出し、該読み出した該ラダープログラム２２または該汎用言語プログラム２４により、それぞれに対応した手順を実行する。これによって、ＰＬＣ１は、互いに異なったプラットフォームの機器をシーケンス制御することができる。
以下、説明中で用いる図１のＰＬＣ１の各構成要素には、図１の場合と同じ符号を付して用いるとする。
【００１２】
図２は、図１のＰＬＣ１を外部コンピュータと接続したときの状態を示す図である。
図２において、７０は、外部コンピュータとしてのパソコン（以下、ＰＣという）、８０は、ＰＬＣ１の通信ポートとＰＣ７０の通信ポートとを互いに接続する通信ケーブルである。ＰＬＣ１側では、通信ケーブル８０は、入出力インターフェース３０内の通信ポートに接続されている。ＰＣ７０において、汎用言語プログラムが作成され、該作成された汎用言語プログラムは、ＰＬＣ１が実行可能な実行コードに変換され、さらに、ラダープログラム２２から実行可能とする関数が登録される。ＰＣ７０内で形成されたかかる汎用言語プログラム２４は、通信ケーブル８０により、ＰＣ７０からＰＬＣ１側に転送される。通信ポートとしては、ＰＬＣ１側、ＰＣ７０側とも、シリアルポート、Ｅｔｈｅｒｎｅｔポート、ＵＳＢポートなどがある。
以下、説明中で用いる図２の各構成要素にも、図２の場合と同じ符号を付して用いる。
【００１３】
図３は、汎用言語プログラム２４の構成例図である。
図３において、汎用言語プログラム２４は、関数登録テーブル９０と、プログラム本体１００と、当該汎用言語プログラム２４を管理するための管理情報１１０とを備えて構成される。関数登録テーブル９０は、ラダープログラム２２から実行可能な関数が複数個登録された内容であり、プログラム本体１００には、ＰＬＣ１のＭＰＵ１０から実行する関数の実体が格納され、管理情報１１０には、汎用言語プログラム２４の正当性を検査するための誤り検出符号や誤り訂正符号などの情報が格納されている。該管理情報１１０は、ＰＣ７０上で作成された直後の汎用言語プログラムには付加されていない。該管理情報１１０は、管理情報なしの汎用言語プログラムをＰＣ７０からＰＬＣ１に転送する際に、転送するツールによって付加される。関数登録テーブル９０、プログラム本体１００、管理情報１１０のいずれもが、ＰＬＣ１が実行可能な実行コードの状態にされている（実行コード化されている）。
【００１４】
図４は、図３の汎用言語プログラム２４中の関数登録テーブル９０の構成例図である。
図４において、９１は、関数登録テーブル９０に登録する関数の番号、９２は、ＰＬＣ１から実行する関数の先頭アドレスである。関数登録テーブル９０には、ラダープログラム２２から実行できる関数を複数個（Ｎ個）登録できるように、先頭から１からＮの番号を割り付け、対応するエリアには、ＰＬＣ１から実行する関数の先頭アドレス９２を格納する。
【００１５】
図５は、図１のＰＬＣ１において汎用言語プログラム２４を実行する手順の説明図である。下記の手順はＭＰＵ１０によって行われる。
図５において、
（１）汎用言語プログラム２４をラダープログラム２２から実行するラダーの命令Ｆｕｎｃｔｉｏｎを定義する。Ｆｕｎｃｔｉｏｎは、引数としてｎを１つ持ち、Ｆｕｎｃｔｉｏｎ（ｎ）として実行される。引数ｎとしては、実行を希望する関数の番号を指定する。該番号は、関数登録テーブル９０の関数の番号９１とする。関数登録テーブルの１番目に登録した関数を実行したい場合には、Ｆｕｎｃｔｉｏｎ（１）と記述する（ステップＳ５０１）。
（２）汎用言語プログラム２４の実行方法は、関数登録テーブル９０より実行したい関数の先頭アドレス９２を参照する（ステップＳ５０２）。
（３）汎用言語プログラム２４の関数登録テーブル９０の先頭アドレス９２を基に、該汎用言語プログラム２４のプログラム本体１００に格納している関数を実行する（ステップＳ５０３）。
（４）実行した汎用言語プログラム２４が終了すると、次の処理に移る（ステップＳ５０４）。
上記（１）〜（４）に示すように、ラダープログラム２２中で、Ｆｕｎｃｔｉｏｎ命令を使用して汎用言語プログラム２４を実行する方式を、「ＦＵＮ命令実行方式」と呼ぶものとする。
【００１６】
図６は、汎用言語プログラム２４の実行タイミングを示す図である。上記実施例では、汎用言語プログラム２４をラダープログラム２２から実行する場合（１３０）すなわちＦＵＮ命令実行方式の場合につき説明したが、この他、ＰＬＣ１がＲＵＮした直後に１回だけ汎用言語プログラム２４を実行する場合（１２０）や、スキャンＥＮＤ毎に汎用言語プログラム２４を実行する場合（１４０）もある。
【００１７】
図７は、上記の、ＰＬＣ１がＲＵＮした直後に１回だけ汎用言語プログラム２４を実行する場合（１２０）や、スキャンＥＮＤ毎に汎用言語プログラム２４を実行する場合（１４０）の汎用言語プログラム２４の関数登録テーブル９０の構成例図である。図７の関数登録テーブル９０では、ＲＵＮ直後に実行する関数の先頭アドレス９３、及び、スキャンＥＮＤ毎に実行する関数の先頭アドレス９４を登録できるように定義する。ここで、ＲＵＮ直後やスキャンＥＮＤ毎において、汎用言語プログラム２４を実行する場合には、関数の先頭アドレスを登録し、その先頭アドレスを基に登録された関数を実行する。また、ＲＵＮ直後やスキャンＥＮＤ毎において、汎用言語プログラム２４を実行しない場合は、０x００００００００などの予め決められた値を登録することとし、０x００００００００などの値が既に登録されていた場合には、ＲＵＮ直後やスキャンＥＮＤでは汎用言語プログラム２４を実行しない。
【００１８】
図８は、汎用言語プログラム２４をＲＵＮ直後に実行する場合の処理動作を示す図である。
図８において、
（１）まず、ＭＰＵ１０がＲＵＮを開始させる（ステップＳ８０１）。
（２）ＭＰＵ１０は、ＲＵＮ直後に関数登録テーブルの登録された関数を実行し、登録された先頭アドレスが、予め決められた値か否かを判別する（ステップＳ８０２）。
（３）上記ステップＳ８０２における判別の結果、関数登録テーブルに登録された先頭アドレスが、予め決められた値である場合は、ＭＰＵ１０は、該関数登録テーブルに登録された関数の先頭アドレスを参照し、汎用言語プログラム２４の関数を実行する（ステップＳ８０３）。
（４）ＭＰＵ１０は、その後、スキャンを開始させる（ステップＳ８０４）。
（５）上記ステップＳ８０２における判別の結果、関数登録テーブルに登録された先頭アドレスが、予め決められた値である場合は、ＭＰＵ１０は、上記ステップＳ８０４に移行しスキャンを開始させる。
【００１９】
図９は、汎用言語プログラム２４及びラダープログラム２２からデータメモリ２３へアクセスする場合の説明図である。ＰＬＣ１においては、ラダープログラム２２からも汎用言語プログラム２４からも、データメモリ２３に対して、メモリデータのアドレスに基づいてアクセスできるようになっており、ラダープログラム２２と汎用言語プログラム２４の双方から、データメモリ２３に対して読み出し動作と書き込み動作が可能である。そのため、例えば、ラダープログラム２２でデータメモリ２３に書き込んだデータを汎用言語プログラム２４で読み出したり、逆に、汎用言語プログラム２４でデータメモリ２３に書き込んだデータをラダープログラム２２で読み出したりすることが可能である。また、ＰＬＣ１は、外部入出力のデータメモリ２３にも、メモリデータのアドレスに基づいてアクセスすることができるようになっており、ラダープログラム２２と汎用言語プログラム２４の双方から、外部入力のデータメモリ２３からの読み出し、外部出力の該データメモリ２３への書き込みが可能である。
【００２０】
上記本発明の実施例によれば、ラダープログラム２２と汎用言語プログラム２４とを容易かつ確実に連動させることができ、広範囲の異なるプラットフォームの機器のシーケンス制御に対応することが可能となる。汎用言語プログラム２４は、ＰＣ７０において、ユーザが作成することができるため、変更も容易である。このため、使い勝手が良いＰＬＣ１を提供することができる。また、ＰＬＣ以外のプラットフォーム向けに開発されたソフトウェア資産（プログラム）をＰＬＣにて有効的に活用することができ、汎用言語プログラムの利用性を高めることができる。また、重要なノウハウを含む処理内容の部分を実行コード形式にてＰＬＣ１の本体へ組み込むことができるため、ノウハウの漏洩を防止することもできる。さらに、プログラムの移植作業費や、ＰＬＣの開発費などの低減化が図れるし、汎用言語プログラム２４は、特定ユーザ向けの専用命令ではないため守秘義務などの管理責任がない。
【図面の簡単な説明】
【００２１】
【図１】本発明の実施例としてのＰＬＣの構成図である。
【図２】図１のＰＬＣを外部コンピュータと接続した状態を示す図である。
【図３】図１のＰＬＣに用いる汎用言語プログラムの構成例図である。
【図４】図３の汎用言語プログラム中の関数登録テーブルの構成例図である。
【図５】図１のＰＬＣにおいて汎用言語プログラムを実行する手順の説明図である。
【図６】汎用言語プログラムの実行タイミングの説明図である。
【図７】他の関数登録テーブルの構成例図である。
【図８】汎用言語プログラムの実行可否の判定の動作説明図である。
【図９】図１のＰＬＣにおいてプログラムからデータメモリへアクセスするときの説明図である。
【符号の説明】
【００２２】
１…プログラマブルコントローラ、
１０…ＭＰＵ、
２０…メモリ、
２１…システムプログラム、
２２…ラダープログラム、
２３…データメモリ、
２４…汎用言語プログラム、
３０…入出力インターフェース、
４０…通信インターフェース、
５０…バスライン、
７０…ＰＣ、
８０…通信ケーブル、
９０…関数登録テーブル。
【図１】
0004528284.tif 000002
【図２】
0004528284.tif 000003
【図３】
0004528284.tif 000004
【図４】
0004528284.tif 000005
【図５】
0004528284.tif 000006
【図６】
0004528284.tif 000007
【図７】
0004528284.tif 000008
【図８】
0004528284.tif 000009
【図９】
0004528284.tif 000010