本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
[§.適用例]
まず、本発明が適用される場面の一例について説明する。図21は、本開示の適用例を模式的に説明するための図である。図21を参照して、本開示に係るサポート装置200は、製造現場の製造設備等の対象を制御する制御装置と接続され得る。両者は、例えばUSB(Universal Serial Bus)により通信する。サポート装置200は、制御装置で実行される制御プログラムの開発を支援する環境を提供する。以下の説明においては、制御装置の典型例としてPLC100を示すが、PLCに限定されない。
サポート装置200は、制御プログラムを含む各種ユーザープログラムを開発する環境を提供する。開発対象のプログラムは、例えば国際規格IEC61131-3に従うプログラムを含み得る。国際規格IEC61131-3おいては、制御プログラムを含むPLCアプリケーションのプログラミング言語として、ラダーダイアグラム(LD:Ladder Diagram)、ファンクションブロックダイアグラム(FBD:Function Block Diagram)、シーケンシャルファンクションチャート(SFC:Sequential Function Chart)、インストラクションリスト(IL:Instruction List)、ストラクチャードテキスト(ST:Structured Text)の5種類を規定する。本実施の形態に係る制御プログラムは、シーケンスプログラム271であって、いずれのプログラミング言語で記述されたシーケンスプログラム271であってもよい。以下では、典型例として、ラダーダイアグラムで記述されたシーケンスプログラム271について説明する。
PLC100は、関数およびファンクションブロックを含む複数の単位プログラムの実行可能コードを格納するライブラリ275を備える。シーケンスプログラム271は、当該シーケンスプログラム271を構成する1または複数の単位プログラムを呼出す呼出し命令を含む。したがって、PLC100で、シーケンスプログラム271が実行中に、呼出し命令が実行されることにより、ライブラリ275から対応の単位プログラムが呼出されて実行される。
サポート装置200は、PLC100で実行されるシーケンスプログラム271を開発する環境を提供する。開発環境は、モニタ224、エディタ222、ビルダ223などを備える。モニタ224は、シーケンスプログラム271をディスプレイ214に表示する時に、単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示する。エディタ222は、ディスプレイ214に表示される回路を変更する操作に従い、回路のシーケンスロジックを変更する。ビルダ223は、シーケンスプログラム271をPLC100で実行可能なコードに変換する場合に、切替えオプションに従い、シーケンスプログラム271中の呼出し命令に、変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てながら当該変換を実施する。
これにより、例えばシーケンスプログラム271の編集時には、呼出される単位プログラムを、当該単位プログラムが定義するシーケンスロジックが表す回路に展開して表示することができる。このことは、シーケンスプログラム271の編集時など開発現場において、呼出し命令で呼出される単位プログラム内で実際に記述されるシーケンスロジックコードをシーケンス回路で把握することを可能にする。
また、表示されたシーケンス回路を変更する操作をすることにより、ユーザーは、当該回路の元のシーケンスロジックを、変更後の回路が示すシーケンスロジックに変更することができる。
シーケンスプログラム271を実行可能なコードを変換する場合は、切替えオプションにより、各呼出し命令に、変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てながら実行可能なコードに変換することができる。このことは、切替えオプションの設定により、所望する呼出し命令についてのみ、変更後のシーケンスロジックのコードが割当てられた実行可能コードの取得を可能にする。したがって、PLC100において、当該実行可能コードに変換後のシーケンスプログラム271が実行される場合は、元は同じ単位プログラムを呼出す命令コードが複数記述されていた場合でも、ある1の呼出し命令コードではユーザーによる変更後のシーケンスロジックコードが実行させながら、他の1の命令コードでは、ライブラリ275から読出されたシーケンスロジックコードが実行させることができる。これにより、共通化した部品である単位プログラムを、シーケンスプログラム271の使用箇所毎に変更することができる。
また、サポート装置200は、PLC100のライブラリ275に格納される単位プログラムのシーケンスロジックのコードを、変更後のシーケンスロジックのコードを用いて変更する。これにより、上記のある1の呼出し命令コードとして実行された変更後のシーケンスロジックコードの実行結果が適切であると確認できたときは、ユーザーは、ライブラリ275に格納される対応の単位プログラムのシーケンスロジックのコードを、適切と確認できた変更後のシーケンスロジックコードに変更(更新)することができる。これにより、シーケンスプログラム271において共通化した部品である単位プログラムが複数箇所で呼出される場合であっても、1箇所だけを、実行されるシーケンスロジックコードを他の箇所を異ならせて、シーケンスプログラム271を実行させて、その結果を得た上で、ライブラリ275の単位プログラムのシーケンスロジックのコードを変更することが可能となる。
以下、本発明のより具体的な応用例として、本実施の形態に係るサポート装置200のより詳細な構成および処理について説明する。
<A.ソフトウェア構成>
上記に述べた適用例を実現するためのソフトウェア構成を説明する。図6は、本発明の実施の形態に係るサポート装置200のソフトウェア構成の一例を示す模式図である。
このソフトウェア構成においては、制御対象に応じて任意に作成されるユーザープログラム(シーケンスプログラム271)の制御装置における実行状態を確認する機能である「オンラインモニタ」が提供される。オンラインモニタは、上記に述べたパワーフロー表示を含む概念である。
また、ユーザープログラム(シーケンスプログラム271)の制御装置で実行されるシーケンスプログラム271を編集して更新する機能である「オンラインエディタ」も提供される。
本実施の形態では、サポート装置200は、「オンライエディタ」と、パワーフロー表示を含む「オンラインモニタ」の両方の環境を提供するように構成されるが、いずれか1方の環境を提供するとしてもよい。例えば、サポート装置200は、「オンラインモニタ」は備えずに「オンライエディタ」のみを提供するよう構成されてもよい。
図6では、PLC100とのデータの遣り取りと関連づけて、サポート装置200のソフトウェア構成が示される。図6を参照して、サポート装置200は、シーケンスプログラム271から中間コード272を生成し、PLC100に転送する。PLC100は、サポート装置200から受信した中間コード272をネイティブコードに変換する。PLC100の演算処理部は、ネイティブコードを実行する。ネイティブコードの実行により、制御対象に対する制御が実現される。シーケンスプログラム271は、当該シーケンスプログラム271を構成する単位プログラムを呼出す呼出し命令部を含む。本実施の形態では、単位プログラムとして、ファンクション(FUN:function)またはファンクションブロック(FB:Function Block)の定義であるFUN/FB定義を例示する。FUN/FB定義は、シーケンスプログラム271の記述を効率化するための共通部品として、PLC100のライブラリ等に登録されて、シーケンスプログラム271の実行時には適宜、ライブラリから呼出されて定義されたシーケンスロジックが実行される。なお、単位プログラムの定義内容は、当該単位ブロックを記述するプログラム言語の仕様に依存するが、本実施の形態では、上記のラダーダイアグラムに従うシーケンスロジックによる回路構成を規定する。この回路構成は、主に、論理的な回路構成を含む。
また、サポート装置200は、サポート装置200においてモニタ224による画面表示を実現するためのオブジェクトコード2788を記憶部201に格納する。サポート装置200の記憶部201には、さらに、PLC100用のユーザープログラムから生成され、シーケンスプログラムの回路構成を規定するシーケンス回路情報279および定義回路情報280が格納される。定義回路情報280は、上記のFUN/FB定義により規定される回路構成を示す。
サポート装置200は、シーケンスプログラム271を作成するためのエディタ222を備える。エディット時には、エディタ222が有するオプション設定モジュール2311は、操作部203から操作受付部221が受付けたユーザー操作に従い、シーケンスプログラム271における単位プログラムの呼出し命令のうちから1つ以上を選択し、選択された呼出し命令に、表示態様の切替えオプションを設定する。
したがって、エディット時は、モニタ224によりシーケンスプログラム271が表示されながら命令コードの追加、削除、変更等がなされるが、その場合に、1つ以上の呼出し命令は、設定された上記のオプションに基づき対応の単位プログラムが定義するシーケンスロジックが示す回路構成の画像に切替えられる。これにより、単位プログラムの呼出し命令として、当該単位プログラムが規定する回路構成がインライン展開されて表示される。このように、ユーザー操作により、1つ以上の呼出し命令部に選択的にオプションが設定されることにより、1つ以上の呼出し命令部において対応の単位プログラムが規定する回路構成が視覚化される。
このような視覚化は、オンラインエディット時にも実施される。オンラインエディタ232の局所エディタ233は、シーケンスプログラム271のインライン展開された回路構成の画像に対する変更の操作に従い、シーケンスプログラム271を編集(変更)する。また、定義エディタ234は、インライン展開された回路構成の画像を変更操作に従い、PLC100のライブラリに登録されたFUN/FB定義の定義内容(シーケンスロジック)を編集(変更)する。
また、サポート装置200は、オンラインモニタを提供するためのオンラインモニタモジュール238を有している。オンラインモニタモジュール238は、PLC100からネイティブコードの実行状態を示す回路出力状態156(後述する)を取得する。すなわち、サポート装置200(オンラインモニタモジュール238)は、PLC100との間で、回路出力状態156を遣り取りする。そして、サポート装置200のオンラインモニタモジュール238は、シーケンス回路情報279、定義回路情報280および取得した回路出力状態156に基づいて、PLC100におけるシーケンスプログラムの実行状態を視覚化する(すなわち、オンラインモニタを提供する)。この実行状態の視覚化によって、ユーザーが、シーケンスロジックを編集(変更)するための判断を支援する情報が提供される。
このような、インライン展開のオプションを備えるエディタおよびPLC100で実行状態を視覚化するオンラインモニタにより、単位プログラムおよびシーケンスプログラム等の効率的な開発を支援する環境が提供される。
以下、本発明のより具体的な応用例として、本実施の形態に係るサポート装置200のより詳細な構成および処理について説明する。
<B.システム構成>
図1は、本実施の形態に従うサポート装置200を適用可能なPLCシステム1の構成例を示す模式図である。
図1を参照して、PLCシステム1は、複数のPLC100-1,100-2,100-3,100-4,…(以下、「PLC100」とも総称する。)を含んでいる。PLC100の各々は、リレー,センサー等のフィールド機器である制御対象を制御する制御装置の一例である。サポート装置200は、PLC100に接続可能であり、PLC100の制御プログラムの開発を支援する環境を提供する。PLCシステム1は、1台のPLC100を含む構成であってもよい。以下では、説明を簡単にするために、1台のPLC100を対象にした開発環境を説明する。
PLC100は、典型的には、制御プログラムを含む各種プログラムを実行する主体であるCPUユニット10と、CPUユニット10などへ電力を供給する電源ユニット12と、フィールドからの信号を遣り取りするI/O(Input/Output)ユニット14とを含む。I/Oユニット14は、CPUユニット10とシステムバス11を介して接続されている。
サポート装置200が提供する開発支援環境は、制御プログラムのエディタ(編集)、デバッカ、シミュレータおよびこれらの出力情報をディスプレイ等のモニタに出力するためのモニタ機能等を有し得る。サポート装置200は、さらに、運転中のPLC100の状態値を取得し、ディスプレイ等のモニタに出力する機能なども備える。
記録媒体250に格納されたアプリケーションプログラムであるサポートプログラムがサポート装置200にインストールされることで、上述したような開発支援環境のための各種機能が実現される。記録媒体250に代えて、外部のサーバ装置などからネットワークを介して、サポートプログラムをダウンロードするようにしてもよい。サポート装置200は、一例として、接続ケーブルを介してPLC100のCPUユニット10と接続される。サポート装置200は、典型的には、パーソナルコンピュータで実現される。
<C.PLC100のハードウェア構成例>
次に、PLC100のハードウェア構成例について説明する。図2は、図1に示すPLCシステムを構成するPLC100のハードウェア構成例を示す模式図である。
図2を参照して、PLC100は、予めインストールされたプログラムをプロセッサが実行することで、制御対象に対する制御を実現する。より具体的には、PLC100は、CPU(Central Processing Unit)やMPU(Micro-Processing Unit)などのプロセッサ102と、チップセット104と、メインメモリ106と、フラッシュメモリ108と、USBインターフェイス116と、メモリカードインターフェイス118と、内部バスコントローラ122と、フィールドバスコントローラ124とを含む。フラッシュメモリ108は、システムプログラム110およびユーザープログラム112を格納する。
プロセッサ102は、フラッシュメモリ108に格納されたシステムプログラム110およびユーザープログラム112を読み出して、メインメモリ106に展開して実行することで、制御対象に対する制御を実現する。本明細書において、「制御プログラム」は、御対象に応じて任意に設計されるプログラムの一種であり、システムプログラム110およびユーザープログラム112を包含する概念である。但し、実装方式においては、制御プログラムは、ユーザープログラム112のみを含む場合もある。
システムプログラム110は、データの入出力処理や実行タイミング制御などの、PLC100の基本的な機能を提供するための命令コードを含む。ユーザープログラム112は、シーケンス制御を実行するためのシーケンスプログラム112A(シーケンスプログラム271に対応)およびライブラリ275を含む。ライブラリ275は、シーケンスプログラム112Aの実行時にシーケンスプログラム112Aから呼出し可能な各種関数および1または複数のFUN/FB定義276を含む。
なお、ユーザープログラム112は、モーションプログラム等の他のプログラムを含み得るが、本実施の形態では、説明のためにシーケンスプログラム112Aを主体に説明する。また、本実施の形態では、シーケンスプログラム112Aとして、例えばIEC61131-3等で規定されるラダー言語により、ラダーロジック回路(論理回路)またはラダーロジック回路の組合せにより表される演算の命令コードを記述する「ラダープログラム」を含む。
ライブラリ275のFUN/FB定義276は、FUNまたはFBの定義内容を表す。FUN/FB定義276が定義するFUNまたはFBは、シーケンスプログラムを構成する単位プログラム(以下、POU(Program Organization Unit)とも称する)に相当する。FUNまたはFBにより定義されるシーケンスロジックのコードは、論理回路または論理回路の組合せからなるシーケンスロジック回路(例えば、ラダーロジック回路)を表す。
チップセット104は、各コンポーネントを制御することで、PLC100全体としての処理を実現する。
内部バスコントローラ122は、PLC100と内部バスを通じて連結されるI/Oユニット14との間でデータを遣り取りするインターフェイスである。フィールドバスコントローラ124は、PLC100と図示しないフィールドバスを通じて連結されるI/Oユニット16との間でデータを遣り取りするインターフェイスである。内部バスコントローラ122およびフィールドバスコントローラ124は、対応のI/Oユニット14および16にそれぞれ入力される状態値を取得するとともに、プロセッサ102での演算結果を対応のI/Oユニット14および16から指令値としてそれぞれ出力する。
USB(Universal Serial Bus)インターフェイス116は、USBによりデータの遣り取りを制御する。サポート装置200は、USBインターフェイス116を介してPLC100と通信する。メモリカードインターフェイス118は、メモリカード120を着脱可能に構成されており、メモリカード120に対してデータを書込み、メモリカード120からデータを読出すことが可能になっている。
図2には、プロセッサ102がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(例えば、ASIC(Application Specific Integrated Circuit)またはFPGA(Fie ld-Programmable Gate Array)など)を用いて実装してもよい。あるいは、PLC100の主要部を、汎用的なアーキテクチャに従うハードウェア(例えば、汎用パソコンをベースとした産業用パソコン)を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のOS(Operating System)を並列的に実行させるとともに、各OS上で必要なアプリケーションを実行させるようにしてもよい。
<D.サポート装置200のハードウェア構成例>
図3は、本発明の実施の形態に係るサポート装置200のハードウェア構成例を示す模式図である。図3を参照して、サポート装置200は、典型的には、汎用のコンピュータで構成される。なお、PLC100が配置される製造現場における保守性の観点からは、可搬性に優れたノート型のパーソナルコンピュータが好ましい。
サポート装置200は、記憶部201と、オペレーティングシステム(OS)を含む各種プログラムを実行するCPU202とを備える。記憶部201は、BIOSや各種データを格納するROM(Read Only Memory)104と、CPU202でのプログラムの実行に必要なデータを格納するための作業領域を提供するメモリRAM(Random Access Memory)206と、CPU202で実行されるプログラムなどを不揮発的に格納するハードディスク(HDD)208とを含む。
サポート装置200は、さらに、サポート装置200に指示を入力するためにユーザーが操作するキーボード210およびマウス212を含む操作部203、および情報をユーザーに提示するためのディスプレイ214を含む。サポート装置200は、PLC100(CPUユニット10)などと通信するための通信インターフェイス218を含む。通信インターフェイス218は、USBインターフェイス116と通信するためにUSB通信モジュールを含み得る。
サポート装置200は、記録媒体250からそれに格納されている開発支援環境を提供するためのサポートプログラムを読み取るための光学記録媒体読取装置216を含む。
図3には、CPU202等のプロセッサがプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路(例えば、ASICまたはFPGAなど)を用いて実装してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のOSを並列的に実行させるとともに、各OS上で必要なアプリケーションを実行させるようにしてもよい。
<E.PLCのソフトウェア構成例>
図4は、本発明の実施の形態に係るPLC100のソフトウェア構成の一例を示す模式図である。
図4を参照して、PLC100においては、ハイパーバイザ111がPLC100のハードウェアリソースを管理するとともに、リアルタイムOS114および汎用OS1161に対して、これらのハードウェアリソースを調停しながら割当てることで、共通のハードウェアリソース上で、互いに独立したリアルタイムOS114および汎用OS1161を実行させる。すなわち、ハイパーバイザ111を用いて、複数の異なるOSを実行する仮想化環境を実現する。リアルタイムOS114と汎用OS1161との間は、ハイパーバイザ111を介して、論理的なネットワークが構成されている。
リアルタイムOS114では、シーケンスプログラムを含むユーザープログラム112が実行される。ユーザープログラム112の実行にあたって、タスクスケジューラ1142と、プログラムマネージャ1144と、I/O(Input/Output)制御プロセス1146とが連係する。ユーザープログラム112は、予め実行形式に変換されており、この実行形式のコードが、タスクスケジューラ1142、プログラムマネージャ1144、I/O制御プロセス1146と連係しつつ、制御対象からの信号の取得、制御ロジックの実行、実行結果の反映(アクチュエータの制御)を繰返す。
I/O制御プロセス1146は、制御対象との間で各種信号を遣り取りする処理を司る。タスクスケジューラ1142は、ユーザープログラム112に含まれるタスク毎に、実行周期または実行タイミングを制御する。本実施の形態では、タスクスケジューラ1142は、タスクの実行周期に従う開始タイミングが到来した場合に、プログラムマネージャ1144からタイミング信号を受付けたとき、当該タスクを実行する。プログラムマネージャ1144のタイミング信号を用いた実行制御の詳細は後述する。
汎用OS1161では、任意のユーザーアプリケーション1164および汎用アプリケーション1162が実行される。
ユーザーアプリケーション1164は、典型的には、リアルタイムOS114で実行されるユーザープログラム112の開発ベンダなどによって作成されるアプリケーションであり、ユーザープログラム112の処理結果に係るデータおよび/または処理に必要なデータを取得および/または提供するような処理を実行する。
汎用アプリケーション1162は、汎用OS1161で実行可能な標準的なアプリケーションであり、ユーザーアプリケーション1164と連係することで、汎用的な処理や機能を用いて、より少ない工数でシステムを構築することができる。
<F.PLC100のソフトウェア間の参照例>
図5は、本発明の実施の形態に係るPLC100におけるユーザープログラム112と変数テーブル間のデータの参照例を説明する図である。
図5を参照して、PLC100では、制御プログラムを実行する場合に、システムプログラム110およびユーザープログラム112が実行される。システムプログラム110は、その機能の一部として、I/Oモジュール160を有する。I/Oモジュール160は、I/Oユニットが制御対象の装置が設けられたフィールド側と遣り取りするデータをグローバル変数テーブル150と関連付ける。
PLC100では、変数プログラミングが可能になっており、ユーザープログラム112は、グローバル変数テーブル150において定義されたフィールドデータに関連付けられた変数値を用いて、各種処理が実行可能になっている。
ユーザープログラム112のシーケンスプログラム112Aは、主として、ラダーセクション130と、ライブラリ275とから構成される。ユーザープログラム112は、プロセッサ102により実行可能な形式のネイティブコード154を表す。
ラダーセクション130は、ラダー言語で記述されたラダープログラムを含む。ラダープログラムに含まれた呼出し命令が実行されると、ライブラリ275に含まれるFUN/FB定義276が呼び出されて実行され、その実行結果は呼び出し元のラダープログラムに戻される。
<G.サポート装置200のソフトウェア構成例>
図6は、本発明の実施の形態に係るサポート装置200のソフトウェア構成の一例を示す模式図である。図6では、サポート装置200のソフトウェア構成に関連付けて、記憶部201に格納される情報の一例が示される。図7は、本発明の実施の形態に係る局所フラグテーブル273の一例を模式的に示す図である。図8は、本発明の実施の形態に係る定義フラグテーブル274の一例を模式的に示す図である。図9は、本発明の実施の形態に係るシーケンスロジックの編集の一例を模式的に示す図である。
(g1.サポート装置200に格納される情報)
記憶部201に格納される情報は、プログラムソースコードであるシーケンスプログラム271、シーケンスプログラム271から生成される中間コード272、局所フラグテーブル273、定義フラグテーブル274、オブジェクトコード2788、シーケンス回路情報279および定義回路情報280を含む。
図7を参照して、局所フラグテーブル273では、シーケンスプログラム271中の呼出し命令により呼出されるFUN/FB定義276であって、シーケンスプログラム271の中で、そのシーケンスロジック(シーケンス回路)が展開(以下、インライン展開ともいう)されるFUN/FB定義276のそれぞれについて、情報が登録される。このFUN/FB定義276のそれぞれに対応する情報は、当該FUN/FB定義276を識別する名称(POU名等)である呼出名前2731、シーケンスプログラム271において当該FUN/FB定義276の呼出し命令が出現する行(ライン)の位置2732、および非同期フラグ2733を関連付けて含む。
図8を参照して、定義フラグテーブル274は、ライブラリ275のFUN/FB定義276毎に、当該FUN/FB定義276の識別子(POU名等)である定義名2741、および定義非同期フラグ2742を関連付けて登録する。
ここで、非同期フラグ2733および定義非同期フラグ2742について説明する。サポート装置200は、ユーザー操作に従い、シーケンスプログラム271においてインライン展開されたシーケンスロジックを変更する(以下、局所エディットという)。また、サポート装置200は、ライブラリ275の対応のFUN/FB定義276の定義内容を変更する(以下、定義エディットという)。このような局所エディットまたは定義エディットがなされることにより、シーケンスプログラム271でインライン展開されるFUN/FB定義276のシーケンスロジックと、ライブラリ275の対応のFUN/FB定義276のシーケンスロジックとが一致しない状態(以下、非同期ともいう)が生じ得て、非同期が解消されることで両者のシーケンスロジックが一致する状態(以下、同期ともいう)となる。本来は、両者のシーケンスロジックは同期している。したがって、非同期フラグ2733は、シーケンスプログラム271でインライン展開されたシーケンスロジックが非同期であるとき「1」がセットされて、同期しているとき「0」がセットされる。同様に、定義非同期フラグ2742は、対応のFUN/FB定義276が定義するシーケンスロジックが非同期であるとき「1」がセットされて、同期しているとき「0」がセットされる。
また、図8を参照して、定義フラグテーブル274のFUN/FB定義276の定義名2741は、シーケンスプログラム271中の呼出し命令に設定された後述するオプション277と紐付けされている。
オブジェクトコード2788、シーケンス回路情報279および定義回路情報280は、制御プログラムであるシーケンスプログラム271が表すシーケンスロジック回路をディスプレイ214に表示するために用いられる。具体的には、オブジェクトコード2788は、シーケンスロジック回路の画面表示を実現するためのオブジェクトコードを示す。シーケンス回路情報279は、シーケンスプログラム271のシーケンスロジック回路構成を規定する。定義回路情報280は、ライブラリ275のFUN/FB定義276の定義内容であるシーケンスロジック2761(後述する)から生成されて、シーケンスロジック2761が表す回路構成を規定する。
(g2.開発支援環境を提供するためのモジュール)
図6を参照して、開発支援環境を提供するためのサポートプログラムは、実行されることによりインライン展開を含むオンラインモニタを実現するサポートプログラム700と、実行されることによりオンラインエディットを実現するサポートプログラム710を含む。サポートプログラム700は、操作部203を介したユーザー操作を受付けるための操作受付部221およびモニタ224などを実現するプログラムを含む。サポートプログラム710は、操作受付部221およびモニタ224などを実現するプログラムを含む。これらモジュールは、プログラムまたは回路、またはプログラムと回路の組合せからなる。
エディタ222は、ユーザー操作に従いシーケンスプログラム271を含むユーザープログラムの編集(作成)を実施する。エディタ222は、オンラインエディタ232を含む。オンラインエディタ232は、PLC100の制御プログラム等をPLC100の制御対象を停止させることなくエディットする環境を提供する。つまり、PLC100が運用される製造現場等では、制御対象を停止させることが容易ではない場合も多い。このような背景のもと、PLC100で実行される制御プログラムを一部変更したいような場合であっても、PLC100を一旦停止させなければ、制御プログラムを変更できないということであれば、使い勝手が悪い。そのため、オンラインエディタ232は、PLC100と連携しながら、PLC100の運転中に実行される制御プログラムの一部を書き換える(編集する)ことを可能にする。
エディタ222は、オンラインエディタ232とは異なり、PLC100(またはPLC100の運転状態)に依存せずに、制御プログラムを編集することもできる(オフラインエディットともいう)。オフラインエディット時は、エディタ222は、操作受付部221が受付けた操作内容に従い、シーケンスプログラム271を含むユーザープログラムを作成する。作成されたプログラムは、ソースプログラムであるシーケンスプログラム271として記憶部201に格納される。また、オフラインエディット時は、オプション設定モジュール2311は、ユーザー操作内容に従い、シーケンスプログラム271における呼出し命令のうちから選択される1つ以上に、表示態様の切替えを指示するオプション277を設定する。
オンラインエディタ232は、局所エディットを実施する局所エディタ233および定義エディットを実施する定義エディタ234を含む。
図9は、本発明の実施の形態に係るエディットの一例を模式的に示す図である。図9を参照して、シーケンスプログラム271のシーケンスロジックまたはFUN/FB定義276のシーケンスロジック2761(後述する)が、例えば図9(A)のような回路構成を規定するケースを説明する。このケースでは、シーケンスロジックの回路構成を示す画像がディスプレイ214に表示される。ユーザーは、エディタ222を用いて、画像を操作することで、図9(A)の回路のシーケンスロジック2761を、例えば図9(B)または図9(C)のように、新たな回路が追加されたロジックに変更することができる。
適用例として、例えば、オンラインモニタにより表示される回路出力状態156をモニタした結果、ユーザーは制御対象の故障で回路の一部にエラーが生じたと判断した場合は、図9(C)に示すように、故障に関係する回路部品をバイパスする回路を追加するように表示画像を変更する。なお、オンラインエディタ232による編集の適用例は、故障等のエラー対応に限定されない。
ビルダ223は、「コード変換部」の一実施例である。ビルダ223は、シーケンスプログラム271をビルド処理(パース、最適化、コンパイルなどを含む)して中間コード272を生成する。サポート装置200は、中間コード272を、PLC100にロードする。PLC100のプロセッサ102は、中間コードから、ライブラリ275のFUN/FB定義276の定義内容を参照しながら、ネイティブコード154を生成する。ネイティブコード154は、PLC100が直接解釈して実行することができる実行可能コードである。また、中間コード272も、PLC100が実行可能な形式のコードである。PLC100は、中間コード272を実行する場合は、例えばインタプリタ方式に従い1行毎に解釈しながら実行する。本実施の形態では、PLC100は、ネイティブコード154を実行する場合を説明する。
モニタ224は、開発支援環境における各モジュールの実行結果の情報およびシーケンスプログラム271をディスプレイ214に表示する。シーケンスプログラム271がディスプレイ214に表示される場合、モニタ224は、オプション277が設定された呼出し命令の部分ではインライン展開されたシーケンス回路の画像を表示し、オプション277が設定されていない呼出し命令の部分においては、従来の呼出し命令のみが表示される。このように、ユーザーは、シーケンスプログラム271の1つ以上の呼出し命令を選択し、選択した呼出し命令にオプション277を設定することにより、シーケンスプログラム271の表示時には、当該呼出し命令により呼出されるFUN/FB定義276をインライン展開して表示させることができる。したがって、シーケンスプログラム271のロジックの表示画面において、当該シーケンスプログラム271の呼出し命令のうちユーザーが所望する1つ以上の呼出し命令の部分では、当該呼出し命令で呼出されるFUN/FB定義276のシーケンスロジック(例えば図9のような回路構成)を視覚化することができる。
また、モニタ224は、PLC100の実行状態をシーケンスプログラム271のシーケンスロジック(シーケンス回路)でモニタするためのオンラインモニタモジュール238を含む。
具体的には、オンラインモニタモジュール238は、PLC100からネイティブコード154の実行状態を示す回路出力状態156を取得する。すなわち、オンラインモニタモジュール238は、PLC100との間で、回路出力状態156を遣り取りする。そして、オンラインモニタモジュール238は、シーケンス回路情報279、定義回路情報280および取得した回路出力状態156に基づいて、PLC100におけるシーケンスプログラム271の実行状態を、ディスプレイ214を介し視覚化する(すなわち、オンラインモニタを提供する)。オンラインモニタにおいては、シーケンスプログラム271がインライン展開された回路構成を有する場合は、インライン展開されたシーケンス回路においても、シーケンスロジックの実行状態が視覚化して示される。
このような構成を採用することで、ユーザーは、PLC100で実行されるシーケンスプログラム271を含むユーザープログラムの実行状態を、サポート装置200においてリアルタイムにモニタすることできる。
<H.FUN/FB定義と呼出し命令>
図10は、本発明の実施の形態に係るFUN/FB定義276の一部を模式的に示す図である。図10を参照して、FUN/FB定義276は、FUNまたはFBの演算に用いる引数等の変数名、入出力の別およびデータ型の定義と、シーケンスロジック2761とを含む。FUN/FB定義276(単位プログラム)が呼出されて実行される場合、シーケンスロジック2761に従う演算が、定義された変数に割当てられた値を用いて実行される。実行結果は、単位プログラムからの戻り値として出力される。
図11は、本発明の実施の形態に係るシーケンスプログラム271の一部を模式的に示す図である。図12は、本発明の実施の形態に係るFUN/FB定義276の呼出し命令を用いたシーケンスプログラム271の一例を模式的に示す図である。図11を参照して、シーケンスプログラム271は、例えば命令0、1および2を含む。命令0と命令1は、同じシーケンスロジックを記載するので、命令0,1は、当該シーケンスロジックを定義する共通部品である図10のFUN/FB定義276の呼出し命令278で置き換えることができる(図12参照)。
また、図12のシーケンスプログラム271には、オプション設定モジュール2311により、命令0と命令1にオプション277が設定されているが、命令2には、オプション277は未設定である。この場合、モニタ224は、オプション277が設定された命令0と命令1の呼出し命令278についてインライン展開を実施する。これにより、命令0と命令1の呼出し命令278の部分において、対応のFUN/FB定義276のシーケンスロジック2761に従う回路構成の画像が表示される。
<I.全体処理>
図13は、本発明の実施の形態に係る処理の概要を示すフローチャートである。図13のフローチャートでは、サポート装置200とPLC100との処理が関連付けて示されている。
図13を参照して、ユーザーは、サポート装置200を操作して、制御対象に応じたPLC用のシーケンスプログラム271を含むユーザープログラムを作成する(ステップS1)。具体的には、エディタ222は、オフラインエディットにより、ユーザー操作に従いシーケンスプログラム271を編集し、編集されたシーケンスプログラム271を記憶部201に格納する。オフライン編集において、オプション設定モジュール2311は、ユーザー操作に従い、シーケンスプログラム271の選択された1つ以上の呼出し命令に、オプション277を設定する。
エディット時には、モニタ224は、シーケンスプログラム271をディスプレイ214に表示する(ステップS3)。モニタ224は、オプション277が設定された呼出し命令に対しては、インライン展開を実施する。したがって、オフラインエディット時に、オプション277を設定した呼出し命令の部分においては、対応のシーケンスロジック2761(シーケンス回路構成)が画像で視覚化される。ここでは、インライン展開されたFUN/FB定義276で宣言された入力および出力の変数名は、呼出し命令部分で指定されたパラメータ名を用いて表示される。
なお、シーケンスプログラム271が表示される場合、オプション277が設定された呼出し命令はインライン展開がなされるが、本実施の形態では、オプション設定モジュール2311は、さらに、ユーザー操作に従い、呼出し命令に既に設定されたオプション277を有効化または無効化する。これにより、ユーザーの選択操作に従い、オプション277が既に設定された呼出し命令の部分において、インライン展開してシーケンスロジック2761(シーケンス回路構成)を表示する(オプション277を有効化)、または呼出し命令のまま表示する(オプション277を無効化)かの切替えが可能である。
また、インライン展開されるFUNに対しては、ユーザーはモニタ用に、インスタンス名の指定操作(指定操作しなくてもよい)をすることができる。なお、FBは、インスタンス名を有するので、指定は不要である。ユーザーがインライン展開されたFUNに対してインスタンス名の指定操作をすると、シーケンスプログラム271にインスタンス名が保持される。なお、インスタンス名が指定されていない場合、任意のユニークなインスタンス名がビルド時に割り当てられる。
シーケンスプログラム271の作成が完了すると、ユーザー操作に従い、ビルダ223が起動されて、ビルド処理(ステップT1)が実施される。ビルダ223は、ビルド処理において、シーケンスプログラム271に対応の中間コード272およびオブジェクトコード2788を生成する。このとき、サポート装置200は、シーケンスプログラム271からシーケンス回路情報279を併せて生成する。シーケンス回路情報279は、オンラインモニタを提供するために用いられる表示用の情報である。シーケンス回路情報279の詳細については、後述する。
サポート装置200は、シーケンスプログラム271に対応する中間コード272をPLC100へ転送する(ステップT2)。
PLC100は、サポート装置200から中間コード272を受信し格納する(ステップU1)。PLC100は、受信した中間コード272を用いて起動処理を実施する(ステップU2)。このとき、PLC100は、中間コード272から、オプションが設定された各呼出し命令の行と、定義名の組を格納したオプションテーブル1165を生成する。
PLC100は、ネイティブコード154(シーケンスプログラム271)を実行する(ステップU3)。PLC100においてシーケンスプログラム271が実行されることにより、制御対象の制御処理が実現されると、以下に示すようなオンラインモニタに係る処理が実行される。
すなわち、ユーザーがサポート装置200に対してオンラインモニタの実行を指示する。操作受付部221を介して受付けた実行指示により、オンラインモニタモジュール238が起動される。オンラインモニタモジュール238は、オンラインモニタ処理を実施する(ステップP1)。
オンラインモニタモジュール238は、PLC100に対して、回路出力状態156を要求する(ステップP11)。この要求に応答して、PLC100のユーザーアプリケーション1164は、シーケンスプログラム271に規定されているシーケンス回路の入出力変数に基づき、グローバル変数テーブル150を検索する。この検索により、実行中のシーケンスプログラム271(ネイティブコード154)の実行状態を示す回路出力状態156は、グローバル変数テーブル150から取得される。ユーザーアプリケーション1164は、取得された回路出力状態156をサポート装置200へ送信する(ステップU31)。
回路出力状態156の値はインライン回路状態1166の値を含む。インライン回路状態1166は、実行中のシーケンスプログラム271においてオプション277が設定された各FUN/FB定義276のシーケンスロジック2761が規定するシーケンス回路(すなわちインライン展開されたシーケンス回路)の状態の値を示す。インライン回路状態1166は、オプションテーブル1165が示す当該FUN/FB定義276が呼出された各行(ライン)について、行番号と、当該行で呼出されるFUN/FB定義276が規定するシーケンス回路の回路出力状態の値とを含む。
オンラインモニタモジュール238は、PLC100からのシーケンス回路情報、回路出力状態156およびインライン回路状態1166に基づいて、インライン展開されたシーケンス回路を含むシーケンスプログラム271のシーケンスをディスプレイ214において視覚化する(ステップP12)。これにより、インライン展開されたシーケンス回路を含むシーケンスプログラム271全体のシーケンス回路に、回路出力状態の値を反映するパワーフロー表示を実現することができる。
ユーザーは、オンラインモニタモジュール238が提供するディスプレイ214の画面から、PLC100でのシーケンスプログラム271の実行中の状態を確認することができる。
本実施の形態では、シーケンスプログラム271においてインライン展開された呼出し命令は、(インスタンス名.FUN/FB定義内のローカル変数名)としてではなく、(FUN/FB定義内のローカル変数名)としてシーケンスロジックが表示される。したがって、オンラインモニタモジュール238は、(FUN/FB定義内のローカル変数名)とインスタンス名の組合せに基づき、PLC100から(インスタンス名.FUN/FB定義内のローカル変数名)に対応するインライン回路状態1166による現在値の取得を行い、インライン展開されたシーケンス回路画像においてパワーフロー表示を行う。
また、オンラインモニタモジュール238は、シーケンスプログラム271においてパワーフロー表示を実施する場合、ディスプレイ214にウォッチウィンドウを表示して、ウォッチウィンドウにおいて(インスタンス名.FUN/FB定義内のローカル変数名)とその現在値を出力してもよい。
また、サポート装置200は、インライン展開されたシーケンス回路画像においてのみパワーフロー表示をするように、PLC100に対して、インライン回路状態1166のみを要求してもよい。
また、オンラインモニタモジュール238は、シーケンスプログラム271の全体について、パワーフロー表示するモードと、インライン展開されたシーケンス回路画像においてのみパワーフロー表示をするモードとの切替えを実施してもよい。この切替えは、たとえばユーザー操作に従い実施され得る。
PLC100においてシーケンスプログラム271が実行されることにより、制御対象の制御処理が実現されると、以下に示すようなオンラインエディットに係る処理を実施することができる。
すなわち、PLC100においてシーケンスプログラム271を実行中において、操作受付部221はユーザーから受付ける実行指示により、オンラインエディタ232を起動する(ステップQ1)。オンラインエディタ232は、操作受付部221を介して受付けるユーザー操作に従い、シーケンスプログラム271を編集する。このとき、オンラインモニタが提供するシーケンス回路の回路出力状態値は、ユーザーが、シーケンスロジックを変更すべき箇所を判断するための視覚化された支援情報となり得る。視覚化された回路出力状態値から、例えば、ユーザーは、図9(A)のシーケンス回路の故障を判断し、判断した故障箇所を、図9(B)または(C)のように変更することができる。オンラインエディタ232は、操作受付部221から受付けたユーザー操作に従い、シーケンスプログラム271を変更(編集)する。変更後のシーケンスプログラム271は、記憶部201に格納される。
ユーザー操作に従い、ビルダ223が起動される。ビルダ223は、オンラインエディット処理がなされたシーケンスプログラム271のビルド処理を実行する(ステップR1)。ビルダ223は、ビルド処理により得られた中間コード272を記憶部201に格納するとともに、PLC100に転送する(ステップR2)。
転送後は、サポート装置200は、例えばユーザー操作に従い処理を終了するか否かを判断し(ステップR3)、終了すると判断した場合は(ステップR3でYES)、処理を終了する。終了しないと判断した場合は(ステップR3でNO)、ステップP1等の次の処理に移行する。
PLC100は、サポート装置200からオンラインエディット後の中間コード272を受信するかを判断する(ステップU4)。PLC100は、サポート装置200から中間コード272を受信した場合(ステップU4でYES)、受信した中間コード272を格納し(ステップU5)、その後、ステップU2に移行する。これにより、オンラインエディット後のシーケンスプログラム271に従う制御対象の制御、およびオンラインモニタ処理を実施することができる。
なお、中間コード272を受信しなかった場合(ステップU4でNO)、処理を終了する。
(i1.オンラインエディット処理)
図14は、本発明の実施の形態に係るオンラインエディット処理を説明するフローチャートである。図14を参照して、図13のオンラインエディット処理(ステップQ1)を詳細に説明する。なお、オンラインエディットの対象は、呼出し命令部分においてインライン展開されたシーケンスロジックまたはライブラリ275のFUN/FB定義276であるとする。インライン展開されたシーケンスロジックまたはFUN/FB定義276のオンラインエディットは、ロジック回路構成または入出力変数の作成または編集(追加、変更、削除など)を含む。
まず、オンラインエディタ232は、起動されると、操作受付部221が受付けたユーザー操作に基づき、エディット対象はインライン展開されたシーケンスロジックの局所(部分)であるか、FUN/FB定義276の定義内容であるかを判断する(ステップQ11)。
局所であると判断すると(ステップQ11で(局所))、オンラインエディタ232は、ユーザー操作に従い、1つ以上の呼出し命令部分においてインライン展開されたシーケンスロジックを編集し(ステップQ13)、局所フラグテーブル273の非同期フラグ2733に「1」を設定する(ステップQ17)。具体的には、オンラインエディタ232は、ステップQ13で編集がなされた各呼出し命令の部分について、当該呼出し命令の部分で、呼出されていたFUN/FB定義276の名称である呼出名前2731、当該呼出し命令が記述されていた行(ライン)の位置2732および非同期フラグ2733を関連付けて、局所フラグテーブル273に登録する。この登録時に、オンラインエディタ232は、非同期フラグ2733に「1」を設定する。
エディタ222は、ユーザー操作に従い、シーケンスプログラム271における非同期である呼出し命令の部分を一覧表示するようモニタ224に指示する(ステップQ19)。具体的には、エディタ222は、シーケンスプログラム271を走査することにより、局所フラグテーブル273の位置2732で示す呼出し命令のうち、対応の非同期フラグが「1」である呼出し命令の位置2732を示す位置情報をモニタ224に出力する。モニタ224は、ディスプレイ214に表示中のシーケンスプログラム271において、エディタ222からの位置情報が示す各行の呼出し命令部を予め定められた表示態様(例えば、反転表示等)に変更する。
上記の一覧表示は、シーケンスプログラム271においてインライン展開されシーケンスロジックのうち、当該シーケンスロジックを対応のFUN/FB定義276の内容に反映するものをユーザーが判断するための支援情報を提供する。
オンラインエディタ232は、操作受付部221が受付けるユーザー操作に従い、FUN/FB定義276の内容を変更するか否かを判断する(ステップQ21)。オンラインエディタ232は、FUN/FB定義276の定義内容を変更しないと判断すると(ステップQ21でNO)、処理を終了する。
一方、オンラインエディタ232は、FUN/FB定義276の定義内容を変更すると判断すると(ステップQ21でYES)、PLC100のライブラリ275のFUN/FB定義276を変更する(ステップQ23)。具体的には、オンラインエディタ232は、局所フラグテーブル273から、非同期フラグ2733が「1」である呼出名前2731を抽出する。オンラインエディタ232は、抽出した呼出名前2731に基づき、ライブラリ275を検索する。検索により、呼出名前2731に対応するFUN/FB定義276を特定し、特定したFUN/FB定義276の定義内容を、ステップQ13で受付けた編集内容を用いて変更する。この変更は、FUN/FB定義276の定義内容を、インライン展開されたシーケンスロジックの編集(変更)後の内容に一致させる(コピーする)ことも含み得る。オンラインエディタ232は、変更がなされた呼出し命令の部分に対応した非同期フラグ2733を「1」から「0」に変更する。
ステップQ11に戻る。一方、オンラインエディタ232は、FUN/FB定義276の編集であると判断すると(ステップQ11で(定義))、オンラインエディタ232は、ユーザー操作に従い、ライブラリ275の1つ以上のFUN/FB定義276の定義内容を編集することにより変更し(ステップQ25)、定義フラグテーブル274の定義非同期フラグ2742に「1」を設定する(ステップQ27)。具体的には、オンラインエディタ232は、ステップQ25で編集がなされたFUN/FB定義276の名称である定義名2741および定義非同期フラグ2742を関連付けて、定義フラグテーブル274に登録する。この登録時に、オンラインエディタ232は、定義非同期フラグ2742を「1」に設定する。
オンラインエディタ232は、ユーザー操作に従い、シーケンスプログラム271の対応するインライン展開部のシーケンスロジックを、FUN/FB定義276の変更後の定義内容を用いて変更するか否かを判断する(ステップQ29)。オンラインエディタ232は、変更しないと判断した場合(ステップQ29でNO)、処理は終了する。
一方、オンラインエディタ232は、インライン展開部のシーケンスロジックを変更すると判断すると(ステップSQ29でYES)、オンラインエディタ232は、シーケンスプログラム271のインライン展開されたシーケンスロジックの回路を、対応のFUN/FB定義276の変更後の定義内容に一致するように更新する(ステップQ31)。具体的には、オンラインエディタ232は、定義回路情報280を、FUN/FB定義276の変更後の定義内容を用いて変更する。これにより、定義回路情報280は、FUN/FB定義276の変更後の定義内容を示すシーケンス回路構成を表す情報に更新される。また、オンラインエディタ232は、モニタ224に、インライン展開部の表示更新を指示する。モニタ224は、指示に応じて、シーケンスプログラム271のインライン展開部のシーケンス回路構成の画像を、更新後の定義回路情報280を用いて更新する。ステップQ31では、オンラインエディタ232は、局所フラグテーブル273に登録されている全ての非同期フラグ2733を「0」にセットする。
このように、オンラインエディタ232およびモニタ224は、ディスプレイ214に表示中のシーケンスプログラム271のインライン展開部のシーケンス回路構成の画像を、変更後のFUN/FB定義276のシーケンスロジックが規定する回路構成の画像に、一括して更新する。これにより、インライン展開部のシーケンスロジックの回路構成の画像が、FUN/FB定義276の変更(編集)後の定義内容を示すように更新される。この更新がなされる場合に、シーケンスプログラム271の周辺回路と当該シーケンスロジックの回路との関連性の確認も可能とするような視覚化情報の提供も可能となる。
(i1-1.局所エディットの具体例)
図14のステップQ23では、FUN/FB定義276の定義内容の変更について、2つのケースのいずれかを実施することができる。1つ目のケースでは、シーケンスプログラム271に非同期である呼出し命令の部分が複数個あった場合に、複数個の呼出し命令の部分の全てを対象に、対応のFUN/FB定義276の定義内容の変更を実施する。2つ目のケースでは、複数個の呼出し命令の部分の全てを対象に定義内容の変更を実施するのではなく、複数個の呼出し命令の部分のうちユーザー操作により選択され1つ以上の呼出し命令の部分を対象に、対応のFUN/FB定義276の定義内容の変更を実施する。
2つ目のケースにおいて、選択された1以上の呼出し命令の部分を対象に、対応のFUN/FB定義276の定義内容の変更を実施する場合を説明する。このケースでは、ユーザー操作により選択されなかった呼出し命令部分に対応のFUN/FB定義276は更新されず、シーケンスプログラム271の呼出し命令部分でインライン展開されたシーケンスロジックのみが変更される。この際、オンラインエディタ232はユーザー変更後のシーケンスロジックを、シーケンスプログラム271に新しく保存(上書き等)する。また、局所フラグテーブル273の対応の非同期フラグ2733を、非同期状態を示す「1」のままとする。
ビルダ223は、変更後のシーケンスロジックを有するシーケンスプログラム271をビルド処理する。ビルド処理では、ビルダ223は、対応のFUN/FB定義276は更新されなかったインライン展開部のシーケンスロジックのローカル変数名は(インスタンス名.FUN/FB定義内のローカル変数名)としてビルドする。ビルドして得られた中間コード272はPLC100に転送される。PLC100では、サポート装置200から受信する中間コード272に基づくネイティブコード154を生成し、PLC100はシーケンスプログラム271(ネイティブコード154)を実行する。サポート装置200のオンラインモニタモジュール238は、PLC100から、回路出力状態156を受信し、受信した回路出力状態156を用いて、上記の非同期状態のインライン展開部のシーケンスロジックにおいてパワーライン表示を実施する。ユーザーは、このように視覚化された回路出力状態156から、非同期状態のインライン展開部のシーケンスロジックを用いて、対応のFUN/FB定義276を更新するか否かを判断するための支援情報を得ることができる。
なお、局所エディットのメインユースケースとして、本実施の形態では、オンラインエディット時に適用するケースを記載するが、ユースケースはオンラインエディットに限定されない。具体的には、インライン展開された内容と対応のFUN/FB定義276の定義内容とが一致している場合において、ユーザーは、オンラインエディット時にFUN/FB定義276の変更を反映させたくない場合は、予め定められた操作をすることにより、非同期状態とすることができる。
(i2.ビルド処理)
図15は、本発明の実施の形態に係るビルド処理を説明するフローチャートである。図15を参照して、図13のオンラインエディット後のビルド処理(ステップR1)を詳細に説明する。図15のビルド処理は、主に、呼出し命令部の処理を主体に説明する。
ビルダ223は、シーケンスプログラム271を先頭から1行ごとに走査する(ステップR11)。走査により呼出し命令部を検出すると(ステップR13でYES)、ステップR15に移行するが、呼出し命令部を検出しない場合は(ステップR13でNO)、ステップR23に移行する。
ステップR15では、ビルダ223は、呼出し命令部のオプション277の設定の有無を判断する(ステップR15)。呼出し命令部にオプション277が設定されていないと判断されると(ステップR15で無)、ステップR21に移行する。オプション277が設定されていると判断されると(ステップR15で有)、ビルダ223は、当該呼出し命令部で呼出されるFUN/FB定義276がオンラインエディット中であるかを、定義フラグテーブル274の対応の定義非同期フラグ2742が「1」であるか否かに基づき判断する(ステップR17)。
定義非同期フラグ2742が「1」であり、オンラインエディット中であると判断すると(ステップR17でYES)、ステップR21に移行する。ステップR21では、ビルダ223は、当該呼出し命令部に、予め定められた(通常の)呼出し命令のコードを割当てる。定義非同期フラグ2742が「0」である、すなわちオンラインエディット中ではないと判断すると(ステップR17でNO)、ビルダ223は、この呼出し命令部に、対応のFUN/FB定義276のシーケンスロジック2761に従うコードを割当てる(ステップR19)。この割当られたコードでは、FUN/FB定義276により定義されるローカル変数名は、(インスタンス名.FUN/FB定義内のローカル変数名)が割当られる。
ビルダ223は、シーケンスプログラム271の全ての行の走査が終了したか否かを判断し、走査終了していないと判断すると(ステップR23でNO)、ステップR11に戻る。一方、ビルダ223は、走査終了と判断すると(ステップR23でYES)、ビルダ223は、シーケンスプログラム271から中間コード272を生成する(ステップR25)。
上記のビルド処理におけるステップR17,R21についてさらに説明する。ステップR17で、ビルダ223は、呼出し命令部で呼出されるFUN/FB定義276の対応の定義非同期フラグ2742が「1」であると判断すると(ステップR17でYES)、当該呼出し命令部に通常の呼出し命令のコードを割当て(ステップR21)、ビルド処理を実施する。これにより、通常の呼出し命令により、FUN/FB定義276のオンラインエディットがされたシーケンスロジックを実行することができる。また、インライン展開される(オプション277が設定された呼出し命令部の)シーケンスロジックにもオンラインエディットによる変更を加えることができる。
(i3.シーケンス回路情報)
図20は、本実施の形態に係るシーケンス回路情報の一例を模式的に示す図である。図20を参照して、例えば、PLC用のユーザープログラムで規定される回路毎に含まれる回路部品の情報が記述される。
図20には、1つの接点2781と1つのコイル2791とからなる回路の例を示す。この例において、シーケンス回路情報279の回路定義2811は、「回路」などの種別を示す種別情報2821と、各回路に含まれる回路部品の情報を示す回路部品情報2831,2841とを含む。図20に示される回路定義2811が、シーケンスプログラム271に規定される回路の数だけ繰返されることになる。
同様に、定義回路情報280も、FUN/FB定義276のシーケンスロジック2761で規定される回路構成の数だけ回路定義が繰返されている。なお、図20に示す回路定義2811の記載例は一例であり、どのようなフォーマットに従ってもよい。
<J.PLCでのプログラム実行開始タイミング>
本実施の形態では、オンラインエディットによる変更後のシーケンスプログラム271(中間コード272)をPLC100へ転送し、PLC100が変更後のシーケンスプログラム271の実行をする場合、実行開始のタイミングを適宜設定することができる。
図16は、本発明の実施の形態に従うオンラインエディット機能によって転送された制御プログラムの実行開始タイミングを説明するための図である。この制御プログラムは、シーケンスプログラム271を含む概念である。図16には、S-A,S-B,S-Cで示す3つのシーケンスプログラム271を転送する場合の処理例を示す。
図16には、それぞれのシーケンスプログラム271の転送が完了されると、当該転送が完了したシーケンスプログラム271の実行が開始される例を示す。図16において、矢印(→)の1個分が、タスクスケジューラ1142によるタスクの実行周期の1回分を示す。また、図16の「チェック」のステップは、プログラムマネージャ1144により実行される。
プログラムマネージャ1144は、「チェック」のステップにおいて、図13のステップT2,R2において、サポート装置200から転送されたシーケンスプログラム271の受信が完了するか否かを判断する。すなわち、エディットされたシーケンスプログラム271のサイズは可変である等様々な要因により、当該転送に係る時間はばらつく。このような時間のばらつきがあるとしても、PLC100においてシーケンスプログラム271に従うタスクの実行サイクルが維持されるように、プログラムマネージャ1144は、転送によるシーケンスプログラム271の受信を完了したときに受信完了のタイミング信号を、タスクスケジューラ1142に出力する。タスクスケジューラ1142は、プログラムマネージャ1144からタイミング信号を受信し、且つ実行周期が到来したとき、転送されたシーケンスプログラム271を実行可能な状態に移行させる。
図16では、シーケンスプログラム271を転送するケースを説明したが、ライブラリ275のFUN/FB定義276をサポート装置200においてオンラインエディットし、その後、PLC100に転送する場合も、図16と同様に、プログラムマネージャ1144は受信が完了したことを検知し、タイミング信号を出力する。タスクスケジューラ1142は、プログラムマネージャ1144からタイミング信号を受信し、且つ実行周期が到来したとき、転送されたFUN/FB定義276を呼出し可能な状態に移行させる。
<K.プログラム>
本実施の形態に示した各フローチャートの処理を実行するための開発支援環境を提供するサポートプログラムは、サポート装置200の記憶部201に格納されている。CPU202は、記憶部201からサポートプログラム700,710を読出し、実行することにより、本実施の形態で説明した各部を実現することが可能となる。
サポートプログラム700,710は、サポート装置200に付属するフレキシブルディスク、CD-ROM(Compact Disk-Read Only Memory)、ROM、RAMおよび記録媒体250などのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。記録媒体250は、コンピュータその他装置、機械等が記録されたプログラム等の情報を読み取り可能なように、当該プログラム等の情報を、電気的、磁気的、光学的、機械的または化学的作用によって蓄積する媒体である。
また、サポートプログラム700,710は、サポート装置200に内蔵するHDD208などの記録媒体にて記録させて、プログラムを提供することもできる。また、図示しないネットワークから通信インターフェイスを介したダウンロードによって、プログラムを提供することもできる。
<L.利点>
図17、図18および図19は、本発明の実施の形態に係る開発支援環境により奏される利点を説明する図である。図17~図19は、実行された場合に、いずれも同じ実行結果を出力するシーケンスプログラム271の一例である、図17~図19では、実行結果の出力であるパワーフロー表示が太いラインで示されている。
具体的には、図17では命令0と命令1において、シーケンスロジックが記述されているので、パワーフローが把握し易いが、プログラムの開発効率の点では、このような同じシーケンスロジックは部品化したいとの要望がある。図18は、この要望に応えたケースであり、命令0と命令1では、当該シーケンスロジックを定義したFUN/FB定義276(部品)はライブラリ275から呼出し実行する呼出し命令に置換されている。図18では、ライブラリ275のFUN/FB定義276(部品)を編集することで、シーケンスプログラム271の命令0と命令1で呼出されるFUN/FB定義276(部品)に当該編集内容を同時に反映することができる。
しかしながら、図18の命令0と命令1は、共通の呼出し命令が、内部のシーケンスロジックを記載しない部品画像で表示されるが、部品中のシーケンスロジックの実行結果を示すパワーラインを確認したいとの要望がある。また、命令0のシーケンスロジックを変更しても、命令1のシーケンスロジックは変更したくないとの要望もある。図19はこの両方の要望に応えた本実施の形態に係る開発支援環境により作成可能なシーケンスプログラム271である。
図19では、命令0と命令1は、同じFUN/FB定義276を呼出す呼出し命令を示すが、呼出し命令部ではFUN/FB定義276のシーケンスロジック2761がインライン展開されている。オンラインモニタモジュール238は、インライン展開されたシーケンスロジックにおいて、その実行結果を示すパワーライン表示を実施する。また、(i1-1.局所エディットの具体例)で説明したように、オンラインエディタ232により、命令0のインライン展開されたシーケンスロジックを編集したとしても、命令1のシーケンスロジックには当該編集後の内容で変更しないことも可能となる。
<M.変形例>
本発明の実施の形態に係る変形例を説明する。
本実施の形態では、サポート装置200は、シーケンスプログラム271にインライン展開された非同期のシーケンスロジックを、ライブラリ275の対応のFUN/FB定義276の定義内容(シーケンスロジック2761等)と、ソースプログラムとして比較し、その差異を示す情報を出力する。
また、本実施の形態では、インライン展開されたシーケンスロジックを、エディットにより変更した場合、変更後のシーケンスロジックを、ライブラリ275の対応のFUN/FB定義276からは独立した完全なローカルロジックとして、シーケンスプログラム271に追加する。この際、サポート装置200は、対応のFUN/FB定義276のローカル変数を、当該FUN/FB定義276の呼出し命令コード部の変数テーブルにマージする。
また、本実施の形態に係る開発支援環境では、モニタ224を備える、モニタ224は必須の構成要件としない開発支援環境であってもよい。すなわち、少なくともエディタ222(より特定的には、局所エディタ233)を備える開発支援環境として提供されてもよい。
局所エディタ233では、シーケンスプログラム271にインライン展開された部品(FUN/FB定義276)を対象に処理を実施する。その一方で、インライン展開される部品が増加すると、当該シーケンスプログラム271に記述される変数が増加し、このような変数増加に伴い、メモリの使用量が増加する。このようなメモリ使用量の増加に対処するために、当該変数名は、(インスタンス名.FUN/FB定義内のローカル変数名)として記述するのではなく、(FUN/FB定義内のローカル変数名)として短縮化することで、変数増加に伴うメモリの使用量を減らすことが可能になる。また、ビルダ223は、同期中はインライン展開を利用せずに、局所エディタ233で局所変更する場合のみにインライン展開化してビルド処理を実施することで、ビルド処理対象のシーケンスプログラム271のステップ数を減らすことが可能となる。
<N.付記>
上述したような本実施の形態は、以下のような技術思想を含む。
[構成1]
制御対象を制御する制御装置(100)で実行されるシーケンスプログラム(271)の開発を支援するサポート装置(200)であって、
前記シーケンスプログラムは、当該シーケンスプログラムを構成する単位プログラム(276)の呼出し命令を含み、
前記サポート装置は、
前記サポート装置に対する操作を受付ける操作受付部(221)と、
前記シーケンスプログラムの表示時に、前記単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示するモニタ部(224)と、
表示される前記回路を変更する操作に従い、前記シーケンスロジックを変更後の回路を表すシーケンスロジックに変更するエディタ部(222)と、
前記シーケンスプログラムを実行可能コードに変換するコード変換部(223)と、を備え、
前記コード変換部は、
切替えオプションに従い、前記シーケンスプログラム中の呼出し命令に、前記変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てて前記変換を実施する、サポート装置。
[構成2]
設定操作に従い、前記シーケンスプログラムの呼出し命令に前記切替えオプションを設定する設定部(2311)をさらに備え、
前記モニタ部は、
前記シーケンスプログラムを表示する場合に、前記呼出し命令に前記切替えオプションが設定されているとき、当該呼出し命令を前記回路に展開して表示する、構成1に記載のサポート装置。
[構成3]
前記制御装置は、前記単位プログラムのシーケンスロジックのコードを呼出し可能に格納するライブラリ(275)を備え、
前記ライブラリに格納される前記シーケンスロジックのコードを、前記変更後のシーケンスロジックのコードを用いて変更する、構成1または2に記載のサポート装置。
[構成4]
前記制御装置は、前記単位プログラムのシーケンスロジックのコードを呼出し可能に格納するライブラリ(275)を備え、
前記シーケンスプログラムは、1つ以上の前記呼出し命令を含み、
選択操作に従い、前記1つ以上の呼出し命令のうち、前記ライブラリのシーケンスロジックのコードの変更に用いる前記変更後のシーケンスロジックを有する呼出し命令を選択する、構成1から3のいずれか1に記載のサポート装置。
[構成5]
前記1つ以上の呼出し命令のうち前記エディタ部によりシーケンスロジックの変更がなされた呼出し命令の一覧を表示する、構成4に記載のサポート装置。
[構成6]
前記モニタ部は、
前記制御装置から前記単位プログラムが定義するシーケンスロジックの実行状態を示す回路出力状態(156;1166)を取得するとともに、前記単位プログラムが定義するシーケンスロジックが示す回路および取得した前記回路出力状態に基づいて、前記制御装置における当該シーケンスロジックの実行状態を、前記展開された回路において視覚化する、構成1から5のいずれか1に記載のサポート装置。
[構成7]
制御対象を制御する制御装置(100)で実行されるシーケンスプログラム(271)の開発の支援に向けられたサポートプログラム(710)であって、
前記シーケンスプログラムは、当該シーケンスプログラムを構成する単位プログラム(276)の呼出し命令を含み、
前記サポートプログラムはコンピュータ(200)に、
前記コンピュータに対する操作を受付けるステップと、
前記シーケンスプログラムの表示時に、前記単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示するステップと、
表示される前記回路を変更する操作に従い、前記シーケンスロジックを変更後の回路を表すシーケンスロジックに変更するステップと、
前記シーケンスプログラムを実行可能コードに変換するステップと、を備え、
前記実行可能コードに変換するステップは、
切替えオプションに従い、前記シーケンスプログラム中の呼出し命令に、前記変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てて前記変換を実施するステップを含む、サポートプログラム。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。