IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 三菱電機株式会社の特許一覧

<>
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図1
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図2
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図3
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図4
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図5
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図6
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図7
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図8
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図9
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図10
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図11
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図12
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図13
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図14
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図15
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図16
  • 特許-翻訳プログラム、翻訳装置及び翻訳方法 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2023-12-14
(45)【発行日】2023-12-22
(54)【発明の名称】翻訳プログラム、翻訳装置及び翻訳方法
(51)【国際特許分類】
   G06F 8/40 20180101AFI20231215BHJP
【FI】
G06F8/40
【請求項の数】 13
(21)【出願番号】P 2023564117
(86)(22)【出願日】2023-07-20
(86)【国際出願番号】 JP2023026646
【審査請求日】2023-10-19
【早期審査対象出願】
(73)【特許権者】
【識別番号】000006013
【氏名又は名称】三菱電機株式会社
(74)【代理人】
【識別番号】100095407
【弁理士】
【氏名又は名称】木村 満
(74)【代理人】
【識別番号】100131152
【弁理士】
【氏名又は名称】八島 耕司
(74)【代理人】
【識別番号】100147924
【弁理士】
【氏名又は名称】美恵 英樹
(74)【代理人】
【識別番号】100148149
【弁理士】
【氏名又は名称】渡邉 幸男
(74)【代理人】
【識別番号】100181618
【弁理士】
【氏名又は名称】宮脇 良平
(74)【代理人】
【識別番号】100174388
【弁理士】
【氏名又は名称】龍竹 史朗
(72)【発明者】
【氏名】遠山 治
(72)【発明者】
【氏名】跡部 浩士
(72)【発明者】
【氏名】山本 亮
(72)【発明者】
【氏名】村野 弘樹
【審査官】武田 広太郎
(56)【参考文献】
【文献】特開2008-015826(JP,A)
【文献】米国特許第7921412(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/40
(57)【特許請求の範囲】
【請求項1】
プログラマブルコントローラが被制御機器を制御するために実行するプログラムの第1言語で記述された第1ソースコードを、前記第1言語とは異なる第2言語で記述された第2ソースコードに翻訳する翻訳装置を、
前記第1ソースコードに含まれる変数のうちの、前記プログラムが実行される際の監視対象である値が代入される監視変数の指定を受け付ける受付手段、
前記第1ソースコードのうちの、前記プログラマブルコントローラが有する共有メモリであって前記被制御機器と共有される前記共有メモリに値が格納される共有メモリ変数に関する変数コードを、前記共有メモリ変数が前記監視変数である場合には、前記共有メモリに値が格納される変数に関する第1変換コードに変換し、前記共有メモリ変数が前記監視変数とは異なる場合には、前記プログラマブルコントローラが有する前記共有メモリとは異なる非共有メモリに値が格納される変数に関する第2変換コードに変換することで、前記第1ソースコードを前記第2ソースコードに翻訳する翻訳手段、
として機能させるための翻訳プログラム。
【請求項2】
前記第1ソースコードは、前記非共有メモリに変数の値を格納することなく前記プログラマブルコントローラによって実行される前記プログラムのソースコードである、
請求項1に記載の翻訳プログラム。
【請求項3】
前記第1言語は、インストラクション・リスト、ラダー・ダイアグラム、ファンクションブロック・ダイアグラム、ストラクチャード・テキスト又はシーケンス・ファンクション・チャートである、
請求項1に記載の翻訳プログラム。
【請求項4】
前記変数コードが前記第2変換コードに変換された場合の前記第2ソースコードの前記プログラムは、前記変数コードが前記第1変換コードに変換された場合の前記第2ソースコードの前記プログラムよりも、前記プログラマブルコントローラによって実行されたときの実行時間が短い、
請求項1に記載の翻訳プログラム。
【請求項5】
前記翻訳装置を、
前記第2ソースコードの前記プログラムを実行した場合の実行時間の長さに対応する指標値を算出する指標値算出手段、
算出された前記指標値を提示する指標値提示手段、としてさらに機能させ、
前記受付手段は、前記指標値提示手段によって前記指標値が提示された後に前記監視変数の指定を再度受け付け、
前記翻訳手段は、再度受け付けられた指定に従って前記第1ソースコードを前記第2ソースコードに翻訳する、
請求項1から4のいずれか一項に記載の翻訳プログラム。
【請求項6】
前記指標値算出手段は、前記第2ソースコードの前記プログラムが実行される際に前記共有メモリが参照される回数に基づいて前記指標値を算出する、
請求項5に記載の翻訳プログラム。
【請求項7】
前記指標値算出手段は、前記回数と、前記第2ソースコードに含まれる予め定められた条件を満たす変数が前記監視変数である場合において前記プログラムが実行されるときに前記共有メモリが参照される基準回数と、の比較に基づいて前記指標値を算出する、
請求項6に記載の翻訳プログラム。
【請求項8】
前記翻訳装置を、
前記第2ソースコードの前記プログラムが実行される際の前記非共有メモリの使用量を算出する使用量算出手段、
算出された前記使用量に関する情報を提示する情報提示手段、としてさらに機能させ、
前記受付手段は、前記情報提示手段によって前記情報が提示された後に前記監視変数の指定を再度受け付け、
前記翻訳手段は、再度受け付けられた指定に従って前記第1ソースコードを前記第2ソースコードに翻訳する、
請求項1からのいずれか一項に記載の翻訳プログラム。
【請求項9】
前記使用量算出手段は、前記第2ソースコードに含まれる変数のうちの前記非共有メモリに値が格納される変数のサイズの総計を、前記使用量として算出し、
前記情報提示手段は、前記使用量の削減を支援する前記情報を提示する、
請求項8に記載の翻訳プログラム。
【請求項10】
前記受付手段は、前記監視変数として個別に指定された変数の名称のリストを受け付ける、
請求項1からのいずれか一項に記載の翻訳プログラム。
【請求項11】
前記受付手段は、前記監視変数となる変数が有すべき属性の指定を受け付け、
前記属性は、前記プログラマブルコントローラの入出力、グローバル変数、プログラム・オーガナイゼーション・ユニット若しくはファンクションブロックである変数の種別、前記第1言語の特定の制御構文の条件式で使用されること、前記条件式とは異なる演算式において使用されること、又は、特定の文字列を含む名称を有することである、
請求項1からのいずれか一項に記載の翻訳プログラム。
【請求項12】
プログラマブルコントローラが被制御機器を制御するために実行するプログラムの第1言語で記述された第1ソースコードを、前記第1言語とは異なる第2言語で記述された第2ソースコードに翻訳する翻訳装置であって、
前記第1ソースコードに含まれる変数のうちの、前記プログラムが実行される際の監視対象である値が代入される監視変数の指定を受け付ける受付手段と、
前記第1ソースコードのうちの、前記プログラマブルコントローラが有する共有メモリであって前記被制御機器と共有される前記共有メモリに値が格納される共有メモリ変数に関する変数コードを、前記共有メモリ変数が前記監視変数である場合には、前記共有メモリに値が格納される変数に関する第1変換コードに変換し、前記共有メモリ変数が前記監視変数とは異なる場合には、前記プログラマブルコントローラが有する前記共有メモリとは異なる非共有メモリに値が格納される変数に関する第2変換コードに変換することで、前記第1ソースコードを前記第2ソースコードに翻訳する翻訳手段と、
を備える翻訳装置。
【請求項13】
プログラマブルコントローラが被制御機器を制御するために実行するプログラムの第1言語で記述された第1ソースコードを、前記第1言語とは異なる第2言語で記述された第2ソースコードに翻訳する翻訳装置によって実行される翻訳方法であって、
受付手段が、前記第1ソースコードに含まれる変数のうちの、前記プログラムが実行される際の監視対象である値が代入される監視変数の指定を受け付け、
翻訳手段が、前記第1ソースコードのうちの、前記プログラマブルコントローラが有する共有メモリであって前記被制御機器と共有される前記共有メモリに値が格納される共有メモリ変数に関する変数コードを、前記共有メモリ変数が前記監視変数である場合には、前記共有メモリに値が格納される変数に関する第1変換コードに変換し、前記共有メモリ変数が前記監視変数とは異なる場合には、前記プログラマブルコントローラが有する前記共有メモリとは異なる非共有メモリに値が格納される変数に関する第2変換コードに変換することで、前記第1ソースコードを前記第2ソースコードに翻訳する、
ことを含む翻訳方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、翻訳プログラム、翻訳装置及び翻訳方法に関する。
【背景技術】
【0002】
FA(Factory Automation)の現場では、種々の機器に対するシーケンス制御が実施される。このシーケンス制御の内容を規定するためのプログラミング言語は、プログラマブルコントローラの登場以降、そのベンダーによって開発されたため、多数のプログラミング言語がそれぞれ独自に発展してきた。そのため、IEC(International Electrotechnical Commission、国際電気標準会議)が、シーケンス制御向けの5種類のプログラミング言語を定義するIEC61131-3を発行した。
【0003】
しかしながら、シーケンス制御用のプログラミング言語で記述されたプログラムには、依然として機種依存性が高い側面がある。具体的には、あるベンダーのプログラマブルコントローラで実行可能なプログラムは、他のベンダーの制御装置では実行することができず、プログラムを作り直さなければならないケースが多い。
【0004】
そこで、機種依存性の低いプログラムを得るための技術が提案されている(例えば、特許文献1を参照)。特許文献1には、シーケンス命令言語で記述されたプログラムを、汎用コンピュータ用の高級言語で記述されたプログラムに翻訳するプログラム生成装置について記載されている。この装置によれば、シーケンス命令言語で記述されたプログラムと同等の機能を発揮する、機種依存性の低いプログラムを得ることができる。
【先行技術文献】
【特許文献】
【0005】
【文献】特開平07-295612号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1のような翻訳により得たプログラムは、プログラマブルコントローラにおいて実行されているプログラムの挙動をデバッグ及び将来の開発のために観察したいという現場の要望を満たさないことがある。そのため、現場の作業者は、そのような要望を満たすプログラムが得られるまで、シーケンス命令言語で翻訳対象のプログラムを書き直しては翻訳するという試行を繰り返さなければならず、煩雑な作業が発生するおそれがあった。また、要望に沿ったプログラムを一度作成したとしても、他の挙動を観察したいという新たな要望が生じる度に、シーケンス命令言語でプログラムを書き直すという煩雑な作業も生じ得る。したがって、シーケンス制御用のプログラムを翻訳して、その挙動を観察したいという要望を満たす新たなプログラムを得るための作業負担を軽減する余地がある。
【0007】
本開示は、上述の事情の下になされたもので、シーケンス制御用のプログラムを翻訳して、その挙動を観察したいという要望を満たす新たなプログラムを得るための作業負担を軽減することを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するため、本開示の翻訳プログラムは、プログラマブルコントローラが被制御機器を制御するために実行するプログラムの第1言語で記述された第1ソースコードを、第1言語とは異なる第2言語で記述された第2ソースコードに翻訳する翻訳装置を、第1ソースコードに含まれる変数のうちの、プログラムが実行される際の監視対象である値が代入される監視変数の指定を受け付ける受付手段、第1ソースコードのうちの、プログラマブルコントローラが有する共有メモリであって被制御機器と共有される共有メモリに値が格納される共有メモリ変数に関する変数コードを、共有メモリ変数が監視変数である場合には、共有メモリに値が格納される変数に関する第1変換コードに変換し、共有メモリ変数が監視変数とは異なる場合には、プログラマブルコントローラが有する共有メモリとは異なる非共有メモリに値が格納される変数に関する第2変換コードに変換することで、第1ソースコードを第2ソースコードに翻訳する翻訳手段、として機能させる。
【発明の効果】
【0009】
本開示によれば、シーケンス制御用のプログラムを翻訳して、その挙動を観察したいという要望を満たす新たなプログラムを得るための作業負担を軽減することができる。
【図面の簡単な説明】
【0010】
図1】実施の形態1に係るPLC(Programmable Logic Controller)の概要を示す図
図2】比較例に係るプログラムの実行を示す第1の図
図3】比較例に係るプログラムの実行を示す第2の図
図4】実施の形態1に係るPLCプログラム開発環境のハードウェア構成を示す図
図5】実施の形態1に係るPLCプログラム開発環境の機能的な構成を示す図
図6】実施の形態1に係る翻訳の第1の例を示す図
図7】実施の形態1に係る翻訳の第2の例を示す図
図8】実施の形態1に係る監視変数リストの一例を示す図
図9】実施の形態1に係る第2ソースコードの記述例を示す図
図10】実施の形態1に係る監視変数が指定された翻訳の第1の例を示す図
図11】実施の形態1に係る監視変数が指定された翻訳の第2の例を示す図
図12】実施の形態1に係る翻訳処理を示すフローチャート
図13】実施の形態1に係る指標値算出処理を示すフローチャート
図14】実施の形態2に係るPLCプログラム開発環境の機能的な構成を示す図
図15】実施の形態2に係る属性情報を示す図
図16】変形例に係る監視変数を指定する例を示す図
図17】実施の形態3に係るPLCプログラム開発環境の機能的な構成を示す図
【発明を実施するための形態】
【0011】
以下、本開示の実施の形態に係るPLCプログラム開発環境について、図面を参照しつつ詳細に説明する。
【0012】
実施の形態1.
本実施の形態に係るPLCプログラム開発環境10は、図1に示されるように、プログラマブルコントローラであるPLC30に接続されて、PLC30に被制御機器40を制御させるためのプログラム23のユーザによる開発を支援する支援端末に相当する。詳細には、PLCプログラム開発環境10は、シーケンス制御用の第1言語で記述された第1ソースコード21を、第1言語とは異なる汎用の高級言語で記述された第2ソースコード22に翻訳して、当該第2ソースコード22をコンパイルして得たプログラム23を、PLC30の非共有メモリ302に書き込む翻訳装置の一例に相当する。プログラム23は、実行される際に、当該プログラム23で用いられる監視変数の値を共有メモリ301に格納する。共有メモリ301は、被制御機器40と共有されるメモリであり、そのデータを外部からリアルタイムに取得するためのツールが既に用意されているケースが多いため、当該ツールを利用すれば監視変数の値を監視することによりプログラム23の挙動を容易に観察することができる。図1では、支援端末としてのPLCプログラム開発環境10が有する監視部17によって監視変数の値が監視されることが示されている。
【0013】
監視変数が多い場合には、プログラム23の挙動を詳細に観察することができるが、非共有メモリ302のプログラム23が共有メモリ301にアクセスする手順も増えることによりプログラム23の実行速度が遅くなる。一方、監視変数が少ない場合には、プログラム23の挙動について観察可能な範囲が狭くなるが、実行速度は速くなる。実行される際の挙動を観察可能であるというプログラムの性質を、以下では観測性と表記することがある。観測性と実行速度とは、上述のようにトレードオフの関係にあり、PLCプログラム開発環境10のユーザは、監視変数を適宜指定することによって、その要望が満たされるように観測性及び実行速度を調整することができる。
【0014】
<PLC30によるプログラムの実行>
PLC30は、工場において被制御機器40を制御する制御装置である。PLC30の制御によって、例えば、ラインを流れるワークに対する加工及び検査に代表される種々の工程が実現される。なお、図1には、1つの被制御機器40が代表的に示されているが、通常は、複数の被制御機器40が連携するように制御される。例えば、センサである被制御機器40によるセンシング結果がPLC30に入力され、この入力に基づいてプログラムにより決定された運転命令が、ロボットである被制御機器40にPLC30から出力されることで、ワークに対する加工処理が施される。PLC30と被制御機器40とは、電流信号又は電圧信号を伝送する信号線、又は、フィールドネットワーク及びLAN(Local Area Network)のようなネットワークを介して接続される。
【0015】
PLC30は、上述の共有メモリ301及び非共有メモリ302の他に、被制御機器40から信号が入力され又は被制御機器40に信号を出力するためのI/O(Input/Output)端子31と、プロセッサ32と、OS(Operating System)33と、OS33上で動作する制御プラットフォーム34と、を有する。
【0016】
共有メモリ301及び非共有メモリ302はそれぞれ、RAM(Random Access Memory)に相当する。プロセッサ32は、処理回路としてのCPU(Central Processing Unit)又はMPU(Micro-Processing Unit)を含み、プログラムを実行する。
【0017】
制御プラットフォーム34は、OS33上で動作するアプリケーションソフトウェアのうちの、PLC30による制御の基盤となる機能を発揮するものである。詳細には、制御プラットフォーム34は、予め定められたタイミングで他のプログラムを呼び出して実行し、その実行結果が保存される共有メモリ301を管理する。制御プラットフォーム34によって呼び出されるプログラムは、複数であってもよい。図1に示されるプログラム23についても、複数であってもよい。プログラムが呼び出されるタイミングは、プログラム毎に異なってもよく、例えば、特定の時刻、予め定められた周期ごと、又は、特定のイベントが発生したタイミングである。
【0018】
共有メモリ301には、上述の実行結果に加えて、制御プラットフォーム34によってI/O端子31の状態と定期的に同期される入出力情報が格納される。これにより、被制御機器40からPLC30に入力される信号が共有メモリ301に反映され、共有メモリ301のデータが、PLC30から被制御機器40に出力される信号に反映される。また、PLC30に保存されたすべてのプログラムは、通常、制御プラットフォーム34を介して共有メモリ301のデータにアクセスすることができるため、共有メモリ301内のデータは、複数のプログラム間のグローバルなデータとして扱われる。共有メモリ301は、PLC30の基本的な機能を発揮するための標準的な構成要素であり、その容量は、PLC30のカタログに掲載される仕様値となる。
【0019】
また、第1ソースコード21が図1に示される翻訳部12によって第2ソースコード22に翻訳されることなく、第1ソースコード21のプログラム211が実行される場合には、共有メモリ301には、図2に示されるように、当該プログラム211がロードされ、第1ソースコード21に含まれるすべての変数の値も共有メモリ301に格納される。なお、共有メモリ301に値が格納される変数は、デバイス又はラベルとも呼ばれる。
【0020】
第1ソースコード21を記述するための第1言語は、PLC30にシーケンス制御を実行させるためのプログラミング言語であって、例えば、IEC61131-3において規定された、インストラクション・リスト、ラダー・ダイアグラム、ファンクションブロック・ダイアグラム、ストラクチャード・テキスト又はシーケンス・ファンクション・チャートである。以下では、ストラクチャード・テキストを適宜ST(Structured Text)言語と表記し、インストラクション・リストをIL(Instruction List)言語と表記することがある。
【0021】
図2の例は、PLC30によって従来なされてきたプログラムの実行態様に相当する。この態様では、すべての変数の値を観測することが可能であるが、第1ソースコード21及びプログラム211の機種依存性が高い。図2から分かるように、第1ソースコード21は、非共有メモリ302に変数の値を格納することなくPLC30によって実行されるプログラム211のソースコードの一例に相当する。
【0022】
一方、第1ソースコード21が第2ソースコード22に翻訳されるものの、その際に監視変数が設定されない場合には、図3に示されるように、プログラム23が非共有メモリ302に書き込まれて実行され、第2ソースコード22に含まれる変数の値も非共有メモリ302に格納される。
【0023】
図3の例は、上述の特許文献1の技術に対応している。図3の例において第2ソースコード22を記述するための第2言語が、一般的な高級言語であって、プログラム23が、汎用プロセッサによって実行される場合には、機種依存性が低くなるが観測性も低くなる。ここで、高級言語は、例えばC言語であって、プログラム23は、第2ソースコード22からコンパイルされたオブジェクトコードに相当する。ただし、第2言語は、C言語に限定されず、他の言語であってもよい。
【0024】
また、プログラム23を実行する汎用プロセッサは、制御プラットフォーム34を実行するプロセッサ32と同一であってもよいし異なってもよい。図1,3では、プロセッサ32を代表的に1つだけ示しているが、PLC30は、制御プラットフォーム34を動作させるためのプロセッサ32と、プログラム23を実行するための汎用のプロセッサ32と、を別個に有していてもよい。なお、制御プラットフォーム34を実行するプロセッサ32は、PLC30に専用のプロセッサであってもよいし、汎用プロセッサであってもよい。
【0025】
一般的な高級言語で記述されたプログラムについては、汎用プロセッサで高速に実行するための技術が蓄積されているため、図3に示されるプログラム23は、高速に実行することができる。プログラム23の実行速度を確保するためには、プログラム23がロードされる非共有メモリ302が、制御プラットフォーム34によって管理される共有メモリ301とは異なる汎用プロセッサ専用のメモリであることが望ましい。汎用プロセッサによるプログラムを実行するPLC30の機能が、そのベンダーによって標準外あるいはオプションとして扱われる場合には、非共有メモリ302は、PLC30における付属的な構成要素となり得るため、共有メモリ301とは異なる記憶装置として実装される。
【0026】
なお、プログラム23によって扱われる変数の値が非共有メモリ302に格納されることを強調するために、図3においては共有メモリ301に格納される値が省略されている。実際には、制御プラットフォーム34によってプログラム23が呼び出されて実行されるため、プログラム23によって扱われる共有メモリ301のデータも存在する。そのようなデータとして、例えば、プログラム23に対する入力データ、プログラム23の実行結果、プログラム23によって扱われるPLC30の入出力データ、及び、プログラム23が他のプログラムと共有するグローバルデータが挙げられる。これらのデータが変数の値として共有メモリ301に格納され得る。
【0027】
ただし、プログラム23の内部で完結して扱われる中間データ及びローカル変数の値については、図3の例では、非共有メモリ302に格納されている。これに対して、プログラム23の実行時の挙動を観察するために、本実施の形態に係るPLCプログラム開発環境10は、図1に示されるように、プログラム23によって扱われる変数のうちの少なくとも一部の監視変数の値を共有メモリ301に格納するような第2ソースコード22を生成する。すなわち、PLCプログラム開発環境10は、図3の例において非共有メモリ302に格納されている変数の値の格納先を、図1に示されるように共有メモリ301に適宜変更するものといえる。
【0028】
<PLCプログラム開発環境10のハードウェア構成>
PLCプログラム開発環境10は、産業用PC(Personal Computer)であって、USB(Universal Serial Bus)ケーブルのような通信線を介して、又は上述のネットワークを介して、PLC30に接続される。PLCプログラム開発環境10は、コンピュータとして機能するためのハードウェア要素によって構成される。詳細には、図4に示されるように、PLCプログラム開発環境10は、プロセッサ101と、主記憶部102と、補助記憶部103と、入力部104と、出力部105と、通信部106と、を有する。主記憶部102、補助記憶部103、入力部104、出力部105及び通信部106はいずれも、内部バス107を介してプロセッサ101に接続される。
【0029】
プロセッサ101は、処理回路としてのCPU又はMPUを含む。プロセッサ101は、補助記憶部103に記憶されるプログラムP1を実行することにより、種々の機能を実現して、後述の処理を実行する。プログラムP1は、いわゆるエンジニアリングツールに相当し、PLCプログラム開発環境10を後述のように機能させる翻訳プログラムの一例に相当する。
【0030】
主記憶部102は、RAMを含む。主記憶部102には、補助記憶部103からプログラムP1がロードされる。そして、主記憶部102は、プロセッサ101の作業領域として用いられる。
【0031】
補助記憶部103は、EEPROM(Electrically Erasable Programmable Read-Only Memory)及びHDD(Hard Disk Drive)に代表される不揮発性メモリを含む。補助記憶部103は、プログラムP1の他に、プロセッサ101の処理に用いられる種々のデータを記憶する。補助記憶部103は、プロセッサ101の指示に従って、プロセッサ101によって利用されるデータをプロセッサ101に供給する。また、補助記憶部103は、プロセッサ101から供給されたデータを記憶する。
【0032】
入力部104は、ハードウェアスイッチ、入力キー、キーボード及びポインティングデバイスに代表される入力デバイスを含む。入力部104は、ユーザによって入力された情報を取得して、取得した情報をプロセッサ101に通知する。
【0033】
出力部105は、LED(Light Emitting Diode)、LCD(Liquid Crystal Display)及びスピーカに代表される出力デバイスを含む。出力部105は、プロセッサ101の指示に従って種々の情報をユーザに提示する。
【0034】
通信部106は、外部の装置と通信するための通信インタフェース回路を含む。通信部106は、外部から信号を受信して、この信号により示されるデータをプロセッサ101へ出力する。また、通信部106は、プロセッサ101から出力されたデータを示す信号を外部の装置へ送信する。
【0035】
<PLCプログラム開発環境10の機能>
上述のハードウェア構成が協働することにより、PLCプログラム開発環境10は、PLC30によって実行されるプログラムの開発環境であるエンジニアリングツールとして機能する。このエンジニアリングツールによって、第1ソースコード21を第2ソースコード22に翻訳する機能が提供される。PLCプログラム開発環境10は、プログラマブルコントローラが被制御機器を制御するために実行するプログラムの第1言語で記述された第1ソースコードを、第1言語とは異なる第2言語で記述された第2ソースコードに翻訳する翻訳装置の一例に相当する。PLCプログラム開発環境10は、図5に示されるように、その機能として、第1ソースコード21を取得する取得部11と、第1ソースコード21を第2ソースコード22に翻訳する翻訳部12と、第1ソースコード21の翻訳に必要な情報の設定を受け付ける受付部13と、第2ソースコード22が実行されるときの実行速度を示す指標値を算出する指標値算出部14と、算出された指標値を提示する指標値提示部15と、第2ソースコード22をコンパイルするコンパイラ16と、監視変数の値を監視するための監視部17と、を有する。翻訳部12、コンパイラ16及び監視部17については、図1にも示されているが、その機能のより詳細な説明を以下で述べる。
【0036】
取得部11は、主として入力部104又は通信部106によって実現される。取得部11は、ユーザがエンジニアリングツールを使用して作成した第1ソースコード21を取得してもよいし、ユーザによって指定されたアドレスに保存されている第1ソースコード21を読み出すことで取得してもよい。
【0037】
翻訳部12は、主としてプロセッサ101によって実現される。翻訳部12は、第1ソースコード21を解析して、第1ソースコード21を構成するコード部品を、当該コード部品に対応する第2言語のコード部品に順次変換することにより、第2ソースコード22を生成する。翻訳は、第1のソースコードを、プログラムを実行するPLC30が同等の機能を発揮するような別形式の第2のソースコードに変換することを意味する。
【0038】
図6,7にはそれぞれ、翻訳部12による翻訳の一例が示されている。図6の例では、第1言語であるST言語のIF文が、第2言語であるC言語のif文に変換されている。また、図7の例では、ST言語のFOR文が、C言語のfor文に変換されている。その際に、第1ソースコード21に含まれる変数COND,VAR0,ITRがそれぞれ、第2ソースコード22に含まれる変数Cond,Var0,Itrに変換されている。図6,7に示される第2ソースコード22の変数はいずれも、監視変数ではなく、その値が非共有メモリ302に格納されることとなる。すなわち、図6,7の第2ソースコード22によれば、図3に示される態様で実行されるプログラム23が生成される。
【0039】
受付部13は、主として入力部104又は通信部106によって実現される。受付部13は、第1ソースコード21に含まれる変数のうちの、翻訳の際に監視変数とすべき変数の指定を受け付ける。受付部13は、ユーザによって入力される監視変数リスト51を受け付けてもよいし、ユーザによって指定されたアドレスに保存されている監視変数リスト51を読み出すことで受け付けてもよい。図8には、監視変数リスト51の一例が示されている。この監視変数リスト51によれば、図6,7に示される第1ソースコード21のうちの、COND及びVAR0の2つの変数の値が監視対象として設定される。受付部13は、第1ソースコードに含まれる変数のうちの、プログラムが実行される際の監視対象である値が代入される監視変数の指定を受け付ける受付手段の一例に相当する。
【0040】
図9には、監視変数の設定に応じて生成される第2言語のコードの例が示されている。図9に示される「Var0=Var1+100;」というコード61は、監視変数が設定されない場合に、変数Var1の値と100との和を変数Var0に代入する演算を表す。「Var0=API_PF_READ(VAR1)+100;」というコード62は、コード61と同等の演算において、VAR1を監視変数として、共有メモリ301に格納されている当該監視変数の値を「API_PF_READ」という関数を利用して読み出すことを表す。なお、変数Var1は、変数VAR1に対応する。
【0041】
また、図9に示される「API_PF_WRITE(VAR0,Var1+100);」というコード63は、コード61と同等の演算において、VAR0を監視変数として、当該監視変数の値として、「API_PF_WRITE」という関数を利用して演算結果を書き込むことを表す。また、コード64は、VAR0及びVAR1の双方を監視変数として、コード61と同等の演算を実行することを表す。図9に示される関数は、制御プラットフォーム34のAPI(Application Programming Interface)として提供される。
【0042】
図9のような関数を利用して、図6のIF文に図8の監視変数リスト51を適用して翻訳した例が、図10に示されている。図10では、図6の第2ソースコード22から変更された部分が太字で示されている。例えば、監視変数であるCONDの値を読み出すための記述が、「API_PF_READ(COND)」とされ、監視変数であるVAR0に100の値を書き込むための記述が、「API_PF_WRITE(VAR0,100)」とされている。また、図7のFOR文に図8の監視変数リスト51を適用して翻訳した例が、図11に示されている。
【0043】
図5に戻り、指標値算出部14は、主としてプロセッサ101によって実現される。指標値算出部14は、受付部13によって受け付けられた監視変数の指定に従って生成された第2ソースコード22を実行したときの実行速度の指標値を算出する。この指標値の算出方法については後述する。
【0044】
指標値提示部15は、主として出力部105によって実現される。指標値提示部15は、算出された指標値をユーザに対して提示することにより、ユーザによる監視変数の指定によりどの程度実行速度が速くなるかを通知し、観測性と実行速度とのトレードオフに関する判断材料をユーザにフィードバックする。この指標値を提示されたユーザは、監視変数を再度指定して第1ソースコード21を翻訳させることにより、観測性と実行速度とを調整する。指標値提示部15は、算出された指標値を提示する指標値提示手段の一例に相当する。
【0045】
コンパイラ16は、主としてプロセッサ101によって実現される。第2言語がC言語である場合のコンパイラ16は、例えば、gcc(GNU Compiler Collection)又はClangである。
【0046】
監視部17は、主としてプロセッサ101,通信部106及び出力部105の協働により実現される。監視部17は、共有メモリ301に格納されている監視変数の値を読み出してユーザに提示する。
【0047】
<翻訳処理>
続いて、PLCプログラム開発環境10によって実行される翻訳処理について、図12~13を用いて説明する。翻訳処理は、翻訳装置によって実行される翻訳方法の一例に相当する。
【0048】
翻訳処理では、図12に示されるように、取得部11が第1ソースコード21を取得して(ステップS1)、受付部13が、監視変数の指定を受け付ける(ステップS2)。そして、翻訳部12が、第1ソースコード21の字句及び構文を解析する(ステップS3)。具体的には、翻訳部12は、第1ソースコード21を字句に分解し、字句の並びから文の意味を解析することにより、第1ソースコード21から、第2言語に変換可能なコード部品を抽出する。
【0049】
次に、翻訳部12は、ステップS3で得たコード部品から、未選択のコード部品を先頭から1つ選択し(ステップS4)、選択したコード部品が変数の記述であるか否かを判定する(ステップS5)。選択したコード部品が変数でないと判定した場合(ステップS5;No)、翻訳部12は、選択したコード部品を、対応する第2言語のコードに変換して(ステップS6)、ステップS10に処理を移行する。例えば、翻訳部12は、図6に示されるように、第1ソースコード21の「ELSEIF」というコード部品を「}else if (」というコードに変換する。
【0050】
一方、選択したコード部品が変数であると判定した場合(ステップS5;Yes)、翻訳部12は、変数であるコード部品が監視変数として指定されているか否かを判定する(ステップS7)。このコード部品は、共有メモリ変数に関する変数コードの一例に相当する。コード部品が監視変数として指定されている場合(ステップS7;Yes)、翻訳部12は、当該コード部品を、共有メモリ301を参照するコードに変換する(ステップS8)。具体的には、翻訳部12は、図9に示されたように制御プラットフォーム34のAPIを利用して、コード部品を、共有メモリ301にアクセスするための記述に変換する。ステップS8の変換により得るコードは、第1変換コードの一例に相当する。その後、PLCプログラム開発環境10による処理は、ステップS10に移行する。
【0051】
一方、変数であるコード部品が監視変数として指定されていない場合(ステップS7;No)、翻訳部12は、当該コード部品を、非共有メモリ302を参照するコードに変換する(ステップS9)。具体的には、図9に示されたように、制御プラットフォーム34のAPIを利用することなく、翻訳部12は、コード部品を単に変数を参照する第2言語の記述に変換する。ステップS9の変換により得るコードは、第2変換コードの一例に相当する。上述したように、プログラム23が共有メモリ301の監視変数を参照すると実行速度が遅くなるため、第1ソースコード21の変数コードが第2変換コードに変換された場合の第2ソースコード22のプログラム23は、上記第1変換コードに変換された場合よりも、PLC30によって実行されたときの実行時間が短くなる。
【0052】
次に、翻訳部12は、すべてのコード部品を選択したか否かを判定する(ステップS10)。すべてのコード部品を選択してはいないと判定した場合(ステップS10;No)、翻訳部12は、ステップS4以降の処理を繰り返す。これにより、第1ソースコード21を構成するコード部品が、第1ソースコード21の先頭から順次選択されて、第2言語のコードに変換される。
【0053】
すべてのコード部品を選択したと判定した場合(ステップS10;Yes)、翻訳部12は、変換したコードを結合して第2ソースコード22を生成する(ステップS11)。ここで、第1言語と第2言語とで記述されるコード部品の順序が異なる場合には、翻訳部12は、順序を適宜変更してコード部品を結合する。
【0054】
次に、指標値算出部14が、ステップS11で生成された第2ソースコード22の指標値を算出する指標値算出処理を実行する(ステップS12)。指標値算出処理では、図13に示されるように、指標値算出部14が、変数ごとに参照回数をカウントする(ステップS121)。例えば、図10に示される第2ソースコード22については、変数CONDの参照回数が1回、変数VAR0の参照回数が1回とカウントされる。また、図11に示される第2ソースコード22については、変数Itrの参照回数が反復処理により10回とカウントされ、変数VAR0については、読出し及び書込みを1回ずつ含む処理が10回反復することにより、その参照回数が20回とカウントされる。
【0055】
次に、指標値算出部14は、Bをすべての変数の参照回数の合計とし、Cを監視変数の参照回数の合計として、以下の式(1)により指標値Aの値を算出する(ステップS122)。
【0056】
A=C/B×100 ・・・(1)
【0057】
この指標値Aは、すべての変数が監視変数とされる場合に100となり、その場合よりも高速に実行されるほど小さくなる相対値であり、実行時間に対応する値となる。例えば、図10の例では、指標値は100と算出され、図10の例を、「API_PF_WRITE」という関数を使用することなく図6のように変数Var0として記述した場合には、指標値は40と算出されることとなる。その後、PLCプログラム開発環境10による処理は、図13の指標値算出処理から、図12の翻訳処理に戻る。指標値算出部14は、第2ソースコードのプログラムを実行した場合の実行時間の長さに対応する指標値を算出する指標値算出手段の一例に相当する。
【0058】
図12に戻り、ステップS12の指標値算出処理に続いて、指標値提示部15が、ステップS12で算出された指標値をユーザに対して提示する(ステップS13)。指標値提示部15による提示は、画面上の表示であってもよいし、読み上げ音声の再生であってもよいし、ネットワークを介したUI(User Interface)端末への出力であってもよい。
【0059】
次に、受付部13は、監視変数の変更があるか否かを判定する(ステップS14)。具体的には、受付部13は、前回のステップS2で受け付けた指定の監視変数とは異なる新たな監視変数の指定があるか否かを判定する。前回は監視変数でなかった変数を監視変数に変更すること、及び、前回の監視変数を監視対象から除外すること、の少なくとも一方があったときに、ステップS14の判定が肯定される。
【0060】
監視変数の変更があると判定された場合(ステップS14;Yes)、PLCプログラム開発環境10は、ステップS2以降の処理を繰り返す。これにより、ユーザは、指標値を確認しながら監視変数を変更して、その要望に沿う観測性と実行速度との両立点を容易に探ることができる。例えば、図10の第2ソースコード22について、変数VAR0を監視対象から除外すれば、指標値が50に改善することが確認される。また、図11の第2ソースコード22について、変数Itrに対応する変数ITRを監視変数とするとともに変数VAR0を監視対象から除外すれば、指標値が33.3に改善することが確認される。
【0061】
一方、監視変数の変更がなく、第2ソースコード22が完成したとユーザによって判断されて書き込み指示が入力された場合(ステップS14;No)、コンパイラ16が第2ソースコード22をコンパイルすることでプログラム23を生成し、生成したプログラム23をPLC30に書き込んで(ステップS15)、翻訳処理が終了する。
【0062】
<効果>
以上、説明したように、受付部13は、監視変数の指定を受け付けて、翻訳部12は、第1ソースコード21のうちの変数に関するコード部品を、当該変数が監視変数である場合には共有メモリ301を参照するコードに変換し、当該変数が監視変数とは異なる場合には非共有メモリ302を参照するコードに変換する。このため、ユーザは、監視変数の指定を変更することで、プログラム23の実行速度及び観測性を調整することができる。したがって、シーケンス制御用のプログラムを翻訳して、その挙動を観察したいという要望を満たす新たなプログラムを得るための作業負担を軽減することができる。
【0063】
図3に示されるように、シーケンス制御用の第1言語で記述された第1ソースコード21を、第2言語で記述された第2ソースコード22へ単純に翻訳する技術を採用する場合においては、第1ソースコード21の作成段階において、監視対象とすべき値が代入される変数を、共有メモリ301に格納されるグローバル変数とすることが考えられる。しかしながら、そのような第1ソースコード21の作成は、煩雑な作業となる。これに対して、本実施の形態に係るPLCプログラム開発環境10によれば、ユーザは、第1ソースコード21を変更することなく、監視変数の指定を変更するだけでよいため、容易にプログラム23を得ることができる。
【0064】
翻訳部12は、第1ソースコードのうちの、プログラマブルコントローラが有する共有メモリであって被制御機器と共有される共有メモリに値が格納される共有メモリ変数に関する変数コードを、共有メモリ変数が監視変数である場合には、共有メモリに値が格納される変数に関する第1変換コードに変換し、共有メモリ変数が監視変数とは異なる場合には、プログラマブルコントローラが有する共有メモリとは異なる非共有メモリに値が格納される変数に関する第2変換コードに変換することで、第1ソースコードを第2ソースコードに翻訳する翻訳手段の一例に相当する。
【0065】
また、指標値算出部14によって算出された指標値がユーザに対して提示され、受付部13は、指標値が提示された後に監視変数の指定を再度受け付け、翻訳部12は、再度受け付けられた指定に従って第1ソースコード21を第2ソースコード22に翻訳する。これにより、ユーザは、プログラム23の実行速度を定量的に評価しながら適当な監視変数を設定することができる。
【0066】
上述の指標値は、プログラム23が実行される際に共有メモリ301が参照される参照回数に基づいて算出される。詳細には、この参照回数と、第2ソースコード22に含まれる変数すべてが監視変数である場合においてプログラム23が実行されるときに共有メモリ301が参照される基準回数と、の比較に基づいて、指標値が算出される。これにより、監視変数の指定の有無に応じた実行時間に対応する指標値を得ることができる。
【0067】
また、受付部13は、監視変数として個別に指定された変数の名称のリストを受け付ける。これにより、ユーザは、監視変数を柔軟に指定することができる。
【0068】
なお、図11に例示される反復処理では、反復回数が10回と定められていたため、参照回数を容易に算出することができる。しかしながら、反復回数が変数の値により定められるケースも考えられる。そのようなケースでは、例えば、反復回数の推定値を採用してもよい。反復回数の推定値は、例えば、予め定められた固定値であってもよいし、ユーザに対して入力を促すことで得る値であってもよいし、他の手法により算出された値であってもよい。
【0069】
また、図10に例示されるif文では、条件に従って分岐したいずれの処理においても変数VAR0が参照されたが、分岐先によって参照される変数が異なるケースも考えられる。そのようなケースでは、例えば、分岐先それぞれでの参照回数の総和を分岐数で除することにより、分岐先の参照回数の平均値を算出してもよい。また、平均値を算出する際に分岐に重み付けをしてもよい。この重みは、ユーザによって指定されてもよい。
【0070】
また、参照回数のカウントにおいて、読出しと書込みとを等しく扱う例を説明したが、より時間のかかる読出しの回数に1より大きい重みを付して参照回数をカウントしてもよい。
【0071】
実施の形態2.
続いて、実施の形態2について、上述の実施の形態1との相違点を中心に説明する。なお、上記実施の形態1と同一又は同等の構成については、同等の符号を用いる。上記実施の形態1では、監視変数が個別に指定されたが、プログラムの規模が大きくなり変数が多くなると、個別に指定することが難しくなる。そこで、監視変数のグループを指定することができれば、プログラム23の作成が容易になる。本実施の形態は、監視変数がその属性により指定される点で、実施の形態1とは異なる。
【0072】
図14に示されるように、本実施の形態に係る受付部13は、監視変数の属性を指定する属性情報52を受け付ける。図15には属性情報の例の一覧が示されている。図15では、属性情報52として変数の種別を指定する4通りの文字列が例示されている。詳細には、「ATTR_IO」という文字列が指定された場合には、PLC30の入出力に関連する変数が監視変数として指定される。また、「ATTR_POU」という文字列が指定された場合には、プログラム・オーガナイゼーション・ユニットである変数が監視変数として指定される。「ATTR_FB」という文字列が指定された場合には、ファンクションブロックである変数が監視変数として指定される。「ATTR_GLOBAL」という文字列が指定された場合には、グローバル変数が監視変数として指定される。
【0073】
また、図15では、属性情報52として、第1言語の特定の制御構文の条件式で使用されるという属性を指定する4通りの文字列が例示されている。詳細には、「ATTR_IF_CONDITION」という文字列が指定された場合には、IF文の条件式で用いられる変数が監視変数として指定される。「ATTR_FOR_CONDITION」という文字列が指定された場合には、FOR文の制御式で用いられる変数が監視変数として指定される。「ATTR_WHILE_CONDITION」という文字列が指定された場合には、WHILE文の条件式で用いられる変数が監視変数として指定される。「ATTR_CASE_CONDITION」という文字列が指定された場合には、CASE文の条件式で用いられる変数が監視変数として指定される。
【0074】
また、図15では、属性情報52としての「ATTR_EXPRESSION」という文字列により、制御構文の条件式とは異なる演算式で用いられる変数が監視変数として指定されることが示されている。また、「iBASE.*」という文字列により、iBASEから始まる名称を有する変数が監視変数として指定されることが示されている。このように、特定の文字列を含む名称を有することが属性として指定されてもよい。監視変数の名称の指定方法は任意であり、例えば、正規表現を用いて名称が指定される。さらに、図15で例示した文字列を任意に組み合わせてもよい。
【0075】
以上、説明したように、監視変数とすべき変数をその属性により指定することができれば、第1ソースコード21において多くの変数が用いられている場合であっても、観測性と実行速度とを柔軟に調整することができる。
【0076】
なお、変数の属性を指定する例について説明したが、第1ソースコード21において用いられている変数の割合が指定されてもよい。例えば、図16に例示されるように「50%」という文字列が指定された場合には、第1ソースコード21に含まれる変数のうちの50%がランダムに選択されて監視変数として指定されてもよい。また、「RANK_50%」という文字列が指定された場合には、上記実施の形態1と同様に参照回数がカウントされた変数のうちの、その参照回数が多いものから上位50%の変数が監視変数として指定されてもよい。
【0077】
実施の形態3.
続いて、実施の形態3について、上述の実施の形態1との相違点を中心に説明する。なお、上記実施の形態1と同一又は同等の構成については、同等の符号を用いる。上記実施の形態1で説明したように、非共有メモリ302は、付属的な構成要素である場合があり、その場合には、非共有メモリ302の容量が比較的小さいものとなり得る。ここで、実行速度の速いプログラム23を得ようとすると、その変数の多くが非共有メモリ302に格納されることとなり、非共有メモリ302の容量を圧迫し、又は容量を超えてしまうおそれがある。すなわち、実行速度と非共有メモリ302の使用量とは、トレードオフの関係にあるといえる。このため、実行速度と非共有メモリ302の使用量とを調整可能であることが望ましい。以下、翻訳により得た第2ソースコード22について、非共有メモリ302の使用量がユーザに対して提示される形態について説明する。
【0078】
図17に示されるように、本実施の形態に係るPLCプログラム開発環境10は、第2ソースコード22に基づく非共有メモリ302の使用量を算出する使用量算出部18と、算出された使用量に関する情報を提示する情報提示部19と、を有する。
【0079】
使用量算出部18は、主としてプロセッサ101によって実現される。使用量算出部18は、第2ソースコード22に含まれる変数のうちの、監視変数以外の変数のサイズの総和を算出する。例えば、使用量算出部18は、int型の変数についてはそれぞれ4Byteを計上し、int型の配列については、4×(配列サイズ)Byteを計上する。使用量算出部18は、プログラム23が実行される際の非共有メモリ302の使用量を算出する使用量算出手段の一例に相当する。
【0080】
情報提示部19は、主として出力部105又は通信部106によって実現される。情報提示部19は、例えば、算出された使用量をそのまま提示してもよいし、この使用量と予め定められた閾値との比較結果を提示してもよい。閾値は、例えば、非共有メモリ302の容量に対応する上限値である。また、情報提示部19は、使用量が閾値を超える場合に、ユーザに対してその旨を警告し、閾値を超過した分のメモリ容量と、各変数のサイズの一覧とを、使用量の削減を支援するための支援情報として提示してもよい。この支援情報が提示されたユーザは、超過分のメモリ容量に相当する変数を選択して新たな監視変数として指定することにより、閾値を超えないように非共有メモリ302の使用量を抑えることができる。なお、情報提示部19によって提示される支援情報は、各変数のサイズの一覧を、サイズが大きい順、又は、参照回数が多い順に示す情報であってもよい。情報提示部19は、算出された使用量に関する情報を提示する情報提示手段の一例に相当する。
【0081】
以上、説明したように、非共有メモリ302の使用量を算出して使用量に関する情報を提示することにより、ユーザは、非共有メモリ302の実際の使用量を予め調整することができる。すなわち、使用量算出部18によって、第2ソースコード22に含まれる変数のうちの非共有メモリに値が格納される変数のサイズの総計が使用量として算出されてユーザに提示され、受付部13が、情報提示部19によって使用量に関する情報が提示された後に監視変数の指定を再度受け付け、翻訳部12は、再度受け付けられた指定に従って第1ソースコード21を第2ソースコード22に翻訳する。
【0082】
以上、本開示の実施の形態について説明したが、本開示は上記実施の形態によって限定されるものではない。
【0083】
例えば、共有メモリ301が被制御機器40と共有されることを説明したが、共有メモリ301のすべてのデータが被制御機器40それぞれと共有されなくてもよい。共有メモリ301は、少なくともその一部の記憶領域に格納されているデータが被制御機器40と共有される記憶装置であればよい。
【0084】
また、PLCプログラム開発環境10によってプログラム23が共有メモリ301に書き込まれることを説明したが、PLC30が有する不図示の不揮発性メモリに対してPLCプログラム開発環境10によって書き込まれたプログラム23が、適当なタイミングで制御プラットフォーム34によって共有メモリ301にロードされてもよい。
【0085】
また、PLCプログラム開発環境10とPLC30とで翻訳システムを構成し、この翻訳システムがFAの現場に提供されてもよい。
【0086】
また、翻訳部12が第1ソースコード21を構成するコード部品を順次変換する例について説明したが、このコード部品は、他のコード部品を含み、翻訳部12は、ネスト構造のコード部品を解析して適宜変換してもよい。
【0087】
また、指標値の算出に用いられる基準回数が、第2ソースコード22に含まれる変数すべてが監視変数である場合に共有メモリ301が参照される基準回数である例について説明したが、これには限定されない。基準回数は、第2ソースコード22に含まれる予め定められた条件を満たす変数が監視変数である場合においてプログラムが実行されるときに共有メモリ301が参照される回数であればよい。予め定められた条件は、例えば、プログラム21が実行される際に何らかの値が実際に格納されることであってもよいし、監視変数として設定可能なローカル変数であることでもよいし、特定の型を有する変数であってもよいし、その他の条件であってもよい。
【0088】
また、上述の実施形態を任意に組み合わせてもよい。特に、実施の形態1,3を組み合わせて、指標値とともに使用量に関する情報が提示されれば、ユーザは、観測性と実行速度とメモリ使用量との3つのトレードオフを考慮してプログラム23を作成することができる。
【0089】
上述の実施の形態に係るPLCプログラム開発環境10の機能は、専用のハードウェアによっても、また、通常のコンピュータシステムによっても実現することができる。
【0090】
例えば、プログラムP1を、フレキシブルディスク、CD-ROM(Compact Disk Read-Only Memory)、DVD(Digital Versatile Disk)、MO(Magneto-Optical disk)に代表されるコンピュータ読み取り可能な記録媒体に格納して配布し、そのプログラムP1をコンピュータにインストールすることにより、上述の処理を実行する装置を構成することができる。
【0091】
また、プログラムP1をインターネットに代表される通信ネットワーク上のサーバ装置が有するディスク装置に格納しておき、例えば、搬送波に重畳させて、コンピュータにダウンロードするようにしてもよい。
【0092】
また、インターネットに代表されるネットワークを介してプログラムP1を転送しながら起動実行することによっても、上述の処理を達成することができる。
【0093】
さらに、プログラムP1の全部又は一部をサーバ装置上で実行させ、その処理に関する情報をコンピュータが通信ネットワークを介して送受信しながらプログラムP1を実行することによっても、上述の処理を達成することができる。
【0094】
なお、上述の機能を、OSが分担して実現する場合又はOSとアプリケーションとの協働により実現する場合には、OS以外の部分のみを媒体に格納して配布してもよく、また、コンピュータにダウンロードしてもよい。
【0095】
また、PLCプログラム開発環境10の機能を実現する手段は、ソフトウェアに限られず、その一部又は全部を専用のハードウェア又は回路によって実現してもよい。
【0096】
本開示は、本開示の広義の精神と範囲を逸脱することなく、様々な実施の形態及び変形が可能とされるものである。また、上述した実施の形態は、本開示を説明するためのものであり、本開示の範囲を限定するものではない。つまり、本開示の範囲は、実施の形態ではなく、請求の範囲によって示される。そして、請求の範囲内及びそれと同等の開示の意義の範囲内で施される様々な変形が、本開示の範囲内とみなされる。
【産業上の利用可能性】
【0097】
本開示は、FAの現場において利用される制御プログラムの開発に適している。
【符号の説明】
【0098】
10 PLCプログラム開発環境、11 取得部、12 翻訳部、13 受付部、14 指標値算出部、15 指標値提示部、16 コンパイラ、17 監視部、18 使用量算出部、19 情報提示部、101 プロセッサ、102 主記憶部、103 補助記憶部、104 入力部、105 出力部、106 通信部、107 内部バス、21 第1ソースコード、211,23,P1 プログラム、22 第2ソースコード、30 PLC、31 I/O端子、32 プロセッサ、33 OS、34 制御プラットフォーム、301 共有メモリ、302 非共有メモリ、40 被制御機器、51 監視変数リスト、52 属性情報、61~64 コード。
【要約】
翻訳プログラムは、PLC(30)が被制御機器を制御するために実行するプログラムの第1言語で記述された第1ソースコード(21)を、第2言語で記述された第2ソースコード(22)に翻訳するPLCプログラム開発環境(10)を、監視変数の指定を受け付ける受付部(13)、第1ソースコード(21)を第2ソースコード(22)に翻訳する翻訳部(12)として機能させる。翻訳部(12)は、第1ソースコード(21)のうちの、PLC(30)の被制御機器との共有メモリに値が格納される変数に関するコードを、当該変数が監視変数である場合には、共有メモリを参照するコードに変換し、当該変数が監視変数とは異なる場合には、非共有メモリを参照するコードに変換する。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17