JP2014052672A - プログラマブルコントローラ、プログラム作成支援装置、プログラム及び基本ユニット - Google Patents

プログラマブルコントローラ、プログラム作成支援装置、プログラム及び基本ユニット Download PDF

Info

Publication number
JP2014052672A
JP2014052672A JP2012194556A JP2012194556A JP2014052672A JP 2014052672 A JP2014052672 A JP 2014052672A JP 2012194556 A JP2012194556 A JP 2012194556A JP 2012194556 A JP2012194556 A JP 2012194556A JP 2014052672 A JP2014052672 A JP 2014052672A
Authority
JP
Japan
Prior art keywords
unit
extension
connection
setting information
expansion
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2012194556A
Other languages
English (en)
Other versions
JP5992776B2 (ja
Inventor
Kenichi Shimada
賢一 島田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Keyence Corp
Original Assignee
Keyence Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Keyence Corp filed Critical Keyence Corp
Priority to JP2012194556A priority Critical patent/JP5992776B2/ja
Publication of JP2014052672A publication Critical patent/JP2014052672A/ja
Application granted granted Critical
Publication of JP5992776B2 publication Critical patent/JP5992776B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Programmable Controllers (AREA)

Abstract

【課題】異なるユニット構成間で制御プログラムを流用するに際して、制御プログラム上の識別情報の修正手間を減らし、開発効率を高めること。
【解決手段】基本ユニットと、該基本ユニットに接続される複数の拡張ユニットとを有するプログラマブルコントローラにおいて、プログラム作成支援装置から設定情報を取得する設定情報取得手段と、前記基本ユニットに接続されている拡張ユニットのユニット構成を特定する特定手段と、前記設定情報に含まれるユニット構成と、前記特定手段により特定されたユニット構成とを照合する照合手段と、を備え、前記照合手段の照合結果に基づいて、前記設定情報で特定される接続未確定拡張ユニットが実際には接続されていない場合に、該接続未確定拡張ユニットを識別するための識別情報に基づく特定の命令が処理対象から除外されるように動作する。
【選択図】図10

Description

本発明はプログラマブルコントローラに関する。
工場等に設置される各種のアクチュエータを統括的に制御するための制御装置として、プログラマブルコントローラ(PLC)が知られている。PLCでは、統合的な制御を司る基本ユニットに、複数種類の拡張ユニットを接続可能である(例えば特許文献1)。拡張ユニットとしては、例えば、入出力点数を拡張する入出力ユニット、通信機能を付加する通信ユニット、センサ信号を処理するセンサユニット等が知られている。
ラダープログラムに代表される制御プログラムを実行する上で、基本ユニットは、実際に接続されている拡張ユニットを認識した上で、制御プログラム上で定義されている拡張ユニットとの対応関係を識別することになる。
特開2011−28563号公報
ここで、ユニット構成が基本的に同じ派生的な複数種類のシステムの制御プログラムを開発する場合、システム間で制御プログラムを流用することで、開発効率を向上できる場合がある。
例えば、将来的に想定されているユニット構成に対して、現時点ではその一部の拡張ユニットを用いないユニット構成を採用し、一部の拡張ユニットを除く他の拡張ユニットについては同じ処理を実行させる場合である。この例の場合、将来のユニット構成を前提として制御プログラムを作成すれば、この制御プログラムを現時点のユニット構成に流用できる場合がある。
しかし、将来のシステム構成と現時点のシステム構成とが一部異なるため、将来のユニット構成を前提とした制御プログラムでは、制御プログラム上で定義されている拡張ユニットと実際に接続されている拡張ユニットとの対応関係に齟齬が生じて実行できない。
そこで、制御プログラム上の識別情報を修正した上で流用することが考えれるが、手間を要し、制御プログラムの流用による開発効率の向上効果が薄れることになる。
本発明の目的は、異なるユニット構成間で制御プログラムを流用するに際して、制御プログラム上の識別情報の修正手間を減らし、開発効率を高めることにある。
本発明によれば、基本ユニットと、該基本ユニットに接続される複数の拡張ユニットとを有し、外部に接続されるプログラム作成支援装置から各ユニットに対する処理を規定する制御プログラムを含む設定情報を取得可能であって、取得した設定情報に基づき動作するプログラマブルコントローラにおいて、前記設定情報は、前記複数の拡張ユニットの各々を識別するための識別情報が記述された制御プログラムと、前記基本ユニットと前記複数の拡張ユニットのユニット構成を示すユニット構成と、前記プログラム作成支援装置にて設定され、前記基本ユニットと接続未確定の接続未確定拡張ユニットを示す情報と、が含まれており、前記プログラム作成支援装置から前記設定情報を取得する設定情報取得手段と、前記基本ユニットに接続されている拡張ユニットのユニット構成を特定する特定手段と、前記設定情報取得手段により取得した前記設定情報に含まれるユニット構成と、前記特定手段により特定されたユニット構成とを照合する照合手段と、を備え、前記照合手段の照合結果に基づいて、前記接続未確定拡張ユニットが接続されていない場合に、前記制御プログラムにおいて該接続未確定拡張ユニットを識別するための識別情報に基づく特定の命令が処理対象から除外されるように動作することを特徴とするプログラマブルコントローラが提供される。
本発明によれば、異なるユニット構成間で制御プログラムを流用するに際して、制御プログラム上の識別情報の修正手間を減らし、開発効率を高めることができる。
本発明の一実施形態に係る基本ユニットの外観図。 図1の基本ユニット、拡張ユニット及び支援装置のブロック図。 (A)は支援装置の処理例を示すフローチャート、(B)及び(C)は基本ユニットの処理例を示すフローチャート。 (A)は支援装置における設定画面例を示す図、(B)はユニット設定情報の例を示す図。 支援装置における編集画面例を示す図。 識別情報の割り当ての説明図。 識別情報の割り当ての説明図。 識別情報の割り当ての説明図。 識別情報の割り当ての説明図。 基本ユニットの処理例を示すフローチャート。 コントロールリレーの定義例を示す図。
<構成例>
図1は本発明の一実施形態に係る基本ユニット100の外観図である。本実施形態の場合、基本ユニット100は、CPUユニットを構成しており、その筐体上部には端子台1が設けられている。端子台1は複数の出力端子及び複数の入力端子を含む。出力端子には出力機器が、入力端子には入力機器が、それぞれ接続可能である。出力機器にはリレー、ソレノイド、モータ等のアクチュエータ、或いは、アクチュエータのドライバが含まれる。入力機器にはセンサ、或いは、センサの信号処理回路が含まれる。
接続部2は、拡張ユニット(不図示)を接続するための拡張バスである。図1では接続部2は、端子保護用のカバー部材2aで覆われており、カバー部材2aを取り外すことで露出する。拡張ユニットには更に拡張ユニットを接続することが可能であり、接続部2は複数の拡張ユニットを直列的に接続することが可能である。こうして基本ユニット100と複数の拡張ユニットとを含むPLCを構築することができる。なお、本実施形態では、複数の拡張ユニットを直列的に接続するようにしているが、例えば並列的に接続してもよいし、基本ユニット100を中心として拡張ユニットをスター型に接続してもよく、接続形態は問われない。
基本ユニット100の筐体正面には表示部3、操作部4、接続部5が設けられている。表示部3はデバイス情報等、各種の情報を表示可能である。操作部4は複数のボタンから構成され、表示部3の表示内容の切り替えなど、ユーザの指示を基本ユニット100に対して手動入力可能となっている。接続部5には、基本ユニット100と外部機器との有線通信を可能とする通信ケーブルが接続される。また、その他、エラー通知用のLED等が設けられてもよい。
図2は基本ユニット100、外部機器としてのプログラム作成支援装置200(以下、支援装置200という。)、及び、拡張ユニット300のブロック図である。支援装置200は、例えば、パソコンであり、ユーザによる制御プログラムの作成を支援する作成支援プログラムがインストールされている。
支援装置200は、制御部50を備える。制御部50はCPU51、記憶部52、IF(インタフェース)部53を含む。記憶部52は、例えば、ROM、RAM、ハードディスクであり、上記の作成支援プログラムはこの記憶部52に格納可能である。IF部53は、例えば、表示部60、操作部61に対するI/Oインタフェース、基本ユニット100との通信のための通信インタフェースを含む。表示部60はユーザに情報を表示する。操作部61は、例えば、キーボード、マウス等である。
基本ユニット100は、制御部10、記憶部20、ASIC30、を含む。制御部10は例えば汎用の1チップマイコンであり、CPU11、記憶部12、IF部13を含む。記憶部12は、例えば、ROM、RAMである。IF部13は、例えば、表示部3、操作部4に対するI/Oインタフェース、支援装置200との通信のための通信インターフェースを含む。
記憶部20は、本実施形態の場合、フラッシュROM21と、SDRAM(シンクロナスダイナミックRAM)22と、を含むが、他の種類のメモリでもよく、1つのメモリでもよい。フラッシュROM21には、例えば、支援装置200からダウンロードされる、制御プログラム(中間コード)及び後述する各種の設定の情報を含む設定情報、或いは、後述する各処理のプログラムが格納される。また、中間コードをコンパイルするプログラムも格納可能である。SDRAM22には、例えば、実行形式の制御プログラムが格納される。記憶部20はデバイスとしても利用可能であるが、記憶部12をデバイスとして利用することで、デバイス情報の読み書き時間を短縮できる。
制御動作中、CPU11は、SDRAM22に記憶された実行形式の制御プログラムを読み出し、実行する。CPU11は、例えば、入力端子からの情報を取得し、入力機器からの入力状態を示すデバイス情報を更新する(入力リフレッシュ)。その後、制御プログラムを1スキャン実行しつつ、その中で記憶部12のデバイス情報(出力機器への出力状態を示すデバイス情報)を更新する。そして、更新後のデバイス情報のうち、出力端子を介して接続される出力機器用のデバイス情報を出力端子から出力する(出力リフレッシュ)。これらの処理を繰り返していくことで、制御が実行されることになる。ASIC30は、接続部2を介した拡張ユニット300との通信処理に特化した回路である。
各拡張ユニット300は、ASIC301、接続部302及び303を備え、その拡張ユニットの機能に応じた不図示の回路を更に備える。ASIC301は、接続部302及び303を介して、基本ユニット100或いは他の拡張ユニット300との通信処理に特化した回路である。接続部302は基本ユニット100又は他の拡張ユニット300に接続される拡張バスであり、接続部303は他の拡張ユニット300の接続部302に接続される拡張バスである。
図2に示すように、基本ユニット100の接続部2と、拡張ユニット100の接続部302とを接続し、更に、その接続部303を別の拡張ユニット100の接続部302に接続し、順次拡張ユニット100を接続していくことで、基本ユニット100の接続部2に複数の拡張ユニット100を直列に接続することができる。
<処理例>
次に、基本ユニット100のCPU11が実行する処理例、及び、支援装置200のCPU51が実行する処理例、について説明する。まず、支援装置200の処理例について説明する。
<支援装置の処理例>
図3(A)は支援装置200の処理例を示すフローチャートである。本実施形態では、制御プログラムの作成の前提として、まず、ユニット構成の設定を行う。S1では、操作部61に対するユーザの操作に基づいて、ユニット構成を設定する。ユニット構成の設定とは、制御プログラム上で想定される基本ユニット100と拡張ユニット(想定拡張ユニットとも言う。)300に関する設定であり、基本ユニット100に対する想定拡張ユニットの接続態様の設定及び各想定拡張ユニットの個別設定等である。詳細は後述する。
S2では、操作部61に対するユーザの操作に基づいて、制御プログラムを編集する。ここでは、ユーザによるラダー図の作成を支援し、受け付ける。その一例については後述する。
S3では、操作部61に対するユーザの指示によって、S1で設定したユニット構成の情報及びS2で編集した制御プログラム(中間コード)を含む設定情報(プロジェクトデータとも言う。)を基本ユニット100に送信する。このプロジェクトデータは基本ユニット100のフラッシュROM21に格納される。こうして基本ユニット100は、設定情報を取得することになる。
<ユニット構成の設定>
S1のユニット構成の設定について図4(A)を参照して説明する。図4(A)は表示部60の表示例を示す。構成表示部70には、ユーザが現在選択しているユニット構成が表示される。同図の例では、基本ユニット100と、ユーザが選択した5つの想定拡張ユニット300と、エンドユニットと、から構成される暫定的なPLCの構成が表示されている。なお、本実施形態ではエンドユニットを設けているが、これを省略することは勿論可能である。
5つの想定拡張ユニット300は4種類の想定拡張ユニットを含み、説明の便宜上、拡張ユニットの種類はA〜Dで示している。つまり、想定拡張ユニットBは2つあり、他の想定拡張ユニットA、C及びDはそれぞれ1つずつである。種類とは、例えば、拡張ユニットの型式を単位として区別することができる。なお、特に図示しないが基本ユニット100についてもユーザが選択可能である。エンドユニットは、PLCの終端を特定するためのユニットであり、最端部に位置する拡張ユニットに接続される。
ユニット選択表示部73には、ユーザが選択可能な想定拡張ユニット300の種類が、機能毎に区分けされて表示されている。例えば同図の例では、I/Oユニット、アナログユニットといった機能毎の区分けで表示されている。ユーザは、好みの拡張ユニットを選択し、追加ボタン74を操作するか構成表示部70にドラッグ操作すると、構成表示部70に表示されているPLCに追加される。
識別情報表示部71には、各想定拡張ユニット300の識別情報が表示される。識別情報は制御プログラム上で各拡張ユニットを識別ための情報である。本実施形態の場合、識別情報は、基本ユニット100に対する接続の順番で規定される割当ルールに従って自動的に割り当てられる。この方式は、比較的簡便に拡張ユニットを識別できるという利点がある。同図の例では基本ユニット100側から、#1、#2...と番号で識別情報が割り当てられているが、接続の順番に従っていれば番号以外(例えば、a、b、c等)でもよい。なお、基本ユニット100には便宜的に#0が割り当てられている。
ユーザは、例えば、表示されている想定拡張ユニット300を選択してドラッグ操作を行うことで、想定拡張ユニット300の接続の順番を変更することができ、この場合、識別情報はリナンバされる。また、ユーザは、構成表示部70に表示されている想定拡張ユニット300を選択して、取消ボタン75を操作すると、構成表示部70に表示されているPLCから、その想定拡張ユニット300を削除でき、この場合、識別情報はリナンバされる。
予約表示部72は、想定拡張ユニット300毎に接続予約が選択されている否かを示す。同図の例では、#1の想定拡張ユニットAについて接続予約が選択されている。接続予約とは、実際には接続されない可能性があることをユーザが宣言しておくものである。すなわち、基本ユニットと接続未確定の拡張ユニットであることをユーザが宣言しておくものである。ユーザは、構成表示部70に表示されている想定拡張ユニット300を選択して、接続予約ボタン76を操作することで接続予約の対象となる接続未確定拡張ユニットを指定することができ、その拡張ユニット300について接続予約が受け付けられる。
この接続予約機能は、制御プログラムの流用を容易にすることを目的としたものである。例えば、将来のユニット構成に含まれるが、現時点で想定しているPLCには含まれない拡張ユニット300について、この接続予約をしておく。すると、将来のユニット構成を想定した制御プログラムを作成すれば、現時点で想定しているPLCに対してその制御プログラムを流用することが容易になる。詳細は後述する。
次に、ユーザは、構成表示部70に表示されている想定拡張ユニット300を選択して、個別設定ボタン77を操作すると、その想定拡張ユニットの個別設定を行う画面が表示され(不図示)、その詳細設定が行える。詳細設定は、例えば、アナログユニットの場合、そのレンジ等を含み、拡張ユニット300が実際に動作する際に必要な設定である。
ユーザが設定ボタン78を操作すると、ユニット構成の設定が確定し、ユニット設定情報が作成される。ユニット設定情報は、S1のユニット構成の設定においてユーザが設定した内容を示し、少なくとも図4(B)に示すユニット設定情報D1を含む。
図4(B)に示すユニット設定情報D1は、ユーザがこれから作成する制御プログラムで想定される、基本ユニット100に対する想定拡張ユニットの接続態様を示しており、順番情報、種類及び接続予約情報を含む。順番情報は、基本ユニット100に対する各想定拡張ユニット300の接続の順番を示す。本実施形態の場合、識別情報が想定拡張ユニット300の接続の順番を示しているため、これを順番情報として用いているが、接続の順番を特定可能であればどのような情報であってもよい。なお、図4(B)の例は、図4(A)のPLCの構成例のまま、設定内容が確定した場合を想定している。また、本実施形態では、識別情報を順番情報として用いているが、要するに、各ユニットを識別し得る識別情報であればよい。
図4(B)のユニット設定情報D1から、基本ユニット100に対して拡張ユニット300が5台接続され、基本ユニット100側から順に、その種類がA、B、B、C、Dであることが認識可能となっている。また、接続予約情報から、#1の拡張ユニットAは、接続未確定拡張ユニットとして接続予約が設定されていることが認識可能となっている。このユニット設定情報D1は、記憶部52に保存され、S3の送信処理において制御プログラムと共に基本ユニット100に送信される。基本ユニット100では、受信したユニット設定情報D1をフラッシュROM21或いは記憶部12に格納しておくことが可能である。
<制御プログラムの編集>
S2の制御プログラムの編集例について図5を参照して説明する。図5は表示部60の表示例を示す。編集領域80には、ユーザの操作に基づいてラダー図が表示される。その際、想定拡張ユニット300に関わる処理については識別情報でその想定拡張ユニット300が特定されて記述される。同図のラダー図80aは#1の想定拡張ユニットAの処理を例示している。機能ボタン群81は、ユーザによるラダー図の作成を簡便化する機能ボタン群であり、例えば、定型的なラダー図のシンボル描画をボタン操作によって可能とする。
図5に示すように、想定拡張ユニットAの処理は、想定拡張ユニットを識別するための識別情報(#1)に基づく特定の命令であると言える。実際のラダープログラムは、数百行〜数千行のものまで幅広くあり、この特定命令もあらゆるところに散らばっている。従来は、想定拡張ユニットAが基本ユニット100に接続されている場合、例えば想定拡張ユニットCの処理を記述するためには、識別情報(#4)を用いて記述する必要があった。
一方、想定拡張ユニットAが基本ユニット100に接続されていない場合、基本ユニット100から順番に、想定拡張ユニットBに#1、想定拡張ユニットBに#2、想定拡張ユニットCに#3、想定拡張ユニットDに#4の各ユニット番号が振られるため、例えば拡張ユニットCの処理を記述するためには、識別情報(#3)を用いて記述する必要があった。ということは、ユーザは、拡張ユニットAが基本ユニットに接続される場合とされない場合との2つのケースを想定して、2種類の制御プログラムを保存しておく、つまり、2重管理をしなければならず、手間が掛かっていた。2重管理を避けるためには、各ケースで、制御プログラムのユニット番号を書き換える必要があり、しかも場合によっては何十箇所も修正する必要があり、非常に手間が掛かっていた。
本実施形態に係る基本ユニット100は、このような手間を省くものとして有用である。なお、本実施形態では、識別情報の一例として「ユニット番号」を用いているが、他にも例えば、ユニット番号と対応付けられたリレー番号とする等、種々の態様が可能である。
ラダー図が完成すると、ユーザの指示により、支援装置200はラダー図を中間コード(例えばニモニックコード)に変換する。中間コードは記憶部52に保存され、S3の送信処理においてユニット設定情報と共に基本ユニット100に送信される。基本ユニット100では、受信した中間コードをフラッシュROM21に格納しておくことが可能である。
<基本ユニットの処理例>
次に、基本ユニット100の処理例について説明する。まず、基本ユニット100が、これに接続されている拡張ユニット300を認識し、ユニット設定情報と照合して、識別情報を割り当てる処理について図3(B)を参照して説明する。図3(B)は照合・割当処理を示すフローチャートであり、基本ユニット100の電源投入時やプロジェクトデータを更新した場合等に実行される。
S11では実際のユニット構成を特定する処理を行う。ここでは、接続部2を介した拡張ユニット300との通信により、接続部2に実際に接続されている拡張ユニット300である、実拡張ユニット300を特定する。本実施形態の場合、特定内容には、実拡張ユニット300の種類と、基本ユニット100に対する接続の順番が含まれる。これらを特定できれば、通信の手法はどのようなものでもよい。例えば、基本ユニット100側にある実拡張ユニット300から順に、エンドユニット側の端部の実拡張ユニット300まで、順々に実拡張ユニット300の種類を取得する方法がある。
つまり、基本ユニット100が隣の想定拡張ユニット300に接続確認コマンドを送り、そのレスポンスに基づいて、その想定拡張ユニット300をユニット番号#1とする。また、基本ユニット100は、ユニット番号#1の隣の想定拡張ユニット300に接続確認コマンドを送り、そのレスポンスに基づいて、その想定拡張ユニット300をユニット番号#2とする。これを繰り返せば、全ての想定拡張ユニット300に対してユニット番号を割り当てることができる。一方で、実拡張ユニット300が基本ユニット300に自身の種類と接続位置とを通知する方法でも良い。
S12では、S12ではユニット設定情報D1と、S11で特定された実ユニット構成とを照合する。具体例は後述する。照合が成立した場合はS13へ進み、成立しない場合はS14へ進む。S13では、S11で認識された各実拡張ユニット300に識別情報を割り当てる。識別情報及び対応する実拡張ユニット300の種類は、SDRAM22或いは記憶部12に、実際のユニット構成の設定情報(以下、実ユニット設定情報ともいう。)として保存する。
この識別情報は、制御プログラムを実行する上で実拡張ユニット300を区別するためのものであり、図4(A)を参照して説明したユニット構成の設定の場合と同じ割当ルールで割り当てることを基本とする。なお、割当ルールは本実施形態で説明したルールに限られず、様々な方式を採用可能である。
S14ではエラー処理を行う。ここでは、例えば、実拡張ユニット300に対する識別情報の割り当てを行わず、識別情報の割り当てに失敗したことを表示部3による表示によって報知する。以上により一単位の処理を終了する。
<割り当て例>
次に、S12の照合及びS13の割り当ての具体例を図6〜図9を参照して説明する。まず、図6の例について説明する。
図6において、実接続情報D2は、S11における実ユニット構成の特定結果である。図6の例では、実接続情報D2は、4つの実拡張ユニット300が接続されており、その種類は基本ユニット100側から順に、B、B、C、Dであることを示している。支援装置200からダウンロードされたユニット設定情報D1は図4(B)に例示したものと同様である。
S12の照合では、例えば、まず、接続の順番で1番目の拡張ユニット300の種類を比較する。すると、実接続情報D2では種類がBであり、ユニット設定情報D1ではAであるから両者は一致しない。しかし、ユニット設定情報D1では接続の順番で1番目の拡張ユニットAに接続予約が設定されており、実際には接続されていない可能性がある。そこで、ユニット設定情報D1の2番目の拡張ユニット300と比較する。すると、拡張ユニット300の種類がBであり、実接続情報D2の1番目の拡張ユニット300の種類と一致している。
続いて、実接続情報D2の2〜4番目の拡張ユニット300の種類と、ユニット設定情報D1の3〜5番目の拡張ユニット300の種類とを順次比較するといずれも一致している。
よって、照合は成立したものと判断し、割り当て結果は情報D3とする。つまり、接続予約情報で特定される接続未確定拡張ユニットである想定拡張ユニットAの接続が、実接続情報D2から確認されなかったので、想定拡張ユニットAの接続の順番に相当する順番(1番)を飛ばした順番(2番〜)で割当ルールを適用する。その結果、各実拡張ユニットB、B、C、Dには、識別情報#2、#3、#4、#5をそれぞれ割り当てる。これにより、識別情報の割り当てに齟齬が生じることを防止できる。その結果、制御プログラムを流用しても、書き換えが不要になり、開発効率を高めることができる。
なお、図6を用いて説明した方法は一例であって、その他にも例えば、実接続情報D2に基づいて、まずは仮の識別情報として、#1,#2,#3,#4を割り当てる。そして、想定拡張ユニットAが接続予約情報で特定される想定拡張ユニットであることに基づいて、#1を欠番とし、#2,#3,#4,#5と割り当てし直す。これにより、割り当て結果の情報D3と同様の結果が得られる。
次に、図7の例について説明する。図7において、実接続情報D2は、5つの実拡張ユニット300が接続されており、その種類は基本ユニット100側から順に、A、B、B、C、Dであることを示している。ユニット設定情報D1は図4(B)に例示したものと同様である。
図6の例の場合と同様に、まず、接続の順番で1番目の拡張ユニット300の種類を比較する。すると、実接続情報D2では種類がAであり、ユニット設定情報D1ではAであるから両者は一致している。しかし、ユニット設定情報D1では接続の順番で1番目の拡張ユニットAに接続予約が設定されており、実際には接続されていない可能性がある。そこで、ユニット設定情報D1の2番目の拡張ユニット300と比較する。すると、拡張ユニット300の種類がBであり、実接続情報D2の1番目の拡張ユニット300の種類と一致しない。よって、この場合は、接続予約がされていた拡張ユニットAが実際に接続されていると判断できる。
続いて、実接続情報D2の2〜5番目の拡張ユニット300の種類と、ユニット設定情報D1の2〜5番目の拡張ユニット300の種類とを順次比較するといずれも一致している。
よって、照合は成立したものと判断し、割り当て結果は情報D3とする。つまり、図7の例では、接続予約情報で特定される接続未確定拡張ユニットである想定拡張ユニットAの接続が、実接続情報D2から確認されたので、そのままの順番で割当ルールを適用する。その結果、各実拡張ユニットA、B、B、C、Dには、識別情報#1、#2、#3、#4、#5をそれぞれ割り当てる。これにより、識別情報の割り当てに齟齬が生じることを防止できる。
ここで、図6の例と図7の例とでは、拡張ユニットAの存在の有無のみが異なり、残りの拡張ユニットB、B、C、Dについては種類が同じである。そこで、拡張ユニットAが存在することを前提として接続予約を設定して制御プログラムを作成しておけば、拡張ユニットAが実際には無い場合(図6の例の場合)にも、この制御プログラムを流用できる。その際、拡張ユニットの識別情報を修正することは不要である。このように本実施形態では、異なるユニット構成間で制御プログラムを流用するに際して、識別情報の割り当てに齟齬が生じることを防止することができる。
なお、このように本実施形態では、ユニット番号(識別情報の一例)の割り当てを工夫することで、簡易に制御プログラムの流用が可能なプログラマブルコントローラを実現することができる。例えば識別情報がa,b,c等の数字以外であっても、本発明は適用可能である。例えば図6において、ユニット設定情報D1の順番情報が左から順にa,b,c,d,eであり、接続予約情報で特定される想定拡張ユニットがAであると仮定した場合、照合結果に基づいて割り当て処理を行うと、aを割り当てず、左から順にb,c,d,eが割り当てられる。その結果、制御プログラムを実行する際に、制御プログラムに記述されたb〜eの識別情報を書き換える必要がなくなる(もし、左から順番にa,b,c,dと割り当てられると、識別情報を書き換えなければならない)。
但し、制御プログラムに識別情報aの記述は残されているため、基本ユニット100は、この識別情報aに基づく特定の命令は処理対象から除外されるように制御プログラムを実行する。例えば、識別情報aに基づく特定の命令をスキップ(無視、省略)してもよいし、事前に識別情報aに基づく特定の命令を無効化してもよい。また、基本ユニット100のCPU11は、識別情報aに基づく特定の命令を実行しても実行結果を拡張ユニットに向けて出力しないようにしてもよいし、或いは、基本ユニット100のCPU11は、識別情報aに基づく特定の命令を実行して実行結果を実拡張ユニット300に向けて出力するが、ASIC30においてこの出力をブロックし、実質的に実拡張ユニット300が実行結果を受信しないような構成にしてもよい。
このように、本実施形態に係る基本ユニット100は、照合結果に基づいて、接続予約情報で特定される想定拡張ユニットAが存在しない場合、制御プログラムにおいて想定拡張ユニットを識別するための識別情報(上述の例では、#1やa)に基づく特定の命令が処理対象から除外されるように動作する。
次に図8の例について説明する。図8において、実接続情報D2は、4つの実拡張ユニット300が接続されており、その種類は基本ユニット100側から順に、C、B、C、Dであることを示している。ユニット設定情報D1は図4(B)に例示したものと同様である。
図6、図7の例の場合と同様に、まず、接続の順番で1番目の拡張ユニット300の種類を比較する。すると、実接続情報D2では種類がAであり、ユニット設定情報D1ではCであるから両者は一致しない。しかし、ユニット設定情報D1では接続の順番で1番目の拡張ユニットAに接続予約が設定されており、実際には接続されていない可能性がある。
そこで、ユニット設定情報D1の2番目の拡張ユニット300と比較する。すると、拡張ユニット300の種類がBであり、実接続情報D2の1番目の拡張ユニット300の種類と一致しない。よって、この場合は、ユニット設定情報D1で想定されていないユニット構成であり、制御プログラムが実行不可能であるとしてエラーとする(図3(B)のS14)。
このようにして拡張ユニット300の種類を照合することで、拡張ユニット300の接続ミスや、別システムに誤って制御プログラムやユニット設定情報をダウンロードしたことを検知することができる。
次に図9の例について説明する。図9において、実接続情報D2は、4つの実拡張ユニット300が接続されており、その種類は基本ユニット100側から順に、A、B、C、Dであることを示している。ユニット設定情報D1は図4(B)に例示したものと接続予約情報のみが異なり、#2の想定拡張ユニットBが接続予約対象となっている。
図6〜図8の例の場合と同様に、まず、接続の順番で1番目の拡張ユニット300の種類を比較する。すると、実接続情報D2では種類がAであり、ユニット設定情報D1でもAであるから両者は一致する。
次に、接続の順番で2番目の拡張ユニット300の種類を比較する。すると、実接続情報D2では種類がBであり、ユニット設定情報D1でもBであるから両者は一致する。しかし、ユニット設定情報D1では接続の順番で2番目の想定拡張ユニットBに接続予約が設定されており、実際には接続されていない可能性がある。
そこで、ユニット設定情報D1の3番目の想定拡張ユニット300と比較する。すると、その種類がBであり、実接続情報D2の2番目の実拡張ユニット300の種類と一致する。この場合は、接続予約がされていた拡張ユニットBが実際には接続されていないと判断することとする。
続いて、実接続情報D2の3〜4番目の拡張ユニット300の種類と、ユニット設定情報D1の4〜5番目の拡張ユニット300の種類とを順次比較するといずれも一致している。
よって、照合は成立したものと判断し、割り当て結果は情報D3とする。つまり、接続予約情報で特定される#2の想定拡張ユニットBの接続が、実接続情報D2から確認されなかったので、#2の想定拡張ユニットBの接続の順番に相当する順番(2番)を飛ばした順番(1番、3番〜)で割当ルールを適用する。その結果、各実拡張ユニットA、B、C、Dには、識別情報#1、#3、#4、#5をそれぞれ割り当てる。これにより、識別情報の割り当てに齟齬が生じることを防止できる。
<接続予約された拡張ユニットの処理>
接続予約された接続未確定拡張ユニットである想定拡張ユニット300が実際には接続されていなかった場合、その拡張ユニット300に関する命令を上記の通り処理対象から除外することで、制御プログラムを正常に実行できる。
そこで、制御プログラムの実行の際、実ユニット設定情報を参照して、接続未確定拡張ユニットが実際に存在するかを確認して処理を分岐させることができる。この処理は、例えば、制御プログラムの中間コードをコンパイルする際に設定できる。
図3(C)は基本ユニット100が制御プログラムの中間コードを実行形式のコードに変換する変換処理の例を示している。この変換は、実ユニット設定情報を設定した後、フラッシュROM21に格納してあるコンパイラをCPU11が実行することで行うことができ、実行形式の制御プログラムのコードは、上記の通り、SDRAM22に格納することができる。
S21では、1単位分の中間コードを読み出し、S22ではこれを実行形式コードに変換する。その際、拡張ユニット300に関する処理については、実ユニット設定情報に基づいて、拡張ユニット300が存在するか(実行可能か)を判断する処理を組み込み、存在しない場合には特定の処理(後述する未確認時の処理)を実行させるようにする。対象とする拡張ユニット300は、少なくとも接続予約の対象となっている接続未確認拡張ユニットであるが、本実施形態では全拡張ユニット300を対象としている。
S23では、全中間コードについて変換が完了したかを判定し、完了していない場合はS21へ戻って同様の処理を繰り返す。
次に、こうして実行形式のコードに変換された制御プログラムを基本ユニット100が実行する場合の処理について図10を参照して説明する。
S31では、制御プログラムから命令語を取得する。S32では、S31の命令語のオペランドで指定された拡張ユニット300が実際に存在するか否かを実ユニット設定情報に基づき判別する。この処理は上述したS22の処理の際に組み込まれたものである。拡張ユニット300が存在する場合はS33へ進み、命令語の処理を実行する。つまり、この命令語が処理対象から除外されずに動作する。存在しない場合はS34へ進み、未確認時の処理を行う。
S34では、その命令語を実行せずにS35へ進む。つまり、この命令語が処理対象から除外されるように動作する。なお、上述したように、その命令語を実行しても、その実行結果が拡張ユニット300に伝わらなければ足りる。その際、実際に存在していない拡張ユニット300の処理を実行しなかったことを報知してもよい。報知は、例えば、表示部3による表示であってもよいし、エラーLEDやエラーリレー等による報知でもよい。報知を行うことで、拡張ユニット300の有無を認識し、その認識結果に基づいて制御プログラムが実行されていることをユーザに認識させることができる。
S35では、制御プログラムの全命令語の処理が完了したか否かを判定し該当しない場合はS31へ戻って次の命令語を処理し、該当する場合は1単位の処理(1スキャン)を終了する。
本例では、コンパイル時に実行可能判断を組み込む方式としたが、ラダー図の作成時に、そのプログラムの文法上、拡張ユニット300が実際に接続されていることを条件とした処理の定義を許容するようにしてもよい。
例えば、図11の例では、図5に例示したラダー図80aについて、#1の想定拡張ユニットが実際に存在するか否かを判断するコントロールリレーCRが追加されており、#1の想定拡張ユニットが実際に存在することを条件として後続の処理を実行させるように定義されている。この場合も、コントロールリレーCRの対象は接続予約の対象である拡張ユニットに限る必要はない。
このようなプログラミングを可能とすることで、ユーザの意図どおりに実行可能判断を行うようにすることができる。
なお、本実施形態では、拡張ユニット300が実際には接続されていなかった場合、その拡張ユニット300に関する制御プログラムの処理を実行しないようにしたが、例えば、制御プログラムの処理は実行するが、出力リフレッシュにおいて、その拡張ユニット300に対してデータを出力しない、という方策も採用可能である。

Claims (10)

  1. 基本ユニットと、該基本ユニットに接続される複数の拡張ユニットとを有し、外部に接続されるプログラム作成支援装置から各ユニットに対する処理を規定する制御プログラムを含む設定情報を取得可能であって、取得した設定情報に基づき動作するプログラマブルコントローラにおいて、
    前記設定情報は、
    前記複数の拡張ユニットの各々を識別するための識別情報が記述された制御プログラムと、
    前記基本ユニットと前記複数の拡張ユニットのユニット構成を示すユニット構成と、
    前記プログラム作成支援装置にて設定され、前記基本ユニットと接続未確定の接続未確定拡張ユニットを示す情報と、
    が含まれており、
    前記プログラム作成支援装置から前記設定情報を取得する設定情報取得手段と、
    前記基本ユニットに接続されている拡張ユニットのユニット構成を特定する特定手段と、
    前記設定情報取得手段により取得した前記設定情報に含まれるユニット構成と、前記特定手段により特定されたユニット構成とを照合する照合手段と、
    を備え、
    前記照合手段の照合結果に基づいて、前記接続未確定拡張ユニットが接続されていない場合に、前記制御プログラムにおいて該接続未確定拡張ユニットを識別するための識別情報に基づく特定の命令が処理対象から除外されるように動作することを特徴とするプログラマブルコントローラ。
  2. 前記照合手段の照合結果に基づいて、前記接続未確定拡張ユニットが接続されている場合に、前記制御プログラムにおいて該接続未確定拡張ユニットを識別するための識別情報に基づく特定の命令が処理対象から除外されずに動作することを特徴とする請求項1に記載のプログラマブルコントローラ。
  3. 前記識別情報は、前記基本ユニットに前記拡張ユニットが接続される順序に応じて割り当てられるユニット番号であって、
    前記照合手段の照合結果に基づいて、接続されている拡張ユニットに対し、前記接続未確定拡張ユニットが飛び番号となるようにユニット番号を割り当てる割当手段を備え、
    前記制御プログラムにおいて前記飛び番号に基づく特定の命令が処理対象から除外されるように動作することを特徴とする請求項1又は2に記載のプログラマブルコントローラ。
  4. 前記特定の命令を処理対象から除外して動作したことを報知する報知手段を備えた、
    ことを特徴とする請求項1乃至3のいずれか1項に記載のプログラマブルコントローラ。
  5. 前記設定情報は、
    各拡張ユニットの種類を示す種類情報を含み、
    前記特定手段が特定するユニット構成は、
    各拡張ユニットの種類を示す情報を含み、
    前記割当手段は、
    前記照合手段の照合結果が、前記種類情報と、前記特定手段により特定されたユニット構成における各拡張ユニットの種類と、が一致しないことを示す場合は、各拡張ユニットに識別情報を割り当てない、
    ことを特徴とする請求項1乃至4のいずれか1項に記載のプログラマブルコントローラ。
  6. 前記制御プログラムの中間コードを、前記接続未確定拡張ユニットに関する処理について、該接続未確定拡張ユニットが実際に存在するか否かを判断する処理を含む、実行形式のコードに変換する変換手段を備えた、
    ことを特徴とする請求項1乃至5のいずれか1項に記載のプログラマブルコントローラ。
  7. 請求項1に記載のプログラマブルコントローラの基本ユニットに接続可能なプログラム作成支援装置であって、
    前記接続未確定拡張ユニットの対象となる拡張ユニットの、ユーザによる指定を受け付ける指定受付手段と、
    前記指定受付手段で受け付けた前記接続未確定拡張ユニットを示す情報を含む前記設定情報を前記基本ユニットに送信する手段と、
    を備えたことを特徴とするプログラム作成支援装置。
  8. ユーザの操作に基づいて、制御プログラムを編集する編集手段を備え、
    前記編集手段は、
    前記接続未確定拡張ユニットが実際に前記基本ユニットに接続されていることを条件とした処理の定義を許容する、
    ことを特徴とする請求項7に記載のプログラム作成支援装置。
  9. 請求項1に記載のプログラマブルコントローラの基本ユニットに接続可能なプログラム作成支援装置を、
    前記接続未確定拡張ユニットの対象となる拡張ユニットの、ユーザによる指定を受け付ける指定受付手段、
    前記指定受付手段で受け付けた前記接続未確定拡張ユニットを示す情報を含む前記設定情報を前記基本ユニットに送信する手段、
    として機能させるプログラム。
  10. 複数の拡張ユニットが接続可能な基本ユニットであって、
    外部に接続されるプログラム作成支援装置から各ユニットに対する処理を規定する制御プログラムを含む設定情報を取得可能であって、取得した設定情報に基づき動作する基本ユニットにおいて、
    前記設定情報は、
    前記複数の拡張ユニットの各々を識別するための識別情報が記述された制御プログラムと、
    前記基本ユニットと前記複数の拡張ユニットのユニット構成を示すユニット構成と、
    前記プログラム作成支援装置にて設定され、前記基本ユニットと接続未確定の接続未確定拡張ユニットを示す情報と、
    が含まれており、
    前記プログラム作成支援装置から前記設定情報を取得する設定情報取得手段と、
    前記基本ユニットに接続されている拡張ユニットのユニット構成を特定する特定手段と、
    前記設定情報取得手段により取得した前記設定情報に含まれるユニット構成と、前記特定手段により特定されたユニット構成とを照合する照合手段と、
    を備え、
    前記照合手段の照合結果に基づいて、前記接続未確定拡張ユニットが接続されていない場合に、前記制御プログラムにおいて該接続未確定拡張ユニットを識別するための識別情報に基づく特定の命令が処理対象から除外されるように動作することを特徴とする基本ユニット。

JP2012194556A 2012-09-04 2012-09-04 プログラマブルコントローラ、プログラム作成支援装置、プログラム及び基本ユニット Active JP5992776B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012194556A JP5992776B2 (ja) 2012-09-04 2012-09-04 プログラマブルコントローラ、プログラム作成支援装置、プログラム及び基本ユニット

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012194556A JP5992776B2 (ja) 2012-09-04 2012-09-04 プログラマブルコントローラ、プログラム作成支援装置、プログラム及び基本ユニット

Publications (2)

Publication Number Publication Date
JP2014052672A true JP2014052672A (ja) 2014-03-20
JP5992776B2 JP5992776B2 (ja) 2016-09-14

Family

ID=50611145

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012194556A Active JP5992776B2 (ja) 2012-09-04 2012-09-04 プログラマブルコントローラ、プログラム作成支援装置、プログラム及び基本ユニット

Country Status (1)

Country Link
JP (1) JP5992776B2 (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5843932B1 (ja) * 2014-09-12 2016-01-13 三菱電機株式会社 プログラマブルコントローラ
WO2016030968A1 (ja) * 2014-08-26 2016-03-03 三菱電機株式会社 機器管理装置及び機器管理方法及びプログラム
JP2016110220A (ja) * 2014-12-02 2016-06-20 株式会社キーエンス プログラマブル・ロジック・コントローラおよびその制御方法
JP2016110459A (ja) * 2014-12-08 2016-06-20 株式会社キーエンス プログラマブル・ロジック・コントローラ及びプログラマブル・ロジック・コントローラの拡張ユニット、制御方法および制御プログラム
JP2016110458A (ja) * 2014-12-08 2016-06-20 株式会社キーエンス プログラマブル・ロジック・コントローラ、基本ユニット、制御方法およびプログラム
WO2016162926A1 (ja) * 2015-04-06 2016-10-13 三菱電機株式会社 プログラマブルコントローラシステム
US11656596B2 (en) 2018-10-23 2023-05-23 Keyence Corporation Programmable logic controller and program creation supporting apparatus
WO2024089821A1 (ja) * 2022-10-26 2024-05-02 三菱電機株式会社 プログラマブルコントローラおよび製造システム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1039904A (ja) * 1996-07-26 1998-02-13 Toyo Electric Mfg Co Ltd プログラマブルコントローラ
JPH11282515A (ja) * 1998-03-31 1999-10-15 Fuji Electric Co Ltd プログラマブルコントローラおよび記録媒体
JP2009265918A (ja) * 2008-04-24 2009-11-12 Mitsubishi Electric Corp 制御プログラム作成装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1039904A (ja) * 1996-07-26 1998-02-13 Toyo Electric Mfg Co Ltd プログラマブルコントローラ
JPH11282515A (ja) * 1998-03-31 1999-10-15 Fuji Electric Co Ltd プログラマブルコントローラおよび記録媒体
JP2009265918A (ja) * 2008-04-24 2009-11-12 Mitsubishi Electric Corp 制御プログラム作成装置

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016030968A1 (ja) * 2014-08-26 2016-03-03 三菱電機株式会社 機器管理装置及び機器管理方法及びプログラム
JP5843932B1 (ja) * 2014-09-12 2016-01-13 三菱電機株式会社 プログラマブルコントローラ
JP2016110220A (ja) * 2014-12-02 2016-06-20 株式会社キーエンス プログラマブル・ロジック・コントローラおよびその制御方法
JP2016110459A (ja) * 2014-12-08 2016-06-20 株式会社キーエンス プログラマブル・ロジック・コントローラ及びプログラマブル・ロジック・コントローラの拡張ユニット、制御方法および制御プログラム
JP2016110458A (ja) * 2014-12-08 2016-06-20 株式会社キーエンス プログラマブル・ロジック・コントローラ、基本ユニット、制御方法およびプログラム
WO2016162926A1 (ja) * 2015-04-06 2016-10-13 三菱電機株式会社 プログラマブルコントローラシステム
JPWO2016162926A1 (ja) * 2015-04-06 2017-04-27 三菱電機株式会社 プログラマブルコントローラシステム、プログラマブルコントローラ、及び表示装置
US10175673B2 (en) 2015-04-06 2019-01-08 Mitsubishi Electric Corporation Programmable controller system
US11656596B2 (en) 2018-10-23 2023-05-23 Keyence Corporation Programmable logic controller and program creation supporting apparatus
WO2024089821A1 (ja) * 2022-10-26 2024-05-02 三菱電機株式会社 プログラマブルコントローラおよび製造システム

Also Published As

Publication number Publication date
JP5992776B2 (ja) 2016-09-14

Similar Documents

Publication Publication Date Title
JP5992776B2 (ja) プログラマブルコントローラ、プログラム作成支援装置、プログラム及び基本ユニット
JP5039428B2 (ja) プログラマブルコントローラ及びplcシステム
JP4877068B2 (ja) ソフトウェア開発支援プログラム、ソフトウェア開発支援方法
JP5859173B1 (ja) エンジニアリングツール、プログラム編集装置およびプログラム編集システム
US20070078538A1 (en) Debug device
JP2004303217A (ja) 表示・編集装置及び表示方法並びにプログラム製品
JP2010152429A (ja) Guiアプリケーションテスト支援装置及びテスト支援方法
JP5849592B2 (ja) プログラマブルコントローラシステム、そのプログラミング装置、プログラマブルコントローラ、プログラム、デバッグ方法
US20150277413A1 (en) System construction support apparatus
US11165745B2 (en) Control system, controller, and control method
JP3805776B2 (ja) グラフィカルプログラミング装置及びプログラマブル表示器
JP5992777B2 (ja) プログラマブルコントローラ、プログラム作成支援装置及びプログラム
US11960925B2 (en) Program generating device, program generating method, and information storage medium
JP6245429B2 (ja) プログラム開発支援装置およびコンピュータプログラム
JP5153437B2 (ja) 制御プログラム作成装置
JP2011186607A (ja) フィールドデバイス、フィールドデバイスの設定方法、フィールドデバイス管理装置及びプログラム
JP4767309B2 (ja) 情報処理装置、情報処理方法、及びコンピュータプログラム
JP6469330B1 (ja) モニタ支援装置、モニタ支援方法およびモニタ支援プログラム
JP5962086B2 (ja) Plcシステム、情報表示方法、plc、および保守装置
JP5978775B2 (ja) プログラマブルコントローラ、その支援装置、プログラム、プログラム転送方法
JP6505591B2 (ja) プログラマブルコントローラ
JP2009193276A (ja) ラダープログラム作成装置およびこれを用いたラダープログラム作成実行システム
CN113094071B (zh) 一种微控制单元、其控制方法及其固件升级方法
JP4462402B2 (ja) プログラマブルコントローラ用のプログラム開発支援装置および処理方法並びにプログラムおよび記録媒体
WO2023210007A1 (ja) 情報処理装置、制御システム、情報処理方法、およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150311

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20150319

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160219

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160419

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160729

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160818

R150 Certificate of patent or registration of utility model

Ref document number: 5992776

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250