JP7322604B2 - プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム - Google Patents

プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム Download PDF

Info

Publication number
JP7322604B2
JP7322604B2 JP2019160899A JP2019160899A JP7322604B2 JP 7322604 B2 JP7322604 B2 JP 7322604B2 JP 2019160899 A JP2019160899 A JP 2019160899A JP 2019160899 A JP2019160899 A JP 2019160899A JP 7322604 B2 JP7322604 B2 JP 7322604B2
Authority
JP
Japan
Prior art keywords
program
variable
module
project
name
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.)
Active
Application number
JP2019160899A
Other languages
English (en)
Other versions
JP2021039570A (ja
Inventor
慎太郎 岩村
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.)
Omron Corp
Original Assignee
Omron 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 Omron Corp filed Critical Omron Corp
Priority to JP2019160899A priority Critical patent/JP7322604B2/ja
Priority to CN202080057008.5A priority patent/CN114245883B/zh
Priority to EP20860723.4A priority patent/EP4027208A4/en
Priority to PCT/JP2020/008954 priority patent/WO2021044650A1/ja
Priority to US17/634,247 priority patent/US11704113B2/en
Publication of JP2021039570A publication Critical patent/JP2021039570A/ja
Application granted granted Critical
Publication of JP7322604B2 publication Critical patent/JP7322604B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/05Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
    • G05B19/056Programming the PLC
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse

Description

