以下、図面について、本発明の実施の形態について説明する。
特に必要なとき以外は同一又は同様な部分の説明を原則として繰り返さない。所定の図に記載された符号について他の図で説明をする場合であっても同一又は同様な部分の説明は省略する。
以下の実施の形態では便宜上その必要があるときは、複数のセクション又は実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部又は全部の変形例、詳細、補足説明などの関係にある。
以下の実施の形態において、要素の数など(個数、数値、量、範囲などを含む)に言及する場合、特に明示した場合及び原理的に明らかに特定の数に限定される場合などを除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良いものとする。
以下の実施の形態において、「インターフェース部」は、1以上のインターフェースを含む。1以上のインターフェースは、1以上の同種のインターフェース装置であっても良いし2以上の異種のインターフェース装置であっても良い。
以下の実施の形態において、「記憶部」は、1以上のメモリを含む。記憶部に関して少なくとも1つのメモリは、揮発性メモリで良い。記憶部は、主に、プロセッサ部による処理の際に使用される。記憶部は、メモリの他に、1以上の不揮発性の記憶装置(例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive))を含んでも良い。
以下の実施の形態において、「プロセッサ部」は、1以上のプロセッサを含む。少なくとも1つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサであるが、GPU(Graphics Processing Unit)のような他種のプロセッサでも良い。1以上のプロセッサの各々は、シングルコアでも良いしマルチコアでも良い。プロセッサは、処理の一部又は全部を行うハードウェア回路を含んでも良い。
以下の実施の形態において、「kkk部」(インターフェース部、記憶部及びプロセッサ部を除く)の表現にて機能を説明することがあるが、機能は、1以上のコンピュータプログラム(後述の制御プログラム及び情報プログラムを除く)がプロセッサ部によって実行されることで実現されても良いし、1以上のハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))によって実現されても良い。プログラムがプロセッサ部によって実行されることで機能が実現される場合、定められた処理が、適宜に記憶部及び/又はインターフェース部等を用いながら行われるため、機能はプロセッサ部の少なくとも一部とされても良い。機能を主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としても良い。プログラムは、プログラムソースからインストールされても良い。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であっても良い。各機能の説明は一例であり、複数の機能が1つの機能にまとめられたり、1つの機能が複数の機能に分割されたりしても良い。
また、以下の説明では、「xxxテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでも良いし、入力に対する出力を発生するニューラルネットワークのような学習モデルでも良い。従って、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されても良いし、2以上のテーブルの全部又は一部が1つのテーブルであっても良い。
以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合及び原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。
コントロール装置は、シーケンス制御装置、モーション制御装置又はプログラマブル・ロジック・コントローラ(PLC)とも呼ばれている。コントロール装置において、ラダー・ロジック(LD言語)、シーケンシャル・ファンクション・チャート(SFC言語)、ファンクション・ブロック(FBD言語)、ストラクチャード・テキスト(ST言語)、インストラクション・リスト(IL言語)のような制御装置特有のプログラミング言語、あるいはC言語のような情報通信分野で使われる汎用的なプログラミング言語を用いて記述され、シーケンス制御やモーション制御に代表される制御処理を実行するプログラムを「制御プログラム」と呼ぶ。制御プログラムは、I/Oモジュール等を介して実際にモータ等を含む周辺機器を操作し、生産システム等を適切に動作させる必要がある。そのため、制御プログラムは、処理を設定された時間内に確実に実行すること(リアルタイム性)が求められる。
制御プログラムは、制御内容が記述された命令によって制御対象装置(例えば、装置部品のようなハードウェアモジュール、1以上のハードウェアモジュールを備えた装置、又は、複数の装置を備えたシステム)を制御する。例えば、「I/Oモジュール等を介して実際にモータ等を含む周辺機器を操作し、生産システムを適切に動作させる」といった制御では、「生産システム」、又は、「生産システムを構成する少なくとも1つの装置」が、「制御対象装置」である。制御対象装置は、典型的には、コントロール装置におけるI/O制御装置(インターフェース部の一例)経由で接続された装置である。制御対象装置は、制御プログラムから直接的に(例えば、コントロール装置に接続されたI/Oモジュールや周辺機器を介さずに)制御されても良いし、制御プログラムから間接的に(例えば、コントロール装置に接続されたI/Oモジュールや周辺機器を介して)制御されても良い。
制御対象装置を制御する言語は、ラダー言語等の制御特有のプログラミング言語に限らず、C言語等の汎用プログラミング言語で記述される場合もあるため、制御対象装置(典型的にはハードウェア)を制御するプログラムを「制御プログラム」と呼ぶ。
ラダー言語等で記述された制御プログラムは、当該ラダー言語等の記述において指定された制御対象装置の状態を読み込み又は書き込み(取得又は更新)をする「スキャン動作」を行う。
このスキャン動作は所定間隔で行う必要があり、この所定間隔を「スキャンタイム」と呼ぶ。スキャンタイムは、制御プログラムの演算時間に関するものであり、制御に関する演算周期又は制御に関する演算を繰り返し所定間隔で行うことから「サイクルタイム」とも呼ばれることもある。
コントロール装置に接続される制御対象装置は、例えば、工場内の生産や搬送等に用いられる装置に接続されるため、スキャン動作が遅れると、工場内の装置等の動作が不安定になったり、予期しない動作が生じたりする場合がある。このため、所定のスキャンタイム内にスキャン動作を行う必要がある。
スキャンタイムはコントロール装置が制御する制御対象装置の数や種類の増加に応じて長くなるが、スキャンタイム内で制御対象装置のスキャン動作をすることが重要である。
コントロール装置に、I/O(Input/Output)ポートが内蔵又は接続される。I/Oポートは、I/Oモジュール又はI/Oユニット等が有する場合がある。以下、I/Oポートそれ自体、又は、I/Oポートを有する装置(I/Oモジュール又はI/Oユニット等)を、「I/Oポート」と総称する場合がある。
I/Oポートは、制御対象装置、例えば、生産設備におけるベルトコンベア、リミットスイッチ、アクチュエータ(例えばモータ)に接続され、制御対象装置の動作に関する制御に使用されるものである。I/Oポートは、デジタル又はアナログのI/Oポートである。例えば、アナログI/Oポートは、コントロール装置の制御対象装置の電圧、電流、温度等の情報の読み書きに使用される。
制御プログラムに基づいてコントロール装置のI/Oポートから送信される制御情報を有線又は無線で受信するインバータユニットやCNC(Computerized Numerical Control)はインバータやCNC自体がアクチュエータのモーション制御を行うため、リアルタイム性が求められる。
また、制御対象装置の制御とは、制御対象装置が接続されている状態のI/Oポートの動作を制御することをいう。つまり、制御プログラムとは、制御対象装置が接続されたI/Oポートの制御を行うプログラム、言い換えれば、制御対象装置が接続されたI/Oポートに当該制御対象装置の制御情報を出力する(具体的には、例えば、当該制御情報の出力を含むスキャン動作を行う)プログラムである。
このようなコントロール装置において、制御対象装置の制御に加えて、情報処理(例えば、複雑な算術演算やSCADA、MES、クラウドシステムとの情報の送受信のような情報通信処理)を行うことを検討する。このような情報処理は、上述の制御特有の言語でプログラミングすることが困難な場合があり、C言語又はJava(登録商標)言語などの情報処理分野で使われるプログラミング言語を用いて記述することがある。このような情報処理を実行するプログラムを「情報プログラム」と呼ぶ。
制御プログラムと情報プログラムの違いの一例について説明する。
上記したように制御プログラムは、コントロール装置のI/Oポートの制御に関係したプログラムであり、情報プログラムは、情報処理(例えば、上述のように、算術演算や、クラウドとの通信)を行うプログラムである。
制御プログラムは、ラダーやST言語等で記述され、java(登録商標)やpython等に代表される汎用言語に比べてリアルタイム性が高い。情報プログラムは、java(登録商標)やpython等に代表される言語で記述され、ラダー等よりも情報処理に適している。
C言語等のリアルタイム性が高く、ハードウェアの制御にも適しており、また、情報処理にも適した言語は制御プログラムと情報プログラムのいずれにも利用可能な場合がある。
また、情報プログラムは、先に説明した制御プログラム以外のプログラム(但し、例えば、後述のタスク管理部110、制御プログラム実行部111、情報プログラム実行部112及びI/O制御部117を実現するための1以上のプログラムを除く)である。制御対象装置がI/Oポートを介してコントロール装置に接続されるが、情報プログラムは、制御対象装置に接続されるアナログやデジタルのI/Oポート(但し、情報プログラムとの共有が許容されているI/Oポートを除く)へアクセスしないプログラムである。別の言い方をすれば、制御プログラムは、制御対象装置に接続されるアナログやデジタルのI/Oポートに制御対象装置の制御情報を送信することを含むスキャン動作を行うプログラムであるが。一方、情報プログラムは、スキャン動作を含まない(スキャン動作とは異なる)情報処理を行うプログラム(つまり、スキャン動作を行うことがないプログラム)である。
制御プログラムと情報プログラムを搭載する以下の実施の形態に係るコントロール装置は、制御プログラムの他に情報プログラムを実行しても、制御プログラムを停止させることなく、又は、制御プログラムのスキャン動作を遅らせたり、制御プログラムの予期しない動作をさせたりすることなく、情報プログラムの追加、削除、更新(書き換え)又は入れ替えといったプログラム変更を行うことを実現するものである。
[第1の実施の形態]
第1の実施の形態について説明する。
図1は、第1の実施の形態に係るコントロール装置を含むシステムのハードウェア構成例を示すブロック図である。
プログラム配布装置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の少なくとも一部が一体であっても良い。
管理ユーザ計算機151Mは、少なくとも管理ユーザが操作する計算機である。一般ユーザ計算機151Gは、少なくとも一般ユーザが操作する計算機である。いずれの計算機も、プログラム配布装置101及びコントロール装置109の少なくとも1つに対する入出力コンソールとして機能する。具体的には、例えば、いずれの計算機も、キーボード及びポインティングデバイスのような入力デバイスと、表示デバイスのような出力デバイスとを有する。「管理ユーザ」は、制御プログラムを記述するユーザ(例えば、自動機械や生産設備といった制御対象に関して深い知識を有する技術者)であり、「一般ユーザ」は、情報プログラムを記述するユーザ(例えば、制御対象に関して深い知識を持たない一般的なシステムエンジニア)である。コントロール装置109が、管理ユーザ計算機151M及び一般ユーザ計算機151Gのうちの少なくとも1つから制御プログラム及び情報プログラムの少なくとも1つについての記述(パラメータ群の設定を含む)を受け付けても良いし、コントロール装置109に代えて又は加えて、プログラム配布装置101が、当該記述を受け付けても良い。以下、管理ユーザ及び一般ユーザを「ユーザ」と総称することがある。ユーザは、管理ユーザ及び一般ユーザのいずれかに代えて、システム管理者(例えば、プログラム配布装置101とコントロール装置109で構成されたシステムであるコントロールシステムの管理者)といった別種のユーザであってもよい。
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は、制御プログラムと情報プログラムに共有のデバイスであっても良い。
プログラム配布装置101は、制御プログラム及び情報プログラムを管理している。プログラム配布装置101は、EPROM201、CPU202、メインメモリ203、周辺制御装置205、不揮発性記憶装置206及びネットワークインターフェース(図示のネットワークI/Fに相当)207を備える。プログラム配布装置101は、ネットワークインターフェース207を介して情報ネットワーク108に接続されている。
プログラム配布装置101は、周辺制御装置205の制御によって情報ネットワーク108を経由してコントロール装置109に対して制御プログラムを提供したり情報プログラムを提供したりする。このプログラム配布装置101では、CPU202の制御によって、不揮発性記憶装置206に予め格納されている制御プログラム及び情報プログラムを要求に応じて提供する。
周辺制御装置205は、バス204を介してEPROM201、CPU202及びメインメモリ203に接続されている。CPU202は、EPROM201に予め格納されている管理プログラムをメインメモリ203上に読み出して実行し、この管理プログラムによって上記制御プログラム及び情報プログラムを管理している。
この管理プログラムは、要求に応じて逐次、上述した制御プログラム及び情報プログラムのうち少なくとも一方のプログラムを提供する。この管理プログラムがCPU202によって実行されることにより、後述するプログラム配布部102及び実行管理生成部103が実現される。
一方、コントロール装置109は、EPROM208、CPU209、メインメモリ210、周辺制御装置212、I/O制御装置214、不揮発性記憶装置215及びネットワークインターフェース(図示のネットワークI/Fに相当)213を備えている。I/O制御装置214及びネットワークI/F213が、インターフェース部の一例である。EPROM208、メインメモリ210及び不揮発性記憶装置215が、記憶部の一例である。CPU209及び周辺制御装置212がプロセッサ部の一例である。コントロール装置109では、プログラム配布装置101から提供される制御プログラム及び情報プログラムが同一のプラットフォーム上で共存しつつ動作する。
周辺制御装置212は、ネットワークI/F213、I/O制御装置214、不揮発性記憶装置215及びバス211に接続されている。このバス211には、その他にもEPROM208、CPU209及びメインメモリ210が接続されている。
EPROM208には、初期状態で予めコントロール装置109に用意されている制御プログラム及び情報プログラムが格納されている。CPU209は、複数のコアを備えており、各コアを独立させて動作させることができる。
コントロール装置109に搭載される制御プログラムと情報プログラムはそれぞれひとつずつだけでなく、コントロール装置109が使用できるリソースをプログラムごとに設定することにより、複数の制御プログラム及び/又は複数の情報プログラムを搭載することができる。
CPU209は、EPROM208に予め格納されている制御プログラム及び情報プログラムをメインメモリ210に読み出して実行し、これら制御プログラム及び情報プログラムの動作を制御する。
すなわち、これらの制御プログラム及び情報プログラムが読み出されて実行されると、後述する図2の制御プログラム114及び情報プログラム115となる。
制御プログラム114と情報プログラム115は異なる役割を有する。
制御プログラム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ポートを制御する命令を送信する。
一方、情報プログラム115は、I/O制御装置214等の情報を取得し、演算し、演算した結果を、ネットワークI/F213を介して、コントロール装置109に接続されている他の装置又は設備に送信する。この段落で言う「他の装置又は設備」は、コントロール装置109に接続されているが制御プログラム114の制御対象装置とは異なる装置又は設備である。
コントロール装置109は、制御プログラム114と情報プログラム115の両者がアクセスできる共有領域(図示しない)を有することができる。この共有領域は、メインメモリ210及び不揮発性記憶装置215に確保されて良い。共有領域は、例えば、共有ディレクトリといった論理的な記憶領域でもよいし、物理アドレス(例えばメモリアドレス)で指定された物理的な記憶領域でもよい。例えば、制御プログラム114が、情報プログラム115に見せてもよいデータの値を共有領域に読み書きするタスクを生成し、当該タスクが実行されることで、情報プログラムから、当該共有領域内のデータの値にアクセス可能になって良い。「見せてもよいデータの値」とは、広義には、1以上の情報プログラム115と共有する情報である共有情報である。共有情報は、例えば、I/Oポートの状態を示す(又は、I/Oポートに関して他種の情報を含んだ)ポート情報や、制御プログラムの内部変数等に関する制御プログラム情報が挙げられる。共有領域は、例えば、後述のタスク管理部110により設けられてもよいし、同一の共有領域にアクセスする制御プログラム114及び情報プログラム115の少なくとも1つにより設けられてもよい。
このように、情報プログラム115が、制御プログラム114の制御対象装置が接続されたI/Oポートに直接アクセスすることを防止できるため安全性が向上する。言い換えれば、情報プログラム115が、制御プログラム114の制御対象装置が接続されたI/Oポートに直接アクセスすることに代えて、共有領域内の共有情報を参照することで、I/Oポートの状態、又は、制御プログラム114の状態を知ることができる。
また、情報プログラム115は、ネットワークI/F213を介して接続されているが制御プログラム114の制御対象装置ではない設備又は装置から情報を受信しても良い。情報プログラム115は、この受信した情報等を演算し、ネットワークI/F213を介して他の装置又は設備と通信することができる。
CPU209は、周辺制御装置212を制御してネットワークI/F213を介してプログラム配布装置101からの制御プログラム及び情報プログラムのダウンロードを制御する。
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の操作が可能となっている。
図2は、第1の実施の形態に係るコントロール装置を含むシステムの機能的な概略構成例を示すブロック図である。
プログラム配布装置101は、プログラム管理データベース(図示のプログラム管理DBに相当)104、プログラム配布部102及び実行管理生成部103を備えている。プログラム管理DB104は、メインメモリ203及び不揮発性記憶装置206の少なくとも一部に基づく。これらプログラム配布部102及び実行管理生成部103は、既述の管理プログラムがCPU202に実行されることにより実現される。
プログラム管理データベース104は、制御プログラム105及び情報プログラム106を管理する。実行管理生成部103は、制御プログラム105及び情報プログラム106のうち少なくとも一方のプログラムがコントロール装置109において実行される際のパラメータを表す実行管理データを生成する。この実行管理データは、例えば、制御プログラム105及び情報プログラム106の各タスクの優先度、及び、制御プログラム105及び情報プログラム106ごとに使用可能な上限記憶容量のような1以上のパラメータである。
プログラム配布部102は、要求に応じて上記少なくとも一方のプログラムを提供する際に併せて上記少なくとも一方のプログラムに対応するパラメータ値を示す実行管理データを提供する。
コントロール装置109は、シーケンス制御装置、モーション制御装置、又はプログラマブル・ロジック・コントローラ(PLC)とも呼ばれることがある。ラダー・ロジック(LD言語)、シーケンシャル・ファンクション・チャート(SFC言語)、ファンクション・ブロック(FBD言語)、ストラクチャード・テキスト(ST言語)、インストラクション・リスト(IL言語)のような制御特有のプログラミング言語で制御内容が記述される。また、場合により、C言語等の汎用プログラミング言語での記述が、ラダー言語等での記述の一部又は全部に差し替えられても良い。
このようなコントロール装置109に接続される制御対象を制御する制御プログラム105(114)は、ラダー言語を代表とする制御特有のプログラミング言語を用いることが有効である。ラダーの表示が可能であり、制御対象の状態の監視等に有効である。
一方、情報プログラム106(115)は、このようなコントロール装置109における情報処理(例えば、複雑な算術演算や、SCADA、MES、クラウドシステムとの情報の送受信のような情報通信処理)に有効である。
このような情報処理は、制御特有の言語でプログラミングすることが困難な場合があり、いわゆるC言語又はJava(登録商標)言語などの情報通信分野で使われるプログラミング言語を用いて記述する場合がある。
プログラム管理データベース104は、上述した制御内容を実行する機能を有する制御プログラム105、及び、上述した情報処理を実行する機能を有する情報プログラム106を管理している。
コントロール装置109は、タスク管理部110、制御プログラム実行部111、情報プログラム実行部112、実行管理テーブル113及びI/O制御部117を備えている。
制御プログラム実行部111は、例えばランタイムライブラリであり、制御プログラム114からの呼び出しに応じて制御プログラム114とともに動作する。情報プログラム実行部112は、例えばいわゆるライブラリであり、情報プログラム115からの呼び出しに応じて情報プログラム115とともに動作する。
なお、制御プログラム114は、プログラム配布装置101からコントロール装置109に配布済みの制御プログラム105(又は当該制御プログラム105の実行に伴い生成された1以上のタスク)に相当し、情報プログラム115は、プログラム配布装置101からコントロール装置109に配布済みの情報プログラム106(又は当該情報プログラム106の実行に伴い生成された1以上のタスク)に相当する。
実行管理テーブル113は、プログラム配布装置101から提供された上記少なくとも一方のプログラムとともに受け取った上記実行管理データが保存される。
一方、タスク管理部110は、主として2つの機能、具体的には、プログラム受信機能及びプログラム実行管理機能を有する。プログラム受信機能は、要求に応じてプログラム配布装置101から提供される上記少なくとも一方のプログラムを受信する機能である。一方、プログラム実行管理機能は、上記少なくとも一方のプログラムを実行する際に、実行管理テーブル113に保存された実行管理データに基づいて上記少なくとも一方のプログラムの実行を制御する機能である。
I/O制御部117は、制御プログラム114からの制御情報を当該制御情報の送信先に転送する。
上述したようにコントロール装置109は、制御プログラム114及び情報プログラム115の各タスクが使用する所定の記憶容量の記憶領域を有するメインメモリ210を備える。
ここで、プログラム配布装置101では、実行管理生成部103が、実行管理データとして少なくとも、制御プログラム105及び情報プログラム106の各タスクの優先度、及び、制御プログラム105及び情報プログラム106の各タスクによって使用可能なメインメモリ210の上限記憶容量の少なくとも一方のパラメータ値を示す実行管理データを生成する。
図3は、図2に示す実行管理テーブル113のテーブル構成例を示す。
実行管理テーブル113は、制御プログラム114及び情報プログラム115の各々について、エントリを有する。各エントリは、例えば、プログラム名301、プログラム種別302、タスク優先度303、実行周期304、メモリ上限305、CPUコア番号306、利用デバイス307及び専有デバイス308といった情報を格納する。以下、1つのプログラムを例に取る(図3の説明において「対象プログラム」)。
プログラム名301は、対象プログラムの名称を表している。プログラム種別302は、対象プログラムが制御プログラム114であるか情報プログラム115であるかというプログラムの種別を表している。なお、上述したプログラム名301の先頭3文字においても、制御プログラム114であるか情報プログラム115であるかを識別可能である。「CTL」は制御プログラム114を表しており、「ICT」は情報プログラム115を表している。以下、制御プログラム114及び情報プログラム115の各々を、プログラム名で表現することがある。
タスク優先度303は、対象プログラムに対応するタスクの優先度を表している。タスク優先度303では、例えば「0(優先度:高)」から「20(優先度:低)」までの間で優先度が設定可能である。つまり、タスク優先度303としての値が小さいほど優先度が高い。
実行周期304は、対象プログラムにおける定常処理が実行される周期を表している。「実行周期」とはスキャンタイムである。図示の例によれば、CTL001のスキャンタイムが10msecであり、CTL002のスキャンタイムは1msecでる。スキャン動作は、制御プログラム114及び情報プログラム115のうちの制御プログラム114に特有の動作であるため、実行周期304は、制御プログラム114について有効な値であるが、情報プログラム115については無効な値である。実行周期304(スキャンタイム)は、エンジニアリングツールでシミュレーションによって特定された値、又は、実際にコントロール装置109にて制御プログラム114を実行することにより特定されたスキャンタイムであっても良い。
メモリ上限305は、対象プログラムがメインメモリ203の記憶領域において使用可能な記憶容量の上限を表している。
CPUコア番号306は、コントロール装置109のCPU209に搭載されている複数のコアのうちの対象プログラムに割り当てるコアの番号を表している。
利用デバイス307は、対象プログラムが利用可能なデバイスである利用デバイス、具体的には、対象プログラムが利用可能なI/Oモジュール119(I/Oモジュール119に接続されている利用可能な周辺機器120)を表している。
専有デバイス308は、対象プログラムに対応した利用デバイス307が表す1以上の利用デバイス(I/Oモジュール119)のうち対象プログラムに専有されるデバイスである専有デバイス(すなわち、対象プログラムが他の制御プログラム114又は情報プログラム115と共有不可のI/Oモジュール119)を表す。
図示の例によれば、例えば、下記のことが言える。
CTL001は、制御プログラムである。CTL001について、例えば次の通りである。すなわち、タスク優先度は、CTL002よりも低く設定されている。また、メモリ上限は16MBであり、使用するCPUコアの番号は0である。利用デバイスはDI1とDO1(コントロール装置のデジタル入力1とデジタル出力1)である。
DI1とDO1を、他のプログラムが使用しないようにCTL001が専有して利用するように設定されている。コントロール装置において、専有デバイス(専有デバイス308として設定されたデバイス)が複数のプログラム間で共有されないため、専有デバイス(ここではDI1とDO1)に関係する制御が不安定になることを防止することができる。
また、CTL002は、利用デバイスがeth1、eth2、シリアル1である制御プログラム、具体的には、Ethernet(登録商標)のポートを2つ、RS-232Cのポートを1つ利用する制御プログラムである。また、CTL001よりもCTL002の方がリアルタイム性が高いため、タスク優先度は、CTL001よりも高い。
CTL002は、eth2が例えばモーション制御に利用されるデバイスである場合を示す。モーション制御はリアルタイム性が高く他の処理も優先されるため、4つのプログラムの中で最も優先度が高く設定されている。
また、CTL002が使用するCPUコアの番号は1であり、CTL001とICT001とICT006の使用するCPUコアの番号が0であることから、CTL002は、番号が1のCPUコアを専有する。
CTL002は、タスク優先度303に規定される優先度のみならず、CPU209が有する複数のコアのうち番号1のコアを専有する観点からも、優先度が高いことがわかる。このような設定を行うことで、CTL002が制御プログラムの中でも優先度を高い状態とすることができる。
次に、メモリ上限305について説明する。
メモリ上限が設定されない場合には、実際に演算を行う際に各プログラムが際限なくメモリを確保し使用することが可能となる。例えば、情報プログラムが使用できるメモリ上限が設定されない場合には、制御プログラムが使用する可能性があるが確保されていない領域を情報プログラムが確保する場合がある。しかし、例えば、大量にメモリを使用するプログラムを追加した場合、当該プログラムの追加に伴いシステム全体のメモリを使い切ってしまうような場合が起こりうる。このような場合、コントロール装置又はOSがダウンすることで制御プログラムの動作が停止したり、OSによる強制的なメモリ開放機能の発動により制御プログラムの処理が妨げられスキャンタイム内にスキャン動作を完了できなくなったりといったような場合がある。
そこで、本実施の形態では、メモリ上限305の合計値をコントロール装置のシステム全体で利用できる値以下とすることでコントロール装置等のダウンを防止することができる。
なお、システム全体で利用できる値は、コントロール装置に搭載されたメモリからOS等で使用された部分を除いた値であることが望ましい。OS等の領域に制御又は情報プログラムの処理が影響を与えないようにするためである。
また、プログラムごとにメモリ上限305の値を設定することにより、もしあるプログラムに想定以上のメモリを使用してしまう不具合があった場合には、当該プログラムのみが停止し他のプログラムに影響を与える事を防止できる。
次に、タスク優先度303について説明する。
タスク優先度は、各プログラムが実行させる場合の優先度である。各プログラムにタスク優先度を設定することにより、OSのスケジューラ等にプログラムへのCPU割当ての優先順位を認識させることができる。
複数のプログラムを、明示的にタスク優先度を設定せずに実行すると、あらかじめOSのスケジューラが有するルールにしたがってCPU割当てのようなリソース割り当てが行われる。例えば、複数のプログラムに平等にCPUの割当てが行われるようなスケジューリングが行われる。
このようなスケジューリングは、制御プログラムのようなスキャンタイム内に確実に処理を終えることが重要であるプログラムの場合、他のプログラムの動作によってスキャンタイム内に処理を終えることができなくなるなど、制御プログラムの動作に影響を及ぼす場合がある。
例えば、第1のプログラムの処理実行(CPU割当て)中に、タイマ割込み等により第1のプログラムよりも相対的にタスク優先度の高い第2のタスクの処理開始要求が発行されると、第1のプログラムの処理が中断されて第2のプログラムの処理が開始される。その後第2のプログラムがSleep等によりCPUの割当てを終了すると第1のプログラムの処理が再開される。
また、例えば、第1のプログラムの処理実行(CPU割当て)中に、タイマ割込み等により第1のプログラムよりも相対的にタスク優先度の低い第3のタスクの処理開始要求が発行されると、第1のプログラムがSleep等によりCPUの割当てを終了するまで第3のプログラムの処理開始が待たされる。
したがって、タスク優先度303を設定することで、より優先度の高いプログラムの処理を優先して行うことができる。
これにより、ユーザがより重要性が高いと判断したプログラムを優先して処理させることができる。情報プログラムをコントロール装置で処理し、情報プログラムが複雑な計算を行う場合であっても、制御プログラムに影響を与えないようにすることができる。
ICT001とICT002は、実行周期304であるスキャンタイムが設定されていないが、制御プログラムに比べて情報プログラムのタスク優先度が低いため、制御プログラムの計算にCPUコアを利用していない時間(例えば、空いている時間)に情報プログラムの処理を行うことができる。これにより、制御プログラムの処理に影響を与えることなく情報プログラムを処理することができる。
ICT001とICT002は、利用デバイスがeth1であり、eth1は専有設定されていない。そのため、eth1のポートについては、ICT001とICT002が共有して利用可能である。
ICT001とICT006がeth1を同時に使用しようとした場合には、タスク優先度303が高いICT001が先にeth1を使用する。ICT001がeth1の使用を終了した際に、タスク優先度303が高いICT006がeth1を使用することが可能となる。このように、プログラムそれぞれがタスク優先度に応じた処理が可能となる。
図4は、コントロール装置109がプログラム配布装置101から所望のプログラムをダウンロードするプログラムダウンロード処理の一例を示すフローチャートである。
まず、プログラム配布装置101では、図示しない操作画面を用いたユーザの操作に応じて、ダウンロードすべきプログラムが選択される(ステップS401)。これにより、プログラム配布部102は、対応する特定のプログラムをプログラム管理データベース104において特定する。
次にプログラム配布装置101では、操作画面においてユーザの操作に応じて上記特定のプログラムについて実行管理データが設定される(ステップS402)。この実行管理データには、例えば図3に示すようにタスク優先度303が含められている。
これにより、実行管理生成部103は、ユーザの入力内容に応じて上記特定のプログラムの動作態様に関するパラメータとして、例えば、各プログラムの各タスクが実行される際の優先度、及び、各タスクが使用可能なメインメモリ210内の上限記憶容量の少なくとも一方のパラメータを設定することができる。
以下、一例として主として優先度を取り上げて説明する。以上までが、プログラム配布装置101における処理を表しており、これ以降はコントロール装置109における処理を表している。
プログラム配布装置101は、コントロール装置109の要求に応じて、上記特定のプログラム及びこれに対応付けられた実行管理データをコントロール装置109にダウンロードする(ステップS403)。
次にコントロール装置109では、タスク管理部110が、上記ダウンロードされた上記特定のプログラムを受信する(既述のプログラム受信機能に相当)。タスク管理部110は、受信が完了すると、上記特定のプログラムが制御プログラムである場合には制御プログラム114としてメインメモリ210に保存する(ステップS404)。
次にコントロール装置109では、タスク管理部110が上記特定のプログラムとともにダウンロードした実行管理データを実行管理テーブル113に追記する(既述のプログラム実行管理機能に相当)(ステップS405)。
図5は、プログラム実行処理の一例を示すフローチャートである。このプログラム実行処理は、コントロール装置109において上記特定のプログラムが実行される場合の処理内容を表している。
タスク管理部110は、ある所定のプログラムを新たに実行しようとした際、実行管理テーブル113から当該所定のプログラムに対応する実行管理データを読み出す(ステップS501)。
当該所定のプログラムに対応する実行管理データとしては、実行管理テーブル113における優先度303において管理している当該所定のプログラムの各タスクが実行される際における優先度を含む。
次にタスク管理部110は、当該読み出された実行管理データに基づいて当該所定のプログラムのパラメータとして、例えば、当該所定のプログラム(制御プログラム105及び情報プログラム106の少なくとも一方のプログラム)の各タスクの優先度を設定したり、各タスクが使用可能なメインメモリ210の上限記憶容量を設定又は特定したりする(ステップS502)。
タスク管理部110は、このような優先度を所定のコマンドを用いて設定する。一方、タスク管理部110は、上述した上限記憶容量を設定する。
以上のような実施の形態によれば、同一プラットフォーム(つまりコントロール装置109)に共存する制御プログラム114及び情報プログラム115が当該プラットフォーム上でそれぞれ対応するパラメータに応じて動作するようになる。タスク管理部110が、制御プログラム114及び情報プログラム115を、当該プログラム114及び115の各々のタスク優先度などのパラメータ値を基に制御プログラム実行部111及び情報プログラム実行部112を制御することで、当該プログラム114及び115の各々の実行を制御する(ステップS503)。
この場合は、情報プログラム115であるICT001とICT002が所定のリソースで動作する。また、制御プログラム114であるCTL001とCTL002が所定のリソースでICT001とICT002よりも高い優先度で動作する。
実行管理テーブル113を適宜変更することによって、制御プログラム114及び情報プログラム115は、互いに、例えばタスクの追加、更新又は削除のような機能変更に際し、他のプログラムが動作したまま、一部の制御プログラム114又は情報プログラム115を変更することができる。
また、情報プログラム115は、所定のリソースが確保された場合であって、他のプログラムとの影響がない場合には再コンパイルや再ダウンロードを必要とせず実行管理テーブル113を変更しても動作させることができる(再コンパイルや再ダウンロードが必要となる一比較例については後述する)。
このため、制御プログラム114及び情報プログラム115の各タスクの追加、更新及び削除のいずれの機能的な変更も行い易くなるため、コントロール装置109は柔軟な機能変更を可能とする。
[第2の実施の形態]
第2の実施の形態について説明する。その際、第1の実施の形態と異なる点を中心として説明し、第1の実施の形態と共通する点については説明を省略又は簡略する。
第2の実施の形態では、上述した操作画面(図示せず)に、図3に示す実行管理テーブル113に基づいて、上述した各プログラムが使用可能なメインメモリ210の上限記憶容量に応じて導き出される残りリソース、例えば、各プログラムが使用可能なメインメモリ210の残容量が表示される。
プログラム配布装置101では、上述した操作画面において所定の操作に応じて、例えば残りリソースなどが選択されると、当該残りリソースを含むパラメータ値を示す実行管理データを、選択されたプログラムとともにコントロール装置109にダウンロードする。
コントロール装置109では、タスク管理部110が、当該選択されたプログラムとともに上記実行管理データを受け取り、この実行管理データを実行管理テーブル113に登録する。
当該選択されたプログラムが制御プログラム114であれば、制御プログラム実行部111が、上記実行管理データに基づく残りリソースをパラメータ値として、当該選択されたプログラムである制御プログラム114を実行する。
一方、当該選択されたプログラムが情報プログラム115であれば、情報プログラム実行部112が、上記実行管理データに基づく残りリソースをパラメータ値として、当該選択されたプログラムである情報プログラム115を実行する。
以上のような構成とすると、第1の実施の形態と同様な効果を得ることができるとともに、さらに、そのような各タスクが使用可能なメインメモリ210の残りリソースに接したユーザが適切な情報に基づいてダウンロード設定を行うことができるとともに、上述した選択されたプログラムが既存のプログラムに影響を与えないようにすることができる。
[幾つかの変形例]
次に、変型例について説明する。上述した第1及び第2の実施の形態のうちの少なくとも1つでは、次のような変型例のうちの少なくとも1つを採用することができる。
第1の変型例としては、例えばハイパバイザ等を利用してOS層から分けるようにしても良い。
第2の変形例としては、各種プログラムの処理をシーケンシャルに行うことに代えて、処理結果に矛盾が生じない限り、処理の順序を入れ替え又は並行動作するように構成しても良い。
第3の変形例としては、図6A及び図6Bに示す例がある。すなわち、制御プログラムの動作中に情報プログラムが変更される。具体的には、例えば、図6Aが示すように、CTL007とITL008についてCPUコア番号306が共通している。これは、制御プログラムであるCTL007の動作中に、情報プログラムであるITL008の実行のために同一コアが使用され得ること、つまり、タスク優先度303や利用デバイス307が違うもののCTL007の処理がITL008の影響を受け得ることを示している。
ITL008は、情報プログラムであるため、制御プログラムの実行中に変更可能なプログラムである。コントロール装置109が有するITL008を削除した後に、ITL009をコントロール装置109に転送する。転送はプログラム配布装置101等により行われる。これにより、ITL008をITL009に変更することができる。
[上記説明の概念の一例]
上記説明の概念の一例を説明するならば、次の通りである。物理的に(直接的だけでなく、ネットワークを通じて間接的に接続される場合も含む。)接続された制御対象装置ハードウェアのI/Oポートにアクセスすることによりハードウェアの動作を制御するコントロール装置であって、I/Oポートの情報を読み込み制御プログラムと情報プログラムがアクセス可能な共有領域に格納する格納手段と、制御プログラムは、I/Oポート又は格納されたI/Oポートの情報を取得し、I/Oポートに当該I/Oポートに接続された装置の制御情報を出力し、情報プログラムは、格納されたI/Oポートの情報を取得し、取得したI/Oポートの情報を演算することによって処理情報を特定することを特徴とするコントロール装置である。
[総括、及び、より具体的な実施の形態の一例]
以下の説明は、これまでの説明の総括と、より具体的な実施の形態の一例とを含む。言い換えれば、以下の説明は、これまでの説明の重複部分と、これまでの説明に無い事項とのいずれを含んでもよい。
制御対象装置の制御に必要な情報(例えば、センサによる測定値)を取得するための通信を制御プログラムによる制御の一部とすること(すなわち、通信について制御プログラムに記述されていること)が考えられるが、通信のような情報処理は制御プログラムによる制御とは分離しておくことが望ましいと考えられる。そのように考えられる1つの理由は、コントロール装置の制御対象装置は、一般に、工作機械、自動組み立て装置又は自動搬送装置のような自動機械や生産設備であるため、高い安定性、つまりリアルタイム性が求められるためである。
そこで、制御プログラムに加えて、通信のような情報処理について記述されたプログラムである情報プログラムを用意しておくことが考えられる。リアルタイム性を維持するために制御プログラムを優先するべく、情報プログラムをコントロール装置とは別の装置で実行することが考えられるが、資源節約の観点から、制御プログラムと情報プログラムの両方をコントロール装置のような同一プラットフォーム上で実行することが考えられる。この場合、制御プログラムと情報プログラムがコントロール装置内に適切に共存することが求められる。
しかし、上述した特許文献1及び2は、既に述べた理由から、制御プログラムと情報プログラムの適切な共存のための技術を開示も示唆もしていない。
同一のプラットフォーム上で、1以上の制御プログラム114と1以上の情報プログラム115とを含んだ複数のプログラムが実行される。「同一のプラットフォーム」とは、上述の説明によればコントロール装置109である。
1以上の制御プログラムの各々は、当該制御プログラムにとっての制御対象装置の制御のためのスキャン動作を行うプログラムである。一方、1以上の情報プログラムの各々は、スキャン動作を含まない情報処理を行うプログラムである。
下記に例示する少なくとも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を変更することが期待できる。
例えば、複数のプログラム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つを含む。
タスク優先度303のようなプログラム優先度というパラメータ値があることで、制御プログラム114に求められるリアルタイム性の維持を優先した処理が可能である。例えば、計算リソースの節約の観点から、CPUコア、メモリ領域及びI/Oポートといった少なくとも1つの計算リソースを共有デバイスとすること、具体的には、制御プログラム114と情報プログラム115が共有することが考えられる。タスク優先度303の設定により、制御プログラム114と情報プログラム115が計算リソースを共有しても、制御プログラム114のリアルタイム性を損なわないよう情報プログラム115を実行することができる。
メモリ上限305のようなリソース上限があることでも、制御プログラム114に求められるリアルタイム性の維持を優先した処理が可能である。例えば、情報プログラム115が再現なくメモリ量を使用した後で停止した場合にはメモリ量解放の処理が走ることになるが、この処理は、制御プログラム114よりも優先して行われることが考えられる。メモリ量を解放しないことには制御プログラム114が適切な処理を行うことができないことが考えられるためである。しかし、そうなると、制御プログラム114に求められるリアルタイム性が損なわれてしまう。このようなことを回避するために、リソース上限は有用である。
制御プログラム114及び情報プログラム115の各々について、専有/共有デバイスという設定は、2以上のパラメータ値の組合せの設定であってよい。専有デバイスが設定されることで、安定した性能、例えば、リアルタイム性の維持が期待できる。共有デバイスが設定されることで、計算リソースを節約しつつ柔軟な処理が期待できる。
例えば、図7に例示する設定範囲テーブル700が用意されてよい。図6Aと図6Bで説明した例とは異なる設定方法を示す。また、図8Aと図8Bに示されるCPUコア、メモリ上限、LANポートは、それぞれ図7のデフォルト値703と設定値704の値に対応する情報プログラム115が利用できるリソースを示す図である。すなわち、図8Aは制御プログラム114がCPUコア1から4を専有しているが、3から4は未だ利用しておらず、5から8は情報プログラム115が専有する状態を示す。
またメモリは、制御プログラム114と情報プログラム115がそれぞれ最大128MB使用できる。次に、制御プログラム114がLAN1と2を情報プログラム115がLAN4を専有し、これらのプログラムがLAN3を共有することを示す。図8Bには、図7に示す設定値704の値に対応するリソースが示される。設定範囲テーブル700は、ユーザが使用する計算機(例えば、管理ユーザ計算機151M)からプログラム配布装置101経由又は非経由でコントロール装置109に格納されてよい。設定範囲テーブル700は、情報プログラム115に関するパラメータ値の範囲を定めたテーブルであり、複数のパラメータ項目(例えば、図3に例示したようなパラメータ項目303~308のうちの少なくとも1つと同じパラメータ項目を含んだ複数のパラメータ項目)の各々について、属性701、設定可能範囲702及びデフォルト値703といった情報を格納する。以下、1つのパラメータ項目を例に取る(図7の説明において「対象パラメータ項目」)。設定値704はデフォルト値703を用いない場合に設定される値である。設定値704の一部が入力または設定された場合に、入力又は設定されていない値はデフォルト値703の値を用いるとよい。これにより、ユーザは情報プログラム115を利用する際に、すべての項目または一部の項目を設定せずとも情報プログラム115を実行させることができる。図7に示すように表示手段に表示し、入力手段によって入力してもよいし、別途設定値704だけを設定してもよい。
次に、図8Cについて説明する。図8Cは図8Aの設定を変更した状態を示す。図8Cには、CPUコア1と2を制御プログラム114が専有し、CPUコア7と8を情報プログラム115が専有し、CPUコア3から5を共有する場合が示されている。共有されるCPUコアは、それぞれのプログラム114と115の計算処理が足りない場合に利用することができる。また、タスク優先度に応じて使用量を変更することもできる。
共有されるCPUコアは破線の境界線を用いると図8Bとの違いがユーザに明確に示され便利であるが、当該違いの表現として他の表現が採用されてもよい。例えば、専有、共有それぞれの背景色を変更する、または、それぞれ異なるハッチング処理を施す等が採用されてもよい。メモリの設定は、図8Bと同様のため説明を省略する。LANポートは、LAN1を制御プログラム114が専有し、LAN3を情報プログラム115が専有し、LAN2と4を制御プログラム114と情報プログラム115が共有する。
属性701は、いずれかの情報プログラム115について対象パラメータ項目に対応したパラメータ値を変更するといずれかの制御プログラム114の実行(動作)へ悪影響が出る可能性があるか否かを表す。“A:設定注意”が、悪影響が出る可能性があることを意味する。“B:自由に設定可能”が、悪影響が出ないことを意味する。属性701を示すことにより、ユーザは悪影響が出ない項目を容易に知ることができる。
設定可能範囲702は、対象パラメータ項目について情報プログラム115に関し設定可能なパラメータ値の範囲を表す。当該範囲内でパラメータ値を調整可能である。少なくとも1つのパラメータ項目について、設定可能範囲702は、個々の情報プログラム115についての値を表していてもよいが、図7の例では、いずれのパラメータ項目についても、全ての情報プログラム115の合計としての値を表す。例えば、パラメータ項目“CPUコア数”は、情報プログラム115がCPUコア2から8のうちどのコアを使用するかを設定できるが、特に設定しない場合には、デフォルト値703に記載されるようにCPUコア4-8を使用する。“メモリ上限”に対応した設定可能範囲702は、全ての情報プログラム115についてのメモリ量合計の上限の範囲である。図8Bに示す例では、情報プログラム115は、16から256MBまで設定可能であるが、設定値704が設定されていない場合はデフォルト値703の値である128MB使用し、設定値704を160MBと設定した場合には160MB使用することができる。これにより、図8Aに示す例では、情報プログラム115はメモリを十分に利用できるため、情報プログラム115の動作をより安定させることができる。
なお、少なくとも1つのパラメータ項目について、設定可能範囲702が、自動で設定又は変更されてよい。自動で設定される際には、制御プログラム114がデバイスのリソースや専有または共有する情報を参考に設定することができる。例えば、タスク管理部110が、制御プログラム114の使用リソースを基に、情報プログラム115についての設定可能範囲702を自動で設定又は変更してよい。例えば、制御プログラム114がLANポートのうちLAN1とLAN2を専有し、LAN3を共有する場合には、利用可能LANポートの設定可能範囲702をLAN3,LAN4とし、専有LANの設定可能範囲702をLAN4とするとよい。この場合は、LAN3を情報プログラム115が専有するように設定すると、制御プログラム114が使用できなくなるため、属性701には設定注意と記載される。なお、利用可能LANポートの設定可能範囲702をLAN4のみに設定すると、専有LANポートの設定可能範囲702はLAN4のみとなる。これは、利用できないLANポートを自動的に専有できない設定に変更することを意味する。
また、パラメータ項目“ルーティング方式”は、図9に例示するOS共通実装において採用される。例えば、後述の図9を参照していえば、“Masquerade”は、コンテナ953(実行環境の一例)がコントロール装置909の外から通信を受け付けないことを意味する。“Port forward”は、コントロール装置909の外からの通信のうち、あるポートに対する通信のみ受け付けることを意味する。“IP forward”は、物理的なネットワークI/F(例えば図1のネットワークI/F213)に、情報コンテナ953B専用のIPアドレスを追加で付与し、当該IPアドレスを指定した通信を、情報コンテナ953B内の情報プログラム115に転送することを意味する。
また、パラメータ項目“利用可能LANポート”が情報プログラム115で利用できるLANポートを、“専有LANポート”が、情報プログラム115が専有するLANポートを示す。すなわち、情報プログラム115はデフォルトでLANポート3と4を制御プログラム114と共有し、LANポート4を専有する設定となる。
また、パラメータ値“共有フォルダ”が、共有領域の一例である共有フォルダへのパスを表している。デフォルト値703には、共有なしであるため、特に設定がない限り共有フォルダがない状態となる。
デフォルト値703は、対象パラメータ項目に対応したデフォルト値を表す。例えば、パラメータ項目“LANポート”に対応したデフォルト値によれば、情報プログラム115にパラメータ値“LAN3”と“LAN4”が、専有LANポートのパラメータ値に“LAN4”が設定される。つまり、LAN3は、共有デバイスであり、LAN4は情報プログラム115が専有するデバイスである。LANポートは図8Aに示されるように、制御プログラムが1ポート専有し、情報プログラムが1ポート専有し、制御プログラムと情報プログラムが2ポートを共用する状態を示す。ここでの共有とは、制御プログラムであっても必ずしもリアルタイム性が要求されない通信と情報プログラムそれぞれがLANポートを利用する場合である。
例えば、一方のプログラムが共有LANポートを使用する際に、他方のプログラムが使用する場合には、一方のプログラムの通信が終わるまで待機し、他方のプログラムが使用する。制御プログラム114がLANポートを専有することで、リアルタイム制御通信を使用する場合に有効である。制御プログラム114と情報プログラム115がLANポートを共有することで、一般のEthernet通信等の非リアルタイム通信を行う場合に有効である。情報プログラム115がコントロール装置109の外部である、例えば工場の外やインターネット等との通信を行う際に、コントロール装置109の外部から制御プログラム114やコントロール装置に109に接続された装置を見せないようにすることができるため、セキュリティの観点から有効である。
複数のプログラム114及び115の各々に関し、図8Aに例示するように、1種類以上の計算リソース(例えば、CPUコア、メモリ、LAN(I/Oポートの一例))の各々について、当該種類(それぞれのパラメータ項目)の計算リソースに対応したリソース上限は、当該種類の計算リソースについて定められたリソース境界(図8において太線で示す)に基づいている。LANを共有する場合は、便宜的に中間位置に境界線を設けて表現している。1種類以上の計算リソースの各々について、リソース境界は、下記(x)と(y)で定義される境界である。制御プログラム114は(x)以下のリソースで、情報プログラム115は(y)以下のリソースで実行されることにより、それぞれのプログラムに影響を与えずに実行可能となる。なお、CPUはコア数に限らず、単一コアの場合を含めてスケジューリングの優先度を設定することも可能である。また、CPUコアが複数の場合に、CPUコアの専有の設定を変更せずに制御プログラム114が所定のスキャンタイムで実行されるようにスケジューリングすることも可能であり、この場合は、複数のコアを効率よく使用することができる。
(x)当該種類の計算リソースのリソース上限であって、当該種類の計算リソースを全制御プログラム114が使用可能なリソースの合計。
(y)当該種類の計算リソースのリソース上限であって、当該種類の計算リソースを1以上の情報プログラムが使用可能なリソースの合計。
このようなリソース境界により、リアルタイム性の維持が期待できる。なお、図8では、各種計算リソースについて、リソース境界より左側にある灰色帯は、全制御プログラム114が使用しているリソースの合計である総使用リソースを意味し、リソース境界より左側にある白色帯は、制御プログラム114に関しての余裕リソース(リソース境界と総使用リソースとの差分)を表す。つまり、灰色帯は実際の利用状態、白色帯は使用されていないが使用できるリソースを示す。一方、各種計算リソースについて、リソース境界より右側にある灰色帯は、全情報プログラム115が使用しているリソースの合計である総使用リソースを意味し、リソース境界より左側にある白色帯は、情報プログラム115に関しての余裕リソース(リソース境界と総使用リソースとの差分)を表す。これをリアルタイム表示やデバッグ時に表示することにより、リソースの使用量を特定し、設定値704によってより制御プログラム114または情報プログラム115を効率よく実行させることができる。
複数のプログラム114及び115の実行を制御するタスク管理部110が、図8に例示するように、当該1種類以上の計算リソースの少なくとも1種類の計算リソースのリソース境界を動的に変更する。当該変更は、例えば、リソース境界変更のための所定のイベントが発生した場合に(例えば、ユーザからリソース境界の変更要求をタスク管理部110が受けた場合に)行われる。これにより、例えば、制御プログラム114に関して余裕リソースが十分ある種類の計算リソースについては、制御プログラム114にとってのリソースが減るリソース境界変更が実行される(例えば、計算リソース種類“メモリ”を参照)。このように、柔軟にリソース境界を変更することで、リアルタイム性を維持しつつ高スループットが期待できる。すなわち、リアルタイム性と高スループットの両立が期待できる。
なお、少なくとも1種類の計算リソースについて、当該種類の計算リソースのリソース境界の変更が、制御プログラム114にとってのリソースが減る変更の場合、タスク管理部110が、下記の(A)及び(B)を行ってよい。下記の(A)及び(B)により、制御プログラム114にとってのリソースが減る境界変更、言い換えれば、情報プログラム115を追加したときの前提が変更されても、リアルタイム性の維持が期待できる。
(A)1以上の情報プログラム115の少なくとも1つを停止する。
(B)少なくとも1つの制御プログラム114について、下記(b1)及び(b2)のうちの少なくとも1つを実行する。
(b1)停止した情報プログラム115に割り当てられていた共有デバイス(例えばI/Oポートのうちの少なくとも1つ)を、当該制御プログラム114の専有デバイスに変更する。
(b2)当該制御プログラムのタスク優先度303を相対的に上げる(すなわち、当該制御プログラムのタスク優先度303を上げることと、停止した情報プログラム115のタスク優先度303を下げることの少なくとも1つを行う)。
また、上述の説明では、制御プログラム114と情報プログラム115が共存するプラットフォームは、物理的なコンピュータとしてのコントロール装置109であるが、図9に例示するように、別の例として、同一のOS952を採用することができる。つまり、制御プログラム114と情報プログラム115のOSは共通している。ここでも、複数のプログラム114及び115の各々について、当該プログラムの動作の範囲を規定した複数のパラメータ値を含んだ実行管理テーブル113が設定される。
制御に関しては、一般に、高いリアルタイム性が求められ、情報処理に関しては、一般に、高いスループットが求められる。そして、OSとしても、一般に、制御向けのOSとしての専用OS(リアルタイムOS)と、情報処理向けのOSとしての汎用OSとがある。
一般に、制御プログラムは専用OSが搭載された計算機で実行され、また、専用OSが搭載された計算機から情報系の計算に必要な情報を受信した汎用OSが搭載された計算機が実行されている。ここで、仮に、昨今の汎用計算機分野の技術を考慮すると制御プログラムは専用OS上で実行され、情報プログラムは汎用OS上で実行されることで本願発明と類似する構成とすることができると考えられる。このため、同一の計算機に制御プログラムと情報プログラムを共存させる場合、通常、計算機における計算リソース集合(物理的な計算リソースの集合としてのハードウェア)をエミュレートする仮想マシン技術を採用することになる。具体的には、例えば、ハイパバイザが、制御プログラム用に、ゲストOSとして専用OSを搭載した仮想マシンを生成し、情報プログラム用に、ゲストOSとして汎用OSを搭載した仮想マシンを生成し、制御プログラムと情報プログラムが、OSが異なる別々の仮想マシンで実行されることが考えられる。
しかし、仮想マシン技術では、仮想マシンにおけるゲストOSの他に、仮想マシンのベースとなるホストOSが存在する。結果として、管理対象が多く、管理が煩雑となることが考えられる。
また、計算機に機器が接続されても、当該計算機における全ての制御プログラムや情報プログラムが容易に当該機器を認識できるわけではない。仮想マシン別に、ゲストOSを介して、当該機器を認識するための処理が必要となる。言い換えれば、制御プログラムと情報プログラムがデバイスを共有することが困難である。
本願の発明者の考察によれば、汎用OSの系統ではあるものの必要とされるリアルタイム性を提供できるリアルタイム機能を持ったOS(以下、便宜上、「リアルタイム汎用OS」と呼ぶ)が提供されている。
このため、リアルタイム汎用OSを、図9に例示するように、制御プログラム114及び情報プログラム115が共存するOS952として採用することが考えられる。
しかし、制御プログラム114及び情報プログラム115がリアルタイム汎用OS上に共存するとなると、制御プログラム114のリアルタイム性の低下が懸念される。具体的には、例えば、リアルタイム汎用OSは、スケジューラを有し、当該スケジューラに割込みが発生するようになっている。スケジューラは、実行すべきリアルタイムタスク(制御プログラム114に対応したタスク)があれば、タスク優先度303に従い当該リアルタイムタスクへ制御を渡し、実行すべきリアルタイムタスクがなければ、通常タスク(例えば情報プログラム115に対応したタスク)へ制御を渡すようになっている。実行すべきリアルタイムタスクがあっても、通常タスクについて所定の処理まで終わらなければ、当該通常タスクは停止されない。このため、リアルタイムタスクの開始が遅れ、結果として、リアルタイム性が損なわれるおそれがある。
そこで、制御プログラム114及び情報プログラム115の同一プラットフォームとしてOS952を採用し、且つ、当該環境において、上述した工夫のうちの少なくとも1つ、例えば、下記のうちの少なくとも1つを採用することにより、リアルタイム性が維持される。
・上述した実行管理テーブル113が設定される。すなわち、制御プログラム114及び情報プログラム115の各々についてリアルタイム性の維持を目的に決定されたパラメータ値が設定される。
・デバイスの共有化が容易になる代わりにリアルタイム性が低下することを避けるため、上述したようなリソース境界が設定される。
パラメータ値の設置として、具体的には、例えば、図3に例示したパラメータ値303~308の組み合わせにより、制御プログラム114及び情報プログラム115が同一OS952上に共存しても、リアルタイム性の維持が図られる。例えば、通常タスクについて所定の処理まで終わらなければ当該通常タスクは停止されないことを考慮してパラメータ値303~308を決定することが行われる。
また、適宜にスループットを考慮して、リソース境界が、例えば、ホストプログラムの一例である実行制御プログラム957により動的に変更されてよい。その際、リソース境界の変更が、制御プログラム114にとってのリソースが減る境界変更の場合、上述の(A)及び(B)が、例えば、実行制御プログラム957により行われてよい。
図9のコントロール装置909については、例えば以下の通りである。
コントロール装置909の物理リソース集合951上で、OS952が実行される。OS952上でのプログラム実行環境として、コンテナ型仮想化に従うコンテナ953が採用される。すなわち、プログラムが、コンテナ953に設定され、OS952上で、コンテナ953の単位で実行される。コンテナ953としては、例えば、制御コンテナ953Aと情報コンテナ953Bの2種類のコンテナがある。
制御コンテナ953Aは、制御プログラム114が格納され実行されるコンテナである。制御プログラム114は、例えば、ソフトウェアPLC系ランタイム961上で実行されて良い。制御プログラム114は、制御系通信を行っても良い。なお、制御系通信はシリアル又はパラレルの有線通信であっても、無線通信であっても良い。
情報コンテナ953Bは、情報プログラム115が格納され実行されるコンテナである。少なくとも1つの情報プログラム115は、情報系通信を行うことができる。
コントロール装置909で実行されるプログラムとして、上述のプログラム114及び115に加えて、他のプログラム、例えば、Webサーバプログラム956及び実行制御プログラム957がある。Webサーバプログラム956及び実行制御プログラム957は、いずれも、コンテナ953の外で実行されるホストプログラムの一例である。実行制御プログラム957は、コンテナ953の生成又は削除等を行うコンテナエンジンでよい。Webサーバプログラム956及び実行制御プログラム957が実行されることで上述のタスク管理部110が実現されてよい。
Webサーバプログラム956は、Webサーバとして機能するためのプログラムである。Webサーバプログラム956が、管理ユーザ計算機151M及び一般ユーザ計算機151Gの各々(クライアント)と通信する。Webサーバプログラム956が、1以上の情報プログラム115のうちの少なくとも1つが格納されるコンテナについて、パラメータ値の設定を受け付けるユーザインターフェースプログラムの一例である。
実行制御プログラム957は、コンテナ953におけるプログラムに関して設定されている複数のパラメータ値を基に、コンテナ953(正確には、コンテナ953におけるプログラム)の実行を制御する。
[第3の実施の形態]
第3の実施の形態について説明する。その際、これまでの説明(例えば、第1の実施の形態、又は、第2の実施の形態)と異なる点を中心として説明し、これまでの説明と共通する点については説明を省略又は簡略する。
なお、以下の説明において、「アプリケーションの実行環境」とは、例えば、当該アプリケーションのプログラム言語(例えば、C言語又はJava(登録商標))の機能セットでよく、故に、当該アプリケーションの実行が可能でよい。以下、アプリケーションの実行環境を、単に「実行環境」と言うことがある。
「アプリケーション」とは、制御プログラムの一例である制御アプリケーションと、情報プログラムの一例である情報アプリケーションの総称である。
また、「実行環境α」とは、情報アプリケーションαのプログラム言語に基づく実行環境であり、情報アプリケーションαを実行する(αは、例えば、A、B、…のようなアルファベット)。実行環境αが二つ以上の情報アプリケーションαを実行する場合、それら二つ以上の情報アプリケーションαは、情報アプリケーションα1、情報アプリケーションα2、…のように表記されることがある。
図10は、第3の実施の形態に係るコントロール装置のハードウェア構成例を示すブロック図である。
コントロール装置1100は、例えば筐体内に、ベースボード1052を備える。ベースボード1052に、CPUモジュール1101(コントロールモジュールの一例)と、認証モジュール1110とが接続される。ベースボード1052に接続されたCPUモジュール1101及び認証モジュール1110は、コントロール装置1100が有する筐体に収容されている。コントロール装置1100において、CPUモジュール1101及び認証モジュール1110のいずれも、1以上存在してもよい。
ベースボード1052は、例えばバックプレーンであり、プリントされた配線と、複数のコネクタ(I/Oポートと呼ばれてよい)とを有する。当該配線は、専用バス1109を構成する。コネクタに、CPUモジュール1101又は認証モジュール1110が接続される。CPUモジュール1101及び認証モジュール1110のうち少なくとも認証モジュール1110が、ベースボード1052に対して着脱可能である。ベースボード1052にCPUモジュール1101及び認証モジュール1110が接続された場合、CPUモジュール1101及び認証モジュール1110は、ベースボード1052上の専用バス1109に接続される。CPUモジュール1101と認証モジュール1110との間で、通信が、専用バス1109を介して行われる。専用バス1109は、外部バスと呼ばれてもよい。専用バス1109は、ベースボード1052に接続されたモジュールをつなぎ、アドレス、データ及び制御情報のやり取りに使用されてよい。専用バス1109は、例えば、アドレスとデータで共用するマルチプレクスバスでもよいし、セパレート型のバスでもよい。
CPUモジュール1101は、例えば回路基板であり、パソコン等の周辺機器と通信するためのI/Oポートのようなインターフェース装置1012(インターフェース部の一例)と、アプリケーションのようなプログラムを格納するメモリ1013(記憶部の一例)と、それらに接続されたCPU1014(プロセッサ部の一例)とを有する。インターフェース装置1012は、ベースボード1052上のコネクタ(専用バス1109に繋がったコネクタ)に接続されるコネクタを含んでいてよい。メモリ1013に、制御アプリケーション及び後述のシステムソフトウェア(プログラムの一例)が格納される。また、メモリ1013には、情報アプリケーションも格納され得る。CPU1014が、アプリケーションの実行環境上で、当該アプリケーションを実行させる。言い換えれば、アプリケーションの実行環境が、当該アプリケーションを実行する。なお、メモリ1013は、1以上の制御対象装置に接続された1以上のI/Oポートに関する情報を格納し複数のプログラムの各々がアクセス可能な1以上の共有領域を含んでよい。
認証モジュール1110は、例えば回路基板であり、ベースボード1052上のコネクタ(専用バス1109に繋がったコネクタ)に接続されるコネクタを含んだインターフェース装置1022(インターフェース部の一例)と、認証コードを格納するメモリ1023(記憶部の一例)と、それらに接続されたCPU1024(プロセッサ部の一例)とを有する。認証モジュール1110からCPUモジュール1101への認証コードの読み出しが、DMA(Direct Memory Access)により行われる場合、CPU1024は無くてもよい。認証モジュール1110は、実行環境の拡張を許可するか否かの判定に使用される。
ベースボード1052に、2以上のCPUモジュール1101が接続されてよい。2以上のCPUモジュール1101の1つが、マスタとして機能し、残りが、スレーブとして機能してよい。
また、ベースボード1052に、1以上のI/Oモジュールが接続されてよい。例えば、図1において、コントロール装置100内の全要素が、CPUモジュール1101に搭載され、I/Oモジュール119が、CPUモジュール1101及び認証モジュール1110の他にベースボード1052に接続されてもよい。
図11は、コントロール装置1100の論理構成例を示す図である。
CPUモジュール1101では、1つ(又は複数)の制御アプリケーション実行環境1103がある。制御アプリケーション実行環境1103が、制御アプリケーション1104を実行する。
また、CPUモジュール1101では、1以上の情報アプリケーション実行環境1105があり得る。情報アプリケーション実行環境1105が、当該実行環境1105に対応した情報アプリケーション1106を実行する。
また、CPUモジュール1101では、システムソフトウェア1102が実行される。システムソフトウェア1102は、制御アプリケーション1104のスキャン動作が行われない期間中に実行されてよい。通常、制御アプリケーション1104の優先度は、最も高い。システムソフトウェア1102の優先度は、制御アプリケーション1104の優先度より低ければ、いずれの情報アプリケーション1106の優先度より低くてもよいし、少なくとも1つの情報アプリケーション1106の優先度より高くてもよい。
システムソフトウェア1102は、情報アプリケーション実行環境1105の拡張を許可するか否かを制御する機能を有する。システムソフトウェア1102は、OSに含まれてもよいし、OS上で動作してもよい。システムソフトウェア1102は、例えば、制御アプリケーション1104及び情報アプリケーション1106のスケジューリングを行う機能を含んでいてもよい。システムソフトウェア1102は、制御アプリケーション1104がスキャン動作を行っていない期間中に(言い換えれば、スキャン動作の開始から終了までの時間を含むスキャンタイム以外の期間中に)、図14に例示のアクティベーション処理を行う。システムソフトウェア1102は、例えば、図2に例示のタスク管理部110の変形例でもよいし、図9に例示の実行制御プログラム957の変形例でもよい。
図11の例によれば、制御アプリケーション1104と、その実行環境1103がある。また、情報アプリケーションAと、その実行環境Aがある。
コントロール装置1100は、例えば、PLC(プログラマブル・ロジック・コントローラ)やPAC(プログラマブル・オートメーション・コントローラ)のような産業用コントローラである。このようなコントロール装置1100の計算リソースが限られている。このため、図11の例の通り、制御アプリケーション1104の実行環境1103の他に、情報アプリケーションAの実行環境AがCPUモジュール1101に提供されている。その一方で、コントロール装置1100で実行し得る多様な情報アプリケーションが存在し、故に、その実行環境も多岐にわたる。一般に、例えば、情報アプリケーションαは、実行環境α以外の実行環境では実行不可となる。
そこで、図12に示すように、外部記憶装置1107に実行環境Aとは異なる実行環境E(コントロール装置1100の拡張機能)を実装して提供し、その外部記憶装置1107をCPUモジュール1101に接続することによってその外部記憶装置1107内の実行環境Eを有効とすることを考える。
このとき、外部記憶装置1107内の実行環境Eを他の外部記憶装置にコピーすること、つまり、容易に拡張機能を複製し使用できてしまうという問題が考えられる。
これを防止するために、比較例としては、USBドングルと呼ばれるデバイスを使用する方法が考えられるが、PLCのように塵埃や温度条件の厳しい産業用機器が使用される環境下において、USBドングルの耐環境性が問題となり、接続不良や動作不良などによって正常な認証データを持っているにもかかわらず認証処理が正常に行われないといったことが発生しうる。また、認証データを格納した機器とケーブルや無線を介してPLCが通信する方法も考えられるが、機器とPLC間の通信を第三者に傍受される可能性も発生しうる。
そこで、図11に示したように、内部に特定の認証データ1111を持った認証モジュール1110が用意され、コントロール装置1100のベースボード1052にCPUモジュール1101の他にこの認証モジュール1110が接続される。システムソフトウェア1102は、アクティベーション処理を実行する。アクティベーション処理は、CPUモジュール1101の外部記憶装置1107(外部記憶部の一例)に実行環境E(第1の実行環境の一例)が格納されていることを認識し、且つ、ベースボード1052に認証モジュール1110が接続されていて当該認証モジュール1110が所定の条件を満たす認証データ1111を格納していることを、専用バス1109を介して認証モジュール1110と通信することで判定した場合に、実行環境Eを有効とすることを含む。
認証モジュール1110は、コントロール装置1100のCPUモジュール1101等の耐環境性を持つため、動作不良の発生頻度は低減する。また、認証モジュール1110内の認証データ1111は、ベースボード1052上の専用バス1109を介してCPUモジュール1101からしか読み出すことができない。専用バス1109は、典型的には、ベースボード1052上に物理的に実装されたバスである。このため、第三者による傍受の可能性が低減され、認証データ1111の保護が担保される。
このように、本実施の形態によれば、コントロール装置1100のベースボード1052に認証モジュール1110が接続されていて、かつ、拡張機能が格納された外部記憶装置1107がCPUモジュール1101に接続されている場合に、アクティベーション処理において、この拡張機能が有効とされる。
実行環境Eを有効とするとは、実行環境EをCPUモジュール1101に入れることでよい。実行環境Eは、既存の実行環境Aに加えて入れられてもよいし、既存の実行環境Aに代えて入れられてもよい。例えば、図13に示すように、既存の実行環境Aに代えて実行環境Eが入れば、コントロール装置1100内の限られた計算リソースの消費を節約することができる。なお、この場合、実行環境Aは、CPUモジュール1101から削除されてもよいし、例えば圧縮されたファイルとしてメモリ1013に退避されてもよい。
図14は、アクティベーション処理の流れの一例を示すフローチャートである。
システムソフトウェア1102が、所定のタイミングで、アクティベーション処理を開始する(S201)。例えば、制御アプリケーション1104が動作している期間以外の期間(例えば、スキャンタイム以外の期間)内にアクティベーション処理が開始し終了する。このため、アクティベーション処理がスキャン動作の遅延を生じさせることを避けることができる。所定のタイミングの具体例として、コントロール装置1100の電源投入時、又は、その後の定期的なタイミングがあり得る。
システムソフトウェア1102が、CPUモジュール1101に外部記憶装置1107が接続されているか否かをチェックする(S202)。なお、例えば、実行環境Eが格納された外部記憶装置1107は、情報アプリケーションEがCPUモジュール1101にインストールされたものの、情報アプリケーションEの実行環境EがCPUモジュール1101に無い場合に行われる。
外部記憶装置1107の接続がない場合は(S202:NO)、機能拡張が行われないため、システムソフトウェア1102が、処理を終える(S208)。
外部記憶装置1107の接続がある場合は(S202:YES)、システムソフトウェア1102が、外部記憶装置1107に、拡張機能となる実行環境1105が格納されているか否かをチェックする(S203)。例えば、システムソフトウェア1102が、所定のファイルパスに沿って実行環境Eを認識できた場合、S203のチェック結果が真となる。
S203のチェック結果が偽の場合(S203:NO)、システムソフトウェア1102は、その外部記憶装置1107を、通常の外部記憶装置として扱う。
S203のチェック結果が真の場合(S203:YES)、システムソフトウェア1102は、認証モジュール1110が接続されているか否かをチェックする(S204)。例えば、システムソフトウェア1102が、専用バス1109経由で認証モジュール1110と通信できた場合、S204のチェック結果が真となる。
S204のチェック結果が偽の場合(S204:NO)、拡張機能は認証されないため、システムソフトウェア1102は、外部記憶装置1107内の実行環境Eを有効化しない。
S204のチェック結果が真の場合(S204:YES)、システムソフトウェア1102は、認証データ1111を、専用バス1109経由で認証モジュール1110から取得する(S205)。システムソフトウェア1102が、取得した認証データ1111が所定の条件を満たすか否かをチェックする(S206)。「取得した認証データ1111が所定の条件を満たす」とは、例えば、認証データ1111が所定の認証コードを含んでいることである。S206のチェックにより、認証モジュールの模倣品による誤認証が防止される。
S206のチェック結果が真の場合(S206:YES)、システムソフトウェア1102は、外部記憶装置1107にある実行環境Eを有効とする。例えば、システムソフトウェア1102は、内蔵の実行環境Aを外部記憶装置1107にある実行環境Eに置換する。これにより、実行環境Eに対応した情報アプリケーションEの実行が可能となる。
認証完了後の構成が、図13に示した通りである。情報アプリケーションEは、図12が示す拡張前においては、実行環境A上では実行できないが、実行環境Aが実行環境Eに置換されることで、実行可能となる。
なお、システムソフトウェア1102は、いずれの実行環境1105が元の実行環境1105でありいずれの実行環境1105が拡張された実行環境1105であるかを表す情報である運用管理情報を管理してよい。
[第4の実施の形態]
第4実施の形態について説明する。その際、第3の実施の形態と異なる点を中心として説明し、第3の実施の形態と共通する点については説明を省略又は簡略する。
例えば、アクティベーション処理の開始のタイミングが、コントロール装置1100の電源投入時である場合、アクティベーション処理(認証処理)の後に、認証モジュール1110が取り外され、その認証モジュール1110が、ほかのコントロール装置のベースボードに接続されて使用されること、つまり、1つの認証モジュール1110を複数のコントロール装置に使い回すことで当該1つの認証モジュールで複数の拡張機能がアクティベートされてしまうことが考えられる。
そこで、本実施の形態では、システムソフトウェア1102が、アクティベーション処理後にも、周期的に(又は非周期的に)、認証モジュール1110がベースボード1052に接続されていることを確認する。
図15は、認証モジュールチェック処理の流れの一例を示すフローチャートである。
システムソフトウェア1102が、所定のタイミングで、認証モジュールチェック処理を開始する(S209)。例えば、制御アプリケーション1104が動作している期間以外の期間(例えば、スキャンタイム以外の期間)内に認証モジュールチェック処理が開始し終了する。このため、認証モジュールチェック処理がスキャン動作の遅延を生じさせることを避けることができる。
システムソフトウェア1102が、一定周期時間経過(S210:YES)ごとに、認証モジュール1110の接続有無をチェックする(S211)。なお、「一定周期」は、例えば50msのような短い周期が考えられる。一定周期は、スキャンタイムの終了から次のスキャンタイムの開始までの期間に基づき定められてよい。
認証モジュール1110の接続がある場合(S211:YES)の場合は、システムソフトウェア1102は、接続なしカウント値をクリア(初期値にリセット)して(S212)、正常にチェック処理を終了する(S217)。なお、「接続なしカウント値」とは、認証モジュールが接続されていないことが連続して検出された回数を表す。
認証モジュール1110の接続が無い場合(S211:NO)、システムソフトウェア1102は、接続なしカウント値を1インクリメントし(S213)、S213後の接続なしカウント値が規定値に達したかをチェックする(S214)。S214のチェック結果が偽の場合(S214:NO)、処理が終了する(S217)。
S214のチェック結果が真の場合(S214:YES)、システムソフトウェア1102は、認証エラーとみなし、エラーを表示して(例えば、管理ユーザ計算機151Mに表示して)、実行環境E(拡張機能)で動作している情報アプリケーションEの実行を停止する(S215)。さらに、システムソフトウェア1102は、実行環境Eを実行環境Aに戻すリセットを行う(S216)。
本実施の形態によれば、実行環境Eのアクティベーションに使用された認証モジュール1110が接続されていないときに当該実行環境E上で情報アプリケーションEが動作すること防ぐことができる。結果として、1つの認証モジュール1110を複数のコントロール装置に使い回すことで当該1つの認証モジュールで複数の拡張機能がアクティベートされてしまうことを防ぐことができる。
[第5の実施の形態]
第5実施の形態について説明する。その際、第3及び第4の実施の形態と異なる点を中心として説明し、第3及び第4の実施の形態と共通する点については説明を省略又は簡略する。
図16は、第5の実施の形態に係る拡張前のコントロール装置の論理構成例を示す図である。図17は、第5の実施の形態に係る拡張後のコントロール装置の論理構成例を示す図である。
図16に例示のように、1つの情報アプリケーションAについて、複数の情報アプリケーション(例えば、A1~A4)が、実行環境A上で動作されてもよい。図16に例示の構成において、アクティベーション処理が実施されることによって、図17に例示の通り、外部記憶装置1107に格納された実行環境EがCPUモジュール1101に追加され、実行環境Eに対応する情報アプリケーションEを実行可能とすることができる。なお、情報アプリケーションEは、複数の情報アプリケーションA1~A4のうちの一部の情報アプリケーションの一例である情報アプリケーションA4に代わって実行される。
[第6の実施の形態]
第6実施の形態について説明する。その際、第5の実施の形態と異なる点を中心として説明し、第5の実施の形態と共通する点については説明を省略又は簡略する。
図18は、第6の実施の形態に係るコントロール装置の論理構成例を示す図である。
実行環境E上で、拡張された複数の情報アプリケーションE1及びE2が実行されてもよい。各情報アプリケーションEは、いずれかの元の情報アプリケーションAに代えて実行されてよい。このため、実行される情報アプリケーションEが同じ数の情報アプリケーションAと差し替えられてよい。なお、実行環境α上で実行可能な情報アプリケーションαの数の上限が定められてもよい。
[第7の実施の形態]
第7実施の形態について説明する。その際、第3~第6の実施の形態と異なる点を中心として説明し、第3~第6の実施の形態と共通する点については説明を省略又は簡略する。
図19は、第7の実施の形態に係るコントロール装置の論理構成例を示す図である。
図19に例示のように、複数の実行環境が拡張機能としてアクティベーション(例えば置換)されてよい。この場合、異なる複数の実行環境1105をそれぞれ格納した複数の外部記憶装置1107(例えば、1107a及び1107b)がCPUモジュール1101に接続されてよい。例えば、外部記憶装置1107aが、実行環境Eを格納し、外部記憶装置1107bが、実行環境Xを格納する。各外部記憶装置1107について、アクティベーション処理が行われ、実行環境E及び実行環境Xが、CPUモジュール1101に追加される。これにより、情報アプリケーションE及びXが実行可能となる。なお、情報アプリケーションXは、情報アプリケーションA3に代わって実行される。また、認証データ1111は、複数の実行環境にそれぞれ対応した複数の認証コード、例えば、実行環境Eをアクティベーションするための認証コードと、実行環境Xをアクティベーションするための認証コードとを含んでよい。
このように、拡張機能としての実行環境は1つに限られない。なお、拡張機能の数の上限、或いは、1以上の拡張機能上で実行される情報プログラムの数の上限が、定められてもよい。上限の範囲で、拡張機能の追加、或いは、拡張機能上での情報プログラムの実行がされてもよい。
[第8の実施の形態]
第8実施の形態について説明する。その際、第3~第7の実施の形態と異なる点を中心として説明し、第3~第7の実施の形態と共通する点については説明を省略又は簡略する。
図19は、第8の実施の形態に係るコントロール装置の論理構成例を示す図である。
メモリ1013は、CPUモジュール1101で実行可能な情報アプリケーション1106の言語、動作又は機能を表す情報アプリケーション管理データ1902(第1の情報プログラム管理情報の一例)を格納してよい。認証モジュール1110のメモリ1023に格納される認証データ1111は、実行される情報アプリケーション1106(例えば、拡張機能上で実行される情報プログラム)の言語、動作又は機能を表す情報を含んでよい。つまり、認証データ1111が、第2の情報プログラム管理情報の一例でよい。
例えば、情報プログラムEが、情報アプリケーション管理データ1902が表す言語、動作又は機能を有する拡張された情報プログラムである場合には、システムソフトウェア1102が、認証モジュール1110にベースボード1052が有する専用バス1109を介して通信することで、当該拡張された情報プログラムEの言語、動作又は機能を認証データ1111が表すことを特定することによって、実行環境Eを有効とする。このようにして、認証モジュール1110内の認証データ1111を基に実行環境Eを有効化できる。
情報アプリケーション管理データ1902が表す言語、動作又は機能が認証データ1111に表されていない場合には、システムソフトウェア1102が、CPUモジュール1101における情報アプリケーションAの動作を禁止してよい。例えば、実行環境Aを有するCPUモジュール1101が接続されているベースボード1052に接続されている認証モジュール1110が、不当な認証モジュールでなければ、認証データ1111が、情報アプリケーション管理データ1902のように、実行環境A(又は情報アプリケーションA)を表す言語、動作又は機能を表す情報を含んでいてよい。そのような情報が認証データ1111になければ、システムソフトウェア1102が、CPUモジュール1101における情報アプリケーションAの動作を禁止してよい。これにより、コントロール装置1100内の環境の正当性が担保されてよい。なお、システムソフトウェア1102が、CPUモジュール1101における情報アプリケーションAの動作を禁止しても、制御アプリケーション1104の動作を禁止しないでよい。これにより、スキャン動作が維持されてよい。
以上、幾つかの実施の形態を説明したが、本発明はこれらの実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
なお、本発明は上記した実施の形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
また、ある実施の形態の構成の一部を他の実施の形態の構成に置き換えることが可能であり、また、ある実施の形態の構成に他の実施の形態の構成を加えることも可能である。