(57)【特許請求の範囲】
【請求項１】
ユーザにより作成されたユーザファンクションブロックのオブジェクトコードと、ユーザにより作成された組み込みソフトウェアのファンクションブロックのオブジェクトコードとを、これらに付与されそれぞれを一意に特定するユーザファンクションブロック番号により管理するプログラマブルコントローラにおいて、
前記ユーザファンクションブロックのオブジェクトコードと、前記組み込みソフトウェアのファンクションブロックのオブジェクトコードと、前記ユーザファンクションブロック番号とを格納する記憶手段と、
専用線、記憶媒体、或いは外部ネットワークを通じプログラマブルコントローラ支援装置との間でデータの交信を行う通信手段と、
前記ユーザファンクションブロックのオブジェクトコード及び／又は前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを解釈し実行する実行手段とを備え、
前記記憶手段は、前記通信手段を通じて前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを受信したときには、該組み込みソフトウェアのファンクションブロックのオブジェクトコードを格納し、その後、前記通信手段を通じて前記ユーザファンクションブロックのオブジェクトコードを受信したときには、該ユーザファンクションブロックのオブジェクトコードと、該ユーザファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号と、格納済みの前記組み込みソフトウェアのファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号とを格納し、
前記実行手段は、前記記憶手段を通じて格納された前記ユーザファンクションブロックのオブジェクトコード及び／又は前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを解釈し実行することを特徴とするプログラマブルコントローラ。
【請求項２】
請求項１に記載のプログラマブルコントローラにおいて、
前記記憶手段は、前記ユーザファンクションブロック番号をテーブル構造として管理することを特徴とするプログラマブルコントローラ。
【請求項３】
請求項１または２に記載のプログラマブルコントローラにおいて、
前記実行手段は、アプリケーション実行機能、システム管理機能、支援ツールインターフェース機能を具備し、リアルタイムオペレーティングシステムを用いた汎用マイコンにより実現されることを特徴とするプログラマブルコントローラ。
【請求項４】
ユーザファンクションブロックを用いたプログラミング環境をユーザに提供し、作成されたプログラムを管理する管理手段と、
前記プログラムをコンパイルしオブジェクトコードを生成するコンパイル手段と、
前記プログラムの稼動対象とするプログラマブルコントローラに前記オブジェクトコードを送信する送信手段と、を備え、
前記管理手段は、ユーザにより作成されたユーザファンクションブロック及び／又は組み込みソフトウェアのファンクションブロックにそれぞれを一意に特定するユーザファンクションブロック番号を付与し、
前記送信手段は、前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを送信するときには、対応するユーザファンクションブロック番号を送信せず、その後、前記ユーザファンクションブロックのオブジェクトコードを送信するときには、該ユーザファンクションブロックのオブジェクトコードと、該ユーザファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号と、送信済みの前記組み込みソフトウェアのファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号とを送信することを特徴とするプログラマブルコントローラ支援装置。
【請求項５】
プログラマブルコントローラとプログラマブルコントローラ支援装置とを具備するプログラマブルコントローラシステムにおいて、
前記プログラマブルコントローラ支援装置は、
ユーザファンクションブロックを用いたプログラミング環境をユーザに提供し、作成されたプログラムを管理する管理手段と、
前記プログラムをコンパイルしオブジェクトコードを生成するコンパイル手段と、
前記プログラムの稼動対象とするプログラマブルコントローラに前記オブジェクトコードを送信する送信手段と、を備え、
前記管理手段は、ユーザにより作成されたユーザファンクションブロック及び／又は組み込みソフトウェアのファンクションブロックにそれぞれを一意に特定するユーザファンクションブロック番号を付与し、
前記送信手段は、前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを送信するときには、対応するユーザファンクションブロック番号を送信せず、その後、前記ユーザファンクションブロックのオブジェクトコードを送信するときには、該ユーザファンクションブロックのオブジェクトコードと、該ユーザファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号と、送信済みの前記組み込みソフトウェアのファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号とを送信し、
前記プログラマブルコントローラは、
前記ユーザファンクションブロックのオブジェクトコードと、前記組み込みソフトウェアのファンクションブロックのオブジェクトコードと、前記ユーザファンクションブロック番号とを格納する記憶手段と、
専用線、記憶媒体、或いは外部ネットワークを通じプログラマブルコントローラ支援装置との間でデータの交信を行う通信手段と、
前記ユーザファンクションブロックのオブジェクトコード及び／又は前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを解釈し実行する実行手段とを備え、
前記記憶手段は、前記通信手段を通じて前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを受信したときには、該組み込みソフトウェアのファンクションブロックのオブジェクトコードを格納し、その後、前記通信手段を通じて前記ユーザファンクションブロックのオブジェクトコードを受信したときには、該ユーザファンクションブロックのオブジェクトコードと、該ユーザファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号と、格納済みの前記組み込みソフトウェアのファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号とを格納し、
前記実行手段は、前記記憶手段を通じて格納された前記ユーザファンクションブロックのオブジェクトコード及び／又は前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを解釈し実行することを特徴とするプログラマブルコントローラシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラ(以下、ＰＬＣと略す場合もある)のファンクションブロック（以下、ＦＢと略す場合もある）に関し、特にユーザが作成したファンクションブロックのプログラマブルコントローラへのダウンロード方法に関する。
【背景技術】
【０００２】
従来、プログラマブルコントローラはシーケンス命令実行を高速に行わせるための専用ハードウェア（大規模専用ＬＳＩ：Large Scale Integrationなどに代表される）を備えるものが主流であった。これら専用ハードウェアにおいては、各コントローラのメーカーが提供する支援ツールによって、マシンコードを生成する必要があった。
しかし、「専用ハードウェアは高価である」、「専用のマシン語体系をもちシステムプログラム開発が比較的困難である」というデメリットも存在していた。
近年、パーソナルコンピュータ、携帯端末などの普及により、市販の汎用ＣＰＵ（Central Processing Unit）の技術革新が進み、高速実行が可能なＣＰＵを非常に安価に入手することが可能になってきた。そのため、汎用ＣＰＵを用いて専用ＬＳＩをエミュレートして実行しても、充分に所望の実行性能を得る事ができるようになった。
また、汎用であるためファームウェアの開発ツールも市場から調達できるようになってきたため、汎用ＣＰＵを使ったプログラマブルコントローラも作られるようになってきている。
このような汎用ＣＰＵをベースとしたプログラマブルコントローラにおいては、ユーザに提供するアプリケーション開発環境として以下の２つの選択肢が考えられるが、後者の方法が注目されている。
【０００３】
・従来から、プログラマブルコントローラで使用される言語（プログラマブルコントローラにおけるシーケンス命令は、ラダー図、テキスト記述言語などで代表される言語命令により構成されるが、本明細書中では特に断らない限り、プログラマブルコントローラにおける記述言語規格ＩＥＣ６１１３１−３を指すものとする）を従来の支援ツール上でプログラミングし、プログラマブルコントローラにダウンロードした後、実行する方法。
・プログラマブルコントローラに使用されている汎用ＣＰＵに対応した組み込みソフトウェア開発環境で汎用プログラム言語（Ｃ言語、マイコン対応アセンブラなど）を用いてプログラミングし、プログラマブルコントローラにダウンロードした後、実行する方法。
実際、近年では汎用ＣＰＵをベースとしながら従来の専用ＬＳＩを使用したものと全く同じ動作をするプログラマブルコントローラや、逆に従来の支援ツールを使用せずに組み込みソフトウェア開発環境でプログラミングを行うＣ言語コントローラなども発売されている。
このようなＣ言語コントローラにおいては、ユーザのプログラミング負荷を軽減するためにリアルタイム・オペレーティング・システム（以下、リアルタイムＯＳと呼ぶ）が搭載されている。リアルタイムＯＳでは、タスクと呼ばれる処理単位を複数並列に実行可能であり、タスク間の通信機能、タスクの生成及び起動などの実効制御の機能を備えている。タスクの時間管理をリアルタイムＯＳが行うので、ユーザはプログラミングする際にスケジューリングの負荷から開放される利点があげられる。
【０００４】
一方、汎用ＣＰＵを使用した従来型のプログラマブルコントローラにおいても、システムの管理や支援ツールとのインターフェースなど、システムファームウェアの部分はリアルタイムＯＳをベースとする組み込みソフトウェアとして構成されるのが一般的となっている。
いずれにせよ、プログラマブルコントローラとプログラマブルコントローラ支援装置からなるプログラマブルコントローラシステムとして効率の良いプログラミング環境（特に組み込みプログラムの扱い方）を提供するのが命題になっている。
コントローラと支援ツールとにおけるプログラムの組み込みに関する技術としては、例えば特許文献１に記載されている。ここでは、支援ツールにおいてタスク型プロジェクトならばコントローラのタスクとして動作させ、関数型プロジェクトならば他のタスクより関数としてコール可能な状態で保持する方法が示されている。
また、特許文献２には、ユーザが作成したソフト資産の必要な部分のみをプログラマブルコントローラのファンクションブロック化し利用する方法が示されている。
【特許文献１】特開２００６−１７８８１８号公報
【特許文献２】特開２００１−５１７０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
プログラマブルコントローラで使用される専用プログラミング言語は、シーケンス制御を記述するシーケンス図を効率よくプログラミングが可能であり、プログラマブルコントローラの使用現場における保守の容易性等の観点からも今後も需要がある言語である。
そこで、プログラマブルコントローラには汎用ＣＰＵを使用し、支援ツールでプログラミングした組み込みソフトウェアを用いる方法が主流となってきている。しかしながら、汎用ＣＰＵを使用したプログラマブルコントローラにおいては、以下のような問題点があった。
・実行コードが専用ＬＳＩのエミュレータ動作であるため、同じ動作のＣ言語アプリケーションなどと比べてコード効率が悪い。
・ラダー図等はシーケンス動作を記述するための言語であるため、数値演算やデータ処理などの記述が煩雑で難しい。
これらの問題点は、処理内容に応じて、プログラミング環境を使い分ける事により解決される。即ち、通常のシークエンス処理は従来の支援ツールでプログラミングし、複雑な処理や高速化したい処理に関しては組み込みアプリケーションとして組み込みソフトウェア開発環境でプログラミングを実施する。
【０００６】
ところで、プログラマブルコントローラのアプリケーションは、プログラマブルコントローラを効率よく扱うために、制御ネットワークに接続されている外部接続機器（例えば、入出力モジュール）をメモリとして扱うなど、プログラマブルコントローラシステム固有のメモリアドレス体系を保持している。そのため、メモリ管理においては、汎用ＣＰＵの物理アドレスに直接依存していない。また、プログラマブルコントローラのアプリケーションの実行時には、プログラマブルコントローラのタスクとして登録されており、これらは定周期やイベントなどの指定されたタイミングで起動されるが、プログラマブルコントローラのアプリケーション作成者は、それらのアプリケーションのタスクとシステムソフトを動かしているリアルタイムＯＳとの動作の関連を意識することが出来ない。
このことに起因し、以下の問題点が挙げられる。
・サブルーチンのような複数箇所から呼び出される組み込みソフトウェアの記述が出来ない（例えば、データ交換領域としてプログラマブルコントローラのアプリケーションメモリの固定番地を組み込みソフトウェア中で明示的に記述しようとすると、データ交換領域アドレスをそれぞれ個別に用意しなければならず、同じ処理にもかかわらず、別のプログラムになってしまう）。
【０００７】
・プログラマブルコントローラのアプリケーションと組み込みソフトウェアが非同期に動作するので、プログラマブルコントローラのアプリケーションからは、組み込みソフトウェアの処理や起動、完了のタイミングを把握出来ない。
このように、組み込みソフトウェアとプログラマブルコントローラのアプリケーションにおける「データ交換方法、及び起動方法」が問題になる。
特許文献１に記載のコントローラでは、ラダー言語内からＣ言語プログラムを呼び出す方法のみを記述しているが、コントローラのアプリケーションとＣ言語プログラム間とにおける具体的なデータ交換に関して実現手段が示されていない。
また、特許文献２に記載のプログラマブルコントローラでは、オブジェクト指向プログラミング言語により記述された部品であるクラスをライブラリとして登録し、これらを元にインスタンスを生成すること、及びインスタンス生成情報の管理について記述されているが、部品をライブラリとして登録する具体的な方法が示されていない（ラダープログラムへの記述方法のみ示されている）。
以上に示すように、組み込みソフトウェアとプログラマブルコントローラのアプリケーションとにおける「データ交換方法、及び起動方法」が問題になるが、従来の技術においては組み込みソフトウェアの起動方法に関しては一定の言及はあっても、データ交換方法が具体的に示されていないと言う未解決の課題がある。
【０００８】
本発明は、組み込みソフトウェアとプログラマブルコントローラのアプリケーションにおける「データ交換方法、及び起動方法」を充足するプログラマブルコントローラ、プログラマブルコントローラ支援装置、及びプログラマブルコントローラシステムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記の課題を解決する手段として、本発明は以下のように構成する。
第１に、本発明のプログラマブルコントローラは、ユーザにより作成されたユーザファンクションブロックのオブジェクトコードと、ユーザにより作成された組み込みソフトウェアのファンクションブロックのオブジェクトコードとを、これらに付与されそれぞれを一意に特定するユーザファンクションブロック番号により管理するプログラマブルコントローラにおいて、前記ユーザファンクションブロックのオブジェクトコードと、前記組み込みソフトウェアのファンクションブロックのオブジェクトコードと、前記ユーザファンクションブロック番号とを格納する記憶手段と、専用線、記憶媒体、或いは外部ネットワークを通じプログラマブルコントローラ支援装置との間でデータの交信を行う通信手段と、前記ユーザファンクションブロックのオブジェクトコード及び／又は前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを解釈し実行する実行手段とを備え、前記記憶手段は、前記通信手段を通じて前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを受信したときには、該組み込みソフトウェアのファンクションブロックのオブジェクトコードを格納し、その後、前記通信手段を通じて前記ユーザファンクションブロックのオブジェクトコードを受信したときには、該ユーザファンクションブロックのオブジェクトコードと、該ユーザファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号と、格納済みの前記組み込みソフトウェアのファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号とを格納し、前記実行手段は、前記記憶手段を通じて格納された前記ユーザファンクションブロックのオブジェクトコード及び／又は前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを解釈し実行するように構成する。
【００１０】
第２に、前記プログラマブルコントローラにおいて、前記記憶手段は、前記ユーザファンクションブロック番号をテーブル構造として管理するように構成する。
第３に、前記プログラマブルコントローラにおいて、前記実行手段は、アプリケーション実行機能、システム管理機能、支援ツールインターフェース機能を具備し、リアルタイムオペレーティングシステムを用いた汎用マイコンを備えるように構成する。
第４に、本発明のプログラマブルコントローラ支援装置は、ユーザファンクションブロックを用いたプログラミング環境をユーザに提供し、作成されたプログラムを管理する管理手段と、前記プログラムをコンパイルしオブジェクトコードを生成するコンパイル手段と、前記プログラムの稼動対象とするプログラマブルコントローラに前記オブジェクトコードを送信する送信手段とを備え、前記管理手段は、ユーザにより作成されたユーザファンクションブロック及び／又は組み込みソフトウェアのファンクションブロックにそれぞれを一意に特定するユーザファンクションブロック番号を付与し、前記送信手段は、前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを送信するときには、対応するユーザファンクションブロック番号を送信せず、その後、前記ユーザファンクションブロックのオブジェクトコードを送信するときには、該ユーザファンクションブロックのオブジェクトコードと、該ユーザファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号と、送信済みの前記組み込みソフトウェアのファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号とを送信するように構成する。
【００１１】
第５に、本発明のプログラマブルコントローラシステムは、プログラマブルコントローラとプログラマブルコントローラ支援装置とを具備し、前記プログラマブルコントローラ支援装置は、ユーザファンクションブロックを用いたプログラミング環境をユーザに提供し、作成されたプログラムを管理する管理手段と、前記プログラムをコンパイルしオブジェクトコードを生成するコンパイル手段と、前記プログラムの稼動対象とするプログラマブルコントローラに前記オブジェクトコードを送信する送信手段と、を備え、前記管理手段は、ユーザにより作成されたユーザファンクションブロック及び／又は組み込みソフトウェアのファンクションブロックにそれぞれを一意に特定するユーザファンクションブロック番号を付与し、前記送信手段は、前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを送信するときには、対応するユーザファンクションブロック番号を送信せず、その後、前記ユーザファンクションブロックのオブジェクトコードを送信するときには、該ユーザファンクションブロックのオブジェクトコードと、該ユーザファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号と、送信済みの前記組み込みソフトウェアのファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号とを送信し、前記プログラマブルコントローラは、前記ユーザファンクションブロックのオブジェクトコードと、前記組み込みソフトウェアのファンクションブロックのオブジェクトコードと、前記ユーザファンクションブロック番号とを格納する記憶手段と、専用線、記憶媒体、或いは外部ネットワークを通じプログラマブルコントローラ支援装置との間でデータの交信を行う通信手段と、前記ユーザファンクションブロックのオブジェクトコード及び／又は前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを解釈し実行する実行手段とを備え、前記記憶手段は、前記通信手段を通じて前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを受信したときには、該組み込みソフトウェアのファンクションブロックのオブジェクトコードを格納し、その後、前記通信手段を通じて前記ユーザファンクションブロックのオブジェクトコードを受信したときには、該ユーザファンクションブロックのオブジェクトコードと、該ユーザファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号と、格納済みの前記組み込みソフトウェアのファンクションブロックのオブジェクトコードに対応する前記ユーザファンクションブロック番号とを格納し、前記実行手段は、前記記憶手段を通じて格納された前記ユーザファンクションブロックのオブジェクトコード及び／又は前記組み込みソフトウェアのファンクションブロックのオブジェクトコードを解釈し実行するように構成する。
【発明の効果】
【００１２】
本発明により、ユーザが作成した組み込みソフトウェアをプログラマブルコントローラのアプリケーションから呼び出し可能になるので、組み込みソフトウェアやプログラマブルコントローラのアプリケーションそれぞれに適したプログラミング環境をユーザ自身で選択可能になり、実行プログラムの処理速度の向上及びユーザコーディング効率の向上という効果を奏する。また、実行プログラムにおいては、組み込みソフトウェアの起動タイミングが明確化され、データの入力・出力の同期がとられるので、データ交換の安全性が高まるという効果もある。
さらに、組み込みソフトウェアを作成できないプログラマブルコントローラのユーザでも、作成可能な環境から予めプログラマブルコントローラにダウンロードしておくことにより、ユーザファンクションブロックを呼び出すためのコードを記述するだけで組み込みソフトウェアの該当プログラムを利用できるという利点もある。
【発明を実施するための最良の形態】
【００１３】
以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。
始めに、図１〜３を用い基本構成について説明する。次に、図４〜９を用いプログラマブルコントローラで使用するファンクションブロックの詳細について説明する。また、図１０〜１２を用い組み込みソフトウェアのファンクションブロック作製方法について説明する。最後に、図１３〜１５を用いダウンロード方法について説明する。
図１は、本発明で用いられるプログラマブルコントローラシステムの構成の一例を説明したものである。パソコン１１は一般的なパソコンであり、このパソコン１１にはプログラマブルコントローラを支援する図示しない支援ツールが格納されている。パソコン１１と支援対象のプログラマブルコントローラ１２は、ケーブル１６で接続されている。また、プログラマブルコントローラ１２〜１４と制御対象となる入出力モジュール１５は、制御用ネットワーク１７で接続されている。制御用ネットワーク１７の一例としては、出願人の製品であるMICREX-SXシリーズで使用しているSXバスなどがある。
パソコン１１において、ファンクションブロック等を用いてプログラミングを行い、コンパイル後に実行ファイルをプログラマブルコントローラ１２にケーブル１６等を介してダウンロードする（このため、パソコン１１はローダと呼ばれることもある）。
【００１４】
なお、ここではプログラマブルコントローラシステムの一例として、一台のパソコン１１と複数のプログラマブルコントローラ１２〜１４、及び複数の入出力モジュール１５とによる構成を示しているが、これは発明を限定するものではなく、それぞれ任意の台数によって構成されていても構わない。パソコン１１の支援対象はプログラマブルコントローラ１２〜１４のいずれか1つ／全てであっても構わない。
また、パソコン１１と支援対象のプログラマブルコントローラ１２〜１４とは、ケーブル１６によって接続されているが、これに限ったものではなく、無線ＬＡＮであっても良いし、任意の媒体を介して情報を遣り取りしても構わない。
図２は、本発明で用いられるプログラマブルコントローラのハード構成を説明したものである。プログラマブルコントローラ２０は、システムプログラム及び／又はユーザプログラムを実行するＣＰＵ２２を有し、ＣＰＵ２２は内部バス２７を介してプログラム、命令、各種データ等を遣り取りする。ここで、システムプログラム及び／又はユーザプログラムを電源断時も保存しておくために、不揮発性の書き換えメモリとしてフラッシュメモリ２４を有する。一般に、フラッシュメモリはＳＲＡＭ等に比べ動作が低速である為、プログラムの保存に適していても、実行には向かない。そこで、フラッシュメモリ２４からシステムプログラム及び／又はユーザプログラムを展開・実行するＳＲＡＭとして、プログラムメモリ２５を有する。また、システムプログラム及び／又はユーザプログラムがリード／ライトする情報を管理・保存するメモリ領域（ＳＲＡＭ）として、データメモリ２６も有する。
【００１５】
一方でプログラマブルコントローラ２０には、大別して外部機器との通信機能を２つ有する。１つは、後述のプログラマブルコントローラ支援装置３０からユーザの指示やプログラミング、実行ファイル等をＣＰＵ２２と遣り取りするインターフェース機能であるドライバ／レシーバ２１である。もう１つは入出力モジュール等の制御対象機器との通信を行う際に、専用線であるバスの調停等を行うバスコントローラ２３である。
なお、フラッシュメモリ２４、プログラムメモリ２５、データメモリ２６は、データ保存／管理の面や実行性の側面から複数のユニットに分けているが、十分な容量や速度性能および電源断時のデータ保証が可能なときは、例えば１つのメモリであっても構わない。
図３は、本発明で用いられるプログラマブルコントローラ支援装置のハード構成を説明したものである。プログラマブルコントローラ支援装置３０は、ユーザが所望の制御プログラムを作成する為に入力を行う入力デバイス３３と、この入力内容等を表示する表示デバイス３４、所定のプログラムを記憶するための記憶装置３５、接続線や外部ネットワーク等を介し対象のプログラマブルコントローラと通信する通信Ｉ／Ｆ３２等を有する。ＣＰＵ３１は、内部バス３６を介し、入力デバイス３３より作成されたプログラムを必要に応じて記憶装置３５に記憶し、また図示しない支援ツールのコンパイル機能により実行ファイルを作成し、これを通信Ｉ／Ｆ３２を介して対象のプログラマブルコントローラに送信（ダウンロード）する。また、必要に応じて、後述のファンクションブロック番号も送信する。
【００１６】
ユーザは、プログラマブルコントローラ支援装置３０における支援ツールを用いてプログラミングを行うことになるが、この際にファンクションブロックを使用することが多い。なお、記述言語規格ＩＥＣ６１１３１−３に規定されているファンクションブロックでは、処理コードと処理を行う際に使用するデータ（インスタンス）とが一体になった処理構造になっている。
図４は、ファンクションブロックの入出力概略の一例を説明したものである。図４（ａ）の例では、矩形部分で表示したファンクションブロック本体４０に対し、左側に入力端子４１、右側に出力端子４２が配置されている。ここでは、ファンクションブロック本体４０の上部中央に記載のＣＴＵがファンクションブロック名称を、ＣＵ、Ｒ、ＰＶ、Ｑ、ＣＶは端子名称を表している。また、入力端子４１、出力端子４２に記載の情報（ＢＯＯＬ、ＩＮＴ）は端子のデータ型を表している。
同様に、図４（ｂ）の例では、矩形部分で表示したファンクションブロック本体４３に対し、左側に入力端子４４、右側に出力端子４５が配置されている。ここでは、ファンクションブロック本体４３の上部中央に記載のＵＦＢがファンクションブロック名称を、ＩＮ１、ＩＮ２、ＯＵＴ１、ＯＵＴ２は端子名称を表している。入力端子４４、出力端子４５に記載の情報（ＩＮＴ）は端子のデータ型を表している。
【００１７】
図５は、ファンクションブロックのインスタンスの構成の一例を説明したものである。図５（ａ）における最小の矩形は、ビット量を表す。ＣＵ、Ｒ、Ｑが１つの矩形から構成されているのは、データ型がＢＯＯＬ（図４（ａ）参照）であることを表し、ＰＶ、ＣＶが１６個分の矩形から構成されているのは、データ型がＩＮＴ（図４（ａ）参照）であることを表す。また、図５（ａ）における斜線の箇所は未使用領域であることを表す。同様に、図５（ｂ）のＩＮ１、ＩＮ２、ＯＵＴ１、ＯＵＴ２は、１６個分の矩形から構成されており、データ型がＩＮＴ（図４（ｂ）参照）であることを表す。
なお、ここでは模式的な表示としているが、実際には連続した領域として、これらの単位でプログラマブルコントローラのデータメモリ２６のアドレスが割り付けられ、インスタンス領域として管理される。図２において、実行時のファンクションブロックのプログラムコードはプログラムメモリ２５に、インスタンスの情報はデータメモリ２６に配置される。これらの情報を連携して実行することによりファンクションブロックは機能する。
ところで、ファンクションブロックは、その性質から大きく分けると２つに分類される。ここではこれらをそれぞれ、ユーザファンクションブロック（以降、ユーザＦＢと略す）とシステムファンクションブロック（以降、システムＦＢと略す）と呼ぶ。
【００１８】
ユーザＦＢは、ユーザがファンクションブロックの中身（処理自体）も含めてプログラミングするもので、プログラマブルコントローラ支援装置でユーザＦＢ自体もコンパイルされた後、プログラマブルコントローラにダウンロードされる。
一方でシステムＦＢは、プログラマブルコントローラのメーカが提供するファンクションブロックである。その為、予めその機能がプログラマブルコントローラ本体のシステムプログラムに含まれており、ユーザはプログラマブルコントローラのアプリケーション内でそのシステムＦＢを呼び出すコードを記述するだけで、その機能を使用する事ができる。
また、システムＦＢではプログラマブルコントローラで使用されるマイコンや専用ＬＳＩに最適な設計がメーカによりなされているが、ユーザはこれらのシステムＦＢに手を加えることは出来ず、参照することのみ許されているのが一般的である。
なお、組み込みソフトウェアによるファンクションブロックはユーザＦＢとなる。
図６は、ユーザＦＢをプログラマブルコントローラのアプリケーションから呼び出した場合のプログラムの一例を説明したものである。ここでは、ＰＧ０というプログラムから図４（ｂ）のファンクションブロックＵＦＢを呼び出している。インスタンス６０は、ＰＧ０においてＵＦＢのインスタンスであることを表している。同一のファンクションブロックでも、インスタント名が異なれば処理も異なる。このため、インスタント名ごとに対応する対象データ領域を有し、ここではインスタンス名としてＵＦＢ_１となっている。
【００１９】
変数６１はＰＧ０内で定義されるが、インスタンス６０の入力値として受け渡す。同様に、変数６２はＰＧ０内で定義されるが、インスタンス６０の実行結果である出力値を受け渡される。
図７は、ＰＧ０の擬似的なプログラムコードを説明したものである。コード７１、７６はプログラムの開始、終了を示すタグであり、実質上、無処理のコードになる。コード７２は図６の変数６１と対応している。コード上では、Ａ、ＵＦＢ_１．ＩＮ１のような表記となっているが、実際にはこれらの変数（或いはインスタンス領域）には、プログラマブルコントローラのデータメモリのアドレスが割り付けられている。ここで、ＵＦＢ_１はインスタンス領域の先頭アドレス、ＵＦＢ_１．ＩＮ１はその構成要素である変数ＩＮ１のアドレスが割り付けられている。ＵＦＢ_１．ＩＮ２についても同様である。ここでは、Ａ、Ｂ入力値として、ＵＦＢ_１はインスタンス領域のＵＦＢ_１．ＩＮ１、ＵＦＢ_１．ＩＮ２に格納する。コード７３はＰＵＳＨ命令であり、インスタンス領域のアドレスをスタック等に保存しておく命令である。コード７４はＣＡＬ命令であり、ファンクションブロックＵＦＢのプログラムコードを呼び出す（実際のコードでは、ＵＦＢと対応するファンクションブロック番号がセットされており、このファンクションブロック番号はプログラマブルコントローラとプログラマブルコントローラ支援装置とにおいて整合が取れている）。コード７５は、図６の変数６２と対応している。コード７４で呼び出されたファンクションブロックＵＦＢの処理の終了後に、実行結果を出力値として、ＵＦＢ_１はインスタンス領域のＵＦＢ_１．ＯＵＴ１、ＵＦＢ_１．ＯＵＴ２から値を取り出し、Ｃ、Ｄに格納する。
【００２０】
図８は、ユーザＦＢテーブルの一例を説明したもである。プログラムメモリ上に、ユーザＦＢのオブジェクトコードがｎ個格納されている。各ユーザＦＢのオブジェクトコードには、これらを一意に特定するユーザＦＢ番号が割り振られている。これはプログラマブルコントローラ側で、ユーザＦＢ番号で指定されたユーザＦＢを速やかに呼び出せるようにするものである。ここでは、これらのユーザＦＢ番号を管理する方法としてユーザＦＢテーブルを用いる。
ユーザＦＢテーブルは、ユーザＦＢ番号及びユーザＦＢのオブジェクトコードの格納先アドレスの一覧で構成される。図８の例では、ユーザＦＢテーブルはデータメモリに格納されており、各矢印はユーザＦＢテーブルの各ユーザＦＢ番号を指定すればプログラムメモリ内の各オブジェクトコードの開始アドレスを特定できることを示している。
なお、アドレスの指定方法は、オブジェクトコードの格納先の開始番地を用いるのが一般的であるが、開始番地・終了番地・オブジェクトコードを格納するアドレス長を指定しても構わない。アドレスの情報は、プログラムメモリ内のアドレスを絶対番地として登録しても構わないし、相対アドレスであっても構わない。
また、ユーザＦＢテーブルの構成自体を構造的にして、例えばユーザＦＢテーブルの頭から４バイト目にはユーザＦＢ番号１のアドレスを、８バイト目にはユーザＦＢ番号２のアドレス、・・・、４ｎバイト目にはユーザＦＢ番号ｎのアドレスを格納し、単なるアドレスの羅列で構成しても構わない。
【００２１】
ここでは、一例として、ユーザＦＢがｎ個あるものとして、実際にｎ個格納されているものを想定しているが、管理するユーザＦＢの個数はデータメモリやプログラムメモリ等の容量が許容すればｎ個に固定せずとも構わなく、未使用な番号があっても良いし、ユーザＦＢが連番である必要は無い。但し、実際に実行するユーザＦＢに関して用意するのがメモリ資源やレンスポンスの面から好ましい。
いずれにせよ、ユーザＦＢ番号が分かれば、実行すべきプログラムメモリ内のユーザＦＢのオブジェクトコードのアドレスも一意に決まる。
図９は、プログラマブルコントローラ側におけるユーザＦＢの処理の一例を概略フローチャートで説明したものである。ここではプログラマブルコントローラのアプリケーションの処理の１つとして、ＰＧ０（図６参照）が実行されたとき、ＰＧ０におけるユーザＦＢ（ＵＦＢ）がどのように処理されるかについて、その概略を示す。
ＰＧ０の実行中において、プログラマブルコントローラに予め実装されているＣＡＬ処理が呼び出される（ステップＳ９１）。また、ステップＳ９１の前処理として、ユーザＦＢ（ＵＦＢ）のインスタンス（ＵＦＢ＿１）のアドレスはデータメモリ上にスタックされ、インスタント領域に格納されている。ＣＡＬ処理では、始めにユーザＦＢ（ＵＦＢ）処理後の戻りアドレスを保存する（ステップＳ９２）。その上で、スタックに格納されているインスタンス領域のアドレスを取り出し（ステップＳ９３）、呼び出そうとしているユーザＦＢ（ＵＦＢ）のユーザＦＢ番号をユーザＦＢテーブル（図８参照）から検索し、アドレス情報を取り出す（ステップＳ９４）。インスタンス領域のアドレスをパラメータにセットしてユーザＦＢ（ＵＦＢ）の処理にジャンプする（ステップＳ９５）。ユーザＦＢ（ＵＦＢ）の処理終了後、ステップＳ９２で保存しておいた戻りアドレスにジャンプした後、ＰＧ０の処理を継続する。
【００２２】
ここまでは、本発明の構成と基本的な処理について説明した。以降は、組み込みソフトウェアにおけるユーザＦＢ（以降、組み込みソフトウェアＦＢと呼ぶ）の作成方法（図１０〜図１２参照）や、ユーザＦＢのＰＬＣへの展開処理（図１３〜図１５）に関する具体的な所作について説明する。
図１０は、作成対象のＰＯＵ（Program Organization Unit）を選択する画面を説明したものであり、この画面は図３のプログラマブルコントローラ支援装置３０における図示しない支援ツールにおけるユーザインターフェースの一例である。
このメニュー画面では、従来のプログラム、ファンクションブロック、ファンクションに加えて、組み込みソフトウェアＦＢの作成を支援することを示している。
図１１は、組み込みソフトウェアＦＢの編集画面の一例を説明したものである。ここでは、ファンクションブロックの名称と、各変数の変数名、データ型、種類を入力する。ファンクションブロック名称は、入力規則に制限は無いが、既に登録済みの名称と重複しないようにする。変数名も入力規則に制限は無いが、同一ファンクションブロック内で重複しないようにする。データ型は、変数の型であるＩＮＴ型、ＢＯＯＬ型等を指定可能で、ファンクションブロックのインスタンスの構成（図５参照）にも反映される。種類は、ＩＮＰＵＴ、ＯＵＴＰＵＴのいずれかであり、変数がファンクションブロックの入力側、出力側のいずれかであるかを指定することになる。
【００２３】
図１２は、組み込みソフトウェアＦＢの雛形の一例を説明したものである。図１１で設定した変数を用い、Ｃ言語を用いた組み込みソフトウェアの雛形を作成する例を示す。コード１２１は、構造体の記述方式であり、ファンクションブロックにおいてはインスタンスに相当する。コード１２２は、構造体からの変数受け渡しと、実際の処理を記入する箇所であり、特に、／＊  以下に処理を記入する  ＊／の箇所以降に演算式や制御内容をユーザがＣ言語で記載する。なお、ここでは説明の関係で図１１で変数等の情報を入力してから図１２で雛形を作成する例を示したが、図１１の情報より、コード１２１やコード１２２の変数などの該当部分を自動的に反映しても構わないし、コード１２１、１２２をユーザが直接入力しても構わない。作成したコードを、組み込みソフトウェアの開発環境にてコンパイルし、オブジェクトファイル（組み込みソフトウェアＦＢのオブジェクトコード）を生成する。
図１３は、組み込みソフトウェアＦＢのダウンロード方法を説明したものであり、図１４は、図１３におけるダウンロード後のファイル展開処理をフローチャートで説明したものである。
図１３における矢印は、プログラマブルコントローラ支援装置からプログラマブルコントローラにダウンロードされるファイルを示している。なお、プログラマブルコントローラからプログラマブルコントローラ支援装置へのレスポンスについては省略し、特に図示しない。
【００２４】
始めに、組み込みソフトェアの作成機能のあるプログラマブルコントローラ支援装置にて、ユーザは組み込みソフトウェアＦＢを作成する。その後、コンパイル処理１３６により組み込みソフトェアＦＢのオブジェクトコード１３４が生成される。生成された組み込みソフトェアＦＢのオブジェクトコード１３４を、動作対象のプログラマブルコントローラに送信する。
次に、組み込みソフトェアの作成機能の無いプログラマブルコントローラ支援装置にて、ユーザは組み込みソフトェアＦＢを利用したプログラムを作成する。その後、コンパイル処理１３５によりプロジェクトファイル１３０が生成される。このプロジェクトファイル１３０をプログラマブルコントローラに送信する。ここで、プロジェクトファイル１３０とは、ユーザの作成したプログラムを一つのアプリケーションとして管理する単位で、ＰＬＣ定義ファイル群１３１、ＰＬＣ  ＰＯＵ群１３２、組み込みソフトウェアのユーザＦＢ番号１３３から構成される。
ＰＬＣ定義ファイル群１３１とは、ＰＬＣのシステムの動作を設定した一連の情報で、例えばＰＬＣに接続されている機器の構成情報や、その制御信号の種類等の情報を含んでいる。
【００２５】
ＰＬＣ  ＰＯＵ群１３２とは、ユーザの作成したプログラムを構成する要素全てで、ファンクションやファンクションブロックなどの実行コード等から構成される。ＰＬＣ  ＰＯＵ群１３２には、ユーザＦＢのユーザＦＢ番号も含まれる。
組み込みソフトウェアのユーザＦＢ番号１３３は、コンパイル１３６のより生成された組み込みソフトウェアＦＢのオブジェクトコード１３４のユーザＦＢ番号であり、ＰＬＣ  ＰＯＵ群１３２における各ユーザＦＢのユーザＦＢ番号とは重ならない番号としてユニークな設定となっている。
ところで、ユーザＦＢ番号はユーザＦＢコードに対して固定的には定まらない。これは、コンパイルにおいては最適化等も行われ、また、ユーザＦＢが追加・削除などされる等の要因による。そこで、ユーザＦＢは同じでも、プロジェクトファイル１３０をコンパイルするごとに異なったユーザＦＢ番号体系を生成することもある。即ちユーザＦＢ自体を修正していなくても、デバッグを実施しコンパイルするごとにダウンロードする必要が生じる。これは、組み込みソフトェアのユーザＦＢ番号においても同様である。
なお、図面の矢印ではＰＬＣ定義ファイル群１３１、ＰＬＣ  ＰＯＵ群１３２、組み込みソフトウェアのユーザＦＢ番号１３３の順にダウンロードされているように描画したが、実際にはプロジェクトファイル１３０のアーカイブとして送信後にプログラマブルコントローラ内で展開しても構わなく、プロジェクトファイル１３０内でのダウンロードの順番に制限は無い。また、ここでは説明の為、プログラマブルコントローラ支援装置を複数の例を示したが、同手順を一台のプログラマブルコントローラ支援装置で実行しても構わない。
【００２６】
次にダウンロード後のファイルの展開処理について説明する。後述の図１５で示すように、プログラマブルコントローラにダウンロードされた組み込みソフトウェアＦＢのオブジェクトコード１３４はプログラムメモリの任意の固定番地に展開される（ステップＳ１４１）。次にダウンロードされたＰＬＣ定義ファイル群１３３より、ＰＬＣの動作に必要なＰＬＣシステム定義を構築する（ステップＳ１４２）。同じくダウンロードされたＰＬＣ  ＰＯＵ群１３４がプログラムメモリに展開済みが確認する（ステップＳ１４３）。展開されていない場合、オブジェクトコードをプログラムメモリにコピーし（ステップＳ１４４）、コピーしたオブジェクトコードに対応するユーザＦＢ番号をユーザＦＢテーブルに反映する（ステップＳ１４５）。全てのＰＯＵが展開された後、組み込みソフトウェアのユーザＦＢ番号１３５をユーザＦＢテーブルに反映する（ステップＳ１４６）。
図１５は、組み込みソフトウェアＦＢのダウンロード及び展開の概略を説明したものである。例えば、組み込みソフトウェアＦＢのオブジェクトコードはプログラムメモリの２００番地に展開された後、組み込みソフトウェアのユーザＦＢ番号として“ｍ”がダウンロードされた場合、ユーザＦＢテーブル１５０のｍ番目として“２００番地”が登録される。他のユーザＦＢに関しても同様に、ユーザＦＢテーブル１５０の１番目として“１０番地”、ユーザＦＢテーブル１５０のｎ番目として“９００番地”が登録（更新）される。
【００２７】
以上のように構成する事により、ユーザファンクションブロックの呼び出すためのコードを記述するだけでユーザが作成した組み込みソフトウェアをプログラマブルコントローラのアプリケーションから呼び出し可能になる。なお、ここではよく使われる組み込みソフトェアの例としてユーザＦＢについて説明したが、ユーザファンクションやユーザプログラム等のＰＯＵについても同様なテーブル管理により実現可能である。また、ダウンロードの際に、オブジェクトコード以外のコードとして、ソースコードや中間コード等の情報をプログラマブルコントローラのメモリに展開しても構わない。
【図面の簡単な説明】
【００２８】
【図１】本発明におけるプログラマブルコントローラシステムの構成の一例を示す説明図
【図２】本発明におけるプログラマブルコントローラのハード構成を示す説明図
【図３】本発明におけるプログラマブルコントローラ支援装置の概略ハード構成を示す説明図
【図４】ファンクションブロックの入出力概略の一例示す説明図
【図５】ファンクションブロックのインスタンスの構成の一例を示す説明図
【図６】ユーザＦＢを呼び出したプログラムの一例を示す説明図
【図７】図６で示すプログラム（ＰＧ０）の擬似的なプログラムコードを示す説明図
【図８】ユーザＦＢテーブルの一例を示す説明図
【図９】ユーザＦＢの処理の一例を示す概略フローチャート
【図１０】支援ツールのＰＯＵ選択画面を示す説明図
【図１１】組み込みソフトウェアＦＢの編集画面の一例を示した説明図
【図１２】組み込みソフトウェアＦＢの雛形の一例を示した説明図
【図１３】組み込みスフトウェアＦＢのダウンロード方法を示した説明図
【図１４】図１３におけるダウンロード後のファイル展開処理のフローチャート
【図１５】組み込みソフトウェアＦＢのダウンロード及び展開の概略を示した説明図
【符号の説明】
【００２９】
１１…パソコン
１２、１３、１４、２０…プログラマブルコントローラ
１５…入出力モジュール
１６…ケーブル
１７…制御用ネットワーク
２１…ドライバ／レシーバ
２２…ＣＰＵ
２３…バスコントローラ
２４…フラッシュメモリ
２５…プログラムメモリ
２６…データメモリ
２７…内部バス
３０…プログラマブルコントローラ支援装置
３１…ＣＰＵ
３２…通信Ｉ／Ｆ
３３…入力デバイス
３４…表示デバイス
３５…記憶装置
３６…内部バス
４０、４３…ファンクションブロック本体
４１、４４…入力端子
４２、４５…出力端子
６０…インスタンス
６１、６２…変数
７１、７２、７３、７４、７５、７６、１２１、１２２…コード
１３０…プロジェクトファイル
１３１…ＰＬＣ定義ファイル群
１３２…ＰＬＣ  ＰＯＵ群
１３３…組み込みソフトウェアＦＢのユーザＦＢ番号
１３４…組み込みソフトウェアＦＢのオブジェクトコード
１５０…ユーザＦＢテーブル
【図１】
0004877257.tif 000002
【図２】
0004877257.tif 000003
【図３】
0004877257.tif 000004
【図４】
0004877257.tif 000005
【図５】
0004877257.tif 000006
【図６】
0004877257.tif 000007
【図７】
0004877257.tif 000008
【図８】
0004877257.tif 000009
【図９】
0004877257.tif 000010
【図１０】
0004877257.tif 000011
【図１１】
0004877257.tif 000012
【図１２】
0004877257.tif 000013
【図１３】
0004877257.tif 000014
【図１４】
0004877257.tif 000015
【図１５】
0004877257.tif 000016