本発明は、プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラムに関する。
FA(Factory Automation)の根幹をなすPLC(プログラマブルロジックコントローラ)などの制御装置の高機能化に伴って、ユーザプログラムと称されるアプリケーションプログラムも大規模化している。プログラムの大規模化にともなって、プログラムの設計効率および再利用性を高めたいというニーズもある。
制御装置で実行されるユーザプログラムは、フィールド装置群との間で遣り取りされる入出力信号(IO(Input Output)信号)を参照する命令を含むため、再利用にあたっては、IO信号を参照するための命令などを適宜修正する必要がある。また、プログラム間で参照される変数などについても適宜修正する必要がある。
例えば、特開平04-205355号公報(特許文献1)は、制御装置に向けられたものではないが、ソースプログラムにおける共通変数に対する変数使用制限情報を解析し、その制限情報を蓄積し、その蓄積された制限情報を参照しながらソースプログラム中の変数の使用を検査することにより、ソースプログラムの段階で共通変数に対する誤った使用を発見する技術を開示する。
特開平04-205355号公報
上述の特許文献1に開示される技術は、ソースプログラムで使用される共通変数に着目するにすぎず、PLCなどの制御装置においてプログラムの設計効率および再利用性を高めるという目的を達成することはできない。
本発明の一つの目的は、制御装置で実行されるプログラムの設計効率および再利用性を向上させることのできる新たな仕組みを提供することである。
本発明のある実施の形態によれば、制御装置で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置が提供される。プログラム開発装置は、1または複数のプログラムモジュールを含むプロジェクトを保持する記憶部と、プロジェクトに1または複数のプログラムモジュールをインポートする更新手段とを含む。プログラムモジュールの各々は、プログラムを含むとともに、プロジェクトに含まれるすべてのプログラムモジュール間で参照可能な変数である第1の変数と、プロジェクトに含まれる複数のプログラムモジュール間で参照可能な変数である第2の変数と、各プログラムモジュールにおいて参照される変数である第3の変数とを定義可能である。更新手段は、インポートされるプログラムモジュールに含まれる第1の変数の変数名を維持するとともに、インポートされるプログラムモジュールに含まれる第2の変数の変数名がプロジェクトのいずれかのプログラムモジュールに含まれる第2の変数の変数名と重複する場合には、当該重複する変数名の変更を受け付けるように構成されている。
この構成によれば、既存のプロジェクトに1または複数のプログラムモジュールをインポートした場合に、当該インポートされるプログラムモジュールに含まれる第1の変数についてはそのまま維持するとともに、第2の変数については、重複がないように変数名が変更されるので、プログラムの設計効率および再利用性を高めることができる。
更新手段は、インポートされるプログラムモジュールに含まれる第2の変数の変数名が重複する場合に、当該重複する第2の変数をユーザに提示するようにしてもよい。この構成によれば、ユーザは、いずれの変数の変数名を変更する必要があるのかを容易に理解できる。
更新手段は、インポートされるプログラムモジュールに含まれる第2の変数の変数名が重複する場合に、当該重複する第2の変数を予め定められた命名規則に従って変更するようにしてもよい。この構成によれば、ユーザが手動で変数名を変更しなくても、重複しないような変数名に自動的に変更される。
更新手段は、インポートされるプログラムモジュールに含まれるプログラムの名称がプロジェクトのいずれかのプログラムモジュールに含まれるプログラムの名称と重複する場合には、当該重複するプログラムの名称の変更を受け付けるようにさらに構成されていてもよい。この構成によれば、既存のプロジェクトに1または複数のプログラムモジュールをインポートした場合に、当該インポートされるプログラムモジュールに含まれるプログラムの名称について、重複がないように変更されるので、プログラムの設計効率および再利用性を高めることができる。
更新手段は、インポートされるプログラムモジュールに含まれるプログラムの名称が重複する場合に、当該重複するプログラムの名称をユーザに提示するようにしてもよい。この構成によれば、ユーザは、いずれのプログラムの名称を変更する必要があるのかを容易に理解できる。
更新手段は、インポートされるプログラムモジュールに含まれるプログラムの名称が重複する場合に、当該重複するプログラムの名称を予め定められた命名規則に従って変更するようにしてもよい。この構成によれば、ユーザが手動でプログラムの名称を変更しなくても、重複しないような変数名に自動的に変更される。
呼び出し関係にある複数のプログラムモジュールの単位でインポートされてもよい。この構成によれば、設備を増設する場合などの設計効率を高めることができる。
プログラムモジュールの各々は、対応付けられる入出力ユニットの定義を含むことが可能であってもよい。更新手段は、インポートされるプログラムモジュールに含まれる入出力ユニットの定義がプロジェクトのいずれかのプログラムモジュールに含まれる入出力ユニットの定義と重複する場合に、当該重複する入出力ユニットの定義の変更を受け付けるようにさらに構成されていてもよい。この構成によれば、入出力ユニットの定義を重複させることなく、各プログラムモジュールに適切に入出力ユニットを対応付けることができる。
本発明の別の実施の形態によれば、制御装置で実行されるユーザプログラムを含むプロジェクトを作成するためのプロジェクト作成方法が提供される。プロジェクト作成方法は、1または複数のプログラムモジュールを含むプロジェクトを保持するステップを含む。プログラムモジュールの各々は、プログラムを含むとともに、プロジェクトに含まれるすべてのプログラムモジュール間で参照可能な変数である第1の変数と、プロジェクトに含まれる複数のプログラムモジュール間で参照可能な変数である第2の変数と、各プログラムモジュールにおいて参照される変数である第3の変数とを定義可能である。プロジェクト作成方法は、さらに、プロジェクトに1または複数のプログラムモジュールのインポートを受け付けるステップと、インポートされるプログラムモジュールに含まれる第1の変数の変数名を維持するステップと、インポートされるプログラムモジュールに含まれる第2の変数の変数名がプロジェクトのいずれかのプログラムモジュールに含まれる第2の変数の変数名と重複する場合には、当該重複する変数名の変更を受け付けるステップとを含む。
本発明のさらに別の実施の形態によれば、制御装置で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置を実現するためのプログラムが提供される。プログラムはコンピュータに、1または複数のプログラムモジュールを含むプロジェクトを保持するステップを実行させる。プログラムモジュールの各々は、プログラムを含むとともに、プロジェクトに含まれるすべてのプログラムモジュール間で参照可能な変数である第1の変数と、プロジェクトに含まれる複数のプログラムモジュール間で参照可能な変数である第2の変数と、各プログラムモジュールにおいて参照される変数である第3の変数とを定義可能である。プログラムはコンピュータに、プロジェクトに1または複数のプログラムモジュールのインポートを受け付けるステップと、インポートされるプログラムモジュールに含まれる第1の変数の変数名を維持するステップと、インポートされるプログラムモジュールに含まれる第2の変数の変数名がプロジェクトのいずれかのプログラムモジュールに含まれる第2の変数の変数名と重複する場合には、当該重複する変数名の変更を受け付けるステップとを実行させる。
本発明によれば、制御装置で実行されるプログラムの設計効率および再利用性を向上させることができる。
本実施の形態に従うユーザプログラムを含むプロジェクトの作成方法の概要を説明するための図である。 本実施の形態に従う制御システムの全体構成例を示す模式図である。 本実施の形態に従う制御システムを構成する制御装置のハードウェア構成例を示すブロック図である。 本実施の形態に従う制御システムを構成するプログラム開発装置のハードウェア構成例を示すブロック図である。 本実施の形態に従うモジュール化プログラミングを説明するための設備の一例を説明するための図である。 図5に示す組立設備を実現するためのモジュール化プログラミングの一例を示す図である。 本実施の形態に従うモジュール化プログラミングにおいて作成されるプロジェクト50のデータ構造の一例を示す模式図である。 図6および図7に示されるモジュール化プログラミングの具体的な設計例を示す模式図である。 本実施の形態に従うモジュール化プログラミングにおけるエクスポートおよびインポートの処理手順を示すフローチャートである。 本実施の形態に従うモジュール化プログラミングにおいてエクスポートされたプログラムモジュールのデータ例を示す図である。 本実施の形態に従うモジュール化プログラミングにおいてエクスポートされたプログラムモジュールのデータ例を示す図である。 図8に示すプロジェクトに対して同一の装置モジュールをインポートする場合の手順例を示す図である。 図8に示すプロジェクトに対して新たな装置モジュールをインポートする場合の手順例を示す図である。 本実施の形態に従うモジュール化プログラミングにおけるインポート適合処理の処理手順を示すフローチャートである。 本実施の形態に従うモジュール化プログラミングにおけるIOユニット定義54の重複有無を示す設定画面の一例を示す図である。 本実施の形態に従うモジュール化プログラミングにおけるインポートされるモジュールの選択および変更を行うための設定画面の一例を示す図である。 本実施の形態に従うモジュール化プログラミングにおけるインポートされるプログラムモジュールが参照する変数名の選択および変更を行うための設定画面の一例を示す図である。 本実施の形態に従うモジュール化プログラミングにおけるHMIと制御装置100との関連付けの操作手順を説明するための設定画面の一例を示す図である。 本実施の形態に従うモジュール化プログラミングにおけるHMIと制御装置100との関連付けの操作手順を説明するための設定画面の別の一例を示す図である。 本実施の形態に従うモジュール化プログラミングにおけるHMIからエクスポートされるクロスレファレンスの一例を示す図である。 本実施の形態に従うプログラム開発装置において提供される命名規則の設定画面の一例を示す模式図である。
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
<A.適用例>
まず、本発明が適用される場面の一例について説明する。
図1は、本実施の形態に従うユーザプログラムを含むプロジェクトの作成方法の概要を説明するための図である。図1を参照して、プロジェクト50は、PLCなどの制御装置100で実行されるユーザプログラムを含む。より具体的には、プロジェクト50は、ユーザプログラムとして、プログラム560~563を含む。プログラム560~563は、それぞれプログラムモジュール70~73としてモジュール化されている。
プログラムモジュール70~73は、プログラム560~563に加えて、共通変数52と、モジュール間I/F60と、ローカル変数58とを要素として含む。
共通変数52は、プロジェクト50に含まれるすべてのプログラムモジュール間で参照可能な変数(第1の変数に相当)である。モジュール間I/F60は、ローカル変数58は、プロジェクト50に含まれる複数のプログラムモジュール間で参照可能な変数(第2の変数に相当)である。ローカル変数58は、各プログラムモジュールにおいて参照される変数(第3の変数に相当)である。
プログラムモジュール70~73の各々においては、必要に応じたタイプの変数が定義可能である。
図1に示す例では、プログラムモジュール70~73においては、共通変数520と、ローカル変数580~583と、グローバル変数600~603とがそれぞれ定義されている。
図1に示すプロジェクト50に対して、プログラムモジュール71~73をインポート(追加)する場合を想定する。この場合において、インポートされるプログラムモジュール71~73においても、既存のプロジェクト50に定義されている共通変数520が参照されるので、共通変数520の変数名はそのまま維持される。これによって、インポートされたプログラムモジュール71~73を含むすべてのプログラムモジュールが共通変数520を参照できる。
一方、モジュール間I/F60として定義されるグローバル変数601~603については、同一の変数名がプロジェクト50内に存在すると、適切に参照できないので、変数名が重複しないように、グローバル変数601~603の変数名が適宜変更される。
このように、インポートされるプログラムモジュールで定義されている変数名を適切に取り扱うことで、プロジェクト50に対してプログラムモジュールをインポート(追加)して、プロジェクト50を順次作成することを容易化できる。
<B.制御システム構成例>
次に、本実施の形態に従うプログラム開発装置200によって作成されるユーザプログラムが実行される制御システム1の構成例について説明する。
図2は、本実施の形態に従う制御システム1の全体構成例を示す模式図である。図2を参照して、制御システム1は、1または複数の制御装置100を含む。
制御装置100の各々は、制御対象に対する制御を行うための制御演算を実行するとともに、制御対象に含まれる監視対象に生じ得る何らかの異常を検知するための異常検知処理を実行する。制御装置100は、PLC(プログラマブルコントローラ)などの、一種のコンピュータとして具現化されてもよい。
制御装置100は、フィールドバス2を介してフィールド装置群10と接続されている。さらに、制御装置100同士は、ローカルネットワーク4を介して互いに接続されている。制御装置100には、プログラム開発装置200が接続されることもある。
フィールドバス2としては、データの到達時間が保証される、定周期通信を行うネットワークを採用することが好ましい。このような定周期通信を行うネットワークとしては、EtherCAT(登録商標)などが知られている。
制御装置100は、フィールド装置群10にて取得され、制御装置100へ転送されるデータ(以下、「入力値」とも称す。)を収集する。フィールド装置群10は、制御対象または制御に関連する製造装置や生産ラインなど(以下、「フィールド」とも総称する。)の状態値を入力値として収集する装置を含む。
本明細書において、「状態値」は、任意の制御対象(含む:監視対象)にて観測できる値を包含する用語であり、例えば、任意のセンサにより測定できる物理値や、リレーやスイッチなどのON/OFF状態、PLCがサーボドライバに与える位置、速度、トルクなどの指令値、PLCが演算に用いる変数値などを含み得る。
このような状態値を収集する装置としては、入力リレーや各種センサなどが想定される。フィールド装置群10は、さらに、制御装置100にて生成される指令値(以下、「出力値」とも称す。)に基づいて、フィールドに対して何らかの作用を与える装置を含む。このようなフィールドに対して何らかの作用を与える装置としては、出力リレー、コンタクタ、サーボドライバおよびサーボモータ、その他任意のアクチュエータが想定される。これらのフィールド装置群10は、フィールドバス2を介して、制御装置100との間で、入力値および出力値を含むデータを遣り取りする。
図2に示す構成例においては、フィールド装置群10は、リモートIO(Input/Output)装置12と、リレー群14と、画像センサ18およびカメラ20と、サーボドライバ22およびサーボモータ24とを含む。
リモートIO装置12は、フィールドバス2を介して通信を行う通信部と、入力値の収集および出力値の出力を行うための入出力部(以下、「IOユニット」とも称す。)とを含む。このようなIOユニットを介して、制御装置100とフィールドとの間で入力値および出力値が遣り取りされる。図2には、リレー群14を介して、入力値および出力値として、デジタル信号が遣り取りされる例が示されている。
IOユニットは、フィールドバスに直接接続されるようにしてもよい。図2には、フィールドバス2にIOユニット16が直接接続されている例を示す。
画像センサ18は、カメラ20によって撮像された画像データに対して、パターンマッチングなどの画像計測処理を行って、その処理結果を制御装置100へ送信する。
サーボドライバ22は、制御装置100からの出力値(例えば、位置指令など)に従って、サーボモータ24を駆動する。
プログラム開発装置200は、制御装置100で実行されるユーザプログラムの開発環境を提供する。ユーザは、プログラム開発装置200を操作して、制御装置100で実行されるユーザプログラムを作成する。具体的には、プログラム開発装置200は、制御装置100で実行されるユーザプログラムの開発環境(プログラム作成編集ツール、パーサ、コンパイラなど)、制御装置100および制御装置100に接続される各種デバイスの設定パラメータ(コンフィギュレーション)を決定するための機能、作成したユーザプログラムを制御装置100へ送信する機能、制御装置100上で実行されるユーザプログラムなどをオンラインで修正・変更する機能、などを提供する。
<C.ハードウェア構成例>
次に、本実施の形態に従う制御システム1を構成する制御装置100およびプログラム開発装置200のハードウェア構成例について説明する。
(c1:制御装置100のハードウェア構成例)
図3は、本実施の形態に従う制御システム1を構成する制御装置100のハードウェア構成例を示すブロック図である。図3を参照して、制御装置100は、CPU(Central Processing Unit)やMPU(Micro-Processing Unit)などのプロセッサ102と、チップセット104と、主記憶装置106と、二次記憶装置108と、ローカルネットワークコントローラ110と、USB(Universal Serial Bus)コントローラ112と、メモリカードインターフェイス114と、フィールドバスコントローラ120と、内部バスコントローラ122と、IOユニット124-1,124-2,…とを含む。
プロセッサ102は、二次記憶装置108に格納された各種プログラムを読み出して、主記憶装置106に展開して実行することで、制御対象に応じた制御、および、後述するような各種処理を実現する。チップセット104は、プロセッサ102とともに、各コンポーネントを制御することで、制御装置100全体としての処理を実現する。
二次記憶装置108には、図示しないシステムプログラムに加えて、プログラム開発装置200において作成された実行形式のユーザプログラム126(制御プログラムに相当)が格納される。
ローカルネットワークコントローラ110は、ローカルネットワーク4を介した他の装置との間のデータの遣り取りを制御する。USBコントローラ112は、USB接続を介してプログラム開発装置200との間のデータの遣り取りを制御する。
メモリカードインターフェイス114は、メモリカード116を着脱可能に構成されており、メモリカード116に対してデータを書き込み、メモリカード116から各種データ(ユーザプログラムやトレースデータなど)を読み出すことが可能になっている。
フィールドバスコントローラ120は、フィールドバス2を介した他の装置との間のデータの遣り取りを制御する。内部バスコントローラ122は、制御装置100に搭載されるIOユニット124-1,124-2,…との間でデータを遣り取りするインターフェイスである。
図3には、プロセッサ102がプログラムコードを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(例えば、ASIC(Application Specific Integrated Circuit)またはFPGA(Field-Programmable Gate Array)など)を用いて実装してもよい。あるいは、制御装置100の主要部を、汎用的なアーキテクチャに従うハードウェア(例えば、汎用パソコンをベースとした産業用パソコン)を用いて実現してもよい。
(c2:プログラム開発装置200のハードウェア構成例)
図4は、本実施の形態に従う制御システム1を構成するプログラム開発装置200のハードウェア構成例を示すブロック図である。プログラム開発装置200は、一例として、汎用的なアーキテクチャに従うハードウェア(例えば、汎用パソコン)を用いてプログラムを実行することで実現されてもよい。
図4を参照して、プログラム開発装置200は、CPUやMPUなどのプロセッサ202と、ドライブ204と、主記憶装置206と、二次記憶装置208と、USBコントローラ212と、ローカルネットワークコントローラ214と、入力部216と、表示部218とを含む。これらのコンポーネントはバス220を介して接続される。
プロセッサ202は、二次記憶装置208に格納された各種プログラムを読み出して、主記憶装置206に展開して実行することで、後述するような各種処理を実現する。
二次記憶装置208は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)などで構成される。二次記憶装置208には、後述するような各種機能を実現するための開発ツール250が格納される。二次記憶装置208には、OSおよび他の必要なシステムプログラムが格納されていてもよい。二次記憶装置208は、1または複数のプログラムモジュールを含むプロジェクト50を保持する。プロジェクト50およびプロジェクト50に含まれるプログラムモジュールの詳細については、後述する。
ドライブ204は、記憶媒体205に対してデータを書き込み、記憶媒体205から各種データ(ユーザプログラムおよび各種データ)を読み出すことが可能になっている。記憶媒体205は、例えばコンピュータ読取可能なプログラムを非一過的に格納する記憶媒体205(例えば、DVD(Digital Versatile Disc)などの光学記憶媒体)を含む。
プログラム開発装置200で実行される開発ツール250は、コンピュータ読取可能な記憶媒体205を介してインストールされてもよいが、ネットワーク上のサーバ装置などからダウンロードする形でインストールするようにしてもよい。また、本実施の形態に従うプログラム開発装置200が提供する機能は、OSが提供するモジュールの一部を使用する形で実現される場合もある。
USBコントローラ212は、USB接続を介して制御装置100との間のデータの遣り取りを制御する。ローカルネットワークコントローラ214は、任意ネットワークを介した他の装置との間のデータの遣り取りを制御する。
入力部216は、キーボードやマウスなどで構成され、ユーザ操作を受け付ける。表示部218は、ディスプレイ、各種インジケータなどで構成され、プロセッサ202からの処理結果などを出力する。プログラム開発装置200には、プリンタが接続されてもよい。
図4には、プロセッサ202がプログラムコードを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(例えば、ASICまたはFPGAなど)を用いて実装してもよい。
<D.モジュール化プログラミング>
次に、本実施の形態に従うモジュール化プログラミングについて概略する。
(d1:プロジェクト構成)
図5は、本実施の形態に従うモジュール化プログラミングを説明するための設備の一例を説明するための図である。図5には、ワーク43にネジ42を組み付ける組立設備40の一例を示す。組立設備40は、組付工程47および搬送工程48を含む。
組付工程47においては、ロボット41がネジ42をピック(例えば、吸着)し、ワーク43まで移動した後に、ワーク43のネジ穴44にネジ42を組み付ける。
搬送工程48においては、ロボット45がネジ42を組み付けた後のワーク43をピック(例えば、把持)し、所定位置まで移動した後に、ピックしたワーク43をプレイスする。このように、組立設備40は、それぞれロボット41および45を制御する組付工程47および搬送工程48を含む。
図6は、図5に示す組立設備40を実現するためのモジュール化プログラミングの一例を示す図である。図6を参照して、モジュール化プログラミングにより作成されたプロジェクト50は、組立設備40の全体を制御するための組立設備モジュール(Machine)80を含む。組立設備モジュール80は、組付工程47および搬送工程48にそれぞれ対応する組立モジュール(Screw)81および搬送モジュール(PnP)82を呼び出す。組立モジュール81および搬送モジュール82は、それぞれ対応する装置の制御に向けられており、装置モジュールとも称される。
また、上述したようなモジュール間の呼び出し関係は「親子関係」などとも称される。親モジュールから呼び出される子モジュールは、「POU(Program Organization Units)」と称される。すなわち、親モジュールを有している子モジュールは、いずれもPOUとなり得る。
さらに、組立モジュール81は、組付工程47におけるロボット41および関連設備の挙動を制御するためのネジピックモジュール(PickScrew)83およびネジ取付モジュール(Screwing)84を呼び出す。
同様に、搬送モジュール82は、搬送工程48におけるロボット45および関連設備の挙動を制御するためのピックモジュール(Pick)85およびプレイスモジュール(Place)86を呼び出す。
さらに、工程の最初の処理を担当するネジピックモジュール83と、工程の最後の処理を担当するプレイスモジュール86とは、互いに連携して組立設備40全体の処理サイクルを制御する。
本実施の形態に従うモジュール化プログラミングにおいては、設備単位、設備に含まれる装置単位、あるいは、装置に含まれる工程単位で部品化して、プログラムの設計効率および再利用性を高めることを目的とする。
図7は、本実施の形態に従うモジュール化プログラミングにおいて作成されるプロジェクト50のデータ構造の一例を示す模式図である。図7を参照して、プロジェクト50は、1または複数のプログラムモジュール70~76を含む。各プログラムモジュールは、要素として、共通変数52と、IOユニット定義54と、プログラム56およびローカル変数58と、モジュール間I/F60と、HMI(Human Machine Interface)62とを含む。すなわち、各プログラムモジュールは、プログラムだけではなく、プログラムの実行に必要な要素をパッケージ化したものである。
例えば、図7に示されるプログラムモジュール70~76は、組立設備モジュール80、組立モジュール81、搬送モジュール82、ネジピックモジュール83、ネジ取付モジュール84、ピックモジュール85およびプレイスモジュール86にそれぞれ対応する。
共通変数52は、プロジェクト50に含まれるすべてのプログラムモジュール間で参照可能な変数が定義される。図7に示す例では、共通変数52として、共通変数520が定義されている。共通変数520は、プロジェクト50に定義される変数である。例えば、共通変数520としては、非常停止を示す変数や異常を示す変数などが含まれる。以下では、非常停止を示す「Estop」といった各工程において共通に参照される変数を共通変数520とする例を示す。但し、これに限らず、「Battery Low」(バッテリー低下)、「Warning」(警告)、「EmergencyStop」(緊急停止)、「CycleTimeOver」(サイクルタイムオーバ異常)などを共通変数520としてもよい。
IOユニット定義54には、各プログラムモジュールと関連付けられるIOユニットが定義される。すなわち、各プログラムモジュールは、対応付けられるIOユニットの定義(IOユニット定義54)を含むことが可能である。図7に示す例では、プログラムモジュール71~76に対して、IOユニット定義54として、接続先のIOユニットに割り当てられているネットワーク上のアドレスを示すノードアドレス541~546がそれぞれ定義されている。
プログラム56は、各プログラムモジュールの主要部分であるプログラムを意味する。図7に示す例では、プログラムモジュール70~76に対して、プログラム560~566がそれぞれ作成されている。
ローカル変数58は、対応するプログラム56において参照される変数(すなわち、対応するプログラム56以外のプログラム56からの参照は想定されていない変数)が定義される。図7に示す例では、プログラムモジュール70~76に対して、ローカル変数580~586がそれぞれ定義されている。ローカル変数は、対応するIOユニットとのデータのインターフェイス変数としても利用される。
モジュール間I/F60は、プロジェクト50に含まれる複数のプログラムモジュール間で参照可能な変数であるインターフェイス変数が定義される。モジュール間I/F60に、すべてのプログラムモジュール間で参照可能な変数を定義してもよいが、このような変数は共通変数52として定義されることが好ましいので、基本的には、プロジェクト50に含まれる一部のプログラムモジュール間でのみ参照される変数が定義される。図7に示す例では、プログラムモジュール70~76に対して、モジュール間I/F60として、グローバル変数600~606がそれぞれ定義されている。図5に示す組立設備40の例においては、グローバル変数600~606の間では、図7に示すような参照関係(依存関係)が存在し得る。
HMI62は、対応するプログラムの処理結果やプログラムに対するユーザ操作を受け付けるための画面アプリケーションを意味する。図7に示す例では、プログラムモジュール70,71,74に対して、ページ620,621,625がそれぞれ作成されている。
図8は、図6および図7に示されるモジュール化プログラミングの具体的な設計例を示す模式図である。図8を参照して、プロジェクト50において、プログラムモジュール70~76には、共通変数520、モジュール間I/F60としてのグローバル変数600~606、ローカル変数583~586がそれぞれ定義されている。
(d2:エクスポートおよびインポート)
本実施の形態に従うモジュール化プログラミングにおいては、プログラムモジュールの単位で再利用が可能になっている。このような再利用にあたっては、対象のプログラムモジュールの「エクスポート/インポート」あるいは「コピー&ペースト」を行うことになる。すなわち、プログラム開発装置200は、プロジェクトから1または複数のプログラムモジュールをエクスポートする抽出機能を有しているとともに、プロジェクトに1または複数のプログラムモジュールをインポートする更新機能を有している。これらの機能は、プログラム開発装置200のプロセッサ202が開発ツール250を実行することで実現されてもよい。
図9は、本実施の形態に従うモジュール化プログラミングにおけるエクスポートおよびインポートの処理手順を示すフローチャートである。図9に示す各ステップは、典型的には、プログラム開発装置200のプロセッサ202が開発ツール250を実行することで実現される。
図9(a)に示すプログラムモジュールのエクスポート処理において、ユーザは、対象のエクスポートの対象となる1または複数のプログラムモジュールを選択する(ステップS10)。プログラム開発装置200は、エクスポートの対象として選択された1または複数のプログラムモジュールの依存関係を可視化してユーザへ提示する(ステップS12)。例えば、図6に示すようなプログラムモジュールの依存関係などが提示される。
最終的に、プログラム開発装置200は、ユーザの操作に応じて、エクスポートの対象として選択されている1または複数のプログラムモジュールに含まれる情報をエクスポートする(ステップS14)。エクスポートされる情報は、プログラム(ユーザプログラム)、ファンクション、ファンクションブロック、変数定義などを含む。そして、処理は終了する。
図9(b)に示すプログラムモジュールのインポート処理において、ユーザは、対象の1または複数のプログラムモジュールをインポートする(ステップS20)。プログラム開発装置200は、インポートされた1または複数のプログラムモジュールのIOユニット定義54に基づいて、インポート可能であるか否かを判断する(ステップS22)。
インポート不可能と判断されると(ステップS22においてNO)、プログラム開発装置200は、インポート不可能のメッセージをユーザに通知する(ステップS24)。そして、処理は終了する。
インポート可能と判断されると(ステップS22においてYES)、プログラム開発装置200は、インポート適合処理を実行して、対象の1または複数のプログラムモジュールの内容を変更した上で(ステップS26)、インポート先のプロジェクトに組み入れる(ステップS28)。そして、処理は終了する。
図10および図11は、本実施の形態に従うモジュール化プログラミングにおいてエクスポートされたプログラムモジュールのデータ例を示す図である。図10を参照して、エクスポートされたプロジェクトデータ160は、モジュール名162および各データを特定するための識別子164に対応付けて、要素データ166を含む。さらに、モジュール間で共有されるか否かを示す識別子168も関連付けられている。
図11には、エクスポートされたプロジェクトデータ160に含まれるグローバル変数の定義の一部を示す。グローバル変数の定義には、変数名170および所属するモジュール名172の定義を含む。
<E.インポート>
次に、本実施の形態に従うモジュール化プログラミングのインポートおよびインポート適合処理について説明する。
(e1:プログラムモジュール単位での追加(インポート))
図7に示すように、本実施の形態に従うモジュール化プログラミングにおいては、各プログラムモジュールは、プログラムと、1または複数のIOユニット(デバイス)の構成情報(例えば、IOユニット定義54に含まれるノードアドレス)とを横断的に有している。
プログラムモジュールをエクスポートする場合には、IOユニットの構成情報(例えば、デバイス種別、モデル、バージョン情報など)が保持される。そして、プログラムモジュールをインポートする場合には、インポート先のプロジェクトに定義されているIOユニットの構成情報を参照することで、いずれのIOユニットと対応させるのかをユーザが決定してもよい(後述の図15など参照)。
(1)制御装置100の場合
インポートされたモジュール名の重複有無が判断されて、重複がある場合には、モジュール名が変更される。また、インポートされたIOユニット定義54の重複有無の判断が判断されて、重複がある場合には、IOユニット定義54が設定される。
データ型、軸、軸グループなどについては、そのままエクスポートされることになるが、グローバル変数名の重複がある場合は、グローバル変数名が変更される。
さらに、HMIのグローバル変数に対する参照関係も適宜更新される。
(2)HMIの場合
HMIについては、デバイス種別、ページ、リソース、イベント、グローバルサブルーチン、グローバル変数などがそのままエクスポートされる。なお、参照先の制御装置100の名称(コントローラ名)は、適宜更新される。
以下、図8に示すプロジェクト50に対して、組立設備モジュール80を親モジュールとして、装置モジュールをインポートする場合について例示する。
(e2:装置モジュールのインポートその1)
図12は、図8に示すプロジェクト50に対して同一の装置モジュールをインポートする場合の手順例を示す図である。より具体的には、図12には、組立モジュール81ならびに組立モジュール81から呼び出されるネジピックモジュール83およびネジ取付モジュール84と同一のモジュール群(組立モジュール81A、ネジピックモジュール83Aおよびネジ取付モジュール84A)がインポートされた例を示す。
このように、呼び出し関係にある複数のプログラムモジュールの単位でインポートされてもよい。
このようなモジュール群のインポートにあたっては、以下のような(1)~(4)の処理が実行される。
(1)インポートされるIOユニット定義54の重複有無の判断
IOユニット定義54は、複数のプログラムモジュールにおいて重複して参照できないので、インポートされるモジュールのIOユニット定義54の重複有無が判断される。具体的には、IOユニット定義54内のノードアドレスの重複有無が判断される。
この場合には、インポートされるモジュールが利用するIOユニットのノードアドレスに変更する必要がある。すなわち、IOユニット定義54に含まれるノードアドレスが正しい値に設定される(プログラムモジュール73Aのローカル変数583Aおよびプログラムモジュール74Aの584A参照)。
(2)インポートされる装置モジュール名の重複有無の判断
インポートされる装置モジュールのモジュール名が既存のモジュール名と重複すると、設備モジュール(組立設備モジュール80)から適切に参照できないので、インポートされる装置モジュール(組立モジュール81A)のモジュール名を変更する必要がある。モジュール名の変更は、ユーザが任意に入力するようにしてもよいし、予め定められた命名規則に従って行ってもよい。
図12に示す例では、組立モジュール81Aのモジュール名は、組立モジュール81のモジュール名「Screw」から「Screw2」へ変更されている。このモジュール名の変更に併せて、変数の参照元として定義されているモジュール名も変更される(プログラムモジュール71A,73A,74Aのモジュール名の欄)。
(3)インポートされる子モジュール名の重複有無の判断
インポートされる子モジュール名(呼び出されるモジュール)が既存のモジュール名と重複すると、モジュール間で適切に参照できないので、インポートされる子モジュール(ネジピックモジュール83Aおよびネジ取付モジュール84A)のモジュール名を変更する必要がある。モジュール名の変更は、ユーザが任意に入力するようにしてもよいし、予め定められた命名規則に従って行ってもよい。
図12に示す例では、ネジピックモジュール83Aのモジュール名は、ネジピックモジュール83のモジュール名「PickScrew」から「PickScrew2」へ変更されている。同様に、ネジ取付モジュール84Aのモジュール名は、ネジ取付モジュール84のモジュール名「Screwing」から「Screwing2」へ変更されている。
(4)プログラムモジュールが参照する変数名の重複有無の判断
共通変数52に定義される共通変数については、複数のプログラムモジュール間で共通に参照されるので、変更は不要である。このように、共通変数は、既存のプロジェクト50に定義されているものがそのまま利用される(すなわち、インポートされない)。
一方、モジュール間I/F60に定義されるグローバル変数(インターフェイス変数)については、プログラムモジュール間で参照されるので、プロジェクト内で重複しないように調整する必要がある。プロジェクト内で重複がある場合には、変数名が変更される。変数名の変更は、ユーザが任意に入力するようにしてもよいし、予め定められた命名規則に従って行ってもよい。
図12に示す例では、プログラムモジュール71Aのグローバル変数601Aにおいて、組立設備モジュール80と組立モジュール81Aとの間で参照されるグローバル変数の変数名が「IF_Machine_Screw」から「IF_Machine_Screw2」に変更されている。同様に、プログラムモジュール73Aのグローバル変数603Aにおいて、ネジピックモジュール83Aとプレイスモジュール86との間で参照されるグローバル変数の変数名が「IF_PickScrew_Place」から「IF_PickScrew_Place2」に変更されている。
以上のような4つの処理を適用することで、モジュール化されたプロジェクトの一部を容易に再利用できる。なお、インポートされるプログラムモジュールにおいて参照される共通変数520については、そのまま維持される(すなわち、定義などが変更されない)。
(e3:モジュールのインポートその2)
図13は、図8に示すプロジェクト50に対して新たな装置モジュールをインポートする場合の手順例を示す図である。より具体的には、図13には、検査設備の全体を制御するための検査モジュール(Tester)87が新たにインポートされた例を示す。
検査モジュール87は、検査モジュール87から呼び出される装置モジュールとして、処理検査モジュール(ProcessTest)88を含む。処理検査モジュール88は、撮影工程を制御する撮影モジュール(Camera)891および撮影した画像を評価する評価モジュール(Validate)892を呼び出す。
このように、呼び出し関係にある複数のプログラムモジュールの単位でインポートされてもよい。
このようなモジュール群のインポートにあたっては、上述のモジュールのインポートと同様に、以下のような(1)~(4)の処理が実行される。
(1)インポートされるIOユニット定義54の重複有無の判断
インポートされるモジュールのIOユニット定義54の重複有無が判断される。図13に示す例では、IOユニット定義54の重複はないので、当初のIOユニット定義54がそのままインポートされる。
(2)インポートされる装置モジュール名の重複有無の判断
新たな装置モジュールをインポートする場合にも既存の装置モジュールのモジュール名との重複が判断されるが、図13に示す例では、モジュール名の重複はないので、当初の装置モジュールのままインポートされる。
検査モジュール87に対応するプログラムモジュール77は、共通変数520およびグローバル変数607を含む。
(3)インポートされる子モジュール名の重複有無の判断
インポートされる子モジュール(処理検査モジュール88、撮影モジュール891および評価モジュール892)のモジュール名が既存のモジュール名と重複するか否かが判断される。図13に示す例では、モジュール名の重複はないので、当初のモジュール名のままインポートされる。
図13に示す例では、処理検査モジュール88に対応するプログラムモジュール78は、共通変数520およびグローバル変数608を含む。撮影モジュール891に対応するプログラムモジュール791は、共通変数520、グローバル変数6091およびローカル変数5891を含む。評価モジュール892に対応するプログラムモジュール792は、共通変数520、グローバル変数6092およびローカル変数5892を含む。
(4)プログラムモジュールが参照する変数名の重複有無の判断
共通変数52に定義される共通変数については、複数のプログラムモジュール間で共通に参照されるので、変更は不要である。
また、モジュール間I/F60に定義されるグローバル変数(インターフェイス変数)については、プロジェクト内で重複しないように、必要に応じて変数名が変更される。変数名の変更は、ユーザが任意に入力するようにしてもよいし、予め定められた命名規則に従って行ってもよい。
なお、ローカル変数については、対応するプログラム内でのみ使用されるので、他のモジュールとの重複を考慮する必要はない。また、インポートされるプログラムモジュールにおいて参照される共通変数520については、そのまま維持される(すなわち、定義などが変更されない)。
(e4:インポート適合処理の処理手順)
次に、インポート適合処理の処理手順について説明する。
図14は、本実施の形態に従うモジュール化プログラミングにおけるインポート適合処理の処理手順を示すフローチャートである。図14に示す処理手順は、図9に示す処理手順のステップS26の詳細な内容に相当する。図14に示す各ステップは、典型的には、プログラム開発装置200のプロセッサ202が開発ツール250を実行することで実現される。
図14を参照して、プログラム開発装置200は、インポートされるIOユニット定義54の設定内容が既存のIOユニット定義54の設定内容と重複しているか否かを判断する(ステップS100)。
インポートされるIOユニット定義54の設定内容が既存のIOユニット定義54の設定内容と重複している場合(ステップS100においてYESの場合)には、プログラム開発装置200は、ユーザに対して、インポートされるIOユニット定義54の変更を促す(ステップS102)。
図15は、本実施の形態に従うモジュール化プログラミングにおけるIOユニット定義54の重複有無を示す設定画面の一例を示す図である。図15に示す設定画面350においては、インポートされるプログラムモジュールに含まれるIOユニット定義54の設定内容352と、インポート先であるプロジェクトのIOユニット定義54の設定内容354とが比較され、その比較結果356が表示される。ユーザは、比較結果356を参照して、IOユニット定義54を適宜変更することになる。
このように、プログラム開発装置200は、インポートされるプログラムモジュールに含まれるIOユニット定義54がプロジェクト50のいずれかのプログラムモジュールに含まれるIOユニット定義54と重複する場合に、当該重複するIOユニット定義54の変更を受け付ける。そして、プログラム開発装置200は、インポートされるプログラムモジュールに含まれるIOユニット定義54が重複する場合に、当該重複するIOユニット定義54をユーザに提示する(図15参照)。
再度図14を参照して、プログラム開発装置200は、ユーザによりIOユニット定義54が変更されると、変更されたIOユニット定義54に応じて、IOユニットと変数との対応関係を更新する(ステップS104)。
インポートされるIOユニット定義54の設定内容が既存のIOユニット定義54の設定内容と重複していない場合(ステップS100においてNOの場合)には、ステップS102およびS104の処理はスキップされる。
続いて、プログラム開発装置200は、インポートされる装置モジュールのモジュール名が既存のモジュール名と重複しているか否かを判断する(ステップS106)。
インポートされる装置モジュールのモジュール名が既存のモジュール名と重複している場合(ステップS106においてYESの場合)には、プログラム開発装置200は、ユーザに対して、インポートされる装置モジュールのモジュール名の変更を促す(ステップS108)。
インポートされる装置モジュールのモジュール名が既存のモジュール名と重複していない場合(ステップS106においてNOの場合)には、ステップS108の処理はスキップされる。
続いて、プログラム開発装置200は、インポートされる子モジュールのモジュール名が既存のモジュール名と重複しているか否かを判断する(ステップS110)。
インポートされる子モジュールのモジュール名が既存のモジュール名と重複している場合(ステップS110においてYESの場合)には、プログラム開発装置200は、ユーザに対して、インポートされる子モジュールのモジュール名の変更を促す(ステップS112)。
図16は、本実施の形態に従うモジュール化プログラミングにおけるインポートされるモジュールの選択および変更を行うための設定画面の一例を示す図である。図16に示す設定画面360においては、インポートされるモジュールのうち、既存のプロジェクトに含まれるモジュールのモジュール名と重複するものが強調表示される。例えば、モジュール名が重複するモジュールについては、他のモジュールとは異なる態様で表示される。
ユーザは、インポート予定のプログラムモジュールのうち、モジュール名を変更しなければならないモジュールを容易に識別でき、必要に応じて、モジュール名を変更できる。なお、プログラム開発装置200は、命名規則に従ってモジュール名を変更することも可能である(詳細については後述する)。
このように、プログラム開発装置200は、インポートされるプログラムモジュールに含まれるプログラムの名称がプロジェクト50のいずれかのプログラムモジュールに含まれるプログラムの名称と重複する場合には、当該重複するプログラムの名称の変更を受け付ける。そして、プログラム開発装置200は、インポートされるプログラムモジュールに含まれるプログラムの名称が重複する場合に、当該重複するプログラムの名称をユーザに提示する(図16参照)。
再度図14を参照して、インポートされる子モジュールのモジュール名が既存のモジュール名と重複していない場合(ステップS110においてNOの場合)には、ステップS112の処理はスキップされる。
続いて、プログラム開発装置200は、インポートされるプログラムモジュールが参照する変数名が既存の変数名と重複しているか否かを判断する(ステップS114)。このとき、インポートされるプログラムモジュールにおいて参照される共通変数520については、そのまま維持される(すなわち、定義などが変更されない)。基本的には、モジュール間I/F60として定義されるグローバル変数についてのみ、変数名の重複が判断される。
インポートされるプログラムモジュールが参照する変数名が既存の変数名と重複している場合(ステップS114においてYESの場合)には、プログラム開発装置200は、ユーザに対して、インポートされるプログラムモジュールが参照する変数名の変更を促す(ステップS116)。
図17は、本実施の形態に従うモジュール化プログラミングにおけるインポートされるプログラムモジュールが参照する変数名の選択および変更を行うための設定画面の一例を示す図である。図17に示す設定画面370において、ユーザは、インポート予定のプログラムモジュールが参照する変数名の選択および変更を行う。なお、プログラム開発装置200は、命名規則に従って変数名を変更することも可能である(詳細については後述する)。
このように、プログラム開発装置200は、インポートされるプログラムモジュールに含まれるモジュール間I/F60として定義されるグローバル変数の変数名が既存のプロジェクトのいずれかのプログラムモジュールに含まれるグローバル変数の変数名と重複する場合には、当該重複する変数名の変更を受け付ける。そして、プログラム開発装置200は、インポートされるプログラムモジュールに含まれるグローバル変数の変数名が重複する場合に、当該重複するグローバル変数をユーザに提示する(図17参照)。
再度図14を参照して、インポートされるプログラムモジュールが参照する変数名が既存の変数名と重複していない場合(ステップS114においてNOの場合)には、ステップS116の処理はスキップされる。
続いて、プログラム開発装置200は、ユーザによるインポートされる予定のHMIの選択を受け付け(ステップS118)、ユーザに対して、インポートされたHMIに係る設定の確認および変更を促す(ステップS120)。
最終的に、プログラム開発装置200は、インポートされたモジュールを含む新たなプロジェクトを保存し(ステップS122)、処理を終了する。
<F.HMIのインポート/再利用>
次に、プログラムモジュールに含まれるHMI62をインポートまたは再利用する場合の処理について説明する。HMIは、対象となる1または複数の制御装置100と接続されて動作するため、HMIの情報を再利用する場合には、接続先の制御装置100などを適宜設定および変更する必要がある。以下、このようなHMIをインポートする場合の操作手順などについて説明する。
図18は、本実施の形態に従うモジュール化プログラミングにおけるHMIと制御装置100との関連付けの操作手順を説明するための設定画面の一例を示す図である。図18を参照して、設定画面320は、HMIが何らかの処理を実行するための条件であるイベントを設定するための画面である。
ユーザは、設定画面320において、プルダウン322を操作して、プロジェクトに含まれる制御装置100のうち接続先となる制御装置100を選択する。この選択操作によって、制御装置100とHMIとの間に関連付けが定義される。
図19は、本実施の形態に従うモジュール化プログラミングにおけるHMIと制御装置100との関連付けの操作手順を説明するための設定画面の別の一例を示す図である。図19を参照して、設定画面324は、HMIで実行される処理および関連付けられる変数などを設定するための画面である。
ユーザは、設定画面324において、接続先の制御装置100との間で遣り取りされる変数(インターフェイス変数)を設定あるは変更する。図19に示す例では、制御装置100のインターフェイス変数である「new_Controller_0_gvar1」をHMIで実行される処理に関連付ける。
図20は、本実施の形態に従うモジュール化プログラミングにおけるHMIからエクスポートされるクロスレファレンスの一例を示す図である。図20を参照して、プログラム開発装置200は、接続先の制御装置100とのインターフェイスに関連する変数を参照している部分を抽出したクロスレファレンス330をエクスポートする。図20に示すようなクロスレファレンス330をエクスポートすることで、再利用する際に、変更すべき変数名などを容易に特定できる。
<G:命名規則>
上述したように、モジュール名または変数名に重複がある場合には、ユーザが任意に入力する別の名前に変更されてもよいし、予め定められた命名規則に従って自動的に変更されるようにしてもよい。以下、命名規則の一例について説明する。
このような命名規則の一例としては、予め定められた規則で変化する識別子(例えば、インクリメントまたはデクリメントする数値やアルファベットなど)を付加するようにしてもよい。具体的には、モジュール名を「Screw」から「Screw2」に変更し、さらに同一の「Screw」というモジュール名をもつモジュールがインポートされると、「Screw」から「Screw3」に変更するようにしてもよい。
あるいは、静的または動的に決定される文字列を付加するようにしてもよい。例えば、変数名に、対応するプログラムモジュールのモジュール名を付加するようにしてもよい。対応するプログラムモジュールのモジュール名を変数に付加することで、モジュール名がユニークである限り、変数名の重複は生じない。
また、識別子や文字列を対象文字列の先頭に(すなわち、接頭語として)付加してもよいし、識別子や文字列を対象文字列の直後に(すなわち、接尾語として)付加してもよい。
図21は、本実施の形態に従うプログラム開発装置200において提供される命名規則の設定画面の一例を示す模式図である。図21(a)を参照して、ユーザは、モジュール名や変数名に重複が生じた場合に、設定画面300のプルダウン302を操作して、何らかの付加情報を「接頭語」あるいは「接尾語」として付加するように設定できる。なお、ユーザは、何らの付加情報も付加しない(「なし」の設定)を選択することもできる。
図21(b)に示すように、ユーザは、設定画面310のプルダウン312を操作して、何らかの付加情報を「接頭語」あるいは「接尾語」として付加するように設定できるとともに、付加情報として文字列を入力ボックス314に指定することもできる。
図21(c)に示すように、ユーザは、設定画面310のプルダウン312を操作して、何らかの付加情報を「接頭語」あるいは「接尾語」として付加するように設定できるとともに、「@モジュール名@」という特殊文字列を入力ボックス314に指定することもできる。この場合には、対応するプログラムモジュールのモジュール名が自動的に付加されるようになる。「@モジュール名@」に代えて、予め定められた文字列を指定することもできる。
なお、説明の便宜上、モジュール名および変数名の区別をすることなく、共通の命名規則を適用する例を示したが、モジュール名および変数名の別に命名規則を適用するようにしてもよい。
上述したように、プログラム開発装置200は、インポートされるプログラムモジュールに含まれるプログラムの名称が既存のプロジェクトに含まれるプログラムの名称と重複する場合には、当該重複するプログラムの名称を予め定められた命名規則に従って変更するようにしてもよい。
また、プログラム開発装置200は、インポートされるプログラムモジュールに含まれるモジュール間I/F60として定義されるグローバル変数の変数名が既存のプロジェクトのいずれかのプログラムモジュールに含まれるグローバル変数の変数名と重複する場合には、当該重複する変数名を予め定められた命名規則に従って変更するようにしてもよい。
このような命名規則に沿ったモジュール名または変数名の自動的な変更を採用することで、モジュールを再利用する際に、ユーザの手間を低減できる。この結果、プログラムの設計効率および再利用性を向上できる。
<H.付記>
上述したような本実施の形態は、以下のような技術思想を含む。
[構成1]
制御装置(100)で実行されるユーザプログラム(50)の開発環境を提供するためのプログラム開発装置(200)であって、
1または複数のプログラムモジュール(70~76)を含むプロジェクトを保持する記憶部(208)と、
前記プロジェクトに1または複数のプログラムモジュールをインポートする更新手段(202;250)とを備え、
前記プログラムモジュールの各々は、プログラムを含むとともに、前記プロジェクトに含まれるすべてのプログラムモジュール間で参照可能な変数である第1の変数(52;520)と、前記プロジェクトに含まれる複数のプログラムモジュール間で参照可能な変数である第2の変数(60;600~606)と、各プログラムモジュールにおいて参照される変数である第3の変数(58;580~586)とを定義可能であり、
前記更新手段は、前記インポートされるプログラムモジュールに含まれる第1の変数の変数名を維持するとともに、前記インポートされるプログラムモジュールに含まれる第2の変数の変数名が前記プロジェクトのいずれかのプログラムモジュールに含まれる第2の変数の変数名と重複する場合には、当該重複する変数名の変更を受け付けるように構成されている(S114,S116)、プログラム開発装置。
[構成2]
前記更新手段は、前記インポートされるプログラムモジュールに含まれる第2の変数の変数名が重複する場合に、当該重複する第2の変数をユーザに提示する(S116)、構成1に記載のプログラム開発装置。
[構成3]
前記更新手段は、前記インポートされるプログラムモジュールに含まれる第2の変数の変数名が重複する場合に、当該重複する第2の変数を予め定められた命名規則に従って変更する、構成1または2に記載のプログラム開発装置。
[構成4]
前記更新手段は、前記インポートされるプログラムモジュールに含まれるプログラムの名称が前記プロジェクトのいずれかのプログラムモジュールに含まれるプログラムの名称と重複する場合には、当該重複するプログラムの名称の変更を受け付けるようにさらに構成されている(S110,S112)、構成1~3のいずれか1項に記載のプログラム開発装置。
[構成5]
前記更新手段は、前記インポートされるプログラムモジュールに含まれるプログラムの名称が重複する場合に、当該重複するプログラムの名称をユーザに提示する(S112)、構成4に記載のプログラム開発装置。
[構成6]
前記更新手段は、前記インポートされるプログラムモジュールに含まれるプログラムの名称が重複する場合に、当該重複するプログラムの名称を予め定められた命名規則に従って変更する、構成4または5に記載のプログラム開発装置。
[構成7]
呼び出し関係にある複数のプログラムモジュールの単位でインポートされる、構成1~6のいずれか1項に記載のプログラム開発装置。
[構成8]
前記プログラムモジュールの各々は、対応付けられる入出力ユニットの定義(54;540~546)を含むことが可能であり、
前記更新手段は、前記インポートされるプログラムモジュールに含まれる入出力ユニットの定義が前記プロジェクトのいずれかのプログラムモジュールに含まれる入出力ユニットの定義と重複する場合に、当該重複する入出力ユニットの定義の変更を受け付けるようにさらに構成されている(S106,S108)、構成1~7のいずれか1項に記載のプログラム開発装置。
[構成9]
制御装置(100)で実行されるユーザプログラムを含むプロジェクト(50)を作成するためのプロジェクト作成方法であって、
1または複数のプログラムモジュールを含むプロジェクトを保持するステップ(208)を備え、前記プログラムモジュールの各々は、プログラムを含むとともに、前記プロジェクトに含まれるすべてのプログラムモジュール間で参照可能な変数である第1の変数(52;520)と、前記プロジェクトに含まれる複数のプログラムモジュール間で参照可能な変数である第2の変数(60;600~606)と、各プログラムモジュールにおいて参照される変数である第3の変数(58;580~586)とを定義可能であり、
前記プロジェクトに1または複数のプログラムモジュールのインポートを受け付けるステップ(S20)と、
前記インポートされるプログラムモジュールに含まれる第1の変数の変数名を維持するステップ(S114)と、
前記インポートされるプログラムモジュールに含まれる第2の変数の変数名が前記プロジェクトのいずれかのプログラムモジュールに含まれる第2の変数の変数名と重複する場合には、当該重複する変数名の変更を受け付けるステップ(S114,S116)とを備える、プロジェクト作成方法。
[構成10]
制御装置(100)で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置(200)を実現するためのプログラム(250)であって、前記プログラムはコンピュータに、
1または複数のプログラムモジュールを含むプロジェクトを保持するステップ(208)を実行させ、前記プログラムモジュールの各々は、プログラムを含むとともに、前記プロジェクトに含まれるすべてのプログラムモジュール間で参照可能な変数である第1の変数(52;520)と、前記プロジェクトに含まれる複数のプログラムモジュール間で参照可能な変数である第2の変数(60;600~606)と、各プログラムモジュールにおいて参照される変数である第3の変数(58;580~586)とを定義可能であり、
前記プロジェクトに1または複数のプログラムモジュールのインポートを受け付けるステップ(S20)と、
前記インポートされるプログラムモジュールに含まれる第1の変数の変数名を維持するステップ(S114)と、
前記インポートされるプログラムモジュールに含まれる第2の変数の変数名が前記プロジェクトのいずれかのプログラムモジュールに含まれる第2の変数の変数名と重複する場合には、当該重複する変数名の変更を受け付けるステップ(S114,S116)とを実行させる、プログラム開発装置を実現するためのプログラム。
<I.利点>
本実施の形態に従うモジュール化プログラミングによれば、制御装置で実行されるプログラムの設計効率および再利用性を向上させることのできる新たな仕組みを提供できる。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
1 制御システム、2 フィールドバス、4 ローカルネットワーク、10 フィールド装置群、12 リモートIO装置、14 リレー群、16,124 IOユニット、18 画像センサ、20 カメラ、22 サーボドライバ、24 サーボモータ、40 組立設備、41,45 ロボット、42 ネジ、43 ワーク、44 ネジ穴、47 組付工程、48 搬送工程、50 プロジェクト、52,520 共通変数、54 IOユニット定義、56,560~566 プログラム、58,580~586,583A,5891,5892 ローカル変数、60 モジュール間I/F、62 HMI、70~78,71A,73A,74A,791,792 プログラムモジュール、80 組立設備モジュール、81,81A 組立モジュール、82 搬送モジュール、83,83A ネジピックモジュール、84,84A ネジ取付モジュール、85 ピックモジュール、86 プレイスモジュール、87 検査モジュール、88 処理検査モジュール、100 制御装置、102,202 プロセッサ、104 チップセット、106,206 主記憶装置、108,208 二次記憶装置、110,214 ローカルネットワークコントローラ、112,212 USBコントローラ、114 メモリカードインターフェイス、116 メモリカード、120 フィールドバスコントローラ、122 内部バスコントローラ、126 ユーザプログラム、160 プロジェクトデータ、162,172 モジュール名、164,168 識別子、166 要素データ、170 変数名、200 プログラム開発装置、204 ドライブ、205 記憶媒体、216 入力部、218 表示部、220 バス、250 開発ツール、300,310,320,324,350,360,370 設定画面、302,312,322 プルダウン、314 入力ボックス、330 クロスレファレンス、352,354 設定内容、356 比較結果、541~546 ノードアドレス、600~608,601A,603A,6091,6092 グローバル変数、620,621,625 ページ、891 撮影モジュール、892 評価モジュール。

