(57)【要約】【課題】本発明は、回路図の形式で表現される制御プログラムの作成効率を向上させることが可能な制御プログラム編集装置および制御プログラム編集プログラムを提供することを目的とする。【解決手段】本発明による制御プログラム編集装置は、制御プログラムの編集時に所定の回路素子を移動させた場合において、所定の回路素子が属する所定のネットにおける回路素子の実行順序が変動したか否かを検出するネット内回路素子実行順序変動検出部４と、所定の回路素子を含むネットの実行順序が変動したか否かを検出するネット実行順序変動検出部５と、制御プログラム全体において入力の取得先が変動した回路素子が存在するか否かを検出する入力取得先変動検出部６と、入力取得先変動検出部６にて入力の取得先が変動した回路素子の存在が検出されると、当該回路素子の入力の取得先が変動したことを通知する入力取得先変動通知部７とを備える。【選択図】図１
2013171358.tif 000002
【特許請求の範囲】
【請求項１】
命令を示す回路素子と、複数の前記回路素子間を配線で接続して構成する少なくとも１つ以上のネットとを含む回路図の形式で表現される制御プログラムを編集する制御プログラム編集装置であって、
前記制御プログラムの編集時に所定の前記回路素子を移動させた場合において、
前記所定の回路素子が属する所定の前記ネットにおける前記回路素子の実行順序が変動したか否かを検出するネット内回路素子実行順序変動検出部と、
前記所定の回路素子を含む前記ネットの実行順序が変動したか否かを検出するネット実行順序変動検出部と、
前記ネット内回路素子実行順序変動検出部にて前記回路素子の実行順序の変動が検出されるか、または、前記ネット実行順序変動検出部にて前記ネットの実行順序の変動が検出されると、前記制御プログラム全体において入力の取得先が変動した前記回路素子が存在するか否かを検出する入力取得先変動検出部と、
前記入力取得先変動検出部にて入力の取得先が変動した前記回路素子の存在が検出されると、当該回路素子の入力の取得先が変動したことを通知する入力取得先変動通知部と、
を備える、制御プログラム編集装置。
【請求項２】
前記入力取得先変動通知部は、入力の取得先が変動した前記回路素子について、変動前の入力の取得先と変動後の入力の取得先とを通知することを特徴とする、請求項１に記載の制御プログラム編集装置。
【請求項３】
前記入力取得先変動通知部は、前記回路素子の入力の取得先が変動したことを了承するか否かの問い合わせを通知することを特徴とする、請求項１または２に記載の制御プログラム編集装置。
【請求項４】
前記ネット内回路素子実行順序変動検出部は、前記制御プログラムを機械語プログラムに変換する外部の制御プログラム処理装置と接続され、
前記ネット内回路素子実行順序変動検出部は、前記制御プログラム処理装置にて変換された前記機械語プログラムに基づいて、前記所定のネットにおける前記回路素子の実行順序を取得することを特徴とする、請求項１ないし３のいずれかに記載の制御プログラム編集装置。
【請求項５】
コンピュータを制御プログラム編集装置として機能させるための制御プログラム編集プログラムであって、
前記制御プログラム編集装置は、命令を示す回路素子と、複数の前記回路素子間を配線で接続して構成する少なくとも１つ以上のネットとを含む回路図の形式で表現される制御プログラムを編集し、
前記制御プログラム編集プログラムは、前記制御プログラムの編集時に所定の前記回路素子を移動させた場合において、
（ａ）前記所定の回路素子が属する所定の前記ネットにおける前記回路素子の実行順序が変動したか否かを検出する手順と、
（ｂ）前記所定の回路素子を含む前記ネットの実行順序が変動したか否かを検出する手順と、
（ｃ）前記手順（ａ）にて前記回路素子の実行順序の変動が検出されるか、または、前記手順（ｂ）にて前記ネットの実行順序の変動が検出されると、前記制御プログラム全体において入力の取得先が変動した前記回路素子が存在するか否かを検出する手順と、
（ｄ）前記手順（ｃ）にて入力の取得先が変動した前記回路素子の存在が検出されると、当該回路素子の入力の取得先が変動したことを通知する手順と、
を前記コンピュータに実行させることを特徴とする、制御プログラム編集プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プラントや工場を監視制御する際に利用されるＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）等のコントローラ上の制御プログラムを編集する制御プログラム編集装置に関する。具体的には、回路図の形式で表現される制御プログラムの編集に関し、特にユーザの意図に反して制御プログラムの出力の変動を引き起こすような、制御プログラム中の命令の移動操作を防止する技術に関する。また、本発明の典型的な利用方法としては、本発明の技術を利用した制御プログラム解析装置が、命令の移動によって発生する制御プログラムの出力の変動について、当該変動が意図したものであるか否かをユーザに確認するダイアログをコンピュータディスプレイ上に表示する方法がある。
【背景技術】
【０００２】
制御プログラム（以下、単にプログラムとも称する）向けのプログラミング言語では、回路図の形でプログラムを表現することが一般的である。例えば、古くから普及しているラダー言語は、リレー回路の形でプログラムを表現する言語である。また、近年普及が進んでいるＦＢＤ（Ｆｕｎｃｔｉｏｎ  Ｂｌｏｃｋ  Ｄｉａｇｒａｍ、ファンクションブロック図）言語は、演算命令や制御命令等の命令を回路素子（以下、ＦＢとも称する）に見立て、ＦＢ間を配線でつなぐことによって命令間のデータの流れを表現するプログラミング言語である。
【０００３】
ＦＢＤ言語の標準を定めた非特許文献１によれば、ＦＢＤ言語における命令（ＦＢ）の実行順序は、ＦＢの回路図（以下、ＦＢＤとも称する）上における座標位置に依存して定まる。具体的には、ＦＢＤ内のネット（ＦＢおよび変数をノード、配線を辺とする連結グラフ）のうち、実行可能でかつＦＢＤの左上隅に最も近いＦＢを含むネットから順に実行される。ここで、ＦＢが実行可能とは、ＦＢへの入力値が確定していることを示し、ＦＢＤの左上隅に最も近いＦＢとは、Ｙ座標が最も上にあるＦＢのうち、Ｘ座標が最も左にあるものを示す。なお、ネットの実行については、所定のネットのすべてのＦＢが実行されるまでは他のネットのＦＢは実行されない。また、ネット内のＦＢの実行順序は、実行可能な状態からＦＢが実行されるという条件を満たす限り、ＦＢＤ言語処理装置が自由に定めてよい。
【０００４】
命令の実行順序はＦＢの座標位置に応じて定まることから、ＦＢＤの見栄えを改善する等の目的でユーザがＦＢを不用意に移動させると、ユーザが意図していないにも関わらず、ＦＢの実行順序が変動してプログラムの出力が変わってしまうことがある。その一例として、図２４および図２５を用いて説明する。図２４，２５において、１０１〜１０４はＦＢ、１０５〜１０９はＦＢに入力値を与える変数、１１０〜１１２はＦＢの出力値が設定される変数である。また、各ＦＢに記される数字はＦＢの実行順序である。今、ユーザがＦＢ１０１とＦＢ１０３とを縦方向に整列させる目的で、ＦＢ１０３を図２４に示す位置から図２５に示す位置まで移動させたとする。この時、ＦＢＤ言語処理装置の実装によっては、ＦＢの実行順序が図２４に示すＦＢ１０１、１０２、１０３、１０４の順から、図２５に示すＦＢ１０１、１０３、１０２、１０４の順に変動する可能性がある。ＦＢＤ言語処理装置のこのような仕様は、非特許文献１で定められたＦＢＤ言語の標準に違反しない。しかし、ＦＢ１０３の入力となる変数１０９の値は、図２４では変数１１１の値であったのに対し、図２５では変数１１０の値となるため、図２４に示すＦＢＤと図２５にＦＢＤとでは実行結果が異なる。ユーザがＦＢ１０３を移動させた目的がＦＢ１０１とＦＢ１０３とを縦方向に整列させることであることを考えると、ＦＢ１０３の移動によって不具合を発生させたことになるが、ユーザが不具合の発生に気付くのは困難である。
【０００５】
ＦＢの移動によって入力となる変数の値が変わるのは、移動されたＦＢ自身とは限らない。その一例として、図２６および図２７を用いて説明する。図２６，２７において、２０１〜２０４はＦＢ、２０５〜２０９はＦＢに入力値を与える変数、２１０〜２１１はＦＢの出力値が設定される変数である。また、各ＦＢに記される数字はＦＢの実行順序である。今、ユーザがＦＢ２０１とＦＢ２０３とを縦方向に整列させる目的で、ＦＢ２０３を図２６に示す位置から図２７に示す位置まで移動させたとする。この時、ＦＢＤ言語処理装置の実装によっては、ＦＢの実行順序が図２６に示すＦＢ２０１、２０２、２０３、２０４の順から、図２７に示すＦＢ２０１、２０３、２０２、２０４の順に変動する可能性がある。その場合、ＦＢ２０２の入力となる変数２０７の値が変動することになる。ＦＢＤ言語ではプログラムが周期的に繰り返し実行されるため、図２６に示す変数２０７の値には、変数ｘの前周期での最終状態（つまり、前周期での変数２１１の値）が用いられる。一方、図２７の状態では同じ周期での変数２１１の値となるため、図２６のＦＢＤと図２７のＦＢＤとでは実行結果が異なることになる。ユーザがＦＢ２０３を移動させた目的を考えると、ＦＢ２０３の移動によってＦＢ２０２に関する不具合を発生させたことになる。ユーザがこの不具合の発生に気付くのは、図２４，２５に示した例よりもさらに困難である。
【０００６】
また、フィードバックループを構成するＦＢを移動させた場合でも、フィードバックループの出力が変わってしまうことがある。ＦＢＤ言語によるフィードバックループの一例を図２８および図２９を用いて説明する。図２８，２９において、３０１〜３０２はＦＢ、３０３〜３０４はＦＢに入力値を与える変数、３０５はＦＢの出力値が設定される変数、３０６はＦＢ３０２の出力をＦＢ３０１の入力へ接続する配線、３０７はＦＢ３０１の出力をＦＢ３０２の入力へ接続する配線である。また、各ＦＢに記される数字はＦＢの実行順序である。図２８，２９におけるフィードバックループは、ＦＢ３０１、配線３０７、ＦＢ３０２、配線３０６から構成される。ＦＢＤ言語ではプログラムが周期的に実行されることを利用してフィードバック処理を実現する。具体的には、第ｎ周期にプログラムを実行した際のＦＢ３０１（あるいはＦＢ３０２）の出力値を記録しておき、第ｎ＋１周期の実行では記録しておいた値を配線３０７（あるいは配線３０６）の値として使用する。この時、いずれのＦＢの出力を記録して次周期で使用するかは、ＦＢの実行順序によって定まる。今、ユーザがＦＢ３０２を図２８に示す位置から図２９に示す位置まで移動したとする。この時、ＦＢＤ言語処理装置の実装によっては、ＦＢの実行順序が図２８に示すＦＢ３０１、３０２の順から、図２９に示すＦＢ３０２、３０１の順に変動する可能性がある。つまり、次周期で使用するために記録しておく値が、ＦＢ３０２の出力値からＦＢ３０１の出力値に変動する可能性がある。このような変動はプログラムの実行結果を変えてしまう場合があるが、ユーザがそうした可能性に気付くのは非常に困難である。
【０００７】
さらには、ＦＢの移動によってネットの実行順序が変動した結果、プログラムの実行結果が変わる場合もある。その一例として、図３０および図３１を用いて説明する。図３０，３１において、４０１〜４０２はネット、４０３は移動されるＦＢ、４０４〜４０９はＦＢに入力値を与える変数、４１０〜４１１はＦＢの出力値を保持する変数である。また、ネットの実行順序は、非特許文献１で定められたＦＢＤ言語の標準により、図３０ではネット４０１、ネット４０２の順である。この時、変数４０７の値にはネット４０１中の変数４１０の値が用いられる。今、ユーザがＦＢ４０３を図３０に示す位置から図３１に示す位置まで移動させたとする。この時、ネットの実行順序は、非特許文献１で定められたＦＢＤ言語の標準により、ＦＢ４０２、４０１の順に変動する。このため、変数４０７の値は変数４１０の値ではなくなる。この場合についても、ユーザが変数４０７の値の取得元の変動に気付くのは容易ではない。
【０００８】
以上に述べたように、ＦＢＤ言語によるプログラムの編集におけるＦＢの不用意な移動には、発見が困難な不具合を発生させる可能性がある。一旦そうした不具合を発生させてしまうと、プログラム開発の作業効率が著しく阻害されることになる。
【０００９】
従来では、ＦＢＤ言語で記述されたプログラムからフィードバックループを検出し、当該フィードバックループを構成する配線の内で前周期での値を保持する配線に特別な目印を付けてコンピュータディスプレイに表示するＦＢＤ作成装置が開示されている（例えば、特許文献１参照）。特許文献１に記載の技術を上記の図２８，２９に示す例に適用した場合、図２８の状態では配線３０６に、図２９の状態では配線３０７に特別な目印が付くことになる。従って、特許文献１に記載の技術は、図２８，２９における問題の解消に有用である。しかし、上記のその他の例（図２４〜２７，３０，３１）については、特許文献１に記載の技術を適用することができない。
【００１０】
また、従来では、回路素子の挿入・削除・追加及び回路素子への入力変数の追加等の編集操作について、コンピュータディスプレイ上の回路素子に特別な目印を表示する論理接続図表示装置が開示されている（例えば、特許文献２参照）。特許文献２に記載の論理接続図表示装置では、回路素子の実行順序をユーザが陽に指定することを前提として編集操作を検出するため、ユーザによる編集操作の副作用として暗黙に回路素子の実行順序が変わってしまうことはない。しかし、ＦＢＤ言語では、ＦＢ（回路素子）の座標位置に基づいてネットの実行順序が定まるため、特許文献２の技術をＦＢＤ編集装置に適用することはできない。
【００１１】
また、従来では、ユーザがコンピュータディスプレイに表示されたプログラムに対して、いずれか１つの出力変数を選択すると、当該出力変数の値に影響を及ぼす回路と入力変数の識別子を列挙して表示するプログラミング装置が開示されている（例えば、特許文献３参照）。特許文献３に記載の技術をＦＢＤ編集装置に適用する場合、ユーザがＦＢを移動させる度に特許文献３の技術を用いて、プログラムが出力する変数すべてについて、影響を及ぼすネット（回路）と入力変数が意図通りになっているかユーザが確認することになり、ユーザの負荷の面で現実的ではない。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１０−１９８５３０号公報（第９頁−第１３頁）
【特許文献２】特公平４−７２２４４号公報（第４頁−第６頁）
【特許文献３】特開平７−１６０３１２号公報（第３頁−第５頁）
【非特許文献】
【００１３】
【非特許文献１】Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｅｌｅｃｔｒｏｔｅｃｈｎｉｃａｌ  Ｃｏｍｍｉｓｓｉｏｎ、“Ｐｒｏｇｒａｍｍａｂｌｅ  ｃｏｎｔｒｏｌｌｅｒｓ  Ｐａｒｔ  ３：Ｐｒｏｇｒａｍｍｉｎｇ  ｌａｎｇｕａｇｅｓ”、ＩＥＣ６１１３１−３、２００３
【発明の概要】
【発明が解決しようとする課題】
【００１４】
上述のように、従来のＦＢＤ編集装置では、ユーザがＦＢを不用意に移動させた場合において、ユーザが意図していないにも関わらず命令の実行順序が変動してプログラムの出力が変わってしまい、プログラムに不具合を発生させることがある。また、命令実行順序が変動する可能性をユーザが認識していないことが多いため、上記の不具合を発見することは困難である。
【００１５】
本発明は、これらの問題を解決するためになされたものであり、回路図の形式で表現される制御プログラムの作成効率を向上させることが可能な制御プログラム編集装置および制御プログラム編集プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
上記の課題を解決するために、本発明による制御プログラム編集装置は、命令を示す回路素子と、複数の回路素子間を配線で接続して構成する少なくとも１つ以上のネットとを含む回路図の形式で表現される制御プログラムを編集する制御プログラム編集装置であって、制御プログラムの編集時に所定の回路素子を移動させた場合において、所定の回路素子が属する所定のネットにおける回路素子の実行順序が変動したか否かを検出するネット内回路素子実行順序変動検出部と、所定の回路素子を含むネットの実行順序が変動したか否かを検出するネット実行順序変動検出部と、ネット内回路素子実行順序変動検出部にて回路素子の実行順序の変動が検出されるか、または、ネット実行順序変動検出部にてネットの実行順序の変動が検出されると、制御プログラム全体において入力の取得先が変動した回路素子が存在するか否かを検出する入力取得先変動検出部と、入力取得先変動検出部にて入力の取得先が変動した回路素子の存在が検出されると、当該回路素子の入力の取得先が変動したことを通知する入力取得先変動通知部とを備える。
【００１７】
また、本発明による制御プログラム編集プログラムは、コンピュータを制御プログラム編集装置として機能させるための制御プログラム編集プログラムであって、制御プログラム編集装置は、命令を示す回路素子と、複数の回路素子間を配線で接続して構成する少なくとも１つ以上のネットとを含む回路図の形式で表現される制御プログラムを編集し、制御プログラム編集プログラムは、制御プログラムの編集時に所定の回路素子を移動させた場合において、（ａ）所定の回路素子が属する所定のネットにおける回路素子の実行順序が変動したか否かを検出する手順と、（ｂ）所定の回路素子を含むネットの実行順序が変動したか否かを検出する手順と、（ｃ）手順（ａ）にて回路素子の実行順序の変動が検出されるか、または、手順（ｂ）にてネットの実行順序の変動が検出されると、制御プログラム全体において入力の取得先が変動した回路素子が存在するか否かを検出する手順と、（ｄ）手順（ｃ）にて入力の取得先が変動した回路素子の存在が検出されると、当該回路素子の入力の取得先が変動したことを通知する手順とをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１８】
本発明によると、命令を示す回路素子と、複数の回路素子間を配線で接続して構成する少なくとも１つ以上のネットとを含む回路図の形式で表現される制御プログラムを編集する制御プログラム編集装置であって、制御プログラムの編集時に所定の回路素子を移動させた場合において、所定の回路素子が属する所定のネットにおける回路素子の実行順序が変動したか否かを検出するネット内回路素子実行順序変動検出部と、所定の回路素子を含むネットの実行順序が変動したか否かを検出するネット実行順序変動検出部と、ネット内回路素子実行順序変動検出部にて回路素子の実行順序の変動が検出されるか、または、ネット実行順序変動検出部にてネットの実行順序の変動が検出されると、制御プログラム全体において入力の取得先が変動した回路素子が存在するか否かを検出する入力取得先変動検出部と、入力取得先変動検出部にて入力の取得先が変動した回路素子の存在が検出されると、当該回路素子の入力の取得先が変動したことを通知する入力取得先変動通知部とを備えるため、回路図の形式で表現される制御プログラムの作成効率を向上させることが可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施の形態１による制御プログラム編集装置の構成を示すブロック図である。
【図２】本発明の実施の形態１による制御プログラム編集装置のハードウェア構成を示すブロック図である。
【図３】本発明の実施の形態１による制御プログラム管理部が制御プログラム中のネットを記録するために用いるデータの形式を示す図である。
【図４】本発明の実施の形態１による制御プログラム管理部がネットを構成するＦＢノードを記録するために用いるデータの形式を示す図である。
【図５】本発明の実施の形態１による制御プログラム管理部がネットを構成する変数ノードを記録するために用いるデータの形式を示す図である。
【図６】本発明の実施の形態１による制御プログラム管理部がネットを構成する配線を記録するために用いるデータの形式を示す図である。
【図７】本発明の実施の形態１による制御プログラム管理部が制御プログラムで使用する変数を表すために用いるデータの形式を示す図である。
【図８】本発明の実施の形態１によるネット内ＦＢ実行順序変動検出部の処理を示すフローチャートである。
【図９】本発明の実施の形態１によるネット実行順序変動検出部の処理を示すフローチャートである。
【図１０】本発明の実施の形態１による入力取得先変動検出部がＦＢの入力取得先を記録するために用いるデータの形式を示す図である。
【図１１】本発明の実施の形態１による入力取得先変動検出部が変数に値を設定するＦＢまたは変数を記録するために用いるデータの形式を示す図である。
【図１２】本発明の実施の形態１による入力取得先変動検出部がＦＢの入力取得先を取得する処理を示すフローチャートである。
【図１３】本発明の実施の形態１による入力取得先変動検出部がＦＢの入力端子の入力取得先を取得する処理を示すフローチャートである。
【図１４】本発明の実施の形態１による入力取得先変動検出部がＦＢの出力端子の値が設定される変数を記録する処理を示すフローチャートである。
【図１５】本発明の実施の形態１による入力取得先変動検出部がＦＢの出力端子に接続している配線を使って値が設定される変数を記録する処理を示すフローチャートである。
【図１６】本発明の実施の形態１による入力取得先変動検出部が入力取得先変動通知部に伝達するデータの一例を示す図である。
【図１７】本発明の実施の形態１による制御プログラム編集装置がディスプレイに表示する画面の一例を示す図である。
【図１８】本発明の実施の形態１による制御プログラム編集装置がディスプレイに表示する画面の一例を示す図である。
【図１９】本発明の実施の形態１による制御プログラム編集装置がディスプレイに表示する画面の一例を示す図である。
【図２０】本発明の実施の形態１による制御プログラム編集装置がディスプレイに表示する画面の一例を示す図である。
【図２１】本発明の実施の形態２による制御プログラム編集装置の構成を示すブロック図である。
【図２２】本発明の実施の形態２によるＦＢＤ言語処理装置が出力する機械言語プログラムの一例を示す図である。
【図２３】本発明の実施の形態２によるネット内ＦＢ実行順序変動検出部がネットのＦＢノードの実行順序を算出する処理を示すフローチャートである。
【図２４】編集対象の制御プログラムの一例を示す図である。
【図２５】図２４に示す制御プログラムにおける１つのＦＢを移動させた場合の一例を示す図である。
【図２６】編集対象の制御プログラムの一例を示す図である。
【図２７】図２６に示す制御プログラムにおける１つのＦＢを移動させた場合の一例を示す図である。
【図２８】編集対象の制御プログラムの一例を示す図である。
【図２９】図２８に示す制御プログラムにおける１つのＦＢを移動させた場合の一例を示す図である。
【図３０】編集対象の制御プログラムの一例を示す図である。
【図３１】図３０に示す制御プログラムにおける１つのＦＢを移動させた場合の一例を示す図である。
【発明を実施するための形態】
【００２０】
本発明の実施の形態について、図面に基づいて以下に説明する。
【００２１】
＜実施の形態１＞
図１は、本発明の実施の形態１による制御プログラム編集装置の構成を示すブロック図である。
【００２２】
図１に示すように、本実施の形態１による制御プログラム編集装置１０は、入力受付部１と、編集操作実行部２と、制御プログラム管理部３と、ネット内ＦＢ実行順序変動検出部４（ネット内回路素子実行順序変動検出部）と、ネット実行順序変動検出部５と、入力取得先変動検出部６と、入力取得先変動通知部７と、表示部８とを備えている。
【００２３】
入力受付部１は、ユーザからプログラムの編集操作を受け付け、当該操作内容を編集操作実行部２に伝達する。
【００２４】
編集操作実行部２は、入力受付部１から受け取った操作内容に従って制御プログラム管理部３が管理するプログラムを書き換え、操作内容がＦＢの移動であった場合にはネット内ＦＢ実行順序変動検出部４に操作内容を伝達するとともに、ネット実行順序変動検出部５に通知する。
【００２５】
ネット内ＦＢ実行順序変動検出部４は、各ネットにおけるＦＢの実行順序を記録しており、編集操作実行部２からＦＢの移動操作の内容を受け取ると、制御プログラム管理部３が管理するプログラムを参照して移動させたＦＢが属するネットにおけるＦＢの実行順序を改めて算出（ネット内ＦＢ実行順序変動検出部４は、ＦＢＤ言語処理系の特定の実装に合わせた実装となっている）し、算出した実行順序と記録している実行順序とを比較し、移動させたＦＢが属するネットのＦＢの実行順序が変動している場合には入力取得先変動検出部６に通知する。その後、ネット内ＦＢ実行順序変動検出部４は、記録していたＦＢの実行順序を破棄して今回算出したＦＢ実行順序を記録する。
【００２６】
ネット実行順序変動検出部５は、ネットの実行順序を記録しており、編集操作実行部２から通知を受け取ると、制御プログラム管理部３が管理するプログラムを参照してネットの実行順序をＦＢＤ言語の標準に従って算出し、算出した実行順序と記録している実行順序とを比較し、ネットの実行順序が変動している場合には入力取得先変動検出部６に通知する。その後、ネット実行順序変動検出部５は、記録していたネットの実行順序を破棄して今回算出したネットの実行順序を記録する。
【００２７】
入力取得先変動検出部６は、各ＦＢが入力を取得する先を記録しており、ネット内ＦＢ実行順序変動検出部４またはネット実行順序変動検出部５から通知を受け取ると、制御プログラム管理部３が管理するプログラムを参照して各ＦＢが入力を取得する先を算出し、算出した入力取得先と記録している入力取得先とを比較し、入力の取得先が変動しているＦＢがあれば、当該ＦＢ、入力端子の番号、変動前の入力取得先、および変動後の入力取得先を入力取得先変動通知部７に伝達する。
【００２８】
入力取得先変動通知部７は、入力取得先変動検出部６から入力の取得先が変動したＦＢ、入力端子の番号、変動前の入力取得先、および変動後の入力取得先を受け取ると、当該ＦＢに関する入力取得先の変動をユーザに通知するための表示を作成し、当該表示を表示部８に伝達する。
【００２９】
表示部８は、入力取得先変動通知部７からＦＢに関する入力取得先の変動をユーザへ通知するための表示を受け取ると、当該表示を出力する。
【００３０】
すなわち、本実施の形態１による制御プログラム編集装置は、命令を示すＦＢ（Ｆｕｎｃｔｉｏｎ  Ｂｌｏｃｋ）と、複数のＦＢ間を配線で接続して構成する少なくとも１つ以上のネットとを含むＦＢＤ（Ｆｕｎｃｔｉｏｎ  Ｂｌｏｃｋ  Ｄｉａｇｒａｍ）言語によって表現される制御プログラムを編集する制御プログラム編集装置であって、制御プログラムの編集時に所定のＦＢを移動させた場合において、所定のＦＢが属する所定のネットにおけるＦＢの実行順序が変動したか否かを検出するネット内ＦＢ実行順序変動検出部４と、所定のＦＢを含むネットの実行順序が変動したか否かを検出するネット実行順序変動検出部５と、ネット内ＦＢ実行順序変動検出部４にてＦＢの実行順序の変動が検出されるか、または、ネット実行順序変動検出部５にてネットの実行順序の変動が検出されると、制御プログラム全体において入力の取得先が変動したＦＢが存在するか否かを検出する入力取得先変動検出部６と、入力取得先変動検出部６にて入力の取得先が変動したＦＢの存在が検出されると、当該ＦＢの入力の取得先が変動したことを通知する入力取得先変動通知部７とを備える。
【００３１】
図２は、本実施の形態１による制御プログラム編集装置を実現するためのコンピュータのハードウェア構成を示すブロック図である。
【００３２】
図２に示すコンピュータは、キーボード１１と、マウス１２と、マイクロプロセッサ１３と、ＨＤＤ（ハードディスク装置）１４と、ＲＡＭ１５と、ＲＯＭ１６と、グラフィックチップ１７と、フレームバッファ１８と、ディスプレイ１９とを備えている。
【００３３】
上記の図１に示す入力受付部１は、キーボード１１およびマウス１２で実現されている。
【００３４】
編集操作実行部２、制御プログラム管理部３、ネット内ＦＢ実行順序変動検出部４、ネット実行順序変動検出部５、入力取得先変動検出部６、および入力取得先変動通知部７は、それぞれの機能に対応したプログラムが、ＨＤＤ１４またはＲＡＭ１５、ＲＯＭ１６等の記憶領域に格納され、これらのプログラムをマイクロプロセッサ１３が実行することで実現されている。
【００３５】
表示部８は、グラフィックチップ１７、フレームバッファ１８およびディスプレイ１９で実現されている。
【００３６】
すなわち、本実施の形態１による制御プログラム編集プログラムは、図２に示すコンピュータを制御プログラム編集装置として機能させるための制御プログラム編集プログラムであって、制御プログラム編集装置は、命令を示すＦＢ（Ｆｕｎｃｔｉｏｎ  Ｂｌｏｃｋ）と、複数のＦＢ間を配線で接続して構成する少なくとも１つ以上のネットとを含むＦＢＤ（Ｆｕｎｃｔｉｏｎ  Ｂｌｏｃｋ  Ｄｉａｇｒａｍ）言語によって表現される制御プログラムを編集し、制御プログラム編集プログラムは、制御プログラムの編集時に所定のＦＢを移動させた場合において、（ａ）所定のＦＢが属する所定のネットにおけるＦＢの実行順序が変動したか否かを検出する手順と、（ｂ）所定のＦＢを含むネットの実行順序が変動したか否かを検出する手順と、（ｃ）手順（ａ）にてＦＢの実行順序の変動が検出されるか、または、手順（ｂ）にてネットの実行順序の変動が検出されると、制御プログラム全体において入力の取得先が変動したＦＢが存在するか否かを検出する手順と、（ｄ）手順（ｃ）にて入力の取得先が変動したＦＢの存在が検出されると、当該ＦＢの入力の取得先が変動したことを通知する手順とをコンピュータに実行させることを特徴とする。
【００３７】
次に、ＦＢＤ言語によるプログラムのデータについて説明する。
【００３８】
上述のように、ＦＢＤ言語によるプログラムはネットの集合であり、ネットはＦＢと変数をノード、配線を辺とする連結グラフである。制御プログラム管理部３は、図３〜図６に示す形式でプログラムのデータを管理し、また、図７に示す形式で変数のデータを管理する。
【００３９】
図３は、制御プログラム管理部３が制御プログラム中のネットを記録するために用いるデータの形式を示す図である。図３に示すように、「ネットＩＤ」はネットのプログラム中で一意なＩＤ、「ＦＢの個数」はネットを構成するＦＢノードの数、「ＦＢ  ＩＤｉ」（１≦ｉ≦ｎ、ｎ：ＦＢの個数）はネットを構成するＦＢノードのＩＤ、「変数の個数」はネットを構成する変数ノードの数、「変数ＩＤｉ」（１≦ｉ≦ｍ、ｍ：変数の個数）はネットを構成する変数ノードのＩＤ、「配線の個数」はネットの辺となる配線の数、「配線ＩＤｉ」（１≦ｉ≦ｗ、ｗ：配線の個数）は配線のＩＤである。
【００４０】
図４は、制御プログラム管理部３がネットを構成するＦＢノードを記録するために用いるデータの形式を示す図である。図４に示すように、「ＦＢ  ＩＤ」はＦＢノードのプログラム中で一意なＩＤ、「種類」はＦＢノードに対応する命令、「座標」はＦＢノードのＦＢＤ上での座標位置、「入力の個数」はＦＢノードが備える入力端子の数、「入力ｉと接続する配線ＩＤ」（１≦ｉ≦ｎ、ｎ：入力の個数）はＦＢノードのｉ番目の入力端子に接続する配線のＩＤ、「出力の個数」はＦＢノードが備える出力端子の数、「出力ｉと接続する配線の数」（１≦ｉ≦ｍ、ｍ：出力の個数）はＦＢノードのｉ番目の出力端子に接続する配線の数、「出力１と接続する配線ＩＤｉ」（１≦ｉ≦ｈ、ｈ：出力１と接続する配線の数）はＦＢノードのｉ番目の出力端子に接続するｉ番目の配線のＩＤである。
【００４１】
図５は、制御プログラム管理部３がネットを構成する変数ノードを記録するために用いるデータの形式を示す図である。図５に示すように、「変数ＩＤ」は変数ノードのプログラム中で一意なＩＤ、「識別子」は変数ノードに対応する変数の識別子、「座標」は変数ノードのＦＢＤ上での座標位置、「入力と接続する配線ＩＤ」は変数ノードの入力端子に接続する配線のＩＤ、「出力と接続する配線の数」は変数ノードの出力端子に接続する配線の数、「出力と接続する配線ＩＤｉ」（１≦ｉ≦ｋ、ｋ：出力と接続する配線の数）は変数ノードの出力端子に接続するｉ番目の配線のＩＤである。
【００４２】
図６は、制御プログラム管理部３がネットを構成する配線を記録するために用いるデータの形式を示す図である。図６に示すように、「配線ＩＤ」は配線のプログラム中で一意なＩＤ、「接続元ＦＢ／変数ＩＤ」は配線の根元側に接続するＦＢノードまたは変数ノードのＩＤ、「接続元出力番号」は根元側に接続するＦＢノードまたは変数ノードの出力端子の番号、「接続先ＦＢ／変数ＩＤ」は配線の先端側に接続するＦＢノードまたは変数ノードのＩＤ、「接続先出力番号」は先端側に接続するＦＢノードまたは変数ノードの入力端子の番号、「頂点の個数」は配線が折れ線である場合の頂点の数、「頂点ｉの座標」（１≦ｉ≦ｖ、ｖ：頂点の個数）はｉ番目の頂点のＦＢＤ上での座標位置である。
【００４３】
図７は、制御プログラム管理部３がプログラムで使用する変数を表すために用いるデータの形式を示す図である。図７に示すように、「識別子」は変数のプログラム中で一意な名称、「大域入力／大域出力／局所」は変数の種類、「初期値」は変数の初期値である。ここで、変数が大域入力であるとは、プログラムが実行される度に当該変数にプログラム外で値が設定されることを意味し、変数が大域出力であるとは、プログラムの実行が終了する度に当該変数の値がプログラム外から参照されることを意味し、変数が局所であるとは、当該変数がプログラム中でのみ読み書きされることを意味する。また、変数の初期値は、局所変数でのみ使用される項目であり、プログラムの初回実行時に当該局所変数に設定される値である。
【００４４】
以下、本実施の形態１による制御プログラム編集装置１０の内部処理を、図１に基づいて説明する。
【００４５】
入力受付部１により、ユーザによる所定の操作でＦＢＤ言語によるプログラム中のＦＢノードの移動が指示されると、編集操作実行部２は移動するＦＢノードのＩＤと移動先の座標とを使って、制御プログラム管理部３が管理するデータを書き換え、当該ＦＢノードのＩＤをネット内ＦＢ実行順序変動検出部４へ渡し、ＦＢノードが移動したことをネット実行順序変動検出部５へ通知する。
【００４６】
図８は、ネット内ＦＢ実行順序変動検出部４の内部処理を示すフローチャートである。以下、図８に示すフローチャートを参照して、ネット内ＦＢ実行順序変動検出部４の内部処理について説明する。この内部処理は、ネット内ＦＢ実行順序変動検出部４が、移動されたＦＢノードのＩＤを編集操作実行部２から受け取った際に実行される。
【００４７】
ステップＳＴ１００１において、制御プログラム管理部３が管理するデータを参照して、移動させたＦＢノードが属するネットを取り出す。この時、当該ネットは図３に示す形式のデータであり、当該ネットの構成物は図４〜図６に示す形式のデータの集合である。
【００４８】
次に、ステップＳＴ１００２において、ステップＳＴ１００１にて取り出したネットのＦＢノードの実行順序を、ネット内ＦＢ実行順序変動検出部４が対応しているＦＢＤ言語処理系と同じ手法で算出する。
【００４９】
次に、ステップＳＴ１００３において、算出したＦＢノード実行順序と、記録していたＦＢノード実行順序とを比較して、実行順序が変動している場合（ステップＳＴ１００３のＹｅｓ）はステップＳＴ１００４へ移行し、変動していない場合（ステップＳＴ１００３のＮｏ）は処理を終了する。
【００５０】
次に、ステップＳＴ１００４において、記録していたＦＢノード実行順序を破棄して、算出したＦＢノード実行順序を新たに記録する。
【００５１】
次に、ステップＳＴ１００５において、入力取得先変動検出部６に対して、ネット内のＦＢ実行順序が変動したことを通知する。
【００５２】
図９は、ネット実行順序変動検出部５の内部処理を示すフローチャートである。以下、図９のフローチャートを参照して、ネット実行順序変動検出部５の内部処理を説明する。この内部処理は、ＦＢノードが移動した旨の通知を編集操作実行部２からネット実行順序変動検出部５が受け取った際に実行される。
【００５３】
ステップＳＴ２００１において、制御プログラム管理部３が管理するデータを参照して、非特許文献１にて規定されているＦＢＤ言語の標準の通りにネットの実行順序を算出する。
【００５４】
次に、ステップＳＴ２００２において、算出したネット実行順序と、記録していたネット実行順序とを比較して、実行順序が変動している場合（ＳＴ２００２のＹｅｓ）はステップＳＴ２００３に移行し、変動していない場合（ステップＳＴ２００２のＮｏ）は処理を終了する。
【００５５】
次に、ステップＳＴ２００３において、記録していたネット実行順序を破棄して、算出したネット実行順序を新たに記録する。
【００５６】
次に、ステップＳＴ２００４において、入力取得先変動検出部６に対して、ネットの実行順序が変動したことを通知する。
【００５７】
入力取得先変動検出部６は、ネット内ＦＢ実行順序変動検出部４からＦＢ実行順序が変動したことを通知されるか、または、ネット実行順序変動検出部５からネットの実行順序が変動したことを通知されると、制御プログラム管理部３が管理するプログラムのデータと、ネット内ＦＢ実行順序変動検出部４が記録しているネットごとのＦＢ実行順序と、ネット実行順序変動検出部５が記録しているネットの実行順序とを参照して、プログラム全体でのＦＢの実行順序を算出する。そして、入力取得先変動検出部６は、算出した実行順序の通りに各ＦＢの入力取得先を算出する（詳細は後述する）。入力取得先変動検出部６は、算出した入力取得先と記録していた入力取得先とを比較して、入力を取得するＦＢノード、変数ノード、または局所変数の識別子が異なるか、または、前周期での値を用いるか今周期での値を用いるかが異なるＦＢノードの入力端子について、当該ＦＢノードのＩＤと、当該入力端子の番号と、変動前の入力取得先と、変動後の入力取得先とを入力取得先変動通知部７に伝達した後、記録内容を破棄して算出結果を代わりに記録する。
【００５８】
入力取得先変動通知部７は、入力取得先変動検出部６から入力取得先が変動したＦＢノードのＩＤ、入力端子の番号、変動前の入力取得先、および変動後の入力取得先を受け取ると、入力取得先が変動したＦＢノードに関する入力取得先の変動をユーザへ通知するための表示を作成（具体例を後で示す）し、作成した表示を表示部８に伝達する。
【００５９】
表示部８は、入力取得先変動通知部７からＦＢノードに関する入力取得先の変動をユーザへ通知するための表示を受け取ると、当該表示を出力する。
【００６０】
次に、入力取得先変動検出部６が各ＦＢの入力取得先を算出する手順を詳しく説明する。
【００６１】
入力取得先変動検出部６が使用するデータを図１０および図１１に示す。図１０は、入力取得先変動検出部がＦＢノードの入力取得先を記録するために用いるデータの形式を示す図である。図１０に示すように、ＦＢＩＤ５０１はＦＢノードのプログラム中で一意なＩＤ、入力の個数５０２はＦＢノードが備える入力端子の数、入力ｉの源泉５０３（１≦ｉ≦ｎ、ｎ：入力の個数）はＦＢノードのｉ番目の入力端子の値を取得するＦＢノード又は変数ノードのＩＤまたは局所変数の識別子であり、入力ｉの前周期フラグ５０４（１≦ｉ≦ｎ、ｎ：入力の個数）はＦＢノードのｉ番目の入力端子の値に源泉の前周期の値を使用する場合はＴＲＵＥとなり、今周期の値を使用する場合はＦＡＬＳＥとなるフラグである。
【００６２】
図１１は、入力取得先変動検出部が変数に値を設定するＦＢまたは変数を記録するために用いるデータの形式を示す図である。図１１に示すように、識別子６０１は変数のプログラム中で一意な名称、値を設定したＦＢ／変数ＩＤ６０２は変数に最後に値を設定したＦＢノード又は変数ノードのＩＤである。
【００６３】
入力取得先変動検出部６の内部処理を示すフローチャートを図１２〜図１５に示す。以下、図１２〜図１５に示すフローチャートを参照して、入力取得先変動検出部６が１つのＦＢノード（以下、対象ＦＢノードとも称する）の入力取得先を算出する処理（図１２）について説明する。
【００６４】
ステップＳＴ３００１において、制御プログラム管理部３が管理する図４のデータを参照して、対象ＦＢノードの入力の個数ｎを取得する。
【００６５】
次に、ステップＳＴ３００２において、対象ＦＢノードに対応する図１０のデータのＦＢＩＤ５０１に対象ＦＢノードのＩＤを記録し、入力の個数５０２としてｎを記録する。
【００６６】
次に、ステップＳＴ３００３において、対象ＦＢノードの入力ｉ（１≦ｉ≦ｎ）のそれぞれについて図１３に示すフローチャート「入力端子の処理」を実行する。
【００６７】
次に、ステップＳＴ３００４において、制御プログラム管理部３が管理する図４のデータを参照して、対象ＦＢノードの出力の個数ｍを取得する。
【００６８】
次に、ステップＳＴ３００５において、対象ＦＢノードの出力ｉ（１≦ｉ≦ｍ）のそれぞれについて図１４に示すフローチャート「出力端子の処理」を実行する。
【００６９】
図１３は、図１２のステップＳＴ３００３にて実行される「入力端子の処理」を示すフローチャートである。なお、以下では、処理対象の入力端子を入力ｉとする。
【００７０】
ステップＳＴ４００１において、図１０に示すデータの入力ｉの前周期フラグ５０４をＦＡＬＳＥとして初期化する。
【００７１】
次に、ステップＳＴ４００２において、制御プログラム管理部３が管理する図４および図６のデータを参照して、入力ｉに接続している配線の「接続元ＦＢ／変数ＩＤ」（以下、単にｄとも称する）を取得する。
【００７２】
次に、ステップＳＴ４００３において、ｄがＦＢＩＤである場合（ステップＳＴ４００３のＹｅｓ）はステップＳＴ４００４に移行し、変数ＩＤである場合（ステップＳＴ４００３のＮｏ）はステップＳＴ４００７に移行する。
【００７３】
次に、ステップＳＴ４００４において、ネット内ＦＢ実行順序変動検出部４が記録しているネットごとのＦＢ実行順序を参照して、ＩＤがｄであるＦＢノードが入力ｉの属するＦＢノードよりも後に実行される場合（ステップＳＴ４００４のＹｅｓ）はステップＳＴ４００５に移行し、前に実行される場合（ステップＳＴ４００４のＮｏ）はステップＳＴ４００６に移行する。
【００７４】
次に、ステップＳＴ４００５において、図１０に示すデータの入力ｉの前周期フラグ５０４に、ＴＲＵＥを記録する。
【００７５】
次に、ステップＳＴ４００６において、図１０に示すデータの入力ｉの源泉５０３に、ｄを記録する。
【００７６】
ステップＳＴ４００７において、ＩＤがｄである変数ノードに対応する変数（以下、変数ｖとも称する）に対応する図１１に示すデータを参照して、値を設定したＦＢ／変数ＩＤ６０２（以下、ｂとも称する）がＦＢＩＤである場合はステップＳＴ４００８に移行し、変数ＩＤである場合はステップＳＴ４００９に移行し、いずれのＩＤも記録されていない場合（記録ナシ）はステップＳＴ４０１０に移行する。
【００７７】
ステップＳＴ４００８において、図１０に示すデータの入力ｉの源泉５０３に、ｂを記録する。
【００７８】
ステップＳＴ４００９において、ｄにｂの値を設定する。
【００７９】
ステップＳＴ４０１０において、制御プログラム管理部３が管理する図７に示すデータを参照して、変数ｖが大域入力である場合（ステップＳＴ４０１０のＹｅｓ）はステップＳＴ４００６に移行し、大域入力でない場合（ステップＳＴ４０１０のＮｏ）はステップＳＴ４０１１に移行する。
【００８０】
ステップＳＴ４０１１において、図１０に示すデータの入力ｉの前周期フラグ５０４に、ＴＲＵＥを記録する。
【００８１】
次に、ステップＳＴ４０１２において、制御プログラム管理部３が管理する図７に示すデータを参照して、図１０に示すデータの入力ｉの源泉５０３に、変数ｖの識別子を記録する。
【００８２】
図１４は、図１２のステップＳＴ３００５にて実行される「出力端子の処理」を示すフローチャートである。
【００８３】
ステップＳＴ５００１において、制御プログラム管理部３が管理する図４のデータを参照して、処理の対象である出力端子と接続する配線の数ｈとを取得する。
【００８４】
次に、ステップＳＴ５００２において、処理の対象である出力端子と接続する配線ｉ（１≦ｉ≦ｈ）のそれぞれについて図１５に示すフローチャート「出力配線の処理」を実行する。
【００８５】
図１５は、図１４のステップＳＴ５００２にて実行される「出力配線の処理」を示すフローチャートである。
【００８６】
ステップＳＴ６００１において、制御プログラム管理部３が管理する図６に示すデータを参照して、処理の対象である配線の「接続先ＦＢ／変数ＩＤ」（以下、単にｄとも称する）を取得する。
【００８７】
次に、ステップＳＴ６００２において、ｄが変数ＩＤである場合（ステップＳＴ６００２のＹｅｓ）はステップＳＴ６００３に移行し、ＦＢＩＤである場合（ステップＳＴ６００２のＮｏ）は処理を終了する。
【００８８】
次に、ステップＳＴ６００３において、ＩＤがｄである変数ノードに対応する変数の図１１に示すデータに対し、値を設定したＦＢ／変数ＩＤ６０２として、処理対象の配線の接続元であるＦＢノードのＩＤを記録する。
【００８９】
なお、入力取得先変動検出部６は、変数ノードおよび配線のみからなるネットについては、代入先（配線の接続先）の全ての変数ノードに対応する変数の図１１に示すデータに対し、値を設定したＦＢ／変数ＩＤ６０２として、代入元（配線の接続元）の変数ノードのＩＤを記録する。
【００９０】
以上で説明した処理を入力取得先変動検出部６が実行することで、全ＦＢの全入力について、入力値の取得先を算出できたことになる。
【００９１】
以下では、本実施の形態１による制御プログラム編集装置が、入力取得先の変動をユーザに通知する例について説明する。
【００９２】
今、ユーザが図２４に示すＦＢＤを編集しており、ＦＢ１０３を図２４に示す位置から図２５に示す位置まで移動したとする。この移動操作をきっかけとして、入力受付部１、編集操作実行部２、制御プログラム管理部３、ネット内ＦＢ実行順序変動検出部４、ネット実行順序変動検出部５、および入力取得先変動検出部６が上述の通り動作し、入力取得先変動検出部６は入力取得先変動通知部７に対して図１６に示すデータを伝達する。図１６に示すように、５１０１は入力の取得先が変動したＦＢノードのＩＤ、５１０２は入力の取得先が変動した入力端子の番号、５１０３は変動前の源泉の変数ノードのＩＤ、５１０４は変動前の前周期フラグ、５１０５は変動後の源泉の変数ノードのＩＤ、５１０６は変動後の前周期フラグである。
【００９３】
図１７は、入力取得先変動通知部７が図１６に示すデータから作成した通知を表示部８が出力した際のディスプレイ１９の画面である。図１７に示すように、５２０１は通知用のポップアップダイアログ、５２０２はポップアップダイアログ５２０１上のＯＫボタン、５２０３はポップアップダイアログ５２０１上のＣａｎｃｅｌボタン、５２０４は変動前の入力取得先のノードを示すためのマーク、５２０５は変動後の入力取得先のノードを示すためのマークである。
【００９４】
入力取得先変動通知部７は、制御プログラム管理部３が管理する図４に示すデータと図５に示すデータとを参照して、ＦＢＩＤ５１０１と入力端子の番号５１０２とからポップアップダイアログ５２０１を表示する座標位置、変数ＩＤ５１０３からマーク５２０４を表示する座標位置、変数ＩＤ５１０４からマーク５２０５を表示する座標位置をそれぞれ決定する。次に、入力取得先変動通知部７は、マーク５２０４とマーク５２０５の形状を決定して、ポップアップダイアログ５２０１へ表示する文字列を決定する。そして、入力取得先変動通知部７は、ポップアップダイアログ５２０１、ＯＫボタン５２０２、Ｃａｎｃｅｌボタン５２０３、マーク５２０４，マーク５２０５を作成して、表示部８へ渡す。最後に、表示部８がポップアップダイアログおよびマークをディスプレイ１９に出力することによって、図１７に示す画面が得られる。
【００９５】
図１７に示す画面に対して、ユーザが所定の操作によりＯＫボタン５２０２を選択した場合は、入力受付部１から入力取得先変動通知部７へ通知が送られ、入力取得先変動通知部７はポップアップダイアログ５２０１、ＯＫボタン５２０２、Ｃａｎｃｅｌボタン５２０３、マーク５２０４，５２０５を消去する旨を表示部８に指示する。表示部８が入力取得先変動通知部７からの消去指示を実行すると、図２５に示す画面となる。
【００９６】
一方、図１７に示す画面に対して、ユーザが所定の操作によりＣａｎｃｅｌボタン５２０３を選択した場合は、入力受付部１から編集操作実行部２と入力取得先変動通知部７へ通知が送られ、編集操作実行部２はＦＢ１０３の移動操作を取り消してＦＢ１０３の座標位置を図２４に示す値に戻し、ネット内ＦＢ実行順序変動検出部４とネット実行順序変動検出部５へ通知を送る。入力受付部１から通知を受けた入力取得先変動通知部７は、ポップアップダイアログ５２０１、ＯＫボタン５２０２、Ｃａｎｃｅｌボタン５２０３、マーク５２０４，５２０５を消去するよう、表示部８へ指示する。表示部８が入力取得先変動通知部７からの消去指示を実行すると、図２４に示す画面となる。編集操作実行部２から通知を受けたネット内ＦＢ実行順序変動検出部４は、ＦＢ１０３が属するネットにおけるＦＢ実行順序を算出し直し、記録しているＦＢ実行順序を破棄して当該算出結果を記録する。編集操作実行部２から通知を受けたネット実行順序変動検出部５は、ネットの実行順序を算出し直し、記録しているネット実行順序を破棄して当該算出結果を記録する。
【００９７】
すなわち、入力取得先変動通知部７は、入力の取得先が変動したＦＢについて、変動前の入力の取得先と変動後の入力の取得先とを通知し、また、ＦＢの入力の取得先が変動したことを了承するか否かの問い合わせを通知する。
【００９８】
同様に、ユーザが図２６に示すＦＢＤを編集しており、ＦＢ２０３を図２６に示す位置から図２７に示す位置まで移動した場合には、図１８に示す画面がディスプレイ１９に出力される。
【００９９】
また、ユーザが図２８に示すＦＢＤを編集しており、ＦＢ３０２を図２８に示す位置から図２９に示す位置まで移動した場合には、図１９に示す画面がディスプレイ１９に出力される。
【０１００】
また、ユーザが図３０に示すＦＢＤを編集しており、ＦＢ４０３を図３０に示す位置から図３１に示す位置まで移動した場合には、図２０に示す画面がディスプレイ１９に出力される。
【０１０１】
以上のことから、本実施の形態１による制御プログラム編集装置は、ユーザがＦＢノードを移動させたことによっていずれかのＦＢノードのいずれかの入力の取得先が変動した場合には、変動前後の入力の取得先がノードであれば当該ノードにマークを付けて強調表示するとともに、入力の取得先が変動した入力端子の位置に入力の取得先がどのように変動したかを説明するポップアップダイアログを表示する。そして、ユーザがポップアップダイアログ上のＣａｎｃｅｌボタンを選択した場合には、移動操作を取り消してＦＢノードが移動する前のプログラムに戻すようにするため、ユーザが意図していないにも関わらずＦＢの入力取得先が変動したことを即座に知ることができ、かつ直ちに元のプログラムへ戻すことができるので、制御プログラム作成の作業効率を著しく向上させることができる。
【０１０２】
＜実施の形態２＞
図２１は、本発明の実施の形態２による制御プログラム編集装置の構成を示すブロック図である。
【０１０３】
図２１に示すように、本実施の形態２による制御プログラム編集装置２０は、入力受付部１と、編集操作実行部２と、制御プログラム管理部３と、ネット内ＦＢ実行順序変動検出部２４と、ネット実行順序変動検出部５と、入力取得先変動検出部６と、入力取得先変動通知部７と、表示部８とを備えている。また、ネット内ＦＢ実行順序変動検出部２４は、制御プログラム編集装置２０の外部に存在するＦＢＤ言語処理装置９０（制御プログラム処理装置）と接続している。
【０１０４】
ＦＢＤ言語処理装置９０は、ＦＢＤ言語で記述されたプログラムを機械語プログラムへ変換するコンパイラであり、例えば図２４に示すＦＢＤを図２２に示す機械語プログラムへコンパイルする。ネット内ＦＢ実行順序変動検出部２４は、編集操作実行部２からＦＢの移動操作の内容を受け取ると、制御プログラム管理部３が管理するプログラムを参照して当該ＦＢが属するネットをＦＢＤ言語処理装置９０にコンパイルさせる。ＦＢＤ言語処理装置９０がコンパイルを終えると、ネット内ＦＢ実行順序変動検出部２４は、ＦＢＤ言語処理装置９０が出力した機械語プログラムを解釈して上記ネットのＦＢ実行順序を取得する。すなわち、本実施の形態２による制御プログラム編集装置２０のネット内ＦＢ実行順序変動検出部２４は、ＦＢＤ言語による制御プログラムを機械語プログラムに変換する外部のＦＢＤ言語処理装置９０と接続され、ネット内ＦＢ実行順序変動検出部２４は、ＦＢＤ言語処理装置９０にて変換された機械語プログラムに基づいて、所定のネットにおけるＦＢの実行順序を取得することを特徴としている。ネット内ＦＢ実行順序変動検出部２４におけるその他の内部処理は、実施の形態１におけるネット内ＦＢ実行順序変動検出部４と同様である。その他の構成および動作は、実施の形態１と同様であるため、ここでは説明を省略する。
【０１０５】
また、本実施の形態２による制御プログラム編集装置を実現するためのコンピュータのハードウェア構成は、実施の形態１と同様である。ネット内ＦＢ実行順序変動検出部２４およびＦＢＤ言語処理装置９０は、それぞれの機能に対応したプログラムが、ＨＤＤ１４またはＲＡＭ１５、ＲＯＭ１６等（図２参照）の記憶領域に格納され、これらのプログラムをマイクロプロセッサ１３が実行することで実現されている。その他の実現方法は、実施の形態１と同様である。
【０１０６】
次に、図２２に示す機械語プログラムからＦＢの実行順序を取得する手順について説明する。
【０１０７】
図２２に示すように、左端の列は行番号、左から２つ目の列は命令語、左から３つ目以降の列はオペランド（命令の引数）である。オペランドに現れる、Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｘは対応する変数のメモリアドレスを値とするラベルであり、＠ＴＭＰ１，＠ＴＭＰ２，＠ＴＭＰ３はＦＢＤ言語処理装置９０がコンパイル時に確保した一時領域のメモリアドレスを値とするラベルであり、ＳＰはスタックポインタである。また、１００１０行目の「ＰＵＳＨ  ［Ａ］」は、スタックポインタＳＰをデクリメントした後、ラベルＡが指すメモリアドレスに記録されている値をスタックポインタＳＰが示すメモリアドレスに複写することを意味し、１００３０行目の「ＣＡＬＬ  ＦＢ１０１」は、ＦＢＩＤがＦＢ１０１のＦＢの処理を呼び出すことを意味し、１００４０行目の「ＳＴＯＲＥ  Ｘ  ［ＳＰ−２］」は、スタックポインタＳＰの値から２を引いた値のメモリアドレスに記録されている値をラベルＸが示すメモリアドレスに複写することを意味し、１００６０行目の「ＡＤＤ  ＳＰ  ２」は、スタックポインタＳＰに２を足し込むことを意味する。なお、ＣＡＬＬ命令の直後においては、メモリアドレス「ＳＰ−ｉ」に、呼び出したＦＢのｉ−１番目の出力が記録されている。
【０１０８】
図２３は、ネット内ＦＢ実行順序変動検出部２４がＦＢノードの実行順序を算出する際の内部処理（実施の形態１におけるネット内ＦＢ実行順序変動検出部４の、ステップＳＴ１００２（図８）に対応する）を示すフローチャートである。以下、図２３に示すフローチャートを参照して、ネット内ＦＢ実行順序変動検出部２４の内部処理を説明する。
【０１０９】
ステップＳＴ７００１において、ネットのデータを指定し、当該ネットをＦＢＤ言語処理装置９０にコンパイルさせる。
【０１１０】
次に、ステップＳＴ７００２において、ＦＢＤ言語処理装置９０が出力した機械語プログラムのファイルをオープンする。
【０１１１】
次に、ステップＳＴ７００３において、まだ読み込んでいない機械語プログラムの行がある場合（ステップＳＴ７００３のＮｏ）はステップＳＴ７００４に移行し、全ての行を読み込み終えた場合（ステップＳＴ７００３のＹｅｓ）はステップＳＴ７００７に移行する。
【０１１２】
次に、ステップＳＴ７００４において、機械語プログラムの行を１行読み込む。
【０１１３】
次に、ステップＳＴ７００５において、読み込んだ行がＣＡＬＬ文である場合（ステップＳＴ７００５のＹｅｓ）はステップＳＴ７００６へ進み、その他の場合（ステップＳＴ７００５のＮｏ）はステップＳＴ７００３に移行する。
【０１１４】
次に、ステップＳＴ７００６において、ＣＡＬＬ文のオペランドからＦＢＩＤを取得する。
【０１１５】
次に、ステップＳＴ７００７において、機械語プログラムのファイルをクローズする。
【０１１６】
例えば、ネット内ＦＢ実行順序変動検出部２４が図２４に示すネットのＦＢノード実行順序を算出する場合は、ＦＢＤ言語処理装置９０に図２４に示すネットをコンパイルさせて図２２に示す機械語プログラムファイルを出力させ、該機械語プログラムファイルを先頭から順（つまり、行番号の順）に読み込んでＣＡＬＬ命令を探し、オペランドからＦＢＩＤを取得する。すなわち、図２２からは、１００３０行目、１００９０行目、１０１５０行目、および１０２００行目の順にＣＡＬＬ命令が見つかり、それらのオペランドを見つけた順に並べるとＦＢ１０１、ＦＢ１０２、ＦＢ１０３、ＦＢ１０４となる。この順は、図２４に示したＦＢの実行順序と同じである。
【０１１７】
以上のことから、本実施の形態２による制御プログラム編集装置は、ＦＢＤ言語処理装置９０が出力する機械語プログラムからネット内ＦＢ実行順序変動検出部２４がＦＢの実行順序を取得するように構成したので、実施の形態１と同じ効果を持つ制御プログラム編集装置を実施の形態１よりも容易に構成することができる。
【０１１８】
なお、本実施の形態２による制御プログラム編集装置２０では、ネット内ＦＢ実行順序変動検出部２４が、ＦＢＤ言語処理装置９０でコンパイルされた機械語プログラムに基づいてＦＢの実行順序を検出しているが、同様の動作をネット実行順序変動検出部５が行ってもよい。すなわち、ネット実行順序変動検出部５と外部のＦＢＤ言語処理装置９０とを接続し、ネット実行順序変動検出部５は、ＦＢＤ言語処理装置９０でコンパイルされた機械語プログラムから全てのＦＢの実行順序を取得し、取得結果に基づいてネットの実行順序を検出するようにしてもよい。このような構成にしても、上記と同様の効果が得られる。なお、ＦＢの実行順序はＦＢＤ言語の標準規格で規定されており、外部のＦＢＤ言語処理装置９０を利用せずとも実現が容易であるため、必ずしも外部のＦＢＤ言語処理装置９０を用いなくてもよい。
【０１１９】
また、説明の簡単のため、ＦＢＤ言語処理装置９０がＣＡＬＬ命令のオペランドにＦＢＩＤを用いるものとしたが、ＦＢＩＤと容易に対応づけられる文字列が注釈等の形でＣＡＬＬ命令と容易に対応づけられるように記述された機械語プログラムをＦＢＤ言語処理装置９０が出力する場合も、上記と同様の効果を奏することは言うまでもない。
【０１２０】
また、本実施の形態では、ＦＢＤ言語によって表現される制御プログラムを編集する制御プログラム編集装置について説明したが、回路図の形式で表現される制御プログラムであれば他のプログラミング言語であっても適用可能である。すなわち、上記の実施の形態において、「ＦＢ」を「回路素子」に読み替え、「ＦＢＤ言語によって表現される制御プログラム」を「回路図の形式で表現される制御プログラム」に読み替えて、上記と同様の動作を行うことが可能である。
【０１２１】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【符号の説明】
【０１２２】
１  入力受付部、２  編集操作実行部、３  制御プログラム管理部、４  ネット内ＦＢ実行順序変動検出部、５  ネット実行順序変動検出部、６  入力取得先変動検出部、７  入力取得先変動通知部、８  表示部、１１  キーボード、１２  マウス、１３  マイクロプロセッサ、１４  ＨＤＤ、１５  ＲＡＭ、１６  ＲＯＭ、１７  グラフィックチップ、１８  フレームバッファ、１９  ディスプレイ、２０  制御プログラム編集装置、２４  ネット内ＦＢ実行順序変動検出部、９０  ＦＢＤ言語処理装置、１０１〜１０４  ＦＢ、１０５〜１０９  変数、１１０〜１１２  変数、２０１〜２０４  ＦＢ、２０５〜２０９  変数、２１０，２１１  変数、３０１，３０２  ＦＢ、３０３，３０４  変数、３０５  変数、３０６，３０７  配線、４０１，４０２  ネット、４０３  ＦＢ、４０４〜４０９  変数、４１０，４１１  変数、５０１  ＦＢＩＤ、５０２  入力の個数、５０３  入力ｉの源泉、５０４  入力ｉの前周期フラグ、６０１  識別子、６０２  値を設定したＦＢ／変数ＩＤ、５１０１  ＦＢＩＤ、５１０２  入力端子番号、５１０３  変動前変数ノードＩＤ、５１０４  変動前周期フラグ、５１０５  変動後変数ノードＩＤ、５１０６  変動後前周期フラグ、５２０１  ポップアップダイアログ、５２０２  ＯＫボタン、５２０３  Ｃａｎｃｅｌボタン、５２０４，５２０５  マーク。
【図１】
2013171358.tif 000003
【図２】
2013171358.tif 000004
【図３】
2013171358.tif 000005
【図４】
2013171358.tif 000006
【図５】
2013171358.tif 000007
【図６】
2013171358.tif 000008
【図７】
2013171358.tif 000009
【図８】
2013171358.tif 000010
【図９】
2013171358.tif 000011
【図１０】
2013171358.tif 000012
【図１１】
2013171358.tif 000013
【図１２】
2013171358.tif 000014
【図１３】
2013171358.tif 000015
【図１４】
2013171358.tif 000016
【図１５】
2013171358.tif 000017
【図１６】
2013171358.tif 000018
【図１７】
2013171358.tif 000019
【図１８】
2013171358.tif 000020
【図１９】
2013171358.tif 000021
【図２０】
2013171358.tif 000022
【図２１】
2013171358.tif 000023
【図２２】
2013171358.tif 000024
【図２３】
2013171358.tif 000025
【図２４】
2013171358.tif 000026
【図２５】
2013171358.tif 000027
【図２６】
2013171358.tif 000028
【図２７】
2013171358.tif 000029
【図２８】
2013171358.tif 000030
【図２９】
2013171358.tif 000031
【図３０】
2013171358.tif 000032
【図３１】
2013171358.tif 000033