説明

プログラマブルコントローラのプログラミング装置

【課題】プログラミング装置1の編集画面2に示されるようなプログラマブルコントローラ(PLC)10のプロセッサの機能の仕様に予め定められたマシン語命令(真性マシン語命令)に置き換え得る条件式22や実行文24、25等と真性マシン語命令に置き換えできない制御用語21、23、26等からなるテキスト記述型のST言語のシーケンスプログラムをマシン語形態に変換してPLCに格納したのち、再びPLCから元のテキストプログラムを復元できるようにし、従来のように元のテキストプログラムを別途管理する必要をなくし、PLCのプログラム編集を容易にする。
【解決手段】制御用語21、23、26等をPLCによるシーケンス制御に影響しない疑似命令として、これに真性マシン語命令には含まれぬ疑似マシン語命令を当てはめ、条件式22や実行文24、25等にはそれぞれを置き換える真性マシン語命令を当てはめてできるマシン語形態のプログラムをPLCに格納する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、例えばIEC規格1131−3に定められているテキスト記述形式のプログラミング言語であるストラクチャード・テキスト言語(以下・ST言語とも略記する)で記述されたのち、マシンコードに変換されてプログラマブルコントローラ(PLCとも略記する)に格納されたシーケンスプログラムを、再び元のST言語のプログラムに復元する機能を持つプログラマブルコントローラのプログラミング装置に関する。
【背景技術】
【0002】
プログラマブルコントローラ(PLC)はシーケンスプログラムを演算実行してPLCに接続される制御対象機器の自動シーケンス制御を行う装置として知られている。そしてこのシーケンスプログラムは通常、ユーザによりプログラミング装置上で編集されたのち、マシンコードに変換されてPLCに格納される。なおここで編集とはプログラムの作成、変更、デバッグ等のプログラムの作成に関わる全ての作業を意味するものとする。
このシーケンスプログラムを作るためのプログラミング言語としては、従来、ラダー図を用いるラダー言語が使用されて来たが、ラダー言語はリレー回路等の専門知識を必要とするため、最近は、こうした専門知識を持たない通常のソフトウェア技術者でも容易にシーケンスプログラムを作ることができる、上述のようなテキスト記述形式(換言すれば図面を用いない形式)のST言語が用いられるようになった。
【0003】
ところで、このようなST言語で記述されたテキスト記述形式のプログラム(テキストプログラムともいう)としてのシーケンスプログラムをPLCのマシンコードに変換すると、現状ではプログラムの流れを切り換えるために、必要に応じてテキストプログラム内に使用されるプログラム制御用の英単語(後述の制御用語)等は無視し、テキストプログラム内の実行文や条件式等のシーケンス制御に必須となる部分のみをマシン語命令に変換するため、元のST言語で記述されたプログラムに復元することができない。
このため、PLCのマシンコードを後刻、再び編集する場合に備えて、PLCの記憶装置にマシンコードに変換したプログラムとは別にST言語で記述された元のプログラムを格納するか、ST言語で記述された元のプログラムをPLCとは別のパソコンなどの記憶装置に格納し、PLC内のプログラムとリンクした形で管理している。
【0004】
なお、ラダー言語で作成されるPLCのシーケンスプログラムは、一般に流れ図を参照し、リレー動作に対応するビット処理を行う基本命令と、より複雑な演算や制御を行わせるための機能命令などからなるラダー言語を用いて、ラダー図として図面化(プログラミング)され、表示されるが、特許文献1には、機能命令に対応するマクロプログラムを解析して処理する必要がなく、しかも表示は従来と同様に行えるPLCを得るために、機能命令と機械語を対応させるテーブルを有し、機能命令を当該命令ステップに特定される機械語に変換してシーケンスプログラムとして記憶し、その機械語に付随して、対応する復元情報を記憶しておき、シーケンス処理の実行はマクロプログラムを用いない特定の機械語で、シーケンスプログラムの表示は復元情報から復元したラダー言語により行うように構成したPLCが開示されている。
【特許文献1】特開平5−274011号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかしながら、PLC内にマシンコードに変換したプログラムとは別にST言語で記述された元のプログラムを格納する前述の方法では、PLC内にマシンコードのプログラムとST言語で記述された元のプログラムとの両方を格納するため、2 倍の容量の記憶装置が必要となりPLCがコストアップとなってしまう。
また前述したPLCとは別の記憶装置にST言語で記述された元のプログラムを格納する方法では、別の記憶装置を参照することが煩わしく、直接、PLC内のプログラムを読み出してこれを編集したくても、ST言語で記述されたプログラムを元にマシンコードに変換したPLC内のプログラムは前述の理由で元のST言語の形には復元されないため、プログラムの編集が困難である。
このため、遠隔地のPLCのプログラムを変更する際には、直接、PLC内のプログラムを変更するのではなく、別の記憶装置に保存したST言語で記述された元のプログラムを持参し、そのプログラムを編集しマシンコードに変換してPLCに転送(書き込み)を行う必要があった。
【0006】
本発明はこのような問題を解消し、ST言語で記述されたのちマシンコードに変換されてPLCに格納されたシーケンスプログラムを、再び容易に元のST言語のプログラムに復元する機能を持つプログラマブルコントローラのプログラミング装置を提供することを課題とする。
【課題を解決するための手段】
【0007】
前記の課題を解決するために請求項1のプログラマブルコントローラのプログラミング装置は、
文字または(および)記号をそれぞれ複数個連ねた列(以下連続文字列という)からなり、それぞれ、このシーケンスプログラムを実行するプロセッサの機能の仕様に予め定められたマシン語命令(以下真性マシン語命令という)の1または複数個に置き換え可能な各種の条件式(22など)や実行文(24、25など)と、同じく前記連続文字列からなり、前記真性マシン語命令への置き換えができない各種の制御用語(IFの21、THENの23、END IFの26など)とを組合わせ、このプログラミング言語固有の文法に従い記述されたテキスト記述型プログラミング言語のシーケンスプログラムとしてのソースプログラムにおける、前記の各連続文字列を順次読み込んで解析したうえ、この各連続文字列をそれぞれ該当するマシン語命令(マシンコード111〜117など)に変換し、前記ソースプログラムに対応するマシン語形態のオブジエクトプログラムを生成してプログラマブルコントローラに格納する言語順変換手段(保存処理4およびダウンロード処理8を実行する図外のプロセッサなど)と、
プログラマブルコントローラから読み出したテキスト記述型プログラミング言語のソースプログラムを元とするマシン語形態の前記オブジエクトプログラムを構成する各マシン語命令を順次解析して、前記オブジエクトプログラムを元のテキスト記述型プログラミング言語のソースプログラムに復元する言語逆変換手段(アップロード処理9および表示処理5を実行する図外のプロセッサなど)とを備えたものとする。
【0008】
また請求項2のプログラマブルコントローラのプログラミング装置は、請求項1に記載のプログラマブルコントローラのプログラミング装置において、
前記言語順変換手段が、前記制御用語に該当しない各連続文字列を、このそれぞれに対する前記の置き換えが可能な1または複数個の真性マシン語命令(マシンコード112、113、115、116など)に変換し、また前記制御用語に該当する各連続文字列を、このそれぞれに1対1に対応し前記真性マシン語命令には含まれず、プログラマブルコントローラのシーケンスプログラムの実行に影響しないマシン語命令(マシンコード111、114、117など、以下疑似マシン語命令という)に変換する手段を備えたものであるようにする。
また請求項3のプログラマブルコントローラのプログラミング装置は、請求項2に記載のプログラマブルコントローラのプログラミング装置において、
前記言語逆変換手段が少なくとも、解析対象の当該のマシン語命令が前記疑似マシン語命令であるか否かを判定する疑似マシン語命令判定手段と、
この疑似マシン語命令判定手段によって疑似マシン語命令でないと判定された当該の前記真性マシン語命令に対しては、さらに組となる真性マシン語命令を持つものであるか否かを判定し、組の真性マシン語命令を持たないと判定した真性マシン語命令を対応する1行分のテキスト記述型プログラミング言語の条件式または実行文に復元し、組の真性マシン語命令を持つと判定した場合は、当該の真性マシン語命令から組の最終位の真性マシン語命令までの真性マシン語命令(図1の例では、条件(比較)命令のマシンコード112および条件ジャンプ命令のマシンコード113、実行文#1の各命令のマシンコード115、あるいは実行文#2の各命令のマシンコード116)を一括して、対応するテキスト記述型プログラミング言語の1行分の条件式または実行文(この例では、条件式22、実行文#1の24、あるいは実行文#2の25)に復元する第1の判定復元手段と、
前記疑似マシン語命令判定手段によって疑似マシン語命令と判定された当該の疑似マシン語命令に対しては、さらに対となる疑似マシン語命令(図1の例では、THENを示す疑似命令のマシンコード114)を持つものであるか否かを判定し、対の疑似マシン語命令を持たないと判定した疑似マシン語命令(図1の例では、END IFを示す疑似命令のマシンコード117)を対応する1行分のテキスト記述型プログラミング言語の前記制御用語(この例では、END IFの26)に復元し、対の疑似マシン語命令を持つと判定した場合は、当該の疑似マシン語命令(図1の例では、IFを示す疑似命令のマシンコード111)から対の最終位の疑似マシン語命令(この例では、THENを示す疑似命令のマシンコード114)までの各疑似および真性のマシン語命令のうち、疑似マシン語命令(この例では、マシンコード111、114)をそれぞれ対応するテキスト記述型プログラミング言語の前記制御用語に復元すると共に、真性マシン語命令をその個別または組となる複数個を一括した真性マシン語命令(この例では、組となるマシンコード112および113)ごとに前記第1の判定復元手段を介しそれぞれ対応するテキスト記述型プログラミング言語の条件式または実行文(この例では、条件式22)に復元して、当該の疑似マシン語命令から対の最終位の疑似マシン語命令までの全マシン語命令を、該条件式または実行文の復元行を同一行に含むようなテキスト記述型プログラミング言語の制御命令文内の1行分の復元文(この例では、制御用語IFの21、条件式22、制御用語THENの23からなる復元文)とする第2の判定復元手段と、
前記第1の判定復元手段によって復元されたテキスト記述型プログラミング言語の条件式または実行文が前記第2の判定復元手段によって復元されたテキスト記述型プログラミング言語の制御命令文内の1行分の復元文、、または同じく復元された単独で1行をなす前記制御用語に従属するものであるか否かを判定し、従属する条件式または実行文(図1の例では、実行文#1の24、および実行文#2の25)にはインデントを付加するインデント付加手段とを備えたものであるようにする。
【0009】
また請求項4のプログラマブルコントローラのプログラミング装置は、請求項1ないし3のいずれかに記載のプログラマブルコントローラのプログラミング装置において、前記テキスト記述型プログラミング言語をストラクチャード・テキスト言語とする。
本発明の作用はプログラマブルコントローラ(PLC)のプログラミング装置に以下の機能を設けることにより、テキスト記述形式のプログラミング言語であるST言語で記述されマシンコードに変換されてPLCに格納されたシーケンスプログラムを、PLCから元のST言語のテキストプログラムに復元できるようにするものである。
即ち、ST言語で記述されたテキストプログラムとしてのシーケンスプログラムを連続文字列単位に順次読み出し、制御用語か否かの判定を行い、制御用語であれば制御用語を示す中間コードに変換し、制御用語ではない条件式や実行文であれば、このシーケンスプログラムを実行するプロセッサの機能の仕様に予め定められたマシン語命令(真性マシン語命令)からなりこの条件式や実行文を置き換え得る命令に対応する中間コードにそれぞれ変換する。
【0010】
そしてPLCにシーケンスプログラムを格納する際、制御用語をPLCによるシーケンスプログラムの実行に影響しない疑似命令として制御用語を示す中間コードを真性マシン語命令には含まれぬ疑似マシン語命令に、その他の中間コードは対応する真性マシン語命令にそれぞれ変換する。
他方、PLCからマシンコードのシーケンスプログラムを読み出す際は、一旦、疑似または真性のマシン語命令を、それぞれ対応する中間コードへ変換する処理を経たうえ、疑似マシン語命令は該当する制御用語に、真性マシン語命令は該当する条件式や実行文にそれぞれ変換することで、ST言語で記述されたテキストプログラムに復元する。
【発明の効果】
【0011】
テキスト記述形式のプログラミング言語であるST言語で記述されたテキストプログラムとしてのシーケンスプログラムは各種の実行文や制御文からなり、制御文は制御用語、条件式、実行文等で構成される。これらの各連続文字列のうち、条件式や実行文はこのシーケンスプログラムを実行するプロセッサの機能の仕様に予め定められたマシン語命令(真性マシン語命令)に置き換えることができるが、制御用語は真性マシン語命令には置き換えることができない。
そこで本発明によれば、上記制御用語を、PLCによるシーケンスプログラムの実行には影響しない疑似命令として扱い、これに真性マシン語命令には含まれぬ疑似マシン語命令を当てはめ、制御用語以外の条件式や実行文にはこのそれぞれを置き換える真性マシン語命令を当てはめてできるマシン語形態のプログラムをPLCに格納するようにしたので、
PLC内に格納されているマシンコードのシーケンスプログラム(オブジェクトプログラム)から作成時と同じST言語で記述されたテキストプログラムのシーケンスプログラム(ソースプログラム)を復元することができ、従来のようにPLC内に格納したオブジェクトプログラムとは別に、このプログラムの元になるST言語のソースプログラムを別途管理する必要がなく、使用者の負担が軽減される。
【0012】
また、PLC内のマシン語形態のプログラムから元のST言語のソースプログラムが復元できるため、PLCに特別な記憶装置を持つ必要がなくなり、PLCのコストダウンを図ることができる。
【発明を実施するための最良の形態】
【0013】
図1は本発明の一実施例としてのシステム要部の機能の基本構成を示す。図1において、1はプログラミング装置、10はプログラミング装置1に接続された状態のプログラマブルコントローラ(PLC)である。
次にプログラミング装置1において2はプログラムの編集画面で、21〜26の個別の連続文字列は前述したテキスト記述形式のST言語のシーケンスプログラム(テキストプログラムとも略記する)の一部の後述する制御文を持つプログラムブロックの一例についての、ST言語の文法に基づく記述状態を示している。
また、6はプログラミング装置1のプログラムメモリで、このプログラムメモリ6内の61〜67は編集画面2上の各連続文字列21〜26をこのプログラミング装置に固有の中間コードに変換したものである。
【0014】
次に、PLC10において11はそのプログラムメモリであり、このプログラムメモリ11内の111〜117はそれぞれプログラミング装置1のプログラムメモリ6内の各中間コード61〜67をそれぞれ変換して作られた疑似命令または真の命令のマシンコードである。
後でも述べるが、ここで真の命令とはPLC10のシーケンスプログラムの実行に関わりを持つ命令であり、疑似命令とはこのシーケンスプログラムの実行に関わりを持たない命令である。そして、真の命令のマシンコードはPLC10に格納されたシーケンスプログラムを実行するプロセッサの機能の仕様に予め定められている各種のマシン語命令(便宜上、真性マシン語命令とも呼ぶ)の1つまたは組をなす複数個からなるマシンコードで、本例では112の条件(比較)命令、113の条件ジャンプ命令、115の実行文#1の各命令、116の実行文#2の各命令のそれぞれのマシンコードがこれに相当する。
【0015】
また、疑似命令のマシンコードは真性マシン語命令のマシンコードには含まれず、これに似せて作られた各個別のマシンコードで、本例では111の「IF」、114の「THEN」、117の「END IF」のそれぞれを示す疑似命令のマシンコードがこれに相当する。
次に、4、5、8、9はプログラミング装置1が行う処理で、4は編集画面2上に記述されたテキストプログラムを中間コードのプログラムに変換してプログラムメモリ6に保存する処理、5はその逆にプログラムメモリ6内の中間コードのプログラムをテキストプログラムに変換して編集画面2上に元のフォーマット通りに表示する処理、8はプログラミング装置1のプログラムメモリ6内の中間コードのプログラムをマシンコードのプログラムに変換してPLC10のプログラムメモリ11に書き込むダウンロード処理、9はその逆にPLC10のプログラムメモリ11内のマシンコードのプログラムを中間コードのプログラムに変換しプログラミング装置1のプログラムメモリ6に書き込むアップロード処理である。
【0016】
ここで、プログラミング装置1の編集画面2上に記述されているテキストプログラムを説明する。このテキストプログラムはST言語での制御文における条件分岐文に属するIF文と呼ばれる形式のプログラム命令の1例に相当するもので、本実施例では各個別の連続文字列21〜26は英単語「IF」21、条件式(換言すれば比較式)22、英単語「THEN」23、実行文#1の24、実行文#2の25、・・・、組合わせ英単語「END IF」26からなる。
なお、条件式の22や実行文#1の24および実行文#2の25をそれぞれ前後で挟む、「<」と「>」の記号は実際のテキストプログラムの記述に用いられるものではなく、この記号を含む区間に式や実行文が存在することを示すものである。このことは後述する図6に記述されているテキストプログラムについても同様である。
【0017】
ここで、「IF」21、条件式22、「THEN」23の各連続文字列は同一行(便宜上、第1行とする)上に表示され、実行文#1の24と実行文#2の25とは、第1行の行頭からインデント(行の先頭の字下げ)を付加した形でそれぞれ第2行と第3行上に表示され、連続文字列「END IF」26はこのIF文の末尾の行上に字下げなしに表示されている。
このIF文のプログラム命令の内容は『若し条件式22の条件が満たされれば(換言すれば、条件式22の比較結果が真であれば)、実行文#1の24、実行文#2の25、・・・の処理を実行せよ。』というものであり、このプログラム命令をさらに後述する中間コード、あるいはマシンコードのレベルに分解して表現すれば、『条件式22の比較を実行せよ、この比較結果が真であれば次アドレスの英単語「THEN」23へ進み(従って本例では「THEN」23のアドレス以降の実行文#1の24、実行文#2の25、・・・の処理を実行し)、前記条件式22の比較結果が偽であれば、英単語「THEN」23以降に最初に現れる英単語または組合わせ英単語のアドレスへ飛べ(従って本例では組合わせ英単語「END IF」26のアドレスへ飛んでこのIF文を終了せよ)。』というものである。
【0018】
なお制御文とは、後で詳述するが、アドレス順に並ぶプログラム上の必要な位置(アドレス)に設けられ、その時点の条件等に応じて以後のプログラムの流れ(実行順序)を制御する命令文をいう。
ところで編集画面2上のテキストプログラムのうち、条件式22、実行文#1の24、実行文#2の25等は、このそれぞれの命令機能を、このシーケンスプログラムを実行するPLC10のプロセッサの機能の仕様に予め定められている各種のマシン語命令としての前記の真性マシン語命令のうちのいずれか所定の1つまたは複数個の組み合わせに置き換えることができ、PLC10にはこの真性マシン語命令への置き換えによってできるマシンコードに変換されて格納される。
従って編集画面2上のテキストプログラムのようなシーケンスプログラムについてのPLC10に格納されたマシンコードから元の表示通りのテキストプログラムを復元しようとするとき、条件式22、実行文#1の24、実行文#2の25は、そのテキスト表示と上記の真性マシン語命令への置き換えに基づくマシンコードとの対応関係を設定できるので問題はない。
【0019】
しかし、英単語の連続文字列(便宜上、制御用語と呼ぶ)の「IF」21、「THEN」23、「END IF」26には、置き換え可能な真性マシン語命令は存在しない。そこで本発明では、この各制御用語21、23、26をPLC10のシーケンスプログラムの実行に関わりを持たない疑似命令とし、このそれぞれに前述した疑似マシン語命令のマシンコードを対応させてPLC10に格納し、テキストプログラムの復元時に利用するようにする。
ところで、プログラミング装置1のプログラムメモリ6内の1行ずつ順に並んだ各中間コード61〜67については、61、64、67はそれぞれ編集画面2上の制御用語としての「IF」21、「THEN」23、「END IF」26に対応する中間コード、62は編集画面2上の条件式22から生成される条件(比較)命令の中間コード、63は編集画面2上には存在しないが、この制御文がIF文であることによって、条件式22を置き換えた中間コード62の次に置かれ、条件式22の比較結果の真偽に応じて以降の分岐先を指定する役割を持つ条件ジャンプ命令の中間コード、65と66は編集画面2上の実行文#1の24と実行文#2の25を、それぞれ置き換える1つまたは組となる複数個からなる真性マシン語命令に対応する中間コードである。
【0020】
また、PLC10のプログラムメモリ11内の1行ずつ順に並んだ各マシンコード111〜117は、それぞれプログラミング装置1のプログラムメモリ6内の各中間コード61〜67に対応するものであり、前述のように、このうち111、114、117はそれぞれ制御用語「IF」、「THEN」、「END IF」を示す疑似マシン語命令のマシンコード、その他のマシンコード112、113、115、116は真性マシン語命令のマシンコードである。
PLC10へシーケンスプログラムを保存するには、先ず、プログラミング装置1の編集画面2で作成されたST言語で記述されたテキストプログラムを保存処理4において読み込み、中間コードに変換してプログラミング装置1のプログラムメモリ6に格納する。
次にダウンロード処理8において、プログラミング装置のプログラムメモリ6に格納されている各中間コードを読み込む。そして読み込んだ中間コードが制御用語を示す中間コードか否かの判定を行い、制御用語を示す中間コードでなければ該当する真性マシン語命令のマシンコードに変換し、他方、制御用語を示す中間コードであれば疑似マシン語命令のマシンコードに変換し、この疑似マシン語命令のマシンコードも全シーケンスプログラムの一部として、PLC10のプログラムメモリ11に転送し格納する。
【0021】
PLC10からのプログラムの読み出しは、アップロード処理9において、PLC10のプログラムメモリ11からマシンコードのプログラムを読み出す。そして読み出したマシンコードのプログラムが疑似命令か否かの判定を行い、疑似命令でなく真の命令であれば対応する命令の中間コードに変換し、他方、疑似命令であれば制御用語を示す中間コードに変換してプログラミング装置1のプログラムメモリ6に格納する。次に表示処理5において、プログラミング装置1のプログラムメモリ6に格納されている各中間コードを読み込み、テキストプログラムへの変換を行い、編集画面2に表示する。
図2は、図1の保存処理4の手順を示すフローチャートで、S1〜S8はそのステップ番号である。図2を説明すると、ステップS1でプログラミング装置1の編集画面2から1行分のテキストプログラムを読み込む。そしてステップS2でこの読み込んだテキストプログラムを解析し、連続文字列単位に分割して取り出す。
【0022】
次のステップS3では取り出した当該の連続文字列が制御用語であるか否かを判定する。ここで制御用語と判定した場合はステップS4に進み、当該の連続文字列をその制御用語を意味する中間コードに変換し、次のステップS6でこの変換した中間コードをプログラムメモリ6に格納する。
こうして図1の例ではプログラミング装置1の編集画面2上の各制御用語の「IF」21、「THEN」23、「END IF」26は、プログラミング装置1のプログラムメモリ6に示されるように、それぞれ「IF」、「THEN」、「END IF」を意味する中間コード61、64、67に変換される。
また、前記ステップS3で当該の連続文字列を制御用語以外と判定した場合は、ステップS5に進み、例えば当該の連続文字列が条件式22であれば、当該の連続文字列を、条件式(比較式)22を実行すべき旨の条件(比較)命令の中間コード62と、条件式22の比較結果の真偽に応じて分岐先(本例では制御用語「THEN」23または「END IF」26)を指定する旨の条件ジャンプ命令の中間コード63とに変換し、また当該の連続文字列が実行文#1の24、あるいは実行文#2の25であれば、当該の連続文字列を、それぞれの実行文を表す1つまたは組の複数個の各命令からなる中間コード65、あるいは66に変換して、ステップS6でこの変換した中間コードをプログラミング装置1のプログラムメモリ6に図示のように格納する。
【0023】
次にステップS7では読み込んだ1行分のテキストプログラムを全て変換し終わったか否かを判定し、1行分のテキストプログラムを変換し終わるまでステップS2に戻り、以降のステップS2〜S7の処理を繰り返す。
1行分のテキストプログラムを変換し終わったら、次のステップS8で編集画面2上の全てのテキストプログラムを変換し終わったか否かを判定し、変換し終わっていなければステップS1に戻り、以降のステップS1〜S8の処理を繰り返す。
図4は、図1のダウンロード処理8の手順を示すフローチャートで、S21〜S23はそのステップ番号である。図4を説明すると、先ずステップS21ではプログラミング装置1のプログラムメモリ6から読み出した中間コードが制御用語を示す中間コードであるか否かの判定を行い、例えば61、64、67のような制御用語を示す中間コードであればステップS22に進み、それぞれ当該の制御用語に対応した疑似命令のマシンコード、本例では111、114、117に変換する。
【0024】
他方、前記ステップS21でプログラムメモリ6から読み出した中間コードが制御用語を示す中間コードでなければステップS23に進み、本例では各当該の中間コード62、63、65、66をそれぞれ既知のマシン語変換処理を用いて真性マシン語命令のマシンコード112、113、115、116に変換する。
図5は、図1のアップロード処理9の手順を示すフローチャートで、ステップS31〜S33はそのステップ番号である。図5を説明すると、先ずステップS31ではPLC10のプログラムメモリ11から読み出したプログラムのマシンコードが疑似命令のマシンコードであるか否かの判定を行い、疑似命令の場合はステップS32に進みそれぞれの疑似命令のマシンコードとしての本例では111、114、117をそれぞれ制御用語の中間コード61、64、67に変換する。
【0025】
他方、前記ステップS31において、PLC10のプログラムメモリ11から読み出したプログラムのマシンコードが疑似命令のマシンコードでない場合はステップS33に進み、本例では各命令のマシンコードである112、113、115、116を既知の各命令変換処理を用いてそれぞれ命令の中間コード62、63、65、66に変換する。
図3は、図1の表示処理5の手順を示すフローチャートで、S11〜S15はそのステップ番号である。なお、この表示処理5は図1の編集画面2上のテキストプログラムの1行分ずつに対応する処理を示している。
図3を説明すると、先ずステップS11でプログラミング装置1のプログラムメモリ6から読み出した(テキストプログラムの行頭に関わる)中間コードが制御用語を示す中間コードか否かを判定する。
【0026】
ここで、制御用語を示す中間コードと判定すればステップS11aに進んで当該の制御用語の中間コードが、例えば対の制御用語「THEN」23を持つ制御用語「IF」21の中間コード61のように、テキストプログラム上で1行で表示される対の制御用語を持つものであるか否かを判定する。なお、行頭となる制御用語の種類によっては図6で後述するように対の制御用語を複数個持つものがある。
ここで、対の制御用語を持つものと判定すればステップS11bに進んで対となる制御用語のうち末尾となる制御用語までの全ての中間コード、本例では61、62、63、64を読み出し、次のステップS11cでそれぞれの中間コードを該当するテキストプログラムに、従って本例では中間コード61を制御用語21に、組となる中間コード62および63を条件式22に、また中間コード64を制御用語23に変換して、変換した制御用語「IF」21、条件式22、制御用語「THEN」23を1行分のテキストプログラムとする。そして、この場合は次のステップS14を単に通過し、次のステップS15でこの1行分のテキストプログラムを編集画面2上に表示する。
【0027】
他方、前記ステップS11aで、当該の制御用語の中間コードが、例えば制御用語「END IF」を示す中間コード67のように、対の制御用語を持たないものと判定すればステップS12に進み、その制御用語の中間コードのみを、本例では制御用語「END IF」26のようなテキストプログラムに変換したのち、ステップS14を単に通過し、ステップS15でこのテキストプログラムを編集画面2上に独立した1行に表示する。
また、前記ステップS11でテキストプログラムの行頭に関わる当該の中間コードを、実行文#1または実行文#2にそれぞれ対応する1つまたは組となる複数個からなる各命令の中間コード65または66のような、制御用語以外の中間コードと判定すれば、ステップS13に進んで該当する1行の実行文、本例では実行文#1の24または実行文#2の25のテキストプログラムに変換する。
【0028】
次にステップS14では変換したテキストプログラムの行が、インデントの必要な行であるか否かを判定し、必要な行であれば変換したテキストプログラムの先頭にインデントを付加し、インデントの不要な行であればインデントを付加せず、次のステップS15で変換された1行分のテキストプログラムを編集画面2上に表示する。
本例ではテキストプログラムの実行文#1の24および実行文#2の25は、テキストプログラムの制御用語「IF」21〜「THEN」23の行に続く実行文、つまり条件分岐の制御文内の対の制御用語を含む1行分のテキストプログラムに従属する実行文であるためインデントが付加される。
なお、後述の図6に示すように、制御用語には例えば「ELSE」や「REPEAT」のように単独で1行をなして従属する実行文を持つものもあり、このような制御用語に続く実行文にもインデントが付加される。しかし、当該の実行文が制御文とは独立の実行文であればインデントは付加されない。
【0029】
以上の実施例ではST言語の制御文における条件分岐文の一例についての処理方法を説明したが、次にST言語における制御文の種類と機能を説明する。なお制御文とは、アドレス順に並ぶプログラム上の必要な位置(アドレス)に設けられ、その時点の条件等に応じ以後のプログラムの流れ(実行順序)を制御する命令文をいう。
即ち、一般にプログラムはアドレス順に実行される「順次構造」となっている。しかし、ある処理を繰り返したり、条件によって異なる処理をさせたり、あるいは当該の処理を終了させたりしたい場合があり、このような場合には以降の実行プログラムを別に指定したり、プログラムの実行アドレスの起点を切り替えたり、アドレス更新を停止したりして、プログラムの流れを変える必要がある。このプログラムの流れを切り替える役目を果たすのが制御文である。
【0030】
図6はこのST言語における制御文の種類とテキストプログラムでの記述例を対応させてまとめて示したものである。同図に示すようにST言語での制御文は大別して1)条件分岐文と、2)反復文の2つに区分される。
そして、1)条件分岐文はさらに、
1−1)IF文、
1−2)CASE文
の2種類に区分され、また、2)反復文はさらに、
2−1)FOR文、
2−2)WHILE文、
2−3)REPEAT文、
2−4)EXIT文、
2−5)RETURN文
の5種類に区分される。
【0031】
次に図6を参照しつつ上記の種類別の制御文を説明する。
1−1)IF文:
IF文は基本的には『もし・・・の条件が成立すれば・・・を実行し、前記条件が成立しなければ・・・を実行せよ。』という趣旨の命令文であるが、制御用語の組合わせによって若干の変形が生ずる。
前述した図1の編集画面2上のテキストプログラムの記述例は、図6のIF文の記述例のうちa),b),g)の各行の記述を用いており、この中には「IF」,「THEN」,「END IF」の制御用語が含まれるのみである。しかしIF文の制御用語には、このほかc)行に示す「ELSEIF」や、e)行に示す「ELSE」が存在する。
この図6のa)行からg)行までの全行を纏めた命令の内容は『もし、条件式#1が成立したら実行文#1を実行し、また条件式#1が成立せず、条件式#2が成立したら実行文#2を実行し、また条件式#1も条件式#2も成立しなければ実行文#3を実行せよ。』というものである。
【0032】
1−2)CASE文:
CASE文は基本的には単一の整数変数の値とか、或る式の結果としての整数値に対応して選択される実行文があれば該当する実行文を実行させ、対応選択される実行文がない場合には、別に定めた実行文を実行させる命令文である。この制御文には、対をなす「CASE」および「OF」の制御用語と、「ELSE」、「END CASE」の制御用語が用いられる。
この図6のCASE文の記述例の命令の内容は『「CASE」に続く「整数式」の値に一致する整数選択値の実行文があれば該当する実行文を実行し(つまり本例では整数式の値が整数選択値#1または整数選択値#2に一致すれば、実行文#1または実行文#2のうちの一致した側を実行し)、一致する整数選択値の実行文がなければ、「ELSE」の後に続く実行文#3を実行せよ。』というものである。
【0033】
2−1)FOR文:
FOR文は反復変数の値を初期値から最終値まで、1回ごとに所定値ずつ増加(または減少)していく間、毎回、指定したいくつかの実行文を繰り返させる命令文である。図6では書き込みのスペース上、やむを得ず2行に分かれてしまっているが、この制御文には、実際には同一行内で対をなす「FOR」、「TO」、「BY」、「DO」の制御用語と、「END FOR」の制御用語が用いられる。
この図6のFOR文の記述例の命令の内容は『「初期化する反復変数」とした部分の式で初期値を与えた反復変数の値を、「最終値の式」で指定した最終値に達するまで、1回ごとに「増加式」で示されるプラス(またはマイナス)の差分づつ増加(または減少)させ、そのつど実行文#1を実行せよ。』というものである。
【0034】
2−2)WHILE文:
WHILE文はある特定のブール式が真である間、1つ以上の実行文を繰り返し実行させる命令文である。この制御文には、対をなす「WHILE」および「DO」の制御用語と、「END WHILE」の制御用語が用いられる。この図6のWHILE文の記述例の命令の内容は『制御用語「WHILE」に続くブール式が真である間、実行文#1および実行文#1に続く図外の実行文を含む1つ以上の実行文を繰り返し実行せよ。』というものである。
2−3)REPEAT文:
REPEAT文はある特定のブール式が真である間、1つ以上の実行文を繰り返し実行させる命令文である(但しWHILE文と異なり、実行文の後方にブール式が置かれる)。この制御文には、「REPEAT」、「UNTIL」、「END REPEAT」の制御用語が用いられる。この図6のREPEATの記述例の命令の内容は『制御用語「UNTIL」に続くブール式が真である間、実行文#1および実行文#1に続く図外の実行文を含む1つ以上の実行文を繰り返し実行せよ。』というものである。
【0035】
2−4)EXIT文:
EXIT文は、反復文内の途中の必要な位置に制御用語「EXIT」として置かれ、プログラム実行がこの制御用語「EXIT」に達すると、当該の反復構文の残りのプログラムを実行せず、直ちに当該の反復構文の末尾に飛び、ここから実行を継続させる命令文である。
2−5)RETURN文:
RETURN文は、所定の機能を持ったプログラムの一団としてのファンクションまたはファンクション・ブロックの本体プログラム(つまり当該ファンクションまたはファンクション・ブロックのラベルに続く、処理の実体となるプログラム群)内の途中の必要な位置に制御用語「RETURN」として置かれ、プログラム実行がこの制御用語「RETURN」に達すると直ちに実行を終了して当該ファンクションまたはファンクション・ブロックの本体プログラムの先頭に戻り、ここから実行を継続させる命令文である。
【0036】
以上述べた各種の制御文はいずれも図2、さらに図4の処理によって、それぞれテキストプログラムから中間コードへの変換、さらに中間コードからマシンコードへの変換ができ、また図5、さらに図3の処理によって、それぞれマシンコードから中間コードへの変換、さらに中間コードからテキストプログラムへの変換が可能である。
【図面の簡単な説明】
【0037】
【図1】本発明の一実施例としてのシステム要部の機能の基本構成を示す図
【図2】本発明における保存処理の手順を示すフローチャート
【図3】本発明における表示処理の手順を示すフローチャート
【図4】本発明におけるダウンロード処理の手順を示すフローチャート
【図5】本発明におけるアップロード処理の手順を示すフローチャート
【図6】ST言語における制御文の種類とテキストプログラムでの記述例を示す図
【符号の説明】
【0038】
1 プログラミング装置
2 編集画面
4 保存処理
5 表示処理
6 プログラミング装置のプログラムメモリ
8 ダウンロード処理
9 アップロード処理
10 プログラマブルコントローラ(PLC)
11 PLCのプログラムメモリ
21 IF(制御用語)
22 条件式
23 THEN(制御用語)
24 実行文#1
25 実行文#2
26 END IF(制御用語)
61 IFを示す中間コード(制御用語を示す中間コード)
62 条件(比較)命令の中間コード
63 条件ジャンプ命令の中間コード
64 THENを示す中間コード(制御用語を示す中間コード)
65 実行文#1の各命令の中間コード
66 実行文#2の各命令の中間コード
67 END IFを示す中間コード(制御用語を示す中間コード)
111 IFを示す疑似命令のマシンコード
112 条件(比較)命令のマシンコード
113 条件ジャンプ命令のマシンコード
114 THENを示す疑似命令のマシンコード
115 実行文#1の各命令のマシンコード
116 実行文#2の各命令のマシンコード
117 END IFを示す疑似命令のマシンコード


