(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6596073
(24)【登録日】2019年10月4日
(45)【発行日】2019年10月23日
(54)【発明の名称】非オブジェクト指向言語プログラム連携装置、方法およびプログラム
(51)【国際特許分類】
G06F 8/40 20180101AFI20191010BHJP
G06F 8/41 20180101ALI20191010BHJP
G06F 9/448 20180101ALI20191010BHJP
【FI】
G06F8/40
G06F8/41 100
G06F9/448 120
【請求項の数】6
【全頁数】13
(21)【出願番号】特願2017-510820(P2017-510820)
(86)(22)【出願日】2015年4月6日
(86)【国際出願番号】JP2015060789
(87)【国際公開番号】WO2016162935
(87)【国際公開日】20161013
【審査請求日】2018年3月2日
(73)【特許権者】
【識別番号】594081294
【氏名又は名称】株式会社アイ・エル・シー
(74)【代理人】
【識別番号】100104190
【弁理士】
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】許斐 浩祐
【審査官】
福西 章人
(56)【参考文献】
【文献】
特開2000−029705(JP,A)
【文献】
特開2000−132208(JP,A)
【文献】
特開平11−085518(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00−8/77
9/44−9/455
G05B 19/05
(57)【特許請求の範囲】
【請求項1】
オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、
非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、
前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行う処理エンジンを備え、
前記処理エンジンは、
前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、
前記非オブジェクト指向言語プログラムの中間コードを生成し、
前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、
前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、
前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、
前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、
ことを特徴とする非オブジェクト指向言語プログラム連携装置。
【請求項2】
オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、
非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、
前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行う処理エンジンを備え、
前記処理エンジンは、
前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、
前記オブジェクトの変数へのアクセス要求に基づく処理を前記オブジェクト指向言語プログラムが実行し、実行結果を前記非オブジェクト指向言語プログラムに返答し、
前記非オブジェクト指向言語プログラムの中間コードを生成し、
前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、
前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、
前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、
前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、
ことを特徴とする非オブジェクト指向言語プログラム連携装置。
【請求項3】
コンピュータが、
オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、
非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、
前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行い、
前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、
前記非オブジェクト指向言語プログラムの中間コードを生成し、
前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、
前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、
前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、
前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、
処理を実行することを特徴とする非オブジェクト指向言語プログラム連携方法。
【請求項4】
コンピュータが、
オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、
非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、
前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行い、
前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、
前記オブジェクトの変数へのアクセス要求に基づく処理を前記オブジェクト指向言語プログラムが実行し、実行結果を前記非オブジェクト指向言語プログラムに返答し、
前記非オブジェクト指向言語プログラムの中間コードを生成し、
前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、
前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、
前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、
前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、
処理を実行することを特徴とする非オブジェクト指向言語プログラム連携方法。
【請求項5】
コンピュータに、
オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、
非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、
前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行い、
前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、
前記非オブジェクト指向言語プログラムの中間コードを生成し、
前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、
前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、
前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、
前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、
処理を実行させることを特徴とする非オブジェクト指向言語プログラムの連携プログラム。
【請求項6】
コンピュータに、
オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、
非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、
前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行い、
前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、
前記オブジェクトの変数へのアクセス要求に基づく処理を前記オブジェクト指向言語プログラムが実行し、実行結果を前記非オブジェクト指向言語プログラムに返答し、
前記非オブジェクト指向言語プログラムの中間コードを生成し、
前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、
前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、
前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、
前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、
処理を実行させることを特徴とする非オブジェクト指向言語プログラムの連携プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、シーケンス図を作成する非オブジェクト指向言語プログラム連携装置、非オブジェクト指向言語プログラム連携方法および非オブジェクト指向言語プログラムの連携プログラムに関する。
【背景技術】
【0002】
従来、ラダー(LD:LADDER)プログラム、FBD(Function Block Diagram)プログラム等があり、それぞれ専用の非オブジェクト指向言語プログラムとして用いられている。これらは、プログラマブルコントローラ(PLC)等におけるプログラミングツールとして用いられており、例えば、ラダープログラムのデバッグを容易に行うために、ラダープログラムの編集を行うツールが開示されている(例えば、下記特許文献1参照。)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2012−243136号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、ラダープログラムは、ラダーの仕様が制御装置メーカ間で統一されておらず、プログラミングを行うためには特殊な知識や経験が必要になることから、その扱いが特殊であり容易ではない。また、FBDにより記述されたFBDプログラムは、ラダープログラムに比べて図形を用いて構造化およびモジュール化したプログラムであるが、ラダープログラム同様に汎用的ではない。
【0005】
このようなラダープログラムやFBDプログラムは、それぞれ専用の非オブジェクト指向言語プログラムであり、現在汎用化されているC++やJava(登録商標)などのオブジェクト指向言語プログラムと連携したプログラム開発を行うことはできない。
【0006】
特に、ラダーやFBDプログラムは、それぞれ専用の非オブジェクト指向言語プログラムであるため、言語使用に基づいて定義された変数や関数へのアクセスは可能であるが、オブジェクト指向言語のクラス定義に基づいて生成されたオブジェクトへのアクセスはできない。
【0007】
本発明は、上記課題に鑑み、非オブジェクト指向言語のプログラムをオブジェクト指向言語のプログラムと連携できることを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するため、この発明の非オブジェクト指向言語プログラム連携装置は、オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行う処理エンジン
を備え、前記処理エンジンは、前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、前記非オブジェクト指向言語プログラムの中間コードを生成し、前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、ことを特徴とする。
【0009】
また、
この発明の非オブジェクト指向言語プログラム連携装置は、オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行う処理エンジンを備え、前記処理エンジンは、前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、前記オブジェクトの変数へのアクセス要求に基づく処理を前記オブジェクト指向言語プログラムが実行し、実行結果を前記非オブジェクト指向言語プログラムに返答し、前記非オブジェクト指向言語プログラムの中間コードを生成し、前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、ことを特徴とする。
【0010】
また、
この発明の非オブジェクト指向言語プログラム連携方法は、コンピュータが、オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行い、前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、前記非オブジェクト指向言語プログラムの中間コードを生成し、前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、処理を実行することを特徴とする。
【0011】
また、
この発明の非オブジェクト指向言語プログラム連携方法は、コンピュータが、オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行い、前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、前記オブジェクトの変数へのアクセス要求に基づく処理を前記オブジェクト指向言語プログラムが実行し、実行結果を前記非オブジェクト指向言語プログラムに返答し、前記非オブジェクト指向言語プログラムの中間コードを生成し、前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、処理を実行することを特徴とする。
【0012】
また、
この発明の非オブジェクト指向言語プログラムの連携プログラムは、コンピュータに、オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行い、前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、前記非オブジェクト指向言語プログラムの中間コードを生成し、前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、処理を実行させることを特徴とする。
【0013】
また、
この発明の非オブジェクト指向言語プログラムの連携プログラムは、コンピュータに、オブジェクト指向言語プログラムの記述でオブジェクトのクラス定義を設定し、非オブジェクト指向言語プログラムの記述に前記オブジェクトのオブジェクト名と変数名を設定し、前記非オブジェクト指向言語プログラムから前記オブジェクト指向言語プログラムの前記オブジェクトの変数へのアクセスを行い、前記非オブジェクト指向言語プログラムには、予め取り決めたアクセス方式に基づき、前記オブジェクト指向言語プログラムに対して前記オブジェクトの変数へのアクセス要求を行い、前記オブジェクトの変数へのアクセス要求に基づく処理を前記オブジェクト指向言語プログラムが実行し、実行結果を前記非オブジェクト指向言語プログラムに返答し、前記非オブジェクト指向言語プログラムの中間コードを生成し、前記非オブジェクト指向言語プログラムがアクセス可能な第1エリアと、前記非オブジェクト指向言語プログラムがアクセス可能なオブジェクトの変数および関数が格納された第2エリアと、前記第2エリアの変数へのアクセスや関数の呼び出しを行うサービス関数が格納された第3エリアと、をメモリ上に確保し、前記中間コードの解釈実行時のオブジェクトの変数が前記第1エリアにあれば、前記中間コードの変数の値を該当する前記第1エリアに書き込み、前記中間コードの解釈実行時にオブジェクトが前記第1エリアにない場合には、前記第3エリアのサービス関数をコールする、処理を実行させることを特徴とする。
【0014】
上記構成によれば、非オブジェクト指向言語プログラムであっても、オブジェクト指向言語のクラス定義に基づいて生成されたオブジェクトへのアクセスを行うことができるようになる。
【発明の効果】
【0015】
本発明によれば、非オブジェクト指向言語のプログラムをオブジェクト指向言語のプログラムと連携できるという効果を奏する。
【図面の簡単な説明】
【0016】
【
図1】
図1は、実施の形態にかかる非オブジェクト指向言語プログラム連携装置が実施するオブジェクト指向言語プログラムのオブジェクトへのアクセス状態を示す図である。
【
図2A】
図2Aは、実施の形態にかかる非オブジェクト指向言語プログラムが実施する連携処理の内容を示すフローチャートである。
【
図2B】
図2Bは、実施の形態にかかる非オブジェクト指向言語プログラムが実施する連携処理を説明する図である。
【
図3】
図3は、非オブジェクト指向言語プログラム連携装置のハードウェア構成例を示すブロック図である。
【発明を実施するための形態】
【0017】
(実施の形態)
以下に添付図面を参照して、この発明にかかる非オブジェクト指向言語プログラム連携装置、非オブジェクト指向言語プログラム連携方法および非オブジェクト指向言語プログラムの連携プログラムの好適な実施の形態を詳細に説明する。
【0018】
(状態遷移付きシーケンス図の例)
図1は、実施の形態にかかる非オブジェクト指向言語プログラム連携装置が実施するオブジェクト指向言語プログラムのオブジェクトへのアクセス状態を示す図である。
【0019】
図1の左側には、非オブジェクト指向言語プログラムとしてラダープログラム101やFBDプログラム102の記述例(ラダー図、FBD図)を示し、
図1の右側には、オブジェクト指向言語プログラム103としてC++やJavaの記述例を示している。
【0020】
図1に示すように、ラダープログラム101では、回路の接続構成にしたがって回路別の接続関係を示すラダー図を用い、例えば、接点111の操作により、リレー112,113が作動する。
【0021】
実施の形態では、非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)について、オブジェクト指向型の開発環境を提供する。このため、
図1のラダープログラム101(ラダー図)について、オブジェクト指向言語プログラム103の記述例に沿って各部を表現すると、接点111はオブジェクト(MyObj.memberA)、リレー112,113は、それぞれオブジェクトに対する所定の関数(MOV 0 MyObj.memberB)、(CALL MyObj.FuncA(100))となる。
【0022】
このように、非オブジェクト指向言語プログラム(ラダープログラム101)は、
1.オブジェクトの変数を参照(指定)する場合は、「オブジェクト名.変数名」
2.オブジェクトの操作(Method)を指定する場合は、「オブジェクト名.操作名(引数)」
と指定する。すなわち、非オブジェクト指向言語プログラム側が上記1.で記述できるようにオブジェクト指向言語プログラム(例えばC++言語)側では、オブジェクトのクラス(Class)定義131を設定しておく。
【0023】
FBDプログラム102についてもラダープログラム101と同様の機能を表現する。このFBDプログラム102は、ファンクションブロック(関数)121に対する入力(実アドレス,変数)122の処理結果を出力(実アドレス,変数)123の形で表現する。
【0024】
オブジェクト指向言語プログラム103側の記述例は、非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)の記述例(プログラム内容)に対応したものである。このオブジェクト指向言語プログラム103の記述例を順に説明すると、最初にクラス(MyClass)の定義(オブジェクトの設計図)131を行う。このクラス定義131では、メンバ(memberA,B)のデータ定義、および関数(FuncA,B)を定義する。
【0025】
次に、オブジェクトの生成の記述(MyObj)132を行う。次に、プログラム記述133を行う。このプログラム記述133の例では、オブジェクトの中のメンバ変数の参照、オブジェクトの中のメンバ変数への代入、オブジェクトの中のメンバ関数(Method)の呼び出しが含まれている。このプログラム記述(サービス関数)133は、自分のプログラム(オブジェクト指向言語プログラム103)内のオブジェクト(MyObj)132に直接アクセスする。
【0026】
図1に示すように、オブジェクト指向言語プログラム103内で定義されているオブジェクト(MyObj)を非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)側からアクセスする場合を例に説明すると、非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)からオブジェクト指向言語プログラム103にオブジェクトへのアクセス要求141を出す。
【0027】
この際、これらオブジェクト指向言語プログラム103と、非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)間で予め取り決めたアクセス方式(通信方式や関数CALL等)を用いる。
【0028】
そして、オブジェクト指向言語プログラム103は、アクセス要求141に基づく処理実行の結果142を非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)に返す。
【0029】
上記のように、非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)側では、オブジェクト指向言語プログラム103で生成されたオブジェクトへのアクセスを可能とする記述を行う。
【0030】
図2Aは、実施の形態にかかる非オブジェクト指向言語プログラムが実施する連携処理の内容を示すフローチャートである。
図2Bは、実施の形態にかかる非オブジェクト指向言語プログラムが実施する連携処理を説明する図である。
【0031】
ここでは、非オブジェクト指向言語プログラムとして、ラダープログラム101に基づく記述を処理エンジン(ソフトウェア)200が実行処理し、オブジェクト指向言語プログラム103で定義されている関数にアクセスする処理について説明する。
【0032】
図2Bに示すように、処理エンジン200は、ラダープログラム101の中間コード210を生成しメモリに格納しておく。接点111としてオブジェクト(MyObj.memberA)、リレー112としてオブジェクトに対する関数(MOV 0 D0)、リレー113としてオブジェクトに対する関数(MOV 0 MyObj.memberB)とする。
【0033】
また、処理エンジン200は、非オブジェクト指向言語プログラム(ラダープログラム101)がアクセス可能なエリア(エリア1)211と、オブジェクト指向言語プログラム103がアクセス可能なオブジェクト(変数や関数)が格納されたエリア(エリア2)212と、エリア2の変数へのアクセスや関数の呼び出しを行うサービス関数のエリア(エリア3)213と、を所定のメモリ上に領域確保しておく。
【0034】
これらのメモリエリア(エリア1〜3)は、非オブジェクト指向言語プログラム(ラダープログラム101)の処理エンジン200が予め領域確保しておく。このほか、非オブジェクト指向言語プログラム(ラダープログラム101)の処理エンジン200と、オブジェクト指向言語プログラム103側の処理エンジンとが別であれば、いずれかの処理エンジンが予め領域確保すればよい。
【0035】
図2Aに示すように、処理エンジン200は、一つ目の中間コード(MOV 0 D0)112のプログラムを解釈する(ステップS201)。この際、中間コードには変数(エリア1)211や関数(エリア2,3)212,213が格納されているようにしておく。
【0036】
次に、処理エンジン200は、エリア1(211)に割り当てられているので、エリア1のD0のメモリに値「0」を書き込む(ステップS202)。
【0037】
次に、処理エンジン200は、次の中間コード(MOV 0 MyObj.memberB)113のプログラムを解釈する(ステップS203)。
【0038】
そして、処理エンジン200は、解釈した中間コード(MyObj.memberB)はエリア1(211)には格納されていないので、エリア3(213)のサービス関数をCALLして、中間コード(MyObj.memberB)に値「0」をセットする(ステップS204)。
【0039】
なお、処理エンジン200は、オブジェクト指向言語プログラム103上で、サービス関数133のCALL(アクセス要求)141に基づく処理を実行し、処理実行の結果142を非オブジェクト指向言語プログラム(ラダープログラム101)側に返す。
【0040】
以上のように、非オブジェクト指向言語プログラム(ラダープログラム101)の記述に基づく処理時に、非オブジェクト指向言語プログラム(ラダープログラム101)がアクセス可能なメモリ(エリア1)と、オブジェクト指向言語プログラム103がアクセス可能なメモリ(エリア2,3)と、に分ける。そして、中間コードの解釈時に、非オブジェクト指向言語プログラム(ラダープログラム101)がアクセス可能なメモリ(エリア1)に割り当てられていればその値をセットし、非オブジェクト指向言語プログラム(ラダープログラム101)がアクセス可能なメモリ(エリア1)に割り当てられていなければエリア3のサービス関数をCALLする。
【0041】
これにより、非オブジェクト指向言語プログラムとして、ラダープログラム101がオブジェクト指向言語プログラム103で定義されている関数にアクセスすることができるようになる。すなわち、非オブジェクト指向言語プログラム(ラダープログラム101)の言語仕様にないオブジェクトへのアクセスが可能となる。上記例では、ラダープログラム101について説明したが、FBDプログラム102についても同様にオブジェクト指向言語プログラム103で定義されている関数へのアクセスが可能となる。
【0042】
また、実施の形態によれば、派性、継承といったオブジェクト指向処理についても、オブジェクト指向言語プログラム103内で実施することができる。そして、非オブジェクト指向言語(FBD)プログラム102(処理エンジン200)から、オブジェクト指向言語プログラム103に対して任意の派性、継承した処理(クラス、関数)を呼ぶことができる。例えば、上記のMyClassを継承した新たなYourClassを、上記memberA,Bを継承したmemberCとして簡単に追加することができる。
【0043】
(非オブジェクト指向言語プログラム連携装置のハードウェア構成)
図3は、非オブジェクト指向言語プログラム連携装置のハードウェア構成例を示すブロック図である。
図3において、非オブジェクト指向言語プログラム連携装置300は、制御部(CPU)301と、Read−Only Memory(ROM)302と、Random Access Memory(RAM)303と、半導体メモリやディスクドライブ等の記憶部304と、通信インターフェース(I/F)305と、を含む。これらCPU301〜通信インターフェース305、キーボード306、ディスプレイ307は、バス308によってそれぞれ接続されている。
【0044】
CPU301は、非オブジェクト指向言語プログラム連携装置300の全体の制御を司る演算処理装置である。ROM302は、非オブジェクト指向言語プログラム連携装置300のプログラム等を記憶する不揮発性メモリである。RAM303は、CPU301によるプログラムの演算処理実行時のワークエリアとして使用される揮発性メモリである。記憶部304には、処理実行の結果等が格納保持される。
【0045】
通信インターフェース305は、ネットワーク310とのインターフェースを司り、データの入出力を制御する。具体的に、通信インターフェース305は、通信回線を通じてネットワーク310となるLocal Area Network(LAN)、Wide
Area Network(WAN)、インターネットなどに接続され、ネットワーク310を介して他の装置に接続される。このネットワークには、上述した非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)の処理エンジン200と、オブジェクト指向言語プログラムの処理エンジンとの間の通信路を含む。
【0046】
キーボード306は、非オブジェクト指向言語プログラム連携装置300の処理操作等に用いる入力装置である。ディスプレイ307は、CPU301のプログラム実行により、記憶部304から読み出した処理中あるいは処理実行結果を表示する装置である。ディスプレイ307には、例えば、Thin Film Transistor(TFT)液晶表示部、プラズマ表示部、有機EL表示部などを採用することができる。
【0047】
非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)の処理エンジン200は、
図3に示したCPU301がROM302のプログラム実行により、非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)の処理を実行するとともに、上述したオブジェクト指向言語プログラム103で定義されている関数にアクセスする処理を行う。また、このCPU301は、オブジェクト指向言語プログラム103についても実行する構成としてもよい。また、上述したメモリ1〜3は、RAM303の各領域を用いることができる。
【0048】
また、上記の説明では、非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)からオブジェクト指向言語プログラム103で定義されている関数にアクセスする処理を行うことについて説明した。これに限らず、オブジェクト指向言語プログラム103側から、非オブジェクト指向言語プログラム(ラダープログラム101やFBDプログラム102)に対しデータのやり取り(変換)を行うこともできる。
【0049】
以上説明したように、ラダープログラムやFBDプログラムなどの非オブジェクト指向言語プログラムであっても、オブジェクト指向言語のクラス定義に基づいて生成されたオブジェクトへのアクセスが行えるようになる。これにより、ラダープログラムやFBDプログラムを用いた各独自な仕様のプログラム言語を用いた開発を行う際に、汎用化されているC++やJavaなどのオブジェクト指向言語プログラムと連携したプログラム開発を行うことができるようになる。例えば、ラダープログラムやFBDプログラムの操作に慣れていない者でもオブジェクト指向の概念を用いてプログラム開発が行えるようになる。
【0050】
上記実施の形態では、非オブジェクト指向言語プログラムとして、ラダー(LD)、ファンクションブロック(FBD)の例について説明したが、他のストラクチャードテキスト(ST)、インストラクションリスト(IL)、シーケンシャルファンクションチャート(SFC)等の非オブジェクト指向言語プログラムについても同様に適用することができる。
【産業上の利用可能性】
【0051】
以上のように、本発明は、制御システムを非オブジェクト指向言語プログラムを用いたシステム開発に用いて好適であり、PLCなどの制御システムのプログラム開発に適している。
【符号の説明】
【0052】
101 ラダープログラム(ラダー図)
102 FBDプログラム(FBD図)
103 オブジェクト指向言語プログラム
111 接点(オブジェクト)
112,113 リレー(オブジェクトに対する関数)
200 処理エンジン
300 非オブジェクト指向言語プログラム連携装置
301 制御部(CPU)
302 ROM
303 RAM
304 記憶部
305 通信インターフェース
306 キーボード
307 ディスプレイ
308 バス
310 ネットワーク