(57)【特許請求の範囲】
【請求項１】
ユーザプログラムを複数のプログラムブロックに分割して記憶するユーザプログラム記憶手段と、
前記複数のプログラムブロックが起動中か停止中であるかを示すプログラムブロック起動情報をプログラムブロック毎に記憶するプログラムブロック起動情報記憶手段と、
前記ユーザプログラム記憶手段に記憶されたユーザプログラム実行中に、いずれかのプログラムブロックに関して異常が発生すると、異常が発生したプログラムブロックの実行を停止するとともに、前記プログラムブロック起動情報記憶手段の当該プログラムブロックに該当するプログラムブロック起動情報を停止中に設定するユーザプログラム実行手段と、を備えて、
前記ユーザプログラムの実行結果として生成される出力データを外部へ出力するリフレッシュ処理を実行する際に前記プログラムブロック起動情報記憶手段に格納されているプログラムブロック起動情報を参照するように構成され、さらに
出力使用状況情報をプログラムブロック別に記述したブロック別出力使用状況情報を記憶する記憶手段と、
ユーザプログラムの実行により生成される出力データを一時記憶する内部メモリと、
プログラムブロックの実行を停止する際に、内部メモリの該当出力領域の記憶を保持するか又はクリアするかを設定する停止時メモリ状態設定手段と、
停止中のプログラムブロックに関して、内部メモリの該当出力領域から出力ポートへの出力リフレッシュ処理を継続するか又は停止するかを設定する停止時リフレッシュ有無設定手段と、
プログラムブロックの実行を停止する際に、前記停止時メモリ状態設定手段の設定内容に応じて、前記内部メモリの該当出力領域の記憶を保持するか又はクリアする停止時メモリ状態制御手段と、
停止中のプログラムブロックに関して、前記停止時リフレッシュ有無設定手段の設定内容に応じて、前記内部メモリの該当出力領域から出力ポートへの出力リフレッシュ処理を継続するか又は停止する停止時リフレッシュ制御手段と、
を具備することを特徴とするプログラマブルロジックコントローラ。
【請求項２】
ブロック別出力使用状況情報は、ユーザプログラムメモリに格納されたユーザプログラムから出力先チャネルをブロック別に抽出する処理を通して当該プログラマブルロジックコントローラ自身により生成される、
請求項１に記載のプログラマブルロジックコントローラ。
【請求項３】
ブロック別出力使用状況情報は、ユーザプログラム作成の際にユーザプログラムから出力先チャネルをブロック別に抽出する処理を通してサポートツールにより生成される、
請求項１に記載のプログラマブルロジックコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、プログラムを複数のプログラムブロックに分割して記憶するプログラマブルロジックコントローラに係り、特に、プログラムブロックの実行とその対象となる出力装置への出力処理とをプログラムプロック単位で個別に制御可能とすることにより、異常発生時の被害波及範囲の制限並びに異常停止対策の低コスト化等を可能としたプログラマブルロジックコントローラに関する。
【０００２】
【従来の技術】
一般に、プログラマブルロジックコントローラ（以下、ＰＬＣという）は、入力装置、演算装置、出力装置の組み合わせを基本とし、入力装置に接続されたセンサやスイッチなどの信号入力を入力装置を介して演算装置に取り込み、その入力結果を基に演算装置に予め格納されているユーザが作成したラダーなどの制御プログラムを実行し、その実行結果を出力装置を介して外部のモータやアクチュエータなどに出力するように構成されている。
【０００３】
この外部のモータやアクチュエータなどへの出力処理は一般的に以下に示す方法で行われる。なお、当業者には良く知られているように、この種のＰＬＣにはユーザプログラムの実行結果として生成される出力データを出力装置の該当出力ポートへと直接に送出する方式のものと、同出力データを一旦内部メモリに一時記憶させた後、それらを所定のタイミングで一括して内部メモリから該当出力ポートへと送出する処理（リフレッシュ処理）を行う方式のものとが存在する。
【０００４】
すなわち、最も一般的である後者の方式のものにあっては、外部の入出力のための入出力ポートアドレスと、プログラム実行において実際の入出力の代用となる演算装置内の内部メモリであるＩ／ＯメモリのＩ／Ｏメモリアドレスとの対応付けを一定のルールで行い、その入出力ポートアドレスとＩ／Ｏメモリアドレスとの対応情報を予めＰＬＣ内に記憶しておく。
【０００５】
プログラム実行開始時に、Ｉ／Ｏメモリをクリアした上で、プログラム実行においては実際の参照／書き込みは上記Ｉ／Ｏメモリ上で行う。
【０００６】
そして、プログラム実行後、上述した入出力ポートアドレスとＩ／Ｏメモリアドレスとの対応情報をもとに、Ｉ／Ｏメモリのデータを対応する出力ポートに書き込み、また、入力ポートから読み込んだデータは対応するＩ／Ｏメモリアドレスに書き込む。つまり、Ｉ／Ｏメモリと入出力ポートとの間でデータ交換（Ｉ／Ｏリフレッシュ）を行うこととなる。
【０００７】
全ての入出力ポートとデータ交換が完了した後でプログラムの実行が行われ、その実行完了後、再びＩ／Ｏメモリと入出力ポートとのデータ交換を行うという繰り返し動作で、プログラム実行側からみて、常に最新の入力情報を参照することができ、実行結果を常に外部へ出力することができることになる。
【０００８】
ところで、近年、ＰＬＣは、半導体メモリのコストダウン、マイコンチップの高性能化に相まって、１台のＰＬＣで制御できる入出力点数が飛躍的に増加する傾向にある。また、これに比例して、ＰＬＣのプログラム容量も大幅に増加している。
【０００９】
さらに、ＰＬＣを組み込むことで設計される各種機械や製造設備自身の高機能化も、プログラム容量の大容量化に拍車をかけている。
【００１０】
このような傾向の中で、ＰＬＣには近年、大容量のプログラムを効率よく、また高品質で設計するために、また再利用やメンテナンス管理のために、プログラムを分割／階層化したりして、プログラムをブロック分割する機能が付け加えられる傾向にある。
【００１１】
ユーザは、これらの機能を利用して、分割ブロック化されたプログラムを１台のＰＬＣで制御される複数の装置のうちの個々の装置に割り当てたり、装置内の独立性の高い機能ユニット個々と対応させることで、プログラム設計において装置毎または機能毎の設計を順次または複数の作業者で分担して行うことでその生産性を高めている。
【００１２】
【発明が解決しようとする課題】
しかし、従来のプログラム分割可能なＰＬＣにあっては、装置内で比較的独立性の高い機能ユニット毎に、それを制御するプログラムをブロック分割したものの、プログラム実行時の異常発生に伴うエラー停止はプログラム全体であり、また、入出力のリフレッシュも全体で一括のため、ある特定の機能ユニットの制御において異常が発生するとプログラム全体が停止し、また、基本的には出力も全体で一括でリセットされてしまうという問題がある。
【００１３】
つまり、従来のＰＬＣにおいては、その異常に対して独立して動作可能でかつ正常に動作している機能ユニットの制御まで止めてしまうことになり、このために設備全体の稼動率や生産性を低下させることになる。
【００１４】
また、異常停止した個所をプログラムで自動的にリカバーしようとすると、異常発生によるエラー停止の影響が及ばない別のＰＬＣを設置しなければならず、このために自ずとコストアップに繋がる。
【００１５】
そこで、この発明は、プログラムを複数のプログラムブロックに分割して実行するプログラマブルロジックコントローラにおける異常発生時の被害波及範囲の制限並びに異常停止対策の低コスト化等を図ることを目的とする。
【００１６】
【課題を解決するための手段】
この発明のプログラマブルロジックコントローラは、ユーザプログラムを複数のプログラムブロックに分割して記憶するユーザプログラム記憶手段と、前記複数のプログラムブロックが起動中か停止中であるかを示すプログラムブロック起動情報をプログラムブロック毎に記憶するプログラムブロック起動情報記憶手段と、前記ユーザプログラム記憶手段に記憶されたユーザプログラム実行中に、いずれかのプログラムブロックに関して異常が発生すると、異常が発生したプログラムブロックの実行を停止するとともに、前記プログラムブロック起動情報記憶手段の当該プログラムブロックに該当するプログラムブロック起動情報を停止中に設定するユーザプログラム実行手段とを備え、前記ユーザプログラムの実行結果として生成される出力データを外部へ出力するリフレッシュ処理を実行する際に前記プログラムブロック起動情報記憶手段に格納されているプログラムブロック起動情報を参照している。
【００１７】
なお、ここで言う『プログラマブルロジックコントローラ』には、ユーザプログラムの実行結果として生成される出力データを出力装置の該当出力ポートへと直接に送出する方式のものと、同出力データを一旦内部メモリに一時記憶させた後、それらを所定のタイミングで一括して内部メモリから該当出力ポートへと送出する処理（リフレッシュ処理）を行う方式のものとの双方が含まれる。
【００１８】
このような構成によれば、いずれかのプログラムブロックに関して異常が発生した場合には、異常発生にかかるプログラムブロックの実行のみが停止されるとともに、プログラムブロックに該当するプログラムブロック起動情報が停止中に設定されるため、従来のＰＬＣにおいて問題とされた、その異常に対して独立して動作可能でかつ正常に動作している機能ユニットの制御まで止めてしまうことがなくなり、このために設備全体の稼動率や生産性を低下させることもなくなる。
【００１９】
また、このようなブロック単位の実行停止機能を有するプログラマブルロジックコントローラの好ましい実施の形態では、さらに、
出力使用状況情報をプログラムブロック別に記述したブロック別出力使用状況情報を記憶する記憶手段を備え、異常発生によりいずれかのプログラムブロックの実行を停止する際に、前記ブロック別出力使用状況情報を参照し、異常発生にかかるプログラムブロックが扱う出力ポートにＯＦＦデータを出力している。
【００２０】
このような構成によれば、いずれかのプログラムブロックに関して異常が発生した場合には、異常発生にかかるプログラムブロックが扱う出力ポートにＯＦＦデータを出力することから、制御対象機器等の動作状態はその制御初期状態に保持され、予期せぬ動作を来すことがない。例えば、制御対象機器が正常回復後に初期状態から動作を再開するような場合には、この出力リセット機能が有効に作用する。
【００２１】
このようなブロック単位の実行停止機能を有するプログラマブルロジックコントローラの好ましい実施の形態では、さらに、
出力使用状況情報をプログラムブロック別に記述したブロック別出力使用状況情報を記憶する記憶手段と、
ユーザプログラムの実行により生成される出力データを一時記憶する内部メモリと、
プログラムブロックの実行を停止する際に、内部メモリの該当出力領域の記憶を保持するか又はクリアするかを設定する停止時メモリ状態設定手段と、
停止中のプログラムブロックに関して、内部メモリの該当出力領域から出力ポートへの出力リフレッシュ処理を継続するか又は停止するかを設定する停止時リフレッシュ有無設定手段と、
プログラムブロックの実行を停止する際に、前記停止時メモリ状態設定手段の設定内容に応じて、前記内部メモリの該当出力領域の記憶を保持するか又はクリアする停止時メモリ状態制御手段と、
停止中のプログラムブロックに関して、前記停止時リフレッシュ有無設定手段の設定内容に応じて、前記内部メモリの該当出力領域から出力ポートへの出力リフレッシュ処理を継続するか又は停止する停止時リフレッシュ制御手段と、
を具備することができる。
【００２２】
このような構成によれば、プログラムブロックの実行を停止する際に、内部メモリの該当出力領域の記憶を保持するか又はクリアするか、並びに、停止中のプログラムブロックに関して、内部メモリの該当出力領域から出力ポートへの出力リフレッシュ処理を継続するか又は停止するかを、任意にプログラミングすることができる。そして、この機能を利用すれば、制御対象機器の性質等に応じて、最適な異常時対策並びに自由度の高い復帰操作を可能とすることができる。
【００２３】
このような異常時対策並びに自由度の高い復帰操作を可能とするプログラマブルロジックコントローラのさらに好ましい実施の形態としては、プログラムブロックの実行を停止する際に、ブロック別出力使用状況情報を参照して、該当する出力ポートの状態を強制的にＯＦＦ状態とする出力強制ＯＦＦ設定手段をさらに具備することができる。
【００２４】
このような構成によれば、異常発生にかかるプログラムブロックが扱う出力ポートの状態をＯＦＦ状態に固定しつつも、内部メモリの該当出力データについては保存して、中断時のプログラム実行状態からの再開に備えることができる。
【００２５】
以上説明した本発明のプログラマブルロジックコントローラにあっては、ブロック別出力使用状況情報は、好ましい実施の形態では、ユーザプログラムメモリに格納されたユーザプログラム中から出力先チャネルを検索することで当該プログラマブルロジックコントローラ自身により自動的に生成される。
【００２６】
このような構成によれば、ユーザのプログラミング作業に特別な負担をかけることがない。
【００２７】
また、ブロック別出力使用状況情報は、別の好ましい実施の形態では、ユーザプログラム作成の際に、ユーザプログラム中から出力先チャネルを検索することでサポートツールにより自動的に生成される。
【００２８】
このような構成によれば、ユーザのプログラミング作業に特別な負担をかけることがないばかりでなく、コントローラ本体側のソフトウェア負荷もその分軽減される。
【００２９】
【発明の実施の形態】
以下、この発明に係わるＰＬＣの実施の形態を添付図面を参照して詳細に説明する。
【００３０】
図１は、この発明に係わるＰＬＣ全体のハードウェア構成を示すブロック図である。
【００３１】
図１において、ＰＬＣ１００は、演算プロセッサ（ＣＰＵ）１０１、入出力メモリ（Ｉ／Ｏメモリ）１０２、ユーザプログラムメモリ１０３、システムプログラムメモリ１０４、パラメータメモリ１０５、ワークメモリ１０６、入出力装置２００とのインタフェースをなす入出力インタフェース（Ｉ／ＯＩ／Ｆ）１０７サポートツール３００とのインタフェースをなすシリアルインタフェース（シリアルＩ／Ｆ）１０８を具備して構成される。
【００３２】
ここで、ＣＰＵ１０１は、このＰＬＣ１００の全体動作を統括制御する。また、システムプログラムメモリ１０４には、ＣＰＵ１０１で処理されるシステムプログラムが記憶される。ユーザプログラムメモリ１０３には、ブロック分割された複数のプログラムブロックからなるユーザプログラムが記憶される。
【００３３】
パラメータメモリ１０５には、ユーザプログラムメモリ１０２に記憶されたブロック分割されたプログラム毎の停止時出力設定、すなわち後に詳述する「プログラムブロック毎の停止時出力設定」が記憶される。
【００３４】
また、ワークメモリ１０６には、後に詳述する
１）「入出力装置上のＩ／Ｏ構成情報」
２）「プログラムブロック別Ｉ／Ｏ使用状況情報」
３）「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」
４）「プログラムブロック起動情報」
が記憶される。
【００３５】
Ｉ／Ｏメモリ１０２は、このＰＬＣユニット１００において、プログラム実行により入出力情報の代用として参照／書き換えされる内部メモリである。
【００３６】
また、入出力装置２００は、センサ、スイッチなどに接続される入力装置と、モータ、アクチュエータなどに接続される出力装置とを組み合わせた装置で、８点、１６点、３２点、６４点毎にユニット化され、これらが自由に組み合わされて構成される、この入出力装置２００は、ＣＰＵ１０１からは入出力ポートとして認識される。
【００３７】
サポートツール３００は、
１）ユーザプログラムメモリ１０３に格納されるユーザプログラムの生成  ２  ２）ユーザプログラムメモリ１０３に格納されるユーザプログラムのプログラムブロック単位の分割
３）後述する各種の設定
４）ＣＰＵ１０１へのユーザプログラムのダウンロード、アップロード等を行うために使用される。
【００３８】
さて、このこの発明に係わるＰＬＣにおいては、プログラムを複数のプログラムブロックに分割してユーザプログラムメモリ１０３に記憶するとともに、ユーザプログラムメモリ１０３に記憶された各プログラムブロックの実行とその対象となる出力装置２００への出力処理の範囲をパラメータメモリ１０５に記憶された「プログラムブロック毎の停止時出力設定」を参照して連動して制御するように構成され、これによりＰＬＣ１００を用いた制御設備の安全性の向上とコストダウンを図るように構成されている。
【００３９】
すなわち、この発明に係わるＰＬＣの第１の実施の形態においては、
１）プログラムブロック毎にエラー停止時に出力データを保持するか、クリアするかを設定する（「プログラムブロック毎の停止時出力設定」）
２）プログラムブロック毎にエラー停止時以降に出力装置２００への出力処理を継続するか停止するかを設定する（「プログラムブロック毎の停止時出力設定」）
３）プログラム実行開始時にプログラムブロック個々の出力チャネルを抽出する（「プログラムブロック別Ｉ／Ｏ使用状況情報（未使用チャネル情報を含む）」の抽出）
４）プログラム実行を開始する
５）あるプログラムブロックに異常が発生すると該当プログラムブロックの処理を停止する
６）プログラムブロックの実行処理の停止の直後に、「プログラムブロック毎の停止時出力設定」に従い、当該プログラムブロックがその実行結果を出力しているＩ／Ｏメモリ１０２のデータをクリア若しくは保持する
７）プログラムブロックが実行結果を出力しているＩ／Ｏメモリ１０２のデータのクリア若しくは保持以降に、「プログラムブロック毎の停止時出力設定」にしたがい、当該プログラムブロックがその演算結果を出力しているＩ／Ｏメモリ１０２に対応する出力ポートへの出力処理を停止若しくは継続する
機能を有する。
【００４０】
また、この発明に係わるＰＬＣの第２の実施の形態においては、
１）プログラムブロック毎にエラー停止時以降に出力装置２００への出力処理を継続するか停止するかを設定する（「プログラムブロック毎の停止時出力設定」）
２）プログラム実行開始時にプログラムブロック個々の出力チャネルを抽出する（「プログラムブロック別Ｉ／Ｏ使用状況情報（未使用チャネル情報を含む）」の抽出）
３）プログラム実行を開始する
４）あるプログラムブロックに異常が発生すると該当プログラムブロックの処理を停止する
５）プログラムブロックの演算処理の停止の直後に、当該プログラムブロックがその演算結果を出力しているＩ／Ｏメモリ１０２に対応する出力ポートにＯＦＦデータを出力する
６）プログラムブロックがその演算結果を出力しているＩ／Ｏメモリ１０２に対応する出力ポートにＯＦＦデータを出力した以降に、当該プログラムブロックがその演算結果を出力しているＩ／Ｏメモリ１０２に対応する出力ポートへのＯＦＦデータの出力を継続するか出力処理そのものを停止する
機能を有する。
【００４１】
また、この発明に係わるＰＬＣの第３の実施の形態においては、
１）サポートツール３００により、プログラムブロック単位で分割されたプログラムを生成する
２）サポートツール３００によるプログラムブロック単位で分割されたプログラムの生成に併せて、サポートツール３００により、プログラム個々の出力チャネルを抽出する
３）プログラムとプログラムブロック毎の出力チャネル情報をサポートツール３００からＰＬＣ１００に読み込ませる
４）ＰＬＣ１００によりプログラム実行を開始する
機能を有する。
【００４２】
図２は、図１に示したＰＬＣ１００のプログラム構成の一例を示すメモリマップ図である。同図において、このプログラムは、図１に示したユーザプログラムメモリ１０３に格納される複数のプログラムブロックに分割されたユーザプログラムの一例を示すもので、図２においては、分割されたプログラムブロックがラダーダイヤグラムで記述されているものを想定する。ただし、プログラムによりプログラムで使用しているチャネル番号が抽出できれば、言語の種類には依存しない。
【００４３】
すなわち、図２において、このプログラムメモリのアドレス「Ａ」には、プログラムブロック０オブジェクト格納領域先頭アドレスを示すデータ「Ｂ」が格納され、アドレス「Ａ＋１」には、プログラムブロック０オブジェクト格納領域最終アドレスを示すデータ「Ｃ−１」が格納され、アドレス「Ａ＋２」には、プログラムブロック１オブジェクト格納領域先頭アドレスを示すデータ「Ｃ」が格納され、同様にして、アドレス「Ｂ−２」には、プログラムブロックＸオブジェクト格納領域先頭アドレスを示すデータ「Ｄ」が格納され、アドレス「Ｂ−１」には、プログラムブロックＸオブジェクト格納領域最終アドレスを示すデータ「Ｅ」が格納される。
【００４４】
また、アドレス「Ｂ」から始まる、プログラムブロック０オブジェクト格納領域には、データ「プログラムブロック０オブジェクト」が格納され、アドレス「Ｃ」から始まるプログラムブロック１オブジェクト格納領域にはデータ「プログラムブロック１オブジェクト」が格納され、アドレス「Ｄ」からアドレス「Ｅ」のプログラムブロックＸオブジェクト格納領域にはデータ「プログラムブロックＸオブジェクト」が格納される。
【００４５】
図３は、図１に示したＰＬＣ１００の入出力ポート構成の一例を示す図である。
【００４６】
この実施の形態においては、図１に示したＣＰＵ１０１からみた入出力ポートの仕様として、１ポートに対して４ｃｈ（８ｂｙｔｅ）分の空間が固定で割り当てられており、ポート番号の若い順にアドレス空間が割付けられている。
【００４７】
例えば、０ラックの０ポートに１６点のユニットが装着された場合、データＡの空間が実際の入出力空間となり、Ｂ〜Ｄは空き空間となる。３２点ユニットの場合は、データＡ〜Ｂが入出力空間となり、データＣ〜Ｄが空き空間となる。また、６４点ユニットの場合は、データＡ〜Ｄが入出力空間となる。
【００４８】
図４は、図１に示したＰＬＣ１００のＩ／Ｏメモリ１０２の構成の一例を示す図である。同図において、Ｉ／Ｏメモリ１０２は、ＣＰＵ１０１でのプログラム実行演算のための入力および出力エリアを構成するもので、このＩ／Ｏメモリ１０２のメモリ空間は、１６ビットを１ｃｈ（チャネル）としてチャネル番号の若い順に連続して並ぶ空間を構成する。
【００４９】
また、このＩ／Ｏメモリ１０２は、図１に示した入出力装置２００上の構成により対応するチャネルごとに入出力ポートが割り付けられ、Ｉ／Ｏメモリ１０２と入出力ポートとの間で、データ交換、すなわち、入力ポートからＩ／Ｏメモリ１０２へのデータ交換、Ｉ／Ｏメモリ１０２から出力ポートへのデータ交換が行われる。
【００５０】
図５は、図１に示したＰＬＣ１００で使用する「入出力装置上のＩ／Ｏ構成情報」の一例を示す図である。同図に示す「入出力装置上のＩ／Ｏ構成情報」は、図１に示した入出力装置２００のポートアドレス毎に、入出力ユニットの装着の有無、ユニットの種別（入力か出力か）、ユニットの点数を記憶するものである。ここでは、１ポート毎に４ビットが確保されている。この「入出力装置上のＩ／Ｏ構成情報」は、図１に示したワークメモリ１０６に格納される。
【００５１】
なお、この実施の形態において、装着されるユニットの１ユニット当たりの点数は１６点、３２点、６４点の３種類とする。
【００５２】
ここで、上記４ビットのデータの意味は、
１）０＊＊＊      入出力ユニットの装着なし
２）１＊＊＊      入出力ユニットの装着あり
３）＊０＊＊      入出力ユニットの種別がＯＵＴ
４）＊１＊＊      入出力ユニットの種別がＩＮ
５）＊＊００      未使用
６）＊＊０１      １６点
７）＊＊１０      ３２点
８）＊＊１１      ６４点
に設定されている。
【００５３】
図６は、図１に示したＰＬＣ１００で使用する「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」の一例を示す図である。
【００５４】
図６において、この「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」は、図１に示したＩ／Ｏメモリ１０２のチャネル毎に、対応する入出力装置２００のポートアドレス（ラック、ポート、割付位置）を記憶する。この「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」は、図１に示したワークメモリ１０６に格納される。
【００５５】
この実施の形態においては、ＣＰＵ１０１に接続される入出装置２００の仕様として、１ラックに対して８ポートまで、ラック総数は８ラックまでとする。
【００５６】
また、Ｉ／Ｏメモリ１０２のＩ／Ｏメモリアドレスと入出力装置２００の入出力ポートアドレスとの対応ルールは、ラック番号の若い順に、そして、ポート番号の若い順に装着されているユニットから、ユニットの入出力点数分のチャネル領域を確保する仕様とする。
【００５７】
ここで、「あり／なし」は、該当チャネルが入出力ポートに割り付けられているか否かを記憶するもので、「０」は割り付けなし、「１」は割り付けありに設定されている。
【００５８】
また、「ＩＮ／ＯＵＴ」は、入力ポートか出力ポートかを記憶するもので、「０」は入力ポート、「１」は出力ポートに設定されている。
【００５９】
また、「ラック番号」は、割り付けられたラックの番号を示すもので、「０」〜「７」に設定される。
【００６０】
また、「ポート番号」は、割り付けられたポート番号を示すもので、「０」〜「７」に設定される。
【００６１】
また、「割付位置」は、割り付けられたポート内の位置を示すもので、「０」〜「３」に設定される。
【００６２】
また、「空き」は未使用を示す。
【００６３】
図７は、図１に示したＰＬＣ１００で使用する「プログラムブロック別Ｉ／Ｏ使用状況情報（未使用チャンネル情報を含む）」の一例を示す図である。
【００６４】
図７において、この「プログラムブロック別Ｉ／Ｏ使用状況情報」は、プログラムブロック毎に使用されている出力チャネルを記憶するものである。なお、この実施形態では、入力チャネルに関しては特に記憶する必要はないため割愛する。この「プログラムブロック別Ｉ／Ｏ使用状況情報」は、図１に示したワークメモリ１０６に格納される。
【００６５】
すなわち図７において、プログラムメモリのアドレス「Ａ」には、プログラムブロック０用領域先頭アドレスを示すデータ「Ｂ」が格納され、アドレス「Ａ＋１」には、プログラムブロック０用領域最終アドレスを示すデータ「Ｃ−１」が格納され、アドレス「Ａ＋２」には、プログラムブロック１用領域先頭アドレスを示すデータ「Ｃ」が格納され、同様にして、アドレス「Ｂ−４」には、プログラムブロックＸ用領域先頭アドレスを示すデータ「Ｄ」が格納され、アドレス「Ｂ−３」には、プログラムブロックＸ用領域最終アドレスを示すデータ「Ｅ−１」が格納される。
【００６６】
また、アドレス「Ｂ−２」には、未使用ＣＨ用領域先頭アドレスを示すデータ「Ｅ」が格納され、アドレス「Ｂ−１」には、未使用ＣＨ用領域最終アドレスを示すデータ「Ｆ」が格納される。
【００６７】
また、アドレス「Ｂ」には、プログラムブロック０用領域先頭の「出力チャネルアドレス」が格納され、アドレス「Ｃ−１」には、プログラムブロック０用領域最終の「出力チャネルアドレス」が格納され、アドレス「Ｃ」には、プログラムブロック１用領域先頭の「出力チャネルアドレス」が格納され、以下同様に、アドレス「Ｄ」には、プログラムブロックＸ用領域先頭の「出力チャネルアドレス」が格納され、アドレス「Ｅ−１」には、プログラムブロックＸ用領域終了の「出力チャネルアドレス」が格納される。
【００６８】
また、アドレス「Ｅ」には、未使用ＣＨ用領域先頭の「出力チャネルアドレス」が格納され、アドレス「Ｆ」には、未使用ＣＨ用領域最終の「出力チャネルアドレス」が格納される。
【００６９】
図８は、図１に示したＰＬＣ１００で使用する「プログラムブロック起動情報」の一例を示す図である。
【００７０】
図８において、この「プログラムブロック起動情報」は、プログラムブロック毎の起動中／停止中を示す情報を記憶するものである。この「プログラムブロック起動情報」は、図１に示したワークメモリ１０６に格納される。
【００７１】
すなわち、図８において、この「プログラムブロック起動情報」は、各プログラムブロックに対応するプログラムブロック０用記憶エリア〜プログラムブロックＸ用記憶エリアを有しており、情報「Ａ」には、該当するプログラムブロックが起動中か停止中であるかを示す情報が記憶される。ここで、「１」は起動中、「０」は停止中に設定されている。
【００７２】
図９は、図１に示したＰＬＣ１００で使用する「プログラムブロック毎の停止時出力設定」の一例を示す図である。
【００７３】
図９において、この「プログラムブロック毎の停止時出力設定」は、プログラムブロック毎に設定された以下の内容を記憶する。この「プログラムブロック毎の停止時出力設定」は、図１に示したパラメータメモリ１０５に格納される。
【００７４】
１）プログラムブロック停止時のメモリ保持／クリア
２）プログラムブロック停止時以降の出力処理停止／継続
すなわち、図９において、この「プログラムブロック毎の停止時出力設定」は、各プログラムブロックに対応するプログラムブロック０用記憶エリア〜プログラムブロックＸ用記憶エリアを有しており、情報「Ａ」には、該当するプログラムブロック停止時のメモリ保持／クリアを示す情報（「１」が保持、「０」がクリア）が設定され、情報「Ｂ」には、該当するプログラムブロック停止時以降の出力処理停止／継続（「１」が停止、「０」が継続）が設定される。
【００７５】
図１０は、図１に示したＰＬＣ１００における第１の実施の形態および第２の実施の形態におけるＰＬＣ１００の全体処理を示すフローチャートである。
【００７６】
図１０において、まず、所定の電源ＯＮ初期処理が実行され（ステップ１１０）、次に、入出力装置確認処理が実行される（ステップ１１１）。
【００７７】
そして、ステップ１１１の入出力装置確認処理に基づき、図５に示した「入出力装置上のＩ／Ｏ構成情報」を作成する（ステップ１１２）。このステップ１１２で作成した「入出力装置上のＩ／Ｏ構成情報」は、図１に示したワークメモリ１０６に格納される。
【００７８】
次に、図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」を作成する（ステップ１１３）。
【００７９】
この「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」は、図２に示した複数のプログラムブロックに分割されたプログラム構成、図３に示した入出力装置２００の入出力ポート構成、図４に示したＩ／Ｏメモリ１０２の構成、ステップ１１２で作成した図５に示す「入出力装置上のＩ／Ｏ構成情報」に基づき作成される。
【００８０】
次に、所定の共通処理を実行した（ステップ１１４）後、このＰＬＣ１００は運転可能かを調べる（ステップ１１５）。
【００８１】
ここで、運転可能でないと判断されると（ステップ１１５でＮＯ）、ステップ１１９に進み、後に詳述するＩ／Ｏリフレッシュ処理を実行し、その後、サポートツール３００との通信を行って（ステップ１２０）、ステップ１１４に戻る。
【００８２】
また、ステップ１１５で、運転可能と判断されると（ステップ１１５でＹＥＳ）、次に、プログラム運転初回かまたはプログラム変更ありかを調べる（ステップ１１６）。
【００８３】
ここで、プログラム運転初回でもなくまたプログラム変更もないと判断されると（ステップ１１６でＮＯ）、ステップ１１８に進み、プログラム運転処理を実行し、後に詳述するＩ／Ｏリフレッシュ処理を実行し（ステップ１１９）、その後、サポートツール３００との通信を行って（ステップ１２０）、ステップ１１４に戻る。
【００８４】
また、ステップ１１６で、プログラム運転初回かまたはプログラム変更ありと判断されると（ステップ１１６でＹＥＳ）、図７に示した「プログラムブロック別Ｉ／Ｏ使用状況情報」を作成する（ステップ１１７）。この「プログラムブロック別Ｉ／Ｏ使用状況情報」は、図２に示した複数のプログラムブロックに分割されたプログラム構成、図３に示した入出力装置２００の入出力ポート構成、図４に示したＩ／Ｏメモリ１０２の構成に基づき作成される。
【００８５】
その後、プログラム運転処理を実行し（ステップ１１８）、後に詳述するＩ／Ｏリフレッシュ処理を実行し（ステップ１１９）、その後、サポートツール３００との通信を行って（ステップ１２０）、ステップ１１４に戻る。
【００８６】
図１１は、図１０示したＰＬＣ１００の全体処理のステップ１１９における第１の実施の形態におけるＩ／Ｏリフレッシュ処理の詳細を示すフローチャートである。
【００８７】
図１１において、まず、図１のワークメモリ１０６から図８に示した「プログラムブロック起動情報」を読み出す（ステップ１２１）。そして、ステップ１２１で読み出した「プログラムブロック起動情報」に基づきプログラムブロックは起動中かを調べる（ステップ１２２）。
【００８８】
ここで、プログラムブロックが起動中であると判断されると（ステップ１２２でＹＥＳ）、ステップ１２５へ進み、図７に示した「プログラムブロック別Ｉ／Ｏ使用状況情報」と図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」からＩ／Ｏメモリ１０２と入出力ポートとのデータ交換を行い、次に、残りプログラムブロックはあるかを調べ（ステップ１２６）、ここで、残りプログラムブロックはあると判断されると（ステップ１２６でＹＥＳ）、ステップ１２１に戻るが、残りプログラムブロックがないと判断されると（ステップ１２６でＮＯ）、図７に示した未使用Ｉ／Ｏの「プログラムブロック別Ｉ／Ｏ使用状況情報」と図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」からＩ／Ｏメモリ１０２と入出力ポートとのデータ交換を行い（ステップ１２７）この処理を終了する。
【００８９】
また、ステップ１２２で、プログラムブロックが起動中ではないと判断されると（ステップ１２２でＮＯ）、図１に示したパラメータメモリ１０５から、図９に示した「プログラムブロック毎の停止時出力設定」を読み出す（ステップ１２３）。
【００９０】
そして、ステップ１２３で読み出した「プログラムブロック毎の停止時出力設定」に基づき、当該プログラムブロック停止時リフレッシュがあるかを調べる（ステップ１２４）。
【００９１】
ここで、当該プログラムブロック停止時リフレッシュがないと判断されると（ステップ１２４でＮＯ）、ステップ１２６に進み、残りプログラムブロックはあるかを調べ、ここで、残りプログラムブロックはあると判断されると（ステップ１２６でＹＥＳ）、ステップ１２１に戻るが、残りプログラムブロックがないと判断されると（ステップ１２６でＮＯ）、図７に示した未使用Ｉ／Ｏの「プログラムブロック別Ｉ／Ｏ使用状況情報」と図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」からＩ／Ｏメモリ１０２と入出力ポートとのデータ交換を行い（ステップ１２７）この処理を終了する。
【００９２】
また、ステップ１２４で、当該プログラムブロック停止時リフレッシュがあると判断されると（ステップ１２４でＹＥＳ）、図７に示した「プログラムブロック別Ｉ／Ｏ使用状況情報」と図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」からＩ／Ｏメモリ１０２と入出力ポートとのデータ交換を行い（ステップ１２５）、次に、残りプログラムブロックはあるかを調べ（ステップ１２６）、ここで、残りプログラムブロックはあると判断されると（ステップ１２６でＹＥＳ）、ステップ１２１に戻るが、残りプログラムブロックがないと判断されると（ステップ１２６でＮＯ）、図７に示した未使用Ｉ／Ｏの「プログラムブロック別Ｉ／Ｏ使用状況情報」と図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」からＩ／Ｏメモリ１０２と入出力ポートとのデータ交換を行い（ステップ１２７）この処理を終了する。
【００９３】
図１２は、図１０示したＰＬＣ１００の第１の実施の形態におけるエラー発生時のプログラムブロック停止処理を示すフローチャートである。
【００９４】
図１２において、エラーが発生すると、まず、エラーが発生した該当プログラムブロックの処理を停止し（ステップ１３１）、次に、図８に示した「プログラムブロック起動情報」に該当プログラムブロック停止を記憶する（ステップ１３２）。
【００９５】
次に、図９に示した「プログラムブロック毎の停止時出力設定」を読み出し（ステップ１３３）、この読み出した「プログラムブロック毎の停止時出力設定」に基づき該当プログラムブロックは停止時クリアかを調べる（ステップ１３４）。
【００９６】
ここで、該当プログラムブロックが停止時クリアに設定されていないと判断されると（ステップ１３４でＮＯ）、この処理を終了する。
【００９７】
また、ステップ１３４で、該当プログラムブロックが停止時クリアに設定されていると判断されると（ステップ１３４でＹＥＳ）、図７に示した「プログラムブロック別Ｉ／Ｏ使用状況情報」を読み出し（ステップ１３５）、該当Ｉ／Ｏメモリアドレスのデータをクリアし（ステップ１３６）、この処理を終了する。
【００９８】
図１３は、図１０示したＰＬＣ１００の全体処理のステップ１１９における第２の実施の形態におけるＩ／Ｏリフレッシュ処理の詳細を示すフローチャートである。
【００９９】
図１３において、まず、図１のワークメモリ１０６から図８に示した「プログラムブロック起動情報」を読み出し（ステップ１４１）、次に、図７に示した「プログラムブロック別Ｉ／Ｏ使用状況情報」を読み出す（ステップ１４２）。
【０１００】
そして、ステップ１４１で読み出した「プログラムブロック起動情報」およびステップ１４２で読み出した「プログラムブロック別Ｉ／Ｏ使用状況情報」に基づきプログラムブロックは起動中かを調べる（ステップ１４３）。
【０１０１】
ここで、プログラムブロックが起動中であると判断されると（ステップ１４３でＹＥＳ）、ステップ１４９へ進み、図７に示した「プログラムブロック別Ｉ／Ｏ使用状況情報」と図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」からＩ／Ｏメモリ１０２と入出力ポートとのデータ交換を行い、次に、残りプログラムブロックはあるかを調べ（ステップ１４７）、ここで、残りプログラムブロックはあると判断されると（ステップ１４７でＹＥＳ）、ステップ１４１に戻るが、残りプログラムブロックがないと判断されると（ステップ１４７でＮＯ）、図７に示した未使用Ｉ／Ｏの「プログラムブロック別Ｉ／Ｏ使用状況情報」と図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」からＩ／Ｏメモリ１０２と入出力ポートとのデータ交換を行い（ステップ１４８）この処理を終了する。
【０１０２】
また、ステップ１４３で、プログラムブロックが起動中ではないと判断されると（ステップ１４３でＮＯ）、図１に示したパラメータメモリ１０５から、図９に示した「プログラムブロック毎の停止時出力設定」を読み出す（ステップ１４４）。
【０１０３】
そして、ステップ１４４で読み出した「プログラムブロック毎の停止時出力設定」に基づき、当該プログラムブロック停止時リフレッシュがないかを調べる（ステップ１４５）。
【０１０４】
ここで、当該プログラムブロック停止時リフレッシュがないと判断されると（ステップ１４５でＹＥＳ）、ステップ１４７に進み、残りプログラムブロックはあるかを調べ、ここで、残りプログラムブロックはあると判断されると（ステップ１４７でＹＥＳ）、ステップ１４１に戻るが、残りプログラムブロックがないと判断されると（ステップ１４７でＮＯ）、図７に示した未使用Ｉ／Ｏの「プログラムブロック別Ｉ／Ｏ使用状況情報」と図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」からＩ／Ｏメモリ１０２と入出力ポートとのデータ交換を行い（ステップ１４８）この処理を終了する。
【０１０５】
また、ステップ１４５で、当該プログラムブロック停止時リフレッシュがあると判断されると（ステップ１２４でＮＯ）、図７に示した「プログラムブロック別Ｉ／Ｏ使用状況情報」と図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」から該当の出力ポートにＯＦＦデータを出力し（ステップ１４６）、次に、残りプログラムブロックはあるかを調べ（ステップ１４７）、ここで、残りプログラムブロックはあると判断されると（ステップ１４７でＹＥＳ）、ステップ１４１に戻るが、残りプログラムブロックがないと判断されると（ステップ１４７でＮＯ）、図７に示した未使用Ｉ／Ｏの「プログラムブロック別Ｉ／Ｏ使用状況情報」と図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」からＩ／Ｏメモリ１０２と入出力ポートとのデータ交換を行い（ステップ１４８）この処理を終了する。
【０１０６】
図１４は、図１０示したＰＬＣ１００の第２の実施の形態におけるエラー発生時のプログラムブロック停止処理を示すフローチャートである。
【０１０７】
図１４において、エラーが発生すると、まず、エラーが発生した該当プログラムブロックの処理を停止し（ステップ１５１）、次に、図８に示した「プログラムブロック起動情報」に該当プログラムブロック停止を記憶する（ステップ１５２）。
【０１０８】
次に、図９に示した「プログラムブロック毎の停止時出力設定」を読み出し（ステップ１５３）、更に、図７に示した「プログラムブロック別Ｉ／Ｏ使用状況情報」および図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」を読み出す（ステップ１５４）。
【０１０９】
そして、該当の出力ポートにＯＦＦデータを出力し（ステップ１５５）、この処理を終了する。
【０１１０】
図１５は、図１に示したＰＬＣ１００における第３の実施の形態におけるＰＬＣ１００の全体処理を示すフローチャートである。
【０１１１】
図１５において、まず、所定の電源ＯＮ初期処理が実行され（ステップ１６０）、次に、入出力装置確認処理が実行される（ステップ１６１）。
【０１１２】
そして、ステップ１６１の入出力装置確認処理に基づき、図５に示した「入出力装置上のＩ／Ｏ構成情報」を作成する（ステップ１６２）。このステップ１６２で作成した「入出力装置上のＩ／Ｏ構成情報」は、図１に示したワークメモリ１０６に格納される。
【０１１３】
次に、図６に示した「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」を作成する（ステップ１６３）。
【０１１４】
この「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」は、図２に示した複数のプログラムブロックに分割されたプログラム構成、図３に示した入出力装置２００の入出力ポート構成、図４に示したＩ／Ｏメモリ１０２の構成、ステップ１１２で作成した図５に示す「入出力装置上のＩ／Ｏ構成情報」に基づき作成される。
【０１１５】
次に、所定の共通処理を実行した（ステップ１６４）後、このＰＬＣ１００は運転可能かを調べる（ステップ１６５）。
【０１１６】
ここで、運転可能でないと判断されると（ステップ１６５でＮＯ）、ステップ１６７に進み、Ｉ／Ｏリフレッシュ処理を実行し、その後、サポートツール３００との通信を行って（ステップ１６８）、ステップ１６４に戻る。
【０１１７】
また、ステップ１６５で、運転可能と判断されると（ステップ１６５でＹＥＳ）、プログラム運転処理を実行し（ステップ１６６）、Ｉ／Ｏリフレッシュ処理を実行し（ステップ１６７）、その後、サポートツール３００との通信を行って（ステップ１６８）、ステップ１６４に戻る。
【０１１８】
図１６は、図１に示したＰＬＣ１００における入出力装置２００のユニット実装例とＩ／Ｏメモリ１０２への割付の具体例を示す図である。
【０１１９】
図１６において、第０ラックの０ｃｈは、第０ポートに対応しており、ここには１６点の入力ユニットが割り当てられ、１ｃｈは、第１ポートに対応し、ここには１６点の出力ユニットが割り当てられ、２ｃｈは、第２ポートに対応し、ここには１６点の出力ユニットが割り当てられる。また、第０ラックの第３ポートおよび第４ポートは空きである。
【０１２０】
また、第０ラックの３ｃｈは、第５ポートに対応し、ここには１６点の出力ユニットが割り当てられ、４ｃｈおよび５ｃｈは、第６ポートに対応し、ここには、３２点の入力ユニットが割り当てられ、６ｃｈは、第７ポートに対応し、ここには１６点の入力ユニットが割り当てられる。
【０１２１】
また、第１ラックの第０ポートは空きであり、７ｃｈは、第１ポートに対応し、ここには１６点の出力ユニットが割り当てられ、また、第２ポートは空きである。
【０１２２】
また、第１ラックの８ｃｈおよび９ｃｈは、第３ポートに対応しており、ここには３２点の入力ユニットが割り当てられ、また、第２ポートは空きである。
【０１２３】
また、第１ラックの１０ｃｈ、１１ｃｈ、１２ｃｈ、１３ｃｈは、第５ポートに対応しており、ここには６４点の出力ユニットが割り当てられ、また、第６ポートおよび第７ポートは空きである。
【０１２４】
図１７は、図１６に示した実装例における「入出力装置上のＩ／Ｏ構成情報」の具体例を示す図である。
【０１２５】
図１７において、４ビットのデータは、上述したように
１）０＊＊＊      入出力ユニットの装着なし
２）１＊＊＊      入出力ユニットの装着あり
３）＊０＊＊      入出力ユニットの種別がＯＵＴ
４）＊１＊＊      入出力ユニットの種別がＩＮ
５）＊＊００      未使用
６）＊＊０１      １６点
７）＊＊１０      ３２点
８）＊＊１１      ６４点
の意味を持っている。
【０１２６】
例えば、第０ラックの第２ポートは「１００１」であるので、ここには１６点の出力ユニットが割り当てられていることを示している。また、第０ラックの第６ポートは「１０１０」であるので、ここには３２点の入力ユニットが割り当てられていることを示している。
【０１２７】
また、例えば、第１ラックの第２ポートは「００００」であるので、このポートは空きであることを示しており、第１ラックの第５ポートは「１０１１」であるので、６４点の出力ユニットが割り当てられていることを示している。他も同様である。
【０１２８】
図１８は、図１６に示した実装例における「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」の具体例を示す図である。
【０１２９】
ここでは、Ｉ／Ｏメモリ１０２のチャネル毎に、対応する入出力装置２００のポートアドレス（ラック、ポート、割付位置）が記憶されている。
【０１３０】
図１９は、ユーザプログラムの具体例を示す図である。
【０１３１】
図１９においては、以下の仕様を仮定している。
【０１３２】
１）プログラムの分割の総数は３である
２）各プログラムブロックはラダー命令を命令単位とする実行オブジェクトの組み合わせとして構成される
３）ラダーオブジェクトは３２ｂｉｔ／命令で構成される
なお、ラダープログラムには実際は単純なリレー命令から高度なデータ演算が存在するが、ここでは以下の３命令を例にとって説明する。
【０１３３】
１）ＬＤ（入力リレーアドレス）
２）ＯＵＴ（出力リレーアドレス）
３）ＭＯＶ（転送元ＣＨアドレス）（転送先アドレス）
なお、括弧内は、命令に与えられるパラメータである。
【０１３４】
すなわち、「ＬＤ」は、パラメータで指定されたリレーアドレスのＯＮ／ＯＦＦ状態を読み込む命令で、論理演算の初期化を行い、以降に読み込まれる他のリレーのＯＮ／ＯＦＦ状態との論理演算が行われる。
【０１３５】
また、「ＯＵＴ」は、パラメータで指定されたリレーアドレスに論理演算の結果を出力する命令である。
【０１３６】
また、「ＭＯＶ」は、第１パラメータで指定されたＣＨのデータを第２パラメータで指定されたＣＨに転送する命令である。
【０１３７】
また、図２０は、図１９に示したユーザプログラムの場合の「プログラムブロック別Ｉ／Ｏ使用状況情報」の具体例を示す図である。
【０１３８】
さて、図１９に示したユーザプログラムから、図２０に示した「プログラムブロック別Ｉ／Ｏ使用状況情報」の生成は以下に示す方法により行われる。
【０１３９】
１）命令毎にパラメータが割り付けられるリレー／ＣＨアドレスが読み出しか書き込みかが決まっているため、プロジェクトオブジェクトを読み出し、書き込みのための命令パラメータとして定義されているＣＨアドレスをプログラムブロックごとに抽出する。
【０１４０】
２）「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」と照らし合わせ、出力Ｉ／Ｏアドレスに割り付けられていないＣＨアドレスは上記の抽出から除外する。
【０１４１】
３）２）の結果と「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」とを再度照らし合わせ、出力ポートに割り付けられているＣＨのうち、プログラム上で使用されていないＣＨを未使用のＣＨとして抽出する。
【０１４２】
４）２）の結果を「プログラムブロック別Ｉ／Ｏ使用状況情報」の「プログラム＊用領域」として、プログラム番号の小さい順に、また、ＣＨ番号の小さい順に並べる。各領域の境界アドレスを算出し、「プログラムブロック別Ｉ／Ｏ使用状況情報」の先頭に配置する。
【０１４３】
なお、第３の実施の形態のサポートツール３００による上記「プログラムブロック別Ｉ／Ｏ使用状況情報」の生成においては、「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」の代用となるようなＣＨ割付情報をサポートツール側で予め用意しておくことで同様に生成することができる。
【０１４４】
以上説明したように、この発明の第１〜第３実施形態によれば、以下に示すような効果を奏する。
【０１４５】
１）異常が発生したプログラムブロックのみ異常停止させることができ、併せて該当プログラムブロックからの出力をリセットすることができるため、他のプログラムブロックは正常に動作を続け、装置全体の停止範囲を必要最小限に留めることができる。
【０１４６】
２）異常停止した機能ユニットのリカバリを他の正常に動作しているプログラムブロックから行えるため、別のＰＬＣを設置することなく設備全体のコストダウンに繋がる。
【０１４７】
３）装置そのもの、または装置内の機能ユニット単位で、プログラムブロックを独立させておけば、ＰＬＣの運転を止めることなく、つまり他の装置または機能ユニットを停止させることなく、該当部分を切り離すことができ、段取り替え等の際に該当の機能ユニット装置を、運転停止することなく行うことができる。
【０１４８】
４）実際に動いているプログラムブロックの部分の出力処理のみ行われるので、入出力点数は多くても実動作している点数が少ない場合は、リフレッシュ処理の負担が軽減されるため、ＰＬＣの性能、つまり入出力応答性が向上する。
【０１４９】
５）異常停止させるべき装置／ユニットへの出力方法として、Ｉ／Ｏメモリの保持／クリアの選択および出力ポートへの出力処理停止／継続、およびＩ／Ｏメモリの状態如何に拘わらず強制的に出力ポートにゼロデータ（ＯＦＦデータ）を出力する動作が選択できる手段を用意することで、停止対象の装置／ユニットの仕様に合わせてユーザが望む装置／ユニットの停止状態が選択できる。
【０１５０】
例えば、異常停止後の復旧作業のために一旦は出力をＯＦＦしておいて、その原因を除去した後に再び動作を停止した状態から継続させるような場合は、Ｉ／Ｏメモリの内容は保持したままで出力ポートにゼロデータを出力する方法を用いればよい。
【０１５１】
また、異常停止後の復旧動作において、停止対象となった出力ポートに対してユーザが強制的にＯＮ／ＯＦＦ操作をマニュアルで行うような場合には、Ｉ／Ｏメモリをクリアで出力ポートへの出力処理を継続する方法を用いることで、ユーザ自身によるＩ／Ｏメモリの変更操作によってその結果が装置／ユニット側に反映される。
【０１５２】
【発明の効果】
以上の説明で明らかなように、この発明によれば、いずれかのプログラムブロックに関して異常が発生した場合には、異常発生にかかるプログラムブロックの実行のみが停止され、その他のプログラムブロックについては実行が継続されるため、従来のＰＬＣにおいて問題とされた、その異常に対して独立して動作可能でかつ正常に動作している機能ユニットの制御まで止めてしまうことがなくなり、このために設備全体の稼動率や生産性を低下させることもなくなり、異常発生時の被害波及範囲の制限並びに異常停止対策の低コスト化等を図ることが可能となる。
【図面の簡単な説明】
【図１】  この発明に係わるＰＬＣの全体構成を示すブロック図である。
【図２】  図１に示したＰＬＣ１００のプログラム構成の一例を示す図である。
【図３】  図１に示したＰＬＣ１００の入出力ポート構成の一例を示す図である。
【図４】  図１に示したＰＬＣ１００のＩ／Ｏメモリ１０２の構成の一例を示す図である。
【図５】  図１に示したＰＬＣ１００で使用する「入出力装置上のＩ／Ｏ構成情報」の一例を示す図である。
【図６】  図１に示したＰＬＣ１００で使用する「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」の一例を示す図である。
【図７】  図１に示したＰＬＣ１００で使用する「プログラムブロック別Ｉ／Ｏ使用状況情報」の一例を示す図である。
【図８】  図１に示したＰＬＣ１００で使用する「プログラムブロック起動情報」の一例を示す図である。
【図９】  図１に示したＰＬＣ１００で使用する「プログラムブロック毎の停止時出力設定」の一例を示す図である。
【図１０】  図１に示したＰＬＣ１００における第１の実施の形態および第２の実施の形態におけるＰＬＣ１００の全体処理を示すフローチャートである。
【図１１】  図１０示したＰＬＣ１００の全体処理のステップ１１９における第１の実施の形態におけるＩ／Ｏリフレッシュ処理の詳細を示すフローチャートである。
【図１２】  図１０示したＰＬＣ１００の第１の実施の形態におけるエラー発生時のプログラムブロック停止処理を示すフローチャートである。
【図１３】  図１０示したＰＬＣ１００の全体処理のステップ１１９における第２の実施の形態におけるＩ／Ｏリフレッシュ処理の詳細を示すフローチャートである。
【図１４】  図１０示したＰＬＣ１００の第２の実施の形態におけるエラー発生時のプログラムブロック停止処理を示すフローチャートである。
【図１５】  図１に示したＰＬＣ１００における第３の実施の形態におけるＰＬＣ１００の全体処理を示すフローチャートである。
【図１６】  図１に示したＰＬＣ１００における入出力装置２００のユニット実装例とＩ／Ｏメモリ１０２への割付の具体例を示す図である。
【図１７】  図１６に示した実装例における「入出力装置上のＩ／Ｏ構成情報」の具体例を示す図である。
【図１８】  図１６に示した実装例における「入出力装置上のＩ／ＯポートアドレスとＩ／Ｏメモリとの対応情報」の具体例を示す図である。
【図１９】  ユーザプログラムの具体例を示す図である。
【図２０】  図１９に示したユーザプログラムの場合の「プログラムブロック別Ｉ／Ｏ使用状況情報」の具体例を示す図である。
【符号の説明】
１００    プログラマブルロジックコントローラ（ＰＬＣ）
１０１    演算プロセッサ（ＣＰＵ）
１０２    入出力メモリ（Ｉ／Ｏメモリ）
１０３    ユーザプログラムメモリ
１０４    システムプログラムメモリ
１０５    パラメータメモリ
１０６    ワークメモリ
１０７    入出力インタフェース（Ｉ／ＯＩ／Ｆ）
１０８    シリアルインタフェース（シリアルＩ／Ｆ）
２００    入出力装置
３００    サポートツール
【図１】
0003775466.tif 000002
【図２】
0003775466.tif 000003
【図３】
0003775466.tif 000004
【図４】
0003775466.tif 000005
【図５】
0003775466.tif 000006
【図６】
0003775466.tif 000007
【図７】
0003775466.tif 000008
【図８】
0003775466.tif 000009
【図９】
0003775466.tif 000010
【図１０】
0003775466.tif 000011
【図１１】
0003775466.tif 000012
【図１２】
0003775466.tif 000013
【図１３】
0003775466.tif 000014
【図１４】
0003775466.tif 000015
【図１５】
0003775466.tif 000016
【図１６】
0003775466.tif 000017
【図１７】
0003775466.tif 000018
【図１８】
0003775466.tif 000019
【図１９】
0003775466.tif 000020
【図２０】
0003775466.tif 000021