(57)【要約】【課題】安定した状態で制御対象の制御を続けながら、制御対象の制御主体を切り換えることができるコントローラシステムおよび制御方法を提供する。【解決手段】ＰＬＣシステム１０は、複数のＰＬＣ１４nの各々の制御対象と複数のＰＬＣ１４nとを接続する複数のＩ／Ｏ機器１６nと、ＰＣ１２とを備える。複数のＰＬＣ１４nの各々は、自己に接続された制御対象１８nを制御するために自己プログラムＰｎを実行して得られた第１の出力データを記憶するとともに、自己に接続された制御対象１８nを制御するためにＰＣ１２または他のＰＬＣ１４nに割り当てられた他プログラムＰｎを、ＰＣ１２または他のＰＬＣ１４nが実行して得られた第２の出力データを記憶する。複数のＰＬＣ１４nの各々は、ＰＣ１２から送信された選択情報に基づいて、第１の出力データおよび第２の出力データの一方を自己に接続されているＩ／Ｏ機器１６nに出力する。【選択図】図１１
2018005372.tif 000002
【特許請求の範囲】
【請求項１】
複数のコントローラと、前記複数のコントローラの各々の制御対象と前記複数のコントローラの各々とを接続し、前記制御対象と前記コントローラとの間で必要な情報を伝送する複数のＩ／Ｏ機器と、前記複数のコントローラを制御して管理する上位制御装置とを備えるコントローラシステムであって、
前記上位制御装置は、
前記複数のコントローラの各々が実行する複数のプログラムを記憶した記憶部と、
前記複数のコントローラの各々が前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するように、前記記憶部に記憶された前記複数のプログラムを自己プログラムとして前記複数のコントローラに割り当てるとともに、前記記憶部に記憶された前記複数のプログラムの全てまたは一部が、１つの実行周期内で２重に並行して実行されるように、前記複数のプログラムの全てまたは一部を他プログラムとして前記上位制御装置および前記複数のコントローラにさらに割り当てるプロセッサと、
を有し、
前記複数のコントローラの各々は、
前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象から送信された入力データを記憶する第１入力用バッファメモリと、
前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するために自己に割り当てられた前記自己プログラムを実行して得られた第１の出力データを記憶する第１出力用バッファメモリと、
前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するために前記上位制御装置または他の前記コントローラに割り当てられた前記他プログラムを、前記上位制御装置または他の前記コントローラが実行することで得られた第２の出力データを記憶する第２出力用バッファメモリと、
を有する通信部を有し、
前記上位制御装置から送信された選択情報に基づいて、前記第１出力用バッファメモリに記憶されている前記第１の出力データおよび前記第２出力用バッファメモリに記憶されている前記第２の出力データの一方を、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力する
ことを特徴とするコントローラシステム。
【請求項２】
請求項１に記載のコントローラシステムであって、
前記複数のコントローラの各々は、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記自己プログラムを実行することで前記第１の出力データを生成し、前記Ｉ／Ｏ機器を介して他の前記コントローラに接続された前記制御対象であって、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記他プログラムを実行することで前記第２の出力データを生成するプロセッサをさらに有する
ことを特徴とするコントローラシステム。
【請求項３】
請求項１または２に記載のコントローラシステムであって、
前記上位制御装置の前記プロセッサは、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記他プログラムを実行することで前記第２の出力データを生成する
ことを特徴とするコントローラシステム。
【請求項４】
請求項１〜３のいずれか１項に記載のコントローラシステムであって、
前記上位制御装置の前記プロセッサは、正常と判断した前記コントローラが、前記第１出力用バッファメモリに記憶された前記第１の出力データを前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力し、異常と判断された前記コントローラが、前記第２出力用バッファメモリに記憶された前記第２の出力データを前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力するように、前記選択情報を前記複数のコントローラに出力する
ことを特徴とするコントローラシステム。
【請求項５】
請求項４に記載のコントローラシステムであって、
前記上位制御装置の前記プロセッサは、前記複数のコントローラから取得した前記複数のコントローラの各々のエラー情報および生存信号の少なくとも一方に基づいて、前記複数のコントローラの各々が正常か異常かを判断する
ことを特徴とするコントローラシステム。
【請求項６】
請求項１〜５のいずれか１項に記載のコントローラシステムであって、
前記コントローラの前記通信部は、前記選択情報に基づいて、前記Ｉ／Ｏ機器を介して自己に接続されている前記制御対象に出力する出力データとして、前記第１出力用バッファメモリに記憶されている前記第１の出力データおよび前記第２出力用バッファメモリに記憶されている前記第２の出力データの一方を選択するセレクタをさらに有する
ことを特徴とするコントローラシステム。
【請求項７】
請求項１〜６のいずれか１項に記載のコントローラシステムであって、
前記上位制御装置の前記プロセッサは、前記複数のコントローラの前記通信部を介して、前記複数のコントローラの各々が前記自己プログラムを実行する際の負荷を示す負荷情報を取得し、取得した前記負荷情報に基づいて前記他プログラムを割り当てる
ことを特徴とするコントローラシステム。
【請求項８】
請求項１〜７のいずれか１項に記載のコントローラシステムであって、
前記上位制御装置は、
自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された前記コントローラの前記第１入力用バッファメモリに記憶された前記入力データを受信し、
自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された前記コントローラに前記第２の出力データを送信する
ことを特徴とするコントローラシステム。
【請求項９】
請求項１〜８のいずれか１項に記載のコントローラシステムであって、
前記複数のコントローラの各々は、
他の前記コントローラに前記Ｉ／Ｏ機器を介して接続された前記制御対象であって、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データを記憶する第２入力用バッファメモリと、
他の前記コントローラに前記Ｉ／Ｏ機器を介して接続された前記制御対象を制御するために自己に割り当てられた前記他プログラムを実行して得られた前記第２の出力データを記憶する第３出力用バッファメモリと、
をさらに備え、
自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された他の前記コントローラの前記第１入力用バッファメモリに記憶された前記入力データを前記上位制御装置を介して受信し、受信した前記入力データを前記第２入力用バッファメモリに記憶するとともに、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された他の前記コントローラに、前記上位制御装置を介して前記第３出力用バッファメモリに記憶された前記第２の出力データを送信する
ことを特徴とするコントローラシステム。
【請求項１０】
複数のコントローラと、前記複数のコントローラの各々の制御対象と前記複数のコントローラの各々とを接続し、前記制御対象と前記コントローラとの間で必要な情報を伝送する複数のＩ／Ｏ機器と、前記複数のコントローラを制御して管理する上位制御装置とを備えるコントローラシステムにおける制御方法であって、
前記上位制御装置は、前記複数のコントローラの各々が実行する複数のプログラムを記憶した記憶部を備え、
前記複数のコントローラの各々は、第１入力用バッファメモリ、第１出力用バッファメモリ、および、第２出力用バッファメモリを有する通信部を備え、
上位制御装置が、前記複数のコントローラの各々が前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するように、前記記憶部に記憶された前記複数のプログラムを自己プログラムとして前記複数のコントローラに割り当てるとともに、前記記憶部に記憶された前記複数のプログラムの全てまたは一部が、１つの実行周期内で２重に並行して実行されるように、前記複数のプログラムの全てまたは一部を他プログラムとして前記上位制御装置および前記複数のコントローラにさらに割り当てる、割当ステップと、
前記複数のコントローラの各々が、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象から送信された入力データを前記第１入力用バッファメモリに記憶する、第１入力記憶ステップと、
前記複数のコントローラの各々が、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するために自己に割り当てられた前記自己プログラムを実行して得られた第１の出力データを前記第１出力用バッファメモリに記憶する、第１出力記憶ステップと、
前記複数のコントローラの各々が、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するために前記上位制御装置または他の前記コントローラに割り当てられた前記他プログラムを、前記上位制御装置または他の前記コントローラが実行することで得られた第２の出力データを前記第２出力用バッファメモリに記憶する、第２出力記憶ステップと、
前記複数のコントローラの各々が、前記上位制御装置から送信された選択情報に基づいて、前記第１出力用バッファメモリに記憶されている前記第１の出力データおよび前記第２出力用バッファメモリに記憶されている前記第２の出力データの一方を、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力する、出力ステップと、
を含むことを特徴とする制御方法。
【請求項１１】
請求項１０に記載の制御方法であって、
前記コントローラが、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記自己プログラムを実行することで前記第１の出力データを生成する、第１生成ステップと、
前記コントローラが、他の前記コントローラに前記Ｉ／Ｏ機器を介して接続された前記制御対象であって、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記他プログラムを実行することで前記第２の出力データを生成する、第２生成ステップと、
前記上位制御装置が、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記他プログラムを実行することで前記第２の出力データを生成する、第３生成ステップと、
をさらに含むことを特徴とする制御方法。
【請求項１２】
請求項１０または１１に記載の制御方法であって、
前記通信部は、セレクタをさらに有し、
前記上位制御装置が、前記複数のコントローラから取得した前記複数のコントローラの各々のエラー情報および生存信号の少なくとも一方に基づいて、前記複数のコントローラの各々が正常か異常かを判断する、異常判断ステップと、
前記上位制御装置が、正常と判断した前記コントローラが、前記第１出力用バッファメモリに記憶された前記第１の出力データを前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力し、異常と判断された前記コントローラが、前記第２出力用バッファメモリに記憶された前記第２の出力データを前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力するように、前記選択情報を前記複数のコントローラに出力する、選択出力ステップと、
前記複数のコントローラの各々の前記通信部の前記セレクタが、前記選択情報に基づいて、前記Ｉ／Ｏ機器を介して自己に接続されている前記制御対象に出力する出力データとして、前記第１出力用バッファメモリに記憶されている前記第１の出力データおよび前記第２出力用バッファメモリに記憶されている前記第２の出力データの一方を選択する、選択ステップと、
をさらに含むことを特徴とする制御方法。
【請求項１３】
請求項１０〜１２のいずれか１項に記載の制御方法であって、
前記上位制御装置が、前記複数のコントローラの前記通信部を介して、前記複数のコントローラの各々が前記自己プログラムを実行する際の負荷を示す負荷情報を取得する、取得ステップをさらに含み、
前記割当ステップは、取得した前記負荷情報に基づいて前記他プログラムを割り当てる
ことを特徴とする制御方法。
【請求項１４】
請求項１０〜１３のいずれか１項に記載の制御方法であって、
前記上位制御装置が、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された前記コントローラの前記第１入力用バッファメモリに記憶された前記入力データを受信する、受信ステップと、
前記上位制御装置が、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された前記コントローラに前記第２の出力データを送信する、第１送信ステップと、
をさらに含むことを特徴とする制御方法。
【請求項１５】
請求項１０〜１４のいずれか１項に記載の制御方法であって、
前記通信部は、第２入力用バッファメモリと第３出力用バッファメモリとをさらに有し、
前記複数のコントローラの各々が、他の前記コントローラに前記Ｉ／Ｏ機器を介して接続された前記制御対象であって、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データを前記第２入力用バッファメモリに記憶する、第２入力記憶ステップと、
前記複数のコントローラの各々が、他の前記コントローラに前記Ｉ／Ｏ機器を介して接続された前記制御対象を制御するために自己に割り当てられた前記他プログラムを実行して得られた前記第２の出力データを前記第３出力用バッファメモリに記憶する、第３出力記憶ステップと、
前記複数のコントローラの各々が、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された他の前記コントローラに、前記上位制御装置を介して前記第３出力用バッファメモリに記憶された前記第２の出力データを送信する第２送信ステップと、
をさらに含み、
前記第２入力記憶ステップは、前記複数のコントローラの各々が、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された他の前記コントローラの前記第１入力用バッファメモリに記憶された前記入力データを前記上位制御装置を介して受信し、受信した前記入力データを前記第２入力用バッファメモリに記憶する
ことを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のコントローラと、複数のコントローラを制御して管理する上位制御装置とを備えるコントローラシステムおよび制御方法に関する。
【背景技術】
【０００２】
下記特許文献１には、産業機器として用いられる複数のＰＬＣと、複数のＰＬＣを管理する共有サーバとを備えるマルチコントローラシステムが開示されている。この複数のＰＬＣの各々は、Ｉ／Ｏ装置を介してＰＬＣの制御対象と接続されている。そして、マルチコントローラシステムの共有サーバは、異常なＰＬＣを検出すると、負荷の小さいＰＬＣ、つまり、プログラムを追加しても実行が可能なＰＬＣを選定する。そして、選定されたＰＬＣが異常と判断されたＰＬＣが実行していたプログラムをロードして、異常なＰＬＣの代わりにプログラムを実行させるというものである。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−１６８０９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一般に、Ｉ／Ｏ装置（Ｉ／Ｏ機器）の入出力信号等のデータは、ＰＬＣ内のメインメモリに格納されている。したがって、あるＰＬＣに異常が発生した場合に、異常が発生したＰＬＣの制御対象の制御を他のＰＬＣが引き継ぐ場合は、これまでの実行結果と矛盾が生じないデータを、その制御対象に接続されているＩ／Ｏ装置に出力する必要がある。そのため、メインメモリに記憶されているデータをそのまま制御を引き継ぐ他のＰＬＣにコピーしなければならない。
【０００５】
この入出力信号等は、数百キロバイト〜数メガバイトとサイズが大きい。そのため、異常が発生したＰＬＣのメインメモリからＥｔｈｅｒｎｅｔ（登録商標）経由で他のＰＬＣにデータをコピーする場合は、コピー時間が、ＰＬＣがプログラムを実行する１つの実行周期を大きく上回る。したがって、制御対象の制御を継続して行うことができない。また、ＰＬＣの制御部等に異常が発生した場合は、メインメモリに記憶されたデータの信憑性も低いため、このデータを他のＰＬＣにコピーして、異常が発生したＰＬＣの制御対象の制御を継続させるのは好ましくない。
【０００６】
したがって、上記した特許文献１に記載の技術では、制御対象を制御するＰＬＣを切り換える際に、制御対象の制御が中断したり、これまでの実行結果と矛盾するデータを制御対象に出力する可能性を回避することができない。
【０００７】
そこで、本発明は、安定した状態で制御対象の制御を続けながら、制御対象の制御主体を切り換えることができるコントローラシステムおよび制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
第１の本発明は、複数のコントローラと、前記複数のコントローラの各々の制御対象と前記複数のコントローラの各々とを接続し、前記制御対象と前記コントローラとの間で必要な情報を伝送する複数のＩ／Ｏ機器と、前記複数のコントローラを制御して管理する上位制御装置とを備えるコントローラシステムであって、前記上位制御装置は、前記複数のコントローラの各々が実行する複数のプログラムを記憶した記憶部と、前記複数のコントローラの各々が前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するように、前記記憶部に記憶された前記複数のプログラムを自己プログラムとして前記複数のコントローラに割り当てるとともに、前記記憶部に記憶された前記複数のプログラムの全てまたは一部が、１つの実行周期内で２重に並行して実行されるように、前記複数のプログラムの全てまたは一部を他プログラムとして前記上位制御装置および前記複数のコントローラにさらに割り当てるプロセッサと、を有し、前記複数のコントローラの各々は、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象から送信された入力データを記憶する第１入力用バッファメモリと、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するために自己に割り当てられた前記自己プログラムを実行して得られた第１の出力データを記憶する第１出力用バッファメモリと、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するために前記上位制御装置または他の前記コントローラに割り当てられた前記他プログラムを、前記上位制御装置または他の前記コントローラが実行することで得られた第２の出力データを記憶する第２出力用バッファメモリと、を有する通信部を有し、前記上位制御装置から送信された選択情報に基づいて、前記第１出力用バッファメモリに記憶されている前記第１の出力データおよび前記第２出力用バッファメモリに記憶されている前記第２の出力データの一方を、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力する。
【０００９】
この構成により、制御対象を制御する制御主体を切り換えた場合であっても、これまでの実行結果と矛盾が生じない出力データを、その制御対象に接続されたＩ／Ｏ機器に出力することができる。したがって、安定した状態で制御対象の制御を続けながら、制御対象の制御主体を切り換えることができる。
【００１０】
第１の本発明は、前記コントローラシステムであって、前記複数のコントローラの各々は、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記自己プログラムを実行することで前記第１の出力データを生成し、前記Ｉ／Ｏ機器を介して他の前記コントローラに接続された前記制御対象であって、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記他プログラムを実行することで前記第２の出力データを生成するプロセッサをさらに有してもよい。これにより、コントローラは、制御対象が送信した入力データに基づいてプログラム（自己プログラムまたは他プログラム）を実行して、入力データを送信した制御対象に出力する出力データを生成することができ、安定した状態で制御対象を制御することができる。
【００１１】
第１の本発明は、前記コントローラシステムであって、前記上位制御装置の前記プロセッサは、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記他プログラムを実行することで前記第２の出力データを生成してもよい。これにより、上位制御装置は、制御対象が送信した入力データに基づいて他プログラムを実行して、入力データを送信した制御対象に出力する出力データを生成することができ、安定した状態で制御対象を制御することができる。
【００１２】
第１の本発明は、前記コントローラシステムであって、前記上位制御装置の前記プロセッサは、正常と判断した前記コントローラが、前記第１出力用バッファメモリに記憶された前記第１の出力データを前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力し、異常と判断された前記コントローラが、前記第２出力用バッファメモリに記憶された前記第２の出力データを前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力するように、前記選択情報を前記複数のコントローラに出力してもよい。これにより、コントローラに異常が発生した場合であっても、異常と判断されたコントローラに代わって他の正常なコントローラが、異常と判断されたコントローラに接続された制御対象を制御することができる。したがって、安定した状態で異常と判断されたコントローラに接続された制御対象の制御を続けながら、異常と判断されたコントローラに接続された制御対象の制御主体を切り換えることができる。
【００１３】
第１の本発明は、前記コントローラシステムであって、前記上位制御装置の前記プロセッサは、前記複数のコントローラから取得した前記複数のコントローラの各々のエラー情報および生存信号の少なくとも一方に基づいて、前記複数のコントローラの各々が正常か異常かを判断してもよい。これにより、上位制御装置は、コントローラが正常か異常かを精度よく判断することができる。
【００１４】
第１の本発明は、前記コントローラシステムであって、前記コントローラの前記通信部は、前記選択情報に基づいて、前記Ｉ／Ｏ機器を介して自己に接続されている前記制御対象に出力する出力データとして、前記第１出力用バッファメモリに記憶されている前記第１の出力データおよび前記第２出力用バッファメモリに記憶されている前記第２の出力データの一方を選択するセレクタをさらに有してもよい。これにより、容易に、Ｉ／Ｏ機器に出力する出力データを切り換えることができる。
【００１５】
第１の本発明は、前記コントローラシステムであって、前記上位制御装置の前記プロセッサは、前記複数のコントローラの前記通信部を介して、前記複数のコントローラの各々が前記自己プログラムを実行する際の負荷を示す負荷情報を取得し、取得した前記負荷情報に基づいて前記他プログラムを割り当ててもよい。これにより、複数のコントローラの各々によるプログラムの処理が１実行周期内で収まるように、他プログラムを割り当てることができる。
【００１６】
第１の本発明は、前記コントローラシステムであって、前記上位制御装置は、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された前記コントローラの前記第１入力用バッファメモリに記憶された前記入力データを受信し、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された前記コントローラに前記第２の出力データを送信してもよい。これにより、上位制御装置は、これまでの実行結果と矛盾が生じない第２の出力データをコントローラに送信することができ、Ｉ／Ｏ機器を介してＰＬＣに接続された制御対象を制御することができる。
【００１７】
第１の本発明は、前記コントローラシステムであって、前記複数のコントローラの各々は、他の前記コントローラに前記Ｉ／Ｏ機器を介して接続された前記制御対象であって、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データを記憶する第２入力用バッファメモリと、他の前記コントローラに前記Ｉ／Ｏ機器を介して接続された前記制御対象を制御するために自己に割り当てられた前記他プログラムを実行して得られた前記第２の出力データを記憶する第３出力用バッファメモリと、をさらに備え、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された他の前記コントローラの前記第１入力用バッファメモリに記憶された前記入力データを前記上位制御装置を介して受信し、受信した前記入力データを前記第２入力用バッファメモリに記憶するとともに、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された他の前記コントローラに、前記上位制御装置を介して前記第３出力用バッファメモリに記憶された前記第２の出力データを送信してもよい。これにより、コントローラは、これまでの実行結果と矛盾が生じない第２の出力データを他のコントローラに送信することができ、Ｉ／Ｏ機器を介して他のコントローラに接続された制御対象を制御することができる。
【００１８】
第２の本発明は、複数のコントローラと、前記複数のコントローラの各々の制御対象と前記複数のコントローラの各々とを接続し、前記制御対象と前記コントローラとの間で必要な情報を伝送する複数のＩ／Ｏ機器と、前記複数のコントローラを制御して管理する上位制御装置とを備えるコントローラシステムにおける制御方法であって、前記上位制御装置は、前記複数のコントローラの各々が実行する複数のプログラムを記憶した記憶部を備え、前記複数のコントローラの各々は、第１入力用バッファメモリ、第１出力用バッファメモリ、および、第２出力用バッファメモリを有する通信部を備え、上位制御装置が、前記複数のコントローラの各々が前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するように、前記記憶部に記憶された前記複数のプログラムを自己プログラムとして前記複数のコントローラに割り当てるとともに、前記記憶部に記憶された前記複数のプログラムの全てまたは一部が、１つの実行周期内で２重に並行して実行されるように、前記複数のプログラムの全てまたは一部を他プログラムとして前記上位制御装置および前記複数のコントローラにさらに割り当てる、割当ステップと、前記複数のコントローラの各々が、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象から送信された入力データを前記第１入力用バッファメモリに記憶する、第１入力記憶ステップと、前記複数のコントローラの各々が、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するために自己に割り当てられた前記自己プログラムを実行して得られた第１の出力データを前記第１出力用バッファメモリに記憶する、第１出力記憶ステップと、前記複数のコントローラの各々が、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象を制御するために前記上位制御装置または他の前記コントローラに割り当てられた前記他プログラムを、前記上位制御装置または他の前記コントローラが実行することで得られた第２の出力データを前記第２出力用バッファメモリに記憶する、第２出力記憶ステップと、前記複数のコントローラの各々が、前記上位制御装置から送信された選択情報に基づいて、前記第１出力用バッファメモリに記憶されている前記第１の出力データおよび前記第２出力用バッファメモリに記憶されている前記第２の出力データの一方を、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力する、出力ステップと、を含む。
【００１９】
この構成により、制御対象を制御する制御主体を切り換えた場合であっても、これまでの実行結果と矛盾が生じない出力データを、その制御対象に接続されたＩ／Ｏ機器に出力することができる。したがって、安定した状態で制御対象の制御を続けながら、制御対象の制御主体を切り換えることができる。
【００２０】
第２の本発明は、前記制御方法であって、前記コントローラが、前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記自己プログラムを実行することで前記第１の出力データを生成する、第１生成ステップと、前記コントローラが、他の前記コントローラに前記Ｉ／Ｏ機器を介して接続された前記制御対象であって、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記他プログラムを実行することで前記第２の出力データを生成する、第２生成ステップと、前記上位制御装置が、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データに基づいて、自己に割り当てられた前記他プログラムを実行することで前記第２の出力データを生成する、第３生成ステップと、をさらに含んでもよい。これにより、コントローラは、制御対象が送信した入力データに基づいてプログラム（自己プログラムまたは他プログラム）を実行して、入力データを送信した制御対象に出力する出力データを生成することができ、安定した状態で制御対象を制御することができる。また、上位制御装置は、制御対象が送信した入力データに基づいて他プログラムを実行して、入力データを送信した制御対象に出力する出力データを生成することができ、安定した状態で制御対象を制御することができる。
【００２１】
第２の本発明は、前記制御方法であって、前記通信部は、セレクタをさらに有し、前記上位制御装置が、前記複数のコントローラから取得した前記複数のコントローラの各々のエラー情報および生存信号の少なくとも一方に基づいて、前記複数のコントローラの各々が正常か異常かを判断する、異常判断ステップと、前記上位制御装置が、正常と判断した前記コントローラが、前記第１出力用バッファメモリに記憶された前記第１の出力データを前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力し、異常と判断された前記コントローラが、前記第２出力用バッファメモリに記憶された前記第２の出力データを前記Ｉ／Ｏ機器を介して自己に接続された前記制御対象に出力するように、前記選択情報を前記複数のコントローラに出力する、選択出力ステップと、前記複数のコントローラの各々の前記通信部の前記セレクタが、前記選択情報に基づいて、前記Ｉ／Ｏ機器を介して自己に接続されている前記制御対象に出力する出力データとして、前記第１出力用バッファメモリに記憶されている前記第１の出力データおよび前記第２出力用バッファメモリに記憶されている前記第２の出力データの一方を選択する、選択ステップと、をさらに含んでもよい。これにより、上位制御装置は、コントローラが正常か異常かを精度よく判断することができる。また、コントローラに異常が発生した場合であっても、異常と判断されたコントローラに代わって他の正常なコントローラが、異常と判断されたコントローラに接続された制御対象を制御することができる。したがって、安定した状態で異常と判断されたコントローラに接続された制御対象の制御を続けながら、異常と判断されたコントローラに接続された制御対象の制御主体を切り換えることができる。また、通信部は、容易に、Ｉ／Ｏ機器に出力する出力データを切り換えることができる。
【００２２】
第２の本発明は、前記制御方法であって、前記上位制御装置が、前記複数のコントローラの前記通信部を介して、前記複数のコントローラの各々が前記自己プログラムを実行する際の負荷を示す負荷情報を取得する、取得ステップをさらに含み、前記割当ステップは、取得した前記負荷情報に基づいて前記他プログラムを割り当ててもよい。これにより、複数のコントローラの各々によるプログラムの処理が１実行周期内で収まるように、他プログラムを割り当てることができる。
【００２３】
第２の本発明は、前記制御方法であって、前記上位制御装置が、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された前記コントローラの前記第１入力用バッファメモリに記憶された前記入力データを受信する、受信ステップと、前記上位制御装置が、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された前記コントローラに前記第２の出力データを送信する、第１送信ステップと、をさらに含んでもよい。これにより、上位制御装置は、これまでの実行結果と矛盾が生じない第２の出力データをコントローラに送信することができ、Ｉ／Ｏ機器を介してＰＬＣに接続された制御対象を制御することができる。
【００２４】
第２の本発明は、前記制御方法であって、前記通信部は、第２入力用バッファメモリと第３出力用バッファメモリとをさらに有し、前記複数のコントローラの各々が、他の前記コントローラに前記Ｉ／Ｏ機器を介して接続された前記制御対象であって、自己に割り当てられた前記他プログラムによって制御される前記制御対象から送信された前記入力データを前記第２入力用バッファメモリに記憶する、第２入力記憶ステップと、前記複数のコントローラの各々が、他の前記コントローラに前記Ｉ／Ｏ機器を介して接続された前記制御対象を制御するために自己に割り当てられた前記他プログラムを実行して得られた前記第２の出力データを前記第３出力用バッファメモリに記憶する、第３出力記憶ステップと、前記複数のコントローラの各々が、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された他の前記コントローラに、前記上位制御装置を介して前記第３出力用バッファメモリに記憶された前記第２の出力データを送信する第２送信ステップと、をさらに含み、前記第２入力記憶ステップは、前記複数のコントローラの各々が、自己に割り当てられた前記他プログラムによって制御される前記制御対象に前記Ｉ／Ｏ機器を介して接続された他の前記コントローラの前記第１入力用バッファメモリに記憶された前記入力データを前記上位制御装置を介して受信し、受信した前記入力データを前記第２入力用バッファメモリに記憶してもよい。これにより、コントローラは、これまでの実行結果と矛盾が生じない第２の出力データを他のコントローラに送信することができ、Ｉ／Ｏ機器を介して他のコントローラに接続された制御対象を制御することができる。
【発明の効果】
【００２５】
本発明によれば、制御対象を制御する制御主体を切り換えた場合であっても、これまでの実行結果と矛盾が生じない出力データを、その制御対象に接続されたＩ／Ｏ機器に出力することができる。したがって、安定した状態で制御対象の制御を続けながら、制御対象の制御主体を切り換えることができる。
【図面の簡単な説明】
【００２６】
【図１】実施の形態におけるＰＬＣシステムの全体概略構成図である。
【図２】図１に示すＰＣの概略構成図である。
【図３】図１に示すＰＬＣの概略構成図である。
【図４】ＰＬＣシステムのプログラムの割り当て動作を示すフローチャートである。
【図５】複数のＰＬＣの各々が自己に接続されたＩ／Ｏ機器を制御するように、複数のＰＬＣの各々に図２に示すメインメモリに記憶された全てのプログラムを割り当てた例を示す図である。
【図６】複数のＰＬＣの各々による自己プログラム（図５に示す割り当てによって割り当てられた自己プログラム）の実行（処理）を示すタイムチャートである。
【図７】図２に示すメインメモリに記憶された全てのプログラムが１実行周期内で２重に並行して実行されるように、全てのプログラムをＰＣおよび複数のＰＬＣに割り当てた例を示す図である。
【図８】複数のＰＬＣの各々によるプログラム（図７に示す割り当てによって割り当てられた自己プログラムおよび他プログラム）の実行（処理）を示すタイムチャートである。
【図９】図４のステップＳ６の処理動作を示すサブフローチャートである。
【図１０】複数のＰＬＣの１つに異常が発生した場合に、異常が発生したＰＬＣに接続されたＩ／Ｏ機器をＰＣが代わりに制御する例を示す図である。
【図１１】図３に示すＰＬＣの詳細構成図である。
【図１２】図２に示すＰＣの詳細構成図である。
【図１３】ＰＣによる選択情報の論理値の決定処理を示すフローチャートである。
【図１４】正常なＰＬＣと、ＰＣおよび正常なＰＬＣに接続されたＩ／Ｏ機器との間におけるデータの授受ための処理を示すタイムチャートである。
【図１５】異常ＰＬＣと、ＰＣおよび異常ＰＬＣに接続されたＩ／Ｏ機器との間におけるデータの授受のための処理を示すタイムチャートである。
【発明を実施するための形態】
【００２７】
本発明に係るコントローラシステムおよび制御方法について、好適な実施の形態を掲げ、添付の図面を参照しながら以下、詳細に説明する。
【００２８】
図１は、実施の形態におけるＰＬＣ（コントローラ）システム１０の全体概略構成図である。ＰＬＣシステム１０は、上位制御装置であるＰＣ１２と、ＰＣ１２とデイジーチェーンで接続された複数（本実施の形態では、５個）のＰＬＣ（プログラマブルロジックコントローラ）１４n（ただし、ｎ＝１、２、・・・、５）と、複数のＰＬＣ１４n（ＰＬＣ１４1〜ＰＬＣ１４5）の各々にデイジーチェーンで接続された複数のＩ／Ｏ機器（外部信号入出力機器）１６nとを備える。また、複数のＩ／Ｏ機器１６nには、複数のＰＬＣ１４nの制御対象１８nが接続されている。つまり、複数のＩ／Ｏ機器１６nは、複数のＰＬＣ１４nの各々の制御対象１８nと、複数のＰＬＣ１４nの各々とを接続し、制御対象１８nとＰＬＣ１４nとの間で、必要な情報（データ）を伝送するものである。
【００２９】
本説明では、ＰＬＣ１４1にデイジーチェーンで接続された複数のＩ／Ｏ機器１６nを１６1で表し、同様に、ＰＬＣ１４2〜１４5の各々にデイジーチェーンで接続された複数のＩ／Ｏ機器１６nを１６2〜１６5で表す。また、Ｉ／Ｏ機器１６1に接続された制御対象１８nを１８1で表し、同様に、Ｉ／Ｏ機器１６2〜１６5に接続された制御対象１８nを１８2〜１８5で表す。したがって、制御対象１８1は、Ｉ／Ｏ機器１６1を介してＰＬＣ１４1に接続されており、同様に、制御対象１８2〜１８5は、Ｉ／Ｏ機器１６2〜１６5を介してＰＬＣ１４2〜ＰＬＣ１４5に接続されている。制御対象１８nとしては、例えば、モータやポンプ等が挙げられる。
【００３０】
ＰＣ１２、複数のＰＬＣ１４n、および、複数のＩ／Ｏ機器１６nは、ＥｔｈｅｒＣＡＴ（登録商標）システムによって接続されている。そのため、ＰＣ１２およびＰＬＣ１４nは、データ（信号）を送信する場合は、送信先となるＰＣまたはＰＬＣ１４nのアドレス情報と送信するデータをフレームに書き込んで送信する。ＰＣ１２が、ＰＬＣ１４nにデータを送信する場合は、送信先となるＰＬＣ１４nのアドレス情報と送信するデータとが書き込まれたフレームをＰＣ１２の後段に接続されたＰＬＣ１４1に送信する。ＰＬＣ１４nは、前段に接続されたＰＣ１２またはＰＬＣ１４nからフレームが送られてくると、フレームに含まれるアドレス情報に基づいて自己に送信されたものであるか否かを判断する。ＰＬＣ１４nは、送られてきたフレームが自己宛てに送信されたものであると判断した場合は、フレームに書き込まれたデータを取り込み、自己宛てに送信されたものではないと判断した場合は、そのまま送られてきたフレームを後段に接続されたＰＬＣ１４nに送信する。また、各ＰＬＣ１４nからＰＣ１２にデータを送信する場合も同様であり、ＰＬＣ１４nは、後段から送られてきたＰＣ１２宛てのフレームを前段に接続されたＰＣ１２またはＰＬＣ１４nに送信する。なお、ＰＬＣ１４n間での送受信は、ＰＣ１２を介して行われる。例えば、ＰＬＣ１４2がＰＬＣ１４4にデータを送信する場合は、一旦ＰＬＣ１４2からデータを含むフレームがＰＣ１２に送られた後、ＰＣ１２からＰＬＣ１４4に送信される。
【００３１】
図２は、ＰＣ１２の概略構成図、図３は、ＰＬＣ１４nの概略構成図である。ＰＣ１２は、ＣＰＵ等のプロセッサ２０と、メインメモリ（記憶部）２２と、通信部２４とを備える。ＰＬＣ１４nは、ＣＰＵ等のプロセッサ３０と、メインメモリ（記憶部）３２と、通信部３４とを備える。この複数のＰＬＣ１４nの通信部３４が、ＰＣ１２の通信部２４とデイジーチェーンで接続されている（図１参照）。ＰＣ１２のメインメモリ２２は、複数のＰＬＣ１４nの各々で実行（処理）される複数のプログラムＰｎを記憶している。このプログラムＰｎは、制御対象１８nを制御するためのプログラムである。本説明では、Ｉ／Ｏ機器１６1を介してＰＬＣ１４1に接続された制御対象１８1を制御するためのプログラムＰｎをＰ１で表し、同様に、Ｉ／Ｏ機器１６2〜１６5を介してＰＬＣ１４2〜ＰＬＣ１４5に接続された制御対象１８2〜１８5を制御するためのプログラムＰｎをＰ２〜Ｐ５で表す。
【００３２】
ＰＣ１２のプロセッサ２０は、メインメモリ２２に記憶された複数のプログラムＰｎ（Ｐ１〜Ｐ５）をＰＣ１２および複数のＰＬＣ１４n（ＰＬＣ１４1〜ＰＬＣ１４5）に割り当てる。割り当てられたプログラムＰｎは、割当対象となったＰＬＣ１４nにロードされる。つまり、プロセッサ２０は、通信部２４を介してプログラムＰｎを送信し、割当対象となったＰＬＣ１４nのプロセッサ３０は、通信部３４を介して割り当てられたプログラムＰｎを取得して、メインメモリ３２に記憶する。
【００３３】
以下、ＰＬＣシステム１０のプログラムＰｎの割り当て動作を、図４のフローチャートを用いて詳しく説明する。
【００３４】
ＰＬＣシステム１０の起動時、または、所定のタイミングで、ＰＣ１２のプロセッサ２０は、ステップＳ１の動作を行う。プロセッサ２０は、ステップＳ１で、複数のＰＬＣ１４nの各々がＩ／Ｏ機器１６nを介して自己に接続された制御対象１８nを制御するように、メインメモリ２２に記憶された複数のプログラムＰｎを複数のＰＬＣ１４nに割り当てる。以下、説明を簡単にするため、Ｉ／Ｏ機器１６nを介して自己に接続された制御対象１８nを制御するために、ＰＬＣ１４nに割り当てられたプログラムＰｎを自己プログラムＰｎと呼ぶ場合がある。これにより、図５に示すように、ＰＬＣ１４1には自己プログラムＰｎであるプログラムＰ１が割り当てられ、同様に、ＰＬＣ１４2〜ＰＬＣ１４5には自己プログラムＰ２〜Ｐ５が割り当てられる。複数のＰＬＣ１４n（ＰＬＣ１４1〜ＰＬＣ１４5）は、ＰＬＣ１４nの１つの実行周期（以下、１実行周期と呼ぶ。）内で自己プログラムＰｎ（Ｐ１〜Ｐ５）の実行を完了する。
【００３５】
これらのプログラムＰｎ（Ｐ１〜Ｐ５）のデータサイズ（ステップ数）が互いに異なる場合は、プログラムＰｎを実行するのにかかる時間（実行時間、処理時間）、および、負荷（または負荷率）も互いに異なる。図６に示す例では、５つのプログラムＰｎ（Ｐ１〜Ｐ５）の実行時間および負荷（または負荷率）は、Ｐ４＜Ｐ１＜Ｐ３＝Ｐ５＜Ｐ２、の関係を有するものとする。負荷または負荷率等を示す情報を負荷情報と呼ぶ。なお、図６は、複数のＰＬＣ１４nの各々による自己プログラムＰｎ（図５に示す割り当てによって割り当てられた自己プログラムＰｎ）の実行（処理）を示すタイムチャートである。
【００３６】
次いで、ＰＣ１２のプロセッサ２０は、図５に示すように、割り当てた複数の自己プログラムＰｎ（Ｐ１〜Ｐ５）を複数のＰＬＣ１４n（１４1〜１４5）にロードさせる（ステップＳ２）。次いで、複数のＰＬＣ１４nの各々のプロセッサ３０は、自己プログラムＰｎの実行を開始し（ステップＳ３）、自己プログラムＰｎの実行による負荷情報を算出してＰＣ１２のプロセッサ２０に送信する（ステップＳ４）。ＰＣ１２のプロセッサ２０は、複数のＰＬＣ１４n（１４1〜１４5）からプロセッサ３０の負荷情報を全て取得すると、複数のＰＬＣ１４n（１４1〜１４5）による自己プログラムＰｎの実行を全て停止させる（ステップＳ５）。プロセッサ２０は、通信部２４、通信部３４を介して全てのＰＬＣ１４n（１４1〜１４5）のプロセッサ３０に停止信号を出力することで、全てのＰＬＣ１４n（１４1〜１４5）のプロセッサ３０に自己プログラムＰｎの実行を停止させる。
【００３７】
プロセッサ２０は、ステップＳ４で収集した全てのＰＬＣ１４n（１４1〜１４5）の負荷情報に基づいて、メインメモリ２２に記憶された複数のプログラムＰｎの全てまたは一部が、１実行周期内で２重に並行して実行されるように、複数のプログラムＰｎの全てまたは一部をＰＣ１２および複数のＰＬＣ１４nにさらに割り当てる（ステップＳ６）。したがって、ＰＬＣ１４nには、Ｉ／Ｏ機器１６nを介して自己に接続された制御対象１８n以外の制御対象１８n、つまり、Ｉ／Ｏ機器１６nを介して他のＰＬＣ１４nに接続された制御対象１８nを制御するためのプログラムＰｎが割り当てられる。また、ＰＣ１２にも、プログラムＰｎが割り当てられる場合がある。このとき、プロセッサ２０は、同一のプログラムＰｎが同一のＰＬＣ１４nで２重に実行されないように割り当てる。以下、説明を簡単にするため、Ｉ／Ｏ機器１６nを介して他のＰＬＣ１４nに接続された制御対象１８nを制御するために、ＰＣ１２およびＰＬＣ１４nに割り当てられたプログラムＰｎを他プログラムＰｎと呼ぶ場合がある。
【００３８】
図７は、メインメモリ２２に記憶された全てのプログラムＰｎ（Ｐ１〜Ｐ５）が１実行周期内で２重に並行して実行されるように、全てのプログラムＰｎ（Ｐ１〜Ｐ５）を、ＰＣ１２および複数のＰＬＣ１４nに割り当てた例を示す図である。また、図８は、複数のＰＬＣ１４nの各々によるプログラムＰｎ（図７に示す割り当てによって割り当てられた自己プログラムＰｎおよび他プログラムＰｎ）の実行（処理）を示すタイムチャートである。図７に示すように、ＰＬＣ１４1には他プログラムＰ４がさらに割り当てられ、ＰＬＣ１４4には他プログラムＰ１がさらに割り当てられている。また、ＰＣ１２には、ＰＬＣ１４nに割り当てることができなかった他プログラムＰ２、Ｐ３、Ｐ５が割り当てられている。ＰＬＣ１４2、１４3、１４5に割り当てられている自己プログラムＰ２、Ｐ３、Ｐ５は、負荷（または負荷率）が高いため、さらに別の他プログラムＰｎが割り当てられていない。この他プログラムＰｎの割り当てについては後で詳しく説明する。
【００３９】
次いで、ＰＣ１２のプロセッサ２０は、図７に示すように、複数のＰＬＣ１４n（１４1、１４4）に割り当てた他プログラムＰｎ（Ｐ４、Ｐ１）を、複数のＰＬＣ１４n（ＰＬＣ１４1、ＰＬＣ１４4）にロードさせる（ステップＳ７）。なお、既に割り当てた自己プログラムＰｎを再び複数のＰＬＣ１４nにロードさせるとともに、割り当てた他プログラムＰｎを複数のＰＬＣ１４nにロードさせてもよい。
【００４０】
そして、ＰＣ１２および複数のＰＬＣ１４n（１４1〜１４5）は、割り当てられたプログラムＰｎ（自己プログラムＰｎおよび他プログラムＰｎを含む）を実行する（ステップＳ８）。このとき、図８では、ＰＬＣ１４n（１４1、１４4）は、自己プログラムＰｎ（Ｐ１、Ｐ４）を実行した後、他プログラムＰｎ（Ｐ４、Ｐ１）を実行するようにしたが、実行するプログラムＰｎの順番は逆であってもよい。
【００４１】
次に、ステップＳ６における他プログラムＰｎの割り当て処理について詳しく説明する。ここで、１実行周期内でＰＣ１２のプロセッサ２０にかけることができる最大負荷をＬｐｍａｘとし、１実行周期内で各ＰＬＣ１４nのプロセッサ３０にかけることができる最大負荷をＬｍａｘとする。各ＰＬＣ１４nのプロセッサ３０の処理能力は同一ものとし、ＰＣ１２のプロセッサ２０の処理能力は、ＰＬＣ１４nのプロセッサ３０の処理能力よりも高いものとする。したがって、Ｌｐｍａｘ＞Ｌｍａｘ、となる。また、プログラムＰｎ（Ｐ１〜Ｐ５）の実行にかかる負荷を、それぞれ、Ｌｎ（Ｌ１〜Ｌ５）とし、ＰＣ１２のプロセッサ２０の１実行周期にかかる固有の負荷をＬｐｃとする。この負荷Ｌｎ（Ｌ１〜Ｌ５）は、図４のステップＳ４で収集した各ＰＬＣ１４nの負荷情報に基づく。なお、ＰＬＣ１４nの負荷率とは、ＰＬＣ１４nにかかる負荷を最大負荷Ｌｍａｘで除算した値である。例えば、プログラムＰ１の実行によってかかる負荷の負荷率は、Ｌ１／Ｌｍａｘ、となり、同様に、プログラムＰ２〜Ｐ５の実行によってかかる負荷の負荷率は、Ｌ２／Ｌｍａｘ、Ｌ３／Ｌｍａｘ、Ｌ４／Ｌｍａｘ、Ｌ５／Ｌｍａｘ、となる。
【００４２】
まず、並行して実行するプログラムＰｎの優先順位を考慮し、優先順位の高いプログラムＰｎから順に割り当てていく。本実施の形態では、優先順位は、Ｐ１→Ｐ２→Ｐ３→Ｐ４→Ｐ５、とするので、この順番でプログラムＰｎを他プログラムＰｎとして他のＰＬＣ１４n（１４1〜１４5）に割り当てていく。
【００４３】
図９は、図４のステップＳ６の処理動作を示すサブフローチャートである。まず、ＰＣ１２のプロセッサ２０は、優先順位の最も高いプログラムを選択する（ステップＳ１１）。本実施の形態では、優先順位は、Ｐ１→Ｐ２→Ｐ３→Ｐ４→Ｐ５、の順番となっているので、ステップＳ１１ではプログラムＰ１を選択する。
【００４４】
次いで、プロセッサ２０は、図４のステップＳ４で収集した各ＰＬＣ１４nの負荷情報を用いて、ＰＣ１２および複数のＰＬＣ１４n（１４1〜１４5）の各々が受け入れることができる負荷を算出する（ステップＳ１２）。この受入れることができる負荷とは、１実行周期内でさらに処理が可能な負荷のことである。プロセッサ２０は、ＰＣ１２および複数のＰＬＣ１４n（１４1〜１４5）の各々に現在割り当てられているプログラムＰｎを基に、ＰＣ１２および複数のＰＬＣ１４n（１４1〜１４5）の各々が受入れることができる負荷を算出する。このタイミングでは、ＰＣ１２に割り当てられているプログラムＰｎはなく、複数のＰＬＣ１４nには、自己プログラムＰｎしか割り当てられていない。
【００４５】
したがって、ＰＣ１２が受け入れることができる負荷（以下、受入負荷ＬＬｐと呼ぶ。）は、ＬＬｐ＝Ｌｐｍａｘ−Ｌｐｃ、となる。また、ＰＬＣ１４1が受け入れることができる負荷（以下、受入負荷ＬＬ１と呼ぶ。）は、ＬＬ１＝Ｌｍａｘ−Ｌ１、となる。同様に、ＰＬＣ１４2〜ＰＬＣ１４5が受け入れることができる負荷（以下、受入負荷ＬＬ２〜ＬＬ５と呼ぶ。）は、ＬＬ２＝Ｌｍａｘ−Ｌ２、ＬＬ３＝Ｌｍａｘ−Ｌ３、ＬＬ４＝Ｌｍａｘ−Ｌ４、ＬＬ５＝Ｌｍａｘ−Ｌ５、となる。
【００４６】
そして、プロセッサ２０は、現在選択しているプログラムＰ１を他プログラムＰ１として受け入れる余裕があるＰＬＣ１４nがあるか否かを判断する（ステップＳ１３）。本実施の形態では、ＬＬ２＜Ｌ１、ＬＬ３＜Ｌ１、ＬＬ４＞Ｌ１、ＬＬ５＜Ｌ１、となるので（図８参照）、プロセッサ２０は、ＰＬＣ１４4にプログラムＰ１を他プログラムＰ１として受入れる余裕があると判断する。
【００４７】
なお、プログラムＰ１は、ＰＬＣ１４1に対して自己プログラムＰ１となってしまうので、ＰＬＣ１４1にプログラムＰ１を受入れることができるか否かの判断は行わない。また、現在選択しているプログラムＰｎを他プログラムＰｎとして受け入れる余裕があるＰＬＣ１４nがある場合であっても、他プログラムＰｎを受入れた結果、そのＰＬＣ１４nの負荷率が閾値（例えば、９０％）以上となってしまう場合は、そのＰＬＣ１４nは、他プログラムＰｎとして受け入れる余裕がないと判断してもよい。
【００４８】
ステップＳ１３で、ＰＬＣ１４4にプログラムＰ１を受入れる余裕があると判断すると、プロセッサ２０は、現在選択しているプログラムＰ１を他プログラムＰ１としてＰＬＣ１４4に割り当てて（ステップＳ１４）、ステップＳ１５に進む。
【００４９】
ステップＳ１５に進むと、プロセッサ２０は、まだ選択していないプログラムＰｎがあるか否かを判断する。ステップＳ１５で、まだ選択していないプログラムＰｎがあると判断すると、次に優先順位の高いプログラムＰｎを新たに選択して（ステップＳ１６）、ステップＳ１２に戻る。これにより、選択されるプログラムＰｎがプログラムＰ１からプログラムＰ２に切り換わる。つまり、プログラムＰ１の次に優先順位の高いプログラムＰｎはプログラムＰ２なので、このタイミングでは、ステップＳ１６で、プログラムＰ２が新たに選択されることになる。
【００５０】
ステップＳ１２では、上述したように、ＰＣ１２および複数のＰＬＣ１４n（１４1〜１４5）の各々が受け入れることができる受入負荷ＬＬｐ、ＬＬ１〜ＬＬ５が算出される。先のステップＳ１４でＰＬＣ１４4には他プログラムＰ１が新たに割り当てられたので、ＰＬＣ１４4が受け入れることができる受入負荷ＬＬ４は、ＬＬ４＝Ｌｍａｘ−Ｌ４−Ｌ１、に変更される。なお、それ以外のＰＬＣ１４1〜１４3、１４5が受け入れることができる受入負荷ＬＬ１〜ＬＬ３、ＬＬ５は、前回と同じであり、ＰＣ１２が受け入れることができる受入負荷ＬＬｐも前回と同じである。
【００５１】
次いで、ステップＳ１３で、プロセッサ２０によって、現在選択しているプログラムＰ２を他プログラムＰ２として受け入れる余裕があるＰＬＣ１４nがあるか否かが判断される。本実施の形態では、ＬＬ１＜Ｌ２、ＬＬ３＜Ｌ２、ＬＬ４＜Ｌ２、ＬＬ５＜Ｌ２、となるので（図８参照）、プロセッサ２０は、プログラムＰ２を他プログラムＰ２として受入れる余裕があるＰＬＣ１４nはないと判断する。
【００５２】
ステップＳ１３で、プログラムＰ２を他プログラムＰ２として受入れる余裕があるＰＬＣ１４nがないと判断すると、プロセッサ２０は、ＰＣ１２に現在選択しているプログラムＰ２を他プログラムＰ２として受入れる余裕があるか否かを判断する（ステップＳ１７）。本実施の形態では、ＬＬｐ＞Ｌ２、となるので（図８参照）、プロセッサ２０は、ＰＣ１２にプログラムＰ２を他プログラムＰ２として受入れる余裕があると判断する。
【００５３】
ステップＳ１７で、ＰＣ１２にプログラムＰ２を他プログラムＰ２として受入れる余裕があると判断すると、プロセッサ２０は、現在選択しているプログラムＰ２を他プログラムＰ２としてＰＣ１２に割り当てて（ステップＳ１８）、ステップＳ１５に進む。以上のような動作を繰り返すことで、図７に示すように、複数のプログラムＰｎ（Ｐ１〜Ｐ５）が他プログラムＰｎ（Ｐ１〜Ｐ５）として、ＰＣ１２および複数のＰＬＣ１４nに割り当てられることになる。
【００５４】
ステップＳ１５で、まだ選択していないプログラムＰｎが他にないと判断すると、処理を終了して、図４のステップＳ７に進む。また、ステップＳ１７で、ＰＣ１２に現在選択しているプログラムＰｎを他プログラムＰｎとして受入れる余裕がないと判断すると、そのままステップＳ１５に進む。これにより、複数のＰＬＣ１４nおよびＰＣ１２に受け入れられない他プログラムＰｎは、複数のＰＬＣ１４nおよびＰＣ１２のいずれにも割り当てられないことになる。
【００５５】
なお、ステップＳ１７で、ＰＣ１２に現在選択しているプログラムＰｎを他プログラムＰｎとして受入れる余裕がないと判断すると、処理を終了して、図４のステップＳ７に進んでもよい。また、プログラムＰｎの優先順位がない場合は、予め決められた順番でまたはランダムにプログラムＰｎを選択して、複数のＰＬＣ１４nおよびＰＣ１２のいずれかに選択したプログラムＰｎを他プログラムＰｎとして割り当ててもよい。
【００５６】
このように、１実行周期内で、同一のプログラムＰｎが並行して実行されるので、ＰＬＣ１４nに異常または故障が発生した場合であっても、異常または故障が発生したＰＬＣ（以下、異常ＰＬＣと呼ぶ場合がある。）１４nの自己プログラムＰｎを他プログラムＰｎとして実行している他のＰＬＣ１４nが、異常ＰＬＣ１４nにＩ／Ｏ機器１６nを介して接続されている制御対象１８nを制御することができる。例えば、図１０に示すように、ＰＬＣ１４3に異常（または故障）が発生した場合であっても、ＰＣ１２は、ＰＬＣ１４3の自己プログラムＰ３を他プログラムＰ３として実行しているので、Ｉ／Ｏ機器１６3を介して異常ＰＬＣ１４3に接続された制御対象１８3を制御することができる。したがって、安定した状態で制御対象１８3の制御を継続しながら、制御対象１８3を制御する主体を切り換えることができる。異常が発生したＰＬＣ１４nがあるか否かの判断については、後で説明する。
【００５７】
次に、図１１および図１２を用いて、ＰＬＣ１４nおよびＰＣ１２の構成（特に、通信部３４、２４の要部構成）について具体的に説明する。
【００５８】
図１１は、ＰＬＣ１４1の詳細構成図である。なお、各ＰＬＣ１４ｎは、互いに同一の構成を有するので、ここでは、ＰＬＣ１４1を例に挙げて説明する。ＰＬＣ１４1の通信部３４は、プロセッサ３０と通信を行うためのシステムバスＩ／Ｆ４０、第１入力用バッファメモリ４２、第２入力用バッファメモリ４４、第１出力用バッファメモリ４６、第２出力用バッファメモリ４８、第３出力用バッファメモリ５０、自己に接続されたＩ／Ｏ機器１６1と通信を行うためのＭＡＣ５２、ＰＣ１２および自己以外の他のＰＬＣ１４2と通信を行うためのＭＡＣ５４、セレクタ５６、および、レジスタ５８を有する。
【００５９】
システムバスＩ／Ｆ４０とプロセッサ３０とはシステムバス６０によって接続されている。ＭＡＣ５２は、ＭＩＩ（メディア・インデペンデント・インターフェース）６２を介してＰＨＹチップ６４と接続されている。このＰＨＹチップ６４を介して通信部３４は、自己のＩ／Ｏ機器１６1と接続されている。ＭＡＣ５４は、ＭＩＩ６６を介してＰＨＹチップ６８、７０に接続されている。通信部３４は、ＰＨＹチップ６８を介して前段に設けられたＰＣ１２の通信部２４と接続され、ＰＨＹチップ７０を介して後段（次段）に設けられた他のＰＬＣ１４2の通信部３４と接続されている。なお、ＰＬＣ１４2〜１４5の場合は、ＰＨＹチップ６８は、ＰＣ１２ではなく、ＰＬＣ１４1〜１４4と接続される。また、最後段のＰＬＣ１４5の場合は、ＰＨＹチップ７０は、いずれのＰＬＣ１４nとも接続されていない。
【００６０】
ＭＡＣ５２は、ＰＨＹチップ６４等を介して自己に接続されているＩ／Ｏ機器１６1から送られてきた入力データを含むフレームを受信する。この入力データは、Ｉ／Ｏ機器１６1に接続された制御対象１８1から送信されたものである。ＭＡＣ５２は、受信したフレームから入力データを取り出し、取り出した入力データを第１入力用バッファメモリ４２に記憶する。ＰＬＣ１４1のプロセッサ３０は、システムバスＩ／Ｆ４０およびシステムバス６０を介して、第１入力用バッファメモリ４２に記憶された入力データを読み出し、読み出した入力データをメインメモリ３２に記憶する。
【００６１】
プロセッサ３０は、メインメモリ３２（第１入力用バッファメモリ４２）に記憶された入力データに基づいて自己プログラムＰ１を実行して得られた出力データ（以下、第１の出力データと呼ぶ場合がある。）をメインメモリ３２に記憶する。そして、プロセッサ３０は、メインメモリ３２に記憶した第１の出力データを、システムバス６０等を介して第１出力用バッファメモリ４６に記憶する。
【００６２】
ＭＡＣ５４は、ＰＨＹチップ６８を介して、ＰＬＣ１４4に接続されたＩ／Ｏ機器１６4から送られてきた入力データを含むフレームをＰＣ１２を介して受信する。このＩ／Ｏ機器１６4から送られて入力データは、自己に割り当てられた他プログラムＰ４（図７参照）によって制御される制御対象１８4から送信されたものである。ＭＡＣ５４は、受信したフレームから入力データを取り出し、取り出した入力データを第２入力用バッファメモリ４４に記憶する。ＰＬＣ１４1のプロセッサ３０は、システムバスＩ／Ｆ４０およびシステムバス６０を介して、第２入力用バッファメモリ４４に記憶された入力データを読み出し、読み出した入力データをメインメモリ３２に記憶する。なお、メインメモリ３２および第２入力用バッファメモリ４４は、自己（ＰＬＣ１４1）に割り当てられた他プログラムＰｎが複数ある場合は、他プログラムＰｎ毎（入力データを出力したＩ／Ｏ機器１６n毎またはＰＬＣ１４n毎）に入力データを記憶する。
【００６３】
プロセッサ３０は、メインメモリ３２（第２入力用バッファメモリ４４）に記憶された入力データ（制御対象１８4からの入力データ）に基づいて他プログラムＰ４を実行して得られた出力データ（以下、第２の出力データと呼ぶ場合がある。）をメインメモリ３２に記憶する。そして、プロセッサ３０は、メインメモリ３２に記憶した第２の出力データを、システムバス６０等を介して第３出力用バッファメモリ５０に記憶する。なお、メインメモリ３２および第３出力用バッファメモリ５０は、自己に割り当てられた他プログラムＰｎが複数ある場合は、その他プログラムＰｎ毎（第２の出力データの出力対象となるＩ／Ｏ機器１６n毎またはＰＬＣ１４n毎）に第２の出力データを記憶する。
【００６４】
ＭＡＣ５４は、第３出力用バッファメモリ５０に記憶された第２の出力データをＰＬＣ１４4に送信するために、第２の出力データをフレームに書き込み、書き込んだフレームをＰＨＹチップ６８を介して、ＰＣ１２に送信する。このフレームには、送信先となるＰＬＣ１４4のアドレス情報が付加されている。ＰＣ１２は、受信したこのフレームに選択情報を書き込んでＰＬＣ１４4に送信する。このフレームに含まれる第２の出力データは、ＰＬＣ１４4の第２出力用バッファメモリ４８に記憶され、選択情報は、ＰＬＣ１４4のレジスタ５８に記憶される。これにより、ＰＬＣ１４1は、Ｉ／Ｏ機器１６4を介してＰＬＣ１４4に接続された制御対象１８4を制御することが可能となる。
【００６５】
なお、選択情報は、ＰＬＣ１４nがＩ／Ｏ機器１６nに出力（送信）する出力データとして、第１出力用バッファメモリ４６に記憶されている第１の出力データと、第２出力用バッファメモリ４８に記憶されている第２の出力データとのどちらを選択するかを示す情報である。本実施の形態では、この選択情報は１ビットのデータとする。そして、選択情報が論理値「０」の場合は、ＰＬＣ１４nが第１出力用バッファメモリ４６に記憶されている第１の出力データをＩ／Ｏ機器１６nに出力することを意味し、選択情報が論理値「１」の場合は、ＰＬＣ１４nが第２出力用バッファメモリ４８に記憶されている第２の出力データをＩ／Ｏ機器１６nに出力することを意味する。
【００６６】
ＭＡＣ５４は、自己に割り当てられた自己プログラムＰ１を、他プログラムＰ１として割り当てられたＰＬＣ１４4に対して（図７参照）、第１入力用バッファメモリ４２に記憶された入力データを送信するために、この入力データをフレームに書き込み、書き込んだフレームをＰＨＹチップ６８を介して、ＰＣ１２に送信する。このフレームには、送信先となるＰＬＣ１４4のアドレス情報が付加されている。ＰＣ１２は、受信したこのフレームをＰＬＣ１４4に送信する。このフレームに含まれる入力データは、ＰＬＣ１４4の第２入力用バッファメモリ４４に記憶される。
【００６７】
ＭＡＣ５４は、ＰＨＹチップ６８を介して、自己に割り当てられた自己プログラムＰ１を他プログラムＰ１として割り当てられたＰＬＣ１４4から送られてきた第２の出力データを含むフレームをＰＣ１２を介して受信する。このＰＬＣ１４4がＰＬＣ１４1に送信する第２の出力データは、ＰＬＣ１４4の第３出力用バッファメモリ５０に記憶されているデータである。ＭＡＣ５４は、受信したフレームから第２の出力データおよび選択情報を取り出し、取り出した第２の出力データを第２出力用バッファメモリ４８に、取り出した選択情報をレジスタ５８にそれぞれ記憶する。これにより、ＰＬＣ１４4は、Ｉ／Ｏ機器１６1を介してＰＬＣ１４1に接続された制御対象１８1を制御することが可能となる。
【００６８】
セレクタ５６は、レジスタ５８に記憶された選択情報に基づいて、第１出力用バッファメモリ４６に記憶されている第１の出力データおよび第２出力用バッファメモリ４８に記憶されている第２の出力データの一方を選択してＭＡＣ５２に送信する。セレクタ５６は、選択情報が論理値「０」の場合は第１の出力データをＭＡＣ５２に送信し、選択情報が論理値「１」の場合は第２の出力データをＭＡＣ５２に送信する。
【００６９】
ＭＡＣ５２は、セレクタ５６から送られてきた出力データをフレームに書き込んで、書き込んだフレームをＩ／Ｏ機器１６1に出力（送信）する。Ｉ／Ｏ機器１６1は、送られてきたフレームから出力データを取り出し、取り出した出力データを制御対象１８1に出力する。このように、セレクタ５６およびレジスタ５８によって、Ｉ／Ｏ機器１６1を介してＰＬＣ１４1に接続された制御対象１８1をＰＬＣ１４1で制御するのか、ＰＬＣ１４4で制御するのかを切り換えることができる。
【００７０】
なお、ＭＡＣ５４は、ＰＨＹチップ６８を介してフレームを受信するが、このフレームが自己宛てに送信されたものではないときは、そのまま受信したフレームをＰＨＹチップ７０を介して後段に接続されたＰＬＣ１４2に送信する。同様に、ＭＡＣ５４は、ＰＨＹチップ７０を介してフレームを受信するが、このフレームが自己宛てに送信されたものではないときは、そのまま受信したフレームをＰＨＹチップ６８を介して前段に接続されたＰＣ１２に送信する。つまり、ＭＡＣ５４は、自己宛てに送られてきたフレームの場合のみ、入力データまたは第２の出力データをフレームから取り出す。
【００７１】
図１２は、ＰＣ１２の詳細構成図である。ＰＣ１２の通信部２４は、プロセッサ２０と通信を行うためのシステムバスＩ／Ｆ８０、入力用バッファメモリ８２、出力用バッファメモリ８４、および、ＰＬＣ１４1と通信を行うためのＭＡＣ８６を有する。
【００７２】
システムバスＩ／Ｆ８０とプロセッサ２０とはシステムバス８８によって接続されている。ＭＡＣ８６は、ＭＩＩ９０を介してＰＨＹチップ９２と接続されている。このＰＨＹチップ９２を介して通信部２４は、後段に接続されたＰＬＣ１４1の通信部３４と接続されている。
【００７３】
ＭＡＣ８６は、ＰＨＹチップ９２を介して複数のＰＬＣ１４n（１４1〜１４5）、つまり、複数のＩ／Ｏ機器１６n（１６1〜１６5）から送られてきた入力データを含むフレームを受信する。この入力データは、複数のＩ／Ｏ機器１６nを介して複数のＰＬＣ１４nに接続された複数の制御対象１８n（１８1〜１８5）から送信されたものである。ＭＡＣ８６は、少なくとも、自己宛てに送信されたフレームから入力データを取り出し、取り出した入力データを入力用バッファメモリ８２に記憶する。ＰＣ１２に割り当てられた他プログラムＰ２、Ｐ３、Ｐ５（図７参照）によって制御される制御対象１８2、１８3、１８5に接続されたＰＬＣ１４2、１４3、１４5は、送信先のアドレス情報としてＰＣ１２を指定してフレーム（入力データを含むフレーム）を送信する。ＰＣ１２のプロセッサ２０は、システムバスＩ／Ｆ８０およびシステムバス８８を介して、入力用バッファメモリ８２に記憶された入力データを読み出し、読み出した入力データをメインメモリ２２に記憶する。メインメモリ２２および入力用バッファメモリ８２は、入力データを送信したＰＬＣ１４2、１４3、１４5毎またはＩ／Ｏ機器１６n毎（他プログラムＰｎ毎）に入力データを記憶する。
【００７４】
プロセッサ２０は、メインメモリ２２に記憶されたＰＬＣ１４2、１４3、１４5毎（Ｉ／Ｏ機器１６2、１６3、１６5毎）の入力データに基づいて他プログラムＰ２、Ｐ３、Ｐ５を実行して得られ第２の出力データをメインメモリ２２に記憶する。そして、プロセッサ２０は、メインメモリ２２に記憶した第２の出力データを、システムバス８８等を介して出力用バッファメモリ８４に記憶する。メインメモリ２２および出力用バッファメモリ８４は、他プログラムＰｎ毎（第２の出力データの出力対象となるＰＬＣ１４n毎またはＩ／Ｏ機器１６2、１６3、１６5毎）に第２の出力データを記憶する。
【００７５】
ＭＡＣ８６は、出力用バッファメモリ８４に記憶された第２の出力データをフレームに書き込み、書き込んだフレームをＰＨＹチップ９２を介して、ＰＬＣ１４2、１４3、１４5に送信する。このとき、ＭＡＣ８６は、プロセッサ２０の制御の下、送信するフレームに選択情報も書き込む。これにより、ＰＣ１２は、ＰＬＣ１４2、１４3、１４5に接続されたＩ／Ｏ機器１６2、１６3、１６5を制御することが可能となる。なお、ＭＡＣ８６は、ＰＣ１２を介してＰＬＣ１４nから他のＰＬＣ１４nに送信される第２の出力データを含むフレームに関しても、フレームに選択情報を書き込んで、送信先となる他のＰＬＣ１４nに送信する。
【００７６】
次に、ＰＣ１２による選択情報の論理値の決定処理を図１３のフローチャートを用いて説明する。図１３に示す処理は、１実行周期毎に行われる。なお、原則として、ＰＣ１２のプロセッサ２０は、各ＰＬＣ１４n（１４1〜１４5）に送信されるフレームに論理値「０」の選択情報を書き込むものとする。本実施の形態では、この選択情報が書き込まれるフレームは、複数のＰＬＣ１４n（ＰＬＣ１４1〜１４5）の各々に送信される第２の出力データを含むフレームとするが、選択情報が書き込まれるフレームは、第２の出力データを含むフレームとは別のフレームであってもよい。
【００７７】
まず、ＰＣ１２のプロセッサ２０は、通信部２４および複数のＰＬＣ１４n（１４1〜１４5）の通信部３４を介して複数のＰＬＣ１４n（１４1〜１４5）から送られてくる状態情報を収集する（ステップＳ２１）。なお、複数のＰＬＣ１４n（１４1〜１４5）の各々のプロセッサ３０は、生存信号およびエラー情報等の状態情報を、図示しない専用回線を介してＰＣ１２に送信する。複数のＰＬＣ１４n（１４1〜１４5）の各々のプロセッサ３０は、自身が正常に動作している場合は、生存信号をＰＣ１２に送信する。この生存信号は、１実行周期毎に送信される。エラー情報としては、例えば、メインメモリ３２が故障した旨のエラー情報、および、Ｉ／Ｏ機器１６nを介して自己（ＰＬＣ１４n）に接続される制御対象１８nとの接続が断線した旨のエラー情報等がある。ＰＬＣ１４nは、これらのエラーが発生すると、エラー情報をＰＣ１２に出力する。
【００７８】
プロセッサ２０は、収集した複数のＰＬＣ１４n（１４1〜１４5）の各々の状態情報（生存信号やエラー情報等）に基づいて、異常ＰＬＣ１４n（異常または故障が発生しているＰＬＣ１４n）があるか否かを判断する（ステップＳ２２）。例えば、プロセッサ２０は、生存信号を出力していないＰＬＣ１４nがある場合は、生存信号を出力してないそのＰＬＣ１４nを異常ＰＬＣ１４nであると判断する。また、プロセッサ２０は、エラー情報を出力しているＰＬＣ１４nがある場合は、エラー情報を出力しているそのＰＬＣ１４nを異常ＰＬＣ１４nであると判断する。
【００７９】
ステップＳ２２で、異常ＰＬＣ１４nがないと判断するとそのまま処理を終了する。このときは、ＰＣ１２は、上述した原則通り、論理値が「０」の選択情報をフレーム（第２の出力データを含むフレーム）に書き込んで複数のＰＬＣ１４n（ＰＬＣ１４1〜１４5）の各々に送信する。
【００８０】
一方、ステップＳ２２で、異常ＰＬＣ１４nがあると判断すると、プロセッサ２０は、異常ＰＬＣ１４nに割り当てられた自己プログラムＰｎが他プログラムＰｎとしてＰＣ１２または他の正常なＰＬＣ１４nで並行して実行されているか否かを判断する（ステップＳ２３）。ステップＳ２３で、ＰＣ１２または他のＰＬＣ１４nによって並行して実行されていると判断するとステップＳ２４に進む。
【００８１】
ステップＳ２４に進むと、プロセッサ２０は、異常ＰＬＣ１４nの自己プログラムを他プログラムとして実行しているＰＣ１２または他のＰＬＣ１４nによって、Ｉ／Ｏ機器１６nを介して異常ＰＬＣ１４nに接続されている制御対象１８nを継続して制御することができるか否かを判断する。例えば、プロセッサ３０は、異常ＰＬＣ１４nの状態情報として断線のエラー情報が含まれる場合は、異常ＰＬＣ１４nに接続されている制御対象１８nを継続して制御することができないと判断する。逆に、異常ＰＬＣ１４nのメインメモリ３２が単に故障した場合や、生存信号が送られてこないだけの場合は、プロセッサ３０は、異常ＰＬＣ１４nに接続されている制御対象１８nを継続して制御することができると判断する。
【００８２】
ステップＳ２４で、異常ＰＬＣ１４nに接続されている制御対象１８nを継続して制御することができると判断すると、プロセッサ２０は、異常ＰＬＣ１４nに出力するフレーム（第２の出力データを含むフレーム）に、論理値「１」の選択情報を書き込んで、異常ＰＬＣ１４nに送信する（ステップＳ２５）。この異常ＰＬＣ１４nに出力する第２の出力データは、異常ＰＬＣ１４nにＩ／Ｏ機器１６nを介して接続された制御対象１８nを制御するための他プログラムＰｎをＰＣ１２または他のＰＬＣ１４nが実行することによって得られた出力データである。したがって、このフレームに論理値「１」の選択情報を付加することで、Ｉ／Ｏ機器１６nを介して異常ＰＬＣ１４nに接続された制御対象１８nに第２の出力データを出力することができる。これにより、異常ＰＬＣ１４nに接続された制御対象１８nを異常ＰＬＣ１４n以外の他の正常なＰＬＣ１４nが制御することができる。これにより、制御対象１８nを制御する制御主体を切り換えた場合であっても、これまでの実行結果と矛盾が生じない出力データを、異常ＰＬＣ１４nに接続されたＩ／Ｏ機器１６nに出力することができる。したがって、安定した状態で制御対象１８nの制御を続けながら、制御対象１８nの制御主体を切り換えることができる。
【００８３】
例えば、図１０に示すような状態の場合は、ステップＳ２２で、ＰＬＣ１４3が異常と判断され、ステップＳ２３で、他プログラムＰ３がＰＣ１２で並行して実行されていると判断される。そして、ステップＳ２４で、制御対象１８3を継続して制御できると判断されると、ステップＳ２５で、ＰＣ１２は、論理値が「１」の選択情報をフレームに書き込んで、異常ＰＬＣ１４3に送信する。このようにして、異常ＰＬＣ１４nが発生した場合であっても、ＰＣ１２または他の正常なＰＬＣ１４nが異常ＰＬＣ１４nに接続された制御対象１８nを継続して制御することができる。なお、異常ＰＬＣ１４n以外の他の正常なＰＬＣ１４nに対しては、上述した原則通り、論理値が「０」の選択情報が書き込まれたフレームがＰＣ１２から送信される。
【００８４】
一方、ステップＳ２３で、異常ＰＬＣ１４nに割り当てられた自己プログラムＰｎが他プログラムＰｎとしてＰＣ１２または他の正常なＰＬＣ１４nで並行して実行されていないと判断した場合、または、ステップＳ２４で、異常ＰＬＣ１４nに接続されている制御対象１８nを継続して制御することができないと判断すると、ステップＳ２６で、プロセッサ２０は、図示しない表示部（例えば、液晶ディスプレイ）にその旨を表示する。つまり、エラー表示を行う。また、プロセッサ２０は、図示しないスピーカから警告音を出力してもよい。
【００８５】
次に、図１４に示すタイムチャートを用いて、正常なＰＬＣ１４nと、ＰＣ１２および正常なＰＬＣ１４nに接続されたＩ／Ｏ機器１６nとの間におけるデータの授受ための処理を説明する。そして、その後に、図１５に示すタイムチャートを用いて、異常ＰＬＣ１４nと、ＰＣ１２および異常ＰＬＣ１４nに接続されたＩ／Ｏ機器１６nとの間におけるデータの授受のための処理を説明する。図１４および図１５においては、説明をわかり易くするため、正常なＰＬＣ１４nおよび異常ＰＬＣ１４nをともにＰＬＣ１４2とする。したがって、ＰＬＣ１４2に接続されているＩ／Ｏ機器１６nはＩ／Ｏ機器１６2となる。また、ＰＣ１２は、ＰＬＣ１４2に送信する第２の出力データを含むフレームに選択情報を書き込むものとする。
【００８６】
なお、図１４および図１５においてはプログラムＰ２の実行に関してのみ説明する。つまり、プログラムＰ２は、ＰＬＣ１４2にとっては自己プログラムＰ２となり、ＰＣ１２にとっては他プログラムＰ２となる（図７参照）。また、ＰＣ１２およびＰＬＣ１４2は、プログラムＰ２の実行が完了して全ての出力データが確定した段階で通信を開始するものとする。ＰＣ１２およびＰＬＣ１４2は、入力データをＩ／Ｏ機器１６2から全て受信してから次の実行周期におけるプログラムＰ２の実行を開始するものとする。ＰＬＣ１４2とＩ／Ｏ機器１６2との通信が終了した後に、ＰＣ１２とＰＬＣ１４2との通信が行なわれる。この場合は、ＰＣ１２とＰＬＣ１４2とに、同一時刻を示す図示しないクロック等を設けることで、ＰＣ１２とＰＬＣ１４2との間で同期をとることができる。
【００８７】
＜正常なＰＬＣ１４2とＩ／Ｏ機器１６2との通信（図１４参照）＞
ＰＬＣ１４2のプロセッサ３０は、１実行周期の自己プログラムＰ２の実行が完了した後、自己プログラムＰ２の実行によって生成された第１の出力データをメインメモリ３２に記憶する。そして、ＰＬＣ１４2のプロセッサ３０は、メインメモリ３２に記憶した第１の出力データを通信部３４の第１出力用バッファメモリ４６に記憶する。これにより、メインメモリ３２および第１出力用バッファメモリ４６に記憶されている第１の出力データが更新される。なお、この自己プログラムＰ２の実行は、第１入力用バッファメモリ４２に現在記憶されている入力データに基づいて行われる。
【００８８】
その後、ＰＬＣ１４2の通信部３４は、第１出力用バッファメモリ４６に記憶されている第１の出力データをフレームに書き込んでＩ／Ｏ機器１６2に送信する（レジスタ５８に記憶されている論理値は「０」）。これにより、第１の出力データが、Ｉ／Ｏ機器１６2を介して制御対象１８2に出力される。また、ＰＬＣ１４2の通信部３４は、Ｉ／Ｏ機器１６2（制御対象１８2）から送信された入力データを含むフレームを受信し、受信したフレームから入力データを取り出して、第１入力用バッファメモリ４２に記憶する。その後、ＰＬＣ１４2のプロセッサ３０は、第１入力用バッファメモリ４２に記憶した入力データをメインメモリ３２に記憶する。これにより、第１入力用バッファメモリ４２およびメインメモリ３２に記憶されている入力データ（Ｉ／Ｏ機器１６2が送信した入力データ）が更新される。ＰＬＣ１４2のプロセッサ３０は、次の実行周期が到来するタイミングで自己プログラムＰ２の実行を開始する。
【００８９】
＜ＰＣ１２と正常なＰＬＣ１４2との通信（図１４参照）＞
ＰＣ１２のプロセッサ２０は、１実行周期の他プログラムＰ２の実行が完了した後、他プログラムＰ２の実行によって生成された第２の出力データをメインメモリ２２に記憶する。そして、ＰＣ１２のプロセッサ２０は、メインメモリ２２に記憶した第２の出力データを通信部２４の出力用バッファメモリ８４に記憶する。これにより、メインメモリ２２および出力用バッファメモリ８４に記憶されている第２の出力データ（Ｉ／Ｏ機器１６2に出力する第２の出力データ）が更新される。なお、他プログラムＰ２の実行は、入力用バッファメモリ８２に現在記憶されている入力データ（Ｉ／Ｏ機器１６2が送信した入力データ）に基づいて行われる。
【００９０】
その後、ＰＣ１２の通信部２４は、出力用バッファメモリ８４に記憶されている第２の出力データをフレームに書き込んでＰＬＣ１４2に送信する。このときは、ＰＣ１２は、ＰＬＣ１４2に送信する第２の出力データを含むフレームに、論理値が「０」の選択情報も書き込んで送信する。ＰＬＣ１４2の通信部３４は、ＰＣ１２から送られてきたフレームから第２の出力データ（Ｉ／Ｏ機器１６2に出力する第２の出力データ）を取り出し、取り出した第２の出力データを第２出力用バッファメモリ４８に記憶する。これにより、第２出力用バッファメモリ４８に記憶されている第２の出力データ（Ｉ／Ｏ機器１６2に出力する第２の出力データ）が更新される。また、ＰＬＣ１４2の通信部３４は、ＰＣ１２から送られてきたフレームから選択情報を取り出し、取り出した選択情報の論理値「０」をレジスタ５８に記憶する。これにより、ＰＬＣ１４2のセレクタ５６は、Ｉ／Ｏ機器１６2に送信する出力データとして、第１出力用バッファメモリ４６に記憶されている第１の出力データを選択する。
【００９１】
また、ＰＬＣ１４2の通信部３４は、第１入力用バッファメモリ４２に記憶されている入力データをフレームに書き込んでＰＣ１２に送信する。ＰＣ１２の通信部２４は、ＰＬＣ１４2から送られてきた入力データ（Ｉ／Ｏ機器１６2が送信した入力データ）を含むフレームを受信し、受信したフレームから入力データを取り出して、入力用バッファメモリ８２に記憶する。ＰＣ１２のプロセッサ２０は、入力用バッファメモリ８２に記憶した入力データをメインメモリ２２に記憶する。これにより、入力用バッファメモリ８２およびメインメモリ２２に記憶されている入力データ（Ｉ／Ｏ機器１６2が送信した入力データ）が更新される。ＰＣ１２のプロセッサ２０は、次の実行周期が到来するタイミングで他プログラムＰ２の実行を開始する。
【００９２】
＜異常ＰＬＣ１４2とＩ／Ｏ機器１６2との通信（図１５参照）＞
異常ＰＬＣ１４2のプロセッサ３０は、エラーを検出すると、エラー情報を生成し、前記した専用回線を介して生成したエラー情報をＰＣ１２に送信する。このときは、異常ＰＬＣ１４2のプロセッサ３０は、自己プログラムＰ２の実行を行わないことから、第１出力用バッファメモリ４６に記憶されている第１の出力データの更新は行われない。
【００９３】
異常ＰＬＣ１４2の通信部３４は、第１出力用バッファメモリ４６に記憶されている第１の出力データをフレームに書き込んでＩ／Ｏ機器１６2に送信する（このときのレジスタ５８に記憶されている論理値は「０」）。このときは、第１出力用バッファメモリ４６に記憶されている第１の出力データの更新が行なわれていないので、前回送信した第１の出力データが再びＩ／Ｏ機器１６2に送信される。異常ＰＬＣ１４2の通信部３４は、Ｉ／Ｏ機器１６2から送信された入力データを含むフレームを受信し、受信したフレームから入力データを取り出して、第１入力用バッファメモリ４２に記憶する。その後、異常ＰＬＣ１４2のプロセッサ３０は、第１入力用バッファメモリ４２に記憶した入力データをメインメモリ３２に記憶する。これにより、第１入力用バッファメモリ４２およびメインメモリ３２に記憶されている入力データ（Ｉ／Ｏ機器１６2が送信した入力データ）が更新される。
【００９４】
＜ＰＣ１２と異常ＰＬＣ１４2との通信（図１５参照）＞
ＰＣ１２のプロセッサ２０は、１実行周期の他プログラムＰ２の実行が完了した後、他プログラムＰ２の実行によって生成された第２の出力データをメインメモリ２２に記憶する。そして、ＰＣ１２のプロセッサ２０は、メインメモリ２２に記憶した第２の出力データを通信部２４の出力用バッファメモリ８４に記憶する。これにより、メインメモリ２２および出力用バッファメモリ８４に記憶されている第２の出力データ（Ｉ／Ｏ機器１６2に出力する第２の出力データ）が更新される。なお、他プログラムＰ２の実行は、入力用バッファメモリ８２に現在記憶されている入力データ（Ｉ／Ｏ機器１６2が送信した入力データ）に基づいて行われる。
【００９５】
その後、ＰＣ１２の通信部２４は、出力用バッファメモリ８４に記憶されている第２の出力データをフレームに書き込んで異常ＰＬＣ１４2に送信する。このときは、ＰＣ１２は、異常ＰＬＣ１４2に送信する第２の出力データを含むフレームに、論理値が「１」の選択情報も書き込んで送信する。異常ＰＬＣ１４2の通信部３４は、ＰＣ１２から送られてきたフレームから第２の出力データ（Ｉ／Ｏ機器１６2に出力する第２の出力データ）を取り出し、取り出した第２の出力データを第２出力用バッファメモリ４８に記憶する。これにより、第２出力用バッファメモリ４８に記憶されている第２の出力データ（Ｉ／Ｏ機器１６2に出力する第２の出力データ）が更新される。また、異常ＰＬＣ１４2の通信部３４は、ＰＣ１２から送られてきたフレームから選択情報を取り出し、取り出した選択情報の論理値「１」をレジスタ５８に記憶する。これにより、異常ＰＬＣ１４2のセレクタ５６は、Ｉ／Ｏ機器１６2に送信する出力データとして、第２出力用バッファメモリ４８に記憶されている第２の出力データを選択する。したがって、次にＰＬＣ１４2とＩ／Ｏ機器１６2とが通信を行うときに、第２出力用バッファメモリ４８に記憶されている第２の出力データがＩ／Ｏ機器１６2に出力される。これにより、Ｉ／Ｏ機器１６2を制御する制御主体を、異常ＰＬＣ１４2からＰＣ１２に切り換えることができる。
【００９６】
また、異常ＰＬＣ１４2の通信部３４は、第１入力用バッファメモリ４２に記憶されている入力データをフレームに書き込んでＰＣ１２に送信する。ＰＣ１２の通信部２４は、異常ＰＬＣ１４2から送られてきた入力データ（Ｉ／Ｏ機器１６2が送信した入力データ）を含むフレームを受信し、受信したフレームから入力データを取り出して、入力用バッファメモリ８２に記憶する。ＰＣ１２のプロセッサ２０は、入力用バッファメモリ８２に記憶した入力データをメインメモリ２２に記憶する。これにより、入力用バッファメモリ８２およびメインメモリ２２に記憶されている入力データ（Ｉ／Ｏ機器１６2が送信した入力データ）が更新される。ＰＣ１２のプロセッサ２０は、次の実行周期が到来する他プログラムＰ２の実行を開始する。
【００９７】
このように、ＰＬＣ１４2に異常が発生するとＩ／Ｏ機器１６2を制御する制御主体が異常ＰＬＣ１４2からＰＣ１２に切り換わるが、Ｉ／Ｏ機器１６2からの入力データに対する出力データの応答（更新）が正常時に比べ１実行周期だけ遅れることになる。これを回避するために、異常ＰＬＣ１４2の第２出力用バッファメモリ４８の更新が行なわれてから現在の１実行周期内でもう一度異常ＰＬＣ１４2とＩ／Ｏ機器１６2の間の通信を再び実行すればよい。
【００９８】
なお、図１４および図１５では、ＰＬＣ１４nと、ＰＬＣ１４nの自己プログラムＰｎを他プログラムＰｎとして割り当てられたＰＣ１２との間におけるデータの授受を例に挙げて説明したが、ＰＬＣ１４nと、ＰＬＣ１４nの自己プログラムＰｎを他プログラムＰｎとして割り当てられた他のＰＬＣ１４nとの間におけるデータの授受の場合も同様にして行うことができる。以下、図１４および図１５を参照して、ＰＬＣ１４1とＰＬＣ１４4との間におけるデータの授受のための処理を簡単に説明する。なお、図１４および図１５のＰＬＣ１４2、ＰＣ１２を、ＰＬＣ１４1、ＰＬＣ１４4に置き換えるものとし、プログラムＰ１の実行に関してのみ説明する。
【００９９】
＜正常なＰＬＣ１４1とＩ／Ｏ機器１６1との通信（図１４参照）＞
ＰＬＣ１４1のプロセッサ３０は、１実行周期の自己プログラムＰ１（図７参照）の実行が完了した後、自己プログラムＰ１の実行によって生成された第１の出力データをメインメモリ３２に記憶する。そして、ＰＬＣ１４1のプロセッサ３０は、メインメモリ３２に記憶した第１の出力データを通信部３４の第１出力用バッファメモリ４６に記憶する。これにより、メインメモリ３２および第１出力用バッファメモリ４６に記憶されている第１の出力データが更新される。なお、この自己プログラムＰ１の実行は、第１入力用バッファメモリ４２に現在記憶されている入力データに基づいて行われる。
【０１００】
その後、ＰＬＣ１４1の通信部３４は、第１出力用バッファメモリ４６に記憶されている第１の出力データをフレームに書き込んでＩ／Ｏ機器１６1に送信する（レジスタ５８に記憶されている論理値は「０」）。これにより、第１の出力データが、Ｉ／Ｏ機器１６1を介して制御対象１８1に出力される。また、ＰＬＣ１４1の通信部３４は、Ｉ／Ｏ機器１６1（制御対象１８1）から送信された入力データを含むフレームを受信し、受信したフレームから入力データを取り出して、第１入力用バッファメモリ４２に記憶する。その後、ＰＬＣ１４1のプロセッサ３０は、第１入力用バッファメモリ４２に記憶した入力データをメインメモリ３２に記憶する。これにより、第１入力用バッファメモリ４２およびメインメモリ３２に記憶されている入力データ（Ｉ／Ｏ機器１６1が送信した入力データ）が更新される。ＰＬＣ１４1のプロセッサ３０は、次の実行周期が到来するタイミングで自己プログラムＰ１の実行を開始する。
【０１０１】
＜正常なＰＬＣ１４1と正常なＰＬＣ１４4との通信（図１４参照）＞
ＰＬＣ１４4のプロセッサ３０は、１実行周期の他プログラムＰ１（図７参照）の実行が完了した後、他プログラムＰ１の実行によって生成された第２の出力データをメインメモリ３２に記憶する。そして、ＰＬＣ１４4のプロセッサ３０は、メインメモリ３２に記憶した第２の出力データを通信部３４の第３出力用バッファメモリ５０に記憶する。これにより、メインメモリ３２および第３出力用バッファメモリ５０に記憶されている第２の出力データ（Ｉ／Ｏ機器１６1に出力する第２の出力データ）が更新される。なお、他プログラムＰ１の実行は、第２入力用バッファメモリ４４に現在記憶されている入力データ（Ｉ／Ｏ機器１６1が送信した入力データ）に基づいて行われる。
【０１０２】
その後、ＰＬＣ１４4の通信部３４は、第３出力用バッファメモリ５０に記憶されている第２の出力データをフレームに書き込んで、ＰＣ１２を介してＰＬＣ１４1に送信する。このときは、ＰＣ１２は、ＰＬＣ１４1に送信する第２の出力データを含むフレームに、論理値が「０」の選択情報も書き込む。ＰＬＣ１４1の通信部３４は、ＰＬＣ１４4から送られてきたフレームから第２の出力データ（Ｉ／Ｏ機器１６1に出力する第２の出力データ）を取り出し、取り出した第２の出力データを第２出力用バッファメモリ４８に記憶する。これにより、第２出力用バッファメモリ４８に記憶されている第２の出力データ（Ｉ／Ｏ機器１６1に出力する第２の出力データ）が更新される。また、ＰＬＣ１４1の通信部３４は、ＰＣ１２を介してＰＬＣ１４4から送られてきたフレームから選択情報を取り出し、取り出した選択情報の論理値「０」をレジスタ５８に記憶する。これにより、ＰＬＣ１４1のセレクタ５６は、Ｉ／Ｏ機器１６1に送信する出力データとして、第１出力用バッファメモリ４６に記憶されている第１の出力データを選択する。
【０１０３】
また、ＰＬＣ１４1の通信部３４は、第１入力用バッファメモリ４２に記憶されている入力データをフレームに書き込んで、ＰＣ１２を介してＰＬＣ１４4に送信する。ＰＬＣ１４4の通信部３４は、ＰＣ１２を介してＰＬＣ１４1から送られてきた入力データ（Ｉ／Ｏ機器１６1が送信した入力データ）を含むフレームを受信し、受信したフレームから入力データを取り出して、第２入力用バッファメモリ４４に記憶する。ＰＬＣ１４4のプロセッサ３０は、第２入力用バッファメモリ４４に記憶した入力データをメインメモリ３２に記憶する。これにより、第２入力用バッファメモリ４４およびメインメモリ３２に記憶されている入力データ（Ｉ／Ｏ機器１６1が送信した入力データ）が更新される。メインメモリ３２のプロセッサ３０は、次の実行周期が到来するタイミングで他プログラムＰ１の実行を開始する。
【０１０４】
＜異常ＰＬＣ１４1とＩ／Ｏ機器１６1との通信（図１５参照）＞
異常ＰＬＣ１４1のプロセッサ３０は、エラーを検出すると、エラー情報を生成し、前記した専用回線を介して生成したエラー情報をＰＣ１２に送信する。このときは、異常ＰＬＣ１４1のプロセッサ３０は、自己プログラムＰ１の実行を行わないことから、第１出力用バッファメモリ４６に記憶されている第１の出力データの更新は行われない。
【０１０５】
異常ＰＬＣ１４1の通信部３４は、第１出力用バッファメモリ４６に記憶されている第１の出力データをフレームに書き込んでＩ／Ｏ機器１６1に送信する（このときのレジスタ５８に記憶されている論理値は「０」）。このときは、第１出力用バッファメモリ４６に記憶されている第１の出力データの更新が行なわれていないので、前回送信した第１の出力データが再びＩ／Ｏ機器１６1に送信される。異常ＰＬＣ１４1の通信部３４は、Ｉ／Ｏ機器１６1から送信された入力データを含むフレームを受信し、受信したフレームから入力データを取り出して、第１入力用バッファメモリ４２に記憶する。その後、異常ＰＬＣ１４1のプロセッサ３０は、第１入力用バッファメモリ４２に記憶した入力データをメインメモリ３２に記憶する。これにより、第１入力用バッファメモリ４２およびメインメモリ３２に記憶されている入力データ（Ｉ／Ｏ機器１６1が送信した入力データ）が更新される。
【０１０６】
＜異常ＰＬＣ１４1と正常なＰＬＣ１４4との通信（図１５参照）＞
ＰＬＣ１４4のプロセッサ３０は、１実行周期の他プログラムＰ１の実行が完了した後、他プログラムＰ１の実行によって生成された第２の出力データをメインメモリ３２に記憶する。そして、ＰＬＣ１４4のプロセッサ３０は、メインメモリ３２に記憶した第２の出力データを通信部３４の第３出力用バッファメモリ５０に記憶する。これにより、メインメモリ３２および第３出力用バッファメモリ５０に記憶されている第２の出力データ（Ｉ／Ｏ機器１６1に出力する第２の出力データ）が更新される。なお、他プログラムＰ１の実行は、第２入力用バッファメモリ４４に現在記憶されている入力データ（Ｉ／Ｏ機器１６1が送信した入力データ）に基づいて行われる。
【０１０７】
その後、ＰＬＣ１４4の通信部３４は、第３出力用バッファメモリ５０に記憶されている第２の出力データをフレームに書き込んで、ＰＣ１２を介して異常ＰＬＣ１４1に送信する。このときは、ＰＣ１２は、異常ＰＬＣ１４1に送信する第２の出力データを含むフレームに、論理値が「１」の選択情報も書き込んで送信する。異常ＰＬＣ１４1の通信部３４は、ＰＣ１２を介してＰＬＣ１４4から送られてきたフレームから第２の出力データ（Ｉ／Ｏ機器１６1に出力する第２の出力データ）を取り出し、取り出した第２の出力データを第２出力用バッファメモリ４８に記憶する。これにより、第２出力用バッファメモリ４８に記憶されている第２の出力データ（Ｉ／Ｏ機器１６1に出力する第２の出力データ）が更新される。また、異常ＰＬＣ１４1の通信部３４は、ＰＣ１２を介してＰＬＣ１４4から送られてきたフレームから選択情報を取り出し、取り出した選択情報の論理値「１」をレジスタ５８に記憶する。これにより、異常ＰＬＣ１４1のセレクタ５６は、Ｉ／Ｏ機器１６1に送信する出力データとして、第２出力用バッファメモリ４８に記憶されている第２の出力データを選択する。したがって、次にＰＬＣ１４1とＩ／Ｏ機器１６1とが通信を行うときに、第２出力用バッファメモリ４８に記憶されている第２の出力データがＩ／Ｏ機器１６1に出力される。これにより、Ｉ／Ｏ機器１６1を制御する制御主体を異常ＰＬＣ１４1からＰＬＣ１４4に切り換えることができる。
【０１０８】
また、異常ＰＬＣ１４1の通信部３４は、第１入力用バッファメモリ４２に記憶されている入力データをフレームに書き込んで、ＰＣ１２を介してＰＬＣ１４4に送信する。ＰＬＣ１４4の通信部３４は、ＰＣ１２を介して異常ＰＬＣ１４1から送られてきた入力データ（Ｉ／Ｏ機器１６1が送信した入力データ）を含むフレームを受信し、受信したフレームから入力データを取り出して、第２入力用バッファメモリ４４に記憶する。ＰＬＣ１４4のプロセッサ３０は、第２入力用バッファメモリ４４に記憶した入力データをメインメモリ３２に記憶する。これにより、第２入力用バッファメモリ４４およびメインメモリ３２に記憶されている入力データ（Ｉ／Ｏ機器１６1が送信した入力データ）が更新される。ＰＬＣ１４4のプロセッサ３０は、次の実行周期が到来する他プログラムＰ２の実行を開始する。
【０１０９】
このように、ＰＬＣ１４1に異常が発生するとＩ／Ｏ機器１６1を制御する制御主体が異常ＰＬＣ１４1からＰＬＣ１４4に切り換わるが、Ｉ／Ｏ機器１６1からの入力データに対する出力データの応答（更新）が正常時に比べ１実行周期だけ遅れることになる。これを回避するために、第２出力用バッファメモリ４８の更新が行なわれてから現在の１実行周期内でもう一度異常ＰＬＣ１４1とＩ／Ｏ機器１６1との間の通信を再び実行すればよい。
【０１１０】
なお、第１入力用バッファメモリ４２および第２入力用バッファメモリ４４を、１つの記憶媒体で構成してもよい。この場合は、１つの記憶媒体の記憶領域を少なくとも２つに区分けし、一方の記憶領域を第１入力用バッファメモリ４２として機能させ、他方を第２入力用バッファメモリ４４として機能させればよい。また、第１出力用バッファメモリ４６、第２出力用バッファメモリ４８、および、第３出力用バッファメモリ５０も同様に、１つの記憶媒体で構成してもよい。この場合も、１つの記憶媒体の記憶領域を少なくとも３つに区分けし、区分けされた３つの記憶領域のそれぞれを、第１出力用バッファメモリ４６、第２出力用バッファメモリ４８、第３出力用バッファメモリ５０として機能させればよい。さらに、第１入力用バッファメモリ４２、第２入力用バッファメモリ４４、第１出力用バッファメモリ４６、第２出力用バッファメモリ４８、および、第３出力用バッファメモリ５０を１つの記憶媒体で構成してもよい。
【０１１１】
異常ＰＬＣ１４nが発生した場合に、Ｉ／Ｏ機器１６nを介して異常ＰＬＣ１４nに接続されている制御対象１８nを制御する制御主体を切り換えるようにしたが、異常ＰＬＣ１４nが発生していない場合であっても、制御主体を切り換えるようにしてもよい。つまり、Ｉ／Ｏ機器１６nを介して正常なＰＬＣ１４nに接続されている制御対象１８nをＰＣ１２または他の正常なＰＬＣ１４nが制御するように、制御主体を切り換えてもよい。
【０１１２】
上記実施の形態で説明したＰＬＣシステム（コントローラシステム）１０は、複数のＰＬＣ（コントローラ）１４nと、複数のＰＬＣ１４nの各々の制御対象１８nと複数のＰＬＣ１４nの各々とを接続し、制御対象１８nとＰＬＣ１４nとの間で必要な情報を伝送する複数のＩ／Ｏ機器１６nと、複数のＰＬＣ１４nを制御して管理するＰＣ（上位制御装置）１２とを備える。ＰＣ１２は、メインメモリ（記憶部）２２とプロセッサ２０とを有する。メインメモリ２２は、複数のＰＬＣ１４nの各々が実行する複数のプログラムＰｎを記憶している。プロセッサ２０は、複数のＰＬＣ１４nの各々がＩ／Ｏ機器１６nを介して自己に接続された制御対象１８nを制御するように、メインメモリ２２に記憶された複数のプログラムＰｎを自己プログラムＰｎとして複数のＰＬＣ１４nに割り当てる。また、プロセッサ２０は、メインメモリ２２に記憶された複数のプログラムＰｎの全てまたは一部が、１つの実行周期内で２重に並行して実行されるように、複数のプログラムＰｎの全てまたは一部を他プログラムＰｎとしてＰＣ１２および複数のＰＬＣ１４nにさらに割り当てる。複数のＰＬＣ１４nの各々は、第１入力用バッファメモリ４２、第１出力用バッファメモリ４６、および、第２出力用バッファメモリ４８を有する。第１入力用バッファメモリ４２は、Ｉ／Ｏ機器１６nを介して自己に接続された制御対象１８nから送信された入力データを記憶する。第１出力用バッファメモリ４６は、Ｉ／Ｏ機器１６nを介して自己に接続された制御対象１８nを制御するために自己に割り当てられた自己プログラＰｎを実行して得られた第１の出力データを記憶する。第２出力用バッファメモリ４８は、Ｉ／Ｏ機器１６nを介して自己に接続された制御対象１８nを制御するためにＰＣ１２または他のＰＬＣ１４nに割り当てられた他プログラムＰｎを、ＰＣ１２または他のＰＬＣ１４nが実行することで得られた第２の出力データを記憶する。複数のＰＬＣ１４nの各々は、ＰＣ１２から送信された選択情報に基づいて、第１出力用バッファメモリ４６に記憶されている第１の出力データおよび第２出力用バッファメモリ４８に記憶されている第２の出力データの一方を、Ｉ／Ｏ機器１６nを介して自己に接続された制御対象１８nに出力する。これにより、制御対象１８nを制御する制御主体を切り換えた場合であっても、これまでの実行結果と矛盾が生じない出力データを、その制御対象１８nに接続されたＩ／Ｏ機器１６nに出力することができる。したがって、安定した状態で制御対象１８nの制御を続けながら、制御対象１８nの制御主体を切り換えることができる。
【０１１３】
複数のＰＬＣ１４nの各々は、プロセッサ３０をさらに有する。プロセッサ３０は、Ｉ／Ｏ機器１６nを介して自己に接続された制御対象１８nから送信された入力データに基づいて、自己に割り当てられた自己プログラムＰｎを実行することで第１の出力データを生成する。また、複数のＰＬＣ１４nの各々は、Ｉ／Ｏ機器１６nを介して他のＰＬＣ１４nに接続された制御対象１８nであって、自己に割り当てられた他プログラムＰｎによって制御される制御対象１８nから送信された入力データに基づいて、自己に割り当てられた他プログラムＰｎを実行することで第２の出力データを生成する。このように、ＰＬＣ１４nは、制御対象１８nが送信した入力データに基づいてプログラムＰｎ（自己プログラムＰｎまたは他プログラムＰｎ）を実行して、入力データを送信した制御対象１８nに出力する出力データを生成するので、安定した状態で制御対象１８nを制御することができる。
【０１１４】
ＰＣ１２のプロセッサ２０は、自己に割り当てられた他プログラムＰｎによって制御される制御対象１８nから送信された入力データに基づいて、自己に割り当てられた他プログラムＰｎを実行することで第２の出力データを生成する。このように、ＰＣ１２は、制御対象１８nが送信した入力データに基づいて他プログラムＰｎを実行して、入力データを送信した制御対象１８nに出力する出力データを生成するので、安定した状態で制御対象１８nを制御することができる。
【０１１５】
ＰＣ１２のプロセッサ２０は、正常と判断したＰＬＣ１４nが、第１出力用バッファメモリ４６に記憶された第１の出力データをＩ／Ｏ機器１６nを介して自己に接続された制御対象１８nに出力し、異常と判断されたＰＬＣ１４nが、第２出力用バッファメモリ４８に記憶された第２の出力データをＩ／Ｏ機器１６nを介して自己に接続された制御対象１８nに出力するように、選択情報を複数のＰＬＣ１４nに出力する。これにより、ＰＬＣ１４nに異常が発生した場合であっても、異常ＰＬＣ１４nに代わって他の正常なＰＬＣ１４nが、Ｉ／Ｏ機器１６nを介して異常ＰＬＣ１４nに接続された制御対象１８nを制御することができる。したがって、安定した状態でＩ／Ｏ機器１６nを介して異常ＰＬＣ１４nに接続された制御対象１８nの制御を続けながら、異常ＰＬＣ１４nに接続された制御対象１８nの制御主体を切り換えることができる。
【０１１６】
ＰＣ１２のプロセッサ２０は、複数のＰＬＣ１４nから取得した複数のＰＬＣ１４nの各々のエラー情報および生存信号の少なくとも一方に基づいて、複数のＰＬＣ１４nの各々が正常か異常かを判断する。これにより、ＰＣ１２は、ＰＬＣ１４nが正常か異常かを精度よく判断することができる。
【０１１７】
ＰＬＣ１４nの通信部３４は、選択情報に基づいて、Ｉ／Ｏ機器１６nを介して自己に接続されている制御対象１８nに出力する出力データとして、第１出力用バッファメモリ４６に記憶されている第１の出力データおよび第２出力用バッファメモリ４８に記憶されている第２の出力データの一方を選択するセレクタ５６をさらに有する。これにより、容易に、Ｉ／Ｏ機器１６nに出力する出力データを切り換えることができる。
【０１１８】
ＰＣ１２のプロセッサ２０は、複数のＰＬＣ１４nの通信部３４を介して、複数のＰＬＣ１４nの各々が自己プログラムＰｎを実行する際の負荷を示す負荷情報を取得し、取得した負荷情報に基づいて他プログラムＰｎを割り当てる。これにより、複数のＰＬＣ１４nの各々によるプログラムＰｎの処理が１実行周期内で収まるように、他プログラムＰｎを割り当てることができる。
【０１１９】
ＰＣ１２は、自己に割り当てられた他プログラムＰｎによって制御される制御対象１８nにＩ／Ｏ機器１６nを介して接続されたＰＬＣ１４nの第１入力用バッファメモリ４２に記憶された入力データを受信し、自己に割り当てられた他プログラムＰｎによって制御される制御対象１８nにＩ／Ｏ機器１６nを介して接続されたＰＬＣ１４nに第２の出力データを送信する。これにより、ＰＣ１２は、これまでの実行結果と矛盾が生じない第２の出力データをＰＬＣ１４nに送信することができ、Ｉ／Ｏ機器１６nを介してＰＬＣ１４nに接続された制御対象１８nを制御することができる。
【０１２０】
複数のＰＬＣ１４nの各々は、第２入力用バッファメモリ４４と第３出力用バッファメモリ５０とをさらに有する。第２入力用バッファメモリ４４は、他のＰＬＣ１４nにＩ／Ｏ機器１６nを介して接続された制御対象１８nであって、自己に割り当てられた他プログラムＰｎによって制御される制御対象１８nから送信された入力データを記憶する。第３出力用バッファメモリ５０は、他のＰＬＣ１４nにＩ／Ｏ機器１６nを介して接続された制御対象１８nを制御するために自己に割り当てられた他プログラムＰｎを実行して得られた第２の出力データを記憶する。複数のＰＬＣ１４nの各々は、自己に割り当てられた他プログラムＰｎによって制御される制御対象１８nにＩ／Ｏ機器１６nを介して接続された他のＰＬＣ１４nの第１入力用バッファメモリ４２に記憶された入力データをＰＣ１２を介して受信し、受信した入力データを第２入力用バッファメモリ４４に記憶する。また、複数のＰＬＣ１４nの各々は、自己に割り当てられた他プログラムＰｎによって制御される制御対象１８nにＩ／Ｏ機器１６nを介して接続された他のＰＬＣ１４nに、ＰＣ１２を介して第３出力用バッファメモリ５０に記憶された第２の出力データを送信する。これにより、ＰＬＣ１４nは、これまでの実行結果と矛盾が生じない第２の出力データを他のＰＬＣ１４nに送信することができ、Ｉ／Ｏ機器１６nを介して他のＰＬＣ１４nに接続された制御対象１８nを制御することができる。
【符号の説明】
【０１２１】
１０…ＰＬＣシステム                    １２…ＰＣ
１４n（１４1〜１４5）…ＰＬＣ           １６n（１６1〜１６5）…Ｉ／Ｏ機器
２０、３０…プロセッサ                  ２２、３２…メインメモリ
２４、３４…通信部                      ４０、８０…システムバスＩ／Ｆ
４２…第１入力用バッファメモリ          ４４…第２入力用バッファメモリ
４６…第１出力用バッファメモリ          ４８…第２出力用バッファメモリ
５０…第３出力用バッファメモリ          ５２、５４、８６…ＭＡＣ
５６…セレクタ                          ５８…レジスタ
６０、８８…システムバス                ６２、６６、９０…ＭＩＩ
６４、６８、７０、９２…ＰＨＹチップ    ８２…入力用バッファメモリ
８４…出力用バッファメモリ
【図１】
2018005372.tif 000003
【図２】
2018005372.tif 000004
【図３】
2018005372.tif 000005
【図４】
2018005372.tif 000006
【図５】
2018005372.tif 000007
【図６】
2018005372.tif 000008
【図７】
2018005372.tif 000009
【図８】
2018005372.tif 000010
【図９】
2018005372.tif 000011
【図１０】
2018005372.tif 000012
【図１１】
2018005372.tif 000013
【図１２】
2018005372.tif 000014
【図１３】
2018005372.tif 000015
【図１４】
2018005372.tif 000016
【図１５】
2018005372.tif 000017