JP6020071B2 - プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ - Google Patents

プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ Download PDF

Info

Publication number
JP6020071B2
JP6020071B2 JP2012250705A JP2012250705A JP6020071B2 JP 6020071 B2 JP6020071 B2 JP 6020071B2 JP 2012250705 A JP2012250705 A JP 2012250705A JP 2012250705 A JP2012250705 A JP 2012250705A JP 6020071 B2 JP6020071 B2 JP 6020071B2
Authority
JP
Japan
Prior art keywords
volatile memory
memory
programmable controller
variable
allocation
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.)
Active
Application number
JP2012250705A
Other languages
English (en)
Other versions
JP2014099066A (ja
Inventor
良生 苔縄
良生 苔縄
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.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Co Ltd
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 Fuji Electric Co Ltd filed Critical Fuji Electric Co Ltd
Priority to JP2012250705A priority Critical patent/JP6020071B2/ja
Publication of JP2014099066A publication Critical patent/JP2014099066A/ja
Application granted granted Critical
Publication of JP6020071B2 publication Critical patent/JP6020071B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Programmable Controllers (AREA)

Description

本発明は、プログラマブルコントローラのプログラムの変数に係るメモリ割当方式に関する。
図6に、従来のプログラマブルコントローラシステムの一例を示す。
従来より、プログラマブルコントローラ(PLC)に係るシステムの一例として、図6に示すような、プログラマブルコントローラ本体(PLC100)と支援装置110とが通信線等を介して接続された構成が知られている。
支援装置110は、PLC100が実行する制御プログラム等をユーザが任意に作成できるように支援する機能(不図示)を有する。ユーザは、この支援機能を利用して任意の制御プログラムのソースコード(ユーザアプリケーション112)を作成する。
このユーザアプリケーション112の作成に使用するプログラム言語は、様々であるが、通常は、IEC61131−3規格の5種類のプログラム言語(以下、IEC言語と記す場合もあるものとする)のうちの何れかを使用することになる。
上記5種類のプログラム言語は、例えばラダー図、FB(ファンクションブロック)等である。ここでは、ユーザアプリケーション112は、例えば図示のPG(プログラム)、FB(ファンクションブロック)、FCT(ファンクション)の3つのPOU要素により記述される。
図7に、FB(ファンクションブロック)の一例を示す。
この例のFB(ファンクションブロック)に係る変数として、図示の外部変数1,2、3と、内部変数1,2がある。外部変数は、外部からのFBに対する入力や、FBから外部への出力に用いられる変数である。内部変数は、FB内部で保持/使用される変数であり、図示の例に限らず、更に他の内部変数が存在する場合も有り得る。
支援装置110は、例えば上記FB等を用いて記述されたユーザアプリケーション112を、コンパイルして機械語等の実行コード群(実行オブジェクト113)に変換するコンパイラ111も有している。そして、支援装置110は、コンパイラ111が生成した実行オブジェクト113を、通信線等を介してPLC100にダウンロードする機能も有する。
また、ユーザアプリケーション112の実行オブジェクト113をPLC100で動作させるためには、各変数をPLC100内のメモリに割当てる必要があり、従来より、コンパイラ機能が変数のメモリ割当てを実施している。すなわち、コンパイラ111は、上記コンパイル実行の際に、上記FB等の各変数等に対してメモリアドレス割当てを行う。この変数のメモリアドレス割当ては、PLC100内のメモリに対して行われる。
また、ユーザが作成した各FB(以下、ユーザFBと記す)は、各々、プログラムコードは1つであるが(通常は)複数個インスタンス化される。このため、プログラムコードでは、変数を絶対番地でのアクセスではなく、相対番地でのアクセスとするコードになり、各ユーザFBのインスタンス毎に、ある基準を示すレジスタ(インデックスレジスタやベースレジスタやベースポインタ等と呼ばれる;インスタンス領域の先頭アドレスを示すポインタ等と見做してよい)を使用して、この基準アドレスからの相対アドレスによって、ユーザFBに係る内部変数にアクセスしていた。
内部変数に係わるメモリアドレス割当てに関しては、各FBインスタンス毎に、1つのインデックスレジスタが割り当てられると共に、このインデックスレジスタを先頭とする所定の記憶領域(例えば内部変数の数に応じた記憶容量)が、そのFBインスタンスに割り当てられる記憶領域(インスタンス領域)として確保される。これは、換言すれば、各FBインスタンス毎に、その各FBインスタンスに係る全内部変数の割当領域が、纏めて確保されることになる。
ここで、支援装置110は、例えば上記ユーザFBに関して、上記変数のうち特に上記外部変数としての各変数の保持属性/非保持属性をユーザが任意に指定できる機能も有する場合がある。保持属性の変数は、PLC100側で運用中にたとえPLC100が電源オフしても消去されずに残されることが必要となる変数である(よって、不揮発性メモリに格納させるべき変数である)。非保持属性の変数は、この様な場合は消去されても構わない変数である(よって、揮発性メモリに格納してもよいが、不揮発性メモリに格納しても構わない変数である)。これら各外部変数の保持属性/非保持属性は、ユーザが任意に判断して設定する。
一方、従来では、内部変数の保持属性/非保持属性をユーザが任意に設定することは、行われていない。これは技術的には容易に実現可能であるが、あまり意味がないので、行っていないものである。つまり、上記のように内部変数に関しては、FBインスタンス単位で纏めてメモリアドレス割当てが行われるが、1つでも保持属性の内部変数があれば揮発性メモリに割り当てるわけにはいかない為、従来では常に纏めて不揮発性メモリへの割当てを行っていた。
PLC100は、不図示の制御対象機器や不図示のプログラマブル表示器等にも接続されている。PLC100は、上記ダウンロードされた実行オブジェクト113を記憶してこれを実行することで、上記制御対象機器等の制御を行う。この実行中、上記各変数に係る処理に関するデータが、PLC100内のメモリの割当領域に対してリード/ライトされることになる。
ここで、PLC100は、不図示のフラッシュメモリ、SRAM(バッテリーバックアップ付)、DRAM等を有している。フラッシュメモリやSRAM(バッテリーバックアップ付)は不揮発性メモリ、DRAMは揮発性メモリである。
上記ダウンロードされた実行オブジェクト113は、通常、不図示のフラッシュメモリに記憶される。また、保持属性の変数のメモリアドレス割当ては、揮発性メモリ(不図示)に行うべきではなく、従来の一例では不揮発性メモリ101(例えばSRAM(バッテリーバックアップ付等)に割当てられていた。一方、非保持属性の変数のメモリアドレス割当ては、揮発性メモリに行ってもよいし、不揮発性メモリ101に行ってもよい。
ここで、上記コンパイラ111による変数メモリ割当ては、特に上記内部変数に関しては、既に述べたように、各変数単位ではなく、FBインスタンス単位で行われていた。そして、各FBインスタンス毎に、その全内部変数のメモリ割当領域をまとめて不揮発性メモリ101に割り当てていた。
また、特許文献1の従来技術が知られている。
特許文献1の発明は、ファンクションブロックを含むシーケンスプログラムを編集するシーケンスプログラム編集装置において、修正したファンクションブロック定義を指定(入力)するだけで、既にシーケンスプログラムの中で使用しているファンクションブロックインスタンスを「検索」、「削除」すると共に、「修正したファンクションブロック定義の再インスタンス化」を自動的に行い情報の再入力を省略することができる。
また、特許文献1の図2には、ファンクションブロック定義の構成要素として内部変数等が示されている。
特開2009−9462号公報
不揮発性メモリ(特にSRAM等)は、揮発性メモリ(DRAM等)に比べて、高価、容量が小さい上に、単一のデータアクセスでは揮発性メモリに比べて速いものの、1回のアクセスで128バイトアクセスできるバースト転送や、キャッシュを用いた高速化ができないため、トータルのアクセス性能は劣ってしまうという特徴がある。
上記従来技術では、上述したように、不揮発性メモリ101のインスタンス領域にユーザFBの内部変数全てを纏めて割当てる必要があり、上記特徴が要因となりユーザアプリケーションの実行速度の低下等を招いている。これは、特に近年、PLCのプログラミングが大規模になり、構造化設計を実施すると、ユーザFBを多用するプログラミングになり、インスタンスサイズも大きくなる傾向であるので、問題の影響が大きくなっている。
本発明の課題は、ユーザFBの内部変数のメモリ割当てに関して、FB単位でまとめてメモリ割当てを行う場合であっても、不揮発性メモリには保持属性の変数のみが割り当てられるようにでき、不揮発性メモリの割当領域を削減でき、PLC運用中の動作時に不揮発性メモリへのアクセス頻度を減少させることができるプログラマブルコントローラシステム等を提供することである。
本発明のプログラマブルコントローラシステムは、少なくともファンクションブロックを用いて記述される任意のプログラムの作成支援機能と、該プログラムをコンパイルして実行コードを生成するコンパイラとを有する支援装置と、前記実行コードを実行するプログラマブルコントローラとが接続されたプログラマブルコントローラシステムであって、下記の構成を有する。
すなわち、まず、前記コンパイラは、下記の各手段を有する。
・前記コンパイルの際の各変数のメモリ割当てを行う手段であって、前記ファンクションブロックの内部変数に係わるメモリ割当ては、各ファンクションブロック毎に、保持属性/非保持属性に係らず纏めて揮発性メモリへの割当てを行うと共に保持属性の内部変数に関しては更に不揮発性メモリへの割当てを行うメモリ割当手段;
・前記保持属性の内部変数に係わる前記揮発性メモリ上の割当領域と前記不揮発性メモリ上の割当領域とを対応付けて記録したインスタンス初期値情報を生成するインスタンス初期値情報生成手段;
・前記保持属性の内部変数に関しては、前記揮発性メモリ上の割当領域を介して前記不揮発性メモリ上の割当領域へのアクセスを行う前記実行コードを生成する実行コード生成手段;
また、前記プログラマブルコントローラは、電源投入時の初期化処理の際に、前記インスタンス初期値情報に基づいて、前記保持属性の内部変数に係る前記揮発性メモリ上の割当領域に、前記不揮発性メモリ上の割当領域のアドレス情報を格納する初期化手段を有する。
本発明のプログラマブルコントローラシステム等によれば、ユーザFBの内部変数のメモリ割当てに関して、FB単位でまとめてメモリ割当てを行う場合であっても、不揮発性メモリには保持属性の変数のみが割り当てられるようにでき、不揮発性メモリの割当領域を削減でき、PLC運用中の動作時に不揮発性メモリへのアクセス頻度を減少させることができる。
本例のプログラマブルコントローラシステムの構成図である。 (a)にはFBインスタンスの具体例、(b)は保持属性/非保持属性設定画面例である。 PLCにおける変数のメモリ割当内容の具体例を示す図である。 (a)は変数のメモリ割当例、(b)はプログラムの実行コード生成例である。 インスタンス初期値情報の具体例である。 従来のプログラマブルコントローラシステムの構成図である。 ファンクションブロックの一例である。
以下、図面を参照して本発明の実施の形態について説明する。
図1は、本例のプログラマブルコントローラシステムの構成図である。
本例のプログラマブルコントローラシステムも、概略的には上記従来と略同様に、プログラマブルコントローラ本体(PLC10)と支援装置20とが通信線等を介して接続された構成となっている。但し、これらPLC10、支援装置20が備える処理機能は、上記従来のPLC100、支援装置110の処理機能とは異なる点がある。尚、ここでも特に図示しないが上記従来と同様、PLC10は更に不図示の制御対象機器等と接続している。
PLC10は、不揮発性メモリ11(バックアップ付SRAM等)、揮発性メモリ12(DRAM等)を有する。これらのメモリは、例えば、運用中の制御プログラム(実行オブジェクト23)実行による各種処理に伴って生じる各種データ(上記変数に係わるデータ等)を格納するものである。
PLC10は、支援装置20が生成してダウンロードしてくる後述する実行オブジェクト23を、従来と同様に自己の不図示のフラッシュメモリ等に記憶する。実行オブジェクト23に係わる各変数であって特にFBの各内部変数に関しては、上記従来と同様に任意のメモリアドレスが割り当てられている。但し、従来では不揮発性メモリ11にのみ割り当てられているのに対して、本手法では揮発性メモリ12に割り当てられると共に、保持属性変数については更に不揮発性メモリ11にも割り当てられている。つまり、不揮発性メモリ11への変数メモリ割当てが従来よりも少なくて済む。これについて、詳しくは後述する。
また、PLC10は、支援装置20が生成してダウンロードしてくる後述するインスタンス初期値情報24も、上記フラッシュメモリ等に記憶する。そして、PLC10は、そのシステム処理部13が、このインスタンス初期値情報24に基づいて後述するインスタンス初期値展開処理を実行する。これについても詳しくは後述する。
支援装置20は、従来と同様、PLC10が実行する制御プログラム等をユーザが任意に作成できるように支援する機能(不図示)を有する。ユーザは、この支援機能を利用して任意の制御プログラムのソースコード(ユーザアプリケーション22)を作成する。このユーザアプリケーション22は、例えば図示のPG(プログラム)、FB(ファンクションブロック)、FCT(ファンクション)の3つのPOU要素により記述される。ユーザアプリケーション22自体は、従来のユーザアプリケーション112と同じであっても構わない。
支援装置20は、コンパイラ21を有する。このコンパイラ21の処理機能は、従来のコンパイラ111とは異なる。すなわち、コンパイラ21は、実行オブジェクト生成機能部21a、FBインスタンスマッピング処理部21bの各処理機能部を有する。
実行オブジェクト生成機能部21aは、上記ユーザアプリケーション22をコンパイルして機械語等の実行コード群(実行オブジェクト23)を生成する。その際、FB等に係わる各変数に対するメモリアドレス割当てを行うが、このメモリ割当方法とそれに伴って生成される実行コード等が従来とは異なる。これについて詳しくは後に図4の具体例を参照して説明するものとし、ここでは概略的に説明する。
すなわち、実行オブジェクト生成機能部21aの上記メモリ割当方法は、例えば、まず、FB単位でそのFBの全ての内部変数をまとめて揮発性メモリ12(DRAM等)における任意の記憶領域に割り当てる。上記のようにFB単位でまとめて内部変数のメモリ割当を行うという制約がある為、この点では従来と同じであるが、従来では不揮発性メモリ11(バックアップ付SRAM等)にまとめて割り当てていたのに対して、本手法では上記のように揮発性メモリ12にまとめて割り当てる。
但し、このままでは上述した保持属性の変数については問題があるので、実行オブジェクト生成機能部21aは、保持属性の内部変数に関しては更に不揮発性メモリ11(バックアップ付SRAM等)の記憶領域を割り当てると共に、この割当領域に上記揮発性メモリ12(DRAM等)の割当領域を介してアクセスできるようにする実行コードを生成する。
FBインスタンスマッピング処理部21bは、上記実行オブジェクト生成機能部21aによる変数のメモリアドレス割当結果に基づいて、インスタンス初期値情報24を生成する。
FBインスタンスマッピング処理部21bは、上記保持属性の各内部変数毎に、その変数に関する不揮発性メモリ11上の割当領域と揮発性メモリ12上の割当領域との対応関係を記録したインスタンス初期値情報24を生成する。これについては、インスタンス初期値情報24の具体例を図5に示して後に更に詳細に説明するものとする。
支援装置20は、上記コンパイラ21によって生成された上記実行オブジェクト23とインスタンス初期値情報24とを、PLC10にダウンロードする。PLC10は、ダウンロードされた実行オブジェクト23とインスタンス初期値情報24を、自己の例えば上記フラッシュメモリ等に記憶する。
その後、PLC10は、例えばシステム処理部13が、電源投入後の初期化処理の度に、上記保持属性の各内部変数については、インスタンス初期値情報24に基づいて、その変数の揮発性メモリ12上の割当領域に、不揮発性メモリ11上の割当領域のアドレス情報を格納する処理(インスタンス初期値展開処理と呼ぶものとする)を行う。これによって、上記実行オブジェクト23を実行すると、上記保持属性の内部変数に関しては、上記揮発性メモリ12を介して不揮発性メモリ11上の割当領域にアクセスできるようになる。詳しくは後述する。
尚、上記支援装置20、PLC10は、特に図示等しないが下記の処理機能を有するものと見做すこともできる。
すなわち、PLC20は、不図示のメモリ割当部、インスタンス初期値情報生成部、実行コード生成部等の各種処理機能部を有するものと見做してもよい。また、これらの処理機能部は、全て、コンパイラ21が有する機能であると見做してもよいが、この例に限らない。
メモリ割当部は、コンパイルの際の各変数のメモリ割当てを行う機能部であって、ファンクションブロックの内部変数に係わるメモリ割当ては、各ファンクションブロック毎に、保持属性/非保持属性に係らず纏めて揮発性メモリへの割当てを行うと共に保持属性の内部変数に関しては更に不揮発性メモリへの割当てを行う。
インスタンス初期値情報生成部は、保持属性の内部変数に係わる揮発性メモリ上の割当領域と不揮発性メモリ上の割当領域とを対応付けて記録したインスタンス初期値情報を生成する。尚、インスタンス初期値情報生成部は、上記FBインスタンスマッピング処理部21bに相当するものと見做してもよい。
実行コード生成部は、保持属性の内部変数に関しては、揮発性メモリ上の割当領域を介して不揮発性メモリ上の割当領域へのアクセスを行う実行コードを生成する。
尚、メモリ割当部及び実行コード生成部が、上記実行オブジェクト生成機能部21aに相当するものと見做してもよい。
また、PLC10は、上述したインスタンス初期値展開処理を実行する不図示の初期化部を有するものと見做してもよい。
尚、支援装置20は、例えば汎用のパソコン等により実現されるものであり、ハードウェア的には汎用のパソコンの一般的な構成であってよい。すなわち、支援装置20は、例えばCPU、記憶装置(ハードディスク等)、メモリ、通信機能部、表示部(ディスプレイ等)、入力操作部(キーボード、マウス等)等を備えるものである。また、上記記憶装置には予め所定のアプリケーションプログラムが記憶されており、上記CPUがこのアプリケーションプログラムを実行することで、例えばコンパイラ21の上記各種処理機能等の支援装置20の各種処理機能が実現される。
また、PLC10は、不図示のCPUや各種メモリ(不図示のフラッシュメモリや、不揮発性メモリ11、揮発性メモリ12等)、各種制御対象機器との入出力インタフェース、通信機能部等を有している。上記ダウンロードされる実行オブジェクト23とインスタンス初期値情報24は、例えば上記フラッシュメモリに記憶される。また、フラッシュメモリには、他にも所定のアプリケーションプログラムが予め記憶されている。上記CPUが、このアプリケーションプログラムを実行することにより、例えば上記システム処理部13の処理機能等が実現される。
以下、図2〜図5に示す具体例を参照しながら、上述したプログラマブルコントローラシステムの動作について、更に詳細に説明する。
図2(a)には、FBインスタンスの具体例を示す。
ここでは、FB1をインスタンス化した2つのFBインスタンスFB1_1、FB1_2と、FB2をインスタンス化した1つのFBインスタンスFB2_1を示す。例えば、FBインスタンスFB1_1やFB1_2を例にすると、図示のPin_0、Pout_0や、Pin_1、Pout_1等が、上述した外部変数である。また、図示のINPUT_1、OUTPUT_1や不図示のVER_1、VER_2等が、上述した内部変数である。
尚、従来通り、ファンクションブロックのロジックは1つでも、ユーザは複数利用することができ、複数利用する場合はコンパイラ機能により複数のインスタンス化を実施する。これより、例えば上記のように、1つのFB1から2つのFBインスタンスFB1_1、FB1_2が生成される場合もあることになる。尚、本手法では、上記のように、コンパイラ21は、ファンクションブロック(FB)をインスタンス化する場合、不揮発性メモリ11と揮発性メモリ12の両方にインスタンス領域を持たせる。これについて詳しくは後述する。
また、本例では、ユーザFBの内部変数に関しても、ユーザが任意に保持属性/非保持属性を指定することができる。但し、これは、上記のように従来でも実現可能であったので、以下、簡単に説明するものとする。
図2(b)に、FBの内部変数に関してユーザが任意に保持属性/非保持属性を指定する為の画面例を示す。
図2(b)には、各ユーザFB毎の保持属性/非保持属性設定画面を示すものであり、図上上側にFB1の設定画面、図上下側にFB2の設定画面を示す。
図上上側にFB1の設定画面を例にするならば、FB1に係る上記内部変数一覧(ここではINPUT_1、OUTPUT_1、VER_1、VER_2とする)が表示されると共に(例えば、各FB毎にそのFBに係る内部変数に関する情報等が、予め登録されている)、これら各内部変数毎に保持属性変数であるか否かを設定するための入力欄(図示の「保持形」の欄)が表示される。
ユーザは、この表示内容を参照して、保持属性変数とする内部変数を判断する。そして、保持属性変数とする内部変数に対応する上記入力欄(「保持形」)にチェック(レ)を入れる。図示の例では、VER_1に対応する入力欄(「保持形」)にだけチェック(レ)が入っているので、VER_1だけが保持属性指定されたことになる(他の内部変数INPUT_1、OUTPUT_1、VER_2は、全て、非保持属性指定されたものと見做される)。
この設定は、FB1のインスタンス全てに適用される。よって、この設定例の場合、後に図3で説明するように、上記2つのFBインスタンスFB1_1、FB1_2はどちらも、VER_1だけが保持属性となっている。
尚、図示等しないが、勿論、上記図2(b)の例のような設定画面上での設定内容は、記憶されることになる。つまり、各FB毎に、そのFBに係る各内部変数の変数名等に対応付けて、この内部変数の保持属性/非保持属性が登録されたファイル情報等(内部変数属性情報と呼ぶものとする)が、支援装置20の不図示の記憶装置等に記憶される。
図2(b)に示す例のように設定された場合、PLC10における内部変数のメモリ割当て内容は、例えば図3に示すようになる。
すなわち、上記従来と同様にFBインスタンス単位でまとめて内部変数のアドレス割当てを行うが、従来では内部変数全てをまとめて不揮発性メモリ11に割り当てたのに対して、本手法では図3に示すように、まず、内部変数全てをまとめて揮発性メモリ12に割り当てたうえで、更に上記保持属性指定された内部変数については不揮発性メモリ11に割当領域を確保する。その際に、上記インスタンス初期値情報24の作成も行うようにしてもよい。
すなわち、まず、図3の図上左側に示すようにFBインスタンスFB1_1、FB1_2、FB2−1の順に各FBインスタンス単位の揮発性メモリ12へのメモリアドレス割当てを実行する(インスタンス領域を確保する)。その際、上記内部変数属性情報に基づいて当該メモリ割当を行った各変数のなかから保持属性の変数(該当変数というものとする)を見つけ出す毎に、この該当変数については更に不揮発性メモリ11にもメモリ割当てを行う。
これは、例えば、不揮発性メモリ11の空き領域の先頭(ここではデフォルトでは1000番地とする)から順次割り当てていく(尚、この例より、以下の説明では逐一記載がなくても、1000番地台のアドレスは、不揮発性メモリ11のアドレスを意味するものとする)。そして、これら各該当変数に関する揮発性メモリ12上の割当アドレスと不揮発性メモリ11上の割当アドレスとを対応付けて記憶していく。これによって、例えば図5に示すインスタンス初期値情報24が作成される。
例えば、図3の図上左側に示す例では、まずFBインスタンスFB1_1のVER_1は該当変数であるので、図上右側に示すように、不揮発性メモリ11の1000番地を割り当てると共に、図5に示すインスタンス初期値情報24の例のように、この該当変数(FB1_1のVER_1)に関する揮発性メモリ12の割当アドレス(‘1’番地)と上記1000番地とを対応付けて記憶する。
同様に、次の該当変数はFBインスタンスFB1_2のVER_1であるので、図上右側に示すように、不揮発性メモリ11の次の番地(1001番地;この時点での空き領域の先頭)を割り当てると共に、図5に示すように、この該当変数(FB1_2のVER_1)に関する揮発性メモリ12の割当アドレス(‘5’番地)と上記1001番地とを対応付けて記憶する。
同様に、次の該当変数はFBインスタンスFB2_1のVER_1であるので、図上右側に示すように、不揮発性メモリ11の次の番地(1002番地;この時点での空き領域の先頭)を割り当てると共に、図5に示すように、この該当変数(FB2_1のVER_1)に関する揮発性メモリ12の割当アドレス(‘10’番地)と上記1002番地とを対応付けて記憶する。
同様に、次の該当変数はFBインスタンスFB2_1のVER_2であるので、図上右側に示すように、不揮発性メモリ11の次の番地(1003番地;この時点での空き領域の先頭)を割り当てると共に、図5に示すように、この該当変数(FB2_1のVER_2)に関する揮発性メモリ12の割当アドレス(‘11’番地)と上記1003番地とを対応付けて記憶する。
また、コンパイラ21は、上記図3の図上左側に示すような揮発性メモリ12の割当アドレスを用いて、ユーザアプリケーション22から実行オブジェクト23(各実行コード等)を生成する。その際、上記保持属性の変数に関しては、非保持属性の変数とは異なる実行コードを生成する。これについて以下、図4の例を参照して説明する。
図4(a)には、上記FBインスタンスFB1_1の変数のメモリ割当てを示すが、ここでは説明の都合上、揮発性メモリ12に関しては、上記アドレス0番地〜3番地の代わりに、図示の“IX+0”番地、“IX+1”番地(例えば上記1番地に相当する)、“IX+2”番地、“IX+3”番地が割り当てられたものとする。尚、IXはインデックスレジスタを意味し、この例の場合はFBインスタンスFB1_1に係わるインデックスレジスタを意味することになる。従来で説明した通り、このインデックスレジスタを基準にした相対アドレス(+0、+1、+2、+3)によって、各内部変数へのメモリアドレス割当てが行われることになる。
また、これより、保持属性である変数VER_1に関する上記インスタンス初期値情報24は、“IX+1”番地と1000番地とが対応付けられることになる。但し、コンパイル処理による実行コード生成の際には、不揮発性メモリ11上の番地(1000番地)は考慮されない。図4(b)に示すように、保持属性であるか否かに関係なく、揮発性メモリ12上の割当アドレスのみを用いて実行コード生成される。但し、保持属性の変数の場合、非保持属性の変数とは異なる実行コードが生成される。
すなわち、ユーザアプリケーション22のプログラムが、例えば図4(b)の図上左側に示すものであった場合、これをコンパイルすると、まず、1行目の「VER_2:=INPUT_1;」は、これら2つの変数の両方とも非保持属性であるので、単にこれら各変数の揮発性メモリ12上の割当アドレスを用いた下記の実行コードへと変換される。
*(IX+2) ← *(IX+0) ・・・図示の(β)
尚、これは、アドレス“IX+0”の格納データを取得してアドレス“IX+2”に格納する処理を意味する。
これに対して、2行目の「VER_2:=VER_1;」は、両方とも揮発性メモリ12上の割当アドレスを用いて実行コードへの変換を行う点では上記1行目と同じであるが、VER_1は保持属性変数であるので、下記の実行コードへと変換される。
*(IX+2) ← *{*(IX+1)} ・・・図示の(α)
尚、これは、アドレス“IX+1”の格納データをアクセス先アドレスと見做して、このアクセス先アドレスの格納データを取得してアドレス“IX+2”に格納する処理を意味する。PLC10の運用中には、後述するシステム制御部13の“インスタンス初期値展開処理”によってアドレス“IX+1”の格納データは“1000番地”となっているはずであるので、1000番地の格納データを取得してアドレス“IX+2”に格納する処理を行うことになる。
PLC10は、そのシステム制御部13が、例えば初期処理の際に、上記ダウンロードされたインスタンス初期値情報24に基づいて、保持属性変数に関しては、その不揮発性メモリ11上の割当領域のアドレス情報を、その揮発性メモリ12上の割当領域に格納する処理である“インスタンス初期値展開処理”を行う。つまり、「揮発性メモリのインスタンスアドレス」31のデータ(アドレス)が示す記憶領域に、「不揮発性メモリのインスタンスアドレス」32のデータ(アドレス)を格納する処理を行う。
例えば、図5に示す例では、揮発性メモリ12上の1番地の記憶領域に“1000”番地が格納される。同様、揮発性メモリ12上の5番地の記憶領域に“1001”番地が格納される。他も略同様である。これによって、例えば、上記アドレス“IX+1”の格納データは“1000”番地となっていることから(不揮発性メモリ11の)1000番地にアクセスしてその格納データを取得することになる(あるいはデータの書込み等)。
尚、上記インスタンス初期値情報24の生成は、上述した一例に限らず、例えば図4(b)の図上右側に示すような実行コード群を生成後に、この実行コード群に基づいて生成するようにしてもよい。例えば、実行コード群において「*{*」を検索して、「*{*」を検出する毎にその直後の()内のアドレスを、「揮発性メモリのインスタンスアドレス」31に格納すると共に、これに対応する不揮発性メモリ12上の割当アドレスを新たに任意に決定して(例えば上記のようにその時点の空き領域の先頭とする)、これを「不揮発性メモリのインスタンスアドレス」32に格納する。
上記図4等について説明したように、本例のコンパイラ21は、FBの内部変数に関しては、変数属性が保持属性であるか非保持属性であるかによって、生成する実行コードが異なる。すなわち、内部変数が保持属性であった場合、コンパイラ21はユーザプログラムを図4(b)に示す(α)のような実行オブジェクトに解釈する。これは、揮発性メモリインスタンス領域にあるVER_1 の割当アドレス情報(“IX+1”)を元に、VER_1の実態(1000番地の格納データ)へアクセスするコードを生成するものである。
内部変数が非保持属性であった場合、コンパイラ21はユーザプログラムを図4(b)に示す(β)のような実行オブジェクトに解釈する。これは、揮発性メモリ12上の割当領域のデータにアクセスするコードを生成するものである。
これによってPLC10は、各FBインスタンス毎の一つのインデックスレジスタによって、揮発性メモリ12にアクセスする場合もあれば(非保持属性変数の場合)、揮発性メモリ12を介して不揮発性メモリ11にアクセスする場合もある(保持属性変数の場合)。
以上説明したように、コンパイラ21は、保持属性変数に関して、例えば図5に示す例のようなインスタンス初期値情報24を作成することで、不揮発性メモリ11上の割当アドレスと揮発性メモリ12上の割当アドレスとを紐付ける。そして、このインスタンス初期値情報24を、実行オブジェクト23と共にPLC10にダウンロードして記憶させる。PLC10は、ユーザアプリケーション起動時、インスタンス初期値情報24を参照することで、保持属性変数に関しては、揮発性メモリ12上の割当領域に、不揮発性メモリ11上の割当領域へのポインタ情報を書き込む。
以上説明したように、本手法の上記支援装置20のコンパイラ21は、IEC言語で記述されたプログラム(ユーザアプリケーション22)をプログラマブルコントローラ(PLC10)で動作する実行オブジェクト23へ変換するコンパイラであって、特に保持属性変数と非保持属性変数とが混在するファンクションブロック(FB)を含むプログラムをコンパイルするコンパイラであって、以下の処理機能を有する。
すなわち、まず、上記FBインスタンス単位での変数のメモリ割当て処理について、各FBインスタンス毎にその各内部変数をまとめて揮発性メモリ12上に割り当てる。そのうえで保持属性変数については、更に不揮発性メモリ11上での任意の記憶領域を割り当てると共に、この記憶領域のアドレスを上記揮発性メモリ12上の割当アドレスと対応付けて記憶する(すなわち、上記インスタンス初期値情報24を作成する)。保持属性関数に関しては、揮発性メモリ12上の割当領域は、不揮発性メモリ11上のマッピングアドレスが格納される領域として使用することになる(つまり、揮発性メモリ12を介して不揮発性メモリ11上の割当領域にアクセスするように構成する)。
上記のように、コンパイラ21は、非保持属性変数の場合には揮発性メモリ12のインスタンス領域にアドレスマッピングを行う。一方、保持属性変数の場合には、不揮発性メモリ11のインスタンス領域にアドレスマッピングを行うと共に、揮発性メモリ12のインスタンス領域に不揮発性メモリ11上のマッピングアドレスが格納される領域を確保する。
尚、各変数が保持属性であるか否かについては、上記ユーザ設定情報を参照することで判定できる。また、尚、ユーザアプリケーション22の各変数のうち、どの変数がFBの内部変数であるかを示す情報も(特に図示・説明しないが)、予め作成されて記憶されている。
更に、FBの実行オブジェクト(実行コード)生成の際には、変数をアクセスする命令をコンパイルする場合に、非保持属性変数の場合には揮発性メモリ12上の割当アドレスにアクセスする実行オブジェクト(図4(b)の(β)等)を生成し、保持属性変数の場合には揮発性メモリ12上の割当アドレスを元に不揮発性メモリ11上の割当アドレスに間接アクセスする実行オブジェクト(図4(b)の(α)等)を生成する。
以上のコンパイラ21の処理によって生成された上記実行オブジェクトと上記インスタンス初期値情報24は、PLC10にダウンロードされる。
PLC10は、ダウンロードされた実行オブジェクト23とインスタンス初期値情報24を、自己の記憶装置(フラッシュメモリ等)に記憶する。PLC10は、例えばアプリケーション/電源起動時等に、上記インスタンス初期値情報24に従い、保持属性変数に関しては、不揮発性メモリ11上の割当アドレス情報を、揮発性メモリ12上の割当領域に展開(格納)する機能を有する。
上述したことは、換言すれば、例えば下記のようになる。
コンパイラ21は、ユーザアプリケーション22の各FBをインスタンス化する際に、非保持属性の変数は揮発性メモリ12に割当て、保持属性の変数に関しては不揮発性メモリ11にその実態を割当て、割当てられた実態へのアクセスポインタを揮発性メモリ12に配置されたFBインスタンスにまとめて割当てておく。
FBインスタンス領域を、基本的に揮発性メモリ12に配置するが、保持属性変数に関しては実質的に不揮発性メモリ11に配置する。これによって、PLC10側での動作時に、保持属性変数の場合のみ不揮発性メモリ11にアクセスし、非保持属性変数の場合には不揮発性メモリ11にアクセスせずに済むので、ユーザアプリケーションの実行速度向上を実現することができる。
上述した本手法によれば、FB変数アドレス割当は、例えば図3に示すようになる。これは、全体的な変数割当領域は従来より多くなるかもしれないが、不揮発性メモリ11における変数割当領域は、従来より大幅に減少させることができる。つまり、従来では、図3の図上左側に示す内容が不揮発性メモリ11における変数割当結果と見做せる。つまり、全変数が不揮発性メモリ11に割り当てられることになる。これに対して本手法では、図3の図上右側に示すように、不揮発性メモリ11へのメモリ割当が行われるのは保持属性変数のみとなる。よって、不揮発性メモリ11において必要な記憶容量が少なくて済むと共に、不揮発性メモリ11へのアクセス頻度が大幅に減少する(保持属性変数に係るアクセスのみとなる)。
上記効果に関しては、特に構造化設計を用いた大規模PLCプログラム等のようなユーザFBを多用するプログラミングの場合には、特に顕著な効果を奏する。すなわち、インスタンスサイズが大きくなっても、揮発性メモリに比べてデータのアクセス速度が遅い不揮発性メモリへアクセスする回数(頻度)が従来より少なくなり、ユーザアプリケーションの実行速度を速くし、使い勝手の向上を図ることができるとともにコストをかけずに大容量の領域を提供できる。
10 PLC
11 不揮発性メモリ
12 揮発性メモリ
13 システム処理部
20 支援装置
21 コンパイラ
21a 実行オブジェクト生成機能部
21b FBインスタンスマッピング処理部
22 ユーザアプリケーション
23 実行オブジェクト
24 インスタンス初期値情報
31 揮発性メモリのインスタンスアドレス
32 不揮発性メモリのインスタンスアドレス

Claims (6)

  1. 少なくともファンクションブロックを用いて記述される任意のプログラムの作成支援機能と、該プログラムをコンパイルして実行コードを生成するコンパイラとを有する支援装置と、前記実行コードを実行するプログラマブルコントローラとが接続されたプログラマブルコントローラシステムであって、
    前記コンパイラは、
    前記コンパイルの際の各変数のメモリ割当てを行う手段であって、前記ファンクションブロックの内部変数に係わるメモリ割当ては、各ファンクションブロック毎に、保持属性/非保持属性に係らず纏めて揮発性メモリへの割当てを行うと共に保持属性の内部変数に関しては更に不揮発性メモリへの割当てを行うメモリ割当手段と、
    前記保持属性の内部変数に係わる前記揮発性メモリ上の割当領域と前記不揮発性メモリ上の割当領域とを対応付けて記録したインスタンス初期値情報を生成するインスタンス初期値情報生成手段と、
    前記保持属性の内部変数に関しては、前記揮発性メモリ上の割当領域を介して前記不揮発性メモリ上の割当領域へのアクセスを行う前記実行コードを生成する実行コード生成手段とを有し、
    前記プログラマブルコントローラは、
    電源投入時の初期化処理の際に、前記インスタンス初期値情報に基づいて、前記保持属性の内部変数に係る前記揮発性メモリ上の割当領域に、前記不揮発性メモリ上の割当領域のアドレス情報を格納する初期化手段、
    を有することを特徴とするプログラマブルコントローラシステム。
  2. 前記プログラマブルコントローラは、
    前記実行コードを実行する手段であって、前記保持属性の内部変数に関しては、前記揮発性メモリ上の割当領域にアクセスすることで前記アドレス情報を取得し、該アドレス情報を用いて前記不揮発性メモリ上の割当領域にアクセスするプログラム実行手段を更に有することを特徴とする請求項1記載のプログラマブルコントローラシステム。
  3. 前記支援装置は、更に、前記コンパイラによって生成された前記実行コードと前記インスタンス初期値情報とを前記プログラマブルコントローラにダウンロードして記憶させるダウンロード手段を有することを特徴とする請求項1または2記載のプログラマブルコントローラシステム。
  4. 前記支援装置は、更に、前記ファンクションブロックの各内部変数の前記保持属性/非保持属性を、任意に設定させる設定手段を有することを特徴とする請求項1〜3の何れかに記載のプログラマブルコントローラシステム。
  5. 少なくともファンクションブロックを用いて記述される任意のプログラムの作成支援機能と、該プログラムをコンパイルして実行コードを生成するコンパイラとを有する支援装置と、前記実行コードを実行するプログラマブルコントローラとが接続されたプログラマブルコントローラシステムの前記支援装置であって、
    前記コンパイラは、
    前記コンパイルの際の各変数のメモリ割当てを行う手段であって、前記ファンクションブロックの内部変数に係わるメモリ割当ては、各ファンクションブロック毎に、保持属性/非保持属性に係らず纏めて揮発性メモリへの割当てを行うと共に保持属性の内部変数に関しては更に不揮発性メモリへの割当てを行うメモリ割当手段と、
    前記保持属性の内部変数に係わる前記揮発性メモリ上の割当領域と前記不揮発性メモリ上の割当領域とを対応付けて記録したインスタンス初期値情報を生成するインスタンス初期値情報生成手段と、
    前記保持属性の内部変数に関しては、前記揮発性メモリ上の割当領域を介して前記不揮発性メモリ上の割当領域へのアクセスを行う前記実行コードを生成する実行コード生成手段と、
    を有することを特徴とするプログラマブルコントローラの支援装置。
  6. 少なくともファンクションブロックを用いて記述される任意のプログラムの作成支援機能と、該プログラムをコンパイルして実行コードを生成するコンパイラとを有する支援装置と、前記実行コードを実行するプログラマブルコントローラとが接続されたプログラマブルコントローラシステムの前記プログラマブルコントローラであって、
    電源投入時の初期化処理の際に、予め前記支援装置側で生成されて該プログラマブルコントローラ側に記憶された、保持属性の内部変数に係る揮発性メモリ上の割当領域と不揮発性メモリ上の割当領域とを対応付けて記録したインスタンス初期値情報に基づいて、前記保持属性の内部変数に係る前記揮発性メモリ上の割当領域に、前記不揮発性メモリ上の割当領域のアドレス情報を格納する初期化手段と、
    運用中、予め前記支援装置側で生成されて該プログラマブルコントローラ側に記憶された前記実行コードを実行する手段であって、前記保持属性の内部変数に関しては前記揮発性メモリ上の割当領域に格納された前記アドレス情報を用いて前記不揮発性メモリ上の割当領域へのアクセスを行う前記実行コードを実行する実行手段と、
    を有することを特徴とするプログラマブルコントローラ。

JP2012250705A 2012-11-14 2012-11-14 プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ Active JP6020071B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012250705A JP6020071B2 (ja) 2012-11-14 2012-11-14 プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012250705A JP6020071B2 (ja) 2012-11-14 2012-11-14 プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ

Publications (2)

Publication Number Publication Date
JP2014099066A JP2014099066A (ja) 2014-05-29
JP6020071B2 true JP6020071B2 (ja) 2016-11-02

Family

ID=50941022

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012250705A Active JP6020071B2 (ja) 2012-11-14 2012-11-14 プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ

Country Status (1)

Country Link
JP (1) JP6020071B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6874814B2 (ja) * 2019-10-30 2021-05-19 株式会社安川電機 産業機器の制御装置、産業機器の制御装置の設定システム、産業機器の制御装置の設定方法、及びプログラム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3892276B2 (ja) * 2001-10-26 2007-03-14 株式会社デジタル プログラマブル表示器
JP2003271209A (ja) * 2002-03-15 2003-09-26 Omron Corp 制御装置並びに拡張機器及びプログラミングツール
JP2009075803A (ja) * 2007-09-20 2009-04-09 Meidensha Corp プログラマブルコントローラのデータ処理方法、プログラマブルコントローラ及び端末

Also Published As

Publication number Publication date
JP2014099066A (ja) 2014-05-29

Similar Documents

Publication Publication Date Title
JP2005032259A (ja) 共有ライブラリーシステム及び前記システム構築方法
US9563446B2 (en) Binary file generation
CN109739600B (zh) 数据处理方法、介质、装置和计算设备
JP2015526821A5 (ja)
WO2017020647A1 (zh) 基于新型存储器的嵌入式文件系统及其实现方法
JP5790128B2 (ja) プログラマブルコントローラ・システム、その支援装置
CN107273311B (zh) 计算设备、用于计算的方法和用于计算的装置
TW201820131A (zh) 進程管理方法及裝置
CN113110853B (zh) 一种组态数据在线下载方法、装置及电子设备
JP5757098B2 (ja) プログラム作成支援装置、プログラム作成支援方法
CN104133706B (zh) 固件修改方法及固件修改装置
CN114756296A (zh) 可读写挂载启动方法、装置、存储介质及电子设备
TWI464583B (zh) 取得觸發功能之指令的方法
JP6292096B2 (ja) プログラマブルコントローラシステム、その支援装置
JP5489884B2 (ja) 命令実行装置、命令実行方法、及び命令実行プログラム
JP6020071B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ
US20130275688A1 (en) Data processing device and method
CN106293861A (zh) 软件源码编译方法及装置
JP4760607B2 (ja) プログラマブルコントローラ
CN113031854B (zh) 一次性可编程存储器装置及其容错方法
CN110990018B (zh) 一种嵌入式系统的编译方法及编译系统
JP6245028B2 (ja) 実行制御方法、実行制御プログラムおよび実行制御装置
TW201526005A (zh) 快閃記憶體燒錄方法與電腦可讀取媒體
KR101918430B1 (ko) 시스템 설계 지원 툴
JP6295914B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151014

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160826

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: 20160906

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160919

R150 Certificate of patent or registration of utility model

Ref document number: 6020071

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250