(57)【要約】【課題】ステートチャート上で複数のイベントが同時に発生した場合にトランジションを一意に決定する記述方法を定義し、ステートチャートモデリングにより生成されるプログラムを実行可能としたプログラマブル・コントローラを提供すること。【解決手段】ＣＰＵユニットには、ステートチャートを格納する領域と、トランジションに対応して実行されるアクション及びアクティビティが格納される領域とを含むユーザプログラムメモリが備えられ、トランジションに伴い、対応するアクション及び／またはアクティビティを実行するプログラム実行手段を備え、トランジションが複数同時に成立した際に、予め設定されている各トランジションの優先度を参照し、一番高く設定されているトランジションを実行し、そのトランジションに伴うアクション及びアクティビティを実行するする。【選択図】図１
2007133801.tif 000002
【特許請求の範囲】
【請求項１】
通信機能とＣＰＵユニットとを有し、制御プログラムを実行するプログラマブル・コントローラであって、
ＣＰＵユニットには、
制御プログラムの状態遷移を記述するステートチャートを格納するためのステートチャート領域と、ステートチャート上で一つのステートから異なるステートへと遷移するトランジションに対応して実行されるアクション及びアクティビティが格納されるアクション・アクティビティ領域とを有するユーザプログラムメモリが備えられ、
ステートチャート上のトランジションの成立に伴い、当該トランジションに対応するアクション及び／またはアクティビティを実行するプログラム実行手段を備え、
ステートチャート上にて一つのステートにて生じるトランジションが複数同時に成立した際に、各トランジションに予め付加されている優先度情報に従ってトランジションの遷移を決定し、そのトランジションに伴うアクション及びアクティビティを実行すること、
を特徴とするプログラマブル・コントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラムを実行するプログラマブル・コントローラに関する。
【背景技術】
【０００２】
従来、組み込みシステムのモデリングにおいて、ステートチャートを利用して制御プログラムの状態を設計することが行われている。ステートチャートは、状態に着目し、発生するイベント・イベントにより遷移するトランジション・トランジションにより実行されるアクションなどの処理を記述するドキュメントである。また、ステートチャートの設計モデルから実行可能なプログラムを自動生成し、実際の組み込みシステムの制御に適用されている（特許文献１参照）。
【０００３】
組み込みシステムでは、イベントは時系列に発生し、必ず発生したイベントの順序を決定することができる。一方で、ステートチャートの設計においても、複数のイベントが同時に発生することはないと言う想定でモデリングが行われる。
【０００４】
ここで、本願発明の発明者は、シーケンス制御システムへのステートチャートによる状態モデリングの適用を試みた。シーケンス制御システムでは、システムを制御するコントローラがスイッチ・センサ等の入力装置からの信号を受信し、ランプ・リレー、アクチュエータ等の出力装置に信号を送信することによってシステムを制御する。コントローラでは、制御目的を実行するためのプログラムが実行される。このコントローラでは、入出力装置との信号のやり取りをサイクリックスキャンにより実行する。１サイクルの最初に入力装置からの信号を受信し、プログラムを実行する。そして、プログラム実行後、プログラムで演算した結果を出力装置へと送信する。これを１サイクルとして繰り返し実行して制御を行う。ここで、シーケンス制御にステートチャートによる状態遷移を適用すると、制御コントローラへの入力装置からの信号をステートチャートのイベントとして適用することとなる。
【特許文献１】特開２００２−１１６９１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、制御コントローラへの入力装置からの信号の受信はサイクリックスキャンで行われるため、同時に複数の信号を受信する可能性が発生する。このことは、ステートチャートのモデルにおいて、複数のイベントが複数同時に発生する可能性があることを意味する。その結果、あるステートから遷移するトランジションが複数存在する場合において、複数のトランジションを発生させる複数のイベントが同時に発生する可能性があり、ステートから遷移するトランジションを一意に決定することが不可能となるケースがあり、状態遷移モデルによる設計が十分に行えないという問題点が知見された。
【０００６】
また、組み込みシステムに適用したステートチャートからのプログラムの自動生成では、発生したイベントを順番に実行できるようにイベントをキューイングするのが一般的である。しかし、上述したように、複数のイベントが同時に発生するような場合、あるステートから遷移する可能性のある複数のトランジションのうち、いずれのトランジションを遷移させるかをモデル上で一意に記述できないため、プログラムを自動生成することができないと言う問題点も知見された。或いは、たとえトランジションを一意に決定する自動生成アルゴリズムを実現したとしても、ユーザはどのトランジションが実行されるのかを知ることができない。
【０００７】
この発明は、このような従来の問題点に着目してなされたものであり、その目的とするところは、ステートチャート上で複数のイベントが同時に発生した場合にステートからのトランジションを一意に決定する記述方法を定義し、ステートチャートモデリングにより生成されるプログラムを実行可能としたシーケンス制御システムとしてのプログラマブル・コントローラを提供することにある。
【０００８】
この発明のその他の目的ならびに作用効果については、明細書の以下の記述を参照することにより、当業者であれば容易に理解される筈である。
【課題を解決するための手段】
【０００９】
本発明の実施形態によると、通信機能とＣＰＵユニットとを有し、制御プログラムを実行するプログラマブル・コントローラであって、ＣＰＵユニットには、制御プログラムの状態遷移を記述するステートチャートを格納するためのステートチャート領域と、ステートチャート上で一つのステートから異なるステートへと遷移するトランジションに対応して実行されるアクション及びアクティビティが格納されるアクション・アクティビティ領域とを有するユーザプログラムメモリが備えられ、ステートチャート上のトランジションの成立に伴い、当該トランジションに対応するアクション及び／またはアクティビティを実行するプログラム実行手段を備え、ステートチャート上にて一つのステートにて生じるトランジションが複数同時に成立した際に、各トランジションに予め付加されている優先度情報に従ってトランジションの遷移を決定し、そのトランジションに伴うアクション及びアクティビティを実行することを特徴とする。
【００１０】
ここで言う『アクション』とは、トランジションが成立して遷移する際に実行される処理のことを意味するものである。また、『アクティビティ』とは、ステートがアクティブである間、継続的に実行される処理を意味するものである。
【００１１】
また、ここで言う『トランジションの成立』とは、一つのステートから異なるステートに遷移するトランジションの成立を意味し、このトランジションの成立には、ステートを遷移させるトリガであるイベント（入力信号）の発生に加え、コンディション（所定の条件）が満たされているかどうかの判定が行われ、イベントとコンディションの双方が満たされている場合を意味する。
【００１２】
さらに、『トランジションが複数同時に成立』とは、シーケンス制御にステートチャートによる状態遷移を適用すると、プログラマブル・コントローラへの入力装置からの信号はステートチャートのイベントとして適用され、プログラマブル・コントローラでは入力装置との信号のやり取りはサイクリックスキャンにより行うため、ステートチャートのモデルにおいてイベントが複数同時にプログラマブル・コントローラにて受信してしまうことが起こりえる。そのため、本来ステートチャートでは一つのステートにおいて、複数のイベントが同時に発生することはないと想定されているが、シーケンス制御に適用すると、複数のイベントを同時に受信し、トランジションが複数同時に成立してしまう可能性があり、ここではそのような場合を意味している。
【００１３】
このような構成により、ステートチャートのモデルにおいて、トランジションを促すイベントが同時に複数発生するような場合においても、各トランジションに予め付加されている優先度を参照することにより、どのトランジションへ遷移するかを一意的に決定することが可能となり、シーケンス制御にステートチャートによる状態モデリングを適用することが可能となる。
【００１４】
また、ステートチャートは、複数の制御の纏まりをプログラム部品として扱えるオブジェクト思考で設計することができるため、解りやすく、メンテナンスも容易となる。
【００１５】
さらに、シーケンス制御に良く用いられるラダープログラムと異なり、ラダーズ言語を知らなくてもプログラマブル・コントローラの制御プログラムを作成することが可能となる。
【発明の効果】
【００１６】
本発明のプログラマブル・コントローラにおいては、複数同時に発生する入力イベントを持つシステムの状態遷移モデルとして、１つのステートから遷移する複数のトランジションが同時に成立した場合に、遷移するトランジションを一意的に決定し、ステートチャートから作成されるプログラムを実行することが可能なプログラマブル・コントローラを提供することが可能となる。
【発明を実施するための最良の形態】
【００１７】
以下に、この発明のプログラマブル・コントローラ（以下、ＰＬＣと言う）の好適な実施の一形態を添付図面を参照しながら詳細に説明する。尚、以下に説明する実施の形態は、本発明の一例を示すものに過ぎず、本発明の要旨とするところは、特許請求の範囲の記載によってのみ規定されるものである。
【００１８】
先にも述べたように、本願におけるＰＬＣは、通信機能とＣＰＵユニットとを有し、接続されるＩ／Ｏユニットの制御プログラムを実行するプログラマブル・コントローラであって、ＣＰＵユニットには、ステートチャートを格納するためのステートチャート領域と、ステートチャート上で一つのステートから異なるステートへと遷移する際に生じるトランジションに対応して実行されるアクション及びアクティビティが格納されるアクション・アクティビティ領域とを含むユーザプログラムメモリが備えられ、ステートチャート上のトランジションに伴い、当該トランジションに対応するアクション及び／またはアクティビティを実行するプログラム実行手段を備え、ステートチャート上にて一つのステートにて生じるトランジションが複数同時に成立した際に、予め設定されている各トランジションの優先度を参照し、一番高く設定されているトランジションを実行し、そのトランジションに伴うアクション及びアクティビティを実行するプログラマブル・コントローラである。
【００１９】
周知のごとく、ＰＬＣは、ＣＰＵユニットと、Ｉ／Ｏユニットと、各種高機能ユニット等を含んで構成される。このようなＰＬＣのＣＰＵユニットのハードウェア構成図が図１に示されている。同図に示されるように、このＣＰＵユニット１００は、ＲＯＭ１０１と、マイクロプロセッサ（ＭＰＵ）１０２と、ユーザプログラムメモリ（ＵＭ）１０３と、ワークＲＡＭ１０４と、データ格納用不揮発性メモリ１０５と、アプリケーションスペシフィックＩＣ（ＡＳＩＣ）１０６と、入出力メモリ（ＩＯＭ）１０７とを含んでいる。
【００２０】
ユーザプログラムメモリ（ＵＭ）１０３は、ユーザプログラムを格納するメモリである。入出力メモリ（ＩＯＭ）１０７は、外部Ｉ／Ｏ割付用のメモリ、あるいはユーザプログラムで使用するデータメモリ等として使用されるメモリである。ＲＯＭ１０１は、システムファームウェアを格納するメモリである。ワークＲＡＭ１０４は、システムワークとして使用されるメモリである。データ格納用不揮発性メモリ１０５は、異常通知の設定や異常ステータス等を格納するメモリである。ＡＳＩＣ１０６は、ユーザプログラムメモリ（ＵＭ）１０３からプログラムを順番に読み出して実行し、実行結果を、入出力メモリ（ＩＯＭ）１０７へ書き込む機能を有する。
【００２１】
マイクロプロセッサ（ＭＰＵ）１０２は、ＣＰＵユニット１００の全体を統括制御するものである。ＲＯＭ１０１には、マイクロプロセッサ（ＭＰＵ）１０２で処理されるシステムプログラムが記憶され、データ格納用不揮発性メモリ１０５には、バックアップされたユーザプログラムが記憶されている。ワークＲＡＭ１０４には、マイクロプロセッサ（ＭＰＵ）１０７の処理全般にわたる各種データが記憶される。入出力メモリ（ＩＯＭ）１０７は、プログラム実行により入出力装置に対して入出力される入出力情報の代用として参照／書き換えられるメモリである。ユーザプログラムメモリ（ＵＭ）１０３には、データ格納用不揮発性メモリと等価なユーザプログラムが記憶され、ここから読み出されたユーザプログラムが実行される。ＡＳＩＣ１０６は、ユーザプログラムメモリ（ＵＭ）１０３からプログラムを順番に読み出し実行し、実行結果を入出力メモリ（ＩＯＭ）１０７へと書き込む。
【００２２】
次に、本実施形態におけるＰＬＣと、当該ＰＬＣが実行するプログラムを自動生成するプログラミングツールとの関係を概念的に説明する図が図２に示されている。同図にて示されるように、プログラミングツール２０は、ＰＬＣ１０（制御コントローラ）に接続され、ステートチャートエディタ２１、Ｉ／Ｏマップエディタ２２、振る舞いエディタ２３とを備えている。そして、ＰＬＣ１０は、入力装置１１と出力装置１２と接続され、システムを制御する。尚、ここで言うＰＬＣ１０の入力装置１１としては、例えばスイッチやセンサが、そして出力装置１２としては例えばランプ、リレー、アクチュエータ等が挙げられる。
【００２３】
ステートチャートエディタ２１は、開発対象システム（本実施形態ではＰＬＣ１０）の制御を行うプログラムの状態遷移を記述するものであり、『ステート』と『トランジション』の要素を設定するものである。よく知られているように、ここで言うステートとは、プログラムの１つの状態を表すものであり、トランジションとは、ステート間の遷移を表すものである。また、本実施形態においては、トランジションは、さらにイベント、コンディション、アクション、並びに優先度から構成される。
【００２４】
トランジションの各構成要素を以下に説明する。イベントとは、ステートチャート上でステートを遷移させるためのトリガである。そして、コンディションとは、ステートの遷移が発生するための条件であり、上述のイベントに加え、コンディションが成立するとステートの遷移が決定し、トランジションが発生する。このコンディションには、データがある条件を満たしているかなどを記述することができる。すなわち、上述のイベントが発生し、かつコンディションにて記述される条件が成立しないとトランジションは起こらない。さらに、アクションとは、上記のイベントとコンディションによってトランジションが成立して遷移する際に実行される処理のことである。そして、優先度とは、一つのステートにおいて、同時に複数のトランジション遷移条件（イベント＋コンディション）が成立した場合、どのトランジションを遷移させるかを判断するためにユーザが決める設定のことである。当然であるが、一つのステートから同時に複数のトランジション遷移条件が成立した場合、最も優先度が高く設定されているトランジションに遷移する。
【００２５】
そして、ステートチャートエディタ２１は、図３のようなステートチャートを作成するものである。プログラミングツール２０は、ユーザがステートチャートエディタ２１にてステートチャートを作成する際に、図３のようなステートチャートを表示する表示画面を有している。そして、ステートチャートエディタ２１にて『ステート』と『トランジション』について、上述した各要素を設定し、ステートチャートを作成する。作成されたステートチャートが図２のステートチャート情報２４に対応する。
【００２６】
図２の説明に戻り、プログラミングツール２０のＩ／Ｏマップエディタ２２は、ステートチャート上のイベントと、コントローラ１０の入力装置１１からの各入力信号との関連を記述するものである。例えば、トランジションの１つのイベントのトリガＯＮをどのセンサがＯＮしたことに関連付けるか、等を設定する。さらに、ステートチャート上の各コンディションと、コントローラ１０の入力装置１１からの各入力信号との関連も記述する。例えば、トランジションの条件をコントローラの入力信号がどのような状態に対応付けるかを設定する。そして、振る舞いエディタ２３は、ステートチャートに記述されたアクションの内容を記述するものである。また、ステートチャートから別のステートに遷移する際に、遷移元のステートで実行するアクションや遷移先のステートで実行するアクションの内容を記述する。さらに、ステートがアクティブである間、継続的に実行するアクティビティの内容を記述するものである。
【００２７】
プログラミングツール２０は、ステートチャートエディタ２１から得られるステートチャート情報２４と、Ｉ／Ｏマップエディタ２２にて設定された入力信号とイベントとの関連情報２５、および同じく設定された入力信号とトランジションとの関連情報２５と、振る舞いエディタ２３から得られる振る舞い情報２６とを基にプログラムの自動生成２７を実行し、制御プログラム２８を生成する。本実施形態では、トランジションの構成要素として優先度が含まれているため、複数のトランジションの遷移条件が同時に成立する場合に、優先度の高いトランジションが遷移するプログラムが生成される。そして、プログラミングツール２０は、生成された制御プログラム２８をＰＬＣ１０にダウンロードする。
【００２８】
続いて、状態遷移を表すステートチャートが図３に、そして、その状態遷移を表形式で表す図が図４にそれぞれ示されている。前述したように、図３のステートチャートは、ステートチャートエディタ２１にて作成されたものである。そして、本実施形態においては、当該ステートチャートから生成された制御プログラムをＰＬＣが実行する。尚、この例では、説明の便宜上、簡易な構成を備えたステートチャートを採用しているが、より複雑な構成を有するステートチャートにおいても適用可能であることは言うまでもない。
【００２９】
この例では、ステートチャートエディタ２１にて作成されたステートチャートは図３にて示されるように、Start，State１，State２，State３，State４，及びEndの合計６つの状態を有している。そして、State１においてはState２，State３，そしてENDへと遷移可能となっており、トランジションが複数（３つ）存在する。それに対して、State２からの遷移先はState３、State３からの遷移先はState４、そしてState４からの遷移先はState１と、それぞれ遷移先は一つ、すなわちトランジションが一つずつとなっている。そして、これらのトランジションをトリガするイベント（Event１〜Event６)も同図にて記されている。
【００３０】
また、図３のステートチャートにおける状態遷移を表形式で表した図が図４に記されている。この表では、縦軸がイベントを、そして横軸がステート（状態）をそれぞれ示している。この表にて示されるように、Event１，Event２，及びEvent３は、State１をState２に遷移させるトランジションを発生させるものである。同様に、Event４はState２をState３へ、Event５はState３をState４へ、そしてEvent６はState４からState１への遷移をそれぞれトリガするものである。
【００３１】
図３及び図４にて示される実施例におけるState１では、Event１，Event２，そしてEvent３が発生すると、それぞれState２，State３，Endへと遷移する。このとき、これらの図には記されていないが、先に述べたように、イベントの発生に加えてコンディションの成立の双方が成立していることが次のステートへと遷移するトランジションの発生条件となる。そして、この実施例では、State１からはState２，State３，及びEndへと遷移可能となっており、それぞれの遷移を決定するイベント（Event１，Event２，及びEvent３）には優先度が設定されている。この例では、ステートチャートエディタ２１にて、Event１はNORMAL_PRIORITY（優先度NORMAL）と設定され、Event２はHIGH_PRIORITY（優先度HIGH）と設定され、Event３はLOW_PRIORITY（優先度LOW）と設定されている。
【００３２】
尚、この優先度とは、一つのステートから複数のステートへと遷移する可能性があるトランジションに対してユーザが設定するものである。図３及び図４からも明らかであるように、この実施例では、複数のトランジションを有するのはState１のみなので、優先度もState２へのトランジション、State３へのトランジション、そしてENDへのトランジションに対してのみ付けられており、その他のステート（State２〜State４）からのトランジションには優先度が付加されておらず、イベント（Event４〜Event６）のみが記載されている。
【００３３】
この実施例において、State１の状態から３つの他の状態（State２，State３，END）へ遷移するトランジションが存在するが、それらを遷移させるイベント（Event１，Event２，Event３）が同時に発生した場合、３つのトランジションの中で最も高い優先度であるHIGH_PRIORITYが設定されているトランジションが実行され、State３へ状態が遷移する。同様に、State１において、同時に発生するイベントがEvent１とEvent３である場合には、最も高い優先度はNORMAL_PRIORITYとなり、State２へ状態遷移する。
【００３４】
尚、この例では、優先度としてHIGH_PRIORITY,NORMAL_PRIORITY,LOW_PRIORITYの３つが設定されているが、当然一つのステートからのトランジションの数等を考慮して、異なる形式で優先度を設定しても良いことは言うまでもない。ここで重要となるのは、一つのステートにおいて、複数のステートへのトランジションを有し、全てのトランジションの発生条件（イベント＋コンディション）が同時に満たされた場合に、設定されている優先度を基準として、どのトランジションを遷移させるかを一意的に決定できるように優先度を設定することである。尚、図示していないが、各トランジションには、イベントと優先度に加えて、コンディションも設定されている。このコンディションも、ユーザがステートチャートエディタ２１にて設定するものである。
【００３５】
以上のように説明した、ステートチャートエディタ２１にて作成されたステートチャート（図３、ステートチャート情報２４）は、プログラミングツール２０において、Ｉ／Ｏマップエディタ２２にて設定された入力信号とイベントとの関連情報２５、および同じく設定された入力信号とトランジションとの関連情報２５と、振る舞いエディタ２３にて設定された振る舞い情報２６と、を含む各種情報と合体される。つまり、プログラミングツール２０のプログラム自動生成部２７が、各エディタにて設定・作成された各種の情報をもとにして、ＰＬＣ用のプログラムを自動生成する。生成された制御プログラム２８は、プログラミングツール２０内の所定の記憶部に格納される。そして、プログラミングツール２０は、生成した制御プログラム２８を、プログラムダウンロード部２９を介してＰＬＣ１０にダウンロードする。
【００３６】
次に、本実施形態のＰＬＣ１０における制御プログラムの実行処理について説明する。上述のようにしてプログラミングツール２０が作成した制御プログラムはＰＬＣ１０へとダウンロードされ、ＰＬＣ１０のＣＰＵユニット１００において実行される。図５にてＰＬＣ１０のＣＰＵユニット１００に格納されるＵＭ（ユーザプログラムメモリ）１０３のメモリマップが示されている。同図にて示されるように、当該ＵＭ１０３には、ステートチャートを格納するためのステートチャート領域１０３ａと、当該ステートチャートにおける各ステート遷移に伴い実行されるアクション及びアクティビティとを格納するアクション&アクティビティ領域１０３ｂとが設けられている。
【００３７】
本実施形態におけるＰＬＣ１０の処理を示すフローチャートが図７に示されている。同図にて示されるように、ＰＬＣ１０は、電源投入に伴い初期化処理（ステップ７０１）を実行する。ここで言う初期化処理（ステップ７０１）とは、ハードメモリ／システムワーク初期化処理、入出力メモリエリアのクリア処理、ユーザプログラムメモリ（ＵＭ）チェック処理などが含まれる。
【００３８】
そして、その後、ＩＮリフレッシュ処理（ステップ７０２）、プログラム実行処理（ステップ７０３）、及びＯＵＴリフレッシュ処理（ステップ７０４）をサイクリックに一巡実行する。
【００３９】
ここで言うＩＮリフレッシュ処理（ステップ７０２）とは、ＰＬＣ１０に接続された入力装置１１からの入力信号を受信し、入出力メモリに格納する処理である。つまり、入力装置１１の一例であるスイッチやセンサ等のＯＮ／ＯＦＦ動作状態をＰＬＣ１０のＣＰＵユニット１００が取り込む処理である。次のプログラム実行処理（ステップ７０３）とは、記憶部に格納されている制御プログラム２８を、取り込んだ入力信号に基づいてプログラム実行処理を行い、その演算結果を入出力メモリに格納するものである。このプログラム実行処理における処理内容については後に詳細に説明するため、ここでの説明は省略する。続いて実行されるＯＵＴリフレッシュ処理（ステップ７０４）とは、入出力メモリに格納されるプログラム実行後の演算結果を出力部を経由して外部の出力機器１２へと出力する処理である。この出力信号により、出力装置１２の一例であるランプ、リレー、アクチュエータ等が所望の動作をすることとなる。
【００４０】
上述のプログラム実行処理の詳細を、図８及び図９のフローチャートを参照して以下に説明する。先ず、カレント・トランジション・レジスタ（Current Transition Register）の初期化（カウント値ｔ＝０）が行われる（ステップ８０１）。このカレント・トランジション・レジスタとは、どのトランジションに対して処理を行うかを示すカウンタであり、この例では、各ステート間のトランジションに対して順番に以下の判定を行うため、初期化を実行している。初期化処理の完了後、当該トランジションに対応するイベントの発生有無の判定（ステップ８０２）が実行される。この判定処理は、対象となるトランジションｔをトリガするイベントの発生有無を判定するものである。具体的には、ＰＬＣ１０のＣＰＵユニット１００がＩ／Ｏリフレッシュにて取り込んだ入力装置１１の状態変化が、プログラミングツール２０のＩ／Ｏマップエディタ２２により予め関連付けて設定されたステートチャート上の各イベント条件のいずれかに合致するかどうかを判定する。判定の結果、イベントが発生していれば（ステップ８０２，ＹＥＳ）、続いてコンディションの成否判定（ステップ８０３）が実行される。このコンディションは先に説明したように、対象となるトランジションｔを遷移させるための条件である。コンディションの成否判定は、具体的には、その成否判定時点でのStateにとって、判定されたイベント発生が、トランジションの遷移候補リスト（一例として図６）にあるかどうかを判定する処理である。
【００４１】
そして、上記イベントの発生に加え、コンディションも成立していると判定されれば（ステップ８０３，ＹＥＳ）、当該トランジションｔをトランジション候補として遷移候補リストに加える処理が行われ（ステップ８０４）、続いて遷移評価していないトランジションは存在していないかどうかの判定（ステップ８０５）が実行される。
【００４２】
ここでトランジションｔの遷移候補リストへの追加が行われる。
【００４３】
図８のステップ８０２のイベントの発生とステップ８０３のコンディション成立が両方成立していないとステップ８０４のトランジションｔの遷移候補リストへの追加は行われない。従って、イベントが発生していない場合（ステップ８０２，ＮＯ）やコンディションが成立していない場合（ステップ８０３，ＮＯ）は、トランジションｔは遷移候補リストに追加されず、続いて遷移評価していないトランジションの存在有無の判定が行われる（ステップ８０５）。ここで言う評価とは、先にステップ８０２，及びステップ８０３にて実行されるイベント発生の判定およびコンディション成立の判定を意味するものである。そして、遷移評価していないコンディションとは、全てのコンディションに対して上記の判定がなされていない、すなわち未処理のトランジションの存在を意味する。そのため、遷移評価していないトランジションがある場合（ステップ８０５，ＮＯ）、カレント・トランジション・レジスタのカウント値をカウントアップ（ｔ＋１）してステップ８０２に戻り上述の処理を次のトランジションに対して繰り返す。
【００４４】
それに対し、遷移評価していないトランジションが存在しない場合（ステップ８０５，ＹＥＳ）、全てのトランジションに対する判定が行われたことを意味し、トランジションｔが最大値（ｍａｘ）となる。
【００４５】
例えば、現時点のステートがState１だとする。図３のステートチャートから明らかなように、State１が活性状態だと、Event１が発生するとState２へ遷移するし、Event２が発生するとState３へ遷移するし、Event３が発生するとEnd Stateへと遷移する。ここで、入力発生イベント発生有無の判断がEvent１、Event２、Event３の条件をいずれも満たすという結果なら、イベントが複数同時に成立し、複数のトランジション候補が生じることとなる。このような場合、従来では背景技術に書いたような問題が生じていたことになる。しかし、本発明では次のように動作する。
【００４６】
ここで、現時点でのステートがState１だとして、予めState１に対して設定されているイベント条件のEvent１、Event２、Event３がいずれも満たされた場合を想定する。その場合、ステップ８０４において、Event１、Event２、Event３のそれぞれが遷移候補リストに追加される。その結果、遷移候補リストは図６のようになる。もし現時点でのステートがState１以外だと、別の遷移候補リストが生成されることになる。
【００４７】
図６の遷移候補リストにおいては、State１からState２へと遷移するトランジションがｔ＝０とされ、State１からState３へと遷移すると欄自尊がｔ＝２とされる。また、それぞれのイベントとトランジションの対には優先度が予め設定されているが、遷移候補リストにはその優先度の情報もリストアップされている。つまり、トランジションｔ＝０には優先度NORMALが対応していて、トランジションｔ＝１には優先度HIGHが対応していて、トランジションｔ＝２には優先度LOWが対応している。すなわち、これら３つのトランジション（ｔ＝０，ｔ＝１，ｔ＝２）においては、イベント発生とコンディションの成立が確認されている状態をリストに示す。
【００４８】
続いてトランジション候補が存在するかどうかの判定が実行される（ステップ８０７）。ここでの判定は、先に図６を参照して説明したトランジションの遷移候補リストに基づくものである。この遷移候補リストを参照し、トランジションがリストに存在すればトランジション候補が存在することを意味し、リストにトランジション候補がなければ、全てのトランジションにおいてイベントとコンディションを満たすトランジションが存在しないことを意味する。
【００４９】
ステップ８０５のトランジション候補有無の判定にて、トランジション候補が存在する場合（ステップ８０７，ＹＥＳ）、続いて、そのトランジション候補が複数存在するかどうかの判定が行われる（ステップ８０８）。ここで、トランジション候補が複数存在する場合（ステップ８０８，ＹＥＳ）、候補の中で最も高い優先度が設定されているトランジションへの遷移が決定される。
【００５０】
図６のトランジションの遷移候補リストに戻り、この例においては、Event１，Event２，及びEvent３の３つのイベントが発生していて、コンディションも満たしている状態、換言するとトランジション候補が複数（ｔ＝０，ｔ＝１，ｔ＝２）存在する状態、が示されている。そして、この遷移候補リストにおける３つのトランジションの遷移候補の中では、Event２のState３へ遷移するトランジションｔ＝１に最も高い優先度（HIGH)が設定されているため、このトランジションの遷移が決定される。当然であるが、ここで、仮に遷移候補リストにｔ＝０とｔ＝２の２つのトランジション候補のみが存在する場合、この２つのトランジションにおいては、ｔ＝０のState１からState２へのトランジションの優先度がより高く設定されているため、ｔ＝０のトランジション遷移が決定されることとなる。そして、State１からEnd Stateへのトランジションｔ＝２には、最も低い優先度（LOW)が設定されているため、他のトランジションにおける条件（イベント＋コンディション）が成立しておらす、トランジションｔ＝２のみが成立している場合においてのみこのトランジション遷移が決定される。
【００５１】
一方で、トランジション候補は存在するが（ステップ８０７，ＹＥＳ）、トランジション候補が複数存在しない場合（ステップ８０８，ＮＯ）とは、トランジション候補が一つだけ存在する状態を意味するので、その一つの遷移候補のトランジション遷移を決定する（ステップ８１０）。
【００５２】
続いて、上述のステップにおけるトランジションの遷移決定に従ってステート遷移を実行し（ステップ８１１）、そのステート遷移（トランジション）に伴うアクション及びアクティビティをＵＭ１０３を参照して実行する（ステップ８１２）。
【００５３】
ステップ８０７において、トランジション候補が存在しない場合（ステップ８０７，ＮＯ）は、トランジションの遷移条件であるイベントとコンディションの双方が成立したトランジションが存在しないことを意味し、ステート遷移は実行されず、アクション及びアクティビティも実行されない。
【００５４】
先に説明したように、ＰＬＣ１０のようなシーケンス制御にステートチャートによる状態遷移を適用した場合において、ＰＬＣ１０への入力装置１１からの信号はステートチャートのイベントとして適用され、ＰＬＣ１０では入力装置１１との信号のやり取りはサイクリックスキャンにより行うため、ステートチャートのモデルにおいてイベントが複数同時に、例えば図６で説明したようにイベントが３つ同時に、ＰＬＣ１０にて発生してしまうことが起こりえる。そして、本来ステートチャートでは一つのステートにおいて、複数のイベントが同時に発生することはないと想定されているが、上述のような構成とすることで、複数のイベントを同時に受信し、それらのイベントに伴うコンディションも満たされていてトランジションが複数同時に成立してしまうような場合においても、イベントに伴うトランジションごとに優先度が予め設定されているので、遷移するトランジションを一意的に決定し、決定されたトランジション遷移に伴うアクション及びアクティビティを実行することが可能となる。
【００５５】
そして、トランジションが複数同時に成立してしまうような場合においても、予め設定された優先度に基づいて、遷移するトランジションを一意的に決定できることにより、シーケンス制御にステートチャートモデルを適用することが可能となり、ステートチャートの特性である、複数の制御の纏まりをプログラム部品として扱えるオブジェクト思考で設計することができ、解りやすく、メンテナンスも容易となるという作用効果を得ることが可能となる。
【産業上の利用可能性】
【００５６】
以上の説明で明らかなように、本発明によれば、複数同時に発生するイベントを持つシステムの状態遷移モデルとして、１つのステートから遷移する複数のトランジションが同時に成立した場合に、遷移するトランジションを一意的に決定し、ステートチャートから作成されるプログラムを実行することが可能なＰＬＣを提供することが可能となる。
【図面の簡単な説明】
【００５７】
【図１】ＰＬＣのＣＰＵユニットのハードウェア構成を示すブロック図である。
【図２】ＰＬＣとプログラミングツールとの関係を説明するための図である。
【図３】ステートチャートの一例を示す図である。
【図４】状態遷移を表形式で示す図である。
【図５】ＵＭのメモリマップを示す図である。
【図６】トランジションの遷移候補リストの一例を示す図である。
【図７】ＰＬＣの処理を示すフローチャートである。
【図８】プログラム実行処理の詳細を示すフローチャート（その１）である。
【図９】プログラム実行処理の詳細を示すフローチャート（その２）である。
【符号の説明】
【００５８】
１０    ＰＬＣ
１１    入力装置
１２    出力装置
２０    プログラミングツール
２１    ステートチャートエディタ
２２    Ｉ／Ｏマップエディタ
２３    振る舞いエディタ
１００  ＣＰＵユニット
１０１  ＲＯＭ
１０２  ＭＰＵ
１０３  ＵＭ
１０３ａ  ステートチャート領域
１０３ｂ  アクション&アクティビティ領域
１０４  ワークＲＡＭ
１０５  データ格納用不揮発性メモリ
１０６  ＡＳＩＣ
１０７  ＩＯＭ
【図１】
2007133801.tif 000003
【図２】
2007133801.tif 000004
【図３】
2007133801.tif 000005
【図４】
2007133801.tif 000006
【図５】
2007133801.tif 000007
【図６】
2007133801.tif 000008
【図７】
2007133801.tif 000009
【図８】
2007133801.tif 000010
【図９】
2007133801.tif 000011