(57)【要約】【課題】制御システムにおける１以上の制御対象装置に対し複数の異なる周期の制御処理を実行する制御用計算機の開発の手間を低減し、かつ、通信性能の低下を防止する。【解決手段】制御用計算機１２０は、制御対象装置へ周期的に制御指令値を送信するプログラムについて、その送信周期等の時間的制限を通信スケジューラ１０２に設定しておく。そして、この通信スケジューラ１０２は、各プログラムにより出力された制御指令値を受信すると、１以上の制御指令値を１つの送信データにまとめ、各プログラムの時間的制限を守るような、送信データの送信タイミングを決定する。そして、その決定した送信タイミングで、送信データを送信する。送信データ送信後、この制御対象装置からの応答を受信したときには、その応答を処理すべきプログラムを起床させる。【選択図】図１
2010224939.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数の制御対象装置を制御するためのプログラムを１つまたは複数備える制御用計算機であって、
前記プログラムに基づき、前記制御対象装置への制御指令値を通信スケジューラへ出力する処理部と、
タイムスロットを用いたスケジュール情報を用いて、前記処理部から出力された制御指令値を、ネットワーク経由で前記制御対象装置それぞれへ送信する送信時刻を決定し、この決定した送信時刻に、前記制御指令値を含む送信データを前記制御対象装置それぞれへ送信する前記通信スケジューラとを備え、
前記通信スケジューラは、
前記プログラムのうち、周期的に制御指令値を送信するプログラムについて、そのプログラムによる制御対象の制御対象装置の識別情報と、前記制御対象装置への制御指令値を送信するときの周期とを示したプログラム管理情報の入力を受け付け、プログラム管理情報記憶部に記憶するプログラム情報管理部と、
前記プログラムにより前記処理部から、前記制御対象装置への制御指令値の入力を受け付けたとき、この制御指令値を前記記憶部に記憶する送信データ管理部と、
前記プログラム管理情報に示される周期で、前記制御指令値を含む送信データを送信するよう送信時刻を決定し、この送信時刻を前記スケジュール情報に記録し、当該送信時刻になったとき、当該送信データの送信指示を出力する送信時刻スケジュール部と、
前記送信時刻スケジュール部により出力された送信指示に基づき、前記制御指令値を前記記憶部から読み出し、この読み出した制御指令値を含む前記送信データを送信する送信部とを備えることを特徴とする制御用計算機。
【請求項２】
前記通信スケジューラは、
前記制御対象装置から、前記制御指令値に対する応答である受信データを受信する受信部と、
前記受信データを受信したとき、当該制御指令値を出力したプログラムを起床させるプログラム起床部とを備え、
前記処理部は、
前記起床されたプログラムに基づき、前記受信データに示される応答をもとに次の制御指令値を決定し、前記プログラムの起床指示に基づき、前記決定した制御指令値を前記通信スケジューラへ出力することを特徴とする請求項１に記載の制御用計算機。
【請求項３】
前記プログラム管理情報は、
前記プログラムそれぞれから出力される制御指令値のデータサイズの最大値をさらに含み、
前記通信スケジューラは、
前記処理部が実行中の各プログラムについて、前記プログラム管理情報を参照して、前記プログラムそれぞれから出力される制御指令値のデータサイズの合計値を、当該通信スケジューラの通信処理スループットで除した値が、前記プログラムそれぞれの周期のうち、最も短い周期よりも小さいとき、前記各プログラムの時間的制約を満たすと判定するスケジュール変更可能性判定部を備え、
前記送信時刻スケジュール部は、
前記スケジュール変更可能性判定部により、前記各プログラムの時間的制約を満たすと判定されたとき、前記制御指令値を含む送信データの送信時刻を決定することを特徴とする請求項１に記載の制御用計算機。
【請求項４】
前記通信スケジューラは、
前記スケジュール変更可能性判定部により、前記実行中の各プログラムの時間的制約を満たすと判定されたとき、前記各プログラムのうち、そのプログラムの制御指令値の周期が素数倍となっているプログラムそれぞれの制御指令値を、１つのタイムスロットあたり送信可能な最大データサイズ以下にまとめた前記送信データを作成するデータグラム連結部を備え、
前記送信部は、
前記作成された送信データを、前記出力された送信時刻に送信することを特徴とする請求項１に記載の制御用計算機。
【請求項５】
前記送信時刻スケジュール部は、
前記プログラムのうち、そのプログラムの制御指令値の周期が素数倍となっているプログラムそれぞれの制御指令値のデータサイズの合計値が、前記１つのタイムスロットあたり送信可能な最大データサイズを超えているとき、
前記送信時刻スケジュール部は、そのプログラムの制御指令値群を、前記最大データサイズ以下の制御指令値のまとまりに分割し、その分割した制御指令値のまとまりをそれぞれ別のタイムスロットに割り当てることを特徴とする請求項４に記載の制御用計算機。
【請求項６】
前記送信部は、
前記ネットワーク経由での前記制御対象装置への送信データの送信および前記制御対象装置からの受信データの受信を、イーサネット（登録商標）フレームで行うことを特徴とする請求項２に記載の制御用計算機。
【請求項７】
前記送信部は、
前記ネットワーク経由での前記制御対象装置への送信データの送信および前記制御対象装置からの受信データの受信を時分割で行うことを特徴とする請求項２に記載の制御用計算機。
【請求項８】
請求項１に記載の制御用計算機および制御対象装置を接続するネットワークのトポロジがリングトポロジであることを特徴とする制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
１以上の制御対象装置を制御する制御用計算機が、制御対象装置へ制御指令値を送信するときの送信タイミング制御技術に関する。
【背景技術】
【０００２】
制御システムとして、制御用計算機が、ネットワークを介して単一または複数の制御対象装置を制御する制御システムがある（非特許文献１参照）。この制御用計算機は、プログラムの実行処理により各制御対象装置を制御する。この制御用計算機には、必要に応じてオペレーティングシステム（以下、ＯＳと称する）や、処理性能を向上させるための専用のハードウェアが用いられる。このような制御処理に関するプログラムは、一般的に、所定の周期で所定の処理を繰り返す。通常、この周期は、この制御用計算機の制御処理に課せられた時間的制約となる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】EtherCAT（登録商標）、[online]、[平成２０年１２月３日検索]、インターネット、<URL: http://www.anybus.jp/technologies/ethercat.shtml>
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ここで、制御用計算機が制御対象装置それぞれに対し、制御指令値の送信周期等の異なる制御処理を実行したい場合もある。このような場合、制御用計算機の通信アプリケーションにおいて、前記した制御処理の時間的制約を満たすため、制御処理それぞれの周期を区別する条件分岐を設定せねばならない。このような条件分岐の設定は非常に複雑であり、通信アプリケーションの開発に手間がかかるという問題があった。また、この通信アプリケーションによる制御処理を変更したり、追加、拡張したりする場合にも同様に手間がかかるという問題があった。なお、制御処理ごとにアプリケーションを分割する方法もあるが、送信されるデータをまとめることは困難である。よって、制御処理ごとにアプリケーションを分割する場合は、そのアプリケーションそれぞれがデータを送信することになるが、このとき、データそれぞれのヘッダやフレーム間ギャップ等のためオーバーヘッドが大きくなる。従って、制御処理ごとにアプリケーションを分割する場合、このようなオーバーヘッドのため通信性能が低下するという問題があった。そこで、本発明は、前記した課題を解決し、複数の異なる周期の制御処理を実行する制御用計算機の開発の手間を低減しつつ、通信性能の低下を防ぐことを目的とする。
【課題を解決するための手段】
【０００５】
前記した課題を解決するため、本発明は、１つまたは複数の制御対象装置を制御するためのプログラムを１つまたは複数備える制御用計算機であって、プログラムに基づき、制御対象装置への制御指令値を通信スケジューラへ出力する処理部と、タイムスロットを用いたスケジュール情報を用いて、処理部から出力された制御指令値を、ネットワーク経由で制御対象装置それぞれへ送信する送信時刻を決定し、この決定した送信時刻に、制御指令値を含む送信データを制御対象装置それぞれへ送信する通信スケジューラとを備え、通信スケジューラは、プログラムのうち、周期的に制御指令値を送信するプログラムについて、そのプログラムによる制御対象の制御対象装置の識別情報と、制御対象装置への制御指令値を送信するときの周期とを示したプログラム管理情報の入力を受け付け、プログラム管理情報記憶部に記憶するプログラム情報管理部と、プログラムにより処理部から、制御対象装置への制御指令値の入力を受け付けたとき、この制御指令値を記憶部に記憶する送信データ管理部と、プログラム管理情報に示される周期で、制御指令値を含む送信データを送信するよう送信時刻を決定し、この送信時刻をスケジュール情報に記録し、当該送信時刻になったとき、当該送信データの送信指示を出力する送信時刻スケジュール部と、送信時刻スケジュール部により出力された送信指示に基づき、制御指令値を記憶部から読み出し、この読み出した制御指令値を含む送信データを送信する送信部とを備える構成とした。
【０００６】
このように、制御用計算機の通信スケジューラが、この制御用計算機の備える周期処理プログラム（周期的に制御指令値を出力するためのプログラム）について、そのプログラムにより制御対象装置への制御指令値を送信するときの最長許容周期等をプログラム管理情報に記憶しておく。そして、通信スケジューラは、このプログラム管理情報に示される最長許容周期を守るように、この制御指令値を送信する送信スケジュールを決定する。そして、その送信スケジュールに基づき、当該プログラムの制御指令値を含む送信データを送信する。つまり、制御用計算機は、制御指令値を送信するプログラムの時間的制約（最長許容周期等）を満たすようこの制御指令値を含む送信データを送信する。よって、通信アプリケーションに、周期処理プログラムそれぞれの周期を区別する条件分岐の設定等を行う必要がなくなり、１または複数の異なる周期の制御処理を実行する制御用計算機の開発の手間を低減することができる。また、時間的制約の許容する範囲で、複数の周期処理プログラムの送信データをまとめるように送信スケジュールを決定し、送信することで通信性能の低下を防ぐことができる。
【発明の効果】
【０００７】
本発明によれば、複数の異なる周期の制御処理を実行する制御用計算機の開発の手間を低減することができる。また、新たな制御処理（制御処理プログラム）の追加や既存の制御処理の周期の変更等を容易にすることができる。また、制御用計算機は複数の周期処理プログラムの送信データをまとめて送信するので、通信性能の低下を防止できる。
【図面の簡単な説明】
【０００８】
【図１】本実施の形態の制御用計算機のハードウェア構成例を示した図である。
【図２】図１の制御用計算機を用いたシステム構成例を示した図である。
【図３】図１の通信スケジューラの構成を示した図である。
【図４】図３のプログラム管理部の構成を示した図である。
【図５】図１の制御用計算機上で動作するプログラムの構成例を示した図である。
【図６】図５の周期処理プログラムの処理手順を示した図である。
【図７】図５の周期処理プログラムの処理手順を示した図である。
【図８】図５の非周期処理プログラムの処理手順を示した図である。
【図９】図３の通信スケジューラの処理手順を示した図である。
【図１０】図３のスケジュール変更可能性判定部の処理手順例を説明した図である。
【図１１】図３のスケジュール変更可能性判定部の処理手順例を説明した図である。
【図１２】図３のスケジュール変更可能性判定部の処理手順例を説明した図である。
【図１３】図３のスケジュール変更可能性判定部の処理手順例を説明した図である。
【図１４】図３のスケジュール変更可能性判定部の処理手順例を説明した図である。
【図１５】図３のスケジュール変更可能性判定部の処理手順例を説明した図である。
【図１６】図３のスケジュール変更可能性判定部の処理手順例を説明した図である
【図１７】図３のスケジュール変更可能性判定部の処理手順例を説明した図である
【図１８】図３のスケジュール変更可能性判定部の処理手順例を説明した図である
【図１９】図３のスケジュール変更可能性判定部の処理手順例を説明した図である
【図２０】図３のスケジュール変更可能性判定部の処理手順例を説明した図である
【図２１】図３のスケジュール変更可能性判定部の処理手順例を説明した図である
【図２２】本実施の形態におけるタイムスロットの割り当てを例示した図である。
【図２３】本実施の形態の非周期処理プログラムに対するスケジュール変更可能性判定部の判定手順を示したフローチャートである。
【図２４】本実施の形態の送信時刻スケジュール部が管理するタイムスロットの送信時刻スケジュール表（スケジュール情報）を例示した図である。
【図２５】本実施の形態の制御用計算機のハードウェア構成例を示した図である。
【図２６】図２５の制御用計算機上で動作するプログラムの構成例を示した図である。
【図２７】本実施の形態の制御用計算機のハードウェア構成例を示した図である。
【図２８】図２７の通信スケジューラの構成を示した図である。
【図２９】図１、図２５、図２７の制御用計算機を用いたシステム構成例を示した図である。
【発明を実施するための形態】
【０００９】
以下、本発明を実施するための形態（以下、実施の形態という）を説明する。図１は、本実施の形態の制御用計算機のハードウェア構成例である。この制御用計算機は、制御対象装置を制御するためのプログラムを１以上備え、この制御用計算機のＣＰＵ（Central Processing Unit、処理部）１０１は、不揮発性記憶媒体１０９からメモリ１０８に、このプログラムを転送して実行する。図１において、メモリ１０８にプログラムが転送された状態を示している。このプログラムとしては、割込みハンドラを含むＯＳ（Operating System）や、このＯＳ上で動作し、制御対象装置１２１を制御するためのアプリケーションプログラムがある。通信スケジューラ１０２は、ＣＰＵ１０１から通信要求を受け取り、ＬＡＮ（Local Area Network）コントローラ１０３を用いて制御用ネットワーク１２２に対して通信する。通信スケジューラ１０２の実装例としては、ＦＰＧＡ（Field Programmable Gate Array）、ＣＰＬＤ（Complex Programmable Logic Device）、ＡＳＩＣ（Application Specific Integrated Circuit）、ゲートアレイ等のＩＣ（Integrated Circuit）がある。
【００１０】
ＬＡＮコントローラ１０３は、制御用ネットワーク１２２（後記）との通信機能を実装した送受信機ＩＣである。ＬＡＮコントローラ１０３の提供する通信規格としてＥｔｈｅｒｎｅｔ（登録商標）のＬＡＮコントローラや、ＭＡＣ（Media Access Controller）チップとＰＨＹｅｓ（物理層）チップの組み合わせ、または特定のネットワーク仕様の物理層あるいは物理層とデータリンク層を処理するＩＣ等である。
【００１１】
メモリ１０８は、ＣＰＵ１０１が動作するための一時的な記憶領域であり、不揮発性記憶媒体１０９から転送したＯＳ、アプリケーションプログラム等が格納される。
【００１２】
不揮発性記憶媒体１０９は、ＨＤＤ（Hard Disk Drive）や、フラッシュメモリ等の記憶媒体で、ＣＰＵ１０１が実行するプログラムの保存、プログラムの実行結果の保存に利用される。
【００１３】
バス１１０は、ＣＰＵ１０１、メモリ１０８、不揮発性記憶媒体１０９、通信スケジューラ１０２、ＬＡＮコントローラ１０３をそれぞれ接続する。バス１１０としては、ＰＣＩ（Peripheral Component Interconnect）バス、ＩＳＡ（Industrial Standard Architecture）バス、ＰＣＩ  Ｅｘｐｒｅｓｓバス、システムバス、メモリバス等である。
【００１４】
図２は、制御用計算機１２０を用いたシステム構成例である。制御用計算機１２０は、制御対象装置１２１と、制御用ネットワーク１２２を介して接続し、この制御対象装置１２１を制御するハードウェア装置である。制御対象装置１２１は、例えば、サーボアンプやサーボモータである。なお、図２ではネットワークはリングトポロジとなっているが、論理的なリングトポロジやスタートポロジ等のトポロジであってもよい。
【００１５】
図３に通信スケジューラ１０２の機能構成図を示す。通信スケジューラ１０２は、プログラム管理部１３０と、スケジュール変更可能性判定部１３１と、データグラム連結部１３２と、データグラム分解部１３３と、計時部１３４と、送信時刻スケジュール部１３５と、プログラム起床部１３６と、送信部１３７と、受信部１３８とを含んで構成される。この通信スケジューラ１０２による通信スケジューリングの具体例は後記する。
【００１６】
プログラム管理部１３０は、個々の制御処理を実行するプログラムの情報（プログラム管理情報）を作成し、この通信スケジューラ１０２の備える記憶部（図示省略）に記憶する。プログラム管理部１３０は、個々のプログラム（図５参照）ごとに必要なため、複数存在しうる。プログラム管理部１３０の個数は、その上限値はハードウェア等の計算機資源によって制約され、制御システムを構築するに充分なプログラム、制御対象の数だけ必要である。
【００１７】
スケジュール変更可能性判定部１３１は、新規のプログラムの追加、既存プログラムの周期変更、プログラムの登録抹消が可能か否かを、各プログラムの有する時間的制約と通信量等の情報をもとに判定する。例えば、新規のプログラム、変更された既存プログラムを含むすべてのプログラムについて、プログラム管理情報を参照して、プログラムそれぞれから出力される制御指令値のデータサイズの合計値を、通信スケジューラ１０２の通信処理スループットで除した値を計算する。そして、この値が、プログラムそれぞれの最長許容周期のうち、最も短い最長許容周期よりも小さいとき、このすべてのプログラムの時間的制約を満たすと判定する。一方、この値がプログラムそれぞれの最長許容周期のうち、最も短い最長許容周期よりも大きいとき、このすべてのプログラムの時間的制約を満たさないと判定する。つまり、スケジュール変更可能性判定部１３１は、この新規なプログラムの追加または既存プログラムの変更は不可能であると判定する。
【００１８】
データグラム連結部１３２は、送信時刻スケジュール部１３５が計画した送信予定時刻に送信するデータを集めて連結し、送信部１３７へと伝送し、状態フラグ管理部１４５（後記）の状態フラグを更新する。また、このデータグラム連結部１３２は、必要があれば、制御用ネットワーク１２２（図２参照）に固有なヘッダ、トレイラを付与する。
【００１９】
なお、このデータグラム連結部１３２が、各プログラムのデータを連結する順番は、各送信データ固有のヘッダに各送信データを区別する情報が付与されていれば、特に制約はない。例えば、データグラム連結部１３２は、プログラム管理部１３０において管理上つけられた順番で各プログラムのデータを連結すればよい。ただし、送信データの位置が制御用ネットワーク１２２上で伝送されるときに固有の意味を持つ場合は、その制御用ネットワーク１２２の仕様にしたがった位置に送信データを配置する。例えば、送信データの位置する順番と制御対象装置１２１が受信する順番とが同じであるという制約がある場合は、受信する制御対象装置１２１の順番に応じて送信データを並べる。
【００２０】
データグラム分解部１３３は、受信部１３８から伝送されたデータを各プログラム用のデータに分割し、各プログラムのプログラム管理部１３０のデータグラム抽出部１４４（後記）に伝送する。また、データグラム分解部１３３は、プログラム起床部１３６に、データを受信したプログラム管理部１３０の識別子を伝送する。つまり、この制御用計算機１２０は、プログラムに基づき、制御指令値を示すデータを制御対象装置１２１へ送信した後、受信部１３８により、この制御対象装置１２１からこの制御指令値に対する応答を含むデータを受信する。ここで、受信したデータには複数のプログラムの制御指令値に対する応答が含まれている可能性がある。よって、データグラム分解部１３３は、受信したデータをそのそれぞれのプログラム用に分割して、当該応答に関する処理を行うプログラムのプログラム管理部１３０へ伝送（出力）する。また、データグラム分解部１３３は、プログラム起床部１３６に、データを受信したプログラム管理部１３０の識別子を伝送することで、プログラム起床部１３６に、この受信したデータを処理すべきプログラムはどれかを通知することができる。
【００２１】
計時部１３４は、計時手段を有し、通信スケジューラ１０２内の各部に時間情報を提供する。この時間情報は、制御アプリケーション実行後の経過時間の計測や各種イベントの発生時刻の記録に用いられる。なお、計時部１３４は、通信スケジューラ１０２の外部に置かれたタイマ等のデバイスによって代替されてもよい。
【００２２】
送信時刻スケジュール部１３５は、各プログラムの周期等の時間的制約、設定情報を考慮して、その送信予定時刻、連結するデータを抽出するプログラムを各プログラム管理部１３０からデータを抽出して連結する。そして、このデータを送信するタイミングを決定する。また、送信時刻スケジュール部１３５は、各プログラム管理部１３０のプログラム情報管理部１４２によりプログラム管理情報から周期を取得し、その送信予定時刻に送信するプログラムをデータグラム連結部１３２に通知する。
【００２３】
プログラム起床部１３６は、データグラム分解部１３３から通知されたプログラム管理部１３０の識別子によって、受信したデータがどのプログラムに関するデータかを識別し、この識別したプログラムを起床する。起床方法は、バス１１０（図１参照）を介した割込みを用いることが例示される。また、起床は任意のタイミングで実行可能である。
【００２４】
送信部１３７は、データグラム連結部１３２から伝達されたデータをＬＡＮコントローラ１０３へと送信する。
【００２５】
受信部１３８は、ＬＡＮコントローラ１０３からデータを受信し、データグラム分解部１３３に伝送する。
【００２６】
図４にプログラム管理部１３０の構成を示す。このプログラム管理部１３０は、ＣＰＵ１０１（図１参照）から出力されてきた当該プログラムの送信データを送信データ管理部１４０へ入力する。また、制御対象装置１２１（図２参照）から受信した受信データを、受信部１３８（図３参照）、データグラム分解部１３３、データグラム抽出部１４４および受信データ管理部１４１経由で、ＣＰＵ１０１へ出力する。このプログラム管理部１３０は、プログラム情報管理部１４２と、データグラム生成部１４３と、データグラム抽出部１４４と、状態フラグ管理部１４５とを備える。なお、状態フラグ管理部１４５は、状態フラグの更新を行う。この状態フラグは、この通信スケジューラ１０２の備える記憶部の所定領域に記憶される。
【００２７】
送信データ管理部１４０は、プログラムに基づきＣＰＵ１０１（図１参照）から出力される制御指令値を含む送信データを受信すると、この送信データをいったん通信スケジューラ１０２の備える記憶部に記憶する。この送信用データには制御指令値等が含まれる。
【００２８】
受信データ管理部１４１は、制御対象装置１２１から受信した受信データをＣＰＵ１０１へ出力する。この受信データは、例えば、送信データに示される制御指令値に対するこの制御対象装置１２１の応答結果等を含むデータである。
【００２９】
プログラム情報管理部１４２は、制御用計算機１２０（図１参照）の備えるプログラム、そのプログラムによる制御処理、制御対象装置１２１等を示したプログラム管理情報を管理している。このプログラム管理情報として、プログラムの識別子、制御対象装置１２１の識別子、このプログラムにより制御指令値を送るときの周期、目標送信時刻、最長許容周期、データ更新が周期内で間に合わなかった場合の対応処理、周期変更時の対応処理、周期プログラムか非周期処理プログラムか、プログラム間での優先度、送信フレーム中でのプログラムのデータ位置等を示した情報である。なお、周期プログラムは、制御対象装置１２１へ所定周期でデータを送るためのプログラムであり、非周期処理プログラムは、周期的にデータを送信する必要のないプログラムである。
【００３０】
データグラム生成部１４３は、ＣＰＵ１０１（図１参照）から送信要求があった場合に、送信データを送信に適した形式に変換、加工する。例えば、そのような処理として、制御用ネットワーク１２２の通信プロトコルに固有のヘッダ、トレイラの生成等、制御用ネットワーク１２２（図２参照）の仕様に適した形式に変換する。
【００３１】
また、データグラム抽出部１４４は、データグラム分解部１３３からデータの受信通知があった場合に、受信内容をプログラムへの通知に適した形式に変換する。そのような処理として、データのヘッダ、トレイラの除去が例示される。
【００３２】
状態フラグ管理部１４５は、送信データおよび受信データの状態を示す状態フラグの更新を行う。例えば、プログラムに基づきＣＰＵ１０１（図１参照）が送信データ管理部１４０の送信データを更新済みだが、通信スケジューラ１０２（図３参照）の外部へは未送信である状態、通信スケジューラ１０２は送信データ管理部１４０の送信データを送信済みで、ＣＰＵ１０１がまだ更新していない状態、通信スケジューラ１０２が受信データ管理部１４１の受信データを更新してＣＰＵ１０１は未取得である状態、ＣＰＵ１０１は受信データ管理部１４１の受信データを取得済みで、通信スケジューラ１０２はまだ外部からパケットを受信していない状態が例示される。プログラム、あるいは送信時刻スケジュール部１３５は、状態フラグ管理部１４５に対して状態フラグの状態を問い合わせる。これにより、例えば、送信時刻スケジュール部１３５は、所定の周期内でプログラムが送信データを更新できなかった場合を検知でき、また、プログラムが、受信データが更新されているかどうかを確認することができ、受信データを取得するか、取得しないかを判定することができる。
【００３３】
次に、制御用計算機１２０上で動作するプログラムの構成を図５に示す。この制御用計算機１２０上で動作するプログラムは、ＯＳ１５０、デバイスドライバ１５１、周期処理プログラム１５２、非周期処理プログラム１５３、ＡＰＩ（Application Program Interface）１５４、プロトコルスタック１５５、共通設定プログラム１５６とを備える。図５において、上位に位置するプログラムが下位のプログラムの提供する機能を利用する。なお、この周期処理プログラム１５５はそれぞれ、異なる処理を行うためのプログラムであるものとする。なお、図５においては説明のため、異なる処理を行うプログラムをそれぞれ別個の周期処理プログラム１５２として描いているが、１つのプログラムにより複数の異なる周期処理を実行するようにしてもよい。また、この制御用計算機１２０は非周期処理プログラム１５３は備えないようにしてもよい。
【００３４】
ＯＳ１５０は、プログラム管理やハードウェアへのアクセス等の基本機能を提供する。ＯＳは、必ずしも必要ではないが、汎用的なアプリケーションや既存のソフトウェア資産の利用、タスク管理等の基本機能を提供することから、利用されるのが望ましい。また、このＯＳ１５０は、時間的制約にしたがってタスクスケジューリングを実行可能なリアルタイムＯＳが望ましい。
【００３５】
デバイスドライバ１５１は、ＯＳ１５０の提供するハードウェアへのアクセス手段を用いて、バス１１０を介して通信スケジューラ１０２にアクセスするためのドライバである。デバイスドライバ１５１は、ＯＳ１５０の一部であっても構わない。
【００３６】
周期処理プログラム１５２は、制御用計算機１２０上で動作するアプリケーションプログラムで、制御対象装置１２１を制御、監視、診断するために送信時刻の周期等の時間的制約をもって周期的に実行される。この周期処理プログラム１５２は、ＡＰＩ１５４、デバイスドライバ１５１を通じて、通信スケジューラ１０２へアクセスし、制御対象装置１２１を制御、監視、診断用のデータを送受信するために用いられる。なお、この制御計算機１２０は、この周期処理プログラム１５２を１以上備えるものとする。
【００３７】
非周期処理プログラム１５３は、時間的制約を有さない通信のためのプログラムである。この制御システムを構成する制御用ネットワーク１２２（図２参照）には、インターネットで利用されるＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）通信を許容するものもある。そのような制御用ネットワーク１２２では、ＴＣＰ／ＩＰ通信で送信するデータを他のデータと連結して送信する。
【００３８】
ＡＰＩ１５４は、デバイスドライバ１５１にアクセスするためのソフトウェアインターフェースであり、ハードウェアの違いを吸収することで、プログラムに対してハードウェアへの共通のアクセス手段を提供するためのプログラムである。ＡＰＩ１５４は、ＯＳ１５０の一部であっても構わない。ＡＰＩ１５４により提供されるアクセス手段には、ハードウェアに対する書き込み、読み込み、送信、受信、設定等がある。ＡＰＩ１５４の具体例として、ライブラリ、ミドルウェア等がある。
【００３９】
プロトコルスタック１５５は、非周期処理プログラム１５３による送信要求、非周期処理プログラム１５３への受信内容の転送や、通信データの分割、再構成を実行するためのプログラムである。一般的に制御処理における通信量は少なく、周期処理プログラム１５２における通信データ量は１指令につき、１回の送受信で伝送可能である。しかし、制御以外のアプリケーションでの通信量は、単一のパケットでは収まらず、分割と再構成が必要な場合がある。また、信頼性を提供するための再送処理や、ネットワーク上の通信量を調節するための輻輳制御がなされる。プロトコルスタック１５５は、これらの処理を実施するためのプログラムである。
【００４０】
共通設定プログラム１５６は、通信スケジューラ１０２の全般的な機能を設定するためのプログラムである。
【００４１】
次に、図５の周期処理プログラム１５２の処理手順を図６に示す。ここでは、制御用計算機１２０の既存の周期処理プログラム１５２に加えて、新規に周期処理プログラム１５２を追加しようとした場合に、この制御用計算機１２０が、自身の制御用計算機１２０において、この新規な周期処理プログラム１２０を実行可能か否か判定する場合について説明する。はじめに、周期処理プログラム１５２に基づきＣＰＵ１０１（図１参照）は、新規にこの周期処理プログラム１５２を実行可能か否かを通信スケジューラ１０２のスケジュール変更可能性判定部１３１（図３参照）に問い合わせる（Ｓ００１）。ここでのスケジュール変更可能性判定部１３１による新規に周期処理プログラム１５２を実行可能か否かの判定処理の詳細は後記する。
【００４２】
スケジュール変更可能性判定部１３１が、この周期処理プログラム１５２を実行可能と判定すれば（Ｓ００１のＹｅｓ）、周期処理プログラム１５２は、この周期処理プログラム１５２の周期処理（および周期通信）に必要な情報をプログラム情報管理部１４２（図４参照）のプログラム管理情報に設定する（Ｓ００２）。この周期処理および周期通信に必要な情報は、プログラムの識別子、この周期処理プログラム１５２が制御指示値を送信する制御対象装置１２１の識別子、制御指示値を送信する周期、目標送信時刻、最長許容周期、データ更新が周期内で間に合わなかった場合の対応処理、周期変更時の対応処理、周期処理プログラムか非周期処理プログラムか否か、この制御用計算機１２０の備えるプログラム間での優先度、送信データ中でのプログラムのデータ位置等である。また、周期処理プログラム１５２により明示的に設定されなかった項目に対しては、プログラム情報管理部１４２が所定の設定値を設定してもよい。なお、スケジュール変更可能性判定部１３１が実行不可能と判定すれば（Ｓ００１のＮｏ）、周期処理を終了する。
【００４３】
Ｓ００２の後、周期処理プログラム１５２に基づきＣＰＵ１０１は、送信する制御指令値を演算し、送信データを決定する（Ｓ００３）。
【００４４】
次に、周期処理プログラム１５２に基づきＣＰＵ１０１は、通信スケジューラ１０２（図３参照）に送信データを送信して待機状態に入る（Ｓ００４）。その後、通信スケジューラ１０２の受信部１３８により、制御対象装置１２１からのデータを受信すると待機状態を解除する（Ｓ００５）。
【００４５】
Ｓ００５の後、ＣＰＵ１０１は、周期処理プログラム１５２を終了するか否かを判断する（Ｓ００６）。処理を終了しない場合は（Ｓ００６のＮｏ）、Ｓ００３からの手順を繰り返し、そうでなければ（Ｓ００６のＹｅｓ）、終了する。なお、Ｓ００６の終了判定は、周期的に実行される処理内であれば、いつ判断してもよく、Ｓ００３からＳ００５のいずれかの手順の間に実行されればよい。なお、終了と判断する条件は、開発者の判断や制御システムの仕様による。例えば、ＣＰＵ１０１は、送信データを所定回数送信した場合や、受信したデータに所定の情報が含まれている場合等に、終了と判断する。
【００４６】
また、図６に示す手順の他に、データの受信処理を周期的な処理と独立して実行するようにしてもよい。この場合、図７に示すように、Ｓ００２の次に、周期処理プログラム１５２に基づきＣＰＵ１０１は、受信処理の内容を登録する（Ｓ０１０）。この受信処理の内容は、受信データを受信したときに、この受信データを周期処理に適した形式に変換、加工することや、周期処理から受信内容を取得できるように共通領域に保存することや、受信情報の統計値をとること等である。また、周期処理プログラム１５２に基づきＣＰＵ１０１は、受信情報を取得する（Ｓ０１１）。つまり、ＣＰＵ１０１は、制御指令値を演算する前に受信データをメモリ１０８等から取得する。また、ＣＰＵ１０１は、この受信データがいつ受信したデータであるかを識別するために受信時刻、更新あるいは取得するたびに更新される識別子等を受信データに付記する。また、ここで取得する受信データは、１つ分の受信データである必要はなく、複数分の受信データでも構わない。周期処理においては、複数の時間における受信データを利用することで、より高機能な制御を実行することができる。
【００４７】
また、図７のＳ００３の後、周期処理プログラム１５２に基づきＣＰＵ１０１は、送信データを送信する（Ｓ０１２）。次に、周期処理プログラム１５２は待機状態に入る（Ｓ０１３）。待機方法の具体例としては、ＰＯＳＩＸ（Portable Operating System Interface）のｓｌｅｅｐコールや、プロセスを待機状態にするシステムコールがある。これらのシステムコールはＯＳ１５０によって提供される。
【００４８】
その後、周期処理プログラム１５２に基づきＣＰＵ１０１は、通信スケジューラ１０２のプログラム起床部１３６によって待機状態を解除される（Ｓ０１４）。このＳ０１４を実行後、ＣＰＵ１０１は、周期処理プログラム１５２終了するか否かを判断する（Ｓ００６）。処理を終了しない場合は（Ｓ００６のＮｏ）、Ｓ０１１からの手順を繰り返し、そうでなければ（Ｓ００６のＹｅｓ）、終了する。なお、Ｓ００６の終了判定は、周期的に実行される処理内であれば、いつ判断してもよく、Ｓ０１１からＳ０１４のいずれかの手順の間に実行されればよい。
【００４９】
図８に、非周期処理プログラム１５３（図５参照）の処理手順を示す。はじめに、非周期処理プログラム１５３に基づきＣＰＵ１０１（図１参照）は、新規に非周期処理プログラム１５３を実行できるか否かを通信スケジューラ１０２のスケジュール変更可能性判定部１３１に問い合わせる（Ｓ０２０）。このとき、非周期処理プログラム１５３に最低保証帯域や最長許容遅延等のなんらかの制約があれば、ＣＰＵ１０１は、それをスケジュール変更可能性判定部１３１に通知する。スケジュール変更可能性判定部１３１が、非周期処理プログラムを実行可能と判定すれば（Ｓ０２０のＹｅｓ）、送信または受信する（Ｓ０２１）。一方、スケジュール変更可能性判定部１３１が、非周期処理プログラム１５３を実行不可能と判断すれば（Ｓ０２０のＮｏ）、そのまま処理を終了する。
【００５０】
次に、図６、図７、図８に示す手順における通信スケジューラ１０２の処理手順について述べる。図６、図７のＳ００１、図８のＳ０２０にて、ＣＰＵ１０１（図１参照）が、新規な周期処理プログラム１５２または新規な非周期処理プログラム１５３を実行可能か否かを通信スケジューラ１０２のスケジュール変更可能性判定部１３１に問い合わせる。このときの周期処理プログラム１５２に対するスケジュール変更可能性判定部１３１の判定手順を、適宜図１０〜図２２を参照しながら、図９を用いて説明する。なお、図１０〜図２２に示すプログラムＡ〜Ｋはそれぞれ、周期処理プログラム１５２を示す。また、データサイズは、その周期処理プログラム１５２により送信する制御指令値のデータの最大データサイズを示す。各図のデータサイズの単位は「Ｂ（バイト）」である。
【００５１】
はじめに、周期処理プログラム１５２に基づきＣＰＵ１０１は、この周期処理プログラム１５２の制御指令値の周期と、この制御指令値のデータサイズ（最大データサイズ）をスケジュール変更可能性判定部１３１（図３参照）に申請する（Ｓ０４０）。
【００５２】
次に、スケジュール変更可能性判定部１３１は、プログラム管理部１３０等の新規に割り当て可能な計算機資源があるか否かを判定する（Ｓ０４１）。もし計算機資源がなければ（Ｓ０４１のＮｏ）、スケジュール変更可能性判定部１３１は、この周期処理プログラム１５２は実行不可能と判定する（Ｓ０５７）。なお、ここでいう計算機資源とは、例えば、メモリ１０８の記憶容量等である。一方、計算機資源があれば（Ｓ０４１のＹｅｓ）、次にスケジュール変更可能性判定部１３１は、現在実行しているすべてのプログラムのデータサイズの合計値Ｓｕｍ１を算出する（Ｓ０４２）。例えば、各周期処理プログラム１５２の周期およびデータサイズが、図１０に示すような値であった場合、スケジュール変更可能性判定部１３１は、図１１に示すように、全プログラムのデータサイズの合計３０５Ｂ（バイト）を算出する。
【００５３】
Ｓ０４２の後、スケジュール変更可能性判定部１３１は最も周期が短いプログラムの周期μ１を取得する。つまり、最短周期μ１を取得する（Ｓ０４３）。例えば、スケジュール変更可能性判定部１３１は、図１０に示す周期のうち、最も短い周期（実行周期）２０μｓをμ１として取得する（図１１参照）。
【００５４】
そして、スケジュール変更可能性判定部１３１は、Ｓ０４２で算出したＳｕｍ１を通信スケジューラ１０２の通信処理スループットで除したＴ１を算出する（Ｓ０４４）。このようなＴ１を算出することで、すべての周期処理プログラム１５２の周期が重なった場合の通信スケジューラ１０２の通信処理時間を知ることができる。例えば、通信スケジューラの通信処理スループットが１００Ｍｂｐｓであった場合、スケジュール変更可能性判定部１３１は、Ｔ１＝３０５Ｂ／１００Ｍｂｐｓ＝２４．４μｓを算出する。
【００５５】
図９の説明に戻る。次に、スケジュール変更可能性判定部１３１は、Ｓ０４４で算出したＴ１と安全係数との和が、μ１より小さいか否かを判定する（Ｓ０４５）。ここで、Ｓ０４４で算出したＴ１と安全係数との和がμ１よりも小さければ（Ｓ０４５のＹｅｓ）、この周期処理プログラム１５２は実行可能と判定する（Ｓ０５６）。一方、Ｓ０４４で算出したＴ１と安全係数との和が、μ１以上であれば（Ｓ０４５のＮｏ）、周期処理プログラム１５２は実行可能の余地があるので、Ｓ０４６へ進む。例えば、図１１に示すように、Ｔ１＝２４．４、安全係数＝０、μ１＝２０μの場合、Ｔ１と安全係数との和が、μ１以上なので、Ｓ０４６へ進む。
【００５６】
図９の説明に戻る。そして、スケジュール変更可能性判定部１３１は、現在実行しているすべての周期処理プログラム１５２を素数倍の周期でグルーピングする（Ｓ０４６）。つまり、スケジュール変更可能性判定部１３１は、タイムスロットの素数倍の周期の周期処理プログラム１５２ごとに同じグループとし、すべての周期処理プログラム１５２をグルーピングする。
【００５７】
例えば、スケジュール変更可能性判定部１３１は、図１２に示すように、２０μｓ周期のプログラムＡおよび４０μｓ周期のプログラムＣを、２０μｓ周期グループとする。また、３０μｓ周期のプログラムＢおよび９０μｓ周期のプログラムＩを３０μｓ周期グループとする。７０μｓ周期のプログラムＦ，Ｇ，Ｈ，Ｅはそのまま７０μｓ周期グループとする。なお、６０μｓは、２０μｓおよび３０μｓの公倍数であり、１４０μｓは、２０μｓおよび７０μｓの公倍数である。よって、スケジュール変更可能性判定部１３１は、６０μｓ周期のプログラムＤおよび１４０μｓ周期のプログラムＫ，Ｊを、グルーピングせず、保留としておく。つまり、その周期でしか送信できないプログラムについては、それぞれの周期のデータとしてグルーピングし、いずれの周期のグループに属するか複数の選択可能性があるプログラムについては、所属するグループを決めずに保留としておく。
【００５８】
図９の説明に戻る。スケジュール変更可能性判定部１３１は、このようにグルーピングした後、各グループでプログラム（周期処理プログラム１５２）の実行タイミングを調整する（Ｓ０４７）。ここでのプログラムの実行タイミングの調整は、スケジュール変更可能性判定部１３１が、各タイムスロットあたりに送信可能なデータサイズ（以下、Ｔｓとする）を超えず、かつ、データサイズがなるべく大きくなるように、グループ内で各周期処理プログラム１５２の周期をずらすことにより行われる。具体的には、スケジュール変更可能性判定部１３１は、データサイズの大きな周期処理プログラム１５２から同じタイムスロットにまとめていき、Ｔｓを超えたところで、その周期処理プログラム１５２は別のタイムスロットにずらす。なお、周期処理プログラム１５２の周期が、異なるタイムスロットの素数倍の周期の公倍数となる場合は、スケジュール変更可能性判定部１３１は、なるべくデータサイズのまとまりが大きくなるグループに組み入れる（ただし、Ｔｓを超える場合は別のグループに組み入れる）。また、データサイズがＴｓよりも大きい周期処理プログラム１５２は、連続するタイムスロットを利用するように割り当てる。
【００５９】
例えば、タイムスロットあたりの送信可能なデータサイズＴｓ＝１００Ｂとすると、図１３に示すように、２０μｓ周期グループのプログラムＡ，Ｃのデータサイズは合計４０Ｂであるので、６０Ｂの余裕がある。そこで、スケジュール変更可能性判定部１３１は、保留していた１４０μｓ周期のプログラムＫ，Ｊをこの２０μｓ周期グループに入れるとちょうど１００Ｂになるので、これらのデータを同じタイムスロットにまとめる。なお、スケジュール変更可能性判定部１３１は、６０μｓのプログラムＤについては、２０μｓ周期グループの別のタイムスロットにずらす。ここで、２０μｓ周期グループのタイムスロットに組み込むプログラムとしてプログラムＫ，Ｊを選択するのは、プログラムＤよりもプログラムＫ，Ｊのデータサイズが大きいからである。次に、スケジュール変更可能性判定部１３１は、３０μｓ周期のグループにおいて、プログラムＢ，Ｉを同じタイムスロットにまとめる。さらに、７０μｓ周期のプログラムＦ，Ｇ，Ｅをまとめる。なお、スケジュール変更可能性判定部１３１は、プログラムＨまでまとめるとＴｓ（１００Ｂ）を超えるので、プログラムＨについては、７０μ周期の別のタイムスロットにずらす。なお、図１４の７０μｓ周期グループのプログラムＦのように、単独でそのデータサイズ（１２０Ｂ）がＴｓ（例えば、１００Ｂ）を超えているプログラムについては、スケジュール変更可能性判定部１３１は、図１５に示すように連続する複数のかたまりとしてタイムスロットを割り当てる。つまり、プログラムＦについて、連続する２つのタイムスロットにまたがって割り当てる。
【００６０】
ここで、スケジュール変更可能性判定部１３１は、各グループにおける周期を１つのタイムスロットの周期で除した値をμgとする。例えば、１つのタイムスロットの周期が１０μｓである場合、２０μｓ周期グループのμｇの値は「２」である。次に、スケジュール変更可能性判定部１３１は、新規に追加するプログラムのデータを含むグループにおいて、用いるタイムスロットの種類の数がμｇ以下になるように各周期処理プログラム１５２のデータを送信するタイムスロットを調整した結果、データサイズがＴｓを超えるタイムスロットが存在するか否かを判定する（Ｓ０４８）。
【００６１】
ここで、スケジュール変更可能性判定部１３１は、データサイズがＴｓを超えるタイムスロットが存在する場合は（Ｓ０４８のＹｅｓ）、この周期処理プログラム１５２を実行不可能と判定する（Ｓ０５７）。一方、データサイズがＴｓを超えるタイムスロットが存在しない場合は（Ｓ０４８のＮｏ）、プログラムを実行可能の余地があるので、Ｓ０４９へ進む。
【００６２】
例えば、図１６に示すように、２０μｓ周期グループはμｇ＝２であり、３０μ周期グループはμｇ＝３であり、７０μｓ周期グループはμｇ＝７である。ここで、新規に追加するプログラムを含む２０μｓ周期グループにおいて、μｇ＝２の組み合わせにしてもＴｓを超える組み合わせはない（Ｓ０４８のＮｏ）。よって、Ｓ０４９へ進む。
【００６３】
図９の説明に戻る。スケジュール変更可能性判定部１３１は、残りのグループ中のそれぞれで、最もデータサイズが大きくなる場合の周期処理プログラム１５２の組み合わせを選択する。そして、スケジュール変更可能性判定部１３１は、その組み合わせと新規に追加するプログラムを含むグループ内でデータサイズが大きくなる場合のプログラムのデータの組み合わせとの、データサイズの合計値Ｓｕｍ２を算出する（Ｓ０４９）。
【００６４】
例えば、図１６に示すように、２０μｓ周期グループ以外のグループ、つまり、３０μｓ周期グループで、最もデータサイズが大きい組み合わせは、プログラムＢ，Ｉの組み合わせであり、データサイズは４５Ｂである。また、７０μｓ周期グループで、最もデータサイズが大きい組み合わせは、プログラムＥ，Ｆ，Ｇの組み合わせであり、データサイズは１００Ｂである。よって、スケジュール変更可能性判定部１３１は、Ｓｕｍ２＝１００Ｂ＋４５Ｂ＋１００Ｂ＝２４５Ｂと計算する。
【００６５】
図９の説明に戻る。スケジュール変更可能性判定部１３１は、Ｓｕｍ２が、Ｔｓを超えるか否かを判定する（Ｓ０５０）。ここで、Ｓｕｍ２が、Ｔｓを超えなければ（Ｓ０５０のＮｏ）、スケジュール変更可能性判定部１３１は、このタイムスロットに基づくプログラムの実行のタイミングの調整を送信時刻スケジュール部１３５（図３参照）へ通知する（Ｓ５５）。そして、スケジュール変更可能性判定部１３１は、当該周期処理プログラム１５２の実行処理を可能と判定する（Ｓ０５６）。そして、スケジュール変更可能性判定部１３１は、この周期処理プログラム１５２に新規にプログラム管理部１３０を割り当てる（Ｓ０５８）。そして、処理を終了する。
【００６６】
一方、Ｓｕｍ２が、Ｔｓを超える場合は（Ｓ０５０のＹｅｓ）、スケジュール変更可能性判定部１３１は、各周期グループの各タイムスロットを構成するプログラムの組み合わせを変えることで、そのタイムスロットの最長データの合計Ｓｕｍ２を減少できるか否かを判定する（Ｓ０５１）。
【００６７】
例えば、図１７に示すように、Ｓ０４９で計算したＳｕｍ２＝２４５Ｂであり、この値はＴｓを超えているので、Ｓ０５１へ進み、スケジュール変更可能性判定部１３１は、各周期グループの各タイムスロットを構成するプログラムの組み合わせを変えることで、そのタイムスロットの最長データの合計Ｓｕｍ２を減少できるか否かを判定する（Ｓ０５１）。
【００６８】
図９の説明に戻る。Ｓ０５１で各周期グループの各タイムスロットを構成するプログラムの組み合わせを変えることで、そのタイムスロットの最長データの合計Ｓｕｍ２を減少できると判定したとき（Ｓ０５１のＹｅｓ）、スケジュール変更可能性判定部１３１は、各タイムスロットのプログラム構成を変更する（Ｓ０５２）。具体的には、スケジュール変更可能性判定部１３１は、そのグループにおいて、データサイズが最大となっているタイムスロットを構成する複数のプログラムのうち、データサイズの小さいプログラムを別のタイムスロットにずらし、そのグループにおける最大のデータサイズを小さくする。そして、再びＳ０４９の手順をとる。
【００６９】
例えば、スケジュール変更可能性判定部１３１は、図１７に示すように、最大のデータサイズのタイムスロットが複数のプログラムで構成されている周期グループがある。よって、スケジュール変更可能性判定部１３１は、その最大のデータサイズのタイムスロットのデータ構成を変更し、最大サイズを減少させる。例えば、スケジュール変更可能性判定部１３１は、図１７において２０μｓ周期グループの最大のデータサイズのスロットはプログラムＡ，Ｃ，Ｋ，Ｊからなるタイムスロットである。よって、例えば、ジュール変更可能性判定部１３１は、図１８に示すように、プログラムＪを、プログラムＣのタイムスロットに移動させて、プログラムＡ，Ｄ，Ｋからなるタイムスロットとする。同様に、図１７において３０μｓ周期グループの最大のデータサイズのスロットはプログラムＢ，Ｉからなるタイムスロットである。よって、スケジュール変更可能性判定部１３１は、図１８に示すように、プログラムＢ，Ｉからなるタイムスロットについて、プログラムＢを別のタイムスロットへ移動させる。同様に、図１７において７０μｓ周期グループの最大のデータサイズのスロットはプログラムＦ，Ｇ，Ｅからなるタイムスロットである。よって、スケジュール変更可能性判定部１３１は、図１８に示すように、プログラムＦ，Ｇ，Ｅからなるタイムスロットについても、プログラムＧ，Ｅを別のタイムスロットへ移動させて、プログラムＦからなるタイムスロットとする。このようにして、スケジュール変更可能性判定部１３１は、各周期グループのタイムスロットのデータの最大サイズを減少させる。そして、再びＳ０４９以降の処理を繰り返す。例えば、図１９に示すように、Ｓｕｍ２＝６０Ｂ＋３０Ｂ＋４０Ｂ＝１３０Ｂを計算する。ここで、Ｓｕｍ２＞Ｔｓ（１００Ｂ）であるため（Ｓ０５０のＹｅｓ）、Ｓ０５１へ進む。
【００７０】
図９の説明に戻る。Ｓ０５１にて、各周期グループの各タイムスロットを構成するプログラムの組み合わせを変えたとしても、そのタイムスロットの最大サイズを減少させることはできないと判定したとき（Ｓ０５１のＮｏ）、スケジュール変更可能性判定部１３１は、周期グループのプログラムのうち、別の周期グループに移動可能なプログラムがあるか否かを判断する。つまり、スケジュール変更可能性判定部１３１は、各プログラムについて異なるグルーピングが可能か否かを判定する（Ｓ０５３）。ここで、異なるグルーピングが可能であれば、グループを変更し（Ｓ０５４）、Ｓ０４７からの手順を繰り返す。
【００７１】
例えば、図１８に示すように、２０μｓ周期グループにおいて、サイズが最大のタイムスロットはプログラムＡ，Ｄ，Ｋのタイムスロットと、プログラムＣ，Ｊのタイムスロットである。ここで、この２０μｓ周期グループはμｇ（各グループにおける周期を１つのタイムスロットの周期で除した値）は「２」である。よって、スケジュール変更可能性判定部１３１は、既に２つのタイムスロットを作っているので、このプログラムＡ，Ｄ，Ｋのいずれかのプログラムを別のタイムスロットに移すことによって、このタイムスロットの最大サイズを減少させることはできない。したがって、スケジュール変更可能性判定部１３１は、各周期グループの各タイムスロットを構成するプログラムの組み合わせを変えたとしても、そのタイムスロットの最大サイズを減少させることはできないと判定し（Ｓ０５１のＮｏ）、各プログラムについて異なるグルーピングが可能か否かを判断する（Ｓ０５３）。ここで、図１９に示すように、２０μｓ周期グループには、１４０μｓ周期のプログラムＫ，Ｊも含まれている。この１４０μｓ周期のプログラムＫ，Ｊは、他の周期（７０μｓ周期）のグループに移動可能なので、図２０に示すように７０μｓ周期グループに移動させる。つまり、スケジュール変更可能性判定部１３１は、各周期グループの最大サイズのタイムスロットに、公倍数の周期のプログラムのプログラムがあるとき、このプログラムを、このプログラムの周期の公約数の周期のグループへ移動させる。このようにすることで、スケジュール変更可能性判定部１３１は、各周期グループに決められたμｇの値を守りつつ、タイムスロットの最大サイズを減少させることができる。そして、再度、Ｓ０４９へ戻り、Ｓｕｍ２を計算すると、図２１に示すように、３０Ｂ＋３０Ｂ＋４０Ｂ＝１００Ｂとなる。この値はＴｓ＝１００Ｂを超えない値であるので（Ｓ５０のＮｏ）、Ｓ５５へ進み、プログラムの実行タイミングの調整を通知すると（Ｓ５５）、プログラムを実行可能と判定し（Ｓ５６）、新規にプログラム管理部１３０の割り当てを行う（Ｓ５８）。
【００７２】
図９の説明に戻る。一方、Ｓ０５３において、スケジュール変更可能性判定部１３１が、各データについて異なるグルーピングが可能でなければ（Ｓ０５３のＮｏ）、プログラムの実行は不可能と判定する（Ｓ０５７）。また、この周期処理プログラム１５２の実行にあたっては実行タイミングの調整が必要であることを送信時刻スケジュール部１３５に通知する（Ｓ０５５）。そして、スケジュール変更可能性判定部１３１は、Ｓ０５６以降の処理を実行する。
【００７３】
以上のような処理を実行することで、スケジュール変更可能性判定部１３１は、周期処理プログラム１５２であるプログラムＡ〜Ｋに対し、例えば、図２２に例示するようなタイムスロットの割り当てを決定する。例えば、図２２の符号２２０に示すタイムスロットはプログラムＡ（１０Ｂ）、プログラムＤ（２０Ｂ）、プログラムＩ（３０Ｂ）、プログラムＦ（４０Ｂ）を送信することを示す。すなわち、通信スケジューラ１０２がイーサネット（登録商標）フレームにおいて、当該タイムスロットの送信時刻になったとき、これらのプログラムの制御指令値を含む送信データを送信することを示す。
【００７４】
次に、非周期処理プログラム１５３（図５参照）に対するスケジュール変更可能性判定部１３１（図３参照）の判定手順を図２３に示す。
【００７５】
はじめにスケジュール変更可能性判定部１３１は、プログラム管理部１３０等の新規に割り当て可能な計算機資源があるか否かを判定する（Ｓ０４１）。もし、計算機資源がなければ（Ｓ０４１のＮｏ）、そのプログラムは実行不可能と判定する（Ｓ０５７）。
【００７６】
もし計算機資源があれば（Ｓ０４１のＹｅｓ）、スケジュール変更可能性判定部１３１は、プログラム情報管理部１４２のプログラム管理情報を読み出し、この非周期処理プログラム１５３に制約があるか否かを判定する（Ｓ０６０）。もし制約がなければ（Ｓ０６０のＮｏ）、スケジュール変更可能性判定部１３１は、送信時刻スケジュール部１３５に、送信時刻スケジュール表（タイムスロット表）１６０を参照して、スケジュールの空きがあるか否かを確認する（Ｓ０６１）。
【００７７】
図２４は、送信時刻スケジュール部１３５が管理するタイムスロットの送信時刻スケジュール表（タイムスロット表）１６０を例示した図である。この送信時刻スケジュール情報は、この通信スケジューラ１０２の記憶部に記憶される。このタイムスロット表１６０は、横軸に現在時刻から所定スロット後までのタイムスロットを時系列に表し、縦軸にタイムスロットあたりのデータサイズを示している。送信時刻スケジュール部１３５は、スケジュール変更可能性判定部１３１からの問い合わせに応じて、この図２４に示すようなタイムスロット表１６０において、まだデータが埋まりきっていないタイムスロットがあるか否かを確認する。つまり、スケジュール変更可能性判定部１３１は、このタイムスロット表１６０に、非周期処理プログラム１５３のデータを送信するタイムスロットの空きがあると、スケジュールに空きがあると判断する。
【００７８】
図２３のＳ０６１においてスケジュールに空きがなければ（Ｓ０６１のＮｏ）、スケジュール変更可能性判定部１３１は非周期処理プログラム１５３を実行不可能と判定する（Ｓ０５７）。なお、スケジュール変更可能性判定部１３１において、所定時間待機すれば、この非周期処理プログラム１５３を利用可能になると判定した場合は、それをログに記録しておき、その所定時間待機していてもよい。
【００７９】
Ｓ０６１において送信時刻スケジュール部１３５のスケジュールの空きがあれば（Ｓ０６１のＹｅｓ）、スケジュール変更可能性判定部１３１は非周期処理プログラム１５３を実行可能と判定する（Ｓ０５６）。一方、Ｓ０６０において非周期処理プログラム１５３に制約があれば（Ｓ０６０のＹｅｓ）、スケジュール変更可能性判定部１３１は、その非周期処理プログラム１５３の制約が最低通信帯域の保証か否かを判定する（Ｓ０６２）。もし、その制約が最低通信帯域の保証であれば（Ｓ０６２のＹｅｓ）、送信時刻スケジュール部１３５に、その帯域を保証できるか否かを確認する（Ｓ０６３）。つまり、スケジュール変更可能性判定部１３１は、送信時刻スケジュール部１３５に、その最低通信帯域を保証できるほどのスケジュールの空きがあるか否かを確認する。
【００８０】
例えば、この非周期処理プログラム１５３の最低通信帯域が５Ｂ／ｓであるとき、送信時刻スケジュール部１３５は、図２４に示すスケジュールの現在以降の１秒間分のタイムスロットに５Ｂの空きがあるか否かを確認し、その確認結果をスケジュール変更可能性判定部１３１へ返す。
【００８１】
ここで、もし、スケジュールの空きがあれば（Ｓ０６３のＹｅｓ）、スケジュール変更可能性判定部１３１は非周期処理プログラム１５３を実行可能と判定する（Ｓ０５６）。そして、プログラム情報管理部１４２に、プログラム管理情報の更新を依頼する（Ｓ０６６）。つまり、プログラム情報管理部１４２に、この非周期処理プログラム１５３の情報を追加するよう指示する。一方、スケジュールの空きがなければ（Ｓ０６３のＮｏ）、スケジュール変更可能性判定部１３１は非周期処理プログラム１５３を実行不可能と判定する（Ｓ０５７）。
【００８２】
Ｓ０６２において、非周期処理プログラム１５３の制約が最低通信帯域の保証でなければ（Ｓ０６２のＮｏ）、スケジュール変更可能性判定部１３１は、非周期処理プログラム１５３の制約が最長許容遅延か否かを判定する（Ｓ０６４）。もし制約が最長許容遅延であれば（Ｓ０６４のＹｅｓ）、非周期処理プログラム１５３に基づきＣＰＵ１０１は、スケジュール変更可能性判定部１３１にデータサイズを申請し、送信時刻スケジュール部１３５に対し、その最長許容遅延の条件を保証できるか否かを確認する（Ｓ０６５）。
【００８３】
例えば、この非周期処理プログラム１５３の最長許容遅延が、１０μｓであり、データサイズが１０Ｂであった場合、送信時刻スケジュール部１３５は、図２４のタイムスロット表１６０において、現在から１０μｓ先までのタイムスロットのうち，１０Ｂの空きがあるタイムスロットがあるか否かを確認する。そして、その確認結果を、スケジュール変更可能性判定部１３１へ返す。
【００８４】
ここで、その最長許容遅延を保証できると判断されたとき（Ｓ０６５のＹｅｓ）、スケジュール変更可能性判定部１３１は、この非周期処理プログラム１５３を実行可能と判定する（Ｓ０５６）。保証できなければ（Ｓ０６５のＮｏ）、スケジュール変更可能性判定部１３１は非周期処理プログラム１５３を実行不可能と判定する（Ｓ０５７）。なお、Ｓ０６４において、非周期処理プログラム１５３の制約が最長許容遅延でなければ（Ｓ０６４のＮｏ）、スケジュール変更可能性判定部１３１は、その非周期処理プログラム１５３を実行不可能と判定する（Ｓ０６６）。ただし、その他の制約の判定方法を用意すれば、順次判定することが可能である。
【００８５】
なお、周期処理プログラム１５２に基づきＣＰＵ１０１は、図６、図７のＳ００２において、プログラム管理部１３０のプログラム情報管理部１４２は、周期処理プログラム１５２や非周期処理プログラム１５３に関する各種情報をプログラム管理情報に設定する。そして、Ｓ００４において、送信データを送信データ管理部１４０に設定する。具体的には、はじめて送信データ管理部１４０を設定すると、送信時刻スケジュール部１３５へ、そのことが通知され、送信時刻スケジュール部１３５は今後の送信スケジュールを更新する。この送信時刻スケジュール部１３５の送信スケジュールの更新について説明する。
【００８６】
送信時刻スケジュール部１３５では、タイムスロットを基準にデータの送信スケジュールを管理する。送信時刻スケジュール部１３５は、図２４に例示するように、このタイムスロットごとにデータグラム連結部１３２によりデータを連結した送信データを送信する。このタイムスロットの幅は、適当なサイズのパケットを送信するのに必要な通信スケジューラ１０２の処理時間と、制御処理の要求周期を考慮して決定される。
【００８７】
例えば、１００Ｂのパケットを送信するのに必要な通信スケジューラ１０２の処理時間が１０μｓである場合、タイムスロットの幅は１０μｓとする。なお、このとき、制御処理の要求周期も１０μｓの倍数とする。また、１００Ｂ以上のデータサイズのパケットを送信するときは、複数のタイムスロットを占有させる等の処理が必要である。タイムスロットの幅は、例えば、スケジュール変更可能性判定部１３１のスケジュール判定をしやすい幅でもよいし、５００Ｂ以上のパケットは送信しない等制御システム上の制約があるならば、その制約に合った幅であってもよい。
【００８８】
ここで、再び図２４を用いて送信時刻スケジュール部１３５のタイムスロット管理方法を説明する。図２４のタイムスロット表１６０は、横軸に現在時刻から所定スロット後までのタイムスロットを時系列に表し、縦軸にタイムスロットあたりの通信スケジューラ１０２が通信処理可能なデータサイズを示している。ＣＰＵ１０１は、送信時刻スケジュール表１６０において、現在時刻を示すポインタをタイムスロット時間の経過とともに横軸上にスライドさせていき、終端に到達すると先頭に戻す処理を繰り返す。
【００８９】
送信時刻スケジュール部１３５は、スケジュール変更可能性判定部１３１で判定したプログラムの送信予定時刻とそのデータサイズとをタイムスロット表１６０に書き込んでいく。このとき、各プログラムに与えられた制約を満足する範囲で可能な限り同じタイムスロットにプログラムのスケジュールを組み込む。ただし、図９のＳ０４６からＳ０５３で示したようにスケジュール変更可能性判定部１３１がタイムスロットをずらすことが必要であると判定した場合は、タイムスロットをずらす。
【００９０】
また、タイムスロット表１６０の横軸の幅よりも周期が大きな周期処理プログラム１５２の場合には、送信までの残りタイムスロット数を個別に管理し、タイムスロットの時間経過とともに、残りのタイムスロット数を１つずつ減じていく。そして、このタイムスロット数が０になったとき、この周期処理プログラム１５２のデータを送信するようにする。この後、タイムスロット数を周期分の値に初期化する。
【００９１】
また、周期処理プログラム１５２に基づきＣＰＵ１０１は、図６、図７のＳ００２において、プログラム管理情報に示される当該周期処理プログラム１５２の周期内で、送信データを送信時刻スケジュール部１３５に通知することができなかった場合の挙動を設定することができる。そのような設定例として、以前の指令値を同じデータとして送信する、送信を停止する、送信要求時にエラーをユーザに提示する、要求がくるまで送信を遅らせる等である。また、このような周期に対する送信の遅れの回数、時刻等を記録し、ユーザは、この情報を制御用計算機１２０の診断等に活用することができる。
【００９２】
また、図７のＳ０１４の待機を解除する場合は、プログラム起床部１３６が、この周期処理プログラム１５２に基づく送信タイミングにあわせて適切なタイミングで実行するようにしてもよい。
【００９３】
また、図６、図７、図８において処理が終了すると、プログラム管理部１３０は解放され、送信時刻スケジュール部１３５は、この周期処理プログラム１５２、非周期処理プログラム１５３に関するスケジュールを削除する。
【００９４】
なお、周期処理プログラム１５２の実行中に、その処理の周期を変更する場合、周期処理プログラム１５２に基づきＣＰＵ１０１は、周期が変更可能か否かを通信スケジューラ１０２のスケジュール変更可能性判定部１３１に問い合わせる。そして、その周期が変更可能と判定されたとき、図６のＳ００２以降の処理を実行する。なお、この周期処理プログラム１５２の周期を変更可能か否かは、前記した図９に示す処理と同様の処理により判断される。すなわち、スケジュール変更可能性判定部１３１が、変更対象の周期処理プログラム１５２について、変更後の周期と、最大データサイズとの申請を受け付け（Ｓ０４０）、Ｓ０４１以降の処理を実行すればよい。
【００９５】
このような制御用計算機１２０によれば、周期処理プログラム１５２に基づきＣＰＵ１０１は、他の周期処理プログラム１５２に対して同期をとる必要がなく、任意のタイミングでデータを送受信することができる。また、制御用計算機１２０は、制御処理や通信処理を、周期処理プログラム１５２や非周期処理プログラム１５３と独立して実装することができる。これらの特長により、制御用計算機１２０における周期処理プログラム１５２および非周期処理プログラム１５３の依存性を下げることができ、ソフトウェアとして再利用性、保守性、拡張性、柔軟性を向上させることができる。つまり、この制御用計算機１２０は、既存のシステムを変更、拡張することが容易であり、また特定の制御対象装置１２１用の周期処理プログラム１５２を別の制御システムで用いる場合も容易に再利用可能である。
【００９６】
また、制御用計算機１２０は、周期処理プログラム１５２、非周期処理プログラム１５３それぞれの制約を考慮して、データを連結し、まとめて送信することができる。したがって、同じデータ量を送信する場合でも送信パケット数を減らすことができ、ヘッダやトレイラ等の共通部分を処理するオーバーヘッドを減らすことができる。例えば、Ｅｔｈｅｒｎｅｔ（登録商標）では、８Ｂのプリアンブル、１４Ｂのヘッダ、ＦＣＳ（Frame Check Sequence）の４Ｂ、９６ビット時間のフレーム間ギャップの通信にかかるオーバーヘッドが存在する。これらのオーバーヘッドを減らすことで、最短到達可能周期をより短くすることができ、制御対象の制御性能を向上させることができる。
【００９７】
なお、制御用計算機１２０の通信スケジューラ１０２の機能を、この制御用計算機１２０のプログラムの実行処理により実現してもよい。このような制御用計算機１２０は、図２５に示すように、制御用計算機１２０の通信スケジューラ１０２を含まない構成となる。この制御用計算機１２０上で動作するプログラムの構成を図２６に示す。
【００９８】
図２６の通信スケジューラ１７０は、ＣＰＵ１０１上で動作するプログラムであり、前記した通信スケジューラ１０２と同様の機能を実現する。この通信スケジューラ１７０は、周期処理プログラム１５２、プロトコルスタック１５５から通信要求を受け取り、デバイスドライバ１５１を介してＬＡＮコントローラ１０３にアクセスし、制御用ネットワーク１２２（図２参照）に対して通信する。この通信スケジューラ１７０は、例えば、ミドルウェア、サーバプログラム、カーネルモジュール等である。
【００９９】
なお、制御用計算機１２０と、制御対象装置１２１とは、ＬＡＮ以外のネットワークにより接続されていてもよい。この場合、図２７に示すように、制御用計算機１２０の通信スケジューラ１８０は、この制御ネットワークに接続するための通信コントローラ１８１をさらに備える。
【０１００】
また、この通信スケジューラ１８０は、図２８に示すように、この制御用計算機１２０が、この制御用ネットワークを利用するための様々な情報（例えば、この制御用計算機１２０を利用可能な時間、利用可能な期間、送受信可能なパケット等に関する情報）を記憶するネットワークプロトコル情報管理部１９０をさらに備える。そして、送信時刻スケジュール部１３５は、このネットワークプロトコル情報管理部１９０から制御用ネットワークの利用に関する情報を取得し、この情報を参照して、送信データのスケジューリングを行う。
【０１０１】
また、制御用計算機１２０は、図２９に示すように、バス型ネットワークにより、制御対象装置１２１と接続されていてもよい。また、制御システムは、図２９に示すように、複数の制御用計算機１２０により、複数の制御対象装置１２１を制御するようにしてもよい。なお、このように制御用計算機１２０を複数含む制御システムの場合、この制御用計算機１２０が互いに送信データを送信するタイミングについて同期をとるようにスケジューリングするものとする。
【０１０２】
さらに、制御用計算機１２０の送信部１３７（図３参照）は、イーサネット（登録商標）フレームを送信する場合を例に説明したが、前記したタイムスロット表（スケジュール情報）１６０に従い、時分割でデータを送信するようにしてもよい。
【符号の説明】
【０１０３】
１０２，１７０，１８０  通信スケジューラ
１０３  ＬＡＮコントローラ
１０８  メモリ
１０９  不揮発性記憶媒体
１１０  バス
１２０  制御用計算機
１２１  制御対象装置
１２２  制御用ネットワーク
１３０  プログラム管理部
１３１  スケジュール変更可能性判定部
１３２  データグラム連結部
１３３  データグラム分解部
１３４  計時部
１３５  送信時刻スケジュール部
１３６  プログラム起床部
１３７  送信部
１３８  受信部
１４０  送信データ管理部
１４１  受信データ管理部
１４２  プログラム情報管理部
１４３  データグラム生成部
１４４  データグラム抽出部
１４５  状態フラグ管理部
１５１  デバイスドライバ
１５２  周期処理プログラム
１５３  非周期処理プログラム
１５４  ＡＰＩ
１５５  プロトコルスタック
１５６  共通設定プログラム
１８１  通信コントローラ
１９０  ネットワークプロトコル情報管理部
【図１】
2010224939.tif 000003
【図２】
2010224939.tif 000004
【図３】
2010224939.tif 000005
【図４】
2010224939.tif 000006
【図５】
2010224939.tif 000007
【図６】
2010224939.tif 000008
【図７】
2010224939.tif 000009
【図８】
2010224939.tif 000010
【図９】
2010224939.tif 000011
【図１０】
2010224939.tif 000012
【図１１】
2010224939.tif 000013
【図１２】
2010224939.tif 000014
【図１３】
2010224939.tif 000015
【図１４】
2010224939.tif 000016
【図１５】
2010224939.tif 000017
【図１６】
2010224939.tif 000018
【図１７】
2010224939.tif 000019
【図１８】
2010224939.tif 000020
【図１９】
2010224939.tif 000021
【図２０】
2010224939.tif 000022
【図２１】
2010224939.tif 000023
【図２２】
2010224939.tif 000024
【図２３】
2010224939.tif 000025
【図２４】
2010224939.tif 000026
【図２５】
2010224939.tif 000027
【図２６】
2010224939.tif 000028
【図２７】
2010224939.tif 000029
【図２８】
2010224939.tif 000030
【図２９】
2010224939.tif 000031