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