JP4319082B2 - プログラミングシステム - Google Patents

プログラミングシステム Download PDF

Info

Publication number
JP4319082B2
JP4319082B2 JP2004114563A JP2004114563A JP4319082B2 JP 4319082 B2 JP4319082 B2 JP 4319082B2 JP 2004114563 A JP2004114563 A JP 2004114563A JP 2004114563 A JP2004114563 A JP 2004114563A JP 4319082 B2 JP4319082 B2 JP 4319082B2
Authority
JP
Japan
Prior art keywords
data
program
block
unit
programmable controller
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
JP2004114563A
Other languages
English (en)
Other versions
JP2005301520A (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 JP2004114563A priority Critical patent/JP4319082B2/ja
Publication of JP2005301520A publication Critical patent/JP2005301520A/ja
Application granted granted Critical
Publication of JP4319082B2 publication Critical patent/JP4319082B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Programmable Controllers (AREA)

Description

本発明は、プログラマブルコントローラに対してプログラムの変更を行うプログラミングシステムに関するものである。
プログラマブルコントローラのプログラミング装置によって大規模アプリケーションを開発する際、生産性や保守性の向上のため構造化プログラミングが行われている。例えば、国際電気標準会議によるIEC61131−3規格では、ローカル変数と処理ロジックをモジュール化したソフトウェア部品としてプログラム構成要素(POU(Program Organization Unit)を定義し、このPOUを組み合わせてユーザアプリケーションを構築するプログラム言語を規定している。
POUの処理ロジックは別のPOUの実行呼び出しを用いて記述する。ここでプログラムとファンクションブロックのPOUは、別のPOUを直接呼び出すのではなく、インスタンスと呼ばれるコピーを用意して呼び出す。同じPOUのコピーとなるインスタンスの場合、処理ロジックは同じでもローカル変数の値はインスタンスごとに独立して保持している。
このようにインスタンス化して用いられるPOUの振舞いを実行環境であるプログラマブルコントローラで実現するため、プログラマブルコントローラのデータメモリ上にはPOUインスタンスごとの固有のデータをデータインスタンスで記憶し、プログラマブルコントローラのコードメモリ上にはPOUインスタンスの実行で呼び出される実行可能なコードをコードインスタンスで記憶している。
プログラムの実行を継続させつつ、プログラムの変更を行うにはプログラムの変更前後において、既存変数のデータメモリ上の割付先アドレスの値を正しく引き継がせることが必要になる。既存変数のデータメモリ上の割付先アドレスをプログラム変更前後で変えないため、前回コンパイル時の変数のデータメモリ上の割付先アドレスを記憶保持し、今回のコンパイル時に流用する技術がある。
特許文献1に記載の制御装置では、各メモリブロックを格納するデータメモリ(DM)中にメモリブロック毎の余裕領域を確保している。そして、オンラインエディットによってプログラム変更時に追加されたローカル変数をこの余裕領域の中に割り付けている。これにより、プログラムの変更前後において、既存変数のデータメモリ上の割付先アドレスが変化することを回避している。
特開2000−20297号公報
しかしながら、上記従来の技術ではメモリブロック毎に余裕領域を確保しているため、初期のコンパイル時点では各メモリブロックに将来どれだけのローカル変数の追加が必要になるかが明確でなく、余裕領域の見積もりが困難である。余裕領域のメモリ量を大きくすると、使用されない無駄に確保されたメモリ領域が大きくなりメモリの使用効率が悪くなるといった問題があった。
本発明は、上記に鑑みてなされたものであって、プログラマブルコントローラのメモリの使用効率を低下させることなく、プログラマブルコントローラのプログラムの実行を継続しながらプログラムの変更を可能とするプログラミングシステムを得ることを目的とする。
上述した課題を解決し、目的を達成するために、本発明は、データ変数を含んだプログラム構成要素によるモジュール単位で記述されたソースプログラムから生成された目的プログラムを実行するプログラマブルコントローラと、前記目的プログラムを前記プログラマブルコントローラに送るプログラミング装置とからなるプログラミングシステムにおいて、前記プログラマブルコントローラは、前記プログラム構成要素の目的プログラムの実行によって処理されるデータを前記プログラム構成要素毎のデータ変数を含むブロック毎に続けて記憶する領域と、プログラムの変更時に新たに追加される追加データを前記プログラム構成要素毎のデータ変数を含むブロック毎に続けて記憶するための空き領域とからなる記憶部を有し、プログラミング装置は、前記プログラマブルコントローラへの目的プログラムを変更する際、前記追加データのデータ変数を抽出して、該追加データのデータ変数を含むブロックを前記空き領域に割り付けるデータ割付部と、前記空き領域に割付けた追加データのデータ変数を含むブロックを、前記記憶部内で記憶する前記追加データのデータ変数を含むブロックを前記空き領域に割り付ける前のデータ変数のブロックであって前記追加データのデータ変数を含むプログラム構成要素と同一のプログラム構成要素のブロックに対応付け処理し、該ブロックの先頭メモリアドレスを前記プログラマブルコントローラの記憶部に設定するデータアクセス設定部と、前記空き領域に最初に割り付けられた該プログラム構成要素毎のデータ変数を含むブロックの先頭メモリアドレスを引数にして前記プログラム構成要素の実行を呼び出す前記目的プログラムの生成を行うプログラム生成部と、を備え、プログラミング装置は前記データアクセス設定部が前記対応付け処理と前記ブロックの先頭メモリアドレスを前記プログラマブルコントローラの記憶部に設定したのち後、前記目的プログラムを前記プログラマブルコントローラに送ることを特徴とする。
この発明によれば、プログラマブルコントローラの記憶部が、プログラム構成要素毎のブロックを続けて記憶する領域と、プログラムの変更時に新たに追加されるプログラム構成要素毎のブロックを続けて記憶するための空き領域を有し、プログラミング装置が、空き領域に割付けた追加データのブロックを、空き領域に割り付ける前のブロックに対応付け処理しているので、プログラマブルコントローラへの目的プログラムを変更する際、空き領域に割り付ける前のブロックのデータ変数を変化させることなくプログラマブルコントローラの目的プログラムを変更することができる。
この発明によれば、プログラマブルコントローラへの目的プログラムを変更する際、新たに追加されるデータ変数を含むブロックは、空き領域に続けて割付けることができるとともに、空き領域に割り付けられた各ブロックは記憶部に既に割り付けられているデータ変数のブロックと対応付けられるので、記憶部の使用効率を低下させることなく、プログラマブルコントローラにおけるプログラムの実行を継続しながらプログラマブルコントローラへの目的プログラムの変更を行うことが可能になるという効果を奏する。
以下に添付図面を参照して、この発明にかかるプログラミング装置の好適な実施の形態を詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
実施の形態
図1は、本発明の実施の形態にかかるプログラミングシステムの構成を示す図である。プログラミングシステムはプログラミング装置1、プログラマブルコントローラ(PLCProgrammable Logic Controller))60、入力装置51、出力装置52からなる。
プログラミング装置1は、ソースプログラムを編集してプログラマブルコントローラ60のプログラムを変更させる装置であり、入力装置51、出力装置52、プログラマブルコントローラ60と接続されている。プログラミング装置1は、編集部10、変換部20、転送部30、記憶部40からなる。
編集部10は、ソースプログラムをプログラム構成要素(後述するPOU(Program Organization Unit))によるモジュール単位で編集する。編集部10は、入力装置51、出力装置52と接続され、入力装置51から編集部10へ入力する情報に基づいてソースプログラムの編集を行う。また、編集部10によって編集されるソースプログラムは出力装置52を介してプログラミング装置1の使用者が確認できるよう構成されている。
変換部20は、編集部10によって編集されたソースプログラムをプログラマブルコントローラ60で実行可能な目的プログラムにコンパイル(変換生成)する。変換部20は、データインスタンス割付部(データ割付部)21とコードインスタンス展開部22を備えている。
データインスタンス割付部21は、POUのインスタンスごとにデータメモリ上(後述するデータメモリ部62)にデータインスタンスの割付を行う。データインスタンスとは、データメモリ上においてPOUインスタンスごとの固有のデータを記憶する箇所である。
コードインスタンス展開部22は、ソースプログラムに記述されたPOU処理ロジックからコードインスタンスを形成する。コードインスタンスは、POUの型ごとに共通のサブルーチンとしてコードメモリ上(後述するコードメモリ部61)に配置される。コードインスタンスとは、コードメモリ上においてPOUを実行するための各コードが記憶する箇所である。POUインスタンスの実行は、データインスタンスの内容を、POUの共通サブルーチン化されたコードインスタンスに引き渡して呼び出すことで実現する。
転送部30は、プログラマブルコントローラ60と接続されており、プログラマブルコントローラ60で実行可能な目的プログラムとその実行に必要な初期値をプログラマブルコントローラ60に転送する。転送部30は、データメモリアクセス部(データアクセス設定部)31とオンラインコード変更部32を備えている。
データメモリアクセス部31は、プログラマブルコントローラ60のデータメモリ部62上のデータの変更を行う。オンラインコード変更部32は、プログラマブルコントローラ60が実行する目的プログラムのコードを格納するコードメモリをプログラムの実行を停止させることなく変更させる。
記憶部40は、変換部20において作成、参照、更新されるメモリブロック(ブロック)を管理するための情報(後述するデータインスタンス割付情報70)およびデータインスタンス中の変数であるローカル変数(データ変数)に関する定義情報(後述するローカル変数定義情報80)やソースプログラム、目的プログラムを格納する。
入力装置51は、キーボード、マウス等を備えて構成され、プログラミング装置1の編集部10と接続されている。入力装置51は、ソースプログラムの編集を行う際の指示情報等を入力し、編集部10に送信する。
出力装置52は、液晶パネル等の表示装置を備えて構成され、プログラミング装置1の編集部10と接続されている。出力装置52は、ソースプログラムの編集を行う際のソースプログラム等を表示する。
プログラマブルコントローラ60は、プログラミング装置1からの目的プログラムに基づいて動作するコントローラであり、コードメモリ部61とデータメモリ部62を備える。コードメモリ部61は、プログラマブルコントローラ60で実行可能な目的プログラムのコードを記憶する。なお、データメモリ部62が特許請求の範囲に記載の記憶部に対応する。
データメモリ部62は、コードメモリ部61上の目的プログラムの実行によって処理されるデータを格納する。データメモリ部62は、目的プログラムの実行によって処理されるデータをPOUのメモリブロック毎に記憶しておく領域と、プログラムの変更時に新たに追加されるローカル変数を含むメモリブロックをメモリブロック毎に記憶する空き領域(余裕領域)からなる。データメモリ部62においては予め所定容量の空き領域が確保されており、プログラム変更時に追加されたローカル変数はこの空き領域の中に割り付けられる。目的プログラムの実行によって処理されるデータをPOUのメモリブロック毎に記憶しておく領域は、POUの各メモリブロックを上位領域から続けて記憶する。空き領域は、プログラムの変更時に新たに追加されるローカル変数を含む各メモリブロックを上位領域から続けて記憶する。
本実施の形態においては、ソースプログラムの内部変数であるローカル変数とソースプログラムの処理ロジックをモジュール化したソフトウェア部品を、POU(プログラム構成要素)として定義する。そして、このPOUを組み合わることによってユーザアプリケーションを構築するプログラマブルコントローラ60のプログラム言語を規定する。このプログラム言語は、国際電気標準会議によるIEC(以下、IEC(International Electrotechnical Commission)という)61131−3等によって規格化されている。
POUには、プログラム、ファンクションブロック(以下、FB(Function Block)という)、ファンクションがあり、POUの処理ロジックは別のPOUの実行呼び出しを用いて記述される。プログラムとFBのPOUは、このPOUを直接呼び出すのではなく、インスタンスと呼ばれるコピーを用意して呼び出す。同じPOUのコピーとなるインスタンスの場合、処理ロジックが同じ場合であってもローカル変数の値はインスタンスごとに独立して保持しておく。ファンクションはインスタンス化せず処理ロジックの実行を直接呼び出せるPOUであり、ローカル変数の値は実行中以外は保持されない。
つぎに、プログラミング装置の処理手順について説明する。図2は、プログラミング装置のコンパイル処理の手順を示すフローチャートである。プログラミング装置1の編集部10は、入力装置51から編集部10へ入力する指示情報に基づいてソースプログラムの編集(変更)を行い、編集されたソースプログラムを記憶部40で記憶する。
ここで、ローカル変数の追加を伴うソースプログラムの変更について説明する。図3はプログラミング装置が変更処理を行うプログラムの構成の一例を示す図であり、図4はプログラムの実行手順の一例を示すシーケンス図であり、図5はプログラム変更の一例を説明するための図であり、図6はデータメモリ構造の変更を説明するための図である。
図3に示すプログラムは例えばIEC61131−3規格準拠プログラミング言語によって記述されている。ここでは、POU1の処理ロジックがPOU2型FBのデータインスタンス「Pou2_Inst1」とPOU3型FBのデータインスタンス「Pou3_Inst2」の実行を呼び出している。また、POU2型FBの処理ロジックではPOU3型FBのデータインスタンス「Pou3_Inst1」の実行を呼び出している。「Pou3_Inst1」と「Pou3_Inst2」の2つのデータインスタンスは共にPOU3型FBであるため同じ処理ロジック(POU3の処理ロジック)を実行するが、それぞれ異なるデータインスタンスであるため処理ロジックで参照されるローカル変数の値は互いに独立した値となる。
図4のシーケンス図は、図3のプログラムをプログラマブルコントローラ60で実行する場合の概略手順を示している。POUインスタンスの実行は、POUのデータインスタンスの内容を、POUの共通サブルーチン化されたコードインスタンスに引き渡して呼び出すことで実現する。
POU1のコードインスタンス「Pou1_Code」では、POU2のデータインスタンス「Pou2_Inst1」を引数としてPOU2のコードインスタンス「Pou2_Code」のサブルーチンを呼び出すCALL命令を実行し、その後POU3のデータインスタンス「Pou3_Inst2」を引数としてPOU3のコードインスタンス「Pou3_Code」のサブルーチンを呼び出すCALL命令を実行する。
POU1のコードインスタンス「Pou1_Code」から呼び出されたPOU2のコードインスタンス「Pou2_Code」では、さらにPOU3のデータインスタンス「Pou3_Inst1」を引数としてPOU3のコードインスタンス「Pou3_Code」のサブルーチンを呼び出すCALL命令を実行する。このようにIEC言語でのPOUインスタンスは、データインスタンスとコードインスタンスを一体にして呼び出している。
図5は、図3のIEC言語のプログラムにおけるPOU3の定義が記述されたソースプログラムの変更例を示している。プログラマブルコントローラ60にプログラムの実行を継続させつつ、プログラムの変更を行うには、プログラムの変更前後において、既存変数(ローカル変数等)の値が正しく引き継がれること必要である。変更後のプログラムではローカル変数Y1,Y2が新規に追加され、この追加されたローカル変数を用いて処理ロジックの一部も変更されている。一方、ローカル変数X1、X2、X3は既存変数であるため、例えば変更前プログラムの処理ロジックで使用されているローカル変数X2の値は、変更後プログラムの処理ロジックでも同じ値が継続して使用されている。
一般に、プログラマブルコントローラのように限られたメモリしかもたない実行環境の場合、コードインスタンスはPOUの型ごとに共通のサブルーチンとしてコードメモリ上に配置し、データインスタンスはPOUのインスタンスごとにデータメモリ上に確保し割り付けるのがメモリ使用効率の点で望ましい。
そこで本実施の形態では、図6に示すメモリ構造でデータメモリ上にデータインスタンスを配置する。メモリ構造はメモリブロックの先頭にある1つのアドレス格納領域と、このアドレス格納領域に続くローカル変数のデータ格納領域からなるメモリブロックを1つの要素とするメモリブロックのリスト構造となっている。
アドレス格納領域は、次の要素となるメモリブロックが割り付けられたデータメモリ部62の記憶領域上の先頭アドレスを保持する領域である。このアドレス格納領域の値を参照することで、データインスタンスは最初のメモリブロックから順番に次のメモリブロックを辿ることが可能とる。
コンパイル時のプログラムの変更によって追加されたローカル変数のデータ格納領域をデータインスタンスに保有させる必要がある場合、リスト構造の要素となるメモリブロックを新規の要素としてデータメモリ部62の空き領域に格納する。ここではプログラム変更によってPOU3に新たに追加されたローカル変数Y1,Y2のデータ領域を含む一つのメモリブロックを、データインスタンスのメモリブロックリストの最後の要素として加えている。
つぎに、変換部20のデータインスタンス割付部21は、変更を施したプログラムのコンパイルを開始し、記憶部40に記憶している既存のデータインスタンス割付情報70とローカル変数定義情報80の内容を変更する。ここで、データインスタンス割付情報70とローカル変数定義情報80について説明する。
図7は、データインスタンス割付情報の構成の一例を示す図である。データインスタンス割付情報70は、メモリブロックリスト構造の各要素となるメモリブロックを管理するための情報テーブルである。
データインスタンス割付情報70には、データメモリ部62上で割付けられるメモリブロック毎の情報が含まれる。各メモリブロックの情報には、メモリブロック内のPOUのインスタンスを示す「POUインスタンス名」、メモリブロック内のPOUの型名を示す「POU型」、メモリブロックのリスト構造内での索引を示す「リストインデックス」(リスト構造の先頭要素から始まるインデックス)、メモリブロックの先頭のアドレスを示すブロック「先頭アドレス」、メモリブロックのサイズを示す「ブロックサイズ」、変更されたプログラムのコンパイルによって新たにデータメモリ部62から領域を確保して割り付けが必要なメモリブロックであるか否かを示す「新規割付フラグ」が含まれる。
「新規割付フラグ」が「Yes」の場合は、変更されたプログラムのコンパイルによって新たにデータメモリ部62から領域を確保して割り付けが必要なメモリブロックであることを示す。一方、「新規割付フラグ」が「No」の場合は、変更されたプログラムのコンパイルによって新たにデータメモリ部62から領域を確保して割り付けが必要なメモリブロックではないことを示す。
図8は、ローカル変数定義情報の構成の一例を示す図である。ローカル変数定義情報80は、POU毎のローカル変数に関する定義情報を管理するための情報テーブルである。ローカル変数定義情報80には、ローカル変数毎の情報が含まれ、各ローカル変数の情報には、ローカル変数を含むPOUの「POU型」、ローカル変数の「変数名」、ローカル変数が有するデータの「データ型」、ローカル変数の「データサイズ」、ローカル変数がデータインスタンスのメモリブロックリスト構造のどのメモリブロックに配置されているかを表す「リストインデックス」、ローカル変数が配置されたメモリブロック内での「相対アドレス」(メモリブロックの先頭アドレスからのオフセット)、プログラム変更によって前回のコンパイル時から新たに追加されたローカル変数であるか否かを示す「新規追加フラグ」(識別情報)が含まれる。
「新規追加フラグ」が「Yes」の場合は、プログラム変更によって前回のコンパイル時から新たに追加されたローカル変数であることを示す。一方、「新規追加フラグ」が「No」の場合は、プログラム変更によって前回のコンパイル時から新たに追加されたローカル変数でないことを示す。
「リストインデックス」は、ローカル変数がデータインスタンスのメモリブロックリスト構造のどのメモリブロックに配置されているかを表す。また、「リストインデックス」によって、既存のローカル変数を含むメモリブロックと新たに追加されるローカル変数を含むメモリブロックを識別することが可能となる。
つぎに、データインスタンス割付部21は、記憶部40に記憶しているデータインスタンス割付情報70の「新規割付フラグ」を全て「No」に設定し、ローカル変数定義情報80の「新規追加フラグ」を全て「No」に設定する(ステップS100)。ここでは、記憶部40が特許請求の範囲に記載のデータ変数管理部、対応付情報管理部、データ変数記憶部に対応する。
データインスタンス割付部21は、記憶部40に記憶しているソースプログラムとローカル変数定義情報80の内容を比較し、POUのソースプログラムで新たに追加されたローカル変数を抽出する。そして、新たに追加されたローカル変数がある場合は、新たに追加されたローカル変数に対してのみ、「新規追加フラグ」の項目を「Yes」にしてローカル変数定義情報80に追加登録する(ステップS110)。
このとき、ソースプログラムが例えば図5に示したソースプログラムである場合、POU3に新たに追加されるローカル変数はローカル変数Y1,Y2であり、ここでは図8のローカル変数定義情報80にPOU3のローカル変数Y1,Y2を追加登録している。そして、この追加登録の際に「リストインデックス」に記録する値は、同じPOU3の既存のローカル変数X1、X2、X3の「リストインデックス」の最大値「0」に1を加算した値「1」を用いている。
また、「相対アドレス」に記録する値は、変更するプログラムが図6に示したプログラムの場合、「次ブロックへのアドレス」の格納領域のアドレスに対する相対アドレス
(「次ブロックへのアドレス」の格納領域の次の位置から前詰めにして割り付けた場合の相対アドレス)を用いる。ここでは、「次ブロックへのアドレス」の格納領域を「0」としてローカル変数Y1の相対アドレスが「+2」であり、ローカル変数Y2の相対アドレスが「+4」である場合を示している。記憶部40は、ローカル変数が追加された新たなローカル変数定義情報80を記憶する。
データインスタンス割付部21はローカル変数定義情報80に「新規追加フラグ」の項目が「Yes」となっているローカル変数があるか否かを確認する(ステップS120)。
データインスタンス割付部21がローカル変数定義情報80に「新規追加フラグ」の項目が「Yes」となっているローカル変数があると判断した場合(ステップS120、YES)、データインスタンス割付部21は「新規追加フラグ」の項目が「Yes」のローカル変数からPOU型ごとのメモリブロックのサイズを算出する(ステップS130)。ここでのメモリブロックのサイズは、データインスタンスのリスト構造に新しい要素として追加されるメモリブロックのサイズであり、POU型ごとに新規追加フラグが「Yes」のローカル変数のデータサイズの合計値とアドレス格納領域(次ブロックへのアドレス)のサイズを加算することによって算出する。
データインスタンス割付部21は、算出した新規割り付けするメモリブロックのサイズに応じて、インスタンスごとに現在のデータメモリ部62の空き領域に新しいメモリブロックを割り付ける。インスタンスが複数ある場合は、各インスタンスに対応するメモリブロックを連続して順番に空き領域に割り付ける。
データインスタンス割付部21は、データインスタンス割付情報70に、新たにデータメモリ部62の記憶領域に割り付けられたメモリブロックを追加登録するとともに、このメモリブロックのデータインスタンスの「新規割付フラグ」の項目を「Yes」にする(ステップS140)。
例えば、図7に示すデータインスタンス割付情報70の場合、POU3型のデータインスタンス「Pou3_Inst1」、「Pou3_Inst2」に対して、「リストインデックス」が「1」となる新規のメモリブロックの割付情報を追加登録している。そして、新規のメモリブロックの割付情報が追加登録された新たなデータインスタンス割付情報70を、記憶部40において記憶する。データインスタンス割付情報70によって、データメモリ部62上に配置されたメモリブロックの割付情報を管理することが可能となる。
図9は、データメモリ部上のデータインスタンスの変更の概念を説明するための図である。図9に示すようにデータメモリは、図6に示したメモリブロックリスト構造を用いて割り付けられている。ここでは、図5に示したプログラムの変更(ローカル変数の追加)の場合を示している。
変更前のプログラムは各メモリブロック(データインスタンス)がデータメモリの上から順番にリスト構造で配置されている。そして、このメモリブロックが配置されている下のエリアが空き領域となっている。一方、変更後のプログラムにおいて新たに追加されるメモリブロックは、データメモリ部62の空き領域上に割り付けられる。このとき、新規の各メモリブロックは空き領域の上から順番にリスト構造で配置されていく。
データインスタンス割付部21によるメモリブロックの割付処理の後、コードインスタンス展開部22は、ソースコードに記述された処理ロジックからコードインスタンスを展開し、プログラマブルコントローラ60で実行可能な目的プログラムを生成する(ステップS150)。
コードインスタンス展開部22は、コードインスタンスをデータインスタンスのメモリブロックリストの最初の要素(メモリブロック先頭アドレス)を引数とするサブルーチンとして展開する。
データインスタンス割付部21が、ローカル変数定義情報80に「新規追加フラグ」の項目が「Yes」となっているローカル変数がないと判断した場合(ステップS120、NO)、新たにローカル変数のデータ格納領域を確保して割り付ける必要がないため、前回コンパイル時の変数割り付けの状態をそのまま再利用する。この場合も、コードインスタンス展開部22は、ソースコードに記述された処理ロジックからコードインスタンスを展開し、プログラマブルコントローラ60で実行可能な目的プログラムを生成する(ステップS150)。
図10は、コードインスタンス展開部によって展開されるコードインスタンスの一例を示す図である。ここでは、図3に示すプログラム変更がされた場合のコードインスタンスの展開をC言語表記で示している。
コードインスタンスの展開における「(block0_top_adr)」変数は、コードインスタンスの引数として渡される最初のメモリブロックの先頭アドレス値を表す。
コードインスタンス展開部22は、POUのローカル変数にアクセスする処理ロジック部分を展開する場合、ローカル変数定義情報80から「リストインデックス」と「相対アドレス」を取得する。そして、引数として渡されたアドレス値「(block0_top_adr)」の値に「リストインデックス」の回数分だけ間接参照(C言語の*単項演算子の適用)を繰り返した値に「相対アドレス」を付加した値をアドレスとするデータメモリ位置をアクセスするコードに展開する。コードインスタンスを展開して生成された目的プログラムは、記憶部40において記憶される。
つぎに、プログラムの変更処理の手順について説明する。図11は、プログラムの変更処理手順を示すフローチャートである。データメモリアクセス部31は、データインスタンス割付情報70の「新規割付フラグ」が「Yes」のメモリブロック(以下、新規メモリブロックという)のデータインスタンスの割付情報があるか否かを判断する(ステップS200)。
データメモリアクセス部31がデータインスタンス割付情報70に新規メモリブロックの割付情報がないと判断した場合は(ステップS200、NO)、オンラインコード変更部32は、プログラムの実行を停止することなく、記憶部40に記憶している目的プログラムをプログラマブルコントローラ60のコードメモリ部61上に書き込む(ステップS230)。
一方、データメモリアクセス部31が新規メモリブロックの割付情報があると判断した場合(ステップS200、YES)、データメモリアクセス部31はこの新規メモリブロックの先頭アドレスの値を、データメモリ部62上に形成されるデータインスタンスのメモリブロックリストに書き込む(対応付情報の設定)。このとき、新規メモリブロックの「リストインデックス」よりも「リストインデックス」が1つ前のメモリブロックの先頭アドレスの位置に、新規メモリブロックの先頭アドレスの値を書き込む(ステップS210)。
例えば、図9に示したプログラムの場合、「Pou3_Inst1」の「リストインデックス」が「1」である新規メモリブロックの先頭アドレスの値(1019)を、「Pou3_Inst1」の「リストインデックス」が「0」のメモリブロックの先頭アドレスの位置(アドレス1007番地)に書き込む。
また、「Pou3_Inst2」の「リストインデックス」が「1」である新規メモリブロックの先頭アドレスの値(1024)を、「Pou3_Inst2」の「リストインデックス」が「0」のメモリブロックの先頭アドレスの位置(アドレス1013番地)に書き込む。
これにより、プログラマブルコントローラ60のデータメモリ部62上に形成されるデータインスタンスのメモリブロックリストに対して、新しく割り付けられたメモリブロックへの前方参照のリンクが形成される。
データメモリ部62上に新しく割り付けられたメモリブロックの領域は現時点(コードメモリの変更前の時点)では空き領域であり、不定値が格納されている場合がある。このため、コードメモリの変更後にアクセスが行われる新規に追加されたローカル変数のデータ格納領域を初期化しておく必要がある。したがって、データメモリアクセス部31はデータメモリ部62の新しく割り付けられたメモリブロック内に配置されるローカル変数のデータ格納領域に対して所定の初期値を書き込む(ステップS220)。
オンラインコード変更部32は、プログラムの実行を停止することなく、記憶部40に記憶している目的プログラムをプログラマブルコントローラ60のコードメモリ部61上に書き込む(ステップS230)。コードメモリ部61は、修正前のコードメモリのファイルと、修正後のコードメモリのファイルを記憶しておく。
ステップS210およびステップS220においてデータメモリ部62への書き込みアクセスを行っている領域は、コードメモリ部61においてコードメモリの変更前のプログラムが使用していない空き領域であるため、データメモリ部62への書き込みアクセスを行ってもコードメモリ部61のコードメモリを変更する前のプログラムの実行には影響しない。これにより、データメモリ部62上の余裕領域を効率よく使用して新たなメモリブロックの追加が可能となる。
このように、データメモリの空き領域がメモリブロック毎に分割されていないのでプログラムの変更時に新たに追加されるローカル変数を含むメモリブロックは、空き領域に続けて割付けることができる。また、空き領域に割付けた新規のメモリブロックを、空き領域に割り付ける前のメモリブロックに対応付け処理しているので、プログラマブルコントローラへの目的プログラムを変更する際、空き領域に割り付ける前のメモリブロックの既存変数を変化させることなくプログラマブルコントローラの目的プログラムを変更することができる。したがって、既存変数の値をプログラムの変更前後で変更する必要がないためプログラムの実行を長時間停止させず瞬時に目的プログラムを変更することが可能となる。
なお、データインスタンスのメモリブロック構造に対するメモリブロックの追加は、データメモリ部62の空き領域からメモリブロックを追加するための領域を確保できれば、メモリブロックの追加回数は何度でも行える。
なお、本実施の形態においては、プログラミング装置1が編集部10、変換部20、転送部30、記憶部40を備える構成としたが、編集部10、変換部20、転送部30、記憶部40がそれぞれ独立した構成としてもよい。
このように実施の形態によれば、プログラマブルコントローラ60への目的プログラムを変更する際、新たに追加されるローカル変数を含むメモリブロックは、空き領域に続けて割付けることができるとともに、空き領域に割り付けられた追加されるメモリブロックはデータメモリ部62に既に割り付けられているメモリブロックと対応付けられるので、データメモリ部62の使用効率を低下させることなく、プログラマブルコントローラ60におけるプログラムの実行を継続しながらプログラマブルコントローラ60への目的プログラムの変更を行うことが可能となる。
以上のように、本発明にかかるプログラミングシステムは、プログラマブルコントローラに対してプログラムの実行を継続しながらプログラムの変更を行うプログラミング装置とプログラマブルコントローラからなるプログラミングシステムに適している。
本発明のプログラミングシステムの構成を示す図である。 プログラミング装置のコンパイル処理手順を示すフローチャートである。 変更処理を行うプログラムの構成の一例を示す図である。 プログラムの実行手順の一例を示すシーケンス図である。 プログラム変更の一例を説明するための図である。 データメモリ構造の変更を説明するための図である。 データインスタンス割付情報の構成を示す図である。 ローカル変数定義情報の構成を示す図である。 データメモリ部上のデータインスタンスの変更の概念を説明するための図である。 コードインスタンスの展開の一例を示す図である。 プログラム変更の処理手順を示すフローチャートである。
符号の説明
1 プログラミング装置
10 編集部
20 変換部
21 データインスタンス割付部
22 コードインスタンス展開部
30 転送部
31 データメモリアクセス部
32 オンラインコード変更部
40 記憶部
51 入力装置
52 出力装置
60 プログラマブルコントローラ
61 コードメモリ部
62 データメモリ部
70 データインスタンス割付情報
80 ローカル変数定義情報

Claims (5)

  1. データ変数を含んだプログラム構成要素によるモジュール単位で記述されたソースプログラムから生成された目的プログラムを実行するプログラマブルコントローラと、前記目的プログラムを前記プログラマブルコントローラに送るプログラミング装置とからなるプログラミングシステムにおいて、
    前記プログラマブルコントローラは、
    前記プログラム構成要素の目的プログラムの実行によって処理されるデータを前記プログラム構成要素毎のデータ変数を含むブロック毎に続けて記憶する領域と、プログラムの変更時に新たに追加される追加データを前記プログラム構成要素毎のデータ変数を含むブロック毎に続けて記憶するための空き領域とからなる記憶部を有し、
    プログラミング装置は、
    前記プログラマブルコントローラへの目的プログラムを変更する際、前記追加データのデータ変数を抽出して、該追加データのデータ変数を含むブロックを前記空き領域に割り付けるデータ割付部と、
    前記空き領域に割付けた追加データのデータ変数を含むブロックを、前記記憶部内で記憶する前記追加データのデータ変数を含むブロックを前記空き領域に割り付ける前のデータ変数のブロックであって前記追加データのデータ変数を含むプログラム構成要素と同一のプログラム構成要素のブロックに対応付け処理し、該ブロックの先頭メモリアドレスを前記プログラマブルコントローラの記憶部に設定するデータアクセス設定部と、
    前記空き領域に最初に割り付けられた該プログラム構成要素毎のデータ変数を含むブロックの先頭メモリアドレスを引数にして前記プログラム構成要素の実行を呼び出す前記目的プログラムの生成を行うプログラム生成部と、
    を備え、
    プログラミング装置は前記データアクセス設定部が前記対応付け処理と前記ブロックの先頭メモリアドレスを前記プログラマブルコントローラの記憶部に設定した後、前記目的プログラムを前記プログラマブルコントローラに送ることを特徴とするプログラミングシステム。
  2. 前記データ変数を含むブロックは、前記データ変数を格納するデータ格納領域と前記ブロックの先頭領域で前記ブロック間の対応付けをするためのアドレス領域とからなり、
    前記データアクセス設定部は、前記目的プログラムの変更前の前記アドレス領域に前記追加データのデータ変数を含むブロックと対応付けするための対応付情報を設定することによって前記対応付け処理を行うことを特徴とする請求項1に記載のプログラミングシステム。
  3. プログラミング装置は、前記対応付情報を記憶する対応付情報管理部をさらに備えることを特徴とする請求項2に記載のプログラミングシステム。
  4. 前記対応付情報は、前記記憶部内における前記追加データのデータ変数を含むブロックのアドレス領域の先頭メモリアドレスであることを特徴とする請求項2または3に記載のプログラミングシステム。
  5. プログラミング装置は、
    前記データ変数を、前記データ変数を含むブロック毎に識別するためのインデックス情報および前記データ変数の各ブロック内での相対アドレスを記憶するデータ変数管理部と、
    前記対応付情報、前記インデックス情報および前記相対アドレスに基づいて前記目的プログラムの生成を行うプログラム生成部と、
    をさらに備えることを特徴とする請求項2〜4のいずれか1つに記載のプログラミングシステム。
JP2004114563A 2004-04-08 2004-04-08 プログラミングシステム Expired - Fee Related JP4319082B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004114563A JP4319082B2 (ja) 2004-04-08 2004-04-08 プログラミングシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004114563A JP4319082B2 (ja) 2004-04-08 2004-04-08 プログラミングシステム

Publications (2)

Publication Number Publication Date
JP2005301520A JP2005301520A (ja) 2005-10-27
JP4319082B2 true JP4319082B2 (ja) 2009-08-26

Family

ID=35332997

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004114563A Expired - Fee Related JP4319082B2 (ja) 2004-04-08 2004-04-08 プログラミングシステム

Country Status (1)

Country Link
JP (1) JP4319082B2 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7565654B2 (en) * 2006-01-10 2009-07-21 National Instruments Corporation Programmatic control of tasks in a programmable logic controller
US7568198B2 (en) * 2006-01-10 2009-07-28 National Instruments Corporation Control of tasks in a programmable logic controller
JP4760607B2 (ja) * 2006-08-10 2011-08-31 株式会社明電舎 プログラマブルコントローラ
JP4849033B2 (ja) * 2007-03-19 2011-12-28 富士電機株式会社 プログラマブルコントローラ
JP2009069905A (ja) * 2007-09-10 2009-04-02 Delta Electronics Inc プログラマーロジックコントローラ(plc)プログラムの編集方法
JP5233544B2 (ja) * 2008-09-18 2013-07-10 株式会社明電舎 Pouの実装方式
JP5790128B2 (ja) * 2011-04-28 2015-10-07 富士電機株式会社 プログラマブルコントローラ・システム、その支援装置
JP7322604B2 (ja) * 2019-09-04 2023-08-08 オムロン株式会社 プログラム開発装置、プロジェクト作成方法およびプログラム開発装置を実現するためのプログラム
JP2022135170A (ja) * 2021-03-04 2022-09-15 オムロン株式会社 開発支援装置、開発支援装置の制御方法、情報処理プログラム、および記録媒体
JP7130178B1 (ja) * 2022-02-10 2022-09-02 三菱電機株式会社 プログラマブルコントローラシステム、開発支援装置、メモリ割当方法およびプログラム

Also Published As

Publication number Publication date
JP2005301520A (ja) 2005-10-27

Similar Documents

Publication Publication Date Title
JP4836419B2 (ja) 産業オートメーション用のcilコード・プログラムのオンライン修正
JP4319082B2 (ja) プログラミングシステム
JP5790128B2 (ja) プログラマブルコントローラ・システム、その支援装置
JP5119902B2 (ja) 動的再構成支援プログラム、動的再構成支援方法、動的再構成回路、動的再構成支援装置および動的再構成システム
JP5757098B2 (ja) プログラム作成支援装置、プログラム作成支援方法
JP5849592B2 (ja) プログラマブルコントローラシステム、そのプログラミング装置、プログラマブルコントローラ、プログラム、デバッグ方法
JP6292096B2 (ja) プログラマブルコントローラシステム、その支援装置
CN110806891B (zh) 嵌入式设备软件版本的生成方法及装置
JP2008198143A (ja) プログラマブルコントローラ用プログラム作成支援装置およびプログラム作成支援方法
JP6115063B2 (ja) プログラマブルコントローラの周辺装置
JP4760607B2 (ja) プログラマブルコントローラ
JP4877257B2 (ja) プログラマブルコントローラ、プログラマブルコントローラ支援装置、及びプログラマブルコントローラシステム
WO2022269793A1 (ja) 制御装置、及び、アドレス管理方法
JP6452924B1 (ja) コンパイラおよびプログラミング支援装置
JP7318829B2 (ja) 生産システム、プログラム作成装置、生産方法、及びプログラム
JP5832368B2 (ja) エンジニアリング装置
KR20110077288A (ko) 피엘씨 소프트웨어 개발환경 제공 시스템
JP2004192604A (ja) 組込みソフトウェア開発装置及び組込みソフトウェア開発方法
JPH0133855B2 (ja)
JPH07334358A (ja) 手順編集装置
JP3838124B2 (ja) プログラムの実行方式及びプログラム開発支援装置
JPS6310239A (ja) 高級言語のパツチ生成方式
JPWO2016110983A1 (ja) システム設計支援ツール
JPH06324882A (ja) コンパイラ装置
KR100293932B1 (ko) 소프트웨어 코드인 이미지의 후처리 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061110

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090218

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090224

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090427

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090527

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120605

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130605

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees