説明

プログラム実行装置、プログラム生成装置、プログラム正否判定方法、および、プログラム加工方法

【課題】製造コストの削減や小型軽量化を図ると共に、スループットの低下を回避しつつ、オブジェクトプログラムを実行するタイミングでの誤り検出が可能となる。
【解決手段】プログラム実行装置120は、オブジェクトプログラムを実行する命令実行部220と、オブジェクトプログラムを一時的に保持するキャッシュメモリ222と、命令実行部によるオブジェクトプログラムのフェッチ要求を契機に、オブジェクトプログラムを読み込み、キャッシュメモリに保持させるプログラム読込部224と、読み込まれたオブジェクトプログラムに対し、順次、チェックコード導出式を計算し、ブロック単位でチェックコードを生成し、オブジェクトプログラムに予め挿入されているチェックコードと比較してオブジェクトプログラムの正否をブロック単位で判定するチェックコード判定部226とを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、オブジェクトプログラムの誤りを検出するためのプログラム実行装置、プログラム生成装置、プログラム正否判定方法、および、プログラム加工方法に関する。
【背景技術】
【0002】
オブジェクトプログラムは、生成されてから実行されるまでに、オブジェクトプログラムを生成したプログラム生成装置において、または、そのオブジェクトプログラムを実行するプログラム実行装置において、誤ったデータに変わってしまうおそれがある。このようなデータの変化は、例えば、ソフトウェアのエラーや偶発的なハードウェア故障、ソフトウェアの暴走による意図しない書き換え等を要因として生じ得る。そこで、プログラム実行装置では、オブジェクトプログラムが生成時と異なっていないかどうかを、様々な誤り検出方法を用いて検出し、誤ったオブジェクトプログラムにより不本意な実行結果を招いてしまう事態を回避している。
【0003】
このようなオブジェクトプログラムの誤り検出方法としては、例えばパリティチェックやCRC(Cyclic Redundancy Check)がある。かかる誤り検出方法では、オブジェクトプログラムに基づいてパリティビットやCRCチェックコードといったチェックコードを予め生成しておき、オブジェクトプログラムを格納するプログラムメモリとは別体のメモリにそのチェックコードを個別に格納し、オブジェクトプログラムの利用時に改めてチェックコードを生成すると共に、予め生成されているチェックコードと比較することでオブジェクトプログラムの誤りを検出する(例えば、特許文献1、2)。
【0004】
また、他の誤り検出方法として、数キロバイト単位でオブジェクトプログラムのサム値(チェックコード)を生成しておき、オブジェクトプログラムのダウンロード時に改めてサム値を生成すると共に、予め生成されているサム値と比較するチェックサムも知られている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平6−242977号公報
【特許文献2】特開平3−186937号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
上述したパリティチェックやCRCといった誤り検出方法では、プログラムメモリの他に、パリティビットやCRCチェックコードといったチェックコードを格納するためのメモリを準備しなくてはならない。例えば、32ビットのマシンコード幅をもつ中央制御部(プロセッサ)が、8ビット単位で1ビットのパリティビット(偶数パリティまたは奇数パリティ)を付加する場合、32ビットのデータに対して4ビットのパリティビットを要すこととなり、そのパリティビットを格納するため、1ビットのメモリを4つまたは8ビットのメモリを準備しなければならなくなる。
【0007】
上述した1ビットのメモリは、入手が困難であり、8ビットのメモリと比べメモリ単価が高いといった問題を有し、8ビットのメモリでは、4ビット利用した残りの4ビットが無駄になるといった問題がある。また、いずれの場合も、メモリを追加したことによる製造コストの増大のみならず、そのメモリをプリント基板に実装するための占有面積を確保しなければならず、小型軽量化の弊害となっていた。
【0008】
また、チェックサムによる誤り検出方法では、メモリを別途準備することなく誤りを検出することも可能ではあるが、数キロバイト単位といった比較的サイズの大きい領域を対象としており、チェックサムによってサム値が計算されている間は他の処理を実行できなかった。仮に、オブジェクトプログラムを実行する際にチェックサムを実行したとすると、チェックサムの度にオブジェクトプログラムが中断され、スループット(実効処理能力)の低下を招いてしまう。したがって、チェックサムによる誤り検出方法は、オブジェクトプログラムを外部からプログラムメモリに取り込んだ直後等、比較的時間に余裕があるタイミングにしか利用できなかった。また、チェックサムによる誤り検出方法では、オブジェクトプログラムをプログラムメモリに取り込んだときに誤りが無いことを確認したとしても、その後、プログラムメモリにおいてデータが変化したり、キャッシュメモリへの読み込み時にデータが変化してしまうと、オブジェクトプログラムの誤りが検出されないまま、実行されてしまうおそれがあった。
【0009】
そこで、本発明は、このような課題に鑑み、製造コストの削減や小型軽量化を図ると共に、スループットの低下を回避しつつ、オブジェクトプログラムを実行するタイミングでの誤り検出が可能な、プログラム実行装置、プログラム生成装置、プログラム正否判定方法、および、プログラム加工方法を提供することを目的としている。
【課題を解決するための手段】
【0010】
上記課題を解決するために、本発明のプログラム実行装置は、所定のブロック単位で生成されたチェックコードが予め挿入されているオブジェクトプログラムを実行する命令実行部と、命令実行部がオブジェクトプログラムを実行する際にオブジェクトプログラムを一時的に保持するキャッシュメモリと、命令実行部によるオブジェクトプログラムのフェッチ要求を契機に、オブジェクトプログラムを読み込み、キャッシュメモリに保持させるプログラム読込部と、読み込まれたオブジェクトプログラムに対し、順次、チェックコード導出式を計算し、ブロック単位でチェックコードを生成し、オブジェクトプログラムに予め挿入されているチェックコードと比較してオブジェクトプログラムの正否をブロック単位で判定するチェックコード判定部とを備えることを特徴とする。
【0011】
上記課題を解決するために、本発明の他のプログラム実行装置は、所定のブロック単位で生成されたチェックコードが予め挿入されているオブジェクトプログラムを実行する命令実行部と、命令実行部がオブジェクトプログラムを実行する際にオブジェクトプログラムを一時的に保持するキャッシュメモリと、命令実行部によるオブジェクトプログラムのフェッチ要求を契機に、オブジェクトプログラムを読み込み、キャッシュメモリに保持させるプログラム読込部と、読み込まれたオブジェクトプログラムに対し、順次、チェックコード導出式を計算し、オブジェクトプログラムに予め挿入されているチェックコードを含むオブジェクトプログラムの正否をブロック単位で判定するチェックコード判定部とを備えることを特徴とする。
【0012】
プログラム実行装置は、チェックコード判定部がオブジェクトプログラムをブロック単位で正しいと判定すると、命令実行部によるオブジェクトプログラムの実行をブロック単位で許可し、正しくないと判定すると、エラー処理を実行する判定結果処理部をさらに備えてもよい。
【0013】
上記課題を解決するために、本発明のプログラム生成装置は、オブジェクトプログラムに対しチェックコード導出式を計算し、所定のブロック単位でチェックコードを生成するチェックコード生成部と、生成されたチェックコードをオブジェクトプログラムに挿入するチェックコード挿入部とを備えることを特徴とする。
【0014】
プログラム生成装置は、ソースプログラムをコンパイルしてオブジェクトプログラムを生成するオブジェクトプログラム生成部をさらに備え、チェックコード生成部は、生成されたオブジェクトプログラムに対し、順次、チェックコード導出式を計算してもよい。
【0015】
ブロックのサイズは、オブジェクトプログラムを実行する複数のプログラム実行装置における、キャッシュメモリへの読み込みサイズの最大公約数であってもよい。
チェックコード挿入部は、オブジェクトプログラムにおけるチェックコードを挿入する位置の前段に、オブジェクトプログラムを実行する際にチェックコードを実行させないジャンプ命令を挿入してもよい。
【0016】
チェックコード挿入部は、オブジェクトプログラムに挿入するチェックコードのオペコード部をNOPとしてもよい。
上記課題を解決するために、オブジェクトプログラムを実行する命令実行部と、命令実行部がオブジェクトプログラムを実行する際にオブジェクトプログラムを一時的に保持するキャッシュメモリとを有するプログラム実行装置を用いた、本発明のプログラム正否判定方法は、オブジェクトプログラムには所定のブロック単位で生成されたチェックコードが予め挿入されており、命令実行部によるオブジェクトプログラムのフェッチ要求を契機に、オブジェクトプログラムを読み込み、キャッシュメモリに保持させ、読み込んだオブジェクトプログラムに対し、順次、チェックコード導出式を計算し、ブロック単位でチェックコードを生成し、オブジェクトプログラムに予め挿入されているチェックコードと比較してオブジェクトプログラムの正否をブロック単位で判定することを特徴とする。
【0017】
上記課題を解決するために、オブジェクトプログラムを実行する命令実行部と、命令実行部がオブジェクトプログラムを実行する際にオブジェクトプログラムを一時的に保持するキャッシュメモリとを有するプログラム実行装置を用いた、本発明の他のプログラム正否判定方法は、オブジェクトプログラムには所定のブロック単位で生成されたチェックコードが予め挿入されており、命令実行部によるオブジェクトプログラムのフェッチ要求を契機に、オブジェクトプログラムを読み込み、キャッシュメモリに保持させ、読み込んだオブジェクトプログラムに対し、順次、チェックコード導出式を計算し、オブジェクトプログラムに予め挿入されているチェックコードを含むオブジェクトプログラムの正否をブロック単位で判定することを特徴とする。
【0018】
上記課題を解決するために、本発明のプログラム加工方法は、オブジェクトプログラムに対しチェックコード導出式を計算し、所定のブロック単位でチェックコードを生成し、生成したチェックコードをオブジェクトプログラムに挿入することを特徴とする。
【発明の効果】
【0019】
以上のように本発明では、別途のメモリが不要となるので製造コストの削減や小型軽量化を図ることができ、チェックコード導出式の計算対象サイズと計算タイミングを工夫することで、スループットの低下を回避しつつ、オブジェクトプログラムを実行するタイミングでの誤り検出が可能となる。
【図面の簡単な説明】
【0020】
【図1】プログラム実行システムを構成する各装置の概略的な関係を示した説明図である。
【図2】プログラム生成装置の概略的な機能を示した機能ブロック図である。
【図3】チェックコード生成部の処理を説明するための説明図である。
【図4】チェックコード挿入部の処理を説明するための説明図である。
【図5】プログラム実行装置の概略的な機能を示した機能ブロック図である。
【図6】チェックコード判定部の処理を説明するための説明図である。
【図7】プログラム加工方法の全体的な流れを示したフローチャートである。
【図8】プログラム正否判定方法の全体的な流れを示したフローチャートである。
【発明を実施するための形態】
【0021】
以下に添付図面を参照しながら、本発明の好適な実施形態について詳細に説明する。かかる実施形態に示す寸法、材料、その他具体的な数値などは、発明の理解を容易とするための例示にすぎず、特に断る場合を除き、本発明を限定するものではない。なお、本明細書及び図面において、実質的に同一の機能、構成を有する要素については、同一の符号を付することにより重複説明を省略し、また本発明に直接関係のない要素は図示を省略する。
(プログラム実行システム100)
図1は、プログラム実行システム100を構成する各装置の概略的な関係を示した説明図である。プログラム実行システム100は、プログラム生成装置110と、プログラム実行装置120と、制御機器130とを含んで構成され、プログラム生成装置110とプログラム実行装置120とが、また、プログラム実行装置120と制御機器130とがそれぞれ信号線140を通じて接続されている。
【0022】
プログラム生成装置110は、プログラム実行装置120において実行されるオブジェクトプログラムを生成する。プログラム実行装置120は、プログラム生成装置110で生成されたオブジェクトプログラムを取り込み、そのオブジェクトプログラムを実行することで制御機器130を制御する。プログラム生成装置110やプログラム実行装置120としては、パーソナルコンピュータ、PDA(Personal Digital Assistant)、携帯電話、専用機器等、中央制御部(CPU)を有する様々な電子機器を適用できる。本実施形態では、プログラム生成装置110の一例としてパーソナルコンピュータを、プログラム実行装置120の一例としてPLC(Programmable Logic Controller)を、制御機器130の一例としてFA(Factory Automation)における様々な状態を検知するセンサ、そのセンサの検知結果に応じて動作する電動機や表示器を挙げて説明する。
【0023】
ここで、PLCは、センサ等の入力に応じて電動機等へ制御指令を行うFA用の制御装置である。パーソナルコンピュータでは、ラダー図等を通じ、このようなPLCで実現可能な、オブジェクトプログラムとしてのシーケンス制御プログラムを生成する。以下、プログラム生成装置110およびプログラム実行装置120の各機能部について説明し、その後、当該プログラム生成装置110およびプログラム実行装置120を用いた、プログラム正否判定方法およびプログラム加工方法を詳述する。
(プログラム生成装置110)
図2は、プログラム生成装置110の概略的な機能を示した機能ブロック図である。図2に示すように、プログラム生成装置110は、操作部150と、表示部152と、通信部154と、データメモリ156と、中央制御部158とを含んで構成され、各機能部が共通バス160によって接続されている。
【0024】
操作部150は、キーボード、ポインティングデバイス、十字キー、ジョイスティック、ジョグダイヤル、タッチパネル等のスイッチから構成され、ユーザの操作入力を受け付けて、その操作内容を中央制御部158に伝達する。表示部152は、液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイ等で構成され、中央制御部158の制御指令に応じてシーケンス制御プログラムを生成するための様々な画像を表示する。
【0025】
通信部154は、信号線140を介してプログラム実行装置120に接続されており、予め定められた通信プロトコルに基づきプログラム実行装置120との間でデータを授受する役目を担う。データメモリ156は、RAM(Random Access Memory)、フラッシュメモリ、HDD(Hard Disk Drive)等で構成され、中央制御部158の各機能部の処理に必要な情報を保持する。
【0026】
中央制御部158は、CPUを含む半導体集積回路で構成され、ROMから自体を動作させるためのプログラムやパラメータ等を読み出し、ワークエリアとしてのデータメモリ156や他の電子回路と協働してプログラム生成装置110全体を管理および制御する。また、中央制御部158は、ソースプログラム生成部170、オブジェクトプログラム生成部172、チェックコード生成部174、チェックコード挿入部176、プログラム書込部178としても機能する。
【0027】
ソースプログラム生成部170は、例えば、リレーによる論理回路を表すラダー図(ラダーロジック)や他のプログラミング言語を通じてシーケンス制御プログラム(オブジェクトプログラム)の元となるソースプログラムを生成する。ここで、ソースプログラムは、任意の言語や記述方法にて記述されたデータ処理手段をいう。
【0028】
オブジェクトプログラム生成部172は、ソースプログラム生成部170が生成したソースプログラムをコンパイルしてシーケンス制御プログラムを生成する。シーケンス制御プログラムは、プログラム実行装置120の中央制御部が直接実行可能な実行コード(マシン語)で構成される。
【0029】
チェックコード生成部174は、オブジェクトプログラム生成部172が生成したシーケンス制御プログラムに対し、順次、チェックコード導出式を計算し、所定の(予め定められた)ブロック単位でチェックコード(プログラム実行装置120で生成されるチェックコードと区別するため、以下、既設チェックコードと言う。)を生成する。チェックコード導出式(チェックアルゴリズム)は、例えば、CRCチェックコード、水平または垂直パリティビット、サム値、ハッシュ値等の既設チェックコードを導出するための論理式である。チェックコード導出式としてどのようなアルゴリズムを採用するかは、誤り検出の必要精度や誤り訂正の有無によって決定することができる。また、ブロックは、任意に設定可能な、1のチェックコードに対応付けられるデータの範囲を言うが、そのサイズをマシンコード幅(例えば4バイト)の整数倍(例えば、128バイト)とするのが望ましい。
【0030】
本実施形態では、チェックコードとしてCRCチェックコードを挙げている。CRCは、誤りの検出精度が高いのみならず、誤り箇所が連続するバースト誤りも検出できる点で非常に優れている。したがって、チェックコード導出式は、オブジェクトプログラム生成部172が生成したシーケンス制御プログラムを順次CRCの生成多項式で除算することとなる。このようにシーケンス制御プログラムの生成と並行してチェックコード導出式を順次計算する構成により、オブジェクトプログラム生成部172がブロック分(正確にはブロックからCRCチェックコードを除いた部分)のシーケンス制御プログラムの生成を終えると、チェックコード生成部174もチェックコード導出式の計算を完了することができ、コンパイル時間の長時間化を招くことなく、本実施形態の目的を達成することが可能となる。このときの計算結果である、生成多項式で除算した余りがCRCチェックコード(既設チェックコード)となる。
【0031】
ところで、プログラム生成装置110は、自体で生成したシーケンス制御プログラムを実行するプログラム実行装置120を特定できる場合、そのプログラム実行装置120におけるキャッシュメモリへの読み込みサイズ(例えば、128バイト)をプログラム実行装置120のプロパティ等を通じて把握することができる。したがって、既設チェックコードの対象となるブロックのサイズを、プログラム実行装置120におけるキャッシュメモリへの読み込みサイズ(128バイト)とすることで、後述するプログラム実行装置120のチェックコード判定部においても、チェックコード生成部174同様、誤り検出の効率化および処理時間の短縮化を図ることができる。ただし、ブロックには計算対象のプログラムコードのみならず既設チェックコードも含まれる。
【0032】
また、接続するプログラム実行装置120が複数種類想定される場合、既設チェックコードを計算するブロックのサイズを、複数種類のプログラム実行装置120における、キャッシュメモリへの読み込みサイズの最大公約数としてもよい。
【0033】
図3は、チェックコード生成部174の処理を説明するための説明図である。例えば、3つのプログラム実行装置120a、120b、120cのキャッシュメモリへの読み込みサイズがそれぞれ128バイト、192バイト、256バイトであった場合、チェックコード生成部174は、各プログラム実行装置120a、120b、120cにおける、オブジェクトプログラムのキャッシュメモリへの読み込みサイズの最大公約数である64バイト毎に、例えば、2バイト(CRC−16)の既設チェックコードを生成する(図3中、細分化された領域は、既設チェックコードの生成対象となるブロックを示し、その中央に付された「64」は容量(バイト)を示す。)。
【0034】
プログラム実行装置120は、それぞれで規定されている読み込みサイズでシーケンス制御プログラムを読み込み、最大公約数単位で既設チェックコードを判定する。例えば、プログラム実行装置120bは、キャッシュメモリに192バイトのシーケンス制御プログラムを読み込むが、64バイト毎に順次チェックコードを判定し、3回(192/64)の判定を経てキャッシュメモリに読み込んだ192バイト分のシーケンス制御プログラム全てが正しいことを把握する。
【0035】
こうすることで、キャッシュメモリへの読み込みサイズが異なる複数種類のプログラム実行装置120a、120b、120cに対しても、キャッシュメモリへの読み込みと並行してチェックコード導出式を計算させることが可能となり、プログラム実行装置120における既設チェックコードの判定頻度を最小限に抑えつつ、誤り検出に費やす時間の短縮化を図ることができる。
【0036】
また、逆に考えると、既存のプログラム生成装置110を流用する等の事情から、チェックコード生成部174において、既設チェックコードの生成単位であるブロックサイズが予め決まっている場合、プログラム実行装置120におけるキャッシュメモリの読み込みサイズを、予め決まっているブロックサイズを整数倍した値に設定することもできる。
【0037】
チェックコード挿入部176は、チェックコード生成部174が生成した既設チェックコードを、オブジェクトプログラム生成部172が生成したシーケンス制御プログラムに順次挿入する。このとき、チェックコード挿入部176は、プログラム実行装置120がシーケンス制御プログラムを読み込んだとき、ブロック単位で効率よく誤り検出を行わせるために、既設チェックコードを、既設チェックコードを生成する元となったシーケンス制御プログラムの中または近くに挿入する。
【0038】
このように、既設チェックコードをシーケンス制御プログラム本体にデータの一部として挿入することで、誤り検出に関し、別途のメモリが不要となり、製造コストの削減や小型軽量化を図ることができる。このとき、既設チェックコードを別途のメモリに保持することなくシーケンス制御プログラムに新たな領域を設けて挿入しているので、シーケンス制御プログラム自体の容量は増加することとなるが、容量が大きくなる分については、技術の進歩に伴うメモリ容量の増大化やシステムクロックの高速化で吸収できるので問題にはならない。
【0039】
また、チェックコード挿入部176は、プログラム実行装置120が既設チェックコードとシーケンス制御プログラム本体とを区別し、シーケンス制御プログラムのみを実行できるよう、様々な挿入態様をとることができる。
【0040】
図4は、チェックコード挿入部176の処理を説明するための説明図である。例えば、図4(a)に示すように、ソースプログラム生成部170が生成したソースプログラム180をオブジェクトプログラム生成部172がコンパイルして、シーケンス制御プログラム182が生成されたとする。チェックコード挿入部176は、図4(b)の如く、チェックコード生成部174が生成した既設チェックコードを挿入する。ここでは、既設チェックコードを挿入する位置の前段に、シーケンス制御プログラムを実行する際に既設チェックコードを実行させないジャンプ命令が予め挿入されている。
【0041】
具体的に、チェックコード生成部174は、図4(b)のプログラムコード1〜30(例えば、アドレスxxx000h〜xxx077h)とその直後に配されたジャンプ命令(例えば、アドレスxxx078h〜xxx07Bh)に関してチェックコード導出式を計算し、既設チェックコードを生成すると、ジャンプ命令の後段(例えば、アドレスxxx07Ch〜xxx07Fh)に、その生成された既設チェックコードを挿入する。こうして、プログラムコード1〜30と既設チェックコードとがグループ化されてブロックが形成される。かかるブロックでは、シーケンス制御プログラムの実行時に、実行アドレスがxx078hのジャンプ命令に至ると、アドレスを4番地(4バイト)先に飛ばしてしまうため、既設チェックコードがプログラムコードとして実行されずに済むこととなる。
【0042】
ここで、既設チェックコードの対象がプログラムコード1〜30(120バイト)となるのは、ブロックサイズを128バイトとしたとき、ジャンプ命令と既設チェックコードとが8バイト占有してしまうためである。
【0043】
このようなジャンプ命令を挿入する場合、マシンコード幅(例えば4バイト)すべての領域を、既設チェックコードを格納する領域として利用することができる、即ち、既設チェックコードを4バイトまで延長することができる。その反面、ジャンプ命令を挿入する領域をブロック毎に設けなくてはならないので、チェックコード挿入後のシーケンス制御プログラムの容量が比較的大きくなってしまう。
【0044】
また、チェックコード挿入部176は、図4(c)の如く、シーケンス制御プログラムに挿入する既設チェックコードのオペコード部をNOP(No OPeration)とすることもできる。
【0045】
具体的に、チェックコード生成部174は、図4(c)のプログラムコード1〜31(例えば、アドレスxxx000h〜xxx07Bh)に関してチェックコード導出式を計算し、既設チェックコードを生成すると、その直後(例えば、アドレスxxx07Ch〜xxx07Fh)に、オペコード部をNOPとし、オペランド部を生成された既設チェックコードとするプログラムコードを挿入する。こうしてプログラムコード1〜31とNOPを伴った既設チェックコードとがグループ化され、ブロックが形成される。かかるブロックでは、シーケンス制御プログラムの実行時に、実行アドレスがxxx07ChのNOPに至ると、そのプログラムコードを無視するため、既設チェックコードがプログラムコードとして実行されずに済むこととなる。
【0046】
ここでは、ジャンプ命令を挿入する場合と異なり、既設チェックコードの対象がプログラムコード1〜31(124バイト)となる。これは、ブロックサイズを128バイトとしたとき、NOPのプログラムコードが4バイトしか占有しないためである。
【0047】
NOPによるプログラムコードを利用する場合、既設チェックコードとして利用できる領域がオペランド部に制限される(データ幅32ビットのうち例えばオペコード部が6ビットを占有している場合、残りの26ビットしか利用できない。)が、上述したジャンプ命令を挿入する必要がなくなるので、シーケンス制御プログラムの容量の増大を抑制することができる。
【0048】
プログラム書込部178は、このようにして生成されたシーケンス制御プログラムを、通信部154を通じてプログラム実行装置120にダウンロードしたり、プログラム実行装置120のパラメータ等を設定して動作指示を行ったりする。
(プログラム実行装置120)
図5は、プログラム実行装置120の概略的な機能を示した機能ブロック図である。図5に示すように、プログラム実行装置120は、通信部200a、200bと、プログラムメモリ202と、データメモリ204と、中央制御部206とを含んで構成され、中央制御部206と通信部200aとプログラムメモリ202とは共通バス208aによって、中央制御部206と通信部200bとデータメモリ204とは共通バス208bによって接続されている。
【0049】
通信部200aは、信号線140を介してプログラム生成装置110に接続され、通信部200bは、信号線140を介して制御機器130に接続されており、予め定められた通信プロトコルに基づきプログラム生成装置110や制御機器130との間でデータを授受する役目を担う。
【0050】
プログラムメモリ202は、RAM、不揮発性RAM、EEPROM(Electrically Erasable Programmable ROM)、フラッシュメモリ、HDD等で構成され、プログラム生成装置110で生成されたシーケンス制御プログラムを保持する。また、保持されるシーケンス制御プログラムは、上述したように所定のブロック単位で生成された既設チェックコードが予め挿入されている。
【0051】
データメモリ204は、RAM、フラッシュメモリ、HDD等で構成され、中央制御部206の各機能部の処理に必要な情報を保持する。本実施形態では、図5に示すように、中央制御部206がプログラムメモリ202にアクセスするための共通バス208aと、データメモリ204にアクセスするための共通バス208bとを独立して形成するハーバードアーキテクチャを採用しているが、共通バスを両者で共用する非ハーバードアーキテクチャを採用することもできる。
【0052】
中央制御部206は、CPUを含む半導体集積回路で構成され、ROMから自体を動作させるためのプログラムやパラメータ等を読み出し、ワークエリアとしてのデータメモリ204や他の電子回路と協働してプログラム実行装置120全体を管理および制御する。また、中央制御部206は、命令実行部220、キャッシュメモリ222、プログラム読込部(キャッシュコントローラ)224、チェックコード判定部226、判定結果処理部228としても機能する。
【0053】
命令実行部220は、パワーオンまたはリセットスタート後、プログラム読込部224にフェッチ要求を発し、後述する判定結果処理部228の実行許可信号に応じて、所定の制御周期間隔でサイクリックにシーケンス制御プログラムのプログラムコード(インストラクション)を解読し、解読したプログラムコードに基づいて制御機器130に各制御指令を行う。ここで、フェッチは、命令実行部220がシーケンス制御プログラムを実行する際、後述するプログラム読込部224を通じて、その最初の段階でキャッシュメモリ222からプログラムコードを読み出す処理を含む。
【0054】
キャッシュメモリ222は、SDRAM(Synchronous Dynamic RAM)等のRAMで構成され、シーケンス制御プログラムを高速に実行するため、命令実行部220がシーケンス制御プログラムを実行する際にシーケンス制御プログラムを一時的に保持する。ここで、キャッシュメモリ222への読み込みサイズはプログラム実行装置120毎に予め定められている。
【0055】
プログラム読込部224は、命令実行部220によって所定の制御周期間隔で発せられるシーケンス制御プログラムのフェッチ要求を契機に、キャッシュメモリ222内に目的とするシーケンス制御プログラムが有るか否か確認し、無ければ、シーケンス制御プログラムをプログラムメモリ202から読み込み、キャッシュメモリ222に保持させる。命令実行部220は、このようにして読み込まれたシーケンス制御プログラムのプログラムコードを解読する。
【0056】
チェックコード判定部226は、プログラム読込部224によってキャッシュメモリ222に読み込まれたシーケンス制御プログラムに対し、順次、チェックコード導出式を計算し、ブロック単位でチェックコード(上述した既設チェックコードと区別するため、以下、新設チェックコードと言う。)を生成する。そして、チェックコード判定部226は、シーケンス制御プログラムに予め挿入されている既設チェックコードと、新設チェックコードとを比較してシーケンス制御プログラムの正否をブロック単位で判定する。このようなシーケンス制御プログラムの誤りは、ソフトウェアのエラーや偶発的なハードウェア故障、ソフトウェアの暴走による意図しない書換え、中央制御部206とプログラムメモリ202とを結ぶ共通バス208aにノイズが印加された場合等を要因として生じ得る。
【0057】
図6は、チェックコード判定部226の処理を説明するための説明図である。例えば、プログラム生成装置110から受信したシーケンス制御プログラムの各ブロックが、図6(a)のようにプログラムコードとジャンプ命令と既設チェックコードとで構成されているとする。プログラム読込部224がキャッシュメモリ222にシーケンス制御プログラムを読み込み、キャッシュメモリ222に保持させる間に、チェックコード判定部226は、読み込まれたシーケンス制御プログラムに対し順次チェックコード導出式を計算し、既設チェックコードを除くプログラムコード1〜30およびジャンプ命令(例えば、アドレスxxx000h〜xxx07Bh)までを計算し終えると、その時点の計算結果を新設チェックコードとして保持する。
【0058】
チェックコード判定部226は、さらに、シーケンス制御プログラムとして読み込まれた既設チェックコード(例えば、アドレスxxx07Ch〜xxx07Fh)を抽出し、新設チェックコードと比較して一致しているか否か判定する。かかる判定結果は、後述する判定結果処理部228で利用される。
(他の誤り検出)
上述した例では、チェックコード導出式によって計算された、生成時刻の異なる2つのチェックコードを比較することで、その異なる時間の間にシーケンス制御プログラムのデータが変化したか否かを判定している。しかし、CRCやパリティチェック、チェックサムといった誤り検出方法では、それぞれ、新たにチェックコードを導出することなく、チェックコード導出式を用いて誤り検出を自己完結的に実行することができる。
【0059】
例えば、CRCの場合、計算対象となるプログラムコードおよびジャンプ命令をビットシフトし既設チェックコードを追加した上でチェックコード導出式の計算(生成多項式で除算)を実行すると、シーケンス制御プログラムに誤りがない場合には除算した余りが0になるといった特徴を有する。したがって、生成多項式で除算した余りの有無によってシーケンス制御プログラムの誤りを検出することが可能なことが理解できる。
【0060】
そこで、チェックコード判定部226は、読み込まれたシーケンス制御プログラムに対し、順次、チェックコード導出式を計算し、シーケンス制御プログラムに予め挿入されているチェックコードを含むシーケンス制御プログラムの正否を、例えば、生成多項式で除算した余りの有無によって判定する。
【0061】
例えば、プログラム生成装置110から受信したシーケンス制御プログラムの各ブロックが、図6(b)のようにプログラムコードとジャンプ命令と既設チェックコードとで構成されているとする。プログラム読込部224がキャッシュメモリ222にシーケンス制御プログラムを読み込み、キャッシュメモリ222に保持させる間に、チェックコード判定部226は、読み込まれたシーケンス制御プログラムに対し順次チェックコード導出式を計算し、ブロック全体に渡って、即ち、プログラムコード1〜30、ジャンプ命令および既設チェックコード(例えば、アドレスxxx000h〜xxx07Fh)を計算し、その計算結果が0かまたは有意な値を示すか判定する。
【0062】
このように自己完結的にシーケンス制御プログラムの正否を判定することで、チェックコード同士を比較する場合と比べ、比較処理の分だけ処理負荷を軽減でき、信頼性の向上を図ることができる。
【0063】
判定結果処理部228は、チェックコード判定部226がシーケンス制御プログラムをブロック単位で正しいと判定すると、即ち、プログラム生成装置110で生成されてから命令実行部220がフェッチ要求を発するまでシーケンス制御プログラムのデータに変化がなく、安全に利用することができると判定すると、命令実行部220によるシーケンス制御プログラムの実行を許可するため実行許可信号をブロック単位で命令実行部220に出力し、正しくないと判定すると、エラー処理を実行する。上述したように、命令実行部220は、かかる実行許可信号を受けて、制御機器130に各制御指令を出力する。
【0064】
ここで、エラー処理は、エラーが生じているビットを特定できる場合におけるエラー訂正処理であったり、命令実行部220にエラー信号を出力して、命令実行部220の制御動作を停止させる処理である。制御動作の停止は、命令実行部220からの制御指令の停止に従ったものでもよいし、各制御機器130の動作を停止させる処理であってもよい。
【0065】
また、当該実行許可信号を、安全状態を示す信号として用い、実行許可信号を定期的に確認できている間のみ命令実行部220や各制御機器130を有効に動作させる安全コントローラとして利用してもよい。さらに、他のプログラム実行装置120の中央制御部206におけるエラー診断材料として当該実行許可信号を利用し、相互の安全性を高めることもできる。また、エラー信号が出力されると、任意に設けられた報知部が外部にエラーが生じたことを報知するとしてもよい。
【0066】
以上、説明したプログラム生成装置110およびプログラム実行装置120によって、(1)製造コストの削減や小型軽量化を図ることができ、(2)スループットの低下を回避しつつ、(3)シーケンス制御プログラムを実行するタイミングでの誤り検出が可能となる。以下、(1)、(2)、(3)について具体的に説明する。
【0067】
(1)プログラム生成装置110において、シーケンス制御プログラム自体に既設チェックコードが埋め込まれ、また、プログラム実行装置120において、その埋め込まれた既設チェックコードがシーケンス制御プログラムの正否判定に用いられるので、チェックコードを保持するための高コスト化かつ占有面積増大を招く別途のメモリ(通常のメモリのみならず、データ幅が8ビットの整数倍になっていない、例えば1ビットや9ビットといった特殊かつ高価なメモリ等)が不要となり、製造コストの削減や小型軽量化を図ることができる。
【0068】
(2)また、チェックコード導出式の計算対象であるブロックサイズをプログラム実行装置120のそれぞれのキャッシュメモリ222への読み込みサイズの最大公約数とし、計算タイミングを、プログラム読込部224によるキャッシュメモリ222へのシーケンス制御プログラムの読み込み時とすることで、適切なサイズで効率よくシーケンス制御プログラムの誤りを検出することができ、スループットの低下を回避することが可能となる。
【0069】
(3)さらに、プログラムを実行する直前のタイミングにおいて、命令実行部220のフェッチ先であるキャッシュメモリ222に保持されたシーケンス制御プログラムの誤り検出が可能となるので、プログラムメモリ202やキャッシュメモリ222でのデータ化けや、中央制御部206とプログラムメモリ202との共通バス208aを経由したことによるデータの変化までも検出することができ、信頼性や安定性の向上を図ることが可能となる。
【0070】
また、コンピュータを、プログラム生成装置110やプログラム実行装置120として機能させるプログラムを記録した、コンピュータで読み取り可能なフレキシブルディスク、光磁気ディスク、ROM、EPROM、EEPROM、CD(Compact Disc)、DVD(Digital Versatile Disc)、BD(Blu-ray Disc)等の記憶媒体も提供される。
(プログラム加工方法、プログラム正否判定方法)
次に、シーケンス制御プログラムを加工するプログラム加工方法、および、シーケンス制御プログラムの正否を判定するプログラム正否判定方法を説明する。図7は、プログラム加工方法の全体的な流れを示したフローチャートであり、図8は、プログラム正否判定方法の全体的な流れを示したフローチャートである。
【0071】
図7を参照すると、まず、プログラム生成装置110のソースプログラム生成部170は、操作部150を通じたユーザの操作入力に応じて、ラダー図等のソースプログラムを生成する(S300)。オブジェクトプログラム生成部172は、操作部150を通じたユーザのコンパイル指令に応じ、ソースプログラム生成部170が生成したソースプログラムをコンパイルしてシーケンス制御プログラムを生成する(S302)。
【0072】
続いて、チェックコード生成部174は、オブジェクトプログラム生成部172が生成したシーケンス制御プログラムに対し、順次、チェックコード導出式を計算し(S304)、予め定められたブロック単位で既設チェックコードが生成されると、チェックコード挿入部176は、生成された既設チェックコードをシーケンス制御プログラムに挿入する(S306)。ここで、ソースプログラム生成部170が生成したソースプログラムのコンパイルが完了したか否か判定され(S308)、コンパイルが完了していない間(S308におけるNO)、コンパイルステップS302から既設チェックコード挿入ステップS306までの処理を繰り返す。コンパイルが完了すると(S308におけるYES)、プログラム書込部178は、チェックコード挿入部176によって加工されたシーケンス制御プログラムを、通信部154を通じてプログラム実行装置120にダウンロードする(S310)。
【0073】
図8を参照すると、パワーオンまたはリセットスタート後に、プログラム実行装置120の命令実行部220がプログラム読込部224にフェッチ要求を発すると(S330)、そのフェッチ要求を契機に、プログラム読込部224は、キャッシュメモリ222内に目的とするシーケンス制御プログラムが有るか否か、即ち、キャッシュメモリ222に既に読み込まれているか否か判定し(S332)、読み込まれていないと判定すると(S332におけるNO)、シーケンス制御プログラムをプログラムメモリ202から読み込み(S334)、キャッシュメモリ222に保持させる(S336)。このとき、シーケンス制御プログラムには、図7を用いて説明したように、所定のブロック単位で生成された既設チェックコードが予め挿入されている。
【0074】
続いて、チェックコード判定部226は、プログラム読込部224が読み込んだシーケンス制御プログラムに対し、順次、チェックコード導出式を計算し、ブロック単位でチェックコードを生成し(S338)、シーケンス制御プログラムに予め挿入されているチェックコードと比較してシーケンス制御プログラムの正否をブロック単位で判定する(S340)。このとき、チェックコード判定部226は、読み込まれたシーケンス制御プログラムに対し、順次、チェックコード導出式を計算し、シーケンス制御プログラムに予め挿入されているチェックコードを含むブロックサイズのシーケンス制御プログラムの正否を、チェックコード導出式の計算結果のみ(例えば、計算結果が0となると正しいと判定)によって判定してもよい。
【0075】
次に、判定結果処理部228は、チェックコード判定部226がシーケンス制御プログラムをブロック単位で正しいと判定したか否か確認し(S342)、シーケンス制御プログラムが正しいと判定されていた場合(S342におけるYES)、命令実行部220によるシーケンス制御プログラムの実行をブロック単位で許可するため実行許可信号を出力する(S344)。また、シーケンス制御プログラムが正しくないと判定されていた場合(S342におけるNO)、判定結果処理部228は、エラー処理を実行する(S346)。ここで、エラー処理がエラー訂正処理である場合、エラービットを訂正した後、実行許可信号を出力する。エラー処理が制御機器130の動作停止を伴う場合、そのエラーの原因が把握されるまで、当該プログラム正否判定方法を停止してもよい。
【0076】
続いて、命令実行部220は、判定結果処理部228から実行許可信号が出力されているか否か判定し(S348)、実行許可信号が出力されていれば(S348におけるYES)、かかるシーケンス制御プログラムを解読し、制御機器130に各制御指令を行う(S350)。また、シーケンス制御プログラム有無判断ステップS332において、シーケンス制御プログラムが既に読み込まれていると判定された場合(S332におけるYES)、命令実行部220は、その読み込まれているシーケンス制御プログラムを解読し、制御機器130に各制御指令を行う(S352)。ここでは、以上の処理が、所定の制御周期間隔でサイクリックに実行される。
【0077】
かかるプログラム加工方法やプログラム正否判定方法によっても、別途のメモリが不要となるので製造コストの削減や小型軽量化を図ることができ、チェックコード導出式の計算対象サイズと計算タイミングを工夫することで、スループットの低下を回避しつつ、シーケンス制御プログラムを実行するタイミングでの誤り検出が可能となる。
【0078】
以上、添付図面を参照しながら本発明の好適な実施形態について説明したが、本発明はかかる実施形態に限定されないことは言うまでもない。当業者であれば、特許請求の範囲に記載された範疇において、各種の変更例または修正例に想到し得ることは明らかであり、それらについても当然に本発明の技術的範囲に属するものと了解される。
【0079】
なお、本明細書のプログラム加工方法やプログラム正否判定方法の各工程は、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいはサブルーチンによる処理を含んでもよい。
【産業上の利用可能性】
【0080】
本発明は、オブジェクトプログラムの誤りを検出するためのプログラム実行装置、プログラム生成装置、プログラム正否判定方法、および、プログラム加工方法に利用することができる。
【符号の説明】
【0081】
110 …プログラム生成装置
120 …プログラム実行装置
130 …制御機器
174 …チェックコード生成部
176 …チェックコード挿入部
202 …プログラムメモリ
220 …命令実行部
222 …キャッシュメモリ
224 …プログラム読込部
226 …チェックコード判定部
228 …判定結果処理部


