(57)【要約】      （修正有）【課題】コントローラの稼動を継続したまま、制御ソフトウェアを迅速にアップデート可能なコントローラを提供する。【解決手段】第１の記憶部２３と、実行部２３１と、第２の記憶部２２と、置換部１０２と、を備える。第１の記憶部２３は、制御ソフトウェア１００ａを記憶する。第２の記憶部２２は、実行されるプログラム２３６がロードされる。実行部２３１は、制御ソフトウェアを第２の記憶部にロードして実行する。置換部１０２は、制御ソフトウェアに含まれる第１の機能部１１１の実行中に、第１の機能部の更新バージョンである第２の機能部を含む更新バージョンの制御ソフトウェアを外部装置から第１の記憶部にダウンロードし、ダウンロード後に第１の機能部の実行が停止したタイミングで、第２の記憶部にロードされている第１の機能部を、第１の記憶部にダウンロードされた第２の機能部に置換する。【選択図】図１
2020027346.tif 000002
【特許請求の範囲】
【請求項１】
制御ソフトウェアを記憶する第１の記憶部と、
実行されるプログラムがロードされる第２の記憶部と、
前記制御ソフトウェアを前記第２の記憶部にロードして実行する実行部と、
前記制御ソフトウェアに含まれる第１の機能部の実行中に、前記第１の機能部の更新バージョンである第２の機能部を含む更新バージョンの制御ソフトウェアを外部装置から前記第１の記憶部にダウンロードし、ダウンロード後に前記第１の機能部の実行が停止したタイミングで、前記第２の記憶部にロードされている前記第１の機能部を、前記第１の記憶部にダウンロードされた前記第２の機能部に置換する置換部と、
を備えるコントローラ。
【請求項２】
前記置換部は、前記制御ソフトウェアに含まれ、
前記制御ソフトウェアは、さらに、オペレーティングシステムを含み、
前記置換部は、前記第２の記憶部にロードされている前記第１の機能部を前記第２の機能部に置換する場合に、前記第２の記憶部にロードされている前記置換部および前記オペレーティングシステムを変更しない、
請求項１に記載のコントローラ。
【請求項３】
前記置換部は、前記更新バージョンの制御ソフトウェアを前記第１の記憶部にダウンロードする際に、前記第１の記憶部から更新前のバージョンの前記制御ソフトウェアを削除する、
請求項１または２に記載のコントローラ。
【請求項４】
前記第１の記憶部は、少なくとも前記第１の機能部と前記第２の機能部とを含む複数の機能部と、前記複数の機能部のうちのいずれが実行対象であるかを示す実行対象情報と、を記憶し、
前記置換部は、前記第１の機能部の実行中に、前記実行対象情報の変更の指示を受け付けた場合に、前記第１の機能部の実行が停止したタイミングで、前記第２の記憶部にロードされている前記第１の機能部を、前記複数の機能部のうちの、変更後の前記実行対象情報によって示された一の機能部に置換する、
請求項１または２に記載のコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、コントローラに関する。
【背景技術】
【０００２】
従来から、産業プラント（以下、単に「プラント」という。）等の制御システムにおいて、Ｉ／Ｏ（Input／output）機器等を制御するためにＰＬＣ（Programmable  Logic  Controller）等のコントローラが用いられている。コントローラは、例えば、制御ソフトウェア（制御プログラム、ファームウェア）とアプリケーションプログラムに基づいて動作する。
【０００３】
また、このようなコントローラでは、制御ソフトウェアの修正や機能向上のために、制御ソフトウェアの更新（アップデート）を行う場合がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１８−０２２３６７号公報
【特許文献２】特開２０１３−１４２９３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術においては、制御ソフトウェアの更新の際にはコントローラを再起動していたため、制御ソフトウェアの更新のために時間を要する場合があった。このため、コントローラの稼動を継続したまま、制御ソフトウェアを迅速にアップデートすることが求められていた。
【課題を解決するための手段】
【０００６】
実施形態のコントローラは、第１の記憶部と、実行部と、第２の記憶部と、置換部と、を備える。第１の記憶部は、制御ソフトウェアを記憶する。第２の記憶部は、実行されるプログラムがロードされる。実行部は、制御ソフトウェアを第２の記憶部にロードして実行する。置換部は、制御ソフトウェアに含まれる第１の機能部の実行中に、第１の機能部の更新バージョンである第２の機能部を含む更新バージョンの制御ソフトウェアを外部装置から第１の記憶部にダウンロードし、ダウンロード後に第１の機能部の実行が停止したタイミングで、第２の記憶部にロードされている第１の機能部を、第１の記憶部にダウンロードされた第２の機能部に置換する。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施形態にかかる制御システムの全体構成の一例を模式的に示す図である。
【図２】図２は、第１の実施形態にかかる更新バージョンの制御ソフトウェアがダウンロードされた後のコントローラの状態の一例を示す図である。
【図３】図３は、第１の実施形態にかかる制御ソフトウェアの更新タイミングの一例を示すタイミングチャートである。
【図４】図４は、第１の実施形態にかかる制御ソフトウェアの更新処理の手順の一例を示すフローチャートである。
【図５】図５は、第１の実施形態にかかる第１の機能部の処理の流れの一例を示すフローチャートである。
【図６】図６は、第２の実施形態にかかる制御システムの全体構成の一例を模式的に示す図である。
【図７】図７は、第２の実施形態にかかる制御ソフトウェアの更新処理の手順の一例を示すフローチャートである。
【発明を実施するための形態】
【０００８】
（第１の実施形態）
図１は、第１の実施形態にかかる制御システムＳの全体構成の一例を模式的に示す図である。制御システムＳは、例えば産業プラント（プラント）を制御するシステムであり、ＰＣ（Personal  Computer）１と、コントローラ２と、Ｉ／Ｏ機器３と、通信路４と、通信路５とを備える。
【０００９】
ＰＣ１は、エンジニアリングツール１１を備えるコンピュータである。ＰＣ１は、ＣＰＵなどの制御装置と、ＲＯＭ（Read  Only  Memory）やＲＡＭ（Random  Access  Memory）などの記憶装置と、ＨＤＤ（Hard  Disk  Drive）、ＣＤドライブ装置などの外部記憶装置と、ディスプレイ装置などの表示装置と、キーボードやマウスなどの入力装置を備えており、通常のコンピュータを利用したハードウェア構成となっている。ＰＣ１は、本実施形態における外部装置の一例である。
【００１０】
エンジニアリングツール１１は、コントローラ２に対して制御ソフトウェア（制御プログラム、ファームウェア）を送信するソフトウェア（プログラム）である。また、エンジニアリングツール１１は、コントローラ２で実行されるアプリケーションプログラム２３６の生成や、コントローラ２で実行される処理の監視（モニタリング）等を行う。
【００１１】
Ｉ／Ｏ機器３は、プラントを構成する装置との入出力を行うための機器である。Ｉ／Ｏ機器３としては、例えば、制御対象設備に設置されたセンサ等からの信号の入力を行う入力装置（ＡＩ（Analog  Input）機器、ＤＩ（Digital  Input）機器）や、制御対象設備のアクチュエータ等に対して信号の出力を行う出力装置（ＡＯ（Analog  Output）機器、ＤＯ（Digital  Output）機器）がある。
【００１２】
コントローラ２は、制御ソフトウェア１００ａおよびアプリケーションプログラム２３６を実行することにより、Ｉ／Ｏ機器３の動作を制御する装置である。コントローラ２は、例えば、ＤＣＳ用コントローラまたはＰＬＣ等であるものとする。
【００１３】
本実施形態のコントローラ２は、ＣＰＵ２１と、ＲＡＭ（Random  Access  Memory）２２と、ＦＲＯＭ（Flash  Read  Only  Memory）２３と、ツールインタフェース２４と、Ｉ／Ｏインタフェース２５と、バス２６とを備える。
【００１４】
ツールインタフェース２４は、ＰＣ１との間で情報の送受信を行うためのインタフェースである。Ｉ／Ｏインタフェース２５は、Ｉ／Ｏ機器３との間で情報の送受信を行うためのインタフェースである。バス２６は、コントローラ２の内部のデータ伝送路である。
【００１５】
通信路４は、ＰＣ１とコントローラ２とを結ぶ通信路であり、例えば、Ｅｔｈｅｒｎｅｔ（登録商標）やＵＳＢ（Universal  Serial  Bus）などの高速の通信路である。また、通信路５は、コントローラ２とＩ／Ｏ機器３とを結ぶ通信路である。
【００１６】
ＦＲＯＭ２３は、コントローラ２の外部記憶装置であり、制御ソフトウェア１００ａと、ブート処理プログラム２３１と、アプリケーションプログラム２３６と、を記憶する。ＦＲＯＭ２３は、本実施形態における第１の記憶部の一例である。第１の記憶部は、例えばＨＤＤ等であっても良い。
【００１７】
ブート（ＢＯＯＴ）処理プログラム２３１は、コントローラ２が起動した場合に、制御ソフトウェア１００ａをＲＡＭ２２にロードして実行するプログラムである。ＣＰＵ２１がブート処理プログラム２３１を実行することにより、制御ソフトウェア１００ａがＦＲＯＭ２３からＲＡＭ２２にロード（転送、展開）され、制御ソフトウェア１００ａに含まれる各部（第１の機能部１１１、置換部１０２、ＯＳ１０３）が実行される。ブート処理プログラム２３１は、本実施形態における実行部の一例である。
【００１８】
アプリケーションプログラム２３６は、Ｉ／Ｏ機器３に対する制御処理を行うソフトウェアである。例えば、アプリケーションプログラム２３６は、Ｉ／Ｏ機器３に対する制御信号の出力や、演算処理等を行う。アプリケーションプログラム２３６は、制御ソフトウェア１００ａを介して、コントローラ２のハードウェア資源を利用する。アプリケーションプログラム２３６は、例えば、エンジニアリングツール１１において生成されて、エンジニアリングツール１１からコントローラ２にダウンロードされる。また、ブート処理プログラム２３１およびアプリケーションプログラム２３６は、実行される際にＣＰＵ２１によってＲＡＭ２２にロードされるものとする。
【００１９】
ＲＡＭ２２は、コントローラ２の主記憶装置であり、ＣＰＵ２１の動作領域である。ＲＡＭ２２には、実行されるプログラムがロードされる。より詳細には、コントローラ２が起動した場合に、後述のブート処理プログラム２３１によって、ＦＲＯＭ２３からＲＡＭ２２に制御ソフトウェア１００ａがロードされる。ＲＡＭ２２は、本実施形態における第２の記憶部の一例である。
【００２０】
また、ＲＡＭ２２は、第１の実行フラグ２２６ａと、第２の実行フラグ２２６ｂと、第３の実行フラグ２２６ｃと、処理停止フラグ２２７とを記憶する。第１の実行フラグ２２６ａと、第２の実行フラグ２２６ｂと、第３の実行フラグ２２６ｃとを総称する場合は、単に実行フラグ２２６という。実行フラグ２２６は、後述の第１の機能部１１１に含まれる複数の処理のそれぞれが実行中か否かを示す。
【００２１】
また、処理停止フラグ２２７は、第１の機能部１１１の処理を停止するか否かを示すフラグである。例えば、処理停止フラグ２２７が“１”の場合は、第１の機能部１１１は、処理を停止する。処理停止フラグ２２７は、後述の置換部１０２によって設定される。
【００２２】
制御ソフトウェア１００ａは、第１の機能部１１１と、置換部１０２と、ＯＳ（Operating  System、オペレーティングシステム）１０３とを含むモジュール構成となっている。実際のハードウェアとしては、ＣＰＵ２１がブート処理プログラム２３１を実行することによってＦＲＯＭ２３から制御ソフトウェア１００ａを読み出して実行することにより、上記各部（第１の機能部１１１と、置換部１０２と、ＯＳ１０３）がＲＡＭ２２上にロードされ、第１の機能部１１１と、置換部１０２と、ＯＳ１０３とがＲＡＭ２２上に生成される。
【００２３】
第１の機能部１１１は、コントローラ２の動作を制御する。より詳細には、第１の機能部１１１は、後述のアプリケーションプログラム２３６に対して、ＣＰＵ２１等のハードウェアとのインタフェースを提供する。第１の機能部１１１が実行する処理はこれに限定されるものではなく、コントローラ２の基本的な機能を実現するための処理であれば良い。例えば、第１の機能部１１１は、ミドルウェアであっても良い。第１の機能部１１１が実行する処理については図３で後述する。
【００２４】
ＯＳ１０３は、第１の機能部１１１およびアプリケーションプログラム２３６による処理（タスク）の実行を管理する。例えば、ＯＳ１０３は、各処理の実行タイミングや、各処理へのメモリ空間などのハードウェア資源の割当て等を制御する。ＯＳ１０３は、例えば、コントローラ２のハードウェア全体を制御するカーネルを含むものとする。
【００２５】
置換部１０２は、制御ソフトウェア１００ａに含まれる第１の機能部１１１の実行中に、エンジニアリングツール１１から更新バージョンの制御ソフトウェアのダウンロードの要求を受けた場合に、更新バージョンの制御ソフトウェアをＦＲＯＭ２３にダウンロードする。更新バージョンの制御ソフトウェアについては、図２を用いて説明する。
【００２６】
図２は、更新バージョンの制御ソフトウェア１００ｂがダウンロードされた後のコントローラ２の状態の一例を示す図である。本実施形態においては、置換部１０２は、更新バージョンの制御ソフトウェア１００ｂをＦＲＯＭ２３にダウンロードする際に、ＦＲＯＭ２３から制御ソフトウェア１００ａを削除する。このため、置換部１０２が更新バージョンの制御ソフトウェア１００ｂをダウンロードした後は、図２に示すように、ＦＲＯＭ２３とＲＡＭ２２には、それぞれ異なるバージョンの制御ソフトウェア１００が保存された状態となる。以下、制御ソフトウェア１００ａと更新バージョンの制御ソフトウェア１００ｂとを特に区別しない場合は、単に制御ソフトウェア１００という。
【００２７】
更新バージョンの制御ソフトウェア１００ｂは、第２の機能部１１２と、置換部１０２と、ＯＳ１０３とを含むモジュール構成となっている。本実施形態の第２の機能部１１２は、第１の機能部１１１の更新バージョンとする。また、制御ソフトウェア１００ｂに含まれる置換部１０２は、制御ソフトウェア１００ａに含まれる置換部１０２と同様である。制御ソフトウェア１００ｂに含まれるＯＳ１０３は、制御ソフトウェア１００ａに含まれるＯＳ１０３と同様である。
【００２８】
また、置換部１０２は、制御ソフトウェア１００ｂのダウンロード後に、第１の機能部１１１の実行が停止したタイミングで、ＲＡＭ２２にロードされ実行が停止している第１の機能部１１１を、ＦＲＯＭ２３にダウンロードされた第２の機能部１１２に置換する。より具体的には、置換部１０２は、ＲＡＭ２２にロードされ実行が停止している第１の機能部１１１をＲＡＭ２２から削除した後、ＦＲＯＭ２３から第２の機能部１１２をＲＡＭ２２にロードする。また、置換部１０２は、ＲＡＭ２２にロードされている第１の機能部１１１を、ＦＲＯＭ２３にダウンロードされた第２の機能部１１２に置換する場合に、ＲＡＭ２２にロードされている置換部１０２およびＯＳ１０３は変更しない。
【００２９】
次に、以上のように構成されたコントローラ２における制御ソフトウェア１００ａの更新のタイミングについて説明する。
【００３０】
図３は、本実施形態にかかる制御ソフトウェア１００ａの更新タイミングの一例を示すタイミングチャートである。このタイミングチャートは、第１の機能部１１１および第２の機能部１１２の処理の実行タイミングと、置換部１０２の処理のタイミングとを時系列に示すものである。
【００３１】
本実施形態の第１の機能部１１１と第２の機能部１１２とは、それぞれ１または複数の処理（タスク）を実行する。具体的には、図３に示すように、第１の機能部１１１および第２の機能部１１２は、それぞれ処理Ａ、処理Ｂ、処理Ｃを実行するものとする。本実施形態の第１の機能部１１１および第２の機能部１１２が実行する処理Ａ〜Ｃは、コントローラ２の基本的な機能を実現するための処理であり、例えば、アプリケーションプログラム２３６に対して、ＣＰＵ２１等のハードウェアとのインタフェースを提供する処理や、データの入出力の制御等の処理であるが、これらに限定されるものではない。
【００３２】
処理Ａ〜Ｃは、それぞれ、優先順位や実行周期（スキャン周期、実行時間）が異なる処理であるとする。処理Ａ〜Ｃの実行周期はプログラムにおいて予め定められているものとする。例えば、処理Ａは最大許容実行時間が処理Ａ〜Ｃの中で最も長く、処理Ｃは最大許容実行時間が処理Ａ〜Ｃの中で最も短く、処理Ｂは、最大許容実行時間が処理Ａと処理Ｃの中間であるものとする。一例として、処理Ａはコントローラ２におけるメインスキャンタスク（ＭＳタスク）であり、処理Ｃはハイスピードスキャンタスク（ＨＳタスク）である。
【００３３】
第１の機能部１１１は、処理Ａを実行する際に、第１の実行フラグ２２６ａに“１”を設定（登録）する。また、第１の機能部１１１は、処理Ａを終了する際に、第１の実行フラグ２２６ａに“０”を設定（登録）する。第１の機能部１１１は、同様に、処理Ｂまたは処理Ｃを実行する際には、第２の実行フラグ２２６ｂまたは第３の実行フラグ２２６ｃにそれぞれ“１”を設定し、処理Ｂまたは処理Ｃを終了する際には、第２の実行フラグ２２６ｂまたは第３の実行フラグ２２６ｃに“０”を設定する。
【００３４】
置換部１０２は、制御ソフトウェア１００ｂをＦＲＯＭ２３にダウンロードした後に、第１の機能部１１１による処理Ａ〜Ｃが全て終了するまで待機する。置換部１０２は、第１〜第３の実行フラグ２２６の設定値に基づいて、処理Ａ〜Ｃの実行の有無を判断する。
【００３５】
図３に示す時刻ｔ１において、第１の機能部１１１による処理Ａ〜Ｃが全て終了する。換言すれば、時刻ｔ１は、第１の機能部１１１が停止したタイミングである。この場合、第１〜第３の実行フラグ２２６はいずれも“０”となる。この場合に、置換部１０２は、処理停止フラグ２２７に“１”を設定する。処理停止フラグ２２７に“１”が設定されている間、第１の機能部１１１は処理Ａ〜Ｃを実行しない。処理停止フラグ２２７に“１”が設定された時刻ｔ１から、処理停止フラグ２２７に“０”が設定される時刻ｔ２までの期間は、第１の機能部１１１の実行が停止するため、当該期間を機能停止期間という。
【００３６】
置換部１０２は、処理Ａ〜Ｃが停止している間に、ＲＡＭ２２から第１の機能部１１１を削除すると共に、ＦＲＯＭ２３にダウンロード済みの第２の機能部１１２を、ＦＲＯＭ２３からＲＡＭ２２にロードする。当該ロードによって、置換部１０２は、実行が停止している第１の機能部１１１を、第２の機能部１１２に置換する。置換部１０２は、ＲＡＭ２２上の第１の機能部１１１を第２の機能部１１２に置換することにより、ＲＡＭ２２上の制御ソフトウェア１００ａを、ＦＲＯＭ２３上の更新バージョンの制御ソフトウェア１００ｂと同様の状態にアップデートすることができる。
【００３７】
置換部１０２は、第２の機能部１１２のＲＡＭ２２へのロードが完了すると、処理停止フラグ２２７に“０”を設定する。処理停止フラグ２２７に“０”が設定された後は、第２の機能部１１２によって処理Ａ〜Ｃが実行される。置換部１０２が処理停止フラグ２２７に“０”を設定することで、第２の機能部１１２が速やかに処理を開始することができる。
【００３８】
次に、本実施形態にかかる制御ソフトウェア１００ａの更新処理の全体の流れを説明する。
図４は、本実施形態にかかる制御ソフトウェア１００ａの更新処理の手順の一例を示すフローチャートである。このフローチャートの処理は、コントローラ２に電源が入れられた等によって、コントローラ２が起動した場合に開始するものとする。また、ＦＲＯＭ２３には予め制御ソフトウェア１００ａが保存されているものとする。
【００３９】
ＣＰＵ２１は、コントローラ２が起動すると、ブート処理プログラム２３１を実行する。ブート処理プログラム２３１は、ＦＲＯＭ２３に保存された制御ソフトウェア１００ａを、ＲＡＭ２２にロードする（Ｓ１）。
【００４０】
そして、ＲＡＭ２２にロードされた制御ソフトウェア１００ａに含まれる第１の機能部１１１は、処理Ａ〜Ｃを開始する（Ｓ２）。第１の機能部１１１による処理の流れの詳細については、図５で後述する。また、制御ソフトウェア１００ａに含まれる置換部１０２およびＯＳ１０３も実行を開始する。
【００４１】
次に、置換部１０２は、エンジニアリングツール１１からの更新バージョンの制御ソフトウェア１００ｂのダウンロード要求の有無を判断する（Ｓ３）。
【００４２】
例えば、ユーザは、制御ソフトウェア１００ａの更新バージョンである制御ソフトウェア１００ｂを入手した場合、更新バージョンの制御ソフトウェア１００ｂを、ＰＣ１のＨＤＤ等に保存する。そして、ユーザは、エンジニアリングツール１１からコントローラ２に更新バージョンの制御ソフトウェア１００ｂをダウンロードする操作を、エンジニアリングツール１１に対して実行する。この場合、エンジニアリングツール１１からコントローラ２へ、制御ソフトウェア１００ｂのダウンロードの要求が送信される。置換部１０２は、ツールインタフェース２４を介して当該ダウンロードの要求を受信する。
【００４３】
置換部１０２は、エンジニアリングツール１１からの更新バージョンの制御ソフトウェア１００ｂのダウンロードの要求がないと判断した場合（Ｓ３“Ｎｏ”）、Ｓ３の処理を繰り返す。
【００４４】
また、置換部１０２は、エンジニアリングツール１１から更新バージョンの制御ソフトウェア１００ｂのダウンロードの要求があったと判断した場合（Ｓ３“Ｙｅｓ”）、既にＦＲＯＭ２３に保存されていた制御ソフトウェア１００ａを削除する（Ｓ４）。
【００４５】
ＦＲＯＭ２３上の制御ソフトウェア１００ａが削除されても、ＲＡＭ２２にロード済みの制御ソフトウェア１００ａは削除されない。このため、第１の機能部１１１、ＯＳ２２５、および置換部１０２は、ＦＲＯＭ２３上の制御ソフトウェア１００ａが削除されても、実行を継続する。
【００４６】
そして、置換部１０２は、更新バージョンの制御ソフトウェア１００ｂをＦＲＯＭ２３にダウンロードする（Ｓ５）。
【００４７】
次に、置換部１０２は、第１〜第３の実行フラグ２２６の全てに“０”が設定されているか否かを判断する（Ｓ６）。第１〜第３の実行フラグ２２６のいずれかに、“０”ではなく“１”が設定されている場合（Ｓ６“Ｎｏ”）、置換部１０２は、第１の機能部１１１の処理Ａ〜Ｃのいずれかが実行中であると判断する。この場合、置換部１０２は、Ｓ６の処理を繰り返して、処理Ａ〜Ｃの終了を待つ。
【００４８】
これに対して、第１〜第３の実行フラグ２２６の全てに“０”が設定されている場合（Ｓ６“Ｙｅｓ”）、置換部１０２は、第１の機能部１１１の処理Ａ〜Ｃがいずれも停止している（実行中ではない）と判断する。この場合、置換部１０２は、処理停止フラグ２２７に“１”を設定する（Ｓ７）。処理停止フラグ２２７に“１”が設定されている間は、第１の機能部１１１は停止状態を継続する。
【００４９】
次に、置換部１０２は、ＲＡＭ２２にロードされ実行が停止している第１の機能部１１１を、第２の機能部１１２に置換する（Ｓ８）。より具体的には、置換部１０２は、ＲＡＭ２２にロード済みの第１の機能部１１１を削除した上で、第２の機能部１１２をＦＲＯＭ２３からＲＡＭ２２にロードする。
【００５０】
置換の完了後、置換部１０２は、処理停止フラグ２２７に“０”を設定する（Ｓ９）。
【００５１】
処理停止フラグ２２７に“０”が設定されると、第２の機能部１１２は、処理を開始する（Ｓ１０）。このような処理により、制御ソフトウェア１００ａにおける第１の機能部１１１の第２の機能部１１２へのアップデートが完了する。
【００５２】
次に、第１の機能部１１１または第２の機能部１１２における処理の流れの詳細について説明する。
図５は、本実施形態にかかる第１の機能部１１１の処理の流れの一例を示すフローチャートである。このフローチャートの処理は、図４のＳ２において実行される。
【００５３】
第１の機能部１１１は、処理停止フラグに“１”が設定されているか否かを判断する（Ｓ２０１）。第１の機能部１１１は、処理停止フラグに“１”が設定されている場合（Ｓ２０１“Ｙｅｓ”）、Ｓ２０１の処理を繰り返す。
【００５４】
また、第１の機能部１１１は、処理停止フラグに“１”ではなく“０”が設定されている場合（Ｓ２０１“Ｎｏ”）、第１の実行フラグ２２６ａに“１”を設定する（Ｓ２０２）。この場合、第１の機能部１１１は、図３で説明した処理Ａを実行する（Ｓ２０３）。
【００５５】
そして、第１の機能部１１１は、実行した処理Ａが終了したか否かを判断し（Ｓ２０４）、処理Ａが終了したと判断した場合に（Ｓ２０４“Ｙｅｓ”）、第１の実行フラグ２２６ａに“０”を設定する（Ｓ２０５）。処理が終了したと判断するまでは（Ｓ２０４“Ｎｏ”）、第１の実行フラグ２２６ａには“１”が設定されたままであるとする。
【００５６】
第１の機能部１１１は、Ｓ２０５の処理で第１の実行フラグ２２６ａに“０”を設定した後に、Ｓ２０１の処理に戻る。このフローチャートの処理は、コントローラ２が起動している間は継続されるものとする。
【００５７】
このフローチャートでは処理Ａを例としたが、第１の機能部１１１は、処理Ｂおよび処理Ｃについてもそれぞれ同様の流れで処理を行う。また、図４のＳ１０において実行される第２の機能部１１２による処理の流れも、第１の機能部１１１による処理の流れと同様であるものとする。
【００５８】
このように、本実施形態にかかるコントローラ２では、制御ソフトウェア１００ａが実行されてＲＡＭ２２にロードされている場合に、第１の機能部１１１の実行中に、更新バージョンの制御ソフトウェア１００ｂをＦＲＯＭ２３にダウンロードした後に、第１の機能部１１１の実行が停止したタイミングで、ＲＡＭ２２にロードされ実行が停止している第１の機能部１１１を、第２の機能部１１２に置換する。このため、本実施形態にかかるコントローラ２によれば、コントローラ２の稼動を継続したままで、第１の機能部１１１を第２の機能部１１２に置換することができるため、制御ソフトウェア１００ａを迅速にアップデートすることができる。
【００５９】
例えば、従来技術においては、制御ソフトウェア内の機能部のみをアップデートする場合であっても、更新バージョンの制御ソフトウェアをダウンロードした後に、コントローラを再起動して制御ソフトウェア全体をＦＲＯＭからＲＡＭにロードすることによって制御ソフトウェアをアップデートしていた。このような手法では、制御ソフトウェアのアップデートのために時間を要する場合があった。また、一般に、プラントは１年に１度または数年に１度程度の定期点検の機会を除いては連続して稼動している場合が多い。このため、コントローラの再起動を伴う制御ソフトウェアのアップデートが可能な機会は限定される場合があり、制御ソフトウェアの修正や機能向上に迅速に対応することができない場合があった。
【００６０】
これに対して、本実施形態のコントローラ２によれば、コントローラ２の稼動を継続したまま、制御ソフトウェア１００ａ内の第１の機能部１１１を第２の機能部１１２に置換するため、コントローラ２を再起動する場合と比較して、制御ソフトウェア１００ａのアップデートに伴うコントローラ２の機能停止時間を短縮することができる。このため、実施形態のコントローラ２によれば、プラントを長時間停止することなく、コントローラ２の制御ソフトウェア１００ａをアップデートすることができる。
【００６１】
また、本実施形態にかかるコントローラ２は、ＲＡＭ２２にロードされている第１の機能部１１１を、第２の機能部１１２に置換する場合に、ＲＡＭ２２にロードされている置換部１０２およびＯＳ１０３を変更しない。このため、本実施形態にかかるコントローラ２によれば、置換部１０２およびＯＳ１０３の実行を停止することなく、制御ソフトウェア１００ａを更新することができる。
【００６２】
また、本実施形態にかかるコントローラ２は、ＦＲＯＭ２３に更新バージョンの制御ソフトウェア１００ｂをダウンロードする際に、ＦＲＯＭ２３から更新前のバージョンの制御ソフトウェア１００ａを削除する。このため、本実施形態にかかるコントローラ２によれば、ＦＲＯＭ２３に保存されるデータ量が増大することを抑制することができる。
【００６３】
なお、本実施形態では、制御ソフトウェア１００ａ，１００ｂはそれぞれ１つの機能部（第１の機能部１１１または第２の機能部１１２）を有するものとしたが、制御ソフトウェア１００ａ，１００ｂがそれぞれ複数の機能部を有するものとしても良い。例えば、制御ソフトウェア１００ａが第１−１の機能部と第１−２の機能部と第１−３の機能部とを備え、第１−１の機能部が処理Ａを実行し、第１−２の機能部が処理Ｂを実行し、第１−３の機能部が処理Ｃを実行するものとしても良い。
【００６４】
また、本実施形態では、エンジニアリングツール１１からコントローラ２に更新バージョンの制御ソフトウェア１００ｂ全体がダウンロードされるものとしたが、第２の機能部１１２のみがコントローラ２にダウンロードされても良い。
【００６５】
また、本実施形態では、制御ソフトウェア１００ｂは制御ソフトウェア１００ａの更新バージョンとしたが、制御ソフトウェア１００ｂは制御ソフトウェア１００ａよりも古いバージョンの制御ソフトウェア１００であっても良い。
【００６６】
また、本実施形態では、置換部１０２は、第１〜第３の実行フラグ２２６に基づいて、第１の機能部１１１を第２の機能部１１２に置換するタイミングを決定していたが、置換のタイミングの決定の手法はこれに限定されるものではない。例えば、置換部１０２は、第１の機能部１１１に含まれる処理Ａ〜Ｃの実行周期に基づいて、処理Ａ〜Ｃが停止するタイミングを算出しても良い。また、置換部１０２は、処理Ａ〜Ｃの優先度に応じて、置換のタイミングを決定しても良い。例えば、置換部１０２は、ＦＲＯＭ２３からＲＡＭ２２に第２の機能部１１２をロードするために要する時間を算出し、優先度が所定の基準より高い処理が実行される予定の時刻と、第１の機能部１１１のロードに要する時間とが重複しない時間帯を特定しても良い。
【００６７】
また、本実施形態にかかるコントローラ２では、置換部１０２またはＯＳ１０３の更新の際は、公知の従来技術を用いるものとする。例えば、置換部１０２またはＯＳ１０３が更新された更新バージョンの制御ソフトウェア１００ｂがダウンロードされた場合は、コントローラ２を再起動する技術を採用しても良い。
【００６８】
（第２の実施形態）
第２の実施形態では、上述の第１の実施形態の構成に加えて、ＦＲＯＭ２３上にバージョンの異なる複数の機能部を記憶し、ユーザによって選択された機能部を、ＲＡＭ２２にロードするものとする。
【００６９】
図６は、本実施形態にかかる制御システムＳの全体構成の一例を模式的に示す図である。本実施形態の制御システムＳは、ＰＣ１と、コントローラ１００２と、Ｉ／Ｏ機器３と、通信路４と、通信路５とを備える。ＰＣ１と、Ｉ／Ｏ機器３と、通信路４と、通信路５とは、第１の実施形態と同様の機能を備える。
【００７０】
ＰＣ１は、エンジニアリングツール１０１１を備える。本実施形態のエンジニアリングツール１０１１は、コントローラ１００２の稼動中に、後述の実行対象情報２３８の変更の指示をコントローラ１００２ｂに送信する。具体的には、本実施形態のエンジニアリングツール１０１１は、第１の実施形態の機能を備えた上で、ＦＲＯＭ２３に記憶された第１の機能部１１１と、第２の機能部１１２と、第３の機能部１１３（以下、第１〜３の機能部１１１〜１１３という）のうち、いずれが実行対象であるかを示す情報を送信する。例えば、エンジニアリングツール１０１１は、ユーザが第１〜３の機能部１１１〜１１３のいずれかを実行対象として選択可能な操作画面を表示装置に表示し、当該操作画面において選択された結果を、コントローラ１００２に送信する。
【００７１】
本実施形態のコントローラ１００２は、ＣＰＵ２１と、ＲＡＭ２２と、ＦＲＯＭ２３と、ツールインタフェース２４と、Ｉ／Ｏインタフェース２５と、バス２６とを備える。ＣＰＵ２１と、ツールインタフェース２４と、Ｉ／Ｏインタフェース２５と、バス２６とは、第１の実施形態と同様の機能を備える。
【００７２】
本実施形態のＲＡＭ２２は、制御ソフトウェア１１００ａと、第１〜第３の実行フラグ２２６と、処理停止フラグ２２７とを記憶する。第１〜第３の実行フラグ２２６と、処理停止フラグ２２７とは、第１の実施形態と同様である。
【００７３】
本実施形態のＦＲＯＭ２３は、制御ソフトウェア１１００ｂと、ブート処理プログラム１２３１と、アプリケーションプログラム２３６と、実行対象情報２３８とを記憶する。アプリケーションプログラム２３６は、第１の実施形態と同様の機能を備える。
【００７４】
実行対象情報２３８は、第１の機能部１１１と、第２の機能部１１２と、第３の機能部１１３とのうち、いずれが実行対象であるかを示す情報である。例えば、実行対象情報２３８に“１”が設定されている場合は、第１の機能部１１１が実行対象であり、“２”が設定されている場合は、第２の機能部１１２が実行対象であり、“３”が設定されている場合は、第３の機能部１１３が実行対象である。
【００７５】
本実施形態のブート処理プログラム１２３１は、第１の実施形態と同様の機能を備えた上で、コントローラ１００２が起動した場合に、実行対象情報２３８に設定された値に基づいて、第１〜３の機能部１１１〜１１３のいずれかを実行し、ＦＲＯＭ２３からＲＡＭ２２にロードする。より詳細には、ブート処理プログラム１２３１は、制御ソフトウェア１１００ｂに含まれる置換部１１０２と、ＯＳ１０３と、実行対象情報２３８に設定された値によって特定される第１〜３の機能部１１１〜１１３のいずれかと、を制御ソフトウェア１１００ａとしてＲＡＭ２２にロードする。図６に示す例においては、コントローラ１００２の起動時には実行対象情報２３８には“１”が設定されていたものとする。
【００７６】
次に、ＲＡＭ２２およびＦＲＯＭ２３に保存された制御ソフトウェア１１００ａ，１１００ｂについて説明する。また、制御ソフトウェア１１００ａと制御ソフトウェア１００ｂとを特に区別しない場合は、制御ソフトウェア１１００という。
【００７７】
本実施形態の制御ソフトウェア１１００ａは、第１の機能部１１１と、置換部１１０２と、ＯＳ１０３とを含むモジュール構成となっている。ＯＳ１０３は、第１の実施形態と同様の機能を備える。
【００７８】
また、本実施形態の制御ソフトウェア１１００ｂは、第１の機能部１１１と、第２の機能部１１２と、第３の機能部１１３と、置換部１１０２と、ＯＳ１０３とを含むモジュール構成となっている。
【００７９】
第１の機能部１１１と、第２の機能部１１２とは、第１の実施形態と同様の機能を備える。第３の機能部１１３は、第２の機能部１１２の更新バージョンとする。本実施形態においては、第１の機能部１１１、第２の機能部１１２、第３の機能部１１３の順にバージョンが新しくなるものとする。
【００８０】
第２の機能部１１２と、第３の機能部１１３とは、ＦＲＯＭ２３に予め記憶されていても良いし、コントローラ１００２の起動後に、置換部１１０２によってエンジニアリングツール１１からダウンロードされても良い。
【００８１】
本実施形態における第１〜３の機能部１１１〜１１３の数は一例であり、ＦＲＯＭ２３は、少なくとも第１の機能部１１１と第２の機能部１１２とを含む複数の機能部を記憶するものであれば良い。また、第１〜第３の機能部１１１〜１１３はＦＲＯＭ２３に記憶されていれば良く、制御ソフトウェア１１００ｂとは別に記憶されても良い。
【００８２】
本実施形態の置換部１１０２は、第１の実施形態の機能を備えた上で、エンジニアリングツール１０１１から実行対象の選択結果を受信した場合に、選択結果を示す情報を、実行対象情報２３８に登録する。例えば、置換部１１０２は、エンジニアリングツール１０１１から第２の機能部１１２を実行対象とする選択結果を受信した場合は、置換部１１０２は、実行対象情報２３８に“２”を設定する。
【００８３】
また、置換部１１０２は、ＲＡＭ２２上に保存されている制御ソフトウェア１１００ａの機能部（図６では第１の機能部１１１）を、ＦＲＯＭ２３に保存された第１〜３の機能部１１１〜１１３のうちの実行対象情報２３８によって示されるいずれかの機能部に置換する。
【００８４】
より詳細には、置換部１１０２は、第１の機能部１１１の実行中に、エンジニアリングツール１０１１から実行対象情報２３８の変更の指示を受け付けた場合に、第１の機能部１１１の実行が停止したタイミングで、ＲＡＭ２２にロードされ実行が停止している第１の機能部１１１を、第１〜３の機能部１１１〜１１３のうちの、変更後の実行対象情報２３８によって示された一の機能部に置換する。
【００８５】
本実施形態における制御ソフトウェア１１００ａの更新タイミングは、図３で説明した第１の実施形態の更新タイミングと同様であるものとする。また、本実施形態の第１〜第３の機能部１１１〜１１３の処理の流れは、図５で説明した第１の実施形態のフローと同様であるものとする。
【００８６】
次に、本実施形態にかかる制御ソフトウェア１１００ａの更新処理の手順の詳細を説明する。
図７は、本実施形態にかかる制御ソフトウェア１１００ａの更新処理の手順の一例を示すフローチャートである。第１〜第３の機能部１１１〜１１３のダウンロードの処理は第１の実施形態と同様であるため、説明を省略する。このフローチャートの処理が実行される前に、コントローラ２が起動済みであり、第１の機能部１１１の処理Ａ〜Ｃが実行されているものとする。
【００８７】
本実施形態の置換部１１０２は、エンジニアリングツール１０１１から実行対象情報２３８の変更の指示を受け付けたか否かを判断する（Ｓ２１）。具体的には、置換部１１０２は、エンジニアリングツール１０１１から実行対象の選択結果を受信したか否かを判断する。エンジニアリングツール１０１１から実行対象の選択結果を受信していない場合、置換部１１０２は、実行対象情報２３８の変更の指示を受け付けていないと判断する（Ｓ２１“Ｎｏ”）。この場合、置換部１１０２は、Ｓ２１の処理を繰り返す。
【００８８】
エンジニアリングツール１０１１から実行対象の選択結果を受信したと判断した場合、置換部１１０２は、実行対象情報２３８の変更の指示を受け付けたと判断する（Ｓ２１“Ｙｅｓ”）。この場合、置換部１１０２は、ＦＲＯＭ２３に保存されている実行対象情報２３８を、受信した選択結果に基づいて変更する（Ｓ２２）。
【００８９】
Ｓ２３の第１〜第３の実行フラグ２２６の全てに“０”が設定されているか否かを判断する処理から、Ｓ２４の処理停止フラグ２２７に“１”を設定する処理までは、図４で説明した第１の実施形態のフローチャートにおけるＳ６からＳ７の処理と同様である。
【００９０】
次に、置換部１１０２は、変更後の実行対象情報２３８の値が“１”、“２”、“３”のいずれであるかを判断する（Ｓ２５）。例えば、実行対象情報２３８の値が“２”である場合（Ｓ２５“２”）、置換部１１０２は、ＲＡＭ２２にロード済みの機能部（例えば、第１の機能部１１１）を削除した上で、第２の機能部１１２をＦＲＯＭ２３からＲＡＭ２２にロードする（Ｓ２６）。これにより、置換部１１０２は、第１の機能部１１１を第２の機能部１１２に置換する。置換の完了後、置換部１１０２は、処理停止フラグ２２７に“０”を設定する（Ｓ２７）。
【００９１】
処理停止フラグ２２７に“０”が設定されると、第２の機能部１１２は処理Ａ〜Ｃを開始する（Ｓ２８）。Ｓ２８の処理の内容は、図５で説明した第１の実施形態と同様である。このような処理により、制御ソフトウェア１１００ａにおける第１の機能部１１１の第２の機能部１１２へのアップデートが完了する。
【００９２】
また、変更後の実行対象情報２３８の値が“１”である場合（Ｓ２５“１”）、置換部１１０２は、ＲＡＭ２２にロード済みの機能部を削除した上で、第１の機能部１１１をＦＲＯＭ２３からＲＡＭ２２にロードする（Ｓ２９）。例えば、既に第２の機能部１１２がＲＡＭ２２にロードされている場合に、置換部１１０２は、第２の機能部１１２を削除した上で、第１の機能部１１１をＦＲＯＭ２３からＲＡＭ２２にロードすることにより、ＲＡＭ２２にロードされ実行が停止している第２の機能部１１２を第１の機能部１１１に置換する。置換の完了後、置換部１１０２は、処理停止フラグ２２７に“０”を設定する（Ｓ３０）。処理停止フラグ２２７に“０”が設定されると、第１の機能部１１１は、処理Ａ〜Ｃを開始する（Ｓ３１）。
【００９３】
また、変更後の実行対象情報２３８に設定の値が“３”である場合（Ｓ２５“３”）、置換部１１０２は、ＲＡＭ２２にロード済みの機能部（例えば、第１の機能部１１１または第２の機能部１１２）を削除した上で、第３の機能部１１３をＦＲＯＭ２３からＲＡＭ２２にロードする（Ｓ３２）。これにより、置換部１１０２は、ＲＡＭ２２にロードされ実行が停止している第１の機能部１１１または第２の機能部１１２を、第３の機能部１１３に置換する。置換の完了後、置換部１１０２は、処理停止フラグ２２７に“０”を設定する（Ｓ３３）。処理停止フラグ２２７に“０”が設定されると、第３の機能部１１３は、処理Ａ〜Ｃを開始する（Ｓ３４）。ここで、このフローチャートの処理は終了する。
【００９４】
このように、本実施形態のコントローラ１００２では、第１の機能部１１１の実行中に、実行対象情報２３８の変更の指示を受け付けた場合において、第１の機能部１１１の実行が停止したタイミングで、ＲＡＭ２２にロードされている第１の機能部１１１を、変更後の実行対象情報２３８によって示された一の機能部に置換する。このため、本実施形態にかかるコントローラ１００２によれば、第１の実施形態の効果に加えて、実行対象を変更する度にエンジニアリングツール１０１１から新たな制御ソフトウェア１１００ｂをダウンロードしなくとも、予めＦＲＯＭ２３に保存された第１〜第３の機能部１１１〜１１３から実行対象を選択して、実行対象の機能部を迅速に変更することができる。
【００９５】
本実施形態のコントローラ１００２によれば、例えば、制御ソフトウェア１１００ａをアップデートした後に不具合等の問題が発生した場合に、迅速に以前のバージョンに戻すことができるので、制御ソフトウェア１１００ａのアップデートに伴う問題を迅速に解消することができる。
【００９６】
なお、本実施形態の実行対象情報２３８の値は一例であり、これに限定されるものではない。
【００９７】
以上説明したとおり、第１の実施形態および第２の実施形態のコントローラ２，１００２によれば、コントローラ２，１００２の稼動を継続したまま、制御ソフトウェア１００ａ，１１００ａを迅速に更新することができる。
【００９８】
上述の第１の実施形態および第２の実施形態のコントローラ２，１００２で実行される制御ソフトウェア１００，１１００は、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【００９９】
また、制御ソフトウェア１００，１１００を、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、制御ソフトウェア１００，１１００をインターネット等のネットワーク経由で提供または配布するように構成しても良い。また、制御ソフトウェア１００，１１００を、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０１００】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０１】
２，１００２  コントローラ
１１，１０１１  エンジニアリングツール
１００，１１００，１００ａ，１００ｂ，１１００ａ，１１００ｂ  制御ソフトウェア
１０２，１１０２  置換部
１０３  ＯＳ
１１１  第１の機能部
１１２  第２の機能部
１１３  第３の機能部
２２６ａ  第１の実行フラグ
２２６ｂ  第２の実行フラグ
２２６ｃ  第３の実行フラグ
２２７  処理停止フラグ
２３１，１２３１  ブート処理プログラム
２３６  アプリケーションプログラム
２３８  実行対象情報
Ｓ  制御システム
【図１】
2020027346.tif 000003
【図２】
2020027346.tif 000004
【図３】
2020027346.tif 000005
【図４】
2020027346.tif 000006
【図５】
2020027346.tif 000007
【図６】
2020027346.tif 000008
【図７】
2020027346.tif 000009