(57)【要約】【課題】ＰＬＣにおけるバッファメモリを動的に確保できるようにすること。【解決手段】基本ユニット３の指示部１３はラダー実行部１１により実行されるユーザプログラムに記述されているメモリ割り付け命令（例：ＵＭＡＬＬＯＣ）にしたがって、拡張ユニット４にメモリ割り付けを指示する。拡張ユニット４の記憶装置１１２は被制御装置１６の種類に依存しないデータが記憶される固定領域３１と、被制御装置１６の種類に依存したデータが記憶される自由領域３２とを有している。バッファメモリ管理部１１３は、基本ユニット３の指示部１３による指示にしたがってバッファメモリの自由領域３２内に割り当てメモリ領域３３を割り付ける。【選択図】図７
2017079005.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵユニットと拡張ユニットとを有するプログラマブル・ロジック・コントローラであって、
前記ＣＰＵユニットは、
ユーザプログラムを実行する実行手段と、
前記実行手段により実行される前記ユーザプログラムに記述されているメモリ割り付け命令にしたがって、前記拡張ユニットにメモリ割り付けを指示する指示手段と
を有し、
前記拡張ユニットは、
前記拡張ユニットに接続され、制御対象となる被制御装置の種類に依存しないデータが記憶される固定領域と、前記拡張ユニットに接続され、制御対象となる被制御装置の種類に依存したデータが記憶される自由領域とを有するバッファメモリと、
前記ＣＰＵユニットの指示手段による指示にしたがって、前記バッファメモリの前記自由領域にメモリ領域を割り付ける割付手段と
を有することを特徴とすることを特徴とするプログラマブル・ロジック・コントローラ。
【請求項２】
前記指示手段は、前記拡張ユニットに接続された前記被制御装置の制御を開始するときに当該拡張ユニットにメモリ割り付けを指示することを特徴とする請求項１に記載のプログラマブル・ロジック・コントローラ。
【請求項３】
前記ユーザプログラムに記述される前記メモリ割り付け命令は、
前記拡張ユニットを識別する識別情報と、
前記バッファメモリのサイズに関する情報と、
前記バッファメモリの割り付けが完了したことを示すデバイス値が格納されるデバイスメモリを示す情報と、
前記バッファメモリの先頭アドレスが格納されるデバイスメモリを示す情報と
を含むことを特徴とする請求項１または２に記載のプログラマブル・ロジック・コントローラ。
【請求項４】
前記指示手段は、前記拡張ユニットに接続された前記被制御装置の制御を終了するときに当該拡張ユニットに前記バッファメモリの解放を指示し、
前記拡張ユニットは、前記指示手段により前記バッファメモリの解放を指示されると、当該バッファメモリを解放する解放手段をさらに有することを特徴とする請求項１ないし３のいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項５】
前記指示手段は、前記実行手段により実行される前記ユーザプログラムに記述されている解放命令にしたがって、前記拡張ユニットに前記バッファメモリの解放を指示することを特徴とする請求項４に記載のプログラマブル・ロジック・コントローラ。
【請求項６】
前記ユーザプログラムに記述される解放命令は、
解放対象となる前記拡張ユニットを識別する識別情報と、
解放対象となる前記バッファメモリを特定するアドレスに関する情報と、
前記バッファメモリの解放が完了したことを示すデバイス値が格納されるデバイスメモリを示す情報と、
を含むことを特徴とする請求項５に記載のプログラマブル・ロジック・コントローラ。
【請求項７】
前記固定領域のサイズおよびアドレスと、前記自由領域のサイズおよびアドレスとは不変であり、
前記自由領域で確保される前記バッファメモリのサイズおよびアドレスは前記被制御装置の種類に応じて変更されることを特徴とする請求項１ないし６のいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項８】
前記ＣＰＵユニットは、前記バッファメモリの前記自由領域に割り付けたメモリアドレス情報を、前記ＣＰＵユニット内のデバイスに記憶しておくことを特徴とする請求項１ないし７のいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項９】
ＣＰＵユニットと拡張ユニットとを有するプログラマブル・ロジック・コントローラの制御方法であって、
前記ＣＰＵユニットにおいて、
ユーザプログラムを実行し、
前記ユーザプログラムに記述されているメモリ割り付け命令にしたがって、前記拡張ユニットにメモリ割り付けを指示し、
制御対象となる被制御装置の種類に依存しないデータが記憶される固定領域と、前記拡張ユニットに接続され、制御対象となる被制御装置の種類に依存したデータが記憶される自由領域とを有するバッファメモリを有する前記拡張ユニットにおいて、
前記ＣＰＵユニットからの指示を受信し、
前記指示にしたがって、前記バッファメモリの前記自由領域にメモリ領域を確保する
ことを特徴とすることを特徴とするプログラマブル・ロジック・コントローラの制御方法。
【請求項１０】
プログラマブル・ロジック・コントローラの拡張ユニットに接続されるＣＰＵユニットであって、
ユーザプログラムを実行する実行手段と、
前記実行手段により実行される前記ユーザプログラムに記述されているメモリ割り付け命令にしたがって、前記拡張ユニットにメモリ割り付けを指示する指示手段と
を有することを特徴とすることを特徴とするＣＰＵユニット。
【請求項１１】
プログラマブル・ロジック・コントローラのＣＰＵユニットに接続される拡張ユニットであって、
前記拡張ユニットに接続され、制御対象となる被制御装置の種類に依存しないデータが記憶される固定領域と、前記拡張ユニットに接続され、制御対象となる被制御装置の種類に依存したデータが記憶される自由領域とを有するバッファメモリと、
前記ＣＰＵユニットによる指示にしたがって、前記バッファメモリの前記自由領域にメモリ領域を割り付ける割付手段と
を有することを特徴とすることを特徴とする拡張ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブル・ロジック・コントローラ、制御方法、ＣＰＵユニットおよび拡張ユニットに関する。
【背景技術】
【０００２】
プログラマブル・ロジック・コントローラ（以下、ＰＬＣと称す）は、ＦＡ（Factory Automation）制御システムにおいて広く使用されているシーケンス制御装置であり、ラダープログラムと呼ばれる専用プログラムにしたがって動作する。操作者（オペレータ）は、リミットスイッチ、センサ、温度計などの入力機器や、電磁開閉器、ソレノイド、モータ、アクチュエータ、シリンダ、リレー、位置決めシステムなどの出力機器をＰＬＣに接続し、ラダープログラムによってこれらの被制御機器を制御する。
【０００３】
オペレータは、パーソナルコンピュータ（以下、ＰＣと称す）などのプログラム作成支援装置上でラダープログラムを作成し、ＰＣとＰＬＣを接続し、ラダープログラムをＰＬＣの記憶部に記憶させる。ＰＬＣの記憶部にはデバイス情報等の各種データも記憶される。デバイス情報とは、入力機器からの入力状態、出力機器への出力状態およびラダープログラム上で設定される内部リレー（補助リレー）、タイマー、カウンタ、データメモリ等の状態を示す情報である。デバイスとは、デバイス情報を格納するために設けられたメモリ上の領域を指す名称である。ＰＬＣにプログラム作成支援装置を接続することで、ＰＬＣが保持しているデバイス情報（デバイスの値）をプログラム作成支援装置に表示させ、視認することもできる。
【０００４】
ＰＬＣは一般に基本ユニット（ＣＰＵユニット）と拡張ユニットにより構成される。ＣＰＵユニットと拡張ユニットは予め割り付けられたデバイスを通じてスキャン周期ごとに実行されるリフレッシュによってデバイス値を相互に交換する。このようなデバイスはデータメモリと呼ばれることもある。データメモリとは別に拡張ユニットにはバッファメモリが設けられる（特許文献１）。ＣＰＵユニットはラダープログラム中に記述された専用の命令語にしたがってダイレクト通信によってバッファメモリにアクセスし、バッファ値を読み書きする。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１０２４７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
拡張ユニットの物理メモリにはデータメモリのメモリ領域とバッファメモリのメモリ領域とが固定的に割り当てられている。ある機能に割り付けられたデータメモリには他の機能が割り付けられることはなく、また、そのアドレスも変更されることはない。どの機能がどのアドレスに割り付けられているかは取扱説明書に記述されているため、ラダープログラムのプログラマーは取扱説明書を参考にプログラミングを実行する。バッファメモリについても機能（格納されるバッファ値の内容）とアドレスは固定されており、取扱説明書に記述されている。
【０００７】
しかし、拡張ユニットに接続して制御可能な被制御機器（アプリケーション）の種類が増えるにつれて、バッファメモリのサイズが増大している。なぜなら、各アプリケーション用のバッファメモリは拡張ユニットの設計時に予約されているため、たとえ、あるアプリケーションが使用されない場合であってもそのアプリケーション用のバッファメモリは確保されている。したがって、新規のアプリケーションを追加するには、拡張ユニットのバッファメモリのメモリ空間を拡大する必要がある。また、メモリ空間のサイズにも限界があるため、やがて新規のアプリケーションを追加できなくなる。
【０００８】
そこで、本発明は、ＰＬＣにおけるバッファメモリを動的に確保できるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、たとえば、
ＣＰＵユニットと拡張ユニットとを有するプログラマブル・ロジック・コントローラであって、
前記ＣＰＵユニットは、
ユーザプログラムを実行する実行手段と、
前記実行手段により実行される前記ユーザプログラムに記述されているメモリ割り付け命令にしたがって、前記拡張ユニットにメモリ割り付けを指示する指示手段と
を有し、
前記拡張ユニットは、
前記拡張ユニットに接続され、制御対象となる被制御装置の種類に依存しないデータが記憶される固定領域と、前記拡張ユニットに接続され、制御対象となる被制御装置の種類に依存したデータが記憶される自由領域とを有するバッファメモリと、
前記ＣＰＵユニットの指示手段による指示にしたがって、前記バッファメモリの前記自由領域にメモリ領域を割り付ける割付手段と
を有することを特徴とすることを特徴とするプログラマブル・ロジック・コントローラを提供する。
【発明の効果】
【００１０】
本発明によればＰＬＣにおけるバッファメモリを動的に確保できるようになる。
【図面の簡単な説明】
【００１１】
【図１】ＰＬＣシステムの一例を示す図
【図２】ユーザプログラムの一例を示す図
【図３】プログラム作成支援装置の一例を示す図
【図４】ＰＬＣの一例を示す図
【図５】スキャンタイムを説明するための図
【図６】ユーザプログラムの一例を示す図
【図７】ＣＰＵユニットと拡張ユニットの機能を示す図
【図８】割り付け処理を示すフローチャート
【図９】割り付け処理を示すフローチャート
【図１０】解放処理を示すフローチャート
【図１１】解放処理を示すフローチャート
【発明を実施するための形態】
【００１２】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念および下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【００１３】
はじめにプログラマブル・ロジック・コントローラ（ＰＬＣ、単にプログラマブルコントローラと呼ばれてもよい）を当業者にとってよりよく理解できるようにするために、一般的なＰＬＣの構成とその動作について説明する。
【００１４】
図１は、本発明の実施の形態によるプログラマブル・ロジック・コントローラシステムの一構成例を示す概念図である。図１に示すように、このシステムは、ラダープログラムなどのユーザプログラムの編集を行うためのプログラム作成支援装置１と、工場等に設置される各種制御装置を統括的に制御するためのＰＬＣ（プログラマブル・ロジック・コントローラ）２とを備えている。ユーザプログラムは、ラダー言語やモーションフローなどのグラフィカルプログラミング言語を用いて作成されてもよいし、Ｃ言語などの高級プログラミング言語を用いて作成されてもよい。以下では、説明の便宜上、ユーザプログラムはラダープログラムとする。ＰＬＣ２は、ＣＰＵが内蔵された基本ユニット３と１つないし複数の拡張ユニット４を備えている。基本ユニット３に対して１つないし複数の拡張ユニット４が着脱可能となっている。基本ユニット３はＣＰＵユニットと呼ばれることもある。
【００１５】
基本ユニット３には、表示部５及び操作部６が備えられている。表示部５には、基本ユニット３に取り付けられている各拡張ユニット４の動作状況などを表示することができ、表示部５の表示内容は、操作部６を操作することにより切り替えることができる。表示部５には、通常、ＰＬＣ２内のデバイスの現在値（デバイス値）やＰＬＣ２内で生じたエラー情報などが表示される。なお、デバイスとは、デバイス値を格納するために設けられたメモリ上の領域を指す名称であり、デバイスメモリと呼ばれてもよい。デバイス値とは、入力機器からの入力状態、出力機器への出力状態およびユーザプログラム上で設定される内部リレー（補助リレー）、タイマー、カウンタ、データメモリ等の状態を示す情報である。
【００１６】
拡張ユニット４は、ＰＬＣ２の機能を拡張するために用意されており、基本ユニット３に対して側方から取り付けられる。１つ目の拡張ユニット４は、基本ユニット３に対して側方から直接的に取り付けられる。２つ目以降の拡張ユニット４は、既に取り付けられている拡張ユニット４に対して、側方から直列的に取り付けられる。たとえば、基本ユニット３の右側面と拡張ユニット４の左側面とが連結面になっている。同様に、１つ目の拡張ユニット４の右側面の形状等は基本ユニット３の右側面とほぼ同じであるため、１つ目の拡張ユニット４の右側面に２つ目の拡張ユニット４の左側面が連結される。このような連結方式は、数珠つなぎ方式とかデイジーチェーン方式と呼ばれてもよい。各連結面にはコネクタが設けられており、通信や電力供給を行うためのバスもコネクタを介して連結される。このようにして、基本ユニット３と複数の拡張ユニット４が直列的に取り付けられると、各拡張ユニット４内に備えられた配線（例：バス）を介して、各拡張ユニット４が基本ユニット３に対して通信可能に接続される。各拡張ユニット４には、その拡張ユニット４の機能に対応する被制御装置１６（図４）が接続され、これにより、各被制御装置１６が拡張ユニット４を介して基本ユニット３に接続される。被制御装置１６には、センサなどの入力装置や、アクチュエータなどの出力装置が含まれる。
【００１７】
プログラム作成支援装置１は、たとえば、携帯可能ないわゆるノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部７及び操作部８を備えている。ＰＬＣ２を制御するためのユーザプログラムの一例であるラダープログラムは、プログラム作成支援装置１を用いて作成され、その作成されたラダープログラムは、プログラム作成支援装置１内でニモニックコードに変換される。そして、プログラム作成支援装置１を、ＵＳＢ(Universal Serial Bus)などの通信ケーブル９を介してＰＬＣ２の基本ユニット３に接続し、ニモニックコードに変換されたラダープログラムをプログラム作成支援装置１から基本ユニット３に送ると、そのラダープログラムが基本ユニット３内でマシンコードに変換され、基本ユニット３に備えられたメモリ内に記憶される。なお、ここではニモニックコードを基本ユニット３に送信するようにしているが、本発明はこれに限られず、例えばニモニックコードを更に中間コードに変換し、中間コードを基本ユニット３に送信するようにしてもよい。
【００１８】
なお、図１では示していないが、プログラム作成支援装置１の操作部８には、プログラム作成支援装置１に接続されたマウスなどのポインティングデバイスが含まれていてもよい。また、プログラム作成支援装置１は、ＵＳＢ以外の他の通信ケーブル９を介して、ＰＬＣ２の基本ユニット３に対して着脱可能に接続されるような構成であってもよい。
【００１９】
図２は、ラダープログラムの作成時にプログラム作成支援装置１の表示部７に表示されるラダー図Ｌｄの一例を示す図である。図２に示すように、ＰＬＣ２を制御するためのラダープログラムは、プログラム作成支援装置１の表示部７にマトリックス状に表示される複数のセル１８内に仮想デバイスのシンボル１９を適宜配置して、視覚的なリレー回路を表すラダー図Ｌｄを構築することにより作成される。
【００２０】
ラダー図Ｌｄには、たとえば、１０列×Ｎ行（Ｎは任意の自然数）のセル１８が配置されている。そして、各行のセル１８内に、図２に示す左側から右側に向かって、時系列的に仮想デバイスのシンボル１９を適宜配置することにより、視覚的なリレー回路を作成することができる。作成されるリレー回路は、１行で表される直列的なリレー回路であってもよいし、複数行に並列的に表されたリレー回路を互いに結合することにより作成された、並列的なリレー回路であってもよい。
【００２１】
図２に示すリレー回路は、入力装置からの入力信号に基づいてオン／オフされる３つの仮想デバイス（以下、「入力デバイス」と呼ぶ。）のシンボル１９ａ，１９ｂ，１９ｃと、出力装置の動作を制御するためにオン／オフされる仮想デバイス（以下、「出力デバイス」と呼ぶ。）のシンボル１９ｄとが適宜結合されることにより構成されている。
【００２２】
各入力デバイスのシンボル１９ａ，１９ｂ，１９ｃの上方に表示されている文字（「Ｒ０００１」、「Ｒ０００２」及び「Ｒ０００３」）は、その入力デバイスのデバイス名（アドレス名）２１を表している。各入力デバイスのシンボル１９ａ，１９ｂ，１９ｃの下方に表示されている文字（「フラグ１」、「フラグ２」及び「フラグ３」）は、その入力デバイスに対応付けられたデバイスコメント２２を表している。出力デバイスのシンボル１９ｄの上方に表示されている文字（「原点復帰」）は、その出力デバイスの機能を表す文字列からなるラベル２３である。
【００２３】
図２に示す例では、デバイス名「Ｒ０００１」及び「Ｒ０００２」にそれぞれ対応する２つの入力デバイスのシンボル１９ａ，１９ｂが直列的に結合されることにより、ＡＮＤ回路が構成されている。また、これらの２つの入力デバイスのシンボル１９ａ，１９ｂからなるＡＮＤ回路に対して、デバイス名「Ｒ０００３」に対応する入力デバイスのシンボル１９ｃが並列的に結合されることにより、ＯＲ回路が構成されている。すなわち、このリレー回路では、２つのシンボル１９ａ，１９ｂに対応する入力デバイスがいずれもオンした場合、又は、シンボル１９ｃに対応する入力デバイスがオンした場合にのみ、シンボル１９ｄに対応する出力デバイスがオンされるようになっている。
【００２４】
図３は、図１のプログラム作成支援装置１の電気的構成について説明するためのブロック図である。図３に示すように、プログラム作成支援装置１には、ＣＰＵ２４、表示部７、操作部８、記憶装置２５及び通信部２６が備えられている。表示部７、操作部８、記憶装置２５及び通信部２６は、それぞれＣＰＵ２４に対して電気的に接続されている。記憶装置２５は、少なくともＲＡＭを含む構成であり、プログラム記憶部２７と、編集ソフト記憶部２８とを備えている。
【００２５】
ユーザは、編集ソフト記憶部２８に記憶されている編集ソフトをＣＰＵ２４に実行させて、操作部８を通じてラダープログラムを編集する。ここで、ラダープログラムの編集には、ラダープログラムの作成及び変更が含まれる。編集ソフトを用いて作成されたラダープログラムは、プログラム記憶部２７に記憶される。また、ユーザは、必要に応じてプログラム記憶部２７に記憶されているラダープログラムを読み出し、そのラダープログラムを、編集ソフトを用いて変更することができる。通信部２６は、通信ケーブル９を介してプログラム作成支援装置１を基本ユニット３に通信可能に接続するためのものである。
【００２６】
図４は、ＰＬＣ２の電気的構成について説明するためのブロック図である。図４に示すように、基本ユニット３には、ＣＰＵ１０、表示部５、操作部６、記憶装置１２及び通信部１４が備えられている。表示部５、操作部６、記憶装置１２、及び通信部１４は、それぞれＣＰＵ１０に電気的に接続されている。記憶装置１２は、ＲＡＭやＲＯＭ、メモリカードなどを含んでもよく、ラダープログラムなどを記憶する。記憶装置１２には、プログラム作成支援装置１から入力されたラダープログラムやユーザデータが上書きして記憶される。また、記憶装置１２には基本ユニット用の制御プログラムも格納されている。図４が示すように基本ユニット３と拡張ユニット４とは拡張バスの一種であるユニット外部バス９０を介して接続されている。なお、ユニット外部バス９０に関する通信機能は通信部１４の一部として実装されてもよい。
【００２７】
図５は、本発明の実施の形態に係るプログラマブルコントローラの基本ユニット３でのスキャンタイムの構成を示す模式図である。図５が示すように１つのスキャンタイムＴは、入出力のリフレッシュを行うためのユニット間通信２０１、プログラム実行２０２、ＥＮＤ処理２０４により構成されている。ユニット間通信２０１で、基本ユニット３は、ラダープログラムを実行して得られた出力データを基本ユニット３内の記憶装置１２から外部機器などに送信するとともに、受信データを含めた入力データを基本ユニット３内の記憶装置１２に取り込む。たとえば、基本ユニット３のデバイスに記憶されているデバイス値は出力リフレッシュによって拡張ユニット４のデバイスに反映される。同様に、拡張ユニット４のデバイスに記憶されているデバイス値は入力リフレッシュによって基本ユニット３のデバイスに反映される。なお、リフレッシュ以外のタイミングでデバイス値をユニット間で更新する仕組みが採用されてもよい。ただし、基本ユニット３のデバイスは基本ユニット３が随時書き換えており、同様に、拡張ユニット４のデバイスは拡張ユニット４が随時書き換えている。つまり、基本ユニット３のデバイスは基本ユニット３の内部の装置によって随時アクセス可能であり、同様に、拡張ユニット４のデバイスは拡張ユニット４の内部の装置によって随時アクセス可能になっている。基本ユニット３と拡張ユニット４との間では基本的にリフレッシュのタイミングにおいて相互にデバイス値を更新して同期する。プログラム実行２０２で、基本ユニット３は、更新された入力データを用いてプログラムを実行（演算）する。基本ユニット３はプログラムの実行によりデータを演算処理する。なお、ＥＮＤ処理とは、プログラム作成支援装置１や基本ユニット３に接続された表示器（図示せず）等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。
【００２８】
このように、プログラム作成支援装置１はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをＰＬＣ２に転送する。ＰＬＣ２は、入出力リフレッシュ、ラダープログラムの実行およびＥＮＤ処理を１サイクル（１スキャン）として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種入力機器（センサ等）からのタイミング信号に基づいて、各種出力機器（モータ等）を制御する。よって、ＰＬＣ２は汎用のパーソナルコンピュータ（ＰＣ）とは全く異なる動きをする。
【００２９】
＜バッファメモリの動的割り付け＞
本実施例では従来においてバッファメモリの固定的に割り付けられていた領域の少なくとも一部を拡張ユニット４の記憶装置内に動的に割り付ける手法を提案する。バッファメモリに固定領域と自由領域とを分け、自由領域に動的に割り付ける。本実施例では、拡張ユニット４を制御するためのメインとなるラダープログラムまたはこれと別のラダープログラム（モジュールと呼ばれてもよい）内に記述される新たな命令語が導入される。
【００３０】
図６は、プログラム作成支援装置１により作成されるラダープログラムの一例を示す図である。ＵＭＡＬＬＯＣとＵＦＲＥＥは新規に導入された命令語である。ＵＭＡＬＬＯＣは、バッファメモリ内にメモリ領域を動的に割り付けるためのメモリ割り付け命令である。割り付けるメモリ領域を割り付けメモリ領域と呼ぶ。ＵＭＡＬＬＯＣは、たとえば、４つの情報を有している。図６において左から１番目に記述されている情報は、メモリ領域を割り付ける対象となる拡張ユニット４を識別する識別情報（ユニット番号）である。基本ユニット３には複数の拡張ユニット４が接続されるため、ＵＭＡＬＬＯＣがどの拡張ユニット４を対象としているかを特定する必要がある。そのため、拡張ユニット４を識別する識別情報が指定される。これによりバッファメモリ内にメモリ領域を動的に割り付けられる拡張ユニット４を選択することが可能となる。図６において左から２番目に記述されている情報は、割り付けられるバッファメモリのメモリ領域のサイズ（ワード数）を示す情報である。これにより、割り付けられるバッファメモリのメモリ領域のサイズをアプリケーションごとに可変とすることが可能となる。なお、アプリケーションとは拡張ユニット４によって制御される制御対象である。図６において左から３番目に記述されている情報は、バッファメモリのメモリ領域の割り付けが完了したことを示すデバイス値が格納されるデバイスメモリを示す情報である。拡張ユニット４に十分な空きがなければ指定されたサイズのバッファメモリにメモリ領域を割り付けることができない。もし、その状態でユーザプログラムを実行してしまうと、基本ユニット３から拡張ユニット４のバッファメモリを読み書きできず、ＰＬＣ２の動作が不安定となろう。よって、バッファメモリの割り付けが完了してからユーザプログラムを実行することが求められよう。割り付け完了の済／未済は１ビットで表現可能なため、通常は、リレーデバイスが指定される。基本ユニット３は、このリレーデバイスのデバイス値を監視することで、拡張ユニット４においてバッファメモリの割り付けが完了したかどうかを判定する。図６において左から４番目に記述されている情報は、割り付けられたバッファメモリの先頭アドレスに関する情報であり、たとえば、先頭アドレスが格納されるデバイスメモリを示す。本実施例では、拡張ユニット４が動的にバッファメモリを割り付けるため、バッファメモリを特定するためのアドレスの情報を基本ユニット３が知る必要がある。そのため、拡張ユニット４はバッファメモリを割り付けたアドレス範囲のうち先頭アドレスを、基本ユニット３により指定されたデバイスメモリに格納する。
【００３１】
図６においてＵＷＲＩＴはバッファメモリに情報を書き込む命令である。図６において左から１番目に記述されている情報は、書き込み対象となるバッファメモリを有している拡張ユニット４を識別する識別情報（ユニット番号）である。図６において左から２番目に記述されている情報は、バッファメモリを特定する情報であり、たとえば、バッファメモリの先頭アドレスを格納しているデバイスメモリを示している。図６において左から３番目に記述されている情報は、バッファメモリに格納される情報であり、たとえば、書き込まれる情報を保持しているデバイスメモリを示す情報などである。この例では、データメモリＤＭ１０に保持されている情報がバッファメモリに格納される。
【００３２】
図６においてＵＲＥＡＤはバッファメモリから情報を読み出す命令である。図６において左から１番目に記述されている情報は、読み出し対象となるバッファメモリを有している拡張ユニット４を識別する識別情報（ユニット番号）である。図６において左から２番目に記述されている情報は、バッファメモリを特定する情報であり、たとえば、バッファメモリの先頭アドレスを格納しているデバイスメモリを示している。図６において左から３番目に記述されている情報は、バッファメモリから読み出された情報を格納することになるデバイスメモリを示す情報などである。この例では、拡張ユニット４のバッファメモリから読み出された情報がデータメモリＤＭ２０に格納される。
【００３３】
ＵＦＲＥＥは、ＵＭＡＬＬＯＣによって割り付けられたバッファメモリを解放する命令である。図６において左から１番目に記述されている情報は、バッファメモリを解放する対象となる拡張ユニット４を識別する識別情報（ユニット番号）である。図６において左から２番目に記述されている情報は、解放対象となるバッファメモリを特定する情報であり、たとえば、当該バッファメモリの先頭アドレスを格納しているデータメモリを示している。図６において左から３番目に記述されている情報は、バッファメモリの解放が完了したかどうかを示す情報が格納されるリレーデバイスを示す情報である。基本ユニット３は、このリレーデバイスのデバイス値を監視することで、拡張ユニット４においてバッファメモリの解放が完了したかどうかを判定する。一般にはＰＬＣの動作中にアプリケーションの種類が変更されることは稀であるため、ＵＦＲＥＥは省略されてもよい。たとえば、ＰＬＣの電源スイッチをオフにすることで、バッファメモリの割り付けは無効となるため、ＵＦＲＥＥは記述されなくてもよい。ただし、ＰＬＣの動作中にアプリケーションの種類が変更されることが想定される場合、ＵＦＲＥＥが記述される必要がある。これによりあるアプリケーションによって使用されていた記憶領域を他のアプリケーションのために割り当て直すことが可能となる。
【００３４】
図７はバッファメモリの動的な割り当てに関与する基本ユニット３の機能と拡張ユニット４の機能を説明する図である。基本ユニット３のＣＰＵ１０は記憶装置１２に記憶されている制御プログラム４０を実行することで様々な機能を実現する。ＣＰＵ１０においてラダー実行部１１はユーザプログラムであるラダープログラムを実行する演算ユニットである。ユーザプログラムの一例としてラダープログラム４３を採用するが、他のグラフィカルプログラミング言語で記述されるユーザプログラムであってもよい。ラダー実行部１１は、ラダープログラム（中間コード）４３を実行形式のコードに変換する機能を備えていてもよい。ＣＰＵ１０はラダー実行部１１に相当する演算部を、制御プログラム４０を実行するＣＰＵコアとは別のＣＰＵコアやＡＳＩＣとして備えていてもよい。指示部１３はバッファメモリの割り付けと解放を拡張ユニット４に指示する機能である。指示部１３はラダープログラム４３に記述されている割り付け命令にしたがってバッファメモリの割り付けを拡張ユニット４に指示する。たとえば、指示部１３はバッファメモリを割り付けるためのメッセージ通信の要求を通信部１４にセットすることで、通信部１４がメッセージ通信を実行する。ＣＰＵユニットは、拡張ユニット４の自由領域３２の割り当てメモリ領域にメモリの割り付けを行った後、記憶部（デバイス）１２に割り付けを行ったメモリ領域のアドレスを記憶する。
【００３５】
記憶装置１２には、基本ユニット３のシステムプログラム（ファームウエア）である制御プログラム４０と、プログラム作成支援装置１から転送されてきたラダープログラム４３などが含まれている。なお、ラダープログラム４３は、スキャン周期ごとに繰り返し実行さえるメインプログラムと、バッファメモリの割り付けと解放を実行するモジュールプログラムとに分かれていてもよい。たとえば、ラダー実行部１１は、操作部６を通じて被制御装置１６の制御の開始（つまり、ラダープログラム４３の実行）を指示されると、モジュールプログラムを実行してバッファメモリの割り付けを指示してから、メインプログラムを実行する。つまり、このような初期化モジュールは最初のスキャンで実行されるだけであり、２回目以降のスキャンでは実行されない。通信部１４は拡張バスを介して拡張ユニット４の通信部１１４と接続され、通信を実行する。また、操作部６からアプリケーションの変更などが指示されると、ラダー実行部１１は、拡張ユニット４に被制御装置１６の制御を終了させ、バッファメモリの解放を指示する。
【００３６】
拡張ユニット４はＣＰＵ１１０を備えている。ＣＰＵ１１０は被制御装置１６を制御する機能制御部１１１とバッファメモリの割り付けと解放を行うバッファメモリ管理部１１３を有している。このようにバッファメモリ管理部１１３は割り付け機能と解放機能とを有している。
【００３７】
記憶装置１１２はＲＡＭやＲＯＭなどを含む。とりわけ、ＲＡＭにはデバイスメモリに加えて、バッファメモリとして使用される固定領域３１と自由領域３２とが確保されている。固定領域３１は制御対象となる被制御装置１６の種類に依存しないデータが記憶される記憶領域である。自由領域３２は制御対象となる被制御装置１６の種類に依存したデータが記憶される記憶領域である。自由領域３２には割り付け命令にしたがっていくつかのアプリケーションで必要なメモリ領域が確保される割り当てメモリ領域が存在する。なお、固定領域３１のサイズとアドレス範囲と自由領域３２のサイズとアドレス範囲は、物理メモリが増設されない限り、不変である。ただし、以下で説明するように、自由領域３２の内部に割り付けられる割り当てメモリ領域の数、サイズ、アドレスは、被制御装置１６（つまりアプリケーション）に応じて可変である。
【００３８】
バッファメモリ管理部１１３は、通信部１１４を介して基本ユニット３とメッセージ通信を行い、割り付け命令や解放命令を受信する。たとえば、バッファメモリ管理部１１３はＵＭＡＬＬＯＣにより定義されたサイズのバッファメモリを自由領域３２の先頭から順番に確保する。バッファメモリ管理部１１３は確保したバッファメモリの先頭アドレスを、指示部１３により指定されたデバイスメモリ（例：ＤＭ０）に格納する。また、バッファメモリ管理部１１３はバッファメモリの割り付けに成功すると、成功したことを示す情報を、指示部１３により指定されたデバイスメモリ（例：Ｒ０００）に格納する。なお、自由領域３２に十分な空きが無い場合、バッファメモリ管理部１１３は割り付けに失敗したことを示す情報を指示部１３により指定されたデバイスメモリ（例：Ｒ０００）に格納する。指示部１３は、これらのデバイスメモリ（例：ＤＭ０とＲ０００）を参照することで、割り付けを指示したバッファメモリの先頭アドレスと、割り付けの成功の有無を認識することができる。
【００３９】
＜基本ユニットにおける割り付けフロー＞
図８は基本ユニット３のＣＰＵ１０が実行するバッファメモリの割り付け処理を示すフローチャートである。Ｓ１でＣＰＵ１０（ラダー実行部１１）はラダープログラム４３に記述された命令語を順番に実行して行くことで、バッファメモリの割り付け命令語からバッファサイズなどの割り付けパラメータを取得する。割り付けパラメータは、たとえば、ユニット番号（例：１番）、サイズ（例：１ワード）、完了通知を格納するデバイス（例：Ｒ０００）、バッファメモリの先頭アドレスを格納するデバイス（例：ＤＭ０）などである。
【００４０】
Ｓ２でＣＰＵ１０（指示部１３）は通信部１４を通じてメッセージ通信により割り付け命令を送信する。割り付け命令を搬送するメッセージには、上述したユニット番号とサイズなどの情報が含まれている。
【００４１】
Ｓ３でＣＰＵ１０（指示部１３）は通信部１４を通じてメッセージ通信により割り当て結果を示すメッセージを受信する。Ｓ４でＣＰＵ１０（指示部１３）は割当に成功したかどうかを示す情報やバッファメモリに割り付けられた先頭アドレスを示すアドレス情報などを受信したメッセージから取得し、指定デバイスに書き込む。たとえば、ＣＰＵ１０（指示部１３）は受信メッセージから取得した割り当て成否を、ラダープログラム４３に記述された命令語により指定されたデバイス（例：Ｒ０００）に書き込む。また、ＣＰＵ１０（指示部１３）は受信メッセージから取得したアドレス情報を、ラダープログラム４３に記述された命令語により指定されたデバイス（例：ＤＭ０）に書き込む。なお、メッセージにおけるアドレス情報に所定値（例：０）を書き込むことで、割り当て失敗を示してもよい。
【００４２】
Ｓ３やＳ４に関する通信は入力リフレッシュによって実現されてもよい。つまり、命令語により指定されたデバイスにアドレス情報や割り当ての成否が拡張ユニット４により書き込まれる。ＣＰＵ１０（指示部１３）は入力リフレッシュによって拡張ユニット４からこれらのデバイスの値を取得する。
【００４３】
Ｓ５でＣＰＵ１０（指示部１３）は指定デバイス（例：Ｒ０００）の内容を参照し、バッファメモリの割り当てが成功したかどうかを判定する。割り当てに失敗していれば、Ｓ６に進み、ＣＰＵ１０（ラダー実行部１１）はラダープログラム４３を停止し、表示部５に警告メッセージを表示する。なお、割り当てに成功していれば、ＣＰＵ１０（ラダー実行部１１）は次の命令語を実行する。
【００４４】
＜拡張ユニットにおける割り付けフロー＞
図９は拡張ユニット４のＣＰＵ１１０が実行するバッファメモリの割り付け処理を示すフローチャートである。Ｓ１１でＣＰＵ１１０（バッファメモリ管理部１１３）はメッセージ通信により割り付け命令を含むメッセージを受信する。なお、ＣＰＵ１１０（バッファメモリ管理部１１３）はメッセージに含まれているユニット番号と自己に割り当てられているユニット番号とが一致しているかどうかにより、自己宛のメッセージを抽出する。
【００４５】
Ｓ１２でＣＰＵ１１０（バッファメモリ管理部１１３）は割り付け命令からバッファメモリの割り付けサイズを取得する。Ｓ１３でＣＰＵ１１０（バッファメモリ管理部１１３）は自由領域３２のうち空き領域のサイズを取得する。バッファメモリ管理部１１３は、自由領域３２内のどのアドレスが使用されていて、どのアドレスが未使用であるかを管理するためのテーブルを保持している。よって、バッファメモリ管理部１１３は、このテーブルを参照することで空き領域のサイズを取得できる。
【００４６】
Ｓ１４でＣＰＵ１１０（バッファメモリ管理部１１３）は割り付け命令により指定されたサイズと、空き領域のサイズとを比較することでバッファメモリを自由領域３２内に割り当て可能かどうかを判定する。割り付け命令により指定されたサイズが空き領域のサイズ以下であれば割り当て可能であるため、Ｓ１５に進む。Ｓ１５でＣＰＵ１１０（バッファメモリ管理部１１３）は割り付けた割り当てメモリ領域３３の先頭アドレスなどを含むメッセージをメッセージ通信により基本ユニット３に送信する。なお、バッファメモリ管理部１１３は、割り当てメモリ領域３３に割り当てたアドレスを割り当て済みとしてテーブルに登録する。一方、Ｓ１４で割り当て不可能と判定すると、Ｓ１６に進み、ＣＰＵ１１０（バッファメモリ管理部１１３）は割り当てに失敗したことを示すメッセージをメッセージ通信により送信する。Ｓ１５やＳ１６に関する通信は入力リフレッシュによって実現されてもよい。つまり、ＣＰＵ１１０（バッファメモリ管理部１１３）は命令語により指定されたデバイスにアドレス情報や割り当ての成否を書き込み、入力リフレッシュによって基本ユニット３に伝達されてもよい。
【００４７】
＜基本ユニットにおける解放フロー＞
図１０は基本ユニット３のＣＰＵ１０が実行するバッファメモリの解放処理を示すフローチャートである。Ｓ２１でＣＰＵ１０（ラダー実行部１１）はラダープログラム４３に記述された命令語を順番に実行して行くことで、バッファメモリを解放するための命令語から解放対象となるバッファメモリを特定するパラメータを取得する。このパラメータは、たとえば、ユニット番号（例：１番）やバッファメモリの先頭アドレスを格納するデバイス（例：ＤＭ０）などである。
【００４８】
Ｓ２２でＣＰＵ１０（指示部１３）は通信部１４を通じてメッセージ通信により解放命令を送信する。解放命令を搬送するメッセージには、上述したユニット番号と先頭アドレスなどの情報が含まれている。ＣＰＵ１０（指示部１３）はバッファメモリの先頭アドレスを格納するデバイス（例：ＤＭ０）からアドレスを取得して、メッセージに搭載する。
【００４９】
Ｓ２３でＣＰＵ１０（指示部１３）は通信部１４を通じてメッセージ通信により解放結果を示すメッセージを受信する。Ｓ２４でＣＰＵ１０（指示部１３）は受信したメッセージに含まれている解放に成功したかどうかを示す情報を取得し、指定デバイス（例：Ｒ００２）に書き込む。たとえば、ＣＰＵ１０（指示部１３）は受信メッセージから取得した解放成否を、ラダープログラム４３に記述された命令語により指定されたデバイス（例：Ｒ００２）に書き込む。
【００５０】
Ｓ２５でＣＰＵ１０（指示部１３）は指定デバイス（例：Ｒ００２）の内容を参照し、バッファメモリの解放が成功したかどうかを判定する。解放に成功すると、ＣＰＵ１０（ラダー実行部１１）は解放処理を終了する。
【００５１】
＜拡張ユニットにおける解放フロー＞
図１１は拡張ユニット４のＣＰＵ１１０が実行するバッファメモリの解放処理を示すフローチャートである。Ｓ３１でＣＰＵ１１０（バッファメモリ管理部１１３）はメッセージ通信により解放命令を含むメッセージを受信する。なお、ＣＰＵ１１０（バッファメモリ管理部１１３）はメッセージに含まれているユニット番号と自己に割り当てられているユニット番号とが一致しているかどうかにより、自己宛のメッセージを抽出する。
【００５２】
Ｓ３２でＣＰＵ１１０（バッファメモリ管理部１１３）は解放命令から解放対象として指定されている割り当てメモリ領域３３を取得する。なお、解放対象の割り当てメモリ領域３３は先頭アドレスによって指定される。なお、バッファメモリ管理部１１３はテーブルを参照することで、割り当てメモリ領域３３のアドレス範囲を特定する。たとえば、テーブルには、バッファメモリごとの先頭アドレスとサイズを示す情報が割り付けの際に登録されている。
【００５３】
Ｓ３３でＣＰＵ１１０（バッファメモリ管理部１１３）は指定された割り当てメモリ領域３３を解放する。たとえば、ＣＰＵ１１０（バッファメモリ管理部１１３）は割り当てメモリ領域３３に割り付けられていたアドレスを空いているものとして、テーブルに登録する。Ｓ３４でＣＰＵ１１０（バッファメモリ管理部１１３）は解放成功を示すメッセージをメッセージ通信により基本ユニット３に送信する。
【００５４】
＜まとめ＞
図１や図３によれば、基本ユニット３と拡張ユニット４とを有するＰＬＣ２が提供される。図７を用いて説明したように、基本ユニット３は、ユーザプログラムを実行する実行手段としてラダー実行部１１を備えている。また、指示部１３は、ラダー実行部１１により実行されるユーザプログラムに記述されているメモリ割り付け命令（例：ＵＭＡＬＬＯＣ）にしたがって、拡張ユニット４にメモリ割り付けを指示する指示手段の一例である。拡張ユニット４は、記憶装置１１２を有している。記憶装置１１２は、拡張ユニット４に接続され、制御対象となる被制御装置１６の種類に依存しないデータが記憶される固定領域３１と、拡張ユニット４に接続され、制御対象となる被制御装置１６の種類に依存したデータが記憶される自由領域３２とを有している。バッファメモリ管理部１１３は、基本ユニット３の指示部１３による指示にしたがって、バッファメモリ内の自由領域３２内にプログラムで使用する領域として割り当てメモリ領域３３を割り付ける割付手段として機能する。これらにより、ＰＬＣ２における割り当てメモリ領域３３を動的に確保できるようになる。
【００５５】
基本ユニット３の指示部１３は、拡張ユニット４に接続された被制御装置１６の制御を開始するときに当該拡張ユニット４にメモリ割り付けを指示してもよい。割り当てメモリ領域３３を割り付けるタイミングはいくつか考えられる。図６が示すように、少なくとも割り当てメモリ領域３３が使用される直前までに割り当てられれば十分である。ただし、一般には、メインプログラムとなるラダープログラムが開始されることで被制御装置１６の制御が開始されるため、メインプログラムの開始前にモジュールプログラム（初期化モジュール）によって割り当てメモリ領域３３が割り付けられてもよい。なお、このモジュールプログラは、メインプログラムの１スキャン目にだけ実行される初期化モジュールであってもよい。
【００５６】
図６を用いて説明したように、ユーザプログラムに記述されるメモリ割り付け命令は、拡張ユニット４を識別する識別情報と、割り当てメモリ領域３３のサイズに関する情報と、割り当てメモリ領域３３の割り付けが完了したことを示すデバイス値が格納されるデバイスメモリを示す情報と、割り当てメモリ領域３３の先頭アドレスが格納されるデバイスメモリを示す情報とを含んでもよい。複数の拡張ユニット４が基本ユニット３に接続されている場合は、割り当てメモリ領域３３を割り付ける対象となる拡張ユニット４を識別する識別情報が必要となろう。割り当てメモリ領域３３の先頭アドレスを示す情報も、当該割り当てメモリ領域３３に情報を書き込んだり、当該割り当てメモリ領域３３から情報を読み出したりするために必要となろう。なお、割り当てメモリ領域３３の割り付けが完了したことを示す情報はオプションであり、省略されてもよい。なお、制御安定性の観点からは、割り当てメモリ領域３３の割り付けが完了してから被制御装置１６の制御が開始されることが望ましいだろう。また、割り当てメモリ領域３３の割り付けが失敗したと判定されたときは被制御装置１６の制御が停止または禁止されることが望ましいだろう。
【００５７】
指示部１３は、拡張ユニット４に接続された被制御装置１６の制御を終了するときに当該拡張ユニット４に割り当てメモリ領域３３の解放を指示してもよい。バッファメモリ管理部１１３は、指示部１３により割り当てメモリ領域３３の解放を指示されると、当該割り当てメモリ領域３３を解放する解放手段として機能する。ＰＬＣ２については一般的には割り当てメモリ領域３３の解放は要求されないだろう。しかし、拡張ユニット４のアプリケーションが変更されるときは割り当てメモリ領域３３が解放されることが必要となろう。たとえば、拡張ユニット４の制御対象がパラレルリンクから２軸ステージなどに変更される場合、必要となる割り当てメモリ領域３３の数が変更される。自由領域３２のメモリ空間が広大であれば、パラレルリンク用のバッファメモリを確保したまま、２軸ステージ用のバッファメモリを確保することも可能であろう。しかし、自由領域３２を小さくできれば、拡張ユニット４の製造コストを低減できる。よって、アプリケーションの変更が想定されている拡張ユニット４では割り当てメモリ領域３３の解放機能が有用であろう。
【００５８】
指示部１３は、ラダー実行部１１により実行されるユーザプログラムに記述されている解放命令（例：ＵＦＲＥＥ）にしたがって、拡張ユニット４に割り当てメモリ領域３３の解放を指示してもよい。このような命令語を新規に導入することで、ユーザはユーザプログラムに当該解放命令を記述することが可能となる。
【００５９】
図６を用いて説明したように、ユーザプログラムに記述される解放命令は、解放対象となる拡張ユニット４を識別する識別情報と、解放対象となるバッファメモリを特定するアドレスに関する情報と、バッファメモリの解放が完了したことを示すデバイス値が格納されるデバイスメモリを示す情報とを含みうる。解放対象となる拡張ユニット４を識別する識別情報は、複数の拡張ユニット４が基本ユニット３に接続されている場合に必要となろう。解放対象となるバッファメモリを特定するアドレスに関する情報は、複数のバッファメモリが割り付けられているときには必要であろう。バッファメモリの解放が完了したことを示す情報は、上述したようにアプリケーションの変更が実行されるときには必要となろう。
【００６０】
なお、固定領域３１のサイズおよびアドレスと、自由領域３２のサイズおよびアドレスとは不変であってもよい。ただし、自由領域３２内で確保される割り当てメモリ領域３３のサイズおよびアドレスは被制御装置１６の種類に応じて変更される。これにより、自由領域３２を被制御装置１６（アプリケーション）の種類に応じて割り当てメモリ領域３３のために自在に利用することが可能となろう。
【図１】
2017079005.tif 000003
【図２】
2017079005.tif 000004
【図３】
2017079005.tif 000005
【図４】
2017079005.tif 000006
【図５】
2017079005.tif 000007
【図６】
2017079005.tif 000008
【図７】
2017079005.tif 000009
【図８】
2017079005.tif 000010
【図９】
2017079005.tif 000011
【図１０】
2017079005.tif 000012
【図１１】
2017079005.tif 000013