以下、本開示の実施の形態に係るプログラマブルコントローラについて、図面を参照しつつ詳細に説明する。
実施の形態1.
図1には、本実施の形態に係るプログラマブルコントローラを有するPLC(Programmable Logic Controller)システム1000の構成が示されている。PLCシステム1000は、工場に代表される施設に構築される製造システム、検査システム、その他の処理システムの一部に相当する制御システムである。PLCシステム1000では、プログラマブルコントローラとしてのPLC100が、通信線で接続された被制御機器としての機械装置200を制御することでラインを稼働させる。PLC100は、機械装置200を制御するためのデバイスメモリ110と、デバイスメモリ110に記憶されるデバイス値111のログを記録するためのバッファ120及び記憶部130と、を有する。
デバイスメモリ110に記憶されるデバイス値111は、機械装置200に記憶されるデータと同期される値を含む。PLC100は、例えば、デバイス値111を読み出すことで機械装置200の状態を判断し、デバイス値111を書き換えることで機械装置200の運転モードを変更する。また、デバイス値111は、機械装置200と同期される値の他に、PLC100が機械装置200を制御するための演算過程で用いられる中間データ、及び、機械装置200を管理するための統計データを含んでもよいし、その他の内部データを含んでもよい。機械装置200は、例えば、ラインに設置されるセンサ装置、アクチュエータ、ロボット、その他のFA機器である。
また、PLC100は、デバイス値111のログを、バッファ120を経由してから記憶部130に保存する。バッファ120は、デバイスメモリ110と記憶部130との読み書きの速度差を吸収させるために設けられる。本実施の形態では、バッファ120に格納された一部のデータが、特定の条件の成立に応じて、記憶部130に書き込まれる前にバッファ120から破棄されることで、記憶部130に保存されるログの対象が制御される。記憶部130に保存されたログは、通信線でPLC100に接続された表示データ生成装置300によって読み出され、トラブルの原因を究明するための表示データが当該ログから生成される。そして、生成された表示データに従って、表示装置301によって表示画面がユーザに対して表示される。
表示データ生成装置300及び表示装置301は、PLC100に接続される産業用PC(Personal Computer)及び付属のLCD(Liquid Crystal Display)であってもよいし、一体的に形成されたタブレット端末であってもよい。また、図1においては表示データ生成装置300がPLC100の外部に配置されているが、表示データ生成装置300は、ビルディングブロック型のPLC100を構成する1つのユニットであってもよい。
図2には、PLC100のハードウェア構成が模式的に示されている。図2に示されるように、PLC100は、プロセッサ101と、主記憶部102と、補助記憶部103と、入力部104と、出力部105と、通信部106と、を有する。主記憶部102、補助記憶部103、入力部104、出力部105及び通信部106はいずれも、内部バス107を介してプロセッサ101に接続される。
プロセッサ101は、CPU(Central Processing Unit)又はMPU(Micro Processing Unit)を含む。プロセッサ101は、補助記憶部103に記憶されるプログラムP1を実行することにより、種々の機能を実現して、後述の処理を実行する。また、プロセッサ101は、補助記憶部103に記憶される制御プログラムP2を実行することにより、機械装置200を制御する。制御プログラムP2は、例えば、ラダープログラムであってもよいし、C言語に代表される高級言語で記述されたソースコードから生成された実行形式のバイナリファイルであってもよい。
主記憶部102は、RAM(Random Access Memory)を含む。主記憶部102には、補助記憶部103からプログラムP1及び制御プログラムP2がロードされる。そして、主記憶部102は、プロセッサ101の作業領域として用いられる。
補助記憶部103は、EEPROM(Electrically Erasable Programmable Read-Only Memory)及びHDD(Hard Disk Drive)に代表される不揮発性メモリを含む。補助記憶部103は、プログラムP1及び制御プログラムP2の他に、プロセッサ101の処理に用いられる種々のデータを記憶する。補助記憶部103は、プロセッサ101の指示に従って、プロセッサ101によって利用されるデータをプロセッサ101に供給する。また、補助記憶部103は、プロセッサ101から供給されたデータを記憶する。
入力部104は、ハードウェアスイッチ、入力キー及びポインティングデバイスに代表される入力デバイスを含む。入力部104は、ユーザによって入力された情報を取得して、取得した情報をプロセッサ101に通知する。
出力部105は、LED(Light Emitting Diode)、LCD(Liquid Crystal Display)及びスピーカに代表される出力デバイスを含む。出力部105は、プロセッサ101の指示に従って種々の情報をユーザに提示する。
通信部106は、外部の装置と通信するためのネットワークインタフェース回路を含む。通信部106は、外部から信号を受信して、この信号により示されるデータをプロセッサ101へ出力する。また、通信部106は、プロセッサ101から出力されたデータを示す信号を外部の装置へ送信する。
なお、PLC100がビルディングブロック型のプログラマブルコントローラである場合には、PLC100を構成する各ユニットが、図2に示されるハードウェア構成の一部又は全部を備えて、システムバスを介して互いに接続されてもよい。
上述のハードウェア構成が協働することにより、PLC100は、デバイス値111をロギングする機能を発揮する。詳細には、PLC100は、図3に示されるように、その機能として、制御プログラムP2を実行するプログラム実行部141と、機械装置200の制御により変化するデバイス値111を記憶するデバイスメモリ110と、デバイスメモリ110からデバイス値111を繰り返し収集する収集部142と、デバイス値111のログの保存に関するトリガの有無を判定するトリガ判定部143と、収集されたデバイス値111を示すデータをバッファ120に格納するバッファリング部144と、データを一時的に記憶するバッファ120と、バッファ120からデータを読み出して記憶部130にログデータとして格納するロギング部145と、ログデータを保存する記憶部130と、種々のパラメータを設定する設定部146と、を有する。
プログラム実行部141は、主としてプロセッサ101によって実現される。プログラム実行部141は、制御プログラムP2に規定された手順を繰り返し実行することにより、デバイスメモリ110に記憶されるデバイス値111を利用して機械装置200を制御する。
デバイスメモリ110は、主として主記憶部102によって実現される。デバイスメモリ110のデータは、プログラム実行部141による制御プログラムP2の実行により変化する。例えば、制御プログラムP2の実行により、センサ装置である機械装置200のセンシング結果を示す値が定期的に取得されて更新される。また、制御プログラムP2の実行により、アクチュエータである機械装置200を構成するステッピングモータの回転角度を示す値が、機械装置200に動作を指示すべきタイミングで更新される。
収集部142は、主としてプロセッサ101によって実現される。収集部142は、デバイスメモリ110の予め設定されたアドレスの領域に格納されているデバイス値111を予め設定された周期で繰り返し読み出して、読み出したデバイス値111をトリガ判定部143に出力する。予め設定された周期は、例えば、プログラム実行部141による制御プログラムP2の1回の実行に相当するスキャンタイムである。デバイス値111は、例えば、16ビットのワードデータにより示される値である。スキャンタイムの長さは、例えば、100マイクロ秒、10ミリ秒、又は1000ミリ秒である。収集部142は、PLC100において、メモリから値を収集する収集手段の一例に相当し、デバイスメモリ110は、収集手段によるデータの収集先であるメモリの一例に相当する。
トリガ判定部143は、主としてプロセッサ101によって実現される。トリガ判定部143は、3種の条件が成立するか否かを判定する。詳細には、トリガ判定部143は、デバイス値111を示すデータをバッファ120に格納するためのバッファリング条件が成立するか否かを判定する。また、トリガ判定部143は、バッファ120のデータを記憶部130に格納するためのロギング条件が成立するか否かを判定する。さらに、トリガ判定部143は、バッファ120の全部の領域に記憶されているデータを破棄することで当該領域を解放して、新たなデータが格納される領域を確保するための取消条件が成立するか否かを判定する。
バッファリング条件、ロギング条件及び取消条件は、設定部146によって予め設定される。バッファリング条件、ロギング条件及び取消条件はそれぞれ、異なる条件であって、例えば、収集対象であるデバイス値111又は収集対象でないデバイス値111のうちの指定されたビット値のOFF状態からON状態への変更、ビット値がON状態を継続する時間が閾値を超えたことの検知、複数のビット値が指定された順序でON状態になったことの検知、デバイス値111により示される数値に関する条件の不成立から成立への判定、又は、これらの組み合わせにより成立する。バッファリング条件、ロギング条件及び取消条件は、これに限定されず、他の条件であってもよい。例えば、バッファリング条件、ロギング条件及び取消条件は、PLC100の外部からのトリガ信号の受信により成立する条件であってもよい。
トリガ判定部143は、収集部142によって収集されたデバイス値111をバッファリング部144に出力する。トリガ判定部143は、バッファリング条件及び取消条件の少なくとも一方が成立すると判定した場合には、バッファリング条件の成立及び取消条件の成立の少なくとも一方をバッファリング部144に通知し、ロギング条件が成立すると判定した場合には、ロギング条件の成立をロギング部145に通知する。
バッファリング部144は、主としてプロセッサ101によって実現される。バッファリング部144は、バッファリング条件が成立する場合に、トリガ判定部143から出力されたデバイス値111を示すデータをバッファ120に格納する。詳細には、図4に示されるように、データD[T10]が収集されたタイミングでバッファリングトリガが発生した場合に、バッファリング部144は、当該バッファリングトリガの発生から予め指定された長さの指定期間において収集されるデータD[T10],D[T11],D[T12],D[T13]を含むデータD1をバッファ120に格納する。ここで、データD[T10]は、時刻がT10,T11,・・・と経過するとともに変化するデバイス値111のうちの、時刻T10における値を示す。また、バッファリングトリガの発生は、バッファリング条件が成立したことの判定、及び、当該成立のバッファリング部144への通知に相当する。指定期間の長さは、例えば、スキャンタイムの10倍又は100倍に相当する。バッファリング部144は、予め定められたバッファリング条件が成立したときに収集部142によって収集された値を示すデータをバッファに格納するバッファリング手段の一例に相当する。
バッファ120は、主として主記憶部102によって実現される。バッファ120は、FIFO(First Input First Output)型のリングバッファであってもよいし、他の形式の記憶装置であってもよい。本実施の形態に係るバッファ120の容量は、バッファリング条件の1回の成立によりバッファリング部144によって格納されるデータD1のサイズより大きく、当該サイズの2倍に相当する容量より小さい。図5の例では、新たなバッファリングトリガが発生すると、当該バッファリングトリガに対応するデータD[T17],D[T18],D[T19],D[T20]を含む新たなデータがバッファ120への格納の対象となる。ここで、データD1が、記憶部130に格納されないままバッファ120に保持されており、バッファ120にデータD[T17]~D[T20]を格納するための十分な空き容量がないため、新たなデータはバッファ120に格納されることなく破棄される。
図3に戻り、ロギング部145は、主としてプロセッサ101によって実現される。ロギング部145は、予め設定された一定の時間間隔で、ロギング条件の成立の有無を確認する。ロギング条件の成立を検知した場合には、ロギング部145は、バッファ120からデータを読み出して、ログデータとして記憶部130に格納する。記憶部130は、主として補助記憶部103又は脱着可能なメモリーカードによって実現される。ロギング部145は、予め定められたロギング条件が成立する場合に、記憶手段としての記憶部130にログデータを格納するロギング手段の一例に相当する。
図5には、ロギングトリガが発生した場合に、ロギング部145によってデータD1がバッファ120から読み出されて、ログデータに相当するファイルF1として記憶部130に格納されることが示されている。ここで、ロギングトリガの発生は、ロギング条件が成立したことの判定、及び、当該成立のロギング部145への通知に相当する。
図5の例では、さらに、ロギングトリガの発生により、バッファ120の全部の領域が解放されることが示されている。すなわち、ロギング条件が成立する場合に、バッファ120によるデータD1の保持が終了し、バッファリング部144によるバッファ120への新たなデータの書き込みが可能になる。図5に示されるように、バッファ120の解放により、ロギングトリガの発生後におけるバッファリングトリガの発生に対応する新たなデータD2がバッファ120に格納される。
ただし、ロギング部145によってバッファ120からデータD1が読み出されない場合であっても、図6に示されるように、取消トリガが発生した場合には、バッファ120の全部の領域が解放されて、新たなデータの格納が可能になる。すなわち、バッファリング部144は、取消条件が成立する場合に、バッファ120におけるデータD1の保持を終了する。ここで、取消トリガの発生は、取消条件が成立することの判定、及び、当該成立のバッファリング部144への通知に相当する。
なお、ロギング条件又は取消条件の成立によるバッファ120の解放は、バッファ120に格納されているデータをロギング対象から除外することによる当該データの破棄を意味する。ロギング条件又は取消条件が成立したときには、バッファ120のデータが消去されてもよいし、消去されることなく上書きが許可される状態に変更されてもよい。
図6から分かるように、最初のバッファリングトリガの発生後において2番目のバッファリングトリガの発生前に取消トリガが発生する場合には、当該取消トリガによりバッファ120に格納されたデータD1のバッファリングが取り消される。そして、2番目のバッファリングトリガにより、データD[T17]~D[T20]を含むデータD3がバッファ120に格納される。2番目のバッファリングトリガの発生後において3番目のバッファリングトリガの発生前にロギングトリガが発生すると、データD3を含むファイルF3が記憶部130に格納されて、バッファ120が解放される。その後、解放されたバッファ120には、3番目のバッファリングトリガによりデータD2が格納される。図5,6から分かるように、取消トリガの有無により、記憶部130に格納される前にバッファ120に一時的に記憶されているデータの保持及び破棄が制御される。
図3に戻り、設定部146は、主としてプロセッサ101及び入力部104の協働により実現される。ただし、PLC100のユーザインタフェースである端末がPLC100に接続される場合には、設定部146は、プロセッサ101及び通信部106の協働により実現されてもよい。設定部146は、ユーザにより入力されたパラメータを取得して、取得したパラメータを、収集部142、トリガ判定部143、バッファリング部144及びロギング部145に設定する。設定部146によって設定されるパラメータは、デバイスメモリ110における収集対象のデバイス値111のアドレス、デバイス値111を収集する周期、バッファリング条件、ロギング条件及び取消条件の内容、並びに、バッファリングの対象となるデバイス値111が収集される期間の長さ、を含む。設定部146によって取消条件の内容が設定されるため、ユーザは、取消トリガを用いて、記憶部130へのロギングの前にバッファ120内に一時的に格納されているデータを整理することができる。
続いて、PLC100によって実行される処理について、図7~14を参照して詳細に説明する。
図7,8には、PLC100がデータをバッファ120に格納するバッファリング処理の手順が示されている。このバッファリング処理は、バッファ120に設定されるモードを利用して、上述のPLC100の機能を実現する処理である。バッファリング処理は、ユーザの操作による特定のアプリケーションの実行と同時に開始されてもよいし、制御プログラムP2の実行と同時に開始されてもよい。また、バッファリング処理は、収集部142によるデバイス値111の収集に対応して、後述するように繰り返し実行される。以下、バッファリング処理について説明してから、このバッファリング処理において設定されるモードと上述のPLC100の機能との関係について説明する。
バッファリング処理では、トリガ判定部143が、取消条件が成立するか否かを判定する(ステップS101)。取消条件が成立すると判定された場合(ステップS101;Yes)、バッファリング部144が、バッファ120の現在のモードがバッファリングモードであるか否かを判定する(ステップS102)。バッファリングモードは、バッファ120へのデータの格納が開始され、当該データの記憶が維持されるモードである。バッファリング処理の開始当初は、バッファ120が待機モードに設定されるため、ステップS102の判定は否定される。なお、待機モードは、バッファ120にデータが格納されておらず、バッファ120が空いていて、データの格納を待機するモードである。
バッファ120のモードがバッファリングモードであると判定した場合(ステップS102;Yes)、バッファリング部144は、ステップS101における取消条件の成立に応じてバッファ120を解放して、バッファ120のモードを待機モードに設定する(ステップS103)。これにより、バッファ120への新たなデータの格納が可能になる。
取消条件が成立しないと判定された場合(ステップS101;No)、及び、バッファ120のモードがバッファリングモードでないと判定された場合(ステップS102;No)、ステップS103が実行されることなく、PLC100による処理は、ステップS104に移行する。
ステップS103に続いて、トリガ判定部143は、バッファリング条件が成立するか否かを判定する(ステップS104)。バッファリング条件が成立すると判定された場合(ステップS104;Yes)、バッファリング部144は、バッファ120のモードが待機モードであるか否かを判定する(ステップS105)。すなわち、バッファリング部144は、バッファリング条件が成立した場合において、バッファ120に対するデータの書き込みが可能であるか否かを判定する。
バッファ120のモードが待機モードであると判定した場合(ステップS105;Yes)、バッファリング部144は、バッファ120のモードをバッファリングモードに設定する(ステップS106)。これにより、バッファ120へのデータの格納が開始される。
バッファリング条件が成立しないと判定された場合(ステップS104;No)、及び、バッファ120のモードが待機モードでなく、バッファ120へのデータの書き込みが禁止されていると判定された場合(ステップS105;No)、ステップS106が実行されることなく、PLC100による処理は、ステップS107へ移行する。
ステップS106に続いて、トリガ判定部143は、ロギング条件が成立するか否かを判定する(ステップS107)。ロギング条件が成立すると判定された場合(ステップS107;Yes)、バッファリング部144は、バッファ120のモードがバッファリングモードであるか否かを判定する(ステップS108)。すなわち、バッファリング部144は、ロギング条件が成立した場合において、記憶部130に格納すべきデータがバッファ120に格納されているか否かを判定する。
バッファ120のモードがバッファリングモードであると判定した場合(ステップS108;Yes)、バッファリング部144は、バッファ120のモードをロギングモードに設定する(ステップS109)。ロギングモードは、バッファ120からデータを出力するモードである。これにより、バッファ120からのデータの読み出しが開始される。
ロギング条件が成立しないと判定された場合(ステップS107;No)、及び、バッファ120のモードがバッファリングモードでないと判定された場合(ステップS108;No)、ステップS109が実行されることなく、PLC100による処理は、図8に示されるステップS110へ移行する。
ステップS109に続いて、図8に示されるように、バッファリング部144は、バッファ120のモードがバッファリングモード又はロギングモードであるかを判定する(ステップS110)。バッファ120のモードがバッファリングモード又はロギングモードであると判定した場合(ステップS110;Yes)、バッファリング部144は、現在のバッファリングモード又はロギングモードにおいてバッファ120に格納すべき指定期間分のデータのバッファリングが未完であるか否かを判定する(ステップS111)。
バッファリングが未完であると判定した場合(ステップS111;Yes)、バッファリング部144は、データをバッファ120に格納する(ステップS112)。その後、PLC100は、図7に示されるステップS101以降の処理を繰り返す。また、バッファ120のモードがバッファリングモード又はロギングモードでないと判定された場合(ステップS110;No)、及び、バッファリングが未完でないと判定された場合(ステップS111;No)、ステップS112が実行されることなく、PLC100は、ステップS101以降の処理を繰り返す。
ここで、図7,8に示されるようなフローチャートに従ってバッファ120のモードが設定されることにより、上述のPLC100の機能が実現されることについて、図9~13を用いて説明する。
図9には、トリガ判定部143及びバッファリング部144がバッファリング処理を繰り返し実行し、3度目のバッファリング処理が実行される際にバッファリングトリガが入力されることが示されている。このバッファリングトリガによって、図7中のステップS104,S105の判定が肯定され、バッファ120のモードがステップS106においてバッファリングモードに設定される。そして、バッファ120のモードがバッファリングモードに設定されると、図9に示されるように、バッファ120へデータが格納される。バッファリング部144は、現在までにトリガ判定部143を介して取得しているデータが、バッファリングトリガの発生後の指定期間に属するデータであれば、当該データをバッファ120に格納する。指定期間分のデータのバッファ120への格納が未完了である場合、及び、完了後において、バッファリング条件、ロギング条件及び取消条件のいずれも成立しなければ、バッファ120のモードは、図9に示されるようにバッファリングモードに設定されている。
図10には、指定期間分のデータのバッファリングが未完了であり、バッファリング部144によるバッファ120へのデータの格納が継続している最中にロギングトリガが発生する例が示されている。この例においては、バッファ120のモードがロギングモードに設定され、図8中のステップS110の判定が肯定される結果、バッファリングが継続する。
また、図11には、バッファ120に何らデータが格納されていない状態においてロギングトリガが発生する例が示されている。この例においては、図7中のステップS107の判定が肯定されるが、ステップS108の判定が否定されるため、バッファ120のモードが変更されることなく待機モードの状態が維持される。
図12には、ロギングトリガ及び取消トリガが発生することなく、バッファリングトリガが2回発生する例が示されている。この例においては、1回目のバッファリングトリガにより、図9の例と同様に、バッファ120にデータが格納され、バッファ120のモードがバッファリングモードのまま維持される。そして、2回目のバッファリングトリガが発生した際には、図7中のステップS104の判定が肯定されるが、ステップS105の判定が否定されるため、ステップS106が実行されない。すなわち、バッファ120のモードがバッファリングモードに改めて設定されることがなく、新たなデータの格納が開始しない。このため、図12に示されるように、2回目のバッファリングトリガに対応するデータは破棄され、バッファ120に格納されることがない。これにより、図5に示されたように、2回目のバッファリングトリガが無視されることとなる。
図13には、バッファリングトリガの後に取消トリガが発生する例が示されている。取消トリガが発生すると、図7中のステップS101の判定が肯定され、ステップS102の判定も肯定されるため、バッファ120に格納されたデータが破棄されてバッファ120のモードが待機モードに設定される。そして、バッファ120は、バッファリングトリガの発生前と同様に、新たなデータの格納が可能な状態になる。すなわち、図6に示されたように取消トリガによってバッファ120が解放される。
続いて、ロギング部145によって実行されるロギング処理について、図14を用いて説明する。このロギング処理は、バッファリング処理と同時に開始される。
ロギング処理では、ロギング部145は、バッファ120のモードがロギングモードであるか否かを判定する(ステップS21)。バッファ120のモードがロギングモードでないと判定した場合(ステップS21;No)、ロギング部145は、ステップS21の判定を繰り返して、バッファ120のモードがロギングモードとなるまで待機する。
一方、バッファ120のモードがロギングモードであると判定した場合(ステップS21;Yes)、ロギング部145は、このロギングモードにおける指定時間分のロギングが完了しているか否かを判定する(ステップS22)。ロギングが完了していると判定した場合(ステップS22;Yes)、ロギング部145は、バッファ120を解放してバッファ120のモードを待機モードに設定する(ステップS23)。これにより、図9に示されるように、記憶部130へのファイルF1の保存の完了後に、バッファ120が解放される。すなわち、図5,6に示されたように、ロギングトリガによってバッファ120が解放される。また、バッファ120のモードが待機モードとなるため、新たなデータの格納が可能な状態になる。その後、ロギング部145は、ステップS21以降の処理を繰り返す。
一方、指定時間分のロギングが完了していないと判定された場合(ステップS22;No)、ロギング部145は、バッファ120からデータを読み出してロギングする(ステップS24)。すなわち、ロギング部145は、バッファ120からロギング対象のデータを読み出して記憶部130に格納する。その後、ロギング部145は、ステップS21以降の処理を繰り返す。
以上、説明したように、本実施の形態に係るバッファリング部144は、バッファリング条件及びロギング条件のいずれとも異なる予め定められた取消条件が成立する場合に、バッファに格納されているデータを破棄する。このため、取消条件の成立に応じて、バッファ120に格納されているデータが、記憶部130へのロギングの前に整理される。これにより、後の検証に必要なデータがバッファ120において消失するリスクを低減することができる。したがって、トラブルの原因究明をより容易なものとすることができる。
例えば、PLC100によって実現される研磨工程が、粗削り工程、本削り工程、仕上げ磨き工程をこの順に含み、荒削り工程の完了、本削り工程の完了、及び、仕上げ磨き工程の完了のそれぞれでバッファリングトリガを発生させ、研磨工程の次の検査工程における異常の検知に応じてロギングトリガを発生させるケースを想定する。このケースにおいて、研磨対象となるワーク由来の不良が検知されやすいのは、最初の粗削り工程の段階であり、荒削り工程で収集されたデータが重視されることがある。具体的には、荒削り工程における異常な摩擦抵抗が動力元のモータの電流値に反映される例が考えられる。そして、仕上げ磨き工程へ進むにつれて、異常原因の兆候データが微小化していく。
このようなケースにおいて、バッファ120の容量が1回分のバッファリングトリガによるデータのサイズに相当するときには、検査工程において異常を検知しても、荒削り工程のデータをロギングすることができない。
これに対して、本実施の形態に係るPLC100によれば、本削り工程の完了によるバッファリング及び仕上げ磨き工程の完了によるバッファリングを取り消すような取消条件を設定して、バッファ120に格納されるデータを制御することにより、荒削り工程のデータをロギングすることができる。
なお、上述のケースにおいて、本削り工程及び仕上げ磨き工程においてバッファリングトリガが発生しないようなバッファリング条件を設定すれば、結果的に、適切なロギングが達成される。しかしながら、バッファリング条件の設定に対して、熟練者のノウハウが必要であり、そのような設定が困難な場合がある。また、バッファリング条件を一度設定した後には変更を避けることが望ましい場合がある。さらに、これらの場合において、荒削り工程のデータに異常が見られなければ、本削り工程及び仕上げ磨き工程のデータを検証のためにロギングしたいという要望が生じる。このような要望に対して、本実施の形態に係るPLC100によれば、バッファリング条件を変更することなく取消条件を変更することにより、バッファ120から出力されるデータを柔軟に制御することが可能になる。
また、バッファ120にデータが保持され、バッファ120が飽和する場合において、取消条件の成立又はロギング部145によるバッファ120からのデータの読み出しまで、バッファリング部144は、さらにバッファリング条件が成立するときに、当該バッファリング条件の成立により新たに格納すべきデータを破棄して、バッファ120にデータの記憶を維持させる。ここで、バッファ120が飽和する場合はすなわち、新たなバッファリングのための空き領域が不足する場合であり、バッファ120に格納されているデータのうちの、未だ記憶手段130へのロギングの対象とされておらず、ロギング部145によって読み出されていないバッファデータのサイズと、新たに格納すべきデータのサイズと、の総和が、バッファ120の容量を超える場合に相当する。そして、バッファリング部144は、取消条件が成立する場合に、バッファデータを破棄して、取消条件の成立の後にバッファリング条件が成立したときに収集された値を示すデータをバッファ120に格納する。
また、バッファリング部144は、取消条件が成立する場合に、取消条件の成立の直前におけるバッファリング条件の成立によりデータが格納されたバッファ120の全部の領域を解放して、取消条件の成立の後に新たなバッファリング条件が成立するときに収集された値を示す新たなデータを、バッファ120の解放された領域に格納する。ここで、解放されるバッファ120の全部の領域は、バッファリング手段によって新たなデータが格納される第1領域の一例に相当する。
実施の形態2.
続いて、実施の形態2について、上述の実施の形態1との相違点を中心に説明する。なお、上記実施の形態1と同一又は同等の構成については、同等の符号を用いる。本実施の形態は、バッファリングを開始するための開始条件の成立前から、バッファリングを終了するための終了条件の成立後までの指定期間において収集された値を示すデータがロギングされる点で、実施の形態1とは異なる。
上記実施の形態1に係るバッファリング条件は、予め定められた長さの指定期間におけるバッファリングを開始する条件であるが、指定期間の長さを状況に応じて変更したいという要望が生じ得る。そこで、バッファリングを終了するための終了条件を設定することが考えられる。さらに、上記実施の形態1では、バッファリング条件が成立してからバッファリングが開始されるが、バッファリング条件が成立する以前のデータをある程度ロギングしたいという要望がある。同様に、終了条件の成立以降のデータをある程度ロギングしたいという要望がある。そこで、バッファリングを開始するためのバッファリング開始条件の成立前から、バッファリングを終了するためのバッファリング終了条件の成立後までのデータをロギングする形態について、以下説明する。
図15には、本実施の形態に係るバッファリングの概要が示されている。図15に示されるように、バッファリング開始トリガが発生するまでの予め指定された長さの第1期間A1、バッファリング開始トリガの発生からバッファリング終了トリガの発生までの第2期間A2、及び、バッファリング終了トリガの発生を起点とする予め指定された長さの第3期間A3、を含む指定期間において収集された値のデータがバッファ120に格納される。ここで、バッファリング開始トリガは、バッファリング開始条件の成立、及び、当該成立のトリガ判定部143からバッファリング部144への通知に相当し、バッファリング終了トリガは、バッファリング終了条件の成立、及び、当該成立のトリガ判定部143からバッファリング部144への通知に相当する。
バッファリング開始条件及びバッファリング終了条件は、上記実施の形態1に係るバッファリング条件と同様に、デバイス値111に応じて成否が判定されてもよいし、外部からのトリガ信号の有無に応じて成否が判定されてもよい。バッファリング開始条件及びバッファリング終了条件それぞれの内容は、設定部146によって予めトリガ判定部143に対して設定される。そして、バッファリング開始条件及びバッファリング終了条件それぞれの成否は、トリガ判定部143によって判定される。
バッファリング部144は、バッファリング開始条件の成立に備えて、収集部142によって収集された値を示すデータを、リングバッファであるバッファ120に順次格納する。そして、バッファリング開始条件が成立すると、バッファリング部144は、当該バッファリング開始条件の成立よりも予め指定された時間長だけ前に収集された値を起点として、連続して収集された値を示すデータをバッファ120において固定する。図15の例では、バッファリング部144は、バッファリング開始トリガの発生以前の第1期間A1にて収集されたデータD[T10],D[T11]をバッファ120に保持させ、上書き及び削除を禁止する。
そして、バッファリング部144は、バッファリング開始条件の成立からバッファリング終了条件の成立までに収集された値を示すデータ、及び、バッファリング終了条件の成立から予め指定された時間長だけ後の時点までに連続して収集された値を示すデータを、バッファ120において固定する。図15の例では、バッファリング部144は、バッファリング開始トリガの発生からバッファリング終了トリガの発生までの第2期間A2にて収集されたデータD[T12],D[T13],D[T14],D[T15],D[T16],D[T17]をバッファ120に保持させて、上書き及び削除を禁止する。さらに、バッファリング部144は、バッファリング終了トリガの発生以後の第3期間A3にて収集されたデータD[T18],D[T19]をバッファ120に保持させて、上書き及び削除を禁止する。これにより、第1期間A1、第2期間A2及び第3期間A3を含む指定期間において収集されたD[T10]~D[T19]を含むデータD21がバッファ120において保持される。
第1期間A1及び第3期間A3の長さはそれぞれ、ユーザにより入力されて、設定部146によってバッファリング部144に対して設定される。第1期間A1及び第3期間A3の長さはそれぞれ、例えば、スキャンタイムの5倍又は50倍に相当する。上記実施の形態1は、バッファリング開始条件をバッファリング終了条件と同一の条件とした上で、第1期間A1の長さをゼロとして、第3期間A3の長さをユーザが指定する例に相当する。
なお、バッファリング部144は、バッファリング開始条件及びバッファリング終了条件の成否に関わらず、収集された値を示すデータを格納する。このため、バッファ120に格納されるデータのうちの、バッファ120に固定されるデータを他のデータから区別することが好ましい。例えば、バッファリング開始条件の成立及びバッファリング終了条件の成立を示す情報を付与することが考えられる。具体的には、図15に示されるケースにおいて、バッファ120内のデータD[T12]に対して、バッファリング開始トリガの発生を示す情報B1を付与し、バッファ120内のデータD[T17]に対して、バッファリング終了トリガの発生を示す情報B2を付与する。ただし、バッファ120によって保持されるデータを他のデータと区別する手法は、図15に示される例に限定されない。例えば、データD[T10]~D[T19]それぞれに1ビットのフラグ値を付与してもよいし、バッファ120が保持すべきデータを示す管理情報をバッファ120の外部で管理して、当該管理情報を参照することでバッファ120に保持させるべきデータが確認されてもよい。
また、バッファリング開始条件の成立後に、バッファリング終了条件が成立しない場合、及び、バッファリング終了条件の成立までの時間長が過剰に長くなる場合に備えて、バッファ120に格納可能なデータの容量を予め設定することが望ましい。バッファ120の容量は、直接設定されてもよいし、値を収集する指定期間の長さの上限値を指定することにより間接的に設定されてもよい。バッファリング部144は、バッファリング終了条件が成立しないまま、バッファ120に保持させるべきデータのサイズが、図16に示されるようなバッファ120の容量に迫る場合には、当該容量に収まる限り最大のサイズのデータをバッファ120に保持させることが望ましい。バッファリング終了条件が成立しないままバッファ120が飽和した場合には、飽和した時点でバッファリングを停止するか、又は、最も古いデータを削除して上書きすることによりバッファリングを継続する処理が生じる。すなわち、バッファリング部144は、第1期間A1、第2期間A2及び第3期間A3において収集されたデータのうちの、上限値以下のサイズのデータをバッファ120に格納する。この場合において、設定部146は、バッファリング条件の1回の成立によりバッファ120に格納されるデータのサイズの上限値についての設定を受け付ける第2受付手段の一例に相当する。
また、バッファリング終了トリガの発生するタイミングによりバッファ120に保持されるデータのサイズが変動するため、バッファ120の容量は大きいことが望ましい。さらに、バッファ120に格納されるデータを圧縮してもよい。例えば、バッファリング部144は、収集部142によって収集された2つの値の差分を示すデータを、バッファ120に格納してもよい。具体的には、図16に示されるように、時刻T10において収集された値V[T10]を示すデータD[T10]、時刻T11に収集された値V[T11]から時刻T10において収集された値V[T10]を減じて得る差を示すデータD[11]、及び、Nを12から19までの整数として、時刻T(N)に収集された値V[T(N)]から時刻T(N-1)において収集された値V[T(N-1)]を減じて得る差を示すデータD[T(N)]を含むデータD21がバッファリングされてもよい。
図17に示されるように、ロギングトリガ及び取消トリガが発生しないままバッファリング開始トリガ及びバッファリング終了トリガの組み合わせが2回発生する場合には、2回目の組み合わせに対応するデータは、バッファ120に格納されることなく破棄される。また、図18に示されるように、取消トリガが発生する場合には、取消トリガに応じてバッファ120に格納されているデータが破棄されて、2回目のバッファリング開始トリガ及びバッファリング終了トリガに応じてデータD[T20]~D[T29]を含むデータD23がバッファ120に格納されて保持される。
バッファ120において保持されるデータは、ロギングトリガの発生に応じてロギング部145によって読み出されて記憶部130に格納される。図17の例では、データD21が、ファイルF21としてロギングされ、図18の例では、データD23がファイルF23としてロギングされる。また、ロギングトリガが発生すると、バッファ120が解放されることにより、新たなデータの格納が可能になる。図17,18の例では、ロギングトリガの発生後に、3回目のバッファリング開始トリガ及びバッファリング終了トリガに応じてデータD[T30]~D[T39]を含むデータD22がバッファに格納される。
続いて、本実施の形態に係るバッファリング処理について、図19を用いて説明する。図19に示されるように、バッファリング処理では、実施の形態1と同様のステップS101~S103が実行される。
ステップS101の判定が否定された場合(ステップS101;No)、ステップS102の判定が否定された場合(ステップS102;No)、及び、ステップS103が完了した場合に、トリガ判定部143は、バッファリング開始条件が成立するか否かを判定する(ステップS104a)。バッファリング開始条件が成立すると判定された場合(ステップS104a;Yes)、ステップS105に処理が移行し、バッファリング開始条件が成立しないと判定された場合(ステップS104a;No)、ステップS107に処理が移行する。
ステップS105~S109については、実施の形態1と同様に実行され、ステップS110についても、図20に示されるように、実施の形態1と同様に実行される。
ステップS110の判定が肯定された場合(ステップS110;Yes)、バッファリング部144は、指定時間分のデータのバッファリングが未完で、かつ、バッファ120に空き領域があるか否かを判定する(ステップS111a)。ここで、指定時間分のデータのバッファリングは、バッファリング終了条件の成立から予め定められた時間長だけ後に収集されたデータまでのバッファリングに相当する。
ステップS111aの判定が肯定された場合(ステップS111a;Yes)、バッファリング部144は、バッファリングを実行する(ステップS112)。その後、図19に示されるステップS101に処理が移行する。一方、ステップS111aの判定が否定された場合(ステップS111a;No)、バッファリング部144がバッファリングを実行することなく、ステップS101に処理が移行する。
ステップS110の判定が否定された場合(ステップS110;No)、バッファリング部144は、バッファリングを実行する(ステップS113)。具体的には、バッファリング部144が、収集部142によって収集された値を示すデータをバッファ120に格納する。このステップS113におけるバッファリングは、バッファリング開始条件の成立に備えたバッファリングに相当する。その後、ステップS101に処理が移行する。
以上、説明したように、バッファリング開始条件及びバッファリング終了条件が設定され、バッファリング開始条件の成立前から収集されたデータ、及び、バッファリング終了条件の成立後に収集されたデータをロギングの対象とする形態においても、上記実施の形態1と同様の効果を奏することができる。
なお、図21に示されるように、バッファリング部144は、バッファリング開始トリガの発生時からバッファリング終了トリガの発生時までに収集された値を示すデータをバッファリングしてもよい。図21の例は、実施の形態2における第1期間A1及び第3期間A3双方の長さをゼロと設定した場合に相当する。この場合には、バッファリング部144は、バッファリング開始トリガが発生してからバッファリングを開始すればよく、バッファリング開始トリガの発生前においてバッファリングする必要はない。
また、図22に示されるように、バッファリング部144は、バッファリングトリガの発生前の第1期間A1及びバッファリングトリガの発生後の第3期間A3を含む指定期間において収集された値を示すデータをバッファリングしてもよい。図22の例は、実施の形態2におけるバッファリング開始条件をバッファリング終了条件と同一とした場合に相当する。この場合には、バッファリング部144は、バッファリングトリガの発生に備えて、バッファリングトリガの発生前においてもバッファリングを実行すればよい。
実施の形態3.
続いて、実施の形態3について、上述の実施の形態1との相違点を中心に説明する。なお、上記実施の形態1と同一又は同等の構成については、同等の符号を用いる。本実施の形態は、複数回のバッファリング条件の成立それぞれに対応するデータがバッファ120に格納される点で、実施の形態1とは異なる。
図23に示されるように、バッファ120は、複数のサブバッファ121を有する。サブバッファ121のそれぞれには、バッファリング条件の1回の成立によりデータが格納される。すなわち、サブバッファ121それぞれの容量は、バッファリング条件の1回の成立によるバッファリングの対象となるデータのサイズより大きく、バッファリング条件の2回の成立によるバッファリングの対象となるデータのサイズより小さい。
図24には、サブバッファ121へのバッファリングの概要が示されている。図24に示されるように、初期状態では、すべてのサブバッファ121が空き領域となる。その後、バッファリングトリガが発生する度に、格納先のサブバッファ121を切り替えて、バッファリングトリガに対応するバッファデータがバッファリング部144によって格納される。そして、バッファデータは、サブバッファ121によって保持される。
すべてのサブバッファ121にバッファデータが格納された後に、さらにバッファリングトリガが発生した場合には、バッファ120が飽和し空き領域がないため、当該バッファリングトリガに対応するデータは、バッファ120に格納されることなく、破棄される。そして、取消トリガ又はロギングトリガが発生した場合には、いずれかのサブバッファ121に格納されているデータが破棄されることで当該サブバッファ121が解放されて、新たなデータの格納が可能となる。
取消トリガが発生したときに解放すべきサブバッファ121は、予め指定された手法により決定される。例えば、1つのサブバッファ121を複数のサブバッファから予め定められた順序で選択し、この選択を巡回させるように、解放すべきサブバッファ121を決定してもよい。また、最も古いデータが格納されたサブバッファ121が解放されてもよい。また、取消トリガが、サブバッファ121ごとに対応して定められ、1つのサブバッファ121に対応する取消トリガが発生したときに、当該サブバッファ121が解放されてもよい。
ロギングトリガが発生したときにデータが読み出されて解放されるサブバッファ121についても同様に、予め定められた手法により決定されてもよい。また、ロギングトリガの発生時に、ユーザの入力に基づいて解放されるサブバッファ121が指定されてもよい。例えば、バッファリングトリガ、又は、バッファリング開始トリガ及びバッファリング終了トリガの組み合わせの回数が指定され、指定された回数だけ過去に遡って発生したトリガに応じてデータが格納されたサブバッファ121が解放されてもよい。また、サブバッファ121を識別するための識別子が直接指定されてもよい。さらに、バッファリングトリガ、バッファリング開始トリガ、及びバッファリング終了トリガのうちの少なくとも1つの発生時にトリガを識別するトリガIDを生成しておいて、当該トリガIDを用いてサブバッファ121を指定してもよい。
以上、説明したように、複数回のバッファリングトリガに対応するデータの格納が可能な容量をバッファ120が有する。そして、バッファリング部144は、取消条件が成立する場合に、データの格納先であるサブバッファを切り替えて、切り替えたサブバッファに格納されているデータを破棄して、当該取消条件の成立の後にバッファリング条件が成立するときに収集された値を示すデータをサブバッファに格納する。このような実施の形態2においても、実施の形態1と同様の効果を奏する。
なお、バッファ120をサブバッファ121に区分する例について説明したが、これには限定されない。実施の形態1より大きな容量を有するバッファ120を用いて、本実施の形態と実質的に同様にバッファリング及びロギングを実行する例も考えられる。この例においては、バッファ120が飽和したときに、バッファ120内のバッファデータが維持され、取消条件が成立する場合に、バッファリング部144が、取消条件によって解放されたバッファ120の一部の領域に新たなデータを格納する。当該一部の領域は、予め指定されるバッファ120の第2領域の一例に相当する。
また、上述の実施の形態1から実施の形態2への変形と同様の変形を、本実施の形態に施してもよい。すなわち、バッファリングトリガに代えて、バッファリング開始トリガの発生前からバッファリング終了トリガの発生後までの指定期間において収集されたデータをサブバッファ121に格納してもよい。バッファリング開始トリガ及びバッファリング終了トリガが用いられる場合には、サブバッファ121の容量を予め設定することが望ましい。また、一定の容量を有するバッファ120を分割することでサブバッファ121を設け、サブバッファ121の容量は、バッファ120を構成するサブバッファ121の個数を指定することにより設定されてもよい。
実施の形態4.
続いて、実施の形態4について、上述の実施の形態3との相違点を中心に説明する。なお、上記実施の形態3と同一又は同等の構成については、同等の符号を用いる。本実施の形態は、取消トリガに代えて、サブバッファ121を切り替える切替トリガが用いられる点で、実施の形態3と異なる。
切替トリガは、予め定められる切替条件の成立、及び、当該成立のトリガ判定部143からバッファリング部144への通知に相当する。切替条件の内容は、ユーザによって入力され、設定部146によってトリガ判定部143に対して設定される。
図25には、切替トリガに応じたサブバッファ121の切替について示されている。図25においては、複数のサブバッファ121のうちの、現在選択されているサブバッファ121が、太線で囲まれて強調されている。初期状態では、すべてのサブバッファ121が空き領域に相当し、いずれか1つのサブバッファ121が選択されている。
バッファリングトリガが発生すると、現在選択されているサブバッファ121にデータが格納される。そして、切替トリガ及びロギングトリガが発生しないまま再びバッファリングトリガが発生しても、現在選択されているサブバッファ121が飽和しているため、当該バッファリングトリガは無視され、バッファリングが実行されない。
ここで、切替トリガが発生すると、次の空き領域に相当するサブバッファ121が選択される。サブバッファ121が順に切り替えられ、すべてのサブバッファ121にデータが格納されると、バッファ120が飽和する。バッファ120が飽和した場合において、さらにバッファリングトリガが発生しても、実施の形態3と同様に、当該バッファリングトリガは無視され、バッファリングは実行されない。
ここで、切替トリガが発生して、サブバッファ121が切り替わると、新たに選択されたサブバッファ121に格納されているデータが破棄されることで当該サブバッファ121が解放され、新たなデータの格納が可能になる。
なお、切替トリガによってサブバッファ121を切り替える順序は、実施の形態3に係る取消トリガが発生したときに解放すべきサブバッファ121と同様に決定されてもよいし、実施の形態3に係るロギングトリガの発生時と同様に、ユーザの入力に基づいて指定されてもよい。
以上、説明したように、切替トリガを用いる形態においても、切替トリガの有無により、バッファ120において保持すべきデータと破棄すべきデータを制御することができ、実施の形態3と同様の効果を奏する。
実施の形態5.
続いて、実施の形態5について、上述の実施の形態2との相違点を中心に説明する。なお、上記実施の形態2と同一又は同等の構成については、同等の符号を用いる。本実施の形態は、バッファリングの優先される度合いである優先度が異なる複数の種別のバッファリング条件の成否が判定される点で、実施の形態2とは異なる。
本実施の形態に係るバッファリング部144は、異なる優先度のバッファリング開始条件が短時間で複数成立し、これらの条件により格納すべきデータが重複する場合に、最も高い優先度のバッファリング開始条件の成立により格納すべきデータを、他の優先度が低いバッファリング条件の成立により格納すべきデータよりも優先してバッファ120に格納する。例えば、図26に示されるように、低優先のバッファリング終了トリガの直後に、高優先のバッファリング開始トリガが発生した場合には、高優先のトリガに対応する指定期間において収集された値を示すデータがバッファリングされる。なお、バッファリング部144は、図26に示されるように、高優先の指定期間に加えて、バッファ容量に収まる限り、低優先の指定期間の一部を合わせてバッファリング対象としてもよい。これにより、低優先のトリガに対応するデータの一部がロギングされ、後の検証に用いることができる。
また、図27に示されるように、高優先のバッファリング終了トリガの直後に、低優先のバッファリング開始トリガが発生した場合には、バッファリング部144は、高優先の指定期間に加えて、バッファ容量に収まる限り、低優先の指定期間の一部を合わせてバッファリング対象としてもよい。
さらに、等しい優先度の複数のバッファリング開始条件の成立により格納すべきデータが重複する場合において、先勝ち又は後勝ちでバッファリング対象のデータを決定することが予めユーザにより設定されてもよい。すなわち、先に成立したバッファリング開始条件を図27に示されるような高優先の条件と同等に扱うか、後に成立したバッファリング開始条件を図26に示されるような高優先の条件と同等に扱うかを、予め設定してもよい。先勝ち又は後勝ちがユーザにより設定される場合には、ユーザにより入力される設定内容が設定部146によって受け付けられて、トリガ判定部143に対して設定される。この場合において、設定部146は、先のバッファリング条件の成立によるデータの格納を優先すること、又は、後のバッファリング条件の成立によるデータの格納を優先すること、の設定を受け付ける第1受付手段の一例に相当する。そして、バッファリング部144は、設定部146によって受け付けられた設定に従ってバッファ120にデータを格納する。
なお、優先度が異なるバッファリング開始条件が予め設定される例を説明したが、トリガ判定部143は、同一のバッファリング開始条件の判定と同時に、優先度を判定して、バッファリング開始トリガに優先度を付加してもよい。
以上、本開示の実施の形態について説明したが、本開示は上記実施の形態によって限定されるものではない。
具体的には、上記実施の形態を任意に組み合わせてもよい。例えば、実施の形態3,4に係るサブバッファ121に、実施の形態5のような優先度が高いトリガに対応するデータが優先的にバッファリングされてもよい。また、実施の形態3,4を組み合わせて、取消トリガと切替トリガを併用してもよい。
また、デバイスメモリ110における1つのアドレスに格納された値の履歴を保存する例について説明したが、PLC100は、複数のアドレスそれぞれに格納された値の履歴を保存してもよい。
また、収集部142によって値が収集されるタイミングと、トリガ判定部143によって条件の成否が判定されるタイミングと、が一致する例について説明したが、これには限定されない。トリガ判定部143は、一定時間だけ過去に収集された値について条件の成否を判定してもよいし、判定結果を一時的に保留して、判定から一定時間だけ後に収集された値について条件の成否の判定結果を適用してもよい。バッファリング部144によって格納されるデータは、バッファリング開始条件の成立に対応するタイミングにおいて収集されたデータであればよい。
また、バッファリング部144が、連続して収集された値を示すデータをバッファ120に格納する例について説明したが、これには限定されない。例えば、値の短時間における推移よりも、瞬時値が後の検証において重要である場合には、条件の成立に対応するタイミングで収集された1つの値だけを示すデータを、バッファリング及びロギングの対象として、バッファ120の容量を節約してもよい。
上述の実施形態に係るPLC100の機能は、専用のハードウェアによっても、また、通常のコンピュータシステムによっても実現することができる。
例えば、プログラムP1を、フレキシブルディスク、CD-ROM(Compact Disk Read-Only Memory)、DVD(Digital Versatile Disk)、MO(Magneto-Optical disk)に代表されるコンピュータ読み取り可能な記録媒体に格納して配布し、そのプログラムP1をコンピュータにインストールすることにより、上述の処理を実行する装置を構成することができる。
また、プログラムP1をインターネットに代表される通信ネットワーク上のサーバ装置が有するディスク装置に格納しておき、例えば、搬送波に重畳させて、コンピュータにダウンロードするようにしてもよい。
また、インターネットに代表されるネットワークを介してプログラムP1を転送しながら起動実行することによっても、上述の処理を達成することができる。
さらに、プログラムP1の全部又は一部をサーバ装置上で実行させ、その処理に関する情報をコンピュータが通信ネットワークを介して送受信しながらプログラムP1を実行することによっても、上述の処理を達成することができる。
なお、上述の機能を、OS(Operating System)が分担して実現する場合又はOSとアプリケーションとの協働により実現する場合には、OS以外の部分のみを媒体に格納して配布してもよく、また、コンピュータにダウンロードしてもよい。
また、PLC100の機能を実現する手段は、ソフトウェアに限られず、その一部又は全部を専用のハードウェア又は回路によって実現してもよい。
本開示は、本開示の広義の精神と範囲を逸脱することなく、様々な実施の形態及び変形が可能とされるものである。また、上述した実施の形態は、本開示を説明するためのものであり、本開示の範囲を限定するものではない。つまり、本開示の範囲は、実施の形態ではなく、請求の範囲によって示される。そして、請求の範囲内及びそれと同等の開示の意義の範囲内で施される様々な変形が、本開示の範囲内とみなされる。