Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP5669652B2 - プログラマブルコントローラシステムおよびメモリ整理方法 - Google Patents
[go: Go Back, main page]

JP5669652B2 - プログラマブルコントローラシステムおよびメモリ整理方法 - Google Patents

プログラマブルコントローラシステムおよびメモリ整理方法 Download PDF

Info

Publication number
JP5669652B2
JP5669652B2 JP2011082231A JP2011082231A JP5669652B2 JP 5669652 B2 JP5669652 B2 JP 5669652B2 JP 2011082231 A JP2011082231 A JP 2011082231A JP 2011082231 A JP2011082231 A JP 2011082231A JP 5669652 B2 JP5669652 B2 JP 5669652B2
Authority
JP
Japan
Prior art keywords
program
change
variable
programmable controller
information
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.)
Expired - Fee Related
Application number
JP2011082231A
Other languages
English (en)
Other versions
JP2012216150A (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2011082231A priority Critical patent/JP5669652B2/ja
Publication of JP2012216150A publication Critical patent/JP2012216150A/ja
Application granted granted Critical
Publication of JP5669652B2 publication Critical patent/JP5669652B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Programmable Controllers (AREA)
  • Memory System (AREA)

Description

この発明は、プログラマブルコントローラシステムおよびメモリ整理方法に関するものである。
従来のプログラマブルコントローラのユーザプログラムでは、演算に使用するデータ領域を指定する手段として、メモリアドレスをユーザプログラムに直接記述していた。しかし、近年になって、ユーザプログラム上では変数を使用してロジックを記述し、コンパイル時に変数をメモリアドレスに置き換えることで、ユーザがメモリアドレスを意識せずにプログラムを作成する、いわゆる変数プログラミングが利用されるようになってきた。
一方、プログラマブルコントローラは、装置設備が動作中でも不具合の修正や動作調整のためにユーザプログラムを追加/修正/削除する必要が生じる。その場合、プログラマブルコントローラがユーザプログラムを実行中でも、ユーザプログラムを修正できるRUN中書込みが利用される。
RUN中書込みの従来技術として、CPU(Central Processing Unit)ユニットのプログラムメモリ内に修正後のユーザプログラムをダウンロードして置き、END処理にてユーザプログラムを修正前から修正後に差し替えたり、実行中のプログラムを、複数スキャンのEND処理にて徐々にずらしていき、必要なスペースができた時点で変更後のプログラムで変更箇所を上書きすることでユーザプログラムを更新したりする方法が知られている(たとえば、特許文献1,2参照)。
変数プログラミングにおけるRUN中書込みでは、修正したユーザプログラムをコンパイルする際、修正前から使用されている各変数が、修正前と修正後とで、異なるメモリアドレスに割付けられてしまうと、参照するデータが異なるため、ユーザプログラム上での変数の使い方によっては、プログラムが誤動作してしまうという問題がある。
そこで、変数とその変数のメモリアドレスへの割付情報をあらかじめ保存しておき、RUN中書込み時のコンパイルでは、既にメモリアドレスに割付けられている変数に対しては、CPUユニットのメモリアドレスへの割付を変更せず、追加/変更された変数に対してのみ、新たにCPUユニットのメモリアドレスを割付けることでプログラムの誤動作防止を図っている。
特開2001−142510号公報 特開平10−301605号公報
しかしながら、RUN中書込による変数の追加/変更/削除が頻繁に行われる場合、データメモリ領域内で変数が割付けられていない未使用の領域が点在し、断片化された状態となる。また、配列変数や構造体変数などの複数の変数をまとめて扱う場合、複数の変数分の連続領域が必要となるため、データメモリ内での未使用の領域も多くなり、データメモリの使用効率の低下が顕著となる。
データメモリ内で未使用の領域が点在する状態で、配列変数や構造体変数を追加する場合、空き容量全体では容量として十分に追加可能であっても、連続領域を確保できず、変数を追加できないという問題点があった。
この発明は、上記に鑑みてなされたもので、配列変数や構造体変数などの高度なデータ構造を扱うプログラマブルコントローラとプログラミングツールとが接続されたプログラマブルコントローラシステムにおいて、変数を追加する際に、断片化されたメモリ領域を整理し、連続領域を確保できるプログラマブルコントローラシステムおよびメモリ整理方法を得ることを目的とする。
上記目的を達成するため、この発明にかかるプログラマブルコントローラシステムは、プログラムに基づいて制御対象を制御するプログラマブルコントローラと、前記プログラマブルコントローラで使用される前記プログラムを管理するプログラミングツールと、を備えるプログラマブルコントローラシステムにおいて、前記プログラミングツールは、前記プログラム中で使用されている変数とサイズ、および前記プログラマブルコントローラのデータ記憶手段内のアドレスとを対応付ける変数割付情報を格納する変数割付情報格納手段と、ユーザによって作成されたプログラムと前記変数割付情報から前記プログラマブルコントローラで実行可能な実行コードを生成するコンパイル手段と、変更前の前記変数割付情報から前記プログラマブルコントローラの前記データ記憶手段内の前記変数に割付けられている領域のうち断片化されている領域を移動対象領域として抽出する移動対象領域抽出部、前記移動対象領域を他の変数に割付けられている領域と連続するように配置する前記データ記憶手段内の変更先アドレスを取得する変更先アドレス取得部、前記移動対象領域と前記変更先アドレスとを含む割付変更後の変数割付情報と、前記プログラムと、から前記コンパイル手段を通じて割付変更後のプログラムの実行コードを取得する変更後実行コード取得部、前記割付変更後のプログラムの実行コードの前記割付変更前のプログラムの実行コードからの変更箇所を変更情報として取得する変更情報取得部、および前記移動対象領域と前記変更先アドレスとを用いて前記変数の前記データ記憶手段内での割当先の変更に伴って生じる前記プログラムの実行コードの変更箇所を割付変更情報として生成する割付変更情報生成部を有する変数割付管理手段と、前記変数割付管理手段によって生成される変更情報と割付変更情報とを前記プログラマブルコントローラに送信する通信手段と、を備え、前記プログラマブルコントローラは、前記プログラムの実行コードを記憶するプログラム記憶手段と、前記プログラムの実行コードを実行するプログラム実行手段と、前記プログラム実行手段による前記プログラムの実行コードの実行時に使用するデータを格納する前記データ記憶手段と、前記プログラミングツールからの前記変更情報を用いて前記プログラム記憶手段中の実行コードの書換え処理を行うと同時に、前記プログラミングツールからの前記割付変更情報にしたがって前記データ記憶手段中の前記移動対象領域中のデータを前記変更先アドレスで指定される領域に移動させる処理を行うメモリ整理実行手段と、を備えることを特徴とする。
この発明によれば、変数プログラミングにおいて配列変数や構造体変数などの高度なデータ構造を使用しているユーザプログラムに対してRUN中書込みを繰り返し実行しても、効率よくデータメモリ領域を使用することが可能となる効果を有する。
図1は、この実施の形態によるプログラマブルコントローラシステムの機能構成の一例を模式的に示すブロック図である。 図2は、変数割付情報の一例を示す図である。 図3−1は、実施の形態によるメモリ整理処理の一例を示すフローチャートである(その1)。 図3−2は、実施の形態によるメモリ整理処理の一例を示すフローチャートである(その2)。 図3−3は、実施の形態によるメモリ整理処理の一例を示すフローチャートである(その3)。 図4は、CPUユニットのデータメモリの整理状態を模式的に示す図である。 図5は、移動対象領域を所定のサイズに分割して変更先アドレスへと移動させる場合の例を模式的に示す図である。
以下に添付図面を参照して、この発明の実施の形態にかかるプログラマブルコントローラシステムおよびメモリ整理方法を詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
図1は、この実施の形態によるプログラマブルコントローラシステムの機能構成の一例を模式的に示すブロック図である。プログラマブルコントローラシステムは、ユーザプログラム(シーケンスプログラム)にしたがって制御対象を制御することによって所定の処理を実行させて、製品の加工や製造を行うものである。この例では、プログラマブルコントローラシステムは、CPUユニット20で実行されるユーザプログラムのコンパイル処理を行うプログラミングツール10と、制御対象の制御処理を行う制御データを演算するCPUユニット20と、を備える。
プログラミングツール10は、ユーザがユーザプログラムを編集するためのI/Fを提供するプログラムエディタ部11と、ユーザプログラムで使用される変数とCPUユニット20のデータメモリ24でのメモリアドレスとの間の対応関係を示す変数割付情報を格納する変数割付情報格納部12と、プログラムエディタ部11で編集されたユーザプログラムと変数割付情報格納部12中の変数割付情報とに基づいてCPUユニット20で実行可能な実行コードを生成するコンパイラ13と、変数割付情報を管理する変数割付管理部14と、CPUユニット20との間で通信を行う通信部15と、を備える。
プログラムエディタ部11で編集されるユーザプログラム中では、メモリアドレスを変数を用いて記述しており、コンパイラ13での実行コード生成時に変数がCPUユニット20のデータメモリ24のメモリアドレスへと変換される。
変数割付情報格納部12は、現在CPUユニット20で使用中の変数割付情報である変更前変数割付情報と、メモリ整理処理時に変数割付管理部14で生成される変更後変数割付情報と、を記憶することができるものとする。変数割付情報は、データメモリ24中の格納場所の先頭アドレスと、ユーザプログラムで使用される変数と、を対応付けている。図2は、変数割付情報の一例を示す図である。変数割付情報は、データメモリ24内の先頭アドレスと、先頭アドレスに対して割付けられた変数の名称(変数名)と、変数のサイズと、を対応付けて管理している。この図2では、データメモリ24の先頭アドレス「0x1000」にサイズ2の変数1が割当てられ、先頭アドレス「0x1006」にサイズ4の変数2が割当てられ、先頭アドレス「0x100C」にサイズ4の変数3が割当てられ、先頭アドレス「0x1010」にサイズ2の変数4が割当てられ、先頭アドレス「0x1014」にサイズ6の変数5が割当てられており、変数1と変数2の間、変数2と変数3の間、および変数4と変数5の間が未使用領域となっている場合が示されている。
変数割付管理部14は、CPUユニット20で動作しているユーザプログラムの変数割付情報から、CPUユニット20のデータメモリ24内に未使用領域が複数箇所に点在する場合に、変数が割付けられていない未使用領域が連続するように変数の割付を変更する。このような機能を達成するために、この実施の形態では変数割付管理部14は、変数割付情報管理部141と、移動対象領域抽出部142と、変更先アドレス取得部143と、変更後実行コード取得部144と、変更情報取得部145と、割付変更情報生成部146と、を有する。
変数割付情報管理部141は、メモリ整理処理の実行時に、CPUユニット20で使用されている変数割付情報を変数割付情報格納部26から取得し、変数割付情報格納部12に変更前変数割付情報として格納する。また、CPUユニット20にメモリ整理後の変更後変数割付情報が登録されると、変更後変数割付情報を変更前変数割付情報として変数割付情報格納部12に格納する機能も有する。
移動対象領域抽出部142は、変数割付情報格納部12の変更前変数割付情報を用いて、断片化されている使用領域を移動対象領域として抽出する。たとえば、変更前変数割付情報を用いてCPUユニット20のデータメモリ24の先頭アドレスから末尾アドレスに向かって未使用領域を検索し、発見した未使用領域の直後にある領域の先頭アドレスからつぎの未使用領域の先頭アドレスまでの領域を移動対象領域として抽出する。
変更先アドレス取得部143は、変数が割り付けられていない(空き状態)アドレスを、変数割付情報格納部12の変更前変数割付情報からCPUユニット20のデータメモリ24の先頭アドレスから末尾アドレスに向かって検索し、最初にヒットしたアドレスを上記移動対象領域の変更先アドレスとして取得する。
変更後実行コード取得部144は、コンパイラ13を通じて移動対象領域に割付けられている変数の割付を変更先アドレスに変更したユーザプログラムの実行コード(以下、割付変更後のプログラムという)を生成する。
変更情報取得部145は、割付変更後のプログラムが割付変更前のユーザプログラムの実行コード(以下、割付変更前のプログラムという)から変化した分を変更情報として抽出する。割付変更前のプログラムは、変数割付情報格納部12の変更前変数割付情報を用いてコンパイラ13を通じて求めてもよいし、ターゲットとなるCPUユニット20から取得してもよい。
割付変更情報生成部146は、移動対象領域抽出部142で抽出された移動対象領域の先頭アドレスおよびサイズと、変更先アドレス取得部143で取得された変更先先頭アドレスと、から割付変更情報を生成する。なお、変更情報と割付変更情報は、通信部15を介してCPUユニット20へと送信される。
CPUユニット20は、プログラミングツール10との間で通信を行う通信部21と、ユーザプログラムを格納するプログラムメモリ22と、プログラムメモリ22中のユーザプログラムを実行するユーザプログラム実行部23と、ユーザプログラム実行部23によるユーザプログラムの実行中に使用されるデータを格納するデータメモリ24と、断片化されたデータメモリ24を整理するメモリ整理実行部25と、CPUユニット20に書き込まれたユーザプログラムの変数割付情報を保存する変数割付情報格納部26と、プログラミングツール10からの割付変更情報を格納する割付変更情報格納部27と、を備える。
ここで、メモリ整理実行部25は、プログラミングツール10から受け取った変更情報(または割付変更後のプログラム)をプログラムメモリ22内に格納し、RUN中書込機能を用いてプログラムメモリ22中のユーザプログラムを修正すると同時に、プログラミングツール10から受け取った割付変更情報に基づいてデータメモリ24内のデータを移動させる。データメモリ24内のデータの移動は、割付変更情報中の移動対象領域の先頭アドレスとサイズとで特定される移動対象領域中のデータを、割付変更情報中の変更先先頭アドレスで特定される領域へと移動させることによって行われる。
つぎに、このようなプログラマブルコントローラシステムでのメモリ整理処理について説明する。図3−1〜図3−3は、実施の形態によるメモリ整理処理の一例を示すフローチャートである。
まず、プログラミングツール10にユーザからターゲットとなるCPUユニット20のデータメモリ整理操作の実行コマンドが入力されると、プログラミングツール10の通信部15からCPUユニット20の通信部21に対してデータメモリ整理実行コマンドが発行される(ステップS11)。
CPUユニット20の通信部21は、データメモリ整理コマンドを受け付けると(ステップS12)、メモリ整理実行部25にデータメモリ整理コマンドの実行を依頼する(ステップS13)。また、メモリ整理実行部25は、データメモリ整理コマンドを受け付けた時点で、データメモリ整理が実行中であるか否かを判定する(ステップS14)。データメモリ整理が実行中でなければ(ステップS14でNoの場合)、データメモリ整理処理の実行の有無を示すデータメモリ実行状態を実行中とし(ステップS15)、通信部21を通じてプログラミングツール10にデータメモリ実行可能通知を送信する(ステップS16)。なお、既にデータメモリ整理が実行中であれば(ステップS14でYesの場合)、実行中であることを示すデータメモリ実行中通知を、通信部21を通じてプログラミングツール10に送信する(ステップS17)。
CPUユニット20からデータメモリ実行可能通知/データメモリ実行中通知を受け取ると(ステップS18)、プログラミングツール10の変数割付管理部14の変数割付情報管理部141は、変数割付情報格納部12にCPUユニット20で使用される変数割付情報(変更前変数割付情報)を保持しているかを確認する(ステップS19)。変更前変数割付情報を保持していない場合(ステップS19でNoの場合)には、変数割付情報管理部141は、通信部15を通じてCPUユニット20に対して変数割付情報取得要求を送信する(ステップS20)。
CPUユニット20のメモリ整理実行部25は、変数割付情報取得要求を受け取ると(ステップS21)、変数割付情報格納部26から現在動作中のユーザプログラムの変数割付情報を取り出し、通信部21を通じてプログラミングツール10に送信する(ステップS22)。プログラミングツール10の変数割付情報管理部141は、CPUユニット20で動作しているユーザプログラムの変数割付情報を受信すると(ステップS23)、変更前変数割付情報として変数割付情報格納部12に格納する。
なお、CPUユニット20で動作しているユーザプログラムの変数割付情報(変更前変数割付情報)が、プログラミングツール10の変数割付情報格納部12に既に存在する場合(ステップS19でYesの場合)には、CPUユニット20から改めて取得する必要はない。
ステップS23の後またはステップS19でYesの場合に、CPUユニット20の変数割付管理部14の移動対象領域抽出部142は、変更前変数割付情報内でCPUユニット20のデータメモリ24内の未使用領域を検索し、未使用領域が複数箇所に点在するか(2つ以上存在するか)を判定する(ステップS24)。
データメモリ24内に未使用領域が複数箇所に点在する場合(ステップS24でYesの場合)には、移動対象領域抽出部142は、変更前変数割付情報からCPUユニット20のデータメモリ24の先頭アドレスから末尾アドレスに向かって未使用領域を検索し、移動対象領域を抽出する。たとえば、最初に発見した未使用領域の直後にある領域の先頭アドレスから、次の未使用領域の先頭アドレスまでの領域を移動対象領域とする。
ついで、変数割付管理部14の変更先アドレス取得部143は、抽出した移動対象領域の変更先先頭アドレスを決定する(ステップS26)。ここでは、データメモリ24の先頭アドレスから末尾アドレスに向かって未使用領域を検索した場合の最初に発見した未使用領域の先頭アドレスを変更先先頭アドレスとする。
変数割付情報管理部141は、移動対象領域抽出部142で抽出された移動対象領域に対して付されている変数とサイズを割付変更前の変数割付情報から取得し、取得した変数とサイズを、変更先アドレス取得部143で取得した変更先先頭アドレスに新たに対応付けた割付変更後の変数割付情報を生成する(ステップS27)。
その後、変数割付管理部14の変更後実行コード取得部144は、コンパイラ13を通じて割付変更後の変数割付情報に基づいて、移動対象領域に割付けられている変数を変更先先頭アドレスに変更したユーザプログラムの実行コード(割付変更後のプログラム)を生成する(ステップS28)。
ついで、変数割付管理部14の変更情報取得部145は、割付変更後のプログラムの割付変更前のプログラムから変化した部分である変更情報を抽出する(ステップS29)。割付変更前のプログラムは、たとえばターゲットとするCPUユニット20から取得してもよいし、割付変更前の変数割付情報からコンパイラ13を通してプログラムを生成してもよい。
さらに、変数割付管理部14は、移動対象領域の先頭アドレスとサイズ、および変更先先頭アドレスを含む割付変更情報を生成し(ステップS30)、割付変更後のプログラムと共にCPUユニット20に送信する(ステップS31)。
CPUユニット20のメモリ整理実行部25は、プログラミングツール10から割付変更後のプログラムと割付変更情報とを受信すると(ステップS32)、割付変更後のプログラムをプログラムメモリ22内に格納した後(ステップS33)、RUN中書込み機能を使ってプログラムメモリ22内のユーザプログラムを修正すると同時に、プログラミングツール10から受け取った割付変更情報に基づいてデータメモリ24内のデータを移動させる(ステップS34)。データメモリ24内のデータの移動は、たとえば、割付変更情報中の移動対象領域の先頭アドレスとサイズで特定される範囲に存在するデータを取得して、変更先先頭アドレスで特定される範囲にデータを移動させることによって行われる。
その後、CPUユニット20のメモリ整理実行部25は、ユーザプログラムの修正とデータの移動が完了すると、通信部21を通じてプログラミングツール10に対して割付変更完了通知を送信する(ステップS35)。
プログラミングツール10の変数割付管理部14の変数割付情報管理部141は、通信部15を通じてCPUユニット20から割付変更完了通知を受信すると(ステップS36)、変数割付情報を、変更後の変数割付情報に更新する(ステップS37)。具体的には、変数割付情報格納部12中の変更後の変数割付情報を変更前の変数割付情報に更新する。また、CPUユニット20の変数割付情報格納部26に格納されている変数割付情報も更新する(ステップS38)。
また、移動対象領域抽出部142は、変更後の変数割付情報を分析し、データメモリ24内が、使用領域と未使用領域が共に1つのみになっているかを判定する(ステップS39)。使用領域または未使用領域が1つでない場合(ステップS39でNoの場合)には、ステップS25の移動対象領域の検索へと戻り、上記した処理が繰り返し実行される。また、使用領域と未使用領域が共に1つであれば(ステップS39でYesの場合)、メモリ整理完了とし、CPUユニット20に対して通信部15を通じてメモリ整理完了通知を送信する(ステップS40)。
CPUユニット20のメモリ整理実行部25は、通信部21を通じてメモリ整理完了通知を受信すると(ステップS41)、データメモリ実行状態を未実行とし(ステップS42)、通信部21を通じてプログラミングツール10に正常終了通知を送信する(ステップS43)。
プログラミングツール10は通信部15を通じて正常終了通知を受信すると(ステップS44)、ユーザにメモリ整理完了を通知する(ステップS45)。以上で、メモリ整理処理が終了する。
つぎに、具体例として、図2に示される変数割付情報で変数が割付けられたデータメモリ24についてメモリ整理処理を行う場合を説明する。図4は、CPUユニットのデータメモリの整理状態を模式的に示す図である。図4で、上段の図は変数割付情報であり、中断の図はCPUユニット20内のデータメモリ24内のアドレスの使用状況を模式的に示す図であり、下段の図はプログラムメモリ22内のプログラムの状態を模式的に示す図である。
図4(a)は、メモリ整理処理を行う前の状態であり、RUN中書込処理によって断片化されてしまった状態を示している。つまり、先頭アドレス「0x1000」にはサイズが2バイトの変数1が割付けられ、先頭アドレス「0x1006」にはサイズが4バイトの変数2が割付けられ、先頭アドレス「0x100C」にはサイズが4バイトの変数3が割付けられ、先頭アドレス「0x1010」にはサイズが2バイトの変数4が割付けられ、先頭アドレス「0x1014」にはサイズが6バイトの変数5が割付けられている。また、変数1と変数2の間、変数2と変数3の間、および変数4と変数5の間は未使用領域となっている。
さらに、プログラムメモリ22内のプログラムAでは、変数2(アドレス「0x1006」)と変数4(アドレス「0x1010」)が使用されており、プログラムBでは、変数2(アドレス「0x1006」)と変数5(アドレス「0x1014」)が使用されている。
このような状態のデータメモリ24に対して上述したメモリ整理処理が実行されると、まず、データメモリ24の先頭アドレス(0x1000)から末尾アドレス(0x1019)に向かって最初の未使用領域の後の変数が割付けられた領域が検索される。ここでは、先頭アドレスが「0x1006」であり、サイズが4バイトの変数2が移動対象領域として抽出される。
また、変更先アドレスとして、データメモリ24の先頭アドレスから末尾アドレスに向かって最初の未使用領域が検索される。ここでは、先頭アドレスが「0x1002」であり、サイズが4バイトの未使用領域が抽出され、変更先先頭アドレスとして「0x1002」が取得される。
以上より、変更前変数割付情報では、変数2はアドレス「0x1006」から4バイトと割付けられていたが、変更後変数割付情報では、変数2はアドレス「0x1002」から4バイトと割付けられることになる。また、この変更後変数割付情報を用いて割付変更後のプログラムが生成され、割付変更前のプログラムから変化した部分である変更情報が取得される。さらに、移動対象領域のアドレス「0x1006」とサイズ4バイト、および変更先先頭アドレス「0x1002」を含む割付変更情報が生成される。
つぎに、図4(b)に示されるように、プログラムメモリ22中のユーザプログラムの書換え処理が行われる。この書換え処理は、RUN中書込み機能を用いて行われ、取得された変更情報に対応する部分のみ行われる。ここでは、プログラムA,Bの変数2を含む部分が変更される。また、これと同時にデータメモリ24中で変数2の移動処理が行われる。この移動処理は、割付変更情報に基づいて行われる。そして、変更後変数割付情報が、変更前変数割付情報とされる。
この処理によって、未使用領域と使用領域とが共に1つとなったかを確認するが、いずれも1つではないので、さらにメモリ整理処理が行われる。図4(a)の場合と同様にして、移動対象領域として先頭アドレスが「0x100C」であり、サイズが6バイトの変数3,4が抽出され、変更先アドレスとして「0x1006」が取得される。
これによって、変更前変数割付情報では、変数3はアドレス「0x100C」から4バイトと割付けられており、変数4はアドレス「0x1010」から2バイトと割付けられていたが、変更後変数割付情報では、変数3はアドレス「0x1006」から4バイト割付けられ、変数4はアドレス「0x100A」から2バイト割付けられることになる。また、この変更後変数割付情報を用いて割付変更後のプログラムが生成され、割付変更前のプログラムから変化した部分である変更情報が取得される。さらに、移動対象領域のアドレス「0x100C」とサイズ6バイト、および変更先先頭アドレス「0x1006」を含む割付変更情報が生成される。
つぎに、図4(c)に示されるように、プログラムメモリ22中のユーザプログラムの書換え処理が行われる。この書換え処理は、RUN中書込み機能を用いて行われ、取得された変更情報に対応する部分のみ行われる。ここでは、プログラムAの変数4を含む部分が変更される。また、これと同時にデータメモリ24中で変数3,4の移動処理が行われる。この移動処理は、割付変更情報に基づいて行われる。そして、変更後変数割付情報が、変更前変数割付情報とされる。
この処理によって、未使用領域と使用領域とが共に1つとなったかを確認するが、いずれも1つではないので、さらにメモリ整理処理が行われる。図4(a)の場合と同様にして、移動対象領域として先頭アドレスが「0x1014」であり、サイズが6バイトの変数5が抽出され、変更先アドレスとして「0x100C」が取得される。
これによって、変更前変数割付情報では、変数5はアドレス「0x1014」から6バイトと割付けられていたが、変更後変数割付情報では、変数5はアドレス「0x100C」から6バイト割付けられる。また、この変更後変数割付情報を用いて割付変更後のプログラムが生成され、割付変更前のプログラムから変化した部分である変更情報を取得する。さらに、移動対象領域のアドレス「0x1014」とサイズ6バイト、および変更先先頭アドレス「0x100C」を含む割付変更情報が生成される。
つぎに、図4(d)に示されるように、プログラムメモリ22中のユーザプログラムの書換え処理が行われる。この書換え処理は、RUN中書込み機能を用いて行われ、取得された変更情報に対応する部分のみ行われる。また、これと同時にデータメモリ24中で変数5の移動処理が行われる。ここでは、プログラムBの変数5を含む部分が変更される。この移動処理は、割付変更情報に基づいて行われる。そして、変更後変数割付情報が、変更前変数割付情報とされる。
この処理によって、未使用領域と使用領域とが共に1つとなったかを確認する。以上の処理によって、アドレス「0x1000」〜「0x1010」に連続して変数1〜5が割当てられ、アドレス「0x1012」〜「0x1018」は未使用領域となっており、使用領域と未使用領域がいずれも1つとなったので、メモリ整理処理が終了する。
なお、移動対象領域が大きい場合には、データを移動させる際に時間がかかり、スキャンタイムが延びてしまうこともある。そのような場合には、ある程度のサイズで移動対象領域を分割し、複数回に分けて領域を移動させることで、スキャンタイムの延びを抑えることができる。このとき、予め実験によってスキャンタイムが延びない様に求められた最大のデータサイズ以下のサイズで移動対象領域を分割することができる。
図5は、移動対象領域を所定のサイズに分割して変更先アドレスへと移動させる場合の例を模式的に示す図である。この図で、上段の図は変数割付情報であり、下断の図はCPUユニット20内のデータメモリ24内のアドレスの使用状況を模式的に示す図である。なお、ここでは、移動対象領域を8Kバイトずつに分割して、2回に分けて移動させる場合を示す。
まず、図5(a)の変数割付情報に示されるように、メモリ整理処理を行う前は、先頭アドレス「0x1002」にはサイズが16Kバイトの変数10〜13が割付けられている。また、変数10の前、および変数13の後は未使用領域となっている。
このような状態のデータメモリ24に対して上述したメモリ整理処理が実行されると、まず、データメモリ24の先頭アドレス(0x1000)から末尾アドレス(0x5002)に向かって最初の未使用領域の後の変数が割付けられた領域が検索される。ここでは、先頭アドレスが「0x1002」であり、サイズが16Kバイトの変数10〜13が移動対象領域として抽出される。しかし、この移動対象領域のサイズは所定のサイズ(=8Kバイト)を超えているので、先頭アドレス「0x1002」から8Kバイトが移動対象領域として選択される。
また、変更先アドレスとして、データメモリ24の先頭アドレスから末尾アドレスに向かって最初の未使用領域が検索される。ここでは、先頭アドレスが「0x1000」であり、サイズが2Kバイトの未使用領域が抽出され、変更先先頭アドレスとして「0x1000」が取得される。
以上より、変更前変数割付情報では、変数10〜11はアドレス「0x1002」から8Kバイトと割付けられていたが、変更後変数割付情報では、変数10〜11はアドレス「0x1000」から8Kバイトと割付けられる。また、この変更後変数割付情報を用いて割付変更後のプログラムが生成され、割付変更前のプログラムから変化した部分である変更情報が取得される。さらに、移動対象領域のアドレス「0x1002」とサイズ8Kバイト、および変更先先頭アドレス「0x1000」を含む割付変更情報が生成される。
つぎに、プログラムメモリ22中のユーザプログラムの書換え処理が行われる。この書換え処理は、RUN中書込み機能を用いて行われ、取得された変更情報に対応する部分のみ行われる。またこれと同時に、図5(b)に示されるようにデータメモリ24中で変数10〜11の移動処理が行われる。この移動処理は、割付変更情報に基づいて行われる。そして、変更後変数割付情報が、変更前変数割付情報とされる。
この処理によって、未使用領域と使用領域とが共に1つとなったかを確認するが、いずれも1つではないので、さらにメモリ整理処理が行われる。図5(a)の場合と同様にして、移動対象領域として先頭アドレスが「0x3002」であり、サイズが8Kバイトの変数12〜13が抽出され、変更先アドレスとして「0x3000」が取得される。
これによって、変更前変数割付情報では、変数12〜13はアドレス「0x3002」から8Kバイトと割付けられていたが、変更後変数割付情報では、変数12〜13はアドレス「0x3000」から8Kバイト割付けられる。また、この変更後変数割付情報を用いて割付変更後のプログラムが生成され、割付変更前のプログラムから変化した部分である変更情報が取得される。さらに、移動対象領域のアドレス「0x3002」とサイズ8Kバイト、および変更先先頭アドレス「0x3000」を含む割付変更情報が生成される。
つぎに、プログラムメモリ22中のユーザプログラムの書換え処理が行われる。この書換え処理は、RUN中書込み機能を用いて行われ、取得された変更情報に対応する部分のみ行われる。またこれと同時に、図5(c)に示されるようにデータメモリ24中で変数12〜13の移動処理が行われる。この移動処理は、割付変更情報に基づいて行われる。そして、変更後変数割付情報が、変更前変数割付情報とされる。以上の処理によって、所定の長さ以上のデータが所定の長さに分割されて、スキャンタイムの延びを抑えながら移動される。
この処理によって、未使用領域と使用領域とが共に1つとなったかを確認する。これによって、アドレス「0x1000」〜「0x5000」に連続して変数10〜13が割当てられ、アドレス「0x5000」〜「0x5002」は未使用領域となっており、使用領域と未使用領域がいずれも1つとなったので、メモリ整理処理が終了する。
なお、上記した説明では、データメモリ24の先頭アドレスから末尾アドレスに向かって未使用領域を検索し、最初の未使用領域の直後に存在する変数を移動対象領域として抽出する場合を示したが、これに限定されるものではなく、未使用領域を挟んで飛び飛びの状態で存在する任意の変数を抽出することができる。
この実施の形態によれば、データメモリ24中の変数が割付けられた移動対象領域と、データメモリ24の先頭アドレスに最も近い未使用領域を変更先アドレスとを抽出し、未使用領域が連続するように変数の割付を変更するようにしたので、RUN中書込みによる変数の追加削除の繰り返しによって未使用領域が点在するデータメモリ24内を整理し、連続する未使用領域を確保することができるという効果を有する。
また、移動対象領域が大きい場合は、移動対象領域を複数に分割して、複数回に分けて移動させることで、データの移動によるスキャンタイム延びを抑えることができるという効果も有する。
以上のように、この発明にかかるプログラマブルコントローラは、高度なデータ構造を使用する変数プログラミングの用途に適している。
10 プログラミングツール
11 プログラムエディタ部
12 変数割付情報格納部
13 コンパイラ
14 変数割付管理部
15,21 通信部
20 CPUユニット
22 プログラムメモリ
23 ユーザプログラム実行部
24 データメモリ
25 メモリ整理実行部
26 変数割付情報格納部
27 割付変更情報格納部
141 変数割付情報管理部
142 移動対象領域抽出部
143 変更先アドレス取得部
144 変更後実行コード取得部
145 変更情報取得部
146 割付変更情報生成部

Claims (6)

  1. プログラムに基づいて制御対象を制御するプログラマブルコントローラと、前記プログラマブルコントローラで使用される前記プログラムを管理するプログラミングツールと、を備えるプログラマブルコントローラシステムにおいて、
    前記プログラミングツールは、
    前記プログラム中で使用されている変数とサイズ、および前記プログラマブルコントローラのデータ記憶手段内のアドレスとを対応付ける変数割付情報を格納する変数割付情報格納手段と、
    ユーザによって作成されたプログラムと前記変数割付情報から前記プログラマブルコントローラで実行可能な実行コードを生成するコンパイル手段と、
    変更前の前記変数割付情報から前記プログラマブルコントローラの前記データ記憶手段内の前記変数に割付けられている領域のうち断片化されている領域を移動対象領域として抽出する移動対象領域抽出部、前記移動対象領域を他の変数に割付けられている領域と連続するように配置する前記データ記憶手段内の変更先アドレスを取得する変更先アドレス取得部、前記移動対象領域と前記変更先アドレスとを含む割付変更後の変数割付情報と、前記プログラムと、から前記コンパイル手段を通じて割付変更後のプログラムの実行コードを取得する変更後実行コード取得部、前記割付変更後のプログラムの実行コードの前記割付変更前のプログラムの実行コードからの変更箇所を変更情報として取得する変更情報取得部、および前記移動対象領域と前記変更先アドレスとを用いて前記変数の前記データ記憶手段内での割当先の変更に伴って生じる前記プログラムの実行コードの変更箇所を割付変更情報として生成する割付変更情報生成部を有する変数割付管理手段と、
    前記変数割付管理手段によって生成される変更情報と割付変更情報とを前記プログラマブルコントローラに送信する通信手段と、
    を備え、
    前記プログラマブルコントローラは、
    前記プログラムの実行コードを記憶するプログラム記憶手段と、
    前記プログラムの実行コードを実行するプログラム実行手段と、
    前記プログラム実行手段による前記プログラムの実行コードの実行時に使用するデータを格納する前記データ記憶手段と、
    前記プログラミングツールからの前記変更情報を用いて前記プログラム記憶手段中の実行コードの書換え処理を行うと同時に、前記プログラミングツールからの前記割付変更情報にしたがって前記データ記憶手段中の前記移動対象領域中のデータを前記変更先アドレスで指定される領域に移動させる処理を行うメモリ整理実行手段と、
    を備えることを特徴とするプログラマブルコントローラシステム。
  2. 前記移動対象領域抽出は、前記変数割付情報を用いて、前記プログラマブルコントローラの前記データ記憶手段中の先頭アドレスから末尾アドレスに向かって前記プログラム中で変数に割り当てられていない未使用領域を検索し、最初に発見した未使用領域の直後にある領域の先頭アドレスからつぎの未使用領域の先頭アドレスまでの領域を前記移動対象領域として抽出することを特徴とする請求項に記載のプログラマブルコントローラシステム。
  3. 前記移動対象領域抽出は、前記最初に発見した未使用領域の直後にある領域の先頭アドレスから前記つぎの未使用領域の先頭アドレスまでの領域が所定のサイズよりも大きい場合には、前記所定のサイズ以下の複数の領域に分割し、分割した領域の1つを前記移動対象領域とし、
    前記プログラミングツールと前記プログラマブルコントローラは、分割したそれぞれの領域について、前記プログラマブルコントローラの前記データ記憶手段中のデータの移動処理を行うことを特徴とする請求項に記載のプログラマブルコントローラシステム。
  4. 前記変更先アドレス取得は、前記変数割付情報を用いて、前記プログラマブルコントローラの前記データ記憶手段中の先頭アドレスから末尾アドレスに向かって前記未使用領域を検索し、最初に発見した未使用領域を前記変更先アドレスとして取得することを特徴とする請求項1から3のいずれか1つに記載のプログラマブルコントローラシステム。
  5. 前記メモリ整理実行手段は、前記プログラム実行手段が前記プログラムを実行中に前記プログラムの実行コードの書換えと、前記データ記憶手段中のデータの移動を行うことを特徴とする請求項1から4のいずれか1つに記載のプログラマブルコントローラシステム。
  6. プログラムの実行コードを記憶するプログラム記憶手段と、プログラムの実行コードを実行するプログラム実行手段と、プログラム実行手段によるプログラムの実行コードの実行時に使用するデータを格納するデータ記憶手段と、を備え、前記プログラムに基づいて制御対象を制御するプログラマブルコントローラと、前記プログラマブルコントローラで使用される前記プログラムを管理するプログラミングツールと、が通信回線を介して接続されたプログラマブルコントローラシステムでの前記プログラムで使用される変数が割付けられた前記データ記憶手段内の領域を整理するメモリ整理方法において、
    前記プログラミングツールは、前記プログラム中で使用されている変数とサイズ、および前記プログラマブルコントローラの前記データ記憶手段内のアドレスとを対応付ける変数割付情報から前記プログラマブルコントローラの前記データ記憶手段内の前記変数に割付けられている領域のうち断片化されている領域を移動対象領域として抽出する工程と、
    前記プログラミングツールは、前記移動対象領域を他の変数に割付けられている領域と連続するように配置する前記データ記憶手段内の変更先アドレスを取得する工程と、
    前記プログラミングツールは、前記移動対象領域と前記変更先アドレスとを含む割付変更後の変数割付情報と、前記プログラムと、から割付変更後のプログラムの実行コードを取得する工程と、
    前記プログラミングツールは、前記割付変更後のプログラムの実行コードの割付変更前のプログラムの実行コードからの変更箇所を変更情報として取得する工程と、
    前記プログラミングツールは、前記移動対象領域と前記変更先アドレスとを含む割付変更情報を生成する工程と、
    前記プログラミングツールは、前記変更情報と前記割付変更情報を前記プログラマブルコントローラに送信する工程と、
    前記プログラマブルコントローラは、前記変更情報と前記割付変更情報を受信する工程と、
    前記プログラマブルコントローラは、前記変更情報に基づいて前記プログラム記憶手段中の前記プログラムの実行コードを書換えると同時に、前記割付変更情報にしたがって前記データ記憶手段中の前記移動対象領域中のデータを前記変更先アドレスで指定される領域に移動させる工程と、
    を含むことを特徴とするメモリ整理方法。
JP2011082231A 2011-04-01 2011-04-01 プログラマブルコントローラシステムおよびメモリ整理方法 Expired - Fee Related JP5669652B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011082231A JP5669652B2 (ja) 2011-04-01 2011-04-01 プログラマブルコントローラシステムおよびメモリ整理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011082231A JP5669652B2 (ja) 2011-04-01 2011-04-01 プログラマブルコントローラシステムおよびメモリ整理方法

Publications (2)

Publication Number Publication Date
JP2012216150A JP2012216150A (ja) 2012-11-08
JP5669652B2 true JP5669652B2 (ja) 2015-02-12

Family

ID=47268846

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011082231A Expired - Fee Related JP5669652B2 (ja) 2011-04-01 2011-04-01 プログラマブルコントローラシステムおよびメモリ整理方法

Country Status (1)

Country Link
JP (1) JP5669652B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5957936B2 (ja) * 2012-02-15 2016-07-27 富士電機株式会社 プログラマブルコントローラシステム、その支援装置、プログラム
JP2015125713A (ja) * 2013-12-27 2015-07-06 富士電機株式会社 プログラマブルコントローラ・システム、その支援装置、プログラマブルコントローラ、プログラム
JP7676961B2 (ja) * 2021-05-31 2025-05-15 オムロン株式会社 情報処理装置、制御システム、および制御プログラムを開発するプログラム
US12353860B2 (en) 2022-02-10 2025-07-08 Mitsubishi Electric Corporation Programmable controller system, development support device, and recording medium

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0239204A (ja) * 1988-07-28 1990-02-08 Mitsubishi Electric Corp プログラマブルコントローラにおけるデバイス番号拡張方法
JPH11259312A (ja) * 1998-03-12 1999-09-24 Toshiba Corp プログラマブルコントローラのパッキング方法および該パッキング方法を実施するプログラムを記録した記録媒体
JP5338528B2 (ja) * 2009-07-03 2013-11-13 富士電機株式会社 プログラマブルコントローラおよびアプリケーションプログラムの更新方法

Also Published As

Publication number Publication date
JP2012216150A (ja) 2012-11-08

Similar Documents

Publication Publication Date Title
KR101558832B1 (ko) 시퀀스 프로그램 디버그 지원 장치
US6223339B1 (en) System, method, and product for memory management in a dynamic translator
JP5669652B2 (ja) プログラマブルコントローラシステムおよびメモリ整理方法
JP5583305B2 (ja) プログラマブルロジックコントローラ、プログラミングツール及びプログラム・パラメータ編集システム
CN112506547B (zh) 分布式控制系统的组态数据下装方法、装置、设备及介质
JP6879625B2 (ja) プログラマブルコントローラ、管理装置および制御システム
KR20080105345A (ko) 병렬 처리 장치 및 방법
JP2009037546A (ja) スレッド固有領域を利用するメモリ管理方法およびその方法を用いたコンピュータ
WO2013136366A1 (en) Storage apparatus and program update method
JP5849592B2 (ja) プログラマブルコントローラシステム、そのプログラミング装置、プログラマブルコントローラ、プログラム、デバッグ方法
JP2015125713A (ja) プログラマブルコントローラ・システム、その支援装置、プログラマブルコントローラ、プログラム
JP2019049917A (ja) 数値制御装置及び産業機械に含まれる装置
JP6205934B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラム
US10437230B2 (en) Numerical controller having function of automatically selecting storage destination of machining program
EP3564764B1 (en) Device for processing programmable logic controller program
CN112764793B (zh) 一种功能块参数增量式更新的方法
JP6119452B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ、プログラム
KR20130121167A (ko) 모션 sfc 프로그램 부품 작성 장치
CN114237903A (zh) 内存分配优化方法、装置、电子设备、介质及程序产品
JP5224923B2 (ja) 制御装置
JP2010003031A (ja) コンパイル処理装置,ならびにアクセスパターン変更処理方法および処理プログラム
JP6455096B2 (ja) コントロールシステム、その支援装置、プログラマブルコントロール装置
JP6020071B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ
JPH0262630A (ja) メモリ及びメモリの使用方法
JP6628951B1 (ja) プログラム作成支援装置、プログラム作成支援方法およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130902

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140528

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140603

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140704

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141216

R150 Certificate of patent or registration of utility model

Ref document number: 5669652

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

LAPS Cancellation because of no payment of annual fees