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