JP2019159361A - サポート装置およびサポートプログラム - Google Patents

サポート装置およびサポートプログラム Download PDF

Info

Publication number
JP2019159361A
JP2019159361A JP2018040510A JP2018040510A JP2019159361A JP 2019159361 A JP2019159361 A JP 2019159361A JP 2018040510 A JP2018040510 A JP 2018040510A JP 2018040510 A JP2018040510 A JP 2018040510A JP 2019159361 A JP2019159361 A JP 2019159361A
Authority
JP
Japan
Prior art keywords
argument
program
code
call
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2018040510A
Other languages
English (en)
Other versions
JP6720993B2 (ja
Inventor
玉垣 裕
Yutaka Tamagaki
裕 玉垣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Omron Corp
Original Assignee
Omron Corp
Omron Tateisi Electronics Co
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Omron Corp, Omron Tateisi Electronics Co filed Critical Omron Corp
Priority to JP2018040510A priority Critical patent/JP6720993B2/ja
Priority to PCT/JP2019/001782 priority patent/WO2019171794A1/ja
Priority to US16/643,578 priority patent/US11221828B2/en
Priority to EP19765033.6A priority patent/EP3764219A4/en
Priority to CN201980004240.XA priority patent/CN111095196B/zh
Publication of JP2019159361A publication Critical patent/JP2019159361A/ja
Application granted granted Critical
Publication of JP6720993B2 publication Critical patent/JP6720993B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/05Programmable logic controllers, e.g. simulating logic interconnections of signals according to ladder diagrams or function charts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Automation & Control Theory (AREA)
  • Programmable Controllers (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】ユーザープログラムを構成する呼出可能な単位プログラムの互換性を実現する。【解決手段】ユーザープログラムから制御装置で実行可能な形式のコードを生成するコード生成部は、呼出式について、引数名と、当該引数に設定する値を関連付けるための関連付情報を格納する構造体を作成する命令コードを生成し、当該呼出式を構造体の識別子を用いて当該単位プログラムを呼出す命令コードに変換する。また、単位プログラムの各引数について、構造体に当該引数の引数名に対応の関連付情報が格納されているときは、当該引数に関連付情報の値を設定し、関連付情報が格納されていないときは、当該引数に所定値を設定するための命令コードを生成する。【選択図】図4

Description

本開示は、制御対象を制御する制御装置で実行される制御プログラムなどのユーザープログラムの開発を支援するサポート装置およびそれを実現するためのサポートプログラムに関する。
様々な製造現場において、PLC(Programmable Logic Controller)などの制御装置が導入されている。このような制御装置は、一種のコンピュータであり、製造装置や製造設備などに応じて設計された制御プログラムなどのユーザープログラムが実行される。このようなユーザープログラムは、制御装置とは別に用意された開発環境にて作成される。開発環境を提供するとともに、制御装置に対してユーザープログラムをアップロードし、あるいは、制御装置に対してユーザープログラムをダウンロードする機能を提供する装置は、サポート装置とも称される。
サポート装置では、ユーザーが制御プログラムなどのユーザープログラムを作成するための環境と、作成されたユーザープログラムのソースコードを例えば中間コード(または疑似コード,オブジェクトコードなど)などのPLCで実行可能な実施のコードに変換するコンパイラ(またはビルダともいう)とを提供する。サポート装置は、実行可能なコードをPLCに送信(ダウンロード又はアップロード)する。
制御プログラムなどのユーザープログラムでは、他のプログラムを呼出して利用する。例えば呼出されるプログラムの引数に変更がある場合は、変更後の引数に合わせて呼出し側のプログラムも変更するなどの特別な対応がなされる。
プログラムの変更が要求されるシーンに対応する方法として、例えば、特開平10−083312号公報(特許文献1)は、インターフェイスにおけるプログラム・コールの透過的変換に関して、異なるOS(オペレーティングシステム)間のプログラム呼出しを開示する。例えば、特開2001−331315号公報(特許文献2)は、データ処理システムに関し、データ構造の変化に対する旧バージョンからのデータアクセスを実現する方法を開示する。
特開平10−083312号公報 特開2001−331315号公報
PLCなどの制御プログラムを含むユーザープログラムは、例えば、入力処理、制御演算処理、出力処理、アラーム処理などを実施する単位プログラムである1以上のPOU(Program Organization Unit)を含む。POUの多くはユーザープログラムが共通して利用するライブラリとして提供され得る。ユーザープログラム中でPOUが呼出されるとき、呼出し側のプログラムと呼出されるPOUとの間では、引数などを含むI/F(インターフェイス)を用いてデータの遣り取りがなされる。ユーザープログラム間で、またはPLCなどの制御装置間でPOUの互換性を確保できるように、一度作成したPOUのI/Fは容易に変更することができない。
そこで、ユーザーは、上記の互換性を確保するために、同様の処理を実施するためのPOUであってもI/Fが異なれば、別のPOUを作成する必要があった。また、ユーザーは、制御プログラムを含むユーザープログラムの作成時にI/Fの違いを意識したPOUの使い分けが求められていた。また、I/Fのみが相違する同様のPOUがライブラリに登録されるため、ライブラリの管理が複雑化していた。
本開示は、このような課題を解決することを目的とし、ユーザープログラムを構成する呼出し可能な単位プログラムの互換性を実現するサポート装置およびサポートプログラムを提供することを1つの目的としている。
本開示の一例によれば、制御対象を制御する制御装置で実行されるユーザープログラムの開発を支援するサポート装置であって、ユーザープログラムを走査し、当該ユーザープログラムから当該ユーザープログラムを構成する呼出し可能な単位プログラムを呼出すための呼出式を検出する呼出検出部と、ユーザープログラムから制御装置で実行可能な形式のコードを生成するコード生成部と、を備える。
コード生成部は、呼出式について、引数名と、当該引数に設定する値とを関連付けるための関連付情報を格納する構造体を作成するための作成命令コードを生成する構造体コード生成部と、呼出式を、構造体の識別子を用いて当該単位プログラムを呼出すための呼出命令コードに変換する呼出コード生成部と、単位プログラムが1以上の引数を有する場合に、各引数について、構造体に当該引数の引数名に対応の関連付情報が格納されているときは、当該引数に関連付情報の値を設定し、関連付情報が格納されていないときは、当該引数に所定値を設定するための設定命令コードを生成する設定コード生成部と、を含む。
この開示によれば、ユーザープログラムの実行中に呼出される単位プログラムは、引数を有する場合、その引数の全てに値を設定して実行することが可能になる。したがって、引数の個数の増減など単位プログラムのI/Fが変更されるとしても、I/Fが変更された単位プログラムを新たにライブラリに登録せずとも、ユーザープログラムの実行は可能となり、いわゆる単位プログラムの互換性が確保される。
上述の開示において、構造体コード生成部は、呼出検出部により単位プログラムの呼出式が検出される毎に、構造体を作成するための作成命令コードを生成する。
この開示によれば、ユーザープログラムの1回の走査により、ユーザープログラム中で呼出されている全ての単位プログラムについて呼出命令コードを生成することができる。
上述の開示において、構造体コード生成部は、呼出検出部が検出する呼出式により呼出される単位プログラムの種類毎に、構造体を作成するための作成命令コードを生成する。
この開示によれば、ユーザープログラムの実行中に構造体は単位プログラムの種類毎に作成されるので、構造体を単位プログラム毎に作成する場合に比較して、ユーザープログラムの実行速度を速くすることができ、また構造体を格納するための記憶領域を節約することができる。
上述の開示において、関連付情報は、引数名を示す情報と、値を示す情報とを含み、引数名を示す情報は、当該引数名が格納される記憶領域のアドレスを含み、値を示す情報は、当該値が格納される記憶領域のアドレスを含む。
この開示によれば、構造体に格納される関連付情報を、アドレスにすることが可能となる。記憶領域の指定に用いるアドレスを一般的に固定長であるから、データ長が可変である引数名または値そのものを用いる場合に比較して、構造体を格納するための記憶領域を節約することができる。
上述の開示において、引数は、ユーザープログラムで用いられる変数を表す。値を示す情報は、関連付けされる引数が表す変数の型に基づき、当該値が格納される記憶領域のアドレスまたは当該値の一方を含む。
この開示によれば、関連付情報の値を示す情報を、関連付けされた引数の変数の型に基づき、値そのもの、またはアドレスに選択的に切替えることができる。したがって、関連付情報にアドレスではなく値そのものを含めた場合は、関連付情報から直接にアドレスを取得できるので、アドレス指定により記憶領域から値の読出す処理を省略することができる。
上述の開示において、単位プログラムは、当該単位プログラムの各引数の設定内容を判定する関数を含む。
この開示によれば、ユーザープログラムの実行中に単位プログラムを呼出す場合に、実行される関数により、単位プログラム内で各引数の設定内容を判定することができる。
上述の開示において、呼出コード生成部は、構造体の識別子として、当該構造体が格納される領域のアドレスを用いて、呼出し式を呼出命令コードに変換する。
この開示によれば、呼出命令コードが実行されるとき、当該呼出命令コードに用いられるアドレスで構造体の領域を直接指定して、関連付情報を読み書きすることができる。
上述の開示において、設定コード生成部は、単位プログラムが引数を有しない場合に、予め定められた処理を実行させる命令コードを生成する。
この開示によれば、単位プログラムが引数を有しない場合には、実行可能な形式のコードとして、予め定められた処理を実行させる命令コードを生成することができる。
本開示の一例によれば、制御対象を制御する制御装置で実行されるユーザープログラムの開発を支援するサポート装置を実現するためのサポートプログラムであって、サポートプログラムは、コンピュータを、ユーザープログラムを走査し、当該ユーザープログラムから当該ユーザープログラムを構成する呼出し可能な単位プログラムを呼出すための呼出式を検出する呼出検出部と、ユーザープログラムから制御装置で実行可能な形式のコードを生成するコード生成部として機能させ、コード生成部は、呼出式について、引数名と、当該引数に設定する値とを関連付けるための関連付情報を格納する構造体を作成するための作成命令コードを生成する構造体コード生成部と、呼出式を、構造体の識別子を用いて当該単位プログラムを呼出すための呼出命令コードに変換する呼出コード生成部と、単位プログラムが1以上の引数を有する場合に、各引数について、構造体に当該引数の引数名に対応の関連付情報が格納されているときは、当該引数に関連付情報の値を設定し、関連付情報が格納されていないときは、当該引数に所定値を設定するための設定命令コードを生成する設定コード生成部と、を含む。
この開示によれば、ユーザープログラムの実行中に呼出される単位プログラムは、引数を有する場合、その引数の全てに値を設定して実行することが可能になる。したがって、引数の個数の増減など単位プログラムのI/Fが変更されるとしても、I/Fが変更された単位プログラムを新たにライブラリに登録せずとも、ユーザープログラムの実行を可能となり、いわゆる単位プログラムの互換性が確保される。
本開示の一例によれば、ユーザープログラムを構成する呼出し可能な単位プログラムの互換性を実現できる。
本実施の形態に従うサポート装置を適用可能なPLCシステムの構成例を示す模式図である。 図1に示すPLCシステムを構成するPLCのハードウェア構成例を示す模式図である。 図1に示すPLCシステムを構成するサポート装置のハードウェア構成例を示す模式図である。 本実施の形態に係るサポート装置の適用場面の一例を示す模式図である。 本発明の実施の形態に係るユーザープログラムの一例を模式的に示す図である。 従来のPOUを呼出す側の中間コードの一例を模式的に示す図である。 従来の呼出される側(POU)の中間コードの一例を模式的に示す図である。 本発明の実施の形態に係る呼出毎連想配列の方法に従い生成される中間コードの一例を模式的に示す図である。 本発明の実施の形態に係る呼出毎連想配列の方法に従い生成される中間コードの一例を模式的に示す図である。 本発明の実施の形態に係る呼出毎連想配列の方法に従う呼出し側の中間コードの生成処理の一例を示すフローチャートである。 図10の処理に用いられる一時領域と連想配列の内容の一例を模式的に示す図である。 本発明の実施の形態に係る呼出毎連想配列の方法に従う呼出される側の中間コードの生成処理の一例を示すフローチャートである。 本発明の実施の形態に係る呼出毎連想配列の方法に従う呼出し側の中間コードの生成処理の他の例を示すフローチャートである。 図13の処理に用いられる一時領域と連想配列の内容の一例を模式的に示す図である。 本発明の実施の形態に係る呼出毎連想配列の方法に従う呼出される側の中間コードの生成処理の他の例を示すフローチャートである。 本発明の実施の形態に係る「種類毎連想配列」の方法に従う中間コードの生成処理の一例を模式的に示すフローチャートである。 本発明の実施の形態に係る「種類毎連想配列」の方法に従い生成される連想配列の一例を模式的に示す図である。 本発明の実施の形態に係る種類毎連想配列の方法に従い生成される中間コードの一例を模式的に示す図である。 本発明の実施の形態に係る組込関数の呼出しの書式と内容の一例を模式的に示す図である。 本実施の形態により奏される利点の一例を模式的に示す図である。
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
<A.適用例>
まず、図4を参照して、本発明が適用される場面の一例について説明する。図4は、本実施の形態に係るサポート装置200の適用場面の一例を示す模式図である。本実施の形態では、制御対象を制御する制御装置で実行されるユーザープログラム600の開発を支援するサポート装置200が提供される。ユーザープログラム600は、例えば制御対象を制御するための制御プログラムを含み得る。制御装置は、例えばPLC100を含み得る。
サポート装置200は、ユーザープログラム600の開発支援環境としてプログラム開発部260を備える。サポート装置200は、コンパイルに関連したデータを格納する領域および作業領域としてRAM(Random Access Memory)206などの記憶部を利用する。この記憶部は、RAM206に限定されずHDD(ハードディスク)なども含み得る。
プログラム開発部260が備えるコンパイラ部263は、RAM206などの記憶部をアクセスしながら、ユーザープログラム600をコンパイルする。コンパイラ部263は、ユーザープログラム600から制御装置に実行可能な形式のコードである中間コード700を生成するコード生成部271と、ユーザープログラム600を走査しながら、ユーザープログラム600を構成する呼出し可能な単位プログラム(POU601)を呼出すための呼出式を検出する呼出検出部270とを備える。呼出式は、例えば、単位プログラムの名前(識別子)と、1以上の各引数の引数名とを含む。例えば、単位プログラムが関数である場合は、呼出式は、関数名(引数1の名前,引数2の名前,・・・)により表される。後述の変形例で示すように単位プログラムの引数は0個であってもよいが、説明を簡単にするために、以下では単位プログラムの引数を1以上として説明する。
コード生成部271は、構造体コード生成部272と、呼出コード生成部273と、設定コード生成部274とを含む。構造体コード生成部272は、検出された上記の呼出式に含まれる単位プログラムが有する1以上の引数それぞれについて、引数名と、当該引数に設定する値とを関連付ける関連付情報を格納する構造体を作成するための作成命令コードを生成する。この構造体は、例えば配列型の構造を有し、より特定的には、連想配列型の構造を有する。
呼出コード生成部273は、上記に述べた呼出式を、単位プログラムの1以上の引数名が上記の構造体の識別子に変更された当該単位プログラムを呼出すための呼出命令コードに変換する。
設定コード生成部274は、単位プログラムの実行可能な形式のコードを生成する場合に、設定命令コードを生成する。設定命令コードは、当該単位プログラムが有する1以上の引数のそれぞれについて、構造体に当該引数の引数名に対応の関連付情報が格納されているときは、当該引数に関連付情報で関連付けられる値を設定し、関連付情報が格納されていないときは、当該引数に所定値を設定するための命令コードを含む。これにより、単位プログラムの中間コードは、本来の処理内容を示す命令コードと、設定コード生成部274により生成された設定命令コードとを含む。
設定命令コードが実行されることにより、引数に設定される上記の所定値は、引数の値が省略されているとの扱いで単位プログラムの実行を可能にするような値であって、例えば、デフォルト値、エラーを示す値などを含み得る。
サポート装置200が備える転送部216は、入力デバイスを介して受付けるユーザーの操作内容に従い、RAM206などの記憶部から中間コード700を読出し、読出された中間コード700を制御装置に送信(ダウンロード、またはアップロード)する。なお、転送部216による制御装置への中間コード700の送信は、有線および無線を介して、または、メモリカードなどの記録媒体を介した実施される。
制御装置が、サポート装置200からの実行可能な形式のコード(以下、実行可能形式コードという)を実行する場合、呼出命令コードにより、例えば制御装置のライブラリから当該単位プログラムが呼出される。また、当該ライブラリから呼出された単位プログラムの各引数には、設定命令コードにより、構造体の関連付情報で関連付けされている値、または所定値が設定される。このように、制御装置でユーザープログラム600が実行中に呼出される単位プログラムは、その引数の全てに何らかの値が設定されて実行される。
これにより、引数の個数が変更されるなどしてI/Fが変更される場合、「機能拡張版」として変更後の単位プログラムをライブラリに登録せずとも、ユーザープログラム600の実行中に呼出される単位プログラムを実行することができ、単位プログラムの互換性が確保される。また、このことは、ライブラリにおける単位プログラムの管理が容易となり、ライブラリの保守性ももたらす。
ユーザープログラム600は、例えば、ラダーロジック言語によって記述された1または複数のシーケンスプログラムの組み合わせを含み得る。なお、プログラムは、シーケンスプログラムに限定されず、モーションプログラムであってもよい。また、プログラム言語もラダーロジック言語に限定されない。
単位プログラムは、ユーザープログラム600において呼出し可能な例えばPOU(Program Organization Unit)601を含む。POU601は、他のプログラム(他のPOU601を含む)から呼出されて実行され、その実行結果を呼出し元のプログラムに戻すような、一種のサブルーチンまたは関数なども含み得る。サポート装置200は、ユーザー操作を受付けて、POU601を作成し、作成されたPOU601毎に実行可能形式コードを生成し、制御装置(PLC100)へ送信することも可能である。
POU601は、当該POU601を呼出すためのI/F(インターフェイス)を備える。このI/FはPOU601を含むプログラム間で、グローバル変数またはローカル変数などの値を引き渡しするための1つ以上の引数(変数)を含む。
上記の実行可能形式コードとしては、中間コード700を例示するが、疑似コードであってもよい。制御装置(PLC100)では、サポート装置200から受信した中間コード700を、制御装置の仕様に適合したコードに変換して実行するケースもあり得る。その意味で、本適用例では、ユーザープログラム600のソースコード610と制御装置の仕様に適合したコードとの中間に位置するとして、中間コード700を用いる。
以下の説明では、引数は、仮引数と実引数の2種類を有する。仮引数は、例えば、POU601(単位プログラム)が関数である場合は、POU601の関数を定義する際の変数(パラメータ)に相当する。実引数は、POU601が例えば関数であれば、POU601の実行(関数に従う演算の実行)時に、POU601の関数に引き渡される値に相当する。このように、POU601の実行時には、実引数の値が仮引数に代入されて、代入された実引数の値を用いてプログラムの実行(例えば、関数の演算など)がなされる。また、この開示においては、アドレスは、物理的なアドレスと論理アドレスの両方を含み得る。
以下、本発明のより具体的な応用例として、本実施の形態に係るサポート装置200のより詳細な構成および処理について説明する。
<B.PLCシステムの構成例>
まず、本実施の形態に従うサポート装置200を適用可能なPLCシステム1の構成例について説明する。図1は、本実施の形態に従うサポート装置200を適用可能なPLCシステム1の構成例を示す模式図である。
図1を参照して、PLCシステム1は、複数のPLC100−1,100−2,100−3,100−4,…(以下、「PLC100」とも総称する。)を含んでいる。PLC100の各々は、互いに同様の製造装置を制御する制御システムに備えられて、PLC100の各々では、実行される制御プログラムも実質的に同一であるとする。本実施の形態に従うサポート装置200は、各PLC100の運転を制御する制御プログラムを開発し、開発した制御プログラムを各PLCにダウンロード(またはアップロード)する。なお、PLCシステム1に備えられるPLCは複数に限定されず、1以上であればよい。
PLC100の各々は、制御対象を制御する制御装置の一例である。PLC100は、典型的には、制御プログラムを含む各種プログラムを実行する主体であるCPUユニット10と、CPUユニット10などへ電力を供給する電源ユニット12と、フィールドからの信号を遣り取りするI/O(Input/Output)ユニット14とを含む。I/Oユニット14は、CPUユニット10とシステムバス11を介して接続されている。
サポート装置200は、制御対象を制御する制御装置であるPLC100で実行される制御プログラムの開発を支援する。サポート装置200は、PLC100で実行される制御プログラムを含むユーザープログラム600を開発するための環境を提供する機能、PLC100に対して制御プログラムおよび各種情報を設定する機能、運転中のPLC100の状態値を取得する機能などを含む。さらに、サポート装置200は、ユーザーによる制御プログラムを含むユーザープログラム600の開発を支援するため、デバック機能やシミュレーション機能を有していてもよい。
記録媒体250に格納されたアプリケーションプログラムであるサポートプログラムがサポート装置200にインストールされることで、上述したような各種機能が実現される。記録媒体250に代えて、外部のサーバ装置などからネットワークを介して、サポートプログラムをダウンロードするようにしてもよい。サポート装置200は、一例として、接続ケーブルを介してPLC100のCPUユニット10と接続される。サポート装置200は、典型的には、パーソナルコンピュータで実現される。
<C.PLC100のハードウェア構成>
次に、PLC100のハードウェア構成例について説明する。図2は、図1に示すPLCシステムを構成するPLC100のハードウェア構成例を示す模式図である。
図2を参照して、PLC100は、予めインストールされたプログラムをプロセッサが実行することで、制御対象に対する制御を実現する。より具体的には、PLC100は、CPU(Central Processing Unit)やMPU(Micro-Processing Unit)などのプロセッサ102と、チップセット104と、メインメモリ106と、フラッシュメモリ108と、外部ネットワークコントローラ116と、メモリカードインターフェイス118と、内部バスコントローラ122と、フィールドバスコントローラ124とを含む。
プロセッサ102は、フラッシュメモリ108に格納されたシステムプログラム110およびユーザープログラム600を読み出して、メインメモリ106に展開して実行することで、制御対象に対する制御を実現する。ユーザープログラム600は、1または複数のPOU601を含み、これらPOU601はライブラリ113に登録されている。ライブラリ113の各POU601は、実行可能形式コード(例えば、中間コード)の態様で登録される。
システムプログラム110は、データの入出力処理や実行タイミング制御などの、PLC100の基本的な機能を提供するための命令コードを含む。ユーザープログラム600は、制御対象に応じて任意に設計される一種の制御プログラムを含む。制御プログラムは、シーケンス制御を実行するためのシーケンスプログラム600Aおよびモーション制御を実行するためのモーションプログラム600Bを含む。PLC100のユーザープログラム600は、サポート装置200からの中間コード700により示されるユーザープログラム600を含み得る。
チップセット104は、各コンポーネントを制御することで、PLC100全体としての処理を実現する。
内部バスコントローラ122は、PLC100と内部バスを通じて連結されるI/Oユニット14との間でデータを遣り取りするインターフェイスである。フィールドバスコントローラ124は、PLC100と図示しないフィールドバスを通じて連結されるI/Oユニット16との間でデータを遣り取りするインターフェイスである。内部バスコントローラ122およびフィールドバスコントローラ124は、対応のI/Oユニット14および16にそれぞれ入力される状態値を取得するとともに、プロセッサ102での演算結果を対応のI/Oユニット14および16から指令値としてそれぞれ出力する。
外部ネットワークコントローラ116は、各種の有線/無線ネットワークを通じたデータの遣り取りを制御する。メモリカードインターフェイス118は、メモリカード120を着脱可能に構成されており、メモリカード120に対してデータを書込み、メモリカード120からデータを読出すことが可能になっている。
PLC100がプログラムを実行することで提供される機能の一部または全部を専用のハードウェア回路として実装してもよい。
<D.サポート装置200のハードウェア構成例>
次に、サポート装置200のハードウェア構成例について説明する。図3は、図1に示すPLCシステムを構成するサポート装置200のハードウェア構成例を示す模式図である。図3を参照して、サポート装置200は、典型的には、汎用のコンピュータで構成される。なお、PLC100が配置される製造現場では可搬性に優れたノート型のパーソナルコンピュータの形態で提供されてもよい。
サポート装置200は、オペレーティングシステム(OS)を含む各種プログラムを実行するCPU202と、BIOSや各種データを格納するROM(Read Only Memory)104と、CPU202でのプログラムの実行に必要なデータを格納するための作業領域を提供するメモリRAM206と、CPU202で実行されるプログラムなどを不揮発的に格納するハードディスク(HDD)208とを含む。
サポート装置200は、さらに、ユーザーからの操作を受け付けるキーボード210およびマウス212と、情報をユーザーに提示するためのディスプレイ214とを含む。サポート装置200は、PLC100(CPUユニット10)などと通信するための通信インターフェイス218を含む。
サポート装置200は、記録媒体250からそれに格納されているサポートプログラムを読み取るための記録媒体読取装置217を含む。このサポートプログラムは、コンパイラ部263を有するプログラム開発部260を実現するプログラムを含み得る。
<E.プログラム開発環境>
再び図4を参照して、サポート装置200が提供するプログラム開発環境を説明する。
図4のプログラム開発部260のプログラム編集部262が提供するエディット機能を利用することにより、ユーザーはPOU601の単位で、プログラムの変更・更新・削除が可能になっている。プログラム編集部262は、キーボード210などの入力デバイスを介して受付けるユーザー操作内容に従い、ユーザープログラム600を編集(エディット)し、編集後のユーザープログラム600を予め定められたプログラム記述言語のソースコード610に変換する。
PLC100で実行される制御プログラムについては変数プログラミングが可能になっており、PLC100においてグローバル変数またはローカル変数のテーブルにおいて定義されたフィールドデータに関連付けられた変数値を用いて、各種処理が実行可能になっている。上記のPOUの引数に設定される値は、これら変数値を含み得る。したがって、フィールド機器(制御対象の機器)の変更などによりグローバル変数またはローカル変数の変更があると、関連するPOU601のI/Fが変化し得る。例えば、I/Fの引数の個数が変化し得る。
コンパイラ部263が、ユーザープログラム600を走査して中間コード700を生成する機能は、サポート装置200が備えるビルダ(Builder)の一部として提供されるケースもある。例えば、ビルダは、コンパイルとリンクの両方の機能を備えることにより、コンパイルにより生成された複数の中間コード700のファイルをリンクすることにより実行ファイルを作成する。したがって、コンパイラ部263は、サポート装置200が備えるビルダの一部として提供され得て、その場合は、中間コード700は、このような実行ファイルとして制御装置(PLC100)に転送され得る。
<F.ユーザープログラムと従来の中間コード>
図5は、本発明の実施の形態に係るユーザープログラム600の一例を模式的に示す図である。図6は、従来のPOUを呼出す側の中間コードの一例を模式的に示す図である。図7は、従来の呼出される側(POU)の中間コードの一例を模式的に示す図である。図5を参照して、ユーザープログラム600はプログラムの開始を表すSTARTから終了を表すENDまでの範囲において記述される。ユーザープログラム600は、プログラム中で呼出されるPOU601の名前(識別子)と各引数の名前およびデータ型などの宣言部400と、POU601を呼出す側のプログラムbarを記述したPROGRAM部500を含む。以下では、POU601は名称が「foo」の関数と想定する。
図5を参照して、PROGRAM部500では、呼出式550によりPOU601の呼出しが記述されている。呼出式550(foo(in1=a+b、inout2=c[idx]、out3⇒d)は、POU名は“foo”、その引数は3個であり、各引数名がin1、inout3およびout3であって、各引数の値にa+b、c[idx]およびdのそれぞれ指定されてPOU601が呼出されることを表す。
図5のユーザープログラム600を従来の方法でコンパイルした場合に、呼出し側のプログラムbarにつては、例えば図6の中間コードが生成される。図6を参照してプログラムbarに対応の中間コード501は、POU601の呼出式550に対応したPOUの呼出コード502と、他の部分のコード503と、戻り値dを設定するコード504とを含む。コード503は、POU601の各引数の値を算出(取得)するための命令コードを含む。これにより、ユーザープログラム600の実行時に、プログラムbarからPOU601が呼出されるときはPOUの各引数(仮引数)には、プログラムbarで算出(取得)された値である実引数が渡される。
また、図7を参照して、呼出される側のPOU601の中間コード540は、各引数に渡された値(実引数の値)を取得するための命令コード542と、渡された各引数の値を用いた処理(演算処理など)を実行するための命令コード543と、処理の結果を戻り値として設定するコード544とを含む。
<G.連想配列の作成命令コードの生成方法>
本実施の形態に係るコード生成部271は、POU601に関連付けて構造体の一例である連想配列の作成を指示するための作成命令コードを生成する。本実施の形態では、この作成命令コードは「呼出毎連想配列」と「種類毎連想配列」の2つの方法により提供される。
「呼出毎連想配列」では、ユーザープログラム600の走査中に、呼出検出部270がPOUの呼出式550を検出する毎に、構造体コード生成部272は連想配列を作成するための作成命令コードを生成する。これに対して、「種類毎連想配列」では、ユーザープログラム600の走査中に、呼出検出部270が検出する呼出式550により呼出されるPOU601の種類毎に、連想配列を作成するための作成命令コードを生成する。
コンパイラ部263は「呼出毎連想配列」と「種類毎連想配列」の両方の機能(モジュール)を備える。コンパイラ部263は、入力デバイスを介してユーザーから受付けた指示に基づき、いずれか一方の機能(モジュール)を起動する。
<H.「呼出毎連想配列」の方法>
まず、「呼出毎連想配列」の方法を説明する。
(H−1.呼出毎連想配列の中間コード)
図8と図9は、本発明の実施の形態に係る呼出毎連想配列の方法に従い生成される中間コードの一例を模式的に示す図である。図8の中間コードは、POU(foo)を呼出す側である図5のプログラムbarから、呼出毎連想配列の方法に従い生成された中間コード510の一例を示す。
中間コード510は図6と同様の他の部分のコード503と、POU601の呼出しに関連して生成されたコード520とを含む。コード520は、POU601の呼出命令コード522と、連想配列の作成命令コード521と、連想配列の領域の解放を指示する解放命令コード523とを含む。
コード503は、図6に示したものと同様であるので説明は繰返さない。作成命令コード521は、呼出式550に含まれる1以上の引数それぞれについて、引数名と、当該引数に設定する値(実引数)とを関連付ける関連付情報を格納する連想配列を作成することを指示する命令コードを含む。具体的には、呼出式550のPOUの識別子(名前foo)に関連付けて引数(in1,inout2,out3)の個数分に基づくサイズの連想配列の記憶領域を確保するための命令コード5211と、POU601の呼出し側であるプログラムbarにより算出(取得)された各引数の値(実引数)が格納される記憶領域のアドレスを取得するための命令コード5210と、POU601の各引数について、その値が格納されている領域のアドレス(すなわち、命令コード5210による取得されたアドレス)を各引数名に関連付けて連想配列(記憶領域)に設定するための命令コード5212を含む。
命令コード5211は、連想配列の識別子(“tmp7”)を指定して、引数のトータル個数(fooの場合は3個)分の領域と連想配列の終端(ターミネータ)を示すデータ(例えば、NULL)を格納する領域を確保するための命令コードを表している。ここでは、連想配列の識別子には、例えば連想配列が格納される領域の先頭アドレス(例えば“tmp7”)が割当てられている。
呼出命令コード522は、呼出式550を、1以上の引数名が連想配列の識別子(“tmp7”)に変更されたPOU601を呼出すための命令コードを表している。
また、解放命令コード523は、POU601の処理が終了し、POU601から呼出し側であるプログラムbarに戻ってきたときに、連想配列に使用した記憶領域を解放すること指示するコードを表す。本実施の形態では、「記憶領域の解放」とは、記憶領域を使用済状態から未使用状態、すなわち空き領域に変更することを含む。
上記に述べた呼出毎連想配列の方法によれば、ユーザープログラム600を走査して、呼出式550が検出される毎に、連想配列を作成するための作成命令コード521が生成される。
図9の中間コード530は、呼出されるPOU601の中間コードの一例を示す。図9を参照して中間コード530は、図7の中間コード543と中間コード544に追加して、設定命令コード532を含む。図9では、設定命令コード532は、連想配列から、各引数名に対応の値(実引数)が格納されているアドレスを取得(読出)し、取得したアドレスの領域から読出した値を当該引数名の引数に設定することを指示する命令コードを含む。設定命令コード532は、アドレスの領域から読出した値がNULLであれば、当該引数名の引数にはデフォルト値を設定することを指示する命令コードを含む。
これにより、PLC100でユーザープログラム600が実行中に、POU601が呼出されると、POU601の本来の処理の命令コード543が実行される前に、連想配列を介して、各引数には呼出し側のプログラムbarで取得(算出)された値(実引数)または(値が取得されていない場合は)所定値(例えばデフォルト値)が設定される。これにより、後続の命令コード543による処理が実行される時は、引数の値が不定であるなどの理由でエラー処理となることが回避される。
(H−2.呼出毎連想配列のフローチャート(呼出し側))
図10は、本発明の実施の形態に係る呼出毎連想配列の方法に従う呼出し側の中間コードの生成処理の一例を示すフローチャートである。図11は、図10の処理に用いられる一時領域800と連想配列900の内容の一例を模式的に示す図である。図10を参照して、POU601を呼出す側のユーザープログラム600の一例であるプログラムbarの中間コードを生成する処理を説明する。一時領域800と連想配列900は、例えばPLC100の記憶領域であって、典型的にはRAMなどの揮発性の記憶領域に相当する。
呼出検出部270は、ユーザープログラム600(ソースコード610)を走査しながら呼出式550を検出するか否かを判定する(ステップS1)。呼出式550が検出されたと判定すると(ステップS1でYES)、ステップS3以降の処理に移行するが、検出されないと判定すると(ステップS1でNO)、呼出検出部270は、ユーザープログラム600の終端まで走査したかを判断する(ステップS12)。呼出検出部270は、ユーザープログラム600の終端まで走査を終了したと判断したとき(ステップS12でYES)処理を終了するが、ユーザープログラム600の終端まで走査を終了していないと判断したとき(ステップS12でNO)、ステップS1に戻り、ユーザープログラム600の走査を継続する。
呼出検出部270が呼出式550を検出したとき(ステップS1でYES)、コード生成部271は、POU601の実引数を評価し、評価の結果を一時領域800に格納することを指示するコード503を生成する(ステップS3)。また、コード生成部271は、検出された呼出式550に含まれる引数の個数をカウントする命令コードを生成する(ステップS3)。
具体的には、図11を参照して、ステップS3で生成されるコード503は、図11の一時領域800には、各仮引数の変数に渡す値、すなわち実引数の変数の評価値を格納することを指示する命令コード含む。具体的には、コード503は、1番目の仮引数である入力変数in1への実引数の評価値が格納される領域T1(すなわちPOU601を呼出す側のプログラムbarによる演算結果(a+b)値を格納する領域)、2番目の仮引数である入出力変数inout2への実引数の評価値が格納される領域T2(すなわちinout2に渡す変数のアドレス(c[i]のアドレス))、および3番目の仮引数である出力変数out3への実引数の評価値が格納される領域T3(すなわち空(out3にPOUの処理結果の値を格納してもらうため領域として確保))のアドレスを格納することを指示する命令コードを含む。この一時領域800は、例えば1種のスタック領域であり、他の変数などの値を格納する記憶領域と重複しないように設定される。
なお、引数が表す変数の種類毎に、対応の領域T1〜T3に格納される評価値は異なる。本実施の形態では、POU601のI/Fに含まれ得る引数が表す変数の種類は、例えば入力変数、入出力変数および出力変数の3種類を有し、これら種類に応じて対応の領域T1〜T3に格納される評価値の種類も異なる。
続いて、構造体コード生成部272は、ステップS3でカウントされた仮引数のトータル個数に基づくエントリ数を有した連想配列900の領域を確保することを指示する命令コード5211を生成する(ステップS5)。ステップS5では、連想配列900のエントリ数は、例えば後述のステップS13などにおいて連想配列の終端を判断し易いように、仮引数のトータル個数に終端を表す1つを追加した数としている。
また、構造体コード生成部272は、命令コード5210,5212を生成する(ステップS7)。命令コード5210,5212は、連想配列900の各エントリ(呼出式に含まれる1以上の引数それぞれについてのエントリ)に、引数名と、当該引数に設定する値(実引数)とを関連付ける関連付情報904を格納するための命令コードである。
連想配列900の各エントリの関連付情報904は、引数名を示す情報と、値(実引数)を示す情報とを含む。より特定的には、引数名を示す情報は、当該引数名が格納される記憶領域のアドレス901を含む。値を示す情報は、当該値が格納される記憶領域のアドレス902を含む。
呼出コード生成部273は、呼出式550を、1以上の引数名が連想配列900の識別子に変更されたPOU601を呼出すための呼出命令コード522を生成する(ステップS9)。ここでは、呼出命令コード522は、連想配列900の記憶領域の先頭アドレスを示す情報(“tmp7”など)を、連想配列900の識別子とする。
また、コード生成部271は、POU601から元のプログラムbarの処理に復帰したときに仮引数(出力変数out3)に渡される値(すなわち、領域T3に格納された値)を、連想配列を介して一時領域800の領域T3から読出すことを含む処理のコード504、および一時領域800を解放(すなわち連想配列の領域を解放)する解放命令コード523を生成する(ステップS11)。その後、ステップS12に移行する。
このように、コンパイラ部263は、POU601を呼出す側のユーザープログラム600中で呼出されるPOU毎に、当該POUの仮引数の個数に相当するエントリを有する連想配列を作成するコード503,5210〜5212と、連想配列を用いてPOUをライブラリから呼出す呼出命令コード522とを含む中間コードを生成する。
また、命令コード5210,5212が実行されることで生成される連想配列900の各エントリには、関連付情報904として、引数名または値(実引数)そのものではなく、プログラム実行時にそれらが格納されている領域のアドレスが設定される。発明の背景として、一般的に記憶領域をアクセスするためのアドレス長は固定長であるから、データ長がまちまちとなり得る引数名または値(実引数)を格納する場合に比較して、このように領域のアドレスを格納することは連想配列900に必要な記憶領域の節約を可能にする。
また、呼出命令コード522は、連想配列900の記憶領域の先頭アドレスを、連想配列900の識別子とするから、当該先頭アドレスを用いた直接アドレス指定が可能となり、連想配列900に固有の名前を付ける方法に比較して、連想配列900の検索(読書き)が容易となる。
(H−3.呼出毎連想配列のフローチャート(呼出される側))
図12は、本発明の実施の形態に係る呼出毎連想配列の方法に従う呼出される側の中間コードの生成処理の一例を示すフローチャートである。図12を参照して、プログラムbarなどによりライブラリ113から呼出されるPOU601に関連した中間コードを生成する処理を説明する。
設定コード生成部274は、コンパイラ部263によるPOUのコンパイル時に、ステップS13〜S19の処理において設定命令コード532を生成する。設定命令コード532は、POU601の処理を示す命令コード543の実行前において実行されるような命令コードであって、例えばPOUの処理の開始直後に実行される。
具体的には、設定コード生成部274は、POU601が有する1以上の引数のそれぞれについて、連想配列900に当該引数の引数名に対応の関連付情報904が格納されているときは、当該引数に関連付情報の値(実引数)を設定し、関連付情報904が格納されていないときは、当該引数に所定値を設定するための設定命令コード532を生成する。
設定命令コード532は、POUの仮引数の個数(例えばN個)だけ、当該仮引数名(変数名)をキーに連想配列900を検索し(ステップS13、S15)、エントリのうち、アドレス901の領域に格納されている引数名と一致するエントリを特定し、特定したエントリのアドレス902で指定される領域から読出した値を、当該仮引数の変数に設定する(ステップS17,S19)命令コードを含む。また、設定命令コード532は、アドレス902の領域から読出された値がNULLであると判定したとき(ステップS15でNO)、当該仮引数の変数の値は省略されたとして扱う(ステップS19)ことを指示する命令コードも含む。ステップS19では、例えば当該仮引数の変数にデフォルト値を設定する命令コード、またはエラーを出力するなどの命令コードが生成され得る。
なお、ステップS17で生成される設定命令コード532は、仮引数に対応する変数の種類に応じて当該仮引数に設定される値を異ならせるための命令コードを含む。例えば、変数の種類が、入力変数であればアドレス902の領域から値を取得する命令コード、また、入出力変数であれば変数の値が格納される領域のアドレスを取得する命令コード、また、出力変数であればPOU601からの出力(戻り値)を格納する領域のアドレスを取得する命令コードを含む。
このように、PLC100でユーザープログラム600の呼出命令コード522が実行されて、ライブラリ113からPOU601が呼出された場合に、POU601の本来の処理である命令コード543が実行される前に、処理に必要な変数(引数)の全てに値(実引数値またはデフォルト値など)を設定することができる。これにより、命令コード543を実行中に仮引数に何らの値も設定されないことによる実行時エラーを回避することができる。
(H−4.呼出毎連想配列のフローチャートの変形例)
図13は、本発明の実施の形態に係る呼出毎連想配列の方法に従う呼出し側の中間コードの生成処理の他の例を示すフローチャートである。図14は、図13の処理に用いられる一時領域800と連想配列900の内容の一例を模式的に示す図である。図15は、本発明の実施の形態に係る呼出毎連想配列の方法に従う呼出される側の中間コードの生成処理の他の例を示すフローチャートである。
図13の処理のうち、ステップS7aは図10のステップS7とは異なるが、他の処理は図10と同じであるので説明は繰返さない。
図13のステップS7aでは、構造体コード生成部272は、連想配列900の各エントリに、アドレス901と、実引数評価値を格納した領域のアドレス903とを設定する命令コードを生成する。ステップS7aでは、アドレス903として、関連付けられた引数が表す変数の型に基づき、当該値が格納される記憶領域のアドレスまたは当該値そのもの一方を設定する命令コードを生成する。
具体的には、構造体コード生成部272は、仮引数が入力変数に対応する場合、入力変数の型が連想配列900のアドレス903の幅以下の領域で収まる型であるときは、構造体コード生成部272はアドレス903に、アドレスではなく入力変数in1の値そのものを格納する命令コードを生成し、入力変数の型が連想配列900のアドレス903の幅以下の領域で収まる型でないときは、評価値格納の領域T1へのアドレスを格納するための命令コードを生成する。
仮引数が入出力変数に対応する場合、構造体コード生成部272は、対応のアドレス903に入出力変数inout2の値を格納するアドレス(c[i]のアドレス)を格納するための命令コードを生成する。仮引数が出力変数に対応する場合、POU601からの出力を格納する領域のアドレスを格納するための命令コードを生成する。
次に、図15を参照して、呼出される側の処理を説明する。図15の処理のうち、ステップS17aは図12のステップS17とは異なるが、他の処理は図12と同じであるので説明は繰返さない。図15のステップS17aでは、上記に述べたステップS7aにおいて、変数の種類に応じて連想配列900のエントリに格納される内容を異ならせていることに伴い、設定コード生成部274は、連想配列900から取得する値の扱いを異ならせる命令コードを生成する。
ステップS17aで生成される設定命令コード532は、仮引数に対応する変数の種類に応じて当該仮引数に設定される値を異ならせるための命令コードを含む。例えば、入力変数であれば、当該入力変数の型がアドレス幅以下の領域で収まる型の場合、エントリから値を取得し、そうでない場合、評価値を格納する領域T1へのアドレスとして扱い、領域T1から値を取得する命令コードを含む。また、入出力変数であれば、変数の値が格納される領域のアドレスを取得する命令コードを含む。また、出力変数でれば、POU601からの出力(戻り値)を格納する領域T3のアドレスを取得する命令コードを含む。
図13、図14および図15に示す変形例によれば、呼出されるPOU601の仮引数の変数の種類と変数の型により、連想配列のエントリの関連付情報904における実引数のデータとして格納する(または当該エントリの関連付情報904から取得する)内容を異ならせることができる。
<I.「種類毎連想配列」の方法>
ユーザープログラム600において呼出されるPOU601の種類毎に連想配列の領域を確保する方法を説明する。図16は、本発明の実施の形態に係る「種類毎連想配列」の方法に従う中間コードの生成処理の一例を模式的に示すフローチャートである。
図16を参照して、コンパイラ部263は、ユーザープログラム600(ソースコード610)を2回走査する。これを、以下では1回目の走査をパス1、2回目の走査をパス2という。
パス1では、コンパイラ部263の呼出検出部270は、ユーザープログラム600を例えば先頭から走査しながら(ステップS21)、呼出式550を検出するかを判定する(ステップS23)。呼出検出部270は、呼出式550を検出しないとき(ステップS23でNO)、後述するステップS29に移行する。
呼出検出部270は、呼出式550を検出すると(ステップS23でYES)、コンパイラ部263は検出された呼出式550からPOU601の種類を識別する(ステップS25)。なお、POU601の種類は、呼出式550に含まれるPOU名称などに基いている。
コンパイラ部263は、呼出式550から識別されたPOUの種類毎に、POU601が有する仮引数の個数の最大数を判定する(ステップS27)。その後、呼出検出部270はユーザープログラム600の終端まで走査したかを判定する(ステップS29)。終端まで走査していないと判定すると(ステップS29でNO)、ステップS21に戻り、走査を継続する。
呼出検出部270がユーザープログラム600を終端まで走査したと判定したとき(ステップS29でYES)、コンパイラ部263によるPOU601の種類毎の仮引数の最大数が決定済みとなる。
構造体コード生成部272は、POU601の種類毎に連想配列900を格納する領域を確保する命令コード524を生成する(ステップS31)。具体的には、構造体コード生成部272コードは、PO601の種類毎の連想配列について、当該種類に属するPOU601の仮引数の最大個数分のエントリと終端を示すエントリとを有した連想配列の領域を確保するため命令コードを生成する。これにより、パス1は終了する。
コンパイラ部263は、パス2を実行する。パス2では、ユーザープログラム600を走査し、コード生成部271は、各POU601について、パス1で確保された当該POU601の種類に対応した連想配列900を利用して上述の「呼出毎連想配列」の方法に従い中間コードを生成する(ステップS33)。これにより、パス2は終了する。
図17は、本発明の実施の形態に係る「種類毎連想配列」の方法に従い生成される連想配列の一例を模式的に示す図である。図17を参照して、パス1により、ユーザープログラム600(ソースコード610)を走査することにより、pou1、pou2、pou3の3種類のPOU601が検出された場合、構造体コード生成部272は、各種類に対応して連想配列910、920および930を作成するための作成命令コードを生成する。各連想配列は、対応の種類に属するPOU601が有する仮引数の最大個数に相当するエントリ数を有している。
図17を参照して、パス2における中間コード生成では、構造体コード生成部272は、POU呼出し毎に連想配列に値を設定する命令コードを生成する。生成される命令コードは「呼出毎連想配列」の方法と同様である。また、呼出コード生成部273は、各POU601を対応の連想配列を用いて呼出しコードを生成する。この場合も「呼出毎連想配列」に方法と同様に、連想配列の記憶領域の先頭アドレスを用いた呼出しコードが生成される。
また、コード生成部271は、POU601の処理から戻った場合に、連想配列910、920,930の記憶領域の内容を初期化(クリア)する命令コマンドを生成する。連想配列の初期化の命令コードは、例えば、連想配列910、920,930の先頭のエントリにターミネータなどを設定することを指示する命令コードを含む。
このように、POU601の種類毎の連想配列を、当該種類に属するPOU601が呼出される毎に、連想配列の関連付情報904の設定と初期化とを実施する命令コードが生成される。これにより、同一種類に属する各POU601について同一の連想配列を繰返し利用することが可能となる。
(I−1.「種類毎連想配列」の中間コード)
図18は、本発明の実施の形態に係る種類毎連想配列の方法に従い生成される中間コードの一例を模式的に示す図である。図18の中間コードは、POU(foo)を呼出す側である図5のプログラムbarから、コード生成部271による種類毎連想配列の方法に従い生成された中間コード518の一例を示す。
中間コード518は、POU601の仮引数の最大個数分のエントリを有した連想配列の記憶領域を確保するための命令コード524と、図6と同様の他の部分のコード503と、POU601の呼出しに関連して生成されたコード528とを含む。コード528は、POU601の呼出命令コード526と、連想配列の作成命令コード525と、連想配列の領域の初期化を指示する命令コード527とを含む。連想配列の作成命令コード525は、連想配列(“foo_arg_area”)の各エントリに関連付情報を設定する指令である、図8で示した命令コード5210および命令コード5213を含む。命令コード5213は、連想配列に関連付情報を格納することを指示する命令コードであり、連想配列の識別子は異なるが図8の命令コード5212と同様であるので説明は繰返さない。
命令コード524は、連想配列の識別子(“foo_arg_area”)を指定して、引数の最大個数(例えば4個)分の領域(エントリ)と配列の終端(ターミネータ)を示すデータ(例えば、NULL)を格納する領域を確保するための命令を示す。
呼出命令コード526は、連想配列の識別子(“foo_arg_area”)を用いてPOU601を呼出すための命令を表す。
また、命令コード527は、POU601の処理が終了するときに、連想配列の記憶領域を初期化するための命令を表す。
このように、「種類毎連想配列」の方法に従う中間コードでは、呼出されたPOU601の処理が終了する都度、当該POUの種類に該当する連想配列を初期化する命令コード524を含めることで、連想配列を同一種類の複数のPOU601で共用することが可能になる。したがって、「呼出毎連想配列」の中間コードのようにPOUの呼出し毎に連想配列の領域を確保する処理、およびPOU601の処理が終了する都度、連想配列の記憶領域を解放する処理を省略することができる。
本実施の形態では、「種類毎連想配列」で生成される中間コードは、ビルド単位(一般に中間コード700のファイルがリンクされた単位)で、連想配列の記憶領域をPLC100の静的記憶領域に確保する命令コードを含んでもよい。この静的記憶領域は、ビルド単位のユーザープログラム600の中間コードを、PLC100にロードされた時から削除される時まで保持することを可能にする記憶領域である。したがって、同一のビルド単位では、上記のパス1の実行回数を1回にすませることができる。
「種類毎連想配列」で生成される中間コードは、連想配列の記憶領域を、ビルド単位内のみからの参照(またはデータの読み書き)を許可し、ビルド単位外から参照(またはデータの読み書き)は禁止するための命令コードを含んでもよい。これにより、連想配列は、上記の静的記憶領域に保持されるとしても、ビルド単位外からのデータの読書きはなされないので、連想配列内のデータの予期しない、または意図しない変更を防止することができる。
また、「種類毎連想配列」で生成される中間コードは、同一種のPOU601が使用する連想配列について排他制御を実施するための命令コードを含んでもよい。種類毎連想配列について、排他制御が実施されることにより、ビルド単位内で同一種のPOU601を呼出して並列に実行させることが可能となる。
また、「種類毎連想配列」で生成される中間コードは、連想配列の内容(関連付情報904)の退避/復帰などの処理を実施するための命令コードと、再帰的に同一種のPOU601を呼出す命令コードとを含んでもよい。これにより、連想配列の内容の退避/復帰の処理を実施しながら、同一種類のPOUの再帰的呼出しが可能となる。
<J.組込関数>
図19は、本発明の実施の形態に係る組込関数570の呼出しの書式と内容を模式的に示す図である。
本実施の形態では、ユーザーは、プログラム作成部261を用いてPOU601内に図19の組込関数570(関数名はisArgSpecified)を記述することができる。
上記に述べたように、実引数が省略されるときは、引数にはデフォルト値またはエラーを表す値が設定される(ステップS19を参照)ので、呼出されるPOU601は、このような設定値から省略がなされたことを判定できるが、この判定方法は設定命令コード532(設定コード生成部274)の内容に依存する。これに対して、組込関数570を用いた判定方法は、設定命令コード532(設定コード生成部274)の内容に依存せずに、POU601は、組込関数570が実行されることで、実引数が設定(または省略)されているかの設定内容を判定することができる。
したがって、ユーザーはPOU601に組込関数570を記載することで、設定命令コード532(設定コード生成部274)の内容に依存せずに、組込関数570の判定結果(戻り値)に基づき、実引数が省略された場合の明示的な処理を実行させるようなプログラミングが可能となる。また、実引数が省略された場合にデフォルト値が設定されるケースでは、実際に実引数が省略されたのか、または実引数(実引数は省略されておらず)にデフォルト値が設定されたのかを示す設定内容を、組込関数570を用いて判定することも可能となる。
<K.プログラム>
本実施の形態に示した各フローチャートの処理を含むコンパイラ部263の処理を実行するためのサポートプログラムは、サポート装置200の記憶部(ROM204、RAM206、HDD208、記録媒体250など)に格納されている。CPU202は、記憶部からサポートプログラムを読出し、実行することにより、本実施の形態で説明したコード生成部271を含むコンパイラ部263を実現することが可能となる。
このようなサポートプログラムは、サポート装置200に付属するフレキシブルディスク、CD−ROM(Compact Disk-Read Only Memory)、ROM、RAMおよび記録媒体250などのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、サポート装置200に内蔵するHDD208などの記録媒体にて記録させて、プログラムを提供することもできる。また、図示しないネットワークから通信インターフェイスを介したダウンロードによって、プログラムを提供することもできる。
<L.変形例>
上記の実施の形態では、構造体コード生成部272は、呼出式550に引数が無い場合であっても、作成命令コード521、525を生成することができる。この場合、作成命令コード521、525は、仮引数名のアドレス901として終端(ターミネータ)データ(例えば、NULL)および対応の設定する値のアドレス902としてN/Aの値を有した関連付情報904のみを格納する連想配列900の作成を指示する命令コードを含む。設定コード生成部274は、このような終端データの関連付情報904のみを格納した連想配列900については予め定められた仕様に従う処理を実行させる命令コードを生成する。また、呼出されるPOU601の引数が0個であるときは、設定コード生成部274は、例えば、予め定められた仕様に従う処理を実行させる命令コードを生成する。
<M.利点>
本実施の形態によれば、各PLC100のライブラリ113に格納されるPOU601の種類に依存せずに、異なるPLC100間で、ユーザープログラム600(すなわち実行可能形式コード(中間コード700))をコピーして利用することが可能となる、いわゆるユーザープログラム600のバイナリ互換性を確保することができる。
また、コード生成部271により、ユーザープログラム600から後方互換性を有した実行可能形式コード(中間コード700)を生成することが可能となる。すなわち、制御装置においてユーザープログラム600を実行するプロセッサまたはOS(Operating System)などのプログラム実行環境にバージョンアップの変更があった(例えば、制御装置で呼出されるPOUの引数に変更があった)場合、元の実行可能形式コードを変化後の実行環境に対応したバージョンに変更せずとも、PLC100では変化後のプロセッサまたはOSのもとで元の実行可能形式コード(中間コード700)を実行することができる。
また、上記の互換性をさらに説明する。図20は、本実施の形態により奏される利点の一例を模式的に示す図である。図20を参照して、ライブラリ113には、入力の引数が変数in1〜in3であるPOU601−1が登録されて、ユーザープログラム600は呼出式550−1を含む場合は、図示されるように両者の引数の個数と引数名は一致するので、呼出命令コード522または526が実行されたときは、従来と同様に、ユーザープログラム600の実行中にPOU601−1を呼出してその単位プログラムを実行することができる。
これに対して、ライブラリ113には、入力の引数が変数in1〜in4であるPOU601−2が登録されて、ユーザープログラム600は呼出式550−1を含む場合は、図示されるように入力変数in4の引数において両者の引数の個数と引数名は一致しない。したがって、呼出式550−1を変換した呼出命令コード522または526が実行されたときは、入力変数in4の仮引数に対応の実引数は存在しないので、当該仮引数に設定するべき値(実引数)は省略されたとして、例えばデフォルト値が設定される(例えば、図12のステップS15およびステップS19の命令コードが実行される)。
また、図20を参照して、ライブラリ113には、入力の引数が変数in1〜in4であるPOU601−2が登録されて、ユーザープログラム600は呼出式550−2を含む場合は、図示されるように両者の引数の個数と引数名は一致するので、呼出式550−2を変換した呼出命令コード522または526が実行されたときは、従来と同様に、ユーザープログラム600の実行中にPOU601−2を呼出してその単位プログラムを実行することができる。
これに対して、ライブラリ113には、入力の引数が変数in1〜in3であるPOU601−1が登録されて、ユーザープログラム600は呼出式550−2を含む場合は、図示されるように入力変数in4の引数において両者の引数の個数と引数名は一致しない。したがって、ユーザープログラム600の実行中に呼出式550−2を変換した呼出命令コード522または526が実行されたときは、入力変数in4の仮引数に対応の実引数は無視される。
図20で示すように、ユーザープログラム600で記載される呼出式550が含む仮引数の個数および引数名に依存せずに、また、ライブラリ113に登録されるPOU601の引数の個数および引数名に依存せずに、PLC100では、POU601を呼出しながらユーザープログラム600を実行することができる。これにより、本実施の形態では、ユーザープログラム600の実行可能形式コードの互換性であるバイナリ互換性、およびPOU互換性を提供することができる。
また、このことは、各PLC100が有する実行可能形式コードのバージョン管理を容易化する。また、ユーザーは、PLC100のライブラリ113に登録されているPOU601は利用可能なバージョンであるかなどを意識せずとも、サポート装置200においてユーザープログラム600を開発することができる。
<N.付記>
上述したような本実施の形態は、以下のような技術思想を含む。
[構成1]
制御対象を制御する制御装置(100)で実行されるユーザープログラム(600)の開発を支援するサポート装置(200)であって、
前記ユーザープログラムを走査し、当該ユーザープログラムから当該ユーザープログラムを構成する呼出し可能な単位プログラム(601)を呼出すための呼出式(550)を検出する呼出検出部(270)と、
前記ユーザープログラムから前記制御装置で実行可能な形式のコード(700)を生成するコード生成部(271)と、を備え、
前記コード生成部は、
前記呼出式について、引数名と、当該引数に設定する値とを関連付けるための関連付情報(904)を格納する構造体(900)を作成するための作成命令コードを生成する構造体コード生成部(272)と、
前記呼出式を、前記構造体の識別子を用いて当該単位プログラムを呼出すための呼出命令コード(522,526)に変換する呼出コード生成部(273)と、
前記単位プログラムが1以上の引数が有する場合に、各引数について、前記構造体に当該引数の引数名に対応の前記関連付情報が格納されているときは、当該引数に前記関連付情報の前記値を設定し、前記関連付情報が格納されていないときは、当該引数に所定値を設定するための設定命令コードを生成する設定コード生成部(274)と、を含む、サポート装置。
[構成2]
前記構造体コード生成部は、
前記呼出検出部により前記単位プログラムの呼出式が検出される毎に、前記構造体を作成するための前記作成命令コードを生成する、構成1に記載のサポート装置。
[構成3]
前記構造体コード生成部は、
前記呼出検出部が検出する前記呼出式により呼出される前記単位プログラムの種類毎に、前記構造体を作成するための前記作成命令コードを生成する、構成1に記載のサポート装置。
[構成4]
前記関連付情報は、前記引数名を示す情報(901)と、前記値を示す情報(902,903)とを含み、
前記引数名を示す情報は、当該引数名が格納される記憶領域のアドレスを含み、
前記値を示す情報は、当該値が格納される記憶領域(800)のアドレスを含む、構成1から3のいずれか1に記載のサポート装置。
[構成5]
前記引数は、前記ユーザープログラムで用いられる変数を表し、
前記値を示す情報は、関連付けされる前記引数が表す変数の型に基づき、当該値が格納される記憶領域のアドレスまたは当該値の一方を含む、構成4に記載のサポート装置。
[構成6]
前記単位プログラムは、当該単位プログラムの各引数の設定内容を判定する関数を含む、構成1から5のいずれか1に記載のサポート装置。
[構成7]
前記呼出コード生成部は、前記構造体の識別子として、当該構造体が格納される領域のアドレスを用いて、前記呼出し式を前記呼出命令コード(522、526)に変換する、構成1から6のいずれか1に記載のサポート装置。
[構成8]
前記コード生成部は、
前記単位プログラムが引数を有しない場合に、予め定められた処理を実行させる命令コードを生成する、構成1から7のいずれか1に記載のサポート装置。
[構成9]
制御対象を制御する制御装置で実行されるユーザープログラムの開発を支援するサポート装置を実現するためのサポートプログラムであって、前記サポートプログラムは、コンピュータを、
前記ユーザープログラムを走査し、当該ユーザープログラムから当該ユーザープログラムを構成する呼出し可能な単位プログラムを呼出すための呼出式を検出する呼出検出部と、
前記ユーザープログラムから前記制御装置で実行可能な形式のコードを生成するコード生成部として機能させ、
前記コード生成部は、
前記呼出式について、引数名と、当該引数に設定する値とを関連付けるための関連付情報を格納する構造体を作成するための作成命令コードを生成する構造体コード生成部と、
前記呼出式を、前記構造体の識別子を用いて当該単位プログラムを呼出すための呼出命令コードに変換する呼出コード生成部と、
前記単位プログラムが1以上の引数が有する場合に、各引数について、前記構造体に当該引数の引数名に対応の前記関連付情報が格納されているときは、当該引数に前記関連付情報の前記値を設定し、前記関連付情報が格納されていないときは、当該引数に所定値を設定するための命令コードを生成する設定コード生成部と、を含む、サポートプログラム。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
1 PLCシステム、11 システムバス、12 電源ユニット、102 プロセッサ、104 チップセット、106 メインメモリ、108 フラッシュメモリ、110 システムプログラム、113 ライブラリ、116 外部ネットワークコントローラ、118 メモリカードインターフェイス、120 メモリカード、122 内部バスコントローラ、124 フィールドバスコントローラ、200 サポート装置、204 ROM、206 RAM、210 キーボード、212 マウス、214 ディスプレイ、216 転送部、217 記録媒体読取装置、218 通信インターフェイス、250 記録媒体、260 プログラム開発部、261 プログラム作成部、262 プログラム編集部、263 コンパイラ部、270 呼出検出部、271 コード生成部、272 構造体コード生成部、273 呼出コード生成部、274 設定コード生成部、521,525 作成命令コード、522,526 呼出命令コード、523 解放命令コード、532 設定命令コード、550 呼出式、570 組込関数、600 ユーザープログラム、600A シーケンスプログラム、600B モーションプログラム、610 ソースコード、800 一時領域、900,910 連想配列、904 関連付情報、T1,T2,T3 領域。

Claims (9)

  1. 制御対象を制御する制御装置で実行されるユーザープログラムの開発を支援するサポート装置であって、
    前記ユーザープログラムを走査し、当該ユーザープログラムから当該ユーザープログラムを構成する呼出し可能な単位プログラムを呼出すための呼出式を検出する呼出し検出部と、
    前記ユーザープログラムから前記制御装置で実行可能な形式のコードを生成するコード生成部と、を備え、
    前記コード生成部は、
    前記呼出式について、引数名と、当該引数に設定する値とを関連付けるための関連付情報を格納する構造体を作成するための作成命令コードを生成する構造体コード生成部と、
    前記呼出式を、前記構造体の識別子を用いて当該単位プログラムを呼出すための呼出命令コードに変換する呼出コード生成部と、
    前記単位プログラムが1以上の引数を有する場合に、各引数について、前記構造体に当該引数の引数名に対応の前記関連付情報が格納されているときは、当該引数に前記関連付情報の前記値を設定し、前記関連付情報が格納されていないときは、当該引数に所定値を設定するための設定命令コードを生成する設定コード生成部と、を含む、サポート装置。
  2. 前記構造体コード生成部は、
    前記呼出し検出部により前記単位プログラムの呼出式が検出される毎に、前記構造体を作成するための前記作成命令コードを生成する、請求項1に記載のサポート装置。
  3. 前記構造体コード生成部は、
    前記呼出し検出部が検出する前記呼出式により呼出される前記単位プログラムの種類毎に、前記構造体を作成するための前記作成命令コードを生成する、請求項1に記載のサポート装置。
  4. 前記関連付情報は、前記引数名を示す情報と、前記値を示す情報とを含み、
    前記引数名を示す情報は、当該引数名が格納される記憶領域のアドレスを含み、
    前記値を示す情報は、当該値が格納される記憶領域のアドレスを含む、請求項1から3のいずれか1項に記載のサポート装置。
  5. 前記引数は、前記ユーザープログラムで用いられる変数を表し、
    前記値を示す情報は、関連付けされる前記引数が表す変数の型に基づき、当該値が格納される記憶領域のアドレスまたは当該値の一方を含む、請求項4に記載のサポート装置。
  6. 前記単位プログラムは、当該単位プログラムの各引数の設定内容を判定する関数を含む、請求項1から5のいずれか1項に記載のサポート装置。
  7. 前記呼出コード生成部は、前記構造体の識別子として、当該構造体が格納される領域のアドレスを用いて、前記呼出式を前記呼出命令コードに変換する、請求項1から6のいずれか1項に記載のサポート装置。
  8. 前記設定コード生成部は、
    前記単位プログラムが引数を有しない場合に、予め定められた処理を実行させる命令コードを生成する処理命令コード生成部を含む、請求項1から7のいずれか1項に記載のサポート装置。
  9. 制御対象を制御する制御装置で実行されるユーザープログラムの開発を支援するサポート装置を実現するためのサポートプログラムであって、前記サポートプログラムは、コンピュータを、
    前記ユーザープログラムを走査し、当該ユーザープログラムから当該ユーザープログラムを構成する呼出し可能な単位プログラムを呼出すための呼出式を検出する呼出し検出部と、
    前記ユーザープログラムから前記制御装置で実行可能な形式のコードを生成するコード生成部として機能させ、
    前記コード生成部は、
    前記呼出式について、引数名と、当該引数に設定する値とを関連付けるための関連付情報を格納する構造体を作成するための作成命令コードを生成する構造体コード生成部と、
    前記呼出式を、前記構造体の識別子を用いて当該単位プログラムを呼出すための呼出命令コードに変換する呼出コード生成部と、
    前記単位プログラムが1以上の引数を有する場合に、各引数について、前記構造体に当該引数の引数名に対応の前記関連付情報が格納されているときは、当該引数に前記関連付情報の前記値を設定し、前記関連付情報が格納されていないときは、当該引数に所定値を設定するための命令コードを生成する設定コード生成部と、を含む、サポートプログラム。
JP2018040510A 2018-03-07 2018-03-07 サポート装置およびサポートプログラム Active JP6720993B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2018040510A JP6720993B2 (ja) 2018-03-07 2018-03-07 サポート装置およびサポートプログラム
PCT/JP2019/001782 WO2019171794A1 (ja) 2018-03-07 2019-01-22 サポート装置およびサポートプログラム
US16/643,578 US11221828B2 (en) 2018-03-07 2019-01-22 Support device and support program
EP19765033.6A EP3764219A4 (en) 2018-03-07 2019-01-22 SUPPORT SYSTEM AND SUPPORT PROGRAM
CN201980004240.XA CN111095196B (zh) 2018-03-07 2019-01-22 支持装置以及记录介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018040510A JP6720993B2 (ja) 2018-03-07 2018-03-07 サポート装置およびサポートプログラム

Publications (2)

Publication Number Publication Date
JP2019159361A true JP2019159361A (ja) 2019-09-19
JP6720993B2 JP6720993B2 (ja) 2020-07-08

Family

ID=67845988

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018040510A Active JP6720993B2 (ja) 2018-03-07 2018-03-07 サポート装置およびサポートプログラム

Country Status (5)

Country Link
US (1) US11221828B2 (ja)
EP (1) EP3764219A4 (ja)
JP (1) JP6720993B2 (ja)
CN (1) CN111095196B (ja)
WO (1) WO2019171794A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10585647B2 (en) * 2017-05-02 2020-03-10 International Business Machines Corporation Program optimization by converting code portions to directly reference internal data representations
JP2022135170A (ja) * 2021-03-04 2022-09-15 オムロン株式会社 開発支援装置、開発支援装置の制御方法、情報処理プログラム、および記録媒体

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6247067B1 (en) * 1996-03-29 2001-06-12 Sun Microsystems, Inc. Transparently converting program calls between interfaces
JP3726992B2 (ja) * 1998-02-17 2005-12-14 株式会社日立製作所 一括関数呼出化方法
JP2001331315A (ja) 2000-05-24 2001-11-30 Sony Corp データ処理システム及び方法、並びに、記憶媒体
US7490320B2 (en) * 2005-02-18 2009-02-10 International Business Machines Corporation Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation
JP5115160B2 (ja) * 2007-11-27 2013-01-09 富士電機株式会社 プログラム開発支援装置、プログラム開発支援方法およびプログラム開発支援プログラム
JP4572259B1 (ja) * 2009-04-27 2010-11-04 株式会社フォティーンフォティ技術研究所 情報機器、プログラム及び不正なプログラムコードの実行防止方法
CN102099781A (zh) * 2009-05-19 2011-06-15 松下电器产业株式会社 分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质
JP6491438B2 (ja) * 2014-08-29 2019-03-27 株式会社日立社会情報サービス マイグレーション支援装置
JP6812637B2 (ja) * 2016-01-20 2021-01-13 富士電機株式会社 プログラマブルコントローラシステム、その開発支援装置、ターゲット装置

Also Published As

Publication number Publication date
JP6720993B2 (ja) 2020-07-08
CN111095196B (zh) 2024-03-01
CN111095196A (zh) 2020-05-01
WO2019171794A1 (ja) 2019-09-12
US11221828B2 (en) 2022-01-11
US20200201605A1 (en) 2020-06-25
EP3764219A4 (en) 2021-12-01
EP3764219A1 (en) 2021-01-13

Similar Documents

Publication Publication Date Title
WO2013114926A1 (ja) サポート装置、サポートプログラムを記録した記録媒体、および実行可能プログラムを生成する方法
CN109324799A (zh) 一种代码编译方法、计算机装置及计算机可读存储介质
JPH10320214A (ja) コンパイルシステム及びコンピュータプログラム製品
JP4041248B2 (ja) コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
JP5811088B2 (ja) データ処理システム及びデータ処理方法
WO2019171794A1 (ja) サポート装置およびサポートプログラム
US20060184924A1 (en) Intelligent platform management interface firmware architecture and method of building the same
JPH11119981A (ja) プログラム生成装置
US11886839B2 (en) Non-transitory computer-readable recording medium, function generation method, and information processing device
JP2008165342A (ja) ソースコード生成方法及び装置並びにプログラム
JP2016224559A (ja) プログラム作成支援装置、制御方法およびプログラム
JP7001012B2 (ja) サポート装置およびサポートプログラム
CN115390846A (zh) 编译构建方法、装置、电子设备和存储介质
JP2008250838A (ja) ソフトウェア生成装置、方法、およびプログラム
KR100478463B1 (ko) 응용 프로그램의 동적링크 방법
CN113157329A (zh) 启动应用的方法、系统、服务器和存储介质
CN106445483A (zh) 生成行动应用程序的方法和系统
JP2019179383A (ja) Api処理方法、端末、api処理プログラム
TWI774469B (zh) 程式編譯管理系統與其作業方法
JP6295914B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ
CN117608590B (zh) 数据组包解包方法、装置和计算机设备
JP2009098963A (ja) モジュール自動生成システム
KR100490899B1 (ko) 자바 카드 개발 환경을 위한 암호 알고리즘 패키지 추가 기능 구현 방법
CN115878197A (zh) 基于设备树的启动优化方法、系统、芯片、设备和介质
CN117608562A (zh) 一种可执行程序生成方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200306

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200519

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200601

R150 Certificate of patent or registration of utility model

Ref document number: 6720993

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250