(57)【要約】      （修正有）【課題】制御プログラム及び情報プログラムが共存するコントロール装置においてプログラムが使用可能なリソースであるリソース上限を示す実行管理データの適切な変更が可能な技術を提供する。【解決手段】コントロール装置１０９が、１以上の対象プログラム（制御プログラムと情報プログラム）の少なくとも１つを、プログラム配布装置１０１からネットワーク１０８及び１以上のネットワークポート経由でダウンロードし、当該ダウンロードのタイミングと異なるタイミングで、コントロール装置の複数の計算リソースに関し当該対象プログラムが使用可能なリソースであるリソース上限を示す実行管理データを変更する。各制御プログラムは、Ｉ／Ｏポート１１９に接続された制御対象装置１２０の制御情報を出力するスキャン動作を行うプログラムである。各情報プログラムは、スキャン動作と異なる情報処理を行うプログラムである。【選択図】図１
2020061104.tif 000002
【特許請求の範囲】
【請求項１】
１以上の制御対象装置の動作を制御するコントロール装置であって、
前記１以上の制御対象装置の動作の制御に関わる複数種類の計算リソースを含む複数の計算リソースを備え、
前記複数の計算リソースは、インターフェース部、記憶部及びプロセッサ部を含み、
前記インターフェース部は、前記１以上の制御対象装置に接続された１以上のＩ／Ｏポートと、ネットワークに接続された１以上のネットワークポートとを含み、
前記記憶部は、１以上のメモリを含み、
前記プロセッサ部は、１以上のプロセッサを含み、
プログラム群が、
１以上の制御プログラムと１以上の情報プログラムとのうちの１以上のプログラムである１以上の対象プログラムの少なくとも１つを、プログラム配布装置から前記ネットワーク及び前記１以上のネットワークポート経由でダウンロードし、
当該ダウンロードのタイミングと異なるタイミングで、前記複数の計算リソースに関し当該対象プログラムが使用可能なリソースであるリソース上限を示す実行管理データを変更し、
前記プログラム群は、前記１以上の制御プログラム及び前記１以上の情報プログラム以外の１以上のプログラムであり、
前記１以上の制御プログラムの各々は、前記Ｉ／Ｏポートに接続された制御対象装置の制御情報を出力するスキャン動作を行うプログラムであり、
前記１以上の情報プログラムの各々は、前記スキャン動作と異なる情報処理を行うプログラムである、
ことを特徴とするコントロール装置。
【請求項２】
請求項１に記載のコントロール装置であって、
前記１以上の対象プログラムの各々について、前記プログラム群が、当該対象プログラムの実行管理データについてユーザによる明示、入力または設定がなされない場合、デフォルトの実行管理データを決定する、
ことを特徴とするコントロール装置。
【請求項３】
請求項１に記載のコントロール装置であって、
前記１以上の対象プログラムが制御プログラムと情報プログラムを含み、
前記プログラム群が、当該制御プログラムの動作を継続し、または、停止することなく、当該情報プログラムの実行管理データを変更する、
ことを特徴とするコントロール装置。
【請求項４】
請求項１に記載のコントロール装置であって、
前記１以上のネットワークポート経由でダウンロードされた各対象プログラムについて、前記プログラム群が、当該対象プログラムが使用しているリソースを監視する、
ことを特徴とするコントロール装置。
【請求項５】
請求項１に記載のコントロール装置であって、
前記１以上の対象プログラムの少なくとも１つが制御プログラムであり、
当該制御プログラム又は前記プログラム群が、当該制御プログラムが使用しているリソースに応じて当該制御プログラムの実行管理データを変更する、
ことを特徴とするコントロール装置。
【請求項６】
請求項１に記載のコントロール装置であって、
前記１以上の対象プログラムが制御プログラムと情報プログラムの両方を含み、
前記プログラム群が、当該情報プログラムが必要とするリソースに応じてユーザからの明示無しに当該情報プログラムの実行管理データを決定し、
前記情報プログラムが使用可能なリソースの上限を、当該情報プログラムについて前記決定された実行管理データが示すリソース上限が超えている場合、前記プログラム群が、当該情報プログラムの実行を制限する、
ことを特徴とするコントロール装置。
【請求項７】
請求項６に記載のコントロール装置であって、
前記情報プログラムの実行の制限とは、前記情報プログラムのダウンロード又はインストールを拒否することである、
ことを特徴とするコントロール装置。
【請求項８】
請求項６に記載のコントロール装置であって、
前記情報プログラムの実行の制限とは、以下の（Ａ）又は（Ｂ）がされるまで、前記情報プログラムの実行を禁止することである、
（Ａ）当該情報プログラムについて前記決定された実行管理データが示すリソース上限が、前記情報プログラムが使用可能なリソースの上限を超えること、
（Ｂ）（Ａ）が管理者から許可がされること、
ことを特徴とするコントロール装置。
【請求項９】
請求項１に記載のコントロール装置であって、
前記１以上の対象プログラムの少なくとも１つが情報プログラムであり、
前記プログラム群が、当該情報プログラムが必要とするリソースに応じてユーザからの明示無しに当該情報プログラムの実行管理データを決定する、
ことを特徴とするコントロール装置。
【請求項１０】
請求項１に記載のコントロール装置であって、
前記１以上の対象プログラムの少なくとも１つが情報プログラムである場合、前記プログラム群が、
当該情報プログラムの実行管理データを変更することの許可の問合せをユーザに出し、
当該問合せに対して許可を受け付けた場合、当該情報プログラムの実行管理データを変更する、
ことを特徴とするコントロール装置。
【請求項１１】
請求項１に記載のコントロール装置であって、
前記１以上の対象プログラムの各々について、当該対象プログラムの実行管理データは、前記プログラム配布装置にはなく、前記記憶部に格納される、
ことを特徴とするコントロール装置。
【請求項１２】
請求項１に記載のコントロール装置であって、
前記１以上の対象プログラムの各々について、前記プログラム群が、当該対象プログラムの実行管理データについて、予め設定された第一の実行管理データを特定し、ユーザによる明示、入力または設定がされる場合には、前記第一の実行管理データとは異なる第二の実行管理データを特定する、
ことを特徴とするコントロール装置。
【請求項１３】
１以上の制御対象装置の動作を制御するコントロール方法であって、
１以上の制御プログラムと１以上の情報プログラムとのうちの１以上のプログラムである１以上の対象プログラムの少なくとも１つを、プログラム配布装置から前記ネットワーク及び前記１以上のネットワークポート経由でダウンロードし、
当該ダウンロードのタイミングと異なるタイミングで、複数の計算リソースに関し当該対象プログラムが使用可能なリソースであるリソース上限を示す実行管理データを変更し、
前記複数の計算リソースは、前記１以上の制御対象装置の動作の制御に関わる複数種類の計算リソースを含み、
前記複数の計算リソースは、インターフェース部、記憶部及びプロセッサ部を含み、
前記インターフェース部は、前記１以上の制御対象装置に接続された１以上のＩ／Ｏポートと、ネットワークに接続された１以上のネットワークポートとを含み、
前記記憶部は、１以上のメモリを含み、
前記プロセッサ部は、１以上のプロセッサを含み、
前記プログラム群は、前記１以上の制御プログラム及び前記１以上の情報プログラム以外の１以上のプログラムであり、
前記１以上の制御プログラムの各々は、前記Ｉ／Ｏポートに接続された制御対象装置の制御情報を出力するスキャン動作を行うプログラムであり、
前記１以上の情報プログラムの各々は、前記スキャン動作と異なる情報処理を行うプログラムである、
ことを特徴とするコントロール方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、コントロール装置に関する。
【背景技術】
【０００２】
特許文献１（特開２００４−３６２３２７号公報）には、「プラントの監視制御設備における監視用パーソナルコンピュータと制御用プログラマブルロジックコントローラをネットワークで接続した分散型監視制御システムにおいて、監視用汎用パーソナルコンピュータに制御用汎用プログラマブルロジックコントローラの情報管理ファイルを設け、前記制御用汎用プログラマブルロジックコントローラに、この制御用汎用プログラマブルロジックコントローラの情報自動掃出ツールを設けて、前記汎用パーソナルコンピュータに入力された情報と前記汎用制御用プログラマブルロジックコントローラのプロセス情報を汎用ソフトウェアで統合管理することを特徴とする分散型監視制御システム。」が開示されている（請求項１参照）。
【０００３】
特許文献２（特開２００６−１７８８１８号公報）には、「リアルタイムＯＳと、メモリと、ラダー言語プログラムをモーション制御周期に同期させて実行する実行手段と、前記ラダー言語プログラムとＣ言語プログラムの両方が動作するマイクロプロセッサとを備えたモーションコントローラにおいて、エンジニアリングツールのプロジェクト設定ファイルに従ってロードされた前記Ｃ言語プログラムがタスク型プロジェクトであれば前記リアルタイムＯＳのタスクとして動作させ、前記Ｃ言語プログラムが関数型プロジェクトであれば他のタスクから関数としてコール可能な状態で前記メモリに格納することを特徴とするモーションコントローラ。」が開示されている（請求項１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−３６２３２７号公報
【特許文献２】特開２００６−１７８８１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１には、「しかしながら、従来の分散型監視制御システム４１は、オペレータズテーション５０ａ〜５０ｎ、ディジタル制御装置６０ａ〜６０ｎ、伝送路５２ａ〜５２ｎ、基幹伝送路４２、伝送路６１ａ〜６１ｎ等が分散型監視制御システムメーカ毎の専用機器であり、高価かつ、他メーカー製品と互換性がないため、拡張性が劣り、また、近年のパソコン等汎用機器の性能向上に伴い、能力的にも専用機器を凌ぐものもあるにもかかわらず、汎用機器が使用されていない。」と記載されている（０００４段落参照）。
【０００６】
分散型監視制御システムメーカ毎の専用機器はプログラマブルロジックコントローラであり、このような装置構成とする背景には、プログラマブルロジックコントローラはＩ／Ｏユニット等の制御を行うものであり、工場内の生産や搬送等に用いられる装置に接続されるため、制御に遅延が生じると工場内の装置等の動作が不安定になったり、予期しない動作が生じたりする場合がある。そのため、従来のプログラマブルロジックコントローラは、複雑な処理をさせないようになっていた。特許文献１に開示される発明も同様に複雑な処理をさせないようにし、監視用汎用パーソナルコンピュータに制御用汎用プログラマブルロジックコントローラの情報管理ファイルを設けることで、プログラマブルロジックコントローラの制御に影響を与えないようにすることが開示されている。
【０００７】
したがって、特許文献１は、プログラマブルロジックコントローラ内で、情報処理を行うことは考慮されていない。
【０００８】
特許文献２の課題の欄には、「ラダー言語アプリケーションプログラムとＣ言語アプリケーションプログラムが異なるマイクロプロセッサ上で動作するため、ラダー言語アプリケーションからＣ言語アプリケーションプログラムを関数としてコールすることができないという問題もあった。」と記載されている。
【０００９】
すなわち、特許文献２は、同一のマイクロプロセッサ上で、ラダー言語アプリケーションプログラムがＣ言語アプリケーションプログラムを関数としてコールすることを目的としている。
【００１０】
特許文献２には、モーションコントローラとエンジニアリングツールとからなり、モーションコントローラにおいてラダー言語タスクとＣ言語タスクとが共存して動作し、エンジニアリングツールは、Ｃ言語のプログラムと設定ファイルとをモーションコントローラにダウンロードするシステムの発明が記載されている。
【００１１】
また、モーションコントローラにラダー言語タスクとＣ言語タスクが共存し、ラダー言語タスクとＣ言語プログラムのタスクは、リアルタイムＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）上で動作することが記載されている。
【００１２】
Ｃ言語プログラムがタスク型プロジェクトであれば、リアルタイムＯＳのタスクとして動作し、関数型プロジェクトであれば他のタスクから関数としてコール可能な状態でモーションコントローラのメモリに格納される。
【００１３】
すなわち、関数型プロジェクトであれば、他のタスク、例えばラダー言語タスクは、関数型プロジェクトのプロジェクト名称を引数として入力してＣ言語関数呼び出し用ファンクション・ブロックを実行する。
【００１４】
つまり、ラダー言語タスクがＣ言語の関数型プロジェクトを呼び出し、モーションコントローラに接続された工作機械等を数値制御することとなる。
【００１５】
Ｃ言語タスクは、タスク型プロジェクトのプロジェクト名称とタスクの起床や中断など操作の種別を引数として入力してタスク操作用ＡＰＩをコールする。タスク操作用ＡＰＩは、プロジェクト名称をタスク名称として扱いタスク操作の種別に対応したリアルタイムＯＳが提供する機能をコールして他のタスク型プロジェクトのタスク操作を間接的に実現することが記載されている。
【００１６】
また、タスク型プロジェクトとしてロードされたＣ言語プログラムについては、ラダー言語プログラムの実行タイミングで、タスク型プロジェクトとしてロードされたＣ言語プログラムの実行制御が可能であることが記載されている。
【００１７】
すなわち、タスク型プロジェクトとしてロードされたＣ言語プログラムは、モーション制御に同期した動作を行う用途、高度な数値計算のように処理に時間がかかるような用途に用いることができるとされている。
【００１８】
つまり、モーションコントローラに接続された工作機械等を制御するためラダー言語プログラムの実行タイミングで、タスク型プロジェクトとしてロードされたＣ言語プログラムの実行制御を行うために利用されている。
【００１９】
よって、関数型とタスク型のいずれの場合であっても、ラダー言語の一部をＣ言語として記述あるいはラダー言語プログラムの実行タイミングでＣ言語プログラムの実行制御をする。つまり、特許文献２に記載のＣ言語プログラムについては、モーションコントローラに接続された工作機械等を制御するために用いられる技術的思想が開示されている。
【００２０】
したがって、特許文献２には、Ｃ言語プログラムを装置に接続された工作機械等のハードウェアを制御する以外の目的に利用することは考慮されていない。
【００２１】
また、工作機械等を適切に制御することを維持するために、複数の計算リソースに関しプログラムが使用可能なリソースであるリソース上限を示す実行管理データを基にプログラムの実行を制御することが考えられるが、特許文献１及び２のいずれも、そのようなデータ及びそれの変更に関する技術を開示も示唆もしていない。
【００２２】
本発明は以上の点を考慮してなされたもので、コントロール装置に搭載されたプログラムが使用可能なリソースであるリソース上限を示す実行管理データを適切に変更することが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【００２３】
かかる課題を解決するため、本発明の一例を挙げるならば、１以上の制御対象装置の動作を制御するコントロール装置は、当該１以上の制御対象装置の動作の制御に関わる複数種類の計算リソースを含む複数の計算リソースを備える。複数の計算リソースは、インターフェース部、記憶部及びプロセッサ部を含む。インターフェース部は、１以上の制御対象装置に接続された１以上のＩ／Ｏポートと、ネットワークに接続された１以上のネットワークポートとを含む。記憶部は、１以上のメモリを含む。プロセッサ部は、１以上のプロセッサを含む。プログラム群（１以上の制御プログラム及び１以上の情報プログラム以外の１以上のプログラム）が、１以上の対象プログラム（１以上の制御プログラムと１以上の情報プログラムとのうちの１以上のプログラム）の少なくとも１つを、プログラム配布装置からネットワーク及び１以上のネットワークポート経由でダウンロードする。当該ダウンロードのタイミングと異なるタイミングで、プログラム群が、複数の計算リソースに関し当該対象プログラムが使用可能なリソースであるリソース上限を示す実行管理データを変更する。
【００２４】
１以上の制御プログラムの各々は、Ｉ／Ｏポートに接続された制御対象装置の制御情報を出力するスキャン動作を行うプログラムである。
【００２５】
一方、１以上の情報プログラムの各々は、スキャン動作と異なる情報処理を行うプログラムである。
【発明の効果】
【００２６】
本発明によれば、コントロール装置に搭載されたプログラムが使用可能なリソースであるリソース上限を示す実行管理データを適切に変更することが可能である。すなわち、コントロール装置に搭載された複数のプログラムは当該コントロール装置が有するハードウェアリソースを適切に変更することができる。
【図面の簡単な説明】
【００２７】
【図１】第１の実施の形態に係るコントロール装置を含むシステムのハードウェア構成例を示すブロック図である。
【図２】第１の実施の形態に係るコントロール装置を含むシステムの機能的な概略構成を示すブロック図である。
【図３】実行管理テーブルのテーブル構成例を示す図である。
【図４】プログラムダウンロード処理の流れの一例を示すフローチャートである。
【図５】プログラム実行処理の流れの一例を示すフローチャートである。
【図６Ａ】実行管理テーブルのテーブル構成例を示す図である。
【図６Ｂ】実行管理テーブルのテーブル構成例を示す図である。
【図７】設定範囲テーブルのテーブル構成例を示す図である。
【図８Ａ】リソース境界とその変更の第１の例を模式的に示す図である。
【図８Ｂ】リソース境界とその変更の第２の例を模式的に示す図である。
【図８Ｃ】リソース境界とその変更の第３の例を模式的に示す図である。
【図９】制御プログラムと情報プログラムが共存するプラットフォームの別の一例を示す。
【図１０】第３の実施の形態に係るコントロール装置の機能的な概略構成を示すブロック図である。
【図１１】実行管理データの変更の第１の例を示す図である。
【図１２】実行管理データの変更の第２の例を示す図である。
【図１３】制御プログラム及び情報プログラムの各々にとってのリソース上限の意義の一例を示す模式図である。
【発明を実施するための形態】
【００２８】
以下、図面について、本発明の実施の形態について説明する。
【００２９】
特に必要なとき以外は同一又は同様な部分の説明を原則として繰り返さない。所定の図に記載された符号について他の図で説明をする場合であっても同一又は同様な部分の説明は省略する。
【００３０】
以下の実施の形態では便宜上その必要があるときは、複数のセクション又は実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部又は全部の変形例、詳細、補足説明などの関係にある。
【００３１】
以下の実施の形態において、要素の数など（個数、数値、量、範囲などを含む）に言及する場合、特に明示した場合及び原理的に明らかに特定の数に限定される場合などを除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良いものとする。
【００３２】
以下の実施の形態において、「インターフェース部」は、１以上のインターフェースを含む。１以上のインターフェースは、１以上の同種のインターフェース装置であっても良いし２以上の異種のインターフェース装置であっても良い。
【００３３】
以下の実施の形態において、「記憶部」は、１以上のメモリを含む。記憶部に関して少なくとも１つのメモリは、揮発性メモリで良い。記憶部は、主に、プロセッサ部による処理の際に使用される。記憶部は、メモリの他に、１以上の不揮発性の記憶装置（例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）又はＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ））を含んでも良い。
【００３４】
以下の実施の形態において、「プロセッサ部」は、１以上のプロセッサを含む。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のようなマイクロプロセッサであるが、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のような他種のプロセッサでも良い。１以上のプロセッサの各々は、シングルコアでも良いしマルチコアでも良い。プロセッサは、処理の一部又は全部を行うハードウェア回路を含んでも良い。
【００３５】
以下の実施の形態において、「ｋｋｋ部」（インターフェース部、記憶部及びプロセッサ部を除く）の表現にて機能を説明することがあるが、機能は、１以上のコンピュータプログラム（後述の制御プログラム及び情報プログラムを除く）がプロセッサ部によって実行されることで実現されても良いし、１以上のハードウェア回路（例えばＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）又はＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ））によって実現されても良い。プログラムがプロセッサ部によって実行されることで機能が実現される場合、定められた処理が、適宜に記憶部及び／又はインターフェース部等を用いながら行われるため、機能はプロセッサ部の少なくとも一部とされても良い。機能を主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としても良い。プログラムは、プログラムソースからインストールされても良い。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であっても良い。各機能の説明は一例であり、複数の機能が１つの機能にまとめられたり、１つの機能が複数の機能に分割されたりしても良い。
【００３６】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでも良いし、入力に対する出力を発生するニューラルネットワークのような学習モデルでも良い。従って、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されても良いし、２以上のテーブルの全部又は一部が１つのテーブルであっても良い。
【００３７】
以下の実施の形態において、その構成要素（要素ステップ等も含む）は、特に明示した場合及び原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。
【００３８】
コントロール装置は、シーケンス制御装置、モーション制御装置又はプログラマブル・ロジック・コントローラ（ＰＬＣ）とも呼ばれている。コントロール装置において、ラダー・ロジック（ＬＤ言語）、シーケンシャル・ファンクション・チャート（ＳＦＣ言語）、ファンクション・ブロック（ＦＢＤ言語）、ストラクチャード・テキスト（ＳＴ言語）、インストラクション・リスト（ＩＬ言語）のような制御装置特有のプログラミング言語、あるいはＣ言語のような情報通信分野で使われる汎用的なプログラミング言語を用いて記述され、シーケンス制御やモーション制御に代表される制御処理を実行するプログラムを「制御プログラム」と呼ぶ。制御プログラムは、Ｉ／Ｏモジュール等を介して実際にモータ等を含む周辺機器を操作し、生産システム等を適切に動作させる必要がある。そのため、制御プログラムは、処理を設定された時間内に確実に実行すること（リアルタイム性）が求められる。
【００３９】
制御プログラムは、制御内容が記述された命令によって制御対象装置（例えば、装置部品のようなハードウェアモジュール、１以上のハードウェアモジュールを備えた装置、又は、複数の装置を備えたシステム）を制御する。例えば、「Ｉ／Ｏモジュール等を介して実際にモータ等を含む周辺機器を操作し、生産システムを適切に動作させる」といった制御では、「生産システム」、又は、「生産システムを構成する少なくとも１つの装置」が、「制御対象装置」である。制御対象装置は、典型的には、コントロール装置におけるＩ／Ｏ制御装置（インターフェース部の一例）経由で接続された装置である。制御対象装置は、制御プログラムから直接的に（例えば、コントロール装置に接続されたＩ／Ｏモジュールや周辺機器を介さずに）制御されても良いし、制御プログラムから間接的に（例えば、コントロール装置に接続されたＩ／Ｏモジュールや周辺機器を介して）制御されても良い。
【００４０】
制御対象装置を制御する言語は、ラダー言語等の制御特有のプログラミング言語に限らず、Ｃ言語等の汎用プログラミング言語で記述される場合もあるため、制御対象装置（典型的にはハードウェア）を制御するプログラムを「制御プログラム」と呼ぶ。
【００４１】
ラダー言語等で記述された制御プログラムは、当該ラダー言語等の記述において指定された制御対象装置の状態を読み込み又は書き込み（取得又は更新）をする「スキャン動作」を行う。
【００４２】
このスキャン動作は所定間隔で行う必要があり、この所定間隔を「スキャンタイム」と呼ぶ。スキャンタイムは、制御プログラムの演算時間に関するものであり、制御に関する演算周期又は制御に関する演算を繰り返し所定間隔で行うことから「サイクルタイム」とも呼ばれることもある。
【００４３】
コントロール装置に接続される制御対象装置は、例えば、工場内の生産や搬送等に用いられる装置に接続されるため、スキャン動作が遅れると、工場内の装置等の動作が不安定になったり、予期しない動作が生じたりする場合がある。このため、所定のスキャンタイム内にスキャン動作を行う必要がある。
【００４４】
スキャンタイムはコントロール装置が制御する制御対象装置の数や種類の増加に応じて長くなるが、スキャンタイム内で制御対象装置のスキャン動作をすることが重要である。
【００４５】
コントロール装置に、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）ポートが内蔵又は接続される。Ｉ／Ｏポートは、Ｉ／Ｏモジュール又はＩ／Ｏユニット等が有する場合がある。以下、Ｉ／Ｏポートそれ自体、又は、Ｉ／Ｏポートを有する装置（Ｉ／Ｏモジュール又はＩ／Ｏユニット等）を、「Ｉ／Ｏポート」と総称する場合がある。
【００４６】
Ｉ／Ｏポートは、制御対象装置、例えば、生産設備におけるベルトコンベア、リミットスイッチ、アクチュエータ（例えばモータ）に接続され、制御対象装置の動作に関する制御に使用されるものである。Ｉ／Ｏポートは、デジタル又はアナログのＩ／Ｏポートである。例えば、アナログＩ／Ｏポートは、コントロール装置の制御対象装置の電圧、電流、温度等の情報の読み書きに使用される。
【００４７】
制御プログラムに基づいてコントロール装置のＩ／Ｏポートから送信される制御情報を有線又は無線で受信するインバータユニットやＣＮＣ（Ｃｏｍｐｕｔｅｒｉｚｅｄ  Ｎｕｍｅｒｉｃａｌ  Ｃｏｎｔｒｏｌ）はインバータやＣＮＣ自体がアクチュエータのモーション制御を行うため、リアルタイム性が求められる。
【００４８】
また、制御対象装置の制御とは、制御対象装置が接続されている状態のＩ／Ｏポートの動作を制御することをいう。つまり、制御プログラムとは、制御対象装置が接続されたＩ／Ｏポートの制御を行うプログラム、言い換えれば、制御対象装置が接続されたＩ／Ｏポートに当該制御対象装置の制御情報を出力する（具体的には、例えば、当該制御情報の出力を含むスキャン動作を行う）プログラムである。
【００４９】
このようなコントロール装置において、制御対象装置の制御に加えて、情報処理（例えば、複雑な算術演算やＳＣＡＤＡ、ＭＥＳ、クラウドシステムとの情報の送受信のような情報通信処理）を行うことを検討する。このような情報処理は、上述の制御特有の言語でプログラミングすることが困難な場合があり、Ｃ言語又はＪａｖａ（登録商標）言語などの情報処理分野で使われるプログラミング言語を用いて記述することがある。このような情報処理を実行するプログラムを「情報プログラム」と呼ぶ。
【００５０】
制御プログラムと情報プログラムの違いの一例について説明する。
【００５１】
上記したように制御プログラムは、コントロール装置のＩ／Ｏポートの制御に関係したプログラムであり、情報プログラムは、情報処理（例えば、上述のように、算術演算や、クラウドとの通信）を行うプログラムである。
【００５２】
制御プログラムは、ラダーやＳＴ言語等で記述され、ｊａｖａ（登録商標）やｐｙｔｈｏｎ等に代表される汎用言語に比べてリアルタイム性が高い。情報プログラムは、ｊａｖａ（登録商標）やｐｙｔｈｏｎ等に代表される言語で記述され、ラダー等よりも情報処理に適している。
【００５３】
Ｃ言語等のリアルタイム性が高く、ハードウェアの制御にも適しており、また、情報処理にも適した言語は制御プログラムと情報プログラムのいずれにも利用可能な場合がある。
【００５４】
また、情報プログラムは、先に説明した制御プログラム以外のプログラム（但し、例えば、後述のタスク管理部１１０、制御プログラム実行部１１１、情報プログラム実行部１１２及びＩ／Ｏ制御部１１７を実現するための１以上のプログラムを除く）である。制御対象装置がＩ／Ｏポートを介してコントロール装置に接続されるが、情報プログラムは、制御対象装置に接続されるアナログやデジタルのＩ／Ｏポート（但し、情報プログラムとの共有が許容されているＩ／Ｏポートを除く）へアクセスしないプログラムである。別の言い方をすれば、制御プログラムは、制御対象装置に接続されるアナログやデジタルのＩ／Ｏポートに制御対象装置の制御情報を送信することを含むスキャン動作を行うプログラムであるが。一方、情報プログラムは、スキャン動作を含まない（スキャン動作とは異なる）情報処理を行うプログラム（つまり、スキャン動作を行うことがないプログラム）である。
【００５５】
制御プログラムと情報プログラムを搭載する以下の実施の形態に係るコントロール装置は、制御プログラムの他に情報プログラムを実行しても、制御プログラムを停止させることなく、又は、制御プログラムのスキャン動作を遅らせたり、制御プログラムの予期しない動作をさせたりすることなく、情報プログラムの追加、削除、更新（書き換え）又は入れ替えといったプログラム変更を行うことを実現するものである。
［第１の実施の形態］
【００５６】
第１の実施の形態について図１等を用いて説明する。
【００５７】
図１は、第１の実施の形態に係るコントロール装置を含むシステムのハードウェア構成例を示すブロック図である。
【００５８】
プログラム配布装置１０１、コントロール装置１０９、１以上の管理ユーザ計算機１５１Ｍ及び１以上の一般ユーザ計算機１５１Ｇが情報ネットワーク１０８に接続されている。また、コントロール装置１０９及び１以上のＩ／Ｏモジュール１１９（Ｉ／Ｏポートの一例）が制御ネットワーク１１８に接続されている。情報ネットワーク１０８は、情報プログラムが行う情報通信処理（つまり、制御情報の送信とは異なる通信処理）の際に使用される通信ネットワークである。制御ネットワーク１１８は、制御プログラムが行う制御情報送信の際に使用される通信ネットワークである。情報ネットワーク１０８及び制御ネットワーク１１８は、異種のネットワークでも良いし、同種のネットワーク（例えばいずれもＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ））でも良い。また、情報ネットワーク１０８の少なくとも一部と制御ネットワーク１１８の少なくとも一部が一体であっても良い。
【００５９】
管理ユーザ計算機１５１Ｍは、少なくとも管理ユーザが操作する計算機である。一般ユーザ計算機１５１Ｇは、少なくとも一般ユーザが操作する計算機である。いずれの計算機も、プログラム配布装置１０１及びコントロール装置１０９の少なくとも１つに対する入出力コンソールとして機能する。具体的には、例えば、いずれの計算機も、キーボード及びポインティングデバイスのような入力デバイスと、表示デバイスのような出力デバイスとを有する。「管理ユーザ」は、制御プログラムを記述するユーザ（例えば、自動機械や生産設備といった制御対象に関して深い知識を有する技術者）であり、「一般ユーザ」は、情報プログラムを記述するユーザ（例えば、制御対象に関して深い知識を持たない一般的なシステムエンジニア）である。コントロール装置１０９が、管理ユーザ計算機１５１Ｍ及び一般ユーザ計算機１５１Ｇのうちの少なくとも１つから制御プログラム及び情報プログラムの少なくとも１つについての記述（パラメータ群の設定を含む）を受け付けても良いし、コントロール装置１０９に代えて又は加えて、プログラム配布装置１０１が、当該記述を受け付けても良い。以下、管理ユーザ及び一般ユーザを「ユーザ」と総称することがある。ユーザは、管理ユーザ及び一般ユーザのいずれかに代えて、システム管理者（例えば、プログラム配布装置１０１とコントロール装置１０９で構成されたシステムであるコントロールシステムの管理者）といった別種のユーザであってもよい。
【００６０】
１以上のＩ／Ｏモジュール１１９に１以上の周辺機器１２０が接続されている。周辺機器１２０は、センサ及びドライブなどの少なくとも１つの機器である。Ｉ／Ｏモジュール１１９は、周辺機器１２０が必要に応じて着脱可能に装着されるバススロットとして機能する。制御対象装置は、周辺機器１２０経由又は非経由でＩ／Ｏモジュール１１９に接続される。制御対象装置とＩ／Ｏモジュール１１９は、１：１、１：多、多：１及び多：多のいずれでも良い。また、一部のＩ／Ｏモジュール１１９は、制御ネットワーク１１８に加えて情報ネットワーク１０８に接続されても良い、すなわち、当該一部のＩ／Ｏモジュール１１９は、制御プログラムと情報プログラムに共有のデバイスであっても良い。
【００６１】
プログラム配布装置１０１は、制御プログラム及び情報プログラムを管理している。プログラム配布装置１０１は、ＥＰＲＯＭ２０１、ＣＰＵ２０２、メインメモリ２０３、周辺制御装置２０５、不揮発性記憶装置２０６及びネットワークインターフェース（図示のネットワークＩ／Ｆに相当）２０７を備える。プログラム配布装置１０１は、ネットワークインターフェース２０７を介して情報ネットワーク１０８に接続されている。
【００６２】
プログラム配布装置１０１は、周辺制御装置２０５の制御によって情報ネットワーク１０８を経由してコントロール装置１０９に対して制御プログラムを提供したり情報プログラムを提供したりする。このプログラム配布装置１０１では、ＣＰＵ２０２の制御によって、不揮発性記憶装置２０６に予め格納されている制御プログラム及び情報プログラムを要求に応じて提供する。
【００６３】
周辺制御装置２０５は、バス２０４を介してＥＰＲＯＭ２０１、ＣＰＵ２０２及びメインメモリ２０３に接続されている。ＣＰＵ２０２は、ＥＰＲＯＭ２０１に予め格納されている管理プログラムをメインメモリ２０３上に読み出して実行し、この管理プログラムによって上記制御プログラム及び情報プログラムを管理している。
【００６４】
この管理プログラムは、要求に応じて逐次、上述した制御プログラム及び情報プログラムのうち少なくとも一方のプログラムを提供する。この管理プログラムがＣＰＵ２０２によって実行されることにより、後述するプログラム配布部１０２及び実行管理データ生成部１０３が実現される。
【００６５】
一方、コントロール装置１０９は、ＥＰＲＯＭ２０８、ＣＰＵ２０９、メインメモリ２１０、周辺制御装置２１２、Ｉ／Ｏ制御装置２１４、不揮発性記憶装置２１５及びネットワークインターフェース（図示のネットワークＩ／Ｆに相当）２１３を備えている。Ｉ／Ｏ制御装置２１４及びネットワークＩ／Ｆ２１３が、インターフェース部の一例である。ＥＰＲＯＭ２０８、メインメモリ２１０及び不揮発性記憶装置２１５が、記憶部の一例である。ＣＰＵ２０９及び周辺制御装置２１２がプロセッサ部の一例である。コントロール装置１０９では、プログラム配布装置１０１から提供される制御プログラム及び情報プログラムが同一のプラットフォーム上で共存しつつ動作する。
【００６６】
周辺制御装置２１２は、ネットワークＩ／Ｆ２１３、Ｉ／Ｏ制御装置２１４、不揮発性記憶装置２１５及びバス２１１に接続されている。このバス２１１には、その他にもＥＰＲＯＭ２０８、ＣＰＵ２０９及びメインメモリ２１０が接続されている。
【００６７】
ＥＰＲＯＭ２０８には、初期状態で予めコントロール装置１０９に用意されている制御プログラム及び情報プログラムが格納されている。ＣＰＵ２０９は、複数のコアを備えており、各コアを独立させて動作させることができる。
【００６８】
コントロール装置１０９に搭載される制御プログラムと情報プログラムはそれぞれひとつずつだけでなく、コントロール装置１０９が使用できるリソースをプログラムごとに設定することにより、複数の制御プログラム及び／又は複数の情報プログラムを搭載することができる。
【００６９】
ＣＰＵ２０９は、ＥＰＲＯＭ２０８に予め格納されている制御プログラム及び情報プログラムをメインメモリ２１０に読み出して実行し、これら制御プログラム及び情報プログラムの動作を制御する。
【００７０】
すなわち、これらの制御プログラム及び情報プログラムが読み出されて実行されると、後述する図２の制御プログラム１１４及び情報プログラム１１５となる。
【００７１】
制御プログラム１１４と情報プログラム１１５は異なる役割を有する。
【００７２】
制御プログラム１１４は、コントロール装置１０９のＩ／Ｏモジュール１１９にアクセスし、制御対象装置を制御する。また、制御プログラム１１４は、読み込んだ結果を基に演算を行い、制御対象装置の制御のために、当該演算結果に基づくアクセスを、Ｉ／Ｏ制御装置２１４に対して行っても良い。制御プログラム１１４は、制御対象装置の制御のために、当該制御対象装置が接続されたネットワークＩ／Ｆ２１３に対するアクセスを行っても良い。すなわち、Ｉ／Ｏモジュール１１９に代えて又は加えて、Ｉ／Ｏ制御装置２１４及びネットワークＩ／Ｆ２１３の少なくとも１つも、「Ｉ／Ｏポート」の一例となり得る。つまり、制御プログラム１１４は、制御対象装置の制御のために（制御対象装置の制御情報の送信のために）、当該制御対象装置が接続されたＩ／Ｏポートに対するアクセスを行う、言い換えると、当該Ｉ／Ｏポートを制御する命令を送信する。
【００７３】
一方、情報プログラム１１５は、Ｉ／Ｏ制御装置２１４等の情報を取得し、演算し、演算した結果を、ネットワークＩ／Ｆ２１３を介して、コントロール装置１０９に接続されている他の装置又は設備に送信する。この段落で言う「他の装置又は設備」は、コントロール装置１０９に接続されているが制御プログラム１１４の制御対象装置とは異なる装置又は設備である。
【００７４】
コントロール装置１０９は、制御プログラム１１４と情報プログラム１１５の両者がアクセスできる共有領域（図示しない）を有することができる。この共有領域は、メインメモリ２１０及び不揮発性記憶装置２１５に確保されて良い。共有領域は、例えば、共有ディレクトリといった論理的な記憶領域でもよいし、物理アドレス（例えばメモリアドレス）で指定された物理的な記憶領域でもよい。例えば、制御プログラム１１４が、情報プログラム１１５に見せてもよいデータの値を共有領域に読み書きするタスクを生成し、当該タスクが実行されることで、情報プログラムから、当該共有領域内のデータの値にアクセス可能になって良い。「見せてもよいデータの値」とは、広義には、１以上の情報プログラム１１５と共有する情報である共有情報である。共有情報は、例えば、Ｉ／Ｏポートの状態を示す（又は、Ｉ／Ｏポートに関して他種の情報を含んだ）ポート情報や、制御プログラムの内部変数等に関する制御プログラム情報が挙げられる。共有領域は、例えば、後述のタスク管理部１１０により設けられてもよいし、同一の共有領域にアクセスする制御プログラム１１４及び情報プログラム１１５の少なくとも１つにより設けられてもよい。
【００７５】
このように、情報プログラム１１５が、制御プログラム１１４の制御対象装置が接続されたＩ／Ｏポートに直接アクセスすることを防止できるため安全性が向上する。言い換えれば、情報プログラム１１５が、制御プログラム１１４の制御対象装置が接続されたＩ／Ｏポートに直接アクセスすることに代えて、共有領域内の共有情報を参照することで、Ｉ／Ｏポートの状態、又は、制御プログラム１１４の状態を知ることができる。
【００７６】
また、情報プログラム１１５は、ネットワークＩ／Ｆ２１３を介して接続されているが制御プログラム１１４の制御対象装置ではない設備又は装置から情報を受信しても良い。情報プログラム１１５は、この受信した情報等を演算し、ネットワークＩ／Ｆ２１３を介して他の装置又は設備と通信することができる。
【００７７】
ＣＰＵ２０９は、周辺制御装置２１２を制御してネットワークＩ／Ｆ２１３を介してプログラム配布装置１０１からの制御プログラム及び情報プログラムのダウンロードを制御する。
【００７８】
ＣＰＵ２０９は、周辺制御装置２１２を制御してＩ／Ｏ制御装置２１４及び複数のＩ／Ｏモジュール１１９を介して複数の周辺機器１２０を制御する。周辺機器１２０は、Ｉ／Ｏモジュール１１９に１：１で対応付けられており、ＣＰＵは、例えば、Ｉ／Ｏモジュール１１９と１：１のデジタルＩ／Ｏレジスタを管理し、レジスタ操作で逐一Ｉ／Ｏモジュール１１９の操作が可能となっている。
【００７９】
図２は、第１の実施の形態に係るコントロール装置を含むシステムの機能的な概略構成例を示すブロック図である。
【００８０】
プログラム配布装置１０１は、プログラム管理データベース（図示のプログラム管理ＤＢに相当）１０４、プログラム配布部１０２及び実行管理生成部１０３を備えている。プログラム管理ＤＢ１０４は、メインメモリ２０３及び不揮発性記憶装置２０６の少なくとも一部に基づく。これらプログラム配布部１０２及び実行管理生成部１０３は、既述の管理プログラムがＣＰＵ２０２に実行されることにより実現される。
【００８１】
プログラム管理データベース１０４は、制御プログラム１０５及び情報プログラム１０６を管理する。実行管理生成部１０３は、制御プログラム１０５及び情報プログラム１０６のうち少なくとも一方のプログラムがコントロール装置１０９において実行される際のパラメータを表す実行管理データを生成する。この実行管理データは、例えば、制御プログラム１０５及び情報プログラム１０６の各タスクの優先度、及び、制御プログラム１０５及び情報プログラム１０６ごとに使用可能な上限記憶容量のような１以上のパラメータである。
【００８２】
プログラム配布部１０２は、要求に応じて上記少なくとも一方のプログラムを提供する際に併せて上記少なくとも一方のプログラムに対応するパラメータ値を示す実行管理データを提供する。
【００８３】
コントロール装置１０９は、シーケンス制御装置、モーション制御装置、又はプログラマブル・ロジック・コントローラ（ＰＬＣ）とも呼ばれることがある。ラダー・ロジック（ＬＤ言語）、シーケンシャル・ファンクション・チャート（ＳＦＣ言語）、ファンクション・ブロック（ＦＢＤ言語）、ストラクチャード・テキスト（ＳＴ言語）、インストラクション・リスト（ＩＬ言語）のような制御特有のプログラミング言語で制御内容が記述される。また、場合により、Ｃ言語等の汎用プログラミング言語での記述が、ラダー言語等での記述の一部又は全部に差し替えられても良い。
【００８４】
このようなコントロール装置１０９に接続される制御対象を制御する制御プログラム１０５（１１４）は、ラダー言語を代表とする制御特有のプログラミング言語を用いることが有効である。ラダーの表示が可能であり、制御対象の状態の監視等に有効である。
【００８５】
一方、情報プログラム１０６（１１５）は、このようなコントロール装置１０９における情報処理（例えば、複雑な算術演算や、ＳＣＡＤＡ、ＭＥＳ、クラウドシステムとの情報の送受信のような情報通信処理）に有効である。
【００８６】
このような情報処理は、制御特有の言語でプログラミングすることが困難な場合があり、いわゆるＣ言語又はＪａｖａ（登録商標）言語などの情報通信分野で使われるプログラミング言語を用いて記述する場合がある。
【００８７】
プログラム管理データベース１０４は、上述した制御内容を実行する機能を有する制御プログラム１０５、及び、上述した情報処理を実行する機能を有する情報プログラム１０６を管理している。
【００８８】
コントロール装置１０９は、タスク管理部１１０、制御プログラム実行部１１１、情報プログラム実行部１１２、実行管理テーブル１１３及びＩ／Ｏ制御部１１７を備えている。
【００８９】
制御プログラム実行部１１１は、例えばランタイムライブラリであり、制御プログラム１１４からの呼び出しに応じて制御プログラム１１４とともに動作する。情報プログラム実行部１１２は、例えばいわゆるライブラリであり、情報プログラム１１５からの呼び出しに応じて情報プログラム１１５とともに動作する。
【００９０】
なお、制御プログラム１１４は、プログラム配布装置１０１からコントロール装置１０９に配布済みの制御プログラム１０５（又は当該制御プログラム１０５の実行に伴い生成された１以上のタスク）に相当し、情報プログラム１１５は、プログラム配布装置１０１からコントロール装置１０９に配布済みの情報プログラム１０６（又は当該情報プログラム１０６の実行に伴い生成された１以上のタスク）に相当する。
【００９１】
実行管理テーブル１１３は、プログラム配布装置１０１から提供された上記少なくとも一方のプログラムとともに受け取った上記実行管理データが保存される。
【００９２】
一方、タスク管理部１１０は、主として２つの機能、具体的には、プログラム受信機能及びプログラム実行管理機能を有する。プログラム受信機能は、要求に応じてプログラム配布装置１０１から提供される上記少なくとも一方のプログラムを受信する機能である。一方、プログラム実行管理機能は、上記少なくとも一方のプログラムを実行する際に、実行管理テーブル１１３に保存された実行管理データに基づいて上記少なくとも一方のプログラムの実行を制御する機能である。
【００９３】
Ｉ／Ｏ制御部１１７は、制御プログラム１１４からの制御情報を当該制御情報の送信先に転送する。
【００９４】
上述したようにコントロール装置１０９は、制御プログラム１１４及び情報プログラム１１５の各タスクが使用する所定の記憶容量の記憶領域を有するメインメモリ２１０を備える。
【００９５】
ここで、プログラム配布装置１０１では、実行管理生成部１０３が、実行管理データとして少なくとも、制御プログラム１０５及び情報プログラム１０６の各タスクの優先度、及び、制御プログラム１０５及び情報プログラム１０６の各タスクによって使用可能なメインメモリ２１０の上限記憶容量の少なくとも一方のパラメータ値を示す実行管理データを生成する。
【００９６】
図３は、図２に示す実行管理テーブル１１３のテーブル構成例を示す。
【００９７】
実行管理テーブル１１３は、制御プログラム１１４及び情報プログラム１１５の各々について、エントリを有する。各エントリは、例えば、プログラム名３０１、プログラム種別３０２、タスク優先度３０３、実行周期３０４、メモリ上限３０５、ＣＰＵコア番号３０６、利用デバイス３０７及び専有デバイス３０８といった情報を格納する。以下、１つのプログラムを例に取る（図３の説明において「対象プログラム」）。
【００９８】
プログラム名３０１は、対象プログラムの名称を表している。プログラム種別３０２は、対象プログラムが制御プログラム１１４であるか情報プログラム１１５であるかというプログラムの種別を表している。なお、上述したプログラム名３０１の先頭３文字においても、制御プログラム１１４であるか情報プログラム１１５であるかを識別可能である。「ＣＴＬ」は制御プログラム１１４を表しており、「ＩＣＴ」は情報プログラム１１５を表している。以下、制御プログラム１１４及び情報プログラム１１５の各々を、プログラム名で表現することがある。
【００９９】
タスク優先度３０３は、対象プログラムに対応するタスクの優先度を表している。タスク優先度３０３では、例えば「０（優先度：高）」から「２０（優先度：低）」までの間で優先度が設定可能である。つまり、タスク優先度３０３としての値が小さいほど優先度が高い。
【０１００】
実行周期３０４は、対象プログラムにおける定常処理が実行される周期を表している。「実行周期」とはスキャンタイムである。図示の例によれば、ＣＴＬ００１のスキャンタイムが１０ｍｓｅｃであり、ＣＴＬ００２のスキャンタイムは１ｍｓｅｃでる。スキャン動作は、制御プログラム１１４及び情報プログラム１１５のうちの制御プログラム１１４に特有の動作であるため、実行周期３０４は、制御プログラム１１４について有効な値であるが、情報プログラム１１５については無効な値である。実行周期３０４（スキャンタイム）は、エンジニアリングツールでシミュレーションによって特定された値、又は、実際にコントロール装置１０９にて制御プログラム１１４を実行することにより特定されたスキャンタイムであっても良い。
【０１０１】
メモリ上限３０５は、対象プログラムがメインメモリ２０３の記憶領域において使用可能な記憶容量の上限を表している。
【０１０２】
ＣＰＵコア番号３０６は、コントロール装置１０９のＣＰＵ２０９に搭載されている複数のコアのうちの対象プログラムに割り当てるコアの番号を表している。
【０１０３】
利用デバイス３０７は、対象プログラムが利用可能なデバイスである利用デバイス、具体的には、対象プログラムが利用可能なＩ／Ｏモジュール１１９（Ｉ／Ｏモジュール１１９に接続されている利用可能な周辺機器１２０）を表している。
【０１０４】
専有デバイス３０８は、対象プログラムに対応した利用デバイス３０７が表す１以上の利用デバイス（Ｉ／Ｏモジュール１１９）のうち対象プログラムに専有されるデバイスである専有デバイス（すなわち、対象プログラムが他の制御プログラム１１４又は情報プログラム１１５と共有不可のＩ／Ｏモジュール１１９）を表す。
【０１０５】
図示の例によれば、例えば、下記のことが言える。
【０１０６】
ＣＴＬ００１は、制御プログラムである。ＣＴＬ００１について、例えば次の通りである。すなわち、タスク優先度は、ＣＴＬ００２よりも低く設定されている。また、メモリ上限は１６ＭＢであり、使用するＣＰＵコアの番号は０である。利用デバイスはＤＩ１とＤＯ１（コントロール装置のデジタル入力１とデジタル出力１）である。
【０１０７】
ＤＩ１とＤＯ１を、他のプログラムが使用しないようにＣＴＬ００１が専有して利用するように設定されている。コントロール装置において、専有デバイス（専有デバイス３０８として設定されたデバイス）が複数のプログラム間で共有されないため、専有デバイス（ここではＤＩ１とＤＯ１）に関係する制御が不安定になることを防止することができる。
【０１０８】
また、ＣＴＬ００２は、利用デバイスがｅｔｈ１、ｅｔｈ２、シリアル１である制御プログラム、具体的には、Ｅｔｈｅｒｎｅｔ（登録商標）のポートを２つ、ＲＳ−２３２Ｃのポートを１つ利用する制御プログラムである。また、ＣＴＬ００１よりもＣＴＬ００２の方がリアルタイム性が高いため、タスク優先度は、ＣＴＬ００１よりも高い。
【０１０９】
ＣＴＬ００２は、ｅｔｈ２が例えばモーション制御に利用されるデバイスである場合を示す。モーション制御はリアルタイム性が高く他の処理も優先されるため、４つのプログラムの中で最も優先度が高く設定されている。
【０１１０】
また、ＣＴＬ００２が使用するＣＰＵコアの番号は１であり、ＣＴＬ００１とＩＣＴ００１とＩＣＴ００６の使用するＣＰＵコアの番号が０であることから、ＣＴＬ００２は、番号が１のＣＰＵコアを専有する。
【０１１１】
ＣＴＬ００２は、タスク優先度３０３に規定される優先度のみならず、ＣＰＵ２０９が有する複数のコアのうち番号１のコアを専有する観点からも、優先度が高いことがわかる。このような設定を行うことで、ＣＴＬ００２が制御プログラムの中でも優先度を高い状態とすることができる。
【０１１２】
次に、メモリ上限３０５について説明する。
【０１１３】
メモリ上限が設定されない場合には、実際に演算を行う際に各プログラムが際限なくメモリを確保し使用することが可能となる。例えば、情報プログラムが使用できるメモリ上限が設定されない場合には、制御プログラムが使用する可能性があるが確保されていない領域を情報プログラムが確保する場合がある。しかし、例えば、大量にメモリを使用するプログラムを追加した場合、当該プログラムの追加に伴いシステム全体のメモリを使い切ってしまうような場合が起こりうる。このような場合、コントロール装置又はＯＳがダウンすることで制御プログラムの動作が停止したり、ＯＳによる強制的なメモリ開放機能の発動により制御プログラムの処理が妨げられスキャンタイム内にスキャン動作を完了できなくなったりといったような場合がある。
【０１１４】
そこで、本実施の形態では、メモリ上限３０５の合計値をコントロール装置のシステム全体で利用できる値以下とすることでコントロール装置等のダウンを防止することができる。
【０１１５】
なお、システム全体で利用できる値は、コントロール装置に搭載されたメモリからＯＳ等で使用された部分を除いた値であることが望ましい。ＯＳ等の領域に制御又は情報プログラムの処理が影響を与えないようにするためである。
【０１１６】
また、プログラムごとにメモリ上限３０５の値を設定することにより、もしあるプログラムに想定以上のメモリを使用してしまう不具合があった場合には、当該プログラムのみが停止し他のプログラムに影響を与える事を防止できる。
【０１１７】
次に、タスク優先度３０３について説明する。
【０１１８】
タスク優先度は、各プログラムが実行させる場合の優先度である。各プログラムにタスク優先度を設定することにより、ＯＳのスケジューラ等にプログラムへのＣＰＵ割当ての優先順位を認識させることができる。
【０１１９】
複数のプログラムを、明示的にタスク優先度を設定せずに実行すると、あらかじめＯＳのスケジューラが有するルールにしたがってＣＰＵ割当てのようなリソース割り当てが行われる。例えば、複数のプログラムに平等にＣＰＵの割当てが行われるようなスケジューリングが行われる。
【０１２０】
このようなスケジューリングは、制御プログラムのようなスキャンタイム内に確実に処理を終えることが重要であるプログラムの場合、他のプログラムの動作によってスキャンタイム内に処理を終えることができなくなるなど、制御プログラムの動作に影響を及ぼす場合がある。
【０１２１】
例えば、第１のプログラムの処理実行（ＣＰＵ割当て）中に、タイマ割込み等により第１のプログラムよりも相対的にタスク優先度の高い第２のタスクの処理開始要求が発行されると、第１のプログラムの処理が中断されて第２のプログラムの処理が開始される。その後第２のプログラムがＳｌｅｅｐ等によりＣＰＵの割当てを終了すると第１のプログラムの処理が再開される。
【０１２２】
また、例えば、第１のプログラムの処理実行（ＣＰＵ割当て）中に、タイマ割込み等により第１のプログラムよりも相対的にタスク優先度の低い第３のタスクの処理開始要求が発行されると、第１のプログラムがＳｌｅｅｐ等によりＣＰＵの割当てを終了するまで第３のプログラムの処理開始が待たされる。
【０１２３】
したがって、タスク優先度３０３を設定することで、より優先度の高いプログラムの処理を優先して行うことができる。
【０１２４】
これにより、ユーザがより重要性が高いと判断したプログラムを優先して処理させることができる。情報プログラムをコントロール装置で処理し、情報プログラムが複雑な計算を行う場合であっても、制御プログラムに影響を与えないようにすることができる。
【０１２５】
ＩＣＴ００１とＩＣＴ００２は、実行周期３０４であるスキャンタイムが設定されていないが、制御プログラムに比べて情報プログラムのタスク優先度が低いため、制御プログラムの計算にＣＰＵコアを利用していない時間（例えば、空いている時間）に情報プログラムの処理を行うことができる。これにより、制御プログラムの処理に影響を与えることなく情報プログラムを処理することができる。
【０１２６】
ＩＣＴ００１とＩＣＴ００２は、利用デバイスがｅｔｈ１であり、ｅｔｈ１は専有設定されていない。そのため、ｅｔｈ１のポートについては、ＩＣＴ００１とＩＣＴ００２が共有して利用可能である。
【０１２７】
ＩＣＴ００１とＩＣＴ００６がｅｔｈ１を同時に使用しようとした場合には、タスク優先度３０３が高いＩＣＴ００１が先にｅｔｈ１を使用する。ＩＣＴ００１がｅｔｈ１の使用を終了した際に、タスク優先度３０３が高いＩＣＴ００６がｅｔｈ１を使用することが可能となる。このように、プログラムそれぞれがタスク優先度に応じた処理が可能となる。
【０１２８】
図４は、コントロール装置１０９がプログラム配布装置１０１から所望のプログラムをダウンロードするプログラムダウンロード処理の一例を示すフローチャートである。
【０１２９】
まず、プログラム配布装置１０１では、図示しない操作画面を用いたユーザの操作に応じて、ダウンロードすべきプログラムが選択される（ステップＳ４０１）。これにより、プログラム配布部１０２は、対応する特定のプログラムをプログラム管理データベース１０４において特定する。
【０１３０】
次にプログラム配布装置１０１では、操作画面においてユーザの操作に応じて上記特定のプログラムについて実行管理データが設定される（ステップＳ４０２）。この実行管理データには、例えば図３に示すようにタスク優先度３０３が含められている。
【０１３１】
これにより、実行管理生成部１０３は、ユーザの入力内容に応じて上記特定のプログラムの動作態様に関するパラメータとして、例えば、各プログラムの各タスクが実行される際の優先度、及び、各タスクが使用可能なメインメモリ２１０内の上限記憶容量の少なくとも一方のパラメータを設定することができる。
【０１３２】
以下、一例として主として優先度を取り上げて説明する。以上までが、プログラム配布装置１０１における処理を表しており、これ以降はコントロール装置１０９における処理を表している。
【０１３３】
プログラム配布装置１０１は、コントロール装置１０９の要求に応じて、上記特定のプログラム及びこれに対応付けられた実行管理データをコントロール装置１０９にダウンロードする（ステップＳ４０３）。
【０１３４】
次にコントロール装置１０９では、タスク管理部１１０が、上記ダウンロードされた上記特定のプログラムを受信する（既述のプログラム受信機能に相当）。タスク管理部１１０は、受信が完了すると、上記特定のプログラムが制御プログラムである場合には制御プログラム１１４としてメインメモリ２１０に保存する（ステップＳ４０４）。
【０１３５】
次にコントロール装置１０９では、タスク管理部１１０が上記特定のプログラムとともにダウンロードした実行管理データを実行管理テーブル１１３に追記する（既述のプログラム実行管理機能に相当）（ステップＳ４０５）。
【０１３６】
図５は、プログラム実行処理の一例を示すフローチャートである。このプログラム実行処理は、コントロール装置１０９において上記特定のプログラムが実行される場合の処理内容を表している。
【０１３７】
タスク管理部１１０は、ある所定のプログラムを新たに実行しようとした際、実行管理テーブル１１３から当該所定のプログラムに対応する実行管理データを読み出す（ステップＳ５０１）。
【０１３８】
当該所定のプログラムに対応する実行管理データとしては、実行管理テーブル１１３における優先度３０３において管理している当該所定のプログラムの各タスクが実行される際における優先度を含む。
【０１３９】
次にタスク管理部１１０は、当該読み出された実行管理データに基づいて当該所定のプログラムのパラメータとして、例えば、当該所定のプログラム（制御プログラム１０５及び情報プログラム１０６の少なくとも一方のプログラム）の各タスクの優先度を設定したり、各タスクが使用可能なメインメモリ２１０の上限記憶容量を設定又は特定したりする（ステップＳ５０２）。
【０１４０】
タスク管理部１１０は、このような優先度を所定のコマンドを用いて設定する。一方、タスク管理部１１０は、上述した上限記憶容量を設定する。
【０１４１】
以上のような実施の形態によれば、同一プラットフォーム（つまりコントロール装置１０９）に共存する制御プログラム１１４及び情報プログラム１１５が当該プラットフォーム上でそれぞれ対応するパラメータに応じて動作するようになる。タスク管理部１１０が、制御プログラム１１４及び情報プログラム１１５を、当該プログラム１１４及び１１５の各々のタスク優先度などのパラメータ値を基に制御プログラム実行部１１１及び情報プログラム実行部１１２を制御することで、当該プログラム１１４及び１１５の各々の実行を制御する（ステップＳ５０３）。
【０１４２】
この場合は、情報プログラム１１５であるＩＣＴ００１とＩＣＴ００２が所定のリソースで動作する。また、制御プログラム１１４であるＣＴＬ００１とＣＴＬ００２が所定のリソースでＩＣＴ００１とＩＣＴ００２よりも高い優先度で動作する。
【０１４３】
実行管理テーブル１１３を適宜変更することによって、制御プログラム１１４及び情報プログラム１１５は、互いに、例えばタスクの追加、更新又は削除のような機能変更に際し、他のプログラムが動作したまま、一部の制御プログラム１１４又は情報プログラム１１５を変更することができる。
【０１４４】
また、情報プログラム１１５は、所定のリソースが確保された場合であって、他のプログラムとの影響がない場合には再コンパイルや再ダウンロードを必要とせず実行管理テーブル１１３を変更しても動作させることができる（再コンパイルや再ダウンロードが必要となる一比較例については後述する）。
【０１４５】
このため、制御プログラム１１４及び情報プログラム１１５の各タスクの追加、更新及び削除のいずれの機能的な変更も行い易くなるため、コントロール装置１０９は柔軟な機能変更を可能とする。
［第２の実施の形態］
【０１４６】
第２の実施の形態について図３等を用いて説明する。その際、第１の実施の形態と異なる点を中心として説明し、第１の実施の形態と共通する点については説明を省略又は簡略する。
【０１４７】
第２の実施の形態では、上述した操作画面（図示せず）に、図３に示す実行管理テーブル１１３に基づいて、上述した各プログラムが使用可能なメインメモリ２１０の上限記憶容量に応じて導き出される残りリソース、例えば、各プログラムが使用可能なメインメモリ２１０の残容量が表示される。
【０１４８】
プログラム配布装置１０１では、上述した操作画面において所定の操作に応じて、例えば残りリソースなどが選択されると、当該残りリソースを含むパラメータ値を示す実行管理データを、選択されたプログラムとともにコントロール装置１０９にダウンロードする。
【０１４９】
コントロール装置１０９では、タスク管理部１１０が、当該選択されたプログラムとともに上記実行管理データを受け取り、この実行管理データを実行管理テーブル１１３に登録する。
【０１５０】
当該選択されたプログラムが制御プログラム１１４であれば、制御プログラム実行部１１１が、上記実行管理データに基づく残りリソースをパラメータ値として、当該選択されたプログラムである制御プログラム１１４を実行する。
【０１５１】
一方、当該選択されたプログラムが情報プログラム１１５であれば、情報プログラム実行部１１２が、上記実行管理データに基づく残りリソースをパラメータ値として、当該選択されたプログラムである情報プログラム１１５を実行する。
【０１５２】
以上のような構成とすると、第１の実施の形態と同様な効果を得ることができるとともに、さらに、そのような各タスクが使用可能なメインメモリ２１０の残りリソースに接したユーザが適切な情報に基づいてダウンロード設定を行うことができるとともに、上述した選択されたプログラムが既存のプログラムに影響を与えないようにすることができる。
［幾つかの変形例］
【０１５３】
次に、変型例について説明する。上述した第１及び第２の実施の形態のうちの少なくとも１つでは、次のような変型例のうちの少なくとも１つを採用することができる。
【０１５４】
第１の変型例としては、例えばハイパバイザ等を利用してＯＳ層から分けるようにしても良い。
【０１５５】
第２の変形例としては、各種プログラムの処理をシーケンシャルに行うことに代えて、処理結果に矛盾が生じない限り、処理の順序を入れ替え又は並行動作するように構成しても良い。
【０１５６】
第３の変形例としては、図６Ａ及び図６Ｂに示す例がある。すなわち、制御プログラムの動作中に情報プログラムが変更される。具体的には、例えば、図６Ａが示すように、ＣＴＬ００７とＩＴＬ００８についてＣＰＵコア番号３０６が共通している。
これは、制御プログラムであるＣＴＬ００７の動作中に、情報プログラムであるＩＴＬ００８の実行のために同一コアが使用され得ること、つまり、タスク優先度３０３や利用デバイス３０７が違うもののＣＴＬ００７の処理がＩＴＬ００８の影響を受け得ることを示している。
【０１５７】
ＩＴＬ００８は、情報プログラムであるため、制御プログラムの実行中に変更可能なプログラムである。コントロール装置１０９が有するＩＴＬ００８を削除した後に、ＩＴＬ００９をコントロール装置１０９に転送する。転送はプログラム配布装置１０１等により行われる。これにより、ＩＴＬ００８をＩＴＬ００９に変更することができる。
［上記説明の概念の一例］
【０１５８】
上記説明の概念の一例を説明するならば、次の通りである。物理的に（直接的だけでなく、ネットワークを通じて間接的に接続される場合も含む。）接続された制御対象装置ハードウェアのＩ／Ｏポートにアクセスすることによりハードウェアの動作を制御するコントロール装置であって、Ｉ／Ｏポートの情報を読み込み制御プログラムと情報プログラムがアクセス可能な共有領域に格納する格納手段と、制御プログラムは、Ｉ／Ｏポート又は格納されたＩ／Ｏポートの情報を取得し、Ｉ／Ｏポートに当該Ｉ／Ｏポートに接続された装置の制御情報を出力し、情報プログラムは、格納されたＩ／Ｏポートの情報を取得し、取得したＩ／Ｏポートの情報を演算することによって処理情報を特定することを特徴とするコントロール装置である。
［総括、及び、より具体的な実施の形態の一例］
【０１５９】
以下の説明は、これまでの説明の総括と、より具体的な実施の形態の一例とを含む。言い換えれば、以下の説明は、これまでの説明の重複部分と、これまでの説明に無い事項とのいずれを含んでもよい。
【０１６０】
制御対象装置の制御に必要な情報（例えば、センサによる測定値）を取得するための通信を制御プログラムによる制御の一部とすること（すなわち、通信について制御プログラムに記述されていること）が考えられるが、通信のような情報処理は制御プログラムによる制御とは分離しておくことが望ましいと考えられる。そのように考えられる１つの理由は、コントロール装置の制御対象装置は、一般に、工作機械、自動組み立て装置又は自動搬送装置のような自動機械や生産設備であるため、高い安定性、つまりリアルタイム性が求められるためである。
【０１６１】
そこで、制御プログラムに加えて、通信のような情報処理について記述されたプログラムである情報プログラムを用意しておくことが考えられる。リアルタイム性を維持するために制御プログラムを優先するべく、情報プログラムをコントロール装置とは別の装置で実行することが考えられるが、資源節約の観点から、制御プログラムと情報プログラムの両方をコントロール装置のような同一プラットフォーム上で実行することが考えられる。この場合、制御プログラムと情報プログラムがコントロール装置内に適切に共存することが求められる。
【０１６２】
しかし、上述した特許文献１及び２は、既に述べた理由から、制御プログラムと情報プログラムの適切な共存のための技術を開示も示唆もしていない。
【０１６３】
同一のプラットフォーム上で、１以上の制御プログラム１１４と１以上の情報プログラム１１５とを含んだ複数のプログラムが実行される。「同一のプラットフォーム」とは、上述の説明によればコントロール装置１０９である。
【０１６４】
１以上の制御プログラムの各々は、当該制御プログラムにとっての制御対象装置の制御のためのスキャン動作を行うプログラムである。一方、１以上の情報プログラムの各々は、スキャン動作を含まない情報処理を行うプログラムである。
【０１６５】
下記に例示する少なくとも１つによって、情報プログラムを柔軟に変更することが可能である。
・複数のプログラム１１４及び１１５の各々について、当該プログラムの動作の範囲を規定した複数のパラメータ値が設定される。制御プログラム１１４の実行と情報プログラム１１５の実行が、当該制御プログラム１１４と当該情報プログラム１１５の各々についての複数のパラメータ値に基づき行われる。情報プログラム１１５の複数のパラメータ値を、いずれの制御プログラム１１４の実行に悪影響が出ないよう調整可能である。
・１以上の共有領域が設けられる。１以上の共有領域の各々について、次のことが言える。すなわち、当該共有領域は、１以上の制御プログラム１１４の少なくとも１つの制御プログラム１１４と１以上の情報プログラム１１５の少なくとも１つの情報プログラム１１５がアクセス可能な記憶領域である。当該記憶領域には、例えば、当該制御プログラム１１４によりアクセスされるＩ／Ｏポートに関する情報と当該制御プログラム１１４に関する情報（例えば内部変数）とのうちの少なくとも一方を含んだ共有情報が格納される。当該共有領域に格納された共有情報を基に、当該共有領域にアクセス可能な情報プログラム１１５が、情報処理を行うことができる。言い換えれば、制御プログラム１１４の実行結果に基づく共有情報を基に情報プログラム１１５が実行されるため、情報プログラム１１５の実行が制御プログラム１１４に悪影響を与えないことが期待される。故に、制御プログラム１１４に悪影響を与えること無しに情報プログラム１１５を変更することが期待できる。
【０１６６】
例えば、複数のプログラム１１４及び１１５の各々について動作の範囲を規定した複数のパラメータ値を含む実行管理テーブル１１３が用意される。これにより、情報プログラム１１５の実行（動作）により制御プログラム１１４の実行に悪影響が出ることを防ぐことができる。当該複数のプログラム１１４及び１１５の各々について、複数のパラメータ値は、下記、
・タスク優先度３０３（当該プログラムの優先度の一例）、
・メモリ上限３０５（１種類以上の計算リソースに対応した１以上のリソース上限の一例）、
・利用デバイス３０７及び専有デバイス３０８（当該プログラムが利用可能な１以上のＩ／ＯポートのうちのいずれのＩ／Ｏポートが当該プログラムに専有のＩ／ＯポートでありいずれのＩ／Ｏポートが当該プログラムを含む２以上のプログラムで共有可能なＩ／Ｏポートであるかを表す専有／共有デバイスの一例）、
のうちの少なくとも１つを含む。
【０１６７】
タスク優先度３０３のようなプログラム優先度というパラメータ値があることで、制御プログラム１１４に求められるリアルタイム性の維持を優先した処理が可能である。例えば、計算リソースの節約の観点から、ＣＰＵコア、メモリ領域及びＩ／Ｏポートといった少なくとも１つの計算リソースを共有デバイスとすること、具体的には、制御プログラム１１４と情報プログラム１１５が共有することが考えられる。タスク優先度３０３の設定により、制御プログラム１１４と情報プログラム１１５が計算リソースを共有しても、制御プログラム１１４のリアルタイム性を損なわないよう情報プログラム１１５を実行することができる。
【０１６８】
メモリ上限３０５のようなリソース上限があることでも、制御プログラム１１４に求められるリアルタイム性の維持を優先した処理が可能である。例えば、情報プログラム１１５が再現なくメモリ量を使用した後で停止した場合にはメモリ量解放の処理が走ることになるが、この処理は、制御プログラム１１４よりも優先して行われることが考えられる。メモリ量を解放しないことには制御プログラム１１４が適切な処理を行うことができないことが考えられるためである。しかし、そうなると、制御プログラム１１４に求められるリアルタイム性が損なわれてしまう。このようなことを回避するために、リソース上限は有用である。
【０１６９】
制御プログラム１１４及び情報プログラム１１５の各々について、専有／共有デバイスという設定は、２以上のパラメータ値の組合せの設定であってよい。専有デバイスが設定されることで、安定した性能、例えば、リアルタイム性の維持が期待できる。共有デバイスが設定されることで、計算リソースを節約しつつ柔軟な処理が期待できる。
【０１７０】
例えば、図７に例示する設定範囲テーブル７００が用意されてよい。図６Ａと図６Ｂで説明した例とは異なる設定方法を示す。また、図８Ａと図８Ｂに示されるＣＰＵコア、メモリ上限、ＬＡＮポートは、それぞれ図７のデフォルト値７０３と設定値７０４の値に対応する情報プログラム１１５が利用できるリソースを示す図である。すなわち、図８Ａは制御プログラム１１４がＣＰＵコア１から４を専有しているが、３から４は未だ利用しておらず、５から８は情報プログラム１１５が専有する状態を示す。
【０１７１】
またメモリは、制御プログラム１１４と情報プログラム１１５がそれぞれ最大１２８ＭＢ使用できる。次に、制御プログラム１１４がＬＡＮ１と２を情報プログラム１１５がＬＡＮ４を専有し、これらのプログラムがＬＡＮ３を共有することを示す。図８Ｂには、図７に示す設定値７０４の値に対応するリソースが示される。設定範囲テーブル７００は、ユーザが使用する計算機（例えば、管理ユーザ計算機１５１Ｍ）からプログラム配布装置１０１経由又は非経由でコントロール装置１０９に格納されてよい。設定範囲テーブル７００は、情報プログラム１１５に関するパラメータ値の範囲を定めたテーブルであり、複数のパラメータ項目（例えば、図３に例示したようなパラメータ項目３０３〜３０８のうちの少なくとも１つと同じパラメータ項目を含んだ複数のパラメータ項目）の各々について、属性７０１、設定可能範囲７０２及びデフォルト値７０３といった情報を格納する。以下、１つのパラメータ項目を例に取る（図７の説明において「対象パラメータ項目」）。設定値７０４はデフォルト値７０３を用いない場合に設定される値である。設定値７０４の一部が入力または設定された場合に、入力又は設定されていない値はデフォルト値７０３の値を用いるとよい。これにより、ユーザは情報プログラム１１５を利用する際に、すべての項目または一部の項目を設定せずとも情報プログラム１１５を実行させることができる。図７に示すように表示手段に表示し、入力手段によって入力してもよいし、別途設定値７０４だけを設定してもよい。
【０１７２】
次に、図８Ｃについて説明する。図８Ｃは図８Ａの設定を変更した状態を示す。図８Ｃには、ＣＰＵコア１と２を制御プログラム１１４が専有し、ＣＰＵコア７と８を情報プログラム１１５が専有し、ＣＰＵコア３から５を共有する場合が示されている。共有されるＣＰＵコアは、それぞれのプログラム１１４と１１５の計算処理が足りない場合に利用することができる。また、タスク優先度に応じて使用量を変更することもできる。
【０１７３】
共有されるＣＰＵコアは破線の境界線を用いると図８Ｂとの違いがユーザに明確に示され便利であるが、当該違いの表現として他の表現が採用されてもよい。例えば、専有、共有それぞれの背景色を変更する、または、それぞれ異なるハッチング処理を施す等が採用されてもよい。メモリの設定は、図８Ｂと同様のため説明を省略する。ＬＡＮポートは、ＬＡＮ１を制御プログラム１１４が専有し、ＬＡＮ３を情報プログラム１１５が専有し、ＬＡＮ２と４を制御プログラム１１４と情報プログラム１１５が共有する。
【０１７４】
属性７０１は、いずれかの情報プログラム１１５について対象パラメータ項目に対応したパラメータ値を変更するといずれかの制御プログラム１１４の実行（動作）へ悪影響が出る可能性があるか否かを表す。“Ａ：設定注意”が、悪影響が出る可能性があることを意味する。“Ｂ：自由に設定可能”が、悪影響が出ないことを意味する。属性７０１を示すことにより、ユーザは悪影響が出ない項目を容易に知ることができる。
【０１７５】
設定可能範囲７０２は、対象パラメータ項目について情報プログラム１１５に関し設定可能なパラメータ値の範囲を表す。当該範囲内でパラメータ値を調整可能である。少なくとも１つのパラメータ項目について、設定可能範囲７０２は、個々の情報プログラム１１５についての値を表していてもよいが、図７の例では、いずれのパラメータ項目についても、全ての情報プログラム１１５の合計としての値を表す。例えば、パラメータ項目“ＣＰＵコア数”は、情報プログラム１１５がＣＰＵコア２から８のうちどのコアを使用するかを設定できるが、特に設定しない場合には、デフォルト値７０３に記載されるようにＣＰＵコア４−８を使用する。“メモリ上限”に対応した設定可能範囲７０２は、全ての情報プログラム１１５についてのメモリ量合計の上限の範囲である。図８Ｂに示す例では、情報プログラム１１５は、１６から２５６ＭＢまで設定可能であるが、設定値７０４が設定されていない場合はデフォルト値７０３の値である１２８ＭＢ使用し、設定値７０４を１６０ＭＢと設定した場合には１６０ＭＢ使用することができる。これにより、図８Ａに示す例では、情報プログラム１１５はメモリを十分に利用できるため、情報プログラム１１５の動作をより安定させることができる。
【０１７６】
なお、少なくとも１つのパラメータ項目について、設定可能範囲７０２が、自動で設定又は変更されてよい。自動で設定される際には、制御プログラム１１４がデバイスのリソースや専有または共有する情報を参考に設定することができる。例えば、タスク管理部１１０が、制御プログラム１１４の使用リソースを基に、情報プログラム１１５についての設定可能範囲７０２を自動で設定又は変更してよい。例えば、制御プログラム１１４がＬＡＮポートのうちＬＡＮ１とＬＡＮ２を専有し、ＬＡＮ３を共有する場合には、利用可能ＬＡＮポートの設定可能範囲７０２をＬＡＮ３，ＬＡＮ４とし、専有ＬＡＮの設定可能範囲７０２をＬＡＮ４とするとよい。この場合は、ＬＡＮ３を情報プログラム１１５が専有するように設定すると、制御プログラム１１４が使用できなくなるため、属性７０１には設定注意と記載される。なお、利用可能ＬＡＮポートの設定可能範囲７０２をＬＡＮ４のみに設定すると、専有ＬＡＮポートの設定可能範囲７０２はＬＡＮ４のみとなる。これは、利用できないＬＡＮポートを自動的に専有できない設定に変更することを意味する。
【０１７７】
また、パラメータ項目“ルーティング方式”は、図９に例示するＯＳ共通実装において採用される。例えば、後述の図９を参照していえば、“Masquerade”は、コンテナ９５３（実行環境の一例）がコントロール装置９０９の外から通信を受け付けないことを意味する。“Port forward”は、コントロール装置９０９の外からの通信のうち、あるポートに対する通信のみ受け付けることを意味する。“IP forward”は、物理的なネットワークＩ／Ｆ（例えば図１のネットワークＩ／Ｆ２１３）に、情報コンテナ９５３Ｂ専用のＩＰアドレスを追加で付与し、当該ＩＰアドレスを指定した通信を、情報コンテナ９５３Ｂ内の情報プログラム１１５に転送することを意味する。
【０１７８】
また、パラメータ項目“利用可能ＬＡＮポート”が情報プログラム１１５で利用できるＬＡＮポートを、“専有ＬＡＮポート”が、情報プログラム１１５が専有するＬＡＮポートを示す。すなわち、情報プログラム１１５はデフォルトでＬＡＮポート３と４を制御プログラム１１４と共有し、ＬＡＮポート４を専有する設定となる。
【０１７９】
また、パラメータ値“共有フォルダ”が、共有領域の一例である共有フォルダへのパスを表している。デフォルト値７０３には、共有なしであるため、特に設定がない限り共有フォルダがない状態となる。
【０１８０】
デフォルト値７０３は、対象パラメータ項目に対応したデフォルト値を表す。例えば、パラメータ項目“ＬＡＮポート”に対応したデフォルト値によれば、情報プログラム１１５にパラメータ値“ＬＡＮ３”と“ＬＡＮ４”が、専有ＬＡＮポートのパラメータ値に“ＬＡＮ４”が設定される。つまり、ＬＡＮ３は、共有デバイスであり、ＬＡＮ４は情報プログラム１１５が専有するデバイスである。ＬＡＮポートは図８Ａに示されるように、制御プログラムが１ポート専有し、情報プログラムが１ポート専有し、制御プログラムと情報プログラムが２ポートを共用する状態を示す。ここでの共有とは、制御プログラムであっても必ずしもリアルタイム性が要求されない通信と情報プログラムそれぞれがＬＡＮポートを利用する場合である。
【０１８１】
例えば、一方のプログラムが共有ＬＡＮポートを使用する際に、他方のプログラムが使用する場合には、一方のプログラムの通信が終わるまで待機し、他方のプログラムが使用する。制御プログラム１１４がＬＡＮポートを専有することで、リアルタイム制御通信を使用する場合に有効である。制御プログラム１１４と情報プログラム１１５がＬＡＮポートを共有することで、一般のEthernet通信等の非リアルタイム通信を行う場合に有効である。情報プログラム１１５がコントロール装置１０９の外部である、例えば工場の外やインターネット等との通信を行う際に、コントロール装置１０９の外部から制御プログラム１１４やコントロール装置に１０９に接続された装置を見せないようにすることができるため、セキュリティの観点から有効である。
【０１８２】
複数のプログラム１１４及び１１５の各々に関し、図８Ａに例示するように、１種類以上の計算リソース（例えば、ＣＰＵコア、メモリ、ＬＡＮ（Ｉ／Ｏポートの一例））の各々について、当該種類（それぞれのパラメータ項目）の計算リソースに対応したリソース上限は、当該種類の計算リソースについて定められたリソース境界（図８において太線で示す）に基づいている。ＬＡＮを共有する場合は、便宜的に中間位置に境界線を設けて表現している。１種類以上の計算リソースの各々について、リソース境界は、下記（ｘ）と（ｙ）で定義される境界である。制御プログラム１１４は（ｘ）以下のリソースで、情報プログラム１１５は（ｙ）以下のリソースで実行されることにより、それぞれのプログラムに影響を与えずに実行可能となる。なお、ＣＰＵはコア数に限らず、単一コアの場合を含めてスケジューリングの優先度を設定することも可能である。また、ＣＰＵコアが複数の場合に、ＣＰＵコアの専有の設定を変更せずに制御プログラム１１５が所定のスキャンタイムで実行されるようにスケジューリングすることも可能であり、この場合は、複数のコアを効率よく使用することができる。
（ｘ）当該種類の計算リソースのリソース上限であって、当該種類の計算リソースを全制御プログラム１１４が使用可能なリソースの合計。
（ｙ）当該種類の計算リソースのリソース上限であって、当該種類の計算リソースを１以上の情報プログラムが使用可能なリソースの合計。
【０１８３】
このようなリソース境界により、リアルタイム性の維持が期待できる。なお、図８では、各種計算リソースについて、リソース境界より左側にある灰色帯は、全制御プログラム１１４が使用しているリソースの合計である総使用リソースを意味し、リソース境界より左側にある白色帯は、制御プログラム１１４に関しての余裕リソース（リソース境界と総使用リソースとの差分）を表す。つまり、灰色帯は実際の利用状態、白色帯は使用されていないが使用できるリソースを示す。一方、各種計算リソースについて、リソース境界より右側にある灰色帯は、全情報プログラム１１５が使用しているリソースの合計である総使用リソースを意味し、リソース境界より左側にある白色帯は、情報プログラム１１５に関しての余裕リソース（リソース境界と総使用リソースとの差分）を表す。これをリアルタイム表示やデバッグ時に表示することにより、リソースの使用量を特定し、設定値７０４によってより制御プログラム１１４または情報プログラム１１５を効率よく実行させることができる。
【０１８４】
複数のプログラム１１４及び１１５の実行を制御するタスク管理部１１０が、図８に例示するように、当該１種類以上の計算リソースの少なくとも１種類の計算リソースのリソース境界を動的に変更する。当該変更は、例えば、リソース境界変更のための所定のイベントが発生した場合に（例えば、ユーザからリソース境界の変更要求をタスク管理部１１０が受けた場合に）行われる。これにより、例えば、制御プログラム１１４に関して余裕リソースが十分ある種類の計算リソースについては、制御プログラム１１４にとってのリソースが減るリソース境界変更が実行される（例えば、計算リソース種類“メモリ”を参照）。このように、柔軟にリソース境界を変更することで、リアルタイム性を維持しつつ高スループットが期待できる。すなわち、リアルタイム性と高スループットの両立が期待できる。
【０１８５】
なお、少なくとも１種類の計算リソースについて、当該種類の計算リソースのリソース境界の変更が、制御プログラム１１４にとってのリソースが減る変更の場合、タスク管理部１１０が、下記の（Ａ）及び（Ｂ）を行ってよい。下記の（Ａ）及び（Ｂ）により、制御プログラム１１４にとってのリソースが減る境界変更、言い換えれば、情報プログラム１１５を追加したときの前提が変更されても、リアルタイム性の維持が期待できる。
（Ａ）１以上の情報プログラム１１５の少なくとも１つを停止する。
（Ｂ）少なくとも１つの制御プログラム１１４について、下記（ｂ１）及び（ｂ２）のうちの少なくとも１つを実行する。
（ｂ１）停止した情報プログラム１１５に割り当てられていた共有デバイス（例えばＩ／Ｏポートのうちの少なくとも１つ）を、当該制御プログラム１１４の専有デバイスに変更する。
（ｂ２）当該制御プログラムのタスク優先度３０３を相対的に上げる（すなわち、当該制御プログラムのタスク優先度３０３を上げることと、停止した情報プログラム１１５のタスク優先度３０３を下げることの少なくとも１つを行う）。
【０１８６】
また、上述の説明では、制御プログラム１１４と情報プログラム１１５が共存するプラットフォームは、物理的なコンピュータとしてのコントロール装置１０９であるが、図９に例示するように、別の例として、同一のＯＳ９５２を採用することができる。つまり、制御プログラム１１４と情報プログラム１１５のＯＳは共通している。ここでも、複数のプログラム１１４及び１１５の各々について、当該プログラムの動作の範囲を規定した複数のパラメータ値を含んだ実行管理テーブル１１３が設定される。
【０１８７】
制御に関しては、一般に、高いリアルタイム性が求められ、情報処理に関しては、一般に、高いスループットが求められる。そして、ＯＳとしても、一般に、制御向けのＯＳとしての専用ＯＳ（リアルタイムＯＳ）と、情報処理向けのＯＳとしての汎用ＯＳとがある。
【０１８８】
一般に、制御プログラムは専用ＯＳが搭載された計算機で実行され、また、専用ＯＳが搭載された計算機から情報系の計算に必要な情報を受信した汎用ＯＳが搭載された計算機が実行されている。ここで、仮に、昨今の汎用計算機分野の技術を考慮すると制御プログラムは専用ＯＳ上で実行され、情報プログラムは汎用ＯＳ上で実行されることで本願発明と類似する構成とすることができると考えられる。このため、同一の計算機に制御プログラムと情報プログラムを共存させる場合、通常、計算機における計算リソース集合（物理的な計算リソースの集合としてのハードウェア）をエミュレートする仮想マシン技術を採用することになる。具体的には、例えば、ハイパバイザが、制御プログラム用に、ゲストＯＳとして専用ＯＳを搭載した仮想マシンを生成し、情報プログラム用に、ゲストＯＳとして汎用ＯＳを搭載した仮想マシンを生成し、制御プログラムと情報プログラムが、ＯＳが異なる別々の仮想マシンで実行されることが考えられる。
【０１８９】
しかし、仮想マシン技術では、仮想マシンにおけるゲストＯＳの他に、仮想マシンのベースとなるホストＯＳが存在する。結果として、管理対象が多く、管理が煩雑となることが考えられる。
【０１９０】
また、計算機に機器が接続されても、当該計算機における全ての制御プログラムや情報プログラムが容易に当該機器を認識できるわけではない。仮想マシン別に、ゲストＯＳを介して、当該機器を認識するための処理が必要となる。言い換えれば、制御プログラムと情報プログラムがデバイスを共有することが困難である。
【０１９１】
本願の発明者の考察によれば、汎用ＯＳの系統ではあるものの必要とされるリアルタイム性を提供できるリアルタイム機能を持ったＯＳ（以下、便宜上、「リアルタイム汎用ＯＳ」と呼ぶ）が提供されている。
【０１９２】
このため、リアルタイム汎用ＯＳを、図９に例示するように、制御プログラム１１４及び情報プログラム１１５が共存するＯＳ９５２として採用することが考えられる。
【０１９３】
しかし、制御プログラム１１４及び情報プログラム１１５がリアルタイム汎用ＯＳ上に共存するとなると、制御プログラム１１４のリアルタイム性の低下が懸念される。具体的には、例えば、リアルタイム汎用ＯＳは、スケジューラを有し、当該スケジューラに割込みが発生するようになっている。スケジューラは、実行すべきリアルタイムタスク（制御プログラム１１４に対応したタスク）があれば、タスク優先度３０３に従い当該リアルタイムタスクへ制御を渡し、実行すべきリアルタイムタスクがなければ、通常タスク（例えば情報プログラム１１５に対応したタスク）へ制御を渡すようになっている。実行すべきリアルタイムタスクがあっても、通常タスクについて所定の処理まで終わらなければ、当該通常タスクは停止されない。このため、リアルタイムタスクの開始が遅れ、結果として、リアルタイム性が損なわれるおそれがある。
【０１９４】
そこで、制御プログラム１１４及び情報プログラム１１５の同一プラットフォームとしてＯＳ９５２を採用し、且つ、当該環境において、上述した工夫のうちの少なくとも１つ、例えば、下記のうちの少なくとも１つを採用することにより、リアルタイム性が維持される。
・上述した実行管理テーブル１１３が設定される。すなわち、制御プログラム１１４及び情報プログラム１１５の各々についてリアルタイム性の維持を目的に決定されたパラメータ値が設定される。
・デバイスの共有化が容易になる代わりにリアルタイム性が低下することを避けるため、上述したようなリソース境界が設定される。
【０１９５】
パラメータ値の設置として、具体的には、例えば、図３に例示したパラメータ値３０３〜３０８の組み合わせにより、制御プログラム１１４及び情報プログラム１１５が同一ＯＳ９５２上に共存しても、リアルタイム性の維持が図られる。例えば、通常タスクについて所定の処理まで終わらなければ当該通常タスクは停止されないことを考慮してパラメータ値３０３〜３０８を決定することが行われる。
【０１９６】
また、適宜にスループットを考慮して、リソース境界が、例えば、ホストプログラムの一例である実行制御プログラム９５７により動的に変更されてよい。その際、リソース境界の変更が、制御プログラム１１４にとってのリソースが減る境界変更の場合、上述の（Ａ）及び（Ｂ）が、例えば、実行制御プログラム９５７により行われてよい。
【０１９７】
図９のコントロール装置９０９については、例えば以下の通りである。
【０１９８】
コントロール装置９０９の計算リソース集合９５１上で、ＯＳ９５２が実行される。ＯＳ９５２上でのプログラム実行環境として、コンテナ型仮想化に従うコンテナ９５３が採用される。すなわち、プログラムが、コンテナ９５３に設定され、ＯＳ９５２上で、コンテナ９５３の単位で実行される。コンテナ９５３としては、例えば、制御コンテナ９５３Ａと情報コンテナ９５３Ｂの２種類のコンテナがある。
【０１９９】
制御コンテナ９５３Ａは、制御プログラム１１４が格納され実行されるコンテナである。制御プログラム１１４は、例えば、ソフトウェアＰＬＣ系ランタイム９６１上で実行されて良い。制御プログラム１１４は、制御系通信を行っても良い。なお、制御系通信はシリアル又はパラレルの有線通信であっても、無線通信であっても良い。
【０２００】
情報コンテナ９５３Ｂは、情報プログラム１１５が格納され実行されるコンテナである。少なくとも１つの情報プログラム１１５は、情報系通信を行うことができる。
【０２０１】
コントロール装置９０９で実行されるプログラムとして、上述のプログラム１１４及び１１５に加えて、他のプログラム、例えば、Ｗｅｂサーバプログラム９５６及び実行制御プログラム９５７がある。Ｗｅｂサーバプログラム９５６及び実行制御プログラム９５７は、いずれも、コンテナ９５３の外で実行されるホストプログラムの一例である。実行制御プログラム９５７は、コンテナ９５３の生成又は削除等を行うコンテナエンジンでよい。Ｗｅｂサーバプログラム９５６及び実行制御プログラム９５７が実行されることで上述のタスク管理部１１０が実現されてよい。
【０２０２】
Ｗｅｂサーバプログラム９５６は、Ｗｅｂサーバとして機能するためのプログラムである。Ｗｅｂサーバプログラム９５６が、管理ユーザ計算機１５１Ｍ及び一般ユーザ計算機１５１Ｇの各々（クライアント）と通信する。Ｗｅｂサーバプログラム９５６が、１以上の情報プログラム１１５のうちの少なくとも１つが格納されるコンテナについて、パラメータ値の設定を受け付けるユーザインターフェースプログラムの一例である。
【０２０３】
実行制御プログラム９５７は、コンテナ９５３におけるプログラムに関して設定されている複数のパラメータ値を基に、コンテナ９５３（正確には、コンテナ９５３におけるプログラム）の実行を制御する。
［第３の実施の形態］
【０２０４】
第３の実施の形態について図１０等を用いて説明する。その際、第１の実施の形態と異なる点を中心として説明し、第１の実施の形態と共通する点については説明を省略又は簡略する。また、以下の説明では、「計算リソース」は、物理的なリソースであるのに対し、使用される又は使用可能な「リソース」は、使用される又は使用可能なリソース量（例えば、ＣＰＵコア数やメモリ容量）を意味して良い。
【０２０５】
図１０は、第３の実施の形態に係るコントロール装置の機能的な概略構成を示すブロック図である。
【０２０６】
計算リソース集合９５１は、図１に示した複数種類の計算リソースを含む複数の計算リソースである。計算リソース集合９５１は、例えば、１以上の周辺機器１２０（図１参照）のような１以上の制御対象装置に接続された１以上のＩ／Ｏポート（例えばＩ／Ｏ制御装置２１４やＩ／Ｏモジュール１１９）と、ネットワーク１０８（図１参照）に接続された１以上のネットワークポート（例えばネットワークＩ／Ｆ２１３）とを含む。
【０２０７】
タスク管理部１０１０及び使用リソース監視部１０１７は、１以上の制御プログラム１１４及び１以上の情報プログラム１１５以外の１以上のプログラムであるプログラム群が実行されることにより実現される機能の一例で良い。
【０２０８】
タスク管理部１０１０は、１以上の制御プログラムと１以上の情報プログラムとのうちの１以上のプログラムである１以上の対象プログラムの少なくとも１つを、プログラム配布装置１０１（図１参照）からネットワーク１０８及びネットワークＩ／Ｆ２１３経由でダウンロードするが、当該ダウンロードのタイミングと異なるタイミングで、計算リソース集合９５１に関し当該対象プログラムが使用可能なリソースであるリソース上限を示す実行管理データを変更する。なお、１以上の制御プログラム１１４の各々は、Ｉ／Ｏポートに接続された周辺機器１２０（制御対象装置の一例）の制御情報を出力するスキャン動作を行うプログラムである。１以上の情報プログラム１１５の各々は、スキャン動作と異なる情報処理を行うプログラムである。
【０２０９】
制御プログラム１１４は、上述したように、処理を設定された時間内に確実に実行すること（リアルタイム性）が求められる。このため、制御プログラム１１４は情報プログラム１１５に比較的大きなリソース上限を割り当てておくとよい。言い換えれば、情報プログラム１１５は制御プログラム１１４に比べて割り当てるリソース上限を比較的小さくしておくことが考えられる。しかし、制御プログラム１１４がどのような情報プログラム１１５とコントロール装置１００９に共存するかによって、制御プログラム１１４又は情報プログラム１１５が使用するリソース上限に過不足が生じ得る。また、リソースの種類によっては、実際にプログラムが動作してみないとどの程度のリソースが使用されるかわからない。また、一般に、少なくともリソースの種類によっては、ユーザは、開発対象のプログラムがどの程度リソースを使用するか或いはどのようにリソースをシェアするかを考慮すること無く当該プログラムの開発を行う場合がある。情報プログラム１１５を開発する情報系の開発者は、汎用コンピュータ向けの開発において制御対象及び制御するハードウェアのリソースを意識することが少ないため共有するリソースの管理は重要である。
【０２１０】
そこで、本実施形態では、対象プログラムの実行管理データが当該対象プログラムのダウンロードと異なるタイミングで変更される。このため、当該実行管理データを適切に変更することが可能である。すなわち、コントロール装置に搭載されたプログラムが必要とするリソースに合わせて、プログラムのダウンロードの際に限らずに使用するリソースを適切に変更できる。ひいては、コントロール装置の運用効率を上昇させることに寄与する。
【０２１１】
使用リソース監視部１０１７は、ネットワークＩ／Ｆ２１３で転送された各対象プログラムについて、当該対象プログラムが使用しているリソースを監視し、監視結果（当該プログラムについて特定された使用リソースを示すデータ）を使用リソース管理テーブル１０１３に格納する。これにより、制御プログラム１１４や情報プログラム１１５の実際の使用リソースに応じて実行管理データ（リソース上限）を適切に変更することが可能である。なお、使用リソース管理テーブル１０１３は、対象プログラム毎に、使用リソースを示すデータを含んで良い。使用リソース管理テーブル１０１３は、コントロール装置１００９の記憶部（例えば、メインメモリ２１０）に格納される。監視結果のうち、当初使用を予定したリソースよりも少ないリソースで所定のプログラムが動作する場合は、実行管理情報を書き換えることにより使用するリソースを小さくすることで、他のプログラムが使用できるリソースを増加させることができる。これにより、所定のプログラムが使用するリソースを適切に変更でき、コントロール装置がより適切なリソースで動作させることができる。また、所定のプログラムが当初の予定よりも多くのリソースが必要となる場合であっても、当該所定のプログラムの実行後であっても使用するリソースを変更できるため、コントロール装置の柔軟な運用を実現できる。
【０２１２】
本実施形態において、実行管理データの変更の例として、図１１に示す第１の例と、図１２に示す第２の例とがある。第１の例は、管理ユーザ（制御プログラム１１４の開発ユーザ）からの許可無しに実行管理データの変更が行われる例である。第２の例は、管理ユーザからの許可が得られた場合に実行管理データの変更が行われる例である（言い換えれば、管理ユーザからの許可無しに実行管理データの変更が不可能な例である）。第１の例は、制御プログラム１１４と情報プログラム１１５に共通の流れである。第２の例は、情報プログラム１１５に特有の流れである。情報プログラム１１５について第１の例と第２の例のどちらを採用するかは、予め決められていてもよいし、コントロール装置１００９の環境状況（例えば、制御プログラム１１４の数と情報プログラム１１５の数）に応じてタスク管理部１０１０によって決められてもよい。以下、実行管理データの変更の例を説明する。
【０２１３】
図１１は、実行管理データの変更の第１の例を示す図である。以下、図１１の説明では、一つの対象プログラムを例に取る。
【０２１４】
タスク管理部１０１０が、プログラム配布装置１０１からコントロール装置１００９へ対象プログラムをダウンロードし記憶部に格納する（ステップＳ１１０１）。
【０２１５】
タスク管理部１０１０が、当該対象プログラムの実行管理データについてユーザによる明示、入力または設定（例えば、ＧＵＩ（Graphical User Interface）のようなユーザインターフェース経由でリソース上限の設定を受け付けること）が無いため、当該対象プログラムのデフォルトの実行管理データを決定し、当該実行管理データを実行管理テーブル１１３に格納する（ステップＳ１１０２）。このようにダウンロード時は自動で実行管理データが設定される。対象プログラムの実行管理データには、一種類以上のリソースの各々についてリソース上限が設定されて良い。なお、当該対象プログラムの実行管理データについて、タスク管理部１０１０が、予め設定された第一の実行管理データ（デフォルトの実行管理データの一例）を特定し、ユーザによる明示、入力または設定がされる場合には、当該第一の実行管理データとは異なる第二の実行管理データを特定して良い。
【０２１６】
タスク管理部１０１０が、例えばＷｅｂサーバとして機能する。具体的には、例えば、タスク管理部１０１０が、当該対象プログラムの実行管理データを変更する（例えば、リソース上限のようなパラメータを変更する）操作である変更操作をユーザ計算機１５１から受け付け（ステップＳ１１０３）、当該受け付けた変更操作に従い実行管理データを変更する（ステップＳ１１０４）。
【０２１７】
このように、本実施形態では、対象プログラムの実行管理データが当該対象プログラムと共にダウンロードされるわけではない。本実施形態では、対象プログラムについて、当該対象プログラムの実行管理データは、プログラム配布装置１０１にはなく、コントロール装置１００９の記憶部に格納される。つまり、ダウンロードされ得るプログラム毎に実行管理データをプログラム配布装置１０１に用意しておく必要が無い。プログラム配布装置１０１は、例えばプログラム開発環境、プログラム書き込み器やプログラム転送装置である。
【０２１８】
また、情報プログラム１１５（及び制御プログラム１１４）の実行管理データを毎回一般ユーザ（及び管理ユーザ）が設定するのは煩雑であるが、ステップＳ１１０２によれば、情報プログラム１１５のような対象プログラムが必要とするリソースに応じて実行管理データが自動で生成され設定される。このため、ユーザにとっての利便性が向上する。なお、少なくとも情報プログラム１１５については、タスク管理部１０１０は、ステップＳ１１０２で決定した実行管理データ（例えば、２個のネットワークポートの使用、及び、１個のシリアルデバイスの使用）を設定することの許可の問合せを管理ユーザ計算機１５１Ｍ（図１２参照）に出し、当該問合せに対する回答が許可の場合に当該実行管理データを設定しても良い。
【０２１９】
ステップＳ１１０２でのデフォルトの実行管理データの決定は、例えば次の少なくとも１つのように行われて良い。なお、対象プログラムが制御プログラム１１４と情報プログラムのどちらであるかは、プログラムのメタデータ、プログラムの格納元等から判別可能である。
・対象プログラムが制御プログラム１１４の場合、タスク管理部１０１０は、当該制御プログラム１１４のソースデータ又はメタデータに記述されているプログラム特性（例えば、必要とするシリアルデバイスの数）を特定し、当該プログラム特性を基に、当該制御プログラム１１４の実行管理データ（リソース上限）を決定する。当該制御プログラム１１４のプログラム特性に関わらず、全ての制御プログラム１１４に共通のリソース上限が当該制御プログラムの実行管理データに設定されてもよい。
・対象プログラムが情報プログラム１１５の場合、タスク管理部１０１０は、当該情報プログラム１１５のソースデータ又はメタデータに記述されているプログラム特性（例えば、必要とするシリアルデバイスの数）を特定し、当該プログラム特性を基に、当該情報プログラム１１５の実行管理データ（リソース上限）を決定する。例えば、タスク管理部１０１０は、ネットワークポートを２つ使用することを特定した場合、実行管理データに、２つのネットワークポートをリソース上限（パラメータ）の一例として設定する。また、例えば、タスク管理部１０１０は、シリアルデバイスを使用することを特定した場合、少なくとも１つのシリアルデバイスを専有又は共有のデバイスとして実行管理データに設定する。当該情報プログラム１１５のプログラム特性に関わらず、全ての情報プログラム１１５に共通のリソース上限（例えば、１つの未使用のＣＰＵコア、及び、全ての情報プログラム１１５が使用可能なメモリ容量のＸ％）が当該情報プログラムの実行管理データに設定されてもよい。
【０２２０】
図１２は、実行管理データの変更の第２の例を示す図である。以下、図１２の説明では、一つの対象プログラムを例に取る。
【０２２１】
図１１のステップＳ１１０１〜Ｓ１１０２と同様の処理が行われる（ステップＳ１２０１〜Ｓ１２０２）。
【０２２２】
その後、タスク管理部１０１０が、情報プログラム１１５の実行管理データの変更操作を一般ユーザ計算機１５１Ｇから受け付ける（ステップＳ１２０３）。その場合、タスク管理部１０１０が、当該情報プログラム１１５の実行管理データを変更することの許可の問合せを管理ユーザ計算機１５１Ｍに出す（ステップＳ１２０４）。当該問合せに対して許可を管理ユーザ計算機１５１Ｍから受け付けた場合（ステップＳ１２０５）、タスク管理部１０１０は、当該情報プログラム１１５の実行管理データを、ステップＳ１２０３で受け付けた変更操作に従い変更する（ステップＳ１２０６）。
【０２２３】
ステップＳ１２０４で出る問合せは、例えば、下記の情報を含み、当該問合せを含む情報が、管理ユーザ計算機１５１Ｍに表示される。このため、管理ユーザは、ステップＳ１２０３で受け付けられた変更操作に従う変更を許可して良いか否かを判断し易い。
・ステップＳ１２０３で受け付けた変更操作の内容（いずれのリソース上限をどのようなリソース上限に変更するか）を示す情報。
・図７に例示する設定範囲テーブルのうち少なくとも当該変更操作に関わるリソース上限に関する部分を示す情報（例えば、変更対象のリソース上限がパラメータ項目「メモリ上限」であれば、メモリ上限に対応した情報７０１〜７０４）。
【０２２４】
一比較例としては、制御プログラム１１４の制御のリアルタイム性を維持するために、制御プログラム１１４が使用する可能性が高い全ての計算リソース（例えば、シリアルデバイス）を制御プログラム１１４の専有デバイスとすべく情報プログラム１１５に対しては使用不可の設定をしておくこと、言い換えれば、情報プログラム１１５が使用可能な計算リソースを過剰に制限しておくことが考えられる。そこで、本実施形態では、図１２に例示のように、一般ユーザが、情報プログラム１１５のダウンロード後に適宜に当該情報プログラム１１５の実行管理データを変更することの意思を示すことができ、管理ユーザの許可が得られた場合（制御のリアルタイム性が維持される場合の一例）、当該情報プログラム１１５の実行管理データの変更が可能となる。
【０２２５】
図１３は、制御プログラム１１４及び情報プログラム１１５の各々にとってのリソース上限の意義の一例を示す模式図である。
【０２２６】
図１３の例によれば、リソース境界が、制御プログラム１１４にとってのリソース上限の一例でもあり、情報プログラム１１５にとってのリソース上限の一例でもある。図１３の例によれば、制御プログラム１１４にとってのリソース上限が、情報プログラム１１５にとってのリソース上限に影響し、情報プログラム１１５にとってのリソース上限が、制御プログラム１１４にとってのリソース上限に影響する。しかし、この例に限らず、例えば、制御プログラム１１４については、リソース境界から一定のマージン分が当該制御プログラム１１４のリソース上限で良い。同様に、情報プログラム１１５については、リソース境界から一定のマージン分が当該情報プログラム１１５のリソース上限で良い。
【０２２７】
リソース上限の意義は、プログラムが制御プログラム１１４であるか情報プログラム１１５であるかによって異なる。具体的には、情報プログラム１１５にとってのリソース上限は、制御プログラム１１４にとってのリソース上限よりも厳格である。以下、詳述する。
【０２２８】
＜制御プログラム１１４にとってのリソース上限について＞
【０２２９】
ある種類のリソース（例えばメモリ使用量）について、制御プログラム１１４又はタスク管理部１０１０が、当該制御プログラム１１４が使用しているリソースに応じて当該制御プログラム１１４の実行管理データを変更する。具体的には、例えば、当該制御プログラム１１４の使用リソース（例えばメモリ使用量）がそのリソース上限１３０３Ｂを超えた場合（符号１３０１を参照）、当該制御プログラム１１４又はタスク管理部１０１０が、自発的に、矢印１３０２が示すように、当該制御プログラム１１４のリソース上限を、リソース上限１３０３Ｂからリソース上限１３０３Ａに拡張する。この場合、情報プログラム１１５にとって当該種類のリソースのリソース上限は縮小する。なお、当該種類の制御プログラム１１４の使用リソースは、例えば、上述した使用リソース管理テーブル１０１３から特定可能である。また、当該種類のリソースについて、制御プログラム１１４のリソース上限を拡張し、結果として、情報プログラム１１５にとってのリソース上限が縮小される場合、当該制御プログラム１１４又はタスク管理部１０１０が、当該縮小後のリソース上限が当該情報プログラム１１５の使用リソース以上か否かを判断して良い。当該判断の結果が真の場合、当該制御プログラム１１４又はタスク管理部１０１０が、当該制御プログラム１１４にとってのリソース上限の拡張を実行して良い。当該判断の結果が偽の場合、当該制御プログラム１１４又はタスク管理部１０１０が、下記のいずれかを行って良い。
・当該判断の結果が真となるまで（当該情報プログラム１１５の使用リソースが縮小後のリソース上限未満となるまで）待つ。
・当該制御プログラム１１４の動作を停止し、当該制御プログラム１１４にとってのリソース上限の拡張を実行する。
【０２３０】
この例によれば、制御プログラム１１４の実際の使用リソースに応じて当該制御プログラム１１４のリソース上限が変更される。つまり、制御プログラム１１４のリソース上限（結果として、情報プログラム１１５のリソース上限）が柔軟に変更可能である。このため、一般ユーザ（情報プログラム１１５の開発ユーザ）の開発自由度が向上する。具体的には、例えば、一般ユーザは、制御プログラム１１４のリソース上限を厳密に考慮すること無しに情報プログラム１１５を開発できる。制御プログラム１１４の使用リソースに応じて適宜に情報プログラム１１５のリソース上限が制御プログラム１１４のリソース上限の変更に応じて変更されるためである。
【０２３１】
なお、図１２に例示したように管理ユーザの許可が得られた場合に実行管理データ（リソース上限）の変更が可能なことは、情報プログラム１１５のリソース上限の変更に代えて制御プログラム１１４のリソース上限の変更のケースにも適用されて良い。
【０２３２】
＜情報プログラム１１５にとってのリソース上限について＞
【０２３３】
上述したように、情報プログラム１１５にとってのリソース上限は、制御プログラム１１４にとってのリソース上限よりも厳格である。例えば、情報プログラム１１５の使用リソースがそれのリソース上限を超える場合（符号１３１１を参照）、当該情報プログラム１１５の動作が停止する（符号１３１２）。
【０２３４】
情報プログラム１１５が使用可能なリソースの上限（例えば、制御プログラム１１４の変更後の実行管理データが示すリソース上限に基づき定まる、当該情報プログラム１１５が使用可能なリソースの上限）を、当該情報プログラム１１５について例えばステップＳ１１０２又はＳ１２０２で決定された実行管理データが示すリソース上限が超えている場合、タスク管理部１０１０が、当該情報プログラム１１５の実行を制限する。
【０２３５】
当該情報プログラム１１５の実行の制限とは、ダウンロードされた当該情報プログラム１１５のインストール（又はダウンロードそれ自体）を拒否することである。
【０２３６】
或いは、当該情報プログラム１１５の実行の制限とは、以下の（Ａ）又は（Ｂ）がされるまで（符号１３２１を参照）、
（Ａ）当該情報プログラム１１５について決定された実行管理データが示すリソース上限が、当該情報プログラム１１５が使用可能なリソースの上限を超えること、
（Ｂ）（Ａ）が管理ユーザから許可がされること、
当該情報プログラム１１５の実行を禁止することである（符号１３２２を参照）。なお、（Ａ）は、例えば、制御プログラム１１４の変更後の実行管理データが示すリソース上限に基づき定まる、当該情報プログラム１１５が使用可能なリソースの上限が、当該情報プログラム１１５について決定された実行管理データが示すリソース上限以下となることで良い。
【０２３７】
以上のように、制御プログラム１１４や情報プログラム１１５の使用リソースは、動作に伴い変わり得る。制御プログラム１１４の使用リソースがリソース上限を超えるときは当該リソース上限が拡張され、情報プログラム１１５の使用リソースがリソース上限を超えるときは当該情報プログラム１１５の動作が停止する（当該リソース上限の拡張が管理ユーザから許可されるまで当該リソース上限の拡張が不可である）。制御プログラム１１４のリソース上限が過剰に高ければ（制御プログラム１１４に過剰にリソースが割り当てられていれば）、制御プログラム１１４のリソース上限を縮小すること、又は、管理ユーザからの許可に応答して情報プログラム１１５のリソース上限を拡張することにより、制御プログラム１１４から過剰に割り当てられていたリソースが解放され、解放されたリソースの少なくとも一部が情報プログラム１１５に割り当てられる。このため、制御プログラム１１４や情報プログラム１１５のダウンロード後に実行管理データ（リソース上限）を変えることの意義は大きい。
【０２３８】
なお、タスク管理部１０１０は、情報プログラム１１５のリソース上限の拡張を、制御プログラム１１４の動作を停止すること無しに行う。例えば、制御プログラム１１４及び情報プログラム１１５のいずれについても、リソース上限は、リソース境界から一定のマージン分の位置にあるとする。そして、制御プログラム１１４の使用リソースは、そのリソース上限を超えても良いが、リソース境界を超えることは禁止されるものとする。この場合、タスク管理部１０１０は、符号１３３１に示すように、情報プログラム１１５のリソース上限を、現在のリソース上限からリソース境界まで（つまり使用リソースの範囲のうちの最大値まで）拡張することが可能である。リソース境界が制御プログラム１１４の使用リソースの最大値のため、情報プログラム１１５のリソース上限を拡張することは制御プログラム１１４の動作に影響しない。
【０２３９】
図１３の例によれば、制御プログラム１１４及び情報プログラム１１５の少なくとも一方について、リソース上限は、リソース境界は同義でもよいし、リソース境界から一定の範囲で可変であっても良い。後者の場合は、制御プログラム１１４及び情報プログラム１１５の一方のプログラムについてのリソース上限を、他方のプログラムの動作に影響を与えること無しに変更することが可能である。
【０２４０】
以上、本発明者によってなされた発明を発明の実施の形態に基づき具体的に説明したが、本発明は前記発明の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【０２４１】
なお、本発明は上記した実施の形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【０２４２】
また、ある実施の形態の構成の一部を他の実施の形態の構成に置き換えることが可能であり、また、ある実施の形態の構成に他の実施の形態の構成を加えることも可能である。
【符号の説明】
【０２４３】
１０１……プログラム配布装置、１０２……プログラム配布部、１０３……実行管理生成部、１０４……プログラム管理データベース、１０５……制御プログラム、１０６……情報プログラム、１０９……コントロール装置、１１０……タスク管理部、１１３……実行管理テーブル、１１４……制御プログラム、１１５……情報プログラム
【図１】
2020061104.tif 000003
【図２】
2020061104.tif 000004
【図３】
2020061104.tif 000005
【図４】
2020061104.tif 000006
【図５】
2020061104.tif 000007
【図６Ａ】
2020061104.tif 000008
【図６Ｂ】
2020061104.tif 000009
【図７】
2020061104.tif 000010
【図８Ａ】
2020061104.tif 000011
【図８Ｂ】
2020061104.tif 000012
【図８Ｃ】
2020061104.tif 000013
【図９】
2020061104.tif 000014
【図１０】
2020061104.tif 000015
【図１１】
2020061104.tif 000016
【図１２】
2020061104.tif 000017
【図１３】
2020061104.tif 000018