Claims (10)

  1. 制御装置で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置であって、
    1または複数のプログラムモジュールを含むプロジェクトを保持する記憶部と、
    前記プロジェクトに1または複数のプログラムモジュールをインポートする更新手段とを備え、
    前記プログラムモジュールの各々は、プログラムを含むとともに、前記プロジェクトに含まれるすべてのプログラムモジュール間で参照可能な変数である第1の変数と、前記プロジェクトに含まれる複数のプログラムモジュール間で参照可能な変数である第2の変数と、各プログラムモジュールにおいて参照される変数である第3の変数とを定義可能であり、
    前記更新手段は、前記インポートされるプログラムモジュールに含まれる第1の変数の変数名を維持するとともに、前記インポートされるプログラムモジュールに含まれる第2の変数の変数名が前記プロジェクトのいずれかのプログラムモジュールに含まれる第2の変数の変数名と重複する場合には、当該重複する変数名の変更を受け付けるように構成されている、プログラム開発装置。
  2. 前記更新手段は、前記インポートされるプログラムモジュールに含まれる第2の変数の変数名が重複する場合に、当該重複する第2の変数をユーザに提示する、請求項1に記載のプログラム開発装置。
  3. 前記更新手段は、前記インポートされるプログラムモジュールに含まれる第2の変数の変数名が重複する場合に、当該重複する第2の変数を予め定められた命名規則に従って変更する、請求項1または2に記載のプログラム開発装置。
  4. 前記更新手段は、前記インポートされるプログラムモジュールに含まれるプログラムの名称が前記プロジェクトのいずれかのプログラムモジュールに含まれるプログラムの名称と重複する場合には、当該重複するプログラムの名称の変更を受け付けるようにさらに構成されている、請求項1~3のいずれか1項に記載のプログラム開発装置。
  5. 前記更新手段は、前記インポートされるプログラムモジュールに含まれるプログラムの名称が重複する場合に、当該重複するプログラムの名称をユーザに提示する、請求項4に記載のプログラム開発装置。
  6. 前記更新手段は、前記インポートされるプログラムモジュールに含まれるプログラムの名称が重複する場合に、当該重複するプログラムの名称を予め定められた命名規則に従って変更する、請求項4または5に記載のプログラム開発装置。
  7. 呼び出し関係にある複数のプログラムモジュールの単位でインポートされる、請求項1~6のいずれか1項に記載のプログラム開発装置。
  8. 前記プログラムモジュールの各々は、対応付けられる入出力ユニットの定義を含むことが可能であり、
    前記更新手段は、前記インポートされるプログラムモジュールに含まれる入出力ユニットの定義が前記プロジェクトのいずれかのプログラムモジュールに含まれる入出力ユニットの定義と重複する場合に、当該重複する入出力ユニットの定義の変更を受け付けるようにさらに構成されている、請求項1~7のいずれか1項に記載のプログラム開発装置。
  9. 制御装置で実行されるユーザプログラムを含むプロジェクトを作成するためのプロジェクト作成方法であって、
    1または複数のプログラムモジュールを含むプロジェクトを保持するステップを備え、前記プログラムモジュールの各々は、プログラムを含むとともに、前記プロジェクトに含まれるすべてのプログラムモジュール間で参照可能な変数である第1の変数と、前記プロジェクトに含まれる複数のプログラムモジュール間で参照可能な変数である第2の変数と、各プログラムモジュールにおいて参照される変数である第3の変数とを定義可能であり、
    前記プロジェクトに1または複数のプログラムモジュールのインポートを受け付けるステップと、
    前記インポートされるプログラムモジュールに含まれる第1の変数の変数名を維持するステップと、
    前記インポートされるプログラムモジュールに含まれる第2の変数の変数名が前記プロジェクトのいずれかのプログラムモジュールに含まれる第2の変数の変数名と重複する場合には、当該重複する変数名の変更を受け付けるステップとを備える、プロジェクト作成方法。
  10. 制御装置で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置を実現するためのプログラムであって、前記プログラムはコンピュータに、
    1または複数のプログラムモジュールを含むプロジェクトを保持するステップを実行させ、前記プログラムモジュールの各々は、プログラムを含むとともに、前記プロジェクトに含まれるすべてのプログラムモジュール間で参照可能な変数である第1の変数と、前記プロジェクトに含まれる複数のプログラムモジュール間で参照可能な変数である第2の変数と、各プログラムモジュールにおいて参照される変数である第3の変数とを定義可能であり、
    前記プロジェクトに1または複数のプログラムモジュールのインポートを受け付けるステップと、
    前記インポートされるプログラムモジュールに含まれる第1の変数の変数名を維持するステップと、
    前記インポートされるプログラムモジュールに含まれる第2の変数の変数名が前記プロジェクトのいずれかのプログラムモジュールに含まれる第2の変数の変数名と重複する場合には、当該重複する変数名の変更を受け付けるステップとを実行させる、プログラム開発装置を実現するためのプログラム。
