特開2021-60677(P2021-60677A)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オムロン株式会社の特許一覧
特開2021-60677プログラム開発装置およびプログラム開発装置を実現するためのプログラム
<>
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000003
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000004
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000005
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000006
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000007
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000008
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000009
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000010
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000011
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000012
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000013
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000014
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000015
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000016
  • 特開2021060677-プログラム開発装置およびプログラム開発装置を実現するためのプログラム 図000017
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】特開2021-60677(P2021-60677A)
(43)【公開日】2021年4月15日
(54)【発明の名称】プログラム開発装置およびプログラム開発装置を実現するためのプログラム
(51)【国際特許分類】
   G05B 19/05 20060101AFI20210319BHJP
【FI】
   G05B19/05 A
【審査請求】未請求
【請求項の数】10
【出願形態】OL
【全頁数】24
(21)【出願番号】特願2019-183181(P2019-183181)
(22)【出願日】2019年10月3日
(71)【出願人】
【識別番号】000002945
【氏名又は名称】オムロン株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】陣川 健
【テーマコード(参考)】
5H220
【Fターム(参考)】
5H220AA06
5H220BB12
5H220CC06
5H220CX02
5H220DD04
5H220DD07
5H220FF05
5H220GG03
5H220HH08
5H220JJ12
5H220JJ22
5H220JJ42
(57)【要約】
【課題】制御装置で実行されるユーザプログラムの設計効率および再利用性を向上させることのできる新たな仕組みを提供する。
【解決手段】制御装置で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置が提供される。プログラム開発装置は、呼び出し関係にある第1および第2のプログラムを含むユーザプログラムにおいて使用される1または複数の変数の各々について、プログラムからの参照に関する属性の設定を受け付ける設定手段を含む。当該設定される属性は、第1および第2のプログラムのいずれか一方から参照される第1の属性と、第1および第2のプログラムのいずれからも参照される第2の属性とを含む。プログラム開発装置は、ユーザプログラムを解析して、1または複数の変数の各々について、設定されているプログラムからの参照に関する属性に基づく整合性を評価する評価手段を含む。
【選択図】図2
【特許請求の範囲】
【請求項1】
制御装置で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置であって、
呼び出し関係にある第1および第2のプログラムを含むユーザプログラムにおいて使用される1または複数の変数の各々について、プログラムからの参照に関する属性の設定を受け付ける設定手段を備え、当該設定される属性は、前記第1および第2のプログラムのいずれか一方から参照される第1の属性と、前記第1および第2のプログラムのいずれからも参照される第2の属性とを含み、
前記ユーザプログラムを解析して、前記1または複数の変数の各々について、設定されているプログラムからの参照に関する属性に基づく整合性を評価する評価手段を備える、プログラム開発装置。
【請求項2】
前記評価手段による整合性の評価は、前記第1の属性が設定されている変数が参照元とされているプログラムとは異なるプログラムから参照されているか否かを含む、請求項1に記載のプログラム開発装置。
【請求項3】
前記評価手段による整合性の評価は、前記第2の属性が設定されている変数が前記第1および第2のプログラムのいずれからも参照されているか否かを含む、請求項1または2に記載のプログラム開発装置。
【請求項4】
前記評価手段による整合性の評価結果を提示する結果提示手段をさらに備える、請求項1〜3のいずれか1項に記載のプログラム開発装置。
【請求項5】
前記結果提示手段は、前記評価手段により整合性を満たしていないと評価された変数を他の変数とは異なる態様で表示する、請求項4に記載のプログラム開発装置。
【請求項6】
前記結果提示手段は、前記1または複数の変数の各々が入力および出力のいずれの種別で前記ユーザプログラムにおいて使用されているのかを提示する、請求項4または5に記載のプログラム開発装置。
【請求項7】
前記第1の属性が設定される変数は、特定のIOユニットと対応付けられる、請求項1〜6のいずれか1項に記載のプログラム開発装置。
【請求項8】
前記設定手段は、前記1または複数の変数の各々について、使用されるプログラムの設定を受け付ける、請求項1〜5のいずれか1項に記載のプログラム開発装置。
【請求項9】
前記第1および第2のプログラムの各々は、使用される変数および当該変数に対して設定される属性を含めて、モジュール化されている、請求項1〜8のいずれか1項に記載のプログラム開発装置。
【請求項10】
制御装置で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置を実現するためのプログラムであって、前記プログラムはコンピュータに
呼び出し関係にある第1および第2のプログラムを含むユーザプログラムにおいて使用される1または複数の変数の各々について、プログラムからの参照に関する属性の設定を受け付けるステップを実行させ、当該設定される属性は、前記第1および第2のプログラムのいずれか一方から参照される第1の属性と、前記第1および第2のプログラムのいずれからも参照される第2の属性とを含み、前記プログラムはコンピュータに
前記ユーザプログラムを解析して、前記1または複数の変数の各々について、設定されているプログラムからの参照に関する属性に基づく整合性を評価するステップを実行させる、プログラム開発装置を実現するためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム開発装置およびプログラム開発装置を実現するためのプログラムに関する。
【背景技術】
【0002】
FA(Factory Automation)の根幹をなすPLC(プログラマブルロジックコントローラ)などの制御装置の高機能化に伴って、ユーザプログラムと称されるアプリケーションプログラムも大規模化している。プログラムの大規模化にともなって、プログラムの設計効率および再利用性を高めたいというニーズもある。
【0003】
制御装置で実行されるユーザプログラムは、フィールド装置群との間で遣り取りされる信号(IO信号)を参照する命令を含むため、再利用にあたっては、IO信号を参照するための命令などを適宜修正する必要がある。
【0004】
例えば、特開平4−205355号公報(特許文献1)は、制御装置に向けられたものではないが、ソースプログラムにおける共通変数に対する変数使用制限情報を解析し、その制限情報を蓄積し、その蓄積された制限情報を参照しながらソースプログラム中の変数の使用を検査することにより、ソースプログラムの段階で共通変数に対する誤った使用を発見する技術を開示する。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平4−205355号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
上述の特許文献1に開示される技術は、ソースプログラムで使用される共通変数に着目するにすぎず、PLCなどの制御装置においてプログラムの設計効率および再利用性を高めるという目的を達成することはできない。
【0007】
本発明の一つの目的は、制御装置で実行されるユーザプログラムの設計効率および再利用性を向上させることのできる新たな仕組みを提供することである。
【課題を解決するための手段】
【0008】
本発明のある実施の形態によれば、制御装置で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置が提供される。プログラム開発装置は、呼び出し関係にある第1および第2のプログラムを含むユーザプログラムにおいて使用される1または複数の変数の各々について、プログラムからの参照に関する属性の設定を受け付ける設定手段を含む。当該設定される属性は、第1および第2のプログラムのいずれか一方から参照される第1の属性と、第1および第2のプログラムのいずれからも参照される第2の属性とを含む。プログラム開発装置は、ユーザプログラムを解析して、1または複数の変数の各々について、設定されているプログラムからの参照に関する属性に基づく整合性を評価する評価手段を含む。
【0009】
この構成によれば、呼び出し関係にある第1および第2のプログラムからそれぞれ参照される変数の属性を予め設定し、その設定された属性に適合した使用形態になっていることを確保できる。それによって、再利用性の高いユーザプログラムを作成できる。
【0010】
評価手段による整合性の評価は、第1の属性が設定されている変数が参照元とされているプログラムとは異なるプログラムから参照されているか否かを含んでいてもよい。この構成によれば、特定のプログラムから参照されることが定められた変数が別のプログラムから参照されることを防止できる。
【0011】
評価手段による整合性の評価は、第2の属性が設定されている変数が第1および第2のプログラムのいずれからも参照されているか否かを含んでいてもよい。この構成によれば、複数のプログラムから参照されることが定められた変数が一部のプログラムからのみ参照されることを防止できる。
【0012】
プログラム開発装置は、評価手段による整合性の評価結果を提示する結果提示手段をさらに含んでいてもよい。この構成によれば、ユーザは、整合性の評価結果を参照して、ユーザプログラムなどを適切に修正できる。
【0013】
結果提示手段は、評価手段により整合性を満たしていないと評価された変数を他の変数とは異なる態様で表示してもよい。この構成によれば、整合性を満たしていない変数を一見して把握できる。
【0014】
結果提示手段は、1または複数の変数の各々が入力および出力のいずれの種別でユーザプログラムにおいて使用されているのかを提示するようにしてもよい。この構成によれば、変数の使用種別毎に適切に使用されているか否かを判断できる。
【0015】
第1の属性が設定される変数は、特定のIOユニットと対応付けられてもよい。この構成によれば、IOユニットの値を参照する変数に適した設定が可能となる。
【0016】
設定手段は、1または複数の変数の各々について、使用されるプログラムの設定を受け付けてもよい。この構成によれば、属性の違いを意識することなく、使用されるプログラムを設定するだけで、適切な属性を設定できる。
【0017】
第1および第2のプログラムの各々は、使用される変数および当該変数に対して設定される属性を含めて、モジュール化されていてもよい。この構成によれば、モジュール化された単位で再利用を容易化できる。
【0018】
本発明の別の実施の形態によれば、制御装置で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置を実現するためのプログラムが提供される。プログラムはコンピュータに、呼び出し関係にある第1および第2のプログラムを含むユーザプログラムにおいて使用される1または複数の変数の各々について、プログラムからの参照に関する属性の設定を受け付けるステップを実行させる。当該設定される属性は、第1および第2のプログラムのいずれか一方から参照される第1の属性と、第1および第2のプログラムのいずれからも参照される第2の属性とを含む。プログラムはコンピュータに、ユーザプログラムを解析して、1または複数の変数の各々について、設定されているプログラムからの参照に関する属性に基づく整合性を評価するステップを実行させる。
【0019】
この構成によれば、呼び出し関係にある第1および第2のプログラムからそれぞれ参照される変数の属性を予め設定し、その設定された属性に適合した使用形態になっていることを確保できる。それによって、再利用性の高いユーザプログラムを作成できる。
【発明の効果】
【0020】
本発明によれば、制御装置で実行されるユーザプログラムの設計効率および再利用性を向上させることのできる新たな仕組みを実現できる。
【図面の簡単な説明】
【0021】
図1】本実施の形態に従うモジュール化プログラミングにおいて作成されるプロジェクトのデータ構造の一例を示す模式図である。
図2】本実施の形態に従うモジュール化プログラミングにおける変数の取り扱いを説明するための図である。
図3】本実施の形態に従う制御システムの全体構成例を示す模式図である。
図4】本実施の形態に従う制御システムを構成する制御装置のハードウェア構成例を示すブロック図である。
図5】本実施の形態に従う制御システムを構成するプログラム開発装置のハードウェア構成例を示すブロック図である。
図6】本実施の形態に従うモジュール化プログラミングの全体処理手順を示すフローチャートである。
図7】本実施の形態に従うモジュール化プログラミングに従って作成されるプロジェクトの一例を示す図である。
図8図7に示すプロジェクトにいくつかの誤りが含まれる例を示す図である。
図9】本実施の形態に従うモジュール化プログラミングにおいて使用されるグローバル変数定義の一例を示す図である。
図10】本実施の形態に従うモジュール化プログラミングにおける整合性評価の処理手順を示すフローチャートである。
図11図10に示す整合性評価の処理によって生成されるモジュール毎変数使用状況の一例を示す図である。
図12】本実施の形態に従うモジュール化プログラミングにおいて生成される対象グローバル変数定義の一例を示す図である。
図13】本実施の形態に従うプログラム開発装置が提供する整合性評価の結果例を示す模式図である。
図14】本実施の形態に従うプログラム開発装置が提供する整合性評価の別の結果例を示す模式図である。
図15】本実施の形態の変形例に従うモジュール化プログラミングにおけるモジュール間インターフェイスの一例を示す図である。
【発明を実施するための形態】
【0022】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【0023】
<A.適用例:モジュール化プログラミング>
まず、本発明が適用される場面の一例について説明する。具体的には、本実施の形態に従うモジュール化プログラミングについて概略する。なお、「モジュール化プログラミング」との用語は、後述するように、プログラムおよび設定がモジュールとして規定されており、モジュール単位で再利用することが予定されているためである。但し、本発明の技術思想は、モジュール化プログラミングだけに適用されるものではなく、複数のプログラムを含むユーザプログラムに適用可能である。
【0024】
国際電気標準会議(IEC:International Electrotechnical Commission)が定めたIEC61131−3においては、プログラムやプロジェクトを構成するブロックは、POU(Program Organization Units)と称される。POUは、プログラム要素のまとまりの単位に相当する。ユーザプログラム内においては、あるPOUから別のPOUを呼び出すといった、POU間の呼び出し関係(以下、「親子関係」あるいは「Parent−Child」などとも称す。)を規定できる。
【0025】
POUをモジュールの単位とすることで、モジュール間の親子関係は表現できるが、制御装置あるいは制御システムは、IOユニットを介して入力機器から入力信号を取得し、取得した入力信号に基づく制御演算に従って出力機器を制御するものである。そのため、IO信号の数は、汎用的なコンピュータに比較してずっと多く、また、IOユニットに割り当てられるグローバル変数(IO信号の値を示す)は、いずれの階層のPOUからもアクセスできるようになっている。そのため、各プログラムからIOユニットに割り当てられるグローバル変数へのアクセスを可能にするIO−プログラムインターフェイス(IO−プログラムI/F)が用意される。
【0026】
また、POU間のインターフェイスについても、厳格な呼び出し関係だけを許容する(すなわち、各POUが管理する入力変数および出力変数だけで呼び出し関係を規定する)プログラム構造を採用した場合には、プログラムの再利用性が低下するため、各POUがアクセス可能なグローバル変数を規定するモジュール間のインターフェイス(プログラム間インターフェイス(プログラム間I/F))が用意される。
【0027】
図1は、本実施の形態に従うモジュール化プログラミングにおいて作成されるプロジェクトのデータ構造の一例を示す模式図である。図1を参照して、プロジェクト50は、要素として、ユーザプログラム52と、IOユニット定義54と、IO−プログラムI/F56と、プログラム間I/F58とを含む。
【0028】
一般的に、IO−プログラムI/F56には、IOユニットが遣り取りするIO信号を示すグローバル変数が定義される。典型的には、IO−プログラムI/F56に設定される変数は、特定のIOユニットと対応付けられる。一方、プログラム間I/F58には、各プログラムが参照可能なグローバル変数が定義される。
【0029】
図1に示すプロジェクト50においては、制御対象の特性に応じたモジュールが規定されている。より具体的には、プロジェクト50は、装置モジュール60と、工程モジュール62および66とを含む。工程モジュール62は、さらに工程内の各機能に対応する工程内モジュール63および64を含む。各モジュールは、ユーザプログラム52、IOユニット定義54、IO−プログラムI/F56、および、プログラム間I/F58の各々に属するプログラム要素を含む。すなわち、プロジェクト50に含まれる各プログラムは、使用される変数および当該変数に対して設定される属性を含めて、モジュール化されている。
【0030】
より具体的には、装置モジュール60は、ユーザプログラム52として、制御対象に含まれる装置を制御するための装置プログラム53を含むとともに、プログラム間I/F58として、グローバル変数定義59を含む。グローバル変数定義59は、使用可能なグローバル変数名の定義および各グローバル変数名のデータ型の定義を含む(以下、他のグローバル変数およびローカル変数についても同様である。)。
【0031】
なお、本明細書において、「ローカル変数」は当該ローカル変数を定義するプログラム内でのみ参照可能な変数を意味し、「グローバル変数」は「ローカル変数」以外の変数を意味する。以下の説明において「グローバル変数」は、1または複数のプログラムあるいはIOユニットからの参照が可能な変数を包含するような用語であり、「グローバル」という修飾語を厳密な意味に解釈すべきではない。
【0032】
工程モジュール62は、ユーザプログラム52として、工程の機能を協調および全体制御するプログラム531およびローカル変数定義539を含むとともに、プログラム間I/F58として、グローバル変数定義59を含む。
【0033】
工程モジュール62に含まれる工程内モジュール63は、ユーザプログラム52として、機能プログラム532および機能プログラム532から呼び出されるファンクションブロック533を含むとともに、プログラム間I/F58として、グローバル変数定義59を含む。さらに、工程内モジュール63は、IO−プログラムI/F56として、グローバル変数定義57を含むとともに、IOユニット定義54として、IOユニット設定55を含む。
【0034】
同様に、工程モジュール62に含まれる工程内モジュール64は、ユーザプログラム52として、機能プログラム534および機能プログラム534から呼び出されるファンクションブロック535を含むとともに、プログラム間I/F58として、グローバル変数定義59を含む。さらに、工程内モジュール64は、IO−プログラムI/F56として、グローバル変数定義57を含むとともに、IOユニット定義54として、IOユニット設定55を含む。
【0035】
工程モジュール66は、ユーザプログラム52として、工程の全体制御するプログラム536を含むとともに、プログラム間I/F58として、グローバル変数定義59を含む。
【0036】
工程モジュール66に含まれる工程内モジュール67は、ユーザプログラム52として、機能プログラム537および機能プログラム537から呼び出されるファンクションブロック538を含むとともに、プログラム間I/F58として、グローバル変数定義59を含む。さらに、工程内モジュール67は、IO−プログラムI/F56として、グローバル変数定義57を含むとともに、IOユニット定義54として、IOユニット設定55を含む。
【0037】
なお、グローバル変数定義57および59については、後述の図9などを参照されたい。
【0038】
例えば、図1に示すプロジェクト50に含まれる特定のモジュール(特定の工程についてのプログラム、変数定義およびIO定義)を再利用する場合を想定すると、ユーザプログラム52に含まれるプログラムだけではなく、IOユニット定義54、IO−プログラムI/F56およびプログラム間I/F58に含まれる要素も再利用の際に考慮しなければならない。
【0039】
ユーザプログラム52に含まれる特定のプログラムだけが参照する変数は、IO−プログラムI/F56のグローバル変数として存在することになり、複数のプログラム間で相互参照される変数は、プログラム間I/F58のグローバル変数として存在することになる。しかしながら、IEC61131−3における変数の定義には、このような変数の取り扱いの相違に係る情報が存在しないため、ユーザプログラムの設計段階において、適切な取り扱いができない可能性がある。
【0040】
そこで、本実施の形態に従うモジュール化プログラミングにおいては、変数に対して、特定のプログラムのみが参照する、および、複数のプログラム間で参照する、のいずれかの属性(あるいは規則)を設定することができるとともに、当該設定された属性に基づく整合性を評価できるようになっている。なお、これらの属性とは異なる属性を変数に設定できるようにしてもよい。
【0041】
図2は、本実施の形態に従うモジュール化プログラミングにおける変数の取り扱いを説明するための図である。図2を参照して、IO−プログラムI/F56に属するグローバル変数は、特定のプログラムからのみ参照が許可され、プログラム間I/F58に属するグローバル変数は、複数のプログラムからの参照が許可される。
【0042】
本実施の形態に従うモジュール化プログラミングにおいては、各グローバル変数がいずれの属性であるのかが予め設定されており、この設定された属性に整合するか否かが評価される。
【0043】
さらに、プログラム間I/F58に属するグローバル変数は、対象の複数のプログラムから参照していることを要求することもできる。すなわち、対象となる複数のプログラムのうちいずれかのプログラムから参照されていないことを不整合であると判定することもできる。
【0044】
このような変数に対する属性の設定および整合性評価を行うことで、ユーザプログラムの設計効率および再利用性を向上させることのできる新たな仕組みを実現できる。
【0045】
<B.制御システム構成例>
次に、本実施の形態に従うプログラム開発装置200によって作成されるユーザプログラムが実行される制御システム1の構成例について説明する。
【0046】
図3は、本実施の形態に従う制御システム1の全体構成例を示す模式図である。図3を参照して、制御システム1は、1または複数の制御装置100を含む。なお、図3には、2つの制御装置100を含む制御システム1を例示するが、1つの制御装置100からなる構成であってもよい。
【0047】
制御装置100の各々は、制御対象に対する制御を行うための制御演算を実行するとともに、制御対象に含まれる監視対象に生じ得る何らかの異常を検知するための異常検知処理を実行する。制御装置100は、PLC(プログラマブルコントローラ)などの、一種のコンピュータとして具現化されてもよい。
【0048】
制御装置100は、フィールドバス2を介してフィールド装置群10と接続されている。さらに、制御装置100同士は、ローカルネットワーク4を介して互いに接続されている。制御装置100には、プログラム開発装置200が接続されることもある。
【0049】
フィールドバス2としては、データの到達時間が保証される、定周期通信を行うネットワークを採用することが好ましい。このような定周期通信を行うネットワークとしては、EtherCAT(登録商標)などが知られている。
【0050】
制御装置100は、フィールド装置群10にて取得され、制御装置100へ転送されるデータ(以下、「入力値」とも称す。)を収集する。フィールド装置群10は、制御対象または制御に関連する製造装置や生産ラインなど(以下、「フィールド」とも総称する。)の状態値を入力値として収集する装置を含む。
【0051】
本明細書において、「状態値」は、任意の制御対象(含む:監視対象)にて観測できる値を包含する用語であり、例えば、任意のセンサにより測定できる物理値や、リレーやスイッチなどのON/OFF状態、PLCがサーボドライバに与える位置、速度、トルクなどの指令値、PLCが演算に用いる変数値などを含み得る。
【0052】
このような状態値を収集する装置としては、入力リレーや各種センサなどが想定される。フィールド装置群10は、さらに、制御装置100にて生成される指令値(以下、「出力値」とも称す。)に基づいて、フィールドに対して何らかの作用を与える装置を含む。このようなフィールドに対して何らかの作用を与える装置としては、出力リレー、コンタクタ、サーボドライバおよびサーボモータ、その他任意のアクチュエータが想定される。これらのフィールド装置群10は、フィールドバス2を介して、制御装置100との間で、入力値および出力値を含むデータを遣り取りする。
【0053】
図3に示す構成例においては、フィールド装置群10は、リモートIO(Input/Output)装置12と、リレー群14と、画像センサ18およびカメラ20と、サーボドライバ22およびサーボモータ24とを含む。
【0054】
リモートIO装置12は、フィールドバス2を介して通信を行う通信部と、入力値の収集および出力値の出力を行うための入出力部(以下、「IOユニット」とも称す。)とを含む。このようなIOユニットを介して、制御装置100とフィールドとの間で入力値および出力値が遣り取りされる。図3には、リレー群14を介して、入力値および出力値として、デジタル信号が遣り取りされる例が示されている。
【0055】
IOユニットは、フィールドバスに直接接続されるようにしてもよい。図3には、フィールドバス2にIOユニット16が直接接続されている例を示す。
【0056】
画像センサ18は、カメラ20によって撮像された画像データに対して、パターンマッチングなどの画像計測処理を行って、その処理結果を制御装置100へ送信する。
【0057】
サーボドライバ22は、制御装置100からの出力値(例えば、位置指令など)に従って、サーボモータ24を駆動する。
【0058】
プログラム開発装置200は、制御装置100で実行されるユーザプログラムの開発環境を提供する。ユーザは、プログラム開発装置200を操作して、制御装置100で実行されるユーザプログラムを作成する。具体的には、プログラム開発装置200は、制御装置100で実行されるユーザプログラムの開発環境(プログラム作成編集ツール、パーサ、コンパイラなど)、制御装置100および制御装置100に接続される各種デバイスの設定パラメータ(コンフィギュレーション)を決定するための機能、作成したユーザプログラムを制御装置100へ送信する機能、制御装置100上で実行されるユーザプログラムなどをオンラインで修正・変更する機能、などを提供する。
【0059】
本実施の形態に従うプログラム開発装置200は、単一の制御装置100で実行されるユーザプログラム内での再利用性を高めることができるだけではなく、複数の制御装置100でそれぞれ実行されるユーザプログラム間での再利用性も高めることができる。
【0060】
<C.ハードウェア構成例>
次に、本実施の形態に従う制御システム1を構成する制御装置100およびプログラム開発装置200のハードウェア構成例について説明する。
【0061】
(c1:制御装置100のハードウェア構成例)
図4は、本実施の形態に従う制御システム1を構成する制御装置100のハードウェア構成例を示すブロック図である。図4を参照して、制御装置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,…とを含む。
【0062】
プロセッサ102は、二次記憶装置108に格納された各種プログラムを読み出して、主記憶装置106に展開して実行することで、制御対象に応じた制御、および、後述するような各種処理を実現する。チップセット104は、プロセッサ102とともに、各コンポーネントを制御することで、制御装置100全体としての処理を実現する。
【0063】
二次記憶装置108には、図示しないシステムプログラムに加えて、プログラム開発装置200において作成された実行形式のユーザプログラム126(制御プログラムに相当)が格納される。
【0064】
ローカルネットワークコントローラ110は、ローカルネットワーク4を介した他の装置との間のデータの遣り取りを制御する。USBコントローラ112は、USB接続を介してプログラム開発装置200との間のデータの遣り取りを制御する。
【0065】
メモリカードインターフェイス114は、メモリカード116を着脱可能に構成されており、メモリカード116に対してデータを書き込み、メモリカード116から各種データ(ユーザプログラムやトレースデータなど)を読み出すことが可能になっている。
【0066】
フィールドバスコントローラ120は、フィールドバス2を介した他の装置との間のデータの遣り取りを制御する。内部バスコントローラ122は、制御装置100に搭載されるIOユニット124−1,124−2,…との間でデータを遣り取りするインターフェイスである。
【0067】
図4には、プロセッサ102がプログラムコードを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(例えば、ASIC(Application Specific Integrated Circuit)またはFPGA(Field-Programmable Gate Array)など)を用いて実装してもよい。あるいは、制御装置100の主要部を、汎用的なアーキテクチャに従うハードウェア(例えば、汎用パソコンをベースとした産業用パソコン)を用いて実現してもよい。
【0068】
(c2:プログラム開発装置200のハードウェア構成例)
図5は、本実施の形態に従う制御システム1を構成するプログラム開発装置200のハードウェア構成例を示すブロック図である。プログラム開発装置200は、一例として、汎用的なアーキテクチャに従うハードウェア(例えば、汎用パソコン)を用いてプログラムを実行することで実現されてもよい。
【0069】
図5を参照して、プログラム開発装置200は、CPUやMPUなどのプロセッサ202と、ドライブ204と、主記憶装置206と、二次記憶装置208と、USBコントローラ212と、ローカルネットワークコントローラ214と、入力部216と、表示部218とを含む。これらのコンポーネントはバス220を介して接続される。
【0070】
プロセッサ202は、二次記憶装置208に格納された各種プログラムを読み出して、主記憶装置206に展開して実行することで、後述するような各種処理を実現する。
【0071】
二次記憶装置208は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)などで構成される。二次記憶装置208には、後述するような各種機能を実現するための開発ツール250が格納される。二次記憶装置208には、OSおよび他の必要なシステムプログラムが格納されていてもよい。
【0072】
ドライブ204は、記憶媒体205に対してデータを書き込み、記憶媒体205から各種データ(ユーザプログラムおよび各種データ)を読み出すことが可能になっている。記憶媒体205は、例えばコンピュータ読取可能なプログラムを非一過的に格納する記憶媒体205(例えば、DVD(Digital Versatile Disc)などの光学記憶媒体)を含む。
【0073】
プログラム開発装置200で実行される開発ツール250は、コンピュータ読取可能な記憶媒体205を介してインストールされてもよいが、ネットワーク上のサーバ装置などからダウンロードする形でインストールするようにしてもよい。また、本実施の形態に従うプログラム開発装置200が提供する機能は、OSが提供するモジュールの一部を使用する形で実現される場合もある。
【0074】
USBコントローラ212は、USB接続を介して制御装置100との間のデータの遣り取りを制御する。ローカルネットワークコントローラ214は、任意ネットワークを介した他の装置との間のデータの遣り取りを制御する。
【0075】
入力部216は、キーボードやマウスなどで構成され、ユーザ操作を受け付ける。表示部218は、ディスプレイ、各種インジケータなどで構成され、プロセッサ202からの処理結果などを出力する。プログラム開発装置200には、プリンタが接続されてもよい。
【0076】
図5には、プロセッサ202がプログラムコードを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(例えば、ASICまたはFPGAなど)を用いて実装してもよい。
【0077】
<D.ユーザプログラミングの設計および整合性評価>
次に、本実施の形態に従うモジュール化プログラミングに従うユーザプログラムの設計例および整合性評価について説明する。
【0078】
(d1:全体処理手順)
図6は、本実施の形態に従うモジュール化プログラミングの全体処理手順を示すフローチャートである。図6を参照して、ユーザは、プログラム開発装置200を操作して、作成予定のユーザプログラムで使用する予定の変数を定義する(ステップS2)。そして、ユーザは、プログラム開発装置200を操作して、ユーザプログラムを作成する(ステップS4)。
【0079】
ユーザプログラムの作成が完了するまで(ステップS6においてNO)、ステップS2およびS4の処理は反復的に実行される。
【0080】
ユーザプログラムの作成が完了すると(ステップS6においてYES)、ユーザは、作成したユーザプログラムに対して整合性評価を実行する(ステップS8)。整合性を満たしていない場合(ステップS10においてNO)には、ユーザは、ユーザプログラムおよび変数の定義を見直す(ステップS12)。そして、ユーザは、ステップS8以下の処理を再度実行する。
【0081】
整合性を満たしている場合(ステップS10においてYES)には、ユーザは、作成したユーザプログラムをビルドして制御装置100へ転送する(ステップS14)。そして、ユーザプログラムの作成処理は完了する。
【0082】
(d2:プロジェクト50の設計例)
図7は、本実施の形態に従うモジュール化プログラミングに従って作成されるプロジェクト50の一例を示す図である。図7に示すプロジェクト50は、呼び出し関係(親子関係)にある2つのモジュール(親モジュール70(Parent)および子モジュール80(Child))を含む。親モジュール70は、入力ユニットAからの入力信号を受け、子モジュール80を起動する命令を含む。子モジュール80は、親モジュール70からの起動指令を受け、処理を実行した後、その処理結果を出力ユニットに出力する命令を含む。このように、ユーザプログラムは、呼び出し関係にある複数のプログラムを含む。
【0083】
プログラム間I/F58には、親モジュール70および子モジュール80のいずれからも参照可能な2つの変数「Child_REQ」および「Child_ACK」が規定されている。これらの変数は、親モジュール70から子モジュール80への起動および終了のために受け渡し72,82に用いられる。
【0084】
また、親モジュール70のIOプログラム間I/F58には、入力ユニットAの入力信号を示す変数「InA_Bit00」が規定されており、子モジュール80のプログラム間I/F58には、入力ユニットBの入力信号を示す変数「InB_Bit00」、および、出力ユニットの出力信号を示す変数「OutC_Bit00」が規定されている。
【0085】
図8は、図7に示すプロジェクト50にいくつかの誤りが含まれる例を示す図である。図8に示すプロジェクト50においては、本来図7に示すプロジェクト50を作成すべきであるところ、以下の2つの誤りを含むものと仮定する。
【0086】
親モジュール70において、変数「Child_ACK」を参照する命令71をプログラムに含めるべきであるが、記載が漏れている。この結果、プログラム間I/F58に規定された変数「Child_ACK」が参照されていない((1)参照されず)。
【0087】
また、IO−プログラムI/F56に規定された、入力ユニットAの変数「InA_Bit00」は、親モジュール70からのみ参照されるべきであるが、子モジュール80から参照する命令81を含む。この結果、IO−プログラムI/F56に規定された変数「InA_Bit00」が本来のモジュールとは異なるモジュールから参照されることになる((2)定義外からの参照)。
【0088】
このように、図8に示すプロジェクト50は、IO−プログラムI/F56およびプログラム間I/F58についての規則を遵守できていない。
【0089】
本実施の形態に従うモジュール化プログラミングは、このようなIO−プログラムI/F56およびプログラム間I/F58に関する規則への整合性を評価できる。
【0090】
このような変数に対する属性の設定および整合性評価を行うことで、ユーザプログラムの設計効率および再利用性を向上させることのできる新たな仕組みを実現できる。
【0091】
(d3:グローバル変数定義90)
図9は、本実施の形態に従うモジュール化プログラミングにおいて使用されるグローバル変数定義90の一例を示す図である。図9に示されるグローバル変数定義90は、図6に示すステップS2に示すユーザによる定義の操作によって作成されてもよい。すなわち、プログラム開発装置200は、呼び出し関係にある複数のプログラム(親モジュール70および子モジュール80)を含むユーザプログラムにおいて使用される変数の各々について、プログラムからの参照に関する属性の設定を受け付ける処理を実行する。
【0092】
図9を参照して、グローバル変数定義90は、各グローバル変数の変数名を指定する変数名91および対応するデータ型を定義するデータ型92を含む変数定義部93と、各グローバル変数とIOユニットとの対応関係を示すIOユニット割り当て定義部94と、参照先のモジュールを規定する参照モジュール部96とを含む。グローバル変数定義90は、各グローバル変数についてのコメント(任意)を格納するコメント部95をさらに含んでいてもよい。
【0093】
このように、グローバル変数定義90においては、各変数について、使用(参照)されるプログラムが設定される。グローバル変数定義90においては、このような参照元のプログラムの設定(すなわち、各グローバル変数に関連付けて参照モジュール部96に規定されるモジュールの有無およびモジュールの数)に応じて、各グローバル変数がIO−プログラムI/F56に属するのか、プログラム間I/F58に属するのかが決定される。
【0094】
図9に示すように、プログラム開発装置200は、呼び出し関係にある複数のプログラムを含むユーザプログラムにおいて使用される1または複数の変数の各々について、プログラムからの参照に関する属性(あるいは規則)の設定を受け付ける。IO−プログラムI/F56に属する変数は、いずれか一つのプログラムから参照されるという属性を有する。また、プログラム間I/F58に属する変数は、関連する複数のプログラムのいずれからも参照されるという属性を有する。
【0095】
(d4:整合性評価)
プログラム開発装置200は、ユーザプログラムを解析して、ユーザプログラムに含まれる変数の各々について、設定されているプログラムからの参照に関する属性(IO−プログラムI/F56およびプログラム間I/F58のいずれに属するのか)に基づく整合性を評価する。このような、グローバル変数定義90に基づくユーザプログラムの整合性評価の一例として、モジュール毎に変数使用状況を解析する処理について説明する。
【0096】
図10は、本実施の形態に従うモジュール化プログラミングにおける整合性評価の処理手順を示すフローチャートである。図10に示す各ステップは、典型的には、プログラム開発装置200のプロセッサ202が開発ツール250を実行することで実現される。すなわち、開発ツール250は、制御装置100で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置200を実現するためのプログラムである。そして、プログラム開発装置200は、ユーザプログラムを解析して、変数の各々について、設定されているプログラムからの参照に関する属性に基づく整合性を評価するための、以下に説明するような処理を実行する。
【0097】
図10を参照して、プログラム開発装置200は、図9に示すグローバル変数定義90を参照して、解析対象のモジュール名を抽出する(ステップS100)。プログラム開発装置200は、抽出されたいずれかのモジュール名をもつプログラムを検索対象に設定する(ステップS102)。プログラム開発装置200は、検索対象に設定されたプログラムの1行を読み込み(ステップS104)、何らかの変数が使用されているか否かを判断する(ステップS106)。何らかの変数が使用されていれば(ステップS106においてYES)、使用されている変数の変数名、使用箇所、入力/出力の種別、用途などを抽出する(ステップS108)。抽出された各情報は、モジュール毎変数使用状況(後述の図11参照)として出力される。なお、何らかの変数も使用されていなければ(ステップS106においてNO)、ステップS108の処理はスキップされる。
【0098】
プログラム開発装置200は、検索対象のプログラムの最終行に到達しているか否かを判断する(ステップS110)。検索対象のプログラムの最終行に到達していなければ(ステップS110においてNO)、プログラム開発装置200は、検索対象に設定されたプログラムの次の1行を読み込み(ステップS112)、ステップS106以下の処理を再度実行する。
【0099】
検索対象のプログラムの最終行に到達していれば(ステップS110においてYES)、プログラム開発装置200は、抽出されたモジュール名をもつプログラムのすべてについて検索処理が完了しているか否かを判断する(ステップS114)。抽出されたモジュール名をもつプログラムのうち検索処理が未完のものがあれば(ステップS114においてNO)、プログラム開発装置200は、検索処理が未完のプログラムを新たな検索対象に設定する(ステップS116)。そして、プログラム開発装置200は、ステップS102以下の処理を再度実行する。
【0100】
抽出されたモジュール名をもつプログラムのすべてについて検索処理が完了していれば(ステップS114においてYES)、プログラム開発装置200は、ステップS120以下の処理を実行する。
【0101】
図11は、図10に示す整合性評価の処理によって生成されるモジュール毎変数使用状況350の一例を示す図である。図11を参照して、モジュール毎変数使用状況350は、対象のモジュールに含まれるプログラムで使用されるグローバル変数の一覧を含む。
【0102】
より具体的には、モジュール毎変数使用状況350は、対応する変数が使用されているモジュールを示すモジュール名351と、使用されている変数の変数名352と、対応する変数の使用箇所353と、対応する変数の入力/出力の種別354と、対応する変数の用途355と、対応する変数が定義されたモジュール以外で使用されていることを示すフラグが格納される定義外使用356とを含む。
【0103】
使用箇所353は、対応するプログラムのステップ番号などを用いて対応する変数の使用箇所が特定される。入力/出力の種別354は、対応する変数が接点(入力変数)として使用されているのか、対応する変数がコイル(出力変数)として使用されているのかを示す。
【0104】
なお、図10のステップS108においては、同一のプログラムから同一の変数が複数回抽出される場合があるが、このような複数回抽出された同一の変数はマージされて、モジュール毎変数使用状況350には、同一のプログラムについて同一の変数が重複して登録されることはない。また、図10のステップS108において抽出された変数のうち、対応するモジュール名が存在しないものを削除してもよい。
【0105】
図11に示すようなモジュール毎変数使用状況350が参照されて、図10に示すステップS120以下の処理が実行される。再度図10を参照して、プログラム開発装置200は、グローバル変数定義90(図9)に含まれる変数のうち対応する参照先のモジュール(参照モジュール部96)が規定されていないものを削除して、整合性評価の対象となる変数のみからなる対象グローバル変数定義90Aを生成する(ステップS120)。
【0106】
図12は、本実施の形態に従うモジュール化プログラミングにおいて生成される対象グローバル変数定義90Aの一例を示す図である。図12を参照して、対象グローバル変数定義90Aは、参照モジュールと対応付けられたグローバル変数のみが含まれることになる。対象グローバル変数定義90Aにおいては、各グローバル変数を参照するモジュール毎に使用の有無を評価するためのフラグをセットできるようになっている(参照モジュール部97)。
【0107】
次に、図11に示されるモジュール毎変数使用状況350と、図12に示される対象グローバル変数定義90Aとを比較して、一致および相違を評価する処理が実行される。
【0108】
より具体的には、プログラム開発装置200は、モジュール毎変数使用状況350(図11)のうち最初のエントリを読み込み(ステップS122)、読み込んだエントリの変数名352をキーにして、対象グローバル変数定義90Aに含まれる同一の変数名91をもつエントリを検索する(ステップS124)。そして、対象グローバル変数定義90Aの検索されたエントリにおいて、読み込んだエントリのモジュール名351と同一のモジュール名に使用済であることを示すフラグ(図12の参照モジュール部97)をセットする(ステップS126)。
【0109】
続いて、プログラム開発装置200は、読み込んだエントリの変数名352に対応する対象グローバル変数定義90Aのエントリにおいて、読み込んだモジュール名351が参照モジュール部97に含まれているか否かを判断する(ステップS128)。読み込んだモジュール名351が参照モジュール部97に含まれていなければ(ステップS128においてNO)、プログラム開発装置200は、読み込んだエントリに対して、定義外のモジュールで使用されていることを示すフラグ(図11の定義外使用356)をセットする(ステップS130)。一方、読み込んだモジュール名351が参照モジュール部97に含まれていれば(ステップS128においてYES)、プログラム開発装置200は、ステップS130の処理をスキップする。
【0110】
すなわち、ステップS128およびS130においては、注目している変数について、対象グローバル変数定義90Aの参照モジュール部97にモジュール毎変数使用状況350のモジュール名351が含まれていれば、当該注目している変数は適切に使用されていると判断される。一方、対象グローバル変数定義90Aの参照モジュール部97にモジュール毎変数使用状況350のモジュール名351が含まれていれば、当該注目している変数の使用が正しくない(定義されていないモジュールでの使用)と判断される。このように、整合性評価としては、IO−プログラムI/F56に属する変数が参照元とされているプログラムとは異なるプログラムから参照されているか否かの判断を含む。
【0111】
プログラム開発装置200は、モジュール毎変数使用状況350の最後のエントリまで処理が完了しているか否かを判断する(ステップS132)。モジュール毎変数使用状況350の最後のエントリまで処理が完了していなければ(ステップS132においてNO)、プログラム開発装置200は、モジュール毎変数使用状況350(図11)のうち次のエントリを読み込み(ステップS134)、ステップS124以下の処理を再度実行する。
【0112】
モジュール毎変数使用状況350の最後のエントリまで処理が完了していれば(ステップS132においてYES)、プログラム開発装置200は、対象グローバル変数定義90Aの参照モジュール部97においてフラグがセットされていない変数を使用されていない変数として抽出し(ステップS136)、モジュール毎変数使用状況350および対象グローバル変数定義90Aに基づいて、整合性評価の結果を表示する(ステップS138)。このように、整合性評価としては、プログラム間I/F58に属する変数が関連付けられたプログラムのいずれからも参照されているか否かの判断を含む。
【0113】
そして、整合性評価の処理は終了する。なお、整合性評価の結果に基づいて、ユーザプログラムに対して、何らかの修正を行うための処理を実行してもよい。
【0114】
(d5:整合性評価の結果例)
プログラム開発装置200は、上述したような整合性評価の結果を提示する機能を有している。
【0115】
図13は、本実施の形態に従うプログラム開発装置200が提供する整合性評価の結果例を示す模式図である。図13を参照して、結果表示画面300は、モジュール毎変数使用状況350(図11)をベースにした、モジュール毎に変数の使用状況の整合性評価結果を示すものである。
【0116】
結果表示画面300は、適切に使用されている変数を示す使用変数一覧310と、使用されていない変数を示す未使用変数一覧320とを含む。
【0117】
使用変数一覧310は、対象のモジュールを示すモジュール名311と、対象の変数を示す変数名312と、対象の変数のデータ型を示すデータ型313と、対象の変数とIOユニットとの対応関係を示すIOユニット割り当て314と、対象の変数についてのコメント315(任意)と、対象の変数の用途316と、対象に対する整合性評価の結果を示す評価結果317とを含む。
【0118】
評価結果317においては、使用先として定義されたモジュール以外のモジュールで使用されている変数(モジュール毎変数使用状況350の定義外使用356にフラグがセットされている変数)については、「モジュールの定義にない使用です」といったエラーメッセージ318が対応付けて表示される。
【0119】
同様に、未使用変数一覧320は、対象のモジュールを示すモジュール名321と、対象の変数を示す変数名322と、対象の変数のデータ型を示すデータ型323と、対象の変数とIOユニットとの対応関係を示すIOユニット割り当て324と、対象の変数についてのコメント325(任意)と、対象の変数の用途326と、対象に対する整合性評価の結果を示す評価結果327とを含む。なお、対象の変数が未使用であるので、IOユニット割り当て324および用途326については有効な値が設定できない。
【0120】
評価結果327においては、定義されているモジュールで使用されていない変数(対象グローバル変数定義90Aの参照モジュール部97のフラグがセットされていない変数)については、「定義されているジュールで使用されていません」といったエラーメッセージ328が対応付けて表示される。
【0121】
図13に示すような整合性評価の結果例をユーザへ提示することで、予め定められた変数に関する規則に整合しない変数を一見して把握できる。
【0122】
図14は、本実施の形態に従うプログラム開発装置200が提供する整合性評価の別の結果例を示す模式図である。図14を参照して、結果表示画面330は、対象グローバル変数定義90A(図12)をベースにした、変数毎に使用状況の整合性評価結果を示すものである。
【0123】
結果表示画面330は、対象グローバル変数定義90A(図12)に対応する使用変数一覧340を含む。
【0124】
使用変数一覧340は、対象の変数を示す変数名341と、対象の変数のデータ型を示すデータ型342と、対象の変数とIOユニットとの対応関係を示すIOユニット割り当て343と、対象の変数についてのコメント344(任意)と、対象の変数のモジュールでの使用状態を示すモジュール毎使用状態345と、対象に対する整合性評価の結果を示す評価結果348とを含む。
【0125】
モジュール毎使用状態345は、各モジュールにおける使用の定義の有無を示す定義346と、各モジュールにおいて実際に使用されているか否かを示す使用347とを含む。定義346には、対応するモジュールにおいて対象の変数の使用が定義されている場合には、評価マークが表示される。また、使用347においては、対応するモジュールにおける対象の変数がどのような形態で使用されているかを示す情報が表示される。対応する変数が接点(入力変数)として使用されている場合には[R]と表示され、対応する変数がコイル(出力変数)として使用されている場合には[W]と表示される。すなわち、プログラム開発装置200は、各変数が入力および出力のいずれの種別(入力/出力)でユーザプログラムにおいて使用されているのかを提示する。
【0126】
モジュール毎使用状態345において、変数の使用に関する予め定められた規則に整合しないものは、他とは異なる表示態様で協調表示される。図14に示す例においては、変数「InA_Bit00」および「Child_ACK」について使用に関する規則に整合していないことを示されている。
【0127】
評価結果348においては、規則に整合していない詳細が表示される。図14に示す例では、変数「InA_Bit00」に対応付けて、「モジュールの定義にない使用です」「複数のモジュールでユニットのアクセスがあります」といったエラーメッセージが表示されている。また、変数「Child_ACK」に対応付けて、「定義されているモジュールで使用されていません」といったエラーメッセージが表示されている。
【0128】
このように、プログラム開発装置200は、整合性評価において整合性を満たしていないと評価された変数を他の変数とは異なる態様で表示する。
【0129】
図14に示すような整合性評価の結果例をユーザへ提示することで、予め定められた変数に関する規則に整合しない変数を一見して把握できる。
【0130】
<E.変形例>
上述の説明においては、各プログラムからIOユニットへのアクセスに参照されるグローバル変数を規定するIO−プログラムI/F56、および、プログラム間でアクセス可能なグローバル変数を規定するプログラム間I/F58に着目して説明した。プログラム間I/F58は、プログラム(モジュール)間で参照可能なグローバル変数であることを規定するのみであったが、プログラム(モジュール)間の呼び出し関係(親子関係)を考慮して、さらにプログラム(モジュール)間で参照可能なグローバル変数の属性(あるいは規則)を設定するようにしてもよい。
【0131】
図15は、本実施の形態の変形例に従うモジュール化プログラミングにおけるモジュール間インターフェイスの一例を示す図である。図15(A)を参照して、親モジュール70(Parent)から2つの子モジュール80Aおよび80B(Child)を呼び出す親子関係が設定されているとする。このような3つのモジュールについては、親モジュール70と子モジュール80Aとの関係、親モジュール70と子モジュール80Bとの関係、および、子モジュール80Aと子モジュール80Bとの関係の3種類のモジュール間インターフェイスが存在し得る。
【0132】
このようなモジュール間の親子関係の情報を利用して、親子間以外でモジュール間のインターフェイスとしての変数が存在しているか否かの整合性を評価するようにしてもよい。
【0133】
例えば、図15(B)に示すように、親モジュール70と子モジュール80Aとの間のモジュール間インターフェイスとしてIF_Parent_Child1を規定し、親モジュール70と子モジュール80Bとの間のモジュール間インターフェイスとしてIF_Parent_Child2を規定し、子モジュール80Aと子モジュール80Bとの間のモジュール間インターフェイスとしてIF_Child1_Child2を規定することができる。
【0134】
すなわち、モジュール間の親子関係を参照して、IF_Child1_Child2という子モジュール間のインターフェイスに属する変数の定義を可能にすることで、子モジュール同士の変数参照の整合性を評価できる。そして、このような変数の属性(あるいは規則)に整合しない変数をユーザに通知することができる。
【0135】
なお、モジュール間の親子関係以外の関係(すなわち、子モジュール同士のインターフェイス)を規定するか否かについは、ユーザのモジュール設計のルールに依存させてもよい。この場合には、モジュール間の親子関係以外の関係を規定するか否かについて、ユーザが任意に選択(すなわち、有効/無効の切り替え)を行えるようにしてもよい。
【0136】
<F.付記>
上述したような本実施の形態は、以下のような技術思想を含む。
[構成1]
制御装置(100)で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置(200)であって、
呼び出し関係にある第1および第2のプログラムを含むユーザプログラムにおいて使用される1または複数の変数の各々について、プログラムからの参照に関する属性の設定を受け付ける設定手段(90;S2)を備え、当該設定される属性は、前記第1および第2のプログラムのいずれか一方から参照される第1の属性(56)と、前記第1および第2のプログラムのいずれからも参照される第2の属性(58)とを含み、
前記ユーザプログラムを解析して、前記1または複数の変数の各々について、設定されているプログラムからの参照に関する属性に基づく整合性を評価する評価手段(S100〜S138)を備える、プログラム開発装置。
[構成2]
前記評価手段による整合性の評価は、前記第1の属性が設定されている変数が参照元とされているプログラムとは異なるプログラムから参照されているか否かを含む、構成1に記載のプログラム開発装置。
[構成3]
前記評価手段による整合性の評価は、前記第2の属性が設定されている変数が前記第1および第2のプログラムのいずれからも参照されているか否かを含む、構成1または2に記載のプログラム開発装置。
[構成4]
前記評価手段による整合性の評価結果を提示する結果提示手段(300;330)をさらに備える、構成1〜3のいずれか1項に記載のプログラム開発装置。
[構成5]
前記結果提示手段は、前記評価手段により整合性を満たしていないと評価された変数を他の変数とは異なる態様で表示する、構成4に記載のプログラム開発装置。
[構成6]
前記結果提示手段は、前記1または複数の変数の各々が入力および出力のいずれの種別で前記ユーザプログラムにおいて使用されているのかを提示する、構成4または5に記載のプログラム開発装置。
[構成7]
前記第1の属性が設定される変数は、特定のIOユニットと対応付けられる、構成1〜6のいずれか1項に記載のプログラム開発装置。
[構成8]
前記設定手段は、前記1または複数の変数の各々について、使用されるプログラムの設定を受け付ける、構成1〜5のいずれか1項に記載のプログラム開発装置。
[構成9]
前記第1および第2のプログラムの各々は、使用される変数および当該変数に対して設定される属性を含めて、モジュール化されている、構成1〜8のいずれか1項に記載のプログラム開発装置。
[構成10]
制御装置(100)で実行されるユーザプログラムの開発環境を提供するためのプログラム開発装置(200)を実現するためのプログラム(250)であって、前記プログラムはコンピュータに
呼び出し関係にある第1および第2のプログラムを含むユーザプログラムにおいて使用される1または複数の変数の各々について、プログラムからの参照に関する属性の設定を受け付けるステップ(S2)を実行させ、当該設定される属性は、前記第1および第2のプログラムのいずれか一方から参照される第1の属性(56)と、前記第1および第2のプログラムのいずれからも参照される第2の属性(58)とを含み、前記プログラムはコンピュータに
前記ユーザプログラムを解析して、前記1または複数の変数の各々について、設定されているプログラムからの参照に関する属性に基づく整合性を評価するステップ(S100〜S138)を実行させる、プログラム開発装置を実現するためのプログラム。
【0137】
<G.利点>
本実施の形態に従うモジュール化プログラミングによれば、ユーザプログラムで使用される変数に対して、IO−プログラムI/F56(いずれか一つのプログラムから参照される)に属する変数であるのか、プログラム間I/F58(関連する複数のプログラムのいずれからも参照される)に属する変数であるのかを明確に規定できるので、その規定された規則に適合した使用形態であるか否かを評価するとともに、適合しない部分を容易に修正できる。
【0138】
これによって、品質の高いモジュール化プログラミングを実現できるため、制御装置100で実行されるユーザプログラムの設計効率および再利用性を向上させることができる。
【0139】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0140】
1 制御システム、2 フィールドバス、4 ローカルネットワーク、10 フィールド装置群、12 リモートIO装置、14 リレー群、16,124 IOユニット、18 画像センサ、20 カメラ、22 サーボドライバ、24 サーボモータ、50 プロジェクト、52,126 ユーザプログラム、53 装置プログラム、54,346 定義、55 IOユニット設定、56 IO−プログラムI/F、57,59,90 グローバル変数定義、58 プログラム間I/F、60 装置モジュール、62,66 工程モジュール、63,64,67 工程内モジュール、70 親モジュール、71,81 命令、72,82 受け渡し、80,80A,80B 子モジュール、90A 対象グローバル変数定義、91,312,322,341,352 変数名、92,313,323,342 データ型、93 変数定義部、94 割り当て定義部、95 コメント部、96,97 参照モジュール部、100 制御装置、102,202 プロセッサ、104 チップセット、106,206 主記憶装置、108,208 二次記憶装置、110,214 ローカルネットワークコントローラ、112,212 USBコントローラ、114 メモリカードインターフェイス、116 メモリカード、120 フィールドバスコントローラ、122 内部バスコントローラ、200 プログラム開発装置、204 ドライブ、205 記憶媒体、216 入力部、218 表示部、220 バス、250 開発ツール、300,330 結果表示画面、310,340 使用変数一覧、311,321,351 モジュール名、314,324,343 割り当て、315,325,344 コメント、316,326,355 用途、317,327,348 評価結果、318,328 エラーメッセージ、320 未使用変数一覧、345 モジュール毎使用状態、347 使用、350 モジュール毎変数使用状況、353 使用箇所、354 種別、356 定義外使用、531,536 プログラム、532,534,537 機能プログラム、533,535,538 ファンクションブロック、539 ローカル変数定義。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15