(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-04
(45)【発行日】2024-01-15
(54)【発明の名称】コントロールシステム
(51)【国際特許分類】
G05B 19/05 20060101AFI20240105BHJP
【FI】
G05B19/05 Z
(21)【出願番号】P 2020130818
(22)【出願日】2020-07-31
【審査請求日】2023-03-24
(73)【特許権者】
【識別番号】502129933
【氏名又は名称】株式会社日立産機システム
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】今井 光洋
【審査官】今井 貞雄
(56)【参考文献】
【文献】特開2020-61104(JP,A)
【文献】特開2020-95549(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G05B 19/05
(57)【特許請求の範囲】
【請求項1】
一つ又は複数の制御対象装置を制御するコントロールシステムであって、
それぞれがインターフェース装置、記憶装置及びそれらに接続されたプロセッサを有する一つ又は複数の演算装置を備え、
前記一つ又は複数の演算装置が、一つ又は複数の制御プログラムと、一つ又は複数の情報プログラムと、一つ又は複数の共有インターフェースとを有し、
前記一つ又は複数の制御プログラムの各々について、
当該制御プログラムは、当該制御プログラムについて定められた制御周期毎に、制御対象装置を制御する処理でありリアルタイム性を有する処理であるスキャン処理を当該制御周期内に行うプログラムであり、
当該制御プログラムについて設定される情報である第1の設定情報は、当該制御プログラムと当該制御プログラムの通信相手としての一つ以上の情報プログラムの各々との間の通信媒体の種類に依存しない情報であり、
前記一つ又は複数の情報プログラムの各々について、
当該情報プログラムは、当該情報プログラムについて定められた情報処理を行うプログラムであり、
当該情報プログラムについて設定される情報である第2の設定情報は、当該情報プログラムと当該情報プログラムの通信相手としての一つ以上の制御プログラムの各々との間の通信媒体の種類に依存しない情報であり、
前記一つ又は複数の演算装置の各々において、
制御プログラム又は情報プログラムである第1のプログラムが、当該演算装置における共有インターフェースに対して、当該第1のプログラムについての設定情報中の情報を引数としてI/O(Input/Output)指定を行い、
当該共有インターフェースが、当該I/O指定に応答して、
当該I/O指定の引数に対応した情報を、通信媒体種類に依存した情報を含んだ情報であるマッピング情報から特定し、
当該特定された情報を基に、当該第1のプログラムと当該第1のプログラムの通信相手としての制御プログラム又は情報プログラムである第2のプログラムとの間の通信媒体の種類に依存したI/Oを行う、
コントロールシステム。
【請求項2】
前記一つ又は複数の制御プログラムの各々について、当該制御プログラムの第1の設定情報は、共有対象のデータである共有データのデータ項目の識別情報である項目識別情報と共有相手の情報プログラムのプログラム識別情報との関係を表す情報を含み、
前記一つ又は複数の情報プログラムの各々について、当該情報プログラムの第2の設定情報は、共有データのデータ項目の識別情報である項目識別情報と共有相手の制御プログラムのプログラム識別情報との関係を表す情報を含み、
前記一つ又は複数の演算装置の各々において、
前記I/O指定の引数として、第1の引数と第2の引数があり、
当該第1の引数は、前記第2のプログラムのプログラム識別情報であり、
当該第2の引数は、前記第1のプログラムと前記第2のプログラムが共有する共有データのデータ項目の項目識別情報であり、
前記マッピング情報は、プログラム識別情報と通信媒体種類に依存したデータ共有方法を表すデータ共有方法情報との関係を表すプログラムマッピング情報と、項目識別情報と共有データの入力元又は出力先の位置を表す共有位置情報との関係を表すデータマッピング情報とを含み、
前記第1の引数に対応した情報は、データ共有方法情報であり、
前記第2の引数に対応した情報は、共有位置情報であり、
前記共有インターフェースにより行われるI/Oは、特定されたデータ共有方法情報及び共有位置情報に従うI/Oであって、前記第2の引数とされた項目識別情報が表すデータ項目に対応した共有データのI/Oである、
請求項1に記載のコントロールシステム。
【請求項3】
前記一つ又は複数の共有インターフェースは、
前記一つ又は複数の制御プログラムの各々について、当該制御プログラムの共有インターフェースである制御共有インターフェースと、
前記一つ又は複数の演算装置の各々について、当該演算装置に存在する一つ以上の情報プログラムの共有インターフェースである情報共有インターフェースと
を含む、
請求項1に記載のコントロールシステム。
【請求項4】
前記マッピング情報は、項目識別情報と共有データの入力元又は出力先の位置を表す共有位置情報との関係を表すデータマッピング情報を含み、
前記データマッピング情報が表す項目識別情報は、前記第1の設定情報に含まれる情報の設定用ユーザインターフェース経由で指定された情報である、
請求項1に記載のコントロールシステム。
【請求項5】
前記マッピング情報は、通信ネットワーク経由でデータ共有を行うプログラムのプログラム識別情報と通信ネットワークに依存したデータ共有方法を表すデータ共有方法情報との関係を表すネットワークマッピング情報を含み、
制御プログラムを有する演算装置が、
通信ネットワーク経由で情報の取得要求を定期的に又は不定期的にブロードキャスト送信し、
当該取得要求に対して受けた応答から特定された情報を、前記ネットワークマッピング情報に反映する、
請求項1に記載のコントロールシステム。
【請求項6】
共有データのデータ項目毎に、当該データ項目に対応した共有データの出力を行うプログラムは一つである、
請求項1に記載のコントロールシステム。
【請求項7】
制御プログラムを有する演算装置は、共有メモリを有し、
制御プログラムを有する演算装置と、少なくとも一つの演算装置とが、回路基板上のバスに接続されており、
制御プログラムを有する演算装置と、少なくとも一つの演算装置とが、通信ネットワークに接続されており、
前記第1のプログラムは、制御プログラムであり、
前記第2のプログラムは、情報プログラムであり、
前記第1のプログラムと前記第2のプログラムとの間のデータ共有において利用される通信媒体の種類は、共有メモリ、バス及び通信ネットワークのいずれかである、
請求項1に記載のコントロールシステム。
【請求項8】
一つ又は複数の制御対象装置を制御し一つ又は複数の演算装置を有するコントロールシステムが行うコントロール方法であって、
制御プログラム又は情報プログラムである第1のプログラムが、当該第1のプログラムを有する演算装置における共有インターフェースに対して、当該第1のプログラムについての設定情報中の情報を引数としてI/O(Input/Output)指定を行い、
制御プログラムは、当該制御プログラムについて定められた制御周期毎に、制御対象装置を制御する処理でありリアルタイム性を有する処理であるスキャン処理を当該制御周期内に行うプログラムであり、
当該制御プログラムについて設定される情報である第1の設定情報は、当該制御プログラムと当該制御プログラムの通信相手としての一つ以上の情報プログラムの各々との間の通信媒体の種類に依存しない情報であり、
当該情報プログラムは、当該情報プログラムについて定められた情報処理を行うプログラムであり、
当該情報プログラムについて設定される情報である第2の設定情報は、当該情報プログラムと当該情報プログラムの通信相手としての一つ以上の制御プログラムの各々との間の通信媒体の種類に依存しない情報であり、
当該共有インターフェースが、当該I/O指定に応答して、
当該I/O指定の引数に対応した情報を、通信媒体種類に依存した情報を含んだ情報であるマッピング情報から特定し、
当該特定された情報を基に、当該第1のプログラムと当該第1のプログラムの通信相手としての制御プログラム又は情報プログラムである第2のプログラムとの間の通信媒体の種類に依存したI/Oを行う、
コントロール方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、コントロールシステムに関する。
【背景技術】
【0002】
コントロールシステムに関し、例えば特許文献1に開示のシステムが知られている。特許文献1は、「本分散型監視制御システムは、プラントの監視制御設備における監視用パーソナルコンピュータ(PC)と制御用プログラマブルロジックコントローラ(PLC)をネットワークで接続した分散型監視制御システムにおいて、監視用汎用PC10aに制御用汎用PLC20aの情報管理ファイル13aを設け、汎用PLC20aに、この汎用PLC20aの情報自動掃出ツール29aを設けて、汎用PC10aに入力された情報と汎用PLC20aのプロセス情報を汎用ソフトウェアで統合管理する。」を開示する。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
従来のコントロール装置は、少なくとも一つの制御プログラムが配置された演算装置である。一般に、コントロール装置の役割は、制御プログラムを周期的に実行することで、制御対象装置を遅延無く制御することにある。演算装置は、プロセッサ及びメモリといったハードウェア資源を有するが、役割を担うのに必要なハードウェア資源は、一般的な計算機のハードウェア資源に比べて少なくて済むため、通常、コントロールシステムの構成要素とされる演算装置のハードウェア資源の量は、一般的な計算機に比べて少ない。制御対象装置は、典型的には産業機器であり、産業機器は、一般的な計算機に比べて工場等の製造ラインで長期間動作されることが期待されるため、CPU等の冷却に用いるファン等を搭載できない等の制約があるからである。
【0005】
制御対象装置の制御に必要な情報(例えば、センサによる測定値)を取得するための通信を制御プログラムによる制御の一部とすること(すなわち、通信について制御プログラムに記述されていること)が考えられるが、通信のような情報処理は制御プログラムによる制御とは分離しておくことが望ましいと考えられる。そのように考えられる1つの理由は、コントロール装置の制御対象装置は、一般に、工作機械、自動組み立て装置又は自動搬送装置のような自動機械や生産設備であるため、高い安定性、つまりリアルタイム性が求められるためである。
【0006】
そこで、制御プログラムに加えて、通信のような情報処理について記述されたプログラムである情報プログラムを用意しておくことが考えられる。
【0007】
制御プログラムは、予め指定された制御周期毎にスキャン処理を行う。「スキャン処理」は、I/O(Input/Output)ポートに接続された機器の情報を読み込むことと、読み込んだ情報を演算することと、演算した情報を書き込むこととを含んだ処理である。スキャン処理に要する時間であるスキャンタイムと、スキャンタイム以外の時間である待機時間とで構成された時間を、「制御周期」(又は「制御プログラムの処理周期」)という。
【0008】
情報プログラムは、制御プログラムの処理周期とは異なる処理周期で動作することもできるし、必ずしも周期的に動作しなくてもよい。また、情報プログラムは、制御プログラムの処理周期のうちの待機時間(例えば、制御プログラムがハードウェアリソースを利用していない時間)に、当該情報プログラムの処理を実行することもできる。
【0009】
リアルタイム性を維持するために制御プログラムを優先するべく、演算装置をコントロールシステムに増設し、増設された演算装置で情報プログラムを実行することが考えられる。この場合、制御プログラムが実行される演算装置とは別の演算装置で情報プログラムが実行されるので、当該情報プログラムは、制御プログラムの待機時間以外の時間、例えば、スキャン処理が行われている時間に、処理を行ってもよい。
【0010】
制御プログラムが実行される演算装置と別の演算装置で情報プログラムが実行される場合、制御プログラムと情報プログラム間の通信媒体は、演算装置の外部の通信媒体(例えば、外部バスや通信ネットワーク)である。
【0011】
一方、資源節約の観点から、制御プログラムと情報プログラムの両方を一つの演算装置で実行することが考えられる。この場合、制御プログラムと情報プログラム間の通信媒体は、演算装置の内部の通信媒体(例えば、メモリ)である。
【0012】
プログラム間の通信媒体の種類が変更されるシステム構成変更(例えば、演算装置の増設又は減設に伴いプログラムの配置先の演算装置を変更すること、及び、演算装置の接続先の通信媒体の種類を変更することの少なくとも一つ)を、柔軟に行えることが望ましい。
【0013】
しかし、プログラム間の通信(データ共有)の実現のためには、プログラム間の通信媒体の種類に依存した種々の要素(例えば、共有メモリ名、IPアドレス、プロトコル種類、バス番号)を考慮した設定を、当該通信を行う各プログラムに行う必要がある。故に、システム構成変更がされると、プログラムの作り直し(例えば、コード修正)が必要である。
【0014】
このため、リアルタイム性を必要とする制御を行うコントロールシステムについて、プログラム間の通信媒体の種類が変更されるシステム構成変更を柔軟に行うことができない。特許文献1は、リアルタイム性を必要とする制御を行うコントロールシステムについてそのようなシステム構成変更を行う方法を開示も示唆もしていない。
【課題を解決するための手段】
【0015】
一つ又は複数の制御対象装置を制御するコントロールシステムが、それぞれがインターフェース装置、記憶装置及びそれらに接続されたプロセッサを有する一つ又は複数の演算装置を備える。一つ又は複数の演算装置が、一つ又は複数の制御プログラムと、一つ又は複数の情報プログラムと、一つ又は複数の共有インターフェースとを有する。一つ又は複数の制御プログラムの各々について、当該制御プログラムは、当該制御プログラムについて定められた制御周期毎に、制御対象装置を制御する処理でありリアルタイム性を有する処理であるスキャン処理を当該制御周期内に行うプログラムであり、当該制御プログラムについて設定される情報である第1の設定情報は、当該制御プログラムと当該制御プログラムの通信相手としての一つ以上の情報プログラムの各々との間の通信媒体の種類に依存しない情報である。一つ又は複数の情報プログラムの各々について、当該情報プログラムは、当該情報プログラムについて定められた情報処理を行うプログラムであり、当該情報プログラムについて設定される情報である第2の設定情報は、当該情報プログラムと当該情報プログラムの通信相手としての一つ以上の制御プログラムの各々との間の通信媒体の種類に依存しない情報である。一つ又は複数の演算装置の各々において、第1のプログラム(制御プログラム又は情報プログラム)が、当該演算装置における共有インターフェースに対して、当該第1のプログラムについての設定情報中の情報を引数としてI/O(Input/Output)指定を行う。当該共有インターフェースが、当該I/O指定に応答して、当該I/O指定の引数に対応した情報を、通信媒体種類に依存した情報を含んだ情報であるマッピング情報から特定し、当該特定された情報を基に、当該第1のプログラムと第2のプログラム(当該第1のプログラムの通信相手としての制御プログラム又は情報プログラム)との間の通信媒体の種類に依存したI/Oを行う。
【発明の効果】
【0016】
本発明によれば、リアルタイム性を必要とする制御を行うコントロールシステムについて、プログラム間の通信媒体の種類が変更されるシステム構成変更を、柔軟に行うことができる。
【図面の簡単な説明】
【0017】
【
図1】実施形態に係るコントロールシステムを含むシステムの物理構成の一例を示す。
【
図2】コントロールシステムの論理構成の一例を示す。
【
図10】ネットワークマッピングテーブルの構成を示す。
【
図14】制御アプリの設定情報の設定に関する処理の一例を示す。
【
図15】ネットワークマッピングテーブルの生成又は更新の処理の一例を示す。
【
図16】バスマッピングテーブルの生成又は更新の処理の一例を示す。
【
図17】メモリマッピングテーブルの生成又は更新の処理の一例を示す。
【
図18】アプリ間のデータ共有の流れの一例を示す。
【発明を実施するための形態】
【0018】
本発明の一実施形態に係る産業用のコントロールシステムは、一つ以上の産業用のコントロール装置を備える。当該コントロールシステムは、典型的には、更に、コントロール装置とハードウェアリソース(例えば、コントロール装置のI/Oポート)を共有し制御プログラムまたは情報プログラムを配置する拡張装置を備えることができる。また、本発明の一実施形態に係るコントロール装置は、ハードウェアリソースを共有可能な拡張装置の情報を取得し、コントロール装置及び共有された拡張装置に制御プログラムまたは情報プログラムを配置してよい。拡張装置は、必ずしもコントロール装置のハードウェアリソースを共有可能でなくてもよい。例えば、コントロール装置が接続されているバスに接続された拡張装置は、コントロール装置のハードウェアリソースを共有可能でよく、コントロール装置が接続されている通信ネットワークに接続された拡張装置は、コントロール装置のハードウェアリソースを共有可能でなくてよい。コントロール装置も拡張装置も演算装置の一例である。
【0019】
以下の説明では、「インターフェース装置」は、一つ以上のインターフェースデバイスでよい。当該一つ以上のインターフェースデバイスは、一つ以上の同種の通信インターフェースデバイスであってもよいし二つ以上の異種の通信インターフェースデバイスであってもよい。
【0020】
また、以下の説明では、「メモリ」は、一つ以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも一つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
【0021】
また、以下の説明では、「永続記憶装置」は、一つ以上の永続記憶デバイスである。永続記憶デバイスは、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)であり、具体的には、例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive)である。
【0022】
また、以下の説明では、「記憶装置」は、メモリと永続記憶装置の少なくともメモリでよい。
【0023】
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサモジュールである。少なくとも一つのプロセッサモジュールは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサデバイスであるが、GPU(Graphics Processing Unit)のような他種のプロセッサデバイスでもよい。少なくとも一つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサモジュールは、プロセッサコアでもよい。
【0024】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶装置及び/又はインターフェース装置等を用いながら行うため、処理の主語が、プロセッサ(或いは、そのプロセッサを有するコントローラのようなデバイス)とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
【0025】
また、以下の説明では、「yyy部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置及び/又はインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。各機能の説明は一例であり、複数の機能が一つの機能にまとめられたり、一つの機能が複数の機能に分割されたりしてもよい。
【0026】
また、以下の説明では、「xxxテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよいし(例えば、構造化データでもよいし非構造化データでもよいし)、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、一つのテーブルは、二つ以上のテーブルに分割されてもよいし、二つ以上のテーブルの全部又は一部が一つのテーブルであってもよい。
【0027】
また、以下の説明では、識別情報の一例として、ID、名前及び番号のいずれかが採用されるが、識別情報は、ID、名前及び番号のうちの少なくとも一つに代えて又は加えて、他種の要素を含んでもよい。
【0028】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別して説明する場合には、参照符号を使用することがある。
【0029】
また、以下の説明では、制御プログラムの一例が、制御アプリであり、情報プログラムの一例が、情報アプリである。「アプリ」は、アプリケーションプログラムの略である。
【0030】
図1は、実施形態に係るコントロールシステムを含むシステムの物理構成の一例を示す。
【0031】
コントロールシステム109が、制御対象装置12がある工場10に設置される。制御対象装置12は、例えば、産業用モータやコンプレッサのような産業機器である。工場10は、制御対象装置12のある現場の一例である。
【0032】
管理システム101及びコントロールシステム109が、通信ネットワーク108(例えば、インターネット又はWAN(Wide Area Network))に接続されている。コントロールシステム109は、例えば、工場10内の通信ネットワーク19(例えば、LAN(Local Area Network))に接続されている。コントロールシステム109が、通信ネットワーク19及び108経由で管理システム101と通信できる。通信ネットワーク108及び19は、情報アプリが行う情報通信処理(制御アプリがスキャン処理において制御対象装置12に制御データを送信する処理とは異なる通信処理)の際に使用される通信ネットワークである。
【0033】
コントロールシステム109及び一つ以上のI/Oモジュール119(I/Oポートの一例)が通信ネットワーク118(例えば、イーサネット(登録商標))に接続されている。通信ネットワーク118は、制御アプリが行う制御処理において制御データを制御対象装置12に送信するために使用される通信ネットワークである。
【0034】
通信ネットワーク19、108及び118は、それぞれ異なるネットワークでもよいし、通信ネットワーク19、108及び118のうちの二つ以上の通信ネットワークが同一のネットワークでもよい。
【0035】
一つ以上のI/Oモジュール119に一つ以上の周辺機器120が接続されている。周辺機器120は、センサやメディアドライブ(例えば、HDDやSSD)のような機器でよい。I/Oモジュール119は、周辺機器120が必要に応じて着脱可能に装着されるバススロットとして機能する。制御対象装置12は、周辺機器120経由又は非経由でI/Oモジュール119に接続される。制御対象装置12とI/Oモジュール119は、1:1、1:多、多:1及び多:多のいずれでもよい。また、一部のI/Oモジュール119は、通信ネットワーク118に加えて通信ネットワーク108に接続されてもよい、すなわち、当該一部のI/Oモジュール119は、制御アプリと情報アプリに共有のデバイスであってもよい。また、少なくとも一つのI/Oモジュール119は、少なくとも一つの演算装置40のネットワークI/F装置及びI/O制御装置の少なくとも一部でもよい。
【0036】
管理システム101は、コントロールシステム109の上位システムの一例である。管理システム101は、EPROM201、CPU202、メインメモリ203、周辺制御装置205、不揮発性記憶装置206及びネットワークI/F装置207を備える。管理システム101は、ネットワークI/F装置207を介して通信ネットワーク108に接続されている。
【0037】
コントロールシステム109は、一つ又は複数の演算装置40を備える。各演算装置40が、インターフェース装置、記憶装置及びそれらに接続されたプロセッサを備える。全ての演算装置40は、ハードウェア構成が同じでも異なっていてもよい。いずれの演算装置40も、制御アプリの配置先にも情報アプリの配置先にもなり得てよい。本実施形態では、演算装置40Mは、メインの演算装置であり、制御アプリの配置先であり、且つ、情報アプリの配置先となり得る演算装置である。演算装置40E1及び40E2の各々が、増設された演算装置であり、制御アプリの配置先となり得ず、情報アプリの配置先となり得る演算装置である。演算装置40Eは、減設されてもよい。言い換えれば、演算装置40M単体が、コントロールシステム109になることがあってもよい。以下、演算装置40Mを「コントロール装置40M」と言い、演算装置40Eを「拡張装置40E」と言うことがある。
【0038】
拡張装置40Eが有るか否か、拡張装置40Eがいずれの種類の通信媒体に接続されるか、及び、制御アプリと通信する情報アプリがいずれの演算装置40に配置されるかによって、コントロールシステム109のシステム構成が異なる。つまり、システム構成は、拡張装置40Eの有無、コントロール装置40M及び拡張装置40Eの各々が接続される通信媒体の種類、及び、各アプリの配置先の演算装置40に依存する。
図1の例では、拡張装置40E1は、通信ネットワーク118に接続される。拡張装置40E2は、PIOバス28(バスの一例)に接続される(「PIO」は、Programmed I/Oの略である)。PIOバス28は、ベースボードにプリントされたバスでよく、ベースボードにコントロール装置40Mと拡張装置40E2が接続されていることで、コントロール装置40Mで実行される制御アプリと拡張装置40E2で実行される情報アプリがPIOバス28経由でデータを通信(共有)してよい。
【0039】
なお、制御アプリが拡張装置40Eにも配置可能な実施形態、或いは、いずれの演算装置40も拡張又は減設が可能でありいずれの演算装置40も制御アプリの配置先となり得る実施形態では、システム構成は、制御アプリにも依存する。
【0040】
コントロール装置40Mを例に取り演算装置40のハードウェア構成を説明すると、例えば次の通りである。すなわち、コントロール装置40Mは、メモリ169(例えば、EPROM208及びメインメモリ210)、周辺制御装置212、I/O制御装置214、不揮発性記憶装置215、ネットワークI/F装置213、及び、それらに接続されたCPU209を備えている。I/O制御装置214及びネットワークI/F装置213が、インターフェース装置の一例である。メモリ169及び不揮発性記憶装置215が、記憶装置の一例である。CPU209がプロセッサの一例である。
【0041】
周辺制御装置212は、ネットワークI/F装置213、I/O制御装置214、不揮発性記憶装置215及びバス211に接続されている。このバス211には、その他にもメモリ169及びCPU209が接続されている。
【0042】
EPROM208には、予め制御アプリ及び情報アプリの少なくとも一つが格納されていてもよいし、プログラム配布サーバ(図示せず)のようなプログラムソースからダウンロードされたプログラムが格納されてもよい。コントロールシステム109に搭載される制御アプリと情報アプリはそれぞれひとつずつだけでなく、コントロールシステム109が使用できるリソースをプログラムごとに設定することにより、複数の制御アプリ及び/又は複数の情報アプリを搭載することができる。
【0043】
CPU209は、EPROM208に格納されている制御アプリ(及び情報アプリ)をメインメモリ210に読み出して実行し、制御アプリ(及び情報アプリ)の動作を制御する。例えば、CPU209は、制御アプリを実行することで、周辺制御装置212、I/O制御装置214及び複数のI/Oモジュール119を介して複数の周辺機器120を制御する。周辺機器120は、I/Oモジュール119に1:1で対応付けられていてよい。また、CPU209は、シングルコアとマルチコアのいずれでもよい。一つのコアが、一つ以上の制御アプリと一つ以上の情報アプリとのうちの少なくとも一つのアプリを実行してよい。典型的には、一つのコアは、一つの制御アプリ、一つの制御アプリと一つ以上の情報アプリ、又は、一つ以上の情報アプリを実行してよい。
【0044】
設定端末29が、通信ネットワーク19を介して(又は通信ネットワーク19を介さずに)、コントロールシステム109(例えば、コントロール装置40M)に接続されている。設定端末29は、例えば、入力デバイス、表示デバイス、インターフェース装置、記憶装置及びそれらに接続されたプロセッサを有する計算機(例えば、デスクトップ型、ラップトップ型又はタブレット型のパーソナルコンピュータ、或いは、スマートフォン)である。設定端末29は、コントロールシステム109に対する指示や設定を行ってよい。設定端末29は、管理システム101の一部であってもよい。
【0045】
図2は、コントロールシステム109の論理構成の一例を示す。
【0046】
図2が例示するコントロールシステム109は、複数の演算装置40の一例として、コントロール装置40Mと、拡張装置40E1及び40E2とを有する。
【0047】
コントロール装置40Mは、共有メモリ56を有する。共有メモリ56は、メモリ169が有する記憶領域のうちの少なくとも一部である。図示しないが、拡張装置40E1及び40E2の少なくとも一つにおいても、共有メモリが存在してよい。
【0048】
拡張装置40E1は、コントロール装置40Mが接続されているバックボード17に接続されている演算装置である。コントロール装置40Mと拡張装置40E1間の通信媒体は、バックボード17に設けられているPIOバス28である。
【0049】
拡張装置40E2は、コントロール装置40Mが接続されている通信ネットワーク118に接続されている演算装置である。コントロール装置40Mと拡張装置40E2間の通信媒体は、通信ネットワーク118である。
【0050】
このように、本実施形態では、コントロールシステム109は、アプリ間のデータ共有に共有メモリ56、PIOバス28及び通信ネットワーク118といった複数種類の通信媒体を利用することができる。
【0051】
PIOバス28を介した通信を行う演算装置40は、PIOバス制御61というPIOバス28用のI/Fを有する。PIOバス制御61は、
図3に例示するように、バスI/F301、バスドライバ302及びバスHW303を含む。バスI/F301は、PIOバス28に対するソフトウェアI/Fである。バスドライバ302は、PIOバス28経由のデータ共有(通信)を制御するソフトウェアである。バスHW303は、PIOバス28経由のデータ共有(通信)を制御するハードウェア(例えば、FPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))である。バスHW303は、例えばI/O制御装置214(
図1参照)の少なくとも一部でよい。
【0052】
通信ネットワーク(例えば通信ネットワーク118)を介した通信を行う演算装置40は、ネットワーク制御62という通信ネットワーク用のI/Fを有する。ネットワーク制御62は、
図4に例示するように、ネットワークI/F401、ネットワークドライバ402及びネットワークHW403を含む。ネットワークI/F401は、通信ネットワークに対するソフトウェアI/Fである。通信ネットワークの種類毎にネットワークドライバ402及びネットワークHW403が存在する。一つの種類の通信ネットワーク(この段落において「対象ネットワーク」)を例に取る。ネットワークドライバ402は、対象ネットワーク経由のデータ共有(通信)を制御するソフトウェアである。ネットワークHW403は、対象ネットワーク経由のデータ共有(通信)を制御するハードウェアである。ネットワークHW403は、例えばネットワークI/F装置213(
図1参照)の少なくとも一部でよい。
【0053】
コントロール装置40Mが、WEBサーバ69を実行する。WEBサーバ69は、WEBサーバとして機能するためのプログラムである。WEBサーバ69が、管理システム101及び設定端末29のうちの少なくとも一つと通信する。例えば、WEBサーバ69が、設定端末29から種々の指示や設定を受け付けるユーザインターフェースプログラムの一例である。WEBサーバ69は、コントロール装置40Mに代えて又は加えて、少なくとも一つの拡張装置40Eで実行されてもよい。
【0054】
管理システム101の不揮発性記憶装置206(記憶装置の一例)が、VCPU管理情報73を記憶する。VCPU管理情報73は、例えば、VCPU毎にVCPUイメージとVCPUのIDとを含む。「VCPU」は、仮想CPUを意味し、アプリの実行環境の一例である。VCPUは、例えば、VM(仮想マシン)又はコンテナでよい。
【0055】
管理システム101が、配布部72を有する。配布部72は、VCPUイメージを通信ネットワーク108経由で演算装置40に配布する。演算装置40では、当該VCPUイメージを基に、VCPU37が生成される。VCPU37が、一つ以上のアプリ(本実施形態では、制御アプリ41及び情報アプリ42のいずれか)を実行する。VCPU37が実現された後に、当該VCPU37にアプリが配布部72により配布されてもよいし、VCPUイメージが、アプリのイメージを含んでいて、VCPUイメージを基に、アプリを含んだVCPUが実現されてもよい。
図2が示す例では、コントロール装置40MにVCPU37A及び37Bが配布され、拡張装置40E1にVCPU37Cが配布され、拡張装置40E2にVCPU37Dが配布される。VCPU37Aが、制御アプリ41を実行する。VCPU37Bが、情報アプリ42Aを実行する。VCPU37Cが、情報アプリ42Bを実行する。VCPU37Dが、情報アプリ42Cを実行する。
【0056】
情報アプリ42は、当該情報アプリ42に定められた情報処理を行うアプリである。
【0057】
制御アプリ41は、当該制御アプリ41について定められた制御周期毎に、制御対象装置12を制御する処理でありリアルタイム性を有する処理であるスキャン処理(I/Oポートに接続された機器の情報を読み込むことと、読み込んだ情報を演算することと、演算した情報を書き込むこととを含んだ処理)を行う。スキャン処理に要する時間を「スキャンタイム」と言う。制御周期は、スキャンタイムと、スキャンタイム以外の時間である待機時間とで構成される。例えば、コントロールシステム109が、コントロール装置40M単体であり、コントロール装置40Mに制御アプリ41と一つ以上の情報アプリ42があり、且つ、CPU209がシングルコアの場合には、制御周期中の待機時間に、一つ以上の情報アプリ42の少なくとも一つが実行される。一方、例えば下記のうちのいずれかのケースでは、スキャンタイム中に(言い換えれば、待機時間でなくても)、少なくとも一つの情報アプリ42が実行されてよい。
・CPU209がマルチコアであり、CPU209が、制御アプリ41が専有していないCPUコアを有する場合。
・コントロール装置40Mが、複数のCPU209を有し、それら複数のCPU209が、制御アプリ41に専有されていないCPU209を含む場合。
・拡張装置40Eがあり、拡張装置40Eに情報アプリ42が配置されている場合。
【0058】
さて、VCPU37にてアプリを実行することで、一つの演算装置40(
図2が示す例では、コントロール装置40M)にて、制御の信頼性を落とさずに、制御アプリ41と情報アプリ42の両方を実行することができる。
【0059】
しかし、VCPU37にてアプリが実行されるシステムでは、アプリ間のデータ共有が難しい。アプリ間で、お互いのVCPU37の計算リソースを認識することができないためである。
【0060】
一比較例によれば、異なるVCPU上のアプリ間でのデータ共有を実現するためには、制御アプリと情報アプリのいずれについても、アプリ開発者が、当該アプリがいずれの種類の通信媒体経由でデータ共有を行うかを予め決定し、当該通信媒体の種類に従う情報でありデータ共有に必要な情報を、アプリに設定する必要がある。アプリに設定される情報を、便宜上、「設定情報」と言う。一比較例において、設定情報の具体例は、次の通りである。すなわち、通信媒体の種類が共有メモリの場合、設定情報は、共有メモリの名前を表す情報と、共有データ(共有対象のデータ)のデータ項目の名前を表す情報とを含む。通信媒体の種類がバスの場合、設定情報は、バス番号(例えば、レジスタアドレス)を表す情報と、共有データのデータ項目の名前を表す情報とを含む。通信媒体の種類が通信ネットワークの場合、設定情報は、宛先(例えば、IPアドレス及びポート番号)を表す情報と、プロトコル種類(例えば、HTTP、Modbus/TCP)を表す情報と、共有データのデータ項目の名前を表す情報とを含む。
【0061】
このように、一比較例では、アプリの設定情報が、当該アプリがいずれの種類の通信媒体経由でデータ共有を行うかに依存するため、アプリ開発が煩雑である。
【0062】
また、一比較例では、アプリの配置先は、当該アプリが設定情報に対応した種類の通信媒体経由で通信できる演算装置でなければならない。つまり、アプリの配置先が、当該アプリの設定情報に依存するため、アプリの配置先の自由度が低い。
【0063】
そこで、本実施形態では、通信媒体が共有メモリ56、PIOバス28及び通信ネットワーク118のいずれであってもデータ共有を実現する共有I/F(共有インターフェース)が設けられる。当該共有I/Fは、OSが一般に提供する共有メモリ用のI/Fよりも上のレイヤのI/Fである。共有I/Fは、アプリからI/O指定(例えば、関数呼出し)を受け付けるが、当該I/O指定において、宛先アプリの名前と共有データのデータ項目の名前とがそれぞれ引数とされていれば、当該アプリと当該宛先アプリとの間の通信媒体の種類に関わらずデータ共有が実現される。言い換えれば、共有I/Fは、いずれの種類の通信媒体経由でデータ共有するかをアプリに意識させない。このため、アプリ開発においてアプリに設定する情報は、アプリ間の通信媒体の種類に依存しない。故に、アプリ開発の煩雑さが低減される。
【0064】
また、本実施形態では、各演算装置40に共有I/Fが存在する。共有I/Fの存在により、通信媒体の種類をアプリが意識する必要の無いデータ共有が可能である。このため、アプリの配置先は、当該アプリの設定情報に依存しない。故に、アプリの配置先の自由度が高い。
【0065】
以上のように、本実施形態によれば、共有メモリ56の他に通信ネットワーク118とPIOバス28の少なくとも一つをアプリ間のデータ共有に利用することが可能なコントロールシステム109のシステム構成変更(例えば、演算装置40の増設又は減設に伴いアプリの配置先の演算装置40を変更すること、及び、演算装置40の接続先の通信媒体の種類を変更することの少なくとも一つ)を、制御のリアルタイム性を維持しつつ柔軟に行うことができる。
【0066】
以下、本実施形態を詳細に説明する。なお、アプリ間のデータ共有は、制御アプリ41間で行われても情報アプリ42間で行われてもよいが、本実施形態は、一つの制御アプリ41が一つ又は複数の情報アプリ42とデータを共有するケースを例に取る。また、本実施形態において、少なくともコントロール装置40MのOS(Operating System)は、リアルタイム汎用OS(情報処理向けの汎用OSの系統ではあるものの必要とされるリアルタイム性を提供できるリアルタイム機能を持ったOS)でよく、制御アプリ41や情報アプリ42の実行タイミングは、リアルタイム汎用OSにより制御されてよい。或いは、制御アプリ41や情報アプリ42の実行タイミングは、ランタイムソフトウェアにより制御されてよい。
【0067】
共有I/Fは、制御アプリ41と情報アプリ42に共通でもよいが、本実施形態では、制御アプリ41用の共有I/Fである制御共有I/F36と、情報アプリ42用の共有I/Fである情報共有I/F37とがある。つまり、制御アプリ41と情報アプリ42とで利用される共有I/Fが異なる。これにより、制御アプリ41に利用される共有I/F36の構成を、制御のリアルタイム性を考慮した構成とすることができ、以って、制御のリアルタイム性の維持に貢献することができる。
【0068】
また、例えば、コントロール装置40Mに複数の制御アプリ41が存在する場合、制御共有I/F36は、複数の制御アプリ41に共通でもよいが、制御アプリ41毎に、制御アプリI/F36が存在してよい。同様に、例えば、コントロール装置40M又は拡張装置40Eに複数の情報アプリ42が存在する場合、情報共有I/F37は、複数の情報アプリ42に共通でもよいが、情報アプリ42毎に、情報共有I/F37が存在してよい。
図2が示す例によれば、制御アプリ41と情報アプリ42Aがコントロール装置40Mに存在するため、制御アプリ41に利用される制御共有I/F36と情報アプリ42Aに利用される情報共有I/F37Aとがコントロール装置40Mに存在する。情報アプリ42Bが拡張装置40E1に存在するため、情報アプリ42Bに利用される情報共有I/F37Bが拡張装置40E1に存在する。情報アプリ42Cが拡張装置40E2に存在するため、情報アプリ42Cに利用される情報共有I/F37Cが拡張装置40E2に存在する。
【0069】
コントロール装置40M及び各拡張装置40Eに、マッピングテーブル群80が存在する。マッピングテーブル群80は、データ共有のために共有I/Fに参照されるテーブル群である(「テーブル群」は、一つ又は複数のテーブルである)。マッピングテーブル群80は、アプリ用のマッピングテーブル群であるアプリマッピングテーブル群81と、データ用のマッピングテーブル群であるデータマッピングテーブル群82とを含む。
図2が示す例によれば、マッピングテーブル群80Xは、アプリマッピングテーブル群81Xと、データマッピングテーブル群82Xとを含み、コントロール装置40Mに存在する。マッピングテーブル群80Yは、アプリマッピングテーブル群81Yと、データマッピングテーブル群82Yとを含み、拡張装置40E1に存在する。マッピングテーブル群80Zは、アプリマッピングテーブル群81Zと、データマッピングテーブル群82Zとを含み、拡張装置40E2に存在する。
【0070】
制御アプリ41は、制御アプリ41の設定情報を基に、制御共有I/F36に対してI/O指定を行う。当該I/O指定に応答して、制御共有I/F36が、マッピングテーブル群80Xを参照し、下記のいずれかを行う。
・共有メモリ56を介して情報アプリ42Aとの間で変数値のデータ共有を行うために、共有メモリ56に対して、当該変数値のI/Oを行う。
・PIOバス28を介して情報アプリ42Bとの間で変数値のデータ共有を行うために、PIOバス制御61Aに対して、当該変数値のI/Oを行う。
・通信ネットワーク118を介して情報アプリ42Cとの間で変数値のデータ共有を行うために、ネットワーク制御62Aに対して、当該変数値のI/Oを行う。
【0071】
情報アプリ42Aは、情報アプリ42Aの設定情報を基に、情報共有I/F37Aに対してI/O指定を行う。当該I/O指定に応答して、情報共有I/F37Aが、マッピングテーブル群80Xを参照し、共有メモリ56を介して制御アプリ41との間で変数値のデータ共有を行うために、共有メモリ56に対して、当該変数値のI/Oを行う。
【0072】
情報アプリ42Bは、情報アプリ42Bの設定情報を基に、情報共有I/F37Bに対してI/O指定を行う。当該I/O指定に応答して、情報共有I/F37Bが、マッピングテーブル群80Yを参照し、PIOバス28を介して制御アプリ41との間で変数値のデータ共有を行うために、PIOバス制御61Bに対して、当該変数値のI/Oを行う。
【0073】
情報アプリ42Cは、情報アプリ42Cの設定情報を基に、情報共有I/F37Cに対してI/O指定を行う。当該I/O指定に応答して、情報共有I/F37Cが、マッピングテーブル群80Zを参照し、通信ネットワーク118を介して制御アプリ41との間で変数値のデータ共有を行うために、ネットワーク制御62Bに対して、当該変数値のI/Oを行う。
【0074】
以下、制御アプリ41の設定情報を、「第1の設定情報」と言い、情報アプリ42の設定情報を、「第2の設定情報」と言う。また、本実施形態では、共有データは、変数値(変数の値)であり、共有データのデータ項目の名前は、変数名(変数の名前)であるとする。
【0075】
第1の設定情報及び第2の設定情報のいずれも、通信媒体の種類に依存しない情報である。
【0076】
図5に例示の通り、制御アプリ41の第1の設定情報500は、制御アプリ41の共有対象の変数毎に、変数名501、宛先アプリ名502及びアクセス権503といった情報を含む。一つの変数を例に取る(
図5の説明において「対象変数」)。変数名501は、対象変数の名前を表す情報である。宛先アプリ名502は、対象変数の変数値を共有する相手のアプリの名前を表す(“ALL”は、制御アプリ41以外の全てのアプリ(本実施形態では全ての情報アプリ42)を意味する)。アクセス権503は、対象変数の変数値の書き込みを行うアプリの名前と、対象変数の変数値の読み出しを行うアプリの名前とを表す(“ALL”は、制御アプリ41以外の全てのアプリを意味する)。
図5が示す例によれば、変数1の変数値は、全ての情報アプリ42との間で共有され、制御アプリ41によって書かれ、全ての情報アプリ42によって読まれる。
【0077】
図6に例示の通り、情報アプリ42の第2の設定情報600は、情報アプリ42の共有対象の変数毎に、変数名601、宛先アプリ名602及びアクセス権603といった情報を含む。一つの変数を例に取る(
図6の説明において「対象変数」)。変数名601は、対象変数の名前を表す情報である。宛先アプリ名602は、対象変数の変数値を共有する相手のアプリの名前を表す。アクセス権603は、対象変数の変数値の書き込みを行うアプリの名前と、対象変数の変数値の読み出しを行うアプリの名前とを表す。
図6が示す例によれば、変数1の変数値は、制御アプリ41との間で共有され、制御アプリ41によって書かれ、当該情報アプリ42によって読まれる。
【0078】
【0079】
制御共有I/F36は、制御I/F部701と、制御共有部702とを有する。制御I/F部701は、制御アプリ41からのI/O指定を受け付ける。制御共有部702は、I/O指定に応答して、マッピングテーブル群80を参照し、変数値のI/O(読み出し又は書き込み)を行う。制御共有部702は、例えば、複数の関数を含んだライブラリを有する。各関数は、読み出し又は書き込みを行うための関数である。
【0080】
【0081】
情報共有I/F37は、情報I/F部801と、情報共有部802とを有する。情報I/F部801は、情報アプリ42からのI/O指定を受け付ける。情報共有部802は、I/O指定に応答して、マッピングテーブル群80を参照し、変数値のI/Oを行う。情報共有部802は、例えば、複数の関数を含んだライブラリを有する。各関数は、読み出し又は書き込みを行うための関数である。
【0082】
少なくとも一つの共有I/Fの少なくとも一部が、少なくとも一つのアプリに含まれてもよい。例えば、制御共有I/F36の少なくとも一部が制御アプリ41に含まれてもよい。また、例えば、情報共有I/F37の少なくとも一部が情報アプリ42に含まれてもよい。
【0083】
マッピングテーブル群80は、上述したように、アプリマッピングテーブル群81及びデータマッピングテーブル群82を含む。アプリマッピングテーブル群81は、アプリテーブル900(
図9参照)、ネットワークマッピングテーブル1000(
図10参照)、バスマッピングテーブル1100(
図11参照)、及び、メモリマッピングテーブル1200(
図12参照)を含む。データマッピングテーブル群82は、データマッピングテーブル1300(
図13参照)を含む。マッピングテーブル群80の少なくとも一部がアプリに含まれてもよい。以下、各テーブルを説明する。
【0084】
【0085】
アプリテーブル900は、コントロールシステム109に存在するアプリ毎に、アプリ名901及び通信媒体種類902といった情報を保持する。一つのアプリを例に取る(
図9の説明において「対象アプリ」)。
【0086】
アプリ名901は、対象アプリの名前を表す。通信媒体種類902は、対象アプリがデータ共有のために利用する通信媒体の種類を表す(“ALL”は、全ての種類の通信媒体を利用することを意味する)。
【0087】
アプリ間の通信媒体の種類が変更されるシステム構成変更(例えば、演算装置40の増設又は減設に伴いアプリの配置先の演算装置40を変更すること、及び、演算装置40の接続先の通信媒体の種類を変更することの少なくとも一つ)がされた場合、アプリテーブル900(アプリ名901及び通信媒体種類902の対応関係)は更新される。アプリテーブル900の更新は、例えば、管理システム101によって行われてよい。
【0088】
本実施形態では、一つの制御アプリ41が複数の情報アプリ42とデータ共有する例が採用されているため、アプリ名901“0000”のアプリが制御アプリ41であり、それ以外のアプリが情報アプリ42である。複数の制御アプリ41が存在したり、情報アプリ42間でデータ共有が行われたりする例では、少なくとも一つのアプリについての通信媒体種類902の値は、複数の通信媒体種類を表す値であり得る。
【0089】
図10は、ネットワークマッピングテーブル1000の構成を示す。
【0090】
ネットワークマッピングテーブル1000は、通信媒体種類902が“ALL”又は“ネットワーク”であるアプリ毎に、アプリ名1001と、通信ネットワーク118経由でのデータ共有に必要な情報、例えば、プロトコル種類1002、IPアドレス1003、ポート番号1004及びデータパス1005といった情報を保持する。一つのアプリを例に取る(
図10の説明において「対象アプリ」)。
【0091】
アプリ名1001は、対象アプリの名前を表す。プロトコル種類1002は、対象アプリとのデータ共有(通信)で使用される通信プロトコル種類を表す。IPアドレス1003は、対象アプリとのデータ共有(通信)で使用されるIPアドレスを表す。ポート番号1004は、対象アプリとのデータ共有(通信)で使用されるポートの番号を表す。データパス1005は、対象アプリとのデータ共有(通信)で使用されるデータパスを表す。対象アプリとのデータ共有のために共有I/Fからネットワーク制御62に対して行われるI/Oでは、対象アプリに対応した情報1002~1005が使用される。
【0092】
図11は、バスマッピングテーブル1100の構成を示す。
【0093】
バスマッピングテーブル1100は、通信媒体種類902が“ALL”又は“バス”であるアプリ毎に、アプリ名1101と、PIOバス28経由でのデータ共有に必要な情報、例えば、バス番号1102といった情報を保持する。一つのアプリを例に取る(
図11の説明において「対象アプリ」)。
【0094】
アプリ名1101は、対象アプリの名前を表す。バス番号1102は、対象アプリとのデータ共有(通信)で使用されるバス番号を表す。対象アプリとのデータ共有のために共有I/FからPIOバス制御61に対して行われるI/Oでは、対象アプリに対応したバス番号1102が使用される。
【0095】
図12は、メモリマッピングテーブル1200の構成を示す。
【0096】
メモリマッピングテーブル1200は、通信媒体種類902が“ALL”又は“共有メモリ”であるアプリ毎に、アプリ名1201と、共有メモリ56経由でのデータ共有に必要な情報、例えば、共有メモリ名1202といった情報を保持する。一つのアプリを例に取る(
図12の説明において「対象アプリ」)。
【0097】
アプリ名1201は、対象アプリの名前を表す。共有メモリ名1202は、対象アプリとのデータ共有(通信)で使用され共有メモリ56の名前を表す。対象アプリとのデータ共有のために共有I/Fから共有メモリ56に対して行われるI/Oでは、対象アプリに対応した共有メモリ名1202が使用される。
【0098】
図13は、データマッピングテーブル1300の構成を示す。
【0099】
データマッピングテーブル1300は、変数毎に、変数名1301及び位置1302といった情報を保持する。一つの変数を例に取る(
図13の説明において「対象変数」)。
【0100】
変数名1301は、変数の名前を表す。位置1302は、変数値の位置を表す。例えば、共有メモリ56経由でデータ共有される変数値については、位置1302は、共有メモリ56の先頭からの位置と、データ長とを表す。
【0101】
以下、
図14~
図18を参照して、本実施形態で行われる処理の例を説明する。
【0102】
図14が示すように、システム構成情報1420が存在する。システム構成情報1420は、コントロールシステム109の構成を表す情報である。システム構成情報1420は、例えば、管理者により入力された情報を含んでもよいし、コントロール装置40M(例えば、制御アプリ41又は他のプログラム)により当該コントロール装置40M及び各演算装置40Eから収集された情報(例えば、アプリ名を含んだ情報)を含んでもよい。システム構成情報1420は、コントロール装置40M、設定端末29及び管理システム101のうちの少なくとも一つに格納されてよい。システム構成情報1420は、例えば、コントロールシステム109に存在する又は配布可能なアプリのアプリ名の一覧と、各アプリの属性(制御アプリと情報アプリのいずれであるか)と、演算装置40毎のアドレスとを表す情報を含んでよい。
【0103】
展開部1410が存在する。展開部1410は、例えば、コントロール装置40Mに存在し、WEBサーバ69を含んでもよい。或いは、展開部1410は、管理システム101又は設定端末29に存在してもよい。
【0104】
展開部1410は、設定GUI(Graphical User Interface)1400を表示する。設定GUI1400は、例えば設定端末29に表示される。設定GUI1400は、第1の設定情報を設定するためのGUI(ユーザインターフェースの一例)であり、例えば、制御アプリ41のアプリ開発者向けのGUIである。設定GUI1400は、入力テーブル1450と設定ボタン1401とを有する。入力テーブル1450は、変数毎に、共有対象とするか否かのチェックボックス1421と、変数名の入力欄1422と、宛先アプリ名の入力欄1423と、アクセス権の入力欄1424とを有する。展開部1410は、設定GUI1400上に(又は別のユーザインターフェース上に)、システム構成情報1420を基に、コントロールシステム109に存在する又は配布可能な情報アプリ42のアプリ名の一覧を表示してもよい。また、システム構成情報1420は、マッピングテーブル群80に含まれる情報の一部を含んでもよい。
【0105】
汎用コンピュータ分野では、複数のアプリによる変数値の書き込みが競合した場合、競合回避のために一つのアプリによる書き込みが終わることを待つことが行われる。しかし、本実施形態に係るコントロールシステム109において、スキャン処理中又はスキャン処理後の変数値書き込みに待ちが生じると、その待ちの間に次のスキャン処理の開始タイミングが到来するおそれがある。このため、汎用コンピュータ分野の競合回避技術を単純にコントロールシステム109に適用することができない。
【0106】
制御アプリ41のスキャン処理は情報アプリ42の情報処理に比べて高速である。このため、データ共有の対象でありI/Oポートに接続された産業機器に関する変数値が、繰り返し更新される。故に、情報アプリ42に対してそのような変数値を書き込みできる権限を与えないことが望ましい。
【0107】
言い換えると、情報アプリ42の情報処理(例えば、データ更新処理)の周期よりも制御アプリ41のスキャン処理の周期の方が短いため、情報アプリのアクセス権としてはリードオンリーであることが望ましい。
【0108】
また、情報アプリ42は、I/Oポートに関する変数値についてリードオンリーで読み出し、当該変数値を用いた計算の結果を、別途設定した変数の変数値として書き込むことができる。情報アプリ42が複数ある場合には、所定の変数値について、書き込みできる情報アプリ42は一つに限定されてよい。例として、制御アプリ41と三つの情報アプリ42が配置されたコントロールシステム109において、或る変数の変数値の書き込み権限は、制御アプリ41のみ、又は、三つの情報アプリ42のうちのいずれかのみに与えられてよい。
【0109】
以上のように、本実施形態では、各変数について、変数値を書き込むアプリは一つである。これにより、各変数について、二つ以上のアプリが同時に変数値を書き込むといった競合や、或るアプリが変数値を書き込んでいるため別のアプリが変数値の書き込みを待つといった書込み待ちが生じない。このため、変数値を書き込むアプリが一つであることは、制御アプリ41の制御のリアルタイム性を維持することに貢献する。
【0110】
さて、展開部1410は、入力テーブル1450に入力された内容に従う設定の指示を受け付けた場合(
図14が示す例では、設定ボタン1401が押された場合)、下記(A)~(C)のうちの少なくとも一つを行ってよい。なお、下記の処理において、必要に応じて、システム構成情報1420が展開部1410により参照される。
(A)展開部1410は、入力テーブル1450に入力された内容に従う第1の設定情報500を生成し、第1の設定情報500が設定された制御アプリ41を、コントロール装置40Mに配布する(例えば、コントロール装置40Mの空きのVCPU37に、制御アプリ41を展開する)。第1の設定情報500は、共有対象とされた変数毎に、変数名、宛先アプリ名及びアクセス権を含む。
(B)展開部1410は、入力テーブル1450に入力された内容に従う第2の設定情報600を生成し、第2の設定情報600を、制御アプリ41とデータ共有を行う情報アプリ42(共有対象とされる少なくとも一つの変数について、宛先アプリ名が表す情報アプリ42)に設定する。例えば、変数名“変数2”について、情報アプリ42A(アプリ名“0001”)に対する第2の設定情報600は、変数名“変数2”と、宛先アプリ名“0000”(制御アプリ41のアプリ名)と、アクセス権“WRITE:0000”及び“READ:0001”とを含む。すなわち、制御アプリ41の宛先アプリ名として設定されたアプリ名を持つ情報アプリ42に対する第2の設定情報600は、宛先アプリ名として、制御アプリのアプリ名を含み、アクセス権として、制御アプリ41について設定されたアクセス権と同じアクセス権を含む。
(C)展開部1410は、入力テーブル1450に入力された内容に従うマッピングテーブル群80のうちの少なくともデータマッピングテーブル群82を生成し、マッピングテーブル群80を、各演算装置40に配布する。マッピングテーブル群80中のアプリマッピングテーブル群81は、例えば、コントロール装置40Mの電源投入時に生成されていてよい。アプリマッピングテーブル群81は、各アプリ名について、当該アプリ名の情報アプリ42の配置先の演算装置40と制御アプリ41の配置先のコントロール装置40Mとの間の通信媒体の種類に基づく。ネットワークマッピングテーブル1000、バスマッピングテーブル1100及びメモリマッピングテーブル1200の各々について、アプリ名以外の情報の少なくとも一部は、システム構成情報1420から取得された情報でよい。データマッピングテーブル1300が有する各変数名は、入力テーブル1450において共有対象とされた変数の変数名である。データマッピングテーブル1300において、変数名以外の情報の少なくとも一部は、展開部1410により決定された情報でもよいし、システム構成情報1420から取得された情報でもよい。
【0111】
設定GUI1400によれば、データ共有対象の変数は、制御側が決めた変数(本実施形態では、設定GUI1400経由で指定された変数)であり、且つ、それらの変数の各々は、制御側が決めたアクセス権でしか、アクセスされない。これにより、リアルタイム性を有する制御を優先することができる。
【0112】
なお、例えば、アプリマッピングテーブル群81における各テーブルは、例えば、
図15~
図17に例示の方法に従い制御アプリ41により生成されてもよい。制御アプリ41により生成された各テーブルが、制御アプリ41又は展開部1410により、各演算装置40に配布されてよい。
【0113】
図15が示す例によれば、ネットワークマッピングテーブル1000が次のように生成又は更新される(
図15において、“0000”は、制御アプリ41のアプリ名であり、“0002”及び“0005”は、それぞれ、制御アプリ41と通信ネットワーク経由でデータ共有を行う情報アプリ42のアプリ名である)。すなわち、制御アプリ“0000”は、通信ネットワーク経由のデータ共有で使用する情報の取得要求を、ネットワーク制御62を介して、定期的に(又は不定期的に)ブロードキャスト送信する。当該取得要求を受けた演算装置40(典型的には拡張装置40E)において、当該演算装置40におけるアプリ(典型的には情報アプリ42)が、当該アプリのアプリ名を含む情報を返す(S1502)。制御アプリ“0000”が、返された情報に、ネットワークマッピングテーブル1000との差分があれば(或いは差分が無くても常に)、当該返された情報(例えば、差分のみ)をネットワークマッピングテーブル1000に反映する(S1503)。このようにして、システム構成変更が行われてもネットワークマッピングテーブル1000の内容を最新の内容に維持することができる。これは、例えば、第1の設定情報500中の宛先アプリ名“ALL”に対応した変数について有用である。通信ネットワーク118に演算装置40(典型的には拡張装置40E)が増設又は減設されたことに伴い情報アプリ42が追加又は削減されることがあるからである。なお、アプリのデータ共有相手として所定の条件に適合する全アプリを設定する方法としては、宛先アプリ名として“ALL”を設定することに代えて又は加えて、データ共有相手としてのアプリに関する所定の条件(例えば、アプリ名の条件、IPアドレスの条件)を設定する方法が採用されてもよい。
【0114】
図16が示す例によれば、バスマッピングテーブル1100が次のように生成又は更新される(
図16において、“0000”は、制御アプリ41のアプリ名であり、“0003”及び“0007”は、それぞれ、制御アプリ41とPIOバス28経由でデータ共有を行う情報アプリ42のアプリ名である)。すなわち、制御アプリ“0000”と情報アプリ“0003”及び“0007”の各々が初期化処理を行う(S1600)。制御アプリ41は、制御アプリ41の初期化処理(S1600)において、制御共有I/F36に、制御アプリ41のアプリ名“0000”と、データ共有相手の情報アプリ42のアプリ名“0003”及び“0007”を教える。同様に、情報アプリ42(例えば、情報アプリ“0003”)も、情報アプリ42の初期化処理(S1600)において、情報共有I/F37に、自分のアプリ名“0003”とデータ共有相手の制御アプリのアプリ名“0000”を教える。このような初期化処理において、制御共有I/F36も情報共有I/F37も、PIOバス28経由でデータ共有を行う相手のアプリのアプリ名を知ることができる。初期化処理の後、制御アプリ“0000”は、PIOバス28経由のデータ共有で使用する情報(アプリ名とバス番号を含む情報)を、PIOバス28に接続されている一つ以上の拡張装置40Eの情報アプリ“0003”及び“0007”の各々から、例えば通信ネットワーク経由で受ける(S1601)。制御アプリ“0000”が、受けた情報を、バスマッピングテーブル1100に反映する(S1602)。
【0115】
図17が示す例によれば、メモリマッピングテーブル1200が次のように生成又は更新される(
図17において、“0000”は、制御アプリ41のアプリ名であり、“0001”及び“0008”は、それぞれ、制御アプリ41と共有メモリ56経由でデータ共有を行う情報アプリ42のアプリ名である)。すなわち、制御アプリ“0000”と情報アプリ“0001”及び“0008”の各々が初期化処理(S1600)を行う。この初期化処理において、制御共有I/F36も情報共有I/F37も、共有メモリ56経由でデータ共有を行う相手のアプリのアプリ名を知ることができる。初期化処理の後、制御アプリ“0000”は、共有メモリ56経由のデータ共有で使用する情報(アプリ名と共有メモリ名を含む情報)を、同一のコントロール装置40Mの情報アプリ“0001”及び“0008”の各々から受ける(S1701)。制御アプリ“0000”が、受けた情報を、メモリマッピングテーブル1200に反映する(S1702)。
【0116】
以上のようして生成又は更新されたテーブルを含むマッピングテーブル群80を基に、共有I/F経由で、アプリ間のデータ共有が行われる。
図18を参照して、データ共有の一例を説明する。なお、説明を簡単にするために、制御アプリ41と情報アプリ42Aとの共有対象の変数の変数名は“変数1”とし、変数“変数1”の変数値を「変数値1」と言う。制御アプリ41と情報アプリ42Bとの共有対象の変数の変数名は“変数2”とし、変数“変数2”の変数値を「変数値2」と言う。制御アプリ41と情報アプリ42Cとの共有対象の変数の変数名は“変数3”とし、変数“変数3”の変数値を「変数値3」と言う。また、変数“変数1”~“変数3”の各々について、書き込み権限を有するアプリは、制御アプリ41のみとする。
【0117】
制御アプリ41が、制御周期毎に、スキャン処理において、変数値1~3を、ワークメモリ152(メモリ169(
図1参照)の一部)に書き込む。制御アプリ41が、制御周期毎に、スキャン処理中又はスキャン処理後、ワークメモリ152に書き込んだ変数値1~3の書き込みを制御共有I/F36に指定する。以下、変数値1~3の各々のデータ共有を説明する。
【0118】
<変数値1のデータ共有>
【0119】
制御アプリ41が、変数名“変数1”と、変数名“変数1”に対応した宛先アプリ名“0001”(情報アプリ42Aのアプリ名)とを第1の設定情報500から特定し、また、自分が書き込み権限を有することを第1の設定情報500から特定する。制御アプリ41が、“変数1”と“0001”とをそれぞれ引数としたI/O指定を、制御共有I/F36に対して行う。当該I/O指定は、変数値1の書き込みの指定である。制御共有I/F36において、制御I/F部701が、当該I/O指定を受ける。制御共有部702が、当該I/O指定の引数“0001”をキーにマッピングテーブル群80X中のアプリマッピングテーブル群81Xを参照することで、変数値1のデータ共有は共有メモリ56経由であることと、共有メモリ56経由のデータ共有に必要な情報を特定する。また、制御共有部702が、当該I/O指定の引数“変数1”をキーにマッピングテーブル群80X中のデータマッピングテーブル群82Xを参照することで、変数値1の書き込み先の位置を特定する。制御共有部702が、共有メモリ56経由のデータ共有に必要な特定された情報を用いて、特定された書き込み先位置に、変数値1を書き込む。
【0120】
その後、情報アプリ42Aが、変数名“変数1”と、変数名“変数1”に対応した宛先アプリ名“0000”(制御アプリ41のアプリ名)とを第2の設定情報600Aから特定し、また、自分が読み出し権限を有することを第2の設定情報600Aから特定する。情報アプリ42Aが、“変数1”と“0000”とをそれぞれ引数としたI/O指定を、情報共有I/F37Aに対して行う。当該I/O指定は、変数値1の読み出し指定である。情報共有I/F37Aにおいて、情報I/F部801Aが、当該I/O指定を受ける。情報共有部802Aが、当該I/O指定の引数“0000”をキーにマッピングテーブル群80X中のアプリマッピングテーブル群81Xを参照することで、変数値1のデータ共有は共有メモリ56経由であることと、共有メモリ56経由のデータ共有に必要な情報を特定する。また、情報共有部802Aが、当該I/O指定の引数“変数1”をキーにマッピングテーブル群80X中のデータマッピングテーブル群82Xを参照することで、変数値1の位置を特定する。情報共有部802Aが、共有メモリ56経由のデータ共有に必要な特定された情報を用いて、特定された位置から、変数値1を読み出す。読み出された変数値1が、I/O指定に対する応答して、情報共有I/F37Aの情報I/F部801Aから情報アプリ42Aに返る。
【0121】
以上のようにして、変数値1が、制御アプリ41と情報アプリ42A間で共有される。
【0122】
<変数値2のデータ共有>
【0123】
制御アプリ41が、変数名“変数2”と、変数名“変数2”に対応した宛先アプリ名“0003”(情報アプリ42Bのアプリ名)とを第1の設定情報500から特定し、また、自分が書き込み権限を有することを第1の設定情報500から特定する。制御アプリ41が、“変数2”と“0003”とをそれぞれ引数としたI/O指定を、制御共有I/F36に対して行う。当該I/O指定は、変数値2の書き込みの指定である。制御共有I/F36において、制御I/F部701が、当該I/O指定を受ける。制御共有部702が、当該I/O指定の引数“0003”をキーにマッピングテーブル群80X中のアプリマッピングテーブル群81Xを参照することで、変数値2のデータ共有はPIOバス28経由であることと、PIOバス28経由のデータ共有に必要な情報を特定する。また、制御共有部702が、当該I/O指定の引数“変数2”をキーにマッピングテーブル群80X中のデータマッピングテーブル群82Xを参照することで、変数値2の書き込み先の位置を特定する。制御共有部702が、PIOバス28経由のデータ共有に必要な特定された情報を用いて、特定された位置に対して変数値2を書き込むためのI/Oを、PIOバス制御61Aに対して行う。PIOバス制御61Aが、当該I/Oに従い、変数値2をPIOバス28に出力する。出力された変数値2は、例えば、拡張装置40E1のPIOバス制御61Bに送られる。
【0124】
その後、情報アプリ42Bが、変数名“変数2”と、変数名“変数2”に対応した宛先アプリ名“0000”(制御アプリ41のアプリ名)とを第2の設定情報600Bから特定し、また、自分が読み出し権限を有することを第2の設定情報600Bから特定する。情報アプリ42Bが、“変数2”と“0000”とをそれぞれ引数としたI/O指定を、情報共有I/F37Bに対して行う。当該I/O指定は、変数値2の読み出し指定である。情報共有I/F37Bにおいて、情報I/F部801Bが、当該I/O指定を受ける。情報共有部802Bが、当該I/O指定の引数“0000”をキーにマッピングテーブル群80Y中のアプリマッピングテーブル群81Yを参照することで、変数値2のデータ共有はPIOバス28経由であることと、PIOバス28経由のデータ共有に必要な情報を特定する。また、情報共有部802Bが、当該I/O指定の引数“変数2”をキーにマッピングテーブル群80Y中のデータマッピングテーブル群82Yを参照することで、変数値2の位置を特定する。情報共有部802Bが、PIOバス28経由のデータ共有に必要な特定された情報を用いて、特定された位置から変数値2を読み出すためのI/Oを、PIOバス制御61Bに対して行う。PIOバス制御61Bが、PIOバス28経由の変数値2を、情報共有I/F37Bに返す。変数値2が、I/O指定に対する応答して、情報共有I/F37Bの情報I/F部801Bから情報アプリ42Bに返る。
【0125】
以上のようにして、変数値2が、制御アプリ41と情報アプリ42B間で共有される。
【0126】
<変数値3のデータ共有>
【0127】
制御アプリ41が、変数名“変数3”と、変数名“変数3”に対応した宛先アプリ名“0002”(情報アプリ42Cのアプリ名)とを第1の設定情報500から特定し、また、自分が書き込み権限を有することを第1の設定情報500から特定する。制御アプリ41が、“変数3”と“0002”とをそれぞれ引数としたI/O指定を、制御共有I/F36に対して行う。当該I/O指定は、変数値3の書き込みの指定である。制御共有I/F36において、制御I/F部701が、当該I/O指定を受ける。制御共有部702が、当該I/O指定の引数“0002”をキーにマッピングテーブル群80X中のアプリマッピングテーブル群81Xを参照することで、変数値3のデータ共有は通信ネットワーク118経由であることと、通信ネットワーク118経由のデータ共有に必要な情報を特定する。また、制御共有部702が、当該I/O指定の引数“変数3”をキーにマッピングテーブル群80X中のデータマッピングテーブル群82Xを参照することで、変数値3の書き込み先の位置を特定する。制御共有部702が、通信ネットワーク118経由のデータ共有に必要な特定された情報を用いて、特定された位置に変数値3を書き込むためのI/Oを、ネットワーク制御62Aに対して行う。ネットワーク制御62Aが、当該I/Oに従い、変数値3を通信ネットワーク118に出力する。出力された変数値3は、例えば、拡張装置40E2のネットワーク制御62Bに送られる。
【0128】
その後、情報アプリ42Cが、変数名“変数3”と、変数名“変数3”に対応した宛先アプリ名“0000”(制御アプリ41のアプリ名)とを第2の設定情報600Cから特定し、また、自分が読み出し権限を有することを第2の設定情報600Cから特定する。情報アプリ42Cが、“変数3”と“0000”とをそれぞれ引数としたI/O指定を、情報共有I/F37Cに対して行う。当該I/O指定は、変数値3の読み出し指定である。情報共有I/F37Cにおいて、情報I/F部801Cが、当該I/O指定を受ける。情報共有部802Cが、当該I/O指定の引数“0000”をキーにマッピングテーブル群80Z中のアプリマッピングテーブル群81Zを参照することで、変数値3のデータ共有は通信ネットワーク118経由であることと、通信ネットワーク118経由のデータ共有に必要な情報を特定する。また、情報共有部802Cが、当該I/O指定の引数“変数3”をキーにマッピングテーブル群80Z中のデータマッピングテーブル群82Zを参照することで、変数値3の位置を特定する。情報共有部802Cが、通信ネットワーク118経由のデータ共有に必要な特定された情報を用いて、特定された位置から変数値3を読み出すためのI/Oを、ネットワーク制御62Bに対して行う。ネットワーク制御62Bが、通信ネットワーク118経由の変数値3を、情報共有I/F37Cに返す。変数値3が、I/O指定に対する応答して、情報共有I/F37Cの情報I/F部801Cから情報アプリ42Cに返る。
【0129】
以上のようにして、変数値3が、制御アプリ41と情報アプリ42C間で共有される。
【0130】
図18が示す例では、変数値1~3のいずれについても、書き手は制御アプリ41であり読み手は情報アプリ42であるが、書き手と読み手が逆でも、データ共有の方法は実質的に同様である。
【0131】
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【符号の説明】
【0132】
109…コントロールシステム