(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024165699
(43)【公開日】2024-11-28
(54)【発明の名称】エンジニアリングツール
(51)【国際特許分類】
G05B 19/042 20060101AFI20241121BHJP
G06F 8/36 20180101ALN20241121BHJP
【FI】
G05B19/042
G06F8/36
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2023082104
(22)【出願日】2023-05-18
(71)【出願人】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(71)【出願人】
【識別番号】598076591
【氏名又は名称】東芝インフラシステムズ株式会社
(74)【代理人】
【識別番号】100120031
【弁理士】
【氏名又は名称】宮嶋 学
(74)【代理人】
【識別番号】100107582
【弁理士】
【氏名又は名称】関根 毅
(74)【代理人】
【識別番号】100118843
【弁理士】
【氏名又は名称】赤岡 明
(74)【代理人】
【識別番号】100118876
【弁理士】
【氏名又は名称】鈴木 順生
(72)【発明者】
【氏名】寶蔵寺 春美
【テーマコード(参考)】
5B376
5H220
【Fターム(参考)】
5B376AD24
5H220AA01
5H220BB12
5H220CC06
5H220CX02
5H220DD04
5H220DD06
5H220JJ12
5H220JJ16
5H220JJ24
5H220JJ42
5H220JJ48
5H220JJ53
(57)【要約】
【課題】制御プログラムのインポートを効率化する。
【解決手段】エンジニアリングツールは、それぞれが少なくとも1つ以上の変数又は配列を有する複数の構造体をインポートするインポート部を備え、前記インポート部は、前記複数の構造体のうち他の構造体を参照する構造体を、前記他の構造体よりも後にインポートするようにインポート順を決定し、決定した前記インポート順で前記複数の構造体をインポートする。
【選択図】
図15
【特許請求の範囲】
【請求項1】
それぞれが少なくとも1つ以上の変数又は配列を有する複数の構造体をインポートするインポート部を備え、
前記インポート部は、前記複数の構造体のうち他の構造体を参照する構造体を、前記他の構造体よりも後にインポートするようにインポート順を決定し、決定した前記インポート順で前記複数の構造体をインポートする、
エンジニアリングツール。
【請求項2】
前記インポート部は、それぞれがファンクション又はファンクションブロックで構成される複数の関数をインポートし、
前記インポート部は、前記複数の関数のうち他の関数を参照する関数を、前記他の関数よりも後にインポートするように前記複数の関数のインポート順を決定し、決定した前記インポート順で前記複数の関数をインポートする
請求項1に記載のエンジニアリングツール。
【請求項3】
前記インポート部は、前記関数を少なくとも1つ以上参照するプログラムをインポートし、
前記インポート部は、前記プログラムを、前記プログラムが参照する関数よりも後にインポートするように前記プログラムと前記関数とのインポート順を決定し、決定した前記インポート順で前記プログラムと前記関数とをインポートする
請求項2に記載のエンジニアリングツール。
【請求項4】
前記インポート部は、それぞれ前記関数及び前記プログラムを定義した複数のインポート対象ファイルのうち前記プログラムを定義したインポート対象ファイルから前記プログラムをインポートし、
前記プログラムから参照される関数を定義したファイルが前記複数のインポート対象ファイルにないときは、インポート先のライブラリに前記関数がインポート済みかを判断し、インポート済みの場合は前記プログラム及び前記関数のインポート順を決定し、インポート済みでない場合は、前記プログラムのインポートは不可であることを決定する
請求項3に記載のエンジニアリングツール。
【請求項5】
前記インポート部は、それぞれ前記複数の関数を定義した複数のインポート対象ファイルから前記複数の関数をインポートし、
前記複数の関数のいずれかから参照される関数を定義したインポート対象ファイルが、前記複数のインポート対象ファイルにないときは、インポート先のライブラリに前記参照される関数がインポート済みかを判断し、前記参照される関数がインポート済みの場合は前記複数の関数のインポート順を決定し、インポート済みでない場合は、前記参照される関数を参照する前記関数のインポートは不可であることを決定する
請求項2に記載のエンジニアリングツール。
【請求項6】
前記インポート部は、それぞれ前記複数の構造体を定義した複数のインポート対象ファイルから前記複数の構造体をインポートし、
前記複数の構造体のいずれかから参照される構造体を定義したインポート対象ファイルが、前記複数のインポート対象ファイルにないときは、インポート先のライブラリに前記参照される構造体がインポート済みかを判断し、インポート済みの場合は前記複数の構造体のインポート順を決定し、インポート済みでない場合は前記参照される構造体を参照する構造体のインポートは不可であることを決定する
請求項1に記載のエンジニアリングツール。
【請求項7】
前記インポート部によりインポートされる前記プログラム、前記複数の関数、前記複数の構造体の集合体は制御装置を制御する制御プログラムを構成する
請求項3に記載のエンジニアリングツール。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、エンジニアリングツールに関する。
【背景技術】
【0002】
一般にプラント制御システムにおいて、システムプログラマは制御装置の制御プログラムを作成し、試験及び調整の後に、プラント運転者へ提供する。類似のプラント制御システムが新規に構築される場合、システムプログラマは制御プログラムの構成要素の一部又は全部を流用することがある。具体的には、システムプログラマは元となるプラント制御システムから制御プログラムの一部又は全部の構成要素をエクスポートするとともに、新規に作成される類似のプラント制御システムに、エクスポートした上記一部又は全部の構成要素を流用して作成した制御プログラムをインポートする。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】国際公開第2018/011959号
【特許文献2】特表2005-537538号公報
【特許文献3】国際公開第2015/190007号
【発明の概要】
【発明が解決しようとする課題】
【0004】
制御プログラムの構成要素には、プログラム、ファンクションブロック、ファンクション、ユーザデータ型がある。これらは、参照関係を有する。例えば、ファンクションブロックが更にファンクションブロックを参照していることがある。制御プログラムのインポートでは、システムプログラマは、厳密にこの参照関係に基づくインポートの順番を守る必要がある。
【0005】
また、制御プログラムの構成要素のエクスポートでは、システムプログラマは必要なプログラム、ファンクションブロック、ファンクション、ユーザデータ型を選択する必要がある。このため、制御プログラムの構成要素のエクスポートの際には、システムプログラマは制御プログラムの構成として必要なプログラム、ファンクションブロック、ファンクション、ユーザデータ型を予め調査しておく必要がある。また、ファンクションブロックが更にファンクションブロックを参照している場合は、調査に時間がかかる。
【0006】
大量な制御プログラムを対象にエクスポートを行う場合、又は大量の制御プログラムのインポートを行う場合、インポートの順番、及びエクスポートが必要な構成要素の調査に時間がかかることにより、作業効率が悪化してしまうという課題がある。
【0007】
そこで、本実施形態では、制御プログラムのインポートを効率化できるエンジニアリングツールを提供するものである。
【課題を解決するための手段】
【0008】
本実施形態に係るエンジニアリングツールは、それぞれが少なくとも1つ以上の変数又は配列を有する複数の構造体をインポートするインポート部を備え、
前記インポート部は、前記複数の構造体のうち他の構造体を参照する構造体を、前記他の構造体よりも後にインポートするようにインポート順を決定し、決定した前記インポート順で前記複数の構造体をインポートする。
【図面の簡単な説明】
【0009】
【
図1】本開示の実施形態に係るエンジニアリングツール及びその周辺部の一例を示すシステム構成図である。
【
図2】データベースの構成を模式的に示す図である。
【
図3】操作画面及びデータベースの詳細な構成を示すブロック図である。
【
図6】ユーザデータ型メンバデータベースの一構成例である。
【
図8】プログラムコードデータベースの一構成例である。
【
図10】ファンクションブロックを示すラダー図である。
【
図12】インポート部を起動するイメージを示す図である。
【
図13】インポート部の画面の一例を示す図である。
【
図14A】インポート対象ファイル群の初期状態のインポート順を示す図である。
【
図14B】各インポート対象ファイルの参照関係に応じたインポート順を示す図である。
【
図15】本開示の実施形態におけるインポート順算出のフローチャートである。
【
図16】インポート部が出力するインポート不可の旨を記載したメッセージウィンドウの一例である。
【
図17】本開示の実施形態における全体的なインポートのフローチャートである。
【
図18】構造体のインポート順算出のフローチャートである。
【
図19】ファンクション及びファンクションブロックのインポート順算出のフローチャートである。
【
図20】プログラムのインポート順の算出のフローチャートである。
【発明を実施するための形態】
【0010】
以下、図面を参照しながら、本発明の実施形態について説明する。
【0011】
(本開示の実施形態)
図1は、本開示の実施形態に係るエンジニアリングツール1及びその周辺部の一例を示すシステム構成図である。
図1に示すエンジニアリングツール1は、例えばコンピュータ2に配置される。
【0012】
エンジニアリングツール1は、例えば制御プログラムの開発に用いられる。エンジニアリングツール1で開発された制御プログラムは、プラント制御装置等に適用される。エンジニアリングツール1は、操作画面3とデータベース(記憶部)4とを有する。操作画面3は、システムプログラマ(ユーザとも呼ばれる)にエンジニアリングツール1の操作機能を提供する。本明細書は、操作画面3がGUI(Graphical User Interface)によって構成される例を説明するが、これに限定されない。操作画面3は、CUI(Character User Interface)などで構成されてもよい。データベース4は、操作画面3を介して作成された制御プログラムを格納する。
【0013】
また、エンジニアリングツール1は、制御プログラムのインポート及びエクスポート機能を有する。エンジニアリングツール1は、コンピュータ2内のファイル5として、制御プログラムをエクスポートすることができる。制御プログラムのエクスポートとは制御プログラムを構成する構成要素の一部又は全部をエクスポートすることである。また、エンジニアリングツール1は、コンピュータ2内の任意のファイル5から制御プログラムを構成する構成要素の一部又は全部をインポートすることができる。
【0014】
コンピュータ2は、周辺機器として、例えばキーボード21、マウス22、表示装置23を有する。システムプログラマは、キーボード21及びマウス22によって操作画面3を操作できる。また、システムプログラマは、操作画面3を表示装置23によって確認することができる。
【0015】
図2は、データベース4の構成を模式的に示す図である。
図2に示すシステム6は、ライブラリ61、ネットワーク62、ステーション63を有する。ライブラリ61は、1つ又は複数の制御プログラムを格納する。ライブラリ61は、ユーザごとに作成された複数のユーザライブラリW1~WXと、ユーザ間で共有に使用可能な複数の標準ライブラリB1~BXを有する。
【0016】
複数のユーザライブラリ(及び、複数の標準ライブラリ)は、それぞれユーザデータ型、ファンクション、ファンクションブロック、プログラムで構成される制御プログラムを有する。例えば、ユーザライブラリW1はユーザデータ型D1、ファンクションD2、ファンクションブロックD3、プログラムD4から構成される制御プログラムG1を有する。なお、制御プログラムはユーザデータ型、ファンクション、ファンクションブロック又はプログラムを複数有することがある。また、複数のユーザライブラリは、それぞれユーザ情報を有する。
【0017】
ユーザデータ型は、1つ以上の変数(変数メンバ)を有するものであり、構造体とも呼ばれる。ユーザデータ型は、プログラム、ファンクションブロック及びファンクションで用いられる。また、ユーザデータ型は、他のユーザデータ型を変数メンバとして含むこともある。
【0018】
ファンクションは、履歴性のない関数である。ファンクションは、プログラム及びファンクションブロックから呼び出される。また、ファンクションは他のファンクションを呼び出すことができる。
【0019】
ファンクションブロックは、履歴性のある関数である。ファンクションブロックは、プログラムから呼び出される。また、ファンクションブロックは他のファンクションブロックを呼び出すことができる。
【0020】
プログラムは、制御装置等に所定の動作をさせるための動作手順を指定するものである。
【0021】
上記のように、プログラム、ファンクションブロック、ファンクションは、他のファンクションブロック又はファンクションを呼び出すことがある。また、プログラム、ファンクションブロック、ファンクション、ユーザデータ型は、他のユーザデータ型を内部に含むことがある。ある構成要素が他の構成要素を呼び出す、又は内部に含む関係は、参照関係とも呼ばれる。例えばプログラムがファンクションブロックを呼び出すことを、プログラムはファンクションブロックを参照しているともいう。
【0022】
ネットワーク62は、制御プログラムが適用される複数の制御装置の間の接続情報、又は制御装置と他の機器との間の接続情報を有する。
【0023】
ステーション63は、制御プログラムが適用される制御装置のハードウェア情報を有する。ハードウェア情報には、例えば制御装置の機種名、あるいは制御プログラムの実行周期等がある。
【0024】
図3は、操作画面3及びデータベース4の詳細な構成を示すブロック図である。操作画面3は、エクスポート部31、インポート部32を有する。
【0025】
エクスポート部31は、データベース4から1つ又は複数の制御プログラムの構成要素の一部又は全部を取得するとともに、取得した構成要素をそれぞれ含む1つ又は複数のエクスポート対象ファイル51(ファイル5)を出力する。
【0026】
インポート部32は、インポート対象となる1つ又は複数の制御プログラムとして1つ又は複数のインポート対象ファイル52(ファイル5)を読み込む。インポート対象ファイル52は、それぞれ制御プログラムの構成要素を1つ又は複数含む。インポート部32は、読み込んだインポート対象ファイル52(ファイル5)に含まれる構成要素をデータベース4に書き込む(インポートする)。これにより、インポート部32は、1つ又は複数の制御プログラムをデータベース4に書き込む。
【0027】
なお、インポート部32がインポート対象とするインポート対象ファイル52の一部又は全部は、エクスポート部31が出力したエクスポート対象ファイル51であってもよい。この場合、ユーザは、エクスポート部31が出力したエクスポート対象ファイル51を、インポート対象ファイル52の一部又は全部として選択できる。
【0028】
操作画面3は、
図2のシステム6等を管理するプロダクトマネージャ33を有していてもよい。プロダクトマネージャ33はデータベース4からシステム6の情報を取得するとともに、システム6の変更内容をデータベース4に書き込む。また、操作画面3は制御プログラムを編集するプログラムエディタ34を有していてもよい。プログラムエディタ34はデータベース4から制御プログラムを取得するとともに、制御プログラムの変更内容をデータベース4に書き込む。
【0029】
データベース4は、システム6内のライブラリ61の情報を、ライブラリデータ、データ型データ、データ型メンバデータ、変数データ、プログラムコードデータに分割して管理する。各データの詳細、及び
図2の制御プログラム等との対応関係は後述する。ライブラリデータ、データ型データ、データ型メンバデータ、変数データ、プログラムコードデータは、それぞれライブラリデータベース41、データ型データベース42、ユーザデータ型メンバデータベース43、変数データベース44、プログラムコードデータベース45に格納される。
【0030】
なおデータベース4は、上記のほか、ネットワーク62の情報とステーション63の情報をそれぞれ格納するデータベースを有していてもよい。
【0031】
図4は、ライブラリデータベース41の一構成例である。ライブラリデータベース41はライブラリデータの集合体を格納する。ライブラリデータベース41内のライブラリデータは、それぞれリレーション、ライブラリ名、ライブラリ種別、セキュリティ管理者の情報、メンバの情報を有する。
【0032】
リレーションは、各ライブラリデータを他のデータベースと紐づけるために、各ライブラリデータに一意に割り振られる番号である。
【0033】
ライブラリ名は、各ライブラリを示す名称である。ライブラリ名は、例えばユーザによって設定される。ライブラリ種別は、ライブラリの種類を示す。ライブラリ種別には、例えばユーザライブラリと、標準ライブラリとがある。
【0034】
ライブラリデータは、セキュリティ管理者の情報として、セキュリティ管理者のユーザ名及びパスワードを有する。セキュリティ管理者は、ライブラリのセキュリティ管理を担当するユーザである。セキュリティ管理者は、他のユーザをメンバとして指定し、ライブラリへのアクセスを許可することができる。また、セキュリティ管理者は各メンバにアクセスレベルを設定することができる。アクセスレベルには、例えばアクセス不可のレベル、ライブラリの利用のみ可能なレベル、ライブラリの閲覧及び利用ができるレベル、ライブラリの編集、閲覧及び利用が可能なレベル等がある。また、ライブラリデータは、メンバの情報として、メンバのユーザ名、パスワード、アクセスレベルを有する。なお、
図4はセキュリティ管理者の情報及びメンバの情報の内容を省略している。
【0035】
図4のライブラリデータベース41には、ライブラリデータとして、
図2のユーザライブラリ(ワーク1)W1及び標準ライブラリ(標準1)B1が登録されている。また、
図4は、これらの他、ユーザライブラリ(ワーク2)W2、標準ライブラリ(標準2)B2が登録されている例を示している。ユーザライブラリW1、W2、標準ライブラリB1、B2のリレーションには、それぞれ1、2、3、4が割り振られている。
【0036】
図5は、データ型データベース42の一構成例である。データ型データベース42はデータ型に関するデータ(データ型データ)の集合体を格納する。データ型データベース42内のデータ型データは、それぞれリレーション、データ型名、データ型、コメント、ライブラリとのリレーションを有する。
【0037】
データ型名は、各データ型を示す名称である。データ型名は、例えばユーザによって設定される。データ型は、データ型の種類を示す。データ型には、ユーザデータ型を示すSTRUCT、ファンクションブロックを示すFUNCTION_BLOCK、ファンクションを示すFUNCTION、プログラムを示すPROGRAM等がある。コメントは、各データ型の説明文であり、例えばユーザによって設定される。ライブラリとのリレーションは、
図4のライブラリデータと
図5のデータ型データを紐づけるものである。
【0038】
図5には、リレーションとして1、2、3、4が割り振られた、ユーザデータ型(STR_HZZ)D1、ファンクション(USER_FUN)D2、ファンクションブロック(USER_FBK)D3、プログラム(MS000)D4が登録されている。ユーザデータ型D1、ファンクションD2、ファンクションブロックD3、プログラムD4のライブラリとのリレーションには、いずれも1が指定されている。すなわち、ユーザデータ型D1、ファンクションD2、ファンクションブロックD3、プログラムD4は
図4のユーザライブラリW1に紐づけられている。
【0039】
図6は、ユーザデータ型メンバデータベース43の一構成例である。ユーザデータ型メンバデータベース43はユーザデータ型メンバデータの集合体を格納する。ユーザデータ型メンバデータベース43内のユーザデータ型メンバデータは、それぞれリレーション、メンバ名、データ型、コメント、ユーザデータ型とのリレーションを有する。メンバ名は、各メンバを示す名称であり、例えばユーザによって設定される。
【0040】
図6には、リレーションとして1、2が割り振られた、メンバ(INT_ARY)M1、メンバ(BOOL_ARY)M2が登録されている。メンバM1、メンバM2のユーザデータ型とのリレーションには、いずれも1が指定されているため、メンバM1、メンバM2は
図5のユーザデータ型D1に紐づけられている。すなわち、ユーザデータ型D1はメンバM1、M2を参照している。なお、上述の通りユーザデータ型は、メンバとして他のユーザデータ型を含むことがある。
【0041】
図7は、変数データベース44の一構成例である。変数データベース44は変数データの集合体を格納する。変数データベース44内の変数データは、それぞれリレーション、変数名、データ型、データ型データベース42におけるデータ型とのリレーションを有する。変数名は、各変数を示す名称であり、例えばユーザによって設定される。
図7のデータ型には、エンジニアリングツール1が標準で有するデータ型(例えば、BOOL)か、データ型データベース42に格納されたデータ型データが指定される。
【0042】
図7には、リレーションとして1、2、3、4、5、6が割り振られた、変数(INPUT)V1、変数(USER_FUN)V2、変数(INPUT)V3、変数(OUTPUT)V4、変数(ABC)V5、変数(USER_FBK_1)V6が登録されている。データ型データベース42におけるデータ型とのリレーションは、変数V1及び変数V2には2が指定され、変数V3及び変数V4には3が指定され、変数V5及び変数V6には4が指定されている。すなわち、変数V1及び変数V22はファンクションD2に、変数V3及び変数V4はファンクションブロックD3に、変数V5及び変数V6はプログラムD4に紐づけられている。
【0043】
また、変数V5のデータ型にはSTR_HZZが指定されていることから、変数V5はユーザデータ型D1を参照している。同様に、変数V6のデータ型はUSER_FBKが指定され、ファンクションブロックD3を参照している。すなわち、変数V5及び変数V6に紐付けられるプログラムD4は、ユーザデータ型D1及びファンクションブロックD3を参照している。
【0044】
図8は、プログラムコードデータベース45の一構成例である。プログラムコードデータベース45はプログラムコードの集合体を格納する。これらプログラムコードの集合体が制御プログラムに対応する。各プログラムコードデータは、各変数、ファンクション及びファンクションブロックが、プログラム、ファンクションブロック、ファンクション内のどの場所に配置されるかを格納している。プログラムコードデータは、それぞれ行、列、ファンクション/ファンクションブロック名、変数名、データ型とのリレーションを有する。
【0045】
行及び列は、各変数及びファンクションの配置場所を示す。また、ファンクション/ファンクションブロック名により、データ型データベース42内のデータ型データと、プログラムコードデータが紐付けられる。また、変数名及びデータ型データベース42におけるデータ型とのリレーションにより、変数データベース44内の変数データと、プログラムコードデータが紐付けられる。
【0046】
図8には、リレーションとして1~10が割り振られた、プログラムコードデータC1~C10が登録されている。プログラムコードC1及びC2はそれぞれ、ファンクションD2に、変数V1が行0列0、変数V2が行0列1の位置に配置されることを示す。プログラムコードC3及びC4はそれぞれ、ファンクションブロックD3に、変数V3が行0列0、変数V4が行0列1の位置に配置されることを示す。
【0047】
プログラムコードC5、C7、C8、C10はいずれも、変数V5(ユーザデータ型D1)のメンバM1の配置位置を示している。プログラムコードC5、C7、C8、C10はそれぞれ、プログラムD4にメンバM1が、行0列0、行0列2、行1列0、行1列2の位置に配置されることを示す。プログラムコードC6は、変数V6(ファンクションブロックD3)が、プログラムD4の行0列1に配置されることを示す。
【0048】
プログラムコードC9は、ファンクションD2が、プログラムD4の行1列1に配置されることを示す。すなわち、プログラムD4はファンクションD2を参照している。
【0049】
図9は、ファンクションD2を示すラダー図である。
図9のラダー図は、プログラムコードデータベース45等に基づいて、例えばプログラムエディタ34によって生成される。また、プログラムエディタ34によって行われた変更は、プログラムコードデータベース45等に反映される。
【0050】
図9の横方向には列データ(列0、列1)が配置され、縦方向には行データ(行0)が配置される。
図9のファンクションD2には、
図8に示す通り、行0列0に変数V1が配置されるとともに、行0列1に変数V2が配置されている。
【0051】
図10は、ファンクションブロックD3を示すラダー図である。
図10のファンクションブロックD3には、
図8に示す通り、行0列0に変数V3が配置されるとともに、行0列1に変数V4が配置されている。
【0052】
図11は、プログラムD4を示すラダー図である。
図11のプログラムD4には、
図8に示す通り、行0列0、行0列2、行1列0、行1列2には、いずれも変数V5のメンバM1が配置されている。行0列1には、変数V6(ファンクションブロックD3)が配置される。変数V6の入力部には、変数V3が割り当てられ、出力部には変数V4が割り当てられている。行1列1には、ファンクションD2が配置される。ファンクションD2の入力部には、変数V1が割り当てられている。
【0053】
上記の通り、データベース4には制御プログラムを構成するユーザデータ型、ファンクションブロック、ファンクション、プログラムがそれぞれ登録されている。インポート部32は、インポート対象ファイル52から取得した制御プログラムを、
図4~
図8に示した形式でデータベース4に格納できる。
【0054】
また、エクスポート部31は、データベース4から制御プログラムを取得し、エクスポート対象ファイル51として出力できる。
図5~
図8に示したデータベース例の場合、ユーザデータ型D1のファイル(
図6のデータベースにおいてD1が示すデータを含むファイル)、ファンクションD2のファイル(
図7及び
図8のデータベースにおいてD2が示すデータを含むファイル)、ファンクションブロックD3のファイル(
図7及び
図8のデータベースにおいてD3が示すデータを含むファイル)、プログラムD4のファイル(
図7及び
図8のデータベースにおいてD4が示すデータを含むファイル)をエクスポート対象ファイル51として出力できる。上記はデータ型ごとに1つのファイルがエクスポートされる例を示しているが、例えば、
図5のデータ型データベースにおいてユーザデータ型が複数定義されていればユーザデータ型のファイルが複数エクスポートされてもよい。ファンクション、ファンクションブロック、プログラムについても同様に、それぞれ複数定義されていれば、複数のファイルがエクスポートされることができる。
【0055】
図12は、インポート部32を起動するイメージを示す図である。システムプログラマは、例えばプロダクトマネージャ33から、インポート部32を呼び出すことができる。例えば、システムプログラマが
図12のメニューからインポートをクリックすることで、インポート部32を呼び出せる。
【0056】
図13は、インポート部32の画面の一例を示す図である。システムプログラマは、例えばエクスプローラから、ファイル5を検索することが出来る。システムプログラマは、検索結果からファイル5を1つ又は複数選択し、インポート対象ファイル52として指定する。インポート部32は、指定されたインポート対象ファイル52からデータ(構造体、ファンクション、ファンクションブロック、プログラム等)をインポートする。インポート対象ファイル52として指定するファイルは、任意の制御プログラムからエクスポートしたファイルでもよいし、ユーザ(例えばシステムプログラマ)が別途作成してデータベース4又は他の記憶部に格納しておいたファイルでもよいし、これらの両方でもよい。なおインポート先のライブラリはあらかじめ指定しておく。インポート先のライブラリにあらかじめ1つ以上のデータがインポートされていてもよい。つまりインポート作業を複数回に分けて行う場合に、前回の作業までにインポートされたデータ(構造体、ファンクション、ファンクションブロック、プログラム等)が上記指定したライブラリに格納されていてもよい。
【0057】
図14Aは、インポート対象として指定されたインポート対象ファイル52群の初期状態のインポート順を示す図である。初期状態においては、各インポート対象ファイル52のインポート順は、例えばシステムプログラマが指定した順となっている。
図14Aは、初期状態のインポート順に、インポート対象ファイル52a、52b、52c、52d、52e、52f、52g、52hを示している。
【0058】
各インポート対象ファイル52のインポートを成功させるために、各インポート対象ファイル52のインポート順は各インポート対象ファイル52間の参照関係、より詳細には、各インポート対象ファイル52に含まれるデータ(構造体、ファンクション、ファンクションブロック、プログラム等)間の参照関係、に応じた順序にされる必要がある。例えば、インポート対象ファイル(MS000.PRG)52aに格納されているプログラムは、インポート対象ファイル(STR1.TYP)52cに格納されている構造体と、インポート対象ファイル(USR_FUN.FUN)52gに格納されているファンクションを参照している。このため、インポート部32は、インポート対象ファイル52aよりも先に、インポート対象ファイル52c及び52gをインポートする必要がある。なおインポート対象ファイル52をインポートするとは、インポート対象ファイル52に格納されているデータ(構造体、ファンクション、ファンクションブロック、プログラム等)をインポートすることを意味する。
【0059】
しかしながら、
図14Aのインポート順は、各インポート対象ファイル52の参照関係に応じた順序になっていない。
図14Aのインポート順では、インポート対象ファイル52aよりもインポート対象ファイル52c及び52gのインポート順が後である。このため、
図14Aのインポート順でインポートを実行すると、インポート対象ファイル52aのインポートが失敗してしまう。
【0060】
同様に、
図14Aではインポート対象ファイル52cに格納されている構造体が、インポート対象ファイル(STR2.TYP)52dに格納されている構造体を参照している。また、インポート対象ファイル52gに格納されているファンクションは、インポート対象ファイル52dに格納されている構造体を参照している。また、インポート対象ファイル(USR_FBK.FBK)52fに格納されているファンクションブロックは、インポート対象ファイル52gに格納されているファンクションを参照している。すなわち、
図14Aのインポート順では、インポート対象ファイル52c、52fのインポートも同様に失敗してしまう。なお、インポート対象ファイル(MS001.PRG)52b、インポート対象ファイル(STR3.TYP)52e、及びインポート対象ファイル(USR_FUN1.FUN)52hには、他のファイルとの参照関係はない。
【0061】
上記のように、各インポート対象ファイル52のインポート順が各インポート対象ファイル52の参照関係に応じた順序になっていない場合、インポート部32は、一部のインポート対象ファイル52のインポートに失敗する。
【0062】
従来では、システムプログラマがインポート順を正しく指定するために、各インポート対象ファイル52が格納する構造体等を調査し、参照関係をすべて正しく把握する必要があった。大規模な制御プログラムでは、インポート順の調査と算出に時間がかかってしまうことから、システムプログラマの負担が増大するとともに、制御プログラムの開発効率が悪化してしまっていた。
【0063】
図14Bは、各インポート対象ファイル52のインポート順が各インポート対象ファイル52の参照関係に応じた順序とされた例を示す図である。本開示の実施形態におけるインポート部32は、
図14Aのインポート順が指定された場合であっても、各インポート対象ファイル52の参照関係に基づき、
図14Bに示すような正しいインポート順を自動で算出することを可能にする。
図14Bでは、インポート対象ファイル52d、52c、52g、52f、52a、52e、52h、52bがこの順でインポートされる。
【0064】
以降の説明において、インポート対象ファイル52d、52c、52g、52f、52aに格納されている構造体等を、それぞれ第1構造体、第2構造体、第1関数、第2関数、プログラムと呼ぶ。
図14Bでは、第1構造体を参照する第2構造体は、第1構造体より後にインポートされる。第1構造体を参照する第1関数は、第1構造体より後にインポートされる。第1関数を参照する第2関数は、第1関数より後にインポートされる。第1関数を参照するプログラムは、第1関数より後にインポートされる。
【0065】
図14Bの例では、第1関数がファンクションであり、第2関数が第1関数を参照するファンクションブロックである例を示しているが、本実施形態はこの例に限定されない。例えば、第1関数が、ファンクションであり、第2関数が第1関数を参照するファンクションであってもよい。また第1関数が、ファンクションブロックであり、第2関数が第1関数を参照するファンクションブロックであってもよい。いずれの場合も、第1関数と第2関数は、この順でインポートされる。
【0066】
また、上記の通り、第1構造体を参照する第1関数は、第1構造体より後にインポートされ、第1関数を参照するプログラムは、第1関数より後にインポートされる。上述したように、本例では第1関数はファンクションであるが、ファンクションブロックであってもよい。
【0067】
上記のように、
図14Bでは参照元の構造体等が参照先の構造体等よりも後になるようにインポート順が設定されているため、
図14Bのインポート順でインポートを実行した場合、インポート対象ファイル52a~52hのいずれのインポートも失敗しない。
【0068】
上記のように、エンジニアリングツール1は各インポート対象ファイルの参照関係に基づき、自動でインポート順を算出する。これにより、システムプログラマはインポート順を指定する必要がなくなり、システムプログラマの負担が軽減されるとともに、制御プログラムの開発効率が向上する。
【0069】
図15は、本開示の実施形態におけるインポート順算出のフローチャートである。インポート部32は、
図15のフローチャートによって、
図14Bに示すインポート順を算出する。
【0070】
インポート部32は、複数のインポート対象ファイル52を、例えばシステムプログラマが指定した順で、1つずつ処理する。まず、インポート部32は処理対象の1つのインポート対象ファイル52によって参照されている構造体等(以下、データと呼ぶ)があるか否かを判別する(ステップS1)。
【0071】
対象のインポート対象ファイル52によって参照されているデータがない場合、インポート部32はインポート順をそのまま記憶する(ステップS2)。例えば、現時点でインポート順が決定されているファイル群の末尾のインポート順の次の値にインポート順を決定し、決定したインポート順の値を記憶する。インポート部32は、インポート対象ファイルを全て処理したかの判定を行い(ステップS3)、全て処理した場合はインポート順算出処理を終了する。処理していない場合は、インポート部32は、次の処理対象のインポート対象ファイル52について、ステップS1から処理を行う。
【0072】
ステップS1において、対象のインポート対象ファイル52によって参照されているデータがある場合、インポート部32は、他のインポート対象ファイル52に参照すべきデータがあるかを判定する(ステップS4)。
【0073】
他のインポート対象ファイル52に参照すべきデータがある場合は、インポート部32は、インポート順を整理して記憶する(ステップS5)。具体的には、インポート部32は対象のインポート対象ファイル52より先に、参照すべきデータを有するインポート対象ファイル52が先にインポートされるように、インポート順を整理する(並び替える)。
【0074】
インポート部32は対象のインポート対象ファイル52、又は参照すべきデータを有するインポート対象ファイル52によって、さらに参照されているデータがあるか否かを判定する(ステップS6)。対象のインポート対象ファイル52、又は参照すべきデータを有するインポート対象ファイル52のいずれかによって参照されているデータがある場合、再びステップS4の判定が行われる。対象のインポート対象ファイル52、及び参照すべきデータを有するインポート対象ファイル52のいずれかによっても参照されているデータがない場合、ステップS3の判定が行われる。
【0075】
ステップS4において、他のインポート対象ファイル52に参照すべきデータがない場合、インポート部32はインポート先のライブラリにおける制御プログラム(以下、既存の制御プログラム)に参照すべきデータがあるか否かを判定する(ステップS7)。既存の制御プログラムは、例えば、インポート先となるライブラリにおいて今回のインポート作業より前にインポートされている1つ又は複数のデータを含み、データベース4に保存されている。
【0076】
既存の制御プログラムに参照すべきデータがある場合、この参照すべきデータは新たにインポートされる必要がない。また、対象のインポート対象ファイル52は、インポート可能であるので、インポート部32はステップS5で対象のインポート対象ファイル52のインポート順を記憶する。その後は、ステップS4の判定で他のインポート対象ファイル52に参照すべきデータがある場合と同様である。
【0077】
既存の制御プログラムに参照すべきデータがない場合、インポート部32は対象のインポート対象ファイル52がインポート不可であることを決定し、インポート不可との情報を記憶する(ステップS8)。この場合、インポート部32は例えばメッセージウィンドウ等でシステムエンジニアにその旨を通知する。
図16は、インポート部32が出力するインポート不可の旨を記載したメッセージウィンドウの一例である。
図16には、例えば、他のインポート対象ファイル52及び既存の制御プログラムから発見することができなかった参照すべきデータのデータ型名(Datatype)が表示される。
【0078】
ステップS8において、インポート対象ファイル52がインポート不可であることが記憶された後は、ステップS3の判定が行われる。
【0079】
上記の通り、インポート部32は
図15のフローチャートの処理を実行することにより、
図14Bのインポート順を算出することができる。
【0080】
また、
図15のフローチャートでは、既存の制御プログラムから参照すべきデータを探している。すなわち、インポート部32は既存の制御プログラム内のデータを踏まえてインポート順を算出する。従来では、インポート対象ファイル52に参照すべきデータを格納したファイルがない場合、既存の制御プログラムに当該参照すべきデータが存在するか否か(インポート済みか否か)を事前に調査する必要があった。本開示の実施形態においては、上記の通り、既存の制御プログラムから参照すべきデータを自動で探しているため、既存の制御プログラムを調査する必要がない。
【0081】
また、本開示の実施形態に係るインポート部32は、エクスポート作業を効率化することもできる。システムプログラマは、制御プログラムを流用して新たな制御プログラムを開発する際に、エクスポート部31を用いてエンジニアリングツール1から流用元の制御プログラムからインポート先の制御プログラムに必要なデータをファイルとしてエクスポートすることがある。システムプログラマは、エクスポートしたファイルをインポート部32によって新たな制御プログラムにインポートする。このような場面においても、インポート部32が既存の制御プログラム内のデータを踏まえてインポート順を算出することにより、従来において必要だったエクスポート対象のデータの参照関係の調査、既存の制御プログラム内の参照すべきデータの調査を省略又は低減することができる。すなわち、インポート部32はエクスポート作業を効率化することができる。
【0082】
以降は、制御プログラムを構成する構造体、ファンクション、ファンクションブロック、プログラムごとに、より具体的なインポート順の算出方法を説明する。なお、
図15のフローチャートは、構造体、ファンクション、ファンクションブロック、プログラム以外のデータに対して適用されてもよい。
【0083】
図17は、本開示の実施形態における全体的なインポートのフローチャートである。インポート部32は、例えば
図13の画面において、システムプログラマから複数のインポート対象ファイル52を指定されるとともに、インポートボタンを押下されることで、
図17のインポート処理を開始する。
【0084】
インポート部32は、複数のインポート対象ファイル52のうちまず構造体のファイルのインポート順(構造体のインポート順)を算出する(ステップS11)。続いて、インポート部32は、複数のインポート対象ファイル52のうちファンクション及びファンクションブロックのファイルのインポート順(ファンクション及びファンクションブロックのインポート順)を算出する(ステップS12)。続いて、インポート部32は、複数のインポート対象ファイル52のうちプログラムのファイルのインポート順(プログラムのインポート順)を算出する(ステップS13)。最後に、インポート部32は、ステップS11~S13で算出されたインポート順に基づき、複数のインポート対象ファイル52をインポートする。すなわち複数のインポート対象ファイル52に含まれるデータ(構造体、ファンクション、ファンクションブロック、プログラム)をインポートする。
【0085】
図18は、構造体のインポート順算出のフローチャートである。インポート部32は、
図17のステップS11において、
図18のフローチャートの処理を実行する。
【0086】
インポート部32は、インポート対象ファイル52のうち構造体を格納したファイルがあるか否かを判別する(ステップS21)。インポート部32は、インポート対象ファイル52が構造体を格納しているか否かを、例えば拡張子で判別することができる。例えば、インポート対象ファイル52の拡張子が*.TYPである場合、そのファイルは構造体を格納している。
【0087】
インポート対象ファイル52のうち構造体を格納したファイルがない場合、インポート部32は
図18の処理を終了する。
【0088】
インポート対象ファイル52のうち構造体を格納したファイルがある場合、インポート部32は構造体を格納したインポート対象ファイル52を1つずつ処理する。上述の通り、構造体は、他の構造体を参照していることがある。そのため、インポート部32は、処理対象のインポート対象ファイル52内の構造体(以下、処理対象の構造体)が、他の構造体を参照しているか否かを判別する(ステップS22)。
【0089】
ステップS22では、
図15のステップS1と同様に、処理対象の構造体が他の構造体を参照していない場合は、インポート部32は、処理対象の構造体のファイルのインポート順を記憶する(ステップS23)。続いて、インポート部32は、複数のインポート対象ファイル52のうち構造体を含むファイルを全て処理したかの判定を行う(ステップS24)。インポート部32は、構造体を含む全てのファイルを処理している場合は
図18の処理を終了し、処理されていないファイルがある場合は、次の構造体についてステップS22の判定を行う。
【0090】
また、処理対象の構造体が他の構造体を参照している場合は、
図15のステップS4と同様に、インポート部32は参照する他の構造体を含むファイルがインポート対象ファイル52のうちにあるか否かの判定を行い(ステップS25)、ある場合はインポート順を整理して記憶する(ステップS26)。インポート部32は、処理対象の構造体及び参照する構造体に、さらに参照している構造体があるか否かを判定し(ステップS27)、ある場合はステップS25の判定を再度行い、ない場合はステップS24の判定に移る。
【0091】
参照する構造体を含むファイルがインポート対象ファイル52内にない場合は、インポート部32は、参照する構造体が既存の制御プログラム(インポート先のライブラリ)にあるか否かの判定を行い(ステップS28)、ある場合はステップS26の処理に移り、ない場合はインポート不可を記憶する(ステップS29)とともに、ステップS24の判定に移る。
【0092】
図19は、ファンクション(以下、FUNと呼ぶ)及びファンクションブロック(以下、FBKと呼ぶ)のインポート順算出のフローチャートである。インポート部32は、
図18の処理が終了した後、
図17のステップS12において、
図19のフローチャートの処理を実行する。
【0093】
インポート部32は、インポート対象ファイル52のうちFUN及びFBKを格納したファイルがあるか否かを判別し(ステップS31)、ない場合は
図19の処理を終了する。例えば、インポート対象ファイル52の拡張子が*.FUNである場合、そのファイルはFUNを格納している。インポート対象ファイル52の拡張子が*.FBKである場合、そのファイルはFBKを格納している。
【0094】
上述の通り、FUN及びFBKは、構造体、他のFUN又は他のFBKを参照していることがある。そのため、インポート部32は、処理対象のFUN又はFBKが構造体を参照しているか否かを判別する(ステップS32)。処理対象のFUN又はFBKが構造体を参照している場合、インポート部32は構造体のファイルのインポート順の算出を行う(ステップS33)。
【0095】
具体的には、ステップS33において、インポート部32は
図18のステップS25~S29の処理を行う。
図18のステップS27で、処理対象のFUN又はFBK及び参照する構造体に、さらに参照している構造体がなかった場合、または、ステップS29でインポート不可の情報が記憶された場合、インポート部32は
図19のステップS33の処理を終了する。
【0096】
インポート部32は、ステップS33の処理で、必要な構造体のファイルがインポート可能か否かを判定する(ステップS34)。具体的には、
図18のステップS29でインポート不可の情報が記憶された場合は、必要な構造体のファイルのうち一部又は全てのファイルのインポートが不可能である。構造体のファイルのインポートが不可能である場合、処理対象のFUN又はFBKのファイルもインポート不可である。このとき、処理対象のFUN又はFBKのファイルについて、インポート不可の情報が記憶されてもよい。
【0097】
図18のステップS27で、さらに参照している構造体がないと判定された場合は、インポートが必要な構造体のファイルは全てインポート可能である。
【0098】
ステップS32で処理対象のFUN又はFBKが構造体を参照していない場合、又はステップS34で構造体のインポートが可能であると判定された場合、インポート部32は処理対象のFUN又はFBKが、他のFUN又はFBKを参照しているか否かを判別する(ステップS35)。
【0099】
処理対象のFUN又はFBKが他のFUN又はFBKを参照していない場合は、インポート部32は、処理対象のFUN又はFBKのインポート順を記憶する(ステップS36)。この処理は、
図18のステップS23と同様でよい。
【0100】
ステップS36の処理の後、又はステップS34で構造体のインポートが不可能である場合、インポート部32はFUN又はFBKのファイルを全て処理したかの判定を行う(ステップS37)。インポート部32は、FUN又はFBKのファイルが全て処理されている場合は
図19の処理を終了し、処理されていない場合はFUN又はFBKの次のファイルについてステップS32の判定に移る。
【0101】
ステップS35で、処理対象のFUN又はFBKが他のFUN又はFBKを参照している場合は、インポート部32は参照するFUN又はFBKのファイルがインポート対象ファイル52のうちにあるか否かの判定を行う(ステップS38)。
【0102】
参照するFUN又はFBKのファイルがインポート対象ファイル52のうちにある場合は、インポート部32はそのFUN又はFBKが構造体をさらに参照しているか否かを判定する(ステップS39)。参照するFUN又はFBKが構造体をさらに参照している場合、ステップS33と同様にインポート部32は構造体のファイルのインポート順の算出を行う(ステップS40)。インポート部32は、ステップS40の処理で、必要な構造体のファイルのインポートが可能か否かを判定する(ステップS41)。構造体のファイルがインポート不可能である場合は、インポート部32は処理対象のFUN又はFBKのファイルがインポート不可であるとの情報を記憶するとともに、ステップS37の判定に移る。
【0103】
ステップS39で参照するFUN又はFBKがさらに構造体を参照していない場合、又はステップS40で構造体のファイルをインポート可能であると判定された場合、インポート部32はインポート順を整理して記憶し(ステップS42)し、さらに参照しているFUN又はFBKがあるか否かを判定する(ステップS43)。インポート部32は、ステップS43でさらに参照しているFUN又はFBKがある場合はステップS38の判定、ない場合はステップS37の判定に移る。
【0104】
ステップS38で、参照するFUN又はFBKのファイルがインポート対象ファイル52内にない場合は、インポート部32は参照するFUN又はFBKが既存の制御プログラムにあるか否かの判定を行い(ステップS44)、ある場合はステップS39の処理に移り、ない場合はインポート不可の情報を記憶する(ステップS45)とともに、ステップS37の判定に移る。
【0105】
図20は、プログラムのインポート順の算出のフローチャートである。インポート部32は、
図19の処理が終了した後、
図17のステップS13において、
図20のフローチャートの処理を実行する。
【0106】
インポート部32は、インポート対象ファイル52のうちプログラムを格納したファイルがあるか否かを判別し(ステップS51)、ない場合は
図20の処理を終了する。例えば、インポート対象ファイル52の拡張子が*.PRGである場合、そのファイルはプログラムを格納している。
【0107】
上述の通り、プログラムは、構造体、FUN又はFBKを参照していることがある。そのため、インポート部32は、処理対象のプログラムが構造体を参照しているか否かを判別する(ステップS52)。処理対象のプログラムが構造体を参照している場合、
図19のステップS33と同様に、インポート部32は構造体のインポート順の算出を行う(ステップS53)。
インポート部32は、ステップS53の処理で、必要な構造体のファイルのインポートが可能か否かを判定する(ステップS54)。
【0108】
ステップS52で処理対象のプログラムが構造体を参照していない場合、又はステップS54で構造体のファイルのインポートが可能であると判定された場合、インポート部32は処理対象のプログラムが、FUN又はFBKを参照しているか否かを判別する(ステップS55)。ステップS54で構造体のファイルのインポートが不可能であると判定された場合、処理対象のプログラムのファイルはインポート不可である。
【0109】
ステップS55で処理対象のプログラムがFUN又はFBKを参照している場合、インポート部32はFUN又はFBKのファイルのインポート順の算出を行う(ステップS56)。具体的には、インポート部32は
図19のステップS35~S43の処理を行う。
図19のステップS43で、処理対象のプログラム及び参照するFUN又はFBKに、さらに参照しているFUN又はFBKがなかった場合、又はステップS45で処理対象のプログラムのファイルのインポート不可の情報が記憶された場合、又はステップS41でFUN又はFBKが参照する構造体がインポート不可能であると判定された場合、インポート部32は
図20のステップS56の処理を終了する。
【0110】
インポート部32は、ステップS56の後、FUN又はFBKのファイルのインポートが可能か否かを判定する(ステップS57)。具体的には、ステップS45で処理対象のプログラムのファイルのインポート不可が記憶された場合、又はステップS41でFUN又はFBKが参照する構造体のファイルがインポート不可能であると判定された場合は、FUN又はFBKのファイルのインポートは不可能である。すなわち、FUN又はFBKのファイルのインポートが不可能であると判定された場合は、処理対象のプログラムのファイルは、インポート不可である。
【0111】
図19のステップS43で、さらに参照しているFUN又はFBKがないと判定された場合は、インポートが必要なFUN又はFBKのファイルは全てインポート可能である。
【0112】
ステップS55で処理対象のプログラムがFUN又はFBKを参照していない場合、又はステップS57でFUN又はFBKのインポートが可能であると判定された場合、インポート部32はプログラムのファイルのインポート順を記憶する(ステップS58)。
【0113】
ステップS58でプログラムのファイルのインポート順が記憶された場合、ステップS54で構造体のファイルのインポートが不可能であると判定された場合、又はステップS57でFUN又はFBKのファイルのインポートが不可能であると判定された場合、インポート部32はプログラムのファイルを全て処理したかの判定を行う(ステップS59)。インポート部32は、プログラムのファイルが全て処理されている場合は
図20の処理を終了し、処理されていない場合は次のプログラムのファイルについてステップS52の判定に移る。
【0114】
図21は、インポート処理のフローチャートである。インポート部32は、
図20の処理が終了した後、
図17のステップS14において、
図21のフローチャートの処理を実行する。
【0115】
インポート部32は、
図17のステップS11~S13で整理されたインポート対象ファイルのインポート順で、インポート対象ファイル52を1つずつ処理する。まず、インポート部32は処理対象のインポート対象ファイル52が、インポート可能か否かを判定する(ステップS61)。
【0116】
図18のステップS29、
図19のステップS45等で、インポート不可が記憶されているインポート対象ファイル52は、インポート不可である。ステップS61の判定で、インポート不可であると判定された場合は、エラーダイアログ(例えば、
図16のダイアログ)が表示され(ステップS62)、
図21の処理が中断される。
【0117】
ステップS61で、インポート不可と判定されなかった場合、すなわちインポート可能と判定された場合は、処理対象のインポート対象ファイル52のインポートが行われる(ステップS63)。続いて、インポート対象ファイルをすべて処理したかの判定が行われる(ステップS64)。インポート部32は、インポート対象ファイル52がすべて処理されてない場合は、次の処理対象のインポート対象ファイル52について、ステップS61の判定を行う。ステップS64で、インポート対象ファイル52がすべて処理されている場合、又はステップS62で
図21の処理が中断された場合、
図21の処理が終了するとともに、
図17の処理も終了する。
【0118】
このように、本開示の実施形態のエンジニアリングツール1は、制御プログラムの各データ(構造体、ファンクション、ファンクションブロック、プログラム等)間の参照関係に基づいて、インポート順を自動的に算出し、最適な順序でインポート対象ファイルをインポートしている。このためシステムプログラマは、インポート対象ファイルのインポート順を正しく指定しなくともインポート対象ファイルのインポートが可能となる。またシステムプログラマがインポート対象ファイル間の参照関係を調査する必要を省略又は低減できる。また、本開示の実施形態のエンジニアリングツール1は、インポート対象ファイル群にインポートすべきデータのファイルが存在しない場合に、既存の制御プログラムから、インポートすべきデータを探すため、システムプログラマが既存の制御プログラムにインポートすべきデータがあるか否かを調査する手間を削減できる。すなわち、エンジニアリングツール1は制御プログラムのインポート及びエクスポートの効率を向上することができる。
【0119】
なお、本発明は上記各実施形態そのままに限定されるものではなく、実施段階ではその
要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示
されている複数の構成要素を適宜組み合わせることによって種々の発明を形成できる。ま
た例えば、各実施形態に示される全構成要素からいくつかの構成要素を削除した構成も考
えられる。さらに、異なる実施形態に記載した構成要素を適宜組み合わせてもよい。
【0120】
[付記]
[項目1]
それぞれが少なくとも1つ以上の変数又は配列を有する複数の構造体をインポートするインポート部を備え、
前記インポート部は、前記複数の構造体のうち他の構造体を参照する構造体を、前記他の構造体よりも後にインポートするようにインポート順を決定し、決定した前記インポート順で前記複数の構造体をインポートする、
エンジニアリングツール。
[項目2]
前記インポート部は、それぞれがファンクション又はファンクションブロックで構成される複数の関数をインポートし、
前記インポート部は、前記複数の関数のうち他の関数を参照する関数を、前記他の関数よりも後にインポートするように前記複数の関数のインポート順を決定し、決定した前記インポート順で前記複数の関数をインポートする
項目1に記載のエンジニアリングツール。
[項目3]
前記インポート部は、前記関数を少なくとも1つ以上参照するプログラムをインポートし、
前記インポート部は、前記プログラムを、前記プログラムが参照する関数よりも後にインポートするように前記プログラムと前記関数とのインポート順を決定し、決定した前記インポート順で前記プログラムと前記関数とをインポートする
項目2に記載のエンジニアリングツール。
[項目4]
前記インポート部は、それぞれ前記関数及び前記プログラムを定義した複数のインポート対象ファイルのうち前記プログラムを定義したインポート対象ファイルから前記プログラムをインポートし、
前記プログラムから参照される関数を定義したファイルが前記複数のインポート対象ファイルにないときは、インポート先のライブラリに前記関数がインポート済みかを判断し、インポート済みの場合は前記プログラム及び前記関数のインポート順を決定し、インポート済みでない場合は、前記プログラムのインポートは不可であることを決定する
項目3に記載のエンジニアリングツール。
[項目5]
前記インポート部は、それぞれ前記複数の関数を定義した複数のインポート対象ファイルから前記複数の関数をインポートし、
前記複数の関数のいずれかから参照される関数を定義したインポート対象ファイルが、前記複数のインポート対象ファイルにないときは、インポート先のライブラリに前記参照される関数がインポート済みかを判断し、前記参照される関数がインポート済みの場合は前記複数の関数のインポート順を決定し、インポート済みでない場合は、前記参照される関数を参照する前記関数のインポートは不可であることを決定する
項目2乃至4のいずれか一項に記載のエンジニアリングツール。
[項目6]
前記インポート部は、それぞれ前記複数の構造体を定義した複数のインポート対象ファイルから前記複数の構造体をインポートし、
前記複数の構造体のいずれかから参照される構造体を定義したインポート対象ファイルが、前記複数のインポート対象ファイルにないときは、インポート先のライブラリに前記参照される構造体がインポート済みかを判断し、インポート済みの場合は前記複数の構造体のインポート順を決定し、インポート済みでない場合は前記参照される構造体を参照する構造体のインポートは不可であることを決定する
項目1乃至4のいずれか一項に記載のエンジニアリングツール。
[項目7]
前記インポート部によりインポートされる前記プログラム、前記複数の関数、前記複数の構造体の集合体は制御装置を制御する制御プログラムを構成する
項目3又は4に記載のエンジニアリングツール。
【符号の説明】
【0121】
1 エンジニアリングツール、2 コンピュータ、3 操作画面、4 データベース、5 ファイル、6 システム、21 キーボード、22 マウス、23 表示装置、31 エクスポート部、32 インポート部、33 プロダクトマネージャ、34 プログラムエディタ、41 ライブラリデータベース、42 データ型データベース、43 ユーザデータ型メンバデータベース、44 変数データベース、45 プログラムコードデータベース、51 エクスポート対象ファイル52、52a、52b、52c、52d、52e、52f、52g、52h インポート対象ファイル、61 ライブラリ、62 ネットワーク、63 ステーション