(57)【特許請求の範囲】
【請求項１】
プログラマブルロジックコントローラ（ＰＬＣ）のユーザプログラムを管理するＰＬＣプログラム管理装置であって、
ソースコードをコンパイルして実行コードを生成するコンパイル手段と、
メモリがどのようなメモリブロックで構成されるかに関するメモリ構成情報に基づいて、前記実行コードのサイズに応じて適合したメモリブロックを割り当てるブロック割り当て手段と、
前記実行コードを前記ブロック割り当て手段を介して割り当てられたメモリブロックの位置に配置するリンク手段と、
前記実行コードのそれぞれの実行順序および位置情報が記憶された実行テーブルを生成する実行テーブル生成手段と、
前記リンク手段によって処理された実行コードと前記実行テーブルとを前記ＰＬＣにダウンロードさせるダウンロード手段と、を有し、
前記ブロック割り当て手段は、ソースコードが修正される場合、修正された実行コードのサイズと修正前の実行コードに割り当てられているメモリブロックのサイズとに応じて、該メモリブロックをそのまま割り当てるか、または、新たなメモリブロックを割り当てる、ＰＬＣプログラム管理装置。
【請求項２】
前記ダウンロード手段から前記実行コードおよび前記実行テーブルを受信するＰＬＣのＣＰＵモジュールをさらに有し、
前記ＣＰＵモジュールは、前記実行テーブルを参照してメモリの前記実行コードを順次実行する、請求項１に記載のＰＬＣプログラム管理装置。
【請求項３】
前記メモリブロックのサイズは、予め設定された基本サイズ（Ｎ）の整数倍で構成される、請求項１または２に記載のＰＬＣプログラム管理装置。
【請求項４】
前記メモリブロックのサイズは、予め設定された基本サイズ（Ｎ）の整数倍で構成され、ＣＥＩＬ（ｘ）がｘより大きい最小整数を表す関数である場合、
前記ブロック割り当て手段は、サイズを「ＣＥＩＬ（修正された実行コードのサイズ÷Ｎ）×Ｎ」から始めて一単位ずつ増やしながら有効なメモリブロックを検索する、請求項１に記載のＰＬＣプログラム管理装置。
【請求項５】
前記ブロック割り当て手段は、前記新たなメモリブロックを探し出すことができない場合、前記メモリ構成情報に基づいて前記実行コードのそれぞれに対するメモリブロックを再び割り当てる、請求項１に記載のＰＬＣプログラム管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＰＬＣに適用されるユーザプログラムを管理する装置およびＰＬＣのＣＰＵモジュールに関し、ユーザプログラムのサイズに適合したメモリブロックを割り当ててメモリ空間をより効率よく使用できるようにして、動作中のＰＬＣを止めなくても実行中のユーザプログラムを修正／追加することができる。
【背景技術】
【０００２】
プログラマブルロジックコントローラ（Programmable Logic Controller；ＰＬＣ）は、工場の自動化などに必須の要素として様々な産業分野で使用されている。
【０００３】
ＰＬＣのユーザプログラムは、必要に応じて変更または追加でき、変更されたユーザプログラムは、再びＰＬＣにダウンロードされて実行されなければならない。このとき、制御システムが止まることなくユーザプログラムに関する機能（functions）の変更および追加などが行われるようにする必要がある。
【０００４】
このために、各ユーザプログラムが搭載される（mounted）メモリブロックに余剰（余裕）空間（スペース）（space (allowance or clearance)）を置いて、修正される部分をその余剰空間にローディングして、ＰＬＣが動作中でもユーザプログラムの修正を可能にしている。
【０００５】
ところで、従来は、各ユーザプログラムのサイズに関係なく常にそれに割り当てられるメモリブロックのサイズが固定されていて、未使用空間に対する活用性が落ちるだけでなく、プログラム修正のための空間を確保できない場合、それ以上のプログラム修正が不可能となる問題点があった。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、上記の問題点を解決するために提供される（provided）もので、各ユーザプログラムに割り当てられるメモリブロックのサイズを多様に構成し、未使用空間に対する活用性を改善して、柔軟なプログラム修正や追加ができるようにすることにその目的がある。
【課題を解決するための手段】
【０００７】
上記の目的を達成するために、本発明に係るＰＬＣプログラム管理装置は、ソースコードをコンパイルして実行コードを生成するコンパイル手段と、メモリがどのようなメモリブロックで構成されるのかに関するメモリ構成情報に基づいて実行コードのサイズに応じて適合したメモリブロックを割り当てるブロック割り当て手段と、実行コードをブロック割り当て手段を介して割り当てられたメモリブロックの位置に配置（調整、アレンジ）する（arrange）リンク手段と、各実行コードの実行順序および位置情報が記憶された（recorded）実行テーブルを生成する実行テーブル生成手段と、リンク手段によって処理された実行コードと実行テーブルとをＰＬＣにダウンロードさせる（download）ダウンロード手段と、を有して構成される。
【０００８】
このとき、メモリブロックのサイズは、少なくとも二つ以上であってもよい。
【０００９】
メモリブロックのサイズに関する一つの実施形態は、基本サイズ（Ｎ）の整数倍で構成する。
【００１０】
ブロック割り当て手段は、ソースコードが修正される場合、修正された実行コードのサイズと修正前の実行コードに割り当てられているメモリブロックのサイズとに応じて、そのメモリブロックをそのまま割り当てるか、または、新たな（新しい）（new）メモリブロックを割り当てることができる。
【００１１】
メモリブロックのサイズが予め設定された基本サイズ（Ｎ）の整数倍で構成される場合、ブロック割り当て手段は、サイズを「ＣＥＩＬ（修正された実行コードのサイズ÷Ｎ）×Ｎ」から始めて一単位ずつ増やし（increase）ながら有効なメモリブロックを検索（search）することができる。
【００１２】
ここで、ＣＥＩＬ（ｘ）は、ｘより大きい最小整数を表す関数である。
【００１３】
ブロック割り当て手段は、新たなメモリブロックを探し出すことができない場合、メモリ構成情報に基づいて、各実行コードに対するメモリブロックを再び割り当てることができる。
【００１４】
本発明に係るＰＬＣ（Programmable Logic Controller）のＣＰＵモジュールは、メモリに記憶された複数のユーザプログラムの実行コードを順に繰り返し実行するプログラム実行器を有し、各ユーザプログラムの実行順序および位置情報が記憶された実行テーブルを維持する。このとき、プログラム実行器は、実行テーブルを参照してメモリの実行コードを順に実行する。
【発明の効果】
【００１５】
本発明によると、Ｎ、２Ｎ、４Ｎなど各々異なるサイズを有するプログラムメモリブロックを構成して、ユーザプログラムのサイズに応じて適合したサイズのメモリブロックを割り当てる。従って、従来の固定サイズの割り当て技法に比べて未使用空間に対する活用性が改善される。
【００１６】
また、実行テーブルを活用してプログラム実行領域を非連続的に構成できるため、プログラムの選択的な実行が可能で、ＰＬＣの動作中にユーザプログラムを修正したり追加することもできる。
【図面の簡単な説明】
【００１７】
【図１】本発明に係るＰＬＣプログラム管理装置およびＣＰＵモジュールの一実施形態を示す図である。
【図２】ユーザプログラムを説明するための例を示す図である。
【図３】メモリ構成情報に関する例を示す図である。
【図４】メモリブロック割り当てと実行テーブルとを説明するための例を示す図である。
【図５】ユーザプログラムが修正されるときメモリブロックを再び割り当てる方法の具体的な例を示す図である。
【図６】ユーザプログラムが修正されるときメモリブロックを再び割り当てる方法の具体的な例を示す図である。
【発明を実施するための形態】
【００１８】
以下、添付図を参照して本発明に係る好ましい実施形態を詳細に説明する。
【００１９】
図１を参照すると、ＰＬＣ（２０：Programmable Logic Controller（プログラマブルロジックコントローラ））は、別の外部装置であるＰＬＣプログラム管理装置１０と連動する。
【００２０】
本発明において、ＰＬＣプログラム管理装置１０とは、その名称に関係なくユーザがＰＬＣ２０に適用するプログラムを管理できるようにする装置であり、ＰＬＣ２０にユーザプログラムをダウンロードさせる（download）ことができる。ＰＬＣプログラム管理装置１０は、以下で説明するプログラム管理と関連した機能を行う限りＰＬＣ２０の運用および管理のための様々な役割を果たすことができる。
【００２１】
ＰＬＣプログラム管理装置１０は、デスクトップコンピュータやノートブックコンピュータなどのコンピュータ装置で構成してもよい。
【００２２】
ＰＬＣプログラム管理装置１０には、ユーザがラダー（Ladder）プログラムを作成できるようにしたり、作成されたプログラムをコンパイルしてＰＬＣ２０にダウンロードできるようにするなどの機能を実行するアプリケーションツールがインストールされてもよい。
【００２３】
ＰＬＣ２０は、ＣＰＵモジュール２１、電源モジュール２２、入出力モジュール２３などの様々な種類のモジュールを備える。
【００２４】
ＣＰＵモジュール２１は、ＰＬＣ２０の基本ユニットの機能を実行し、中央処理装置（２１−１：Central Processing Unit）などの演算プロセッサ、ユーザプログラムの実行コードが記憶されるメモリ２１−２などを含んで構成される。
【００２５】
ＣＰＵモジュール２１とは、その名称と関係なくＰＬＣ２０の主な運用プログラムを実行してＰＬＣ２０を管理する主制御モジュールを意味する。
【００２６】
図１には、ＰＬＣプログラム管理装置１０およびＣＰＵモジュール２１が、それぞれの通信モジュール１０−７、２１−７を介して相互に接続された（interconnected）例が図示されている。ＰＬＣプログラム管理装置１０とＣＰＵモジュール２１とは、シリアル（直列）通信（serial communication）やイーサネット（登録商標）など様々な通信方式を介して通信することができる。
【００２７】
図２を参照すると、一般に、ＰＬＣ２０のユーザプログラム１８は、プログラム１、プログラム２、プログラム３、プログラム４などのいくつかの下位プログラムで構成され、ユーザがＰＬＣプログラム開発環境で作成したユーザプログラムのソースコードは、実行コードにコンパイルされてＰＬＣ２０にダウンロードされる。
【００２８】
本発明に係るＰＬＣプログラム管理装置１０は、コンパイル手段１１、ブロック割り当て手段１２、リンク手段１３、実行テーブル生成手段１４、およびダウンロード手段１５を含んで構成される。
【００２９】
コンパイル手段１１は、ユーザプログラムのソースコード１０−１をコンパイルして実行コード１０−２を生成するよう機能する（function）ことができる。実行コードとは、ＰＬＣ２０の演算プロセッサが処理できる形式（形態）（type）のコードをいう。
【００３０】
ブロック割り当て手段１２は、メモリ構成情報１０−３を参照して実行コードにメモリブロックを割り当てるよう機能することができる。即ち、ブロック割り当て手段１２は、コンパイル手段１１によりコンパイルされた実行コードのサイズに応じて適合したメモリブロックを検索して（search）、検索したメモリブロックを該当する実行コードに割り当てる。
【００３１】
メモリ構成情報とは、メモリがどのようなメモリブロック（what memory blocks）で構成されるのかを示す情報をいう。各メモリブロックは、全部同じサイズを有するのではなく、様々なサイズを持つ。具体的な例として、メモリブロックのサイズは予め設定された基本サイズ（Ｎ）の整数倍で構成されてもよい。
【００３２】
図３は、メモリ構成情報の例を示したもので、メモリブロックのサイズがＮ、２Ｎ、４Ｎなどのサイズを有するようにし、メモリのアドレス順にサイズがＮのメモリブロックが４つ（３１〜３４）、サイズが２Ｎのメモリブロックが２つ（３５、３６）、サイズが４Ｎのメモリブロックが１つ（３７）で構成される構造を示している。
【００３３】
メモリ構成情報は、メモリがブロック単位でどのような構造を有するようにするのかによりいくらでも多様に構成できる。
【００３４】
リンク手段１３は、実行コードをブロック割り当て手段１２を介して割り当てられたメモリブロックの位置に配置（調整、アレンジ）する（arrange）よう機能することができる。
【００３５】
即ち、各ユーザプログラムの実行コードは、リンク手段１３を介して自体が実際に位置しなければならないメモリアドレスに位置するように配置される。例えば、ある実行コードに図３の最初の２Ｎサイズのメモリブロック３５が割り当てられた場合、リンク手段１３は、この実行コードがそのメモリブロック３５に位置するように配置する。
【００３６】
実行テーブル生成手段１４は、各実行コードの実行順序および位置情報を含む実行テーブル１０−４を生成する。
【００３７】
各実行コードは、ブロック割り当て手段１２により割り当てられたメモリブロックに配置されるが、ブロック割り当て手段１２が割り当てるメモリブロックの位置は、実行コードのサイズと現在のメモリの使用状況とによって任意に決定されるため、各ユーザプログラムの実行コードがその実行順に配置されるとの保障がない。
【００３８】
しかし、実際にＰＬＣ２０で実行されるときは、ユーザが意図した順に実行されなければならないので、プログラムの実行順序および各プログラムの実行位置に関する情報が必要であるが、この役割を実行テーブルが果たす。
【００３９】
図４を参照して、実行テーブルについて例を挙げて説明する。
【００４０】
ユーザプログラムが、プログラム１、プログラム２、プログラム３、プログラム４で構成されていて、ブロック割り当て手段１２が、プログラム１、プログラム２、プログラム３、プログラム４に、各々、メモリブロック５、メモリブロック７、メモリブロック１、メモリブロック２を割り当てる。
【００４１】
すると、リンク手段１３は、プログラム１をメモリブロック５に、プログラム２をメモリブロック７に、プログラム３をメモリブロック１に、プログラム４をメモリブロック２に、各々配置するので、プログラム１乃至プログラム４が順に実行されることはできない。
【００４２】
このため、実行テーブル１０−４には、プログラムの実行順序と該当する順序で実行されなければならないプログラムの位置情報とが記憶され、この情報を利用して、以後、各プログラムをユーザの意図に従って順に実行させることができる。
【００４３】
実行テーブル１０−４には、プログラムの実行順序および位置を指定するために必要な様々な情報が含まれてもよい。
【００４４】
例えば、メモリブロックの開始位置だけでなく、該当するメモリブロックに配置された実行コードのサイズ情報なども含まれてもよい。
【００４５】
ダウンロード手段１５は、リンク手段１３により処理された実行コードと、実行テーブル生成手段１４により生成された実行テーブルと、をＰＬＣ２０にダウンロードさせる。
【００４６】
一方、既にメモリブロックが割り当てられたユーザプログラムが修正される場合、ブロック割り当て手段１２は、修正された実行コードのサイズと修正前の実行コードに割り当てられているメモリブロックのサイズとを比較して、そのメモリブロックをそのまま割り当てたり、または、新たな（new）メモリブロックを割り当てる。
【００４７】
図５を参照して、ユーザプログラムが修正された場合のブロック割り当て手段１２の動作に関する例を説明する。
【００４８】
ブロック割り当て手段１２は、修正されたユーザプログラムがコンパイル手段１１を介して実行コードに変換されてブロック割り当てをしなければならない場合（Ｓ１１１）、該当するユーザプログラムに割り当てられたメモリブロックに修正された実行コードをロード（搭載）（load）するほどの十分なスペース（余裕）（sufficient space）があるか否かを確認する（Ｓ１１２）。
【００４９】
段階Ｓ１１２での確認の結果、現在のメモリブロックに十分なスペースがある場合は、現在のメモリブロックをそのまま割り当てて（Ｓ１１３）、十分なスペースがない場合は、新たなメモリブロックを検索する処理（過程）（process）を進行する（Ｓ１１４）。
【００５０】
新たなメモリブロックの検索処理を行った結果、新たなブロックが検索された場合（Ｓ１１５）、そのメモリブロックを割り当てて（Ｓ１１６）、新たなブロックを探すことができない場合メモリブロックを再配置する（Ｓ１１７）。
【００５１】
メモリブロックを再配置するとは、各実行コードに対するメモリブロックを全部再び割り当てることを意味する。
【００５２】
図６は、図５で新たなメモリブロックを検索する処理（Ｓ１１４）に関する例を示したものである。メモリブロックのサイズは、図３に示された例のように予め設定された基本サイズ（Ｎ）の整数倍で構成されると仮定する。
【００５３】
まず、ブロック割り当て手段１２は、検索ブロックのサイズを「ＣＥＩＬ（修正された実行コードのサイズ÷ Ｎ）×Ｎ」によって求める（Ｓ１１４−１）。
【００５４】
ここで、ＣＥＩＬ（ｘ）は、ｘより大きい最小整数を表す関数である。
【００５５】
そして、検索ブロックのサイズを有する有効なメモリブロック（使用できる状態のメモリブロック）が残っているか否かを調べる（Ｓ１１４−２）。
【００５６】
現在の検索ブロックのサイズを有する有効なメモリブロックが残っている場合、該当するメモリブロックを選択する（Ｓ１１４−３）。すると、図５の段階Ｓ１１６が実行される。
【００５７】
しかし、現在の検索ブロックのサイズを有する有効なメモリブロックが残っていない場合には、検索ブロックのサイズを一段階増加させて（Ｓ１１４−４）、段階Ｓ１１４−２に移行して現在の検索ブロックのサイズを有する有効なメモリブロックが残っているか否かを調べる処理を検索ブロックのサイズ値が規定された最大ブロックのサイズより大きくなるまで繰り返し実行する（（Ｓ１１４−２〜）Ｓ１１４−５）。
【００５８】
仮に有効なメモリブロックを探し出すことができない場合には、メモリブロック割り当ての失敗につながり、図５の段階Ｓ１１７が実行される。即ち、ブロック割り当て手段１２は、新たなメモリブロックを探し出すことができない場合、各ユーザプログラムの実行コードに対するメモリブロックを再び割り当てる。
【００５９】
あるユーザプログラムが修正されると、リンク手段１３による再配置がなされ、再び配置された実行コードと、それにより変更された実行テーブルが再び生成されて、ダウンロード手段１５を介してＰＬＣ２０でダウンロードされる。
【００６０】
一方、ＣＰＵモジュール２１は、メモリ２１−２に記憶されたユーザプログラムの実行コードを順に繰り返し実行するプログラム実行器２１−３を含んでいて、ＣＰＵモジュール２１は、ＰＬＣプログラム管理装置１０からダウンロードされた実行テーブル２１−４を維持する（maintain）。
【００６１】
また、ＣＰＵモジュール２１は、ＰＬＣプログラム管理装置１０からダウンロードされたユーザプログラムの実行コードを自体のメモリ２１−２にロードする。
【００６２】
以後、プログラム実行器２１−３は、実行テーブル２１−４を参照してメモリ２１−２の実行コードを順次実行する。
【００６３】
図４の例を通して説明したように、プログラム実行器２１−３は、実行テーブルに格納されている情報を利用して、メモリ２１−２の実際のプログラム実行領域にあるユーザプログラム（実行コード）を実行するようになる。
【００６４】
図４の例をメモリの観点から見ると、実際のメモリ２１−２にはプログラム３、プログラム４、プログラム１、プログラム２の順にロードされるが、実行テーブルで指定する順序を参照して実行すると、メモリブロック５、７、１、２に記憶された実行コードの順に実行されるので、結局プログラム１乃至プログラム４が順に実行される。
【００６５】
即ち、実行テーブルが、実行されなければならないプログラムが記憶されたメモリ位置を順に指定するので、プログラム実行器２１−３は常に正しい順序に従って、プログラムを実行することができる。
【００６６】
また、実行テーブルは使われていないメモリブロックに対する格納（preservation）領域を有し、これを利用すると、ＰＬＣ２０を動作中でも新しいユーザプログラムを容易に追加することができる。
【００６７】
例えば、図４の例で、ＰＬＣプログラム管理装置１０から新しく追加されるプログラム５がダウンロードされて、メモリ２１−２のメモリブロック６に追加され、実行テーブルの最初の格納領域にそれに対する情報が追加されていると、プログラム実行器２１−３は、プログラム４の実行後、新しく追加されたプログラム５を実行する。
【００６８】
前述した実施形態は、本発明の理解を助けるためのものであって、本発明は、前述の実施形態に限定されず、本発明の技術的思想を逸脱しない範囲内で当業者によって多様に変形して実施できる。
【符号の説明】
【００６９】
１０    ＰＬＣプログラム管理装置
１０−１    ソースコード
１０−２    実行コード
１０−３    メモリ構成情報
１０−４、２１−４    実行テーブル
１０−７、２１−７    通信モジュール
１１    コンパイル手段
１２    ブロック割り当て手段
１３    リンク手段
１４    実行テーブル生成手段
１５    ダウンロード手段
２０    ＰＬＣ
２１    ＣＰＵモジュール
２１−１    ＣＰＵ
２１−２    メモリ
２１−３    プログラム実行器
２２    電源モジュール
２３    入出力モジュール
【図１】
0006023266.tif 000002
【図２】
0006023266.tif 000003
【図３】
0006023266.tif 000004
【図４】
0006023266.tif 000005
【図５】
0006023266.tif 000006
【図６】
0006023266.tif 000007