(57)【要約】【課題】ＰＬＣの稼働中に制御プログラムを更新する際に、共通変数のデータの有効性を保証する。【解決手段】開発支援装置２０の切替指示部７３が、任意の共通変数に係わる書込側ＰＬＣ１０にのみ切替指示を送信し、当該書込側ＰＬＣが、自己の新たな機械語オブジェクトを実行完了後に、切替制御部８２によって読込側ＰＬＣ１０に対して切替指示を送信する。これより、書込側ＰＬＣ１０で新たな機械語オブジェクトが実行された後に、読込側ＰＬＣ１０が自己の新たな機械語オブジェクトを実行するように制御される。【選択図】図１３
2015005224.tif 000002
【特許請求の範囲】
【請求項１】
支援装置と複数のプログラマブルコントローラとがネットワークに接続され、共通変数を介して複数のプログラマブルコントローラ間のデータ連携を実現するシステムであって、
前記支援装置は、
各プログラマブルコントローラ用の制御プログラムのソースコードであって前記共通変数が含まれる任意のソースコードを、コンパイルして機械語オブジェクトに変換するコンパイラ手段と、
前記各プログラマブルコントローラに対して、そのプログラマブルコントローラ用の前記機械語オブジェクトを転送すると共に、前記コンパイル処理に伴って得られる所定情報に基づいて、該転送する機械語オブジェクトに係わる前記共通変数の読込側のプログラマブルコントローラを、通知する転送・通知手段と、
前記コンパイル処理に伴って得られる所定情報に基づいて、前記共通変数の書込側のプログラマブルコントローラを認識して、該書込側のプログラマブルコントローラに対して切替指示を通知する切替指示手段と、
前記プログラマブルコントローラは、
任意の切替指示に応じて、既存の機械語オブジェクト実行状態から前記転送された新たな機械語オブジェクト実行状態に切替える切替手段と、
該新たな機械語オブジェクトを１回以上実行後に、前記転送・通知手段から通知された前記読込側のプログラマブルコントローラに対して、切替指示を通知するあるいは前記支援装置から切替指示を通知させる切替制御手段と、
を有することを特徴とするプログラマブルコントローラシステム。
【請求項２】
前記所定情報は、前記機械語オブジェクトに応じて、その転送先のプログラマブルコントローラ、それに係わる各共通変数、該各共通変数毎の書込側と読込側のプログラマブルコントローラの情報を有する共通変数管理表であることを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項３】
前記切替手段による前記既存の機械語オブジェクト実行状態から前記転送された新たな機械語オブジェクト実行状態への切替えは、該プログラマブルコントローラの稼働中に実行されることを特徴とする請求項１または２記載のプログラマブルコントローラ。
【請求項４】
前記プログラマブルコントローラは、
前記転送された新たな機械語オブジェクトを、前記既存の機械語オブジェクトとは別の記憶領域に格納する機械語オブジェクト記憶手段と、
前記既存の機械語オブジェクトの記憶領域を示す第１のアドレス情報と、前記新たな機械語オブジェクトの記憶領域を示す第２のアドレス情報とが記憶されたアドレス記憶手段と、
前記第１、第２の何れかのアドレス情報が示す記憶領域の機械語オブジェクトを、定周期で実行する制御手段と、
を更に有することを特徴とする請求項１記載のプログラマブルコントローラシステム。
【請求項５】
前記新たな機械語オブジェクトは、前記既存の機械語オブジェクトの更新版の機械語オブジェクトであることを特徴とする請求項１〜４の何れかに記載のプログラマブルコントローラ。
【請求項６】
支援装置と複数のプログラマブルコントローラとがネットワークに接続され、共通変数を介して複数のプログラマブルコントローラ間のデータ連携を実現するシステムにおける該支援装置であって、
各プログラマブルコントローラ用の制御プログラムのソースコードであって前記共通変数が含まれる任意のソースコードを、コンパイルして機械語オブジェクトに変換するコンパイラ手段と、
前記各プログラマブルコントローラに対して、そのプログラマブルコントローラ用の前記機械語オブジェクトを転送すると共に、前記コンパイル処理に伴って得られる所定情報に基づいて、該転送する機械語オブジェクトに係わる前記共通変数の読込側のプログラマブルコントローラを、通知する転送・通知手段と、
前記コンパイル処理に伴って得られる所定情報に基づいて、前記共通変数の書込側のプログラマブルコントローラを認識して、該書込側のプログラマブルコントローラに対して切替指示を通知する切替指示手段と、
を有することを特徴とするプログラマブルコントローラシステムの支援装置。
【請求項７】
支援装置と複数のプログラマブルコントローラとがネットワークに接続され、共通変数を介して複数のプログラマブルコントローラ間のデータ連携を実現するシステムにおける該プログラマブルコントローラであって、
既存の機械語オブジェクトを記憶する第１記憶手段と、
前記支援装置から転送される新たな機械語オブジェクトを受信すると、該新たな機械語オブジェクトを記憶する第２記憶手段と、
通知される切替指示に応じて、既存の機械語オブジェクト実行状態から前記転送された新たな機械語オブジェクト実行状態に切替える切替手段と、
該新たな機械語オブジェクトを１回以上実行後に、前記支援装置から通知された読込側のプログラマブルコントローラに対して、切替指示を通知するあるいは前記支援装置から切替指示を通知させる切替制御手段と、
を有することを特徴とするプログラマブルコントローラシステム。
【請求項８】
支援装置と複数のプログラマブルコントローラとがネットワークに接続され、共通変数を介して複数のプログラマブルコントローラ間のデータ連携を実現するシステムにおける該支援装置のコンピュータを、
各プログラマブルコントローラ用の制御プログラムのソースコードであって前記共通変数が含まれる任意のソースコードを、コンパイルして機械語オブジェクトに変換するコンパイラ手段と、
前記各プログラマブルコントローラに対して、そのプログラマブルコントローラ用の前記機械語オブジェクトを転送すると共に、前記コンパイル処理に伴って得られる所定情報に基づいて、該転送する機械語オブジェクトに係わる前記共通変数の読込側のプログラマブルコントローラを、通知する転送・通知手段と、
前記コンパイル処理に伴って得られる所定情報に基づいて、前記共通変数の書込側のプログラマブルコントローラを認識して、該書込側のプログラマブルコントローラに対して切替指示を通知する切替指示手段、
として機能させるためのプログラム。
【請求項９】
支援装置と複数のプログラマブルコントローラとがネットワークに接続され、共通変数を介して複数のプログラマブルコントローラ間のデータ連携を実現するシステムにおける該プログラマブルコントローラのコンピュータを、
既存の機械語オブジェクトを記憶する第１記憶手段と、
前記支援装置から転送される新たな機械語オブジェクトを受信すると、該新たな機械語オブジェクトを記憶する第２記憶手段と、
通知される切替指示に応じて、既存の機械語オブジェクト実行状態から前記転送された新たな機械語オブジェクト実行状態に切替える切替手段と、
該新たな機械語オブジェクトを１回以上実行後に、前記支援装置から通知された読込側のプログラマブルコントローラに対して、切替指示を通知するあるいは前記支援装置から切替指示を通知させる切替制御手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプログラマブルコントローラが共有メモリ経由で連携して動作するシステムに係わり、特にプログラム更新時の処理に関する。
【背景技術】
【０００２】
従来、複数のプログラマブルコントローラ（以下、ＰＬＣと記す）を連携して動作させるシステムを構築する場合、共有メモリに変数を割り付け、共有メモリ経由でＰＬＣ間のデータ連携を実現する方法がある。これは、通常、共有メモリに対して値を書き込むＰＬＣと、その情報を利用する（読み込む）ＰＬＣが存在する。前者を書込側ＰＬＣ、後者を読込側ＰＬＣと記すものとする。
【０００３】
尚、よく知られているように、各ＰＬＣはそのＰＬＣ用の制御プログラムを保持しており、この制御プログラムを定周期で実行することで、各種制御対象機器の制御を行う。制御プログラムには、任意の変数が記述されており、プログラム実行時にはその変数に割り当てられたメモリ領域にアクセスする。この様な変数の一種として、上記のように共有メモリにアクセスする変数があり、ここでは“共通変数”と呼ぶものとする。
【０００４】
尚、上記のようなシステムは、共通変数を介して複数のＰＬＣが連携して動作するシステムと言うこともできる。
ここで、上記のようなシステムにおいて、稼働中のＰＬＣに対して制御プログラムの更新を実施する場合、同時期に複数のＰＬＣのプログラムの更新を実施するが、特に例えば上記書込側ＰＬＣの制御プログラム更新を行う場合、これに対応する上記読込側ＰＬＣの制御プログラム更新も行う必要がある場合が多い。
【０００５】
また、従来より、制御プログラム更新が行われる場合、既存の制御プログラムの変数に関しては、既存の割当てメモリアドレスが引き継がれるようにする機能を、コンパイラが有している。一方、更新版の制御プログラムに新たな変数が追加されている場合がある。
【０００６】
この様な場合、コンパイラは、当該新変数に新たなメモリ領域を割り当てることになる。このメモリ領域は、それまで使用されていなかったので、その格納データは不定であるか、あるいは固定値（一般的には‘０’）が格納されている。この様な不定データ等を読み出すと、何らかの異常が発生する可能性があることが知られている。
【０００７】
そのため、特に上記“共通変数”に係わり新変数がある場合には、共有メモリにおける新変数への割当メモリ領域に対して、上記書込側ＰＬＣが最低１回は書き込みを実施した後で、上記読込側ＰＬＣがその値を読み込むように、プログラムの変更を制御する必要がある。勿論、これは、プログラム更新直後の話である。換言すれば、更新版プログラムを最初に実行するときの話である。つまり、上記のことは、まず、書込側ＰＬＣの更新版プログラムを最低１回は実行させることで新変数の割当メモリ領域への書込みを実行させた後で、読込側ＰＬＣの更新版プログラムを実行させる必要があるというものである。
【０００８】
しかしながら、従来、この様な制御プログラムの変更制御を自動で行うことは実現できておらず、従ってユーザが手作業で指示を出して、各ＰＬＣのプログラム更新タイミングを決めていた。
【０００９】
あるいは、この様な作業を不要とする為に、制御プログラムに工夫を施していた。これについて、図１４を参照して説明する。
図１４（ｂ）には、任意の“共通変数”に係わる上記書込側ＰＬＣと読込側ＰＬＣの制御プログラム例を示す。図上左側に示すＰＬＣ１のプログラム例が、書込側ＰＬＣの制御プログラム例である。また、図上右側に示すＰＬＣ２のプログラム例が、読込側ＰＬＣの制御プログラム例である。また、図上中央には、共有メモリ（コモンメモリ）への変数データ等の格納イメージを示す。
【００１０】
図示のＰＬＣ１のプログラム例は、１行目は変数１に‘１２３’を代入するものである。これはＰＬＣ１上の動作としては、コモンメモリにおける変数１への割当メモリ領域にデータ‘１２３’を書き込む処理となる。また、２行目はフラグ１にＴＲＵＥを代入するものである。これはＰＬＣ１上の動作としては、コモンメモリにおけるフラグ１の割当メモリ領域の１ビットデータ（フラグ）をＯＮする処理となる。つまり、変数１に関してデータ‘１２３’を書き込んだら、所定のフラグをＯＮする処理である。尚、ここでは、このプログラムは上記更新版プログラムであり、変数１は、この更新版プログラムで追加された“共通変数”であるものとする。
【００１１】
一方、図示のＰＬＣ２のプログラム例は、全体として、もし上記フラグがＯＮである場合には、上記変数１の割当メモリ領域からデータを読み出して‘５６７’を乗算する処理となる。尚、このプログラムも更新版プログラムであるものとする。
【００１２】
上記のように、変数の値の有効性を示すフラグを利用して、変数に値を書き込んだ後で、変数の値が有効になったことを示すフラグを有効にし、値を利用するＰＬＣは、フラグが有効になった場合に、変数の値を利用するようなプログラミングをする。
【００１３】
これによって、ＰＬＣ１の更新版プログラムが実行されるよりも前にＰＬＣ２の更新版プログラムが実行された場合でも、フラグＯＮの条件が満たされないので、変数１のデータ読出しは実行されない。よって、上記問題発生を防止できる。しかしながら、この方法では、ユーザのプログラミングが煩雑であり、フラグもコモンメモリ上に必要となる。コモンメモリは、ＰＬＣの他のメモリ容量より小さいため、１ビットであっても余計な領域を使用したくないものである。この様に、フラグのための余計な領域を浪費する問題がある。
【００１４】
尚、図１４（ｂ）に示すのは、制御プログラムのソースコード例である。従来より、不図示の支援装置において、ユーザが任意の制御プログラムのソースコードを作成する。そして、支援装置はコンパイラを有しており、このソースコードをコンパイルして、ＰＬＣで実行できる機械語オブジェクトへと変換する。コンパイラは、コンパイル処理の際に各変数に任意のメモリアドレスを割り当てる。また、メモリ割当結果を記憶しており、更新版プログラムのコンパイルの際には、既存の変数に対しては同じアドレスを割り当てるように管理している。勿論、更新版プログラムで新たに追加された新規変数に対しては、新たに任意のアドレスを割り当てることになり、これは未使用の記憶領域を割り当てるものと言える。
【００１５】
また、コンパイラが、上記コンパイル処理に伴って、例えば図１４（ａ）に示すような共通変数アドレス表１００を生成する場合もある。
図示の共通変数アドレス表１００は、変数名１０１、アドレス１０２、ＰＬＣ名１０３等から成る。変数名１０１の各変数毎に、その割当メモリアドレスがアドレス１０２に格納されると共に、リード／ライトするＰＬＣを示す情報がＰＬＣ名１０３の欄に格納される。
【００１６】
図示の共通変数アドレス表１００は、上記各“共通変数”に関して、その割当メモリアドレスや、リード／ライトするＰＬＣが登録されるものである。図示の「Ｗ」がライトを意味し、「Ｒ」がリードを意味する。ＰＬＣ名１０３の欄には各ＰＬＣ名が設定され、図示の例ではＰＬＣ１，ＰＬＣ２，ＰＬＣ３の各ＰＬＣ名が設定される。そして、変数名１０１の変数に関して上記読込側となるＰＬＣ名に対しては「Ｒ」が格納され、書込側となるＰＬＣ名に対しては「Ｗ」が格納される。よって、図示の例では、変数１に対しては、ＰＬＣ１が書込側、ＰＬＣ２が読込側となることを示している。
【００１７】
また、ここでは、共通変数アドレス表１００にはフラグに関する登録も行われるものとする。
また、特許文献１に開示されている従来技術が知られている。
【００１８】
特許文献１の発明では、制御装置間でのデータのやり取りに対して同じラベル名を用いたプログラムの作成が可能で、かつ、そのラベルのデバイスへの関連付けやデバイスの割付作業がシステム構成に基づいて自動で行われる。制御装置間で同じラベル名を用いたプログラム作成を行うことで、装置開発を効率化することができる。
【先行技術文献】
【特許文献】
【００１９】
【特許文献１】特許４５４１４３７号公報
【発明の概要】
【発明が解決しようとする課題】
【００２０】
上記のように、複数のプログラマブルコントローラが共有メモリ経由で連携して動作するシステムに関して、従来では、システム稼動中に制御プログラム更新を行う際に上述した問題が生じる。すなわち、上記“共通変数”に関して、書込側ＰＬＣの更新版プログラムによってデータを書き込む前に、読込側ＰＬＣの更新版プログラムによるデータ読出しが行われてしまう場合に、何らかの問題が生じる可能性がある。換言すれば、共通変数のデータの有効性を保証することができない為、読込側ＰＬＣが不定データ等を読み出す可能性があり、それによって読込側ＰＬＣに何らかの異常動作等が生じる可能性がある。
【００２１】
この課題を解決する為に、すなわち共通変数のデータの有効性を保証するために、図１４（ｂ）で説明した方法を用いる場合、上記の通り、ユーザのプログラミングが煩雑であり、また、フラグの為に共通メモリの記憶領域を浪費する等の問題が生じる。
【００２２】
また、特許文献１の発明は、上記課題を解決するものではない。
本発明の課題は、フラグやデータの有効性の判断処理を必要とすることなく、ＰＬＣの稼働中に制御プログラムを更新する際に、共通変数のデータの有効性を保証することができるプログラマブルコントローラシステム、そのプログラマブルコントローラ、支援装置等を提供することである。
【課題を解決するための手段】
【００２３】
本発明のプログラマブルコントローラシステムは、支援装置と複数のプログラマブルコントローラとがネットワークに接続され、共通変数を介して複数のプログラマブルコントローラ間のデータ連携を実現するシステムであって、下記の構成を有する。
【００２４】
前記支援装置は、各プログラマブルコントローラ用の制御プログラムのソースコードであって前記共通変数が含まれる任意のソースコードを、コンパイルして機械語オブジェクトに変換するコンパイラ手段と、前記各プログラマブルコントローラに対して、そのプログラマブルコントローラ用の前記機械語オブジェクトを転送すると共に、前記コンパイル処理に伴って得られる所定情報に基づいて、該転送する機械語オブジェクトに係わる前記共通変数の読込側のプログラマブルコントローラを、通知する転送・通知手段と、前記コンパイル処理に伴って得られる所定情報に基づいて、前記共通変数の書込側のプログラマブルコントローラを認識して、該書込側のプログラマブルコントローラに対して切替指示を通知する切替指示手段とを有する。
【００２５】
前記プログラマブルコントローラは、任意の切替指示に応じて、既存の機械語オブジェクト実行状態から前記転送された新たな機械語オブジェクト実行状態に切替える切替手段と、該新たな機械語オブジェクトを１回以上実行後に、前記転送・通知手段から通知された前記読込側のプログラマブルコントローラに対して、切替指示を通知するあるいは前記支援装置から切替指示を通知させる切替制御手段とを有する。
【発明の効果】
【００２６】
本発明のプログラマブルコントローラシステム、そのプログラマブルコントローラ、支援装置等によれば、フラグやデータの有効性の判断処理を必要とすることなく、ＰＬＣの稼働中に制御プログラムを更新する際に、共通変数のデータの有効性を保証することができる。
【図面の簡単な説明】
【００２７】
【図１】本例のプログラマブルコントローラシステムの構成図である。
【図２】ＰＬＣにおける一般的なプログラム実行状況を示す図である。
【図３】ソースコード管理表作成の具体例を示す図である。
【図４】（ａ）はソースコードの具体例、（ｂ）〜（ｄ）は共通変数管理表の具体例である。
【図５】運用中の制御プログラム更新の際のＰＬＣ側の動作を説明する為の図（その１）である。
【図６】運用中の制御プログラム更新の際のＰＬＣ側の動作を説明する為の図（その２）である。
【図７】運用中の制御プログラム更新の際のＰＬＣ側の動作を説明する為の図（その３）である。
【図８】運用中の制御プログラム更新の際のＰＬＣ側の動作を説明する為の図（その４）である。
【図９】関連表の生成処理フローチャート図である。
【図１０】（ａ）、（ｂ）は、関連表生成の具体例である。
【図１１】制御プログラム更新の際の開発支援装置の処理フローである。
【図１２】プログラム更新に係わる各ＰＬＣの処理フローチャート図である。
【図１３】本例のプログラマブルコントローラシステムの機能ブロック図である。
【図１４】（ａ）は従来の共通変数アドレス表、（ｂ）は従来のソースコードの具体例である。
【発明を実施するための形態】
【００２８】
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本例のプログラマブルコントローラシステムの構成図である。
本例のプログラマブルコントローラシステムは、上述した従来のシステムと同様、複数のプログラマブルコントローラが共有メモリ経由で連携して動作するシステムである。換言すれば、複数のプログラマブルコントローラが共通変数を介して連携して動作するシステムである。そして、稼動中に制御プログラム更新を行うものである。この様なシステムでは、従来では上述した問題が生じる場合がある。本例のプログラマブルコントローラシステムでは、この様な課題を解決できる。
【００２９】
本例のプログラマブルコントローラシステムは、複数のＰＬＣ（プログラマブルコントローラ）１０と、開発支援装置２０が、ネットワーク９に接続された構成である。尚、複数のＰＬＣ１０は、図示の例ではＰＬＣ１、ＰＬＣ２、ＰＬＣ３の３台のＰＬＣを例にする。
【００３０】
ＰＬＣ１０の構成は、３台とも略同様であるものとし、図示の例では管理部１１、メモリ（プログラム用）１２、コモンメモリ１３、実行管理テーブル１４等を有する。尚、実行管理テーブル１４は、不図示のデータ格納用メモリ等に格納される。
【００３１】
メモリ（プログラム用）１２には、そのＰＬＣ１０が実行する各種制御用の制御プログラム等が格納される。不図示のＣＰＵ等が、この制御プログラムを実行することで、不図示の制御対象機器等に対する各種制御が行われる。そして、この制御プログラムは、当該ＰＬＣ１０が稼働中に更新される。
【００３２】
尚、後述するように、上記開発支援装置２０において上記制御プログラムのソースコードが任意に作成されて、これがコンパイルされて機械語オブジェクトが生成されて、この機械語オブジェクトがＰＬＣ１０にダウンロードされて、メモリ（プログラム用）１２に格納される。つまり、メモリ（プログラム用）１２には、制御プログラムの機械語オブジェクトが格納されている。
【００３３】
また、上記制御プログラムは、更新される場合がある。その場合、まず、開発支援装置２０において更新版の制御プログラムのソースコードが任意に作成されて、これがコンパイルされて更新版の機械語オブジェクトが生成されて、この更新版の機械語オブジェクトがＰＬＣ１０にダウンロードされて、メモリ（プログラム用）１２に格納される。
【００３４】
ここで、制御プログラム更新は、基本的に、運用中に行われる。よって、例えば、更新版の機械語オブジェクトをメモリ（プログラム用）１２に格納する処理中や格納完了直後等には、旧版の機械語オブジェクトはメモリ（プログラム用）１２に格納されていると共にＣＰＵによって定期的に実行されている。そして、更新版の機械語オブジェクトをメモリ（プログラム用）１２に格納完了後に、任意のときに、制御プログラム切替処理が行われる。これによって、旧版の機械語オブジェクトが実行される状態から、更新版の機械語オブジェクトが実行される状態へと移行することになる。
【００３５】
この様な機械語オブジェクトの実行管理制御に、上記実行管理テーブル１４が用いられるが、これについては後述する。尚、上記実行管理テーブル１４自体やこれを用いた上記“機械語オブジェクトの実行管理制御”自体は、既存技術であるので、簡単に説明するものとする。
【００３６】
また、本例のプログラマブルコントローラシステムは、上記の通り、複数のプログラマブルコントローラ１０が共有メモリ経由で連携して動作するシステムであり、これに応じて本例では各ＰＬＣ１０はコモンメモリ１３を有する。コモンメモリ１３には、複数のＰＬＣ１０で共有する変数（上記共通変数）のデータが格納される。尚、従来より、各ＰＬＣ１０が、自己のコモンメモリ１３のデータをブロードキャスト送信することで、全てのコモンメモリ１３で同一のデータが格納された状態となるように制御されている。
【００３７】
コモンメモリ１３に格納される各共通変数毎に、その共通変数に係わるデータを書き込むＰＬＣ１０と、このデータを読み込むＰＬＣ１０が存在する。上述したように、前者を書込側ＰＬＣ、後者を読込側ＰＬＣと呼ぶものとする。
【００３８】
ここで、上記更新版の制御プログラムにおいて新たな共通変数が追加されている場合がある。この様な新たな共通変数に関しては、コモンメモリ１３に当該新たな共通変数のデータ格納領域が割り当てられているが、初期状態ではこの割当領域のデータは不定状態や‘０’等となっている。この為、この共通変数に係わる読込側ＰＬＣが、この様な不定のデータを読み込むと、誤動作する可能性があり、問題となる。
【００３９】
この為、まず、上記新たな共通変数に係わる書込側ＰＬＣが、その割当領域にデータを書き込む動作を最低１回行った後に、この共通変数に係わる読込側ＰＬＣが動作するように制御する必要がある。本手法では、これを自動で実現させる。詳しくは後述する。
【００４０】
尚、制御プログラムで用いる変数は、コモンメモリ１３に格納する共通変数に限らないが、以下の説明では特に断らない限りは「変数」は、コモンメモリ１３に格納する共通変数を意味するものとする。
【００４１】
管理部１１は、例えば上記制御プログラムの実行や更新など、ＰＬＣ１０に係わる各種制御を行う。詳しくは後述する。尚、メモリ（プログラム用）１２には上記制御プログラム以外にも所定のアプリケーションプログラムが記憶されている。上記不図示のＣＰＵが、このアプリケーションプログラムを実行することで、例えば管理部１１の後述する各種処理機能が実現される。
【００４２】
開発支援装置２０は、ユーザによる任意の制御プログラムのソースコードの作成作業を支援する機能を有する。この機能自体は、既存の機能であり、よって特に図示・説明はしないが、この機能によって例えば図示の各ソースコード１，２，３等がユーザによって任意に作成される。
【００４３】
尚、ソースコード１は、ＰＬＣ１用の制御プログラムのソースコードである。ソースコード２は、ＰＬＣ２用の制御プログラムのソースコードである。ソースコード３も同様である。尚、本説明では、基本的に、例えばＰＬＣ１用のソースコードや機械語オブジェクトに関しては、番号の先頭は必ず‘１’とする。つまり、上記ソースコード１や後述するソースコード１−１、１−２、機械語オブジェクト１、機械語オブジェクト１−１等のように、その番号の先頭は必ず‘１’とする。同様に、例えばＰＬＣ２用のソースコードや機械語オブジェクトに関しては、番号の先頭は必ず‘２’とする。
【００４４】
また、本説明では、ソースコートの番号と、これをコンパイルして成る機械語オブジェクトの番号とを、同一とする。例えば、後述するソースコード１−１をコンパイルすることで後述する機械語オブジェクト１−１が生成される。
【００４５】
開発支援装置２０は、コンパイラ２１を有する。コンパイラ２１は、上記作成されたソースコードをコンパイルして、ＰＬＣ１０上で動作する機械語オブジェクトに変換する。例えば、ソースコード１をコンパイルして機械語オブジェクト１を生成する。尚、上記の通り、機械語オブジェクト１は、ＰＬＣ１用である。そして、不図示の転送部によって、コンパイラ２１で生成した機械語オブジェクトを、対応するＰＬＣ１０にダウンロードする。例えば上記機械語オブジェクト１は、ＰＬＣ１にダウンロードする。尚、上記機械語オブジェクトに変換する機能自体は、既存技術である。
【００４６】
ここで、本例のコンパイラ２１は、上記コンパイル処理に伴って、図示の共通変数管理表２２やソースコード管理表２３を生成・更新する。コンパイラ２１は、更に、例えば、各ＰＬＣ１，２、３毎に対応する機械語オブジェクト関連表２４を生成する。
【００４７】
生成された機械語オブジェクト関連表２４は、対応するＰＬＣ１０に転送されて記憶される。各ＰＬＣ１０では、自己の制御プログラム更新の際に、機械語オブジェクト関連表２４に基づいて、場合によっては他のＰＬＣ１０に対して切替コマンドを出す。これについては詳しくは後述するが、これによって、任意の変数に係わる書込側ＰＬＣ１０で更新版プログラムが最低１回は実行された後に、読込側ＰＬＣ１０で更新版プログラムが実行されるようになる。よって、読込側ＰＬＣ１０でコモンメモリ１３から読み込む変数データが、上記不定データ等となることはなく、異常動作となることを防止できる。
【００４８】
上記構成のプログラマブルコントローラシステムでは、開発支援装置２０が、上記コンパイル実行に伴って、各共通変数に係わる“書込側ＰＬＣ１０”と“読込側ＰＬＣ１０”とを共通変数管理表２２に記録することで、当該共通変数管理表２２を生成する。また、開発支援装置２０は、稼働中のＰＬＣ１０のプログラムの変更を実施する際には、更新版のプログラムや機械語オブジェクト関連表２４をＰＬＣ１０にダウンロードすると共に、共通変数管理表２２の情報に基づいて上記“書込側ＰＬＣ１０”だけにプログラム更新指示を送信する。これによって、まず、“書込側ＰＬＣ１０”だけが、自己のプログラム更新を行うことになる。つまり、上記更新版プログラムを実行する状態へと切替える。
【００４９】
ここで、本手法では、開発支援装置２０は、上記“読込側ＰＬＣ１０”に対しては、プログラム更新指示を出さなくてもよい。すなわち、プログラム更新が実施された上記“書込側ＰＬＣ１０”が、例えば更新版の制御プログラムを１回以上実行完了した後に、上記機械語オブジェクト関連表２４に基づいて上記“読込側ＰＬＣ１０”に対してプログラム更新指示を出す。
【００５０】
本手法では、概略的には例えば上記のようにすることにより、共通変数のデータの有効性を保証する。すなわち、上記のように“読込側ＰＬＣ１０”が不定データを読み出してしまうことで異常動作するような事態を防止できる。詳しくは後述する。
【００５１】
ここで、図２に、ＰＬＣにおける一般的なプログラム実行状況を示す。
一般的に、ＰＬＣは制御プログラムを定周期で実行するものであり、本例のＰＬＣ１０も同様である。すなわち、各ＰＬＣ１０は例えば図２に示すように、定周期で制御プログラムを実行する。制御対象は、不図示の例えば工場内の各種設備等である。そして、制御プログラム実行時以外の時間帯（空き時間）に、システム上の各種制御処理を行う。例えば、本手法による更新版プログラムのダウンロードや、更新版プログラムの切替に係わる各種処理やメッセージの送受信処理等の様々な処理を実行する。
【００５２】
尚、図２上では、上記システム上の各種制御処理を「システム」と記してある。つまり、図示の「システム」は、制御プログラム以外の各種処理が実行される帯域を意味するものと考えてもよい。
【００５３】
尚、例えば図２のようなプログラムの実行管理は、上記管理部１１が実行する。また、尚、制御プログラムを作成するプログラマは、通常、定周期期間内に実行完了するように制御プログラムを作成するものである。
【００５４】
上記のように、開発支援装置２０においては、ユーザが任意のソースコードを記述する。コンパイラ２１が、このソースコードを機械語オブジェクトに変換すると共に、これらソースコードと機械語オブジェクトの関連の情報を、ソースコード管理表２３に記憶する。
【００５５】
ここで、図３に、ソースコード管理表２３の作成の具体例を示す。
図３では、開発支援装置２０において、ユーザが、ＰＬＣ１用のソースコード１−１と、ＰＬＣ２用のソースコード２−１を任意に作成したものとする。
【００５６】
これより、コンパイラ２１は、例えばまずソースコード１−１をコンパイルして機械語オブジェクト１−１を生成する。更に、このコンパイルに伴って所定情報を、ソースコード管理表２３に記憶する。
【００５７】
ここで、ソースコード管理表２３は、例えば図３に示すように、番号３１、ＰＬＣ３２、ソースコード名３３、機械語オブジェクト名３４の各データ項目より成る。
ソースコード名３３には上記コンパイルしたソースコードの識別情報（名称、ＩＤ等）が格納され、このソースコードがどのＰＬＣ用であるかを示す情報がＰＬＣ３２に格納される。尚、ここでは例えば各ソースコードには、それがどのＰＬＣ用のソースコードであるのかを示す情報が、含まれているものとする。そして、ソースコード名３３のソースコードをコンパイルして得られる機械語オブジェクトの識別情報（名称、ＩＤ等）が、機械語オブジェクト名３４に格納される。
【００５８】
また、番号３１には、この制御プログラム（ソースコード名３３と機械語オブジェクト名３４）の管理番号が格納される。ここでは、開発支援装置２０は、一連の制御プログラムには同一の“管理番号”を付与するように管理制御している。ここで、通常、ＰＬＣの各制御プログラムは、初期版が作成されてＰＬＣで運用実行された後、随時、バージョンアップされる場合が少なくない。上記“一連の制御プログラム”とは、これら初期版及び各バージョンアップ版を意味する。つまり、任意の制御プログラムの初期版が作成された際にそれに任意の管理番号を付与すると、その後、この制御プログラムの更新版には全て同一の管理番号が付与される。
【００５９】
尚、上記の通り、“制御プログラム”は、ソースコード、機械語オブジェクトであり、任意のソースコードをコンパイルして生成される機械語オブジェクトには、当該ソースコードの管理番号と同じ管理番号が付与される。
【００６０】
上述したことから、上記ソースコード１−１に関しては、仮に管理番号‘１’が付与されているとした場合、図示のように、番号３１＝１、ＰＬＣ３２＝ＰＬＣ１、ソースコード名３３＝ソースコード１−１、機械語オブジェクト名３４＝機械語オブジェクト１−１が、ソースコード管理表２３に記憶されることになる。
【００６１】
続いて、コンパイラ２１は、ソースコード２−１をコンパイルして機械語オブジェクト２−１を生成する。これに伴って、図示のように、番号３１＝２、ＰＬＣ３２＝ＰＬＣ２、ソースコード名３３＝ソースコード２−１、機械語オブジェクト名３４＝機械語オブジェクト２−１が、ソースコード管理表２３に記憶されることになる。尚、ここでは、ソースコード２−１に対しては管理番号＝‘２’が付与されているものとする。
【００６２】
ここで、例えば、後に、上記ソースコード１−１の更新版であるソースコード１−１’が作成されたものとする。この場合、上述したように、この更新版のソースコード１−１’の管理番号は‘１’となる。これより、コンパイラ２１は、このソースコード１−１’をコンパイルして機械語オブジェクト１−１’を生成し、これに伴って図示の情報をソースコード管理表２３に記憶する。すなわち、番号３１＝１、ＰＬＣ３２＝ＰＬＣ１、ソースコード名３３＝ソースコード１−１、機械語オブジェクト名３４＝機械語オブジェクト１−１が、ソースコード管理表２３に記憶されることになる。
【００６３】
開発支援装置２０は、上記生成した機械語オブジェクトとその管理番号等を、不図示の通信機能を利用して該当するＰＬＣ１０に送信する。尚、該当するＰＬＣとは、ＰＬＣ３２のＰＬＣのことである。
【００６４】
また、開発支援装置２０は、上記共通変数管理表２２の生成も行う。これについて、以下、図４に示す具体例を参照して説明する。
ここで、図４（ａ）には、上記ソースコード１−１．２−１の一部の具体例を示す。
【００６５】
図示の例では、ソースコード１−１の一部に、変数１と変数２に関して下記のような記述がある。尚、変数１、変数２は、共通変数であるものとする。
変数１  ：＝  １２３；
変数２  ：＝  変数１＊１０；
上記記述の１行目は、変数１に値‘１２３’を代入するものであり、これはＰＬＣ１０上の動作としては、変数１に割り当てられた記憶領域に、データ‘１２３’を書き込む処理となる。尚、この記憶領域は、コモンメモリ１３上の記憶領域である。更に２行目は、変数１の値に‘１２３’を乗じた算出値を、変数２に代入する処理である。これは、ＰＬＣ１０上の動作としては、変数１に割り当てられた記憶領域からデータを読み出して、このデータに‘１２３’を乗じた算出値を、変数２に割り当てられた記憶領域に書き込む処理となる。
【００６６】
また、図４に示すソースコード２−１の例では、下記のような記述がある。
内部変数  ：＝  変数１＊５６７：
上記記述は、変数１の値に５６７を乗じた値を、内部変数に代入するものである。その為にまず変数１の値を取得する必要があり、これはＰＬＣ１０上の動作としては変数１に割り当てられた記憶領域からデータを読み込む処理となる。
【００６７】
上記のように、変数１に関しては、ＰＬＣ１が上記書込側ＰＬＣとなり、ＰＬＣ２が上記読込側ＰＬＣとなる。この様なことは、従来よりコンパイラで解釈できることである。つまり、コンパイラ２１は、任意のソースコードをコンパイルする処理に伴って、その各変数に対して任意のアドレスを割り当てると共に書込側ＰＬＣ／読込側ＰＬＣを判別できる。そして、これによって、共通変数管理表２２を作成できる。
【００６８】
従来は、コモンメモリへの変数の割付けをユーザが管理していた。更に、従来では、図１４（ｂ）に示すように、コモンメモリに割り付けた変数の値の有効/無効の判断に応じたプログラミングとしていた。その為のフラグの記述や図１４（ａ）に示す管理が必要であった。そのため、フラグの分、余計な領域が必要であり、値の有効/無効の判断もユーザがプログラミングする必要があり煩雑であった。
【００６９】
一方、本手法では、コンパイラ２１が任意のソースコードをコンパイルする処理に伴って、共通変数管理表２２に所定の情報を登録する。この登録の様子を図４（ｂ）、（ｃ）、（ｄ）に示す。尚、図示の例は、上記図３に示す例に応じたものである。
【００７０】
この例では、共通変数管理表２２は、上記図３の例のソースコード１−１のコンパイル処理に伴う登録処理によって、図４（ｂ）に示す状態となる。その後、共通変数管理表２２は、上記図３の例のソースコード２−１のコンパイル処理に伴う登録処理によって、図４（ｃ）に示す状態となる。その後の後処理によって、共通変数管理表２２は、図４（ｄ）に示す状態となる。以下、これらについて説明する。
【００７１】
まず、図４（ｂ）、（ｃ）、（ｄ）に示す例では、共通変数管理表２２は、プログラム名４１、転送先ＰＬＣ４２、変数名４３、コモンメモリアドレス４４、各ＰＬＣ名４５等のデータ項目から成る。
【００７２】
プログラム名４１には、コンパイル処理で生成される機械語オブジェクトの識別情報（オブジェクト名、ＩＤ等）が登録される。転送先ＰＬＣ４２には、この機械語オブジェクトの転送先のＰＬＣの識別情報（ＰＬＣ名、）ＩＤ等）が登録される。例えば、ＰＬＣ１用の機械語オブジェクトであれば、その転送先ＰＬＣは当然、ＰＬＣ１となる。ソースコードと機械語オブジェクトと転送先ＰＬＣとの関係は、ソースコード管理表２３を参照すれば分かる。
【００７３】
また、例えば図４（ａ）の各変数の変数名とその変数に割り当てられた記憶領域のアドレスが、変数名４３、コモンメモリアドレス４４に登録される。尚、上記の通り、本説明における「変数」は、上記共通変数であるので、コモンメモリ１３上のアドレスが割り当てられることになる。
【００７４】
そして、各ＰＬＣ名４５の欄には、ネットワーク上の各ＰＬＣ１０の名称等が示されると共に、変数名４３の各変数毎に、その上記書込側ＰＬＣ１０に対しては図示の「Ｗ」が登録され、読込側ＰＬＣ１０に対しては図示の「Ｒ」が登録される。
【００７５】
図４（ｂ）の状態では、上記ソースコード１−１に係わる変数である変数１、変数２が変数名４３に登録されると共に、これらの各変数への割当アドレスがコモンメモリアドレス４４に登録される。尚、図示の例では、変数１に対しては‘１０００’番地、変数２に対しては‘１００２’番地が、割り当てられている。
【００７６】
更に、上記の通りソースコード１−１がＰＬＣ１用のソースコードであることは分かっており、更に上記変数１、変数２の両方とも書き込み処理が行われると解析できる。よって、図４（ｂ）に示すように、変数１、変数２の何れに対しても、各ＰＬＣ名４５における“ＰＬＣ１”の欄に「Ｗ」が登録されることになる。尚、この時点では、ＰＬＣ１以外は、変数の利用状況が判断できないため、図示のように「無し」を登録する。
【００７７】
尚、従来でも、図１４（ａ）に示す例のように、書込側ＰＬＣ／読込側ＰＬＣを判別して「Ｗ」や「Ｒ」を登録すること自体は、行われていた。つまり、これは既存技術であり、特に詳細には説明しないものとする。
【００７８】
続いて、上記ソースコード２−１がコンパイルされると、これに伴う所定情報登録が行われて、共通変数管理表２２は図４（ｃ）に示す状態となる。すなわち、コンパイル結果である機械語オブジェクト２−１がプログラム名４１に登録されると共に、「ＰＬＣ２」が転送先ＰＬＣ４２に格納される。更に、図４（ａ）に示す例では、変数１のリード処理があるので、図４（ｃ）に示すように、各ＰＬＣ名４５における“ＰＬＣ２”の欄に「Ｒ」が登録されることになる。
【００７９】
その後、所定の後処理が実行されることで、共通変数管理表２２は図４（ｄ）に示す状態となる。つまり、図４（ｃ）の状態では、変数名４３の各変数毎に、「Ｗ」か「Ｒ」のどちらか一方のみが登録されている状態であった。これを、変数名４３の各変数毎に、書込側ＰＬＣと読込側ＰＬＣがそれぞれどのＰＬＣ１０であるのか、分かるようにする。つまり、図４（ｄ）に示すように、変数名４３の各変数毎に、「Ｗ」と「Ｒ」の両方が記述される状態とする。
【００８０】
上記後処理は、概略的には、例えば、変数名をキーにして「無し」の部分のデータを補っていく処理である。例えば、変数１は、機械語オブジェクト１−１、２−１で利用していて、ＰＬＣ１で「Ｗ」、ＰＬＣ２で「Ｒ」となっているので、変数１に係わる登録内容を、図４（ｄ）のように更新する。
【００８１】
上記後処理は、例えば、共通変数管理表２２の各レコードのなかで各ＰＬＣ名４５に「Ｗ」が登録されているレコードを順次処理対象として、処理対象レコードの変数名４３を用いて他のレコードを検索して、同一の変数名４３を有するレコード（該当レコード）を求める。
【００８２】
そして、該当レコードの各ＰＬＣ名４５に「Ｒ」が登録されている場合には、処理対象レコードと該当レコードの両方とも、ＰＬＣ名４５における該当欄に「Ｗ」と「Ｒ」の両方が登録された状態にする。これは、例えば、処理対象レコードに関しては、そのＰＬＣ名４５において該当レコードの転送先ＰＬＣ４２に対応する欄に、「Ｒ」を登録する。一方、該当レコードに関しては、例えばそのＰＬＣ名４５において処理対象レコードの転送先ＰＬＣ４２に対応する欄に、「Ｗ」を登録する。
【００８３】
上記処理は、例えば、図４（ｃ）に示す例において、まず、先頭レコードが処理対象レコードとなり、その変数名４３は“変数１”であるので、３番目のレコードが該当レコードとなる。３番目のレコードの転送先ＰＬＣ４２は“ＰＬＣ２”である。これより、先頭レコードのＰＬＣ名４５における「ＰＬＣ２」の欄に「Ｒ」を登録する。これによって、先頭レコードは図４（ｄ）に示す状態となる。更に、先頭レコードの転送先ＰＬＣ４２は“ＰＬＣ１”であるので、３番目のレコードのＰＬＣ名４５における「ＰＬＣ１」の欄に「Ｗ」を登録する。これによって、３番目のレコードは図４（ｄ）に示す状態となる。
【００８４】
尚、図４（ｃ）に示す例においては、続いて、２番目のレコードが処理対象レコードとなるが、該当レコードが無いので、何も処理を行わない。よって、２番目のレコードに関しては、図４（ｄ）に示すように、図４（ｃ）の状態のままである。
【００８５】
以下、図５〜図８を参照して、運用中の制御プログラム更新の際のＰＬＣ１０側の動作について説明する。ここで、図５、図６、図７は、従来から存在する一般的な動作であり、図８が本手法に係わる動作である。これより、以下、まず、図５、図６、図７について簡単に説明する。
【００８６】
まず、上記図１で説明したように、各ＰＬＣ１０は実行管理テーブル１４を保持するが、これは本例では“現行”用と“保持”用の２種類存在する。つまり、図５に示す実行管理テーブル１４−１と、実行管理テーブル１４−２の２種類ある。但し、一方が“現行”、他方が“保持”に固定されているのではなく、随時、切り替えられるものである。ここでは、図示の“プログラム実行管理表ポインタ”（以下、単にポインタと記す場合もある）を用いる。すなわち、このポインタは２つのテーブル１４−１、１４−２の何れか一方を指すものであり、任意のときのこのポインタが指しているテーブルが、そのときの“現行”用を意味している。よって、図５の例では、ポインタは実行管理テーブル１４−１を指しているので、この状態では実行管理テーブル１４−１が“現行”用となっている。
【００８７】
ここで、図１で説明したように、各ＰＬＣ１０毎に、そのメモリ１２には、そのＰＬＣ用の制御プログラム（その機械語オブジェクト）が格納される。メモリ１２に１つ以上の機械語オブジェクトが格納され、図５の例では２つの機械語オブジェクト１−１、１−２が格納される。そして、これら各機械語オブジェクト１−１．１−２の格納アドレスが、実行管理テーブル１４−１に登録されている。
【００８８】
ＰＬＣ１０では、上記定周期で制御プログラムを実行する毎に、その時点でポインタが示している実行管理テーブル１４を参照して、当該テーブル１４に登録されている各アドレスを用いて、メモリ１２の該当領域の制御プログラムを実行する。
【００８９】
ここで、上記の通り、開発支援装置２０側では、ユーザが、新規の（初版の）制御プログラムを作成する場合もあれば、既存の制御プログラムの更新版を作成する場合もある。尚、逐一述べないが、ユーザが作成するのは、制御プログラムのソースコードである。よって、作成された初版／更新版のソースコードをコンパイラ２１でコンパイルして、機械語オブジェクトに変換する必要がある。そして、生成した機械語オブジェクトを該当するＰＬＣ１０にダウンロードする。
【００９０】
ここで、図５に示すＰＬＣ１０に対して、例えば、上記既存の機械語オブジェクト１−１．１−２の更新版である不図示の機械語オブジェクト１−１’、１−２’がダウンロードされたものとする。この場合、ＰＬＣ１０は、これらの不図示の機械語オブジェクト１−１’、１−２’をメモリ１２に格納すると共に、その格納アドレスを“保持”用の実行管理テーブル１４に格納する。つまり、図５の例では、実行管理テーブル１４−２に格納アドレスを格納することになる。これについて、以下、図６、図７の例を参照して説明する。
【００９１】
尚、受信した機械語オブジェクトをメモリ１２に格納したら、当該格納領域の先頭アドレス等を実行管理テーブル１４に格納するが、テーブル１４内での格納位置を上記“管理番号”に応じて決定するようにしてもよい。すなわち、上記受信した機械語オブジェクトの管理番号を、実行管理テーブル１４のインデックスとして利用し、その位置に該当する機械語オブジェクトの上記先頭アドレス等を格納するようにしてもよい。例えば、管理番号が‘１’の場合には上記先頭アドレス等は実行管理テーブル１４の先頭に配置し、管理番号が‘２’の場合には先頭アドレス等はテーブル１４の先頭から２番目の位置に配置する等とする。
【００９２】
そして、定周期で機械語オブジェクトを実行する際には、まず、上記テーブル１４の先頭位置に格納された先頭アドレス等に対応する機械語オブジェクトが実行され、続いて上記２番目の位置に格納された先頭アドレス等に対応する機械語オブジェクトが実行されることになる。但し、この例に限らない。尚、本例では“管理番号”は、後述するように更新版か否かを判別する際にも用いられるが、この例に限らない。
【００９３】
尚、図６、図７や後述する図８の例では、簡単の為、各ＰＬＣ１０毎に１つの機械語オブジェクトが用いられるものとする。つまり、ここではＰＬＣ１とＰＬＣ２を例にすると共に、ＰＬＣ１では機械語オブジェクト１−１（またはその更新版）により運用され、ＰＬＣ２では機械語オブジェクト２−１（またはその更新版）により運用されるものとする。
【００９４】
例えば任意のときに、図６に示すように、ＰＬＣ１においては、メモリ１２に機械語オブジェクト１−１が格納されると共に、この格納アドレスが実行管理テーブル１４−１に登録されているものとする。また、この例ではポインタは実行管理テーブル１４−１を指している。よって、実行管理テーブル１４−１が“現行”用となっている。よって、この状態では、ＰＬＣ１では、定周期で制御プログラムを実行する際には、機械語オブジェクト１−１を実行することになる。
【００９５】
また、図６の例では、ＰＬＣ２においては、メモリ１２に機械語オブジェクト２−１が格納されると共に、この格納アドレスが実行管理テーブル１４−１に登録されている。また、ポインタは実行管理テーブル１４−１を指している。よって、実行管理テーブル１４−１が“現行”用となっている。よって、この状態では、ＰＬＣ２では、定周期で制御プログラムを実行する際には、機械語オブジェクト２−１を実行することになる。
【００９６】
そして、その後、任意のときに、上記機械語オブジェクト１−１の更新版である機械語オブジェクト１−１’が、開発支援装置２０で生成されてＰＬＣ１にダウンロードされたとする。更に、開発支援装置２０では、上記機械語オブジェクト２−１の更新版である機械語オブジェクト２−１’も生成されてＰＬＣ２にダウンロードされたとする。
【００９７】
この場合、ＰＬＣ１では、この機械語オブジェクト１−１’をメモリ１２に追加格納すると共に、この機械語オブジェクト１−１’が、既存の機械語オブジェクト１−１の更新版であるか否かを判別する。これは、例えば上記“管理番号”を用いる。つまり、ダウンロードされた制御プログラムの管理番号が、メモリ１２に格納されている既存の制御プログラムの管理番号と同じであれば、更新版であると判定する。
【００９８】
上記の例では、機械語オブジェクト１−１の管理番号と、機械語オブジェクト１−１’の管理番号とは同一であるので（‘１’である）、これによって、新たな機械語オブジェクト１−１’が、既存の機械語オブジェクト１−１の更新版であると判定できる。そして、既存の制御プログラムの更新版であると判定された場合には、その格納アドレスは、“現行”用ではなく“保持”用の実行管理テーブル１４に登録する。よって、機械語オブジェクト１−１’の格納アドレスは、図７に示すように、実行管理テーブル１４−２に登録する。
【００９９】
同様に、ＰＬＣ２においては、上記機械語オブジェクト２−１’をメモリ１２に追加格納すると共に、この新たな機械語オブジェクト２−１’が、既存の機械語オブジェクト２−１の更新版であることから、図７に示すようにその格納アドレスは“保持”用である実行管理テーブル１４−２に登録する。
【０１００】
以上の処理によって図７に示す状態になるが、この状態では未だ更新版のプログラムは実行されない。すなわち、図７に示すように、ＰＬＣ１，ＰＬＣ２の何れにおいても、上記“ポインタ”は実行管理テーブル１４−１を指しているので、定周期で上記既存の機械語オブジェクト１−１、２−１が実行されることになる。
【０１０１】
ここで、従来では、その後に、不図示の支援装置等がＰＬＣ１、ＰＬＣ２に対してプログラム更新指示を通知することで、ＰＬＣ１，ＰＬＣ２の何れにおいても、上記“ポインタ”が実行管理テーブル１４−２を指す状態に切り替わり、以って実行管理テーブル１４−２が“現行”用となる。
【０１０２】
これより、その後は定周期の制御プログラム実行時毎に、実行管理テーブル１４−２を参照して機械語オブジェクトを実行することになる。よって、ＰＬＣ１では更新版の機械語オブジェクト１−１’が実行されるようになる。同様に、ＰＬＣ２では更新版の機械語オブジェクト２−１’が実行されるようになる。しかし、この場合、機械語オブジェクト２−１’が機械語オブジェクト１−１’よりも先に実行されると、問題が生じる場合がある。これは、特に更新版で新たな変数が追加された場合に、問題が生じる。例えば不図示の変数３が新たに追加されると共に、その書込側ＰＬＣがＰＬＣ１、読込側ＰＬＣがＰＬＣ２であるものとする。仮に、変数３に新たなアドレス１００４が割り当てられた場合、最初は、アドレス１００４の格納データは不定状態などである。この為、機械語オブジェクト２−１’が先に実行されると、この不定データが読み込まれることになり、以ってＰＬＣ２が異常動作する可能性があった。
【０１０３】
これに対して、本手法では、例えば図８に示すように管理制御することで、上記問題の発生を防止することができる。
以下、図８を参照して本手法によるＰＬＣ１０側の動作について説明するが、その前に本手法による開発支援装置２０側の動作について説明する。
【０１０４】
本手法による開発支援装置２０では、例えば上記機械語オブジェクト１−１’、機械語オブジェクト２−１’を、ＰＬＣ１，ＰＬＣ２にそれぞれ配信後、これらＰＬＣ１．ＰＬＣ２全てに上記プログラム更新指示を通知するのではなく、書込側ＰＬＣに対してのみ通知する。書込側ＰＬＣは、上記共通変数管理表２２を参照することで判別できる。つまり、共通変数管理表２２において、ダウンロードする機械語オブジェクトに係わるレコードにおいて「Ｗ」となっているＰＬＣ名４５を取得し、これを書込側ＰＬＣと認定する。
【０１０５】
ここで、図４（ｄ）に示す例では、機械語オブジェクト１−１に関しては、変数１、変数２のどちらも、ＰＬＣ名４５におけるＰＬＣ１に対して「Ｗ」なっており、つまりＰＬＣ１が書込側ＰＬＣとなっている。図示していないが、更新版である機械語オブジェクト１−１’に関してもこの設定は継承されると共に、上記のように追加された変数３もＰＬＣ１が書込側ＰＬＣとなっている（そうなるようにプログラマが制御プログラムを作成することになっているものとする）。
【０１０６】
また、図４（ｄ）に示す例では、機械語オブジェクト２−１に関しては、変数１に関して、ＰＬＣ名４５におけるＰＬＣ１に対して「Ｗ」なっており、つまりＰＬＣ１が書込側ＰＬＣとなっている。図示していないが、更新版である機械語オブジェクト２−１’に関してもこの設定は継承されると共に、上記のように追加された変数３もＰＬＣ１が書込側ＰＬＣとなっている。
【０１０７】
上記のように、今回ダウンロードされるのは機械語オブジェクト１−１’、２−１’であるが、どちらもＰＬＣ１が書込側ＰＬＣとなっているので、ＰＬＣ１に対してのみ上記プログラム更新指示を通知することになる。
【０１０８】
上記例では、開発支援装置２０は、更に、ＰＬＣ１，ＰＬＣ２それぞれに応じた機械語オブジェクト関連表２４を生成して配信する。この関連表２４生成処理は、図９に示し後に説明するものとし、ここではＰＬＣ１に関する関連表２４として、図示のように機械語オブジェクト１−１’に係わる関連ＰＬＣ６２が「ＰＬＣ２」である関連表２４が生成されて、ＰＬＣ１に配信されたものとして説明する。
【０１０９】
上記のように、ＰＬＣ１は、図８に示す内容の関連表２４を受け取ると共に、プログラム更新指示を受信する。尚、関連表２４は、例えば図８に示すように、機械語オブジェクト名６１と関連ＰＬＣ６２から成る。機械語オブジェクト名６１の機械語オブジェクトに関して読込側ＰＬＣとなるＰＬＣの識別情報等が、関連ＰＬＣ６２に登録される。
【０１１０】
ＰＬＣ１は、上記プログラム更新指示を受信すると、まず、上記既存技術と同様にして、実行管理テーブル１４の切替えを行い、以って実行する制御プログラムの切替えを実現する。つまり、ポインタが、実行管理テーブル１４−１を指す状態から実行管理テーブル１４−２を指す状態へと切り替える。これによって、切替え後は、定周期で上記機械語オブジェクト１−１’を実行するようになる。
【０１１１】
そして、ＰＬＣ１は、上記切り替え後に機械語オブジェクト１−１’を最低でも１回は実行完了したら、上記関連表２４を参照して、切替メッセージの送信先を判別する。これは、上記最低１回は実行した新たな機械語オブジェクトに対応する関連ＰＬＣ６２を、送信先と判定する。よって、この例では、機械語オブジェクト１−１’に対応する関連ＰＬＣ６２である“ＰＬＣ２”が、送信先であると認識し、ＰＬＣ２に対して切替メッセージを送信する。
【０１１２】
上記切替メッセージを受信したＰＬＣ２は、既存の上記プログラム更新指示を受信した場合と略同様の処理を行う。すなわち、実行管理テーブル１４の切替えを行い、以って実行する制御プログラムの切替えを実現する。つまり、ポインタが、実行管理テーブル１４−１を指す状態から実行管理テーブル１４−２を指す状態へと切り替える。これによって、切替え後は、定周期で上記機械語オブジェクト２−１’を実行するようになる。そして、このときには上記のように機械語オブジェクト１−１’は最低１回は実行完了しているので、上記変数３に関しても不定データを読み出すようなことはない。
【０１１３】
尚、上記切替メッセージは、上記既存のプログラム更新指示と同じものであっても構わない。換言すれば、上記の例では、ＰＬＣ１が、開発支援装置２０の代わりに、ＰＬＣ２へプログラム更新指示を出すようにしても構わない。あるいは、この例に限らず、ＰＬＣ１がＰＬＣ２へプログラム更新指示を出すことを開発支援装置２０に要求し、これに応じて開発支援装置２０がＰＬＣ２へプログラム更新指示を送信するようにしてもよい。
【０１１４】
図９は、開発支援装置２０における関連表２４の生成処理フローチャート図である。この処理は、不図示の関連表生成機能部が実行する。尚、関連表生成機能部は、コンパイラ２１に含まれていてもよいし、コンパイラ２１以外の機能としてもよいが、何れにしても開発支援装置２０が有する機能である。
【０１１５】
尚、関連表２４は、上記の通り各ＰＬＣ毎に用意されるものであり、上記の例ではＰＬＣ１用の関連表２４、ＰＬＣ２用の関連表２４、ＰＬＣ３用の関連表２４が、予め用意されている。但し、これら各関連表２４は、初期状態では何もデータは存在しておらず、後述するステップＳ１５、Ｓ１６の処理が実行されることでデータが登録されるものである。
【０１１６】
上記コンパイラ２１が上記共通変数管理表２２を生成した後（ステップＳ１１）などに、関連表２４の生成処理を開始する。
まず、共通変数管理表２２を読込み（ステップＳ１２）、最初の処理対象を決定する（ステップＳ１３）。
【０１１７】
尚、図９の処理は基本的に、共通変数管理表２２の先頭レコードから順に、各レコードを順次処理対象レコードとし、各処理対象レコード毎にその転送先ＰＬＣ４２を、処理対象ＰＬＣする。そして、処理対象レコードについてステップＳ１４〜Ｓ１７の処理を実行する。最初の処理対象レコードは先頭レコードであり、その転送先ＰＬＣ４２が処理対象ＰＬＣとなる。図４（ｄ）の例では、ＰＬＣ１が処理対象ＰＬＣとなる。
【０１１８】
ステップＳ１４〜Ｓ１７の処理では、まず、処理対象レコードにおいて、処理対象ＰＬＣの変数アクセス方法が「Ｗ」（書込側）であるか否かをチェックする（ステップＳ１４）。
【０１１９】
ここで、図４（ｄ）の例では、先頭レコードは、プログラム名４１が“機械語オブジェクト１−１”、転送先ＰＬＣ４２が“ＰＬＣ１”、変数名４３が“変数１”、コモンメモリアドレス４４が“１０００”番地となっている。更に、各ＰＬＣ名４５の欄においては、ＰＬＣ１が「Ｗ」で、ＰＬＣ２が「Ｒ」となっている。つまり、機械語オブジェクト１−１の変数１に関しては、転送先であるＰＬＣ１が書込側ＰＬＣであり、ＰＬＣ２が読込側ＰＬＣとなっている。これは、つまり、処理対象ＰＬＣ（＝ＰＬＣ１）が「Ｗ」（書込側）となっているので、上記ステップＳ１４の判定はＹＥＳとなり、ステップＳ１５へ移行する。
【０１２０】
ステップＳ１５、Ｓ１６では、処理対象ＰＬＣ用の関連表２４に、処理対象レコードに基づく所定情報が登録される。すなわち、処理対象レコードのプログラム名４１を、処理対象ＰＬＣ用の関連表２４の機械語オブジェクト名６１に格納する（ステップＳ１５）。更に、処理対象レコードに係わる読込側ＰＬＣを、処理対象ＰＬＣ用の関連表２４の関連ＰＬＣ６２に格納する（ステップＳ１６）。
【０１２１】
最初は、ＰＬＣ１用の関連表２４に、先頭レコードに基づく所定情報が登録されることになる。すなわち、まず、先頭レコードのプログラム名４１（＝機械語オブジェクト１−１）を、ＰＬＣ１用の関連表２４の機械語オブジェクト名６１に格納する（ステップＳ１５）。これより、ＰＬＣ１用の関連表２４は、例えば図１０（ａ）に示す状態になる。
【０１２２】
続いて、先頭レコードに係わる読込側ＰＬＣは、上記の通りＰＬＣ２であるので、ＰＬＣ１用の関連表２４の関連ＰＬＣ６２に、ＰＬＣ２を登録する。これより、ＰＬＣ１用の関連表２４は、例えば図１０（ｂ）に示す状態になる。
【０１２３】
そして、次のレコードを新たな処理対象レコードにして（ステップＳ１７）、ステップＳ１４に戻る。但し、次のレコードが無い場合には（ステップＳ１８，ＮＯ）、本処理を終了する。次のレコードがある場合に（ステップＳ１８，ＹＥＳ）、上記のようにステップＳ１４に戻ることになる。
【０１２４】
尚、ステップＳ１４の判定がＮＯの場合には、ステップＳ１５、Ｓ１６の処理を実行することなく、ステップＳ１７の処理へ移行する。
ここで、上記先頭レコードに関する処理が終わったならば、次の処理対象レコードは２番目のレコードとなる。図４（ｄ）の例では、２番目のレコードは、プログラム名４１が“機械語オブジェクト１−１”、転送先ＰＬＣ４２が“ＰＬＣ１”、変数名４３が“変数２”、コモンメモリアドレス４４が“１００２”番地となっている。更に、各ＰＬＣ名４５の欄においては、ＰＬＣ１が「Ｗ」であるが、「Ｒ」となっているＰＬＣは存在しない。
【０１２５】
この例の場合、ステップＳ１４の判定はＹＥＳとなるので、ステップＳ１５、Ｓ１６の処理が行われるが、ステップＳ１５ではＰＬＣ１用の関連表２４に既に“機械語オブジェクト１−１”が存在するので、何も処理を行わない。更に、ステップＳ１６では上記のように書込側ＰＬＣが無いので、何も処理を行わない。その結果、ＰＬＣ１用の関連表２４は、図１０（ｂ）に示す状態のままである。
【０１２６】
ここで、仮に、図４（ｄ）の例において２番目のレコードにおいて各ＰＬＣ名４５の欄でＰＬＣ３に対して「Ｒ」となっていた場合には、ＰＬＣ１用の関連表２４は、図１０（ｂ）に示す状態に対して、関連ＰＬＣ６２の欄に更に“ＰＬＣ３”が追加されることになる。この例では、後にＰＬＣ１において機械語オブジェクト１−１への切替と最低１回実行された後に、上記切替メッセージがＰＬＣ２とＰＬＣ３とに送信されることになる。
【０１２７】
ここで、上記２番目のレコードに関する処理が終わったならば、次の処理対象レコードは３番目のレコードとなる。図４（ｄ）の例では、３番目のレコードは、プログラム名４１が“機械語オブジェクト２−１”、転送先ＰＬＣ４２が“ＰＬＣ２”、変数名４３が“変数１”、コモンメモリアドレス４４が“１０００”番地となっている。更に、各ＰＬＣ名４５の欄においては、ＰＬＣ１が「Ｗ」、ＰＬＣ２が「Ｒ」となっている。よって、この例では、ステップＳ１４の判定がＮＯとなるので、ＰＬＣ２用の関連表２４には、データは登録されないことになる。
【０１２８】
図１１は、制御プログラム更新の際の開発支援装置２０の処理フローである。
図示の処理は、開発支援装置２０において上記更新版の機械語オブジェクトの生成完了と上記各ＰＬＣ用の各関連表２４の生成とが終了した後に実行される。
【０１２９】
まず、各ＰＬＣ１０に対して、そのＰＬＣ用の上記更新版の機械語オブジェクトを送信する（ステップＳ２１）。これによって、各ＰＬＣは、受信した更新版の機械語オブジェクトを、上記図６〜図８で説明したように、メモリ１２に格納するが、未だ実行はしない。
【０１３０】
開発支援装置２０は、続いて、各ＰＬＣに対して、そのＰＬＣ用に生成した上記関連表２４を送信する（ステップＳ２２）。これによって各ＰＬＣは、受信した関連表２４を記憶する。
【０１３１】
そして、開発支援装置２０は、書込側ＰＬＣに対して上記プログラム更新指示を送信する（ステップＳ２３）。書込側ＰＬＣは、上記共通変数管理表２２を参照することで判別できる。つまり、「Ｗ」が記述されている箇所のＰＬＣ名４５が、書込側ＰＬＣである。尚、切替コマンドは、上記プログラム更新指示に相当する。
【０１３２】
これより、図４（ｄ）に示す例では、ＰＬＣ１のみが書込側ＰＬＣと判別されて、ＰＬＣ１に対してのみ上記プログラム更新指示を送信する。これによって、ＰＬＣ１は、例えば図８で説明したように、自己の制御プログラム更新処理を行い、更に更新版の制御プログラムを最低１回は実行した後に、関連表２４に基づいてこの更新版の制御プログラムの読込側ＰＬＣに対して、切替コマンドを送信する。この様な動作を実現する処理例を、図１２に示す。
【０１３３】
図１２は、プログラム更新に係わる各ＰＬＣの処理フローチャート図である。
尚、図１２の説明では、上記プログラム更新指示は、上記切替コマンドと同一であるとすると共に、“切替コマンド”の名称で統一するものとする。よって、以下の図１２の説明においては、開発支援装置２０も切替コマンドを送信することになる。尚、切替コマンドを受信したＰＬＣ１０は、その送信元が開発支援装置２０であるか他のＰＬＣ１０であるかを判断する必要はない。尚、図１２の説明以降の説明においても、“切替コマンド”の名称で統一して説明する場合があるものとする。
【０１３４】
図１２において、開発支援装置２０によって上記ステップＳ２１で送信された機械語オブジェクトを受信すると、これをメモリ１２に格納する（ステップＳ３１）。受信した機械語オブジェクトのメモリ格納処理は、既に述べた通りであり、更新版の場合には、その時点での保持用の実行管理テーブル１４−２に、格納アドレスを登録する。
【０１３５】
また、開発支援装置２０が上記ステップＳ２２で送信した関連表２４を受信すると、これを所定の記憶領域に記憶する（ステップＳ３２）。
そして、切替コマンドの受信待ち状態となり、切替コマンドを受信したらステップＳ３４以降の処理を実行する（ステップＳ３３）。尚、図８の例では、ＰＬＣ１は開発支援装置２０からの切替コマンドを受信することになり、ＰＬＣ２はＰＬＣ１が送信する切替コマンドを受信することになる。
【０１３６】
切替コマンドを受信したら、まず、機械語オブジェクトの切り替え処理を行う（ステップＳ３４）。これは、既に図７等で説明したように、上記“ポインタ”を切替えるものである。これは、上記“現行”用の実行管理テーブル１４を切替えることを意味する。“ポインタが”例えば上記実行管理テーブル１４−１を指している状態であった場合、上記実行管理テーブル１４−２を指すように切替える。これによって、実行管理テーブル１４−２が新たな“現行”用となる。そして、これによって、その後は、定周期で制御プログラムを実行する際に、更新版の機械語オブジェクトが実行されることになる。
【０１３７】
これによって更新版の機械語オブジェクトが実行されたら（ステップＳ３５）、その実行完了を確認後（ステップＳ３６）、関連表２４を参照することで、当該更新版の機械語オブジェクトの読込側ＰＬＣに対して、切替コマンドを送信する（ステップＳ３７）。これは、関連表２４において上記実行した機械語オブジェクトの機械語オブジェクト名６１に対応する関連ＰＬＣ６２に対して、切替コマンドを送信するものである。例えば図８に示す関連表２４の例の場合、ＰＬＣ１は、機械語オブジェクト１−１’を実行完了したら、ＰＬＣ２に対して切替コマンドを送信する。
【０１３８】
ここで、この切替コマンドを受信したＰＬＣ２も、図１２の処理を実行することになるが、上記の例ではＰＬＣ２用の関連表２４には何もデータが無いので、ＰＬＣ２は他のＰＬＣ１０に対して切替コマンドを送信することはない。
【０１３９】
尚、図示していないが、仮に、ＰＬＣ１に対して更に不図示の機械語オブジェクト１−２’もダウンロードされると共に、関連表２４には更に機械語オブジェクト名６１が“機械語オブジェクト１−２”で関連ＰＬＣ６２が例えば“ＰＬＣ３”であるレコードが追加されているものとする。この例の場合、ＰＬＣ１は、たとえば、まず、機械語オブジェクト１−１’を実行完了したら、ＰＬＣ２に対して切替コマンドを送信し、その後に、更に、機械語オブジェクト１−２’を実行完了したら、ＰＬＣ３に対して切替コマンドを送信することになる。この様に、各機械語オブジェクト別に、切替指示の制御を行うことも可能である。
【０１４０】
尚、図１０に示す例のように、各関連ＰＬＣ６２は、各機械語オブジェクト名６１に対応して格納されるものである。これより、ステップＳ３７で決定する送信先ＰＬＣは、更新版の機械語オブジェクトに関連するＰＬＣとなる。つまり、仮にＰＬＣ１には更に不図示の機械語オブジェクト１−２が格納されているが、今回の更新では機械語オブジェクト１−２の更新版は作成されていなかった場合には、機械語オブジェクト１−２に関連するＰＬＣには、切替コマンドは送信されないことになる。
【０１４１】
また、これに伴って、上記“現行”と“保持”の２種類の実行管理テーブル１４と“ポインタ”も、各機械語オブジェクト毎に設けられるようにしてもよい。つまり、この場合、図５に示すような状態にはならないことになる。つまり、図５では１つの実行管理テーブル１４−１に複数の機械語オブジェクトの格納アドレスが登録されているが、１つのみしか登録されないことになる。
【０１４２】
尚、上述した説明は一例であり、この例に限らない。例えば、上記切替コマンドを送信し得るのは、開発支援装置２０のみであるものとしてもよい。この場合、上記ステップＳ３７の処理の代わりに、開発支援装置２０に対してプログラム更新・実行完了した旨や、コマンド送信先とするＰＬＣを通知する。上記の例では、ＰＬＣ１が開発支援装置２０に対してコマンド送信先としてＰＬＣ２を通知する。これより、開発支援装置２０がＰＬＣ２に対して上記切替コマンドを送信するように構成してもよい。
【０１４３】
あるいは、図８の例では、切替コマンドをメッセージ送信していたが、この例に限らず、例えばコモンメモリ１３を利用する方法等であってもよい。
図１３は、本例のプログラマブルコントローラシステムの機能ブロック図である。
【０１４４】
図示のプログラマブルコントローラシステムは、図１に示す開発支援装置２０と各ＰＬＣ１０の機能ブロック図である。
図示の例では、開発支援装置２０の各処理機能は、コンパイラ部７１、転送・通知部７２、切替指示部７３等である。
【０１４５】
コンパイラ部７１は、各プログラマブルコントローラ用の制御プログラムのソースコードであって上記共通変数が含まれる任意のソースコードを、コンパイルして機械語オブジェクトに変換する。
【０１４６】
尚、図１で説明したように、上記ソースコードをユーザに任意に作成させる為の支援処理機能もあってよいが、この機能は必須ではなく、例えば、他の任意の情報処理装置等で作成されたソースコードを、開発支援装置２０に格納するものであっても構わない。
【０１４７】
転送・通知部７２は、各プログラマブルコントローラに対して、そのプログラマブルコントローラ用の前記機械語オブジェクトを転送すると共に、前記コンパイル処理に伴って得られる所定情報に基づいて、該転送する機械語オブジェクトに係わる前記共通変数の読込側のプログラマブルコントローラを、通知する。尚、これは、例えば、上記機械語オブジェクト関連表２４を作成して通知するものである。
【０１４８】
また、上記所定情報とは、例えば上記共通変数管理表２２等である。あるいは更に上記ソースコード管理表２３等があってもよい。
切替指示部７３は、上記コンパイル処理に伴って得られる所定情報に基づいて、共通変数の書込側のプログラマブルコントローラを認識して、該書込側のプログラマブルコントローラに対して切替指示を通知する。
【０１４９】
また、プログラマブルコントローラ（ＰＬＣ）１０は、切替部８１、切替制御部８２等を有する。
切替部８１は、任意の切替指示に応じて、既存の機械語オブジェクト実行状態から前記転送された新たな機械語オブジェクト実行状態に切替える。
【０１５０】
切替制御部８２は、該新たな機械語オブジェクトを１回以上実行後に、転送・通知手段から通知された読込側のプログラマブルコントローラに対して、切替指示を通知する。あるいは支援装置から切替指示を通知させる。
【０１５１】
上記切替指示は、例えば上述した切替メッセージであり、上述したように基本的には、最初は開発支援装置２０が任意の共通変数に係わる書込側ＰＬＣにのみ切替メッセージを通知し、当該任意の共通変数に係わる書込側ＰＬＣが、自己の新たな機械語オブジェクトを実行完了後に、読込側ＰＬＣに対して切替メッセージを送信する。但し、上記の通り、この例に限らない。
【０１５２】
以上説明したように、本手法によれば、コモンメモリ経由で複数のＰＬＣが連携して動作するプログラマブルコントローラシステムにおいて稼働中のＰＬＣのプログラム更新を実施する場合に、共通変数の有効性をシステムとして保障することができる。“共通変数の有効性を保障する”とは、各共通変数毎に、その共通変数の読込側ＰＬＣがそのデータを読込む際には常にそのデータが有効なものであることが保障されることである。有効なデータとは、少なくとも不定データや一律‘０’のデータ等では無いことを意味する。
【０１５３】
また、従来でも、“共通変数の有効性を保障する”ことは可能であったが、その為には上述したように、フラグを用いたり、その為のプログラムが別途必要になっており、ユーザのプログラミングが煩雑であり、人的ミスが生じる可能性があり、また、フラグの為に共通メモリの記憶領域を浪費する等の問題が生じる。本手法では、この様な問題が生じることなく、“共通変数の有効性を保障する”ことができる。すなわち、ユーザの手間が掛かることなく、プログラミングが煩雑となることなく、プログラミングにおいて人的ミスが生じる危険性がなく、更に、無駄なフラグが必要無くなり、有限な共有メモリの記憶領域を有効に活用できる。
【符号の説明】
【０１５４】
１０  ＰＬＣ（プログラマブルコントローラ）
１１  管理部
１２  メモリ（プログラム用）
１３  コモンメモリ
１４  実行管理テーブル
２０  開発支援装置
２１  コンパイラ
２２  共通変数管理表
２３  ソースコード管理表
２４  機械語オブジェクト関連表
３１  番号
３２  ＰＬＣ
３３  ソースコード名
３４  機械語オブジェクト名
４１  プログラム名
４２  転送先ＰＬＣ
４３  変数名
４４  コモンメモリアドレス
４５  各ＰＬＣ名
６１  機械語オブジェクト名
６２  関連ＰＬＣ
【図１】
2015005224.tif 000003
【図２】
2015005224.tif 000004
【図３】
2015005224.tif 000005
【図４】
2015005224.tif 000006
【図５】
2015005224.tif 000007
【図６】
2015005224.tif 000008
【図７】
2015005224.tif 000009
【図８】
2015005224.tif 000010
【図９】
2015005224.tif 000011
【図１０】
2015005224.tif 000012
【図１１】
2015005224.tif 000013
【図１２】
2015005224.tif 000014
【図１３】
2015005224.tif 000015
【図１４】
2015005224.tif 000016