(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-07
(45)【発行日】2023-11-15
(54)【発明の名称】プログラム修正支援装置及びプログラム修正支援方法
(51)【国際特許分類】
G05B 19/042 20060101AFI20231108BHJP
【FI】
G05B19/042
(21)【出願番号】P 2021066631
(22)【出願日】2021-04-09
【審査請求日】2022-07-19
(73)【特許権者】
【識別番号】000006507
【氏名又は名称】横河電機株式会社
(74)【代理人】
【識別番号】100106909
【氏名又は名称】棚井 澄雄
(74)【代理人】
【識別番号】100167553
【氏名又は名称】高橋 久典
(74)【代理人】
【識別番号】100181124
【氏名又は名称】沖田 壮男
(72)【発明者】
【氏名】大滝 恵里佳
(72)【発明者】
【氏名】大野 毅
【審査官】田中 友章
(56)【参考文献】
【文献】特開2003-167752(JP,A)
【文献】特開平5-257674(JP,A)
【文献】特開2011-170528(JP,A)
【文献】特開2012-234272(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G05B 19/042
G06F 9/00
(57)【特許請求の範囲】
【請求項1】
第1プロセス制御装置と第2プロセス制御装置とを備え
、前記第1プロセス制御装置と前記第2プロセス制御装置との何れか一方によって機能が実現されるプロセス制御システムにおける
前記機能を実現するプログラムの修正を支援するプログラム修正支援装置であって、
前記プログラムのうち、
前記プロセス制御システムの前記機能を停止させることなく前記第1プロセス制御装置から前記第2プロセス制御装置への切り替えが行われる際に継続させる必要のある第1機能を実現する第1プログラムで用いられるデータの中から、前記切り替えが行われる際に前記第1機能が継続されるために保持する必要があるデータを選別する選別部を備えるプログラム修正支援装置。
【請求項2】
前記選別部は、前記第1プログラムで用いられるデータの中から、前記切り替えが行われる時点までデータの格納領域が存続し、且つ、前記第1プログラムの実行によって値が変わる可能性があるデータを選別する、請求項1記載のプログラム修正支援装置。
【請求項3】
前記選別部は、選別したデータが、前記切り替えが行われる際に継続させる必要のない第2機能を実現する第2プログラムの実行によって値が変わる可能性がないか否かを判断する、請求項2記載のプログラム修正支援装置。
【請求項4】
前記選別部は、前記第2プログラムの実行によって値が変わる可能性があると判断した場合には、前記第1プログラムで用いられるデータと、値を変える可能性のある前記第2プログラムで用いられるデータとの中から、前記切り替えが行われる際に前記第1機能が継続されるために保持する必要があるデータを選別する、請求項3記載のプログラム修正支援装置。
【請求項5】
前記選別部で選別されたデータが前記第1プロセス制御装置から前記第2プロセス制御装置に引き継がれるように前記プログラムを修正する修正部を更に備える、請求項1から請求項4の何れか一項に記載のプログラム修正支援装置。
【請求項6】
前記修正部は、前記選別部で選別されたデータが、前記切り替えの前後においてアドレスが変動する可能性のあるアドレス変動領域に格納されるデータである場合には、前記選別部で選別されたデータが、前記切り替えの前後においてアドレスが変動しないアドレス固定領域に格納されてポインタによって指し示されるものとなるように前記プログラムを修正する、請求項5記載のプログラム修正支援装置。
【請求項7】
前記修正部は、前記第1プログラムに記述されている変数名のうち、前記アドレス変動領域に格納されるデータの変数名を前記ポインタの変数名に変更する修正を行う、請求項6記載のプログラム修正支援装置。
【請求項8】
前記修正部は、前記第1プログラムに記述されている変数名のうち、前記アドレス変動領域に格納されるデータの変数名を前記ポインタの変数名に変換するマクロが含まれるように前記プログラムを修正する、請求項6記載のプログラム修正支援装置。
【請求項9】
前記修正部は、前記選別部で選別されたデータのうち、前記アドレス固定領域に格納されて前記ポインタによって指し示されると前記プロセス制御システムの性能劣化が引き起こされる可能性があるデータについては、予め確保した引継領域を介して前記第1プロセス制御装置から前記第2プロセス制御装置に引き継ぎが行われるように前記プログラムを修正する、請求項8記載のプログラム修正支援装置。
【請求項10】
前記修正部は、前記第1プログラムに含まれるマクロのうち、前記引継領域を介して前記第1プロセス制御装置から前記第2プロセス制御装置に引き継ぎが行われるデータの変数名に係るマクロを削除する修正を行う、請求項9記載のプログラム修正支援装置。
【請求項11】
前記修正部は、前記選別部で選別されたデータを前記アドレス固定領域に移動させることができない場合には、前記第1プログラムの起動時に前記データのアドレスが登録されるアドレステーブルを生成し、前記切り替えが行われる前に生成された前記アドレステーブルのテーブル番号を引き継いで、前記切り替えが行われた後に生成される前記アドレステーブルのテーブル番号として用いる処理が行われるように前記プログラムを修正する、請求項6から請求項10の何れか一項に記載のプログラム修正支援装置。
【請求項12】
第1プロセス制御装置と第2プロセス制御装置とを備え
、前記第1プロセス制御装置と前記第2プロセス制御装置との何れか一方によって機能が実現されるプロセス制御システムにおける
前記機能を実現するプログラムの修正を支援するプログラム修正支援方法であって、
前記プログラムのうち、
前記プロセス制御システムの前記機能を停止させることなく前記第1プロセス制御装置から前記第2プロセス制御装置への切り替えが行われる際に継続させる必要のある第1機能を実現する第1プログラムで用いられるデータの中から、前記切り替えが行われる際に前記第1機能が継続されるために保持する必要があるデータを選別する選別ステップを有するプログラム修正支援方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム修正支援装置及びプログラム修正支援方法に関する。
【背景技術】
【0002】
従来から、プラントや工場等(以下、これらを総称する場合には、単に「プラント」という)においては、工業プロセスにおける各種の状態量(例えば、圧力、温度、流量等)を制御するプロセス制御システムが構築されており、高度な自動操業が実現されている。このようなプロセス制御システムでは、ハードウェアの交換やソフトウェアの改善が必要になることがある。尚、ソフトウェアの改善としては、例えばオペレーティングシステム(OS)の機能拡張や、オペレーティングシステムの不具合・脆弱性の修正等が挙げられる。
【0003】
以下の特許文献1には、二重化したプロセス制御装置(現用装置、更新用装置)を備えるプロセス制御システムにおいて、プロセス制御システムを継続動作させながら、簡単且つ短時間で更新対象プログラムを更新することが可能な発明が開示されている。具体的には、現用装置において、更新対象ではない非更新対象プログラムを一時停止させ、非更新対象プログラムのコンテキストのみを現用装置から更新用装置に転送する。そして、更新用装置では、転送されたコンテキストを用いて非更新対象プログラムのコンテキストを復元し、更新対象プログラムのコンテキストは初期化して、非更新対象プログラム及び更新対象プログラムを更新用装置で再開させている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、上述した特許文献1に開示された発明によってプロセス制御システムで用いられるプログラムを更新するには、作業者が、プログラムを、オンライン更新に対応したものに修正する必要がある。尚、「オンライン更新」とは、プログラムによって実現される機能の処理を継続させながらプログラムを更新することをいう。しかしながら、プログラムをオンライン更新に対応したものに修正するには、作業者の多大な労力が必要になるという問題があった。
【0006】
本発明は上記事情に鑑みてなされたものであり、多大な労力を必要することなく容易にプログラムをオンライン更新に対応したものに修正できるよう作業者を支援するプログラム修正支援装置及びプログラム修正支援方法を提供することを目的とする。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本発明の一態様によるプログラム修正支援装置は、第1プロセス制御装置(10)と第2プロセス制御装置(20)とを備えるプロセス制御システム(1)における機能を実現するプログラム(SP)の修正を支援するプログラム修正支援装置(40)であって、前記プログラムのうち、前記第1プロセス制御装置から前記第2プロセス制御装置への切り替えが行われる際に継続させる必要のある第1機能を実現する第1プログラム(SP1)で用いられるデータの中から、前記切り替えが行われる際に前記第1機能が継続されるために保持する必要があるデータを選別する選別部(45a)を備える。
【0008】
また、本発明の一態様によるプログラム修正支援装置は、前記選別部が、前記第1プログラムで用いられるデータの中から、前記切り替えが行われる時点までデータの格納領域が存続し、且つ、前記第1プログラムの実行によって値が変わる可能性があるデータを選別する。
【0009】
また、本発明の一態様によるプログラム修正支援装置は、前記選別部が、選別したデータが、前記切り替えが行われる際に継続させる必要のない第2機能を実現する第2プログラムの実行によって値が変わる可能性がないか否かを判断する。
【0010】
また、本発明の一態様によるプログラム修正支援装置は、前記選別部が、前記第2プログラムの実行によって値が変わる可能性があると判断した場合には、前記第1プログラムで用いられるデータと、値を変える可能性のある前記第2プログラムで用いられるデータとの中から、前記切り替えが行われる際に前記第1機能が継続されるために保持する必要があるデータを選別する。
【0011】
また、本発明の一態様によるプログラム修正支援装置は、前記選別部で選別されたデータが前記第1プロセス制御装置から前記第2プロセス制御装置に引き継がれるように前記プログラムを修正する修正部(45b)を更に備える。
【0012】
また、本発明の一態様によるプログラム修正支援装置は、前記修正部が、前記選別部で選別されたデータが、前記切り替えの前後においてアドレスが変動する可能性のあるアドレス変動領域に格納されるデータである場合には、前記選別部で選別されたデータが、前記切り替えの前後においてアドレスが変動しないアドレス固定領域に格納されてポインタによって指し示されるものとなるように前記プログラムを修正する。
【0013】
また、本発明の一態様によるプログラム修正支援装置は、前記修正部が、前記第1プログラムに記述されている変数名のうち、前記アドレス変動領域に格納されるデータの変数名を前記ポインタの変数名に変更する修正を行う。
【0014】
或いは、本発明の一態様によるプログラム修正支援装置は、前記修正部が、前記第1プログラムに記述されている変数名のうち、前記アドレス変動領域に格納されるデータの変数名を前記ポインタの変数名に変換するマクロが含まれるように前記プログラムを修正する。
【0015】
また、本発明の一態様によるプログラム修正支援装置は、前記修正部が、前記選別部で選別されたデータのうち、前記アドレス固定領域に格納されて前記ポインタによって指し示されると前記プロセス制御システムの性能劣化が引き起こされる可能性があるデータについては、予め確保した引継領域(HA)を介して前記第1プロセス制御装置から前記第2プロセス制御装置に引き継ぎが行われるように前記プログラムを修正する。
【0016】
また、本発明の一態様によるプログラム修正支援装置は、前記修正部が、前記第1プログラムに含まれるマクロのうち、前記引継領域を介して前記第1プロセス制御装置から前記第2プロセス制御装置に引き継ぎが行われるデータの変数名に係るマクロを削除する修正を行う。
【0017】
また、本発明の一態様によるプログラム修正支援装置は、前記修正部が、前記選別部で選別されたデータを前記アドレス固定領域に移動させることができない場合には、前記第1プログラムの起動時に前記データのアドレスが登録されるアドレステーブルを生成し、前記切り替えが行われる前に生成された前記アドレステーブルのテーブル番号を引き継いで、前記切り替えが行われた後に生成される前記アドレステーブルのテーブル番号として用いる処理が行われるように前記プログラムを修正する。
【0018】
本発明の一態様によるプログラム修正支援方法は、第1プロセス制御装置(10)と第2プロセス制御装置(20)とを備えるプロセス制御システム(1)における機能を実現するプログラムの修正を支援するプログラム修正支援方法であって、前記プログラムのうち、前記第1プロセス制御装置から前記第2プロセス制御装置への切り替えが行われる際に継続させる必要のある第1機能を実現する第1プログラム(SP1)で用いられるデータの中から、前記切り替えが行われる際に前記第1機能が継続されるために保持する必要があるデータを選別する選別ステップ(S14)を有する。
【発明の効果】
【0019】
本発明によれば、多大な労力を必要することなく容易にプログラムをオンライン更新に対応したものに修正できるよう作業者を支援することができるという効果がある。
【図面の簡単な説明】
【0020】
【
図1】プロセス制御システムの概略機能構成を示す機能構成図である。
【
図2】本発明の第1実施形態によるプログラム修正支援装置の要部構成を示すブロック図である。
【
図3】本発明の第1実施形態によるプログラム修正支援方法を示すフローチャートである。
【
図4】本発明の第1実施形態によるプログラム修正支援方法で用いられるシステムプログラムの一例を示す図である。
【
図5】本発明の第2実施形態によるプログラム修正支援装置の要部構成を示すブロック図である。
【
図6】本発明の第2実施形態によるプログラム修正支援方法を示すフローチャートである。
【
図7】本発明の第2実施形態によるプログラム修正支援方法で用いられるシステムプログラムの一例を示す図である。
【
図8】本発明の第2実施形態によるプログラム修正支援方法によって修正されたシステムプログラムの一例を示す図である。
【
図9】本発明の第2実施形態において、修正前及び修正後のシステムプログラムが実行された場合のメモリマップの一例を示す図である。
【
図10】本発明の第3実施形態によるプログラム修正支援方法を示すフローチャートである。
【
図11】本発明の第3実施形態におけるプログラム修正支援方法によって修正されたシステムプログラムの一例を示す図である。
【
図12】本発明の第4実施形態によるプログラム修正支援方法を示すフローチャートである。
【
図13】本発明の第4実施形態におけるプログラム修正支援方法によって修正されたシステムプログラムの一例を示す図である。
【
図14】本発明の第4実施形態において、修正前及び修正後のシステムプログラムが実行された場合のメモリマップの一例を示す図である。
【
図15】本発明の第5実施形態によるプログラム修正支援方法を示すフローチャートである。
【
図16】本発明の第5実施形態によるプログラム修正支援方法で用いられる
修正前のシステムプログラムの一例を示す図である。
【
図17】本発明の第5実施形態によるプログラム修正支援方法によって修正されたシステムプログラムの一例を示す図である。
【発明を実施するための形態】
【0021】
以下、図面を参照して本発明の実施形態によるプログラム修正支援装置及びプログラム修正支援方法について詳細に説明する。以下では、まず、本発明の実施形態の概要について説明する。次に、理解を容易にするために、プロセス制御システムについて説明する。続いて、各実施形態の詳細について説明する。
【0022】
〔概要〕
本発明の実施形態は、多大な労力を必要することなく容易にプログラムをオンライン更新に対応したものに修正できるよう作業者を支援するものである。プロセス制御システムは、生産効率を少しでも向上させるために、月~年単位の長期に亘る継続運転が要求されることが殆どであるため、運転状態にあるプロセス制御システムを自由に停止させることはできない。例えば、定期メンテナンスによる停止、或いはプラントの安全確保のために行われるシャットダウン以外は、基本的にプロセス制御システムを停止させることは許されない。その理由は、化学プロセスを例に挙げると、化学反応を続けるプロセスの途中で予期せぬ中断が発生してしまうと、途中まで生産した半製品が使い物にならず大きな損害となることがあるからである。
【0023】
一方、プロセス制御システムには、安全性の面から誤動作や動作の欠損が生じないことが要求されるため、誤動作等が生じ得る原因(例えば、オペレーティングシステムの不具合や脆弱性)が発見された場合には、その原因を解消し得る対処(例えば、オペレーティングシステムの更新)を即座に行う必要がある。しかしながら、前述した通り、プロセス制御システムを自由に停止させることができないため、誤動作等が生じ得る原因が発見されたとしても、その対処を即座に行うことができない場合がある。
【0024】
ここで、上述した特許文献1に開示された発明を用いれば、プログラムによってプロセス制御システムで実現される機能の処理を継続させながらプログラムを更新すること(オンライン更新)が可能である。但し、上述した特許文献1に開示された発明によってプログラムを更新するには、作業者が、プログラムに対して以下の(a)~(d)に示す処置を事前に行って、プログラムを、オンライン更新に対応したものに修正する必要がある。
【0025】
(a)対象となるプログラムを完全に理解する
(b)プログラム更新時の切り替えのタイミングを決定する
(c)機能の処理継続のために保持する必要があるデータを選別する
(d)選別されたデータを引き継ぐ処理を実装する
【0026】
しかしながら、作業者が、対象のプログラムを完全に理解するのは困難な場合がある。例えば、プログラムの開発が行われてから時間が経過していて当時の開発者が居らず設計情報も存在しない場合、或いは、プログラムの規模が大きく複雑な場合等である。対象のプログラムの理解が不十分な場合には、オンライン更新に対応したものに修正することが困難である。また、作業者が、保持する必要があるデータを一つ一つ選別するのは膨大な手間と時間を要する。このように、従来は、プログラムをオンライン更新に対応したものに修正するには、作業者の多大な労力が必要になる。
【0027】
本発明の実施形態では、第1プロセス制御装置から第2プロセス制御装置への切り替えが行われる際に継続させる必要のある第1機能を実現する第1プログラムで用いられるデータの中から、切り替えが行われる際に第1機能が継続されるために保持する必要があるデータを選別するようにしている。これにより、作業者は、第1機能が継続されるために保持する必要があるデータを容易に把握することができる。このように、本発明の実施形態では、多大な労力を必要することなく容易にプログラムをオンライン更新に対応したものに修正できるよう作業者を支援することができる。
【0028】
〔プロセス制御システム〕
図1は、プロセス制御システムの概略機能構成を示す機能構成図である。
図1に示す通り、プロセス制御システム1は、プロセス制御装置10(第1プロセス制御装置)、プロセス制御装置20(第2プロセス制御装置)、及びエンジ用機器30を備える。プロセス制御装置10及びプロセス制御装置20は、同等又は類似規模のコンピュータを用いて実現される。以下では、プロセス制御装置10を「現用装置」と呼び、プロセス制御装置20を「更新用装置」と呼ぶこともある。尚、「現用装置」は、現在稼働している側の装置を意味し、「更新用装置」は、現在稼働しておらず、プログラムの更新のためにスタンバイしている側の装置を意味する。
【0029】
ここでは、プログラムの更新のために、プロセス制御装置10で稼働していた機能をプロセス制御装置20に切り替えるものとする。つまり、当初は、現用装置であるプロセス制御装置10がプロセスを制御するために稼働しており、更新用装置であるプロセス制御装置20が待機している。その後、エンジ用機器30からの指令信号に基づき、プロセス制御装置10(現用装置)における機能を一時停止し、プロセス制御装置20(更新用装置)においてその機能を再開する。尚、プロセス制御装置20は、システムが稼働している状態のまま、プログラムを更新するための機能を備える。
【0030】
プロセス制御装置10は、ハードウェア11、システム機能提供部12、及び制御アプリ13の機能を備える。ハードウェア11は、CPU(中央制御装置)、メモリ、入出力装置、通信装置等を備えており、プロセス制御装置10で用いられる各種プログラム(システム機能提供部12から提供されるシステム機能を実現するシステムプログラムや制御アプリ13を実現するアプリケーションプログラム等)を実行させる。尚、プロセス制御装置10の機能は、その機能を実現するためのプログラムがハードウェア11によって実行されることによって実現される。つまり、プロセス制御装置10の機能は、ソフトウェアとハードウェア資源とが協働することによって実現される。
【0031】
システム機能提供部12は、ハードウェア11と制御アプリ13との間に位置し、ハードウェア11の管理を行いつつ、制御アプリ13からの呼び出しに応じて各種システム機能を提供する。システム機能提供部12は、例えば、PID制御機能12a、シーケンス制御機能12b、インタプリタ機能12c、I/O機能12d、通信機能12e等のシステム機能を提供する。システム機能提供部12には、オペレーティングシステム(OS)やドライバも含まれる。尚、システム機能提供部12によって提供される各種システム機能を実現するシステムプログラムには、更新対象となり得る更新対象プログラムと、更新対象ではない非更新対象プログラムが含まれる。
【0032】
制御アプリ13は、予め規定された制御周期(例えば、数秒程度の周期)でプロセス制御を実施する。制御アプリ13は、例えば、エンジ用機器30を用いてユーザによって作成された1つ又は複数の制御ロジック或いは制御シーケンスから構成され、制御周期毎に複数の制御ロジック或いは制御シーケンスを呼び出して処理する。ここでは、制御ロジックに絞って説明する。各制御ロジックにおける現制御周期の処理を終えたら呼出元に戻って、次の制御周期まで待ち状態になる。各制御ロジックは、必要があれば、システム機能提供部12によって提供されるシステム機能を呼び出す。尚、プロセス制御装置10からプロセス制御装置20への切り替えは、制御アプリ13の各制御ロジックの処理、及び制御ロジックから呼び出されるシステム機能の処理が継続するように行われる。通常は、制御アプリ13が現制御周期の制御ロジックの処理を終えて、次の制御周期まで待っている時に、プロセス制御装置20に切り替える。
【0033】
プロセス制御装置20は、ハードウェア21、システム機能提供部22、制御アプリ23、及びオンライン更新制御部24の機能を備える。ハードウェア21は、上記のハードウェア11と同様のものであり、プロセス制御装置20で用いられる各種プログラム(システム機能提供部22から提供されるシステム機能を実現するシステムプログラムや制御アプリ23を実現するアプリケーションプログラム等)を実行させる。尚、プロセス制御装置20の機能も、ソフトウェアとハードウェア資源とが協働することによって実現される。
【0034】
システム機能提供部22は、上記のシステム機能提供部12と同様のシステム機能を提供するものである。具体的に、システム機能提供部22は、PID制御機能22a、シーケンス制御機能22b、インタプリタ機能22c、I/O機能22d、通信機能22e等のシステム機能を提供する。尚、システム機能提供部22から提供されるシステム機能には、システム機能提供部12から提供されるシステム機能と同じものであっても良く、異なるもの(例えば、機能拡張されたもの)が含まれていても良い。
【0035】
制御アプリ23は、上記の制御アプリ13と同様のものであり、予め規定された制御周期(例えば、数秒程度の周期)でプロセス制御を実施する。制御アプリ23は、システム機能提供部22によって提供されるシステム機能を呼び出しつつプロセス制御を実施する。
【0036】
オンライン更新制御部24は、各種プログラムによって実現される機能の処理を継続させながら上記プログラムを更新するオンライン更新の処理を制御する。具体的に、オンライン更新制御部24は、プロセス制御装置10からプロセス制御装置20への切り替えが行われる際に、機能が継続されるために引き継ぐ必要のあるデータ(引継データDT)を、プロセス制御装置10から取得してプロセス制御装置20に復元する。そして、オンライン更新制御部24は、プロセス制御装置10からプロセス制御装置20への切り替えを行うタイミングを決定する。
【0037】
エンジ用機器30は、プロセス制御システム1の設計情報を含めたプラントの設計情報を用いて、プロセス制御システム1における各種エンジニアリングを行う。また、エンジ用機器30は、プロセス制御装置10からプロセス制御装置20への切り替えを行わせる際に、プロセス制御装置20を起動させる指令を行う。尚、エンジ用機器30は、例えばパーソナルコンピュータやワークステーション等のコンピュータによって実現される。
【0038】
〔第1実施形態〕
〈プログラム修正支援装置〉
図2は、本発明の第1実施形態によるプログラム修正支援装置の要部構成を示すブロック図である。
図2に示す通り、本実施形態のプログラム修正支援装置40は、操作部41、表示部42、格納部43、通信部44、及び処理部45を備える。このようなプログラム修正支援装置40は、例えば、
図1に示すプロセス制御装置10(現用装置)のシステム機能提供部12で提供されるシステム機能を実現するシステムプログラム等のプログラムを、オンラインシステム更新に対応したものに修正する作業者を支援するものである。
【0039】
操作部41は、例えば、キーボードやポインティングデバイス等の入力装置を備えており、プログラム修正支援装置40を使用する作業者の操作に応じた指示(プログラム修正支援装置40に対する指示)を処理部45に出力する。表示部42は、例えば、液晶表示装置等の表示装置を備えており、処理部45から出力される各種情報を表示する。尚、操作部41及び表示部42は、物理的に分離されたものであっても良く、表示機能と操作機能とを兼ね備えるタッチパネル式の液晶表示装置のように物理的に一体化されたものであっても良い。
【0040】
格納部43は、例えば、HDD(ハードディスクドライブ)やSSD(ソリッドステートドライブ)等の補助記憶装置を備えており、各種情報を格納する。具体的に、格納部43は、
図1に示すプロセス制御装置10(現用装置)のシステム機能提供部12で提供されるシステム機能を実現するシステムプログラムSPを格納する。尚、格納部43は、プログラム修正支援装置40の機能を実現する各種プログラム、処理部45の処理を行うために一時的に用いられるデータ等を格納しても良い。
【0041】
ここで、格納部43に格納されるシステムプログラムSPには、継続対象システムプログラムSP1(第1システムプログラム)と、非継続対象システムプログラムSP2(第2システムプログラム)とが含まれる。継続対象システムプログラムSP1は、
図1に示すプロセス制御装置10からプロセス制御装置20への切り替えが行われる際に継続させる必要のあるシステム機能(第1システム機能)を実現するシステムプログラムである。非継続対象システムプログラムSP2は、
図1に示すプロセス制御装置10からプロセス制御装置20への切り替えが行われる際に継続させる必要のないシステム機能(第2システム機能)を実現するシステムプログラムである。
【0042】
例えば、
図1に示すシステム機能提供部12によって提供されるシステム機能のうち、PID制御機能12a及びシーケンス制御機能12bを継続させる必要があり、インタプリタ機能22c、I/O機能22d、通信機能22eを継続させる必要がないとする。この例の場合には、PID制御機能12a及びシーケンス制御機能12bを実現するシステムプログラムが継続対象システムプログラムSP1とされ、インタプリタ機能22c、I/O機能22d、通信機能22e実現するシステムプログラムが非継続対象システムプログラムSP2とされる。格納部43に格納されるシステムプログラムSPは、例えば、作業者によって、継続対象システムプログラムSP1と非継続対象システムプログラムSP2とに分類される。
【0043】
格納部43に格納されるシステムプログラムSPは、システムプログラムSPのソースコードである。以下、「システムプログラムSP」、「継続対象システムプログラムSP1」、「非継続対象システムプログラムSP2」といった場合には、特に断りがない限り、ソースコードを意味するものとする。また、以下では、理解を容易にするため、上記のソースコードがC言語で記述されているものとして説明するが、上記のソースコードはC言語以外の任意の言語で記述されていても良い。
【0044】
通信部44は、処理部45の制御の下で、外部機器との間で通信を行う。通信部44は、外部機器との間で有線通信を行うものであっても良く、無線通信を行うものであっても良い。また、通信部44は、不図示のネットワークを介して外部機器との間で通信を行うものであっても良い。
【0045】
処理部45は、プログラム修正支援装置40の動作を統括して制御する。例えば、処理部45は、操作部41から出力される指示に応じた各種処理を行い、その処理結果を表示部42に表示させる。また、処理部45は、格納部43に対する各種データの書き込み、及び格納部43からの各種データの読み出しを行う。加えて、処理部45は、通信部44を制御して、外部機器との間でデータの送受信を行う。
【0046】
処理部45は、選別部45aを備える。選別部45aは、システムプログラムSPのうち、継続対象システムプログラムSP1で用いられるデータの中から、特定のデータを選別する。具体的には、プロセス制御装置10からプロセス制御装置20への切り替えが行われる際に継続させる必要のあるシステム機能(第1システム機能)が継続されるために保持する必要があるデータを選別する。
【0047】
選別部45aは、継続対象システムプログラムSP1で用いられるデータの中から、以下の条件(A)~(C)の全てに合致するデータを、上記のシステム機能が継続されるために保持する必要があるデータとして選別する。
(A)プロセス制御装置10からプロセス制御装置20への切り替えが行われる時点までデータの格納領域が存続すること
(B)継続対象システムプログラムSP1の実行によって初期値から値が変わる可能性があること
(C)非継続対象システムプログラムSP2の実行によって初期値から値が変わる可能性がないこと
【0048】
選別部45aは、上記の条件(A),(B)が満たされ、上記の条件(C)が満たされないデータが存在する場合には、継続対象システムプログラムSP1に非継続対象システムプログラムSP2を追加して、継続対象システムプログラムSP1の全てのデータの選別をやり直す。つまり、選別部45aは、継続対象システムプログラムSP1で用いられるデータと、値を変える可能性のある非継続対象システムプログラムSP2で用いられるデータとの中から、上記の条件(A)~(C)の全てに合致するデータを選別する。尚、選別部45aで行われる処理の詳細については後述する。
【0049】
プログラム修正支援装置40は、例えば、パーソナルコンピュータ又はワークステーション等のコンピュータによって実現される。プログラム修正支援装置40の各ブロックの機能(例えば、処理部45に設けられた選別部45aの機能)は、これらの機能を実現するプログラムがコンピュータにインストールされることによりソフトウェア的に実現される。つまり、これらの機能は、ソフトウェアとハードウェア資源とが協働することによって実現される。
【0050】
プログラム修正支援装置40の各ブロックの機能を実現するプログラムは、記録媒体に記録された状態で配布されても良く、インターネット等のネットワークを介して配布されても良い。尚、プログラム修正支援装置40は、クラウドコンピューティングによって実現されても良い。
【0051】
プログラム修正支援装置40の機能は、ソフトウェア的に実現されるのが望ましいが、専用のハードウェアを用いて実現されることを妨げるものではない。プログラム修正支援装置40の機能は、例えば、FPGA(Field-Programmable GateArray)、LSI(Large Scale Integration)、ASIC(Application Specific Integrated Circuit)等のハードウェアを用いて実現されても良い。
【0052】
〈プログラム修正支援方法〉
図3は、本発明の第1実施形態によるプログラム修正支援方法を示すフローチャートである。
図3に示すフローチャートの処理は、作業者がプログラム修正支援装置40の操作部41を操作して、継続対象システムプログラムSP1の修正指示を行うことによって開始される。尚、システムプログラムSPが、継続対象システムプログラムSP1と非継続対象システムプログラムSP2とに分類されていない場合も考えられる。このような場合には、上記の修正指示を行う際に、作業者が、システムプログラムSPの中から、修正の対象となる継続対象システムプログラムSP1を特定するようにしても良い。
【0053】
処理が開始されると、まず、継続対象システムプログラムSP1で用いられるデータをリストアップする処理が選別部45aで行われる(ステップS11)。例えば、static変数を含む外部変数、ローカル変数、アドレス固定領域に格納される変数、アドレス変動領域に格納される変数等がリストアップされる。ここで、アドレス変動領域とは、プロセス制御装置10からプロセス制御装置20への切り替えの前後においてアドレスが変動する可能性がある領域(記憶領域)である。アドレス固定領域とは、プロセス制御装置10からプロセス制御装置20への切り替えの前後においてアドレスが変動しない領域(記憶領域)である。
【0054】
次に、ステップS11でリストアップされたデータの各々について、プロセス制御装置10からプロセス制御装置20への切り替えが行われる時点までデータの格納領域が存続するか否かを判断する処理が選別部45aで行われる(ステップS12)。このような判断を行うのは、システム機能が継続されるために引き継ぐ必要のあるデータ(引継データDT:
図1参照)の格納領域は、プロセス制御装置10からプロセス制御装置20への切り替え直後は、一旦無くなって再構築されるからである。
【0055】
例えば、stack領域のローカル変数については、呼び出し元に処理が戻ると解放されるので、呼び出し元での切り替えはデータの格納領域が存続しないと判断される(判断結果が「NO」)。また、アドレス変動領域に格納される変数は、プロセス制御装置10からプロセス制御装置20への切り替えが行われる際に既に開放済みの場合には、データの格納領域が存続しないと判断される(判断結果が「NO」)。
【0056】
次いで、ステップS12でデータ領域が存続すると判断されたデータの各々を対象として以下の処理が行われる。つまり、継続対象システムプログラムSP1の実行によりデータの値が変わる可能性があるか否かを判断する処理が選別部45aで行われる(ステップS13)。
【0057】
例えば、初期化処理によって初期値が設定された後に、継続対象システムプログラムSP1が実行されても値の参照のみが行われる変数は、データの値が変わる可能性がないと判断される(判断結果が「NO」)。このような変数は、プロセス制御装置10からプロセス制御装置20への切り替えが行われた後において初期化処理が行われれば、データの値が、切り替えが行われる前のデータの値になるため、データの値を引き継ぐ必要がないためである。
【0058】
続いて、ステップS13でデータの値が変わる可能性があると判断されたデータを引継データDTとして選別する処理が選別部45aで行われる(ステップS14:選別ステップ)。続いて、ステップS14で選別されたデータを対象として以下の処理が行われる。つまり、非継続対象システムプログラムSP2の実行によりデータの値が変わる可能性がないか否かを判断する処理が選別部45aで行われる(ステップS15)。システム機能が継続されるために引き継ぐ必要のあるデータ(引継データDT)は、非継続対象システムプログラムSP2によって書き込まれないことが前提となるためである。
【0059】
ステップS15において、データの値が変わる可能性があると判断された場合(判断結果が「NO」の場合)には、データの値を変える可能性のある非継続対象システムプログラムSP2を継続対象システムプログラムSP1に追加する処理が選別部45aで行われる(ステップS16)。そして、
図3に示すフローチャート処理が最初から行われる。つまり、継続対象システムプログラムSP1及びデータの値を変える可能性のある非継続対象システムプログラムSP2で用いられるデータをリストアップし(ステップS11)、データを選別する処理が選別部45aで行われる(ステップS12~S14)。
【0060】
このような処理を行うのは、以下の理由による。つまり、ステップS15の判断結果が「NO」となる場合には、継続させる必要のあるシステム機能と、継続させる必要がないシステム機能との間で同じデータに対して書き込みが行われる状況にあり、互いに依存している関係にあると言える。このような関係にある場合には、継続させる必要がないシステム機能も、継続させる必要のあるシステム機能と同様に継続させる必要があるからである。
【0061】
これに対し、ステップS15において、データの値が変わる可能性がないと判断された場合(判断結果が「YES」の場合)には、
図3に示す一連の処理が終了する。尚、選別された引継データDTは、例えば、表示部42に表示されたり、格納部43に格納されたり、通信部44を介して外部に送信されるようにしても良い。
【0062】
《システムプログラムの具体例》
図4は、本発明の第1実施形態によるプログラム修正支援方法で用いられるシステムプログラムの一例を示す図である。
図4に示すシステムプログラムSPa,SPbは、プロセス制御のメイン処理から呼び出されるシステム機能を実現するものである。以下、システムプログラムSPaによって実現されるシステム機能を「システム機能A」といい、システムプログラムSPbによって実現されるシステム機能を「システム機能B」という。
【0063】
ここで、システム機能Aは、プロセス制御装置10からプロセス制御装置20への切り替えが行われる際に継続させる必要のあるシステム機能であり、システム機能Bは、継続させる必要のないシステム機能であるとする。つまり、システムプログラムSPaは、継続対象システムプログラムSP1であり、システムプログラムSPbは、非継続対象システムプログラムSP2であるとする。
【0064】
プロセス制御のメイン処理を実現するメインプログラムMPには、外部変数を宣言する記述101及びmain関数の記述102がある。
図4に示す例では、外部変数として、整数型の変数D1,D2、関数ポインタのポインタ変数D3、及び整数型の変数D4が宣言されている。尚、以下では、整数型の変数D1,D2、関数ポインタのポインタ変数D3、及び整数型の変数D4を、単に、外部変数D1,D2,D3,D4と記載することもある。main関数は、システム機能A,Bを初期化する関数InitA,InitBを呼び出す処理と、システム機能A,Bを実行する関数ExecA,ExecBを1秒毎に繰り返し呼び出す処理とが実行される内容である。
【0065】
システムプログラムSPaには、メインプログラムMPの外部変数を参照する記述201、関数InitAの記述202、関数ExecAの記述203、及び関数SubAの記述204がある。
図4に示す例では、システムプログラムSPaでは、記述201において、メインプログラムMPの外部変数のうち、変数D1,D2及びポインタ変数D3を参照する宣言がなされている。関数SubAは、システムプログラムSPa内でのみ用いられる関数である。システムプログラムSPbには、メインプログラムMPの外部変数を参照する記述301、関数InitBの記述302、及び関数ExecBの記述303がある。
図4に示す例では、システムプログラムSPbでは、記述301において、メインプログラムMPの外部変数のうち、変数D2,D4を参照する宣言がなされている。
【0066】
図3に示すフローチャートの処理が開始されると、継続対象システムプログラムSP1であるシステムプログラムSPaが格納部43から読み出され、ステップS11の処理により、システムプログラムSPaで用いられるデータがリストアップされる。
図4に示す例では、外部変数D1,D2,D3とローカル変数localVarとがリストアップされる。
【0067】
次に、リストアップされたデータの各々について、ステップS12の判断が行われる。
図4に示す例では、外部変数D1,D2,D3についてはデータの格納領域が存続すると判断される(判断結果が「YES」)。これに対し、ローカル変数localVarについては、処理が関数ExecAの呼び出し元(メイン処理)に戻ると消滅するため、データの格納領域が存続しないと判断される(判断結果が「NO」)。
【0068】
次いで、ステップS12でデータ領域が存続すると判断されたデータの各々を対象としてステップS13の判断が行われる。
図4に示す例では、外部変数D1,D2についてはシステム機能Aが実行される度に値が変わるため、データの値が変わる可能性があると判断される(判断結果が「YES」)。これに対し、外部変数D3については、システム機能Aの初期化が行われた後は値が変わらないことから、データの値が変わる可能性がないと判断される(判断結果が「NO」)。
【0069】
続いて、ステップS13でデータの値が変わる可能性があると判断されたデータが引継データDTとして選別される(ステップS14)。
図4に示す例では、外部変数D1,D2が引継データDTとして選別される。続いて、選別された引継データDTを対象としてステップS15の判断が行われる。
図4に示す例では、外部変数D1については、システムプログラムSPbでは参照されていないため、データの値が変わる可能性がないと判断される(判断結果が「YES」)。これに対し、外部変数D2については、システムプログラムSPbにおいて参照されていることから、データの値が変わる可能性があると判断される(判断結果が「NO」)。
【0070】
図4に示す例においては、ステップS15で、データの値が変わる可能性があると判断されている。このため、ステップS16の処理において、データの値を変える可能性のある非継続対象システムプログラムSP2(システムプログラムSPb)が継続対象システムプログラムSP1(システムプログラムSPa)に追加される。
【0071】
そして、
図3に示すフローチャートの処理が最初から行われ、ステップS11の処理により、システムプログラムSPaで用いられるデータと、システムプログラムSPbで用いられるデータとがリストアップされる。
図4に示す例では、外部変数D1,D2,D3,D4とローカル変数localVarとがリストアップされる。
【0072】
次に、リストアップされたデータの各々について、ステップS12の判断が行われる。切り換えは、例えば、制御アプリ13が現周期の処理を終えて次の周期までの待ち状態の時に行われる。
図4に示す例では、外部変数D1,D2,D3,D4についてはデータの格納領域が存続すると判断される(判断結果が「YES」)。これに対し、ローカル変数localVarについては、データの格納領域が存続しないと判断される(判断結果が「NO」)。
【0073】
次いで、ステップS12でデータ領域が存続すると判断されたデータの各々を対象としてステップS13の判断が行われる。
図4に示す例では、外部変数D1,D2についてはシステム機能Aが実行される度に値が変わり、外部変数D2,D4についてはシステム機能Bが実行される度に値が変わる。このため、外部変数D1,D2,D3,D4のうちの外部変数D1,D2,D4について、データの値が変わる可能性があると判断される(判断結果が「YES」)。これに対し、外部変数D3については、システム機能Aの初期化が行われた後は値が変わらないことから、データの値が変わる可能性がないと判断される(判断結果が「NO」)。
【0074】
続いて、ステップS13でデータの値が変わる可能性があると判断されたデータが引継データDTとして選別される(ステップS14)。
図4に示す例では、外部変数D1,D2,D4が引継データDTとして選別される。続いて、選別された引継データDTを対象としてステップS15の判断が行われる。
図4に示す例では、外部変数D1,D2,D4は、システムプログラムSPa,SPb以外の非継続対象システムプログラムSP2から参照されていないため、データの値が変わる可能性がないと判断される(判断結果が「YES」)。以上により、
図3に示す一連の処理が終了し、最終的には、外部変数D1,D2,D4が引継データDTとして選別される。
【0075】
以上の通り、本実施形態では、継続対象システムプログラムSP1で用いられるデータの中から、プロセス制御装置10からプロセス制御装置20への切り替えが行われる際にシステム機能が継続されるために保持する必要があるデータを選別するようにしている。これにより、作業者は、継続対象システムプログラムSP1で実現されるシステム機能が継続されるために保持する必要があるデータを容易に把握することができる。このように、本発明の実施形態では、多大な労力を必要することなく容易にシステムプログラムをオンラインシステム更新に対応したものに修正できるよう作業者を支援することができる。
【0076】
〔第2実施形態〕
〈プログラム修正支援装置〉
図5は、本発明の第2実施形態によるプログラム修正支援装置の要部構成を示すブロック図である。尚、
図5においては、
図2に示したブロックに相当するブロックについては同一の符号を付してある。
図5に示す通り、本実施形態のプログラム修正支援装置40は、
図2に示すプログラム修正支援装置40の処理部45に修正部45bを追加した構成である。このような本実施形態のプログラム修正支援装置40は、選別部45aで選別されたデータがプロセス制御装置10からプロセス制御装置20に引き継がれるようにシステムプログラムSPを修正するようにしたものである。
【0077】
修正部45bは、選別部45aで選別されたデータがプロセス制御装置10からプロセス制御装置20に引き継がれるように継続対象システムプログラムSP1を修正する。具体的に、修正部45bは、継続対象システムプログラムSP1に対し、新たな記述(コード)を追加したり、既存の記述を変更したり、不要な記述を削除したりする。例えば、選別部45aで選別されたデータが、アドレス変動領域に格納されるデータである場合には、アドレス固定領域に格納されてポインタによって指し示されるものとなるように継続対象システムプログラムSP1を修正する。修正の理由は、アドレス変動領域のアドレスを値として引き継ぐ可能性があるからである。現在のシステムプログラムで選別されたデータがアドレス変動領域のアドレスを格納していないことが明確であっても、今後のシステムプログラムの更新によって、アドレス変動領域のアドレスを格納する可能性があるからである。尚、修正部45bで行われる処理の詳細については後述する。
【0078】
尚、本実施形態のプログラム修正支援装置40も、第1実施形態のプログラム修正支援装置40と同様に、例えば、パーソナルコンピュータ又はワークステーション等のコンピュータによって実現される。修正部45bの機能は、選別部45aの機能と同様に、修正部45bの機能を実現するプログラムがコンピュータにインストールされることによりソフトウェア的に実現される。つまり、修正部45bの機能は、ソフトウェアとハードウェア資源とが協働することによって実現される。尚、本実施形態のプログラム修正支援装置40も、クラウドコンピューティングによって実現されても良く、専用のハードウェアを用いて実現されても良い。
【0079】
〈プログラム修正支援方法〉
図6は、本発明の第2実施形態によるプログラム修正支援方法を示すフローチャートである。処理が開始されると、まず、選別部45aで選別されたデータ(引継データDT)がアドレス変動領域に格納されるデータであるか否かを判断する処理が修正部45bで行われる(ステップS21)。引継データDTがアドレス変動領域に格納されるデータであると判断された場合(ステップS21の判断結果が「YES」の場合)には、アドレス固定領域を確保する処理が行われるように、システムプログラムSPを修正する処理が修正部45bで行われる(ステップS22)。
【0080】
次に、ポインタ変数を作成する処理が行われるように、システムプログラムSPを修正する処理が修正部45bで行われる(ステップS23)。次いで、アドレス固定領域に格納される引継データDTが、ポインタによって指し示されるものとなるようにシステムプログラムSPを修正する処理が修正部45bで行われる(ステップS24)。
【0081】
続いて、引継データDTの変数名がポインタ変数の変数名(アスタリスク記号が付された変数名)に置換されるよう、システムプログラムSPを修正する処理が修正部45bで行われる(ステップS25)。そして、システムプログラムSPが実行されたときに行われる初期化処理がバイパスされるように、システムプログラムSPを修正する処理が修正部45bで行われる(ステップS26)。以上の処理で、システムプログラムSPの修正が完了する。
【0082】
これに対し、引継データDTがアドレス変動領域に格納されないデータであると判断された場合(ステップS21の判断結果が「NO」の場合)には、
図6に示す処理が終了する。これは、引継データDTがアドレス固定領域に格納されるデータであることから、引継データDTの引き継ぎを行うためにシステムプログラムSPを修正する必要が無いためである。
【0083】
尚、プロセス制御装置10からプロセス制御装置20への切り替えが行われる際に、アドレス固定領域に格納された引継データDTは、
図1に示すオンライン更新制御部24によって、プロセス制御装置10からプロセス制御装置20にコピーされる。アドレス固定領域は、前述した通り、プロセス制御装置10からプロセス制御装置20への切り替えの前後においてアドレスが変動しない領域(記憶領域)である。このため、プロセス制御装置10のアドレス固定領域に記憶された引継データDTは、プロセス制御装置20のアドレス固定領域(プロセス制御装置10のアドレス固定領域とアドレスが同じ記憶領域)にコピーされることとなる。
【0084】
《システムプログラムの具体例》
図7は、本発明の第2実施形態によるプログラム修正支援方法で用いられるシステムプログラムの一例を示す図である。
図8は、本発明の第2実施形態によるプログラム修正支援方法によって修正されたシステムプログラムの一例を示す図である。尚、
図7,
図8では、説明を簡単にするために、
図4に示すメインプログラムMP及びシステムプログラムSPaに相当するもののみを図示し、システムプログラムSPbに相当するものについては図示を省略している。また、
図7,
図8に示すメインプログラムMP及びシステムプログラムSPaは、説明の都合上、
図4に示すものとは内容を異ならせてある。
【0085】
図7に示すメインプログラムMPには、外部変数を宣言する記述401及びmain関数の記述402がある。
図7に示す例では、外部変数として、整数型の変数D1、整数型のポインタ変数D2、整数型の変数m1,m2をメンバとする構造体変数D3、及び整数型の2個の要素を有する配列変数D4が宣言されている。尚、main関数の記述402は、
図4に示すmain関数の記述102と内容が同じである。
【0086】
図7に示すシステムプログラムSPaには、メインプログラムMPの外部変数を参照する記述501、関数InitAの記述502、及び関数ExecAの記述503がある。
図7に示す例では、記述501において、メインプログラムMPの外部変数の全て(外部変数D1,D2,D3,D4)を参照する宣言がなされている。尚、関数InitAの記述502及び関数ExecAの記述503は、説明の都合上、
図4に示す関数InitAの記述202及び関数ExecAの記述203とは異ならせてある。
【0087】
図6に示すフローチャートの処理が開始されると、まず、ステップS21で引継データDTがアドレス変動領域に格納されるデータであるか否かが判断される。ここでは、説明の便宜上、メインプログラムMPで宣言されている外部変数の全て(D1,D2,D3,D4)が引継データDTであり、且つ、アドレス変動領域に格納されるデータであるとする。このため、ステップS21の判断結果は「YES」になる。
【0088】
次に、ステップS22で、アドレス固定領域を確保する処理が行われるように、システムプログラムSPが修正される。具体的には、
図8に示す通り、記述411,412が追加され、main関数の記述402が修正される。記述411は、引継データDT(外部変数D1,D2,D3,D4)を要素とする構造体変数fixedAreaを宣言するものである。記述412は、アドレス固定領域を初期化する関数InitfixedAreaについてのものである。
図8に示す例では、関数InitfixedAreaは、構造体変数fixedAreaに対し、アドレス固定領域の先頭アドレス(0x1000000)を設定する処理が実行される内容にされる。main関数の記述402は、関数InitfixedAreaを呼び出す記述413が追加された内容に修正される。
【0089】
次いで、ステップS23で、ポインタ変数を作成する処理が行われるように、システムプログラムSPが修正される。具体的には、
図7に示すメインプログラムMPの記述401が、
図8に示すメインプログラムMPの記述414に変更される。つまり、外部変数D1,D2,D3,D4を宣言する記述101が、ポインタ変数Gp_D1,Gp_D2,Gp_D3,D4を宣言する記述414に変更される。
【0090】
続いて、ステップS24で、アドレス固定領域に格納される引継データDTが、ポインタによって指し示されるものとなるようにシステムプログラムSPが修正される。具体的には、関数InitfixedAreaの記述412が修正される。具体的には、
図8に示す通り、引継データDT(外部変数D1,D2,D3,D4)が格納されるアドレス固定領域のアドレスをポインタ変数Gp_D1,Gp_D2,Gp_D3,D4に設定する記述415が追加される。
【0091】
続いて、ステップS25で、引継データDTの変数名がポインタ変数の変数名(アスタリスク記号が付された変数名)に置換されるよう、システムプログラムSPが修正される。具体的には、
図7に示すシステムプログラムSPaに記述された外部変数D1,D2,D3,D4の変数名がそれぞれ、
図8に示す通り、ポインタ変数の変数名(アスタリスク記号が付された変数名)*Gp_D1,*Gp_D2,*Gp_D3,*D4に置換される。これにより、
図7に示す記述501,502,503がそれぞれ、
図8に示す記述511,512,513に変更される。
【0092】
最後に、ステップS26で、システムプログラムSPが実行されたときに行われる初期化処理がバイパスされるように、システムプログラムSPが修正される。具体的には、
図8に示す通り、関数InitAの記述512に記述514が追加される。ここで、記述514は、オンラインシステム更新が行われる場合(変数flagの値がONLINE_UP_GRADEの値と等しい場合)には、システム機能Aを初期化する関数InitAが実質的に行われないようにする(バイパスさせる)ものである。このようにして、
図7に示すシステムプログラムSPが、
図8に示すシステムプログラムSPに修正される。
【0093】
図9は、本発明の第2実施形態において、修正前及び修正後のシステムプログラムが実行された場合のメモリマップの一例を示す図である。
図7に示す修正前のシステムプログラムSPが実行されると、
図9(a)に示す通り、外部変数の値がアドレス変動領域に格納される。これに対し、
図8に示す修正後のシステムプログラムSPが実行されると、
図9(b)に示す通り、アドレス固定領域に格納されたデータの値がアドレス変動領域に格納されたポインタによって参照される。プロセス制御装置10のアドレス固定領域に記憶された引継データDTは、プロセス制御装置20に容易にコピーすることができる。このため、
図8に示すシステムプログラムSPは、オンラインシステム更新に対応したものということができる。
【0094】
以上の通り、本実施形態では、選別部45aで選別されたデータがプロセス制御装置10からプロセス制御装置20に引き継がれるように、修正部45bがシステムプログラムSPを修正するようにしている。これにより、作業者は、手作業でシステムプログラムSPの修正を行う必要が無くなるか、或いは、軽微な修正を行うだけで良くなる。このように、本発明の実施形態では、多大な労力を必要することなく容易にシステムプログラムをオンラインシステム更新に対応したものに修正できるよう作業者を支援することができる。
【0095】
〔第3実施形態〕
〈プログラム修正支援装置〉
本実施形態のプログラム修正支援装置は、
図5に示すプログラム修正支援装置40とは、修正部45bで行われる処理が若干異なるのみであり、修正部45bで行われる処理以外は、
図5に示すものと同様である。このため、本実施形態によるプログラム修正支援装置の詳細な説明は省略する。尚、本実施形態のプログラム修正支援装置40も、第2実施形態のプログラム修正支援装置40と同様に、選別部45aで選別されたデータがプロセス制御装置10からプロセス制御装置20に引き継がれるようにシステムプログラムSPを修正するようにしたものである。
【0096】
〈プログラム修正支援方法〉
図10は、本発明の第3実施形態によるプログラム修正支援方法を示すフローチャートである。尚、
図10においては、
図6に示すフローチャートのステップと同じステップについては同一の符号を付してある。
図10に示すフローチャートは、
図6に示すフローチャートのステップS25をステップS31に替えたものである。
【0097】
ステップS31では、引継データDTの変数名を変換するマクロが含まれるようにシステムプログラムSPを修正する処理が修正部45bによって行われる。上記のマクロは、システムプログラムSPに記述されている変数名のうち、アドレス変動領域に格納される引継データDTの変数名を、ポインタ変数の変数名(アスタリスク記号が付された変数名)に変換するマクロである。但し、配列変数は配列名でポインタを表すため、引継データDTに配列変数が含まれている場合には、その配列変数の変数名を変換するマクロは含めない。
【0098】
《システムプログラムの具体例》
図11は、本発明の第3実施形態におけるプログラム修正支援方法によって修正されたシステムプログラムの一例を示す図である。修正前のシステムプログラムは、
図7に示すものである。尚、
図11においては、
図8に示すシステムプログラムSPの記述に相当する記述については同一の符号を付してある。ここで、本実施形態において、修正されたメインプログラムMPは
図8に示すものと同じである。
【0099】
図10に示すステップS31の処理が行われることによって、
図7に示すシステムプログラムSPは、
図11に示す通り、記述521が追加され、記述501の一部が変更されたものに修正される。記述521は、アドレス変動領域に格納される引継データDTの変数名を、ポインタ変数の変数名(アスタリスク記号が付された変数名)に変換するマクロである。具体的には、外部変数D1,D2,D3の変数名をそれぞれ、ポインタ変数の変数名(アスタリスク記号が付された変数名)*Gp_D1,*Gp_D2,*Gp_D3に置換するものである。ここで、引継データDTに含まれる外部変数D4は配列であるため、外部変数D4の変数名を変換するマクロは含まれていない。
【0100】
記述501の変更は、引継データDTに含まれる外部変数D4の宣言をポインタ宣言にするものである。つまり、外部変数D4に係る記述を、
図11に示す記述522にするものである。
図7に示すシステムプログラムSPaの記述501では、引継データDTに含まれる外部変数D4の宣言が配列宣言で行われていたが、これをポインタ宣言に変更するために、記述501の一部が変更される。
【0101】
このようにして、
図7に示すシステムプログラムSPが、
図11にシステムプログラムSPに修正される。
図11に示すシステムプログラムSPは、
図8に示すシステムプログラムSPと同様に、アドレス固定領域に格納されたデータの値をアドレス変動領域に格納されたポインタによって参照するものである(
図9(b)参照)。プロセス制御装置10のアドレス固定領域に記憶された引継データDTは、プロセス制御装置20に容易にコピーすることができる。このため、
図11に示すシステムプログラムSPも、オンラインシステム更新に対応したものということができる。
【0102】
以上の通り、本実施形態では、第2実施形態と同様に、選別部45aで選別されたデータがプロセス制御装置10からプロセス制御装置20に引き継がれるように、修正部45bがシステムプログラムSPを修正するようにしている。これにより、作業者は、手作業でシステムプログラムSPの修正を行う必要が無くなるか、或いは、軽微な修正を行うだけで良くなる。このように、本発明の実施形態では、多大な労力を必要することなく容易にシステムプログラムをオンラインシステム更新に対応したものに修正できるよう作業者を支援することができる。
【0103】
また、本実施形態では、アドレス変動領域に格納される引継データDTの変数名を、ポインタ変数の変数名(アスタリスク記号が付された変数名)に変換するマクロが含まれるようにシステムプログラムSPを修正している。このようなマクロをシステムプログラムSPに含ませることで、第2実施形態のように、システムプログラムSPに記述された引継データDTの変数名の全てをポインタ変数の変数名(アスタリスクが付された変数名)に置換する必要がなくなる。つまり、第2実施形態に比べて、システムプログラムSPの修正箇所を少なくすることができる。これにより、例えば、作業者が、修正後のシステムプログラムSPの内容を確認する必要があった場合でも、作業者の負担(労力)を軽減することができる。
【0104】
〔第4実施形態〕
〈プログラム修正支援装置〉
本実施形態のプログラム修正支援装置は、
図5に示すプログラム修正支援装置40とは、修正部45bで行われる処理が若干異なるのみであり、修正部45bで行われる処理以外は、
図5に示すものと同様である。このため、本実施形態によるプログラム修正支援装置の詳細な説明は省略する。本実施形態のプログラム修正支援装置40は、第2,第3実施形態のように、ポインタを介してアドレス固定領域に格納されたデータを参照するようにした場合に生じ得る性能劣化を改善するものである。
【0105】
第2,第3実施形態のようにシステムプログラムSPが修正されると、データに対するアクセスが、直接アクセスからポインタを介した間接アクセスに変更されることになる。このような変更が行われると、例えば、数値や文字列を格納する単純変数やポインタ変数に対するアクセスも直接アクセスから間接アクセスに変更され、性能に大きな影響を与える可能性がある。本実施形態は、このようなアクセスの変更がなされた場合に生じ得る性能劣化を改善するようにしたものである。尚、配列変数や構造体変数に対するアクセスはポインタを介した間接アクセスになっていることが多く、性能への影響は少ないと考えられるため、本実施形態では、これらの変数については考慮しない。
【0106】
〈プログラム修正支援方法〉
図12は、本発明の第4実施形態によるプログラム修正支援方法を示すフローチャートである。
図12に示すフローチャートの処理は、例えば、
図10に示す処理(第2実施形態における処理)が終了すると開始される。処理が開始されると、まず、引継データDTの各々について性能劣化があるか否かを判断する処理が、修正部45bで行われる(ステップS41)。
【0107】
ここでは、対象の単純変数及びポインタ変数をマクロ置換する前と比較して、規定値以上の性能劣化が確認できる場合に性能劣化ありと判断される。例えば、引継データDTが、数値や文字列を格納する単純変数やポインタ変数である場合には、性能劣化ありと判断される(判断結果が「YES」)。これに対し、引継データDTが、配列変数や構造体変数である場合には、性能劣化なしと判断される(判断結果が「NO」)。
【0108】
ステップS41において、性能劣化ありと判断された場合(判断結果が「YES」の場合)には、性能劣化の原因が単純変数であるか否かを判断する処理が、修正部45bで行われる(ステップS42)。ステップS42において、性能劣化の原因が単純変数であると判断された場合(判断結果が「YES」の場合)には、その単純変数がアドレス変動領域のアドレスを意味していないか否かを判断する処理が、修正部45bで行われる(ステップS43)。単純変数がアドレス変動領域のアドレスを意味している場合(判断結果が「NO」の場合)には、アドレス変動領域のアドレスを引き継ぐことはできないため、性能改善を諦める。
【0109】
これに対し、単純変数がアドレス変動領域のアドレスを意味していないと判断された場合(判断結果が「YES」の場合)には、単純変数が引継領域HAを介して引き継がれるようにシステムプログラムSPを修正する処理が、修正部45bで行われる(ステップS44)。ここで、引継領域HAとは、
図1に示すプロセス制御装置10からプロセス制御装置20に引継データDTを引き継ぐために一時的に確保される領域(記憶領域)である(
図14(b)参照)。
【0110】
尚、ステップS42の判断結果が「NO」の場合、ステップS43の判断結果が「NO」の場合、又はステップS44の処理が終了した場合には、性能劣化の原因がポインタ変数であるか否かを判断する処理が、修正部45bで行われる(ステップS45)。ステップS45において、性能劣化の原因がポインタ変数であると判断された場合(判断結果が「YES」の場合)には、そのポインタ変数がアドレス固定領域のアドレスを指し示すポインタ変数であるか否かを判断する処理が、修正部45bで行われる(ステップS46)。ポインタ変数がアドレス固定領域のアドレスを指し示すポインタ変数ではないと判断された場合(判断結果が「NO」の場合)には、アドレス変動領域のアドレスを引き継ぐことはできないため、性能改善を諦める。
【0111】
これに対し、アドレス固定領域のアドレスを指し示すポインタ変数であると判断された場合(判断結果が「YES」の場合)には、ポインタ変数が引継領域HAを介して引き継がれるようにシステムプログラムSPを修正する処理が、修正部45bで行われる(ステップS47)。尚、ステップS41の判断結果が「NO」の場合、ステップS45の判断結果が「NO」の場合、ステップS46の判断結果が「NO」の場合、又はステップS47の処理が終了した場合には、
図12に示す一連の処理が終了する。
【0112】
《システムプログラムの具体例》
図13は、本発明の第4実施形態におけるプログラム修正支援方法によって修正されたシステムプログラムの一例を示す図である。修正前のシステムプログラムは、
図11に示すものである。尚、
図13においては、
図11に示すシステムプログラムSPの記述に相当する記述については同一の符号を付してある。
【0113】
ここで、説明を簡単にするために、
図7に示す外部変数D1,D2(単純変数D1、ポインタ変数D2)がアドレス固定領域に格納されてポインタを介して参照される場合に性能劣化が生ずるものとする。この場合には、
図12に示すステップS44によって、単純変数D1が引継領域HAを介して引き継がれるようにシステムプログラムSPが修正される。また、
図12に示すステップS47によって、ポインタ変数D2が引継領域HAを介して引き継がれるようにシステムプログラムSPが修正される。
【0114】
図12に示すステップS44,S47の処理が行われることによって、
図11に示すメインプログラムMPは、
図13に示す通り、記述421,422,423,424が追加され、記述411,412,414の一部が変更されたものに修正される。
記述421は、引継領域HAのデータ構造(単純変数D1、ポインタ変数D2を要素とするデータ構造)を規定する構造体変数handoffAreaを宣言するものである。
【0115】
記述422は、引継領域HAを初期化する関数initHndoffAreaについてのものである。
図13に示す例では、関数initHndoffAreaは、構造体変数handoffAreaに対し、引継領域HAの先頭アドレス(0x2000000)を設定する処理が実行される内容にされる。ここで、引継領域HAは、アドレス固定領域である必要はなく、アドレス変動領域であって良い。従って、プロセス制御装置10からプロセス制御装置20への切り替えが行われる前後において、引継領域HAの先頭アドレスが違っても良い。但し、プロセス制御装置10からプロセス制御装置20への切り替えが行われる前後において、引継領域HAのサイズは等しい必要がある。記述423は、引継領域HAにデータを格納する関数initDataSaveについてのものであり、記述424は、引継領域HAからデータを引き出す関数initDataRestoreについてのものである。尚、システム機能の初期化後に、関数initDataRestoreを呼び出すならば、初期化をバイパスする必要がない。
【0116】
記述411の変更は、構造体変数fixedAreaのメンバから外部変数D1,D2を削除して、外部変数D3,D4のみとするものである。記述412の変更は、関数InitfixedAreaにおいて、ポインタ変数Gp_D1,Gp_D2に関する記述を削除し、ポインタ変数Gp_D3,D4に対してのみアドレス固定領域のアドレスの設定が行われるようにするものである。記述414の変更は、ポインタ変数Gp_D1,Gp_D2を宣言する記述を外部変数D1,D2を宣言する記述425に変更するものである。
【0117】
また、
図12に示すステップS44,S47の処理が行われることによって、
図11に示すシステムプログラムSPaは、
図13に示す通り、記述521の一部が変更されたものに修正される。記述521の変更は、外部変数D1,D2に係るマクロを削除し、外部変数D3に係るマクロのみにするものである。尚、詳細は後述するが、外部変数D1,D2は、引継領域HAを介して、プロセス制御装置10からプロセス制御装置20に引き継がれる。このため、記述521の変更は、引継領域HAを介してプロセス制御装置10からプロセス制御装置20に引き継がれるデータの変数名に係るマクロを削除する修正であるということができる。
【0118】
図14は、本発明の第4実施形態において、修正前及び修正後のシステムプログラムが実行された場合のメモリマップの一例を示す図である。
図11に示す修正前のシステムプログラムSPが実行されると、
図14(a)に示す通り、アドレス固定領域に格納された外部変数D1,D2,D3,D4の値がアドレス変動領域に格納されたポインタGp_D1,Gp_D2,Gp_D3,D4によってそれぞれ参照される。
【0119】
これに対し、
図13に示す修正後のシステムプログラムSPが実行されると、
図14(b)に示す通り、アドレス変動領域に格納された外部変数D1,D2については直接参照される。アドレス固定領域に格納された外部変数D3,D4の値については、修正前と同様に、アドレス変動領域に格納されたポインタGp_D3,D4によってそれぞれ参照される。尚、プロセス制御装置10からプロセス制御装置20への切り替えが行われる際には、アドレス変動領域に格納された外部変数D1,D2は、
図14(b)に示す引継領域HAを介してプロセス制御装置10からプロセス制御装置20に引き継がれる。
【0120】
ここで、引き継ぐべきデータがアドレス変動領域のアドレスを示すものである場合には、引継領域HAを介してプロセス制御装置10からプロセス制御装置20に引き継ぎを行うことはできない。本実施形態では、
図12に示すステップS43,S46の処理を設けることによって、このようなデータが、引継領域HAを介して引き継がれるデータに含まれないようにしている。
【0121】
以上の通り、本実施形態では、第2,第3実施形態のように、ポインタを介してアドレス固定領域に格納されたデータを参照するようにした場合に性能劣化が生ずる可能性があるか否かを判断している。そして、性能劣化が生ずる可能性があるデータについては、直接参照されるよう変更し、且つ、予め確保した引継領域HAを介してプロセス制御装置10からプロセス制御装置20に引き継ぎが行われるようにシステムプログラムSPを修正している。これにより、作業者は、手作業でシステムプログラムSPの大幅な修正を行うことなく、性能劣化を改善することができる。このように、本発明の実施形態では、多大な労力を必要することなく容易にシステムプログラムをオンラインシステム更新に対応したものに修正できるよう作業者を支援することができる。
【0122】
〔第5実施形態〕
〈プログラム修正支援装置〉
本実施形態のプログラム修正支援装置は、
図5に示すプログラム修正支援装置40とは、修正部45bで行われる処理が若干異なるのみであり、修正部45bで行われる処理以外は、
図5に示すものと同様である。このため、本実施形態によるプログラム修正支援装置の詳細な説明は省略する。本実施形態のプログラム修正支援装置40は、アドレス変動領域のデータをアドレス固定領域に移動させることができない場合であっても、アドレス変動領域のアドレス値を引き継ぐことを回避して、プロセス制御装置10からプロセス制御装置20への引き継ぎが行われるようにするものである。
【0123】
上述した第2~第4実施形態は、アドレス変動領域のデータをアドレス固定領域に移動させることが可能であることを前提としている。しかしながら、データの種類によってはアドレス固定領域に移動させることができないものもある。例えば、C言語で記述されたプログラムを例に挙げると、プロセス制御装置10からプロセス制御装置20への切り替えが行われる際に、呼び出し関数が動的に変更されるコールバック関数の関数ポインタ値を引き継ぐ場合である。この場合において、各関数ポインタが指し示す各関数のプログラムロード領域は、他の関数のプログラム修正によって前後にずれるため、関数ポインタはアドレス変動領域内のアドレスといえる。しかしながら、本プログラムロード領域は、言語処理系によって決定されるものであるため、プログラムの修正等によってアドレスを固定させることは困難である。
【0124】
〈プログラム修正支援方法〉
図15は、本発明の第5実施形態によるプログラム修正支援方法を示すフローチャートである。尚、
図15においては、
図10に示すフローチャートのステップと同じステップについては同一の符号を付してある。
図15に示すフローチャートは、
図10に示すフローチャートにステップS51~S54の処理を追加したものである。
【0125】
ステップS21において、選別部45aで選別されたデータ(引継データDT)がアドレス変動領域に格納されるデータであると判断された場合(判断結果が「YES」の場合)に、ステップS51の処理が行われる。ステップS51では、アドレス変動領域のデータをアドレス固定領域に移動可能であるか否かを判断する処理が、修正部45bで行われる。アドレス変動領域のデータをアドレス固定領域に移動できると判断された場合(判断結果が「YES」の場合)には、ステップS22の処理が行われる。尚、ステップS22,S23,S24,S31,S26の処理については、第3実施形態で説明を行っているため説明を省略する。
【0126】
これに対し、アドレス変動領域のデータをアドレス固定領域に移動できないと判断された場合(判断結果が「NO」の場合)には、初期化処理でアドレステーブルが作成されるようにシステムプログラムSPを修正する処理が、修正部45bで行われる(ステップS52)。ここで、上記のアドレステーブルは、アドレス変動領域に格納されたデータのアドレスが登録されるテーブルである。このアドレステーブルには、例えば、コールバック関数の関数ポインタ値が登録される。
【0127】
次に、プロセス制御装置10からプロセス制御装置20への切り替え前のアドレステーブルを用いて、以下の第1変換処理が行われるようにシステムプログラムSPを修正する処理が、修正部45bで行われる(ステップS53)。
第1変換処理:アドレス変動領域に格納された引継データDTのアドレスをテーブル番号に変換する処理
【0128】
続いて、プロセス制御装置10からプロセス制御装置20への切り替え後のアドレステーブルを用いて、以下の第2変換処理が行われるようにシステムプログラムSPを修正する処理が、修正部45bで行われる(ステップS54)。
第2変換処理:引き継がれたテーブル番号をアドレス変動領域に格納された引継データDTのアドレスに変換する処理
【0129】
《システムプログラムの具体例》
図16は、本発明の第5実施形態によるプログラム修正支援方法で用いられる
修正前のシステムプログラムの一例を示す図である。
図17は、本発明の第5実施形態によるプログラム修正支援方法によって修正されたシステムプログラムの一例を示す図である。尚、
図16,
図17では、
図7,
図8と同様に、
図4に示すメインプログラムMP及びシステムプログラムSPaに相当するもののみを図示し、システムプログラムSPbに相当するものについては図示を省略している。また、
図16,
図17に示すメインプログラムMP及びシステムプログラムSPaは、説明の都合上、
図7,
図8に示すものとは内容を異ならせてある。
【0130】
図16に示すメインプログラムMPには、外部変数を宣言する記述601及びmain関数の記述602がある。
図16に示す例では、外部変数として、関数ポインタD1,D2,D3,D4が宣言されている。尚、main関数の記述602は、
図7に示すmain関数の記述402と内容が同じである。
【0131】
図16に示すシステムプログラムSPaには、メインプログラムMPの外部変数を参照する記述701、関数InitAの記述702、関数ExecAの記述703、関数Sub1の記述704、関数Sub2の記述705、及び関数Sub3の記述706がある。
図16に示す例では、記述701において、メインプログラムMPの外部変数の全て(外部変数D1,D2,D3,D4)を参照する宣言がなされている。尚、関数InitAの記述702及び関数ExecAの記述703は、説明の都合上、
図7に示す関数InitAの記述502及び関数ExecAの記述503とは異ならせてある。関数Sub1,関数Sub2,関数Sub3は、システムプログラムSPa内でのみ用いられる関数である。
【0132】
関数InitAは、関数Sub1,関数Sub2,関数Sub3の関数ポインタを外部変数D1,D2,D3にそれぞれ設定し、外部変数D1の値を外部変数D4に設定する処理が初期化処理として実行される内容である。ここで、外部変数D4は、main関数によって関数ExecAが次に(1秒後に)呼び出されるときに実行される関数の関数ポインタを格納するために用意される。
【0133】
関数ExecAは、外部変数D4で指し示されている関数を実行し、その後に外部変数D4の内容を変える(設定する)処理が実行される内容である。
図16に示す例では、外部変数の内容は以下の通りに設定される。つまり、外部変数D4が外部変数D1と等しければ、外部変数D4の内容は外部変数D2の内容に設定される。外部変数D4が外部変数D2と等しければ、外部変数D4の内容は外部変数D3の内容に設定される。外部変数D4が外部変数D3と等しければ、外部変数D4の内容は外部変数D1の内容に設定される。つまり、外部変数D4の内容は、関数ExecAが呼び出される度に、関数Sub1、関数Sub2、関数Sub3が順次実行されるように設定される。
【0134】
図15に示す処理が開始されると、まず、ステップS21で引継データDTがアドレス変動領域に格納されるデータであるか否かが判断される。ここでは、説明の便宜上、メインプログラムMPで宣言されている外部変数の全て(D1,D2,D3,D4)が引継データDTであり、且つ、アドレス変動領域に格納されるデータであるとする。このため、ステップS21の判断結果は「YES」になる。
【0135】
次に、ステップS51で、外部変数D1,D2,D3,D4をアドレス固定領域に移動可能であるか否かが判断される。外部変数D1,D2,D3,D4は、システムプログラムSPaの関数Sub1,関数Sub2,関数Sub3の関数ポインタを格納するものであるから、ステップS51の判断結果が「NO」になる。
【0136】
次いで、ステップS52において、初期化処理でアドレステーブルが作成されるようにシステムプログラムSPを修正する処理が行われる。具体的には、
図17に示す通り、メインプログラムMPの記述601に記述611,612が追加され、システムプログラムSPaの記述701に記述711,712が追加されるとともに、記述702に記述713
,715が追加される。
【0137】
メインプログラムMPの記述611は、関数ポインタを格納可能な3つの要素を有する配列変数D5(以下、「アドレステーブルD5」ということもある)を外部変数として宣言するものである。また、メインプログラムMPの記述612は、配列変数D5の要素の番号(以下、「アドレステーブルD5のテーブル番号」ということもある)を格納する整数型の変数D6を外部変数として宣言するものである。
【0138】
システムプログラムSPaの記述711,712は、メインプログラムMPの外部変数D5,D6をそれぞれ参照するものである。また、システムプログラムSPaの記述713は、初期化処理を行う関数InitAにおいて、アドレステーブルD5の初期化処理を行うものである。具体的に、関数Sub1,関数Sub2,関数Sub3の関数ポインタをアドレステーブルD5に設定するものである。
【0139】
尚、アドレステーブルD5は、関数InitAが実行される度に生成される。
図17に示すシステムプログラムSPがプロセス制御装置10で実行される場合には、プロセス制御装置10のシステムスタート時(例えば、起動時)にアドレステーブルが生成される。また、
図17に示すシステムプログラムSPがプロセス制御装置20で実行される場合には、プロセス制御装置20のシステムスタート時(例えば、起動時)にアドレステーブルが生成される。
【0140】
続いて、ステップS53で、プロセス制御装置10からプロセス制御装置20への切り替え前において、アドレステーブルを用いてアドレスをテーブル番号に変換する処理が行われるようにシステムプログラムSPを修正する処理が行われる。具体的には、
図17に示す通り、システムプログラムSPaに関数ConvertIndexの記述714が追加される。
【0141】
関数ConvertIndexは、外部変数D4の内容に応じて、外部変数D6の値を変える(設定する)処理が実行される内容である。
図17に示す例では、外部変数D6の値は以下の通りに設定される。つまり、外部変数D4が外部変数D5[0]と等しければ、外部変数D6の値が「0」に設定される。外部変数D4が外部変数D5[1]と等しければ、外部変数D6の値が「1」に設定される。外部変数D4が外部変数D5[2]と等しければ、外部変数D6の値が「2」に設定される。
【0142】
そして、ステップS54で、プロセス制御装置10からプロセス制御装置20への切り替え後において、初期化されたアドレステーブルを用いてテーブル番号をアドレスに変換する処理が行われるようにシステムプログラムSPを修正する処理が行われる。具体的には、
図17に示す通り、システムプログラムSPaの記述702に記述715が追加される。
【0143】
記述715は、オンラインシステム更新が行われる場合(変数flagの値がONLINE_UP_GRADEの値と等しい場合)には、アドレステーブルD5の特定の要素に格納されているアドレスを、外部変数D4に設定するものである。尚、上記の特定の要素は、外部変数D6の値(テーブル番号)で特定される要素である。
【0144】
ここで、外部変数D6の値として「0」が引き継がれる場合を考える。プロセス制御装置10からプロセス制御装置20への切り替え前においては、外部変数D5[0](アドレステーブルD5のテーブル番号が「0」である要素)には、関数Sub1の関数ポインタが格納されていた。プロセス制御装置10からプロセス制御装置20への切り替え後においては、記述715の内容が実行されることにより、外部変数D5[0](アドレステーブルD5のテーブル番号が「0」である要素)には、関数Sub1の関数ポインタが格納される。
【0145】
このように、本実施形態では、外部変数D6の値(アドレステーブルD5のテーブル番号)を介して、いわば関数Sub1の関数ポインタ値を間接的に引き継ぐようにしている。仮に、プロセス制御装置10からプロセス制御装置20への切り替え後における関数Sub1の関数ポインタの値と、切り替え後における関数Sub1の関数ポインタの値とが異なっていても、外部変数D6を介することで、問題無く引き継ぐことができる。
【0146】
以上の通り、本実施形態では、アドレス変動領域のデータをアドレス固定領域に移動させることができない場合には、システムプログラムSPが実行される際にアドレステーブルが生成されるようシステムプログラムSPを修正している。そして、プロセス制御装置10からプロセス制御装置20への切り替え前に生成されたアドレステーブルのテーブル番号を引き継ぎ、切り替え後に生成されるアドレステーブルのテーブル番号として用いる処理が行われるようにシステムプログラムSPを修正している。
【0147】
これにより、アドレス変動領域のデータをアドレス固定領域に移動させることができない場合であっても、プロセス制御装置10からプロセス制御装置20への引き継ぎを行うことが可能になる。尚、この修正を用いれば、第4実施形態において、単純変数やポインタ変数がアドレス変動領域のアドレス値の場合でも、アドレス値を変動しない別の情報に変換して引き継ぐので、性能改善が行える。このように、本発明の実施形態では、多大な労力を必要することなく容易にシステムプログラムをオンラインシステム更新に対応したものに修正できるよう作業者を支援することができる。
【0148】
以上、本発明の実施形態によるプログラム修正支援装置及びプログラム修正支援方法について説明した。本発明は上述した実施形態に制限される訳ではなく、本発明の範囲内で任意に変更が可能である。例えば、上述した実施形態では、システムプログラムSPがC言語で記述されているものとして説明したが、システムプログラムSPがC言語で記述されている場合に限定する趣旨ではない。システムプログラムSPは、C言語以外の任意の言語で記述されていても良い。
【0149】
また、上述した実施形態では、オンライン更新制御部24が、プロセス制御装置20のみに実装されている例について説明した。しかしながら、特許文献1に開示されたもののように、オンライン更新制御部24の機能は、プロセス制御装置10とプロセス制御装置20とに分けて実装されていても良い。
【符号の説明】
【0150】
1 プロセス制御システム
10 プロセス制御装置
20 プロセス制御装置
40 プログラム修正支援装置
45a 選別部
45b 修正部
HA 引継領域
SP システムプログラム
SP1 システムプログラム
SP2 システムプログラム