(57)【要約】【課題】プログラミング装置１の編集画面２に示されるようなプログラマブルコントローラ（ＰＬＣ）１０のプロセッサの機能の仕様に予め定められたマシン語命令（真性マシン語命令）に置き換え得る条件式２２や実行文２４、２５等と真性マシン語命令に置き換えできない制御用語２１、２３、２６等からなるテキスト記述型のＳＴ言語のシーケンスプログラムをマシン語形態に変換してＰＬＣに格納したのち、再びＰＬＣから元のテキストプログラムを復元できるようにし、従来のように元のテキストプログラムを別途管理する必要をなくし、ＰＬＣのプログラム編集を容易にする。【解決手段】制御用語２１、２３、２６等をＰＬＣによるシーケンス制御に影響しない疑似命令として、これに真性マシン語命令には含まれぬ疑似マシン語命令を当てはめ、条件式２２や実行文２４、２５等にはそれぞれを置き換える真性マシン語命令を当てはめてできるマシン語形態のプログラムをＰＬＣに格納する。【選択図】        図１
2007128378.tif 000002
【特許請求の範囲】
【請求項１】
文字または（および）記号をそれぞれ複数個連ねた列（以下連続文字列という）からなり、それぞれ、このシーケンスプログラムを実行するプロセッサの機能の仕様に予め定められたマシン語命令（以下真性マシン語命令という）の１または複数個に置き換え可能な各種の条件式や実行文と、同じく前記連続文字列からなり、前記真性マシン語命令への置き換えができない各種の制御用語とを組合わせ、このプログラミング言語固有の文法に従い記述されたテキスト記述型プログラミング言語のシーケンスプログラムとしてのソースプログラムにおける、前記の各連続文字列を順次読み込んで解析したうえ、この各連続文字列をそれぞれ該当するマシン語命令に変換し、前記ソースプログラムに対応するマシン語形態のオブジエクトプログラムを生成してプログラマブルコントローラに格納する言語順変換手段と、
プログラマブルコントローラから読み出したテキスト記述型プログラミング言語のソースプログラムを元とするマシン語形態の前記オブジエクトプログラムを構成する各マシン語命令を順次解析して、前記オブジエクトプログラムを元のテキスト記述型プログラミング言語のソースプログラムに復元する言語逆変換手段とを備えたことを特徴とするプログラマブルコントローラのプログラミング装置。
【請求項２】
前記言語順変換手段が、前記制御用語に該当しない各連続文字列を、このそれぞれに対する前記の置き換えが可能な１または複数個の真性マシン語命令に変換し、また前記制御用語に該当する各連続文字列を、このそれぞれに１対１に対応し前記真性マシン語命令には含まれず、プログラマブルコントローラのシーケンスプログラムの実行に影響しないマシン語命令（以下疑似マシン語命令という）に変換する手段を備えたものであることを特徴とする請求項１に記載のプログラマブルコントローラのプログラミング装置。
【請求項３】
前記言語逆変換手段が少なくとも、解析対象の当該のマシン語命令が前記疑似マシン語命令であるか否かを判定する疑似マシン語命令判定手段と、
この疑似マシン語命令判定手段によって疑似マシン語命令でないと判定された当該の前記真性マシン語命令に対しては、さらに組となる真性マシン語命令を持つものであるか否かを判定し、組の真性マシン語命令を持たないと判定した真性マシン語命令を対応する１行分のテキスト記述型プログラミング言語の条件式または実行文に復元し、組の真性マシン語命令を持つと判定した場合は、当該の真性マシン語命令から組の最終位の真性マシン語命令までの真性マシン語命令を一括して、対応するテキスト記述型プログラミング言語の１行分の条件式または実行文に復元する第１の判定復元手段と、
前記疑似マシン語命令判定手段によって疑似マシン語命令と判定された当該の疑似マシン語命令に対しては、さらに対となる疑似マシン語命令を持つものであるか否かを判定し、対の疑似マシン語命令を持たないと判定した疑似マシン語命令を対応する１行分のテキスト記述型プログラミング言語の前記制御用語に復元し、対の疑似マシン語命令を持つと判定した場合は、当該の疑似マシン語命令から対の最終位の疑似マシン語命令までの各疑似および真性のマシン語命令のうち、疑似マシン語命令をそれぞれ対応するテキスト記述型プログラミング言語の前記制御用語に復元すると共に、真性マシン語命令をその個別または組となる複数個を一括した真性マシン語命令ごとに前記第１の判定復元手段を介しそれぞれ対応するテキスト記述型プログラミング言語の条件式または実行文に復元して、当該の疑似マシン語命令から対の最終位の疑似マシン語命令までの全マシン語命令を、該条件式または実行文の復元行を同一行に含むようなテキスト記述型プログラミング言語の制御命令文内の１行分の復元文とする第２の判定復元手段と、
前記第１の判定復元手段によって復元されたテキスト記述型プログラミング言語の条件式または実行文が前記第２の判定復元手段によって復元されたテキスト記述型プログラミング言語の制御命令文内の１行分の復元文、または同じく復元された単独で１行をなす前記制御用語に従属するものであるか否かを判定し、従属する条件式または実行文にはインデントを付加するインデント付加手段とを備えたものであることを特徴とする請求項２に記載のプログラマブルコントローラのプログラミング装置。
【請求項４】
前記テキスト記述型プログラミング言語をストラクチャード・テキスト言語としたことを特徴とする請求項１ないし３のいずれかに記載のプログラマブルコントローラのプログラミング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えばＩＥＣ規格１１３１−３に定められているテキスト記述形式のプログラミング言語であるストラクチャード・テキスト言語（以下・ＳＴ言語とも略記する）で記述されたのち、マシンコードに変換されてプログラマブルコントローラ（ＰＬＣとも略記する）に格納されたシーケンスプログラムを、再び元のＳＴ言語のプログラムに復元する機能を持つプログラマブルコントローラのプログラミング装置に関する。
【背景技術】
【０００２】
プログラマブルコントローラ（ＰＬＣ）はシーケンスプログラムを演算実行してＰＬＣに接続される制御対象機器の自動シーケンス制御を行う装置として知られている。そしてこのシーケンスプログラムは通常、ユーザによりプログラミング装置上で編集されたのち、マシンコードに変換されてＰＬＣに格納される。なおここで編集とはプログラムの作成、変更、デバッグ等のプログラムの作成に関わる全ての作業を意味するものとする。
このシーケンスプログラムを作るためのプログラミング言語としては、従来、ラダー図を用いるラダー言語が使用されて来たが、ラダー言語はリレー回路等の専門知識を必要とするため、最近は、こうした専門知識を持たない通常のソフトウェア技術者でも容易にシーケンスプログラムを作ることができる、上述のようなテキスト記述形式（換言すれば図面を用いない形式）のＳＴ言語が用いられるようになった。
【０００３】
ところで、このようなＳＴ言語で記述されたテキスト記述形式のプログラム（テキストプログラムともいう）としてのシーケンスプログラムをＰＬＣのマシンコードに変換すると、現状ではプログラムの流れを切り換えるために、必要に応じてテキストプログラム内に使用されるプログラム制御用の英単語（後述の制御用語）等は無視し、テキストプログラム内の実行文や条件式等のシーケンス制御に必須となる部分のみをマシン語命令に変換するため、元のＳＴ言語で記述されたプログラムに復元することができない。
このため、ＰＬＣのマシンコードを後刻、再び編集する場合に備えて、ＰＬＣの記憶装置にマシンコードに変換したプログラムとは別にＳＴ言語で記述された元のプログラムを格納するか、ＳＴ言語で記述された元のプログラムをＰＬＣとは別のパソコンなどの記憶装置に格納し、ＰＬＣ内のプログラムとリンクした形で管理している。
【０００４】
なお、ラダー言語で作成されるＰＬＣのシーケンスプログラムは、一般に流れ図を参照し、リレー動作に対応するビット処理を行う基本命令と、より複雑な演算や制御を行わせるための機能命令などからなるラダー言語を用いて、ラダー図として図面化（プログラミング）され、表示されるが、特許文献１には、機能命令に対応するマクロプログラムを解析して処理する必要がなく、しかも表示は従来と同様に行えるＰＬＣを得るために、機能命令と機械語を対応させるテーブルを有し、機能命令を当該命令ステップに特定される機械語に変換してシーケンスプログラムとして記憶し、その機械語に付随して、対応する復元情報を記憶しておき、シーケンス処理の実行はマクロプログラムを用いない特定の機械語で、シーケンスプログラムの表示は復元情報から復元したラダー言語により行うように構成したＰＬＣが開示されている。
【特許文献１】特開平５−２７４０１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、ＰＬＣ内にマシンコードに変換したプログラムとは別にＳＴ言語で記述された元のプログラムを格納する前述の方法では、ＰＬＣ内にマシンコードのプログラムとＳＴ言語で記述された元のプログラムとの両方を格納するため、2 倍の容量の記憶装置が必要となりＰＬＣがコストアップとなってしまう。
また前述したＰＬＣとは別の記憶装置にＳＴ言語で記述された元のプログラムを格納する方法では、別の記憶装置を参照することが煩わしく、直接、ＰＬＣ内のプログラムを読み出してこれを編集したくても、ＳＴ言語で記述されたプログラムを元にマシンコードに変換したＰＬＣ内のプログラムは前述の理由で元のＳＴ言語の形には復元されないため、プログラムの編集が困難である。
このため、遠隔地のＰＬＣのプログラムを変更する際には、直接、ＰＬＣ内のプログラムを変更するのではなく、別の記憶装置に保存したＳＴ言語で記述された元のプログラムを持参し、そのプログラムを編集しマシンコードに変換してＰＬＣに転送（書き込み）を行う必要があった。
【０００６】
本発明はこのような問題を解消し、ＳＴ言語で記述されたのちマシンコードに変換されてＰＬＣに格納されたシーケンスプログラムを、再び容易に元のＳＴ言語のプログラムに復元する機能を持つプログラマブルコントローラのプログラミング装置を提供することを課題とする。
【課題を解決するための手段】
【０００７】
前記の課題を解決するために請求項１のプログラマブルコントローラのプログラミング装置は、
文字または（および）記号をそれぞれ複数個連ねた列（以下連続文字列という）からなり、それぞれ、このシーケンスプログラムを実行するプロセッサの機能の仕様に予め定められたマシン語命令（以下真性マシン語命令という）の１または複数個に置き換え可能な各種の条件式（２２など）や実行文（２４、２５など）と、同じく前記連続文字列からなり、前記真性マシン語命令への置き換えができない各種の制御用語（ＩＦの２１、ＴＨＥＮの２３、ＥＮＤ ＩＦの２６など）とを組合わせ、このプログラミング言語固有の文法に従い記述されたテキスト記述型プログラミング言語のシーケンスプログラムとしてのソースプログラムにおける、前記の各連続文字列を順次読み込んで解析したうえ、この各連続文字列をそれぞれ該当するマシン語命令（マシンコード１１１〜１１７など）に変換し、前記ソースプログラムに対応するマシン語形態のオブジエクトプログラムを生成してプログラマブルコントローラに格納する言語順変換手段（保存処理４およびダウンロード処理８を実行する図外のプロセッサなど）と、
プログラマブルコントローラから読み出したテキスト記述型プログラミング言語のソースプログラムを元とするマシン語形態の前記オブジエクトプログラムを構成する各マシン語命令を順次解析して、前記オブジエクトプログラムを元のテキスト記述型プログラミング言語のソースプログラムに復元する言語逆変換手段（アップロード処理９および表示処理５を実行する図外のプロセッサなど）とを備えたものとする。
【０００８】
また請求項２のプログラマブルコントローラのプログラミング装置は、請求項１に記載のプログラマブルコントローラのプログラミング装置において、
前記言語順変換手段が、前記制御用語に該当しない各連続文字列を、このそれぞれに対する前記の置き換えが可能な１または複数個の真性マシン語命令（マシンコード１１２、１１３、１１５、１１６など）に変換し、また前記制御用語に該当する各連続文字列を、このそれぞれに１対１に対応し前記真性マシン語命令には含まれず、プログラマブルコントローラのシーケンスプログラムの実行に影響しないマシン語命令（マシンコード１１１、１１４、１１７など、以下疑似マシン語命令という）に変換する手段を備えたものであるようにする。
また請求項３のプログラマブルコントローラのプログラミング装置は、請求項２に記載のプログラマブルコントローラのプログラミング装置において、
前記言語逆変換手段が少なくとも、解析対象の当該のマシン語命令が前記疑似マシン語命令であるか否かを判定する疑似マシン語命令判定手段と、
この疑似マシン語命令判定手段によって疑似マシン語命令でないと判定された当該の前記真性マシン語命令に対しては、さらに組となる真性マシン語命令を持つものであるか否かを判定し、組の真性マシン語命令を持たないと判定した真性マシン語命令を対応する１行分のテキスト記述型プログラミング言語の条件式または実行文に復元し、組の真性マシン語命令を持つと判定した場合は、当該の真性マシン語命令から組の最終位の真性マシン語命令までの真性マシン語命令（図１の例では、条件（比較）命令のマシンコード１１２および条件ジャンプ命令のマシンコード１１３、実行文＃１の各命令のマシンコード１１５、あるいは実行文＃２の各命令のマシンコード１１６）を一括して、対応するテキスト記述型プログラミング言語の１行分の条件式または実行文（この例では、条件式２２、実行文＃１の２４、あるいは実行文＃２の２５）に復元する第１の判定復元手段と、
前記疑似マシン語命令判定手段によって疑似マシン語命令と判定された当該の疑似マシン語命令に対しては、さらに対となる疑似マシン語命令（図１の例では、ＴＨＥＮを示す疑似命令のマシンコード１１４）を持つものであるか否かを判定し、対の疑似マシン語命令を持たないと判定した疑似マシン語命令（図１の例では、ＥＮＤ ＩＦを示す疑似命令のマシンコード１１７）を対応する１行分のテキスト記述型プログラミング言語の前記制御用語（この例では、ＥＮＤ ＩＦの２６）に復元し、対の疑似マシン語命令を持つと判定した場合は、当該の疑似マシン語命令（図１の例では、ＩＦを示す疑似命令のマシンコード１１１）から対の最終位の疑似マシン語命令（この例では、ＴＨＥＮを示す疑似命令のマシンコード１１４）までの各疑似および真性のマシン語命令のうち、疑似マシン語命令（この例では、マシンコード１１１、１１４）をそれぞれ対応するテキスト記述型プログラミング言語の前記制御用語に復元すると共に、真性マシン語命令をその個別または組となる複数個を一括した真性マシン語命令（この例では、組となるマシンコード１１２および１１３）ごとに前記第１の判定復元手段を介しそれぞれ対応するテキスト記述型プログラミング言語の条件式または実行文（この例では、条件式２２）に復元して、当該の疑似マシン語命令から対の最終位の疑似マシン語命令までの全マシン語命令を、該条件式または実行文の復元行を同一行に含むようなテキスト記述型プログラミング言語の制御命令文内の１行分の復元文（この例では、制御用語ＩＦの２１、条件式２２、制御用語ＴＨＥＮの２３からなる復元文）とする第２の判定復元手段と、
前記第１の判定復元手段によって復元されたテキスト記述型プログラミング言語の条件式または実行文が前記第２の判定復元手段によって復元されたテキスト記述型プログラミング言語の制御命令文内の１行分の復元文、、または同じく復元された単独で１行をなす前記制御用語に従属するものであるか否かを判定し、従属する条件式または実行文（図１の例では、実行文＃１の２４、および実行文＃２の２５）にはインデントを付加するインデント付加手段とを備えたものであるようにする。
【０００９】
また請求項４のプログラマブルコントローラのプログラミング装置は、請求項１ないし３のいずれかに記載のプログラマブルコントローラのプログラミング装置において、前記テキスト記述型プログラミング言語をストラクチャード・テキスト言語とする。
本発明の作用はプログラマブルコントローラ（ＰＬＣ）のプログラミング装置に以下の機能を設けることにより、テキスト記述形式のプログラミング言語であるＳＴ言語で記述されマシンコードに変換されてＰＬＣに格納されたシーケンスプログラムを、ＰＬＣから元のＳＴ言語のテキストプログラムに復元できるようにするものである。
即ち、ＳＴ言語で記述されたテキストプログラムとしてのシーケンスプログラムを連続文字列単位に順次読み出し、制御用語か否かの判定を行い、制御用語であれば制御用語を示す中間コードに変換し、制御用語ではない条件式や実行文であれば、このシーケンスプログラムを実行するプロセッサの機能の仕様に予め定められたマシン語命令（真性マシン語命令）からなりこの条件式や実行文を置き換え得る命令に対応する中間コードにそれぞれ変換する。
【００１０】
そしてＰＬＣにシーケンスプログラムを格納する際、制御用語をＰＬＣによるシーケンスプログラムの実行に影響しない疑似命令として制御用語を示す中間コードを真性マシン語命令には含まれぬ疑似マシン語命令に、その他の中間コードは対応する真性マシン語命令にそれぞれ変換する。
他方、ＰＬＣからマシンコードのシーケンスプログラムを読み出す際は、一旦、疑似または真性のマシン語命令を、それぞれ対応する中間コードへ変換する処理を経たうえ、疑似マシン語命令は該当する制御用語に、真性マシン語命令は該当する条件式や実行文にそれぞれ変換することで、ＳＴ言語で記述されたテキストプログラムに復元する。
【発明の効果】
【００１１】
テキスト記述形式のプログラミング言語であるＳＴ言語で記述されたテキストプログラムとしてのシーケンスプログラムは各種の実行文や制御文からなり、制御文は制御用語、条件式、実行文等で構成される。これらの各連続文字列のうち、条件式や実行文はこのシーケンスプログラムを実行するプロセッサの機能の仕様に予め定められたマシン語命令（真性マシン語命令）に置き換えることができるが、制御用語は真性マシン語命令には置き換えることができない。
そこで本発明によれば、上記制御用語を、ＰＬＣによるシーケンスプログラムの実行には影響しない疑似命令として扱い、これに真性マシン語命令には含まれぬ疑似マシン語命令を当てはめ、制御用語以外の条件式や実行文にはこのそれぞれを置き換える真性マシン語命令を当てはめてできるマシン語形態のプログラムをＰＬＣに格納するようにしたので、
ＰＬＣ内に格納されているマシンコードのシーケンスプログラム（オブジェクトプログラム）から作成時と同じＳＴ言語で記述されたテキストプログラムのシーケンスプログラム（ソースプログラム）を復元することができ、従来のようにＰＬＣ内に格納したオブジェクトプログラムとは別に、このプログラムの元になるＳＴ言語のソースプログラムを別途管理する必要がなく、使用者の負担が軽減される。
【００１２】
また、ＰＬＣ内のマシン語形態のプログラムから元のＳＴ言語のソースプログラムが復元できるため、ＰＬＣに特別な記憶装置を持つ必要がなくなり、ＰＬＣのコストダウンを図ることができる。
【発明を実施するための最良の形態】
【００１３】
図１は本発明の一実施例としてのシステム要部の機能の基本構成を示す。図１において、１はプログラミング装置、１０はプログラミング装置１に接続された状態のプログラマブルコントローラ（ＰＬＣ）である。
次にプログラミング装置１において２はプログラムの編集画面で、２１〜２６の個別の連続文字列は前述したテキスト記述形式のＳＴ言語のシーケンスプログラム（テキストプログラムとも略記する）の一部の後述する制御文を持つプログラムブロックの一例についての、ＳＴ言語の文法に基づく記述状態を示している。
また、６はプログラミング装置１のプログラムメモリで、このプログラムメモリ６内の６１〜６７は編集画面２上の各連続文字列２１〜２６をこのプログラミング装置に固有の中間コードに変換したものである。
【００１４】
次に、ＰＬＣ１０において１１はそのプログラムメモリであり、このプログラムメモリ１１内の１１１〜１１７はそれぞれプログラミング装置１のプログラムメモリ６内の各中間コード６１〜６７をそれぞれ変換して作られた疑似命令または真の命令のマシンコードである。
後でも述べるが、ここで真の命令とはＰＬＣ１０のシーケンスプログラムの実行に関わりを持つ命令であり、疑似命令とはこのシーケンスプログラムの実行に関わりを持たない命令である。そして、真の命令のマシンコードはＰＬＣ１０に格納されたシーケンスプログラムを実行するプロセッサの機能の仕様に予め定められている各種のマシン語命令（便宜上、真性マシン語命令とも呼ぶ）の１つまたは組をなす複数個からなるマシンコードで、本例では１１２の条件（比較）命令、１１３の条件ジャンプ命令、１１５の実行文＃１の各命令、１１６の実行文＃２の各命令のそれぞれのマシンコードがこれに相当する。
【００１５】
また、疑似命令のマシンコードは真性マシン語命令のマシンコードには含まれず、これに似せて作られた各個別のマシンコードで、本例では１１１の「ＩＦ」、１１４の「ＴＨＥＮ」、１１７の「ＥＮＤ ＩＦ」のそれぞれを示す疑似命令のマシンコードがこれに相当する。
次に、４、５、８、９はプログラミング装置１が行う処理で、４は編集画面２上に記述されたテキストプログラムを中間コードのプログラムに変換してプログラムメモリ６に保存する処理、５はその逆にプログラムメモリ６内の中間コードのプログラムをテキストプログラムに変換して編集画面２上に元のフォーマット通りに表示する処理、８はプログラミング装置１のプログラムメモリ６内の中間コードのプログラムをマシンコードのプログラムに変換してＰＬＣ１０のプログラムメモリ１１に書き込むダウンロード処理、９はその逆にＰＬＣ１０のプログラムメモリ１１内のマシンコードのプログラムを中間コードのプログラムに変換しプログラミング装置１のプログラムメモリ６に書き込むアップロード処理である。
【００１６】
ここで、プログラミング装置１の編集画面２上に記述されているテキストプログラムを説明する。このテキストプログラムはＳＴ言語での制御文における条件分岐文に属するＩＦ文と呼ばれる形式のプログラム命令の１例に相当するもので、本実施例では各個別の連続文字列２１〜２６は英単語「ＩＦ」２１、条件式（換言すれば比較式）２２、英単語「ＴＨＥＮ」２３、実行文＃１の２４、実行文＃２の２５、・・・、組合わせ英単語「ＥＮＤ ＩＦ」２６からなる。
なお、条件式の２２や実行文＃１の２４および実行文＃２の２５をそれぞれ前後で挟む、「＜」と「＞」の記号は実際のテキストプログラムの記述に用いられるものではなく、この記号を含む区間に式や実行文が存在することを示すものである。このことは後述する図６に記述されているテキストプログラムについても同様である。
【００１７】
ここで、「ＩＦ」２１、条件式２２、「ＴＨＥＮ」２３の各連続文字列は同一行（便宜上、第１行とする）上に表示され、実行文＃１の２４と実行文＃２の２５とは、第１行の行頭からインデント（行の先頭の字下げ）を付加した形でそれぞれ第２行と第３行上に表示され、連続文字列「ＥＮＤ ＩＦ」２６はこのＩＦ文の末尾の行上に字下げなしに表示されている。
このＩＦ文のプログラム命令の内容は『若し条件式２２の条件が満たされれば（換言すれば、条件式２２の比較結果が真であれば）、実行文＃１の２４、実行文＃２の２５、・・・の処理を実行せよ。』というものであり、このプログラム命令をさらに後述する中間コード、あるいはマシンコードのレベルに分解して表現すれば、『条件式２２の比較を実行せよ、この比較結果が真であれば次アドレスの英単語「ＴＨＥＮ」２３へ進み（従って本例では「ＴＨＥＮ」２３のアドレス以降の実行文＃１の２４、実行文＃２の２５、・・・の処理を実行し）、前記条件式２２の比較結果が偽であれば、英単語「ＴＨＥＮ」２３以降に最初に現れる英単語または組合わせ英単語のアドレスへ飛べ（従って本例では組合わせ英単語「ＥＮＤ ＩＦ」２６のアドレスへ飛んでこのＩＦ文を終了せよ）。』というものである。
【００１８】
なお制御文とは、後で詳述するが、アドレス順に並ぶプログラム上の必要な位置（アドレス）に設けられ、その時点の条件等に応じて以後のプログラムの流れ（実行順序）を制御する命令文をいう。
ところで編集画面２上のテキストプログラムのうち、条件式２２、実行文＃１の２４、実行文＃２の２５等は、このそれぞれの命令機能を、このシーケンスプログラムを実行するＰＬＣ１０のプロセッサの機能の仕様に予め定められている各種のマシン語命令としての前記の真性マシン語命令のうちのいずれか所定の１つまたは複数個の組み合わせに置き換えることができ、ＰＬＣ１０にはこの真性マシン語命令への置き換えによってできるマシンコードに変換されて格納される。
従って編集画面２上のテキストプログラムのようなシーケンスプログラムについてのＰＬＣ１０に格納されたマシンコードから元の表示通りのテキストプログラムを復元しようとするとき、条件式２２、実行文＃１の２４、実行文＃２の２５は、そのテキスト表示と上記の真性マシン語命令への置き換えに基づくマシンコードとの対応関係を設定できるので問題はない。
【００１９】
しかし、英単語の連続文字列（便宜上、制御用語と呼ぶ）の「ＩＦ」２１、「ＴＨＥＮ」２３、「ＥＮＤ ＩＦ」２６には、置き換え可能な真性マシン語命令は存在しない。そこで本発明では、この各制御用語２１、２３、２６をＰＬＣ１０のシーケンスプログラムの実行に関わりを持たない疑似命令とし、このそれぞれに前述した疑似マシン語命令のマシンコードを対応させてＰＬＣ１０に格納し、テキストプログラムの復元時に利用するようにする。
ところで、プログラミング装置１のプログラムメモリ６内の１行ずつ順に並んだ各中間コード６１〜６７については、６１、６４、６７はそれぞれ編集画面２上の制御用語としての「ＩＦ」２１、「ＴＨＥＮ」２３、「ＥＮＤ ＩＦ」２６に対応する中間コード、６２は編集画面２上の条件式２２から生成される条件（比較）命令の中間コード、６３は編集画面２上には存在しないが、この制御文がＩＦ文であることによって、条件式２２を置き換えた中間コード６２の次に置かれ、条件式２２の比較結果の真偽に応じて以降の分岐先を指定する役割を持つ条件ジャンプ命令の中間コード、６５と６６は編集画面２上の実行文＃１の２４と実行文＃２の２５を、それぞれ置き換える１つまたは組となる複数個からなる真性マシン語命令に対応する中間コードである。
【００２０】
また、ＰＬＣ１０のプログラムメモリ１１内の１行ずつ順に並んだ各マシンコード１１１〜１１７は、それぞれプログラミング装置１のプログラムメモリ６内の各中間コード６１〜６７に対応するものであり、前述のように、このうち１１１、１１４、１１７はそれぞれ制御用語「ＩＦ」、「ＴＨＥＮ」、「ＥＮＤ ＩＦ」を示す疑似マシン語命令のマシンコード、その他のマシンコード１１２、１１３、１１５、１１６は真性マシン語命令のマシンコードである。
ＰＬＣ１０へシーケンスプログラムを保存するには、先ず、プログラミング装置１の編集画面２で作成されたＳＴ言語で記述されたテキストプログラムを保存処理４において読み込み、中間コードに変換してプログラミング装置１のプログラムメモリ６に格納する。
次にダウンロード処理８において、プログラミング装置のプログラムメモリ６に格納されている各中間コードを読み込む。そして読み込んだ中間コードが制御用語を示す中間コードか否かの判定を行い、制御用語を示す中間コードでなければ該当する真性マシン語命令のマシンコードに変換し、他方、制御用語を示す中間コードであれば疑似マシン語命令のマシンコードに変換し、この疑似マシン語命令のマシンコードも全シーケンスプログラムの一部として、ＰＬＣ１０のプログラムメモリ１１に転送し格納する。
【００２１】
ＰＬＣ１０からのプログラムの読み出しは、アップロード処理９において、ＰＬＣ１０のプログラムメモリ１１からマシンコードのプログラムを読み出す。そして読み出したマシンコードのプログラムが疑似命令か否かの判定を行い、疑似命令でなく真の命令であれば対応する命令の中間コードに変換し、他方、疑似命令であれば制御用語を示す中間コードに変換してプログラミング装置１のプログラムメモリ６に格納する。次に表示処理５において、プログラミング装置１のプログラムメモリ６に格納されている各中間コードを読み込み、テキストプログラムへの変換を行い、編集画面２に表示する。
図２は、図１の保存処理４の手順を示すフローチャートで、Ｓ１〜Ｓ８はそのステップ番号である。図２を説明すると、ステップＳ１でプログラミング装置１の編集画面２から１行分のテキストプログラムを読み込む。そしてステップＳ２でこの読み込んだテキストプログラムを解析し、連続文字列単位に分割して取り出す。
【００２２】
次のステップＳ３では取り出した当該の連続文字列が制御用語であるか否かを判定する。ここで制御用語と判定した場合はステップＳ４に進み、当該の連続文字列をその制御用語を意味する中間コードに変換し、次のステップＳ６でこの変換した中間コードをプログラムメモリ６に格納する。
こうして図１の例ではプログラミング装置１の編集画面２上の各制御用語の「ＩＦ」２１、「ＴＨＥＮ」２３、「ＥＮＤ ＩＦ」２６は、プログラミング装置１のプログラムメモリ６に示されるように、それぞれ「ＩＦ」、「ＴＨＥＮ」、「ＥＮＤ ＩＦ」を意味する中間コード６１、６４、６７に変換される。
また、前記ステップＳ３で当該の連続文字列を制御用語以外と判定した場合は、ステップＳ５に進み、例えば当該の連続文字列が条件式２２であれば、当該の連続文字列を、条件式（比較式）２２を実行すべき旨の条件（比較）命令の中間コード６２と、条件式２２の比較結果の真偽に応じて分岐先（本例では制御用語「ＴＨＥＮ」２３または「ＥＮＤ ＩＦ」２６）を指定する旨の条件ジャンプ命令の中間コード６３とに変換し、また当該の連続文字列が実行文＃１の２４、あるいは実行文＃２の２５であれば、当該の連続文字列を、それぞれの実行文を表す１つまたは組の複数個の各命令からなる中間コード６５、あるいは６６に変換して、ステップＳ６でこの変換した中間コードをプログラミング装置１のプログラムメモリ６に図示のように格納する。
【００２３】
次にステップＳ７では読み込んだ１行分のテキストプログラムを全て変換し終わったか否かを判定し、１行分のテキストプログラムを変換し終わるまでステップＳ２に戻り、以降のステップＳ２〜Ｓ７の処理を繰り返す。
１行分のテキストプログラムを変換し終わったら、次のステップＳ８で編集画面２上の全てのテキストプログラムを変換し終わったか否かを判定し、変換し終わっていなければステップＳ１に戻り、以降のステップＳ１〜Ｓ８の処理を繰り返す。
図４は、図１のダウンロード処理８の手順を示すフローチャートで、Ｓ２１〜Ｓ２３はそのステップ番号である。図４を説明すると、先ずステップＳ２１ではプログラミング装置１のプログラムメモリ６から読み出した中間コードが制御用語を示す中間コードであるか否かの判定を行い、例えば６１、６４、６７のような制御用語を示す中間コードであればステップＳ２２に進み、それぞれ当該の制御用語に対応した疑似命令のマシンコード、本例では１１１、１１４、１１７に変換する。
【００２４】
他方、前記ステップＳ２１でプログラムメモリ６から読み出した中間コードが制御用語を示す中間コードでなければステップＳ２３に進み、本例では各当該の中間コード６２、６３、６５、６６をそれぞれ既知のマシン語変換処理を用いて真性マシン語命令のマシンコード１１２、１１３、１１５、１１６に変換する。
図５は、図１のアップロード処理９の手順を示すフローチャートで、ステップＳ３１〜Ｓ３３はそのステップ番号である。図５を説明すると、先ずステップＳ３１ではＰＬＣ１０のプログラムメモリ１１から読み出したプログラムのマシンコードが疑似命令のマシンコードであるか否かの判定を行い、疑似命令の場合はステップＳ３２に進みそれぞれの疑似命令のマシンコードとしての本例では１１１、１１４、１１７をそれぞれ制御用語の中間コード６１、６４、６７に変換する。
【００２５】
他方、前記ステップＳ３１において、ＰＬＣ１０のプログラムメモリ１１から読み出したプログラムのマシンコードが疑似命令のマシンコードでない場合はステップＳ３３に進み、本例では各命令のマシンコードである１１２、１１３、１１５、１１６を既知の各命令変換処理を用いてそれぞれ命令の中間コード６２、６３、６５、６６に変換する。
図３は、図１の表示処理５の手順を示すフローチャートで、Ｓ１１〜Ｓ１５はそのステップ番号である。なお、この表示処理５は図１の編集画面２上のテキストプログラムの１行分ずつに対応する処理を示している。
図３を説明すると、先ずステップＳ１１でプログラミング装置１のプログラムメモリ６から読み出した（テキストプログラムの行頭に関わる）中間コードが制御用語を示す中間コードか否かを判定する。
【００２６】
ここで、制御用語を示す中間コードと判定すればステップＳ１１ａに進んで当該の制御用語の中間コードが、例えば対の制御用語「ＴＨＥＮ」２３を持つ制御用語「ＩＦ」２１の中間コード６１のように、テキストプログラム上で１行で表示される対の制御用語を持つものであるか否かを判定する。なお、行頭となる制御用語の種類によっては図６で後述するように対の制御用語を複数個持つものがある。
ここで、対の制御用語を持つものと判定すればステップＳ１１ｂに進んで対となる制御用語のうち末尾となる制御用語までの全ての中間コード、本例では６１、６２、６３、６４を読み出し、次のステップＳ１１ｃでそれぞれの中間コードを該当するテキストプログラムに、従って本例では中間コード６１を制御用語２１に、組となる中間コード６２および６３を条件式２２に、また中間コード６４を制御用語２３に変換して、変換した制御用語「ＩＦ」２１、条件式２２、制御用語「ＴＨＥＮ」２３を１行分のテキストプログラムとする。そして、この場合は次のステップＳ１４を単に通過し、次のステップＳ１５でこの１行分のテキストプログラムを編集画面２上に表示する。
【００２７】
他方、前記ステップＳ１１ａで、当該の制御用語の中間コードが、例えば制御用語「ＥＮＤ ＩＦ」を示す中間コード６７のように、対の制御用語を持たないものと判定すればステップＳ１２に進み、その制御用語の中間コードのみを、本例では制御用語「ＥＮＤ ＩＦ」２６のようなテキストプログラムに変換したのち、ステップＳ１４を単に通過し、ステップＳ１５でこのテキストプログラムを編集画面２上に独立した１行に表示する。
また、前記ステップＳ１１でテキストプログラムの行頭に関わる当該の中間コードを、実行文＃１または実行文＃２にそれぞれ対応する１つまたは組となる複数個からなる各命令の中間コード６５または６６のような、制御用語以外の中間コードと判定すれば、ステップＳ１３に進んで該当する１行の実行文、本例では実行文＃１の２４または実行文＃２の２５のテキストプログラムに変換する。
【００２８】
次にステップＳ１４では変換したテキストプログラムの行が、インデントの必要な行であるか否かを判定し、必要な行であれば変換したテキストプログラムの先頭にインデントを付加し、インデントの不要な行であればインデントを付加せず、次のステップＳ１５で変換された１行分のテキストプログラムを編集画面２上に表示する。
本例ではテキストプログラムの実行文＃１の２４および実行文＃２の２５は、テキストプログラムの制御用語「ＩＦ」２１〜「ＴＨＥＮ」２３の行に続く実行文、つまり条件分岐の制御文内の対の制御用語を含む１行分のテキストプログラムに従属する実行文であるためインデントが付加される。
なお、後述の図６に示すように、制御用語には例えば「ＥＬＳＥ」や「ＲＥＰＥＡＴ」のように単独で１行をなして従属する実行文を持つものもあり、このような制御用語に続く実行文にもインデントが付加される。しかし、当該の実行文が制御文とは独立の実行文であればインデントは付加されない。
【００２９】
以上の実施例ではＳＴ言語の制御文における条件分岐文の一例についての処理方法を説明したが、次にＳＴ言語における制御文の種類と機能を説明する。なお制御文とは、アドレス順に並ぶプログラム上の必要な位置（アドレス）に設けられ、その時点の条件等に応じ以後のプログラムの流れ（実行順序）を制御する命令文をいう。
即ち、一般にプログラムはアドレス順に実行される「順次構造」となっている。しかし、ある処理を繰り返したり、条件によって異なる処理をさせたり、あるいは当該の処理を終了させたりしたい場合があり、このような場合には以降の実行プログラムを別に指定したり、プログラムの実行アドレスの起点を切り替えたり、アドレス更新を停止したりして、プログラムの流れを変える必要がある。このプログラムの流れを切り替える役目を果たすのが制御文である。
【００３０】
図６はこのＳＴ言語における制御文の種類とテキストプログラムでの記述例を対応させてまとめて示したものである。同図に示すようにＳＴ言語での制御文は大別して１）条件分岐文と、２）反復文の２つに区分される。
そして、１）条件分岐文はさらに、
１−１）ＩＦ文、
１−２）ＣＡＳＥ文
の２種類に区分され、また、２）反復文はさらに、
２−１）ＦＯＲ文、
２−２）ＷＨＩＬＥ文、
２−３）ＲＥＰＥＡＴ文、
２−４）ＥＸＩＴ文、
２−５）ＲＥＴＵＲＮ文
の５種類に区分される。
【００３１】
次に図６を参照しつつ上記の種類別の制御文を説明する。
１−１）ＩＦ文：
ＩＦ文は基本的には『もし・・・の条件が成立すれば・・・を実行し、前記条件が成立しなければ・・・を実行せよ。』という趣旨の命令文であるが、制御用語の組合わせによって若干の変形が生ずる。
前述した図１の編集画面２上のテキストプログラムの記述例は、図６のＩＦ文の記述例のうちａ），ｂ），ｇ）の各行の記述を用いており、この中には「ＩＦ」，「ＴＨＥＮ」，「ＥＮＤ ＩＦ」の制御用語が含まれるのみである。しかしＩＦ文の制御用語には、このほかｃ）行に示す「ＥＬＳＥＩＦ」や、ｅ）行に示す「ＥＬＳＥ」が存在する。
この図６のａ）行からｇ）行までの全行を纏めた命令の内容は『もし、条件式＃１が成立したら実行文＃１を実行し、また条件式＃１が成立せず、条件式＃２が成立したら実行文＃２を実行し、また条件式＃１も条件式＃２も成立しなければ実行文＃３を実行せよ。』というものである。
【００３２】
１−２）ＣＡＳＥ文：
ＣＡＳＥ文は基本的には単一の整数変数の値とか、或る式の結果としての整数値に対応して選択される実行文があれば該当する実行文を実行させ、対応選択される実行文がない場合には、別に定めた実行文を実行させる命令文である。この制御文には、対をなす「ＣＡＳＥ」および「ＯＦ」の制御用語と、「ＥＬＳＥ」、「ＥＮＤ ＣＡＳＥ」の制御用語が用いられる。
この図６のＣＡＳＥ文の記述例の命令の内容は『「ＣＡＳＥ」に続く「整数式」の値に一致する整数選択値の実行文があれば該当する実行文を実行し（つまり本例では整数式の値が整数選択値＃１または整数選択値＃２に一致すれば、実行文＃１または実行文＃２のうちの一致した側を実行し）、一致する整数選択値の実行文がなければ、「ＥＬＳＥ」の後に続く実行文＃３を実行せよ。』というものである。
【００３３】
２−１）ＦＯＲ文：
ＦＯＲ文は反復変数の値を初期値から最終値まで、１回ごとに所定値ずつ増加（または減少）していく間、毎回、指定したいくつかの実行文を繰り返させる命令文である。図６では書き込みのスペース上、やむを得ず２行に分かれてしまっているが、この制御文には、実際には同一行内で対をなす「ＦＯＲ」、「ＴＯ」、「ＢＹ」、「ＤＯ」の制御用語と、「ＥＮＤ ＦＯＲ」の制御用語が用いられる。
この図６のＦＯＲ文の記述例の命令の内容は『「初期化する反復変数」とした部分の式で初期値を与えた反復変数の値を、「最終値の式」で指定した最終値に達するまで、１回ごとに「増加式」で示されるプラス（またはマイナス）の差分づつ増加（または減少）させ、そのつど実行文＃１を実行せよ。』というものである。
【００３４】
２−２）ＷＨＩＬＥ文：
ＷＨＩＬＥ文はある特定のブール式が真である間、１つ以上の実行文を繰り返し実行させる命令文である。この制御文には、対をなす「ＷＨＩＬＥ」および「ＤＯ」の制御用語と、「ＥＮＤ ＷＨＩＬＥ」の制御用語が用いられる。この図６のＷＨＩＬＥ文の記述例の命令の内容は『制御用語「ＷＨＩＬＥ」に続くブール式が真である間、実行文＃１および実行文＃１に続く図外の実行文を含む１つ以上の実行文を繰り返し実行せよ。』というものである。
２−３）ＲＥＰＥＡＴ文：
ＲＥＰＥＡＴ文はある特定のブール式が真である間、１つ以上の実行文を繰り返し実行させる命令文である（但しＷＨＩＬＥ文と異なり、実行文の後方にブール式が置かれる）。この制御文には、「ＲＥＰＥＡＴ」、「ＵＮＴＩＬ」、「ＥＮＤ ＲＥＰＥＡＴ」の制御用語が用いられる。この図６のＲＥＰＥＡＴの記述例の命令の内容は『制御用語「ＵＮＴＩＬ」に続くブール式が真である間、実行文＃１および実行文＃１に続く図外の実行文を含む１つ以上の実行文を繰り返し実行せよ。』というものである。
【００３５】
２−４）ＥＸＩＴ文：
ＥＸＩＴ文は、反復文内の途中の必要な位置に制御用語「ＥＸＩＴ」として置かれ、プログラム実行がこの制御用語「ＥＸＩＴ」に達すると、当該の反復構文の残りのプログラムを実行せず、直ちに当該の反復構文の末尾に飛び、ここから実行を継続させる命令文である。
２−５）ＲＥＴＵＲＮ文：
ＲＥＴＵＲＮ文は、所定の機能を持ったプログラムの一団としてのファンクションまたはファンクション・ブロックの本体プログラム（つまり当該ファンクションまたはファンクション・ブロックのラベルに続く、処理の実体となるプログラム群）内の途中の必要な位置に制御用語「ＲＥＴＵＲＮ」として置かれ、プログラム実行がこの制御用語「ＲＥＴＵＲＮ」に達すると直ちに実行を終了して当該ファンクションまたはファンクション・ブロックの本体プログラムの先頭に戻り、ここから実行を継続させる命令文である。
【００３６】
以上述べた各種の制御文はいずれも図２、さらに図４の処理によって、それぞれテキストプログラムから中間コードへの変換、さらに中間コードからマシンコードへの変換ができ、また図５、さらに図３の処理によって、それぞれマシンコードから中間コードへの変換、さらに中間コードからテキストプログラムへの変換が可能である。
【図面の簡単な説明】
【００３７】
【図１】本発明の一実施例としてのシステム要部の機能の基本構成を示す図
【図２】本発明における保存処理の手順を示すフローチャート
【図３】本発明における表示処理の手順を示すフローチャート
【図４】本発明におけるダウンロード処理の手順を示すフローチャート
【図５】本発明におけるアップロード処理の手順を示すフローチャート
【図６】ＳＴ言語における制御文の種類とテキストプログラムでの記述例を示す図
【符号の説明】
【００３８】
１          プログラミング装置
２          編集画面
４          保存処理
５          表示処理
６          プログラミング装置のプログラムメモリ
８          ダウンロード処理
９          アップロード処理
１０        プログラマブルコントローラ（ＰＬＣ）
１１        ＰＬＣのプログラムメモリ
２１        ＩＦ（制御用語）
２２        条件式
２３        ＴＨＥＮ（制御用語）
２４        実行文＃１
２５        実行文＃２
２６        ＥＮＤ ＩＦ（制御用語）
６１        ＩＦを示す中間コード（制御用語を示す中間コード）
６２        条件（比較）命令の中間コード
６３        条件ジャンプ命令の中間コード
６４        ＴＨＥＮを示す中間コード（制御用語を示す中間コード）
６５        実行文＃１の各命令の中間コード
６６        実行文＃２の各命令の中間コード
６７        ＥＮＤ ＩＦを示す中間コード（制御用語を示す中間コード）
１１１      ＩＦを示す疑似命令のマシンコード
１１２      条件（比較）命令のマシンコード
１１３      条件ジャンプ命令のマシンコード
１１４      ＴＨＥＮを示す疑似命令のマシンコード
１１５      実行文＃１の各命令のマシンコード
１１６      実行文＃２の各命令のマシンコード
１１７      ＥＮＤ ＩＦを示す疑似命令のマシンコード
【図１】
2007128378.tif 000003
【図２】
2007128378.tif 000004
【図３】
2007128378.tif 000005
【図４】
2007128378.tif 000006
【図５】
2007128378.tif 000007
【図６】
2007128378.tif 000008