(57)【特許請求の範囲】
【請求項１】
プログラム及び当該プログラムから呼び出されるファンクションブロックの実行タイミングを個別に設定し、
この設定に応じて前記ファンクションブロック及びその呼び出し元のプログラムを対応するタスクに割り付け、前記ファンクションブロック及びその呼び出し元のプログラムを、割り付けられたタスクで実行するようにしたプログラムの実行方式であって、
前記プログラムからの出力データを保持する保持手段を設け、
前記プログラムは、当該プログラムに割り付けられたタスクの実行タイミングで、前記ファンクションブロックへの出力データを前記保持手段に格納すると共に、当該保持手段に新たにデータが格納されたことを表すフラグを設定し、
前記ファンクションブロックは、当該ファンクションブロックに割り付けられたタスクの実行タイミングで前記フラグを参照し、当該フラグに基づき前記保持手段に新たにデータが格納されたことを検出したときにのみ前記保持手段から出力データを入力して前記フラグをリセットし、前記出力データをもとに所定の処理を実行することを特徴とするプログラムの実行方式。
【請求項２】
プログラムの実行タイミングを設定するタイミング設定手段と、
前記プログラムから読み出される機能ブロックの実行タイミングを、前記プログラムとは異なる実行タイミングに設定するブロックタイミング設定手段と、
前記プログラムを、前記タイミング設定手段で設定された実行タイミングに対応するタスクに割り付けると共に前記プログラムを実行する処理装置で実行可能な機械語プログラムに変換し、且つ、前記プログラムが呼び出す機能ブロックが、その呼び出し元のプログラムとは別の実行タイミングに設定された別実行ブロックである場合には、前記プログラムを前記タイミング設定手段で設定された実行タイミングに対応するタスクに割り付けると共に、前記別実行ブロックを前記ブロックタイミング設定手段で設定された実行タイミングに対応するタスクに割り付ける変換手段と、を備えたプログラム開発支援装置において、
前記別実行ブロックへのその呼び出し元のプログラムからの出力データを保持する保持手段と、
前記保持手段に新たにデータが格納されたことを表すフラグと、を備え、
前記変換手段は、前記別実行ブロックとその呼び出し元のプログラムとの間のデータ授受状況に基づき、前記プログラムに割り付けられたタスクの実行タイミングで、前記別実行ブロックへのその呼び出し元のプログラムからの出力データを前記保持手段に格納し、且つ前記別実行ブロックは、当該ファンクションブロックに割り付けられたタスクのタイミングで前記フラグを参照し、当該フラグに基づき前記保持手段に新たにデータが格納されたことを検出したときにのみ前記保持手段から出力データを入力して前記フラグをリセットし、前記出力データをもとに所定の処理を実行するように前記機械語プログラムへの変換を行うことを特徴とするプログラム開発支援装置。
【請求項３】
前記プログラムは、前記機能ブロックを用いた回路図で作成されたプログラムであって、
前記回路図に基づいて前記データ授受状況を検出する授受状況検出手段を備えることを特徴とする請求項２記載のプログラム開発支援装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、プログラムからファンクションブロックを呼び出してこれを実行するようにしたプログラムの実行方式、及びプログラムの作成やその支援を行う、プログラム開発支援装置に関する。
【０００２】
【従来の技術】
プログラマブルコントローラに対するプログラム規格としてＩＥＣ６１１３１−３等がある。このＩＥＣ６１１３１−３のプログラミングの構成要素としてファンクションブロックが規定されている。
このファンクションブロックは、プログラムを構造化するためのプログラミング手法であって、データ入力、データ出力及びファンクションブロックの内部変数からなるデータ構造（インスタンス）と、これらのデータを用いて実行されるプログラムとから構成されている。
【０００３】
図８は、ファンクションブロックＦＢの外形を表したものである。矩形がファンクションブロックＦＢ本体を表し、その矩形内の上部中央に示す文字列（図８の場合、“ＣＴＵ”）１０１が、このファンクションブロックＦＢの名称である。矩形左辺に接続される線１０２は、ファンクションブロックＦＢへの入力を表し、それと対になる矩形内左辺の文字列１０３は入力変数名である。同様に、矩形右辺に接続される線１０４はファンクションブロックＦＢからの出力を表し、それと対となる矩形内右辺に示す文字列１０５は出力変数名である。
【０００４】
前記プログラム規格ＩＥＣ６１１３１−３では、プログラムの構造化、カプセル化によるプログラムの可読性の向上並びにメンテナンス性の向上、基本機能のファンクションブロックライブラリ化によるプログラム品質の向上、納期の短期化等の面から、ファンクションブロックによるプログラミングを推奨している。このファンクションブロックによるプログラミングを行う場合には、まず、機能単位等でファンクションブロックを作成し、これらのファンクションブロックを呼び出すプログラムを作成し、このプログラムを、定周期、割り込み、イベント等その実行タイミングの制御単位であるタスクに割りつけることで、プログラムを作成している。
【０００５】
図９は、プログラム規格ＩＥＣ６１１３１−３によるアプリケーションプログラムの構成を示す概念図である。アプリケーションプログラム２００は、１つ又は図９に示すように複数のプログラム２０１及び２０２と、このプログラム２０１及び２０２によって呼び出されるファンクションブロックＦＢ２１１〜２１３と、これらに関する定義とから構成されている。
そして、図１に示すように、プログラミングツール１で生成され、コンパイラ２で機械語プログラムに変換されたアプリケーションプログラム２００は、伝送装置３によって、制御装置４に送信される。この制御装置４は、制御装置４自身の管理、並びにアプリケーションプログラム２００を実行するための基本処理プログラム（ＯＳ）２２１を備えている。この基本処理プログラム（ＯＳ）２２１は、プログラム２０１、２０２の実行周期を管理するためのタスク２３１、２３２を制御する。
【０００６】
このタスク２３１、２３２は、プログラムの実行周期の制御単位であって、例えば、定周期或いはイベント等があり、基本処理プログラム（ＯＳ）２２１では、各タスクに登録されているプログラムを、タスク毎に設定されているタイミングで実行するようになっている。
【０００７】
【発明が解決しようとする課題】
ここで、上位のプログラムからファンクションブロックを呼び出すようにした場合、ファンクションブロックの実行周期は、このファンクションブロックを呼び出しているプログラムの実行周期と等しくなることになる。
例えば、モータの駆動制御等のフィードバック制御を行うアプリケーションプログラムに適用した場合、例えば、モータの駆動信号を制御するモータの制御部分の方が、フィードバック制御によりモータの駆動量の目標値を設定する上位プログラムよりも高速に実行されるのが一般的である。しかしながら、図１０に示すように制御部分のプログラムをファンクションブロックＦＢ２１５とし、このファンクションブロックＦＢ２１５の上位のフィードバックループ部分をプログラム２０５とした場合、プログラム２０５とファンクションブロックＦＢ２１５との実行周期は同じになる。このため、モータの駆動制御を行うために比較的短い周期で実行させる必要のあるファンクションブロックＦＢ２１５の制御周期に、このファンクションブロックＦＢ２１５を含むプログラム２０５全体の実行周期を合わせる必要がある。
【０００８】
したがって、フィードバックループを必要以上に早い制御周期で実行させることになるため、実行効率が低下するという問題がある。また、このようにフィードバック制御を行うアプリケーションプログラムを実行させるプログラマブルコントローラの性能によっては、高速に実行することの可能なプログラムサイズが制限されるため、真に高速化したい内部制御部分のプログラムサイズが、全体のプログラムサイズによって制限されてしまうという問題がある。
【０００９】
そこで、この発明は、上記従来の未解決の問題点に着目してなされたものであり、上位プログラムから呼び出されるファンクションブロックが制約を受けることなく、且つ、プログラム全体の実行効率の低下を回避することの可能な、プログラムの実行方式及びプログラム開発支援装置を提供することを目的としている。
【００１０】
【課題を解決するための手段】
上記目的を達成するために、本発明の請求項１に係るプログラムの実行方式は、プログラム及び当該プログラムから呼び出されるファンクションブロックの実行タイミングを個別に設定し、この設定に応じて前記ファンクションブロック及びその呼び出し元のプログラムを対応するタスクに割り付け、前記ファンクションブロック及びその呼び出し元のプログラムを、割り付けられたタスクで実行するようにしたプログラムの実行方式であって、前記プログラムからの出力データを保持する保持手段を設け、前記プログラムは、当該プログラムに割り付けられたタスクの実行タイミングで、前記ファンクションブロックへの出力データを前記保持手段に格納すると共に、当該保持手段に新たにデータが格納されたことを表すフラグを設定し、前記ファンクションブロックは、当該ファンクションブロックに割り付けられたタスクの実行タイミングで前記フラグを参照し、当該フラグに基づき前記保持手段に新たにデータが格納されたことを検出したときにのみ前記保持手段から出力データを入力して前記フラグをリセットし、前記出力データをもとに所定の処理を実行することを特徴としている。
【００１２】
また、請求項２に係るプログラム開発支援装置は、プログラムの実行タイミングを設定するタイミング設定手段と、前記プログラムから読み出される機能ブロックの実行タイミングを、前記プログラムとは異なる実行タイミングに設定するブロックタイミング設定手段と、前記プログラムを、前記タイミング設定手段で設定された実行タイミングに対応するタスクに割り付けると共に前記プログラムを実行する処理装置で実行可能な機械語プログラムに変換し、且つ、前記プログラムが呼び出す機能ブロックが、その呼び出し元のプログラムとは別の実行タイミングに設定された別実行ブロックである場合には、前記プログラムを前記タイミング設定手段で設定された実行タイミングに対応するタスクに割り付けると共に、前記別実行ブロックを前記ブロックタイミング設定手段で設定された実行タイミングに対応するタスクに割り付ける変換手段と、を備えたプログラム開発支援装置において、前記別実行ブロックへのその呼び出し元のプログラムからの出力データを保持する保持手段と、前記保持手段に新たにデータが格納されたことを表すフラグと、を備え、前記変換手段は、前記別実行ブロックとその呼び出し元のプログラムとの間のデータ授受状況に基づき、前記プログラムに割り付けられたタスクの実行タイミングで、前記別実行ブロックへのその呼び出し元のプログラムからの出力データを前記保持手段に格納し、且つ前記別実行ブロックは、当該ファンクションブロックに割り付けられたタスクのタイミングで前記フラグを参照し、当該フラグに基づき前記保持手段に新たにデータが格納されたことを検出したときにのみ前記保持手段から出力データを入力して前記フラグをリセットし、前記出力データをもとに所定の処理を実行するように前記機械語プログラムへの変換を行うことを特徴としている。
【００１３】
この請求項２に係る発明では、プログラムから呼び出される機能ブロックを、プログラムとは別の実行タイミングに設定するためのブロックタイミング設定手段が設けられ、プログラムを機械語プログラムに変換する際に、プログラム及びこのプログラムとは別の実行タイミングに設定された機能ブロックは、それぞれ指定された実行タイミングに対応するタスクに割りつけられる。
したがって、このプログラムを実行した場合、プログラムはタイミング設定手段で設定された実行タイミングで実行され、一方、プログラムから呼び出される機能ブロックは、ブロックタイミング設定手段で設定された実行タイミングで実行されるから、プログラムとこのプログラムから呼び出される機能ブロックとは、異なる実行タイミングで実行されることになる。
【００１５】
また、呼び出し元のプログラムとは別の実行タイミングが設定された別実行ブロックへの呼び出し元のプログラムからの出力データを保持するための保持手段が設けられ、呼び出し元のプログラムからの別実行ブロックへの出力データは呼び出し元プログラムの実行タイミングで保持手段に格納され、別実行ブロックでは、この別実行ブロックの実行タイミングで、前記保持手段からデータを入力するから、呼び出し元のプログラムと別実行ブロックとはそれぞれ異なる実行タイミングで実行されるが、別実行ブロックの処理実行中に、呼び出し元のプログラムによって別実行ブロックへの入力データが更新されることはない。
【００１６】
また、保持手段へのデータが更新されたときに、データが更新されたことを表すフラグが設定され、別実行ブロックでは、前記フラグが設定されているときに、保持手段で保持するデータを入力する。したがって、別実行ブロックと、この呼び出し元のプログラムとの実行タイミングが異なることに起因して、プログラムによって保持手段のデータが更新されていないにも関わらず、別実行ブロックが保持手段のデータを入力するといった無駄な処理が行われることが回避される。
【００１７】
さらに、請求項３に係るプログラム開発支援装置は、前記プログラムは、前記機能ブロックを用いた回路図で作成されたプログラムであって、前記回路図に基づいて前記データ授受状況を検出する授受状況検出手段を備えることを特徴としている。
この請求項３に係る発明では、機能ブロックを用いた回路図、いわゆる機能ブロック図言語で作成されたプログラムである場合には、前記回路図に基づいて、ブロックタイミング設定手段で設定された機能ブロックと、この機能ブロックの呼び出し元のプログラムとの間のデータ授受状況が検出される。
【００１８】
【発明の実施の形態】
以下に、本発明の実施の形態を説明する。
図１は、本発明を適用したプログラマブルコントローラの開発支援装置の一例を示す構成図であって、１はオペレータがプログラムの作成を行うためのプログラミングツール、２は、プログラミングツール１で生成されたプログラムを機械語プログラムに変換するためのコンパイラ、３はコンパイラ２で変換された機械語プログラムを、プログラマブルコントローラ等の制御装置４に入力するための伝送装置である。
【００１９】
前記プログラミングツール１は、オペレータがアプリケーションプログラムを作成するための入力装置１１、入力装置１１での入力に応じて所定のデータを表示するための表示装置１２、作成されたアプリケーションプログラム等を記憶するための記録媒体１３、及び、前記入力装置１１、表示装置１２及び記録媒体１３を制御する処理装置１４を備えている。
なお、前記コンパイラ２はプログラミングツール１の一部としてプログラミングツール１内部に存在してもよく、また、制御装置４側に存在してもよい。また、これらプログラミングツール１、コンパイラ２、制御装置４で保持する機能全てを一つのプログラムとし、パーソナルコンピュータ等で構成するようにしてもよい。
【００２０】
そして、処理装置１４では、プログラム規格ＩＥＣ６１１３１−３に準拠する公知のプログラミングツールと同様に、入力装置１１での入力に応じて、例えばファンクションブロック図、或いは命令リストによるプログラム作成を支援するための作成画面、或いはタスク割り付け画面等を表示装置１２に表示すると共に、所定の情報を記録媒体１３に格納する。
図２は、前記タスク割り付け画面Ｔの一例を示したものである。プログラムの割り付けは、公知のプログラミングツールと同様に、予め作成し記録媒体１３に格納しているプログラムを特定する情報、例えば名称を、タスク割り付け画面Ｔにおいて、前記プログラムの実行周期に対応するタスクと対応させることによって行う。また、プログラムによって呼び出されるファンクションブロックＦＢも、タスクへの割り付けが可能であり、プログラムの割り付けと同様に、タスク割り付け画面Ｔにおいて、ファンクションブロックＦＢを、所望の実行周期に対応するタスクと対応させることによって、ファンクションブロックＦＢのタスクへの割り付けを行う。なお、ファンクションブロックＦＢを、その呼び出し元のプログラムと同じ実行タイミングで実行させる場合には、タスクの割り付けは行わない。
【００２１】
つまり、図２の場合には、タスクＡ（ＴＡＳＫ−Ａ）にプログラム１〜３（ＰＲＯＧ１〜３）が割りつけられ、また、タスクＢ（ＴＡＳＫ−Ｂ）にファンクションブロック１２（ＦＢ１２）が割りつけられている。そして、タスクが、このタスクに割りつけられたプログラム或いはファンクションブロックＦＢの実行タイミングを管理し、予めタスクに割りつけられた実行タイミングで、割りつけられたプログラム或いはファンクションブロックを起動させるようになっている。また、タスクには、このタスクに割りつけられたファンクションブロックＦＢへの入力データを格納するためのバッファ及びバッファへの書き込みが完了したか否かを表すためのフラグが設けられ、このバッファ及びフラグは各タスク毎に設けられている。
【００２２】
図３は、プログラムを、ファンクションブロック図を用いた回路図、いわゆる機能ブロック図言語で作成した場合の、このプログラムに対する、コンパイラ２でのコンパイル手順の一例を示すフローチャートである。
このコンパイラ２は起動されると、まず、図２に示すタスク割り付け画面Ｔを参照し、タスクに割りつけられているプログラムそれぞれについてプログラム内を検索し、ファンクションブロックＦＢを呼び出しているか否かを判定する。そして、ファンクションブロックＦＢを呼び出している場合には、タスク割り付け画面Ｔでのタスク割り付け情報に基づいて、プログラムにより呼び出されているファンクションブロックＦＢがこれを呼び出しているプログラムとは異なるタスクに割りつけられているかを判定する（ステップＳ２）。
【００２３】
そして、プログラムにより呼び出されるファンクションブロックＦＢが、このプログラムとは異なるタスクに割りつけられていない場合には、ステップＳ４に移行し、設定されたプログラム及びそのタスク割り付け情報とに基づいて、公知のコンパイラと同様にして機械語プログラムへの変換を行う。
例えば、図４（ａ）に示すように、図２においてタスクＡ（ＴＡＳＫ−Ａ）に割りつけられているプログラムＰＲＯＧ１が、ファンクションブロックＦＢ１及びＦＢ２を呼び出し、ファンクションブロックＦＢ１の出力をファンクションブロックＦＢ２に入力し、その結果を得るようなプログラムである場合には、これら間のデータ授受に関わる部分に相当する、変換後の機械語プログラムは、図４（ｂ）に示すニーモニック表示したプログラムとなる。つまり、ファンクションブロックＦＢ１の出力Ａ及びＢをファンクションブロックＦＢ２の入力Ｃ及びＤにコピーし（４１）、ファンクションブロックＦＢ２を呼び出す（４２）。そして、ファンクションブロックＦＢ２の出力Ｅ、Ｆを、これを参照するための変数Ｇ、Ｈにコピーする（４３）。
【００２４】
一方、ステップＳ２でファンクションブロックＦＢを呼び出しているプログラムがあり且つこのプログラムにより呼び出されるファンクションブロックＦＢがその呼び出し元のプログラムとは異なるタスクに割りつけられている場合には、ステップＳ６に移行し、ファンクションブロックがタスクに割り付けされた時のコンパイル処理を行う。
つまり、タスクに割りつけられたファンクションブロックＦＢを呼び出していないプログラムについては、前記ステップＳ４と同様に公知の手順にしたがって機械語への変換を行う。
【００２５】
一方、タスクに割りつけられたファンクションブロックＦＢを呼び出しているプログラムについては、機械語プログラムへの変換を同様に行うが、機能ブロック図言語からなるプログラムにおいて、回路図におけるファンクションブロックＦＢとの接続状況から、ファンクションブロックＦＢとその呼び出し元のプログラムとの間のデータの授受状況を検出する。そして、このデータの授受状況に基づいて、タスクに割りつけられたファンクションブロックＦＢへの出力を、このファンクションブロックＦＢが割りつけられたタスクに設けられたバッファの所定領域に格納し、タスクに割りつけられたファンクションブロックＦＢはこのバッファの所定領域に格納された、このファンクションブロックＦＢに対応するデータを入力するように機械語プログラムへの変換を行う。
【００２６】
例えば、図５（ａ）に示すように、図２に示すプログラムＰＲＯＧ２が、ファンクションブロックＦＢ１１及びＦＢ１２を呼び出し、ファンクションブロックＦＢ１１の出力をファンクションブロックＦＢ１２に入力してこのファンクションブロックＦＢ１2 の出力を得るようなプログラムであり、且つファンクションブロックＦＢ１２がプログラムＰＲＯＧ２とは異なるタスクＢ（ＴＡＳＫ−Ｂ）に割りつけられた場合には、これらファンクションブロックＦＢ間のデータの授受部分に相当する変換後の機械語プログラムは、図５（ｂ）に示す、ニーモニック表示したプログラムとなる。
【００２７】
つまり、タスクＡ（ＴＡＳＫ−Ａ）に割りつけられたプログラムＰＲＯＧ２は次の処理となる機械語プログラムに変換される。ファンクションブロックＦＢ１１の出力Ａ及びＢを、タスクＢ（ＴＡＳＫ−Ｂ）に設けられているバッファ５１の変数Ｃ′及びＤ′へコピーし（５６）、タスクＢ（ＴＡＳＫ−Ｂ）に設けられている書き込み完了フラグＦＬＧ５２を書き込み完了に設定する（５７）。そして、タスクＢ（ＴＡＳＫ−Ｂ）に割りつけられたファンクションブロックＦＢ１２の出力Ｅ及びＦを、これを参照するための、プログラムＰＲＯＧ２上の変数Ｇ及びＨにコピーする（５８）。
【００２８】
一方、タスクＢ（ＴＡＳＫ−Ｂ）に割りつけられたファンクションブロックＦＢ１２は、図６に示す手順となる機械語プログラムに変換される。すなわち、まず、書き込み完了フラグＦＬＧ５２を参照し、ここに、書き込み完了を表すＴＲＵＥが設定されているかどうかを判定する（ステップＳ１１）。そして、ＴＲＵＥが設定されている場合には、ステップＳ１２に移行し、バッファ５１の変数Ｃ′及びＤ′をファンクションブロックＦＢ１２の入力変数Ｃ及びＤにコピーした後、ステップＳ１３に移行して書き込み完了フラグＦＬＧ５２を、読み取り完了を表すＯＦＦに設定し、ステップＳ１４に移行してファンクションブロックＦＢ１２をコールする。
【００２９】
一方、ステップＳ１１で書き込み完了フラグＦＬＧ５２に書き込み完了を表すＴＲＵＥが設定されていない場合には、そのままステップＳ１４に移行する。
つまり、ファンクションブロックＦＢ１２での処理結果がバッファ５１に書き込まれて更新されたときに、バッファ５１のデータをファンクションブロックＦＢ１２の入力Ｃ、Ｄにコピーし（ステップＳ１１、Ｓ１２）、書き込み完了フラグＦＬＧ５２をＯＦＦにした後（ステップＳ１３）、ファンクションブロックＦＢ１２をコールする（ステップＳ１４）。そして、書き込み完了フラグＦＬＧ５２がＯＦＦである間は、所定のタイミングでファンクションブロックＦＢ１２を繰り返し呼び出し（ステップＳ１４）、書き込み完了フラグＦＬＧ５２がＦＬＧ＝ＴＲＵＥとなりそのデータが更新されたときにバッファ５１のデータをファンクションブロックＦＢ１２にコピーし（ステップＳ１２）、書き込み完了フラグＦＬＧ５２をＯＦＦにする。
【００３０】
このようにすることによって、データが更新されていないのにも関わらずバッファ５１からファンクションブロックＦＢ１２へのコピーを行うことによって不要な処理を行うことを回避するようになっている。
したがって、このような手順で変換された機械語プログラムを伝送装置３によって制御装置４に伝送し、制御装置でこの機械語プログラムを実行することによって、図２に示す割り付けが行われたアプリケーションプログラムは、そのプログラムＰＲＯＧ１〜３は、タスクＡで規定されるタイミングで実行制御が行われると共に、ファンクションブロックＦＢ１２は、タスクＢで規定されるタイミングで実行制御が行われる。そして、ファンクションブロックＦＢ１２を呼び出すプログラムＰＲＯＧ２においては、プログラムＰＲＯＧ２を実行制御するタスクＡと、ファンクションブロックＦＢ１２を実行制御するタスクＢとの間で、図５（ａ）に示すように、データの授受が行われ、ファンクションブロックＦＢ１２は、プログラムＰＲＯＧ２とは異なる実行タイミングで実行されることになる。
【００３１】
また、例えば前記従来の図９に示すアプリケーションプログラム２００の構成において、ファンクションブロックＦＢ２１３をプログラム２０２とは異なる制御周期で実行する場合には、表示装置１２のタスク割り付け画面Ｔにおいて、図７に示すように、タスク２３１にプログラム２０１を割り付け、タスク２３２にプログラム２０２を割り付け、さらに、プログラム２０２において呼び出しているファンクションブロックＦＢ２１３をタスク２３３に割り付け、これをコンパイラ２で変換する。
【００３２】
これによって、プログラム２０１及びプログラム２０２は、従来と同様にして機械語プログラムへの変換が行われるが、プログラム２０２においては、ファンクションブロックＦＢ２１３がタスク２３３に割りつけられているから、プログラム２０２では、プログラム２０１からの入力であるファンクションブロックＦＢ２１３への入力を、タスク２３３に設けた図示しないバッファにコピーすると共に、タスク２３３に設けた図示しない書き込み完了フラグＦＬＧを書き込み完了に設定し、さらに、ファンクションブロックＦＢ２１３の出力を、これを参照するための、プログラム２０２上の変数Ｆにコピーするように変換される。また、ファンクションブロックＦＢ２１３については、図６のフローチャートに示すように、書き込み完了フラグＦＬＧが書き込み完了に設定されているときにタスク２３３に設けられた図示しないバッファのデータをファンクションブロックＦＢ２１３の入力にコピーしてファンクションブロックＦＢ２１３をコールし、書き込み完了フラグＦＬＧが書き込み完了に設定されていないときにはバッファのデータのコピーを行わず、ファンクションブロックＦＢ２１３をコールするように変換される。
【００３３】
そして、このようにして機械語プログラムに変換された図７に示すアプリケーションプログラムを実行すると、プログラム２０１は、タスク２３１で規定されるタイミング、プログラム２０２はタスク２３２で規定されるタイミングで実行されるが、このプログラム２０２で呼び出されるファンクションブロック２１３はタスク２３３で規定されるタイミングで実行される。
このように、ファンクションブロックＦＢを、これを呼び出しているプログラムとは別のタイミングで実行させることができる。したがって、ファンクションブロックＦＢが、例えばフィードバック制御による制御処理を行うファンクションブロックＦＢである場合であっても、このファンクションブロックＦＢをその上位プログラムとは異なるタスクに割りつけることによって、ファンクションブロックＦＢ及びその上位プログラムをそれぞれに適したタイミングで実行することができる。
【００３４】
よって、従来のように必要以上の制御周期で上位プログラムを実行させる必要がないから、真に高速に動かしたい処理を、処理時間、また、プログラム容量等の観点からみて、効率よく実行させることができる。
また、タスクに割りつけられたファンクションブロックＦＢでは、書き込み完了フラグを設け、これに書き込み完了が設定されているときにのみ、バッファのデータをファンクションブロックＦＢにコピーするようにしているから、ファンクションブロックＦＢとこのファンクションブロックＦＢの呼び出し元のプログラムとの実行タイミングが異なることに起因して、バッファのデータが更新されていないにも関わらず、バッファのデータをファンクションブロックＦＢの入力にコピーするといった不要な処理を行うことを回避することができる。
【００３５】
また、バッファを設け、タスクに割りつけられたファンクションブロックＦＢに入力するためのデータを一旦バッファに格納し、このバッファからファンクションブロックＦＢへのデータをコピーするようにしたから、タスクに割りつけられたファンクションブロックＦＢとこのタスクの呼び出し元のプログラムとのタスクが異なり、つまり、実行周期が異なることに起因してファンクションブロックＦＢが処理実行中に、ファンクションブロックＦＢへの入力データが書き換えられてしまうことを回避することができる。
【００３６】
また、機能ブロック図言語で作成された、ファンクションブロックＦＢを含む回路図をもとに、ファンクションブロックＦＢ間或いはプログラム間の接続状況から、ファンクションブロックＦＢ間或いはプログラム間のデータの授受状況を検出し、これに基づいて、呼び出し元のプログラムとは別のタスクに割りつけられたファンクションブロックＦＢへの入力データの格納先のバッファ、或いは別タスクに割りつけられたファンクションブロックのデータの入力元のバッファ、及びこのファンクションブロックの出力データのコピー先等といった、データの授受状況を解析し、これに基づいて機械語プログラムに変換するようにしたから、オペレータはタスク割り付け画面Ｔにおいて、プログラムをタスクに割りつける場合と同様の手順で、ファンクションブロックＦＢを所望のタスクに割りつけるといった簡単な操作を行うだけで、ファンクションブロックＦＢを、その呼び出し元のプログラムとは別の実行タイミングで容易に実行させることができる。
【００３７】
なお、上記実施の形態においては、タスクに１つのファンクションブロックＦＢを割りつけるようにした場合について説明したが、複数のファンクションブロックＦＢを同一のタスク或いは個別のタスクに設定することも可能であり、この場合も上記実施の形態と同様に処理を行うようにすればよい。
また、同一のタスクに複数のファンクションブロックＦＢが設定された場合には、ファンクションブロックＦＢ毎にそれぞれに対応するバッファ領域を設けるようにすればよい。このとき、プログラムから呼び出される複数のファンクションブロックＦＢが、同一のタスクに割りつけられている場合には、各ファンクションブロックＦＢ毎に書き込み完了フラグＦＬＧを設ける必要はなく、各ファンクションブロックＦＢへの入力データをバッファにコピーした後に、書き込み完了フラグＦＬＧを書き込み完了に設定するようにしてもよい。
【００３８】
また、上記実施の形態においては、機能ブロック図言語で作成されたプログラムに対してコンパイルを行うようにした場合について説明したが、これに限るものではなく、例えば命令リストによるプログラムをコンパイルするようにした場合であっても適用することができる。この場合には、図２に示すようなタスク割りつけ画面Ｔにおいて、タスクの割り付けを行うと共に、呼び出し元のプログラムとは異なるタスクに割りつけられたファンクションブロックＦＢへの入力データを、バッファにコピーすると共に割り付け完了フラグＦＬＧを書き込み完了に設定し、つまり、図５（ｂ）に示すような処理を行うプログラムリストを作成し、前記ファンクションブロックＦＢでは、バッファからデータを入力データとしてコピーしこれをもとに処理を行うように、プログラム作成時に、オペレータが設定するようにすればよい。このようにすることによって、上記と同等の作用効果を得ることができる。
【００３９】
また、上記実施の形態においては、ファンクションブロックＦＢの出力をその呼び出し元のプログラム上の出力変数にコピーするようにしているが、このとき、ファンクションブロックＦＢの出力と呼び出し元のプログラムの出力変数とに設定されているデータの間で、データの一意性を保証する必要がある場合には、ファンクションブロックＦＢの出力をその呼び出し元のプログラムの出力変数にコピーする処理の前後で、割り込み処理を禁止する等の処理を行うようにすればよい。
【００４０】
また、上記実施の形態においては、プログラマブルコントローラのプログラム開発支援装置に適用した場合について説明したが、これに限らず、プログラムからファンクションブロックを呼び出してこれを実行するようにしたプログラムの開発支援装置に広く適用することができる。
また、上記実施の形態においては、図２に示すように、ツリー構造からなるタスク割り付け画面Ｔを用いた場合について説明したが、これに限らず、ファンクションブロックＦＢをタスクに割りつけることが可能であればよい。
【００４１】
なお、上記実施の形態において、表示装置１２に表示されるタスク割り付け画面Ｔがタイミング設定手段及びブロックタイミング設定手段に対応し、コンパイラ２が変換手段に対応し、バッファ５１が保持手段に対応し、書き込み完了フラグＦＬＧがフラグに対応し、図３のステップＳ６の処理で、機能ブロック図言語からなるプログラムにおいて、タスクに割りつけられているファンクションブロックＦＢの接続状況から、ファンクションブロックＦＢとその呼び出し元のプログラムとの間のデータの授受状況を検出する処理が授受状況検出手段をに対応している。
【００４２】
【発明の効果】
以上説明したように、本発明の請求項１に係るプログラムの実行方式によれば、プログラム及びこのプログラムから呼び出されるファンクションブロックの実行タイミングを個別に設定し、この設定に応じて前記ファンクションブロック及びその呼び出し元のプログラムを対応するタスクに割り付け、これらを割り付けられたタスクで実行するようにしたから、ファンクションブロック及びプログラムをそれぞれに適した実行タイミングでなんら制約を受けることなく駆動することができ、プログラム全体の実行効率が低下することを回避することができる。
【００４３】
また、ファンクションブロックへのプログラムからの出力データを保持手段に格納しておき、ファンクションブロックは前記保持手段から前記出力データを入力するようにしたから、ファンクションブロックが処理実行中に、ファンクションブロックに入力される前記プログラムからの出力データが更新されることを回避することができる。
また、保持手段に新たにデータが格納されたかどうかを表すフラグを設け、これに基づき保持手段に新たにデータが格納されたと判定されるとき、保持手段から出力データを入力するようにしたから、同じ出力データを入力するといった無駄な動作を行うことを回避することができる。
【００４４】
また、請求項２に係るプログラム開発支援装置によれば、プログラムから呼び出される機能ブロックを、プログラムとは別の実行タイミングに設定するためのブロックタイミング設定手段を設け、プログラムを機械語プログラムに変換する際に、それぞれ指定された実行タイミングに対応するタスクに割りつけるようにしたから、プログラムから呼び出される機能ブロックと、その呼び出し元のプログラムとを異なる実行タイミングで実行することができる。
【００４５】
また、別実行ブロックへの呼び出し元のプログラムからの出力データを保持手段に格納し、別実行ブロックでは、この保持手段からデータを入力するようにしたから、呼び出し元のプログラムと別実行ブロックとが異なる実行タイミングで実行されることに起因して、別実行ブロックが処理を実行中に、別実行ブロックに入力されるデータが更新されることを回避することができる。
【００４６】
また、保持手段に新たにデータが格納されたときに、新たにデータが格納されたことを表すフラグを設定し、別実行ブロックでは、当該別実行ブロックの実行タイミングで、前記フラグが設定されているときに、保持手段で保持するデータを入力するようにしたから、保持手段のデータが新たに格納されておらずすなわち更新されていないときに、保持手段のデータを入力するといった、無駄な処理を行うことを回避することができる。
【００４７】
さらに、請求項３に係るプログラム開発支援装置によれば、機能ブロックを用いた回路図に基づいて、ブロックタイミング設定手段で設定された機能ブロックと、この機能ブロックの呼び出し元のプログラムとのデータ授受状況を検出するようにしたから、データ授受状況を容易に検出することができる。
【図面の簡単な説明】
【図１】本発明を適用したプログラム開発支援装置の一例を示す構成図である。
【図２】タスク割り付け画面Ｔの一例である。
【図３】図１のコンパイラにおける処理手順の一例を示すフローチャートである。
【図４】本発明の動作説明に供する説明図である。
【図５】本発明の動作説明に供する説明図である。
【図６】呼び出し元のプログラムとは異なるタスクに割りつけられたファンクションブロックＦＢに対するコンパイル処理の処理手順の一例を示すフローチャートである。
【図７】本発明の動作説明に供する説明図である。
【図８】ファンクションブロックの一例である。
【図９】従来のアプリケーションプログラムの一例を示す構成図である。
【図１０】フィードバックのあるプログラムの一例を示すブロック図である。
【符号の説明】
１  プログラミングツール
２  コンパイラ
３  伝送装置
４  制御装置
【図１】
0003838124.tif 000002
【図２】
0003838124.tif 000003
【図３】
0003838124.tif 000004
【図４】
0003838124.tif 000005
【図５】
0003838124.tif 000006
【図６】
0003838124.tif 000007
【図７】
0003838124.tif 000008
【図８】
0003838124.tif 000009
【図９】
0003838124.tif 000010
【図１０】
0003838124.tif 000011