(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024084362
(43)【公開日】2024-06-25
(54)【発明の名称】開発支援装置、開発支援方法および開発支援プログラム
(51)【国際特許分類】
G05B 19/05 20060101AFI20240618BHJP
G06F 8/41 20180101ALI20240618BHJP
【FI】
G05B19/05 A
G06F8/41 170
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022198597
(22)【出願日】2022-12-13
(71)【出願人】
【識別番号】000002945
【氏名又は名称】オムロン株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】加藤 賀久
(72)【発明者】
【氏名】長尾 健次郎
(72)【発明者】
【氏名】玉垣 裕
【テーマコード(参考)】
5B081
5H220
【Fターム(参考)】
5B081CC41
5H220BB09
5H220DD06
5H220JJ12
5H220JJ47
5H220MM03
(57)【要約】
【課題】制御プログラムのソースコードの一部を秘匿化するモードと、公開可能にするモードとを切替え可能な仕組みを提供する。
【解決手段】制御プログラム210のソースコードは、秘匿化対象の第1ソースコード211とそれ以外の第2ソースコード214を含み、開発支援装置は、制御プログラムのソースコードからオブジェクトコードを生成し出力するコード生成部を備え、コード生成部は、指示が第1モードを示すとき、第1ソースコードについて、当該第1ソースコードと当該第1ソースコードから生成した第1オブジェクトコードの両方を出力し、指示が第2モードを示すとき、第1ソースコードは出力せずに当該第1ソースコードから生成した第1オブジェクトコードを出力する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
対象を制御する制御装置用の制御プログラムの開発を支援するための開発支援装置であって、
前記制御プログラムのソースコードは、秘匿化対象の第1ソースコードとそれ以外の第2ソースコードを含み、
前記開発支援装置に対する指示を受付ける受付部と、
前記受付部が受付けた指示は、第1モードまたは第2モードのいずれを示すかを判定する判定部と、
前記制御プログラムのソースコードからオブジェクトコードを生成し出力するコード生成部と、を備え、
前記コード生成部は、
前記受付けた指示は前記第1モードを示すとの判定に応じて、前記第1ソースコードについて、当該第1ソースコードと当該第1ソースコードから生成した第1オブジェクトコードの両方を出力し、
前記受付けた指示は前記第2モードを示すとの判定に応じて、前記第1ソースコードは出力せずに当該第1ソースコードから生成した第1オブジェクトコードを出力する、開発支援装置。
【請求項2】
前記開発支援装置が前記制御装置と通信するための通信インターフェイスと、
前記コード生成部から出力されるコードを、前記通信インターフェイスを介して前記制御装置に転送する転送部と、をさらに備える、請求項1に記載の開発支援装置。
【請求項3】
前記制御プログラムのライブラリと、
前記第1モードおよび前記第2モードそれぞれにおいて、当該モードにおいて前記コード生成部から出力されるコードを前記制御プログラムのライブラリに保存する第1プロジェクトと、をさらに備える、請求項1または2に記載の開発支援装置。
【請求項4】
前記制御装置への転送用ファイルを生成する第2プロジェクトをさらに備え、
前記第2ソースコードは、前記ライブラリに保存されるコードの参照を指示する参照命令要素を含み、
前記第2プロジェクトは、
前記第1モードおよび前記第2モードそれぞれにおいて、当該モードにおいて前記ライブラリに保存されたコードを、前記第2ソースコードの前記参照命令要素に従って参照し前記ファイルに含める、請求項3に記載の開発支援装置。
【請求項5】
対象を制御する制御装置用の制御プログラムの開発を支援する方法であって、
前記制御プログラムのソースコードは、秘匿化対象の第1ソースコードとそれ以外の第2ソースコードを含み、
前記方法は、
指示を受付けること、
受付けた指示は、第1モードまたは第2モードのいずれを示すかを判定すること、
前記制御プログラムのソースコードからオブジェクトコードを生成し出力すること、を備え、
前記オブジェクトコードを生成し出力することは、
前記受付けた指示は前記第1モードを示すとの判定に応じて、前記第1ソースコードについて、当該第1ソースコードと当該第1ソースコードから生成した第1オブジェクトコードの両方を出力すること、
前記受付けた指示は前記第2モードを示すとの判定に応じて、前記第1ソースコードは出力せずに当該第1ソースコードから生成した第1オブジェクトコードを出力することを含む、開発支援方法。
【請求項6】
対象を制御する制御装置用の制御プログラムの開発を支援する方法をコンピュータに実行させるための開発支援プログラムであって、
前記制御プログラムのソースコードは、秘匿化対象の第1ソースコードとそれ以外の第2ソースコードを含み、
前記方法は、
指示を受付けること、
受付けた指示は、第1モードまたは第2モードのいずれを示すかを判定すること、
前記制御プログラムのソースコードからオブジェクトコードを生成し出力すること、を備え、
前記オブジェクトコードを生成し出力することは、
前記受付けた指示は前記第1モードを示すとの判定に応じて、前記第1ソースコードについて、当該第1ソースコードと当該第1ソースコードから生成した第1オブジェクトコードの両方を出力すること、
前記受付けた指示は前記第2モードを示すとの判定に応じて、前記第1ソースコードは出力せずに当該第1ソースコードから生成した第1オブジェクトコードを出力することを含む、開発支援プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、対象を制御する制御装置用の制御プログラムの開発を支援するための技術に関する。
【背景技術】
【0002】
様々な製造現場において、PLC(Programmable Logic Controller)等の制御装置が導入されている。このような制御装置は、一種のコンピュータであり、製造装置や製造設備等の制御対象に応じて設計された制御プログラムが実行されることで、当該対象を制御することができる。
【0003】
このような制御プログラムの不正利用を防止する技術が提案されている。例えば、特開2020-181364号公報(特許文献1)は、PLCのMACアドレスに基づいて、当該PLCのための運転用プログラムを動作可能とする認証用ファイルを作成する技術を開示する。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
制御プログラムに関しては、制御プログラムのソースコードが公開されると悪意の第3者によって閲覧され、または、ソースコードが改ざんされるという不正利用のリスクがある。生産現場ではPLCにインストールされた制御プログラムについて、保守等のためにソースコードを閲覧可能に公開したいとのニーズと、上記のリスクから保護するために秘匿化したいとのニーズの両方が存在する。特許文献1は、運転用プログラムの使用許可をPLCに与える技術は開示するが、制御プログラムについて当該ニーズに応える技術は提案していない。
【0006】
本開示の一つの目的は、制御プログラムのソースコードの一部を秘匿化するモードと、公開可能にするモードとを切替え可能な仕組みを提供することである。
【課題を解決するための手段】
【0007】
本開示に係る開発支援装置は、対象を制御する制御装置用の制御プログラムの開発を支援するための装置であって、制御プログラムのソースコードは、秘匿化対象の第1ソースコードとそれ以外の第2ソースコードを含み、開発支援装置に対する指示を受付ける受付部と、受付部が受付けた指示は、第1モードまたは第2モードのいずれを示すかを判定する判定部と、制御プログラムのソースコードからオブジェクトコードを生成し出力するコード生成部と、を備える。コード生成部は、受付けた指示は第1モードを示すとの判定に応じて、第1ソースコードについて、当該第1ソースコードと当該第1ソースコードから生成した第1オブジェクトコードの両方を出力し、受付けた指示は第2モードを示すとの判定に応じて、第1ソースコードは出力せずに当該第1ソースコードから生成した第1オブジェクトコードを出力する。
【0008】
上述の開示によれば、開発支援装置は、受付けた指示に従い、制御プログラムのソースコードの一部を秘匿化するモードと、公開可能にするモードとを切替えことができる。
【0009】
上述の開示において、開発支援装置は、制御装置と通信するための通信インターフェイスと、コード生成部から出力されるコードを、通信インターフェイスを介して制御装置に転送する転送部と、をさらに備える。
【0010】
上述の開示によれば、第1モードで第1ソースコードを秘匿化せずに制御装置に転送し、第2モードで秘匿化して転送するとの、モード切替えができる。
【0011】
上述の開示において、開発支援装置は、さらに、制御プログラムのライブラリと、第1モードおよび第2モードそれぞれにおいて、当該モードにおいてコード生成部から出力されるコードを制御プログラムのライブラリに保存する第1プロジェクトと、をさらに備える。
【0012】
上述の開示によれば、第1モードで制御プログラムの第1ソースコードを秘匿化せずにライブラリに保存し、第2モードで秘匿化して当該ライブラリに保存するとのモード切替えができる。
【0013】
上述の開示において、開発支援装置は、制御装置への転送用ファイルを生成する第2プロジェクトをさらに備え、第2ソースコードは、ライブラリに保存されるコードの参照を指示する参照命令要素を含み、第2プロジェクトは、第1モードおよび第2モードそれぞれにおいて、当該モードにおいてライブラリに保存されたコードを、第2ソースコードの参照命令要素に従って参照し上記のファイルに含める。
【0014】
上述の開示によれば、第1モードまたは第2モードにおいて、第1ソースコードまたは第1オブジェクトのコードの生成を、ライブラリに保存されたコードを参照することで実現できる。
【0015】
本開示の開発支援方法は、対象を制御する制御装置用の制御プログラムの開発を支援する方法であって、制御プログラムのソースコードは、秘匿化対象の第1ソースコードとそれ以外の第2ソースコードを含み、方法は、指示を受付けること、受付けた指示は、第1モードまたは第2モードのいずれを示すかを判定すること、制御プログラムのソースコードからオブジェクトコードを生成し出力すること、を備え、オブジェクトコードを生成し出力することは、受付けた指示は第1モードを示すとの判定に応じて、第1ソースコードについて、当該第1ソースコードと当該第1ソースコードから生成した第1オブジェクトコードの両方を出力すること、受付けた指示は第2モードを示すとの判定に応じて、第1ソースコードは出力せずに当該第1ソースコードから生成した第1オブジェクトコードを出力することを含む。
【0016】
本開示の開発支援プログラムは、対象を制御する制御装置用の制御プログラムの開発を支援する方法をコンピュータに実行させるためのプログラムであって、制御プログラムのソースコードは、秘匿化対象の第1ソースコードとそれ以外の第2ソースコードを含み、上記の方法は、指示を受付けること、受付けた指示は、第1モードまたは第2モードのいずれを示すかを判定すること、制御プログラムのソースコードからオブジェクトコードを生成し出力すること、を備え、オブジェクトコードを生成し出力することは、受付けた指示は第1モードを示すとの判定に応じて、第1ソースコードについて、当該第1ソースコードと当該第1ソースコードから生成した第1オブジェクトコードの両方を出力すること、受付けた指示は第2モードを示すとの判定に応じて、第1ソースコードは出力せずに当該第1ソースコードから生成した第1オブジェクトコードを出力することを含む。
【0017】
上述の開示において、開発支援装置は、受付けた指示は第2モードを示すとの判定に応じて、第1ソースコードは、第2モードを利用するための条件を満たすかを判定する条件判定部を、さらに備える。
【0018】
上述の開示によれば、開発支援装置は、第2モードが指定された場合、第1ソースコードは第2モードの利用条件を満たしているかを判定する。
【0019】
上述の開示において、条件判定部は、コード生成部によって第1ソースコードから第1オブジェクトコードが生成されるとき、第1ソースコードが条件を満たすかを判定する。
【0020】
上述の開示によれば、オブジェクトコードを生成するときに、上記の条件判定が実施される。
【0021】
上述の開示において、ユーザ操作に従って、制御プログラムのソースコードを編集して生成するエディタを、さらに備え、条件判定部は、エディタが第1ソースコードを編集するとき、編集される第1ソースコードが条件を満たすかを判定する。
【0022】
上述の開示によれば、第1ソースコードの編集時に、上記の条件判定が実施される。
【0023】
上述の開示において、制御プログラムは、当該制御プログラムを構成する1または複数の単位プログラムを含み、第1ソースコードは、1または複数の単位プログラムのうちの1以上の単位プログラムに対応のソースコードを示し、1以上の単位プログラムは、当該単位プログラムに含まれる命令要素が参照する変数を定義する変数宣言を含み、条件は、変数宣言において定義される変数の条件を含む。
【0024】
上述の開示によれば、利用条件の中に、第1ソースコードに対応の単位プログラムにおいて宣言される変数についての条件を含めることができる。
【0025】
上述の開示において、開発支援装置はGUIをさらに備え、GUIは、第1ソースコードは上記の条件を満たさないと判定したことに応じて判定結果を出力し、第1ソースコードを修正するためのユーザ操作を受付ける。
【0026】
上述の開示によれば、第1ソースコードが第2モードの利用条件を満たすかの判定結果を出力し、また、当該条件を満たすようにコードを修正するユーザ操作を受付けるGUIが提供される。
【発明の効果】
【0027】
本開示によれば、制御プログラムのソースコードの一部を秘匿化するモードと、公開可能にするモードとを切替え可能な仕組みを提供できる。
【図面の簡単な説明】
【0028】
【
図1】本実施の形態に係る開発支援装置が適用されるFA(Factory Automation)システム10の構成の一例を示す概略図である。
【
図2】サポート装置100のハードウェア構成の一例を示す模式図である。
【
図3】サポート装置100の機能構成の一例を模試的に示す図である。
【
図4】サポート装置100における制御プログラムの開発環境の一例を概略的に示す図である。
【
図5】制御プログラムの開発手順の概略を示すフローチャートである。
【
図7】
図6の制御プログラムに対応した変数定義リストの一例を示す図である。
【
図8】制御プログラムの運用を説明する概念図である。
【
図9】本実施の形態に係る第1モードにおける制御プログラム開発の処理を模式的に示す図である。
【
図10】本実施の形態に係る第2モードにおける制御プログラム開発の処理を模式的に示す図である。
【
図11】本実施の形態に係る利用条件274を説明する図である。
【
図12】新規のFUN/FBを利用条件274に照らしてエディットする概略処理を示すフローチャートである。
【
図13】新規にライブラリ275を作成する概略処理を示すフローチャートである。
【
図14】スタンダードプロジェクトにおいてライブラリ参照を設定する概略処理を示すフローチャートである。
【
図15】ライブラリプロジェクトにおけるFUN/FBを変更の概略処理を示すフローチャートである。
【
図16】ライブラリ275を変更する概略処理を示すフローチャートである。
【
図17】スタンダードプロジェクトにおけるFUN/FBを変更する概略処理を示すフローチャートである。
【
図18】スタンダードプロジェクトのバージョン設定が変更された場合のライブラリプロジェクトの概略処理を示すフローチャートである。
【
図19】スタンダードプロジェクトのバージョン設定が変更された場合のライブラリ275の概略処理を示すフローチャートである。
【
図20】スタンダードプロジェクトのバージョン設定が変更された場合のスタンダードプロジェクトの概略処理を示すフローチャートである。
【
図21】本実施の形態に係る利用条件274に満たすライブラリ275を説明する模式図である。
【
図22】スタンダードプロジェクトにおけるライブラリ275を作成する手順を説明する図である。
【
図23】スタンダードプロジェクトにおけるライブラリ275を作成する手順を説明する図である。
【
図24】利用条件を満たすGUIによる設定方法の一例を示す図である。
【
図25】利用条件を満たすGUIによる設定方法の一例を示す図である。
【
図26】利用条件を満たすGUIによる設定方法の一例を示す図である。
【
図27】利用条件を満たすGUIによる設定方法の一例を示す図である。
【
図28】利用条件を満たすGUIによる設定方法の一例を示す図である。
【
図29】利用条件を満たすGUIによる設定方法の一例を示す図である。
【
図30】利用条件を満たすGUIによる設定方法の一例を示す図である。
【
図31】サポート装置100に対する指示51を入力するユーザ操作を受付けるGUIの一例を示す図である。
【
図32】サポート装置100に対する指示51を入力するユーザ操作を受付けるGUIの一例を示す図である。
【
図33】サポート装置100に対する指示51を入力するユーザ操作を受付けるGUIの一例を示す図である。
【発明を実施するための形態】
【0029】
以下、図面を参照しつつ、本発明に従う実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。従って、これらについての詳細な説明は原則的には繰り返さない。
【0030】
<A.適用例>
まず、本実施の形態では、制御プログラムは、コントローラとは別に用意されたプログラム開発を支援する装置を用いて作成される。制御プログラムのソースコードは、予め定められた種類のプログラミング言語で当該プログラムを記述(編集)したものであり、一般的にユーザが解釈可能なコードを指す。オブジェクトコードは、ソースコードをコンピュータ(機械)が実行可能な形式に変換したものである。オブジェクトコードは、例えばバイナリコード等のコンピュータが解釈可能コードであって、人間が実質解釈不可能なコードを含む。
【0031】
また、ソースコードの「秘匿化」は、ソースコードが漏洩しないようにすることを指す。本実施の形態では、ソースコードの「秘匿化」に、当該ソースコードは出力せずに当該ソースコードから生成されたオブジェクトコードのみを出力する方法を採用する。また、ソースコードの「公開」に、当該ソースコードを秘匿化せずに出力する方法を採用する。
【0032】
図1は、本実施の形態に係る開発支援装置が適用されるFA(Factory Automation)システム10の構成の一例を示す概略図である。まず、
図1においてFAシステム10は、開発支援装置100(以下、サポート装置100と称する)と、1または複数の制御装置(コントローラ)200とを備える。
【0033】
制御装置200は、フィールドバスを介して1または複数の機器6を含むフィールド装置群と接続されている。さらに、制御装置200同士は、ローカルネットワークを介して互いに接続されている。制御装置200は、サポート装置100が接続可能に構成される。
【0034】
制御装置200の各々は、PLC等のコンピュータとして具現化される。制御装置200は、フィールド装置群からの入力値に基づき制御プログラム210を実行して、機器6に対する制御を行うための制御演算を実施し、演算結果の出力値を機器6に出力する。出力値は、指令値を含む。機器6は、制御に関連する製造装置や生産ライン等の状態値を入力値として収集する装置、例えばセンサ等を含む。機器6は、また、指令値に従って生産ライン等に対して何らかの作用を与える装置、例えば出力リレー、コンタクタ、サーボドライバ、サーボモータ、その他任意のアクチュエータ等を含み得る。機器6は、ネットワークを介して、制御装置200との間で、入力値および出力値を含むデータを遣り取りする。
【0035】
サポート装置100は、例えば、ノート型またはデスクトップ型のPC(Personal Computer)、タブレット端末、スマートフォン、およびその他の情報処理装置のいずれかを含む。
【0036】
サポート装置100は、開発支援プログラム50がインストール可能に構成される。開発支援プログラム50は、制御装置200用の制御プログラム210の開発を支援するためのアプリケーションである。開発支援プログラム50は、例えば、オムロン社製の「Sysmac Studio」を含む。サポート装置100は、開発支援プログラム50を実行することによりプログラム開発のための環境を提供する。ユーザは、開発環境において制御プログラム210を設計し、設計された制御プログラム210は制御装置200にネットワークを介して、または記憶媒体を介して転送されインストールされる。
【0037】
制御装置200と機器6の通信には、Ethernet(登録商標)またはデータの到達時間が保証される、定周期通信を行うための例えばOPC UA(登録商標)等が採用される。制御装置200とサポート装置100の通信には、例えばLAN(Local Area Network)またはUSB(Universal Serial Bus)等が採用される。
【0038】
サポート装置100は、制御装置200で実行される制御プログラム210を含むユーザプログラムの開発環境を提供する。ユーザはサポート装置100を操作して制御プログラム210を作成する。具体的には、サポート装置100は、サポート装置100に対するユーザ操作に基づく指示51を受付ける(ステップS0)。サポート装置100は開発支援プログラム50を実行することにより、エディット(ステップS1)およびビルド(ステップS2)を実施して制御プログラム210を生成し、生成された制御プログラム210を制御装置200へ転送(ステップS3)する。エディット(ステップS1)では、サポート装置100はユーザ操作に従って、制御プログラム210のソースコードを編集または生成し、ビルド(ステップS2)では、ソースコードからオブジェクトコードを生成する。転送(ステップS3)では、制御プログラム210のソースコードまたはオブジェクトコードは制御装置200に転送される。
【0039】
本実施の形態では、エディットにおいて生成されるソースコードは、秘匿化対象とする第1ソースコード211とそれ以外の第2ソースコード214を含む。サポート装置100は受付けた指示51を判定し、判定結果に応じた処理をビルドにおいて実施する。より具体的には、サポート装置100は、指示51は第1モードを示すとの判定に応じて、第1ソースコード211の公開を許容するように、第1ソースコード211について、当該第1ソースコード211からオブジェクトコード21cを生成し、当該第1ソースコード211および生成されたオブジェクトコード21cの両方を出力する。これにより、第1ソースコード211を公開する。一方、指示51は第2モードを示すとの判定に応じて、サポート装置100は、第1ソースコード211について、当該第1ソースコード211からオブジェクトコード21cを生成し、当該第1ソースコード211は出力せずにオブジェクトコード21cのみを出力する。これにより、第1ソースコード211を秘匿化する。
【0040】
本実施の形態では、制御プログラム210のソースコードおよびオブジェクトコードの出力は、サポート装置100の内部または外部の記憶媒体ヘの格納または保存、ディスプレイへの表示、およびネットワークを介した制御装置200等の外部装置への転送等を含む。出力先の記憶媒体は、後述するライブラリ275を含む。
【0041】
このように、ユーザはサポート装置100に指示51を出力することによって、サポート装置100において、制御プログラム210のソースコードの一部である第1ソースコード211を公開するモードと、第1ソースコード211を秘匿化するモードとを切替えることができる。以下、この実施の形態のより具体的な応用例について説明する。
【0042】
<B.サポート装置のハードウェア構成>
図2を参照して、サポート装置100のハードウェア構成について説明する。
図2は、サポート装置100のハードウェア構成の一例を示す模式図である。
【0043】
サポート装置100は、一例として、汎用的なコンピュータアーキテクチャに準じて構成されるコンピュータからなる。サポート装置100は、CPU(Central Processing Unit)またはMPU(Micro-Processing Unit)を含むプロセッサ102と、CD-ROM(Compact Disc Read only memory)等の光ディスク105が脱着自在に装着されるR/W(リーダライタの略)103、主メモリ104と、通信インターフェイス111と、I/O(Input/Output)インターフェイス114と、表示インターフェイス117と、不揮発性の記憶装置120とを含む。これらのコンポーネントは、内部バス125を介して互いに通信可能に接続されている。主メモリ104は、ROM(Read Only Memory)およびRAM(Random Access Memory)等を含む。記憶装置120はHDD(Hard Disk Drive)およびSSD(Solid State Drive)等を含む。R/W103は装着された光ディスク105をプロセッサ102からの指令に基づきアクセスする。
図2では、外部記憶媒体の一例として光ディスク105を示したが、これに限定されず、USBメモリ等の他の記憶媒体であってもよい。
【0044】
プロセッサ102は、記憶装置120に格納されている開発支援プログラム50を主メモリ104に展開して実行することで、制御プログラム210(
図1を参照)の開発ツールを起動し開発環境を提供する。記憶装置120は、開発支援プログラム50の他にも、各種のデータおよびプログラム60を格納する。開発対象の制御プログラム210のソースプログラムは、サポート装置100の記憶部に揮発的または不揮発的に記憶される。
【0045】
通信インターフェイス111は、他の通信機器との間でネットワークを介してデータを遣り取りする。当該他の通信機器は、例えば、
図1に示された制御装置200および機器6、および、図示しないサーバ等を含む。サポート装置100は、通信インターフェイス111を介して、当該他の通信機器から、開発支援プログラム50等の各種プログラムをダウンロード可能なように構成されてもよい。
【0046】
I/Oインターフェイス114は、操作部115に接続され、操作部115からのユーザ操作を示す信号を取り込む。操作部115は、典型的には、キーボード、マウス、タッチパネルおよびタッチパッド等を含む、ユーザからの操作を受付け可能に構成される。操作部115は、サポート装置100と一体的に構成されてもよく、または、サポート装置100とは別に構成されてもよい。
【0047】
表示インターフェイス117は、表示部118と接続され、プロセッサ102からの指令に従って、表示部118に対して、画像を表示するための画像信号を送出する。表示部118は、LCD(Liquid Crystal Display)や有機EL(Electro Luminescence)ディスプレイ等によって構成され、ユーザに対して各種情報を提示する。表示部118は、サポート装置100と一体的に構成されてもよいし、サポート装置100とは別に構成されてもよい。
【0048】
なお、
図2には、CPU等のプロセッサ102がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(例えば、ASIC(Application Specific Integrated Circuit)またはFPGA(Field-Programmable Gate Array)等)を用いて実装してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のOS(Operating System)を並列的に実行させるとともに、各OS上で必要なアプリケーションを実行させるようにしてもよい。また、上述の説明においては、サポート装置100がすべての処理を実行する形態について例示したが、これに限らず、複数の装置が連携して上述したような機能を提供するようにしてもよい。さらに、一部または全部の機能をサーバ上のいわゆるクラウドと称される計算リソースを利用して実現してもよい。
【0049】
<C.サポート装置の機能構成>
図3を参照して、サポート装置100の機能構成について説明する。
図3は、サポート装置100の機能構成の一例を模試的に示す図である。
【0050】
サポート装置100には、OS240、プログラミングアプリケーション250および関連アプリケーション280が実装される。サポート装置100はOS240を実行することによって、プログラミングアプリケーション250および関連アプリケーション280を実行可能な環境を提供する。本実施の形態に係るサポート装置100を実現するための開発支援プログラム50は、少なくともプログラミングアプリケーション250を含む。
【0051】
関連アプリケーション280は、プログラミングアプリケーション250に関連したアプリケーションであって、例えば、ローダ257とデータ格納部299に格納されたコンフィグ情報294を含む。データ格納部299は、サポート装置100の記憶媒体、例えば記憶装置120を含んで構成される。サポート装置100は、制御装置200からコンフィグ情報294を取得し、取得したコンフィグ情報294をデータ格納部299に格納する。コンフィグ情報294は、サポート装置100がネットワークに接続される制御装置200と通信するための例えばIPアドレスを含む情報と、制御装置200の機種やバージョンを識別する情報を含む。ローダ257は、コンフィグ情報294に基づき制御装置200と通信し、制御プログラム210に関する情報を制御装置200に転送する。
【0052】
プログラミングアプリケーション250は、エディタ252と、ビルダ254と、デバッガ256と、GUI(Graphical User Interface)モジュール258と判定モジュール260と、データ格納部270とを含む。判定モジュール260は、制御プログラム開発時のモードを指示51に基づき判定するモード判定モジュール251と、ソースコードは後述する利用条件274を満たすかを判定する条件判定モジュール218を含む。プログラミングアプリケーション250に含まれるモジュールそれぞれは、典型的には、CD-ROM等の不揮発の記憶媒体に格納された状態で流通して、サポート装置100にインストールされる。データ格納部270は、サポート装置100の記憶媒体、例えば記憶装置120を含んで構成される。
【0053】
エディタ252は、予め定められたプログラミング言語の仕様に従い制御プログラム210のソースコードを作成するための入力および編集といった機能を提供する。ソースコードは、典型的には、国際規格IEC61131-3に規定された、LD(ラダーダイアグラム:Ladder Diagram)、IL(インストラクションリスト:Instruction List)、ST(ストラクチャードテキスト:Structured Text)、FBD(ファンクションブロックダイアグラム:Function Block Diagram)、SFC(シーケンシャルファンクションチャート:Sequential Function Chart)等の任意の言語を用いて記述することができる。
【0054】
ソースコードは、いずれの言語でも「変数」を用いて記述される。「変数」とは、制御プログラム210において扱われるデータに与えられた識別子である。典型的には、「変数」は、制御装置200および制御対象の機器6の状態または制御装置200が機器6に出力する制御指令を表すデータである。言い換えると、「変数」とは、制御装置200および制御対象の状態に連動して値が変化するデータのことをいう。「変数」の概念は、1つの値を表すデータ、配列として表されるデータ、構造体として表されるデータ、制御プログラム210に規定可能な種々のデータを含む。
【0055】
エディタ252は、GUIモジュール258を介して、サポート装置100に対するユーザの操作、例えば操作部115のユーザ操作を受付ける。エディタ252は、受付けた操作に従ってソースコードを生成する機能と、生成したソースコードを保存する機能とを提供する。また、エディタ252は、ユーザ操作に従って、ソースコードを編集する機能を提供する。エディタ252によるソースコードの生成または編集時、エディタ252は、GUIモジュール258を介して編集作業を支援するための情報を表示部118に表示させる。
【0056】
デバッガ256は、ソースコードに対してデバッグを行うための機能を提供する。デバッガ256は、デバッグを支援するための情報を、GUIモジュール258を介し表示部118に表示させる。
【0057】
ビルダ254は、制御プログラム210を記述するプログラミング言語の仕様に従い、ソースコードをビルドして、制御装置200で実行可能な形式の実行コードを作成する機能を提供する。ビルダ254は、後述するコンパイラ212とリンカ216を有する。コンパイラ212は、例えばファイル単位でソースコードをコンパイルすることによってソースコードからオブジェクトコードを生成する。リンカ216は、コンパイラが出力するオブジェクトコードの複数のファイルをまとめて後述する実行可能ファイル217を生成する。実行可能ファイル217は、制御装置200のプロセッサが起動可能なプログラムの単位を構成する。リンカ216が実行可能ファイル217を生成するために扱う複数のファイルには、後述するライブラリ275のファイルも含まれる。
【0058】
また、プログラミングアプリケーション250は、ソースコードに対してデバッグを行うためのデバッガ、またはサポート装置100内に、制御装置200での制御プログラム210の実行をシミュレーションする環境を提供するシミュレータを備えてもよい。
【0059】
データ格納部270は、プログラミングアプリケーション250の各部により利用(読み書き)される各種情報を格納する。データ格納部270に格納される情報については後述する。
【0060】
<D.制御プログラムの開発環境>
次に、
図4を参照して、サポート装置100における制御プログラムの開発環境を説明する。
図4は、サポート装置100における制御プログラムの開発環境の一例を概略的に示す図である。
図5は、制御プログラムの開発手順の概略を示すフローチャートである。
図6は、制御プログラムの一例を示す図である。
図6の制御プログラムはFUN/FB427,428および429を含むラダー回路420で記述される。
図7は、
図6の制御プログラムに対応した変数定義リストの一例を示す図である。
【0061】
以下では、制御プログラム210のソースコード271は、制御装置200で実行される処理を、変数を用いて記述した命令部を含む。命令部は、変数を用いて記述された命令要素を含む。「命令要素」とは、ソースコード271の命令部を記述する要素を総称するものであり、例えば、演算子、ファンクションブロック、ファンクション、オペランドを含む。ソースコード271は、複数の命令要素を互いに繋いだ回路態様で表示可能なプログラミング言語で記述することができる。以下では、典型例として
図6に示すようなLDで記述されたソースコードを対象とする。
【0062】
図4では、プログラミングアプリケーション250を構成するエディタ252およびビルダ254に関連付けてGUIモジュール258が示されている。GUIモジュール258は、エディタ252またはビルダ254とユーザとの対話を実現するように、表示インターフェイス117およびI/Oインターフェイス114を制御する。GUIモジュール258は、ユーザと対話するための「インターフェイス」の一実施例に対応する。
図4では、ビルダ254のコンポーネントのうち、コンパイラ212、リスト生成モジュール215、リンカ216および判定モジュール260が示される。
【0063】
また、
図4では、プログラミングアプリケーション250を構成するコンポーネントに関連づけて、データ格納部270が示される。
図4では、データ格納部270のデータのうち、エディタ252およびビルダ254と関連する、ライブラリ275、利用条件274、制御プログラム210のソースコード271、変数定義リスト272、およびファイル形式のオブジェクトコード273が示されている。
【0064】
利用条件274は、ソースコード271が有する秘匿化対象の第1ソースコード211について、第2モードのもとでオブジェクトコードを生成するための条件であって、第1ソースコード211が満たすべき条件を示す。
【0065】
制御プログラム210は、当該プログラムを構成する1つ以上のPOU(Program Organization Unit)を含む。POUは、プログラムを構成する単位である。POUは複数の命令要素から構成される。POUはプログラム管理上の最小単位であり、program、FUN(ファンクション)およびFB(ファンクションブロック)等を含む。programは、FUNまたはFBのようなファンクションブロックダイアグラム言語で記述されたプログラムとは異なり、例えばST言語で記述されたプログラム等を含む。
【0066】
制御プログラム210はラダープログラムを含み、ラダープログラムはファンクションブロックの形で規定された命令で記述されるFUNまたはFBを含む。FUNは、四則演算または型変換に使用する内部状態を持たない命令を示す。FBは予め定められた機能を実施するために、内部状態を持つ命令を示す。programはFUNおよびFBとは異なる種類の命令を示す。このようなPOUを部品として再利用可能なように、POUは、そのコードがファイル形式でライブラリ275に保存される。本実施の形態では、ライブラリ275は、FUNおよびFBのうちの一方または両方が保存されるよう構成される。
【0067】
エディタ252は、操作部115を介して受付けるユーザ操作に従って制御プログラム210のソースコード271を編集し格納する(
図5のステップS1)。この編集時に、エディタ252はユーザ操作に従って、変数を宣言する宣言部のソースコードを編集および生成する。宣言部は、各変数について、変数名と、データ型と、種類(グローバル変数、ローカル変数、割付け変数等の種類)等の属性を含む。データ型は、限定されないが、論理(BOOL)、整数(INT、BYTE)、実数(REAL)、倍精度整数(DINT)等を含み、データ型によって後述するデータ領域のサイズ(容量)は異なる。また、グローバル変数は、全てのPOUからアクセス可能な共通の変数であり、ローカル変数は1個のPOUのみがアクセス可能な変数である。
【0068】
デバッガ256は、ソースコード271についてデバッグを実施する。例えば、デバッガ256は、ソースコード271に含まれる命令要素が参照する変数の属性は、宣言部において宣言された変数の属性と整合するかを判定し、整合しないと判定すると、判定結果を示すバグを出力する。ユーザは、バグが解消するために宣言部またはソースコードを修正(編集)する。
【0069】
リスト生成モジュール215は、ソースコード271の中の変数宣言部のソースコードから変数定義リスト272を生成しファイル形式で格納する。変数定義リスト272は、ソースコード271に含まれる命令要素が参照する変数と属性を定義したリストである。変数定義リスト272は、宣言された1つ以上の変数と、各変数について少なくとも、変数名と、当該変数のデータ型と、種類(グローバル変数、ローカル変数および割付け変数等の種類)を含む。
【0070】
エディタ252によって、
図6に示すファンクションブロックダイアグラム言語で記述されたFUNまたはFBのラダー回路を表すプログラムのソースコード271が生成された場合、リスト生成モジュール215によって
図7に示すような変数定義リスト272が生成される。
図7の変数定義リスト272では、
図6のソースコード271で用いられる各変数について、変数名とデータ型が示されるが、変数定義リスト272は各変数について上記の種類も有する。
【0071】
ビルダ254は、「コード生成部」の一実施例である。ビルダ254は、ソースコード271と変数定義リスト272からオブジェクトコードの実行可能ファイル217を生成する(
図5のステップS2)。このオブジェクトコードを生成するとき、ビルダ254は、モード判定モジュール251によって指示51は第1モードを示す判定されたことに応じて、第1ソースコード211について、当該第1ソースコード211からオブジェクトコードを生成し、当該第1ソースコードおよび生成されたオブジェクトコードの両方を出力する。一方、モード判定モジュール251によって指示51は第2モードを示すと判定されたことに応じて、第1ソースコード211について、当該第1ソースコード211からオブジェクトコードを生成し、当該第1ソースコード211は出力せずに当該生成されたオブジェクトコードのみを出力する。
【0072】
このようなオブジェクトコードの生成において、コンパイラ212のパーサ213はソースコード271を解析し、解析結果に基づき複数のファイルに分割し、コンパイラ212はファイル単位でコンパイルすることにより、それぞれがオブジェクトコードを有した複数のオブジェクトファイル273を作成する。リンカ216は、変数定義リスト272のオブジェクトファイルおよび複数のオブジェクトファイル273を1つにまとめる(結合する)ことにより、実行可能ファイル217を生成する。リンカによってまとめられる複数ファイルには、参照(呼出)されたライブラリ275のファイルが含まれ得る。
【0073】
また、このようなオブジェクトコードの生成において、指示51が第2モードを示すとの判定に応じて、サポート装置100は、条件判定モジュール218として、ソースコード271が有する秘匿化対象の第1ソースコード211は利用条件274を満たすかを判定する。利用条件274の詳細と判定方法は後述する。
【0074】
ローダ257は、ビルダ254が生成した実行可能ファイル217を制御装置200に転送するように、通信インターフェイス111を制御する(
図5のステップS3)。
【0075】
<E.制御プログラムの制御装置200における運用>
図8は、制御プログラムの運用を説明する概念図である。サポート装置100は制御プログラムのソースコード271および変数定義リスト272を含むソースプログラム210sを作成する。
図8では、ソースコード271と変数定義リスト272を別々に表記しているが、ソースプログラム210sにおいて、ソースコード271および変数定義リスト272を一体化されたファイルとすることも可能である。
【0076】
サポート装置100では、ソースプログラム210sがビルドされることにより、制御プログラム210の実行可能ファイル217が作成されて、ローダ257によって転送されて制御装置200にダウンロードされる。この際に、制御装置200では、制御装置200のプロセッサは制御プログラム210用に、変数定義リスト272で宣言された変数を格納するためのメモリ領域219を確保する。メモリ領域219には、変数定義リスト272で宣言された変数の各々について、対応のデータ型に従ったサイズの容量を有したデータ領域が確保される。
【0077】
各機器6は、I/F(ネットワークインターフェイスの略)250を介したネットワークによるデータ通信により、メモリ領域219の変数にアクセス可能である。例えば、
図8の例では、斜線を付した領域に格納される変数が、機器6からアクセスされている。或いは反対に、機器6側から制御装置200(メモリ領域219)に対してデータを入力することも可能である。
【0078】
制御装置200内部のプロセッサによって実行可能ファイル217のオブジェクトコードが実行されることにより、制御装置200は、メモリ領域219の各変数のデータ領域を介して、制御対象である機器6とデータを遣り取りし、機器6を制御プログラムに従って制御する。
【0079】
<F.制御プログラム開発の処理>
サポート装置100における、第1モードおよび第2モードの各モードにおける制御プログラムの開発において生成されるデータと処理を説明する。
図9は、本実施の形態に係る第1モードにおける制御プログラム開発の処理を模式的に示す図である。
図10は、本実施の形態に係る第2モードにおける制御プログラム開発の処理を模式的に示す図である。
図9と
図10の処理は、ライブラリ275を作成するライブラリプロジェクトと、実行可能ファイル217を生成し制御装置200へ転送するスタンダードプロジェクトとを含む。これらプロジェクトは、開発支援プログラム50が実行されることにより提供される開発ツールを構成する。ユーザは、これらプロジェクトを、GUIモジュール258を介して操作する。処理では、タンダードプロジェクトの関連ファイル30、およびライブラリプロジェクトの関連ファイル40が扱われる。これらプロジェクトでは、制御プログラムの一例であるprogram、FUNおよびFBのコードはファイル単位で扱われる。以下では、FUN/FBは、FUNおよび/またはFBを意味する。
【0080】
図9の第1モードを説明する。ライブラリプロジェクトの関連ファイル40は、エディタ252により生成されたFUN/FBソースコード91を含む。ライブラリプロジェクトは、生成されたFUN/FBソースコード91のFUN/FBソースファイル91sを、ライブラリプロジェクトからライブラリ275に保存する(
図9のステップS1、S1a)。また、ライブラリプロジェクトは、FUN/FBソースコード91の変数定義リスト90を生成し、FUN/FBソースファイル91sと関連付けてライブラリ275に保存する(ステップS1a)。このようにライブラリプロジェクトは、FUN/FBソースコード91(FUN/FBソースファイル91s)と変数定義リスト90を含むFUN/FBを生成する。
【0081】
第1モードでは、スタンダードプロジェクトの関連ファイル30は、ライブラリプロジェクトがビルド(ステップS2)した制御プログラム210のソースコード271、およびオブジェクトファイル91eと92eを結合した実行可能ファイル217を含む。より具体的には、スタンダードプロジェクトは、第2ソースコード214に相当するPOUソースコード92のファイル(以下、POUソースコード92と称する)の中の参照命令要素、例えばインクルード命令に基づき、ライブラリ275のFUN/FBソースファイル91sと変数定義リスト90を参照し(ステップS2a)、これらをPOUソースコード92にインクルードする。「参照命令要素」は、ライブラリ275に保存されるコードを参照することを指示する命令を含む。このようなインクルード処理により、POUソースコード92とFUN/FBソースファイル91sのコードを含むソースコード271が生成される。
【0082】
スタンダードプロジェクトは、生成されたソースコード271のPOUソースコード92とFUN/FBソースファイル91sそれぞれからオブジェクトコードのオブジェクトファイル91eと92eを生成し、生成されたオブジェクトファイル91eと92eを結合して実行可能ファイル217を生成する。スタンダードプロジェクトは、生成された実行可能ファイル217を制御装置200に転送する(
図9のステップS3a)。第1モードでは、スタンダードプロジェクトは、制御プログラム210のソースコード271と、そのオブジェクトコードの実行可能ファイル217の両方を制御装置200に転送する。
【0083】
次に
図10の第2モードを説明する。第2モードの処理のステップS1b、S2bおよびS3bは、それぞれ、第2モードの処理のステップS1a、S2aおよびS3aと異なるが、第2モードの他の処理は第1モードのそれらと同じであるから説明は繰り返さない。相違点について、まずステップS1bにおいて、ライブラリプロジェクトはエディットによって生成されたFUN/FBソースコード91からオブジェクトコードを生成し、オブジェクトコードのFUN/FBオブジェクトファイル91eと変数定義リスト90をライブラリ275に保存する(ステップS1b)。第2のモードでは、ライブラリプロジェクトは、FUN/FBソースコード91のFUN/FBソースファイル91sをライブラリ275に保存しない(ステップS1b)。ステップS2bでは、スタンダードプロジェクトは、ソースコード271のPOUソースコード92に含まれるインクルード命令に基づき、ライブラリ275のFUN/FBオブジェクトファイル91eと変数定義リスト90を参照する(ステップS2b)。スタンダードプロジェクトは、POUのオブジェクトファイル92eに参照されたFUN/FBオブジェクトファイル91eを結合して実行可能ファイル217を生成する。ステップS3bでは、スタンダードプロジェクトは、生成された実行可能ファイル217とPOUソースコード92のみを含むソースコード271を制御装置200に転送する。
【0084】
このように、第2モードでは、ライブラリプロジェクトはFUN/FBソースコード91ではなく、対応のFUN/FBオブジェクトファイル91eを作成してライブラリ275に保存する。また、スタンダードプロジェクトおよび制御装置200は、制御プログラム210のPOUソースコード92のみを含むソースコード271と、オブジェクトコードの実行可能ファイル217を有するが、FUN/FBソースファイル91sは有しない。
【0085】
ここで、
図9と
図10において秘匿化対象の
図1の第1ソースコード211はFUN/FBソースコード91に対応し、
図1のその他の第2ソースコード214はPOUソースコード92に対応し、
図1のオブジェクトコード21cはFUN/FBオブジェクトファイル91eに対応する。この場合、
図9の第1モードでは、FUN/FBソースコード91は、ライブラリ275、スタンダードプロジェクトおよび制御装置200において保存される。したがって、第1のモードでは、FUN/FBソースコード91はライブラリ275、スタンダードプロジェクトおよび制御装置200において秘匿化されずに公開可能な状態である。
【0086】
対照的に
図10の第2モードでは、秘匿化対象のFUN/FBソースコード91は、ライブラリ275、スタンダードプロジェクト、および制御装置200に保存されない。したがって、第2のモードでは、秘匿化対象のFUN/FBソースコード91を、ライブラリ275、スタンダードプロジェクトおよび制御装置200において、FUN/FBオブジェクトファイル91eとして秘匿化することができる。
【0087】
上記に述べた第1モードと第2モードを、限定されないが、例えば制御プログラムの用途に応じた切替えに応用する例を説明する。ベンダーは、POUのソースコードはエンドユーザに公開してもかまわないがライブラリ275のFUN/FBのソースコードは秘匿したいとの要求がある場合、第2モードを示すよう指示51を設定する。これにより、サポート装置100では第2モードにおける
図10の処理が実行されて、エンドユーザの制御装置200およびエンドユーザのライブラリ275において、秘匿化対象のFUN/FBのソースコードを秘匿化できる。
【0088】
対照的に、ベンダーは、ライブラリ275のFUN/FBのソースコードを公開しようとする場合、第1モードを示すように指示51を設定する。これにより、サポート装置100では第1モードにおける
図9の処理が実行されて、エンドユーザの制御装置200およびベンダーのライブラリ275において、対象のFUN/FBのソースコードを秘匿化せず公開可能に保持できる。
【0089】
<G.利用条件>
図11は、本実施の形態に係る利用条件274を説明する図である。利用条件274は例えばテーブル形式の情報であるが、情報の形式はこれに限定されない。利用条件274は、第2モードにおいてライブラリプロジェクトまたはスタンダードプロジェクトによって参照される。より具体的には、利用条件274は、参照するプロジェクトの識別子C1と、判定するべき条件を示す条件C3を含む。
【0090】
識別子C1はライブラリプロジェクトまたはスタンダードプロジェクトを示す。識別子C1がライブラリプロジェクトである場合、条件C3は、FUN/FBのエディット時に判定されるべき条件C31~C35を含み、ライブラリ275の作成時に判定されるべき条件C36を含む。識別子C1がスタンダードプロジェクトである場合、条件C3は条件C37を含む。
【0091】
条件C31は、編集対象のPOU(FUN/FBを含む)に記述される機種とバージョンが、スタンダードプロジェクトに設定されている機種とバージョンに一致することを示す。条件C32は、エディットされるPOUとしてFUN/FBのみを定義することを示す。条件C33は、エディットされるPOUではグルーバル変数を含む外部変数の定義が記述されないことを示す。条件C34は、エディットされるPOUでは変数の割付け先設定が記述されないことを示す。条件C35は、エディットされるPOUでは当該ライブラリ275とは異なる他のライブラリを参照する記述が含まれないことを示す。条件C36は、スタンダードプロジェクトで定義されている全てのFUN/FBがライブラリ275に保存されることを示す。
【0092】
また、識別子C1がスタンダードプロジェクトである場合、条件C37は、当該スタンダードプロジェクトから参照されるべきライブラリとしてライブラリ275を設定するとの条件を含む。
【0093】
<H.判定モジュールの処理>
本実施の形態では、サポート装置100は、指示51は第2モードを示すと判定することに応じて、条件判定モジュール218として、第1ソースコード211は、第2モードを利用するための利用条件274を満たすかを判定する。このような条件判定の処理を、新規のライブラリ275を作成するシーンと、既に作成されたライブラリ275内のFUN/FBを変更するシーンと、スタンダードプロジェクトに設定されたバージョンを変更するシーンのそれぞれについて説明する。
【0094】
(h1.新規ライブラリを作成する処理)
図12は、新規のFUN/FBを利用条件274に照らしてエディットする概略処理を示すフローチャートである。
図13は、新規にライブラリ275を作成する概略処理を示すフローチャートである。
図12と
図13は、ライブラリプロジェクトを用いた処理を示す。
図14は、スタンダードプロジェクトにおいてライブラリ参照を設定する概略処理を示すフローチャートである。
図14は、スタンダードプロジェクトを用いた処理を示す。
【0095】
図12を参照して、サポート装置100は、スタンダードプロジェクトの機種・バージョンの情報を確信して決定し(ステップS10)、ライブラリプロジェクトの機種・バージョンの情報を、スタンダードプロジェクトについて判定した情報に合わせるよう設定する(ステップS11)。これにより、サポート装置100は、条件判定モジュール218として、条件C31が満たされると判定される。なお、ステップS10では、サポート装置100は、コンフィグ情報294が示す制御装置200の機種・バージョンを確認し決定する。
【0096】
また、サポート装置100は、エディタ252として、GUIモジュール258を介して受付けるユーザ操作に基づき、FUN/FB定義およびライブラリ内で使用するデータ型を作成(宣言)し、利用条件274が満たされるかを判定する(ステップS12)。このステップS12では、サポート装置100は、条件判定モジュール218として、エディットされるPOUが利用条件274を満たすかを判定する。より具体的には、サポート装置100は、指示51が第2モードを示すことに応じて、エディタ252のバックグランドでコンパイラ212、より特定的にはパーサ213を起動する。起動されると、パーサ213は、エディットされるPOUのソースコードを利用条件274に基づき解析し、サポート装置100は、解析結果からエディットされるソースコードは条件C32~C34を満たすかを判定する。
【0097】
条件は満たされていないと判定されると、サポート装置100は、GUIモジュール258として、満たされない条件を示すエラー通知を表示する。サポート装置100は、GUIモジュール258として、サポート装置100に対するユーザ操作を受付け、受付けたユーザ操作に従って、ソースコードを編集(修正)する。このように、ユーザは、通知されたエラーに基づきソースコードの編集(修正)操作をすることで、利用条件274を満たすようなソースコードを生成することができる。通知されるエラーは、利用条件274が満たされなかったソースコードの指定および修正方法等のガイダンスを含む。
【0098】
ライブラリ275を作成するために、サポート装置100は、GUIモジュール258として、ユーザと対話しながらライブラリ275を作成する。具体的には、
図13では、ユーザは、GUIモジュール258が表示するメインメニューから[ライブラリ設定]を選択すると、GUIモジュール258はライブラリ設定のダイアログボックスを表示する(ステップS13)。サポート装置100は、ダイアログボックスで[ライブラリタイプ]に「ソースなしライブラリ」を選択し、「ライブラリのプロパティ」を設定するユーザ操作を受付ける(ステップS14)。
【0099】
サポート装置100は、ユーザが指定した「部品選択」において定義されているすべてのFUN/FBのソースコード91を選択し(ステップS15)、[ライブラリ作成]の選択操作を受付けると、ビルダによって、選択されたFUN/FBのソースコード91からFUN/FBオブジェクトファイル91eを生成し、ライブラリ275に保存する(ステップS16)。
【0100】
図14を参照して、サポート装置100は、スタンダードプロジェクトの機種・バージョンの情報に、ステップS10で決定した機種・バージョンを設定する(ステップS17)。サポート装置100は、GUIモジュール258を介して、[ライブラリ参照]を選択するユーザ操作を受付けると、ライブラリ参照ダイアログボックスを表示する(ステップS18)。サポート装置100は、GUIモジュール258を介して、[ライブラリ参照]ボタンをクリックするユーザ操作を受付けると、スタンダードプロジェクトのビルドを実施する。より具体的には、サポート装置100は、ビルダ254として、スタンダードプロジェクト(より特定的にはPOUソースコード92)が参照しているFUN/FBを特定し、特定されたFUN/FBに対応のFUN/FBオブジェクトファイル91eをライブラリ275から読出し、スタンダードプロジェクトのオブジェクトコードに、例えばインクルード処理により追加する(ステップS19)。このようなインクルード処理によって、サポート装置100は実行可能ファイル217を生成する。
【0101】
サポート装置100は、上記に述べた処理においてライブラリ275を新規に作成すると、スタンダードプロジェクトを、当該ライブラリ275のFUN/FBオブジェクトファイル91eを参照するように設定する。
【0102】
(h2.ライブラリのFUN/FBを変更する処理)
本実施の形態では、サポート装置100は、制御プログラム210の種類(バージョン)または制御装置200の機種・バージョン毎に、ライブラリプロジェクトまたはスタンダードプロジェクトを管理する。
【0103】
ライブラリ275のFUN/FBを変更する処理を説明する。
図15は、ライブラリプロジェクトにおけるFUN/FBを変更の概略処理を示すフローチャートである。
図16は、ライブラリ275を変更する概略処理を示すフローチャートである。
図17は、スタンダードプロジェクトにおけるFUN/FBを変更する概略処理を示すフローチャートである。
【0104】
図15では、サポート装置100は、ステップS10と同様に、スタンダードプロジェクトの機種・バージョンの情報を確認し(ステップS10a)、GUIモジュール258を介して受付けたユーザ操作に基づき、複数のライブラリプロジェクトのうちから更新対象のライブラリプロジェクトを選択し開く(ステップS11a)。これにより、選択されたライブラリプロジェクトの関連ファイル40のFUN/FBソースコード91はGUIモジュール258を介して表示部118に表示される。サポート装置100は、表示されるにFUN/FBソースコード91対するユーザのエディット操作を受付け、受付けたユーザ操作に従って、ソースコードを変更(編集)する(ステップS12a)。このようなFUN/FBソースコード91の変更時に、ステップS12と同様に、当該ソースコードについて、サポート装置100は利用条件274を満たすかを判定する。利用条件274が満たすように変更されたFUN/FBソースコード91が生成される。
【0105】
変更後のFUN/FBソースコード91を用いてライブラリ275を変更するために、サポート装置100は、
図16の処理を実施する。
図16の処理は、ステップS14aにおいて、必要に応じて「ライブラリのプロパティ」が設定されるが、他のステップの処理は
図13と同様であるから説明は繰り返さない。
図16に処理が実施されると、ライブラリ275のFUN/FBオブジェクトファイル91eは、変更後のFUN/FBソースコード91から生成されたオブジェクトコードが上書きされて、更新される。
【0106】
スタンダードプロジェクトの関連ファイル30を対応のライブラリプロジェクトの関連ファイル40の変更に整合させるために、サポート装置100は
図17の処理を実施する。
図17の処理では、サポート装置100は、変更後のライブラリプロジェクトに対応のスタンダードプロジェクトを、複数のスタンダードプロジェクトから選択し、GUIモジュール258を介して開く(表示する)(ステップS17a)。サポート装置100は、GUIモジュール258を介して、[ライブラリ参照]を選択するユーザ操作を受付けると、ライブラリ参照ダイアログボックスを表示する(ステップS18)。サポート装置100は、GUIモジュール258を介して、[プロジェクトに含まれるライブラリを更新]ボタンをクリックするユーザ操作を受付けると、スタンダードプロジェクトのビルドを実施する。より具体的には、サポート装置100は、ビルダ254として、スタンダードプロジェクト(より特定的にはPOUソースコード92)が参照しているFUN/FBを特定し、特定されたFUN/FBに対応のFUN/FBオブジェクトファイル91eをライブラリ275から読出し、スタンダードプロジェクトのオブジェクトコードに、例えばインクルード処理により追加する(ステップS19a)。このような追加によって、スタンダードプロジェクトのオブジェクトコードには、ライブラリ275の更新後のFUN/FBオブジェクトファイル91eのコードが含まれることになり、サポート装置100は、更新後のFUN/FBオブジェクトファイル91eのコードを含む実行可能ファイル217を生成する。
【0107】
サポート装置100は、ライブラリプロジェクトの関連ファイル40を更新するとき、当該更新に整合するようにライブラリ275内のFUN/FBオブジェクトファイル91eを更新し、さらに、スタンダードプロジェクトにおいて再度ビルドを実施する。これにより、サポート装置100は、スタンダードプロジェクトの関連ファイル30を、当該ライブラリ275の更新後のFUN/FBオブジェクトファイル91eが追加されるように更新する。
【0108】
(h3.スタンダードプロジェクトのバージョン設定を変更する処理)
スタンダードプロジェクトのバージョン設定を変更する処理を説明する。
図18は、スタンダードプロジェクトのバージョン設定が変更された場合のライブラリプロジェクトの概略処理を示すフローチャートである。
図19は、スタンダードプロジェクトのバージョン設定が変更された場合のライブラリ275の概略処理を示すフローチャートである。
図20は、スタンダードプロジェクトのバージョン設定が変更された場合のスタンダードプロジェクトの概略処理を示すフローチャートである。
【0109】
図18では、サポート装置100は、
図15のステップS10aとステップS11aと同様の処理を実施し、ステップS12bでは、サポート装置100は、ステップS11aで開かれたライブラリプロジェクトの機種・バージョンに、スタンダードプロジェクトの変更後の機種・バージョンを設定する。
図19では、サポート装置100は、
図16のステップS13~S16と同様の処理を実施する。
図19に処理が実施されると、ライブラリ275のFUN/FBオブジェクトファイル91eは、変更後のFUN/FBソースコード91から生成されたオブジェクトコードが上書きされて、更新される。
【0110】
ビルドを再度実施して、スタンダードプロジェクトのバージョンを変更するために、サポート装置100は
図20の処理を実施する。
図20の処理では、サポート装置100は、GUIモジュール258を介して、スタートページの画面で変更対象のスタンダードプロジェクトを開く。これにより、POUソースコード92が画面に表示される(ステップS17a)。サポート装置100は、GUIモジュール258を介して、メインメニューの[ライブラリ参照]を選択するユーザ操作を受付けると、ライブラリ参照ダイアログボックスを表示する(ステップS18)。
【0111】
サポート装置100は、画面の[参照削除]ボタンのユーザのクリック操作を受付けると、スタンダードプロジェクトの関連ファイル30から、更新前のライブラリを参照してインクルードされた全てのFUN/FBオブジェクトファイル91eを削除する(ステップS20)。
【0112】
サポート装置100は、スタンダードプロジェクト内の機種・バージョンを、例えばユーザ操作に基づき変更する(ステップS21)。サポート装置100は、メインメニューから[ライブラリ参照]を選択するユーザ操作を受付けると、GUIモジュール258を介して、[ライブラリ参照]ダイアログボックスを表示する(ステップS22)。サポート装置100は、GUIモジュール258を介して[ライブラリ参照]ボタンのクリック操作を受付けると、スタンダードプロジェクトが参照するFUN/FBの更新後のFUN/FBオブジェクトファイル91eをライブラリ275から読込み、スタンダードプロジェクトの関連ファイル30に追加する(ステップS23)。
【0113】
サポート装置100は、スタンダードプロジェクトの機種・バージョンを更新するとき、当該更新に整合するようにライブラリ275内のFUN/FBオブジェクトファイル91eを更新し、さらに、更新後の機種・バージョンに整合するようにスタンダードプロジェクトにおいてビルドを再度実施する。これにより、サポート装置100は、スタンダードプロジェクトの関連ファイル30を、当該ライブラリ275の更新後のFUN/FBオブジェクトファイル91eが追加されるように更新する。
【0114】
<I.利用条件に整合するFUN/FB>
図21は、本実施の形態に係る利用条件274に満たすライブラリ275を説明する模式図である。
図21を参照し、第2モードにおいて利用条件274に満たすように作成されるFUN/FBソースコード91は、ライブラリ275の外部で使用されるデータ型に依存せず、グローバル変数にも依存しない。したがって、ライブラリ275に保存されるFUN/FB(すなわち、FUN/FBオブジェクトファイル91e)は、当該ライブラリ内でのみ使用されるローカル変数のみを宣言し、他のFUN/FBを参照する場合は当該ライブラリ275内のFUN/FBにみを参照するよう設定される。さらに、FUN/FBソースコード91は機器6の入力値または出力値に変数を割付ける命令要素も有しない。
【0115】
図8を参照しさらに説明する。
図8のメモリ領域219の斜線を付した領域以外の他の領域は上記に述べたグローバル変数または割付けられる変数のために確保されるとする。第2モードで利用条件274を満たしてライブラリ275に保存されるFUN/FBは、メモリ領域219の斜線で示す領域に格納されるローカル変数のみを宣言するよう作成される。したがって、実行されると当該FUN/FBは斜線領域のみをアクセスし、メモリ領域219の他の領域はアクセスしない。
【0116】
このように、利用条件274を満たすFUN/FBはメモリ領域219の斜線領域のみをアクセスするように作成されるから、グローバル変数の変更(変数名やデータ型の変更)、または、機器6の仕様の変更で入力値または出力値への割付け変数に変更(変数名やデータ型の変更)等によってメモリ領域219の他の領域に変更(論理または物理アドレスの変更または領域サイズの変更等)が生じたとしても、FUN/FBは当該変更の影響を受けない。その結果、ライブラリ275の再作成および当該ライブラリ275を参照するスタンダードプロジェクトにおいてビルドを再度実施する必要もなく、したがって、制御装置200にインストールされたFUN/FBオブジェクトファイル91eも再インストールする必要もない。
【0117】
<J.スタンダードプロジェクトの処理例>
図22と
図23は、スタンダードプロジェクトにおけるライブラリ275を作成する手順を説明する図である。本実施の形態に係るスタンダードプロジェクトの関連ファイル30のPOUソースコード92は、1または複数のFUN/FBを参照する(呼出す)。サポート装置100は、第2モードが指示された場合、ユーザ操作に基づき、指定されたPOUソースコード92から、当該POUが参照するFUN/FBのオブジェクトファイル91eのみからなるPOUオブジェクトファイル92eをビルドする。
【0118】
より具体的には、サポート装置100は、GUIモジュール258として、
図22と
図23の画面を表示する。サポート装置100は、
図22の画面でボタン291の操作を受付けると、
図23の画面を表示し、スタンダードプロジェクトの関連ファイル30のPOUの選択301を指定する操作を受付ける。また、
図22のボタン292に操作を受付けると、サポート装置100は、選択されたPOUを構成するFUN/FBについて、利用条件274を満たすようなFUN/FBのオブジェクトファイル91eを生成し、生成されたFUN/FBオブジェクトファイル91eを保存するライブラリ275を作成する。また、サポート装置100は、作成されたライブラリ275のFUN/FBオブジェクトファイル91eを参照するPOUオブジェクトファイル92eをビルドするとともに、スタンダードプロジェクトの関連ファイル30から元のPOUソースコード92を削除する。このような処理によって、スタンダードプロジェクトの関連ファイル30は、ユーザが選択したPOUについて、そのソースコードは含まず、対応するPOUオブジェクトファイル92eのみを含む。また、
図22のボタン293の操作を受付けた場合、サポート装置100は、ボタン292の操作に応じて作成されたライブラリ275を削除する。
【0119】
<K.GUIの一例>
図24~
図30は、利用条件を満たすGUIによる設定方法の一例を示す図である。
図24~
図30は、サポート装置100が、GUIモジュール258として、表示部118に出力させる画面であって、ユーザからの操作を受付け可能に構成される。
図24は、
図12のステップS10およびS11において、ライブラリプロジェクトおよびスタンダードプロジェクトが適用される制御装置200の機種・バージョンの設定操作を受付けるための画面例を示す。
図24の画面では、スタンダードプロジェクトの種類311と、適用される機種・バージョンを示すデータ313が設定されて、
図25の画面では、ライブラリプロジェクトの種類312と、適用される機種・バージョンを示すデータ314が設定されている。サポート装置100は、設定されたデータ313の機種・バージョンをデータ314の機種・バージョンと比較し、比較の結果に基づき、両者は一致すると判定する。不一致のエラー通知を表示部118に出力させる。ユーザは、エラー通知に従い、一致する機種・バージョンを示すデータ313、314を設定する。
【0120】
図26は、サポート装置100が条件C32を判定した場合に表示部118に出力させせる画面例を示す。
図26の画面では、条件C32が満たされていないことの判定結果を示すデータ331が表示されている。データ331は、ライブラリ275の作成においてprogramのPOUが定義されたことを示すエラー通知を表す。ユーザは、エラー通知に従い、定義をprogramからFUN/FBに変更する。
【0121】
図27は、サポート装置100が条件C33を判定した場合に表示部118に出力させせる画面例を示す。
図27の画面では、条件C33が満たされていないことの判定結果を示すデータ341が表示されている。データ341は、ライブラリ275の作成においてFUN/FBの変数宣言部にグローバル変数等の外部変数が宣言されたことを示すエラー通知を表す。ユーザは、エラー通知に従い、変数宣言部から外部変数の宣言を削除する。
【0122】
図28は、サポート装置100が条件C34を判定した場合に表示部118に出力させせる画面例を示す。
図28の画面では、条件C34が満たされていないことの判定結果を示すデータ351が表示されている。データ351は、ライブラリ275の作成においてFUN/FBについて変数の割付けが宣言されたことを示すエラー通知を表す。ユーザは、エラー通知に従い、変数の割付けの宣言を削除する。
【0123】
図29と
図30は、サポート装置100が条件C35を判定した場合に表示部118に出力させせる画面例を示す。ライブラリ275を作成する場合に、ユーザが
図29の画面の[ライブラリ参照]のボタン371をクリックすると、
図30の画面が表示される。
図30の画面では、条件C35が満たされていないことの判定結果を示すデータ381が表示されている。データ381は、ライブラリ275の作成において当該ライブラリから他のライブラリを参照されていることを示すエラー通知を表す。ユーザは、エラー通知に従い、他のライブラリの参照を取消す。
【0124】
図31~
図33は、サポート装置100に対する指示51を入力するユーザ操作を受付けるGUIの一例を示す図である。サポート装置100は、GUIモジュール258として、
図31~
図33の画面の表示部118に表示させる。
図31は、ライブラリ275を作成するときに指示51を受付ける画面例を示す。
図31の画面は、第1モードおよび第2モードの一方を指定するために操作されるボタン261と、作成されるべきライブラリの識別子(名前)を指定するユーザ操作を受付けるためのボックス262とを含む。サポート装置100は、ボックス262で受付けた識別子のライブラリ275を、ボタン261を介して受付けた指示51が示すモードに従って作成する。このようにサポート装置100は、
図31の画面において、ユーザ操作によって指定されたライブラリ275の識別子と作成モードの両方を示す指示51を受付ける。サポート装置100は複数種類のライブラリ275を作成し保存する構成を備えることができ、当該構成において、サポート装置100は、各ライブラリについて、当該ライブラリについて第1モードまたは第2モードを指定する指示51を受付ける。
【0125】
図32と
図33は、スタンダードプロジェクトの関連ファイル30のPOUソースコード92を作成するときに表示される画面例を示す。
図32の画面のボックス276は、POUソースコード92にライブラリ275の「参照命令要素」を設定するためのユーザ操作を受付け可能に構成されている。サポート装置100は、ボックス276を介してユーザ操作を受付けると、
図33の画面を表示する。
図33の画面は、参照するライブラリ275を指定する操作を受付けるボックス282と、参照を指示する操作を受付けるボックス281を含む。サポート装置100が複数種類のライブラリ275を作成し保存する構成において、サポート装置100は、スタンダードプロジェクトの関連ファイル30を作成する場合、複数のライブラリのうち指定されたライブラリを参照することを指示する「参照命令要素」を有したPOUソースコード92を作成する。参照するべきライブラリ275の指定は、上記に述べた機種・バージョンの指定を利用して実現することもできる。
【0126】
<L.プログラム>
開発支援プログラム50を格納する記憶装置120は、例えば、ハードディスクドライブ、ソリッドステートドライブ等の補助記憶装置であり、不揮発的に格納する。また、開発支援プログラム50は、記憶装置120とは異なる記憶媒体に格納されてもよい。このような記憶媒体は、コンピュータ、他装置、機械等が記録されたプログラム等の情報を読み取り可能なように、当該プログラム等の情報を、電気的、磁気的、光学的、機械的または化学的作用によって蓄積する媒体である。サポート装置100は、このような記憶媒体から、開発支援プログラム50および/または開発支援プログラム50に関連のプログラムおよびデータを取得してもよく、または、ネットワークを介して他の装置からダウンロードされることで取得してもよい。
【0127】
<M.付記>
上述したような実施の形態は、以下のような技術思想を含む。
[構成1]
対象(6)を制御する制御装置(200)用の制御プログラム(210)の開発を支援するための開発支援装置(200)であって、
前記制御プログラムのソースコード(271)は、秘匿化対象の第1ソースコード(211、91s)とそれ以外の第2ソースコード(214、90、92)を含み、
前記開発支援装置に対する指示(51)を受付ける受付部(115)と、
前記受付部が受付けた指示は、第1モードまたは第2モードのいずれを示すかを判定する判定部(251)と、
前記制御プログラムのソースコードからオブジェクトコードを生成し出力するコード生成部(254)と、を備え、
前記コード生成部は、
前記受付けた指示は前記第1モードを示すとの判定に応じて、前記第1ソースコード(91s)について、当該第1ソースコードと当該第1ソースコードから生成した第1オブジェクトコード(91e)の両方を出力し、
前記受付けた指示は前記第2モードを示すとの判定に応じて、前記第1ソースコード(91s)は出力せずに当該第1ソースコードから生成した第1オブジェクトコード(91e)を出力する、開発支援装置。
[構成2]
前記開発支援装置が前記制御装置と通信するための通信インターフェイス(111)と、
前記コード生成部から出力されるコードを、前記通信インターフェイスを介して前記制御装置に転送する転送部(257)と、をさらに備える、構成1に記載の開発支援装置。
[構成3]
前記制御プログラムのライブラリ(275)と、
前記第1モードおよび前記第2モードそれぞれにおいて、当該モードにおいて前記コード生成部から出力されるコードを前記制御プログラムのライブラリに保存する第1プロジェクトと、をさらに備える、構成1または2に記載の開発支援装置。
[構成4]
前記制御装置への転送用ファイルを生成する第2プロジェクトをさらに備え、
前記第2ソースコードは、前記ライブラリに保存されるコードの参照を指示する参照命令要素を含み、
前記第2プロジェクトは、
前記第1モードおよび前記第2モードそれぞれにおいて、当該モードにおいて前記ライブラリに保存されたコードを、前記第2ソースコードの前記参照命令要素に従って参照し前記ファイルに含める、構成3に記載の開発支援装置。
[構成5]
対象(6)を制御する制御装置(200)用の制御プログラム(210)の開発を支援する方法であって、
前記制御プログラムのソースコード(271)は、秘匿化対象の第1ソースコード(211、91s)とそれ以外の第2ソースコード(214、90、92)を含み、
前記方法は、
指示(51)を受付けること、
受付けた指示は、第1モードまたは第2モードのいずれを示すかを判定すること、
前記制御プログラムのソースコードからオブジェクトコードを生成し出力すること、を備え、
前記オブジェクトコードを生成し出力することは、
前記受付けた指示は前記第1モードを示すとの判定に応じて、前記第1ソースコード(91s)について、当該第1ソースコードと当該第1ソースコードから生成した第1オブジェクトコード(91e)の両方を出力すること、
前記受付けた指示は前記第2モードを示すとの判定に応じて、前記第1ソースコードは出力せずに当該第1ソースコードから生成した第1オブジェクトコード(91e)
を出力することを含む、開発支援方法。
[構成6]
対象(6)を制御する制御装置(200)用の制御プログラム(210)の開発を支援する方法をコンピュータ(100)に実行させるための開発支援プログラム(50)であって、
前記制御プログラムのソースコード(271)は、秘匿化対象の第1ソースコード(211、91s)とそれ以外の第2ソースコード(214、90、92)を含み、
前記方法は、
指示(51)を受付けること、
受付けた指示は、第1モードまたは第2モードのいずれを示すかを判定すること、
前記制御プログラムのソースコードからオブジェクトコードを生成し出力すること、を備え、
前記オブジェクトコードを生成し出力することは、
前記受付けた指示は前記第1モードを示すとの判定に応じて、前記第1ソースコード(91s)について、当該第1ソースコードと当該第1ソースコードから生成した第1オブジェクトコード(91e)の両方を出力すること、
前記受付けた指示は前記第2モードを示すとの判定に応じて、前記第1ソースコード(91s)は出力せずに当該第1ソースコードから生成した第1オブジェクトコード(91e)を出力することを含む、開発支援プログラム。
【0128】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0129】
6 機器、10 FAシステム、30,40 関連ファイル、50 開発支援プログラム、51 指示、90,272 変数定義リスト、271 ソースコード、217 実行可能ファイル、91e,92e,273 オブジェクトファイル、100 サポート装置、102 プロセッサ、104 主メモリ、105 光ディスク、111 通信インターフェイス、115 操作部、117 表示インターフェイス、118 表示部、120 記憶装置、125 内部バス、200 制御装置、210 制御プログラム、210s ソースプログラム、211 第1ソースコード、212 コンパイラ、213 パーサ、214 第2ソースコード、215 リスト生成モジュール、216 リンカ、218 条件判定モジュール、219 メモリ領域、250 プログラミングアプリケーション、251 モード判定モジュール、252 エディタ、254 ビルダ、256 デバッガ、257 ローダ、258 GUIモジュール、260 判定モジュール、270,299 データ格納部、274 利用条件、275 ライブラリ、280 関連アプリケーション、294 コンフィグ情報。