(57)【特許請求の範囲】
【請求項１】
複数の命令語から構成されるプログラム構成単位であるＰＯＵを含むユーザプログラムを演算実行する演算部と、
インターロック状態の時、前記ＰＯＵ内の命令を実行するか否かを特定するインターロック時動作情報を格納する記憶部と、
を備え、
前記ユーザプログラムは、対となるインターロック開始命令とインターロック終了命令が記述された場合、その両命令で囲んだ区間がインターロック領域となり、前記インターロック開始命令に対応する入力がインターロック状態を示す値の場合、前記インターロック領域をインターロック状態となるようにし、
前記演算部は、
前記ユーザプログラム中のＯＵＴ命令を実行するに際し、そのＯＵＴ命令が含まれるインターロック領域がインターロック状態か否かを判断し、インターロック状態の場合には設定されたインターロック処理を実行する機能と、
インターロック状態のインターロック領域内に存在する前記ＰＯＵを実行するに際し、前記記憶部のインターロック時動作情報を確認し、その確認結果に基づきそのＰＯＵ内の命令の実行／非実行をする機能と、
を備えたことを特徴とする産業用コントローラ用機器。
【請求項２】
前記ユーザプログラムは、インターロック開始命令とインターロック終了命令とで囲んだインターロック領域内に別のインターロック開始命令とインターロック終了命令とを配置するインターロック領域のネストが許容され、
前記インターロック開始命令に対応する入力が、インターロック状態か通常状態かを示す状態判定用フラグを格納するデータ領域を備え、
前記演算部は、入れ子状態のインターロック領域については、前記データ領域の、その入れ子状態のインターロック領域に対応する状態判定用フラグと、そのインターロック領域を含むように設定される他のインターロック領域に対応する状態判定用フラグとのうち、少なくとも１つがインターロック状態を示す場合、その入れ子状態のインターロック領域はインターロック状態として処理をすることを特徴とする請求項１に記載の産業用コントローラ用機器。
【請求項３】
前記ＰＯＵ中に、対となるインターロック開始命令とインターロック終了命令が記述され、前記演算部は、そのＰＯＵ中でもインターロック状態か否かにより対応する処理を実行することを特徴とする請求項１または２に記載の産業用コントローラ用機器。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＰＬＣやＰＡＣ等の産業用コントローラ並びにその産業用コントローラを構成するＣＰＵユニット等の産業用コントローラ用機器に関するものである。
【背景技術】
【０００２】
ＦＡ（Ｆａｃｔｏｒｙ  Ａｕｔｏｍａｔｉｏｎ）におけるネットワークシステムは、生産設備内の入力機器及び出力機器の制御を司る１または複数のＰＬＣ（Programmable Logic Controller）と、そのＰＬＣにより動作が制御される機器とが、制御系のネットワークに接続される。それらＰＬＣと機器は、その制御系のネットワークを介してサイクリックに通信を行なうことで、ＩＮデータ及びＯＵＴデータ（以下Ｉ／Ｏデータという）の送受を行ない、生産設備を制御する。
【０００３】
また、最近では、次世代の産業用コントローラとして、ＰＡＣ（Programmable Automation Controller）と称されるコントローラが開発されている。このＰＡＣは、パーソナルコンピュータが持つ高速性や高機能や機能拡張性に加え、ＰＬＣが持つ高精度や耐久性を備えている。そのＰＡＣもＰＬＣと同様に、ネットワークを介して生産設備の機器と通信を行なうことで、Ｉ／Ｏデータの送受を行ない、生産設備を制御する。
【０００４】
上記のＰＬＣやＰＡＣ等の産業用コントローラは、複数のユニットを連結して構成されるタイプのものがある。そのユニットの１つである産業用コントローラの制御を統括するＣＰＵユニットは、ラダー言語等で作製されたユーザプログラムを実行する。このＣＰＵユニットは例えば、ＩＮデータである入力機器のＯＮ信号またはＯＦＦ信号を入力し、入力したＯＮ／ＯＦＦ情報をユーザプログラムによって論理演算し、演算結果であるＯＵＴデータを出力機器へ出力する。その出力が出力機器に対する動作指示となって出力機器が動作することにより、生産設備を制御する。このユーザプログラムの実行命令の一つとして、インターロックがある。このインターロックは、ＩＮデータの対象のひとつとなる所定の接点がＯＦＦになった場合、インターロック領域の対象となるＯＵＴデータとなる所定の接点はＯＦＦに固定されるものである。
【特許文献１】国際公開番号WO97/23812
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来のインターロックは、通常、専用のハードウェア、例えばＡＳＩＣチップ等により実現されるため、ＡＳＩＣのゲート数の観点からインターロックへの処理対応の柔軟性が低かった。例えばインターロック領域のプログラム中にファンクションブロックが存在する場合、ファンクションブロックのプログラムは実行されないように固定されていた。そのため、ファンクションブロックを呼び出してプログラムを実行し、内部の接点をＯＮ／ＯＦＦ動作させたい等の要求があっても、対応できない場合があった。もちろん、インターロック領域内にあるＯＵＴ接点はＯＦＦにするのがインターロックの本来の機能であるので、ファンクションブロックを実行したとして最終的な出力接点はＯＦＦになることもあり、インターロック中は、ファンクションブロックも実行させないで良い（実行させたくない）という考えも当然あるが、実行させたい場合もある。しかし、従来の専用ハードウェアによるインターロックの実行では、インターロック領域内に存在するファンクションブロックの実行／非実行に対するユーザの要求に対応できない。
【０００６】
この発明は、ユーザプログラム中のインターロックに柔軟に対応ができ、対象プログラムの特徴にあわせたインターロックアルゴリズムの変更が可能な産業用コントローラ用機器を提供することを目的とする。
【課題を解決するための手段】
【０００７】
従来のインターロックは専用ハードウェアで実現されており、コンパイル型のプログラムを前提としていなかった。本発明ではソフトウェアによるインターロックを実現することにより、柔軟なファンクションブロックその他のＰＯＵを含むユーザプログラムの設計が可能となる。例えば、ファンクションブロック（ＦＢ）等のＰＯＵに対してインターロック有効か無効かの選択をユーザが個々に行なうことで、そのＰＯＵが存在するインターロック領域がインターロック状態であっても、ＰＯＵ内の命令を実行したり、非実行としたりすることができる。具体的には、下記のよう構成する。
【０００８】
（１）本発明に係る産業用コントローラ用機器は、複数の命令語から構成されるプログラム構成単位であるＰＯＵを含むユーザプログラムを演算実行する演算部と、
インターロック状態の時、ＰＯＵ内の命令を実行するか否かを特定するインターロック時動作情報を格納する記憶部と、を備える。そして、ユーザプログラムは、対となるインターロック開始命令とインターロック終了命令が記述された場合、その両命令で囲んだ区間がインターロック領域となり、インターロック開始命令に対応する入力がインターロック状態を示す値の場合、インターロック領域をインターロック状態となるようにする。演算部は、ユーザプログラム中のＯＵＴ命令を実行するに際し、そのＯＵＴ命令が含まれるインターロック領域がインターロック状態か否かを判断し、インターロック状態の場合には設定されたインターロック処理を実行する機能と、インターロック状態のインターロック領域内に存在するＰＯＵを実行するに際し、記憶部のインターロック時動作情報を確認し、その確認結果に基づきそのＰＯＵ内の命令の実行／非実行をする機能と、を備えるようにした。
【０００９】
産業用コントローラ用機器は、実施形態のＣＰＵユニット２単体でも良いし、それを含むＰＡＣのように産業用コントローラ自体も含む概念である。産業用コントローラの場合、実施形態のように複数のユニットを連結して構成されるものはもちろん、必要な機能が１つの筐体に組み込まれた一体型のものも含む。
【００１０】
ＰＯＵは、“Program Organization Unit”の略であり、プログラム構成単位とも称される。このＰＯＵは複数の命令語から構成されるプログラム管理上の最小単位で、プログラム，ファンクション，ファンクションブロックと呼ばれるものである。このＰＯＵ単位でプログラム再利用ができる。
【００１１】
演算部は、実施形態ではＭＰＵ２１に対応する。そのインターロック領域がインターロック状態か否かは、実施形態では、“isInterLock”の値を参照することでわかる。このように、インターロック状態／通常状態を識別する識別情報を適宜設定・更新するようにすると、演算部は、ＯＵＴ命令を実行するに際し、対応する識別情報を参照するだけで、通常処理をするかインターロック処理をするかを認識できる。インターロック時動作情報は、実施形態では、インターロック時動作フラグに対応する。
【００１２】
本発明によれば、ＯＵＴ命令を実行するに際し、その都度、インターロック状態か否かを確認し、インターロック状態の場合にはそれに応じた処理（出力ＯＦＦや命令非実行等）を行ない、通常状態であれば通常の演算処理をする。これにより、ソフトウェアによるインターロックを実現することができる。そして、インターロック時動作情報を適宜に設定することにより、インターロック状態のインターロック領域中に存在するＰＯＵを実行させたり、従来通り実行させないようにしたりすることが個別に設定可能となる。特に、ＰＯＵがファンクションブロックのように内部変数を持つものの場合、インターロック状態であってもプログラムを実行させることで内部変数の更新を行なうことができるので好ましい。
【００１３】
（２）ユーザプログラムは、インターロック開始命令とインターロック終了命令とで囲んだインターロック領域内に別のインターロック開始命令とインターロック終了命令とを配置するインターロック領域のネストが許容され、インターロック開始命令に対応する入力が、インターロック状態か通常状態かを示す状態判定用フラグを格納するデータ領域を備え、演算部は、入れ子状態のインターロック領域については、その入れ子状態のインターロック領域に対応する状態判定用フラグと、そのインターロック領域を含むように設定される他のインターロック領域に対応する状態判定用フラグフラグのうち、少なくとも１つがインターロック状態を示す場合、その入れ子状態のインターロック領域はインターロック状態として処理をするようにするとよい。これにより、インターロックのネストを実現できる。
【００１４】
（３）ＰＯＵ中に、対となるインターロック開始命令とインターロック終了命令が記述され、演算部は、そのＰＯＵ中でもインターロック状態か否かにより対応する処理を実行するようにするとよい。
【発明の効果】
【００１６】
本発明は、産業用コントローラ用機器において、ユーザプログラム中のインターロックについて個々に柔軟に対応ができ、対象プログラムの特徴にあわせたインターロックアルゴリズムの設定や変更が可能となる。
【発明を実施するための最良の形態】
【００１７】
図１は、本発明が適用される産業用コントローラの一種であるプログラマブルオートメーションコントローラ（Programmable Automation Controller、略してＰＡＣ）１の一形態を示している。このＰＡＣ１は、各種の機能を実現するための複数のユニットを連結して構成され、各ユニットは内部バスにて接続される。この複数のユニットは、少なくとも１つのＣＰＵユニット２を有する。更に、本実施形態では、ＰＡＣ１は、電源ユニット３，モータユニット４，カウンタユニット５，画像ユニット６，通信ユニット７，Ｉ／Ｏユニット８を備えている。もちろん、ＰＡＣ１を構成するユニットは、上記のものに限ることはなく、実行したい制御等に応じて必要なユニットを適宜取捨選択して構成する。例えば、ＰＡＣは、「ＣＰＵユニット＋モータユニット＋カウンタユニット」，「ＣＰＵユニット＋Ｉ／Ｏユニット」という組合せの構成も有効である。なお、本実施形態では、ＰＡＣ１を例にして説明するが、ＰＬＣについても同様に適用できる。
【００１８】
ＣＰＵユニット２やその他のユニットに対して事前に各種の詳細設定を行なう。その場合、図示するように、ユーザは、ＣＰＵユニット２にパソコンを接続するとともに、そのパソコンにインストールされたアプリケーションプログラムである設定ツールプログラムを起動し、その設定ツールプログラムを用いて、制御プログラム（ユーザプログラムとも呼ぶ）の作成または編集をしてＣＰＵユニットに記憶したり、ユニット間通信に関する設定をしたり、各種ユニットを動作するための各種の詳細設定をする。ＣＰＵユニット２は、基本的には入力ユニットや通信ユニットを経由してＩＮデータを取り込む処理（ＩＮリフレッシュ処理）、取り込んだＩＮデータに基づいて制御プログラムを演算実行する処理（ユーザプログラム実行処理）、出力ユニット等へＯＵＴデータを出力する処理（ＯＵＴリフレッシュ）を行なう。電源ユニット３は、商用電力・交流電圧を各ユニットに応じた直流電圧に変換し、連結された各ユニットに電力を供給する。なお、各ユニットに対して直接直流電圧を供給することで、電源ユニットを接続しない構成とすることでもよい。モータユニット４は、１台以上のサーボドライブ（サーボモータとその制御装置）を接続でき、そのサーボモータの制御を行う。カウンタユニット５は、１台以上のロータリーエンコーダを接続し、エンコーダからのパルス信号を取り込んで回転量や対象物体の移動量などを計測する。画像ユニット６は、１台以上のカメラを接続し、カメラからの画像について所望の画像処理を行なって撮像対象の物体の移動量や部品個数などを計測する。通信ユニット７は、ネットワークに接続された他の産業用コントローラとデータの送受を行なう。Ｉ／Ｏユニット８は、設備装置内のセンサやスイッチなどの入力機器を接続してそれらのオン・オフ信号を入力信号として取り込む入力ユニットや、設備装置側の制御対象となるアクチュエータやリレーなどの出力機器を接続してそれらに対して出力信号を送り出す出力ユニット等である。入力機能と出力機能とを併せ持つ入出力ユニットも含まれる。
【００１９】
これらの各ユニットは、ユニットの側面に設けられたコネクタ同士を接続することで、電気的に接続される。この接続により、各ユニット同士は内部バス（パラレル通信）や高速シリアル通信線等を用いて接続され、ユニット間でのデータの送受が行なわれる。
【００２０】
図２は、ＣＰＵユニット２の内部構成を示している。ＣＰＵユニット２は、ＭＰＵ２１と、周辺コントローラ２２と、メモリ２３と、通信インタフェース２４と、を備えている。ＭＰＵ２１は、パーソナルコンピュータ等にも実装される高性能なもので、所定の演算処理を実行する。このＭＰＵ２１は、実行周期ごとに分けた複数のタスクを、定周期間隔でスキャンし動作する。すなわち、ＭＰＵ２１が実行すべきタスクは、たとえば１ｍｓ周期で実行すべきタスクもあれば、２ｍｓ周期で実行すべきタスクもある。もちろん、それ以外にも、４ｍｓ，８ｍｓ，……というような様々な周期のタスクが存在することがある。そこで、ＭＰＵ２１は、マルチタスク処理により実行すべき周期のタスクを演算処理する。なお、各タスクは、例えば、ラダー言語などで書かれたユーザプログラムを実行するものである。従来のＰＬＣの場合、上記の各タスクごとの実行周期という概念はなく、それら各タスクに対応するプログラムをまとめて記述した一連の制御プログラムを先頭から順に実行し、更に、ＩＯリフレッシュや周辺処理を含む１つのサイクル処理をサイクリックに繰返し実行するようにしていたが、本実施形態のＰＡＣ１は、上記のようにマルチタスク処理（時分割処理）を行なう点で相違する。なお、それぞれのマルチタスク処理についてＩＮリフレッシュ処理及びＯＵＴリフレッシュとは同期しなくてもよいし、同期させてもよい。また、ＰＡＣは、必ずしもマルチタスク処理をするものではなく、従来のようにサイクリックに処理をするものでも良い。
【００２１】
周辺コントローラ２２は、チップセットとも称されるもので、メモリ２３やインタフェース２４とＭＰＵ２１との間を取り持ち、調停やタイミング調整を行なう。これにより、ＭＰＵ２１は、演算に注力することができる。メモリ２３は、例えばＭＰＵ２１が演算処理をする際にワークメモリとして使用される。通信インタフェース２４は、設定用のツール装置を構成するパーソナルコンピュータと接続を図るためのインタフェースである。なお、図示省略するが、他のスレーブ（ユニット）と通信をするための通信インタフェースも備える。このスレーブとしての通信ユニットは、ＰＡＣ１の内部に実装される通信媒体（内部バス，高速シリアル通信線）を介して通信をする。
【００２２】
本実施形態では、ファンクションブロック（Ｆｕｎｃｔｉｏｎ  Ｂｌｏｃｋ：ＦＢ）によるプログラムの記述を許容しているので、メモリ２３上に各ファンクションブロックのインスタンス格納用のデータ領域であるＦＢインスタンス格納用領域２３ａを設けている。図３（ａ）に示すように、メモリ２３に設定されるＦＢインスタンス格納用領域２３ａは、ファンクションのインスタンスごとに独立して必要な情報を確保するものであり、主に３つの領域から構成される。すなわち、インターロック時にファンクションブロック呼び出しを行なうか否かを指定するフラグ（インターロック時動作フラグ）と、ファンクションブロックインスタンスが保持する各データを格納するデータ領域と、ファンクションブロック実行時の処理を指すポインタである。このポインタは図３（ａ）中の「手続き」に該当する。ポインタの情報は、メモリ２３に格納されているＦＢ定義（ファンクションブロック定義）の具体的な実行時処理を特定するための情報を格納する場所となる。つまり、このポインタで指されるのが、ファンクションブロック定義であり、具体的な実行時処理のプログラム（図５参照）が格納された領域となる。
【００２３】
補足すると、概念的にファンクションブロックは型と実体とから構成されている。型とはデータ型と手続きを表しており、実体の雛型となるものである、実体とは、雛型から生成されるものである。これに対応するようにファンクションブロックは、メモリ領域にＦＢ定義とＦＢインスタンス領域として格納される。そしてファンクションブロックのインスタンスごとに独立して必要な情報をＦＢインスタンス領域に確保し、同一のファンクションブロックのインスタンスに共通している情報をＦＢ定義に確保することになる。ＦＢインスタンス領域の代表例としてデータが、ＦＢ定義の代表例として手続きがある。手続きがＦＢ定義に確保されるためにファンクションブロック実行時の処理を指すポインタはＦＢ定義を表すことになる。
【００２４】
ＭＰＵ２１は、ファンクションブロック呼出時にインターロック時動作フラグを確認し、ＯＮならばインターロック中にファンクションブロック呼出を行ない、ファンクションブロックのプログラムを実行する。ＯＦＦならばインターロック中はファンクションブロック呼び出しを行わず、ファンクションブロックのプログラムを非実行とする。
【００２５】
更に、本実施形態では、ネストのあるインターロック実現のため、メモリ２３上に状態判定用フラグを格納するためのデータ領域２３ｂを設けている。図３（ｂ）に示すように、本実施形態ではデータ領域２３ｂを８ｂｉｔ分確保しており、各ｂｉｔがインターロックのネストの１段に対応している。あるインターロック領域がインターロック状態の場合には、対応するｂｉｔ（状態判定用フラグ）が０になり、あるインターロック領域がインターロック状態でない通常状態の場合には、対応するｂｉｔ（状態判定用フラグ）が１になるように制御する。これにより、少なくとも１つのｂｉｔに０の状態判定用フラグが存在していればインターロック状態であり、全てのｂｉｔが１の状態判定用フラグならば、通常状態であることがわかる。
【００２６】
次に、ＣＰＵユニット２が演算実行するネスト構造のインターロックについて、具体的なラダー図で記述されたユーザプログラムを用いて説明する。図４は、インターロック命令を用いたラダー図を示している。図において、“ＭＩＬＨ”が、インターロック開始命令であり、“ＭＩＬＣ”が、インターロック終了命令である。また、同一のインターロック番号（図では、“０”，“１”）により、対となるインターロック開始命令とインターロック終了命令が特定される。そして、この対となるインターロック開始命令からインターロック終了命令までの間が、インターロック領域となり、インターロック中は、そのインターロック領域中に存在する出力接点（図では“ＭＩＬＨ  ０”〜“ＭＩＬＣ  ０”にはさまれた“0002.00”，“Ｈ00.00”はＯＦＦ（０）となり、ＳＥＴ命令，ＣＮＴ命令等のＯＵＴ系の命令は実行されない。インターロックは、インターロック開始命令に関連付けられる入力接点（図では、“W000.00”，“W000.01”）がＯＦＦの時にインターロックされる。
【００２７】
また、本実施形態では、対となるＭＩＬＨからＭＩＬＣまでの区間であるインターロック領域中に、別の対となるＭＩＬＨ，ＭＩＬＣを入れ子状態に配置したネストを許容する。図示の例では、“ＭＩＬＨ  ０”〜“ＭＩＬＣ  ０”のインターロック領域中に、“ＭＩＬＨ  １”〜“ＭＩＬＣ  １”のインターロック領域が配置されたネスト構造となっている。
【００２８】
このプログラムによれば、MILH 0 0100.00の入力接点W000.00、MILH 1 0100.01の入力接点W000.01が共にＯＮの時、インターロック領域の命令はインターロックされずに全て通常通り実行される。
【００２９】
また、MILH 0 0100.00の入力接点W000.00がＯＦＦの時には、MILH 0 からMILC 0までのインターロック領域の出力がインターロックされる。つまり、入れ子となる“ＭＩＬＨ  １”，“ＭＩＬＣ  １”は、その外側の“ＭＩＬＨ  ０”，“ＭＩＬＣ  ０”がインターロックされている場合には、インターロック開始命令“ＭＩＬＨ  １”の入力接点W000.01の値に関わらず、MILH 1 0100.01からMILC 1までの領域の出力もインターロックされる。よって、インターロック中のため、ＭＰＵ２１は、出力接点である0002.00、H00.00接点をＯＦＦにし、SET 0002.03並びにCNT 1 #0010命令は、前サイクル時の値のままする（保持する）。
【００３０】
一方、MILH 0 0100.00の入力接点W000.00がＯＮで、MILH 1 0100.01の入力接点W000.01がＯＦＦの場合、“ＭＩＬＨ  ０”のインターロック開始命令ではインターロックがされず、“ＭＩＬＨ  １”のインターロック開始命令でインターロックとなる。従って、MILH 0 0100.00からMILH 1 0100.01の領域は通常通り実行され、ＭＰＵ２１は出力接点0002.00に入力接点0000.01の値（ＯＮ／ＯＦＦ）を書き込む。そして、MILH 1 0100.01からMILC 1までのインターロック領域の出力がインターロックされるので、MPU21は、その領域内のH00.00接点をＯＦＦ、SET 0002.03を前サイクルの値のままとする。また、MILC 1からMILC 0の領域は通常通り実行され、ＭＰＵ２１は、２つの入力接点（0000.04，0000.05）に基づきCNT命令を実行する。
【００３１】
そして、本実施形態では、インターロック状態であるか否かの判断をし、インターロック状態の場合にはインターロック中の処理をするのを、専用のハードウェアではなく、ソフトウェアにより処理するようにしている。これにより、ユーザプログラム中のインターロックに柔軟に対応ができ、対象プログラムの特徴にあわせたインターロックアルゴリズムの変更に対応できるようになる。
【００３２】
ＭＰＵ２１は、出力接点や、各種の命令等、少なくともインターロック状態か否かで処理が異なる箇所において、当該処理を実行するに先立ち、インターロック状態か通常状態かを判断し、その状態に応じた処理を実行するようにする。具体的には、図４に示すプログラムの場合、ＭＰＵ２１は、以下の処理を実行する。
【００３３】
（１）ＭＰＵ２１は、１ｂｉｔの値であるW000.00を読み込み、読み込んだ値をパワーフローと呼ぶデータ格納領域（Power Flow、以下ＰＦと表記する）に書き込む。次にＭＰＵ２１はMILH 0 0100.00命令を実行する。すなわち、ＭＰＵ２１は、ＰＦが０ならばインターロック状態となり、ＰＦが１ならば通常状態を継続するように決定する。
【００３４】
（２）ＭＰＵ２１は0000.01を読み込み、値をＰＦに書き込む。次にＭＰＵ２１はＯＵＴ 0002.00命令を実行する。すなわち、ＭＰＵ２１はインターロック状態ならば0002.00をＯＦＦとし、通常状態ならば0002.00にＰＦの値を書き込む。
【００３５】
（３）ＭＰＵ２１はW000.01を読み込み、ＰＦに書き込む。次にＭＰＵ２１はMILH 1 0100.01命令を実行する。つまりＭＰＵ２１はＰＦが０ならばインターロック状態となり、ＰＦが１ならば通常状態を継続する。
【００３６】
（４）ＭＰＵ２１は0000.02を読み込み、ＰＦに書き込む。ＭＰＵ２１はＯＵＴ H00.00命令を実行する。つまり、ＭＰＵ２１はインターロック状態ならばH00.00をＯＦＦとし、通常状態ならばH00.00にＰＦの値を書き込む。
【００３７】
（５）ＭＰＵ２１は0000.03を読み込み、ＰＦに書き込む。ＭＰＵ２１はインターロック状態ならばSET 0002.03命令を実行せず、前の値のままとし、通常状態ならばSET 0002.03命令を実行し、ＰＦがＯＮならば0002.03をＯＮとする。
【００３８】
（６）ＭＰＵ２１はMILC 1命令、つまりインターロック終了命令を実行する。このインターロック終了命令の具体的な処理アルゴリズムについては、後述する。
【００３９】
（７）ＭＰＵ２１は0000.04を読み込み、ＰＦに書き込む。ＭＰＵ２１はＰＦをスタックにプッシュし、0000.05を読み込み、ＰＦに書き込む。そして、ＭＰＵ２１はCNT 1 #0010命令を実行する。
【００４０】
（８）ＭＰＵ２１はインターロック終了命令であるMILC 0命令を実行する。
【００４１】
図５は、ネスト構造のインターロック命令を用いたラダー図の別の例を示している。このプログラムは、図４と比較し、ファンクションブロック１を含む点で相違する。また、図６は、このファンクションブロック１のプログラムの一例を示している。ファンクションブロック（Function Block、FB）は、ファンクションブロックの実体であるインスタンスごとにデータを所持する機能部品である。このようにファンクションブロックが存在する場合でも、インターロック開始命令の入力接点であるW000.00，W000.01のＯＮ／ＯＦＦの状態に応じて、図４の場合と同様に、全領域において各命令を通常通り実行する通常状態となったり、MILH 0 0100.00からMILC 0までの領域がインターロック状態となったり、MILH 1 0100.01からMILC 1までの領域のみがインターロック状態となったり、柔軟に対応できるようになっている。
【００４２】
そして、この図５に示すプログラムの場合、ＭＰＵ２１は、上述の（５）の処理が、下記の（５）′の処理を実行するように機能する。
【００４３】
（５）′ＭＰＵ２１は、0000.03を読み込み、ＰＦに書き込む。ＭＰＵ２１はＦＢ ＥＮ命令、ＥＮＯ命令を呼び出す。そして、図６に示したファンクションブロックの場合、ＭＰＵ２１はＥＮを読み込み、ＰＦに書き込む。次にＭＰＵ２１はＯＵＴ isRun命令を実行する。つまり、ＭＰＵ２１はインターロック状態ならばisRunをＯＦＦとし、通常状態ならばisRunにＰＦの値を書き込む。ここで、isRunはファンクションブロック内で定義されたBOOL型の局所変数である。また、図６から明らかなように、本実施形態のファンクションブロックは、その内部プログラムにおいてもインターロック開始命令のＭＩＬＨと、インターロック終了命令のＭＩＬＣの使用が許可されており、インターロック開始命令のMILH numILと対となる入力接点ＥＮの値により、ファンクションブロックの内部プログラムの所定領域が、インターロック状態になったり、通常状態になったりする。
【００４４】
ＭＰＵ２１はMILH numIL isIL命令を実行する。ＭＰＵ２１はＰＦが０ならばMILH numILからインターロック状態となり、ＰＦが１ならば通常状態を継続する。
【００４５】
ＭＰＵ２１は、常時ＯＮフラグであるP_Onを読み込み、ＰＦに書き込む。ＭＰＵ２１はＯＵＴ ＥＮＯ命令を実行する。ＭＰＵ２１はインターロック状態ならばＥＮＯをＯＦＦとし、通常状態ならばＥＮＯにＰＦの値を書き込む。そして、ＭＰＵ２１はMILC numIL命令を実行する。これにより、ファンクションブロックの内部プログラムの実行が完了する。
【００４６】
次いで、ＭＰＵ２１は出力接点H00.01に対する処理を実行するに際し、インターロック状態か否かを判断し、インターロック状態ならばH00.01をＯＦＦとし、通常状態ならばH00.01にＰＦの値を書き込む。
【００４７】
図７は、ＰＡＣ１（ＣＰＵユニット２のＭＰＵ２１）におけるサイクル処理の概略のフローチャートを示しており、図８は、１つのタスク並びに周辺サービスについての処理の詳細なフローチャートを示している。
【００４８】
まず、システムの電源がＯＮされたとき、ＭＰＵ２１は、電源ＯＮ時処理を行う（Ｓ１）。この電源ＯＮ時処理は、ハードメモリ並びにシステムワークの初期化，実装されているユニットの認識，メモリカードからの電源ＯＮ時自動転送処理，実装ユニットと登録Ｉ／Ｏテーブルの照合，Ｉ／Ｏメモリエリアのクリア，強制セット／リセット解除などの各種の処理がある。この処理は、従来からあるＰＬＣの場合と同様である。
【００４９】
次いで、ＭＰＵ２１は、登録されているタスクの数だけスレッドを生成し、適切なスケジューリングに従って生成したスレッドを実行する。各タスクは、たとえば実行周期ごとに分けた複数のタスクとすることができる。そして、ＭＰＵ２１は、それぞれを定周期間隔でスキャンし動作する。
【００５０】
各スレッドにおいて、ＭＰＵ２１は、最初に共通処理を行なう（Ｓ２）。すなわち、図８に示すように、ＭＰＵ２１は、バッテリ異常チェック，メモリカード着脱チェック，ディップスイッチ監視，Ｉ／Ｏバスチェック，ユーザプログラムのメモリチェック等を行なう（Ｓ２ａ）。そして、ＭＰＵ２１は、そのチェック結果が正常であるか否かを判断し（Ｓ２ｂ）、正常な場合には、共通処理を終了し、入力ユニットとのデータ交換を行うＩＮリフレッシュを行なう（Ｓ３）。また、チェック結果が異常の場合、ＭＰＵ２１は、対応する異常リレーをセットする（Ｓ２ｃ）。これに伴い、異常を知らせるＬＥＤが点灯・点滅したり、アラームが鳴ったりする。ＭＰＵ２１は、以上の種類が運転継続可能なものか否かを判断する（Ｓ２ｄ）。継続可能な場合（Ｓ２ｄはＹｅｓ）には、共通処理を終了し、ＩＮリフレッシュを行なう（Ｓ３）。なお、運転を停止する異常の場合（Ｓ２ｄはＮｏ）、ＭＰＵ２１は、ＩＮリフレッシュ並びにそれに続く演算処理を行なわずにＯＵＴリフレッシュを行なう（Ｓ５）
【００５１】
ＩＮリフレッシュの実行後、ＭＰＵ２１は、演算処理を行なう（Ｓ４）。すなわち、ＭＰＵ２１は、ユーザプログラムをプログラムの先頭から順に実行し（Ｓ４ａ）、ユーザプログラムが終了したか否かを判断し（Ｓ４ｂ）、終了していなければユーザプログラムの実行へ処理を戻す。この処理ステップＳ４ａ，Ｓ４ｂを繰り返し実行することにより、ＭＰＵ２１は、ユーザプログラムを最終行まで実行する。そして、ユーザプログラムが終了していれば（Ｓ４ｂはＹｅｓ）、ＭＰＵ２１は、サイクルタイム算出処理を行なう（Ｓ４ｃ）。つまり、実行周期である次のサイクルタイムまでの時間を算出し、設定する。そして、ＭＰＵ２１は、設定されたサイクルタイムになるまで停止する（Ｓ４ｄ）。
【００５２】
設定されたサイクルタイムに到達した時、ＭＰＵ２１は、出力ユニットとのデータ交換を行うＯＵＴリフレッシュを実行する（Ｓ５）。その後ＭＰＵ２１は、処理ステップＳ２の共通処理の実行へ戻る。
【００５３】
ＭＰＵ２１は、上記の処理ステップＳ２からＳ５を、各タスクごとに並列処理により繰り返し実行する。また、ＭＰＵ２１は、演算実行を行なう上記のタスクに加えて、周辺サービスのみを行うタスクを一つ生成し、スケジューリングに従い実行する。すなわち、ＭＰＵ２１は、共通処理（詳細は、処理ステップＳ２ａ〜Ｓ２ｃ）実行後（Ｓ２′）、周辺サービスを実行する（Ｓ７）処理を繰り返し実行する。周辺サービスは、例えば、イベント発生時のみ実行されるものや、高機能Ｉ／Ｏユニットとのイベントサービスや、ＣＰＵ高機能ユニットとのイベントサービスや、ＲＳ−２３２Ｃポートサービスや、通信ポートサービス等がある。
【００５４】
ここで、演算処理（Ｓ４）、特に、ユーザプログラムの実行（Ｓ４ｂ）について、図５，図６に示したプログラムを実行する場合のＭＰＵ２１の処理・機能を説明する。図９，図１０に示すように、ＭＰＵ２１は入力接点のW000.00を読み込み、その読み込んだ値（０／１）をＰＦに書き込む（Ｓ１１）。
【００５５】
次にＭＰＵ２１は、インターロック開始命令（MILH 0 0100.00）を実行する（Ｓ１２）。このインターロック開始命令の実行処理は、具体的には、図１１に示すフローチャートを実行する。ここで、図１１に示す“ＭＩＬＨ  ｎ  ｉｓＩｎｔｅｒＬｏｃｋ”の第一オペランドである“ｎ”は、インターロック番号をあらわす。図３（ｂ）に示すデータ領域２３ｂを用いた場合、ｎは０以上８未満となる。ｎは、具体的な数値で記述される場合もあれば、変数で記述される場合もある。第二オペランド(isInterLock)はインターロック中であることを示すＢＯＯＬ型の変数をあらわす。インターロック中isInterLockは０となり、通常状態では１となる。そして、ｎやisInterLockは、具体的な数値で記述される場合もあれば、変数で記述される場合もある。また、インターロック開始命令を示すシンボルの３段（ＭＩＬＨ／番号／アドレス）との関係でいうと、“ｎ”は中段の番号に対応し、“isInterLock”は下段のアドレスに対応する。つまり、インターロック開始命令で指定される当該アドレスに、isInterLockの値が書き込まれる。そして、インターロック開始命令（ＭＩＬＨ命令）の一般的な処理は、以下の通りである。
【００５６】
まず、ＭＰＵ２１はデータ領域２３ｂのｎｂｉｔにＰＦの値を書き込む（Ｓ４１）。処理ステップＳ１２の場合、符号ｎは“０”であるので、データ領域２３ｂの０ｂｉｔの位置に、読み込んだＰＦ（０／１）の値を書き込む。
【００５７】
次いで、ＭＰＵ２１は、データ領域２３ｂの８ｂｉｔ分が全て１であるかを確認する（Ｓ４２）。いずれか１つのｂｉｔでも０がある場合には、この分岐判断はＮｏとなり、インターロック状態にあることになる。データ領域２３ｂが全て１ならば、通常状態となり（Ｓ４２はＹｅｓ）、ＭＰＵ２１ａは、isInterLockに１を書き込み、ＭＩＬＨ命令実行を終了する（Ｓ４３）。つまり、処理ステップＳ１２の場合、アドレス“0100.00”の領域に１を書き込む。一方、データ領域２３ｂの８ｂｉｔ中に１つでも０が存在する場合（Ｓ４２はＮｏ）、インターロック状態であることになり、ＭＰＵ２１ａは、isInterLockに０を書き込み、ＭＩＬＨ命令実行を終了する（Ｓ４４）。つまり、処理ステップＳ１２の場合、アドレス“0100.00”の領域に０を書き込む。
【００５８】
上記のようにしてインターロック開始命令（MILH 1 0100.00）の実行が完了したならば、ＭＰＵ２１は、0000.01を読み込み、ＰＦに書き込む（Ｓ１３）。次にＭＰＵ２１は、ＯＵＴ2.00命令を実行する。つまり、ＭＰＵ２１は、現在インターロック状態か否かを確認し（Ｓ１４）、インターロック状態ならば2.00を0とし（Ｓ１６）、通常状態ならば2.00にＰＦを書き込む（Ｓ１５）。インターロック状態か否かは、isInterLockであるアドレス“0100.00”の領域に格納された値（１／０）に基づき判断できる。
【００５９】
次にＭＰＵ２１はW000.01を読み込み、ＰＦに書き込む（Ｓ１７）。そして、ＭＰＵ２１は、インターロック開始命令（MILH 1 0100.01）を実行する（Ｓ１８）。すなわち、ＭＰＵ２１は、図１１に示すフローチャートを実行する。具体的には、ＭＰＵ２１は、データ領域２３ｂの１ｂｉｔにＰＦの値（入力接点のW000.01の値）を書き込む（Ｓ４１）。次いで、ＭＰＵ２１は、データ領域２３ｂの８ｂｉｔが全て１であるかを確認する（Ｓ４２）。いずれか１つのｂｉｔでも０がある場合には、この分岐判断はＮｏとなり、インターロック状態にあることになる。データ領域２３ｂが全て１ならば、通常状態となり（Ｓ４２はＹｅｓ）、ＭＰＵ２１ａは、isInterLock（0100.01）に１を書き込み、ＭＩＬＨ命令実行を終了する（Ｓ４３）。一方、データ領域２３ｂの８ｂｉｔ中に１つでも０が存在する場合（Ｓ４２はＮｏ）、インターロック状態であることになり、ＭＰＵ２１ａは、isInterLock（0100.01）に０を書き込み、ＭＩＬＨ命令実行を終了する（Ｓ４４）。
【００６０】
このインターロック開始命令（MILH 1 0100.01）は、ネスト構造の入れ子であり、インターロック開始命令（MILH 1 0100.01）からインターロック終了命令（MILC 1）までのインターロック領域では、図５で説明したとおり、対となる入力接点W000.01がＯＦＦの場合には、インターロック状態となる。そして、入力接点W000.01がONの場合でも、入力接点W000.00がＯＦＦでインターロック開始命令（MILH 1 0100.00）にてすでにインターロック状態となっている場合には、インターロック開始命令（MILH 1 0100.01）からインターロック終了命令（MILC 1）までのインターロック領域はインターロック状態となる。このことは、データ領域２３ｂの各ｂｉｔに格納する状態判定用フラグを適宜に書き換えることで対応できる。すなわち、W000.01が０（ＯＦＦ）の場合には、ＰＦに０が書き込まれるので、データ領域２３ｂの１ｂｉｔ（ｎ＝１）の領域に０が書き込まれる。従って、少なくとも１ｂｉｔの部分が０となるので、処理ステップＳ４２の分岐判断はＮｏとなり、isInterLock（0100.01）に０が書き込まれるので、インターロック状態となる。一方、W000.01が１（ＯＮ）の場合には、ＰＦに１が書き込まれるので、データ領域２３ｂの１ｂｉｔ（ｎ＝１）の領域に１が書き込まれる。このとき、W000.00が０（ＯＦＦ）の場合には、処理ステップＳ１２の実行に伴いデータ領域２３ｂの０ｂｉｔ（ｎ＝０）の領域に０が書き込まれている。従って、１ｂｉｔの領域の値の如何に関わらず、処理ステップＳ４２の分岐判断はＮｏとなり、isInterLock（0100.01）に０が書き込まれるので、インターロック状態となる。なお、W000.01，W000.01が共に１（ＯＮ）の場合には、データ領域２３ｂの０ｂｉｔと１ｂｉｔの領域は１が書き込まれ、他の領域は、初期値として１が書き込まれたままであるので、データ領域２３ｂの全てのｂｉｔが１となり処理ステップＳ４２の分岐判断はＹｅｓとなって通常状態となる。
【００６１】
上記のようにしてインターロック開始命令（MILH 1 0100.01）の実行が完了したならば、ＭＰＵ２１は、0.02を読み込み、ＰＦに書き込む（Ｓ１９）。次にＭＰＵ２１は、ＯＵＴ H0.00命令を実行する。つまり、ＭＰＵ２１は、現在インターロック状態か否かを確認し（Ｓ２０）、インターロック状態ならばH0.00を０とし（Ｓ２２）、通常状態ならばH0.00にＰＦを書き込む（Ｓ２１）。インターロック状態か否かは、isInterLockであるアドレス“0100.01”の領域に格納された値（１／０）に基づき判断できる。
【００６２】
次にＭＰＵ２１は0000.03を読み込み、ＰＦに書き込む（Ｓ２３）。そして、ＭＰＵ２１は、ファンクションブロック呼び出しを行う（Ｓ２４）。このファンクションブロック呼び出し処理は、具体的には、図１３〜図１５に示すフローチャートを実行する。
【００６３】
ＭＰＵ２１は、データ領域２３ｂを参照し、全て１であるかを確認する（Ｓ５１）。そして、ＭＰＵ２１は、０が１つでも存在していれば、インターロック状態と判断し、全て１の場合は通常状態と判断する。
【００６４】
通常状態の場合、ＭＰＵ２１は、ＰＦの値（0000.03の値）を調べる（Ｓ５２）。そして、ＰＦが０の場合、ファンクションブロック呼出処理を終了する。また、ＰＦが１の場合、ＭＰＵ２１は、ファンクションブロックの入力値をセットし（Ｓ５３）、ファンクションブロック（ＦＢ）を実行する（Ｓ５４）。このファンクションブロックの実行処理は、具体的には、図１４，図１５に示すフローチャートを実行する。
【００６５】
すなわち、ＭＰＵ２１は、ファンクションブロックのプログラムを先頭から順に実行し（Ｓ６１）、プログラムが終了したか否かを判断し（Ｓ６２）、終了していなければファンクションブロックのプログラムの実行へ処理を戻す。この処理ステップＳ６１，Ｓ６２を繰り返し実行することにより、ＭＰＵ２１は、ファンクションブロックのプログラムを最終行まで実行する。そして、プログラムが終了すればファンクションブロック実行処理を終了する。
【００６６】
ファンクションブロックのプログラムの実行（Ｓ６１）について、図６に示したプログラムを実行する場合のＭＰＵ２１の処理・機能を説明する。図１５に示すように、ＭＰＵ２１は、ＥＮを読み込み、ＰＦに書き込む（Ｓ７１）。次にＭＰＵ２１は、isRunへの書き込み処理を行なう。isRunはＯＵＴ系であるので、書き込み処理を行なうに先立ちインターロック状態であるか否かを確認し（Ｓ７２）、インターロック状態であればisRunに０を書き込み（Ｓ７４）、通常状態であればisRunにＰＦを書き込む（Ｓ７５）。処理ステップ５４のファンクションブロック実行処理では、Ｓ５１の分岐判断により通常状態であることがわかっているので、ＭＰＵ２１は、isRunにＰＦの値を書き込む。
【００６７】
次にＭＰＵ２１は、インターロック開始命令（MILH numIL isIL）を実行する（Ｓ７５）。すなわち、ＭＰＵ２１は、図１１に示すフローチャートを実行する。具体的には、ＭＰＵ２１は、データ領域２３ｂの所定のｂｉｔ（ｎｕｍＩＬで特定される数値に該当するｂｉｔ）にＰＦの値（入力接点のＥＮの値）を書き込む（Ｓ４１）。なお、ｎｕｍＩＬは、ファンクションブロックの内部変数であり、ここでは、２から７のいずれかの数値となる。次いで、ＭＰＵ２１は、データ領域２３ｂの８ｂｉｔが全て１であるかを確認する（Ｓ４２）。いずれか１つのｂｉｔでも０がある場合には、この分岐判断はＮｏとなり、インターロック状態にあることになる。データ領域２３ｂが全て１ならば、通常状態となり（Ｓ４２はＹｅｓ）、ＭＰＵ２１ａは、isInterLock（isILで特定されるアドレス）に１を書き込み、ＭＩＬＨ命令実行を終了する（Ｓ４３）。一方、データ領域２３ｂの８ｂｉｔ中に１つでも０が存在する場合（Ｓ４２はＮｏ）、インターロック状態であることになり、ＭＰＵ２１ａは、isInterLock（isIL）に０を書き込み、ＭＩＬＨ命令実行を終了する（Ｓ４４）。
【００６８】
上記のようにしてインターロック開始命令（MILH numIL isIL）の実行が完了したならば、次にＭＰＵ２１はP_Onを読み込み、ＰＦに書き込む（Ｓ７６）。次に、ＭＰＵ２１は、ファンクションブロックの出力であるＥＮＯへの書き込みを行なう。この書き込みに先立ち、ＭＰＵ２１は、現在インターロック状態か否かを確認し（Ｓ７７）、インターロック状態であればＥＮＯに０を書き込み（Ｓ７９）、通常状態であればＥＮＯにＰＦを書き込む（Ｓ７８）。次にＭＰＵ２１は、インターロック終了命令（MILC numIL）を実行し、ファンクションブロック実行処理を終了する（Ｓ８０）。
【００６９】
このインターロック終了命令の実行処理は、具体的には、図１２に示すフローチャートを実行する。ここで、図１２に示す“ＭＩＬＣ  ｎ”の第一オペランドである“ｎ”は、インターロック番号をあらわす。対となるインターロック開始命令と同じインターロック番号が記述される。このMILC n命令は、MILH n 第二オペランド で始まったインターロック領域を終了することを示すのに用いる命令である。そして、インターロック終了命令（ＭＩＬＣ命令）の一般的な処理は、以下の通りである。
【００７０】
まずＭＰＵ２１は、データ領域２３ｂのｎｂｉｔに１を書き込む（Ｓ４５）。そして、ＭＰＵ２１は、データ領域２３ｂが全て１であるかを確認する（Ｓ４６）。データ領域２３ｂが全て１ならば、通常状態となり（Ｓ４６はＹｅｓ）、ＭＰＵ２１ａは、isInterLockに１を書き込み、ＭＩＬＣ命令実行を終了する（Ｓ４７）。つまり、処理ステップＳ８０の場合、アドレス“isIL”の領域に１を書き込む。一方、データ領域２３ｂの８ｂｉｔ中に１つでも０が存在する場合（Ｓ４６はＮｏ）、isInterLockに０を書き込み、インターロック状態を継続した状態でMILC命令実行を終了する（Ｓ４８）。つまり、処理ステップＳ８０の場合、アドレス“isIL”の領域に０を書き込む。なお、処理ステップ５４の場合、ファンクションブロック１が存在するインターロック領域（ＭＩＬＨ１〜ＭＩＬＣ１）は通常状態となっているので、Ｓ４５の処理ステップの実行により、データ領域２３ｂは全てのｂｉｔが１となり、通常状態となる。
【００７１】
上記のようにしてインターロック終了命令（MILC numIL）の実行が完了したならば、図１３の処理ステップＳ５４の処理が完了するので、ＭＰＵ２１は、ファンクションブロック（ＦＢ）の出力値をセットし、ファンクションブロック呼出処理を終了する。
【００７２】
一方、データ領域のいずれか１つでも０があり、インターロック状態の場合（Ｓ５１でＮｏ）、ＭＰＵ２１は、ＦＢインスタンス領域２３にアクセスし、該当するファンクションブロックインスタンスの“インターロック時動作フラグ”を確認する（Ｓ５６）。そして、そのフラグがＯＮ（インターロック時ＦＢ実行が有効であることを示す）の場合、ＭＰＵ２１は、通常状態と同様にファンクションブロック（ＦＢ）の入力値をセットし（Ｓ５７）、ファンクションブロックを実行し（Ｓ５８）、ファンクションブロック（ＦＢ）の出力値をセットし（Ｓ５９）、ファンクションブロック呼出処理を終了する。これら処理ステップＳ５７，Ｓ５８，Ｓ５９は、それぞれ、Ｓ５３，Ｓ５４，Ｓ５５と同様である。
【００７３】
一方、“インターロック時動作フラグ”がＯＦＦ（インターロック時ＦＢ実行が無効であることを示す）の場合、そのままファンクションブロック呼出処理を終了する。このようにすることで、インターロック状態にあるファンクションブロックであっても、ファンクションブロックのプログラムを実行したり、実行させなかったりすることができる。しかも、各ファンクションブロックインスタンスごとに、インターロック時動作フラグを設定するので、インターロック領域内にあるファンクションブロックに対し、個々に演算実行をさせたり、させなかったりすることができる。
【００７４】
上記の処理により、ファンクションブロック呼び出し処理（Ｓ２４）が完了したならば、図１０の処理ステップＳ２５に戻り、ＭＰＵ２１は、ＯＵＴ H00.01命令を実行する。つまり、ＭＰＵ２１は、インターロック状態か否かを確認する（Ｓ２５）。この確認は、“0100.01”にアクセスし、書き込まれている値（１／０）に基づいて行なえる。そして、ＭＰＵ２１は、インターロック状態ならばH00.01を０とし（Ｓ２７）、通常状態ならばH00.01にＰＦを書き込む（Ｓ２６）。次にＭＰＵ２１は、インターロック終了命令（MILC 1）を実行する（Ｓ２９）。つまり、ＭＰＵ２１は、図１２に示すフローチャートを実行する。
【００７５】
次にＭＰＵ２１は、0000.04を読み込み、ＰＦに書き込む（Ｓ３０）。次いで、ＭＰＵ２１は、ＰＦをスタックに積み、0000.05を読み込み、ＰＦに書き込む（Ｓ３１，Ｓ３２）。そして、ＭＰＵ２１は、ＰＦ並びにスタックに積まれた0000.04や0000.05の値に基づいてCNT 1 #10命令を実行する（Ｓ３３）。そして、ＭＰＵ２１は、インターロック終了命令（MILC 0）を実行する（Ｓ３４）。つまり、ＭＰＵ２１は、図１２に示すフローチャートを実行する。この終了命令を実行することで、データ領域２３ｂの全てのｂｉｔが１に戻る。そして、これにより演算処理は、終了する。
【００７６】
なお、上述した実施形態では、プログラム中に入出力変数と内部変数を持つブロックである“ファンクションブロック”を含む例について説明したが、本発明は、ファンクションブロックに限ることはなく、例えば、ＰＬＣ，ＰＡＣ等の産業用コントローラにおける演算の組み合わせを拡張したブロックで内部変数を持たない“ファンクション”でもよいし、Ｉ／Ｏやグローバル変数を含むメインプログラムである“プログラム”でもよい。このように、“ファンクションブロック”，“ファンクション”，“プログラム”等のＰＯＵ（Program Organization Unit）について適用できる。すなわち、ブロック等の適当な集合に対し、インターロック時に実行するか（呼び出しを行なうか）否かを指定するフラグ（インターロック時動作フラグ）を関連付けて記憶保持させ、演算実行時に、インターロック中のインターロック領域内に係るＰＯＵが存在する場合、当該フラグを参照し、そのＰＯＵの演算を実行したり、実行させなかったりすることができる。
【図面の簡単な説明】
【００７７】
【図１】ＰＡＣの一例を示す図である。
【図２】ＣＰＵユニットの内部構造の一例を示す図である。
【図３】メモリの内部構造の一例を示す図である。
【図４】インターロックを説明するためのプログラムの一例を示す図である。
【図５】インターロックを説明するためのファンクションブロックを含むプログラムの一例を示す図である。
【図６】ファンクションブロックのプログラムの一例を示す図である。
【図７】ＭＰＵの機能を示すフローチャートである。
【図８】ＭＰＵの機能を示すフローチャートである。
【図９】ＭＰＵの機能（ユーザプログラム実行機能）を示すフローチャート（その１）である。
【図１０】ＭＰＵの機能（ユーザプログラム実行機能）を示すフローチャート（その２）である。
【図１１】ＭＰＵの機能（インターロック開始命令実行機能）を示すフローチャートである。
【図１２】ＭＰＵの機能（インターロック終了命令実行機能）を示すフローチャートである。
【図１３】ＭＰＵの機能（ファンクションブロック呼出命令実行機能）を示すフローチャートである。
【図１４】ＭＰＵの機能（ファンクションブロック実行機能）を示すフローチャートである。
【図１５】ＭＰＵの機能（ファンクションブロック実行機能）を示すフローチャートである。
【符号の説明】
【００７８】
１  ＰＡＣ
２  ＣＰＵユニット
２１  ＭＰＵ（制御部）
２３  メモリ（記憶部）
２３ａ  ＦＢインスタンス格納用領域
２３ｂ  データ領域
【図１】
0004993208.tif 000002
【図２】
0004993208.tif 000003
【図３】
0004993208.tif 000004
【図４】
0004993208.tif 000005
【図５】
0004993208.tif 000006
【図６】
0004993208.tif 000007
【図７】
0004993208.tif 000008
【図８】
0004993208.tif 000009
【図９】
0004993208.tif 000010
【図１０】
0004993208.tif 000011
【図１１】
0004993208.tif 000012
【図１２】
0004993208.tif 000013
【図１３】
0004993208.tif 000014
【図１４】
0004993208.tif 000015
【図１５】
0004993208.tif 000016