(57)【要約】【課題】異なるユニット構成間で制御プログラムを流用するに際して、制御プログラム上の識別情報の修正手間を減らし、開発効率を高めること。【解決手段】基本ユニットと、該基本ユニットに接続される複数の拡張ユニットとを有するプログラマブルコントローラにおいて、プログラム作成支援装置から設定情報を取得する設定情報取得手段と、前記基本ユニットに接続されている拡張ユニットのユニット構成を特定する特定手段と、前記設定情報に含まれるユニット構成と、前記特定手段により特定されたユニット構成とを照合する照合手段と、を備え、前記照合手段の照合結果に基づいて、前記設定情報で特定される接続未確定拡張ユニットが実際には接続されていない場合に、該接続未確定拡張ユニットを識別するための識別情報に基づく特定の命令が処理対象から除外されるように動作する。【選択図】図１０
2014052672.tif 000002
【特許請求の範囲】
【請求項１】
基本ユニットと、該基本ユニットに接続される複数の拡張ユニットとを有し、外部に接続されるプログラム作成支援装置から各ユニットに対する処理を規定する制御プログラムを含む設定情報を取得可能であって、取得した設定情報に基づき動作するプログラマブルコントローラにおいて、
前記設定情報は、
前記複数の拡張ユニットの各々を識別するための識別情報が記述された制御プログラムと、
前記基本ユニットと前記複数の拡張ユニットのユニット構成を示すユニット構成と、
前記プログラム作成支援装置にて設定され、前記基本ユニットと接続未確定の接続未確定拡張ユニットを示す情報と、
が含まれており、
前記プログラム作成支援装置から前記設定情報を取得する設定情報取得手段と、
前記基本ユニットに接続されている拡張ユニットのユニット構成を特定する特定手段と、
前記設定情報取得手段により取得した前記設定情報に含まれるユニット構成と、前記特定手段により特定されたユニット構成とを照合する照合手段と、
を備え、
前記照合手段の照合結果に基づいて、前記接続未確定拡張ユニットが接続されていない場合に、前記制御プログラムにおいて該接続未確定拡張ユニットを識別するための識別情報に基づく特定の命令が処理対象から除外されるように動作することを特徴とするプログラマブルコントローラ。
【請求項２】
前記照合手段の照合結果に基づいて、前記接続未確定拡張ユニットが接続されている場合に、前記制御プログラムにおいて該接続未確定拡張ユニットを識別するための識別情報に基づく特定の命令が処理対象から除外されずに動作することを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項３】
前記識別情報は、前記基本ユニットに前記拡張ユニットが接続される順序に応じて割り当てられるユニット番号であって、
前記照合手段の照合結果に基づいて、接続されている拡張ユニットに対し、前記接続未確定拡張ユニットが飛び番号となるようにユニット番号を割り当てる割当手段を備え、
前記制御プログラムにおいて前記飛び番号に基づく特定の命令が処理対象から除外されるように動作することを特徴とする請求項１又は２に記載のプログラマブルコントローラ。
【請求項４】
前記特定の命令を処理対象から除外して動作したことを報知する報知手段を備えた、
ことを特徴とする請求項１乃至３のいずれか１項に記載のプログラマブルコントローラ。
【請求項５】
前記設定情報は、
各拡張ユニットの種類を示す種類情報を含み、
前記特定手段が特定するユニット構成は、
各拡張ユニットの種類を示す情報を含み、
前記割当手段は、
前記照合手段の照合結果が、前記種類情報と、前記特定手段により特定されたユニット構成における各拡張ユニットの種類と、が一致しないことを示す場合は、各拡張ユニットに識別情報を割り当てない、
ことを特徴とする請求項１乃至４のいずれか１項に記載のプログラマブルコントローラ。
【請求項６】
前記制御プログラムの中間コードを、前記接続未確定拡張ユニットに関する処理について、該接続未確定拡張ユニットが実際に存在するか否かを判断する処理を含む、実行形式のコードに変換する変換手段を備えた、
ことを特徴とする請求項１乃至５のいずれか１項に記載のプログラマブルコントローラ。
【請求項７】
請求項１に記載のプログラマブルコントローラの基本ユニットに接続可能なプログラム作成支援装置であって、
前記接続未確定拡張ユニットの対象となる拡張ユニットの、ユーザによる指定を受け付ける指定受付手段と、
前記指定受付手段で受け付けた前記接続未確定拡張ユニットを示す情報を含む前記設定情報を前記基本ユニットに送信する手段と、
を備えたことを特徴とするプログラム作成支援装置。
【請求項８】
ユーザの操作に基づいて、制御プログラムを編集する編集手段を備え、
前記編集手段は、
前記接続未確定拡張ユニットが実際に前記基本ユニットに接続されていることを条件とした処理の定義を許容する、
ことを特徴とする請求項７に記載のプログラム作成支援装置。
【請求項９】
請求項１に記載のプログラマブルコントローラの基本ユニットに接続可能なプログラム作成支援装置を、
前記接続未確定拡張ユニットの対象となる拡張ユニットの、ユーザによる指定を受け付ける指定受付手段、
前記指定受付手段で受け付けた前記接続未確定拡張ユニットを示す情報を含む前記設定情報を前記基本ユニットに送信する手段、
として機能させるプログラム。
【請求項１０】
複数の拡張ユニットが接続可能な基本ユニットであって、
外部に接続されるプログラム作成支援装置から各ユニットに対する処理を規定する制御プログラムを含む設定情報を取得可能であって、取得した設定情報に基づき動作する基本ユニットにおいて、
前記設定情報は、
前記複数の拡張ユニットの各々を識別するための識別情報が記述された制御プログラムと、
前記基本ユニットと前記複数の拡張ユニットのユニット構成を示すユニット構成と、
前記プログラム作成支援装置にて設定され、前記基本ユニットと接続未確定の接続未確定拡張ユニットを示す情報と、
が含まれており、
前記プログラム作成支援装置から前記設定情報を取得する設定情報取得手段と、
前記基本ユニットに接続されている拡張ユニットのユニット構成を特定する特定手段と、
前記設定情報取得手段により取得した前記設定情報に含まれるユニット構成と、前記特定手段により特定されたユニット構成とを照合する照合手段と、
を備え、
前記照合手段の照合結果に基づいて、前記接続未確定拡張ユニットが接続されていない場合に、前記制御プログラムにおいて該接続未確定拡張ユニットを識別するための識別情報に基づく特定の命令が処理対象から除外されるように動作することを特徴とする基本ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラマブルコントローラに関する。
【背景技術】
【０００２】
工場等に設置される各種のアクチュエータを統括的に制御するための制御装置として、プログラマブルコントローラ（ＰＬＣ）が知られている。ＰＬＣでは、統合的な制御を司る基本ユニットに、複数種類の拡張ユニットを接続可能である（例えば特許文献１）。拡張ユニットとしては、例えば、入出力点数を拡張する入出力ユニット、通信機能を付加する通信ユニット、センサ信号を処理するセンサユニット等が知られている。
【０００３】
ラダープログラムに代表される制御プログラムを実行する上で、基本ユニットは、実際に接続されている拡張ユニットを認識した上で、制御プログラム上で定義されている拡張ユニットとの対応関係を識別することになる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−２８５６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、ユニット構成が基本的に同じ派生的な複数種類のシステムの制御プログラムを開発する場合、システム間で制御プログラムを流用することで、開発効率を向上できる場合がある。
【０００６】
例えば、将来的に想定されているユニット構成に対して、現時点ではその一部の拡張ユニットを用いないユニット構成を採用し、一部の拡張ユニットを除く他の拡張ユニットについては同じ処理を実行させる場合である。この例の場合、将来のユニット構成を前提として制御プログラムを作成すれば、この制御プログラムを現時点のユニット構成に流用できる場合がある。
【０００７】
しかし、将来のシステム構成と現時点のシステム構成とが一部異なるため、将来のユニット構成を前提とした制御プログラムでは、制御プログラム上で定義されている拡張ユニットと実際に接続されている拡張ユニットとの対応関係に齟齬が生じて実行できない。
【０００８】
そこで、制御プログラム上の識別情報を修正した上で流用することが考えれるが、手間を要し、制御プログラムの流用による開発効率の向上効果が薄れることになる。
【０００９】
本発明の目的は、異なるユニット構成間で制御プログラムを流用するに際して、制御プログラム上の識別情報の修正手間を減らし、開発効率を高めることにある。
【課題を解決するための手段】
【００１０】
本発明によれば、基本ユニットと、該基本ユニットに接続される複数の拡張ユニットとを有し、外部に接続されるプログラム作成支援装置から各ユニットに対する処理を規定する制御プログラムを含む設定情報を取得可能であって、取得した設定情報に基づき動作するプログラマブルコントローラにおいて、前記設定情報は、前記複数の拡張ユニットの各々を識別するための識別情報が記述された制御プログラムと、前記基本ユニットと前記複数の拡張ユニットのユニット構成を示すユニット構成と、前記プログラム作成支援装置にて設定され、前記基本ユニットと接続未確定の接続未確定拡張ユニットを示す情報と、が含まれており、前記プログラム作成支援装置から前記設定情報を取得する設定情報取得手段と、前記基本ユニットに接続されている拡張ユニットのユニット構成を特定する特定手段と、前記設定情報取得手段により取得した前記設定情報に含まれるユニット構成と、前記特定手段により特定されたユニット構成とを照合する照合手段と、を備え、前記照合手段の照合結果に基づいて、前記接続未確定拡張ユニットが接続されていない場合に、前記制御プログラムにおいて該接続未確定拡張ユニットを識別するための識別情報に基づく特定の命令が処理対象から除外されるように動作することを特徴とするプログラマブルコントローラが提供される。
【発明の効果】
【００１１】
本発明によれば、異なるユニット構成間で制御プログラムを流用するに際して、制御プログラム上の識別情報の修正手間を減らし、開発効率を高めることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態に係る基本ユニットの外観図。
【図２】図１の基本ユニット、拡張ユニット及び支援装置のブロック図。
【図３】（Ａ）は支援装置の処理例を示すフローチャート、（Ｂ）及び（Ｃ）は基本ユニットの処理例を示すフローチャート。
【図４】（Ａ）は支援装置における設定画面例を示す図、（Ｂ）はユニット設定情報の例を示す図。
【図５】支援装置における編集画面例を示す図。
【図６】識別情報の割り当ての説明図。
【図７】識別情報の割り当ての説明図。
【図８】識別情報の割り当ての説明図。
【図９】識別情報の割り当ての説明図。
【図１０】基本ユニットの処理例を示すフローチャート。
【図１１】コントロールリレーの定義例を示す図。
【発明を実施するための形態】
【００１３】
＜構成例＞
図１は本発明の一実施形態に係る基本ユニット１００の外観図である。本実施形態の場合、基本ユニット１００は、ＣＰＵユニットを構成しており、その筐体上部には端子台１が設けられている。端子台１は複数の出力端子及び複数の入力端子を含む。出力端子には出力機器が、入力端子には入力機器が、それぞれ接続可能である。出力機器にはリレー、ソレノイド、モータ等のアクチュエータ、或いは、アクチュエータのドライバが含まれる。入力機器にはセンサ、或いは、センサの信号処理回路が含まれる。
【００１４】
接続部２は、拡張ユニット（不図示）を接続するための拡張バスである。図１では接続部２は、端子保護用のカバー部材２ａで覆われており、カバー部材２ａを取り外すことで露出する。拡張ユニットには更に拡張ユニットを接続することが可能であり、接続部２は複数の拡張ユニットを直列的に接続することが可能である。こうして基本ユニット１００と複数の拡張ユニットとを含むＰＬＣを構築することができる。なお、本実施形態では、複数の拡張ユニットを直列的に接続するようにしているが、例えば並列的に接続してもよいし、基本ユニット１００を中心として拡張ユニットをスター型に接続してもよく、接続形態は問われない。
【００１５】
基本ユニット１００の筐体正面には表示部３、操作部４、接続部５が設けられている。表示部３はデバイス情報等、各種の情報を表示可能である。操作部４は複数のボタンから構成され、表示部３の表示内容の切り替えなど、ユーザの指示を基本ユニット１００に対して手動入力可能となっている。接続部５には、基本ユニット１００と外部機器との有線通信を可能とする通信ケーブルが接続される。また、その他、エラー通知用のＬＥＤ等が設けられてもよい。
【００１６】
図２は基本ユニット１００、外部機器としてのプログラム作成支援装置２００（以下、支援装置２００という。）、及び、拡張ユニット３００のブロック図である。支援装置２００は、例えば、パソコンであり、ユーザによる制御プログラムの作成を支援する作成支援プログラムがインストールされている。
【００１７】
支援装置２００は、制御部５０を備える。制御部５０はＣＰＵ５１、記憶部５２、ＩＦ（インタフェース）部５３を含む。記憶部５２は、例えば、ＲＯＭ、ＲＡＭ、ハードディスクであり、上記の作成支援プログラムはこの記憶部５２に格納可能である。ＩＦ部５３は、例えば、表示部６０、操作部６１に対するＩ／Ｏインタフェース、基本ユニット１００との通信のための通信インタフェースを含む。表示部６０はユーザに情報を表示する。操作部６１は、例えば、キーボード、マウス等である。
【００１８】
基本ユニット１００は、制御部１０、記憶部２０、ＡＳＩＣ３０、を含む。制御部１０は例えば汎用の１チップマイコンであり、ＣＰＵ１１、記憶部１２、ＩＦ部１３を含む。記憶部１２は、例えば、ＲＯＭ、ＲＡＭである。ＩＦ部１３は、例えば、表示部３、操作部４に対するＩ／Ｏインタフェース、支援装置２００との通信のための通信インターフェースを含む。
【００１９】
記憶部２０は、本実施形態の場合、フラッシュＲＯＭ２１と、ＳＤＲＡＭ（シンクロナスダイナミックＲＡＭ）２２と、を含むが、他の種類のメモリでもよく、１つのメモリでもよい。フラッシュＲＯＭ２１には、例えば、支援装置２００からダウンロードされる、制御プログラム（中間コード）及び後述する各種の設定の情報を含む設定情報、或いは、後述する各処理のプログラムが格納される。また、中間コードをコンパイルするプログラムも格納可能である。ＳＤＲＡＭ２２には、例えば、実行形式の制御プログラムが格納される。記憶部２０はデバイスとしても利用可能であるが、記憶部１２をデバイスとして利用することで、デバイス情報の読み書き時間を短縮できる。
【００２０】
制御動作中、ＣＰＵ１１は、ＳＤＲＡＭ２２に記憶された実行形式の制御プログラムを読み出し、実行する。ＣＰＵ１１は、例えば、入力端子からの情報を取得し、入力機器からの入力状態を示すデバイス情報を更新する（入力リフレッシュ）。その後、制御プログラムを１スキャン実行しつつ、その中で記憶部１２のデバイス情報（出力機器への出力状態を示すデバイス情報）を更新する。そして、更新後のデバイス情報のうち、出力端子を介して接続される出力機器用のデバイス情報を出力端子から出力する（出力リフレッシュ）。これらの処理を繰り返していくことで、制御が実行されることになる。ＡＳＩＣ３０は、接続部２を介した拡張ユニット３００との通信処理に特化した回路である。
【００２１】
各拡張ユニット３００は、ＡＳＩＣ３０１、接続部３０２及び３０３を備え、その拡張ユニットの機能に応じた不図示の回路を更に備える。ＡＳＩＣ３０１は、接続部３０２及び３０３を介して、基本ユニット１００或いは他の拡張ユニット３００との通信処理に特化した回路である。接続部３０２は基本ユニット１００又は他の拡張ユニット３００に接続される拡張バスであり、接続部３０３は他の拡張ユニット３００の接続部３０２に接続される拡張バスである。
【００２２】
図２に示すように、基本ユニット１００の接続部２と、拡張ユニット１００の接続部３０２とを接続し、更に、その接続部３０３を別の拡張ユニット１００の接続部３０２に接続し、順次拡張ユニット１００を接続していくことで、基本ユニット１００の接続部２に複数の拡張ユニット１００を直列に接続することができる。
【００２３】
＜処理例＞
次に、基本ユニット１００のＣＰＵ１１が実行する処理例、及び、支援装置２００のＣＰＵ５１が実行する処理例、について説明する。まず、支援装置２００の処理例について説明する。
【００２４】
＜支援装置の処理例＞
図３（Ａ）は支援装置２００の処理例を示すフローチャートである。本実施形態では、制御プログラムの作成の前提として、まず、ユニット構成の設定を行う。Ｓ１では、操作部６１に対するユーザの操作に基づいて、ユニット構成を設定する。ユニット構成の設定とは、制御プログラム上で想定される基本ユニット１００と拡張ユニット（想定拡張ユニットとも言う。）３００に関する設定であり、基本ユニット１００に対する想定拡張ユニットの接続態様の設定及び各想定拡張ユニットの個別設定等である。詳細は後述する。
【００２５】
Ｓ２では、操作部６１に対するユーザの操作に基づいて、制御プログラムを編集する。ここでは、ユーザによるラダー図の作成を支援し、受け付ける。その一例については後述する。
【００２６】
Ｓ３では、操作部６１に対するユーザの指示によって、Ｓ１で設定したユニット構成の情報及びＳ２で編集した制御プログラム（中間コード）を含む設定情報（プロジェクトデータとも言う。）を基本ユニット１００に送信する。このプロジェクトデータは基本ユニット１００のフラッシュＲＯＭ２１に格納される。こうして基本ユニット１００は、設定情報を取得することになる。
【００２７】
＜ユニット構成の設定＞
Ｓ１のユニット構成の設定について図４（Ａ)を参照して説明する。図４（Ａ）は表示部６０の表示例を示す。構成表示部７０には、ユーザが現在選択しているユニット構成が表示される。同図の例では、基本ユニット１００と、ユーザが選択した５つの想定拡張ユニット３００と、エンドユニットと、から構成される暫定的なＰＬＣの構成が表示されている。なお、本実施形態ではエンドユニットを設けているが、これを省略することは勿論可能である。
【００２８】
５つの想定拡張ユニット３００は４種類の想定拡張ユニットを含み、説明の便宜上、拡張ユニットの種類はＡ〜Ｄで示している。つまり、想定拡張ユニットＢは２つあり、他の想定拡張ユニットＡ、Ｃ及びＤはそれぞれ１つずつである。種類とは、例えば、拡張ユニットの型式を単位として区別することができる。なお、特に図示しないが基本ユニット１００についてもユーザが選択可能である。エンドユニットは、ＰＬＣの終端を特定するためのユニットであり、最端部に位置する拡張ユニットに接続される。
【００２９】
ユニット選択表示部７３には、ユーザが選択可能な想定拡張ユニット３００の種類が、機能毎に区分けされて表示されている。例えば同図の例では、Ｉ／Ｏユニット、アナログユニットといった機能毎の区分けで表示されている。ユーザは、好みの拡張ユニットを選択し、追加ボタン７４を操作するか構成表示部７０にドラッグ操作すると、構成表示部７０に表示されているＰＬＣに追加される。
【００３０】
識別情報表示部７１には、各想定拡張ユニット３００の識別情報が表示される。識別情報は制御プログラム上で各拡張ユニットを識別ための情報である。本実施形態の場合、識別情報は、基本ユニット１００に対する接続の順番で規定される割当ルールに従って自動的に割り当てられる。この方式は、比較的簡便に拡張ユニットを識別できるという利点がある。同図の例では基本ユニット１００側から、＃１、＃２．．．と番号で識別情報が割り当てられているが、接続の順番に従っていれば番号以外（例えば、ａ、ｂ、ｃ等）でもよい。なお、基本ユニット１００には便宜的に＃０が割り当てられている。
【００３１】
ユーザは、例えば、表示されている想定拡張ユニット３００を選択してドラッグ操作を行うことで、想定拡張ユニット３００の接続の順番を変更することができ、この場合、識別情報はリナンバされる。また、ユーザは、構成表示部７０に表示されている想定拡張ユニット３００を選択して、取消ボタン７５を操作すると、構成表示部７０に表示されているＰＬＣから、その想定拡張ユニット３００を削除でき、この場合、識別情報はリナンバされる。
【００３２】
予約表示部７２は、想定拡張ユニット３００毎に接続予約が選択されている否かを示す。同図の例では、＃１の想定拡張ユニットＡについて接続予約が選択されている。接続予約とは、実際には接続されない可能性があることをユーザが宣言しておくものである。すなわち、基本ユニットと接続未確定の拡張ユニットであることをユーザが宣言しておくものである。ユーザは、構成表示部７０に表示されている想定拡張ユニット３００を選択して、接続予約ボタン７６を操作することで接続予約の対象となる接続未確定拡張ユニットを指定することができ、その拡張ユニット３００について接続予約が受け付けられる。
【００３３】
この接続予約機能は、制御プログラムの流用を容易にすることを目的としたものである。例えば、将来のユニット構成に含まれるが、現時点で想定しているＰＬＣには含まれない拡張ユニット３００について、この接続予約をしておく。すると、将来のユニット構成を想定した制御プログラムを作成すれば、現時点で想定しているＰＬＣに対してその制御プログラムを流用することが容易になる。詳細は後述する。
【００３４】
次に、ユーザは、構成表示部７０に表示されている想定拡張ユニット３００を選択して、個別設定ボタン７７を操作すると、その想定拡張ユニットの個別設定を行う画面が表示され（不図示）、その詳細設定が行える。詳細設定は、例えば、アナログユニットの場合、そのレンジ等を含み、拡張ユニット３００が実際に動作する際に必要な設定である。
【００３５】
ユーザが設定ボタン７８を操作すると、ユニット構成の設定が確定し、ユニット設定情報が作成される。ユニット設定情報は、Ｓ１のユニット構成の設定においてユーザが設定した内容を示し、少なくとも図４（Ｂ）に示すユニット設定情報Ｄ１を含む。
【００３６】
図４（Ｂ）に示すユニット設定情報Ｄ１は、ユーザがこれから作成する制御プログラムで想定される、基本ユニット１００に対する想定拡張ユニットの接続態様を示しており、順番情報、種類及び接続予約情報を含む。順番情報は、基本ユニット１００に対する各想定拡張ユニット３００の接続の順番を示す。本実施形態の場合、識別情報が想定拡張ユニット３００の接続の順番を示しているため、これを順番情報として用いているが、接続の順番を特定可能であればどのような情報であってもよい。なお、図４（Ｂ）の例は、図４（Ａ）のＰＬＣの構成例のまま、設定内容が確定した場合を想定している。また、本実施形態では、識別情報を順番情報として用いているが、要するに、各ユニットを識別し得る識別情報であればよい。
【００３７】
図４（Ｂ）のユニット設定情報Ｄ１から、基本ユニット１００に対して拡張ユニット３００が５台接続され、基本ユニット１００側から順に、その種類がＡ、Ｂ、Ｂ、Ｃ、Ｄであることが認識可能となっている。また、接続予約情報から、＃１の拡張ユニットＡは、接続未確定拡張ユニットとして接続予約が設定されていることが認識可能となっている。このユニット設定情報Ｄ１は、記憶部５２に保存され、Ｓ３の送信処理において制御プログラムと共に基本ユニット１００に送信される。基本ユニット１００では、受信したユニット設定情報Ｄ１をフラッシュＲＯＭ２１或いは記憶部１２に格納しておくことが可能である。
【００３８】
＜制御プログラムの編集＞
Ｓ２の制御プログラムの編集例について図５を参照して説明する。図５は表示部６０の表示例を示す。編集領域８０には、ユーザの操作に基づいてラダー図が表示される。その際、想定拡張ユニット３００に関わる処理については識別情報でその想定拡張ユニット３００が特定されて記述される。同図のラダー図８０ａは＃１の想定拡張ユニットＡの処理を例示している。機能ボタン群８１は、ユーザによるラダー図の作成を簡便化する機能ボタン群であり、例えば、定型的なラダー図のシンボル描画をボタン操作によって可能とする。
【００３９】
図５に示すように、想定拡張ユニットＡの処理は、想定拡張ユニットを識別するための識別情報（＃１）に基づく特定の命令であると言える。実際のラダープログラムは、数百行〜数千行のものまで幅広くあり、この特定命令もあらゆるところに散らばっている。従来は、想定拡張ユニットＡが基本ユニット１００に接続されている場合、例えば想定拡張ユニットＣの処理を記述するためには、識別情報（＃４）を用いて記述する必要があった。
【００４０】
一方、想定拡張ユニットＡが基本ユニット１００に接続されていない場合、基本ユニット１００から順番に、想定拡張ユニットＢに＃１、想定拡張ユニットＢに＃２、想定拡張ユニットＣに＃３、想定拡張ユニットＤに＃４の各ユニット番号が振られるため、例えば拡張ユニットＣの処理を記述するためには、識別情報（＃３）を用いて記述する必要があった。ということは、ユーザは、拡張ユニットＡが基本ユニットに接続される場合とされない場合との２つのケースを想定して、２種類の制御プログラムを保存しておく、つまり、２重管理をしなければならず、手間が掛かっていた。２重管理を避けるためには、各ケースで、制御プログラムのユニット番号を書き換える必要があり、しかも場合によっては何十箇所も修正する必要があり、非常に手間が掛かっていた。
【００４１】
本実施形態に係る基本ユニット１００は、このような手間を省くものとして有用である。なお、本実施形態では、識別情報の一例として「ユニット番号」を用いているが、他にも例えば、ユニット番号と対応付けられたリレー番号とする等、種々の態様が可能である。
【００４２】
ラダー図が完成すると、ユーザの指示により、支援装置２００はラダー図を中間コード（例えばニモニックコード）に変換する。中間コードは記憶部５２に保存され、Ｓ３の送信処理においてユニット設定情報と共に基本ユニット１００に送信される。基本ユニット１００では、受信した中間コードをフラッシュＲＯＭ２１に格納しておくことが可能である。
【００４３】
＜基本ユニットの処理例＞
次に、基本ユニット１００の処理例について説明する。まず、基本ユニット１００が、これに接続されている拡張ユニット３００を認識し、ユニット設定情報と照合して、識別情報を割り当てる処理について図３（Ｂ）を参照して説明する。図３（Ｂ）は照合・割当処理を示すフローチャートであり、基本ユニット１００の電源投入時やプロジェクトデータを更新した場合等に実行される。
【００４４】
Ｓ１１では実際のユニット構成を特定する処理を行う。ここでは、接続部２を介した拡張ユニット３００との通信により、接続部２に実際に接続されている拡張ユニット３００である、実拡張ユニット３００を特定する。本実施形態の場合、特定内容には、実拡張ユニット３００の種類と、基本ユニット１００に対する接続の順番が含まれる。これらを特定できれば、通信の手法はどのようなものでもよい。例えば、基本ユニット１００側にある実拡張ユニット３００から順に、エンドユニット側の端部の実拡張ユニット３００まで、順々に実拡張ユニット３００の種類を取得する方法がある。
【００４５】
つまり、基本ユニット１００が隣の想定拡張ユニット３００に接続確認コマンドを送り、そのレスポンスに基づいて、その想定拡張ユニット３００をユニット番号＃１とする。また、基本ユニット１００は、ユニット番号＃１の隣の想定拡張ユニット３００に接続確認コマンドを送り、そのレスポンスに基づいて、その想定拡張ユニット３００をユニット番号＃２とする。これを繰り返せば、全ての想定拡張ユニット３００に対してユニット番号を割り当てることができる。一方で、実拡張ユニット３００が基本ユニット３００に自身の種類と接続位置とを通知する方法でも良い。
【００４６】
Ｓ１２では、Ｓ１２ではユニット設定情報Ｄ１と、Ｓ１１で特定された実ユニット構成とを照合する。具体例は後述する。照合が成立した場合はＳ１３へ進み、成立しない場合はＳ１４へ進む。Ｓ１３では、Ｓ１１で認識された各実拡張ユニット３００に識別情報を割り当てる。識別情報及び対応する実拡張ユニット３００の種類は、ＳＤＲＡＭ２２或いは記憶部１２に、実際のユニット構成の設定情報（以下、実ユニット設定情報ともいう。）として保存する。
【００４７】
この識別情報は、制御プログラムを実行する上で実拡張ユニット３００を区別するためのものであり、図４（Ａ）を参照して説明したユニット構成の設定の場合と同じ割当ルールで割り当てることを基本とする。なお、割当ルールは本実施形態で説明したルールに限られず、様々な方式を採用可能である。
【００４８】
Ｓ１４ではエラー処理を行う。ここでは、例えば、実拡張ユニット３００に対する識別情報の割り当てを行わず、識別情報の割り当てに失敗したことを表示部３による表示によって報知する。以上により一単位の処理を終了する。
【００４９】
＜割り当て例＞
次に、Ｓ１２の照合及びＳ１３の割り当ての具体例を図６〜図９を参照して説明する。まず、図６の例について説明する。
【００５０】
図６において、実接続情報Ｄ２は、Ｓ１１における実ユニット構成の特定結果である。図６の例では、実接続情報Ｄ２は、４つの実拡張ユニット３００が接続されており、その種類は基本ユニット１００側から順に、Ｂ、Ｂ、Ｃ、Ｄであることを示している。支援装置２００からダウンロードされたユニット設定情報Ｄ１は図４（Ｂ）に例示したものと同様である。
【００５１】
Ｓ１２の照合では、例えば、まず、接続の順番で１番目の拡張ユニット３００の種類を比較する。すると、実接続情報Ｄ２では種類がＢであり、ユニット設定情報Ｄ１ではＡであるから両者は一致しない。しかし、ユニット設定情報Ｄ１では接続の順番で１番目の拡張ユニットＡに接続予約が設定されており、実際には接続されていない可能性がある。そこで、ユニット設定情報Ｄ１の２番目の拡張ユニット３００と比較する。すると、拡張ユニット３００の種類がＢであり、実接続情報Ｄ２の１番目の拡張ユニット３００の種類と一致している。
【００５２】
続いて、実接続情報Ｄ２の２〜４番目の拡張ユニット３００の種類と、ユニット設定情報Ｄ１の３〜５番目の拡張ユニット３００の種類とを順次比較するといずれも一致している。
【００５３】
よって、照合は成立したものと判断し、割り当て結果は情報Ｄ３とする。つまり、接続予約情報で特定される接続未確定拡張ユニットである想定拡張ユニットＡの接続が、実接続情報Ｄ２から確認されなかったので、想定拡張ユニットＡの接続の順番に相当する順番（１番）を飛ばした順番（２番〜）で割当ルールを適用する。その結果、各実拡張ユニットＢ、Ｂ、Ｃ、Ｄには、識別情報＃２、＃３、＃４、＃５をそれぞれ割り当てる。これにより、識別情報の割り当てに齟齬が生じることを防止できる。その結果、制御プログラムを流用しても、書き換えが不要になり、開発効率を高めることができる。
【００５４】
なお、図６を用いて説明した方法は一例であって、その他にも例えば、実接続情報Ｄ２に基づいて、まずは仮の識別情報として、＃１，＃２，＃３，＃４を割り当てる。そして、想定拡張ユニットＡが接続予約情報で特定される想定拡張ユニットであることに基づいて、＃１を欠番とし、＃２，＃３，＃４，＃５と割り当てし直す。これにより、割り当て結果の情報Ｄ３と同様の結果が得られる。
【００５５】
次に、図７の例について説明する。図７において、実接続情報Ｄ２は、５つの実拡張ユニット３００が接続されており、その種類は基本ユニット１００側から順に、Ａ、Ｂ、Ｂ、Ｃ、Ｄであることを示している。ユニット設定情報Ｄ１は図４（Ｂ）に例示したものと同様である。
【００５６】
図６の例の場合と同様に、まず、接続の順番で１番目の拡張ユニット３００の種類を比較する。すると、実接続情報Ｄ２では種類がＡであり、ユニット設定情報Ｄ１ではＡであるから両者は一致している。しかし、ユニット設定情報Ｄ１では接続の順番で１番目の拡張ユニットＡに接続予約が設定されており、実際には接続されていない可能性がある。そこで、ユニット設定情報Ｄ１の２番目の拡張ユニット３００と比較する。すると、拡張ユニット３００の種類がＢであり、実接続情報Ｄ２の１番目の拡張ユニット３００の種類と一致しない。よって、この場合は、接続予約がされていた拡張ユニットＡが実際に接続されていると判断できる。
【００５７】
続いて、実接続情報Ｄ２の２〜５番目の拡張ユニット３００の種類と、ユニット設定情報Ｄ１の２〜５番目の拡張ユニット３００の種類とを順次比較するといずれも一致している。
【００５８】
よって、照合は成立したものと判断し、割り当て結果は情報Ｄ３とする。つまり、図７の例では、接続予約情報で特定される接続未確定拡張ユニットである想定拡張ユニットＡの接続が、実接続情報Ｄ２から確認されたので、そのままの順番で割当ルールを適用する。その結果、各実拡張ユニットＡ、Ｂ、Ｂ、Ｃ、Ｄには、識別情報＃１、＃２、＃３、＃４、＃５をそれぞれ割り当てる。これにより、識別情報の割り当てに齟齬が生じることを防止できる。
【００５９】
ここで、図６の例と図７の例とでは、拡張ユニットＡの存在の有無のみが異なり、残りの拡張ユニットＢ、Ｂ、Ｃ、Ｄについては種類が同じである。そこで、拡張ユニットＡが存在することを前提として接続予約を設定して制御プログラムを作成しておけば、拡張ユニットＡが実際には無い場合（図６の例の場合）にも、この制御プログラムを流用できる。その際、拡張ユニットの識別情報を修正することは不要である。このように本実施形態では、異なるユニット構成間で制御プログラムを流用するに際して、識別情報の割り当てに齟齬が生じることを防止することができる。
【００６０】
なお、このように本実施形態では、ユニット番号（識別情報の一例）の割り当てを工夫することで、簡易に制御プログラムの流用が可能なプログラマブルコントローラを実現することができる。例えば識別情報がａ，ｂ，ｃ等の数字以外であっても、本発明は適用可能である。例えば図６において、ユニット設定情報Ｄ１の順番情報が左から順にａ，ｂ，ｃ，ｄ，ｅであり、接続予約情報で特定される想定拡張ユニットがＡであると仮定した場合、照合結果に基づいて割り当て処理を行うと、ａを割り当てず、左から順にｂ，ｃ，ｄ，ｅが割り当てられる。その結果、制御プログラムを実行する際に、制御プログラムに記述されたｂ〜ｅの識別情報を書き換える必要がなくなる（もし、左から順番にａ，ｂ，ｃ，ｄと割り当てられると、識別情報を書き換えなければならない）。
【００６１】
但し、制御プログラムに識別情報ａの記述は残されているため、基本ユニット１００は、この識別情報ａに基づく特定の命令は処理対象から除外されるように制御プログラムを実行する。例えば、識別情報ａに基づく特定の命令をスキップ（無視、省略）してもよいし、事前に識別情報ａに基づく特定の命令を無効化してもよい。また、基本ユニット１００のＣＰＵ１１は、識別情報ａに基づく特定の命令を実行しても実行結果を拡張ユニットに向けて出力しないようにしてもよいし、或いは、基本ユニット１００のＣＰＵ１１は、識別情報ａに基づく特定の命令を実行して実行結果を実拡張ユニット３００に向けて出力するが、ＡＳＩＣ３０においてこの出力をブロックし、実質的に実拡張ユニット３００が実行結果を受信しないような構成にしてもよい。
【００６２】
このように、本実施形態に係る基本ユニット１００は、照合結果に基づいて、接続予約情報で特定される想定拡張ユニットＡが存在しない場合、制御プログラムにおいて想定拡張ユニットを識別するための識別情報（上述の例では、＃１やａ）に基づく特定の命令が処理対象から除外されるように動作する。
【００６３】
次に図８の例について説明する。図８において、実接続情報Ｄ２は、４つの実拡張ユニット３００が接続されており、その種類は基本ユニット１００側から順に、Ｃ、Ｂ、Ｃ、Ｄであることを示している。ユニット設定情報Ｄ１は図４（Ｂ）に例示したものと同様である。
【００６４】
図６、図７の例の場合と同様に、まず、接続の順番で１番目の拡張ユニット３００の種類を比較する。すると、実接続情報Ｄ２では種類がＡであり、ユニット設定情報Ｄ１ではＣであるから両者は一致しない。しかし、ユニット設定情報Ｄ１では接続の順番で１番目の拡張ユニットＡに接続予約が設定されており、実際には接続されていない可能性がある。
【００６５】
そこで、ユニット設定情報Ｄ１の２番目の拡張ユニット３００と比較する。すると、拡張ユニット３００の種類がＢであり、実接続情報Ｄ２の１番目の拡張ユニット３００の種類と一致しない。よって、この場合は、ユニット設定情報Ｄ１で想定されていないユニット構成であり、制御プログラムが実行不可能であるとしてエラーとする（図３（Ｂ）のＳ１４）。
【００６６】
このようにして拡張ユニット３００の種類を照合することで、拡張ユニット３００の接続ミスや、別システムに誤って制御プログラムやユニット設定情報をダウンロードしたことを検知することができる。
【００６７】
次に図９の例について説明する。図９において、実接続情報Ｄ２は、４つの実拡張ユニット３００が接続されており、その種類は基本ユニット１００側から順に、Ａ、Ｂ、Ｃ、Ｄであることを示している。ユニット設定情報Ｄ１は図４（Ｂ）に例示したものと接続予約情報のみが異なり、＃２の想定拡張ユニットＢが接続予約対象となっている。
【００６８】
図６〜図８の例の場合と同様に、まず、接続の順番で１番目の拡張ユニット３００の種類を比較する。すると、実接続情報Ｄ２では種類がＡであり、ユニット設定情報Ｄ１でもＡであるから両者は一致する。
【００６９】
次に、接続の順番で２番目の拡張ユニット３００の種類を比較する。すると、実接続情報Ｄ２では種類がＢであり、ユニット設定情報Ｄ１でもＢであるから両者は一致する。しかし、ユニット設定情報Ｄ１では接続の順番で２番目の想定拡張ユニットＢに接続予約が設定されており、実際には接続されていない可能性がある。
【００７０】
そこで、ユニット設定情報Ｄ１の３番目の想定拡張ユニット３００と比較する。すると、その種類がＢであり、実接続情報Ｄ２の２番目の実拡張ユニット３００の種類と一致する。この場合は、接続予約がされていた拡張ユニットＢが実際には接続されていないと判断することとする。
【００７１】
続いて、実接続情報Ｄ２の３〜４番目の拡張ユニット３００の種類と、ユニット設定情報Ｄ１の４〜５番目の拡張ユニット３００の種類とを順次比較するといずれも一致している。
【００７２】
よって、照合は成立したものと判断し、割り当て結果は情報Ｄ３とする。つまり、接続予約情報で特定される＃２の想定拡張ユニットＢの接続が、実接続情報Ｄ２から確認されなかったので、＃２の想定拡張ユニットＢの接続の順番に相当する順番（２番）を飛ばした順番（１番、３番〜）で割当ルールを適用する。その結果、各実拡張ユニットＡ、Ｂ、Ｃ、Ｄには、識別情報＃１、＃３、＃４、＃５をそれぞれ割り当てる。これにより、識別情報の割り当てに齟齬が生じることを防止できる。
【００７３】
＜接続予約された拡張ユニットの処理＞
接続予約された接続未確定拡張ユニットである想定拡張ユニット３００が実際には接続されていなかった場合、その拡張ユニット３００に関する命令を上記の通り処理対象から除外することで、制御プログラムを正常に実行できる。
【００７４】
そこで、制御プログラムの実行の際、実ユニット設定情報を参照して、接続未確定拡張ユニットが実際に存在するかを確認して処理を分岐させることができる。この処理は、例えば、制御プログラムの中間コードをコンパイルする際に設定できる。
【００７５】
図３（Ｃ）は基本ユニット１００が制御プログラムの中間コードを実行形式のコードに変換する変換処理の例を示している。この変換は、実ユニット設定情報を設定した後、フラッシュＲＯＭ２１に格納してあるコンパイラをＣＰＵ１１が実行することで行うことができ、実行形式の制御プログラムのコードは、上記の通り、ＳＤＲＡＭ２２に格納することができる。
【００７６】
Ｓ２１では、１単位分の中間コードを読み出し、Ｓ２２ではこれを実行形式コードに変換する。その際、拡張ユニット３００に関する処理については、実ユニット設定情報に基づいて、拡張ユニット３００が存在するか（実行可能か）を判断する処理を組み込み、存在しない場合には特定の処理（後述する未確認時の処理）を実行させるようにする。対象とする拡張ユニット３００は、少なくとも接続予約の対象となっている接続未確認拡張ユニットであるが、本実施形態では全拡張ユニット３００を対象としている。
【００７７】
Ｓ２３では、全中間コードについて変換が完了したかを判定し、完了していない場合はＳ２１へ戻って同様の処理を繰り返す。
【００７８】
次に、こうして実行形式のコードに変換された制御プログラムを基本ユニット１００が実行する場合の処理について図１０を参照して説明する。
【００７９】
Ｓ３１では、制御プログラムから命令語を取得する。Ｓ３２では、Ｓ３１の命令語のオペランドで指定された拡張ユニット３００が実際に存在するか否かを実ユニット設定情報に基づき判別する。この処理は上述したＳ２２の処理の際に組み込まれたものである。拡張ユニット３００が存在する場合はＳ３３へ進み、命令語の処理を実行する。つまり、この命令語が処理対象から除外されずに動作する。存在しない場合はＳ３４へ進み、未確認時の処理を行う。
【００８０】
Ｓ３４では、その命令語を実行せずにＳ３５へ進む。つまり、この命令語が処理対象から除外されるように動作する。なお、上述したように、その命令語を実行しても、その実行結果が拡張ユニット３００に伝わらなければ足りる。その際、実際に存在していない拡張ユニット３００の処理を実行しなかったことを報知してもよい。報知は、例えば、表示部３による表示であってもよいし、エラーＬＥＤやエラーリレー等による報知でもよい。報知を行うことで、拡張ユニット３００の有無を認識し、その認識結果に基づいて制御プログラムが実行されていることをユーザに認識させることができる。
【００８１】
Ｓ３５では、制御プログラムの全命令語の処理が完了したか否かを判定し該当しない場合はＳ３１へ戻って次の命令語を処理し、該当する場合は１単位の処理（１スキャン）を終了する。
【００８２】
本例では、コンパイル時に実行可能判断を組み込む方式としたが、ラダー図の作成時に、そのプログラムの文法上、拡張ユニット３００が実際に接続されていることを条件とした処理の定義を許容するようにしてもよい。
【００８３】
例えば、図１１の例では、図５に例示したラダー図８０ａについて、＃１の想定拡張ユニットが実際に存在するか否かを判断するコントロールリレーＣＲが追加されており、＃１の想定拡張ユニットが実際に存在することを条件として後続の処理を実行させるように定義されている。この場合も、コントロールリレーＣＲの対象は接続予約の対象である拡張ユニットに限る必要はない。
【００８４】
このようなプログラミングを可能とすることで、ユーザの意図どおりに実行可能判断を行うようにすることができる。
【００８５】
なお、本実施形態では、拡張ユニット３００が実際には接続されていなかった場合、その拡張ユニット３００に関する制御プログラムの処理を実行しないようにしたが、例えば、制御プログラムの処理は実行するが、出力リフレッシュにおいて、その拡張ユニット３００に対してデータを出力しない、という方策も採用可能である。
【図１】
2014052672.tif 000003
【図２】
2014052672.tif 000004
【図３】
2014052672.tif 000005
【図４】
2014052672.tif 000006
【図５】
2014052672.tif 000007
【図６】
2014052672.tif 000008
【図７】
2014052672.tif 000009
【図８】
2014052672.tif 000010
【図９】
2014052672.tif 000011
【図１０】
2014052672.tif 000012
【図１１】
2014052672.tif 000013