(57)【特許請求の範囲】
【請求項１】
模擬対象のプログラマブルコントローラで実行されるファームウェアおよび制御プログラムと、前記模擬対象のプログラマブルコントローラのハードウェアを模擬するのに必要なハードウェア情報と、を記憶する記憶部と、
前記模擬対象のプログラマブルコントローラにおける前記ハードウェアの動作を、前記ハードウェア情報に基づいて模擬するコントローラエミュレータ部と、
入力機器および出力機器と接続される入出力端子と、
前記入出力端子への情報の入出力を制御する入出力制御部と、
前記コントローラエミュレータ部で前記ファームウェアおよび前記制御プログラムを実行したときの前記入出力制御部による仮想的な入出力から前記入出力端子への実際の入出力のタイミングを調整する入出力タイミング調整部と、
を備え、
前記記憶部中の前記ファームウェアおよび前記ハードウェア情報は、前記模擬対象のプログラマブルコントローラに応じて変更可能であり、
前記記憶部は、前記入出力端子への入出力と、前記仮想的な入出力と、の間の対応関係を規定した入出力マッピング情報をさらに記憶し、
前記コントローラエミュレータ部は、模擬した前記ハードウェア上で、前記ファームウェアおよび前記制御プログラムを実行し、前記ファームウェアおよび前記制御プログラムを実行したときの前記仮想的な入出力を、前記入出力マッピング情報を参照して、前記入出力端子への入出力に変換し、
前記コントローラエミュレータ部は、前記模擬対象のプログラマブルコントローラを前記ファームウェアおよび前記制御プログラムにしたがって模擬するときに、実際の前記模擬対象のプログラマブルコントローラが前記制御プログラムを実行する際の実行時間を見積もり、前記実行時間に基づいて、実際の前記模擬対象のプログラマブルコントローラによる入出力の開始時刻を見積もり、
前記入出力タイミング調整部は、前記開始時刻になるまで、前記入出力制御部による制御を待機させ、前記開始時刻になると、前記入出力制御部による前記入出力端子への入出力の制御を許可することを特徴とするプログラマブルコントローラ。
【請求項２】
前記入出力マッピング情報の前記入出力端子への入出力と前記仮想的な入出力との間の関係を変更可能な外部機器と接続する通信インタフェース部をさらに備えることを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項３】
複数の前記コントローラエミュレータ部を備え、
前記記憶部は、それぞれの前記コントローラエミュレータ部で実行される前記ファームウェア、前記制御プログラムおよび前記ハードウェア情報を有することを特徴とする請求項１または２に記載のプログラマブルコントローラ。
【請求項４】
複数の前記コントローラエミュレータ部による前記模擬対象のプログラマブルコントローラにおける前記ハードウェアの模擬処理を切り替える切替部と、
割込み処理に対応付けられたイベントを検知する優先イベント検知部と、
をさらに備え、
前記優先イベント検知部は、前記割込み処理を優先的に実行するイベントである優先イベントの発生を検知すると、前記切替部に前記優先イベントの発生を通知し、
前記切替部は、前記優先イベントに対応付けられる前記割込み処理が実行されるように複数の前記コントローラエミュレータ部の切り替えを制御することを特徴とする請求項３に記載のプログラマブルコントローラ。
【請求項５】
模擬対象のプログラマブルコントローラで実行されるファームウェアおよび制御プログラムと、前記模擬対象のプログラマブルコントローラのハードウェアを模擬するのに必要なハードウェア情報と、を記憶する記憶部と、
前記模擬対象のプログラマブルコントローラにおける前記ハードウェアの動作を、前記ハードウェア情報に基づいて模擬する複数のコントローラエミュレータ部と、
複数の前記コントローラエミュレータ部による前記模擬対象のプログラマブルコントローラにおける前記ハードウェアの模擬処理を切り替える切替部と、
割込み処理に対応付けられたイベントを検知する優先イベント検知部と、
を備え、
前記コントローラエミュレータ部は、模擬した前記ハードウェア上で、前記ファームウェアおよび前記制御プログラムを実行し、
前記記憶部中の前記ファームウェアおよび前記ハードウェア情報は、前記模擬対象のプログラマブルコントローラに応じて変更可能であり、
前記記憶部は、それぞれの前記コントローラエミュレータ部で実行される前記ファームウェア、前記制御プログラムおよび前記ハードウェア情報を有し、
前記優先イベント検知部は、前記割込み処理を優先的に実行するイベントである優先イベントの発生を検知すると、前記切替部に前記優先イベントの発生を通知し、
前記切替部は、前記優先イベントに対応付けられる前記割込み処理が実行されるように複数の前記コントローラエミュレータ部の切り替えを制御することを特徴とするプログラマブルコントローラ。
【請求項６】
入力機器および出力機器と接続される入出力端子と、
前記入出力端子への情報の入出力を制御する入出力制御部と、
をさらに備え、
前記記憶部は、前記入出力端子への入出力と、前記コントローラエミュレータ部で前記ファームウェアおよび前記制御プログラムを実行したときの仮想的な入出力と、の間の対応関係を規定した入出力マッピング情報をさらに記憶し、
前記コントローラエミュレータ部は、前記ファームウェアおよび前記制御プログラムを実行したときの前記仮想的な入出力を、前記入出力マッピング情報を参照して、前記入出力端子への入出力に変換することを特徴とする請求項５に記載のプログラマブルコントローラ。
【請求項７】
前記入出力マッピング情報の前記入出力端子への入出力と前記仮想的な入出力との間の関係を変更可能な外部機器と接続する通信インタフェース部をさらに備えることを特徴とする請求項６に記載のプログラマブルコントローラ。
【請求項８】
前記入出力制御部による前記仮想的な入出力から前記入出力端子への実際の入出力のタイミングを調整する入出力タイミング調整部をさらに備え、
前記コントローラエミュレータ部は、前記模擬対象のプログラマブルコントローラを前記ファームウェアおよび前記制御プログラムにしたがって模擬するときに、実際の前記模擬対象のプログラマブルコントローラが前記制御プログラムを実行する際の実行時間を見積もり、前記実行時間に基づいて、実際の前記模擬対象のプログラマブルコントローラによる入出力の開始時刻を見積もり、
前記入出力タイミング調整部は、前記開始時刻になるまで、前記入出力制御部による制御を待機させ、前記開始時刻になると、前記入出力制御部による前記入出力端子への入出力の制御を許可することを特徴とする請求項６または７に記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想化技術を適用したプログラマブルコントローラに関する。
【背景技術】
【０００２】
プログラマブルコントローラは、一般に、工場内での装置制御に用いられるコントローラであり、装置製造メーカ等のユーザによって作成された装置制御用の制御プログラムを実行する。プログラマブルコントローラは、故障または新製品への更新のために、置き換えられることがある。しかし、プログラマブルコントローラでは、製品毎にプログラム仕様が統一されていないので、同一メーカの新製品に置き換える場合でも、従来の制御プログラムをそのまま流用することはできない。そのため、置き換え後の製品に対応した制御プログラムの修正が必要となる。【０００３】
特許文献１には、プロセス制御を対象とした制御システム向けに仮想化技術を適用したプロセス制御装置が開示されている。仮想化技術は、既存システム向けのソフトウェアを新しいハードウェア上で実行する技術である。特許文献１に記載のプロセス制御装置は、ハードウェア上に、ハードウェアの代わりとして動作する仮想化部を有する。また、特許文献１に記載のプロセス制御装置では、仮想化部上に、使用中のオペレーティングシステムを動作可能な状態としたまま、入れ替え後のオペレーティングシステムがインストールされる。また、入れ替え後のオペレーティングシステム上に、使用中の制御プログラムと同じ制御プログラムがインストールされる。そして、使用中のオペレーティングシステム上での制御プログラムの動作と、入れ替え後のオペレーティングシステム上での制御プログラムの動作と、を比較して、入れ替え後のオペレーティングシステム上で制御プログラムが正常に動作するかが判定される。正常に動作する場合には、入れ替え後のオペレーティングシステムに切り換えられるが、正常に動作しない場合には、インストールした新たなオペレーティングシステムが停止される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−５２５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プログラマブルコントローラの置き換えを考えた場合、置き換え後のプログラマブルコントローラで、置き換え前のプログラマブルコントローラで実行していた制御プログラムを変更しないで実行できることが望ましい。通常、プログラマブルコントローラの場合には、製品によって、ハードウェアアーキテクチャの種類および搭載されているシステムソフトウェアであるファームウェアの種類は多数存在する。そのため、置き換え前と置き換え後との間でプログラマブルコントローラのハードウェアアーキテクチャおよびファームウェアが異なることが多くなる。特許文献１に記載のプロセス制御装置を置き換え後のプログラマブルコントローラに適用した場合には、置き換え前のプログラマブルコントローラ毎に、ハードウェアを模擬する仮想化部の改変が必要となる。特に、模擬対象のプログラマブルコントローラの命令セットアーキテクチャと、仮想化部を実行するコントローラに搭載されるハードウェアの命令セットアーキテクチャと、が異なる場合には、命令セットレベルでのエミュレーションが不可欠となり、様々な種類の仮想化部を用意する必要がある。これに対応するためには、異なるハードウェアを模擬する仮想化部を搭載した複数種類のプログラマブルコントローラを用意する方法が考えられるが、この方法では、製品種別が莫大な数となってしまうという問題があった。【０００６】
本発明は、上記に鑑みてなされたものであって、プログラマブルコントローラを置き換える際に、置き換え前のプログラマブルコントローラのハードウェアおよびファームウェアに依存することなく置き換え前の制御プログラムを変更せずに使用することができるプログラマブルコントローラを得ることを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明のプログラマブルコントローラは、記憶部と、コントローラエミュレータ部と、入出力端子と、入出力制御部と、入出力タイミング調整部と、を備える。記憶部は、模擬対象のプログラマブルコントローラで実行されるファームウェアおよび制御プログラムと、模擬対象のプログラマブルコントローラのハードウェアを模擬するのに必要なハードウェア情報と、を記憶する。コントローラエミュレータ部は、模擬対象のプログラマブルコントローラにおけるハードウェアの動作を、ハードウェア情報に基づいて模擬する。入出力端子は、入力機器および出力機器と接続される。入出力制御部は、入出力端子への情報の入出力を制御する。入出力タイミング調整部は、コントローラエミュレータ部でファームウェアおよび制御プログラムを実行したときの入出力制御部による仮想的な入出力から入出力端子への実際の入出力のタイミングを調整する。記憶部中のファームウェアおよびハードウェア情報は、模擬対象のプログラマブルコントローラに応じて変更可能である。記憶部は、入出力端子への入出力と、仮想的な入出力と、の間の対応関係を規定した入出力マッピング情報をさらに記憶する。コントローラエミュレータ部は、模擬したハードウェア上で、ファームウェアおよび制御プログラムを実行し、ファームウェアおよび制御プログラムを実行したときの仮想的な入出力を、入出力マッピング情報を参照して、入出力端子への入出力に変換する。コントローラエミュレータ部は、模擬対象のプログラマブルコントローラをファームウェアおよび制御プログラムにしたがって模擬するときに、実際の模擬対象のプログラマブルコントローラが制御プログラムを実行する際の実行時間を見積もり、実行時間に基づいて、実際の模擬対象のプログラマブルコントローラによる入出力の開始時刻を見積もる。入出力タイミング調整部は、開始時刻になるまで、入出力制御部による制御を待機させ、開始時刻になると、入出力制御部による入出力端子への入出力の制御を許可する。
【発明の効果】
【０００８】
本発明にかかるプログラマブルコントローラは、プログラマブルコントローラを置き換える際に、置き換え前のプログラマブルコントローラのハードウェアおよびファームウェアに依存することなく置き換え前の制御プログラムを変更せずに使用することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１によるプログラマブルコントローラの構成の一例を模式的に示すブロック図
【図２】実施の形態１における制御プログラムの実行に関わる各ブロックの関係の一例を模式的に示す図
【図３】コントローラエミュレータ部とメモリ領域との間の関係の一例を示す図
【図４】実施の形態１によるプログラマブルコントローラでのエミュレーション処理の手順の一例を示すフローチャート
【図５】実施の形態１によるプログラマブルコントローラでの仮想出力をプログラマブルコントローラにおける実出力に変換する方法の一例を示す図
【図６】実施の形態２によるプログラマブルコントローラの構成の一例を模式的に示すブロック図
【図７】実施の形態２による入出力リフレッシュのタイミングの調整の一例を模式的に示すタイムチャート
【図８】実施の形態２によるプログラマブルコントローラでのエミュレーション処理の手順の一例を示すフローチャート
【図９】実施の形態２によるエミュレーションによる仮想出力をプログラマブルコントローラにおける実出力に変換する方法の一例を示す図
【図１０】実施の形態３によるプログラマブルコントローラの構成の一例を模式的に示すブロック図
【図１１】実施の形態３によるエミュレーションによる仮想出力をプログラマブルコントローラにおける実出力に変換する方法の一例を示す図
【図１２】実施の形態４によるプログラマブルコントローラの構成の一例を模式的に示すブロック図
【図１３】同一演算部上で実行される複数のコントローラエミュレータ部の切り替えタイミングの一例を示す図
【発明を実施するための形態】
【００１０】
以下に、本発明の実施の形態にかかるプログラマブルコントローラを図面に基づいて詳細に説明する。なお、これらの実施の形態によりこの発明が限定されるものではない。
【００１１】
以下の実施の形態では、プログラマブルコントローラを置き換える際に、置き換え前のプログラマブルコントローラの動作を、置き換え後のプログラマブルコントローラで模擬する場合を例に挙げて説明が行われる。すなわち、置き換え前のプログラマブルコントローラが、実施の形態によるプログラマブルコントローラで置き換えられる。以下では、実施の形態によるプログラマブルコントローラは、単に「プログラマブルコントローラ」と称され、置き換え対象となるプログラマブルコントローラは、「置き換え前のプログラマブルコントローラ」と称される。また、プログラマブルコントローラ上で「置き換え前のプログラマブルコントローラ」の動作が模擬されているときの仮想化された「置き換え前のプログラマブルコントローラ」は、「仮想コントローラ」と称される。また、「置き換え前のプログラマブルコントローラ」は、模擬対象のプログラマブルコントローラの１つである。
【００１２】
実施の形態１．
図１は、実施の形態１によるプログラマブルコントローラの構成の一例を模式的に示すブロック図である。プログラマブルコントローラ１は、演算部１０と、記憶部２０と、通信インタフェース部３０と、入出力インタフェース部４０と、を備える。演算部１０と、記憶部２０と、通信インタフェース部３０と、入出力インタフェース部４０と、は、バス５０を介して接続されている。
【００１３】
演算部１０は、予め定められたハードウェアアーキテクチャに従って構成されたマイクロプロセッサおよびチップセットである。演算部１０は、マイクロコンピュータまたはマイコンとも称される。演算部１０は、プログラマブルコントローラ１のハードウェア上で、別の種類のプログラマブルコントローラ１のハードウェアについての制御プログラムが実行される実行環境を模擬する機能部である仮想化部１１を有する。
【００１４】
仮想化部１１は、管理部１２と、コントローラエミュレータ部１３と、マッピング情報生成部１５と、メモリマップドＩ／Ｏ（Input/Output）領域１４と、を有する。
【００１５】
管理部１２は、演算部１０で実行されるソフトウェアの管理を行う機能部である。実施の形態１では、管理部１２は、複数のソフトウェアを並列して実行することを可能とするスケジューリング機能を有するオペレーティングシステム（Operating  System：ＯＳ）である。
【００１６】
コントローラエミュレータ部１３は、置き換え前のプログラマブルコントローラにおけるハードウェアの動作を模擬する機能部である。また、コントローラエミュレータ部１３は、記憶部２０から読み出した置き換え前のプログラマブルコントローラで使用されるファームウェアおよび制御プログラムを模擬したハードウェア上で実行する機能部である。コントローラエミュレータ部１３が模擬している置き換え前のプログラマブルコントローラが仮想コントローラとなる。コントローラエミュレータ部１３は、置き換え前のプログラマブルコントローラに関する後述するハードウェア情報を使用して、命令を実行し、また置き換え前のプログラマブルコントローラにおけるマイコンの周辺機器の動作を模擬して、ファームウェアを実行する。さらに、コントローラエミュレータ部１３は、ファームウェア上で、制御プログラムを実行する。
【００１７】
メモリマップドＩ／Ｏ領域１４は、コントローラエミュレータ部１３によるファームウェアおよび制御プログラムの模擬時に発生するマイコンの周辺機器との間の入出力を仮想化する領域である。メモリマップドＩ／Ｏ領域１４は、一例では、置き換え前のプログラマブルコントローラのマイコンが有する入出力制御レジスタを仮想化したものである。メモリマップドＩ／Ｏ領域１４には、エミュレーションするメモリ領域としてアドレスが割り当てられている。
【００１８】
マッピング情報生成部１５は、プログラマブルコントローラ１の入出力端子の入出力番号と、置き換え前のプログラマブルコントローラの入出力端子の入出力番号と、を対応付けた入出力マッピング情報を生成する機能部である。マッピング情報生成部１５は、生成した入出力マッピング情報を記憶部２０の入出力マッピング情報記憶部２４に保存する。マッピング情報生成部１５は、一例では、置き換え前のプログラマブルコントローラにおける入出力番号と、プログラマブルコントローラ１の入出力番号と、が同じになるように入出力マッピング情報を生成する。また、マッピング情報生成部１５は、一例では、制御プログラム中の入出力番号を参照して、制御プログラムでの入出力番号、すなわち置き換え前のプログラマブルコントローラにおける入出力番号と、プログラマブルコントローラ１の入出力番号と、を対応付ける。
【００１９】
記憶部２０は、ファームウェア記憶部２１と、制御プログラム記憶部２２と、ハードウェア情報記憶部２３と、入出力マッピング情報記憶部２４と、を有する。記憶部２０は、記憶されたデータを書き換え可能な記憶装置であり、一例では、ハードディスク装置またはＳＳＤ（Solid  State  Drive）などの不揮発性の記憶装置である。また、記憶部２０は、演算部１０での処理を実行する際にプログラムをロードしたり、データを一時的に保持したりするＲＡＭ（Random  Access  Memory）などの揮発性の記憶装置を有していてもよい。
【００２０】
ファームウェア記憶部２１は、置き換え前のプログラマブルコントローラで実行されるファームウェアを記憶する機能部である。なお、置き換え前のプログラマブルコントローラは、模擬対象のプログラマブルコントローラの１つである。なお、ファームウェア記憶部２１は、バイナリデータ形式のファームウェアを記憶する。制御プログラム記憶部２２は、置き換え前のプログラマブルコントローラで実行される制御プログラムを記憶する機能部である。
【００２１】
ハードウェア情報記憶部２３は、置き換え前のプログラマブルコントローラのハードウェアを模擬するのに必要なハードウェア情報を記憶する機能部である。ハードウェア情報は、コントローラエミュレータ部１３が模擬する置き換え前のプログラマブルコントローラのハードウェアに依存するハードウェア構成情報を有する。ハードウェア構成情報は、メモリマップ、命令模擬処理、レジスタ構成、各レジスタ操作時の模擬処理などを含む。
【００２２】
入出力マッピング情報記憶部２４は、入出力マッピング情報を記憶する機能部である。入出力マッピング情報は、プログラマブルコントローラ１の入出力インタフェース部４０における入出力端子に付された入出力番号と、仮想コントローラにおける入出力端子に付された入出力番号と、を対応付けた情報である。仮想コントローラにおける入出力端子に付された入出力番号は、置き換え前のプログラマブルコントローラにおける入出力端子に付された入出力番号に対応する。入出力マッピング情報は、コントローラエミュレータ部１３がメモリマップドＩ／Ｏ領域１４にアクセスした場合に、メモリマップドＩ／Ｏ領域１４の入出力番号を実際の入出力インタフェース部４０の入出力端子の入出力番号に変換する際に使用される。
【００２３】
通信インタフェース部３０は、プログラマブルコントローラ１の外部機器であるヒューマンインタフェース７０に接続される。ヒューマンインタフェース７０は、プログラマブルコントローラ１の記憶部２０に対してアクセス可能な装置である。ヒューマンインタフェース７０は、例えば、パーソナルコンピュータなどの情報処理装置である。ヒューマンインタフェース７０は、記憶部２０にファームウェア、制御プログラム、ハードウェア情報または入出力マッピング情報を記憶したり、既に記憶部２０に記憶されているファームウェア、制御プログラム、ハードウェア情報または入出力マッピング情報を記憶部２０から削除したりすることができる。また、ヒューマンインタフェース７０は、入出力マッピング情報の自動割付けを行った結果を受け取り、ユーザによる結果の確認を行うことが可能な装置である。さらに、ヒューマンインタフェース７０は、入出力マッピング情報の内容を修正することが可能な装置である。例えば、ユーザは、ヒューマンインタフェース７０で入出力マッピング情報を見ながら、プログラマブルコントローラ１の入出力端子への配線を行うことができる。また、ユーザは、入出力端子への配線を変更した場合には、ヒューマンインタフェース７０で入出力マッピング情報を変更することができる。
【００２４】
ハードウェア情報とファームウェアとは、置き換え前のプログラマブルコントローラの動作環境を規定するものである。そのため、模擬したい置き換え前のプログラマブルコントローラの動作環境であるハードウェア情報と、ファームウェアと、を、ヒューマンインタフェース７０から記憶部２０に書き込み、仮想化部１１で実行されるようにすることで、置き換え前のプログラマブルコントローラの所望の動作を模擬することが可能となる。
【００２５】
入出力インタフェース部４０は、入力端子４１と、出力端子４２と、入出力制御部４３と、を有する。入力端子４１は、入力機器と配線を介して接続される。入力機器の一例は、スイッチ、センサまたはロータリエンコーダである。出力端子４２は、出力機器と配線を介して接続される。出力機器の一例は、リレー、バルブまたはアクチュエータである。入力端子４１には、順番に入力番号「０」から「Ｎ」（Ｎは任意の自然数）までの番号が付される。出力端子４２には、順番に出力番号「０」から「Ｎ」までの番号が付される。なお、図１では、入力番号「ｉ」は「Input  i」（ｉは０からＮまでの自然数）と表記され、出力番号「ｉ」は「Output  i」と表記される。また、図１では、入力番号「０」の入力端子４１には、スイッチ８１が取り付けられ、出力番号「０」の出力端子４２には、ランプ９１が取り付けられている。この明細書では、入力端子４１と出力端子４２とは、まとめて入出力端子とも称され、入力機器と出力機器とは、まとめて入出力機器とも称される。
【００２６】
入出力制御部４３は、メモリマップドＩ／Ｏ領域１４と、入力端子４１および出力端子４２を介した入出力機器と、の間のデータの受け渡しを制御する機能部である。具体的には、入出力制御部４３は、入力端子４１または出力端子４２へのアクセスが発生した場合には、コントローラエミュレータ部１３と協働して、入出力リフレッシュ処理を実行する。入出力リフレッシュ処理は、算出した出力情報を出力端子４２を介して出力機器に設定し、入力端子４１を介して入力機器からの入力情報を受け取る処理である。
【００２７】
図１では、１台の入力機器と１台の出力機器とがプログラマブルコントローラ１に接続される場合が示されているが、プログラマブルコントローラ１に接続される入力機器と出力機器の台数は、限定されない。すなわち、複数台の入力機器または複数台の出力機器がプログラマブルコントローラ１に接続されてもよい。
【００２８】
また、置き換え前のプログラマブルコントローラでの入出力端子に対する入出力機器の接続のされ方が、プログラマブルコントローラ１での入出力端子に対する入出力機器の接続のされ方と異なる場合がある。このような場合には、プログラマブルコントローラ１の入出力端子に付された入出力番号と、置き換え前のプログラマブルコントローラの入出力端子に付された入出力番号と、の間の関係を対応付けた入出力マッピング情報が使用される。すなわち、コントローラエミュレータ部１３は、入出力マッピング情報を用いて、出力情報の出力先を、メモリマップドＩ／Ｏ領域１４中の仮想化された出力先からプログラマブルコントローラ１の実際の出力先に変換する。また、コントローラエミュレータ部１３は、メモリマップドＩ／Ｏ領域１４中の仮想化された入力元をプログラマブルコントローラ１での実際の入力元に変換し、入力情報を受け取る。
【００２９】
図２は、実施の形態１における制御プログラムの実行に関わる各ブロックの関係の一例を模式的に示す図である。ここでは、コントローラエミュレータ部１３、ファームウェア２１１ａおよび制御プログラム２２１ａをブロックとして示している。
【００３０】
ファームウェア２１１ａは、置き換え前のプログラマブルコントローラに搭載されるマイコンで実行可能なバイナリデータ形式のファイルとして提供される。
【００３１】
コントローラエミュレータ部１３は、ファームウェア２１１ａを示すバイナリファイルをデコードし、ソフトウェアで解釈して実行可能な命令セットシミュレータ（Instruction  Set  Simulator：ＩＳＳ）である。また、コントローラエミュレータ部１３は、管理部１２上の１プロセスとして構成される。なお、ここでは、命令セットアーキテクチャが異なるハードウェア向けのファームウェア２１１ａを実行するために、コントローラエミュレータ部１３が具体的にＩＳＳであるとして説明しているが、同等機能を持つハードウェア機能によってコントローラエミュレータ部１３が代替されてもよい。また、命令セットアーキテクチャが同一であるハードウェア向けのファームウェア２１１ａを実行する場合には、コントローラエミュレータ部１３のプロセスで直接ファームウェア２１１ａを実行するように構成してもよい。
【００３２】
制御プログラム２２１ａは、置き換え前のプログラマブルコントローラが実行可能な形式に変換されたデータとして提供される。制御プログラム２２１ａのデータ形式および実行方式は、プログラマブルコントローラごとに様々である。実行方式として、ファームウェア２１１ａによってインタプリタ方式で実行される方式、制御プログラム２２１ａを直接実行可能な専用ハードウェアを搭載する方式、あるいはこれらの両者を組み合わせた方式が想定される。実施の形態１では、ファームウェア２１１ａが制御プログラム２２１ａを直接解釈して実行するインタプリタ方式のものを対象とする。図２に示されるように、ファームウェア２１１ａがコントローラエミュレータ部１３上で実行されることで、制御プログラム２２１ａを実行するためのロジックが実行され、その結果、制御プログラム２２１ａの実行を実現することができる。
【００３３】
図３は、コントローラエミュレータ部とメモリ領域との間の関係の一例を示す図である。図３には、コントローラエミュレータ部１３と、コントローラエミュレータ部１３がエミュレーションするメモリ領域３１０と、コントローラエミュレータ部１３のプロセスに割り付けられたメモリ空間３５０と、が示されている。
【００３４】
メモリ領域３１０には、仮想コントローラに含まれるＲＯＭ（Read  Only  Memory）、ＲＡＭおよびメモリマップドＩ／Ｏ領域１４にメモリアドレスが割り当てられている。メモリマップドＩ／Ｏ領域１４は、置き換え前のプログラマブルコントローラにおけるマイコンの周辺機器のレジスタ領域である。
【００３５】
コントローラエミュレータ部１３のプロセスに割り付けられたメモリ空間３５０には、プログラマブルコントローラ１向けの実行コードに変換された制御プログラム２２１ａと、バイナリデータ形式のファームウェア２１１ａと、ハードウェア情報２３１と、入出力マッピング情報２４１と、が配置されている。
【００３６】
置き換え前のプログラマブルコントローラについてのハードウェア情報２３１および入出力マッピング情報２４１と、模擬対象のプログラマブルコントローラで実行される制御プログラム２２１ａおよびファームウェア２１１ａと、は、コントローラエミュレータ部１３のプロセスに割り付けられたメモリ空間３５０に展開される。制御プログラム２２１ａは、メモリ領域３１０の制御プログラム２２１がプログラマブルコントローラ１向けの実行コードに変換されたものである。ファームウェア２１１ａは、メモリ領域３１０のファームウェア２１１がバイナリデータ形式に変換されたものである。これらの制御プログラム２２１ａ、ファームウェア２１１ａ、ハードウェア情報２３１および入出力マッピング情報２４１は、必要に応じてコントローラエミュレータ部１３から参照され、あるいは値の更新が行われる。
【００３７】
入出力マッピング情報２４１では、プログラマブルコントローラ１の入力端子４１に付された入力番号が仮想コントローラの入力端子の入力番号に割り付けられる。そのため、プログラマブルコントローラ１における入力端子４１の入力番号と、割り付けられる仮想コントローラを識別する情報およびこの仮想コントローラにおける入力端子の入力番号と、が対応付けられている。また、入出力マッピング情報２４１では、プログラマブルコントローラ１の出力端子４２に付された出力番号が仮想コントローラに割り付けられる。そのため、プログラマブルコントローラ１における出力端子４２の出力番号と、割り付けられる仮想コントローラを識別する情報およびこの仮想コントローラにおける出力端子の出力番号と、が対応付けられている。
【００３８】
コントローラエミュレータ部１３は、ＣＰＵ（Central  Processing  Unit）を含む演算部の動作を模擬するために、仮想プログラムカウンタ１３１と、仮想汎用レジスタ１３２と、を有する。仮想プログラムカウンタ１３１および仮想汎用レジスタ１３２の実体は、ともにコントローラエミュレータ部１３のプロセス上の１データである。仮想汎用レジスタ１３２は、コントローラエミュレータ部１３での演算処理の結果生じる任意のデータを格納する。
【００３９】
仮想プログラムカウンタ１３１は、コントローラエミュレータ部１３が現在実行しているメモリ領域上、すなわちエミュレーションするメモリ領域３１０上のアドレスを示すためのデータである。コントローラエミュレータ部１３は、仮想プログラムカウンタ１３１に保持されるアドレスのファームウェア２１１を解釈し、実行する。このファームウェア２１１の実体は、コントローラエミュレータ部１３のプロセスに割り付けられたメモリ空間３５０上のファームウェア２１１ａである。そのため、コントローラエミュレータ部１３は、仮想プログラムカウンタ１３１に保存されたアドレスを、メモリ空間３５０のアドレスに変換して、メモリ空間３５０から実際のバイナリデータ形式のファームウェア２１１ａのデータの読出しを行う。
【００４０】
バイナリデータ形式のファームウェア２１１ａを命令として解釈し、実行する場合のロジック、およびその解釈した命令を模擬するための処理は、ハードウェア情報２３１に保存されている。そのため、コントローラエミュレータ部１３は、このハードウェア情報２３１を基に命令の模擬を行う。
【００４１】
ファームウェア２１１ａの実行によって、エミュレーションするメモリ領域３１０のメモリマップドＩ／Ｏ領域１４へのアクセスが発生した場合には、該当するハードウェア動作をソフトウェア的に模擬するための処理が実行される。マイコンの周辺機器の模擬処理は、ハードウェア情報２３１に保存されているので、このハードウェア情報２３１を基にコントローラエミュレータ部１３はメモリマップドＩ／Ｏ領域１４へのアクセスに関するハードウェア動作を模擬する。該当するハードウェア動作がプログラマブルコントローラ１の入出力を制御するためのものであった場合には、コントローラエミュレータ部１３は、さらに入出力マッピング情報２４１を参照し、入出力マッピング情報２４１の割付けに従って、実際の入力端子４１または出力端子４２を介した情報の入出力を行う。例えば、コントローラエミュレータ部１３は、アクセスする仮想的な入出力端子の入出力番号を実際の入出力端子の入出力番号に変換して、実際の入力端子４１から入力情報を受け取り、あるいは実際の出力端子４２へ出力情報を出力する。これは、コントローラエミュレータ部１３で演算されたメモリマップドＩ／Ｏ領域１４は、置き換え前のプログラマブルコントローラにおけるものであるため、プログラマブルコントローラ１における実際の入出力制御を行うレジスタの入出力番号へと変換が必要になるからである。
【００４２】
つぎに、このような構成のプログラマブルコントローラ１における動作について説明する。図４は、実施の形態１によるプログラマブルコントローラでのエミュレーション処理の手順の一例を示すフローチャートである。
【００４３】
演算部１０によって、コントローラエミュレータ部１３が管理部１２上のプロセスとして生成されると、コントローラエミュレータ部１３は、置き換え前のプログラマブルコントローラについてのハードウェア情報２３１および入出力マッピング情報２４１と、置き換え前のプログラマブルコントローラで実行されるファームウェア２１１ａおよび制御プログラム２２１ａを記憶部２０から読み出し、メモリ上にロードする（ステップＳ１１）。
【００４４】
次いで、コントローラエミュレータ部１３は、仮想プログラムカウンタ１３１を、ファームウェア２１１を起動するアドレスであるファームウェア起動アドレスに設定する（ステップＳ１２）。コントローラエミュレータ部１３は、初期状態では命令フェッチを行うアドレスをエミュレーションするメモリ領域３１０上のファームウェア起動アドレスに設定する。
【００４５】
その後、コントローラエミュレータ部１３は、仮想プログラムカウンタ１３１に設定されたファームウェア起動アドレスを、メモリにロードしたバイナリデータ形式のファームウェア２１１ａのアドレスに変換し、該当するアドレスの１命令分のファームウェア２１１ａをデコードし、実行する（ステップＳ１３）。この処理は、マイコン命令デコード処理と称される。ここで、マイコンの命令には、通常演算、論理演算、浮動小数点演算、ジャンプ、比較、メモリ転送、ＮＯＰ（no  operation）、特権命令の様々な種別があるが、コントローラエミュレータ部１３は、これらの命令を模擬するための処理を実行する。なお、特権命令には、制御レジスタ操作、割込みレベル変更、スーパバイザコール等がある。
【００４６】
例えば置き換え前のプログラマブルコントローラのマイコンが「ＡＤＤ  Ｒ１，  Ｒ２，  ＃１００」という命令を持っているものとする。この命令は、「Ｒ１レジスタにＲ２レジスタの値と即値１００とを加算した結果を格納する」という処理を実現するものである。仮想化部１１のコントローラエミュレータ部１３は、この命令に従って同等の処理を実行し、仮想汎用レジスタ１３２にその結果を格納する。
【００４７】
次いで、コントローラエミュレータ部１３は、実行対象の命令がメモリにアクセスする命令であるかを判定する（ステップＳ１４）。実行対象の命令がメモリにアクセスする命令ではない場合（ステップＳ１４でＮｏの場合）には、コントローラエミュレータ部１３は、ハードウェア情報２３１を参照して、実行対象の命令処理を実行する（ステップＳ１５）。この処理は、マイコン命令模擬処理と称される。
【００４８】
また、実行対象の命令がメモリにアクセスする命令である場合（ステップＳ１４でＹｅｓの場合）には、コントローラエミュレータ部１３は、アクセス先のアドレスがメモリマップドＩ／Ｏ領域１４であるかを判定する（ステップＳ１６）。アクセス先のアドレスがメモリマップドＩ／Ｏ領域１４ではない場合（ステップＳ１６でＮｏの場合）には、ステップＳ１５のマイコン命令模擬処理が実行される。また、アクセス先のアドレスがメモリマップドＩ／Ｏ領域１４である場合（ステップＳ１６でＹｅｓの場合）には、コントローラエミュレータ部１３は、ハードウェア情報２３１を参照して、実行対象の命令処理に対応する周辺機器についてのハードウェア模擬処理を実行する（ステップＳ１７）。この処理は、マイコン周辺機器模擬処理と称される。ここでは、コントローラエミュレータ部１３は、ハードウェア情報２３１にしたがってハードウェア動作を模擬する。また、コントローラエミュレータ部１３は、アクセス対象がプログラマブルコントローラ１の入出力制御を行うレジスタにアクセスする場合には、入出力マッピング情報２４１にしたがって、実際の入出力端子を介した入力情報または出力情報の反映を行う。具体的には、コントローラエミュレータ部１３は、入出力マッピング情報２４１を参照し、入出力制御部４３を介して入出力マッピング情報２４１に割り付けられた出力機器への出力情報の出力または入力機器からの入力情報の取り込みを行う。
【００４９】
その後またはステップＳ１５の後、コントローラエミュレータ部１３は、仮想プログラムカウンタ１３１をファームウェア２１１のつぎの命令に対応するアドレスに設定し（ステップＳ１８）、処理がステップＳ１３に戻る。
【００５０】
図５は、実施の形態１によるプログラマブルコントローラでの仮想出力をプログラマブルコントローラにおける実出力に変換する方法の一例を示す図である。ここでは、置き換え前のプログラマブルコントローラにおける出力制御が、出力制御レジスタ３４１を用いて制御される仕様であるものとする。また、出力制御レジスタ３４１は、エミュレーションするメモリ領域３１０のアドレス「０ｘ１０００１０００」にマッピングされているレジスタであり、各ビット「ｂ０」から「ｂ１５」が置き換え前のプログラマブルコントローラの各出力番号の出力端子に対応しているものとする。
【００５１】
置き換え前のプログラマブルコントローラにおいて、例えば出力番号「１」の出力端子を「ＯＮ」にしたい場合には、出力制御レジスタ３４１の１ビット目を「１」に設定すればよい。
【００５２】
仮に、コントローラエミュレータ部１３上のファームウェアで、すなわち仮想コントローラで、出力番号「１」，「２」の出力端子を「ＯＮ」にするための処理が実行された場合には、コントローラエミュレータ部１３は、出力制御レジスタ３４１のハードウェア模擬処理を実行する。すなわち、コントローラエミュレータ部１３は、出力制御レジスタ３４１に対応するメモリマップドＩ／Ｏ領域１４中の仮想レジスタ１４１に仮想出力を行う。このとき、仮想レジスタ１４１の１ビット目の「Ｘ１」および２ビット目の「Ｘ２」のビットが「ＯＮ」にされる。この出力制御レジスタ３４１は、プログラマブルコントローラ１の入出力を制御するためのレジスタであるため、入出力マッピング情報２４１を参照した上で、プログラマブルコントローラ１の実際の入出力制御レジスタ４４１にハードウェア模擬処理の結果が出力される。つまり、入出力制御部４３は、入出力制御レジスタ４４１の内容に基づいて、入力端子４１または出力端子４２の「ＯＮ」または「ＯＦＦ」の制御を行う。
【００５３】
図５の入出力マッピング情報２４１では、プログラマブルコントローラ１の出力番号「０」，「１」，「２」は、それぞれコントローラエミュレータ部１３で模擬される仮想コントローラ上の出力番号「２」，「１」，「０」に対応付けられている。そのため、仮想コントローラ上の出力番号「０」，「１」，「２」の値がそれぞれ「０」，「１」，「１」である場合には、出力端子４２の出力番号「０」，「１」，「２」の値はそれぞれ「１」，「１」，「０」に設定される。仮想コントローラ上の出力番号「３」以降の出力端子の値についても同様に、入出力マッピング情報２４１を参照して、対応付けられたプログラマブルコントローラ１の出力番号の出力端子４２に設定される。図５の例では、仮想コントローラ上の出力番号「３」以降の値はすべて「０」である。
【００５４】
実施の形態１では、コントローラエミュレータ部１３は、ファームウェア２１１ａの１命令分をデコードしながら実行し、同命令の模擬を行う。また命令のアクセス先がメモリマップドＩ／Ｏ領域１４である場合にはハードウェアの模擬も同時に行う。コントローラエミュレータ部１３は、１命令分の模擬が完了すると、次の命令を実行しながら模擬を行う処理を継続する。ここで、ファームウェア２１１ａの実行時に参照する各命令の模擬処理およびメモリマップドＩ／Ｏ領域１４にアクセスした場合のハードウェアの模擬処理は、ハードウェア情報２３１に保持されており、かつファームウェア２１１およびハードウェア情報２３１は通信インタフェース部３０を通じて変更することが可能である。そのため、これらを入れ替えることによって、模擬対象のプログラマブルコントローラを自由に入れ替えることが可能となる。また、ハードウェアの模擬処理でプログラマブルコントローラ１の入出力端子にアクセスする際に参照する入出力マッピング情報２４１は、ユーザによって手動で変更できるため、コントローラエミュレータ部１３上で模擬される仮想コントローラにおける仮想入出力と、プログラマブルコントローラ１の実際の入出力と、の対応付けを自由に変更することが可能となる。
【００５５】
なお、実施の形態１では、置き換え前のプログラマブルコントローラが、制御プログラムをファームウェアが直接解釈して実行する方式として説明したが、制御プログラム実行用の専用ハードウェアを搭載するプログラマブルコントローラを模擬する場合であっても、この専用ハードウェアを模擬するためのハードウェア情報を用意することで同様に制御プログラムの実行を模擬することができる。
【００５６】
また、実施の形態１では、通信インタフェース部３０を介して、ファームウェア２１１、制御プログラム２２１およびハードウェア情報２３１が入れ替えられたり、あるいは入出力マッピング情報２４１の内容が変更されたりした。しかし、プログラマブルコントローラ１が、これらの情報を保存した記憶媒体を取り付けるためのインタフェースを有し、プログラマブルコントローラ１が、このインタフェースを経由して記憶媒体からデータを読み出して模擬動作を行うように構成してもよい。記憶媒体の一例は、ＳＤメモリカード、ＣＤ（Compact  Disc）−ＲＯＭ、ＤＶＤ（Digital  Versatile  DiscまたはDigital  Video  Disc）−ＲＯＭ、ＢＤ（Blu-ray（登録商標）  Disc）−ＲＯＭ、コンパクトフラッシュ（登録商標）、フロッピー（登録商標）ディスクなどである。
【００５７】
実施の形態２．
図６は、実施の形態２によるプログラマブルコントローラの構成の一例を模式的に示すブロック図である。以下では、実施の形態１と異なる部分について説明する。また、実施の形態１と同一の構成要素には、同一の符号を付して、その説明を省略する。
【００５８】
実施の形態２では、コントローラエミュレータ部１３は、置き換え前のプログラマブルコントローラでファームウェアの命令を実行するのに要する時間を見積もり、置き換え前のプログラマブルコントローラにおける入出力リフレッシュ処理の開始時刻を算出し、その結果を後述する入出力タイミング調整部４３１に通知する機能をさらに有する。具体的には、コントローラエミュレータ部１３は、ファームウェア２１１ａを１命令文デコードし、実行するたびに、置き換え前のプログラマブルコントローラで実際に命令が実行される時間である命令実行時間を見積もる。また、コントローラエミュレータ部１３は、前回の入出力リフレッシュ処理が終了したときからの命令実行時間を積算した積算命令実行時間を算出する。そして、コントローラエミュレータ部１３は、入出力リフレッシュ用のレジスタへのアクセスがあると、その時点における積算命令実行時間を用いて、置き換え前のプログラマブルコントローラで制御プログラムを実行するスキャン処理が終了する時刻、すなわち実際に入出力リフレッシュ処理が開始される時刻を見積もる。コントローラエミュレータ部１３は、見積もった入出力リフレッシュ処理の開始時刻を入出力タイミング調整部４３１に出力する。
【００５９】
プログラマブルコントローラ１の入出力制御部４３は、入出力タイミング調整部４３１をさらに有する。入出力タイミング調整部４３１は、プログラマブルコントローラ１における入出力リフレッシュを実施するタイミングを、置き換え前のプログラマブルコントローラにおける入出力リフレッシュを実施するタイミングと同等にする機能を有する。入出力タイミング調整部４３１は、コントローラエミュレータ部１３が見積もった入出力リフレッシュ処理の開始時刻になるまで、入出力制御部４３を待機状態にし、入出力リフレッシュ処理の開始時刻になると、入出力制御部４３による入出力リフレッシュ処理の実行を可能にする。
【００６０】
図７は、実施の形態２による入出力リフレッシュのタイミングの調整の一例を模式的に示すタイムチャートである。図７では、上段に置き換え前のプログラマブルコントローラでの動作が示され、下段にコントローラエミュレータ部１３上での動作が示されている。置き換え前のプログラマブルコントローラでの動作に示されるように、一般的に、プログラマブルコントローラは、制御プログラムを実行するスキャン５１１と、外部の入力機器の入力情報の取り込みまたは外部の出力機器への演算結果である出力情報の出力を行う入出力リフレッシュ５２１と、を繰り返し実行している。そして、これによって、装置等の制御が実現される。
【００６１】
ここで、置き換え前のプログラマブルコントローラが旧式で演算速度が遅い場合を考える。このような場合には、置き換え前のプログラマブルコントローラ上でのスキャン５１１の実行に比して、コントローラエミュレータ部１３上でのスキャン５１２の実行の方が早く終了する。そこで、実施の形態２では、このような場合において、コントローラエミュレータ部１３上でのスキャン５１２の後に、入出力タイミング調整部４３１は、図７に示されるタイミング調整５３２の時間を設ける。これによって、置き換え前のプログラマブルコントローラにおける入出力リフレッシュ５２１と、コントローラエミュレータ部１３上での入出力リフレッシュ５２２と、が、同じ時刻に開始されるように調整される。その結果、制御対象の機器からの入力と、同機器への出力タイミングが実機動作と同等になる。
【００６２】
図８は、実施の形態２によるプログラマブルコントローラでのエミュレーション処理の手順の一例を示すフローチャートである。なお、以下では、実施の形態１の図４と異なる部分について説明する。
【００６３】
ステップＳ１１の後に、コントローラエミュレータ部１３は、積算命令実行時間を初期化する（ステップＳ３１）。その後、ステップＳ１２に処理が移る。
【００６４】
ステップＳ１５の後に、コントローラエミュレータ部１３は、エミュレートした命令の置き換え前のプログラマブルコントローラにおける命令実行時間を見積もり、その時点における積算命令実行時間に加算する（ステップＳ３２）。命令実行時間が加算された積算命令実行時間が新たな積算命令実行時間となる。その後、処理がステップＳ１８に移る。
【００６５】
ステップＳ１６でアクセス先アドレスがメモリマップドＩ／Ｏ領域１４である場合（ステップＳ１６でＹｅｓの場合）には、コントローラエミュレータ部１３は、アクセス先アドレスが入出力リフレッシュ用のレジスタであるかを判定する（ステップＳ３３）。アクセス先アドレスが入出力リフレッシュ用のレジスタではない場合（ステップＳ３３でＮｏの場合）には、コントローラエミュレータ部１３は、該当するレジスタにハードウェア模擬処理を実行する（ステップＳ３４）。その後、処理がステップＳ３２へと移る。
【００６６】
また、アクセス先アドレスが入出力リフレッシュ用のレジスタである場合（ステップＳ３３でＹｅｓの場合）には、コントローラエミュレータ部１３は、その時点の積算命令実行時間を取得し、積算命令実行時間から模擬対象である実機のプログラマブルコントローラにおける入出力リフレッシュ処理の開始時刻を見積もる（ステップＳ３５）。次いで、コントローラエミュレータ部１３は、見積もった入出力リフレッシュ処理の開始時刻を入出力タイミング調整部４３１に出力する（ステップＳ３６）。その後、コントローラエミュレータ部１３は、入出力タイミング調整部４３１から入出力リフレッシュの実行完了の通知を受け取るまで、待機状態となる（ステップＳ３７）。
【００６７】
入出力タイミング調整部４３１は、入出力リフレッシュ処理の開始時刻を受け取ると、入出力リフレッシュ処理の開始時刻を設定する（ステップＳ３８）。そして、入出力タイミング調整部４３１は、現在の時刻が入出力リフレッシュ処理の開始時刻になったかを判定し（ステップＳ３９）、現在の時刻が入出力リフレッシュ処理の開始時刻になっていない場合（ステップＳ３９でＮｏの場合）には、待機状態となる。
【００６８】
また、現在の時刻が入出力リフレッシュ処理の開始時刻になった場合（ステップＳ３９でＹｅｓの場合）には、入出力タイミング調整部４３１は、入出力制御部４３による入出力リフレッシュ処理の実行を許可する。すなわち、入出力制御部４３は、入力情報の取り込みまたは出力情報の設定を行う入出力リフレッシュ処理を実行する（ステップＳ４０）。その後、入出力タイミング調整部４３１は、入出力リフレッシュ処理の実行完了をコントローラエミュレータ部１３に通知する（ステップＳ４１）。
【００６９】
コントローラエミュレータ部１３は、入出力タイミング調整部４３１から入出力リフレッシュ処理の実行完了の通知を受けると（ステップＳ４２）、ステップＳ３１に処理が移る。
【００７０】
なお、ここでは、コントローラエミュレータ部１３が、マイコンの命令実行を行う度に実機での同命令の命令実行時間を見積もり、その積算命令実行時間で実機でのスキャン時間を見積もる方式を説明したが、これ以外の時間見積もりの方法を用いてもよい。例えば、制御プログラム２２１の１命令単位で命令実行時間を見積もり、その積算命令実行時間で実機でのスキャン時間を見積もってもよい。
【００７１】
図９は、実施の形態２によるエミュレーションによる仮想出力をプログラマブルコントローラにおける実出力に変換する方法の一例を示す図である。ここでは、実施の形態１で説明した出力制御レジスタ３４１に対応する仮想レジスタ１４１に値を設定し、それを実出力に反映する場合における出力時の動作を説明する。
【００７２】
コントローラエミュレータ部１３が実行するファームウェア２１１ａ上で出力制御レジスタ３４１へのアクセスが発生した場合には、置き換え前のプログラマブルコントローラにおける出力制御レジスタ３４１への出力と同じように、仮想レジスタ１４１に仮想出力が出力される。仮想出力は、置き換え前のプログラマブルコントローラにおける入出力機器の接続およびハードウェア構成を前提としたものである。そのため、実際のプログラマブルコントローラ１の入出力端子に対して入出力を行う場合には、プログラマブルコントローラ１における入出力機器の接続およびハードウェア構成に合わせて出力が変換される。すなわち、入出力マッピング情報２４１を参照して、仮想出力における出力番号が実際の出力番号に変換される。実施の形態２では、このときに、コントローラエミュレータ部１３は、積算命令実行時間４３５を参照して入出力リフレッシュの開始時刻「Ａ」を算出する。つまり、この場合には、実際の出力端子４２からの出力情報の出力時刻が算出される。ここで得られた、実際の出力番号と入出力リフレッシュの開始時刻「Ａ」とは、入出力タイミング調整部４３１に保持される。そして、入出力タイミング調整部４３１は、開始時刻「Ａ」になると、入出力制御部４３に入出力リフレッシュ処理の開始時刻になったことを通知し、入出力制御部４３は、各出力情報の出力を行う。
【００７３】
実施の形態２では、コントローラエミュレータ部１３が、コントローラエミュレータ部１３で実行する命令が実際の模擬対象のプログラマブルコントローラで実行されたときに要する命令実行時間を見積もり、さらに積算命令実行時間を見積もる。そして、実行対象の命令のアクセス先アドレスが入出力リフレッシュ用のレジスタである場合に、コントローラエミュレータ部１３は、積算命令実行時間を用いて、実際の模擬対象のプログラマブルコントローラにおける入出力リフレッシュ処理の開始時刻を見積もる。入出力タイミング調整部４３１は、この入出力リフレッシュ処理の開始時刻を用いて、プログラマブルコントローラ１での入出力リフレッシュ処理を行うタイミングを調整する。これによって、プログラマブルコントローラ１における入出力リフレッシュを行うタイミングを、模擬対象の実際のプログラマブルコントローラと同等にすることができるという効果を有する。
【００７４】
実施の形態３．
図１０は、実施の形態３によるプログラマブルコントローラの構成の一例を模式的に示すブロック図である。以下では、実施の形態１と異なる部分について説明する。また、実施の形態１と同一の構成要素には、同一の符号を付して、その説明を省略する。
【００７５】
実施の形態３では、プログラマブルコントローラ１は、複数の演算部１０Ａ，１０Ｂを有する。演算部１０Ａ，１０Ｂのそれぞれは、実施の形態１で説明したものと同様に、仮想化部１１Ａ，１１Ｂを有する。すなわち、プログラマブルコントローラ１には、複数の仮想化部１１Ａ，１１Ｂが設けられる。仮想化部１１Ａは、実施の形態１の演算部１０と同様に、管理部１２Ａ、コントローラエミュレータ部１３Ａ、メモリマップドＩ／Ｏ領域１４Ａおよびマッピング情報生成部１５Ａを有する。同様に、仮想化部１１Ｂは、管理部１２Ｂ、コントローラエミュレータ部１３Ｂ、メモリマップドＩ／Ｏ領域１４Ｂおよびマッピング情報生成部１５Ｂを有する。これによって、プログラマブルコントローラ１は、複数の置き換え前のプログラマブルコントローラを模擬することができる。すなわち、仮想化部１１Ａ上でファームウェア２１１ａが実行され、ファームウェア２１１ａ上で制御プログラム２２１ａが実行される。仮想化部１１Ｂ上でファームウェア２１２ａが実行され、ファームウェア２１２ａ上で制御プログラム２２２ａが実行される。なお、図１０では、２つの演算部１０Ａ，１０Ｂが設けられる場合を示しているが、３以上の演算部が設けられてもよい。
【００７６】
このような構成によって、ハードウェア情報記憶部２３は、仮想化部１１Ａ，１１Ｂに設けられるコントローラエミュレータ部１３Ａ，１３Ｂの数のハードウェア情報を記憶する。また、ファームウェア記憶部２１は、仮想化部１１Ａ，１１Ｂに設けられるコントローラエミュレータ部１３Ａ，１３Ｂの数のファームウェア２１１ａ，２１２ａを記憶し、制御プログラム記憶部２２は、仮想化部１１Ａ，１１Ｂに設けられるコントローラエミュレータ部１３Ａ，１３Ｂの数の制御プログラム２２１ａ，２２２ａを記憶する。入出力マッピング情報記憶部２４は、複数のコントローラエミュレータ部１３で共通の一つの入出力マッピング情報を記憶する。
【００７７】
図１０では、入力番号「６０」の入力端子４１にスイッチ８２がさらに接続され、出力番号「６０」の出力端子４２にマグネットスイッチ９２がさらに接続されている。
【００７８】
図１０に示されるプログラマブルコントローラ１では、演算部１０Ａで制御プログラム２２１ａが実行され、演算部１０Ｂで制御プログラム２２２ａが実行されており、これらの制御プログラム２２１ａ，２２２ａによって、外部の入力機器および出力機器が制御される。
【００７９】
図１０の例では、入力番号「０」から「５９」までの入力端子４１と出力番号「０」から「５９」までの出力端子４２とが制御プログラム２２１ａで制御される。また、入力番号「６０」から「１３９」までの入力端子４１と出力番号「６０」から「１３９」までの出力端子４２とが制御プログラム２２２ａで制御される。
【００８０】
各コントローラエミュレータ部１３Ａ，１３Ｂの動作は、実施の形態１の図４のフローチャートで説明したものと同様であり、それぞれのコントローラエミュレータ部１３Ａ，１３Ｂが独立に動作する。ここでは、プログラマブルコントローラ１のハードウェアが複数の演算部１０Ａ，１０Ｂを有しており、各演算部１０Ａ，１０Ｂ上で異なるコントローラエミュレータ部１３Ａ，１３Ｂが並列に実行される場合が示されている。しかし、プログラマブルコントローラ１のハードウェアが１つの演算部１０を有する場合で、時分割で動作を切り替えることによって仮想化部１１が複数のコントローラエミュレータ部１３Ａ，１３Ｂを有するようにしてもよい。この場合には、時分割で動作を切り替えながら、それぞれのコントローラエミュレータ部１３Ａ，１３Ｂでの処理が実行される。
【００８１】
図１１は、実施の形態３によるエミュレーションによる仮想出力をプログラマブルコントローラにおける実出力に変換する方法の一例を示す図である。コントローラエミュレータ部１３Ａが、入出力インタフェース部４０にアクセスする場合、すなわち図４のステップＳ１７での処理のように、入出力制御を行うハードウェアへのアクセスをファームウェアが行った場合には、入出力マッピング情報２４１を参照し、該当する実際の出力番号の出力端子４２への出力を行う。
【００８２】
なお、図１１では、図４とは入出力マッピング情報２４１の内容が異なっている。実施の形態１では、演算部１０は１つの仮想コントローラを模擬していたが、実施の形態３では、演算部１０Ａ，１０Ｂが２つの仮想コントローラを模擬している。そのため、入出力マッピング情報２４１の「仮想コントローラ割り付け」の欄には、演算部１０Ａで模擬される仮想コントローラＡか、演算部１０Ｂで模擬される仮想コントローラＢかが入力される。
【００８３】
ここでは、コントローラエミュレータ部１３Ａ上で実行されるファームウェア２１１ａが実際の入出力端子にアクセスした場合を例に挙げて説明する。出力制御レジスタ３４１は、実施の形態１で説明したものと同様であり、模擬対象の実際のプログラマブルコントローラが有する出力制御レジスタであり、各ビットがプログラマブルコントローラの各出力番号に対応する。
【００８４】
コントローラエミュレータ部１３Ａ上で、この出力制御レジスタ３４１の１ビット目、２ビット目への書込みが行われる場合には、該当するハードウェア模擬処理が実行される。すなわち、コントローラエミュレータ部１３Ａは、出力制御レジスタ３４１に対応するメモリマップドＩ／Ｏ領域１４の仮想レジスタ１４１の１ビット目と２ビット目への書き込みを行う。そして、コントローラエミュレータ部１３Ａは、入出力マッピング情報２４１を参照して、実際の出力端子４２への反映を行う。入出力マッピング情報２４１では、出力番号「０」から「５９」までがコントローラエミュレータ部１３Ａで模擬される「仮想コントローラＡ」に割り付けられており、かつプログラマブルコントローラ１の出力番号「０」，「１」，「２」はそれぞれコントローラエミュレータ部１３Ａ上の仮想レジスタの出力番号「２」，「１」，「０」に対応付けられている。そのため、コントローラエミュレータ部１３Ａは、出力端子４２の出力番号「０」，「１」，「２」の値をそれぞれ「１」，「１」，「０」に設定し、実際の入出力制御レジスタ４４１に出力する。なお、コントローラエミュレータ部１３Ｂから実際の入出力端子にアクセスした場合も、同様に、入出力マッピング情報２４１の割付けに基づいて実際の入出力端子へのアクセスが行われる。
【００８５】
このように共通の入出力マッピング情報２４１を参照して、複数のコントローラエミュレータ部１３Ａ，１３Ｂの入出力動作が模擬される。これによって、入力番号「０」から「５９」までの入力端子４１と出力番号「０」から「５９」までの出力端子４２とが制御プログラム２２１ａで制御される。また、入力番号「６０」から「１３９」までの入力端子４１と出力番号「６０」から「１３９」までの出力端子４２とが制御プログラム２２２ａで制御される動作が実現できる。そして、入出力マッピング情報２４１を変更することで、複数のコントローラエミュレータ部１３Ａ，１３Ｂ間の実際の入力端子４１および出力端子４２への割り当て関係を変更することができる。
【００８６】
なお、上記の説明では、各コントローラエミュレータ部１３Ａ，１３Ｂの入出力が、プログラマブルコントローラ１のいずれかの実際の入力端子４１および出力端子４２に割り当てられていた。しかし、コントローラエミュレータ部１３Ａ，１３Ｂ間での入出力の接続が必要な場合には、コントローラエミュレータ部１３Ａ，１３Ｂ間の入出力が内部で接続されるように構成されてもよい。この場合、例えば、入出力マッピング情報２４１においてコントローラエミュレータ部１３Ａ，１３Ｂ間の入出力関係を記述しておき、一方のコントローラエミュレータ部が他のコントローラエミュレータ部に接続された出力にアクセスした場合に、その出力結果をプロセス間通信でもう一方のコントローラエミュレータ部の入力に反映する方法を利用することができる。
【００８７】
実施の形態３では、プログラマブルコントローラ１は、複数のコントローラエミュレータ部１３Ａ，１３Ｂを有し、それぞれのコントローラエミュレータ部１３Ａ，１３Ｂで異なる置き換え前のプログラマブルコントローラの動作を模擬するようにした。これによって、複数の既存の制御プログラム２２１ａ，２２２ａを一つのプログラマブルコントローラ１のハードウェア上に統合し、同時に実行することが可能となる。
【００８８】
実施の形態４．
図１２は、実施の形態４によるプログラマブルコントローラの構成の一例を模式的に示すブロック図である。以下では、実施の形態１，３と異なる部分について説明する。また、実施の形態１，３と同一の構成要素には、同一の符号を付して、その説明を省略する。
【００８９】
実施の形態３の場合と同様に、プログラマブルコントローラ１は、複数のコントローラエミュレータ部１３Ａ，１３Ｂを有する。ただし、実施の形態３では、プログラマブルコントローラ１は、物理的に異なる複数の演算部１０Ａ，１０Ｂを有し、それぞれの演算部１０Ａ，１０Ｂがコントローラエミュレータ部１３Ａ，１３Ｂを有する構成であったが、実施の形態４では、プログラマブルコントローラ１は、１つの演算部１０を有し、演算部１０中の仮想化部１１が複数のコントローラエミュレータ部１３Ａ，１３Ｂを有する構成である。上記したように、このような場合には、演算部１０は、複数のコントローラエミュレータ部１３Ａ，１３Ｂを時分割で切り替えながら動作させる。
【００９０】
図１２では、入力番号「０」の入力端子４１にロータリエンコーダ８３が接続され、入力番号「６０」の入力端子４１にスイッチ８２が接続されている。また、出力番号「０」の出力端子４２にランプ９１が接続され、出力番号「６０」の出力端子４２にマグネットスイッチ９２が接続されている。
【００９１】
プログラマブルコントローラ１の入出力制御部４３は、優先イベント検知部４３２をさらに有する。優先イベント検知部４３２は、複数のコントローラエミュレータ部１３Ａ，１３Ｂで模擬動作処理中に、優先的に処理すべき割込みプログラムに対応付けられたイベントの発生を検知し、イベントが発生したことを示すイベント通知を演算部１０に通知する機能を有する。以下では、優先的に処理すべき割込みプログラムに対応付けられたイベントは、優先イベントと称される。
【００９２】
演算部１０の管理部１２は、切替部１２１をさらに有する。切替部１２１は、優先イベント検知部４３２からイベント通知が通知されると、優先イベントの発生によって割込みプログラムを実行するコントローラエミュレータ部とは別のコントローラエミュレータ部が動作していても、割込みプログラムを実行するコントローラエミュレータ部に処理を切替える機能部である。
【００９３】
プログラマブルコントローラ１は、一般的に、特定のイベントを契機に高速に動作する割込みプログラムの実行機能を有する。イベントは、入力信号の立上りまたは立下り、パルスカウンタの値の変動、内部タイマのカウントアップなどである。これらのイベントをトリガとして動作する割込みプログラムは、実行中の制御プログラムより高優先度で動作し、高速な応答性が求められる。
【００９４】
２つのコントローラエミュレータ部１３Ａ，１３Ｂが、同一の演算部１０上で実行されている場合で、コントローラエミュレータ部１３Ａが実行中にコントローラエミュレータ部１３Ｂが処理すべき優先イベントが発生する場合がある。この場合には、コントローラエミュレータ部１３Ａに割り当てられた時間が経過するまで、コントローラエミュレータ部１３Ｂは優先イベントに対応する割込み処理を実行できないため、割込みプログラムの応答性が悪化してしまう。
【００９５】
そこで、実施の形態４では、優先イベント発生時の応答性能を高めるために、入出力制御部４３に優先イベント検知部４３２が設けられ、管理部１２に切替部１２１が設けられる。
【００９６】
ここで、割り込みが発生する例について説明する。ロータリエンコーダ８３のパルスカウントが予め定められた設定値に達した場合に、コントローラエミュレータ部１３Ｂが割込みプログラムを実行するものとして説明する。
【００９７】
優先イベント検知部４３２には、優先イベントとして通知が必要な条件が設定される。優先イベントは、イベントが発生すると、優先的に割り込みプログラムを実行させなければならないイベントである。ここでは、「入力番号「０」の入力端子４１に対するパルス数が予め定められた設定値となった場合」が条件に設定される。コントローラエミュレータ部１３Ａ，１３Ｂ上で模擬されるファームウェア２１１ａ，２１２ａがどのようにしてこの設定を行うかは、コントローラエミュレータ部１３Ａ，１３Ｂの模擬対象となるプログラマブルコントローラのハードウェア仕様によって異なる。ここでは、パルスカウントを行う専用ハードウェアを搭載したプログラマブルコントローラを、コントローラエミュレータ部１３Ａが模擬するものと想定して説明する。専用ハードウェアを搭載しているプログラマブルコントローラ向けのファームウェアは、この専用ハードウェアのレジスタへアクセスする。このレジスタへのアクセスによって、コントローラエミュレータ部１３Ａによるハードウェア模擬処理が実行される。ハードウェア模擬処理において優先イベント検知部４３２に対してパルス監視が必要な入力番号「０」と、イベント条件となるパルス数と、が設定される。
【００９８】
設定された優先イベントの条件が成立した場合には、優先イベント検知部４３２は、切替部１２１へイベント発生を通知する。切替部１２１は、優先イベントを処理すべきコントローラエミュレータ部１３Ｂ上の仮想汎用レジスタ１３２に記憶されたハードウェアレジスタ情報をイベント発生時の状態とするとともに、優先イベントを処理すべきコントローラエミュレータ部１３Ｂが実行されていなければ、演算部１０上で実行されるコントローラエミュレータ部１３Ａ，１３Ｂの切り替えを行う。
【００９９】
図１３は、同一演算部上で実行される複数のコントローラエミュレータ部の切り替えタイミングの一例を示す図である。この図で、上段はコントローラエミュレータ部１３Ａの動作の状態を示し、下段は、コントローラエミュレータ部１３Ｂの動作の状態を示す。また、横軸は、時間である。
【０１００】
優先イベントが発生していない場合には、コントローラエミュレータ部１３Ａ，１３Ｂは、特定の実行周期に基づいて時分割で切り替えられながら、処理を実行する。図１３では、まず、実行周期５５１でコントローラエミュレータ部１３Ａが処理を実行し、その後の実行周期５５２でコントローラエミュレータ部１３Ｂが処理を実行する。次の実行周期５５３では、コントローラエミュレータ部１３Ａが処理を実行するが、この実行周期５５３中の時刻ｔ１に、優先イベント５６０が発生したものとする。ここでは、優先イベント５６０は、ロータリエンコーダ８３によるパルスカウンタ数が設定値に達することである。優先イベント検知部４３２は、優先イベント５６０の発生を検知し、優先イベントの発生を示すイベント通知を切替部１２１に通知する。切替部１２１は、イベント通知を受けると、コントローラエミュレータ部１３Ａが動作している実行周期５５３の途中であっても、コントローラエミュレータ部１３Ａからコントローラエミュレータ部１３Ｂへと処理を切り替え、コントローラエミュレータ部１３Ｂが動作可能な状態とする。その後、コントローラエミュレータ部１３Ｂは、優先イベントに対応する割込みプログラムを実行する。
【０１０１】
ここで、割込みプログラムを実行する時間である割込みプログラム実行用割り当て時間５７０は、特定のアルゴリズムに基づいて算出される。あるいは、割込みプログラム実行用割り当て時間５７０は、ファームウェア２１２ａそのものを変更して、割込みプログラム完了時にフック処理を追加し、これにより割込みプログラムの実行完了を検出すようにしてもよい。フック処理を追加する方式の場合には、割込みプログラムの実行完了時刻を予想する必要がないため、割込みプログラム実行用割り当て時間５７０の計算は不要である。割込みプログラム実行用割り当て時間５７０が経過すると、切替部１２１は、コントローラエミュレータ部１３Ａへと処理を切替える。そして、実行周期５５４で、ハードウェアレジスタ情報が優先イベント５６０の発生時の状態に戻され、コントローラエミュレータ部１３Ａが処理を行う。
【０１０２】
なお、上記した説明では、優先イベント検知部４３２はパルスカウントの機能を有する機能ブロックであるものとして説明したが、実施の形態がこれに限定されるものではない。例えば、優先イベント検知部４３２は、入力信号の立上りまたは立下りなどの他のイベント検出機能を複数有するように構成されてもよい。
【０１０３】
実施の形態４では、プログラマブルコントローラ１は、優先イベントを検知する優先イベント検知部４３２と、優先イベントが検知された場合に割込み処理を行うべきコントローラエミュレータ部１３Ａ，１３Ｂに処理を切り替える切替部１２１と、を備える。これによって、優先イベント発生時に割込みプログラムを実行するコントローラエミュレータ部１３Ａ，１３Ｂへと強制的に切り替えられ、同一の演算部１０上で複数のコントローラエミュレータ部１３Ａ，１３Ｂを実行する場合において、優先イベントに対する応答性を高めることができる。
【０１０４】
また、上記した実施の形態２を実施の形態３，４と組み合わせてもよい。これによって、プログラマブルコントローラ１における入出力リフレッシュを行うタイミングを、模擬対象の実際のプログラマブルコントローラと同等にすることができる。
【０１０５】
以上の実施の形態に示した構成は、本発明の内容の一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、本発明の要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。
【符号の説明】
【０１０６】
１  プログラマブルコントローラ、１０，１０Ａ，１０Ｂ  演算部、１１，１１Ａ，１１Ｂ  仮想化部、１２，１２Ａ，１２Ｂ  管理部、１３，１３Ａ，１３Ｂ  コントローラエミュレータ部、１４，１４Ａ，１４Ｂ  メモリマップドＩ／Ｏ領域、１５，１５Ａ，１５Ｂ  マッピング情報生成部、２０  記憶部、２１  ファームウェア記憶部、２２  制御プログラム記憶部、２３  ハードウェア情報記憶部、２４  入出力マッピング情報記憶部、３０  通信インタフェース部、４０  入出力インタフェース部、４１  入力端子、４２  出力端子、４３  入出力制御部、５０  バス、７０  ヒューマンインタフェース、８１，８２  スイッチ、８３  ロータリエンコーダ、９１  ランプ、９２  マグネットスイッチ、１２１  切替部、１３１  仮想プログラムカウンタ、１３２  仮想汎用レジスタ、２１１，２１１ａ，２１２ａ  ファームウェア、２２１，２２１ａ，２２２ａ  制御プログラム、２３１  ハードウェア情報、２４１  入出力マッピング情報、４３１  入出力タイミング調整部、４３２  優先イベント検知部。
【要約】
プログラマブルコントローラ（１）は、記憶部（２０）と、コントローラエミュレータ部（１３）と、を備える。記憶部（２０）は、模擬対象のプログラマブルコントローラで実行されるファームウェアおよび制御プログラムと、模擬対象のプログラマブルコントローラのハードウェアを模擬するのに必要なハードウェア情報と、を記憶する。コントローラエミュレータ部（１３）は、模擬対象のプログラマブルコントローラにおけるハードウェアの動作を、ハードウェア情報に基づいて模擬する。コントローラエミュレータ部（１３）は、模擬したハードウェア上で、ファームウェア（２１１ａ）および制御プログラム（２２１ａ）を実行する。記憶部（２０）中のファームウェアおよびハードウェア情報は、模擬対象のプログラマブルコントローラに応じて変更可能である。【図１】
0006739689.tif 000002
【図２】
0006739689.tif 000003
【図３】
0006739689.tif 000004
【図４】
0006739689.tif 000005
【図５】
0006739689.tif 000006
【図６】
0006739689.tif 000007
【図７】
0006739689.tif 000008
【図８】
0006739689.tif 000009
【図９】
0006739689.tif 000010
【図１０】
0006739689.tif 000011
【図１１】
0006739689.tif 000012
【図１２】
0006739689.tif 000013
【図１３】
0006739689.tif 000014