JP2019160899A 2019-09-04 2019-09-04 プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム Active JP7322604B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2019160899A JP7322604B2 (ja) 2019-09-04 2019-09-04 プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム
CN202080057008.5A CN114245883B (zh) 2019-09-04 2020-03-03 程序开发装置、工程制作方法以及存储介质
EP20860723.4A EP4027208A4 (en) 2019-09-04 2020-03-03 PROGRAM DEVELOPMENT DEVICE, PROCESS FOR CREATING PROJECTS, AND PROGRAM FOR IMPLEMENTING THE PROGRAM DEVELOPMENT DEVICE
PCT/JP2020/008954 WO2021044650A1 (ja) 2019-09-04 2020-03-03 プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム
US17/634,247 US11704113B2 (en) 2019-09-04 2020-03-03 Program development device, project creation method, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019160899A JP7322604B2 (ja) 2019-09-04 2019-09-04 プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム

Publications (2)

Publication Number Publication Date
JP2021039570A JP2021039570A (ja) 2021-03-11
JP7322604B2 true JP7322604B2 (ja) 2023-08-08

Family

ID=74847146

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019160899A Active JP7322604B2 (ja) 2019-09-04 2019-09-04 プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム

Country Status (5)

Country Link
US (1) US11704113B2 (ja)
EP (1) EP4027208A4 (ja)
JP (1) JP7322604B2 (ja)
CN (1) CN114245883B (ja)
WO (1) WO2021044650A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7151161B2 (ja) * 2018-05-10 2022-10-12 オムロン株式会社 制御システム、サポート装置、サポートプログラム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001109632A (ja) 1999-10-13 2001-04-20 Nec Ic Microcomput Syst Ltd プログラム翻訳システム及びプログラム翻訳方法
JP2009193181A (ja) 2008-02-13 2009-08-27 Meidensha Corp ソフトウェアの開発支援システム、支援方法およびこの方法のプログラム
JP2010049484A (ja) 2008-08-21 2010-03-04 Okuma Corp プログラマブル・ロジック・コントローラのプログラム編集装置

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2592955B2 (ja) * 1989-04-04 1997-03-19 株式会社東芝 プログラム自動生成装置
JPH04205355A (ja) 1990-11-30 1992-07-27 Mitsubishi Electric Corp プログラム変数の使用検査装置
JPH05313871A (ja) * 1992-05-13 1993-11-26 Hokkaido Nippon Denki Software Kk 複数プログラム編集装置
DE69600794T2 (de) * 1995-02-22 1999-06-02 Agust S Egilsson Graphische entwicklungs- und verwaltungsumgebung für anwendungsprogramme
JPH0969041A (ja) * 1995-08-31 1997-03-11 Meidensha Corp ソフトウェア部品の作成支援方法
US6804682B1 (en) * 2002-04-29 2004-10-12 Borland Software Corporation System and methodology providing compiler-assisted refactoring
JP4319082B2 (ja) * 2004-04-08 2009-08-26 三菱電機株式会社 プログラミングシステム
US7555658B2 (en) * 2004-09-30 2009-06-30 Regents Of The University Of California Embedded electronics building blocks for user-configurable monitor/control networks
JP2006099639A (ja) * 2004-09-30 2006-04-13 Denso Wave Inc プログラム作成装置,制御装置及びコンピュータプログラム
US20090043844A1 (en) * 2007-08-09 2009-02-12 International Business Machines Corporation System and method for name conflict resolution
JP2009157533A (ja) * 2007-12-25 2009-07-16 Fuji Electric Systems Co Ltd プログラマブルコントローラシステム
US9300522B2 (en) * 2009-12-23 2016-03-29 International Business Machines Corporation Information technology asset management
JP2011180814A (ja) * 2010-03-01 2011-09-15 Renesas Electronics Corp コンパイラ装置、コンパイル方法及びプログラム
JP5503508B2 (ja) * 2010-11-22 2014-05-28 株式会社日立製作所 プラント制御システム、イコライズデータ選択装置、および、イコライズデータ選択方法
US9146652B1 (en) * 2011-08-31 2015-09-29 Comsol Ab System and method for creating user interfaces in a multiphysics modeling system
CN105144003B (zh) * 2013-03-04 2017-04-05 三菱电机株式会社 程序开发辅助装置及其方法
US20160026455A1 (en) * 2013-03-08 2016-01-28 Mark Christopher Jeffrey Systems and methods for managing files in a cloud-based computing environment
JP6520545B2 (ja) * 2015-08-10 2019-05-29 オムロン株式会社 サポート装置およびサポートプログラム
US10402173B2 (en) * 2017-02-24 2019-09-03 General Electric Company Systems and methods for arbitrary software logic modeling
JP6989411B2 (ja) * 2018-02-16 2022-01-05 株式会社東芝 検索装置
JP6950634B2 (ja) * 2018-07-03 2021-10-13 オムロン株式会社 制御装置および制御方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001109632A (ja) 1999-10-13 2001-04-20 Nec Ic Microcomput Syst Ltd プログラム翻訳システム及びプログラム翻訳方法
JP2009193181A (ja) 2008-02-13 2009-08-27 Meidensha Corp ソフトウェアの開発支援システム、支援方法およびこの方法のプログラム
JP2010049484A (ja) 2008-08-21 2010-03-04 Okuma Corp プログラマブル・ロジック・コントローラのプログラム編集装置