【特許請求の範囲】
【請求項1】
所定のブロック単位で生成されたチェックコードが予め挿入されているオブジェクトプログラムを実行する命令実行部と、
前記命令実行部が前記オブジェクトプログラムを実行する際に該オブジェクトプログラムを一時的に保持するキャッシュメモリと、
前記命令実行部による前記オブジェクトプログラムのフェッチ要求を契機に、該オブジェクトプログラムを読み込み、前記キャッシュメモリに保持させるプログラム読込部と、
読み込まれた前記オブジェクトプログラムに対し、順次、チェックコード導出式を計算し、前記ブロック単位でチェックコードを生成し、前記オブジェクトプログラムに予め挿入されているチェックコードと比較してオブジェクトプログラムの正否を前記ブロック単位で判定するチェックコード判定部と、
を備えることを特徴とするプログラム実行装置。
【請求項2】
所定のブロック単位で生成されたチェックコードが予め挿入されているオブジェクトプログラムを実行する命令実行部と、
前記命令実行部が前記オブジェクトプログラムを実行する際に該オブジェクトプログラムを一時的に保持するキャッシュメモリと、
前記命令実行部による前記オブジェクトプログラムのフェッチ要求を契機に、該オブジェクトプログラムを読み込み、前記キャッシュメモリに保持させるプログラム読込部と、
読み込まれた前記オブジェクトプログラムに対し、順次、チェックコード導出式を計算し、前記オブジェクトプログラムに予め挿入されているチェックコードを含むオブジェクトプログラムの正否を前記ブロック単位で判定するチェックコード判定部と、
を備えることを特徴とするプログラム実行装置。
【請求項3】
前記チェックコード判定部が前記オブジェクトプログラムを前記ブロック単位で正しいと判定すると、前記命令実行部によるオブジェクトプログラムの実行を該ブロック単位で許可し、正しくないと判定すると、エラー処理を実行する判定結果処理部をさらに備えることを特徴とする請求項1または2に記載のプログラム実行装置。
【請求項4】
オブジェクトプログラムに対しチェックコード導出式を計算し、所定のブロック単位でチェックコードを生成するチェックコード生成部と、
生成された前記チェックコードを前記オブジェクトプログラムに挿入するチェックコード挿入部と、
を備えることを特徴とするプログラム生成装置。
【請求項5】
ソースプログラムをコンパイルして前記オブジェクトプログラムを生成するオブジェクトプログラム生成部をさらに備え、
前記チェックコード生成部は、生成された前記オブジェクトプログラムに対し、順次、チェックコード導出式を計算することを特徴とする請求項4に記載のプログラム生成装置。
【請求項6】
前記ブロックのサイズは、前記オブジェクトプログラムを実行する複数のプログラム実行装置における、キャッシュメモリへの読み込みサイズの最大公約数であることを特徴とする請求項4または5に記載のプログラム生成装置。
【請求項7】
前記チェックコード挿入部は、前記オブジェクトプログラムにおける前記チェックコードを挿入する位置の前段に、前記オブジェクトプログラムを実行する際に該チェックコードを実行させないジャンプ命令を挿入することを特徴とする請求項4から6のいずれか1項に記載のプログラム生成装置。
【請求項8】
前記チェックコード挿入部は、前記オブジェクトプログラムに挿入する前記チェックコードのオペコード部をNOPとすることを特徴とする請求項4から6のいずれか1項に記載のプログラム生成装置。
【請求項9】
オブジェクトプログラムを実行する命令実行部と、該命令実行部が該オブジェクトプログラムを実行する際に該オブジェクトプログラムを一時的に保持するキャッシュメモリとを有するプログラム実行装置を用いたプログラム正否判定方法であって、
前記オブジェクトプログラムには所定のブロック単位で生成されたチェックコードが予め挿入されており、
前記命令実行部による前記オブジェクトプログラムのフェッチ要求を契機に、該オブジェクトプログラムを読み込み、前記キャッシュメモリに保持させ、
読み込んだ前記オブジェクトプログラムに対し、順次、チェックコード導出式を計算し、前記ブロック単位でチェックコードを生成し、前記オブジェクトプログラムに予め挿入されているチェックコードと比較してオブジェクトプログラムの正否を前記ブロック単位で判定することを特徴とするプログラム正否判定方法。
【請求項10】
オブジェクトプログラムを実行する命令実行部と、該命令実行部が該オブジェクトプログラムを実行する際に該オブジェクトプログラムを一時的に保持するキャッシュメモリとを有するプログラム実行装置を用いたプログラム正否判定方法であって、
前記オブジェクトプログラムには所定のブロック単位で生成されたチェックコードが予め挿入されており、
前記命令実行部による前記オブジェクトプログラムのフェッチ要求を契機に、該オブジェクトプログラムを読み込み、前記キャッシュメモリに保持させ、
読み込んだ前記オブジェクトプログラムに対し、順次、チェックコード導出式を計算し、前記オブジェクトプログラムに予め挿入されているチェックコードを含むオブジェクトプログラムの正否を前記ブロック単位で判定することを特徴とするプログラム正否判定方法。
【請求項11】
オブジェクトプログラムに対しチェックコード導出式を計算し、所定のブロック単位でチェックコードを生成し、
生成した前記チェックコードを前記オブジェクトプログラムに挿入することを特徴とするプログラム加工方法。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2012−48445(P2012−48445A)
【公開日】平成24年3月8日(2012.3.8)
【国際特許分類】
【出願番号】特願2010−189237(P2010−189237)
【出願日】平成22年8月26日(2010.8.26)
【出願人】(000005234)富士電機株式会社 (3,146)
【Fターム(参考)】