(57)【要約】【課題】ユーザに高度なスキルを要求することなく、複数のシーケンス制御プログラム間で共通に使用可能な補助的なプログラムの再利用性を高めたシーケンス制御プログラムを作成できるプログラム作成装置を提供する。【解決手段】エンジニアリングツール部１１は、プログラム編集部１１１と、シーケンス制御プログラムからアクションを挿入可能な点を検出するアクション挿入点検出部１１２と、アクションと、当該アクションの挿入可能点とが対となった情報の集合をモジュール化するアスペクト定義部１１３と、ユーザがアクションの挿入時に操作するアクション編集部１１４とを備え、エンジニアリングデータベース１２は、プログラムテーブル１２１と、アクション挿入点テーブル１２２と、アスペクトテーブル１２３とを備えている。プログラム生成部１３は、プログラム合成部１３１とソースバッファ１３２とを備えている。【選択図】図３
2008293058.tif 000002
【特許請求の範囲】
【請求項１】
ラダー言語で記述されたシーケンス制御プログラムを入力して所定のプログラミング言語に変換し、変換後の前記シーケンス制御プログラムを、メインフローであるメインプログラムと、接点のロード、接点の参照およびコイルへの出力で定義される単位命令とに分割するプログラム編集部と、
変換後の前記シーケンス制御プログラムを解析して、前記メインプログラムに対して、該メインプログラム以外のプログラムとして規定されるアクションの挿入点を検出するアクション挿入点検出部と、
検出した前記挿入点と、そこに挿入すべき前記アクションとが対になった情報をまとめてモジュール化してアスペクトとして定義するアスペクト定義部と、
前記プログラム編集部において、前記メインプログラムと前記単位命令とに分割された分割済みプログラムを保持するプログラム保持部と、
前記アクション挿入点検出部で検出された前記挿入点を保持するアクション挿入点保持部と、
前記アスペクト定義部で定義された、前記アスペクトを保持するアスペクト保持部と、
前記プログラム保持部に保持された前記メインプログラムと、前記アスペクト保持部に保持された前記アスペクトとを読み出し、前記アクション挿入点保持部に保持された前記挿入点に基づいて、前記メインプログラムと前記アクションとを合成するプログラム合成部、とを備えるプログラム作成装置。
【請求項２】
前記アクション挿入点検出部は、
前記アクションの前記挿入点が、前記メインプログラムの実行開始前を示す点であるか、前記メインプログラムの置き換えを示す点であるか、前記メインプログラムの実行終了後を示す点である場合に分類して、前記挿入点を検出する、請求項１記載のプログラム作成装置。
【請求項３】
前記アスペクト定義部は、
前記メインプログラムの前記置き換えを示す点に挿入される前記アクションにおいては、前記メインプログラムの構成要素に相当する部分をブラックボックスとして処理し、前記プログラム合成部において、前記ブラックボックスに前記メインプログラムの前記構成要素を挿入する、請求項２記載のプログラム作成装置。
【請求項４】
前記プログラム合成部は、
前記メインプログラムと前記アクションとの合成に際して、種類の異なる複数の前記アスペクトを、適用順序を指定して、前記メインプログラムに適用する、請求項１記載のプログラム作成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラム作成装置に関し、特に、ＰＬＣ(Programable Logic Controller)を用いて機器を制御するシーケンス制御プログラムの作成装置に関する。
【背景技術】
【０００２】
従来より、シーケンス制御プログラムの作成方法としては、ラダー言語を使ったプログラミングがある。ラダー言語は、リレーによる論理回路を記述するために考案され、ラダー言語で書かれたプログラムは、リレーを使った回路と等価であるため、比較的簡単に理解できるが、例えば機器が故障した場合に処理を中断させるという、本質的には単純な回路であっても、故障を検出するためのタイムアウト処理を施す機能などの補助的な機能が加わることで、入力作業が複雑化することになる。
【０００３】
このような、シーケンス制御プログラムの入力作業を改善するために、例えば、特許文献１には、特別な表を使って複雑なラダープログラムを簡易に作成する技術が開示されている。
【０００４】
【特許文献１】特開平６−４１１１号公報（図２）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
シーケンス制御プログラムが複雑化すると、入力作業が煩雑になるというだけでなく、プログラムの再利用性が低下するという問題がある。例えば、１のシーケンス制御プログラムで使用されている補助的なプログラムを適用元とし、他のシーケンス制御プログラムを適用先とし、適用元の補助的なプログラムを適用先のプログラムにも適用する場合、適用元および適用先の２つのプログラム仕様を熟知していないと適用ができず、ユーザに高度なスキルが要求されることになる。
【０００６】
本発明は、上記のような問題点を解決するためになされたものであり、ユーザに高度なスキルを要求することなく、複数のシーケンス制御プログラム間で共通に使用可能な補助的なプログラムの再利用性を高めたシーケンス制御プログラムを作成できるプログラム作成装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る請求項１記載のプログラム作成装置は、ラダー言語で記述されたシーケンス制御プログラムを入力して所定のプログラミング言語に変換し、変換後の前記シーケンス制御プログラムを、メインフローであるメインプログラムと、接点のロード、接点の参照およびコイルへの出力で定義される単位命令とに分割するプログラム編集部と、変換後の前記シーケンス制御プログラムを解析して、前記メインプログラムに対して、該メインプログラム以外のプログラムとして規定されるアクションの挿入点を検出するアクション挿入点検出部と、検出した前記挿入点と、そこに挿入すべき前記アクションとが対になった情報をまとめてモジュール化してアスペクトとして定義するアスペクト定義部と、前記プログラム編集部において、前記メインプログラムと前記単位命令とに分割された分割済みプログラムを保持するプログラム保持部と、前記アクション挿入点検出部で検出された前記挿入点を保持するアクション挿入点保持部と、前記アスペクト定義部で定義された、前記アスペクトを保持するアスペクト保持部と、前記プログラム保持部に保持された前記メインプログラムと、前記アスペクト保持部に保持された前記アスペクトとを読み出し、前記アクション挿入点保持部に保持された前記挿入点に基づいて、前記メインプログラムと前記アクションとを合成するプログラム合成部とを備えている。
【発明の効果】
【０００８】
本発明に係る請求項１記載のプログラム作成装置によれば、メインプログラムとは別に、メインプログラム以外のプログラムとして規定されるアクションをモジュール化して適用元のプログラムとし、それを適用先のメインプログラムと合成するので、メインプログラムが理解しやすくなり保守性、再利用性を向上させることができる。また適用元のアスペクトについてもモジュール化されているので再利用性が向上するという効果が得られる。
【発明を実施するための最良の形態】
【０００９】
＜ラダー言語によるシーケンス制御プログラムの記述例＞
まず、本発明の実施の形態の説明に先立って、図１および図２を用いて、ラダー言語によるシーケンス制御プログラムの一例について説明する。
【００１０】
図１には、ラダー言語によって記述されたシーケンス制御プログラムを示し、図２には、各接点でのタイミングチャートを示す。
【００１１】
図１に示されるように、シーケンス制御プログラムは、リレー接点とコイルと呼称されるアクチュエータで構成される行を単位としており、各コイルには、同じ番号が付された接点が接続されている。図１のプログラムは０１〜０４の４行で構成され、上から順に繰り返し実行される。
【００１２】
基本的な動作は、各行の左側にある入力側の接点がＯＮすることで、行の右側にある出力側のコイルがＯＮすることとなる。
【００１３】
図１に示したシーケンス制御プログラムでは、装置故障時、すなわち、０３行の接点Ｍ１０２０がＯＮした時に、０４行のコイルＭ１０５０をＯＮさせて処理を中断させることがメインプログラムとなるが、さらに、停電時の状態を保持する復電処理や、故障を検出するためのタイムアウト処理を行うため、０１行での復電タイマＴ３３５（タイマ(1)と記載）の起動、０２行のコイルＭ１２５４での復電信号の生成、０３行での故障検出のためのタイマＴ３００の起動、０４行で復電信号がＯＦＦ（接点Ｍ１２５４がＯＦＦ）になった場合に、タイマＴ３００（タイマ(2)と記載）がタイムアップしている場合には処理を中断させるという補助的なプログラムを有している。
【００１４】
上記シーケンス制御プログラムの動作について図２を用いてさらに説明すると、図２の（ａ）部に示すように、停電が発生して接点Ｍ１２５０がＯＦＦすると、（ｂ）部に示すように、コイルＭ１２５４で復電信号が生成されるが、停電が終了して復電すると、復電タイマＴ３３５が起動するので、復電タイマＴ３３５が起動中は復電後も復電信号が生成され続ける。
【００１５】
このような状況で、（ｃ）部に示されるように停電中に装置故障が発生すると、接点Ｍ１０２０がＯＮして、タイマＴ３００が一定期間起動する。しかし、復電信号が生成されている期間は、復電しても処理をすぐに中断するのではなく、故障発生から復電信号が解消するまでの期間、すなわちＯＦＦディレイ（Ｄoff）が経過した後に処理が中断することとなる。
【００１６】
＜実施の形態＞
以下、図３〜図１５を用いて、本発明に係るプログラム作成装置の実施の形態について説明する。
【００１７】
＜Ａ．装置構成＞
図３は、本発明に係る実施の形態の、シーケンス制御プログラム作成装置１０の構成を示すブロック図である。シーケンス制御プログラム作成装置１０は、ＰＬＣ２２上で動作するシーケンス制御プログラムを作成する装置であり、作成されたシーケンス制御プログラムはコンパイラ２１に与えられて、実行可能な形式に変換され、ＲＳ２３２ＣやＥｔｈｅｒｎｅｔ（登録商標）のネットワークを介してＰＬＣ２２に送られ、実行される。
【００１８】
図１に示すように、シーケンス制御プログラム作成装置１０は、エンジニアリングツール部１１、エンジニアリングデータベース１２およびプログラム生成部１３を備えている。
【００１９】
エンジニアリングツール部１１は、ユーザがシーケンス制御プログラムの作成に使用するプログラム編集部１１１と、作成されたシーケンス制御プログラムからアクションを挿入可能な点を検出するアクション挿入点検出部１１２と、アクションと、当該アクションの挿入可能点とが対となった情報の集合をモジュール化（モジュール化したものをアスペクトと呼称）するアスペクト定義部１１３と、ユーザがアクションの挿入時に操作するアクション編集部１１４とを備えている。
【００２０】
エンジニアリングデータベース１２は、プログラム編集部１１１で作成されたシーケンス制御プログラムを保存するプログラムテーブル１２１と、アクション挿入点検出部１１２から与えられたアクション挿入可能点のデータを保存するアクション挿入点テーブル１２２と、アスペクト定義部１１３で定義されたアスペクトを保存するアスペクトテーブル１２３とを備えている。
【００２１】
また、プログラム生成部１３は、ソースバッファ１３２と、エンジニアリングデータベース１２からシーケンス制御プログラムを読み出し、アクション挿入点単位でソースバッファ１３２に格納するプログラム合成部１３１とを備えている。
【００２２】
＜Ｂ．装置動作＞
＜Ｂ−１．全体動作＞
図３を参照しつつ、図４に示すフローチャートを用いて、シーケンス制御プログラム作成装置１０の全体動作について説明する。
【００２３】
シーケンス制御プログラムの作成を開始すると、まず、ユーザがエンジニアリングツール部１１のプログラム編集部１１１を使ってシーケンス制御プログラムを作成し（ステップＳＴ１０１）、当該シーケンス制御プログラムを、エンジニアリングデータベース１２のプログラムテーブル１２１に保存する（ステップＳＴ１０２）。
【００２４】
このとき、アクション挿入点検出部１１２においてシーケンス制御プログラムを解析し、アクションを挿入できる点を検出して（ステップＳＴ１０３）、エンジニアリングデータベース１２のアクション挿入点テーブル１２２を更新する（ステップＳＴ１０４）。ここで、アクションが挿入できる点としては、メインとなるプログラム（メインプログラム）の実行開始前および実行終了後、また、接点のロード、参照およびコイルへの出力が行われている点が挙げられる。
【００２５】
次に、ユーザがエンジニアリングツール部１１のアクション編集部１１４を操作して、挿入すべきアクションを記述するとともに（ステップＳＴ１０５）、当該アクションの挿入点および挿入方法を選択する（ステップＳＴ１０６）。この結果は、アスペクトにまとめられて、エンジニアリングデータベース１２のアスペクトテーブル１２３に保存される（ステップＳＴ１０７）。
【００２６】
その後、ユーザはプログラム生成部１３のプログラム合成部１３１を用いて、エンジニアリングデータベース１２からシーケンス制御プログラム（メインプログラム）を選択し、当該プログラムに、アスペクトテーブル１２３において指定されたアクション挿入点があるか否かを確認し、該当するアクション挿入点があればアスペクトに指定されたアクションを選択してソースバッファ１３２に挿入することで、実行可能なソースプログラムを作成する（ステップＳＴ１０８）。
【００２７】
そして、作成されたプログラムの種類に応じてコンパイラ２１が呼び出され、作成されたソースプログラムをプログラムＰＬＣ２２に転送することで（ステップＳＴ１０９）、シーケンス制御プログラムの作成を終了する。
【００２８】
＜Ｂ−２．各部の動作＞
次に、図１を用いて説明したラダープログラムを例として、シーケンス制御プログラム作成装置１０の各部の動作について説明する。
【００２９】
なお、以下においては、複雑なデータ構造を簡易に表記するため、Ｗ３Ｃ（The World Wide Web Consortium）の勧告であるＸＭＬ（Extensible Markup Language）を使用してデータ構造を定義する。すなわち、データ構造は開始タグ（“＜ＸＸＸ＞”）から終了タグ（“＜／ＸＸＸ＞”）を使って定義する。定義したデータの中に別のデータ、データ構造が含まれる場合は開始タグの中に入れ子にして記述する。
【００３０】
＜Ｂ−２−１．プログラム編集部の動作＞
シーケンス制御プログラムの編集では、まず、ユーザがエンジニアリングツール部１１を使ってラダー図などの図的言語で記述されたプログラムを入力する。以下の説明では、図１に示したシーケンス制御プログラムを入力した場合の動作について説明する。
【００３１】
なお、入力されたシーケンス制御プログラムは、メモリ上で専用の言語、例えば、プログラマブルコントローラのプログラミング言語の標準規格であるＩＥＣ６１１３１−３のＬＤ（Ladder diagram）やＩＬ（Instruction List)、ＳＴ（Structured Text)やＰＯＬ（Problem Oriented Language）などの言語に変換される。
【００３２】
ここで、図１に示したシーケンス制御プログラムをＰＯＬで記述した例を図５に示す。図５においては、図１における０１〜０４行のそれぞれに対応したＰＯＬ表現を示しており、”＄”や”；”はコマンドであり、これらに続くオペランドに記述される接点の値をロードする。例えば”＄”は接点の論理否定の値をロードし、また”−＞”は、接点への出力を示すコマンドであり、これに続くオペランドに記述されるコイルに、ロードされている値を出力する。また、”ｏｒ”，”ａｎｉ”は論理演算子であり、これに続くオペランドに記述される接点とロードされている値との論理演算をとることを示している。”ｏｒ”は論理和であり、”ａｎｉ”は論理積であるが、この例では、例えば０４行目はタイマＴ３００の値をロードし、その値とレジスタＭ１２５４の否定値の論理積をとり、その結果を接点Ｍ１０５０に代入することを示している。
【００３３】
以上のようなＰＯＬにより、図１に示したシーケンス制御プログラムのメインプログラム、すなわち、装置故障時に、コイルＭ１０５０をＯＮさせて処理を中断させるというプログラムを記述したものが図６である。
【００３４】
ここで、プログラム編集部１１１での編集動作の説明に戻り、以下、図７に示すフローチャートを用いて、プログラム編集部１１１での編集動作を説明する。
【００３５】
編集動作を開始すると、まず、プログラムＩＤがユーザにより入力される（ステップＳＴ６０１）。プログラムＩＤは、以下において作成するソースプログラムを一義的に識別するための識別番号であり、ユーザが任意に設定する。
【００３６】
その後、ユーザはシーケンス制御プログラム（図１）をラダー言語で入力する（ステップＳＴ６０２）。なお、ラダー言語で入力されたシーケンス制御プログラムは、例えば、ＰＯＬ言語に変換され、以下の処理は当該変換後の言語に基づいて実施される。
【００３７】
次に、ステップＳＴ６０３において、入力されたシーケンス制御プログラムの１つの行に、接点のロード命令が含まれるか否かを判断し、ロード命令が含まれる場合には、ステップＳＴ６０４において、接点のロード命令を単位命令として分割し、属性type（後に説明）を”Load”とする（ステップＳＴ６０４）。
【００３８】
なお、接点のロード命令が含まれない場合は、ステップＳＴ６０５に進んで、入力されたシーケンス制御プログラムの１つの行に、コイルへの出力命令が含まれるか否かを判断し、コイルへの出力命令が含まれる場合には、ステップＳＴ６０６において、コイルへの出力命令を単位命令として分割し、属性typeを”Store”とする（ステップＳＴ６０６）。
【００３９】
なお、コイルへの出力命令が含まれない場合は、ステップＳＴ６０７に進んで、入力されたシーケンス制御プログラムの１つの行に、接点の参照命令が含まれるか否かを判断し、接点の参照命令が含まれる場合には、ステップＳＴ６０８において、接点の参照命令を単位命令として分割し、属性typeを”Reference”とする（ステップＳＴ６０８）。なお、接点の参照命令が含まれない場合には、シーケンス制御プログラムの次の行に対して、ステップＳＴ６０２以下の処理を繰り返す。ここで、属性typeの判別順序は上述した順序に限定されるものではない。
【００４０】
ステップＳＴ６０４、ＳＴ６０６およびＳＴ６０８において命令の属性が判別した後は、ステップＳＴ６０９で、当該命令に、属性index（後に説明）の番号としての命令実行番号を付与するが、最初に判別した命令の命令実行番号を１とし、以後は、新たな命令が判別するごとに、命令実行番号を１つ増やして与え、当該属性indexと、それを付与した命令をプログラム編集部１１１内部に記憶する。
【００４１】
次に、ステップＳＴ６１０で、シーケンス制御プログラムの全ての行についての入力が完了したか否かについて確認を行い、入力が完了していない場合には、シーケンス制御プログラムの次の行に対して、ステップＳＴ６０２以下の処理を繰り返す。一方、シーケンス制御プログラムの全ての行についての入力が完了している場合には、プログラム編集部１１１内部に記憶された内容を、図８に示すＸＭＬ形式にしてプログラムテーブル１２１に保存する。
【００４２】
ここで、図８を用いて、プログラムテーブル１２１に保存されるＸＭＬ形式のシーケンス制御プログラムの一例を説明する。
【００４３】
図８は、図６に示したメインプログラムをＸＭＬ形式に変換したものであり、図８において、ＸＭＬタグである”Program”はプログラムを定義し、プログラムを識別する属性ｉｄを有する。ここではidが００１のプログラムであることを示している。
【００４４】
ＸＭＬタグである”Instruction”は、プログラムに含まれる単位命令を示す。また、属性indexは、１から始まる命令実行番号を示すＩＤであり、属性typeは命令の種別を示している。命令の種別には、図７を用いて説明した”Load（接点のロード）”、”Store（コイルへの出力）”、”Reference（接点の参照）”が含まれる。
【００４５】
＜Ｂ−２−２．アクション挿入点検出部の動作＞
次に、アクション挿入点検出部１１２での検出動作について説明する。
アクション挿入点検出部１１２では、プログラム編集部１１１で作成されたＸＭＬ形式のシーケンス制御プログラムを解析して、アクション挿入点を検出してアクション挿入点テーブルを作成する。アクション挿入点には、プログラムの実行前、プログラムの実行後、接点のロード、コイルへの出力および接点の参照箇所が対応し、図９には、図８で示したプログラムテーブルの情報から生成されるアクション挿入点テーブルの例を示す。
【００４６】
図９において、ＸＭＬタグである”PointCuts”はアクション挿入点のリストを示し、ＸＭＬタグである”JoinPoints”は、それぞれの挿入点を表し、関連するプログラムのＩＤを示す属性pid、命令の実行順序を示す属性index、挿入の仕方を示す属性adviceの情報を有している。属性adviceには、命令の前に挿入する”before”、命令そのものを置き換える”around”、命令実行後に挿入を行う”after”がある。
【００４７】
ここで、図１に示したシーケンス制御プログラムについて、メインプログラムのラダー図を図１０に示し、復電処理アスペクトとしてまとめた補助的な処理のラダー図を図１１に示す。図１０に示すように、メインプログラムの実行前には”JoinPoints”としてＪＰ(1)が検出され、ＪＰ(1)の属性adviceは”before”となる。また、装置故障を検出する接点Ｍ１０２０がロードされる部分では、”JoinPoints”としてＪＰ(2)が検出され、ＪＰ(2)の属性adviceは”around”となる。また、処理中断を実行するコイルＭ１０５０への出力部分では、”JoinPoints”としてＪＰ(3)が検出され、ＪＰ(3)の属性adviceは”around”となる。なお、メインプログラムの終了後に”JoinPoints”が検出される場合にはＪＰ(4)となり、ＪＰ(4)の属性adviceは”after”となるが、図１に示したラダー図には、”after”に該当するアクションは存在せず、仮想的に示している。
【００４８】
図１１には、”JoinPoints”ＪＰ(1)〜ＪＰ(3)のそれぞれに挿入されるアクションを、ラダー図として示している。なお、ＪＰ(2)のボックス(A)は接点Ｍ１０２０での装置故障の検出動作に対応し、ＪＰ(3)のボックス(B)はコイルＭ１０５０での処理中断動作に対応する。
【００４９】
ここで、アクション挿入点検出部１１２での検出動作について、図１２に示すフローチャートを用いて説明する。
【００５０】
アクション挿入点検出部１１２では、検出動作を開始すると、まず、プログラム編集部１１１から入力されるＸＭＬ形式のシーケンス制御プログラムより、命令（ＸＭＬタグInstruction）リストを読み出す（ステップＳＴ８０１）。
【００５１】
次に、読み出した命令リストから、メインプログラムの実行開始前に挿入されるべきアクションが存在するか否かを確認し、当該アクションを検出した場合には、プログラム実行開始点を示す挿入点（属性adviceがbeforeとなる挿入点）を作成する（ステップＳＴ８０２）。
【００５２】
次に、読み出した命令リストから、置き換えすべきアクションが存在するか否かを確認し、当該アクションを検出した場合には、置き換えを示す挿入点（属性adviceがaroundとなる挿入点）を作成する（ステップＳＴ８０３）。
【００５３】
置き換えの挿入点を作成した後は、ステップＳＴ８０４で、属性indexの番号としての命令実行番号を１つ増やして、命令リストの次の行の読み出しに備える。そして、ステップＳＴ８０５において、命令リストの全ての行についての入力が完了したか否かについて確認を行い、入力が完了していない場合には、命令リストの次の行に対して、ステップＳＴ８０３以下の処理を繰り返す。一方、命令リストの全ての行についての入力が完了している場合には、ステップＳＴ８０６において、メインプログラムの実行終了後を示す挿入点（属性adviceがafterとなる挿入点）を作成し、検出動作を終了する。
【００５４】
以上の処理を経ることで、図９に示すようなアクション挿入点テーブルを作成し、アクション挿入点テーブル１２２としてエンジニアリングデータベース１２に保存する。
【００５５】
＜Ｂ−２−３．アスペクト定義部の動作＞
次に、アスペクト定義部１１３での定義動作について説明する。
ここで、アスペクトとはアクション挿入点と、挿入点に挿入するアクションとが対となった情報をまとめたものであり、本実施の形態では、図１１において、装置故障時の停止回路に復電処理を施す”復電アスペクト”として示している。なお、これまでの説明では、メインプログラムに対する補助的なプログラムをアクションとしていたが、例外的な処理を行うプログラム等も含め、メインプログラム以外のプログラムをアクションとして扱っても良く、それらによってアスペクトが構成される場合もある。
【００５６】
アスペクト定義部１１３での定義動作について、図１３に示すフローチャートを用いて説明する。
【００５７】
アスペクト定義部１１３では、定義動作を開始すると、まず、プログラムテーブル１２１に保存された、単位命令ごとに分割されたシーケンス制御プログラムをソースプログラムとして読み出す（ステップＳＴ１００１）。
【００５８】
次に、エンジニアリングデータベース１２からアクション挿入点テーブル１２２を読み出す（ステップＳＴ１００２）。
【００５９】
次に、ユーザがアクション挿入点テーブル１２２から、アクションを挿入する点を選択すると（ステップＳＴ１００３）、アスペクト定義部１１３では、選択された挿入点の属性adviceの種別によって、処理を分岐する。
【００６０】
具体的には、ステップＳＴ１００４において、選択された挿入点の属性adviceが”before”であるか否かを判断し、”before”である場合はステップＳＴ１００８に進んで、ユーザが、”before”として挿入するシーケンス制御プログラム、すなわちアクションをエンジニアリングデータベース１２のアスペクトテーブル１２３に記述する。
【００６１】
一方、ステップＳＴ１００４において、選択された挿入点の属性adviceが”before”ではないと判断された場合は、ステップＳＴ１００５において、選択された挿入点の属性adviceが”after”であるか否かを判断し、”after”である場合はステップＳＴ１００８に進んで、ユーザが、”after”として挿入するシーケンス制御プログラム、すなわちアクションをエンジニアリングデータベース１２のアスペクトテーブル１２３に記述する。
【００６２】
一方、ステップＳＴ１００５において、選択された挿入点の属性adviceが”after”ではないと判断された場合は、ステップＳＴ１００６において、選択された挿入点の属性adviceが”around”であると判断し、ステップＳＴ１００７に進んで、ユーザが、挿入すべきボックスを選択する。ここでボックスとは、挿入点の属性adviceが”around”に挿入されるアクションにおいてメインプログラムの構成要素（接点やコイル）に相当する部分をブラックボックスとして扱うもので、図１１では、ボックス(A)、ボックス(B)として示された部分に相当する。
【００６３】
このように、メインプログラムの構成要素に相当する部分をブラックボックスとして扱うことで、異なるメインプログラムを適用先とする場合には、当該ブラックボックスに、その適用先の構成要素を入れることで対応することができ、アクションの再利用性を高めることができる。
【００６４】
ボックスの選択が終了した後は、ステップＳＴ１００８において、ユーザが、”around”として挿入するシーケンス制御プログラム、すなわちアクションをエンジニアリングデータベース１２のアスペクトテーブル１２３に記述する。
【００６５】
アスペクトテーブル１２３へのアクションの記述が終わった後、ユーザによるアクション挿入点の入力（選択）が完了しているか否かを確認し（ステップＳＴ１００９）、入力が終わっていない場合にはステップＳＴ１００３以下の処理を繰り返し、入力が完了している場合には、定義動作を終了する。
【００６６】
以上説明したように、挿入点の属性adviceを、”before”、”after”および”around”を分類することで、あらゆるシーケンス制御プログラムに対応することができる。
【００６７】
ここで、アスペクトテーブル１２３の一例について、図１４を用いて説明する。
図１４に示すように、アスペクトテーブルはアクション挿入点を識別するＩＤと、挿入するアクションが記述されたもので、ソースプログラム中で実行される順番に並べて格納されている。図１４において、ＸＭＬタグである”Aspect”は、アスペクト全体の定義を示したもので、その属性nameは”復電処理”と名付けられている。
【００６８】
また、ＸＭＬタグである”Advice”は、アクションの挿入点と、挿入するアクションを記述したものであり、図１４では、０２行において、図９に示すアクション挿入点テーブルの”ＪＰ(1)”の挿入点において、０３行から始まるアクションを実行することを示している。０３行から始まるアクションは、図１１において”ＪＰ(1)”で示されるアクションに対応する。
【００６９】
そして、挿入点ＪＰ(1)は、図９に示すアクション挿入点テーブルから、プログラム００１（図８に示すメインプログラム）の実行前を示す挿入点であることが判るので、ユーザがアクション編集部１１４を操作して、０３行から０４行までのアクションを記述する。なお、記述されたアクションは、後に、プログラム生成部１３のソースバッファ１３２に挿入される。
【００７０】
また、０６行においては、図９に示すアクション挿入点テーブルの”ＪＰ(2)”の挿入点において、０７行のアクションを実行することを示しており、ここでは｛□｝の表記が図１１におけるボックス(A)となる。
【００７１】
そして、挿入点ＪＰ(2)は、図９に示すアクション挿入点テーブルから、プログラム００１の命令番号１（単位命令１）の点であることが判る。ここで、単位命令１は図８より、接点Ｍ１０２０のロードであることが判るので、ユーザがアクション編集部１１４を操作して、ボックス部分をＭ１０２０に置き換え、；Ｍ１０２０−＞Ｔ３００のアクションを記述する。なお、記述されたアクションは、後に、プログラム生成部１３のソースバッファ１３２に挿入される。
【００７２】
同様に、０９行においては、図９に示すアクション挿入点テーブルの”ＪＰ(3)”の挿入点において、１０行のアクションを実行することを示しており、ここでは｛□｝の表記が図１１におけるボックス(B)となる。
【００７３】
そして、挿入点ＪＰ(3)は、図９に示すアクション挿入点テーブルから、プログラム００１の命令番号２（単位命令２）の点であることが判る。ここで、単位命令２は図８より、接点Ｍ１０５０のコイルへの出力であることが判るので、ユーザがアクション編集部１１４を操作して、ボックス部分をＭ１０５０に置き換え、；Ｔ３００  ａｎｉ  Ｍ１２５４  −＞  Ｍ１０５０のアクションを記述する。なお、記述されたアクションは、後に、プログラム生成部１３のソースバッファ１３２に挿入される。
【００７４】
ここで、アクション編集部１１４の具体的な例としては、テキストエディタに相当する機能を有したプログラムが挙げられ、アクション編集部１１４はエディタなどで編集した内容をアスペクトテーブル１２３に追記する機能も有している。
【００７５】
＜Ｂ−２−４．プログラム生成部の動作＞
次に、プログラム生成部１３でのプログラムの生成動作について、図１５に示すプログラム合成部１３１の動作を示すフローチャートを用いて説明する。
【００７６】
プログラム合成部１３１では、合成動作を開始すると、まず、ステップＳＴ１１０１において、適用先のプログラムとなるメインプログラムを、ソースプログラムとしてエンジニアリングデータベース１２のプログラムテーブル１２１から読み出し、その一覧を表示する。
【００７７】
次に、ステップＳＴ１１０２において、ユーザは表示されたプログラムの中から対象となるプログラムを選択する。ここでは、図８に示すメインプログラムを選択する場合を例に採り、００１という名前のプログラムを選択する。
【００７８】
次に、ステップＳＴ１１０３において、プログラム合成部１３１は、エンジニアリングデータベース１２のアスペクトテーブル１２３の内容を読み出し、アスペクトの一覧を表示する。
【００７９】
次に、ステップＳＴ１１０４において、ユーザは表示されたアスペクトの中から適用対象となるアスペクト、すなわち適用元のプログラムを選択する。ここでは、図１４に示す”復電処理”を選択する場合を例に採り、アスペクト”復電処理”を選択する。
【００８０】
プログラム合成部１３１では、アスペクトテーブル１２３から選択されたアスペクトの内容を最初の挿入点まで読み出し、読み出した中にＸＭＬタグ”Advice”が含まれているか否かについて確認を行う（ステップＳＴ１１０５）。そして、”Advice”が含まれていない場合にはステップＳＴ１１０８に進み、”Advice”が含まれている場合には、当該”Advice”がプログラム実行前を示すアクション挿入点”before”を指定しているか否かについて確認を行う（ステップＳＴ１１０６）。
【００８１】
”before”を指定している場合には、ステップＳＴ１１０４において対応するアクション（ユーザがアクション編集部１１４を操作して記述したもの）をソースバッファ１３２に挿入する。なお、”before”を指定していない場合には、ステップＳＴ１１０８に進む。
【００８２】
ステップＳＴ１１０８では、選択されたアスペクトの次の挿入点まで読み出し、読み出した中にＸＭＬタグ”Advice”が含まれているか否かについて確認を行う（ステップＳＴ１１０９）。そして、”Advice”が含まれていない場合にはステップＳＴ１１１３に進み、”Advice”が含まれている場合には、当該”Advice”が置き換えを示すアクション挿入点”around”を指定しているか否かについて確認を行う（ステップＳＴ１１１０）。
【００８３】
”around”を指定している場合には、対応するアクションについてボックス部分を、ユーザがアクション編集部１１４を操作して置き換えを指定した接点、あるいはコイルに置き換え（ステップＳＴ１１１１）、その結果をソースバッファ１３２に挿入する（ステップＳＴ１１１２）。なお、”around”を指定していない場合には、ステップＳＴ１１１３に進む。
【００８４】
ステップＳＴ１１１３では、選択されたアスペクトのさらに次の挿入点を読み出し、当該読み出したアクション挿入点が最後の挿入点であるか否かを確認する。そして、読み出したアクション挿入点が最後の挿入点ではない場合には、ステップＳＴ１１０８以下の処理を繰り返し、最後の挿入点である場合にはステップＳＴ１１１４に進む。
【００８５】
ステップＳＴ１１１４では、読み出した中にＸＭＬタグ”Advice”が含まれているか否かについて確認を行う。そして、”Advice”が含まれていない場合にはプログラムの生成動作を終了し、”Advice”が含まれている場合には、当該”Advice”がプログラム実行終了後を示すアクション挿入点”after”を指定しているか否かについて確認を行う（ステップＳＴ１１１５）。
【００８６】
”after”を指定している場合には、ステップＳＴ１１１６において対応するアクション（ユーザがアクション編集部１１４を操作して記述したもの）をソースバッファ１３２に挿入する。なお、”after”を指定していない場合には、プログラムの生成動作を終了する。
【００８７】
＜Ｃ．変形例＞
以上の説明においては、適用するアスペクトとして”復電処理”のみを例示したが、アスペクトテーブルに複数のアスペクトを保存している場合には、プログラム合成部１３１で、それらをメインプログラムに適用することで、より複雑な処理を実行するプログラムを取り扱うことができる。
【００８８】
この場合、複数のアスペクトが同一のアクション挿入点を指定する場合があるので、アスペクトの適用順序を指定する必要がある。例えば、プログラムの実行前に、他の装置が動作していないことをチェックするアスペクトや、インターロックのアスペクト、前のプログラム工程が終わっているか否かをチェックするアスペクトなどを組み合わせる場合には、アスペクトどうしで同じソースプログラムを共有する場合には、優先順位を決めて適用することになる。
【００８９】
＜Ｄ．効果＞
以上説明したように、シーケンス制御プログラム作成装置１０においては、メインプログラムとは別に、複数のプログラム間で共通に使うことが可能な補助的な処理や、例外的な処理のプログラムをアスペクトと呼ぶモジュールにまとめて適用元のプログラムとし、それを適用先のメインのプログラムと合成してＰＬＣで実行可能なシーケンス制御プログラムを作成する構成を採っている。このように、適用元のプログラムを、適用先のメインのプログラムとは別に管理することにしたので、メインプログラムが理解しやすくなり保守性、再利用性を向上させることができる。また適用元のアスペクトについてもモジュール化されているので再利用性が向上するという効果が得られる。
【図面の簡単な説明】
【００９０】
【図１】ラダー言語によって記述されたシーケンス制御プログラムを示す図である。
【図２】シーケンス制御プログラムの各接点でのタイミングチャートを示す図である。
【図３】本発明に係る実施の形態の、シーケンス制御プログラム作成装置の構成を示すブロック図である。
【図４】本発明に係る実施の形態の、シーケンス制御プログラム作成装置の全体動作を説明するフローチャートである。
【図５】シーケンス制御プログラムをＰＯＬで記述した図である。
【図６】シーケンス制御プログラムのメインプログラムをＰＯＬで記述した図である。
【図７】プログラム編集部の動作を説明するフローチャートである。
【図８】プログラムテーブルに保存されるＸＭＬ形式のシーケンス制御プログラムを示す図である。
【図９】アクション挿入点テーブルを示す図である。
【図１０】ラダー言語によって記述されたメインプログラムを示す図である。
【図１１】ラダー言語によって記述された復電処理アスペクトを示す図である。
【図１２】アクション挿入点検出部の動作を説明するフローチャートである。
【図１３】アスペクト定義部の動作を説明するフローチャートである。
【図１４】アスペクト表示テーブルを示す図である。
【図１５】プログラム合成部の動作を説明するフローチャートである。
【図１】
2008293058.tif 000003
【図２】
2008293058.tif 000004
【図３】
2008293058.tif 000005
【図４】
2008293058.tif 000006
【図５】
2008293058.tif 000007
【図６】
2008293058.tif 000008
【図７】
2008293058.tif 000009
【図８】
2008293058.tif 000010
【図９】
2008293058.tif 000011
【図１０】
2008293058.tif 000012
【図１１】
2008293058.tif 000013
【図１２】
2008293058.tif 000014
【図１３】
2008293058.tif 000015
【図１４】
2008293058.tif 000016
【図１５】
2008293058.tif 000017