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