【特許請求の範囲】
【請求項1】
文字または(および)記号をそれぞれ複数個連ねた列(以下連続文字列という)からなり、それぞれ、このシーケンスプログラムを実行するプロセッサの機能の仕様に予め定められたマシン語命令(以下真性マシン語命令という)の1または複数個に置き換え可能な各種の条件式や実行文と、同じく前記連続文字列からなり、前記真性マシン語命令への置き換えができない各種の制御用語とを組合わせ、このプログラミング言語固有の文法に従い記述されたテキスト記述型プログラミング言語のシーケンスプログラムとしてのソースプログラムにおける、前記の各連続文字列を順次読み込んで解析したうえ、この各連続文字列をそれぞれ該当するマシン語命令に変換し、前記ソースプログラムに対応するマシン語形態のオブジエクトプログラムを生成してプログラマブルコントローラに格納する言語順変換手段と、
プログラマブルコントローラから読み出したテキスト記述型プログラミング言語のソースプログラムを元とするマシン語形態の前記オブジエクトプログラムを構成する各マシン語命令を順次解析して、前記オブジエクトプログラムを元のテキスト記述型プログラミング言語のソースプログラムに復元する言語逆変換手段とを備えたことを特徴とするプログラマブルコントローラのプログラミング装置。
【請求項2】
前記言語順変換手段が、前記制御用語に該当しない各連続文字列を、このそれぞれに対する前記の置き換えが可能な1または複数個の真性マシン語命令に変換し、また前記制御用語に該当する各連続文字列を、このそれぞれに1対1に対応し前記真性マシン語命令には含まれず、プログラマブルコントローラのシーケンスプログラムの実行に影響しないマシン語命令(以下疑似マシン語命令という)に変換する手段を備えたものであることを特徴とする請求項1に記載のプログラマブルコントローラのプログラミング装置。
【請求項3】
前記言語逆変換手段が少なくとも、解析対象の当該のマシン語命令が前記疑似マシン語命令であるか否かを判定する疑似マシン語命令判定手段と、
この疑似マシン語命令判定手段によって疑似マシン語命令でないと判定された当該の前記真性マシン語命令に対しては、さらに組となる真性マシン語命令を持つものであるか否かを判定し、組の真性マシン語命令を持たないと判定した真性マシン語命令を対応する1行分のテキスト記述型プログラミング言語の条件式または実行文に復元し、組の真性マシン語命令を持つと判定した場合は、当該の真性マシン語命令から組の最終位の真性マシン語命令までの真性マシン語命令を一括して、対応するテキスト記述型プログラミング言語の1行分の条件式または実行文に復元する第1の判定復元手段と、
前記疑似マシン語命令判定手段によって疑似マシン語命令と判定された当該の疑似マシン語命令に対しては、さらに対となる疑似マシン語命令を持つものであるか否かを判定し、対の疑似マシン語命令を持たないと判定した疑似マシン語命令を対応する1行分のテキスト記述型プログラミング言語の前記制御用語に復元し、対の疑似マシン語命令を持つと判定した場合は、当該の疑似マシン語命令から対の最終位の疑似マシン語命令までの各疑似および真性のマシン語命令のうち、疑似マシン語命令をそれぞれ対応するテキスト記述型プログラミング言語の前記制御用語に復元すると共に、真性マシン語命令をその個別または組となる複数個を一括した真性マシン語命令ごとに前記第1の判定復元手段を介しそれぞれ対応するテキスト記述型プログラミング言語の条件式または実行文に復元して、当該の疑似マシン語命令から対の最終位の疑似マシン語命令までの全マシン語命令を、該条件式または実行文の復元行を同一行に含むようなテキスト記述型プログラミング言語の制御命令文内の1行分の復元文とする第2の判定復元手段と、
前記第1の判定復元手段によって復元されたテキスト記述型プログラミング言語の条件式または実行文が前記第2の判定復元手段によって復元されたテキスト記述型プログラミング言語の制御命令文内の1行分の復元文、または同じく復元された単独で1行をなす前記制御用語に従属するものであるか否かを判定し、従属する条件式または実行文にはインデントを付加するインデント付加手段とを備えたものであることを特徴とする請求項2に記載のプログラマブルコントローラのプログラミング装置。
【請求項4】
前記テキスト記述型プログラミング言語をストラクチャード・テキスト言語としたことを特徴とする請求項1ないし3のいずれかに記載のプログラマブルコントローラのプログラミング装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2007−128378(P2007−128378A)
【公開日】平成19年5月24日(2007.5.24)
【国際特許分類】
【出願番号】特願2005−321722(P2005−321722)
【出願日】平成17年11月7日(2005.11.7)
【出願人】(503361927)富士電機機器制御株式会社 (402)
【Fターム(参考)】