(57)【要約】【課題】命令追加時の手間を削減可能で、しかも、命令セットに用意する必要のある命令の数を削減可能な制御装置を実現する。【解決手段】デバイス制御部３２は、分岐点を示す分岐開始命令に到達すると、第１スタック４１に、パワーフローレジスタ３３の値を記憶すると共に、第２スタック４２に偽を示す値を記憶する。また、デバイス制御部３２は、分岐された枝の開始を示す分岐命令に到達すると、第２スタック４２に格納された値が、当該値とパワーフローレジスタ３３の値との論理和となるように、第２スタック４２に格納された値を更新すると共に、第１スタック４１に格納された値をパワーフローレジスタ３３に設定する。さらに、デバイス制御部３２は、分岐終了を示す分岐終了命令に到達すると、パワーフローレジスタ３３を、当該値と第２スタック４２に格納された値との論理和に設定する。【選択図】図１
2007122523.tif 000002
【特許請求の範囲】
【請求項１】
予め記憶された制御プログラムに従って、制御対象となるデバイスを制御する制御手段と、
上記制御プログラムをラダー図として図示した場合に命令に対応するラダー記号への入力信号の値を格納するためのレジスタとを備え、
上記制御手段が、上記制御プログラムを構成する命令シーケンスの各命令を実行する際、上記レジスタの値を参照すると共に、命令の実行に応じてレジスタの内容を更新する制御装置であって、
第１および第２記憶手段と、
上記制御プログラムを構成する命令シーケンスの中から、上記制御プログラムをラダー図として図示した場合に分岐された各枝の開始点となる、上記命令シーケンス上の位置、および、上記制御プログラムをラダー図として図示した場合に分岐された枝が合流する合流点となる、上記命令シーケンス上の位置を特定する分岐検出手段とを備え、
第１の条件を、次に実行しようとする命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初の枝の命令であることとし、
第２の条件を、次に実行しようとする命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初以外の枝の命令であることとし、
第３の条件を、次に実行しようとする命令が上記分岐検出手段により検出された枝の合流点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に合流点となるノードを出発点とする枝の命令であることとするとき、
上記制御手段は、上記第１の条件が成立した場合は、上記第１記憶手段に、その命令の実行前における上記レジスタの値を記憶すると共に、上記第２記憶手段に偽を示す値を記憶し、
上記制御手段は、上記第２の条件が成立した場合は、上記第２記憶手段に格納された値が、当該値と上記命令の実行前の上記レジスタの値との論理和となるように、上記第２記憶手段に格納された値を更新すると共に、上記第１記憶手段に格納された値を当該命令の実行前に上記レジスタの値として設定し、
上記制御手段は、上記第３の条件が成立した場合は、上記命令の実行前における上記レジスタの値を、当該値と上記第２記憶手段に格納された値との論理和に設定することを特徴とする制御装置。
【請求項２】
上記第１および第２記憶手段は、スタックであり、
上記第１または第２記憶手段に格納された値は、当該スタックのトップの値であり、
上記制御手段は、上記第１の条件が成立した場合、上記レジスタの値を上記第１記憶手段にプッシュすると共に、上記第２記憶手段に偽を示す値をプッシュし、
上記制御手段は、上記第３の条件が成立した場合、上記第１および第２記憶手段から、その値をポップして取得することを特徴とする請求項１記載の制御装置。
【請求項３】
分岐開始命令、分岐命令および分岐終了命令が規定されており、
上記分岐開始命令は、次に実行される命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初の枝の命令である場合に、当該命令の前に挿入される命令であり、
上記分岐命令は、次に実行される命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初以外の枝の命令である場合に、当該命令の前に挿入される命令であり、
上記分岐終了命令は、次に実行される命令が上記分岐検出手段により検出された枝の合流点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に合流点となるノードを出発点とする枝の命令である場合に、当該命令の前に挿入される命令であって、
上記分岐検出手段は、次に実行しようとする命令が、分岐開始命令であるか否か、分岐命令であるか否か、および、分岐終了命令であるか否かによって、開始点および合流点を検出すると共に、
上記制御手段は、次に実行しようとする命令が分岐開始命令であるか否か、分岐命令であるか否か、および、分岐終了命令であるか否かによって、上記第１、第２および第３の条件の成否を検出することを特徴とする請求項１または２記載の制御装置。
【請求項４】
請求項３記載の制御装置の制御プログラムを生成する制御プログラム生成装置であって、
制御プログラムをラダー図として図示した場合に分岐点および合流点があるときには、ラダー記号に対応する命令からなる命令シーケンスの途中に上記分岐開始命令、分岐命令および分岐終了命令が配置されるように、上記制御プログラムに対応する命令シーケンスを生成する生成手段を備え、
当該生成手段は、次に実行される命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初の枝の命令である場合に、当該命令の前に、上記分岐開始命令を挿入し、
上記生成手段は、次に実行される命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初以外の枝の命令である場合に、当該命令の前に、上記分岐命令を挿入し、
上記生成手段は、次に実行される命令が上記分岐検出手段により検出された枝の合流点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に合流点となるノードを出発点とする枝の命令である場合に、当該命令の前に、上記分岐終了命令を挿入することを特徴とする制御プログラム生成装置。
【請求項５】
請求項１、２または３記載の制御装置の各手段として、コンピュータを動作させるプログラム。
【請求項６】
請求項４記載の制御プログラム生成装置の各手段として、コンピュータを動作させるプログラム。
【請求項７】
請求項５または６記載のプログラムが記録された、コンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、予め記憶された制御プログラムに従って、制御対象となるデバイスを制御する制御装置、その制御プログラムを生成する制御プログラム生成装置、並びに、それらのプログラムおよび記録媒体に関するものである。
【背景技術】
【０００２】
従来から、例えば、後述する特許文献１のように、制御システムでは、ラダー図で表現可能なラダープログラムに基づいてデバイスを制御可能な制御装置（例えば、プログラマブル・ロジック・コントローラなど）が広く使用されている。
【０００３】
ここで、ラダー図は、例えば、図９に示すように、接点、コイル、図形で表された機能、その他の形式で表された機能、機能ブロック、これらに関連するデータ、ラベルなどからなる、１または、それ以上のネットワークを、入力側母線Ｌａと出力側母線Ｌｂとの間に記述したものであって、図９において、ラダー図として表記されるラダープログラムは、図１７に、ニモニック表記される命令シーケンスに翻訳されることが多い。なお、図９のラダープログラムは、ラダー記号Ｉ３１・Ｉ３３・Ｉ３７にそれぞれ対応するデバイスＤａ・Ｄｂ・Ｄｄが全てＯＮ状態であるか、ラダー記号Ｉ３１・Ｉ３５・Ｉ３７にそれぞれ対応するデバイスＤａ・Ｄｃ・Ｄｄが全てＯＮ状態であるか、あるいは、ラダー記号Ｉ３９に対応するデバイスＤｅがＯＮ状態であるかのいずれかの条件が満たされれば、ラダー記号Ｉ４１に対応するデバイスＹ０をＯＮ状態にするという手順を示しており、図１７は、そのうちのラダー記号Ｉ３１・Ｉ３３・Ｉ３５に対応する部分のみをニモニック表記している。
【０００４】
また、後述する特許文献２では、プログラムメモリＰＭ，データメモリＤＭ，論理演算部（ＬＵ，ＤＳ等）を有し、ＰＭから読み出したブール式の一部を形成する要素となるオペコードＯＰＣを演算制御信号で論理演算部の演算を進行させるプログラマブルコントローラの演算において、ブール式の“ＡＮＤ（”と“ＯＲ（”のＯＰＣが読み出されたとき、そのＯＰＣを一時待避記憶させるインストラクションスタックＩＳを設け、ＰＭにプログラミングツールから命令をブール式の並びのまま格納し、“ＡＮＤ（”と“ＯＲ（”のＯＰＣが読み出されたときＩＳに一時記憶し、その後ブール式の“）”が読み出されたときＩＳに記憶されたＯＰＣを読み出してＤＥＣ処理する。“）”命令が“ＡＮＤ（”と“ＯＲ（”のどちらに対する処理にすべきなのか認識し演算できる構成が開示されている。
【特許文献１】特開２００４−００５０６０号公報（公開日：2004年１月８日）
【特許文献２】特開平１１−２８８３０６号公報（公開日：1999年１０月１９日）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来の構成では、接続関係に応じて、異なるニモニックの命令に変換している。したがって、これと同様に、新しいラダー記号を追加しようとしたときに、接続関係毎に異なるニモニックを割り当てようとすると、命令数が増加すると共に命令追加時の手間が増加してしまうという問題を生じる。
【０００６】
具体的には、図９に示すラダー記号Ｉ３１、Ｉ３３およびＩ３５は、それぞれ接点を示す記号であって、ラダー記号の前後のパワーフロー（ラダー記号の前後における論理式の演算結果）だけ見ると、ラダー記号に対応する接点（デバイス）がＯＮ状態のときに、ラダー記号の前のパワーフローを、ラダー記号の後に伝達する点で、互いに共通している。
【０００７】
しかしながら、ラダー記号Ｉ３１は、入力側母線Ｌａに接続されているのに対して、ラダー記号Ｉ３３は、ラダー記号Ｉ３１に接続されており、ラダー記号Ｉ３５は、ラダー記号Ｉ３３に並列に配置されており、他の部材との接続関係が異なっている。
【０００８】
したがって、図１７では、各ラダー記号Ｉ３１、Ｉ３３およびＩ３５に対応する命令のオペコードは、”ＬＤ”、”ＬＤ”および”ＯＲ”のように互いに異なっている。なお、この例では、さらに、各ラダー記号Ｉ３１、Ｉ３３およびＩ３５の接続関係に応じた命令ＡＮＤＢも追加されている。
【０００９】
このように、図９に示すようなラダー図を、図１７にニモニックで表記された命令シーケンスに変換する際、ラダー記号の前後のパワーフローだけ見ると、互いに同じ動作を示すラダー記号であっても、接続関係に応じて、異なるニモニックの命令に変換している。したがって、これと同様に、新しいラダー記号を追加しようとしたときに、接続関係毎に異なるニモニックを割り当てようとすると、命令数が増加すると共に、命令追加時の手間が増加してしまう。なお、特許文献２の構成は、ブール式のまま評価することを目的としているため、上記問題を解決することができない。
【００１０】
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、命令追加時の手間を削減可能で、しかも、命令セットに用意する必要のある命令の数を削減可能な制御装置、および、その制御プログラム生成装置を実現することにある。
【課題を解決するための手段】
【００１１】
本発明に係る制御装置は、上記課題を解決するために、以下の構成を備えている。すなわち、予め記憶された制御プログラムに従って、制御対象となるデバイスを制御する制御手段と、上記制御プログラムをラダー図として図示した場合に命令に対応するラダー記号への入力信号の値を格納するためのレジスタとを備え、上記制御手段が、上記制御プログラムを構成する命令シーケンスの各命令を実行する際、上記レジスタの値を参照すると共に、命令の実行に応じてレジスタの内容を更新する。さらに、上記制御装置は、第１および第２記憶手段と、上記制御プログラムを構成する命令シーケンスの中から、上記制御プログラムをラダー図として図示した場合に分岐された各枝の開始点となる、上記命令シーケンス上の位置、および、上記制御プログラムをラダー図として図示した場合に分岐された枝が合流する合流点となる、上記命令シーケンス上の位置を特定する分岐検出手段とを備えている。
【００１２】
また、第１の条件を、次に実行しようとする命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノード（節点）から出発している枝のうち、上記命令シーケンス上で最初の枝の命令であることとするとき、上記制御手段は、上記第１の条件が成立した場合は、上記第１記憶手段に、その命令の実行前における上記レジスタの値を記憶すると共に、上記第２記憶手段に偽を示す値を記憶する。さらに、第２の条件を、次に実行しようとする命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初以外の枝の命令であることとするとき、上記制御手段は、上記第２の条件が成立した場合は、上記第２記憶手段に格納された値が、当該値と上記命令の実行前の上記レジスタの値との論理和となるように、上記第２記憶手段に格納された値を更新すると共に、上記第１記憶手段に格納された値を当該命令の実行前に上記レジスタの値として設定する。また、第３の条件を、次に実行しようとする命令が上記分岐検出手段により検出された枝の合流点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に合流点となるノードを出発点とする枝の命令であることとするとき、上記制御手段は、上記第３の条件が成立した場合は、上記命令の実行前における上記レジスタの値を、当該値と上記第２記憶手段に格納された値との論理和に設定する。
【００１３】
上記構成において、上記第１の条件が成立した場合、上記第１記憶手段には、その命令の実行前における上記レジスタの値が記憶され、第２の条件が成立した場合、上記レジスタには、上記第１記憶手段に格納された値が当該命令の実行前に設定される。したがって、制御プログラムをラダー図として図示した場合に、あるノードを出発点とする複数の枝の開始時点における上記レジスタの値は、当該複数の枝のうちの、いずれの枝の開始時点であっても、第１記憶手段に格納された値、すなわち、当該ノードを出発点とする枝のうち、命令シーケンス上で最初の枝の最初の命令を実行しようとするときの値に設定される。したがって、何ら支障なく、各枝の命令を実行することができる。
【００１４】
また、上記第１の条件が成立した場合に、上記第２記憶手段には、偽を示す値が記憶され、第２の条件が成立した場合、上記第２記憶手段に格納された値は、当該値と上記命令の実行前の上記レジスタの値との論理和となるように更新される。したがって、制御プログラムをラダー図として図示した場合に、あるノードを出発点とする複数の枝の開始時点における、上記第２記憶手段の値は、当該ノードを出発点とする複数の枝のうち、上記開始時点で既に実行が終了している枝の最後の命令実行後の時点における、上記レジスタの値の全てを論理和した値になる。
【００１５】
さらに、第３の条件が成立した場合、上記命令の実行前における上記レジスタは、当該値と上記第２記憶手段に格納された値との論理和に設定される。したがって、上記レジスタの値は、合流する各枝の終端における上記レジスタの値全てを論理和した値になる。
【００１６】
これらの結果、制御プログラムをラダー図として図示した場合にラダー図内に分岐があったとしても、制御装置は、何ら支障なく、各枝の命令を実行できる。
【００１７】
また、制御プログラムをラダー図として図示した場合の分岐点（分岐の開始点）および合流点の、命令シーケンスにおける位置は、分岐検出手段によって検出され、ラダー図上の分岐や合流の際に、上記各条件が成立しているか否かによって、上記レジスタの値が操作されている。
【００１８】
したがって、入力信号と出力信号との関係が互いに同一の処理に対して、分岐があるか否かに拘わらず、互いに同じ命令を割り当てたとしても、何ら支障なく、各命令を実行できる。この結果、新たな処理に対応する命令を追加する際の手間を削減すると共に、命令セットに用意する必要のある命令数を削減できる。
【００１９】
また、上記では、第２の条件が成立した場合、上記第２記憶手段に格納された値を、当該値と上記命令の実行前の上記レジスタの値との論理和となるように更新しているため、ラダー図において互いに同じノードから分岐する枝の数が増えたとしても、第２記憶手段に必要な記憶容量が増加しない。この結果、第２記憶手段の記憶領域の容量が制限されていたとしても、互いに同じノードから分岐する枝の数が制限されることを防止できる。
【００２０】
さらに、上記構成に加えて、上記第１および第２記憶手段は、スタックであり、上記第１または第２記憶手段に格納された値は、当該スタックのトップの値であり、上記制御手段は、上記第１の条件が成立した場合、上記レジスタの値を上記第１記憶手段にプッシュすると共に、上記第２記憶手段に偽を示す値をプッシュし、上記制御手段は、上記第３の条件が成立した場合、上記第１および第２記憶手段から、その値をポップして取得してもよい。
【００２１】
ここで、上記第１および第２記憶手段がレジスタの値または論理和を１つだけしか記憶できない構成では、その制御プログラムが、ラダー図として図示したときに、あるノードで分岐した枝が合流する前に、新たなノードで分岐が発生するような制御プログラムであった場合、第１記憶手段は、前の分岐点におけるレジスタの値を保持できなくなってしまい、第２記憶手段は、前の分岐点に対応する合流点に合流する各枝の演算結果を保持できなくなってしまう。
【００２２】
これに対して、上記各記憶手段がスタックである構成では、第１および第２記憶手段がスタックであり、上記制御手段が上記のように各記憶手段を制御するので、制御プログラムをラダー図として図示した場合に、分岐点および合流点と、他の分岐点および合流点とが入れ子構造になっていたとしても、何ら支障なく、上記レジスタの値および演算結果を操作できる。この結果、制御プログラムが上記入れ子構造であったとしても、何ら支障なく、各命令を実行できる。
【００２３】
さらに、上記構成に加えて、分岐開始命令、分岐命令および分岐終了命令が規定されており、上記分岐開始命令は、次に実行される命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初の枝の命令である場合に、当該命令の前に挿入される命令であり、上記分岐命令は、次に実行される命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初以外の枝の命令である場合に、当該命令の前に挿入される命令であり、上記分岐終了命令は、次に実行される命令が上記分岐検出手段により検出された枝の合流点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に合流点となるノードを出発点とする枝の命令である場合に、当該命令の前に挿入される命令であって、上記分岐検出手段は、次に実行しようとする命令が、分岐開始命令であるか否か、分岐命令であるか否か、および、分岐終了命令であるか否かによって、開始点および合流点を検出すると共に、上記制御手段は、次に実行しようとする命令が分岐開始命令であるか否か、分岐命令であるか否か、および、分岐終了命令であるか否かによって、上記第１、第２および第３の条件の成否を検出してもよい。
【００２４】
当該構成では、次に実行しようとする命令が分岐開始命令であるか否か、分岐命令であるか否かおよび分岐終了命令であるか否かによって、上記開始点であるか否か、合流点であるか否か、および、各条件の成否を検出できるので、分岐検出手段および制御手段の演算量を削減できる。
【００２５】
また、本発明に係る制御プログラム生成装置は、上記制御装置の制御プログラムを生成する制御プログラム生成装置であって、制御プログラムをラダー図として図示した場合に分岐点（分岐の開始点）および合流点があるときには、ラダー記号に対応する命令からなる命令シーケンスの途中に上記分岐開始命令、分岐命令および分岐終了命令が配置されるように、上記制御プログラムに対応する命令シーケンスを生成する生成手段を備え、当該生成手段は、次に実行される命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初の枝の命令である場合に、当該命令の前に、上記分岐開始命令を挿入し、上記生成手段は、次に実行される命令が上記分岐検出手段により検出された枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初以外の枝の命令である場合に、当該命令の前に、上記分岐命令を挿入し、上記生成手段は、次に実行される命令が上記分岐検出手段により検出された枝の合流点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に合流点となるノードを出発点とする枝の命令である場合に、当該命令の前に、上記分岐終了命令を挿入することを特徴としている。
【００２６】
当該構成に係る生成手段は、分岐開始命令、分岐命令および分岐終了命令を含む命令シーケンスを生成することによって、上記制御装置の分岐検出手段および制御手段に、上記開始点であるか否か、合流点であるか否か、および、各条件の成否を判定させているので、制御装置の分岐検出手段および制御手段の演算量を削減できる。
【００２７】
また、制御装置の制御手段は、上記分岐開始命令、分岐命令および分岐終了命令を含む命令シーケンスに従って、上述したようにレジスタ並びに第１および第２記憶手段を操作しているので、入力信号と出力信号との関係が互いに同一の処理に対して、分岐があるか否かに拘わらず、互いに同じ命令を割り当てたとしても、何ら支障なく、各命令を実行できる。この結果、新たな処理に対応する命令を追加する際の手間を削減すると共に、命令セットに用意する必要のある命令数を削減できる。さらに、第２記憶手段の記憶領域の容量が制限されていたとしても、互いに同じノードから分岐する枝の数が制限されることを防止できる。したがって、処理（命令）を追加する際の手間を余りかけずに、互いに同じノードから分岐する枝の数が緩和された制御装置を含む制御システムを構築できる。
【００２８】
ところで、上記制御装置および制御プログラム生成装置は、ハードウェアで実現してもよいし、プログラムをコンピュータに実行させることによって実現してもよい。具体的には、本発明に係るプログラムは、上記いずれかの制御装置の各手段として、コンピュータを動作させるプログラム、または、上記制御プログラム生成装置の各手段として、コンピュータを動作させるプログラムであり、本発明に係る記録媒体には、当該プログラムが記録されている。
【００２９】
これらのプログラムがコンピュータによって実行されると、当該コンピュータは、上記制御装置あるいは制御プログラム生成装置として動作する。したがって、上記制御装置あるいは制御プログラム生成装置と同様に、処理（命令）を追加する際の手間を余りかけずに、互いに同じノードから分岐する枝の数が緩和された制御装置を含む制御システムを構築できる。
【発明の効果】
【００３０】
本発明では、制御プログラムをラダー図として図示した場合の分岐点（分岐の開始点）および合流点の、命令シーケンスにおける位置は、分岐検出手段によって検出され、ラダー図上の分岐や合流の際に、上記各条件が成立しているか否かによって、上記レジスタの値が操作されている。
【００３１】
したがって、入力信号と出力信号との関係が互いに同一の処理に対して、分岐があるか否かに拘わらず、互いに同じ命令を割り当てたとしても、何ら支障なく、各命令を実行できる。この結果、新たな処理に対応する命令を追加する際の手間を削減すると共に、命令セットに用意する必要のある命令数を削減できる。
【発明を実施するための最良の形態】
【００３２】
本発明の一実施形態について図１ないし図１６に基づいて説明すると以下の通りである。すなわち、本実施形態に係る制御装置は、ラダープログラムを実行可能な制御装置であって、新たな動作を行うラダー記号に対応する命令を追加する際の手間を余り増加させることなく、分岐の数の制限を緩和可能な制御装置である。
【００３３】
以下では、上記制御装置の構成について説明する前に、制御装置を含む制御システムの概略構成および概略動作について簡単に説明する。すなわち、図１に示すように、本実施形態に係る制御システム１は、例えば、ベルトコンベアー式の自動組付機など、ターゲットシステム２のデバイス（制御対象）２ａを制御するために用いられている。
【００３４】
当該制御システム１には、上記デバイス２ａを制御する制御装置としてのＰＬＣ１１と、多くの場合、制御対象近傍に配されると共に、制御システム１のＨＭＩとして、デバイス２ａの状態を表示し、オペレータによるデバイス２ａへの操作を受け付けるプログラマブル表示器１２とを備えている。また、本実施形態に係るプログラマブル表示器１２は、詳細は後述するように、ＰＬＣとしての機能も備えており、それぞれに対応するＰＬＣ１１だけではなく、自らが制御するデバイス２ａにも直接接続されている。
【００３５】
さらに、本実施形態に係る制御システム１では、各プログラマブル表示器１２は、イーサネット（登録商標）などのＬＡＮ（ローカルエリアネットワーク）１３によって互いに接続されている。また、上記ＬＡＮ１３には、多くの場合、プログラマブル表示器１２よりも離れた場所から、制御システム１全体を管理する制御用ホストコンピュータ１４が接続されている。
【００３６】
なお、上記各プログラマブル表示器１２は、シリアルケーブルなどを介して、それぞれに対応するＰＬＣ１１と接続されている。また、図１では、説明の便宜上、ＬＡＮ１３にプログラマブル表示器１２が２台接続され、各プログラマブル表示器１２には、ＰＬＣ１１およびデバイス２ａがそれぞれ１台ずつ接続されると共に、各ＰＬＣ１１にデバイス２ａが１台接続されている場合を例示しているが、当然ながら、それぞれの接続台数は任意に設定できる。
【００３７】
また、デバイスは、デバイスアドレスや変数により特定可能で、しかも、状態を取得したり、制御（変更）できるものであれば、例えば、デバイス２ａ自体であってもよいし、例えば、ＰＬＣ１１やプログラマブル表示器１２の記憶装置など、制御システム１に設けられた記憶装置の一領域を示していてもよい。
【００３８】
ここで、上記制御システム１では、制御システム１に必須の構成であり、しかも、ＨＭＩとして動作するため、演算能力に余力のあるプログラマブル表示器１２が通信の大半を処理するように構成されている。さらに、各プログラマブル表示器１２は、自らに接続されているＰＬＣ１１の機種に固有の専用プロトコルと、ＬＡＮ１３での共通プロトコルとを変換して、他のプログラマブル表示器１２や制御用ホストコンピュータ１４と、ＰＬＣ１１との通信を中継する。なお、共通プロトコルと専用プロトコルとの間のプロトコル変換には、同じ指示に同じコードが割り当てられるように予め定められた共通のコマンドと上記共通のコマンドに対応するＰＬＣ１１固有のコマンドとの間の変換や、データやアドレスの表現方法の変換、デバイスアドレスと、当該デバイスアドレスに対応し、しかも、デバイスアドレスとは異なる値に設定可能な変数や変数の名称（変数名）との変換なども含まれる。
【００３９】
これにより、プログラマブル表示器１２および制御用ホストコンピュータ１４は、他のプログラマブル表示器１２に接続されているＰＬＣ１１の機種に拘らず、ＬＡＮ１３を介して共通のプロトコルで通信できる。この結果、互いに異なる機種のＰＬＣ１１の混在する制御システム１が比較的容易に実現されている。
【００４０】
上記プログラマブル表示器１２は、後述する画面データに基づいて、デバイスの状態を画面表示する際の動作や、画面への操作に応じてデバイスの状態を制御する際の動作を特定するものであって、ＰＬＣ１１と通信するＰＬＣ・ＩＦ部２１と、上記ＬＡＮ１３に接続するためのＬＡＮ・ＩＦ部２２と、例えば、液晶表示装置などからなるディスプレイ２３と、ディスプレイ２３の画面上に配されたタッチパネル２４と、上記各部材２１〜２４を制御するＨＭＩ処理部２５と、当該ＨＭＩ処理部２５によって参照され、上記画面データおよび後述する変数が格納される記憶部２６とを備えている。
【００４１】
上記画面データは、画面上の領域と、当該領域への表示や入力に対応するデバイスとの対応関係を示すタグを組み合わせて構成されている。本実施形態では、ＨＭＩ処理部２５が複数の単位画面を切り換え表示可能であり、上記タグは、当該タグが有効となる単位画面を示すファイル番号と、単位画面上で実行すべき動作内容を特定する事象名と、各事象毎に参照される参照情報とを含んでいる。
【００４２】
例えば、上記タグが所定の画面領域（表示座標範囲）へ所定のデバイスの状態に応じた部品図形を表示する表示タグの場合、上記参照情報には、表示座標範囲と、デバイスを特定可能な変数（後述）と、例えば、部品図形がスイッチの場合、ＯＮを示す図形のファイルおよびＯＦＦを示す図形のファイルなど、表示時に参照するファイル番号とが含まれる。さらに、タグが入力タグの場合、参照情報として、有効入力座標範囲と、入力結果が書き込まれるデバイスの変数とが含まれる。
【００４３】
また、記憶部２６には、変数のための領域（変数領域）が設けられており、当該変数領域には、図２に示すように、各変数について、変数の名称（変数名）と、変数に対応するデバイス２ａまたは内部メモリを特定するための情報（例えば、アドレスなど）と、変数の内容との組み合わせが記憶されている。なお、本実施形態では、変数に対応するデバイス２ａの機種に拘わらず、変数の内容を格納する際の表現方法（例えば、ワード長や符号の有無、あるいは、ＢＣＤ／２進表記など）が予め定められた表現方法に統一されており、変数が実在のデバイス２ａに対応する場合、記憶部２６には、実際の機種での表現方法も格納されている。この場合、ＨＭＩ処理部２５は、ＰＬＣ・ＩＦ部２１を介してデバイス２ａの状態を取得あるいは制御する際、表現方法を形式変換して、格納時の表現方法を統一する。
【００４４】
一方、上記ＨＭＩ処理部２５は、所定の時間間隔で、記憶部２６に格納された画面データから、ベース画面のファイル番号が、現在表示中のベース画面である表示タグを抽出する。さらに、ＨＭＩ処理部２５は、記憶部２６の変数領域を参照して、タグに対応する変数の内容を読み出し、内容に応じた部品図形をディスプレイ２３に表示する。ここで、ＰＬＣ・ＩＦ部２１に接続されたＰＬＣ１１により制御されるデバイス２ａに、上記変数が対応している場合、ＨＭＩ処理部２５は、ＰＬＣ・ＩＦ部２１によるＰＬＣ１１との通信によって、デバイス２ａの状態を取得し、上記変数の内容を当該状態に応じて更新している。これにより、ディスプレイ２３には、デバイス２ａの状態が表示される。
【００４５】
なお、変数が他のプログラマブル表示器１２に接続されたＰＬＣ１１によって制御されるデバイス２ａの場合、ＨＭＩ処理部２５は、ＬＡＮ・ＩＦ部２２、ＬＡＮ１３および他のプログラマブル表示器１２を介して当該ＰＬＣ１１と通信するなどして、デバイスの状態を取得し、それに応じて変数の内容を更新する。
【００４６】
また、タッチパネル２４への押し操作など、オペレータの入力操作を受け付けると、ＨＭＩ処理部２５は、上記画面データから、現在表示中のベース画面に対応し、当該入力操作にマッチする入力タグを検索すると共に、入力結果に応じて、タグに対応する変数の内容を更新する。さらに、ＨＭＩ処理部２５は、デバイス２ａの状態を取得する場合と略同様に、ＰＬＣ１１やプログラマブル表示器１２と通信するなどして、上記変数の内容に応じて、デバイス２ａの状態を制御させる。ここで、入力操作の後も、ＨＭＩ処理部２５は、デバイス２ａの状態を画面表示するので、操作結果が画面表示に反映される。
【００４７】
加えて、ＨＭＩ処理部２５は、例えば、他のプログラマブル表示器１２や制御用ホストコンピュータ１４など、ＬＡＮ１３に接続された機器から自らに接続されたＰＬＣ１１のデバイス２ａへの制御指示を受け取った場合や、これとは逆に、上記機器へ報告すべきデバイス２ａの状態を自らのＰＬＣ１１から受け取った場合には、上述したプロトコル変換によって、ＬＡＮ１３での通信、および、ＰＬＣ１１との通信の間を中継できる。
【００４８】
さらに、本実施形態に係るプログラマブル表示器１２は、ＰＬＣとしても動作するために、デバイス２ａに接続するためのＩＯ・ＩＦ部３１と、上記記憶部２６に格納されたラダープログラムに基づいて、ＩＯ・ＩＦ部３１に接続されたデバイス２ａを制御するデバイス制御部（制御手段；分岐検出手段）３２とを備えている。なお、本発明は、後述するようにＰＬＣ１１にも適用できるが、本実施形態では、当該ＰＬＣとしての機能を兼ねたプログラマブル表示器１２が、特許請求の範囲に記載の制御装置に対応する。
【００４９】
本実施形態に係るデバイス制御部３２は、ラダープログラムにおいて、制御対象を変数で特定可能なＰＬＣであって、例えば、数十ｍｓなど、予め定められた長さの走査期間（スキャンタイム）毎に、各デバイス２ａの状態を読み出し、各デバイス２ａに対応する変数の内容として、記憶部２６の変数領域に格納できる。
【００５０】
さらに、デバイス制御部３２は、記憶部２６の変数領域に格納された各変数の内容を参照しながら、記憶部２６に格納されたラダープログラムが示す各命令を順次実行できる。当該ラダープログラムは、図３に示すように、ラダー図として記述したり、図４に示すように、ニモニックで示された命令のシーケンスとしても記述したりできる。なお、図３および図４は、ラダー図として図示するか、あるいは、ニモニックで図示するかという表現方法は、互いに異なっているが、内容（手順）としては、互いに同じラダープログラムを示している。
【００５１】
本実施形態に係るラダープログラムでは、図４に、そのニモニック表記として示すように、各命令において、命令語Ｃ１１…で示される動作の対象（オペランド）を、変数で指定可能であり、命令が変数で示されたオペランドを含んでいる場合、デバイス制御部３２は、当該命令を実行する際、オペランドとして指定された変数の内容を参照したり、オペランドとして指定された変数の内容を更新したりできる。また、各命令では、オペランドとして、変数以外の値（定数、あるいは、アドレスなど）を指定することもでき、デバイス制御部３２は、当該命令を実行する際、当該値を参照したり、当該値で示されるアドレスの内容を参照したり、更新したりできる。なお、デバイス制御部３２が実行可能な命令セットには、オペランドを含まない命令が含まれていてもよい。
【００５２】
さらに、上記順次実行される命令の１つとして、エンド命令が実行されると、デバイス制御部３２は、ラダープログラムの実行を終了し、記憶部２６の変数領域に格納された各変数のうち、ＩＯ・ＩＦ部３１に接続されたデバイス２ａに対応する変数の内容を各デバイス２ａに書き込む。これにより、デバイス制御部３２は、ＰＬＣと同様に、ユーザが作成したラダープログラムに従い、デバイス２ａの状態に応じて各デバイス２ａを制御できる。
【００５３】
なお、上述したように、変数の内容を格納する際の表現方法は統一されており、デバイス制御部３２は、ＩＯ・ＩＦ部３１を介してデバイス２ａと通信する際、格納時の表現方法と通信時に使用する表現方法とを相互に形式変換している。
【００５４】
ここで、図３に示すように、ラダー図は、接点やコイル、カウンタなど、図形やその他の形式で表された機能ブロックとしてのラダー記号（Ｉ１１…）と、これらに関連するラベルとからなる１または複数のネットワーク（Ｌ１…）を、左右の母線（Ｌａ・Ｌｂ）内に記述した図であって、配置されているラダー記号の種類と、各ラダー記号の接続関係とによって、制御手順を図示できる。
【００５５】
上記ラダー図において、左の母線Ｌａは、入力側母線であり、右の母線Ｌｂは、出力側母線である。また、ラダー図では、入力側母線から入力されている信号（論理式の演算結果）は、高圧側の電源ラインから低圧側の電源ラインに両ラインを接続する信号線を介して電流が流れるように、左から右へ伝達しようとする。ただし、信号線上に設けられたスイッチのＯＮ／ＯＦＦによってスイッチ以降の信号線に電流が流れるか否かが制御されるように、左右の母線（Ｌａ・Ｌｂ）間を結ぶネットワークＬ１…上に設けられたラダー記号に対応するデバイスの状態によって、ラダー記号以降に信号が流れるか否か（ラダー記号直後の位置における論理式の演算結果）が制御される。
【００５６】
例えば、図３に示すラダー記号Ｉ１１およびＩ１３は、接点を示しており、接点がＯＮであれば、すなわち、各ラダー記号Ｉ１１およびＩ１３に対応するデバイスがＯＮ状態であれば、次に配置されたラダー記号（図３の例では、ラダー記号Ｉ１５）に信号を伝えることを示している。一方、ラダー記号Ｉ１５は、出力を示しており、前から信号が伝えられた場合に、予め定められた出力動作として、ラダー記号Ｉ１５に対応するデバイスをＯＮ状態にすることを示している。
【００５７】
これにより、図３に示すラダー図によって、以下の手順、すなわち、ラダー記号Ｉ１１に対応するデバイス（図４に示す命令Ｃ１１では、デバイスＤａと図示）がＯＮ状態であるか、あるいは、ラダー記号Ｉ１３に対応するデバイス（図４に示す命令Ｃ１３では、デバイスＤｂと図示）がＯＮ状態であれば、ラダー記号Ｉ１５に対応するデバイス（図４に示す命令Ｃ１５では、デバイスＹ０と図示）をＯＮ状態にするという手順を記述できる。
【００５８】
一方、図４は、図３では、ラダー図として記載していたラダープログラムを、ニモニックとして記載したものであり、各ラダー記号Ｉ１１、Ｉ１３およびＩ１５に、それぞれ対応する命令Ｃ１１、Ｃ１３およびＣ１５が記述されている。
【００５９】
さらに、本実施形態では、例えば、図４に示す命令Ｃ１０、Ｃ１２およびＣ１４に示すように、分岐開始命令（ＢＳ）と、分岐終了命令（ＢＥ）と、分岐命令（Ｂ）とが定義されており、命令Ｃ１０〜Ｃ１５のシーケンスによって図３と同じ手順が記述されている。
【００６０】
分岐開始命令ＢＳは、例えば、図３に示すノードＮ１１のように、ラダー図における信号の流れが分岐することを示す命令であって、当該分岐開始命令ＢＳは、図４に示す命令Ｃ１０のように、命令のシーケンスＣ１０〜Ｃ１５において、以下の位置、すなわち、分岐点の直後に配置されたラダー記号であって、分岐しない方の枝に配置されたラダー記号に対応する命令の直前の位置に配置される。なお、分岐しない方の枝か、分岐している枝かは、それぞれの枝に配置されているラダー記号に対応する命令が、上記命令シーケンスにおいて、より前に位置するか否かで決定され、分岐しない方の枝に配置されたラダー記号に対応する命令は、分岐している枝に配置されているラダー記号に対応する命令よりも、上記命令シーケンスにおいて前（実行順で前）に配置されている。
【００６１】
例えば、図３のラダー図では、ノードＮ１１の直後には、ラダー記号Ｉ１１およびＩ１３が配置されており、これらのラダー記号Ｉ１１・Ｉ１３のうち、分岐しない方の枝Ｂ１１に配置されているのは、ラダー記号Ｉ１１である。したがって、図４に示すラダープログラムでは、ノードＮ１１に対応する分岐開始命令ＢＳは、ラダー記号Ｉ１１に対応する命令Ｃ１１の直前に配置された命令Ｃ１０として記述されている。
【００６２】
一方、分岐終了命令ＢＥは、例えば、図３に示すノードＮ１２のように、ラダー図における信号の流れの分岐が終了することを示す命令であって、当該分岐終了命令ＢＥは、図４に示す命令Ｃ１４のように、命令シーケンスＣ１０〜Ｃ１５において、以下の位置、すなわち、合流点（分岐の終了点）の直前に配置されたラダー記号であって、複数の信号が合流している場合には、最後に合流する枝（最も下に配置された枝）に配置されたラダー記号に対応する命令の直後に配置される。なお、最後に合流する枝か否かは、それぞれの枝に配置されているラダー記号に対応する命令が、上記命令シーケンスにおいて、より後に位置するか否かで決定され、最後に合流する枝に配置されたラダー記号に対応する命令は、他の枝に配置されているラダー記号に対応する命令よりも、上記命令シーケンスにおいて後（実行順で後）に配置されている。
【００６３】
例えば、図３のラダー図では、ノードＮ１２の直前には、ラダー記号Ｉ１１およびＩ１３が配置されており、これらのラダー記号Ｉ１１・Ｉ１３のうち、最後に合流する枝に配置されているのは、ラダー記号Ｉ１３である。したがって、図４に示すラダープログラムでは、ノードＮ１２に対応する分岐終了命令ＢＥは、ラダー記号Ｉ１３に対応する命令Ｃ１３の直後に配置された命令Ｃ１４として記述されている。
【００６４】
さらに、分岐命令Ｂは、分岐点によって分岐された枝が終了し次に分岐された枝が開始することを示す命令である。当該分岐命令Ｂは、分岐開始命令ＢＳと分岐終了命令ＢＥとの間（実行順で間）に配置されており、分岐開始命令ＢＳの示す分岐点によって分岐された枝において、最初のラダー記号に対応する命令の直前に配置されている。なお、分岐開始命令ＢＳから始める分岐は、分岐終了命令ＢＥで終了し、分岐開始命令ＢＳの数と分岐終了命令ＢＥの数とは同数になっている。また、分岐命令Ｂは、分岐開始命令ＢＳと分岐終了命令ＢＥとの間で使用されるが、使用個数は、後述するように特に制限されていない。
【００６５】
例えば、図３のラダー図では、ノードＮ１１によって、分岐された枝Ｂ１３が開始されており、当該枝Ｂ１３では、最初にラダー記号Ｉ１３が配置されている。したがって、図４に示すラダープログラムでは、ノードＮ１１によって分岐された枝Ｂ１３に対応する分岐命令Ｂは、ラダー記号Ｉ１３に対応する命令Ｃ１３の直前に配置された命令Ｃ１２として記述されている。
【００６６】
一方、本実施形態に係るプログラマブル表示器１２には、各命令の実行時点におけるパワーフロー（ラダー記号の、その命令に対応する位置における論理式の演算結果）を格納するパワーフローレジスタ（レジスタ）３３が設けられており、プログラマブル表示器１２のデバイス制御部３２は、ラダープログラム中の各ラダー命令に対応する命令を処理する際、パワーフローレジスタ３３の内容が”真”であれば、その命令の示す動作を実行すると共に、その命令に応じてパワーフローレジスタ３３の内容を更新できる。なお、パワーフローレジスタ３３の内容が”偽”の場合、デバイス制御部３２は、その命令を実行せず、次の命令の処理を開始する。また、デバイス制御部３２は、ネットワークの終了時点、あるいは、ネットワークの開始時点で、パワーフローレジスタ３３の内容を”真”に設定できる。これにより、ラダー図において入力側母線Ｌａからネットワークが分岐した箇所におけるパワーフローレジスタ３３の内容は、”真”に設定される。なお、本実施形態に係るデバイス制御部３２は、例えば、ラダープログラム中に配置された、ネットワーク（例えば、Ｌ１）の開始を示す命令によって、ネットワークの開始を検出し、パワーフローレジスタ３３の内容を”真”に設定している。
【００６７】
さらに、本実施形態に係るプログラマブル表示器１２には、ＯＲ回路回指示の導通とＯＲ回路の分岐中の導通状態とを保持するための第１スタック（第１記憶手段）４１および第２スタック（第２記憶手段）４２が設けられており、プログラマブル表示器１２のデバイス制御部３２は、これらのスタック４１および４２を用いて、上記分岐に関連する命令ＢＳ、ＢＥおよびＢを処理している。
【００６８】
具体的には、デバイス制御部３２は、分岐開始命令ＢＳを実行する際、直前のパワーフロー（命令ＢＳに対応する分岐点における論理式の演算結果）を、第１スタック４１にプッシュ（ＰＵＳＨ）すると共に、第２スタック４２に、ＯＦＦを示す値（偽の論理値）をプッシュできる。
【００６９】
なお、本実施形態では、一例として、上記各スタック４１・４２は、図示しない記憶装置（メモリなど）に設けられたスタック領域と、当該スタック領域のうちのいずれかを指し示すスタックカウンタと、それらを参照して動作するプログラムによって実現された制御部（いずれも図示せず）とによって実現されている。当該制御部は、上記スタック領域の記憶領域のうち、スタックカウンタの示す記憶領域に上記プッシュする値を書き込むと共に、スタックカウンタをインクリメントすることによって、当該値をプッシュしている。また、上記制御部は、上記スタック領域の記憶領域のうち、スタックカウンタの示す記憶領域から値を読み出し、当該値をポップ（ＰＯＰ）された値として出力すると共に、スタックカウンタをデクリメントすることによって、各スタック４１・４２から値をＰＯＰできる。なお、第１および第２スタック４１・４２のスタック領域へアクセスする際、スタックカウンタに互いに異なるオフセットを加えてアクセスすることによって、第１および第２スタック４１・４２のスタックカウンタを共有してもよい。
【００７０】
一方、上記デバイス制御部３２は、分岐終了命令ＢＥを実行する際、第２スタック４２からポップした値と、上記パワーフローレジスタ３３に格納されている現在のパワーフロー（分岐終了命令ＢＥの直前の命令の実行後の時点における論理式の演算結果）との論理和を取ることができる。さらに、当該論理和と、第１スタック４１からポップした値との論理積を取り、その結果を、分岐終了命令ＢＥの実行終了時におけるパワーフローとして、上記パワーフローレジスタ３３に格納することができる。
【００７１】
さらに、デバイス制御部３２は、分岐命令Ｂを実行する際、第２スタック４２のスタックトップの値とパワーフローレジスタ３３に格納されている値との論理和を、第２スタック４２のスタックトップに格納できる。また、分岐命令Ｂを実行する際、デバイス制御部３２は、第１スタック４１のスタックトップの値をパワーフローレジスタ３３に格納できる。なお、第１スタック４１は、スタックトップの値が参照されているだけであり、ポップされているのではないので、分岐命令Ｂの実行時には、第１スタック４１のスタックトップの値は変化しない。
【００７２】
本実施形態に係るデバイス制御部３２は、一例として、第２スタック４２よりポップした値とパワーフローレジスタ３３の値との論理和を計算すると共に当該論理和を第２スタック４２にプッシュすることによって、上記論理和を、第２スタック４２のスタックトップに格納している。
【００７３】
一例として、図３および図４に示すラダープログラムを実行した場合に、各命令の実行直後の時点における、各スタック４１・４２の状態とパワーフローレジスタ３３の値とは、図５に示すように変化する。なお、図５および後述の図８および図１１は、各命令の実行後の各スタック４１・４２の状態と、パワーフローレジスタ３３の値とを示している。また、これらの図では、例えば、命令Ｃ１０の実行後のパワーフローレジスタ３３の値ＰＦ１０のように、各命令実行後のパワーフローレジスタ３３の値を、命令を示す参照符号に付された番号と同番号を参照符号”ＰＦ”に付して説明している。また、各命令Ｃ１０〜Ｃ１５の実行前のパワーフローレジスタ３３の値を”ＰＦ０”で参照している。さらに、これらの図では、例えば、デバイスＤａの状態をＤａのように、デバイスの状態をデバイスの参照符号で示しており、各デバイスの状態がＯＮのとき、その値が”真”になる。なお、命令Ｃ１５は、その実行結果によって、各スタック４１・４２の状態とパワーフローレジスタ３３の値とに影響を及ぼさないので、図５では、図示を省略している。
【００７４】
ここで、命令Ｃ１４実行後におけるパワーフローレジスタ３３の値ＰＦ１４は、（ＰＦ１３  ｏｒ  ＰＦ１１）  ａｎｄ  ＰＦ０）となり、値ＰＦ１１およびＰＦ１３は、それぞれ、（ＰＦ０  ａｎｄ  Ｄａ）および（ＰＦ０  ａｎｄ  Ｄｂ）である。また、図３のラダープログラムでは、命令Ｃ１０に対応するノードＮ１１は、入力側母線Ｌａに接続されているので、命令Ｃ１０の実行前におけるパワーフローレジスタ３３の値ＰＦ０は、”真”である。したがって、命令Ｃ１４実行後におけるパワーフローレジスタ３３の値ＰＦ１４は、デバイスＤａの状態がＯＮであるか、デバイスＤｂの状態がＯＮの場合に、”真”となる。この結果、デバイス制御部３２は、命令Ｃ１０〜Ｃ１５を実行することによって、図３のラダープログラムが示す処理、すなわち、各デバイスＤａ・ＤｂのいずれがＯＮしている場合に、デバイスＹ０をＯＮ状態にする処理を実行できる。
【００７５】
続いて、図６〜図８を参照しながら、他のラダープログラムを実行した場合におけるプログラマブル表示器１２の動作について説明する。なお、図６および図７は、図３および図４と同様に、ラダープログラムをラダー図、あるいは、ニモニックで表示したものであり、図８は、そのラダープログラムの各命令を実行した時点における、各スタック４１・４２の状態、並びに、パワーフローレジスタ３３の値を示している。
【００７６】
すなわち、図６に示すラダー図には、図３に示すラダー記号Ｉ１１・Ｉ１３・Ｉ１５と同様に接続されたラダー記号Ｉ２１・Ｉ２３・Ｉ２７が設けられており、図３に示すノードＮ１１・Ｎ１２と同様のノードＮ２１・Ｎ２２と、図３に示す枝Ｂ１１・Ｂ１３と略同様のＢ２１〜Ｂ２が形成されている。
【００７７】
さらに、図６に示すラダー図では、ラダー記号Ｉ２１と並列に、接点を示すラダー記号Ｉ２５が配置されており、ノードＮ２１から、枝Ｂ２３だけではなく、枝Ｂ２５も分岐している。また、ラダー記号Ｉ２７が、その上に形成された枝Ｂ２７は、ラダー記号Ｉ２３が形成された枝Ｂ２３と同様に、ノードＮ２２において、ラダー記号Ｉ２１が形成された枝Ｂ２１と合流している。なお、図７に示すように、上記各ラダー記号Ｉ２１・Ｉ２３・Ｉ２５・Ｉ２７には、デバイスＤａ・Ｄｂ・Ｄｃ・Ｙ０がそれぞれ対応している。
【００７８】
このように、図６に示すラダー図では、ラダー記号Ｉ２１に対応するデバイスＤａ、ラダー記号Ｉ２３に対応するデバイスＤｂ、および、ラダー記号Ｉ２５に対応するデバイスＤｃの少なくとも１つがＯＮ状態であれば、ラダー記号Ｉ２７に対応するデバイスＹ０をＯＮ状態にするという手順が記述されている。
【００７９】
この場合、ノードＮ２１が分岐点、ノードＮ２２が合流点であり、枝Ｂ２３の最初のラダー記号がラダー記号Ｉ２３、枝Ｂ２５の最初のラダー記号がラダー記号Ｉ２５なので、ニモニック表記したラダープログラムは、図７に示すようになる。具体的には、図７に示す命令シーケンスでは、ラダー記号Ｉ２１に対応する命令Ｃ２１の前に、分岐開始命令Ｃ２０が配され、ラダー記号Ｉ２３およびＩ２５に対応する命令Ｃ２３およびＣ２５の前に、それぞれ、分岐命令Ｃ２２およびＣ２４が配されている。また、上記命令Ｃ２５の後には、分岐終了命令Ｃ２６が配され、その後に、ラダー記号Ｉ２７に対応する命令Ｃ２７が配置されている。そして、命令Ｃ２０からＣ２７までのシーケンスによって、図６に示すラダープログラムが表現されている。
【００８０】
ここで、図６および図７に示すラダープログラムを実行した場合に、各命令の実行直後の時点における、各スタック４１・４２の状態とパワーフローレジスタ３３の値とは、図８に示すように変化する。なお、命令Ｃ２７は、その実行結果によって、各スタック４１・４２の状態とパワーフローレジスタ３３の値とに影響を及ぼさないので、図８では、図示を省略している。
【００８１】
図８に示すように、命令Ｃ２６実行後におけるパワーフローレジスタ３３の値ＰＦ２６は、（（（ＰＦ２１  ｏｒ  ＰＦ２３）  ｏｒ  ＰＦ２５）  ａｎｄ  ＰＦ０）となっており、値ＰＦ２１、ＰＦ２３およびＰＦ２５、それぞれ、（ＰＦ０  ａｎｄ  Ｄａ）、（ＰＦ０  ａｎｄ  Ｄｂ）および（ＰＦ０  ａｎｄ  Ｄｃ）である。また、図６のラダープログラムでは、命令Ｃ２０に対応するノードＮ２１は、入力側母線Ｌａに接続されているので、命令Ｃ２０の実行前におけるパワーフローレジスタ３３の値ＰＦ０は、”真”である。したがって、命令Ｃ２６実行後におけるパワーフローレジスタ３３の値ＰＦ２６は、デバイスＤａ、ＤｂおよびＤｃの状態の少なくとも１つがＯＮの場合に、”真”となる。この結果、デバイス制御部３２は、命令Ｃ２０〜Ｃ２７を実行することによって、図６のラダープログラムが示す処理、すなわち、各デバイスＤａ・Ｄｂ・Ｄｃの少なくとも１つがＯＮしている場合に、デバイスＹ０をＯＮ状態にする処理を実行できる。
【００８２】
さらに他の例として、図９〜図１１を参照しながら、別のラダープログラムを実行した場合におけるプログラマブル表示器１２の動作について説明する。なお、図９および図１０は、図３および図４と同様に、ラダープログラムをラダー図、あるいは、ニモニックで表示したものであり、図１１は、そのラダープログラムの各命令を実行した時点における、各スタック４１・４２の状態、並びに、パワーフローレジスタ３３の値を示している。
【００８３】
すなわち、図９に示すラダー図において、入力側母線Ｌａは、ラダー記号Ｉ３１、Ｉ３３、Ｉ３７およびＩ４１を介して、出力側母線Ｌｂに接続されている。これらのラダー記号のうち、ラダー記号Ｉ３１、Ｉ３３およびＩ３７、並びに、後述するラダー記号Ｉ３５およびＩ３９は、図３に示すラダー記号Ｉ１１と同様に接点を示しており、ラダー記号Ｉ４１は、図３に示すラダー記号Ｉ１５と同様に出力を示すラダー記号である。また、図１０に示すように、上記各ラダー記号Ｉ３１・Ｉ３３・Ｉ３５・Ｉ３７・Ｉ３９・Ｉ４１には、デバイスＤａ・Ｄｂ・Ｄｃ・Ｄｄ・Ｄｅ・Ｙ０がそれぞれ対応している。
【００８４】
また、ラダー記号Ｉ３３に並列に、ラダー記号Ｉ３５が配置されており、ラダー記号Ｉ３１およびＩ３３の間のノードＮ３２において分岐した枝Ｂ３５は、当該ラダー記号Ｉ３５を介して、上記ラダー記号Ｉ３３およびＩ３７の間のノードＮ３３で、分岐しない方の枝Ｂ３２（その上にラダー記号Ｉ３３が配置されている枝）に合流している。
【００８５】
さらに、図９に示すラダー図では、上記ラダー記号Ｉ３１、Ｉ３３およびＩ３７に並列に、ラダー記号Ｉ３９が配置されており、ラダー記号Ｉ３１と入力側母線Ｌａとの間のノードＮ３１において分岐した枝Ｂ３６は、当該ラダー記号Ｉ３９を介して、上記ラダー記号Ｉ３７およびＩ４１の間のノードＮ３４で、上記ラダー記号Ｉ３７が配置されている枝Ｂ３３に合流している。
【００８６】
このように、図９に示すラダー図では、ラダー記号Ｉ３１・Ｉ３３・Ｉ３７にそれぞれ対応するデバイスＤａ・Ｄｂ・Ｄｄが全てＯＮ状態であるか、ラダー記号Ｉ３１・Ｉ３５・Ｉ３７にそれぞれ対応するデバイスＤａ・Ｄｃ・Ｄｄが全てＯＮ状態であるか、あるいは、ラダー記号Ｉ３９に対応するデバイスＤｅがＯＮ状態であるかのいずれかの条件が満たされれば、ラダー記号Ｉ４１に対応するデバイスＹ０をＯＮ状態にするという手順が記述されている。
【００８７】
この場合、ノードＮ３１およびＮ３２が分岐点、ノードＮ３３およびＮ３４が合流点になる。また、分岐した枝Ｂ３５の最初のラダー記号がラダー記号Ｉ３５であり、分岐した枝Ｂ３６の最初のラダー記号がラダー記号Ｉ３９である。したがって、図９に示すラダープログラムをニモニック表記すると、図１０に示すようになる。
【００８８】
具体的には、図１０に示す命令シーケンスでは、ラダー記号Ｉ３１に対応する命令Ｃ３１およびラダー記号Ｉ３３に対応する命令Ｃ３３の前に、分岐開始命令Ｃ３０およびＣ３２がそれぞれ配されている。また、ラダー記号Ｉ３５およびＩ３９に対応する命令Ｃ３５およびＣ３９の前に、それぞれ、分岐命令Ｃ３４およびＣ３８が配されている。また、上記命令Ｃ３５およびＣ３９の後には、それぞれ分岐終了命令Ｃ３６およびＣ４０が配され、命令Ｃ４０の後に、ラダー記号Ｉ４１に対応する命令Ｃ４１が配置されている。そして、命令Ｃ３０からＣ４１までのシーケンスによって、図９に示すラダープログラムが表現されている。
【００８９】
ここで、図９および図１０に示すラダープログラムを実行した場合に、各命令の実行直後の時点における、各スタック４１・４２の状態とパワーフローレジスタ３３の値とは、図１１に示すように変化する。なお、命令Ｃ４１は、その実行結果によって、各スタック４１・４２の状態とパワーフローレジスタ３３の値とに影響を及ぼさないので、図１１では、図示を省略している。
【００９０】
図１１に示すように、命令Ｃ３９実行後におけるパワーフローレジスタ３３の値ＰＦ３９は、（（ＰＦ３７  ｏｒ  ＰＦ３９）  ａｎｄ  ＰＦ０）となっており、値ＰＦ３９は、（ＰＦ０  ａｎｄ  Ｄｅ）である。また、値ＰＦ３７は、（ＰＦ３６  ａｎｄ  Ｄｄ）＝（（（ＰＦ３５  ｏｒ  ＰＦ３３）  ａｎｄ  ＰＦ３１）  ａｎｄ  Ｄｄ）＝（（（（ＰＦ３１  ａｎｄ  Ｄｃ）  ｏｒ  （ＰＦ３１  ａｎｄ  Ｄｂ））  ａｎｄ  ＰＦ３１）  ａｎｄ  Ｄｄ）＝（（（（（ＰＦ０  ａｎｄ  Ｄａ）  ａｎｄ  Ｄｃ）  ｏｒ  （（ＰＦ０  ａｎｄ  Ｄａ）  ａｎｄ  Ｄｂ））  ａｎｄ  （ＰＦ０  ａｎｄ  Ｄａ））  ａｎｄ  Ｄｄ）となる。また、図９のラダープログラムでは、命令Ｃ３０に対応するノードＮ２１は、入力側母線Ｌａに接続されているので、命令Ｃ３０の実行前におけるパワーフローレジスタ３３の値ＰＦ０は、”真”である。
【００９１】
したがって、命令Ｃ３９実行後におけるパワーフローレジスタ３３の値ＰＦ３９は、（（（（（Ｄａ  ａｎｄ  Ｄｃ）  ｏｒ  （Ｄａ  ａｎｄ  Ｄｂ））  ａｎｄ  Ｄａ）  ａｎｄ  Ｄｄ）  ｏｒ  Ｄｅ）となり、デバイスＤｅがＯＮ状態であるか、デバイスＤａ、ＤｃおよびＤｄの全てがＯＮ状態であるか、あるいは、デバイスＤａ、ＤｂおよびＤｄの全てがＯＮ状態であるかのいずれかの条件が成立した場合、”真”となる。この結果、デバイス制御部３２は、命令Ｃ３０〜Ｃ４１を実行することによって、図９のラダープログラムが示す処理、すなわち、デバイスＤａ・Ｄｂ・Ｄｄが全てＯＮ状態であるか、デバイスＤａ・Ｄｃ・Ｄｄが全てＯＮ状態であるか、あるいは、デバイスＤｅがＯＮ状態であるかのいずれかの条件が満たされれば、デバイスＹ０をＯＮ状態にするという処理を実行できる。
【００９２】
ところで、上記ラダープログラムは、例えば、図１に示すラダープログラムエディタ装置１５など、ラダープログラムを生成可能な制御プログラム生成装置によって生成され、プログラマブル表示器１２は、ラダープログラムの実行前に、例えば、一時的に接続されたラダープログラムエディタ装置１５からの通信、あるいは、ラダープログラムエディタ装置１５によってラダープログラムが書き込まれた記録媒体からの読み出しなどによって、ラダープログラムを取得し、記憶部２６に格納する。なお、例えば、制御用ホストコンピュータ１４など、ＬＡＮ１３に接続された機器がラダープログラムの生成機能を有している場合、プログラマブル表示器１２は、当該機器とＬＡＮ１３経由で通信してラダープログラムを取得してもよいし、プログラマブル表示器１２自体がラダープログラムの生成／編集機能を有している場合は、プログラマブル表示器１２がユーザからの指示に応じて、記憶部２６のラダープログラムを修正したり、新規にラダープログラムを生成したりして、修正／生成されたラダープログラムを記憶部２６に格納してもよい。
【００９３】
上記ラダープログラムエディタ装置１５は、例えば、図１２に示すように、ユーザの操作に応じて、予め格納されたラダープログラムを修正したり、新規作成したりして、ラダープログラムをプログラミングし、新たなラダープログラムを生成するプログラムエディタ５１と、上記プログラムエディタ５１の生成したラダープログラムを格納する記憶部５２とを備えている。また、図１に示すラダープログラムエディタ装置１５は、一例として、プログラマブル表示器１２と通信してラダープログラムを伝送する構成であり、記憶部５２に格納されたラダープログラムを、これらプログラマブル表示器１２へ通信する通信処理部５３が設けられている。なお、記録媒体経由でラダープログラムを格納する場合は、通信処理部５３に代えて／加えて記録媒体に記憶部５２に格納されたラダープログラムを書き込む記録装置を設ければよい。
【００９４】
なお、上記各部材５１〜５３は、ＣＰＵなどの演算手段が、ＲＯＭやＲＡＭなどの記憶手段に格納されたプログラムを実行し、タッチパネルや液晶表示装置などの入出力手段、あるいは、インターフェース回路などの通信回路を制御することによって実現される機能ブロックである。また、これらの部材のうち、各記憶部５１ａ・５２（一部後述）は、ＲＯＭやＲＡＭなどの記憶装置自体であってもよい。したがって、これらの手段を有するコンピュータが、上記プログラムを記録した記録媒体（例えば、ＣＤ−ＲＯＭなど）を読み取り、当該プログラムを実行するだけで、本実施形態に係る作画エディタ装置１９を実現できる。なお、例えば、ＬＡＮ１３、あるいは、他の通信路を介してプログラムをダウンロードするためのプログラムが、上記コンピュータに予めインストールされていれば、これらの通信路を介して、上記コンピュータへ上記プログラムを配付することもできる。
【００９５】
上記プログラムエディタ５１は、ラダープログラムに対応する情報および当該ラダープログラムに対応するラダー図を示す情報が一時的に格納される作業用の記憶部５１ａと、ユーザの指示を受け付けて、当該記憶部５１ａの内容を書き換える編集処理部５１ｂと、編集処理部５１ｂによって編集される記憶部５１ａの内容を、ラダー図として、図示しないディスプレイに表示させる表示処理部５１ｃと、上記記憶部５２に格納されたラダープログラムを当該記憶部５１ａに展開したり、編集後の記憶部５１ａの内容に応じたラダープログラムを記憶部５２へ書き込むデータ入出力処理部（生成手段）５１ｄとを備えている。
【００９６】
ここで、上記ラダープログラムは、上述したように、ラダー図として図示することが可能であり、プログラムエディタ５１の編集処理部５１ｂは、例えば、配置可能なラダー記号の種類を示すパレットを表示し、パレット中のラダー記号の種類を選択して画面上に所望の種類のラダー記号を配置するようにユーザへ促す。また、編集処理部５１ｂは、ユーザによるラダー記号の配置操作を受け付けると、当該操作に応じて、編集中のラダー図が上記配置されたラダー記号を含むように、記憶部５１ａの内容を変更し、表示処理部５１ｃは、記憶部５１ａの内容に基づいて、当該ラダー記号を指定された座標に表示する。同様に、編集処理部５１ｂは、ユーザによるネットワークの配置操作を受け付けると、当該操作に応じて、編集中のラダープログラムが当該ネットワークを含むように、記憶部５１ａの内容を変更し、表示処理部５１ｃは、記憶部５１ａの内容に基づいて、当該ネットワークを指定された位置に表示できる。
【００９７】
さらに、編集処理部５１ｂは、ユーザのドラッグ＆ドロップなどの操作に応じて記憶部５１ａの内容を変更して、当該ラダー記号の表示座標範囲の値を調整し、表示処理部５１ｃは、変更後の位置にラダー記号を表示する。また、編集処理部５１ｂは、ラダー記号に関連するデバイスを特定するための情報としてアドレスや変数を入力するようにユーザへ促すと共に、入力されたアドレスや変数が当該ラダー記号に関連するように、記憶部５１ａの内容（より詳細には、ラダー記号に対応する命令のオペランドを示す情報）を変更し、表示処理部５１ｃは、ユーザの指示に応じて、各ラダー記号に関連付けられているアドレスや変数を表示できる。また、編集処理部５１ｂは、変数に対するデバイスアドレスの入力操作を受け付け、入力されたアドレスを示すように、記憶部５１ａの内容（より詳細には、当該変数に関連付けて記憶されるデバイスアドレスの値）を変更し、表示処理部５１ｃは、ユーザの指示に応じて、各変数に関連付けられているアドレスを表示してもよい。
【００９８】
これにより、本実施形態に係るプログラムエディタ５１は、以下の操作、すなわち、入力側母線Ｌａと出力側母線Ｌｂとの間にネットワークＬ１を配置する操作と、ネットワークＬ１上にラダー記号Ｉ１１およびＩ１５の配置する操作とを受け付けると、図１３に示すように、図１３に示すラダー図を表示できる。
【００９９】
さらに、上記編集処理部５１ｂは、ネットワーク上への分岐点の配置操作および合流点の配置操作をも受け付けることができ、これらの操作を受け付けると、当該操作に応じて、編集中のラダー図が当該分岐点および合流点を含むように、記憶部５１ａの内容を変更し、表示処理部５１ｃは、記憶部５１ａの内容に基づいて、分岐点および合流点を表示できる。
【０１００】
一例として、図１３に示す状態で、ラダー記号Ｉ１１の両端位置Ｐ１１ａ・Ｐ１１ｂの一方の選択操作（例えば、クリック操作など）を受け付けると、編集処理部５１ｂは、記憶部５２ａに格納されたデータを解析して、その位置を一端とする枝の他端になり得る点（例えば、その位置から分岐した枝が合流する可能性のある点、あるいは、その位置に合流する枝が分岐を開始する可能性のある点）を特定し、そのうちの少なくとも１つまでの枝を、例えば、破線などの形態で表示して、ユーザに確認する。本実施形態に係る編集処理部５１ｂは、一例として、最も可能性の高い枝（例えば、最も短い枝）を提示しており、例えば、図１３に示す位置Ｐ１１ａが選択されると、図１４に示すように、ラダー記号Ｉ１１とラダー記号Ｉ１５との間のノードへの枝を提示する。
【０１０１】
例えば、枝の他端の位置（Ｐ１１ｂ）の選択操作（例えば、クリック操作など）を受け付けると、編集処理部５１ｂは、ラダー記号Ｉ１１と入力側母線Ｌａとの間のノードＮ１１からラダー記号Ｉ１１とラダー記号Ｉ１５との間のノードＮ１２への枝Ｂ１３がラダー図に含まれるように、記憶部５１ａの内容を変更し、表示処理部５１ｃは、図１５に示すように、当該枝Ｂ１３を描画する。この状態において、編集処理部５１ｂが、枝Ｂ１３上へのラダー記号Ｉ１３の配置操作を受け付けると、図３に示すラダー図が完成する。
【０１０２】
一方、編集終了指示を受け付けると、データ入出力処理部５１ｄは、記憶部５１ａの内容に応じたラダープログラムを生成して、記憶部９２に書き込む。これにより、編集されたラダー図に対応する命令シーケンスからなるラダープログラムが生成される。
【０１０３】
一例として、データ入出力処理部５１ｄは、記憶部５１ａの内容を解析して、ラダー図に含まれる各ネットワークＬ１…について、それに含まれる枝とノードとを特定する。さらに、予め記憶されているラダー記号と命令との対応関係に基づいて、各枝に配置されているラダー記号に対応する命令を生成し、当該生成した命令を、各枝においてラダー記号が出現する順番に並べる。なお、命令のうち、オペコードは、ラダー記号の種類に対応しており、オペランドは、ラダー記号に対応付けられたデバイス等に対応しているので、データ入出力処理部５１ｄは、ラダー記号の種類およびラダー記号に対応付けられたデバイス等の情報を参照することによって、何ら支障なく、各ラダー記号に対応する命令を生成できる。
【０１０４】
さらに、データ入出力処理部５１ｄは、複数の枝が合流したノードから出発する枝の順番は、これら複数の枝の後になり、ある枝の終端となる分岐点を出発点とする枝の順番は、上記分岐点の前の枝よりも後になるように、上記各枝の順番を決定する。なお、本実施形態では、この判断基準によっても決定できない枝同士は、予め定められた手順（例えば、画面上で上に配置されている枝の順番が下に配置されている枝よりも前など）で決定している。
【０１０５】
順番が決定されると、データ入出力処理部５１ｄは、各枝に対応する命令シーケンス、すなわち、各枝に配置されているラダー記号群に対応する命令シーケンスを、各枝の順番に並べる。さらに、データ入出力処理部５１ｄは、ある分岐点を出発点とする枝のうち、最初の枝に対応する命令シーケンスの前に、分岐開始命令ＢＳを挿入し、当該分岐点を出発点とする枝のうち、残余の枝に対応する命令シーケンスの前に分岐命令Ｂを挿入する。また、データ入出力処理部５１ｄは、ある合流点を終端とする枝のうち、最後の枝に対応する命令シーケンスの後に、分岐終了命令ＢＥを挿入する。
【０１０６】
一例として、図３に示すラダー図には、ラダー記号が配置されている枝として、ノードＮ１１からラダー記号Ｉ１１を介してノードＮ１２へ至る枝Ｂ１１と、ノードＮ１２からラダー記号Ｉ１５を介して出力側母線Ｌｂに到達する枝Ｂ１２と、ノードＮ１１からラダー記号Ｉ１３を介してノードＮ１２へ至る枝Ｂ１３とが設けられている。また、ノードＮ１１が分岐点であり、ノードＮ１２が合流点である。したがって、データ入出力処理部５１ｄは、各枝の順番を、枝Ｂ１１、枝Ｂ１３、枝Ｂ１２の順と決定する。さらに、データ入出力処理部５１ｄは、各枝Ｂ１１、Ｂ１３およびＢ１２に対応する命令シーケンス（Ｃ１１）、（Ｃ１３）および（Ｃ１５）を、この順番に並べ、ノードＮ１１を出発点とする枝Ｂ１１およびＢ１３のうち、最初の枝Ｂ１１に対応する命令シーケンス（Ｃ１１）の前に、分岐開始命令Ｃ１０を挿入し、残余の枝Ｂ１３に対応する命令シーケンス（Ｃ１３）の前に分岐命令Ｃ１２を挿入する。また、データ入出力処理部５１ｄは、ノードＮ１２に合流する枝Ｂ１１およびＢ１３のうち、最後の枝Ｂ１３に対応する命令シーケンス（Ｃ１３）の後に、分岐終了命令Ｃ１４を挿入する。これにより、図４に示すように、図３に示すラダー図に対応する命令シーケンスが生成される。
【０１０７】
このように、本実施形態に係るデバイス制御部３２は、分岐点を示す分岐開始命令ＢＳに到達すると、第１スタック４１に、パワーフローレジスタ３３の値を記憶し、分岐された枝の開始を示す分岐命令Ｂに到達すると、パワーフローレジスタ３３に、第１スタック４１のスタックトップの値を格納している。
【０１０８】
したがって、制御プログラムをラダー図として図示した場合に、あるノードを出発点とする複数の枝の開始時点におけるパワーフローレジスタ３３の値は、当該複数の枝のうちの、いずれの枝の開始時点であっても、第１スタック４１に格納された値、すなわち、当該ノードを出発点とする枝のうち、命令シーケンス上で最初の枝の最初の命令を実行しようとするときの値に設定される。したがって、何ら支障なく、各枝の命令を実行することができる。
【０１０９】
また、デバイス制御部３２は、分岐開始命令ＢＳに到達した場合、上記第２スタック４２には、”偽”を示す値をプッシュし、分岐命令Ｂに到達した場合、上記第２スタック４２のスタックトップの値を、当該値とパワーフローレジスタ３３の値との論理和となるように更新する。したがって、制御プログラムをラダー図として図示した場合に、あるノードを出発点とする複数の枝の開始時点における、第２スタック４２のスタックトップの値は、当該ノードを出発点とする複数の枝のうち、上記開始時点で既に実行が終了している全ての枝について、核枝の最後の命令実行後の時点におけるパワーフローレジスタ３３の値同士を論理和した値になる。
【０１１０】
さらに、デバイス制御部３２は、分岐の終了を示す分岐終了命令ＢＥに到達した場合、パワーフローレジスタ３３の値を、当該値と第２スタック４２のスタックトップの値との論理和に設定する。
【０１１１】
これらの結果、制御プログラムをラダー図として図示した場合にラダー図内に分岐があったとしても、デバイス制御部３２は、何ら支障なく、各枝の命令を実行できる。
【０１１２】
また、デバイス制御部３２は、上記各命令ＢＳ、ＢおよびＢＥに到達したか否かによって、パワーフローレジスタ３３の値を操作している。したがって、命令実行前のパワーフローと命令実行後のパワーフローとの関係が互いに同一の処理に対して、分岐があるか否かに拘わらず、互いに同じ命令を割り当てたとしても、何ら支障なく、各命令を実行できる。この結果、新たな処理に対応する命令を追加する際の手間を削減すると共に、命令セットに用意する必要のある命令数を削減できる。
【０１１３】
ここで、比較例として、図１６にニモニックで示すように、枝の終了毎に分岐命令Ｂを配置し、分岐された枝が開始される度に分岐開始命令ＢＳを配置し、分岐されていた枝が合流する毎に分岐の終了命令ＢＥを配置するとする。さらに、図１に示すデバイス制御部１３２は、分岐開始命令ＢＳに到達する度に、第１スタック１４１にパワーフローレジスタ１３３の値をプッシュし、分岐命令Ｂに到達する度に、パワーフローレジスタ１３３の値を第２スタック１４２にプッシュすると共に、第１スタック１４１からポップした値を、パワーフローレジスタ１３３に設定するとする。また、デバイス制御部１３２は、分岐終了命令ＢＥに到達する度に、第２スタック１４２からポップした値とパワーフローレジスタ１３３の値との論理和を、パワーフローレジスタ１３３に設定するとする。
【０１１４】
当該構成でも、デバイス制御部１３２は、上記各命令ＢＳ、ＢおよびＢＥに到達したか否かによって、パワーフローレジスタ１３３の値を操作している。したがって、命令実行前のパワーフローと命令実行後のパワーフローとの関係が互いに同一の処理に対して、分岐があるか否かに拘わらず、互いに同じ命令を割り当てたとしても、何ら支障なく、各命令を実行できる。この結果、新たな処理に対応する命令を追加する際の手間を削減すると共に、命令セットに用意する必要のある命令数を削減できる。
【０１１５】
ただし、当該比較例の構成では、並列に配置される枝の数の増加に伴なって、第２スタック１４２に必要な記憶容量が増加していくので、互いに同じノードから分岐する枝の数が、第２スタック１４２の記憶領域の容量によって制限されてしまう。
【０１１６】
これに対して、本実施形態では、分岐命令Ｂに到達した場合、デバイス制御部３２は、第２スタック４２のスタックトップの値が、当該値とパワーフローレジスタ３３の値との論理和となるように更新しているため、ラダー図において互いに同じノードから分岐する枝の数が増えたとしても、第２スタック４２に必要な記憶容量が増加しない。この結果、第２スタック４２の記憶領域の容量が制限されていたとしても、互いに同じノードから分岐する枝の数が制限されることを防止できる。
【０１１７】
なお、本実施形態に係るデバイス制御部３２は、分岐終了命令ＢＥに到達した場合、第２スタック４２からポップした値と上記パワーフローレジスタ３３に格納されている現在のパワーフロー（分岐終了命令ＢＥの直前の命令の実行後の時点における論理式の演算結果）との論理和と、第１スタック４１からポップした値との論理積を取り、その結果を、分岐終了命令ＢＥの実行終了時におけるパワーフローとして、上記パワーフローレジスタ３３に格納しているが、これに限るものではない。デバイス制御部３２は、分岐終了命令ＢＥに到達した場合に、上記論理和を上記パワーフローレジスタ３３に格納してもよい。
【０１１８】
ただし、本実施形態のように、上記論理和と第１スタック４１からポップした値との論理積をパワーフローレジスタ３３に設定する場合、第１スタック４１からポップした値が”偽”であれば、上記論理和の演算を省略できる。したがって、枝の開始点におけるパワーフローが”偽”であった場合、それ以降のパワーフローが常に”偽”となるようなラダープログラムであれば、デバイス制御部３２の演算量を削減できる。
【０１１９】
なお、パワーフローレジスタ３３に上記論理和を設定する場合は、演算量が増加する可能性がある一方で、枝の開始点におけるパワーフローが”偽”であっても、それ以降のパワーフローが常に”偽”とはならないラダープログラムをも確実に実行できる。
【０１２０】
なお、本実施形態では、制御手段および分岐検出手段としてのデバイス制御部３２が、次に実行する命令が分岐開始命令ＢＥであるか否か、分岐命令Ｂであるか否か、分岐終了命令ＢＥであるか否かによって、上記制御プログラムを構成する命令シーケンスの中から、上記制御プログラムをラダー図として図示した場合に分岐された各枝の開始点となる、上記命令シーケンス上の位置、および、上記制御プログラムをラダー図として図示した場合に分岐された枝が合流する合流点となる、上記命令シーケンス上の位置を特定している。さらに、第１の条件を、次に実行しようとする命令が上記検出した枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初の枝の命令であることとし、第２の条件を、次に実行しようとする命令が上記検出した枝の開始点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に互いに同じノードから出発している枝のうち、上記命令シーケンス上で最初以外の枝の命令であることとし、第３の条件を、次に実行しようとする命令が上記検出した枝の合流点の次の命令であり、しかも、当該命令が、上記制御プログラムをラダー図として図示した場合に合流点となるノードを出発点とする枝の命令であることとするとき、上記デバイス制御部３２は、上記各命令ＢＳ、Ｂ、ＢＥであるか否かによって、上記各条件が成立したか否かを判定している。
【０１２１】
しかしながら、開始点および合流点の検出方法、並びに、上記各条件の成否の判定方法は、これに限るものではない。例えば、上記図１６に示す比較例のように、ラダープログラム上に分岐に関する複数の命令を配置しておき、デバイス制御部３２が、これらの組み合わせに基づいて、開始点および合流点を検出すると共に上記各条件の成否を判定してもよい。また、例えば、ラダープログラムとは別に、ラダー図上の開始点および合流点の上記命令シーケンス上での位置を示す情報を記憶しておき、デバイス制御部３２が当該情報と現在実行中の命令の命令シーケンス上での位置とを比較することによって、開始点および合流点を検出すると共に上記各条件の成否を判定してもよい。さらに、例えば、ラダープログラムとは別に、ラダー図上の各枝の接続関係を示す情報を記憶しておき、それを解析して、開始点および合流点を検出すると共に上記各条件の成否を判定してもよい。いずれの場合であっても、上記開始点および合流点を検出し上記各条件の成否を判定できれば、略同様の効果が得られる。
【０１２２】
ただし、本実施形態のように、次に実行する命令が分岐開始命令ＢＳであるか否か、分岐命令Ｂであるか否か、分岐終了命令ＢＥであるか否かによって、上記開始点および合流点を検出し上記各条件の成否を判定すれば、当該検出および成否判定に必要な演算量を削減できる。また、上記のように複数の組み合わせに基づいて、上記開始点および合流点の検出、並びに、上記各条件の成否判定を行う構成に比べて、命令の数を削減でき、ラダープログラムを記憶するために必要な記憶容量を削減できる。
【０１２３】
また、本実施形態では、第１および第２記憶手段としての第１および第２スタック４１・４２が、スタックである場合について説明したが、これに限るものではない。スタックの段数を１段に設定した構成と同様に、第１および第２記憶手段に、それぞれ１つずつの値を記憶してもよい。
【０１２４】
この場合であっても、第２の条件が成立した場合、上記第２記憶手段に格納された値は、当該値と上記命令の実行前のパワーフローレジスタ３３の値との論理和となるように更新される。したがって、本実施形態の構成と同様、制御プログラムをラダー図として図示した場合に、あるノードを出発点とする複数の枝の開始時点における、上記第２記憶手段の値は、当該ノードを出発点とする複数の枝のうち、上記開始時点で既に実行が終了している枝の最後の命令実行後の時点における、パワーフローレジスタ３３の値の全てを論理和した値にすることができる。また、第３の条件が成立した場合、上記命令の実行前におけるパワーフローレジスタ３３は、当該値と上記第２記憶手段に格納された値との論理和に設定される。したがって、パワーフローレジスタ３３の値は、合流する各枝の終端におけるパワーフローレジスタ３３の値全てを論理和した値になる。これらの結果、制御プログラムをラダー図として図示した場合にラダー図内に分岐があったとしても、制御装置は、何ら支障なく、各枝の命令を実行できる。
【０１２５】
ただし、上記第１および第２記憶手段がレジスタの値または論理和を１つだけしか記憶できない構成では、その制御プログラムが、ラダー図として図示したときに、あるノードで分岐した枝が合流する前に、新たなノードで分岐が発生するような制御プログラムであった場合、第１記憶手段は、前の分岐点におけるレジスタの値を保持できなくなってしまい、第２記憶手段は、前の分岐点に対応する合流点に合流する各枝の演算結果を保持できなくなってしまう。
【０１２６】
したがって、本実施形態のように、上記第１および第２記憶手段をスタックにする方が好ましい。当該構成であれば、分岐点および合流点と、他の分岐点および合流点とが入れ子構造になっていたとしても、何ら支障なく、上記レジスタの値および演算結果を操作できる。この結果、制御プログラムが上記入れ子構造であったとしても、何ら支障なく、各命令を実行できる。
【０１２７】
なお、上記では、一例として、制御プログラムとしてのラダープログラムを実行する装置が、ＰＬＣの機能を有するプログラマブル表示器１２である場合について説明したが、これに限るものではない。例えば、ＰＬＣ１１など、制御プログラムとしてのラダープログラムを実行可能な制御装置に広く適用できる。
【産業上の利用可能性】
【０１２８】
ＰＬＣの機能を有するプログラマブル表示器などの制御用表示装置、および、ＰＬＣ自体をはじめとして、ラダー図で表現可能なラダープログラムに基づいてデバイスを制御可能な制御装置、並びに、そのラダープログラムを生成する制御プログラム生成装置に広く適用できる。
【図面の簡単な説明】
【０１２９】
【図１】本発明の実施形態を示すものであり、制御システムの要部構成を示すブロック図である。
【図２】上記制御システムにおいて、ＰＬＣの機能を兼ね備えたプログラマブル表示器に記憶されている、変数とデバイスアドレスとの対応関係を示す図面である。
【図３】ラダー図として記載されたラダープログラムの一例を示す図面である。
【図４】ニモニック表記された上記ラダープログラムを示す図面である。
【図５】上記プログラマブル表示器の動作を示すものであり、上記ラダープログラムの各命令を実行した時点において、上記プログラマブル表示器に設けられた第１および第２スタックの状態、並びに、パワーフローレジスタの値を示す図面である。
【図６】ラダー図として記載されたラダープログラムの他の例を示す図面である。
【図７】ニモニック表記された上記ラダープログラムを示す図面である。
【図８】上記プログラマブル表示器の動作を示すものであり、上記ラダープログラムの各命令を実行した時点において、上記第１および第２スタックの状態、並びに、パワーフローレジスタの値を示す図面である。
【図９】ラダー図として記載されたラダープログラムの、さらに他の例を示す図面である。
【図１０】ニモニック表記された上記ラダープログラムを示す図面である。
【図１１】上記プログラマブル表示器の動作を示すものであり、上記ラダープログラムの各命令を実行した時点において、上記第１および第２スタックの状態、並びに、パワーフローレジスタの値を示す図面である。
【図１２】上記制御システムに設けられたラダープログラムエディタ装置の要部構成を示すブロック図である。
【図１３】上記ラダープログラムエディタ装置の画面例を示すものであり、分岐が形成される前の状態を示す図面である。
【図１４】上記ラダープログラムエディタ装置の画面例を示すものであり、分岐の形成を提案している状態を示す図面である。
【図１５】上記ラダープログラムエディタ装置の画面例を示すものであり、分岐が形成された後の状態を示す図面である。
【図１６】本発明の比較例を示すものであり、図６に示すラダープログラムをニモニック表記した状態を示す図面である。
【図１７】従来技術を示すものであり、図９に示すラダープログラムをニモニック表記した状態を示す図面である。
【符号の説明】
【０１３０】
１２    プログラマブル表示器（制御装置）
１５    ラダープログラムエディタ装置（制御プログラム生成装置）
３２    デバイス制御部（制御手段；分岐検出手段）
３３    パワーフローレジスタ（レジスタ）
４１    第１スタック（第１記憶手段）
４２    第２スタック（第２記憶手段）
５１ｄ  データ入出力処理部（生成手段）
【図１】
2007122523.tif 000003
【図２】
2007122523.tif 000004
【図３】
2007122523.tif 000005
【図４】
2007122523.tif 000006
【図５】
2007122523.tif 000007
【図６】
2007122523.tif 000008
【図７】
2007122523.tif 000009
【図８】
2007122523.tif 000010
【図９】
2007122523.tif 000011
【図１０】
2007122523.tif 000012
【図１１】
2007122523.tif 000013
【図１２】
2007122523.tif 000014
【図１３】
2007122523.tif 000015
【図１４】
2007122523.tif 000016
【図１５】
2007122523.tif 000017
【図１６】
2007122523.tif 000018
【図１７】
2007122523.tif 000019