以下に、本発明にかかるプログラム変更システムの実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
実施の形態
図1は、本発明の実施の形態にかかるプログラム変更システムの構成を示すブロック図である。プログラム変更システムは、実行中のSFC(Sequencial Function Chart)プログラムを変更するシステムであり、プログラミング装置100、プログラマブルコントローラ(PLC(Programmable Logic Controller))200からなる。
プログラミング装置100は、SFCプログラムの作成や変更(編集)を行うプログラマブルコントローラ200の周辺装置(プログラミングツール)であり、入出力部11、SFCプログラム作成部(プログラム変更部)12、SFCプログラム情報作成部(変更情報作成部)13、通信I/F部14、記憶部15からなる。
SFC(Sequencial Function Chart)プログラムは、プログラマブルコントローラ200で実行されるプログラムの記述言語であり、プログラマブルコントローラ200が制御する装置の一連の動作における各動作単位を1つの「ステップ」(動作処理要素)として表す。SFCプログラムは、各ステップを「移行条件」(動作処理要素)によって連結することにより、各動作の実行順序をフロー形式で記述する。SFCプログラムでは複数のブロック(動作処理ブロック)を構成することができ、各ブロックはブロックの開始ステップ(イニシャルステップ)から始まり、各種動作パターンをもったステップ及び移行条件で構成されている。そして、各ステップおよび移行条件は、リスト記述やラダー回路によって記述される。
入出力部11は、SFCプログラムの作成や変更をする際の指示情報を入力するとともに、作成や変更されたSFCプログラムを出力する。入出力部11は、例えば液晶パネル、マウス、キーボード等を備えて構成されている。SFCプログラムの作成や変更をする際の指示情報はマウスやキーボードから入力し、作成や変更されたSFCプログラムや注意メッセージは液晶パネル等に表示することによって出力する。
SFCプログラム作成部12は、入出力部11からの指示情報に基づいてSFCプログラム等の作成や変更を行う。SFCプログラム作成部12は、SFCプログラムの変更を行う際、変更内容に応じて所定の注意メッセージを作成する。
SFCプログラム情報作成部13は、SFCプログラム内の変更前後のブロックやステップに関する情報(後述するプログラム変更情報41)を作成する。SFCプログラム情報作成部13は、プログラミング装置100の使用者によってSFCプログラムを変更する際、記憶部15を使用してプログラム変更情報を作成する。
通信I/F部(送信部)14は、プログラマブルコントローラ200と接続されてプログラマブルコントローラ200とSFCプログラム等の情報の送受信(通信)を行うインタフェースである。記憶部15は、SFCプログラムの作成や変更を行う際に使用するメモリ(メモリエリア)であり、SFCプログラム等を記憶する。
プログラマブルコントローラ200は、SFCプログラムを実行するコントローラであり、通信I/F部(受信部)21、SFCプログラム制御実行部(プログラム変更部、プログラム実行部)22、シーケンスプログラム制御実行部23、プログラム記憶部24、ワークメモリ部(実行情報格納部)25からなる。通信I/F部21は、プログラミング装置100の通信I/F部14と接続されてSFCプログラム等の情報の送受信を行う。
SFCプログラム制御実行部22は、SFCプログラムの制御及び実行を行う。SFCプログラム制御実行部22は、プログラム記憶部24に格納されているSFCプログラムを読み出してSFCプログラムの若番ブロックから順に実行していき、ブロックのイニシャルステップからエンドステップまでを移行条件の状態に従い順に実行する。SFCプログラム制御実行部22は、例えば実行中のSFCプログラムが変更されるとワークメモリ部25に格納されているプログラム変更情報に基づいて削除されたステップの実行を終了し、次のステップを実行する。また、SFCプログラム制御実行部22は、SFCプログラムの変更が行われた際に、SFCプログラムの変更に関する情報を解析し、変更前のSFCプログラムの実行から変更後のSFCプログラムの実行に切り替える。
シーケンスプログラム制御実行部23は、SFCプログラム内に記述されたステップや移行条件のシーケンスプログラムの制御や実行を行う。プログラム記憶部24は、プログラミング装置100から送られるSFCプログラムを格納する。ワークメモリ部25は、SFCプログラムを実行する際に使用するワークエリアである。ワークメモリ部25は、プログラマブルコントローラ200で実行中のSFCプログラムのプログラム変更情報41やSFCプログラム制御実行部22が実行中のSFCに関する情報(後述する実行中情報61)を記憶する。
つぎに、図1に示した各構成要素の動作を詳細に説明する。図2は、SFCプログラムの変更の処理手順を示すフローチャートである。プログラム変更システムの使用者(ユーザ)は、入出力部11からSFCプログラムを作成するための指示情報を入力するとSFCプログラム作成部12は記憶部15のメモリエリアを使用してSFCプログラムを作成する。SFCプログラム作成部12によって作成されたSFCプログラム(変更前のSFCプログラム)は、通信I/F部14と通信I/F部21を介してプログラマブルコントローラ200のプログラム記憶部24に書き込まれる。
図3は、変更前のSFCプログラムの一例を示す図である。図3のプログラムはブロック0の処理手順を示しており、ブロック0は、開始ステップである「ブロック0のイニシャルステップST0」、次のステップに移行するための移行条件「ブロック0の移行条件0」、「ブロック0のステップST1」、次のステップに移行するための移行条件「ブロック0の移行条件1」、「ブロック0のステップST2」、終了ステップである「ブロック0のエンドステップ」からなる。
ここでは、「ブロック0の移行条件0」の移行条件が成立しており、「ブロック0の移行条件1」の移行条件が成立していない場合を示している。このため、「ブロック0のステップST1」が現在実行中のステップとなる。プログラマブルコントローラ200が起動していなければ(ステップS100、停止)、このままSFCプログラムの実行を行わず処理が終了される。
ユーザがプログラマブルコントローラ200の運転モードを「運転(実行)」にするよう図示しない入力部から指示情報を入力すると、プログラマブルコントローラ200は起動する(ステップS100、運転)。プログラマブルコントローラ200が起動すると、SFCプログラム制御実行部22は、SFCプログラムの最若番ブロックの実行準備(初期実行準備)としてワークメモリ部25の更新や処理を行うステップ番号の算出等を行う(ステップS110)。
SFCプログラム制御実行部22はプログラム記憶部24に格納されている変更前のSFCプログラムを実行し、シーケンスプログラム制御実行部23はSFCプログラムのステップおよび移行条件内のリスト記述やラダー回路を実行する(ステップS120)。このとき、SFCプログラム制御実行部22、シーケンスプログラム制御実行部23はSFCプログラムの若番ブロックから順に実行していき、イニシャルステップからエンドステップまでを移行条件の状態に従い順に実行する。ワークメモリ部25は、SFCプログラム制御実行部22が実行するSFCプログラムに関する情報を実行中情報61として格納しておく。
図4は、実行中情報の構成を示す図である。実行中情報61は、ワークメモリ部25の所定のエリアに格納されている。実行中情報61には、プログラマブルコントローラ200が実行する(実行中の)SFCプログラムに関する情報として「ブロック情報」、「ステップ情報」、「ステップ総数」が含まれる。
「ブロック情報」のエリアには、プログラマブルコントローラ200が実行するステップが存在するブロックナンバが格納される。「ステップ情報」のエリアには、プログラマブルコントローラ200が実行するステップのステップナンバが格納される。「ステップ総数」のエリアには、プログラマブルコントローラ200が実行するステップの総数が格納される。「ステップ総数」の値が1つ増加するごとに「ブロック情報」のエリアと「ステップ情報」のエリアを1つずつ増加させる。例えば、SFCプログラム制御実行部22が図3に示す変更前のSFCプログラムを実行する場合、1スキャン目(1サイクル処理目)に「ブロック0のイニシャルステップST0」を実行する。このとき、ワークメモリ部25には、実行中情報61として「ブロック情報」のエリアにブロックナンバとして「ブロック0」が格納され、「ステップ情報」のエリアにステップナンバとして「イニシャルステップST0」が格納され、「ステップ総数」のエリアにステップの総数「1」が格納されている。
SFCプログラム制御実行部22が「ブロック0のイニシャルステップST0」を実行した後、SFCプログラム制御実行部22は「ブロック0の移行条件0」の実行条件が成立しているか否かを判断する。ここでは、「ブロック0の移行条件0」の実行条件が成立しているため、SFCプログラム制御実行部22は、「ブロック0のステップST1」を実行する準備としてワークメモリ部25の更新や次に実行処理を行うステップ番号の算出等を行う。ワークメモリ部25には、この次に実行する「ブロック0のステップST1」に関する情報が格納される。
実行するステップの総数は変化しないため、実行中情報61の「ステップ総数」と「ブロック情報」の変更は行わず、「ステップ情報」のエリアに次に実行する「ブロック0のステップST1」を格納する。
SFCプログラム制御実行部22が「ブロック0のステップST1」を実行した後、SFCプログラム制御実行部22は「ブロック0の移行条件1」の実行条件が成立しているか否かを判断する。ここでは、「ブロック0の移行条件1」の実行条件が成立していないため、SFCプログラム制御実行部22は、「ブロック0のステップST2」を実行せず「ブロック0」の処理を終了する。
現在実行中のSFCプログラムとして他のブロックが存在する場合(「ブロック0」が最終ブロックでない場合)(ステップS130、未終了)、他のブロックの実行を行う(ステップS120)。ここでは、現在実行中のSFCプログラムは「ブロック0」のみであるため、SFCプログラムの1サイクル処理を終了する(ステップS130、終了)。
プログラマブルコントローラ200がユーザによって停止させられた場合のように、プログラマブルコントローラ200が起動していなければ(ステップS140、停止)、このままSFCプログラムの実行を行わず処理が終了される。ここでは、プログラマブルコントローラ200は起動しているので(ステップS140、運転)、プログラム記憶部24は、プログラム記憶部24へSFCプログラムの新たな書込みが行われているかを確認する(ステップS150)。
プログラム記憶部24へSFCプログラムの新たな書込みが行われていない場合(ステップS150、No)、ワークメモリ部25の実行中情報61に格納している情報から2スキャン目に実行する「ブロック0のステップST1」の実行準備を行う(ステップS160)。そして、SFCプログラム制御実行部22が「ブロック0のステップST1」を実行した後、SFCプログラム制御実行部22は「ブロック0の移行条件1」の実行条件が成立しているか否かを判断する。「ブロック0の移行条件1」の実行条件が成立していないため、SFCプログラム制御実行部22は、「ブロック0のステップST2」を実行することなく「ブロック0」の処理を終了し、SFCプログラムの1サイクル処理を終了する(ステップS120、S130)。
SFCプログラム制御実行部22は、プログラマブルコントローラ200の運転モードの変更やプログラム記憶部24へSFCプログラムの書込みが行われるまで、「ブロック0のステップST1」の実行を繰り返す(ステップS120〜S160)。
ここで、SFCプログラムの変更について説明する。変更後のSFCプログラムは、プログラミング装置100によって作成される。SFCプログラムを変更する際、ユーザは入出力部11からプログラマブルコントローラ200で現在実行中(変更前)のSFCプログラムを取得するよう指示情報を入力する。
通信I/F部14は、プログラマブルコントローラ200から現在実行中のSFCプログラムを読み出し、このSFCプログラムを記憶部15に記憶させる。ユーザが、入出力部11からSFCプログラムを変更(ステップや移行条件の追加や削除)するための指示情報を入力するとSFCプログラム作成部12は記憶部15のメモリエリアを使用してSFCプログラムを作成(変更)する。
図5は、変更後のSFCプログラムの一例を示す図である。図5に示すSFCプログラムは、図3に示したSFCプログラムを変更したものである。ここでは、図3に示したSFCプログラムの「ブロック0のステップST1」と「ブロック0の移行条件1」を削除した場合(後述する「変更」)を示している。
SFCプログラム作成部12によって「ブロック0のステップST1」と「ブロック0の移行条件1」を削除する際、入出力部11は注意情報31を表示してユーザに注意を促す。
図6は、注意情報の一例を示す図である。注意情報31は、SFCプログラムの変更処理を行う際に入出力部11に表示される情報(メッセージ)であり、SFCプログラム情報作成部13で作成される。注意情報31としては、プログラマブルコントローラ200で実行中のステップが削除されるとこのステップの実行を終了し、次のステップが実行になる旨を表示する。ここでは、プログラマブルコントローラ200で現在実行中ステップが「ブロック0のステップST1」である場合を考慮し、例えば「ステップST1、移行条件1を削除します。実行中のステップが削除された場合、該当ステップの実行を終了し、次のステップが実行となります。」といったメッセージを表示する。
このようにしてSFCプログラム作成部12で作成された変更後のSFCプログラムは「ブロック0のイニシャルステップST0」、次のステップに移行するための移行条件「ブロック0の移行条件0」、「ブロック0のステップST2」、次のステップに移行するための移行条件「ブロック0の移行条件2」、「ブロック0のエンドステップ」からなる。ここでは、「ブロック0の移行条件0」は次のステップに移行するための条件が成立しており、「ブロック0の移行条件2」は次のステップに移行するための条件が成立していないこととする。
また、SFCプログラム情報作成部13はSFCプログラムの変更に関する情報としてプログラム変更情報41を作成する。プログラム変更情報41は、プログラマブルコントローラ200に送られる情報であり、プログラマブルコントローラ200はプログラム変更情報41に基づいて実行するSFCプログラムの変更を行う。例えば、「ブロック0のステップST1」を削除した場合、「ブロック0のステップST1」の次のステップが「ブロック0のステップST2」であるため、SFCプログラムの変更後はSFCプログラム制御実行部22に「ブロック0のステップST2」の処理を実行させる。
図7は、プログラム変更情報の一例を示す図である。プログラム変更情報41は、SFCプログラムの変更に関する情報として「変更前ブロック情報」、「変更前ステップ情報」、「変更後ブロック情報」、「変更後ステップ情報」、「変更情報登録数」、「変更情報」を含んでいる。「変更前ブロック情報」と「変更前ステップ情報」がSFCプログラムの変更前情報であり、「変更後ブロック情報」と「変更後ステップ情報」がSFCプログラムの変更後情報である。
変更前情報にはSFCプログラムの変更前のブロックとステップに関する情報が格納され、変更後情報にはSFCプログラムの変更後のブロックとステップに関する情報が格納される。
「変更前ブロック情報」のエリアには、SFCプログラムの変更前のブロックナンバが格納される。ここでは、SFCプログラムのブロック0を変更しているので「変更前ブロック情報」のエリアにはブロックナンバとして「ブロック0」が格納される。
「変更前ステップ情報」のエリアには、SFCプログラムの変更前のステップナンバが格納される。ここでは、SFCプログラムのブロック0のステップST1を変更しているので、「変更前ステップ情報」のエリアにはステップナンバとして「ステップST1」が格納される。
「変更後ブロック情報」のエリアには、SFCプログラムの変更後のブロックナンバが格納される。ここでは、SFCプログラムのブロック0を変更したので、SFCプログラム作成部12によって「変更後ブロック情報」のエリアにはブロックナンバとして「ブロック0」が格納される。
「変更後ステップ情報」のエリアには、SFCプログラムの変更後のステップナンバが格納される。ここでは、SFCプログラムのブロック0のステップST2がSFCプログラムの変更前のブロック0のステップST1に相当するので、「変更後ステップ情報」のエリアにはステップナンバとして「ステップST2」が格納される。
「変更情報」のエリアには、実行中情報61の変更の態様を識別するための情報として「変更」、「追加」、「削除」のいずれかの情報が格納される。「変更」は、SFCプログラムにおいて同一ブロック内におけるステップや移行条件が変更されて実行中情報61の内容を新たな内容に変更させることを示す。「追加」は、SFCプログラムにおいて同一ブロック内における新たなステップが追加されて実行中情報61の内容に新たな内容を追加させることを示す。「削除」は、SFCプログラムにおいてブロックが削除されて実行中情報61の内容から削除されたブロックの情報を削除させることを示す。
ここでは、ブロック0においてステップST1と移行条件0を削除する変更であり、変更前のSFCプログラムにおいてブロック0のステップST1が実行中であったならば、実行中情報61の内容を新たな内容に変更させる必要があるため、SFCプログラム制御実行部22は「変更情報」のエリアに実行中情報61の変更の態様として「変更」を格納させる。
「変更情報登録数」のエリアには、1つの「変更前ブロック情報」、1つの「変更前ステップ情報」、1つの「変更後ブロック情報」、1つの「変更後ステップ情報」、1つの「変更情報登録数」からなる一組の情報を1つの情報とした場合の情報数が格納される。ここでは、「ブロック0のステップST1」が削除され、「ブロック0のステップST1」が実行中であった場合に次のステップ「ブロック0のステップST2」を実行中とさせる変更が1つであるため、SFCプログラム作成部12は「変更情報登録数」のエリアに「1」を格納させる。
ユーザが、変更後のSFCプログラムとプログラム変更情報41をプログラマブルコントローラ200のワークメモリ部25に送信するよう入出力部11に指示情報を入力すると、通信I/F部14から通信I/F部21へ変更後のSFCプログラムとプログラム変更情報41が送られる。
プログラマブルコントローラ200に送られた変更後のSFCプログラムは、プログラム記憶部24で記憶する。また、プログラマブルコントローラ200に送られたプログラム変更情報41は、ワークメモリ部25に書き込まれる。
SFCプログラム制御実行部22は、「ブロック0のステップST1」の実行を繰り返しており(ステップS120〜S160)、SFCプログラム制御実行部22による1スキャンの実行が終了する度に、プログラミング装置100からプログラマブルコントローラ200へ変更後のSFCプログラムの書込みが行われたか否かを確認する(ステップS150)。
プログラム記憶部24へSFCプログラムの書込みがあったと判断された場合(ステップS150、Yes)、SFCプログラム制御実行部22がプログラム記憶部24から読み出して実行するSFCプログラムを変更後のSFCプログラムに変更(置換)する(ステップS170)。
SFCプログラム制御実行部22は、ワークメモリ部25に格納されたプログラム変更情報41の「変更情報登録数」を読み出す(ステップS180)。そして、SFCプログラム制御実行部22は、「変更情報登録数」に格納されている値の回数だけ、実行中情報61に登録されている内容を置き換える処理が終了したか否かを確認する(ステップS190)。ここでは、「変更情報登録数」は「1」であり、まだ実行中情報61の変更処理が1つも終了していないため、SFCプログラム制御実行部22によって、「変更情報登録数」に格納されている値だけ、実行中情報61の変更処理が終了していないと判断される(ステップS190、No)。
SFCプログラム制御実行部22は、プログラム変更情報41の変更前情報である「変更前ブロック情報」と「変更前ステップ情報」を読み出す。SFCプログラム制御実行部22は、読み出した「変更前ブロック情報」と「変更前ステップ情報」に対応するブロックのステップがワークメモリ部25の実行中情報61の「ブロック情報」と「ステップ情報」に存在するか否かを判断する(ステップS200)。ここでは、プログラム変更情報41の「変更前ブロック情報」は「ブロック0」であり、「変更前ステップ情報」は「ST1」である。また、実行中情報61の「ブロック情報」は「ブロック0」であり、「ステップ情報」は「ST1」である。したがって、SFCプログラム制御実行部22は、読み出したプログラム変更情報41のブロックのステップが実行中情報61に存在すると判断する(ステップS210、Yes)。
プログラム制御実行部22は、プログラム変更情報41の「変更情報」を読み出し、実行中情報61の変更の態様を判断する(ステップS220)。ここでは、「変更情報」が「変更」であるため、プログラム制御実行部22は実行中情報61の変更の態様が「変更」であると判断する。
プログラム制御実行部22が実行中情報61の変更の態様が「変更」であると判断すると、ワークメモリ部25は、実行中情報61に登録されている内容をプログラム変更情報41の変更後情報である「変更後ブロック情報」と「変更後ステップ情報」の内容に置き換える(ステップS230)。ここでは、実行中情報61に登録されている「ブロック0のステップST1」が「ブロック0のステップST2」に変更される。
プログラム制御実行部22は、プログラム変更情報41の「変更情報登録数」の値から−1を行うことによって(ステップS240)、「変更情報登録数」を「1」から「0」にする。プログラム制御実行部22は、この「変更情報登録数」を読み出す(ステップS180)。ここでは、「変更情報登録数」は「0」となっているため、実行中情報61の変更処理が全て終了しており、SFCプログラム制御実行部22によって「変更情報登録数」に格納されている値だけ、実行中情報61の変更処理が終了したと判断される(ステップS190、Yes)。
そして、SFCプログラム制御実行部22は、ワークメモリ部25の実行中情報61に格納している情報から「ブロック0のステップST2」の実行準備を行う(ステップS160)。この後、SFCプログラム制御実行部22は変更後のSFCプログラムを実行する。変更後のSFCプログラムにおいて「ブロック0の移行条件2」の移行条件が成立していないため「ブロック0のステップST2」の処理が繰り返される(ステップS120〜S160)。
つぎに、SFCプログラムの変更がステップの追加である場合について説明する。SFCプログラム制御実行部22は、プログラマブルコントローラ200の運転モードの変更やプログラム記憶部24へSFCプログラムの書込みが行われるまで、「ブロック0のステップST1」の実行を繰り返している(ステップS120〜S160)。
SFCプログラムを変更する際、ユーザは入出力部11からプログラマブルコントローラ200で現在実行中(変更前)のSFCプログラムを取得するよう指示情報を入力する。通信I/F部14は、プログラマブルコントローラ200から現在実行中のSFCプログラムを読み出し、このSFCプログラムを記憶部15に記憶させる。ユーザが、入出力部11からSFCプログラムを変更するための指示情報を入力するとSFCプログラム作成部12は記憶部15のメモリエリアを使用してSFCプログラムを作成する。
図8は、変更後のSFCプログラムの一例を示す図である。図8に示すSFCプログラムは、図3に示したSFCプログラムを変更したものである。ここでは、図3に示したSFCプログラムの「ブロック0の移行条件0」を複数のステップを同時に実行させることができる「ブロック0の並列分岐移行条件0」に変更し、「ブロック0のステップST1」と同時に実行するステップとして「ブロック0のステップST10」および「ブロック0のステップST11」を追加し、「ブロック0の移行条件1」を複数の同時に実行しているステップをまとめる「ブロックの並列結合移行条件1」に変更した場合を示している。ここでは、「ブロック0の並列移行条件1」は次のステップに移行するための条件が成立していないこととする。SFCプログラム作成部12によってステップを追加する際、入出力部11は注意情報32を表示してユーザに注意を促す。
図9は、注意情報の一例を示す図である。注意情報32としては、プログラマブルコントローラ200で実行中のステップに接続する移行条件が変更されるとこの移行条件で接続しているこれら追加されたステップも実行中となる旨を表示する。ここでは、プログラマブルコントローラ200で現在実行中のステップが「ブロック0のステップST1」であれば、このステップを接続している「ブロック0の移行条件0」を「ブロック0の並列分岐移行条件0」に変更されて「ブロック0のステップST10」および「ブロック0のステップST11」が追加されるので、例えば「移行条件0を変更します。並列分岐先のステップが実行中の場合、追加されたステップも実行中となります。」といったメッセージを表示する。
このようにしてSFCプログラム作成部12によって作成された変更後のSFCプログラムは、「ブロック0のイニシャルステップST0」、「ブロック0の並列分岐移行条件0」、「ブロック0のステップST1」、「ブロック0のステップST10」、「ブロック0のステップST11」、「ブロック0の並列結合移行条件1」、「ブロック0のステップST2」、「ブロック0の移行条件2」、「ブロック0のエンドステップ」からなる。また、SFCプログラム情報作成部13はSFCプログラムの変更に関する情報としてプログラム変更情報42を作成する。
図10は、プログラム変更情報の一例を示す図である。プログラム変更情報42は、SFCプログラムの変更に関する情報として「変更前ブロック情報」、「変更前ステップ情報」、「変更後ブロック情報」、「変更後ステップ情報」、「変更情報登録数」、「変更情報」を含んでいる。ここでは、2つのステップが追加されるため、「変更前ブロック情報」、「変更前ステップ情報」、「変更後ブロック情報」、「変更後ステップ情報」、「変更情報」、はプログラム変更情報42に2つずつ含まれている。
SFCプログラム作成部12によって「変更前ブロック情報」の2つのエリアにはブロックナンバとして「ブロック0」がそれぞれ格納される。また、「変更前ステップ情報」の2つのエリアにはステップナンバとして「ステップST1」がそれぞれ格納される。また、「変更後ブロック情報」の2つのエリアにはブロックナンバとして「ブロック0」が格納される。また、「変更後ステップ情報」のエリアにはステップナンバとして「ステップST10」と「ステップST11」がそれぞれ格納される。また、ブロック0においてステップST10とステップST11を追加する変更であるため、SFCプログラム制御実行部22は「変更情報」のエリアに実行中情報61の変更の態様として「追加」をそれぞれ格納させる。また、「ブロック0のステップST1」が実行中であった場合に「ブロック0のステップST10」と「ブロック0のステップST11」を実行とさせる変更が2つがあるため、SFCプログラム作成部12は「変更情報登録数」のエリアに「2」を格納させる。
ユーザが、変更後のSFCプログラムとプログラム変更情報42をプログラマブルコントローラ200のワークメモリ部25に送信するよう入出力部11に指示情報を入力すると、通信I/F部14から通信I/F部21へ変更後のSFCプログラムとプログラム変更情報42が送られる。
プログラマブルコントローラ200に送られた変更後のSFCプログラムは、プログラム記憶部24で記憶する。また、プログラマブルコントローラ200に送られたプログラム変更情報42は、ワークメモリ部25に書き込まれる。
この後、ステップS150、S170〜S190の処理が行われる。すなわち、SFCプログラム制御実行部22による1スキャンの実行が終了する度に、プログラミング装置100からプログラマブルコントローラ200へ変更後のSFCプログラムの書込みが行われたか否かを確認し(ステップS150)、プログラム記憶部24へSFCプログラムの書込みがあったと判断された場合、SFCプログラム制御実行部22がプログラム記憶部24から読み出して実行するSFCプログラムを変更後のSFCプログラムに変更(置換)する(ステップS170)。
SFCプログラム制御実行部22は、ワークメモリ部25に格納されたプログラム変更情報42の「変更情報登録数」を読み出す(ステップS180)。そして、SFCプログラム制御実行部22は、「変更情報登録数」に格納されている値の回数だけ、実行中情報61に登録されている内容を置き換える処理が終了したか否かを確認する(ステップS190)。
SFCプログラム制御実行部22は、プログラム変更情報42から1つ目の「変更前ブロック情報」と「変更前ステップ情報」を読み出す。SFCプログラム制御実行部22は、読み出した1つ目の「変更前ブロック情報」と「変更前ステップ情報」に対応するブロックのステップがワークメモリ部25の実行中情報61の「ブロック情報」と「ステップ情報」に存在するか否かを判断する(ステップS200)。
ここでは、プログラム変更情報42の「変更前ブロック情報」は「ブロック0」であり、「変更前ステップ情報」は「ST1」である。また、実行中情報61の「ブロック情報」は「ブロック0」であり、「ステップ情報」は「ST1」である。したがって、SFCプログラム制御実行部22は、読み出したプログラム変更情報42のブロックとステップが実行中情報61に存在すると判断する(ステップS210、Yes)。
プログラム制御実行部22は、プログラム変更情報42の「変更情報」を読み出し、実行中情報61の変更の態様を判断する(ステップS220)。ここでは、「変更情報」が「追加」であるため、プログラム制御実行部22は実行中情報61の変更の態様が「追加」であると判断する。
プログラム制御実行部22が実行中情報61の変更の態様が「追加」であると判断すると、ワークメモリ部25は、実行中情報61に登録されている内容にプログラム変更情報42の「変更後ブロック情報」と「変更後ステップ情報」の内容を追加登録する(ステップS250)。ここでは、実行中情報61に登録されている「ブロック0のステップST1」にプログラム変更情報42の1つ目の情報である「ブロック0のステップST10」を追加登録する。
プログラム制御実行部22は、実行中情報61の「ステップ総数」の値を+1することによって(ステップS240)、実行中情報61の「ステップ総数」の値を「2」に変更する。
プログラム制御実行部22は、プログラム変更情報42の「変更情報登録数」の値から−1を行うことによって(ステップS240)、「変更情報登録数」を「2」から「1」に変更する。プログラム制御実行部22は、この「変更情報登録数」を読み出す(ステップS180)。「変更情報登録数」は「1」であるため、ステップ190〜S220、S250、S240の処理を行う。すなわち、SFCプログラム制御実行部22は、「変更情報登録数」に格納されている値の回数だけ、実行中情報61に登録されている内容を置き換える処理が終了したか否かを確認する(ステップS190)。
SFCプログラム制御実行部22は、プログラム変更情報42から2つ目の「変更前ブロック情報」と「変更前ステップ情報」を読み出す。SFCプログラム制御実行部22は、読み出した2つ目の「変更前ブロック情報」と「変更前ステップ情報」に対応するブロックのステップがワークメモリ部25の実行中情報61の「ブロック情報」と「ステップ情報」に存在するか否かを判断する(ステップS200)。
ここでは、プログラム変更情報42の「変更前ブロック情報」は「ブロック0」であり、「変更前ステップ情報」は「ST1」である。また、実行中情報61の「ブロック情報」は「ブロック0」であり、「ステップ情報」は「ST1」である。したがって、SFCプログラム制御実行部22は、読み出したプログラム変更情報42のブロックのステップが実行中情報61に存在すると判断する(ステップS210、Yes)。
プログラム制御実行部22は、プログラム変更情報42の「変更情報」を読み出し、実行中情報61の変更の態様を判断する(ステップS220)。プログラム制御実行部22が実行中情報61の変更の態様が「追加」であると判断すると、ワークメモリ部25は、実行中情報61に登録されている内容にプログラム変更情報42の「変更後ブロック情報」と「変更後ステップ情報」の内容を追加登録する(ステップS250)。ここでは、実行中情報61に登録されている「ブロック0のステップST1」と「ブロック0のステップST10」にプログラム変更情報42の2つ目の情報である「ブロック0のステップST11」を追加登録する。
プログラム制御実行部22は、実行中情報61の「ステップ総数」の値を+1することによって(ステップS240)、実行中情報61の「ステップ総数」の値を「3」に変更する。
プログラム制御実行部22は、プログラム変更情報42の「変更情報登録数」の値から−1を行うことによって(ステップS240)、「変更情報登録数」を「1」から「0」に変更する。プログラム制御実行部22は、この「変更情報登録数」を読み出す(ステップS180)。「変更情報登録数」は「0」となっているため、実行中情報61の変更処理が全て終了しており、SFCプログラム制御実行部22によって「変更情報登録数」に格納されている値だけ、実行中情報61の変更処理が終了したと判断される(ステップS190、Yes)。そして、SFCプログラム制御実行部22は、ワークメモリ部25の実行中情報61に格納している情報から「ブロック0のステップST1」、「ブロック0のステップST10」、「ブロック0のステップST11」の実行準備を行う(ステップS160)。この後、SFCプログラム制御実行部22は変更後のSFCプログラムを実行する。変更後のSFCプログラムにおいて「ブロック0の移行条件1」の移行条件が成立していないため「ブロック0のステップST1」、「ブロック0のステップST10」、「ブロック0のステップST11」の処理が繰り返される(ステップS120〜S160)。
つぎに、SFCプログラムの変更がブロックの追加である場合について説明する。SFCプログラム制御実行部22は、プログラマブルコントローラ200の運転モードの変更やプログラム記憶部24へSFCプログラムの書込みが行われるまで、「ブロック0のステップST1」の実行を繰り返している(ステップS120〜S160)。
SFCプログラムを変更する際、ユーザは入出力部11からプログラマブルコントローラ200で現在実行中(変更前)のSFCプログラムを取得するよう指示情報を入力する。通信I/F部14は、プログラマブルコントローラ200から現在実行中のSFCプログラムを読み出し、このSFCプログラムを記憶部15に記憶させる。ユーザが、入出力部11からSFCプログラムを変更するための指示情報を入力するとSFCプログラム作成部12は記憶部15のメモリエリアを使用してSFCプログラムを作成する。
図11は、変更後のSFCプログラムの一例を示す図である。図11に示すSFCプログラムは、図3に示したSFCプログラムに追加したブロックを示したものである。ここでは、図3に示したSFCプログラムに「ブロック1のイニシャルステップST0」、「ブロック1の移行条件0」、「ブロック1のステップST1」、「ブロック1の移行条件1」、「ブロック1のエンドステップ」を追加した場合を示している。SFCプログラム作成部12によってブロックを追加する際、入出力部11は注意情報33を表示してユーザに注意を促す。
図12は、注意情報の一例を示す図である。注意情報33としては、プログラマブルコントローラ200で実行中のSFCプログラムに新たなブロックが追加されると、この追加されたブロックは起動ステップを追加しないと起動しない旨を表示する。ここでは、プログラマブルコントローラ200で実行中のブロック0からなるSFCプログラムにブロック1が追加されるので、例えば「ブロック1を追加します。ブロック1を追加しますがブロック1の起動ステップを追加しないとブロック1は起動しません」といったメッセージを表示する。
このようにしてSFCプログラム作成部12によって作成された変更後のSFCプログラムは、ブロック0と「ブロック1のイニシャルステップST0」、「ブロック1の移行条件0」、「ブロック1のステップST1」、「ブロック1の移行条件1」、「ブロック1のエンドステップ」からなるブロック1で構成されている。ここでは、「ブロック1の移行条件0」は次のステップに移行するための条件が成立しており、「ブロック1の移行条件1」は次のステップに移行するための条件が成立していないこととする。また、SFCプログラム情報作成部13はSFCプログラムの変更に関する情報としてプログラム変更情報43を作成する。
図13は、プログラム変更情報の一例を示す図である。プログラム変更情報43は、SFCプログラムの変更に関する情報として「変更情報登録数」を含んでいる。ここでは、実行中情報61の内容を変更しないため、SFCプログラム作成部12は「変更情報登録数」のエリアに「0」を格納させる。
ユーザが、変更後のSFCプログラムとプログラム変更情報43をプログラマブルコントローラ200のワークメモリ部25に送信するよう入出力部11に指示情報を入力すると、通信I/F部14から通信I/F部21へ変更後のSFCプログラムとプログラム変更情報43が送られる。
プログラマブルコントローラ200に送られた変更後のSFCプログラムは、プログラム記憶部24で記憶する。また、プログラマブルコントローラ200に送られたプログラム変更情報43は、ワークメモリ部25に書き込まれる。
この後、ステップS150、S170〜S190の処理が行われる。すなわち、SFCプログラム制御実行部22による1スキャンの実行が終了する度に、プログラミング装置100からプログラマブルコントローラ200へ変更後のSFCプログラムの書込みが行われたか否かを確認し(ステップS150)、プログラム記憶部24へSFCプログラムの書込みがあったと判断された場合、SFCプログラム制御実行部22がプログラム記憶部24から読み出して実行するSFCプログラムを変更後のSFCプログラムに変更(置換)する(ステップS170)。
SFCプログラム制御実行部22は、ワークメモリ部25に格納されたプログラム変更情報43の「変更情報登録数」を読み出す(ステップS180)。ここでは、「変更情報登録数」が「0」であるため、SFCプログラム制御実行部22は、実行中情報61に登録されている内容を置き換える処理が終了したと判断する(ステップS190、Yes)。
実行中情報61に格納されている情報に変更がないためSFCプログラム制御実行部22は、実行中情報61に格納されている情報に基づいて次のスキャンで実行する「ブロック0のステップST1」の実行準備を行う(ステップS160)。この後、SFCプログラム制御実行部22は変更後のSFCプログラムを実行する。SFCプログラム制御実行部22は、「ブロック1」の実行を行わず、変更後のSFCプログラムにおいて「ブロック0の移行条件1」の移行条件が成立していないため「ブロック0のステップST1」の処理を繰り返す(ステップS120〜S160)。
なお、追加した「ブロック1」を起動させたい場合、ユーザは、「ブロック1」の追加を行うと同時に現在実行中のSFCプログラムの「ブロック0のステップST1」を、ブロック1を起動させることができるステップである「ブロック0のブロック起動ステップST1」に変更する必要がある。この場合、SFCプログラム作成部12は、プログラム変更情報43に、変更前情報として「ブロック0のステップST1」、変更後情報として「ブロック1のステップST1」、「変更情報」として「追加」を格納させる。そして、SFCプログラム制御実行部22が、ステップS250で、実行中情報61に「ブロック1のイニシャルステップST0」を登録し、ステップS160で、「ブロック0のステップST1」、「ブロック1のイニシャルステップST0」の実行準備を行うことによって、次のスキャンで「ブロック1」の実行を行うことが可能となる。
つぎに、SFCプログラムの変更がブロックの削除である場合について説明する。SFCプログラム制御実行部22は、プログラマブルコントローラ200の運転モードの変更やプログラム記憶部24へSFCプログラムの書込みが行われるまで、図3に示す「ブロック0」と図11に示す「ブロック1」を実行している。
実行中情報61には、「ブロック0のステップST1」と「ブロック1のステップST1」が登録されている。SFCプログラム制御実行部22は、「ブロック0のステップST1」を実行するとともに「ブロック0の移行条件1」の実行条件が成立しているか否かのチェックを行っている。現在「ブロック0の移行条件1」の実行条件が成立していないため、SFCプログラム制御実行部22は、「ブロック0のステップST2」を実行することなく「ブロック0」の処理を終了している。
また、SFCプログラム制御実行部22は、「ブロック1のステップST1」を実行するとともに「ブロック1の移行条件1」の実行条件が成立しているか否かのチェックを行っている。現在「ブロック1の移行条件1」の実行条件が成立していないため、SFCプログラム制御実行部22は、「ブロック1のエンドステップ」を実行することなく「ブロック1」の処理を終了するといった処理を繰り返し行っている。
SFCプログラムを変更する際、ユーザは入出力部11からプログラマブルコントローラ200で現在実行中(変更前)のSFCプログラムを取得するよう指示情報を入力する。通信I/F部14は、プログラマブルコントローラ200から現在実行中のSFCプログラムを読み出し、このSFCプログラムを記憶部15に記憶させる。ユーザが、入出力部11からSFCプログラムを変更するための指示情報を入力するとSFCプログラム作成部12は記憶部15のメモリエリアを使用してSFCプログラムを作成する。ここでは、「ブロック0」と「ブロック1」からなるSFCプログラムから「ブロック1」を削除し、「ブロック0」からなるSFCプログラムに変更する。SFCプログラム作成部12によってブロックを追加する際、入出力部11は注意情報34を表示してユーザに注意を促す。
図14は、注意情報の一例を示す図である。注意情報34としては、プログラマブルコントローラ200で実行中のブロックが削除されると、削除されたブロックの処理が終了される旨を表示する。ここでは、プログラマブルコントローラ200で現在実行中のブロックが「ブロック1」であれば、「ブロック1」の実行を終了するので、例えば「ブロック1を削除します。実行中のブロックが削除された場合、該当ブロックの実行を終了します。」といったメッセージを表示する。
このようにSFCプログラム作成部12によって作成された変更後のSFCプログラムは、図3に示す「ブロック0」からなるSFCプログラムと同一のSFCプログラムとなる。また、SFCプログラム情報作成部13はSFCプログラムの変更に関する情報としてプログラム変更情報44を作成する。
図15は、プログラム変更情報の一例を示す図である。プログラム変更情報44は、SFCプログラムの変更に関する情報として「変更前ブロック情報」、「変更前ステップ情報」、「変更後ブロック情報」、「変更後ステップ情報」、「変更情報」を含んでいる。ここでは、ブロック1の2つのステップが削除されるため、「変更前ブロック情報」、「変更前ステップ情報」、「変更後ブロック情報」、「変更後ステップ情報」、「変更情報」はプログラム変更情報44に2つずつ含まれている。
ここでは、SFCプログラム作成部12によって「変更前ブロック情報」の2つのエリアにはブロックナンバとして「ブロック1」がそれぞれ格納される。また、「変更前ステップ情報」の2つのエリアにはステップナンバとして「ST0」と「ST1」がそれぞれ格納される。また、「変更後ブロック情報」の2つのエリアにはブロック1は削除されているので「なし」の情報が格納される。同様に、ブロック1の「ステップST0」とブロック1の「ステップST1」が削除されるので「変更後ステップ情報」のエリアにはステップナンバが無いことを示す「なし」の情報が格納される。また、ブロック1を削除する変更であるため、SFCプログラム作成部12は「変更情報」のエリアに実行中情報61の変更の態様として「削除」をそれぞれ格納させる。また、「ブロック1のステップST0」と「ブロック1のステップST1」が2つ削除されるため、SFCプログラム制御実行部22は「変更情報登録数」のエリアに「2」を格納させる。
ユーザが、変更後のSFCプログラムとプログラム変更情報44をプログラマブルコントローラ200のワークメモリ部25に送信するよう入出力部11に指示情報を入力すると、通信I/F部14から通信I/F部21へ変更後のSFCプログラムとプログラム変更情報44が送られる。
プログラマブルコントローラ200に送られた変更後のSFCプログラムは、プログラム記憶部24で記憶する。また、プログラマブルコントローラ200に送られたプログラム変更情報44は、ワークメモリ部25に書き込まれる。
この後、ステップS150、S170〜S190の処理が行われる。すなわち、SFCプログラム制御実行部22による1スキャンの実行が終了する度に、プログラミング装置100からプログラマブルコントローラ200へ変更後のSFCプログラムの書込みが行われたか否かを確認し(ステップS150)、プログラム記憶部24へSFCプログラムの書込みがあったと判断された場合、SFCプログラム制御実行部22がプログラム記憶部24から読み出して実行するSFCプログラムを変更後のSFCプログラムに変更(置換)する(ステップS170)。
SFCプログラム制御実行部22は、ワークメモリ部25に格納されたプログラム変更情報44の「変更情報登録数」を読み出す(ステップS180)。そして、SFCプログラム制御実行部22は、「変更情報登録数」に格納されている値の回数だけ、実行中情報61に登録されている内容を置き換える処理が終了したか否かを確認する(ステップS190)。
SFCプログラム制御実行部22は、プログラム変更情報44から1つ目の「変更前ブロック情報」と「変更前ステップ情報」を読み出す。SFCプログラム制御実行部22は、読み出した1つ目の「変更前ブロック情報」と「変更前ステップ情報」に対応するブロックのステップがワークメモリ部25の実行中情報61の「ブロック情報」と「ステップ情報」に存在するか否かを判断する(ステップS200)。
ここでは、プログラム変更情報44の「変更前ブロック情報」は「ブロック1のステップST0」であり、実行中情報61の「ブロック1」に対応するステップは「ST1」である。したがって、SFCプログラム制御実行部22は、読み出したプログラム変更情報44のブロックが実行中情報61に存在しないと判断する(ステップS210、Yes)。
プログラム制御実行部22は、プログラム変更情報44の「変更情報登録数」の値から−1を行い(ステップS240)、「変更情報登録数」を「2」から「1」に変更する。プログラム制御実行部22は、この「変更情報登録数」を読み出す(ステップS180)。「変更情報登録数」は「1」であるため、ステップ190〜S220の処理を行う。すなわち、SFCプログラム制御実行部22は、「変更情報登録数」に格納されている値の回数だけ、実行中情報61に登録されている内容を置き換える処理が終了したか否かを確認する(ステップS190)。
SFCプログラム制御実行部22は、プログラム変更情報44から2つ目の「変更前ブロック情報」と「変更前ステップ情報」を読み出す。SFCプログラム制御実行部22は、読み出した2つ目の「変更前ブロック情報」と「変更前ステップ情報」に対応するブロックのステップがワークメモリ部25の実行中情報61の「ブロック情報」と「ステップ情報」に存在するか否かを判断する(ステップS200)。
ここでは、プログラム変更情報44の「変更前ブロック情報」は「ブロック1のステップST1」であり、実行中情報61の「ブロック1」に対応するステップは「ST1」である。したがって、SFCプログラム制御実行部22は、読み出したプログラム変更情報44のブロックが実行中情報61に存在すると判断する(ステップS210、Yes)。
プログラム制御実行部22は、プログラム変更情報44の「変更情報」を読み出し、実行中情報61の変更の態様を判断する(ステップS220)。ここでは、「変更情報」が「削除」であるため、プログラム制御実行部22は実行中情報61の変更の態様が「削除」であると判断する。
プログラム制御実行部22が実行中情報61の変更の態様が「削除」であると判断すると、ワークメモリ部25は、実行中情報61に登録されている内容から「ブロック1」に関する情報を削除する。
そして、プログラム制御実行部22は、実行中情報61の「ステップ総数」から削除したステップ数の値を減算し(ステップS260)、実行中情報61の「ステップ総数」の値を「2」から「1」に変更する。
プログラム制御実行部22は、プログラム変更情報44の「変更情報登録数」の値から−1を行い(ステップS240)、「変更情報登録数」を「1」から「0」に変更する。
プログラム制御実行部22は、この「変更情報登録数」を読み出す(ステップS180)。「変更情報登録数」は「0」となっているため、実行中情報61の変更処理が全て終了しており、SFCプログラム制御実行部22によって「変更情報登録数」に格納されている値だけ、実行中情報61の変更処理が終了したと判断される(ステップS190、Yes)。
そして、SFCプログラム制御実行部22は、ワークメモリ部25の実行中情報61に格納している情報から「ブロック0のステップST1」の実行準備を行う(ステップS160)。この後、SFCプログラム制御実行部22は変更後のSFCプログラムを実行する。変更後のSFCプログラムにおいて「ブロック0の移行条件1」の移行条件が成立していないため「ブロック0のステップST1」の処理が繰り返される(ステップS120〜S160)。
なお、本実施の形態においては、プログラマブルコントローラ200で実行中のSFCプログラムをプログラミング装置100で変更(編集)することとしたが、プログラミング装置100で変更するSFCプログラムはプログラマブルコントローラ200で実行中のものに限られず、プログラマブルコントローラ200で実行していないSFCプログラムをプログラミング装置100で変更してもよい。また、プログラミング装置100においても、実行中のSFCプログラムを変更(置換)する場合に限られず、実行していないSFCプログラムを変更するようにしてもよい。
このように、プログラミング装置100は、プログラマブルコントローラ200が実行しているブロックとステップを把握することなく、SFCプログラムの実行中の変更を可能としている。そして、SFCプログラム内のステップや移行条件を削除する場合であっても、プログラマブルコントローラ200は削除される実行中のステップの次のステップに関する情報を取得することが可能となる。また、SFCプログラム内のステップや移行条件を追加や変更する場合であっても、プログラマブルコントローラ200は追加されるステップに関する情報を取得することが可能となる。また、SFCプログラムに新たなブロックを追加する場合であっても、プログラマブルコントローラ200は追加されるブロックに関する情報を取得することが可能となる。また、SFCプログラムからブロックを削除する場合であっても、プログラマブルコントローラ200は削除されるブロックに関する情報を取得することが可能となる。
このように実施の形態によれば、SFCプログラム内のステップや移行条件を削除する場合であっても、プログラマブルコントローラ200が削除される実行中のステップの次のステップに関する情報を取得することができるので、プログラマブルコントローラ200はSFCプログラムを変更する際、次のステップの実行を行うことができる。したがって、実行中のSFCプログラムを停止させることやイニシャルステップから再実行させる必要がなく、SFCプログラムの実行を継続しながらプログラマブルコントローラ200のSFCプログラムを変更させることが可能となる。
また、SFCプログラム内のステップや移行条件を追加や変更する場合であっても、プログラマブルコントローラ200は追加されるステップに関する情報を取得することができるので、プログラマブルコントローラ200はSFCプログラムを変更する際、追加されるステップの実行を行うことができる。したがって、実行中のSFCプログラムを停止させることやイニシャルステップから再実行させる必要がなく、SFCプログラムの実行を継続しながらプログラマブルコントローラ200のSFCプログラムを変更させることが可能となる。
また、SFCプログラムからブロックを削除する場合であっても、プログラマブルコントローラ200は削除されるブロックに関する情報を取得することができるので、プログラマブルコントローラ200はSFCプログラムを変更する際、削除されていないブロックを実行することができる。したがって、実行中のSFCプログラムを停止させることやイニシャルステップから再実行させる必要がなく、SFCプログラムの実行を継続しながらプログラマブルコントローラ200のSFCプログラムを変更させることが可能となる。
また、SFCプログラム内のステップや移行条件を削除する場合、SFCプログラム内のステップや移行条件を追加や変更する場合、SFCプログラムに新たなブロックを追加する場合、SFCプログラムからブロックを削除する場合であっても、プログラミング装置100は追加されるブロックに関する情報を取得することができるので、SFCプログラムを変更させる際に、注意情報を表示させることができる。したがって、SFCプログラムを変更する際の動作効率が向上する。