Also Published As

Publication number Publication date
US11704113B2 (en) 2023-07-18
EP4027208A1 (en) 2022-07-13
JP2021039570A (ja) 2021-03-11
US20220326943A1 (en) 2022-10-13
WO2021044650A1 (ja) 2021-03-11
EP4027208A4 (en) 2023-09-20
CN114245883A (zh) 2022-03-25
CN114245883B (zh) 2023-08-11

Similar Documents

Publication Publication Date Title
EP2498156B1 (en) Industrial simulation using redirected I/O module configurations
CN114787838A (zh) 软件定义的制造/组装系统
JP2018097663A (ja) 制御システム、制御プログラムおよび制御方法
JP6623856B2 (ja) スレーブ装置、スレーブ装置の制御方法、情報処理プログラム、および記録媒体
JP6874438B2 (ja) スレーブ装置、スレーブ装置の制御方法、情報処理プログラム、および記録媒体
US9535413B2 (en) Automatic device parameter binding method and system
JP6354178B2 (ja) 画像処理装置、管理システムおよび管理方法
JP7322604B2 (ja) プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム
US20190306250A1 (en) Support apparatus, non-transitory computer-readable recording medium and setting method
US20010037362A1 (en) Automation system for solving a technical-process task and corresponding method
US20210067483A1 (en) Control System, Controller, and Control Method
JP6135247B2 (ja) 情報処理装置および情報処理プログラム
US20190303319A1 (en) Support apparatus, non-transitory computer-readable recording medium and setting method
US10599112B2 (en) Method for programming and configuring a device in a traceable manner
WO2021038930A1 (ja) サポート装置、サポートプログラムおよび設定方法
WO2020184063A1 (ja) 制御システムおよび制御装置
WO2013005350A1 (ja) シンボルテーブル生成方法、周辺機器との通信方法およびプログラマブルロジックコントローラ
WO2020184062A1 (ja) 制御システムおよび制御装置
JP6705848B2 (ja) 制御装置及び制御システム
US20220365864A1 (en) Program development device, and program for providing program development device
WO2022249713A1 (ja) 制御システム、システムプログラムおよびデバッグ方法
JP2005084941A (ja) 機器管理システム
WO2020184034A1 (ja) 制御システムおよび制御装置
WO2020189142A1 (ja) 制御システム、制御方法、および制御プログラム
WO2022201678A1 (ja) 表示器、表示器の制御方法、情報処理プログラム、および記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220707

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: 20230627

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230710

R150 Certificate of patent or registration of utility model

Ref document number: 7322604

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150