(57)【要約】【課題】インデックスレジスタ命令をもたないプログラマブルコントローラにおいて、インデックスレジスタ命令を含む命令からインデックスレジスタ命令を用いない命令を機械的に作成し提供する。【解決手段】インデックスレジスタ命令を使用して作成されたプログラムを、機械的作業によってインデックスレジスタ命令を持たない命令に変換し、インデックスレジスタ命令を持たないプログラマブルコントローラを動作させる。【選択図】図1
2006323609.tif 000002
【特許請求の範囲】
【請求項１】
インデックスレジスタ命令を保持しないプログラマブルコントローラにおいて、
プログラムソース格納装置よりプログラムコードを逐次読込む手段と、
該プログラムコードからインデックスレジスタ命令を抽出する抽出手段と、
該抽出したインデックスレジスタ命令をインデックスレジスタ命令を用いない命令に変換する変換手段と、
該変換後の命令を格納する変換済プログラム格納装置と、
を備えることを特徴とするプログラマブルコントローラ。
【請求項２】
請求項１に記載のプログラマブルコントローラにおいて、
前記抽出手段は、
対象行にインデックスレジスタ関連命令がないときには、前記変換済プログラム格納装置に対象行を格納する第１の格納手段と、
対象行にインデックスレジスタ関連命令があるときには、インデックスレジスタ命令を含む対象行を抽出する手段と、
を備えることを特徴とするプログラマブルコントローラ。
【請求項３】
請求項１に記載のプログラマブルコントローラにおいて、
前記変換手段は、
インデックス命令が宣言処理のときには、命令要素を命令要素格納テーブルに格納する第１の命令要素格納手段と、
インデックス命令がインデックスレジスタ使用演算処理のときには、該第１の命令要素格納手段で格納した命令要素と演算対象のアドレス情報との位置関係を格納する第２の命令要素格納手段と、
インデックス命令がインデックスレジスタ加減算処理のときには、加減算対象のインデックスレジスタを前記第１の命令要素格納手段から特定する特定処理と、
を備えることを特徴とするプログラマブルコントローラ。
【請求項４】
請求項３に記載のプログラマブルコントローラにおいて、
前記変換手段は、
前記第２の命令要素格納手段で格納した命令要素を対応する配列宣言命令に変換し、変換済プログラムとして前記変換済プログラム格納装置に格納する第２の格納手段と、
前記第２の命令要素格納手段で格納した情報より対応する使用演算命令に変換し、変換済プログラムとして前記変換済プログラム格納装置に格納する第３の格納手段と、
前記特定処理結果を対応する加減算命令に変換し、変換済プログラムとして前記変換済プログラム格納装置に格納する第４の格納手段と、
を備えることを特徴とするプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インデックスレジスタ命令に対応していないプログラマブルコントローラのプログラムに関し、特にインデックスレジスタ命令をＩＥＣ６１１３１−３で動作するプログラムに変換するプログラマブルコントローラに関する。
【背景技術】
【０００２】
プログラマブルコントローラにおけるプログラムに変更があった場合の支援装置として、例えば特許文献１に記載されたものが知られている。特許文献１に記載されたプログラマブルコントローラの支援装置では、前回コンパイル時の変数名とアドレスを変数の追加／削除等を伴うプログラム変更があった場合においても、変数の割付けアドレスがズレないようにし、データの連続性を保持可能としている。
従来のプログラマブルコントローラではプログラム命令の一つとしてインデックスレジスタ命令を持っている。インデックスレジスタとは「領域Ａを表す識別子＋領域Ａ内での通番α」で構成された実効アドレスＤを格納するレジスタであり、このインデックスレジスタ自身の加算、減算を行うことにより、領域Ａ内でのアドレスの操作を行うことができる。インデックスレジスタ命令には以下の３つがある。
1)インデックスレジスタの宣言を行う命令（下記2)、3)の命令に先行して一度だけ使用する命令。）
領域Ａを表す識別子と領域Ａ内での通番αから実効アドレスＤを決定し、インデックスレジスタとして登録する。
2)インデックスレジスタを使用した演算を行う命令（複数回使用可能）
【０００３】
インデックスレジスタによって参照される領域の型の指定、及びインデックスレジスタのアドレス（ここでは、アドレスＤ）とオフセットの値により、相対アドレスとして求められるアドレスＤ’の値を用いた演算を行う。
3)インデックスレジスタの加減算を行う命令（複数回使用可能）
インデックスレジスタ自身のアドレスに加減算を行うことによりインデックスレジスタのアドレス値を加減算する。
【特許文献１】特開２００３−５８３８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
インデックスレジスタ命令を用いたプログラムは多数存在するが、インデックスレジスタ命令をもたないプログラマブルコントローラでは、インデックスレジスタ命令を用いたプログラムを動作させることが出来ない。特にプログラマブルコントローラの国際規格であるＩＥＣ６１１３１−３におけるプログラム言語ではインデックスレジスタを想定していないため、インデックスレジスタ命令を用いたプログラムの動作などに課題がある。このような場合、インデックスレジスタ命令を持つプログラマブルコントローラと交換するのが簡単な方法であるが、交換費用や環境への配慮から安易に交換せずに済ます方法が求められる。また既設設備を残したまま新しいシステムを追加した場合、インデックスレジスタ命令を保持する／しないプログラマブルコントローラが混在することが想定され、ソフトウェア開発の見地からもインデックスレジスタ命令をもたないプログラマブルコントローラへのインデックスレジスタ命令の組込みが求められる。
【０００５】
本発明は、インデックスレジスタ命令を使用して作成されたプログラムを、機械的作業によって、インデックスレジスタ命令を持たないプログラマブにプログラムに変換し、変換後のプログラムが変換前と比較して複雑にならないようにしたプログラマブルコントローラを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記の課題を解決する手段として、本発明は以下のように構成する。
第１に、インデックスレジスタ命令を保持しないプログラマブルコントローラにおいて、プログラムソース格納装置よりプログラムコードを逐次読込む手段と、該プログラムコードからインデックスレジスタ命令を抽出する抽出手段と、該抽出したインデックスレジスタ命令をインデックスレジスタ命令を用いない命令に変換する変換手段と、該変換後の命令を格納する変換済プログラム格納装置と、を備えるように構成する。
第２に、前記抽出手段は、対象行にインデックスレジスタ関連命令がないときには、前記変換済プログラム格納装置に対象行を格納する第１の格納手段と、対象行にインデックスレジスタ関連命令があるときには、インデックスレジスタ命令を含む対象行を抽出する手段と、を備えるように構成する。
【０００７】
第３に、前記変換手段は、インデックス命令が宣言処理のときには、命令要素を命令要素格納テーブルに格納する第１の命令要素格納手段と、インデックス命令がインデックスレジスタ使用演算処理のときには、該第１の命令要素格納手段で格納した命令要素と演算対象のアドレス情報との位置関係を格納する第２の命令要素格納手段と、インデックス命令がインデックスレジスタ加減算処理のときには、加減算対象のインデックスレジスタを前記第１の命令要素格納手段から特定する特定処理と、を備えるように構成する。
第４に、前記変換手段は、前記第２の命令要素格納手段で格納した命令要素を対応する配列宣言命令に変換し、変換済プログラムとして前記変換済プログラム格納装置に格納する第２の格納手段と、前記第２の命令要素格納手段で格納した情報より対応する使用演算命令に変換し、変換済プログラムとして前記変換済プログラム格納装置に格納する第３の格納手段と、前記特定処理結果を対応する加減算命令に変換し、変換済プログラムとして前記変換済プログラム格納装置に格納する第４の格納手段と、を備えるように構成する。
【発明を実施するための最良の形態】
【０００８】
以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。
図１は、本発明によるプログラマブルコントローラの実施例を示す構成図である。図1において、プログラムソース格納装置1に、インデックスレジスタを使用しているプログラムが格納されており、プログラム変換装置２でインデックスレジスタ命令を用いない命令に変換後、変換済プログラム格納装置６にインデックスレジスタ命令を用いないプログラムを引き渡す。プログラム変換装置２では、プログラムを逐次読み込み、命令抽出手段３でインデックスレジスタ命令に関するプログラムを抽出後、命令変換手段５を用いてインデックスレジスタ命令と同様に動作する命令に変換する。命令変換手段５においては、命令要素格納テーブル４をインデックスレジスタ命令要素の入出力バッファとして使用している。
【０００９】
図２は、インデックスレジスタ命令１１と同様に動作する命令の一例として、配列を用いた命令１９を用いた場合に、インデックスレジスタ命令と配列を用いた命令の情報相関を説明する図である。配列を用いた命令は、プログラマブルコントローラの国際規格であるＩＥＣ６１１３１−３においてプログラム言語で定められているので、インデックスレジスタ命令を配列を用いた命令に変換することにより、インデックスレジスタ命令をもたないプログラマブルコントローラでも動作可能になる。インデックスレジスタ命令１１は、インデックスレジスタの宣言１２、インデックスレジスタを使用した演算１５、インデックスレジスタの加減算１８からなり、インデックスレジスタの宣言１２は領域識別子１３、領域内通番１４を有し、インデックスレジスタを使用した演算１５はデータ型１６、オフセット値１７を有する。
【００１０】
一方で、配列を用いた命令１９は配列の宣言２０、配列要素に対する演算２３、配列インデックスに対する加減算２６からなり、配列の宣言２０は領域識別子２１、データ型２２を有し、配列要素に対する演算２３は領域内通番２４、オフセット値２５を有する。
ここで領域識別子１３と領域識別子２１、領域内通番１４と領域内通番２４、データ型１６とデータ型２２、オフセット値１７とオフセット値２５の値は、インデックスレジスタ命令１１と配列を用いた命令１９の間において対応関係にある。
図３は、図１に示す命令要素格納テーブル４の一例である。１つのレコード（１行）に対して、インデックスレジスタ名、領域識別子、領域内通番、データ型、オフセット値、宣言フラグを備える。
インデックスレジスタ名：インデックスレジスタ自体の名称。多くの場合は、Ｉ、Ｊ、Ｋ等が割り当てられる。
【００１１】
領域識別子：メモリ領域を区分けした、ある一定の範囲の領域を示す。
領域内通番：領域識別子内の通番を表す。領域識別子の情報と併せて使用すると、メモリの実アドレスを指す。
データ型：インデックスレジスタで参照されるアドレスのデータ型を指す。主に、ワード型とビット型がある。
オフセット値：インデックスレジスタで参照されるアドレスからの相対アドレス。多くの場合オフセット値は、０、１、２のように数値で表す。
宣言フラグ：配列宣言が行われたかの識別子。これは当テーブル固有の情報で、配列宣言を重複させないために保持する情報。ＯＮ、ＯＦＦなどの２値で表す。
図４、図５、図６、図７は、図１のプログラム変換装置２における処理を示したものであり、“インデックスレジスタ命令”を“インデックスレジスタ命令を用いない命令”に変換する処理フローの説明図である。図１、図４、図５、図６、図７及び図３を用い、処理フローの説明を以下に示す。
【００１２】
図４は、図１のプログラム変換装置２内の命令抽出手段３に相当する。図４において、ステップＳ３０１の処理で、図１のプログラムソース格納装置１よりプログラムを逐次一行ずつ読み込む。次にステップＳ３０２では、ステップＳ３０１で読み込んだ一行が、インデックスレジスタ関連の場合はステップＳ３０３に移行し、インデックスレジスタ関連しない場合はステップＳ３０４にて、そのまま図１の変更済プログラム格納装置６に追加する。プログラムの最初の行から最終行まで、処理を繰り返す。
次に図５は、図４のステップＳ３０３である命令変換処理の処理フローであり、この処理は、図１のプログラム変換装置２内の命令変換手段５に相当する。ステップＳ４０１では、命令の種類を判別し、宣言の場合はステップＳ４０２でインデックスレジスタ使用演算処理、演算の場合はステップＳ４０３でインデックスレジスタ使用演算処理、レジスタの加減算の場合はステップＳ４０４でインデックスレジスタ加減算処理、の各処理を行う。
【００１３】
演算の場合は、ステップＳ４０３のインデックスレジスタ使用演算処理に続けて、ステップＳ４０５の配列宣言追加処理、及びステップＳ４０６での列要素に対する演算を変換済プログラム格納装置へ追加の処理をする。ステップＳ４０６では、領域内通番２４とオフセット値２５で表される配列要素に対する演算２３として変換後のプログラムを、図１の変換済プログラム格納装置６に追加する。
レジスタの加減算の場合は、ステップＳ４０４に続けて、ステップＳ４０７の配列のインデックスに対する加減算処理として、領域内通番２４と加減算値で表される配列のインデックスに対する加減算２６として変換後のプログラムを、図１の変換済プログラム格納装置６に追加する。
次に図６は、図５のステップＳ４０１による分岐後の各命令に対する処理で、ステップＳ４０２〜Ｓ４０４のフローを示す。
【００１４】
図６（ａ）は、図５のステップＳ４０２のフローであり、ステップＳ５１１では、図１の命令要素格納テーブル４にインデックスレジスタ名のデータレコードを追加する。これは図３の１行に相当する。ステップＳ５１２では領域識別子１３を追加したレコードにコピーする。同じくステップＳ５１３では領域内通番１４を追加したレコードにコピーする。またステップＳ５１４では宣言フラグをＯＮにする。
図６（ｂ）は、図５のステップＳ４０３のフローであり、ステップＳ５２１では、図１の命令要素格納テーブル４から対象のインデックスレジスタ名を検索する。ステップＳ５２２では、データ型１６をヒットしたレコードにコピーする。同じくステップＳ５２３では、オフセット値１７をヒットしたレコードにコピーする。
図６（ｃ）は、図５のステップＳ４０４のフローであり、ステップＳ５３１では、図１の命令要素格納テーブル４から対象のインデックスレジスタ名のあるレコードを検索する。
【００１５】
図７は、図５のステップＳ４０５のフローであり、命令要素格納テーブル４の宣言フラグがセットされているかを、ステップＳ６０１にて判定し、セットされている場合はステップＳ６０２にて、領域識別子２１で指定された領域の型がデータ型２２となるように配列宣言する。その後、ステップＳ６０３にてレコードの宣言フラグをＯＦＦにする。前記判定にて、セットされていない場合は何もせずに処理を終了する。
上記処理に従い、実際のプログラムがどの様に変換されるかの一例を以下に説明する。図８（ａ）〜（ｄ）は変換前のプログラムの説明図、図８（ｅ）〜（ｈ）は変換後のプログラムの説明図である。
図８（ａ）〜（ｄ）のプログラムが、図１のプログラムソース格納装置１に格納された後、プログラム変換装置２に通され、ステップＳ３０１により一行ずつ処理される。
【００１６】
始めに図８（ａ）は、インデックスレジスタ宣言の命令文であり「ＬＥＡ  Ａα：Ｉ」とは、領域識別子Ａの領域内通番αをインデックスレジスタＩに割り当てる命令である。ここで“ＬＥＡ”は宣言命令の識別子、“：”は命令の識別子である。インデックスレジスタ宣言の命令文なので、ステップＳ４０２の処理が実行される。図６（ａ）の一連の処理であるステップＳ５１１〜Ｓ５１４の処理の結果、図１の命令要素格納テーブル４に、図９（ａ）で示すレコードが生成される。
次に図８（ｂ）は、インデックスレジスタ使用演算処理であり「ｔｙｐｅ  Ｉ  ｏｆｆｓｅｔ１＋Ａβ→Ａβ」とは、インデックスレジスタＩのアドレスを基点としてデータ型がｔｙｐｅで大きさでｏｆｆｓｅｔ1の値の位置にあるアドレスの値と、領域識別子Ａの領域内通番βの格納している値を加算して、領域識別子Ａの領域内通番βに戻す命令である。ここで“→”、“＋”は命令の識別子である。インデックスレジスタ使用演算処理なので、ステップＳＳ４０３〜Ｓ４０６の処理が実行される。始めにステップＳ４０３が処理され、図６（ｂ）の一連の処理であるステップＳ５２１〜Ｓ５２３の処理の結果、図１の命令要素格納テーブル４である図９（ａ）は図９（ｂ）で示すレコードに更新される。次にステップＳ４０５が処理され、ステップＳ６０１〜Ｓ６０３の処理の結果、図１の命令要素格納テーブル４である図９（ｂ）は図９（ｃ）で示すレコードに更新される。またステップＳ６０２では、図９（ｅ）を、図１の変換済プログラム格納装置６に格納する。図９（ｅ）の「Ｅ  ＡＴ  ％Ａ０；」とは、領域識別子Ａの領域内通番０番目を配列Ｅに割り当てる命令である。「Ｅ  ＡＲＲＡＹ［０・・・ｓｉｚｅ］  ｏｆ  ｔｙｐｅ」とは、データ型がｔｙｐｅで、配列Ｅをｓｉｚｅの大きさで確保する命令である。なおｓｉｚｅは領域内通番の最大の大きさ同じとする。ここで“ＡＲＲＡＹ”、“ＡＴ”、“％”、“；”、“ [”、“] ”及び“ＶＡＲ”と“ＶＡＲ＿ＥＮＤ”は命令の識別子になる。最後にステップＳ４０６が処理され、図９（ｆ）を、図１の変換済プログラム格納装置６に格納する。「Ａβ：＝Ｅ［α＋ｏｆｆｓｅｔ１］＋Ａβ」とは、配列Ｅにおいて領域内通番αから相対でｏｆｆｓｅｔ１にある値と、領域識別子Ａの領域内通番βの指すアドレスの値を加算して、加算後の値を領域識別子Ａの領域内通番βの指すアドレスの値に戻す命令である。ここで“：＝”、“ ［”、“ ］”、“＋”は命令の識別子になる。
【００１７】
次に図８（ｃ）も、インデックスレジスタ使用演算処理である。図８（ｂ）との違いは、ｏｆｆｓｅｔ２と値が異なる点と、ステップＳ６０１でＯＦＦに分岐する点である。ステップＳ４０３処理の結果、図１の命令要素格納テーブル４である図９（ｃ）は図９（ｄ）で示すレコードに更新される。またステップＳ４０６が処理され、図９（ｇ）を、図１の変換済プログラム格納装置６に格納する。
最後に図８（ｄ）は、インデックスレジスタの加減算命令文であり「Ｉ  ＩＡＤＤ  ｈ」とは、インデックスレジスタＩのアドレス値にｈを加算する命令である。ここで“ＩＡＤＤ”はアドレス加算命令の識別子になる。インデックスレジスタの加減算命令なので、フローによりステップＳ４０４〜Ｓ４０７の処理が実行される。ステップＳ４０７では、図９（ｇ）を、図1の変換済プログラム格納装置６に格納する。「α：＝α＋ｈ」とは、領域内通番αにｈの値を加算して、加算後の値を領域内通番αに戻す命令である。
【００１８】
以上、図８に示したプログラムは一例であり、加減算の値は表記上、文字変数としているが、実際には数値を用いることができる。また、命令の識別子の記載方法を限定するものでは無く、各記述方法に柔軟に対応するものとする。
【図面の簡単な説明】
【００１９】
【図１】本発明によるプログラマブルコントローラの実施例を示す説明図
【図２】インデックスレジスタ命令と配列を用いた命令の情報相関の説明図
【図３】命令要素格納テーブルの一例を示す説明図
【図４】命令抽出処理フローの説明図
【図５】命令変換処理フローの説明図
【図６】命令変換処理フローの詳細説明図
【図７】配列宣言追加処理フローの説明図
【図８】本発明による変換前及び変換後のプログラムの一例を示す説明図
【図９】各変換過程における命令要素格納テーブル格納状態の説明図
【符号の説明】
【００２０】
１  プログラムソース格納装置
２  プログラム変換装置
３  命令抽出手段
４  命令要素格納テーブル
５  命令変換手段
６  変換済プログラム格納装置
１１  インデックスレジスタ命令
１２  インデックスレジスタの宣言
１３、２１  領域識別子
１４、２４  領域内通番
１５  インデックスレジスタを使用した演算
１６、２２  データ型
１７、２５  オフセット値
１８  インデックスレジスタの加減算
１９  配列を用いた命令
２０  配列の宣言
２３  配列要素に対する演算
２６  配列インデックスに対する加減算
【図１】
2006323609.tif 000003
【図２】
2006323609.tif 000004
【図３】
2006323609.tif 000005
【図４】
2006323609.tif 000006
【図５】
2006323609.tif 000007
【図６】
2006323609.tif 000008
【図７】
2006323609.tif 000009
【図８】
2006323609.tif 000010
【図９】
2006323609.tif 000011