(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-28
(45)【発行日】2022-04-05
(54)【発明の名称】コントロール装置
(51)【国際特許分類】
G06F 9/48 20060101AFI20220329BHJP
【FI】
G06F9/48 300H
(21)【出願番号】P 2019553698
(86)(22)【出願日】2018-08-23
(86)【国際出願番号】 JP2018031256
(87)【国際公開番号】W WO2019097800
(87)【国際公開日】2019-05-23
【審査請求日】2019-11-21
(31)【優先権主張番号】P 2017220595
(32)【優先日】2017-11-16
(33)【優先権主張国・地域又は機関】JP
【前置審査】
(73)【特許権者】
【識別番号】502129933
【氏名又は名称】株式会社日立産機システム
(74)【代理人】
【識別番号】110002365
【氏名又は名称】特許業務法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】今井 光洋
(72)【発明者】
【氏名】田村 史之
(72)【発明者】
【氏名】望月 義則
【審査官】井上 宏一
(56)【参考文献】
【文献】特開2006-178818(JP,A)
【文献】特開2004-246498(JP,A)
【文献】特開2004-280299(JP,A)
【文献】再公表特許第2010/050335(JP,A1)
【文献】再公表特許第2007/020735(JP,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455-9/54
(57)【特許請求の範囲】
【請求項1】
1以上の制御対象装置に接続された1以上のI/Oポートの少なくとも1つのI/Oポートにアクセスすることにより当該I/Oポートに接続された制御対象装置の動作を制御するコントロール装置であって、
複数のプログラムを実行するプロセッサ部と、
前記1以上のI/Oポートに関する情報を格納し前記複数のプログラムの各々がアクセス可能な1以上の共有領域の基になる記憶部と
を備え、
前記複数のプログラムは、1以上の制御プログラムの他に、1以上の情報プログラムを含み、
前記1以上の制御プログラムの各々は、前記プロセッサ部のコアに実行されることで、当該制御プログラムにとっての制御対象装置の制御のためにアクセスされるI/Oポートに接続された当該制御対象装置の制御情報を出力するスキャン動作を所定間隔の周期で行うプログラムであり、
前記制御プログラムは前記制御情報を前記記憶部に基づく共有領域に書き込み、
前記1以上の情報プログラムの各々は、前記プロセッサ部のコアに実行されることで、前記スキャン動作と異なる情報処理を行うプログラムであり、
前記情報プログラムが行う情報処理は、前記共有領域に書き込まれた制御情報を取得し演算することを含み、
前記プロセッサ部のコアが、制御プログラムを情報プログラムよりも優先して実行し、
前記情報プログラムの処理実行中に、優先度の相対的に高い前記制御プログラムの処理開始要求が発行されると、割込みにより、前記処理中の情報プログラムは中断され前記優先度の相対的に高い制御プログラムの処理が開始されるように制御し、制御プログラムを実行していない空いている時間に情報プログラムを実行する、
ことを特徴とするコントロール装置。
【請求項2】
請求項1に記載のコントロール装置であって、
前記スキャン動作と異なる情報処理は、当該スキャン動作を含まない情報処理であること
を特徴とするコントロール装置。
【請求項3】
請求項2に記載のコントロール装置であって、
前記スキャン動作は、前記制御プログラムにとっての制御対象装置の制御のためにアクセスされるI/Oポートに前記I/Oポートに接続された当該制御対象装置の制御情報を出力すること
を特徴とするコントロール装置。
【請求項4】
請求項3に記載のコントロール装置であって、
前記記憶部は、実行管理情報を格納し、
前記実行管理情報は、前記複数のプログラムの各々について、当該プログラムの動作の範囲を規定した複数のパラメータ値を含み、
前記複数のプログラムの各々について、前記複数のパラメータ値は、下記、
当該プログラムの優先度、
1種類以上の計算リソースに対応した1以上のリソース上限、
当該プログラムが利用可能な1以上のI/OポートのうちのいずれのI/Oポートが当該プログラムに専有のI/OポートでありいずれのI/Oポートが当該プログラムを含む2以上のプログラムで共有可能なI/Oポートであるかを表す専有/共有デバイス、
のうちの少なくとも1つを含む、
ことを特徴とするコントロール装置。
【請求項5】
請求項3に記載のコントロール装置であって、
前記複数のプログラムの各々について、当該プログラムの動作の範囲を規定した複数のパラメータ値が設定され、
前記複数のプログラムの各々について、前記複数のパラメータ値は、当該プログラムが利用可能な1以上のI/OポートのうちのいずれのI/Oポートが当該プログラムに専有のI/OポートでありいずれのI/Oポートが当該プログラムを含む2以上のプログラムで共有可能なI/Oポートであるかを表す専有/共有デバイスを含む、
ことを特徴とするコントロール装置。
【請求項6】
コントロール装置のプロセッサ部が、1以上の制御対象装置に接続された1以上のI/Oポートに関する情報を格納し1以上の制御プログラムと1以上の情報プログラムとを含んだ複数のプログラムの各々がアクセス可能な1以上の共有領域を管理し、
前記1以上の制御プログラムの各々は、前記プロセッサ部のコアに実行されることで、当該制御プログラムにとっての制御対象装置の制御のためにアクセスされるI/Oポートに接続された当該制御対象装置の制御情報を出力するスキャン動作を所定間隔の周期で行うプログラムであり、
前記制御プログラムは前記制御情報を前記記憶部に基づく共有領域に書き込み、
前記1以上の情報プログラムの各々は、前記プロセッサ部のコアに実行されることで、前記スキャン動作と異なる情報処理を行うプログラムであり、
前記情報プログラムが行う情報処理は、前記共有領域に書き込まれた制御情報を取得し演算することを含み、
前記プロセッサ部のコアが、制御プログラムを情報プログラムよりも優先して実行し、
前記情報プログラムの処理実行中に、優先度の相対的に高い前記制御プログラムの処理開始要求が発行されると、割込みにより、前記処理中の情報プログラムは中断され前記優先度の相対的に高い制御プログラムの処理が開始されるように制御し、制御プログラムを実行していない空いている時間に情報プログラムを実行する、
ことを特徴とするコントロール方法。
【請求項7】
請求項6に記載のコントロール方法であって、
前記スキャン動作と異なる情報処理は、当該スキャン動作を含まない情報処理であること
を特徴とするコントロール方法。
【請求項8】
請求項7に記載のコントロール方法であって、
前記スキャン動作は、前記制御プログラムにとっての制御対象装置の制御のためにアクセスされるI/Oポートに前記I/Oポートに接続された当該制御対象装置の制御情報を出力すること
を特徴とするコントロール方法。
【請求項9】
請求項8に記載のコントロール方法であって、
前記コントロール装置は、実行管理情報を格納し、
前記実行管理情報は、前記複数のプログラムの各々について、当該プログラムの動作の範囲を規定した複数のパラメータ値を含み、
前記複数のプログラムの各々について、前記複数のパラメータ値は、下記、
当該プログラムの優先度、
1種類以上の計算リソースに対応した1以上のリソース上限、
当該プログラムが利用可能な1以上のI/OポートのうちのいずれのI/Oポートが当該プログラムに専有のI/OポートでありいずれのI/Oポートが当該プログラムを含む2以上のプログラムで共有可能なI/Oポートであるかを表す専有/共有デバイス、
のうちの少なくとも1つを含む、
ことを特徴とするコントロール方法。
【請求項10】
請求項8に記載のコントロール方法であって、
前記複数のプログラムの各々について、当該プログラムの動作の範囲を規定した複数のパラメータ値が設定され、
前記複数のプログラムの各々について、前記複数のパラメータ値は、当該プログラムが利用可能な1以上のI/OポートのうちのいずれのI/Oポートが当該プログラムに専有のI/OポートでありいずれのI/Oポートが当該プログラムを含む2以上のプログラムで共有可能なI/Oポートであるかを表す専有/共有デバイスを含む、
ことを特徴とするコントロール方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、コントロール装置に関する。
【背景技術】
【0002】
特許文献1(特開2004-362327号公報)には、「プラントの監視制御設備における監視用パーソナルコンピュータと制御用プログラマブルロジックコントローラをネットワークで接続した分散型監視制御システムにおいて、監視用汎用パーソナルコンピュータに制御用汎用プログラマブルロジックコントローラの情報管理ファイルを設け、前記制御用汎用プログラマブルロジックコントローラに、この制御用汎用プログラマブルロジックコントローラの情報自動掃出ツールを設けて、前記汎用パーソナルコンピュータに入力された情報と前記汎用制御用プログラマブルロジックコントローラのプロセス情報を汎用ソフトウェアで統合管理することを特徴とする分散型監視制御システム。」が開示されている(請求項1参照)。
【0003】
特許文献2(特開2006-178818号公報)には、「リアルタイムOSと、メモリと、ラダー言語プログラムをモーション制御周期に同期させて実行する実行手段と、前記ラダー言語プログラムとC言語プログラムの両方が動作するマイクロプロセッサとを備えたモーションコントローラにおいて、エンジニアリングツールのプロジェクト設定ファイルに従ってロードされた前記C言語プログラムがタスク型プロジェクトであれば前記リアルタイムOSのタスクとして動作させ、前記C言語プログラムが関数型プロジェクトであれば他のタスクから関数としてコール可能な状態で前記メモリに格納することを特徴とするモーションコントローラ。」が開示されている(請求項1参照)。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2004-362327号公報
【文献】特開2006-178818号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1には、「しかしながら、従来の分散型監視制御システム41は、オペレータズテーション50a~50n、ディジタル制御装置60a~60n、伝送路52a~52n、基幹伝送路42、伝送路61a~61n等が分散型監視制御システムメーカ毎の専用機器であり、高価かつ、他メーカー製品と互換性がないため、拡張性が劣り、また、近年のパソコン等汎用機器の性能向上に伴い、能力的にも専用機器を凌ぐものもあるにもかかわらず、汎用機器が使用されていない。」と記載されている(0004段落参照)。
【0006】
分散型監視制御システムメーカ毎の専用機器はプログラマブルロジックコントローラであり、このような装置構成とする背景には、プログラマブルロジックコントローラはI/Oユニット等の制御を行うものであり、工場内の生産や搬送等に用いられる装置に接続されるため、制御に遅延が生じると工場内の装置等の動作が不安定になったり、予期しない動作が生じたりする場合がある。そのため、従来のプログラマブルロジックコントローラは、複雑な処理をさせないようになっていた。特許文献1に開示される発明も同様に複雑な処理をさせないようにし、監視用汎用パーソナルコンピュータに制御用汎用プログラマブルロジックコントローラの情報管理ファイルを設けることで、プログラマブルロジックコントローラの制御に影響を与えないようにすることが開示されている。
【0007】
したがって、特許文献1は、プログラマブルロジックコントローラ内で、情報処理を行うことは考慮されていない。
【0008】
特許文献2の課題の欄には、「ラダー言語アプリケーションプログラムとC言語アプリケーションプログラムが異なるマイクロプロセッサ上で動作するため、ラダー言語アプリケーションからC言語アプリケーションプログラムを関数としてコールすることができないという問題もあった。」と記載されている。
【0009】
すなわち、特許文献2は、同一のマイクロプロセッサ上で、ラダー言語アプリケーションプログラムがC言語アプリケーションプログラムを関数としてコールすることを目的としている。
【0010】
特許文献2には、モーションコントローラとエンジニアリングツールとからなり、モーションコントローラにおいてラダー言語タスクとC言語タスクとが共存して動作し、エンジニアリングツールは、C言語のプログラムと設定ファイルとをモーションコントローラにダウンロードするシステムの発明が記載されている。
【0011】
また、モーションコントローラにラダー言語タスクとC言語タスクが共存し、ラダー言語タスクとC言語プログラムのタスクは、リアルタイムOS(Operating System)上で動作することが記載されている。
【0012】
C言語プログラムがタスク型プロジェクトであれば、リアルタイムOSのタスクとして動作し、関数型プロジェクトであれば他のタスクから関数としてコール可能な状態でモーションコントローラのメモリに格納される。
【0013】
すなわち、関数型プロジェクトであれば、他のタスク、例えばラダー言語タスクは、関数型プロジェクトのプロジェクト名称を引数として入力してC言語関数呼び出し用ファンクション・ブロックを実行する。
【0014】
つまり、ラダー言語タスクがC言語の関数型プロジェクトを呼び出し、モーションコントローラに接続された工作機械等を数値制御することとなる。
【0015】
C言語タスクは、タスク型プロジェクトのプロジェクト名称とタスクの起床や中断など操作の種別を引数として入力してタスク操作用APIをコールする。タスク操作用APIは、プロジェクト名称をタスク名称として扱いタスク操作の種別に対応したリアルタイムOSが提供する機能をコールして他のタスク型プロジェクトのタスク操作を間接的に実現することが記載されている。
【0016】
また、タスク型プロジェクトとしてロードされたC言語プログラムについては、ラダー言語プログラムの実行タイミングで、タスク型プロジェクトとしてロードされたC言語プログラムの実行制御が可能であることが記載されている。
【0017】
すなわち、タスク型プロジェクトとしてロードされたC言語プログラムは、モーション制御に同期した動作を行う用途、高度な数値計算のように処理に時間がかかるような用途に用いることができるとされている。
【0018】
つまり、モーションコントローラに接続された工作機械等を制御するためラダー言語プログラムの実行タイミングで、タスク型プロジェクトとしてロードされたC言語プログラムの実行制御を行うために利用されている。
【0019】
よって、関数型とタスク型のいずれの場合であっても、ラダー言語の一部をC言語として記述あるいはラダー言語プログラムの実行タイミングでC言語プログラムの実行制御をする。つまり、特許文献2に記載のC言語プログラムについては、モーションコントローラに接続された工作機械等を制御するために用いられる技術的思想が開示されている。
【0020】
したがって、特許文献2には、C言語プログラムを装置に接続された工作機械等のハードウェアを制御する以外の目的に利用することは考慮されていない。
【0021】
本発明は以上の点を考慮してなされたもので、コントロール装置において搭載されたプログラムを柔軟に変更することが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【0022】
かかる課題を解決するため、本発明の一例を挙げるならば、1以上の制御対象装置に接続された1以上のI/Oポートの少なくとも1つのI/Oポートにアクセスすることにより当該I/Oポートに接続された制御対象装置の動作を制御するコントロール装置が、複数のプログラムを実行するプロセッサ部と、1以上のI/Oポートに関する情報を格納し複数のプログラムの各々がアクセス可能な1以上の共有領域の基になる記憶部とを備える。複数のプログラムは、1以上の制御プログラムの他に、1以上の情報プログラムを含む。1以上の制御プログラムの各々は、I/Oポートに接続された当該制御対象装置の制御情報を出力するスキャン処理を行うプログラムである。1以上の情報プログラムの各々は、スキャン動作と異なる情報処理を行うプログラムである。
【発明の効果】
【0023】
本発明によれば、コントロール装置に搭載されたプログラムを柔軟に変更することが可能である。
【図面の簡単な説明】
【0024】
【
図1】第1の実施の形態によるコントロールシステムのハードウェア構成例を示すブロック図である。
【
図2】第1の実施の形態によるコントロールシステムの機能的な概略構成を示すブロック図である。
【
図3】
図2に示す実行管理情報テーブルのテーブル構成例を示す図である。
【
図4】コントロール装置がプログラム配布装置から所望のプログラムをダウンロードするプログラムダウンロード処理の一例を示すフローチャートである。
【
図5】プログラム実行処理の一例を示すフローチャートである。
【
図6】実行管理情報テーブルのテーブル構成例を示す図である。
【
図7】実行管理情報テーブルのテーブル構成例を示す図である。
【
図8】制御プログラムと情報プログラムが共存するプラットフォームの別の一例を示す。
【発明を実施するための形態】
【0025】
以下、図面について、本発明の実施の形態について説明する。
【0026】
特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。所定の図に記載された符号について他の図で説明をする場合であっても同一または同様な部分の説明は省略する。
【0027】
以下の実施の形態では便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、詳細、補足説明などの関係にある。
【0028】
以下の実施の形態において、要素の数など(個数、数値、量、範囲などを含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合などを除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良いものとする。
【0029】
以下の実施の形態において、「インターフェース部」は、1以上のインターフェースを含む。1以上のインターフェースは、1以上の同種のインターフェース装置であっても良いし2以上の異種のインターフェース装置であっても良い。
【0030】
以下の実施の形態において、「記憶部」は、1以上のメモリを含む。記憶部に関して少なくとも1つのメモリは、揮発性メモリで良い。記憶部は、主に、プロセッサ部による処理の際に使用される。記憶部は、メモリの他に、1以上の不揮発性の記憶装置(例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive))を含んでも良い。
【0031】
以下の実施の形態において、「プロセッサ部」は、1以上のプロセッサを含む。少なくとも1つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサであるが、GPU(Graphics Processing Unit)のような他種のプロセッサでも良い。1以上のプロセッサの各々は、シングルコアでも良いしマルチコアでも良い。プロセッサは、処理の一部又は全部を行うハードウェア回路を含んでも良い。
【0032】
以下の実施の形態において、「kkk部」(インターフェース部、記憶部及びプロセッサ部を除く)の表現にて機能を説明することがあるが、機能は、1以上のコンピュータプログラム(後述の制御プログラム及び情報プログラムを除く)がプロセッサ部によって実行されることで実現されても良いし、1以上のハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))によって実現されても良い。プログラムがプロセッサ部によって実行されることで機能が実現される場合、定められた処理が、適宜に記憶部及び/又はインターフェース部等を用いながら行われるため、機能はプロセッサ部の少なくとも一部とされても良い。機能を主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としても良い。プログラムは、プログラムソースからインストールされても良い。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であっても良い。各機能の説明は一例であり、複数の機能が1つの機能にまとめられたり、1つの機能が複数の機能に分割されたりしても良い。
【0033】
また、以下の説明では、「xxxテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでも良いし、入力に対する出力を発生するニューラルネットワークのような学習モデルでも良い。従って、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されても良いし、2以上のテーブルの全部又は一部が1つのテーブルであっても良い。
【0034】
以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。
【0035】
コントロール装置は、シーケンス制御装置、モーション制御装置又はプログラマブル・ロジック・コントローラ(PLC)とも呼ばれている。コントロール装置において、ラダー・ロジック(LD言語)、シーケンシャル・ファンクション・チャート(SFC言語)、ファンクション・ブロック(FBD言語)、ストラクチャード・テキスト(ST言語)、インストラクション・リスト(IL言語)のような制御装置特有のプログラミング言語、あるいはC言語のような情報通信分野で使われる汎用的なプログラミング言語を用いて記述され、シーケンス制御やモーション制御に代表される制御処理を実行するプログラムを「制御プログラム」と呼ぶ。制御プログラムは、I/Oモジュール等を介して実際にモータ等を含む周辺機器を操作し、生産システム等を適切に動作させる必要がある。そのため、制御プログラムは、処理を設定された時間内に確実に実行すること(リアルタイム性)が求められる。
【0036】
制御プログラムは、制御内容が記述された命令によって制御対象装置(例えば、装置部品のようなハードウェアモジュール、1以上のハードウェアモジュールを備えた装置、又は、複数の装置を備えたシステム)を制御する。例えば、「I/Oモジュール等を介して実際にモータ等を含む周辺機器を操作し、生産システムを適切に動作させる」といった制御では、「生産システム」、又は、「生産システムを構成する少なくとも1つの装置」が、「制御対象装置」である。制御対象装置は、典型的には、コントロール装置におけるI/O制御装置(インターフェース部の一例)経由で接続された装置である。制御対象装置は、制御プログラムから直接的に(例えば、コントロール装置に接続されたI/Oモジュールや周辺機器を介さずに)制御されても良いし、制御プログラムから間接的に(例えば、コントロール装置に接続されたI/Oモジュールや周辺機器を介して)制御されても良い。
【0037】
制御対象装置を制御する言語は、ラダー言語等の制御特有のプログラミング言語に限らず、C言語等の汎用プログラミング言語で記述される場合もあるため、制御対象装置(典型的にはハードウェア)を制御するプログラムを「制御プログラム」と呼ぶ。
【0038】
ラダー言語等で記述された制御プログラムは、ラダー言語等において指定されたコントロール装置等に接続された制御対象の状態を読み込みまたは書き込みを行い、指定された制御対象の装置の状態を取得また更新するスキャン動作を行う。
【0039】
このスキャン動作は所定間隔で行う必要があり、この所定間隔をスキャンタイムと呼ぶ。スキャンタイムは、制御プログラムの演算時間に関するものであり、制御に関する演算周期または制御に関する演算を繰り返し所定間隔で行うことからサイクルタイムとも呼ばれる。
【0040】
コントロール装置に接続される装置は、例えば、工場内の生産や搬送等に用いられる装置に接続されるため、スキャンが遅れると工場内の装置等の動作が不安定になったり、予期しない動作が生じたりする場合があるため、所定のスキャンタイム内にスキャンを行う必要がある。
【0041】
スキャンタイムはコントロール装置が制御する制御対象の装置の数や種類の増加するに応じて長くなるため、スキャンタイム内で制御対象の装置をスキャンすることが重要である。
【0042】
コントロール装置に、I/O(Input/Output)ポートが内蔵又は接続される。I/Oポートは、I/Oモジュール又はI/Oユニット等が有する場合がある。以下、I/Oポートそれ自体、又は、I/Oポートを有する装置(I/Oモジュール又はI/Oユニット等)を、「I/Oポート」と総称する場合がある。
【0043】
I/Oポートは、制御対象装置、例えば、生産設備におけるベルトコンベア、リミットスイッチ、アクチュエータ(例えばモータ)に接続され、制御対象装置の動作に関する制御に使用されるものである。I/Oポートは、デジタル又はアナログのI/Oポートである。例えば、アナログI/Oポートは、コントロール装置の制御対象装置の電圧、電流、温度等の情報の読み書きに使用される。
【0044】
制御プログラムに基いてコントロール装置から送信される制御情報を有線または無線による通信手段によって接続されるインバータユニットやCNC(Computerized Numerical Control)はインバータやCNC自体がアクチュエータのモーション制御を行うため、リアルタイム性が求められる。
【0045】
また、制御対象装置の制御とは、制御対象装置が接続されている状態のI/Oポートの動作を制御することをいう。つまり、制御プログラムとは、制御対象装置が接続されたI/Oポートの制御を行うプログラム、言い換えれば、制御対象装置が接続されたI/Oポートに当該制御対象装置の制御情報を出力する(具体的には、例えば、当該制御情報の出力を含むスキャン動作を行う)プログラムである。
【0046】
このようなコントロール装置において、制御対象装置の制御に加えて、情報処理(例えば、複雑な算術演算やSCADA、MES、クラウドシステムとの情報の送受信のような情報通信処理)を行うことを検討する。このような情報処理は、上述の制御特有の言語でプログラミングすることが困難な場合があり、C言語またはJava(登録商標)言語などの情報処理分野で使われるプログラミング言語を用いて記述することがある。このような情報処理を実行するプログラムを「情報プログラム」と呼ぶ。
【0047】
制御プログラムと情報プログラムの違いの一例について説明する。
【0048】
上記したように制御プログラムは、コントロール装置のI/Oポートの制御に関係したプログラムであり、情報プログラムは、情報処理(例えば、上述のように、算術演算や、クラウドとの通信)を行うプログラムである。
【0049】
制御プログラムはラダーやST言語等で記述され、java(登録商標)やpython等に代表される汎用言語に比べてリアルタイム性が高い。情報プログラムはjava(登録商標)やpython等に代表される言語で記述され、ラダー等よりも情報通信処理に適している。
【0050】
C言語等のリアルタイム性が高く、ハードウェアの制御にも適しており、また、情報通信処理にも適した言語は制御プログラムと情報プログラムのいずれにも利用可能な場合がある。
【0051】
また、情報プログラムは、先に説明した制御プログラム以外のプログラム(但し、例えば、後述のタスク管理部110、制御プログラム実行部111、情報プログラム実行部112及びI/O制御部117を実現するための1以上のプログラムを除く)である。制御対象装置がI/Oポートを介してコントロール装置に接続されるが、情報プログラムは、制御対象装置に接続されるアナログやデジタルのI/Oポート(但し、情報プログラムとの共有が許容されているI/Oポートを除く)へアクセスしないプログラムである。別の言い方をすれば、制御プログラムは、制御対象装置に接続されるアナログやデジタルのI/Oポートに制御対象装置の制御情報を送信することを含むスキャン動作を行うプログラムであるが。一方、情報プログラムは、スキャン動作を含まない(スキャン動作とは異なる)情報処理を行うプログラム(つまり、スキャン動作を行うことがないプログラム)である。
【0052】
制御プログラムと情報プログラムを搭載する以下の実施の形態に係るコントロール装置は、制御プログラムの他に情報プログラムを実行しても、制御プログラムを停止させることなく、又は、制御プログラムのスキャン動作を遅らせたり、制御プログラムの予期しない動作をさせたりすることなく、情報プログラムの追加、削除、更新(書き換え)又は入れ替えといったプログラム変更を行うことを実現するものである。
【0053】
情報プログラムがコントロール装置に接続される制御対象の装置または設備に接続されるアナログやデジタル入出力等のモジュールまたはユニットのI/Oポートにアクセスする場合には、コントロール装置は当該情報プログラムを制御プログラムとして扱うことが望ましい。
[第1の実施の形態]
【0054】
【0055】
図1は、第1の実施の形態によるコントロールシステムのハードウェア構成例を示すブロック図である。
【0056】
プログラム配布装置101、コントロール装置109、1以上の管理ユーザ計算機151M及び1以上の一般ユーザ計算機151Gが情報ネットワーク108に接続されている。また、コントロール装置109及び1以上のI/Oモジュール119(I/Oポートの一例)が制御ネットワーク118に接続されている。情報ネットワーク108は、情報プログラムが行う情報通信処理(つまり、制御情報の送信とは異なる通信処理)の際に使用される通信ネットワークである。制御ネットワーク118は、制御プログラムが行う制御情報送信の際に使用される通信ネットワークである。情報ネットワーク108及び制御ネットワーク118は、異種のネットワークでも良いし、同種のネットワーク(例えばいずれもLAN(Local Area Network))でも良い。また、情報ネットワーク108の少なくとも一部と制御ネットワーク118の少なくとも一部が一体であっても良い。
【0057】
管理ユーザ計算機151Mは、少なくとも管理ユーザが操作する計算機である。一般ユーザ計算機151Gは、少なくとも一般ユーザが操作する計算機である。いずれの計算機も、プログラム配布装置101及びコントロール装置109の少なくとも1つに対する入出力コンソールとして機能する。具体的には、例えば、いずれの計算機も、キーボード及びポインティングデバイスのような入力デバイスと、表示デバイスのような出力デバイスとを有する。「管理ユーザ」は、制御プログラムを記述するユーザ(例えば、自動機械や生産設備といった制御対象に関して深い知識を有する技術者)であり、「一般ユーザ」は、情報プログラムを記述するユーザ(例えば、制御対象に関して深い知識を持たない一般的なシステムエンジニア)である。コントロール装置109が、管理ユーザ計算機151M及び一般ユーザ計算機151Gのうちの少なくとも1つから制御プログラム及び情報プログラムの少なくとも1つについての記述(パラメータ群の設定を含む)を受け付けても良いし、コントロール装置109に代えて又は加えて、プログラム配布装置101が、当該記述を受け付けても良い。以下、管理ユーザ及び一般ユーザを「ユーザ」と総称することがある。ユーザは、管理ユーザ及び一般ユーザのいずれかに代えて、システム管理者(例えば、プログラム配布装置101とコントロール装置109で構成されたシステムであるコントロールシステムの管理者)といった別種のユーザであってもよい。
【0058】
1以上のI/Oモジュール119に1以上の周辺機器120が接続されている。周辺機器120は、センサ及びドライブなどの少なくとも1つの機器である。I/Oモジュール119は、周辺機器120が必要に応じて着脱可能に装着されるバススロットとして機能する。制御対象装置は、周辺機器120経由又は非経由でI/Oモジュール119に接続される。制御対象装置とI/Oモジュール119は、1:1、1:多、多:1及び多:多のいずれでも良い。また、一部のI/Oモジュール119は、制御ネットワーク118に加えて情報ネットワーク108に接続されても良い、すなわち、当該一部のI/Oモジュール119は、制御プログラムと情報プログラムに共有のデバイスであっても良い。
【0059】
プログラム配布装置101は、制御プログラム及び情報プログラムを管理している。プログラム配布装置101は、EPROM201、CPU202、メインメモリ203、周辺制御装置205、不揮発性記憶装置206及びネットワークインターフェース(図示のネットワークI/Fに相当)207を備える。プログラム配布装置101は、ネットワークインターフェース207を介して情報ネットワーク108に接続されている。
【0060】
プログラム配布装置101は、周辺制御装置205の制御によって情報ネットワーク108を経由してコントロール装置109に対して制御プログラムを提供したり情報プログラムを提供したりする。このプログラム配布装置101では、CPU202の制御によって、不揮発性記憶装置206に予め格納されている制御プログラム及び情報プログラムを要求に応じて提供する。
【0061】
周辺制御装置205は、バス204を介してEPROM201、CPU202及びメインメモリ203に接続されている。CPU202は、EPROM201に予め格納されている管理プログラムをメインメモリ203上に読み出して実行し、この管理プログラムによって上記制御プログラム及び情報プログラムを管理している。
【0062】
この管理プログラムは、要求に応じて逐次、上述した制御プログラム及び情報プログラムのうち少なくとも一方のプログラムを提供する。この管理プログラムがCPU202によって実行されることにより、後述するプログラム配布部102及び実行管理データ生成部103が実現される。
【0063】
一方、コントロール装置109は、EPROM208、CPU209、メインメモリ210、周辺制御装置212、I/O制御装置214、不揮発性記憶装置215及びネットワークインターフェース(図示のネットワークI/Fに相当)213を備えている。I/O制御装置214及びネットワークI/F213が、インターフェース部の一例である。EPROM208、メインメモリ210及び不揮発性記憶装置215が、記憶部の一例である。CPU209及び周辺制御装置212がプロセッサ部の一例である。コントロール装置109では、プログラム配布装置101から提供される制御プログラム及び情報プログラムが同一のプラットフォーム上で共存しつつ動作する。
【0064】
周辺制御装置212は、ネットワークI/F213、I/O制御装置214、不揮発性記憶装置215及びバス211に接続されている。このバス211には、その他にもEPROM208、CPU209及びメインメモリ210が接続されている。
【0065】
EPROM208には、初期状態で予めコントロール装置109に用意されている制御プログラム及び情報プログラムが格納されている。CPU209は、複数のコアを備えており、各コアを独立させて動作させることができる。
【0066】
コントロール装置109に搭載される制御プログラムと情報プログラムはそれぞれひとつずつだけでなく、コントロール装置109が使用できるリソースをプログラムごとに設定することにより、複数の制御プログラム及び/または複数の情報プログラムを搭載することができる。
【0067】
CPU209は、EPROM208に予め格納されている制御プログラム及び情報プログラムをメインメモリ210に読み出して実行し、これら制御プログラム及び情報プログラムの動作を制御する。
【0068】
すなわち、これらの制御プログラム及び情報プログラムが読み出されて実行されると、後述する
図2の制御プログラム114及び情報プログラム115となる。
【0069】
制御プログラム114と情報プログラム115は異なる役割を有する。
【0070】
制御プログラム114は、コントロール装置109のI/Oモジュール119にアクセスし、制御対象装置を制御する。また、制御プログラム114は、読み込んだ結果を基に演算を行い、制御対象装置の制御のために、当該演算結果に基づくアクセスを、I/O制御装置214に対して行っても良い。制御プログラム114は、制御対象装置の制御のために、当該制御対象装置が接続されたネットワークI/F213に対するアクセスを行っても良い。すなわち、I/Oモジュール119に代えて又は加えて、I/O制御装置214及びネットワークI/F213の少なくとも1つも、「I/Oポート」の一例となり得る。つまり、制御プログラム114は、制御対象装置の制御のために(制御対象装置の制御情報の送信のために)、当該制御対象装置が接続されたI/Oポートに対するアクセスを行う、言い換えると、当該I/Oポートを制御する命令を送信する。
【0071】
一方、情報プログラム115は、I/O制御装置214等の情報を取得し、演算し、演算した結果を、ネットワークI/F213を介して、コントロール装置109に接続されている他の装置又は設備に送信する。この段落で言う「他の装置又は設備」は、コントロール装置109に接続されているが制御プログラム114の制御対象装置とは異なる装置又は設備である。
【0072】
コントロール装置109は、制御プログラム114と情報プログラム115の両者がアクセスできる共有領域(図示しない)を有することができる。この共有領域は、メインメモリ210及び不揮発性記憶装置215に確保されて良い。共有領域は、例えば、共有ディレクトリといった論理的な記憶領域でもよいし、物理アドレス(例えばメモリアドレス)で指定された物理的な記憶領域でもよい。例えば、制御プログラム114が、情報プログラム115に見せてもよいデータの値を共有領域に読み書きするタスクを生成し、当該タスクが実行されることで、情報プログラムから、当該共有領域内のデータの値にアクセス可能になって良い。「見せてもよいデータの値」とは、広義には、1以上の情報プログラム115と共有する情報である共有情報である。共有情報は、例えば、I/Oポートの状態を示す(又は、I/Oポートに関して他種の情報を含んだ)ポート情報や、制御プログラムの内部変数等に関する制御プログラム情報が挙げられる。共有領域は、例えば、後述のタスク管理部110により設けられてもよいし、同一の共有領域にアクセスする制御プログラム114及び情報プログラム115の少なくとも1つにより設けられてもよい。
【0073】
このように、情報プログラム115が、制御プログラム114の制御対象装置が接続されたI/Oポートに直接アクセスすることを防止できるため安全性が向上する。言い換えれば、情報プログラム115が、制御プログラム114の制御対象装置が接続されたI/Oポートに直接アクセスすることに代えて、共有領域内の共有情報を参照することで、I/Oポートの状態、又は、制御プログラム114の状態を知ることができる。
【0074】
また、情報プログラム115は、ネットワークI/F213を介して接続されているが制御プログラム114の制御対象装置ではない設備又は装置から情報を受信しても良い。情報プログラム115は、この受信した情報等を演算し、ネットワークI/F213を介して他の装置又は設備と通信することができる。
【0075】
CPU209は、周辺制御装置212を制御してネットワークI/F213を介してプログラム配布装置101からの制御プログラム及び情報プログラムのダウンロードを制御する。
【0076】
CPU209は、周辺制御装置212を制御してI/O制御装置214及び複数のI/Oモジュール119を介して複数の周辺機器120を制御する。周辺機器120は、I/Oモジュール119に1:1で対応付けられており、CPUは、例えば、I/Oモジュール119と1:1のデジタルI/Oレジスタを管理し、レジスタ操作で逐一I/Oモジュール119の操作が可能となっている。
【0077】
図2は、第1の実施の形態によるコントロールシステムの機能的な概略構成例を示すブロック図である。
【0078】
プログラム配布装置101は、プログラム管理データベース(図示のプログラム管理DBに相当)104、プログラム配布部102及び実行管理情報生成部103を備えている。プログラム管理DB104は、メインメモリ203及び不揮発性記憶装置206の少なくとも一部に基づく。これらプログラム配布部102及び実行管理生成部103は、既述の管理プログラムがCPU202に実行されることにより実現される。
【0079】
プログラム管理データベース104は、制御プログラム105及び情報プログラム106を管理する。実行管理情報生成部103は、制御プログラム105及び情報プログラム106のうち少なくとも一方のプログラムがコントロール装置109において実行される際のパラメータを表す実行管理情報を生成する。この実行管理情報は、例えば制御プログラム105及び情報プログラム106の各タスクの優先度、及び、制御プログラム105及び情報プログラム106ごとに使用可能な上限記憶容量のような1以上のパラメータである。
【0080】
プログラム配布部102は、要求に応じて上記少なくとも一方のプログラムを提供する際に併せて上記少なくとも一方のプログラムに対応するパラメータ値を示す実行管理情報を提供する。
【0081】
コントロール装置109は、シーケンス制御装置、モーション制御装置、又はプログラマブル・ロジック・コントローラ(PLC)とも呼ばれることがある。ラダー・ロジック(LD言語)、シーケンシャル・ファンクション・チャート(SFC言語)、ファンクション・ブロック(FBD言語)、ストラクチャード・テキスト(ST言語)、インストラクション・リスト(IL言語)のような制御特有のプログラミング言語で制御内容が記述される。また、場合によりC言語等の汎用言語を用いてラダー言語等の一部または全部を記述することができる。
【0082】
このようなコントロール装置109に接続される制御対象を制御する制御プログラム114は、ラダー言語を代表とする制御特有のプログラミング言語を用いることが有効である。ラダーの表示が可能であり、制御対象の状態の監視等に有効である。
【0083】
一方、情報プログラム115は、このようなコントロール装置109における情報処理(例えば、複雑な算術演算や、SCADA、MES、クラウドシステムとの情報の送受信のような情報通信処理)に有効である。
【0084】
このような情報処理は、制御特有の言語でプログラミングすることが困難な場合があり、いわゆるC言語またはJava(登録商標)言語などの情報通信分野で使われるプログラミング言語を用いて記述する場合がある。
【0085】
プログラム管理データベース104は、上述した制御内容を実行する機能を有する制御プログラム105、及び、上述した情報処理を実行する機能を有する情報プログラム106を管理している。
【0086】
コントロール装置109は、タスク管理部110、制御プログラム実行部111、情報プログラム実行部112、実行管理情報テーブル113及びI/O制御部117を備えている。
【0087】
制御プログラム実行部111は、例えばランタイムライブラリであり、制御プログラム114からの呼び出しに応じて制御プログラム114とともに動作する。情報プログラム実行部112は、例えばいわゆるライブラリであり、情報プログラム115からの呼び出しに応じて情報プログラム115とともに動作する。
【0088】
なお、制御プログラム114は、プログラム配布装置101からコントロール装置109に配布済みの制御プログラム105(又は当該制御プログラム105の実行に伴い生成された1以上のタスク)に相当し、情報プログラム115は、プログラム配布装置101からコントロール装置109に配布済みの情報プログラム106(又は当該情報プログラム106の実行に伴い生成された1以上のタスク)に相当する。
【0089】
実行管理情報テーブル113は、プログラム配布装置101から提供された上記少なくとも一方のプログラムとともに受け取った上記実行管理情報が保存される。
【0090】
一方、タスク管理部110は、主として2つの機能、具体的には、プログラム受信機能及びプログラム実行管理機能を有する。プログラム受信機能は、要求に応じてプログラム配布装置101から提供される上記少なくとも一方のプログラムを受信する機能である。一方、プログラム実行管理機能は、上記少なくとも一方のプログラムを実行する際に、実行管理情報テーブル113に保存された実行管理情報に基づいて上記少なくとも一方のプログラムの実行を制御する機能である。
【0091】
I/O制御部117は、制御プログラム114からの制御情報を当該制御情報の送信先に転送する。
【0092】
上述したようにコントロール装置109は、制御プログラム114及び情報プログラム115の各タスクが使用する所定の記憶容量の記憶領域を有するメインメモリ210を備える。
【0093】
ここで、プログラム配布装置101では、実行管理情報生成部103が、実行管理情報として少なくとも、制御プログラム105及び情報プログラム106の各タスクの優先度、及び、制御プログラム105及び情報プログラム106の各タスクによって使用可能なメインメモリ210の上限記憶容量の少なくとも一方のパラメータ値を示す実行管理情報を生成する。
【0094】
図3は、
図2に示す実行管理情報テーブル113のテーブル構成例を示す。
【0095】
実行管理情報テーブル113は、制御プログラム114及び情報プログラム115の各々について、エントリを有する。各エントリは、例えば、プログラム名301、プログラム種別302、タスク優先度303、実行周期304、メモリ上限305、CPUコア番号306及び利用デバイス307を有する。といった情報を格納する。
【0096】
プログラム名301は、各プログラムの名称を表している。プログラム種別302は、各プログラムが制御プログラム114であるか情報プログラム115であるかというプログラムの種別を表している。
【0097】
なお、上述したプログラム名301の先頭3文字においても、制御プログラム114であるか情報プログラム115であるかを識別可能であり、「CTL」は制御プログラム114を表しており、「ICT」は情報プログラム115を表している。以下、制御プログラム114及び情報プログラム115の各々を、プログラム名で表現することがある。
【0098】
タスク優先度303は、実行中の制御プログラム114及び情報プログラム115に対応するタスクの優先度を表している。タスク優先度303では、例えば「0(優先度:高)」から「20(優先度:低)」までの間で優先度が設定可能である。つまり、タスク優先度303としての値が小さいほど優先度が高い。
【0099】
実行周期304は、対象プログラムにおける定常処理が実行される周期を表している。「実行周期」とはスキャンタイムである。図示の例によれば、CTL001のスキャンタイムが10msecであり、CTL002のスキャンタイムは1msecでる。スキャン動作は、制御プログラム114及び情報プログラム115のうちの制御プログラム114に特有の動作であるため、実行周期304は、制御プログラム114について有効な値であるが、情報プログラム115については無効な値である。実行周期304(スキャンタイム)は、エンジニアリングツールでシミュレーションによって特定された値、又は、実際にコントロール装置109にて制御プログラム114を実行することにより特定されたスキャンタイムであっても良い。
【0100】
メモリ上限305は、各プログラムがメインメモリ203の記憶領域において使用可能な記憶容量を表している。
【0101】
CPUコア番号306は、コントロール装置109のCPU209に搭載されている複数のコアのうちプログラムに割り当てるコアの番号を表している。
【0102】
利用デバイス307は、対象プログラムが利用可能なデバイスである利用デバイス、具体的には、対象プログラムが利用可能なI/Oモジュール119(I/Oモジュール119に接続されている利用可能な周辺機器120)を表している。
【0103】
専有デバイス308は、対象プログラムに対応した利用デバイス307が表す1以上の利用デバイス(I/Oモジュール119)のうち対象プログラムに専有されるデバイスである専有デバイス(すなわち、対象プログラムが他の制御プログラム114又は情報プログラム115と共有不可のI/Oモジュール119)を表す。
【0104】
図示の例によれば、例えば、下記のことが言える。
【0105】
CTL001は、制御プログラムである。CTL001について、例えば次の通りである。すなわち、タスク優先度は、CTL002よりも低く設定されている。また、メモリ上限は16MBであり、使用するCPUコアの番号は0である。利用デバイスはDI1とDO1(コントロール装置のデジタル入力1とデジタル出力1)である。
【0106】
DI1とDO1を、他のプログラムが使用しないようにCTL001が専有して利用するように設定されている。コントロール装置において、専有デバイス(専有デバイス308として設定されたデバイス)が複数のプログラムで共有されないため、専有デバイス(ここではDI1とDO1)に関係する制御が不安定になることを防止することができる。
【0107】
また、CTL002は、利用デバイスがeth1、eth2、シリアル1である制御プログラム、具体的には、Ethernet(登録商標)のポートを2つ、RS-232Cのポートを1つ利用する制御プログラムである。また、CTL001よりもCTL002の方がリアルタイム性が高いため、タスク優先度は、CTL001よりも高い。
【0108】
CTL002は、eth2が例えばモーション制御に利用されるデバイスである場合を示す。モーション制御はリアルタイム性が高く他の処理も優先されるため、4つのプログラムの中で最も優先度が高く設定されている。
【0109】
また、CTL002が使用するCPUコアの番号は1であり、CTL001とICT001とICT006の使用するCPUコアの番号が0であることから、CTL002は、番号が1のCPUコアを専有する。
【0110】
CTL002は、タスク優先度303に規定される優先度のみならず、CPU209が有する複数のコアのうち番号1のコアを専有する観点からも、優先度が高いことがわかる。このような設定を行うことで、CTL002が制御プログラムの中でも優先度を高い状態とすることができる。
【0111】
次に、メモリ上限305について説明する。
【0112】
メモリ上限が設定されない場合には、実際に演算を行う際に各プログラムが際限なくメモリを確保、使用することが可能となる。しかし、例えば、大量にメモリを使用するプログラムを追加した場合、当該プログラムの追加に伴いシステム全体のメモリを使い切ってしまうような場合が起こりうる。このような場合、コントロール装置またはOSがダウンすることで制御プログラムの動作が停止したり、OSによる強制的なメモリ開放機能の発動により制御プログラムの処理が妨げられスキャンタイム内にスキャン動作を完了できなくなったりといったような場合がある。
【0113】
そこで、本実施形態では、メモリ上限305の合計値をコントロール装置のシステム全体で利用できる値以下とすることでコントロール装置等のダウンを防止することができる。
【0114】
なお、システム全体で利用できる値は、コントロール装置に搭載されたメモリからOS等で使用された部分を除いた値であることが望ましい。OS等の領域に制御または情報プログラムの処理が影響を与えないようにするためである。
【0115】
また、プログラムごとにメモリ上限305の値を設定することにより、もしあるプログラムに想定以上のメモリを使用してしまう不具合があった場合には、当該プログラムのみが停止し他のプログラムに影響を与える事を防止できる。
【0116】
次にタスク優先度303について説明する。
【0117】
タスク優先度は、各プログラムが実行させる場合の優先度である。各プログラムにタスク優先度を設定することにより、OSのスケジューラ等にプログラムへのCPU割当ての優先順位を認識させることができる。
【0118】
複数のプログラムを、明示的にタスク優先度を設定せずに実行するとあらかじめOSのスケジューラが有するルールにしたがってCPU割当てのようなリソース割り当てが行われる。例えば、複数のプログラムに平等にCPUの割当てが行われるようなスケジューリングが行われる。
【0119】
このようなスケジューリングは制御プログラムのようなスキャンタイム内に確実に処理を終えることが重要であるプログラムの場合、他のプログラムの動作によってスキャンタイム内に処理を終えることができなくなるなど制御プログラムの動作に影響を及ぼす場合がある。
【0120】
例えば、第一のプログラムの処理実行(CPU割当て)中に、タイマ割込み等により第一のプログラムよりも相対的にタスク優先度の高い第二のタスクの処理開始要求が発行されると、第一のプログラムの処理が中断されて第二のプログラムの処理が開始される。その後第二のプログラムがSleep等によりCPUの割当てを終了すると第一のプログラムの処理が再開される。
【0121】
また、例えば、第一のプログラムの処理実行(CPU割当て)中に、タイマ割込み等により第一のプログラムよりも相対的にタスク優先度の低い第二のタスクの処理開始要求が発行されると、第一のプログラムがSleep等によりCPUの割当てを終了するまで第二のプログラムの処理開始が待たされる。
【0122】
したがって、タスク優先度303を設定することで、より優先度の高いプログラムの処理を優先して行うことができる。
【0123】
これにより、ユーザがより重要性が高いと判断したプログラムを優先して処理させることができる。情報プログラムをコントロール装置で処理し、情報プログラムが複雑な計算を行う場合であっても、制御プログラムに影響を与えないようにすることができる。
【0124】
ICT001とICT002は、実行周期304であるスキャンタイムが設定されていないが、制御プログラムに比べて情報プログラムのタスク優先度が低いため、制御プログラムの計算にCPUコアを利用していない時間(例えば、空いている時間)に情報プログラムの処理を行うことができる。これにより、制御プログラムの処理に影響を与えることなく情報プログラムを処理することができる。
【0125】
ICT001とICT002は、利用デバイスがeth1であり、eth1は専有設定されていない。そのため、eth1のポートについては、ICT001とICT002が共有して利用可能である。
【0126】
ICT001とICT006がeth1を同時に使用しようとした場合には、タスク優先度303が高いICT001が先にeth1を使用する。ICT001がeth1の使用を終了した際に、タスク優先度303が高いICT006がeth1を使用することが可能となる。このように、プログラムそれぞれがタスク優先度に応じた処理が可能となる。
【0127】
図4は、コントロール装置109がプログラム配布装置101から所望のプログラムをダウンロードするプログラムダウンロード処理の一例を示すフローチャートである。
【0128】
まず、プログラム配布装置101では、図示しない操作画面を用いたユーザの操作に応じて、ダウンロードすべきプログラムが選択される(ステップS401)。これにより、プログラム配布部102は、対応する特定のプログラムをプログラム管理データベース104において特定する。
【0129】
次にプログラム配布装置101では、操作画面においてユーザの操作に応じて上記特定のプログラムについて実行管理情報が設定される(ステップS402)。この実行管理情報には、例えば
図3に示すようにタスク優先度303が含められている。
【0130】
これにより、実行管理情報生成部103は、ユーザの入力内容に応じて上記特定のプログラムの動作態様に関するパラメータとして、例えば、各プログラムの各タスクが実行される際の優先度、及び、各タスクが使用可能なメインメモリ210内の上限記憶容量の少なくとも一方のパラメータを設定することができる。
【0131】
以下、一例として主として優先度を取り上げて説明する。以上までが、プログラム配布装置101における処理を表しており、これ以降はコントロール装置109における処理を表している。
【0132】
プログラム配布装置101は、コントロール装置109の要求に応じて、上記特定のプログラム及びこれに対応付けられた実行管理情報をコントロール装置109にダウンロードする(ステップS403)。
【0133】
次にコントロール装置109では、タスク管理部110が、上記ダウンロードされた上記特定のプログラムを受信する(既述のプログラム受信機能に相当)。タスク管理部110は、受信が完了すると、上記特定のプログラムが制御プログラムである場合には制御プログラム114としてメインメモリ210に保存する(ステップS404)。
【0134】
次にコントロール装置109では、タスク管理部110が上記特定のプログラムとともにダウンロードした実行管理情報を実行管理情報テーブル113に追記する(既述のプログラム実行管理機能に相当)(ステップS405)。
【0135】
図5は、プログラム実行処理の一例を示すフローチャートである。このプログラム実行処理は、コントロール装置109において上記特定のプログラムが実行される場合の処理内容を表している。
【0136】
タスク管理部110は、ある所定のプログラムを新たに実行しようとした際、実行管理情報テーブル113から当該所定のプログラムに対応する実行管理情報を読み出す(ステップS501)。
【0137】
当該所定のプログラムに対応する実行管理情報としては、実行管理情報テーブル113における優先度303において管理している当該所定のプログラムの各タスクが実行される際における優先度を含む。
【0138】
次にタスク管理部110は、当該読み出された実行管理情報に基づいて当該所定のプログラムのパラメータとして、例えば、当該所定のプログラム(制御プログラム105及び情報プログラム106の少なくとも一方のプログラム)の各タスクの優先度を設定したり、各タスクが使用可能なメインメモリ210の上限記憶容量を設定または特定したりする(ステップS502)。
【0139】
タスク管理部110は、このような優先度を所定のコマンドを用いて設定する。一方、タスク管理部110は、上述した上限記憶容量を設定する。
【0140】
以上のような実施の形態によれば、同一プラットフォーム(つまりコントロール装置109)に共存する制御プログラム114及び情報プログラム115が当該プラットフォーム上でそれぞれ対応するパラメータに応じて動作するようになる。タスク管理部110が、制御プログラム114及び情報プログラム115を、当該プログラム114及び115の各々のタスク優先度などのパラメータ値を基に制御プログラム実行部111及び情報プログラム実行部112を制御することで、当該プログラム114及び115の各々の実行を制御する(ステップS503)。
【0141】
この場合は、情報プログラム115であるICT001とICT002が所定のリソースで動作する。また、制御プログラム114であるCTL001とCTL002が所定のリソースでICT001とICT002よりも高い優先度で動作する。
【0142】
実行管理情報テーブル113を適宜変更することによって、制御プログラム114及び情報プログラム115は、互いに、例えばタスクの追加、更新又は削除のような機能変更に際し、他のプログラムが動作したまま、一部の制御プログラム114または情報プログラム115を変更することができる。
【0143】
また、情報プログラム115は、所定のリソースが確保された場合であって、他のプログラムとの影響がない場合には再コンパイルや再ダウンロードを必要とせず実行管理情報テーブル113を変更しても動作させることができる。
【0144】
このため、制御プログラム114及び情報プログラム115の各タスクの追加、更新及び削除のいずれの機能的な変更も行い易くなるため、コントロール装置109は柔軟な機能変更を可能とする。
[第2の実施の形態]
【0145】
第2の実施の形態について
図3等を用いて説明する。その際、第1の実施の形態と異なる点を中心として説明し、第1の実施の形態と共通する点については説明を省略又は簡略する。
【0146】
第2の実施の形態では、上述した操作画面(図示せず)に、
図3に示す実行管理情報テーブル113に基づいて、上述した各プログラムが使用可能なメインメモリ210の上限記憶容量に応じて導き出される残りリソース、例えば、各プログラムが使用可能なメインメモリ210の残容量が表示される。
【0147】
プログラム配布装置101では、上述した操作画面において所定の操作に応じて、例えば残りリソースなどが選択されると、当該残りリソースを含むパラメータ値を示す実行管理情報を、選択されたプログラムとともにコントロール装置109にダウンロードする。
【0148】
コントロール装置109では、タスク管理部110が当該選択されたプログラムとともに上記実行管理情報を受け取り、この実行管理情報を実行管理情報テーブル113に登録する。
【0149】
当該選択されたプログラムが制御プログラム114であれば、制御プログラム実行部111が、上記実行管理情報に基づく残りリソースをパラメータ値として、当該選択されたプログラムである制御プログラム114を実行する。
【0150】
一方、当該選択されたプログラムが情報プログラム115であれば、情報プログラム実行部112が、上記実行管理情報に基づく残りリソースをパラメータ値として、当該選択されたプログラムである情報プログラム115を実行する。
【0151】
以上のような構成とすると、第1の実施の形態と同様な効果を得ることができるとともに、さらに、そのような各タスクが使用可能なメインメモリ210の残りリソースに接したユーザが適切な情報に基づいてダウンロード設定を行うことができるとともに、上述した選択されたプログラムが既存のプログラムに影響を与えないようにすることができる。
[幾つかの変形例]
【0152】
次に、変型例について説明する。上述した第1及び第2の実施の形態のうちの少なくとも1つでは、次のような変型例のうちの少なくとも1つを採用することができる。
【0153】
第1の変型例としては、例えばハイパバイザ等を利用してOS層から分けるようにしても良い。
【0154】
第2の変形例としては、各種プログラムの処理をシーケンシャルに行うことに代えて、処理結果に矛盾が生じない限り、処理の順序を入れ替え又は並行動作するように構成しても良い。
【0155】
第3の変形例としては、
図6及び
図7に示す例がある。すなわち、制御プログラムの動作中に情報プログラムが変更される。具体的には、例えば、
図6が示すように、CTL007とITL008についてCPUコア番号306が共通している。これは、制御プログラムであるCTL007の動作中に、情報プログラムであるITL008の実行のために同一コアが使用され得ること、つまり、タスク優先度303や利用デバイス307が違うもののCTL007の処理がITL008の影響を受け得ることを示している。
【0156】
ITL008は、情報プログラムであるため、制御プログラムの実行中に変更可能なプログラムである。コントロール装置109が有するITL008を削除した後に、ITL009をコントロール装置109に転送する。転送はプログラム配布装置101等により行われる。これにより、ITL008をITL009に変更することができる。
[上記説明の概念の一例]
【0157】
上記説明の概念の一例を説明するならば、例えば次の通りである。物理的に(直接的だけでなく、ネットワークを通じて間接的に接続される場合も含む。)接続されたハードウェアのI/Oポートにアクセスすることにより制御対象装置の動作を制御するコントロール装置であって、I/Oポートの情報を読み込み制御プログラムと情報プログラムがアクセス可能な共有領域に格納する格納手段と、制御プログラムは、I/Oポートまたは格納されたI/Oポートの情報を取得し、I/Oポートに当該I/Oポートに接続された装置の制御情報を出力し、情報プログラムは、格納されたI/Oポートの情報を取得し、取得したI/Oポートの情報を演算することによって処理情報を特定することを特徴とするコントロール装置である。
[総括、及び、より具体的な実施の形態の一例]
【0158】
以下の説明は、これまでの説明の総括と、より具体的な実施の形態の一例とを含む。言い換えれば、以下の説明は、これまでの説明の重複部分と、これまでの説明に無い事項とのいずれを含んでもよい。
【0159】
制御対象装置の制御に必要な情報(例えば、センサによる測定値)を取得するための通信を制御プログラムによる制御の一部とすること(すなわち、通信について制御プログラムに記述されていること)が考えられるが、通信のような情報処理は制御プログラムによる制御とは分離しておくことが望ましいと考えられる。そのように考えられる1つの理由は、コントロール装置の制御対象装置は、一般に、工作機械、自動組み立て装置又は自動搬送装置のような自動機械や生産設備であるため、高い安定性、つまりリアルタイム性が求められるためである。
【0160】
そこで、制御プログラムに加えて、通信のような情報処理について記述されたプログラムである情報プログラムを用意しておくことが考えられる。リアルタイム性を維持するために制御プログラムを優先するべく、情報プログラムをコントロール装置とは別の装置で実行することが考えられるが、資源節約の観点から、制御プログラムと情報プログラムの両方をコントロール装置のような同一プラットフォーム上で実行することが考えられる。この場合、制御プログラムと情報プログラムがコントロール装置内に適切に共存することが求められる。
【0161】
しかし、上述した特許文献1及び2は、既に述べた理由から、制御プログラムと情報プログラムの適切な共存のための技術を開示も示唆もしていない。
【0162】
同一のプラットフォーム上で、1以上の制御プログラム114と1以上の情報プログラム115とを含んだ複数のプログラムが実行される。「同一のプラットフォーム」とは、上述の説明によればコントロール装置109である。
【0163】
1以上の制御プログラムの各々は、当該制御プログラムにとっての制御対象装置の制御のためのスキャン動作を行うプログラムである。一方、1以上の情報プログラムの各々は、スキャン動作と異なる(例えばスキャン動作を含まない)情報処理を行うプログラムである。
【0164】
下記に例示する少なくとも1つによって、情報プログラムを柔軟に変更することが可能である。
・複数のプログラム114及び115の各々について、当該プログラムの動作の範囲を規定した複数のパラメータ値が設定される。制御プログラム114の実行と情報プログラム115の実行が、当該制御プログラム114と当該情報プログラム115の各々についての複数のパラメータ値に基づき行われる。情報プログラム115の複数のパラメータ値を、いずれの制御プログラム114の実行に悪影響が出ないよう調整可能である。
・1以上の共有領域が設けられる。1以上の共有領域の各々について、次のことが言える。すなわち、当該共有領域は、1以上の制御プログラム114の少なくとも1つの制御プログラム114と1以上の情報プログラム115の少なくとも1つの情報プログラム115がアクセス可能な記憶領域である。当該記憶領域には、例えば、当該制御プログラム114によりアクセスされるI/Oポートに関する情報と当該制御プログラム114に関する情報(例えば内部変数)とのうちの少なくとも一方を含んだ共有情報が格納される。当該共有領域に格納された共有情報を基に、当該共有領域にアクセス可能な情報プログラム115が、情報処理を行うことができる。言い換えれば、制御プログラム114の実行結果に基づく共有情報を基に情報プログラム115が実行されるため、情報プログラム115の実行が制御プログラム114に悪影響を与えないことが期待される。故に、制御プログラム114に悪影響を与えること無しに情報プログラム115を変更することが期待できる。
【0165】
例えば、複数のプログラム114及び115の各々について動作の範囲を規定した複数のパラメータ値を含む実行管理テーブル113が用意される。これにより、情報プログラム115の実行(動作)により制御プログラム114の実行に悪影響が出ることを防ぐことができる。当該複数のプログラム114及び115の各々について、複数のパラメータ値は、下記、
・タスク優先度303(当該プログラムの優先度の一例)、
・メモリ上限305(1種類以上の計算リソースに対応した1以上のリソース上限の一例)、
・利用デバイス307及び専有デバイス308(当該プログラムが利用可能な1以上のI/OポートのうちのいずれのI/Oポートが当該プログラムに専有のI/OポートでありいずれのI/Oポートが当該プログラムを含む2以上のプログラムで共有可能なI/Oポートであるかを表す専有/共有デバイスの一例)、
のうちの少なくとも1つを含む。
【0166】
タスク優先度303のようなプログラム優先度というパラメータ値があることで、制御プログラム114に求められるリアルタイム性の維持を優先した処理が可能である。例えば、計算リソースの節約の観点から、CPUコア、メモリ領域及びI/Oポートといった少なくとも1つの計算リソースを共有デバイスとすること、具体的には、制御プログラム114と情報プログラム115が共有することが考えられる。タスク優先度303の設定により、制御プログラム114と情報プログラム115が計算リソースを共有しても、制御プログラム114のリアルタイム性を損なわないよう情報プログラム115を実行することができる。
【0167】
メモリ上限305のようなリソース上限があることでも、制御プログラム114に求められるリアルタイム性の維持を優先した処理が可能である。例えば、情報プログラム115が再現なくメモリ量を使用した後で停止した場合にはメモリ量解放の処理が走ることになるが、この処理は、制御プログラム114よりも優先して行われることが考えられる。メモリ量を解放しないことには制御プログラム114が適切な処理を行うことができないことが考えられるためである。しかし、そうなると、制御プログラム114に求められるリアルタイム性が損なわれてしまう。このようなことを回避するために、リソース上限は有用である。
【0168】
制御プログラム114及び情報プログラム115の各々について、専有/共有デバイスという設定は、2以上のパラメータ値の組合せの設定であってよい。専有デバイスが設定されることで、安定した性能、例えば、リアルタイム性の維持が期待できる。共有デバイスが設定されることで、計算リソースを節約しつつ柔軟な処理が期待できる。
【0169】
また、上述の説明では、制御プログラム114と情報プログラム115が共存するプラットフォームは、物理的なコンピュータとしてのコントロール装置109であるが、
図8に例示するように、別の例として、同一のOS952を採用することができる。つまり、制御プログラム114と情報プログラム115のOSは共通している。ここでも、複数のプログラム114及び115の各々について、当該プログラムの動作の範囲を規定した複数のパラメータ値を含んだ実行管理テーブル113が設定される。
【0170】
制御に関しては、一般に、高いリアルタイム性が求められ、情報処理に関しては、一般に、高いスループットが求められる。そして、OSとしても、一般に、制御向けのOSとしての専用OS(リアルタイムOS)と、情報処理向けのOSとしての汎用OSとがある。
【0171】
一般に、制御プログラムは専用OSが搭載された計算機で実行され、また、専用OSが搭載された計算機から情報系の計算に必要な情報を受信した汎用OSが搭載された計算機が実行されている。ここで、仮に、昨今の汎用計算機分野の技術を考慮すると制御プログラムは専用OS上で実行され、情報プログラムは汎用OS上で実行されることで本願発明と類似する構成とすることができると考えられる。このため、同一の計算機に制御プログラムと情報プログラムを共存させる場合、通常、計算機における計算リソース集合(物理的な計算リソースの集合としてのハードウェア)をエミュレートする仮想マシン技術を採用することになる。具体的には、例えば、ハイパバイザが、制御プログラム用に、ゲストOSとして専用OSを搭載した仮想マシンを生成し、情報プログラム用に、ゲストOSとして汎用OSを搭載した仮想マシンを生成し、制御プログラムと情報プログラムが、OSが異なる別々の仮想マシンで実行されることが考えられる。
【0172】
しかし、仮想マシン技術では、仮想マシンにおけるゲストOSの他に、仮想マシンのベースとなるホストOSが存在する。結果として、管理対象が多く、管理が煩雑となることが考えられる。
【0173】
また、計算機に機器が接続されても、当該計算機における全ての制御プログラムや情報プログラムが容易に当該機器を認識できるわけではない。仮想マシン別に、ゲストOSを介して、当該機器を認識するための処理が必要となる。言い換えれば、制御プログラムと情報プログラムがデバイスを共有することが困難である。
【0174】
本願の発明者の考察によれば、汎用OSの系統ではあるものの必要とされるリアルタイム性を提供できるリアルタイム機能を持ったOS(以下、便宜上、「リアルタイム汎用OS」と呼ぶ)が提供されている。
【0175】
このため、リアルタイム汎用OSを、
図8に例示するように、制御プログラム114及び情報プログラム115が共存するOS952として採用することが考えられる。
【0176】
しかし、制御プログラム114及び情報プログラム115がリアルタイム汎用OS上に共存するとなると、制御プログラム114のリアルタイム性の低下が懸念される。具体的には、例えば、リアルタイム汎用OSは、スケジューラを有し、当該スケジューラに割込みが発生するようになっている。スケジューラは、実行すべきリアルタイムタスク(制御プログラム114に対応したタスク)があれば、タスク優先度303に従い当該リアルタイムタスクへ制御を渡し、実行すべきリアルタイムタスクがなければ、通常タスク(例えば情報プログラム115に対応したタスク)へ制御を渡すようになっている。実行すべきリアルタイムタスクがあっても、通常タスクについて所定の処理まで終わらなければ、当該通常タスクは停止されない。このため、リアルタイムタスクの開始が遅れ、結果として、リアルタイム性が損なわれるおそれがある。
【0177】
そこで、制御プログラム114及び情報プログラム115の同一プラットフォームとしてOS952を採用し、且つ、当該環境において、上述した工夫のうちの少なくとも1つ、例えば、下記を採用することにより、リアルタイム性が維持される。
・上述した実行管理テーブル113が設定される。すなわち、制御プログラム114及び情報プログラム115の各々についてリアルタイム性の維持を目的に決定されたパラメータ値が設定される。
【0178】
パラメータ値の設置として、具体的には、例えば、
図3に例示したパラメータ値303~308の組み合わせにより、制御プログラム114及び情報プログラム115が同一OS952上に共存しても、リアルタイム性の維持が図られる。例えば、通常タスクについて所定の処理まで終わらなければ当該通常タスクは停止されないことを考慮してパラメータ値303~308を決定することが行われる。
【0179】
図8のコントロール装置909については、例えば以下の通りである。
【0180】
コントロール装置909の物理リソース集合951上で、OS952が実行される。OS952上でのプログラム実行環境として、コンテナ型仮想化に従うコンテナ953が採用される。すなわち、プログラムが、コンテナ953に設定され、OS952上で、コンテナ953の単位で実行される。コンテナ953としては、例えば、制御コンテナ953Aと情報コンテナ953Bの2種類のコンテナがある。
【0181】
制御コンテナ953Aは、制御プログラム114が格納され実行されるコンテナである。制御プログラム114は、例えば、ソフトウェアPLC系ランタイム961上で実行されて良い。制御プログラム114は、制御系通信を行っても良い。なお、制御系通信はシリアル又はパラレルの有線通信であっても、無線通信であっても良い。
【0182】
情報コンテナ953Bは、情報プログラム115が格納され実行されるコンテナである。少なくとも1つの情報プログラム115は、情報系通信を行うことができる。
【0183】
コントロール装置909で実行されるプログラムとして、上述のプログラム114及び115に加えて、他のプログラム、例えば、Webサーバプログラム956及び実行制御プログラム957がある。Webサーバプログラム956及び実行制御プログラム957は、いずれも、コンテナ953の外で実行されるホストプログラムの一例である。実行制御プログラム957は、コンテナ953の生成又は削除等を行うコンテナエンジンでよい。Webサーバプログラム956及び実行制御プログラム957が実行されることで上述のタスク管理部110が実現されてよい。
【0184】
Webサーバプログラム956は、Webサーバとして機能するためのプログラムである。Webサーバプログラム956が、管理ユーザ計算機151M及び一般ユーザ計算機151Gの各々(クライアント)と通信する。Webサーバプログラム956が、1以上の情報プログラム115のうちの少なくとも1つが格納されるコンテナについて、パラメータ値の設定を受け付けるユーザインターフェースプログラムの一例である。
【0185】
実行制御プログラム957は、コンテナ953におけるプログラムに関して設定されている複数のパラメータ値を基に、コンテナ953(正確には、コンテナ953におけるプログラム)の実行を制御する。
【0186】
以上、本発明者によってなされた発明を発明の実施の形態に基づき具体的に説明したが、本発明は前記発明の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【0187】
なお、本発明は上記した実施の形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【0188】
また、ある実施の形態の構成の一部を他の実施の形態の構成に置き換えることが可能であり、また、ある実施の形態の構成に他の実施の形態の構成を加えることも可能である。
【符号の説明】
【0189】
101……プログラム配布装置、102……プログラム配布部、103……実行管理情報生成部、104……プログラム管理データベース、105……制御プログラム、106……情報プログラム、109……コントロール装置、110……タスク管理部、113……実行管理情報テーブル、114……制御プログラム、115……情報プログラム。