(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024042538
(43)【公開日】2024-03-28
(54)【発明の名称】コントローラ
(51)【国際特許分類】
G05B 19/042 20060101AFI20240321BHJP
【FI】
G05B19/042
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2022147318
(22)【出願日】2022-09-15
(71)【出願人】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(71)【出願人】
【識別番号】598076591
【氏名又は名称】東芝インフラシステムズ株式会社
(74)【代理人】
【識別番号】100120031
【弁理士】
【氏名又は名称】宮嶋 学
(74)【代理人】
【識別番号】100107582
【弁理士】
【氏名又は名称】関根 毅
(74)【代理人】
【識別番号】100118843
【弁理士】
【氏名又は名称】赤岡 明
(72)【発明者】
【氏名】中川 克敏
(72)【発明者】
【氏名】山田 裕太
(72)【発明者】
【氏名】梅田 裕二
【テーマコード(参考)】
5H220
【Fターム(参考)】
5H220AA04
5H220CC06
5H220CX01
5H220EE06
5H220JJ12
5H220JJ26
5H220JJ32
(57)【要約】
【課題】データのタスク処理と送信処理が非同期であっても、データの通信処理のリアルタイム性を実現できるコントローラを提供する。
【解決手段】本実施形態によるコントローラは、制御対象を制御するコントローラである。第1インタフェースコントローラは、制御対象と通信可能に接続され、制御対象からデータを周期的に入力する。第1記憶部は、データを格納する。演算部は、データを入力処理して演算処理して第1記憶部へ転送する。第2インタフェースコントローラは、他のコントローラと通信可能に接続され、データを他のコントローラへ周期的に送信する送信処理を実行する。演算部は、送信処理の開始時刻がデータの入力処理の期間に重複する場合に、送信処理の開始時刻を入力処理の期間より後に遅延させる。
【選択図】
図2
【特許請求の範囲】
【請求項1】
制御対象を制御するコントローラであって、
前記制御対象と通信可能に接続され、前記制御対象からデータを周期的に入力する第1インタフェースコントローラと、
前記データを格納する第1記憶部と、
前記データを入力処理して演算処理して前記第1記憶部へ転送する演算部と、
他のコントローラと通信可能に接続され、前記データを前記他のコントローラへ周期的に送信する送信処理を実行する第2インタフェースコントローラとを備え、
前記演算部は、前記送信処理の開始時刻が前記データの入力処理の期間に重複する場合に、前記送信処理の開始時刻を前記入力処理の期間より後に遅延させる、コントローラ。
【請求項2】
前記データの送信処理は、前記他のコントローラに前記データを送信し、前記他のコントローラからのデータを前記第1記憶部へ格納する等値化処理である、請求項1に記載のコントローラ。
【請求項3】
前記第1インタフェースコントローラから前記データを入力する入力処理の期間と、前記データのうち第1データの入力処理から次の第2データの入力処理までの第1周期と、前記第1データの送信処理から前記第2データの送信処理までの第2周期と、を格納する第2記憶部をさらに備え、
前記演算部は、タイマ機能を有し、前記第1データの入力処理を実際に開始したときにその時点の第1開始時刻と前記第1周期とに基づいて、次に入力される予定の前記第2データの入力処理の第2開始時刻を算出して前記第2記憶部へ格納し、
前記演算部は、前記第1データの前記送信処理を実際に開始したときにその時点の第3開始時刻と前記第2周期とに基づいて、次に送信される予定の前記第2データの送信処理の第4開始時刻を算出して前記第2記憶部へ格納し、
前記演算部は、前記第2開始時刻から前記入力処理の期間内に、前記第4開始時刻が含まれているとき、前記第4開始時刻を前記第2開始時刻から前記入力処理の期間以上後まで遅延させる、請求項1または請求項2に記載のコントローラ。
【請求項4】
前記演算部は、前記第1開始時刻において、前記第1開始時刻に前記第1周期を足し算することによって前記第2開始時刻を算出し、前記第3開始時刻において、前記第3開始時刻に前記第2周期を足し算することによって前記第4開始時刻を算出する、請求項3に記載のコントローラ。
【請求項5】
前記演算部は、前記第4開始時刻に前記入力処理の期間以上を足し算した第5開始時刻まで前記第2データの送信処理を遅延させる、請求項3に記載のコントローラ。
【請求項6】
前記演算部は、前記入力処理の期間以上の間、前記タイマ機能を停止させる、請求項5に記載のコントローラ。
【請求項7】
前記第2記憶部は、前記第2開始時刻から前記入力処理の期間内に前記第4開始時刻が含まれているときに反転されるフラグ情報を有し、
前記演算部は、前記フラグ情報に基づいて、前記第2データの送信処理を遅延させる、請求項3に記載のコントローラ。
【請求項8】
制御対象と通信可能に接続された第1インタフェースコントローラと、他のコントローラと通信可能に接続された第2インタフェースコントローラと、第1記憶部と、演算部とを備え、前記制御対象を制御するコントローラの制御方法であって、
前記第1インタフェースコントローラから前記制御対象からデータを入力し、
前記データを周期的に入力処理して前記第1記憶部に格納し、
前記第2インタフェースコントローラが前記データを前記他のコントローラへ周期的に送信する送信処理を実行する際に、前記送信処理の開始時刻が前記データの入力処理の期間に重複する場合に、前記送信処理の開始時刻を前記入力処理の期間より後に遅延させる、ことを具備するコントローラの制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、コントローラに関する。
【背景技術】
【0002】
産業機械等を制御するコントローラは、産業装置等の制御対象からのデータの入出力処理、データのタスク処理、および、データを他のコントローラへ出力する通信処理を個別に非同期で実行している場合がある。また、このようなコントローラにおいて、優先度の異なるデータが混在していても、リアルタイム通信を維持するように送信キューを時間制御している場合がある。
【0003】
しかし、タスク処理と通信処理とが非同期の場合、送信処理の送信キューを厳密に時間管理すると、通信処理とタスク処理との周期が適合せず、送信すべきデータが次の周期の通信処理で送信されることがある。この場合、データの通信処理が遅延し、そのリアルタイム性が損なわれてしまうおそれがある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2019-121822号公報
【特許文献2】特許第5184597号
【特許文献3】特許第6768625号
【発明の概要】
【発明が解決しようとする課題】
【0005】
データのタスク処理と送信処理が非同期であっても、データの通信処理のリアルタイム性を実現できるコントローラを提供する。
【課題を解決するための手段】
【0006】
本実施形態によるコントローラは、制御対象を制御するコントローラである。第1インタフェースコントローラは、制御対象と通信可能に接続され、制御対象からデータを周期的に入力する。第1記憶部は、データを格納する。演算部は、データを入力処理して演算処理して第1記憶部へ転送する。第2インタフェースコントローラは、他のコントローラと通信可能に接続され、データを他のコントローラへ周期的に送信する送信処理を実行する。演算部は、送信処理の開始時刻がデータの入力処理の期間に重複する場合に、送信処理の開始時刻を入力処理の期間より後に遅延させる。
【図面の簡単な説明】
【0007】
【
図1】第1実施形態による産業用コントローラシステムの構成例を示すブロック図。
【
図2】コントローラの内部構成の一例を示すブロック図。
【
図3】LANコントローラの構成および機能の一例を示す概念図。
【
図4】コントローラの入出力処理、演算処理、送信処理のそれぞれの動作の一例を示すタイミング図。
【
図5】コントローラの入出力処理、演算処理、送信処理のそれぞれの動作の一例を示すタイミング図。
【
図6】コントローラのタスク処理の動作の一例を示すフロー図。
【
図7】コントローラの送信処理の動作の一例を示すフロー図。
【
図8】第2実施形態によるコントローラのタスク処理時間を示す表。
【
図9】第2実施形態によるコントローラの動作の一例を示すフロー図。
【発明を実施するための形態】
【0008】
以下、図面を参照して本発明に係る実施形態を説明する。本実施形態は、本発明を限定するものではない。図面は模式的または概念的なものであり、各部分の比率などは、必ずしも現実のものと同一とは限らない。明細書と図面において、既出の図面に関して前述したものと同様の要素には同一の符号を付して詳細な説明は適宜省略する。
【0009】
(第1実施形態)
図1は、第1実施形態による産業用コントローラシステム(以下、単にシステムという)1の構成例を示すブロック図である。システム1は、コントローラ11~15を備えており、システム1の外部に設けられた単数または複数の産業機械を制御するために設けられている。
【0010】
コントローラ11~15は、例えば、LAN(Local Area Network)等のネットワーク20を介して互いに通信可能に接続されている。ネットワーク20は、有線または無線のいずれでもよい。コントローラ11~15には、他のコントローラと重複しない固有の識別子が付されている。コントローラ11~15は、その内部にタイマ機能を有しており、その時刻は、IEEE1588で定義されているPTP(Precision Time Protocol)などを用いて、互いに高精度に同期している。
【0011】
コントローラ11~15は、それぞれ同一構成を有してよい。また、コントローラの数は、5個に限定されず、4個以下でもよく、あるいは、6個以上であってもよい。
【0012】
図2は、コントローラ11の内部構成の一例を示すブロック図である。コントローラ12~15の構成は、コントローラ11の構成と同じであるので、ここでは、コントローラ11の構成を説明し、コントローラ12~15の構成の説明は省略する。
【0013】
コントローラ11は、CPU30と、I/Oバスコントローラ40と、メモリ50と、コモンメモリ60と、インタフェースブリッジ70と、LANコントローラ80とを備えている。コントローラ11は、I/O装置90を介して産業機械100に通信可能に接続されている。
【0014】
演算部の一例としてのCPU30は、I/Oバスコントローラ40から入力された産業機械100からの入力データを処理する。入力データは、例えば、産業機械100に設けられた各種センサの情報であり、より詳細には、圧力情報、温度情報、モータの位置情報等でよい。CPU30は、このような入力データをI/Oバスコントローラ40から入力してメモリ50および/またはコモンメモリ60へ転送する入力処理を実行する。また、CPU30は、入力データ等を処理し、それに対応して制御コマンドを生成し、この制御コマンドを、I/Oバスコントローラ40を介して産業機械100へ出力する。制御コマンドは、I/O装置90を介して産業機械100へ送信され、産業機械100を制御するために用いられる。例えば、入力データが温度情報の場合には、制御コマンドは、産業機械100の温度を制御するためにヒータの出力を調節するために用いられる。また、CPU30は、メモリ50と協働して入力データを演算処理し、その結果として得られた演算結果データをコモンメモリ60に格納する。
【0015】
CPU30に導入されるOS(オペレーションシステム)は、リアルタイムOSである。CPU30は、入力データおよび制御コマンドの入出力処理、入力データの演算処理、演算結果データの送信処理等のソフトウェア処理をリアルタイムでスケジューリングする。入力処理では、CPU30は、入力データを周期的に入力処理して入力データや演算結果データをコモンメモリ60へ転送する。
【0016】
第1インタフェースコントローラの一例としてのI/Oバスコントローラ40は、I/O装置90を介して外部の産業機械100と通信可能に接続されている。I/Oバスコントローラ40は、I/O装置90を制御して、産業機械100から入力データを入力し、CPU30からの制御コマンドを産業機械100へ出力する。I/Oバスコントローラ40は、産業機械100とのデータの入出力処理を一定の周期(例えば、約200μs)で実行する。このように、I/Oバスコントローラ40は、産業機械100とコントローラ11との間のデータの入出力処理を制御する。
【0017】
第2記憶部としてのメモリ50は、CPU30で実行されるプログラム、および、入力データを演算処理するために用いられる様々なパラメータ等を格納している。また、メモリ50は、入出力処理で入力された入力データあるいは入力データを演算処理して得られた演算結果を一時的に格納する。
【0018】
第1記憶部としてのコモンメモリ60は、連続した記憶領域を複数のブロックに分割し、管理している。各ブロックは、送信処理に用いられるコントローラの識別子(以下、ノード番号ともいう)と関連付けて予め設定されている。また、各ブロックは、高速、中速および低速の送信優先度が設定されている。高速のブロックのデータは、中速または低速のブロックのデータよりも優先度が高い。中速のブロックのデータは、低速のブロックのデータよりも優先度が高い。優先度の高いブロックのデータは、優先的に送信処理される。
【0019】
コモンメモリ60は、コントローラ11の入出力処理で入力された入力データおよび演算結果データを格納するとともに、他のコントローラ12~15のデータも等値化処理によって格納する。例えば、コモンメモリ60の各ブロックのデータは、マルチキャストによる送信処理により、ネットワーク20内の他のコントローラ12~15に送信され、コモンメモリ60の内容はコントローラ間で等値化されている。等値化処理は、コントローラ11~15が入出力処理において産業機械100から受け取った自己のデータを、ネットワーク20を介して他のコントローラへ送信し合い、また、他のコントローラのデータを受け取ってコモンメモリ60に格納することによって、コモンメモリ60に格納されているデータを等値化する処理である。これにより、コントローラ11~15のコモンメモリ60のデータがそれぞれのコモンメモリ60に等しく格納され等値状態となる。
【0020】
インタフェースブリッジ70は、例えば、PCIエクスプレス(登録商標)ブリッジでよい。インタフェースブリッジ70は、データのプロトコル変換を行い、データをLANコントローラ80からネットワーク20へ送信可能にする。
【0021】
第2インタフェースコントローラの一例としてのLANコントローラ80は、他のコントローラ12~15とネットワーク20を介して通信可能に接続されている。LANコントローラ80は、データを他のコントローラ12~15へ周期的に同報送信する。LANコントローラ80は、コモンメモリ60に格納されたデータ等の送信すべきデータ(以下、送信データともいう)を送信処理する際に、送信キューのゲート制御を行う。送信データは、それぞれに優先度の情報が付されており、その優先度ごとに送信キューに蓄積(格納)される。LANコントローラ80は、送信データが1つ選択されるように各送信キューをゲート制御する機能を実装している。これにより、LANコントローラ80は、送信キューに蓄積された送信データを優先度の高い順に1ブロックずつ送信処理する。このとき、このゲート制御機能は、IEEE802.1Qbvの規格に準拠しており、ゲート制御設定はソフトウェアとして実装されている。
【0022】
次に、入力処理、出力処理、演算処理および送信処理について説明する。
【0023】
入力処理は、産業機械100からのデータをI/O装置90およびI/Oバスコントローラ40を介してコントローラ11内に取り込む処理である。また、入力処理は、他のコントローラ12~15のデータを、等値化されたコモンメモリ60からメモリ50に入力する処理を含む。また、出力処理は、制御コマンド等をI/Oバスコントローラ40およびI/O装置90を介して産業機械100へ出力する処理である。また、出力処理は、メモリ50からコモンメモリ60へデータを格納する処理を含む。以下、入力処理と出力処理とをまとめて入出力処理ともいう。
【0024】
演算処理は、CPU30がメモリ50に入力されたデータを演算し、その演算結果をメモリ50に格納する処理である。演算処理は、高速、中速、低速などのデータの優先度ごとに実行される。入力処理、出力処理および演算処理は、周期的に起動され実行される。以下、入出力処理および演算処理をまとめてタスク処理ともいう。
【0025】
送信処理は、CPU30がコモンメモリ60のデータをLANコントローラ80に対して送信要求し、LANコントローラ80が送信要求に応じて送信キューに蓄積されたデータを、ネットワーク20を介して他のコントローラ12~15へ送信する処理である。このとき、LANコントローラ80は、データを優先度ごとに送信キューに蓄積し、そのデータを優先度に応じて他のコントローラ12~15へ同報送信する。送信処理は、周期的に起動され実行されるが、上記入出力処理および演算処理とは非同期で実行される。
【0026】
図3は、LANコントローラ80の構成および機能の一例を示す概念図である。LANコントローラ80は、送信データをコモンメモリ60からブロックごとに受け取り、送信キューQ1~Q3のいずれかに優先度ごとに蓄積する。LANコントローラ80は、送信データがブロックごとに選択されるように各送信キューをゲート制御する。このとき、送信キューQ1~Q3からの送信が重複しないように、送信キューQ1~Q3のそれぞれのゲートは、重複しない異なる時間に開放される。例えば、送信キューQ1のゲートの開放時間は、t1~t2であり、送信キューQ2のゲートの開放時間は、t3~t4であり、送信キューQ3のゲートの開放時間は、t5~t6である。これにより、LANコントローラ80は、送信データを重複することなく、優先度の高い順に1ブロックずつネットワーク20を介して他のコントローラ12~15へ送信することができる。尚、優先度は、3つに限定されず、2つ以下または4つ以上であってもよい。
【0027】
尚、送信キューのゲートの開放時間の制御は、有効または無効に切り替えることができる。ゲートの開放時間が無効になっている場合、LANコントローラ80は、開放時間の設定に従うことなく、送信キューQ1~Q4の優先度の高い順にFIFO(First In First Out)で送信する。ゲートの開放時間が有効になっている場合、LANコントローラ80は、ゲートの開放時間の設定に従って、送信する。本実施形態では、ゲートの開放時間は有効に設定されている。
【0028】
次に、コントローラ11の動作について説明する。
【0029】
図4および
図5は、コントローラ11の入出力処理、演算処理、送信処理のそれぞれの動作の一例を示すタイミング図である。
図6は、コントローラ11のタスク処理の動作の一例を示すフロー図である。
図7は、コントローラ11の送信処理の動作の一例を示すフロー図である。送信処理は、タスク処理とは非同期で実行されるため、
図4および
図5では、送信処理は、タスク処理とは別に図示している。
【0030】
入出力処理は、入力処理および出力処理の両方を意味する。入出力処理および演算処理は、同期しており、一定の周期Bで繰り返し実行される。送信処理は、一定の周期Fで繰り返し実行されるが、入出力処理および演算処理とは非同期で実行される。
【0031】
また、入力処理の実行期間Dと、或る入力処理から次の入力処理までの第1周期Bと、送信処理の実行期間Hと、或る送信処理から次の送信処理までの第2周期Fは、予め設定されており、メモリ50に格納されている。
【0032】
まず、
図4に示すように、t11~t12において、入出力処理が実行される(
図6のS10)。即ち、産業機械100からのデータは、I/O装置90およびI/Oバスコントローラ40からコントローラ11内に入力され、メモリ50に保持される。また、データは、メモリ50からコモンメモリ60へ転送される。このときコモンメモリ60に格納されているデータも、演算処理の必要に応じてメモリ50に入力される。また、このとき、送信すべき制御コマンドがある場合、制御コマンドはI/Oバスコントローラ40およびI/O装置90から産業機械100へ出力される。
【0033】
また、t11において、CPU30が、タイマ機能を用いて、入出力処理を開始した時にその時点の開始時刻(第1開始時刻)t11を取得し、メモリ50に格納する(S10)。CPU30は、開始時刻t11および第1周期Bに基づいて、次に実行される予定の入出力処理の開始時刻(第2開始時刻)t17を算出してメモリ50に格納する(
図6のS20)。例えば、CPU30は、開始時刻t11に第1周期Bを足し算して、開始時刻t17を算出すればよい。尚、このとき算出された開始時刻t17は、計算により算出された未来の予定時刻であり、次のタスク処理の起動時刻でもある。次のタスク処理の起動時刻t17は、データの優先度に関連付けてメモリ50に格納する。
【0034】
t12において、入出力処理が終了すると、CPU30は、入力データ等を用いて演算処理を開始する(S30)。演算処理では、CPU30は、入力データ等を用いて、所定の演算を実行し、演算結果データを得る。演算結果データは、メモリ50およびコモンメモリ60に格納される(S32)。
【0035】
次のタスク処理がある場合(S34のYES)、CPU30は、ステップS10~S32を繰り返し実行する。一方、次のタスク処理が無い場合(S34のNO)、CPU30は、タスク処理を終了する。
【0036】
一方、
図4のt13において、送信処理が開始される。送信処理において、CPU30は、タイマ機能を用いて、送信処理を開始した時にその時点の開始時刻(第3開始時刻)t13を取得し、メモリ50に格納する(S40)。CPU30は、開始時刻t13および第2周期Fに基づいて、次に実行される予定の送信処理の開始時刻t15を算出してメモリ50に格納する(S50)。例えば、CPU30は、開始時刻t13に第2周期Fを足し算して、開始時刻t15を算出すればよい。尚、このとき算出された開始時刻t15は、計算により算出された未来の予定時刻である。
【0037】
ここで、CPU30は、次の送信処理の開始時刻t15が、次の入出力処理の開始時刻t17から入力処理の期間(即ち、t17~t17+D)内に含まれているか否かを判定する(S60)。t17+Dは、t19である。即ち、CPU30は、次の送信処理の開始時刻t15が、次の入力出力処理の期間t17~t19に重複しているか否かを判定する。
【0038】
メモリ50は、次の送信処理の開始時刻が、次の入出力処理の期間に含まれているか否かを示すフラグ情報(1ビットデータ)を有する。次の送信処理の開始時刻が次の入出力処理の期間に含まれている場合には(S60のYES)、CPU30は、フラグ情報を立てる(ビットを反転させる)(S75)。次の送信処理の開始時刻が次の入力出力処理の期間に含まれていない場合には(S60のNO)、CPU30は、フラグ情報を立てない(ビットを反転させない)(S70)。
図4の例では、次の送信処理の開始時刻t15が次の入出力処理の期間t17~t19に含まれていないので(S60のNO)、CPU30は、フラグ情報を立てない(S70)。フラグ情報は、送信処理を遅延させるか否かを決定するために用いられる。
【0039】
また、CPU30は、t13~t14の今回の送信処理において、フラグ情報が立っているかを確認する(S80)。フラグ情報が立っている場合(S80のYES)、CPU30は、送信処理のタイマを停止し(S82)、t13~t14の今回の送信処理の開始時刻を、入出力処理の実行期間D以上遅延させた時刻に設定する(S84)。例えば、t13~t14の今回の送信処理の開始時刻は入出力処理の期間に重複しないので、t13~t14の送信処理に対応するフラグ情報は立っていない。よって、CPU30は、t13~t14の送信処理を遅延させることなく、t13において予定通り開始する(S100)。送信処理では、CPU30は、コモンメモリ60のデータをLANコントローラ80に転送し、送信要求する。LANコントローラ80は、送信キューに蓄積されたデータを、ネットワーク20を介して他のコントローラ12~15へ送信する。
【0040】
t13~t14の送信処理が終了すると、CPU30は、次のタスクがあるか確認する。次のタスク処理がある場合(S110のYES)、CPU30は、ステップS40~S100を繰り返し実行する。
【0041】
図4の例では、次のタスク処理があるので、例えば、t15~t16における送信処理において、CPU30は、ステップS40~S100を実行する。このとき、ステップS80において、CPU30は、t15~t16の送信処理に対応するメモリ50のフラグ情報を確認する。このとき、t15~t16の送信処理に対応するフラグ情報が立っていないので、CPU30は、t15~t16の送信処理を遅延させることなく、t15~t16において実行する(S100)。
【0042】
また、t15において、CPU30は、ステップS40~S60を実行し、開始時刻t15および第2周期Fに基づいて、次に実行される予定の送信処理の開始時刻(第4開始時刻)t18を算出してメモリ50に格納する。例えば、CPU30は、開始時刻t15に第2周期Fを足し算して、開始時刻t18を算出すればよい。尚、このとき算出された開始時刻t18は、計算により算出された未来の予定時刻である。
【0043】
ここで、CPU30は、次の送信処理の開始時刻t18が、次の入出力処理の期間t17~t19内に含まれているか否かを判定する(S60)。即ち、CPU30は、次の送信処理の開始時刻t18が、次の入力出力処理の期間t17~t19に重複しているか否かを判定する。
【0044】
次の送信処理の開始時刻t18は、次の入出力処理の期間t17~t19に含まれている(重複している)ので(S60のYES)、CPU30は、フラグ情報を立てる(S75)。
【0045】
次に、t17において、タスク処理が終了し、次のタスク処理が開始される(S34のYES)。従って、t17~t19において、
図6のステップS10~S32が再度実行される。
【0046】
このとき、t17において、CPU30が、タイマ機能を用いて、入出力処理を開始した時にその時点の開始時刻t17を取得し、メモリ50に格納する(S10)。CPU30は、開始時刻t17および第1周期Bに基づいて、次に実行される予定の入出力処理の開始時刻(第2開始時刻)t25を算出してメモリ50に格納する(S20)。例えば、CPU30は、開始時刻t17に第1周期Bを足し算して、開始時刻t25を算出すればよい。尚、このとき算出された開始時刻t25は、計算により算出された未来の予定時刻である。
【0047】
ここで、t17において、CPU30は、次の送信処理の開始時刻t21が、次の入出力処理の開始時刻t25から入力処理の期間(即ち、t25~t25+D)内に含まれているか否かを判定する(S60)。t25+Dは、t26である。即ち、CPU30は、次の送信処理の開始時刻t21が、次の入力出力処理の期間t25~t26に重複しているか否かを判定する。
【0048】
CPU30は、次の送信処理の開始時刻t21は、次の入出力処理の期間t25~t26に含まれていないので(S60のNO)、CPU30は、フラグ情報を立てない(S70)。
【0049】
次に、t18~t20における送信処理開始時刻において、CPU30は、ステップS40~S100を再度実行する。このとき、ステップS60~S75にいて、CPU30は、次の送信処理の開始時刻t21が、次の入出力処理の期間t25~t26に含まれるかを判定し、その判定結果に基づいてフラグ情報を立てる(または立てない)。例えば、t18の送信処理の開始予定時刻において、CPU30は、開始時刻t18および第2周期Fに基づいて、次に実行される予定の送信処理の開始時刻(第2開始時刻)t21を算出してメモリ50に格納する。例えば、CPU30は、開始時刻t18に第2周期Fを足し算して、開始時刻t21を算出すればよい。さらに、CPU30は、次の送信処理の開始時刻t21が、次の入出力処理の期間t25~t26内に含まれているか否かを判定する(S60)。即ち、CPU30は、次の送信処理の開始時刻t21が、次の入力出力処理の期間t25~t26に重複しているか否かを判定する。本実施形態では、次の送信処理の開始時刻t21は、次の入出力処理の期間t25~t26に含まれていない(重複していない)ので(S60のNO)、CPU30は、フラグ情報を立てない(S70)。
【0050】
また、ステップS80において、CPU30は、t18~t20の送信処理に対応するメモリ50のフラグ情報を確認する。このとき、CPU30は、t18~t20の送信処理に対応するフラグ情報が立っているので、t18~t20の送信処理を遅延させる。この場合、CPU30は、送信処理のタイマを停止する(S82)。さらに、CPU30は、
図4に示す今回の送信処理の開始時刻t18を、入出力処理の開始時刻t17から入出力処理の実行期間D以上遅延させた
図5の時刻t18_1に設定する(S84)。即ち、CPU30は、送信処理の開始時刻t18に入出力処理の期間D以上を足し算した時刻t18_1まで送信処理を遅延させる。これにより、送信処理の開始時刻t18は、t17~t19の入出力処理の期間より後のt18_1にずらされる。その結果、t18_1~t20_1の送信処理は、t17~t19の入出力処理に重複しなくなる。CPU30は、今回の送信処理の開始時刻t18を、t18_1に設定した後、タイマを開始する。
【0051】
ここで、送信処理の遅延処理について説明する。
図4に示すように、t18の送信処理開始時刻が入出力処理の期間t17~t19に重複している場合、t18~t20の送信処理は、t17~t19の入出力処理において演算結果データがコモンメモリ60に格納される前に、開始されてしまう。このため、t17~t19における演算結果データは、t18~t20の送信処理ではまだ送信可能な状態になっておらず、他のコントローラ12~15へ送信することができない。この場合、
図4に示すように、t17~t19で入出力処理される演算結果データは、t18~t20の送信処理より後に起動されるt21~t22の送信処理で送信されることになる。従って、送信処理のゲート制御を厳密な時間管理で実施しても、t17~t19における演算結果データの送信処理のリアルタイム性は損なわれてしまう。
【0052】
そこで、本実施形態では、
図5に示すように、CPU30は、t18~t20の送信処理に対応するフラグ情報が立っている場合に、t18~t20の送信処理を、入力処理の実行期間D以上遅延させる(
図6のS120)。これにより、t18~t20の送信処理は、t18_1~t20_1へ遅延(補正)され、t17~t19の入出力処理の直後にずらされる。その結果、t18_1~t20_1の送信処理は、t17~t19の入出力処理に重複せず、CPU30は、t17~t19における演算結果データを送信することができる。これにより、演算結果データの送信処理のリアルタイム性が向上する。
【0053】
図5に示すように、CPU30は、t18_1~t20_1において、送信処理を実行する。t18_1~t20_1の送信処理において、CPU30は、コモンメモリ60のデータをLANコントローラ80に転送し、送信要求する。LANコントローラ80は、送信キューに蓄積されたデータを、ネットワーク20を介して他のコントローラ12~15へ送信する。
【0054】
このとき、送信処理のタイミングに合わせて、データの優先度に対応する送信キューのゲート開放時間をリスケジューリングする。例えば、データの優先度が「中」である場合、データは、
図3の送信キューQ2に蓄積される。このとき、送信キューQ2のゲート開放時間(t3~t4)は、t18~t20からt18_1~t20_1へリスケジューリング(補正)される。即ち、ゲート開放の開始時刻t3は、遅延された送信処理の開始時刻t18_1に設定され、ゲート開放の終了時刻t4は、遅延された送信処理の開始時刻t20_1に設定される。これにより、送信キューQ2のゲート機能が効果的に機能し、データのリアルタイム性を向上させることができる。
【0055】
CPU30は、t18_1~t20_1の送信処理の終了時刻を、開始時刻t18_1から演算結果データの送信処理の期間H(例えば、約100μs)だけ経過した時点t20_1に設定する。LANコントローラ80は、演算結果データの送信処理において、開始時刻t18_1から終了時刻t20_1までの間、演算結果データの送信を実行する。また、LANコントローラ80は、優先度の高いデータについて、入出力処理の期間内t17~t19に開始時刻t18が含まれているときに、送信処理を遅延させる。
【0056】
タスク処理が続いている場合には(S110のNO)、CPU30は、ステップS40~S100を繰り返す。また、ステップS34において、次のタスク処理が開始される場合も、CPU30は、ステップS40~S100を繰り返す。全てのタスク処理が終了すると(S34のNO)、タスク処理が終了する。尚、t21~t22、t23~t24、t27~t28のいずれの送信処理も、入出力処理の期間に重複していない。従って、これらの送信処理は、t21、t23、t27に予定通りに起動される。
【0057】
このように、コントローラ11は、送信処理の開始時刻が入出力処理の期間に重複している場合に、送信処理を入出力処理の実行期間D以上、遅延させる。これにより、演算結果データの送信処理がその演算結果データの入出力処理の直後に実行可能となり、その結果、演算結果データの送信処理のリアルタイム性が向上する。
【0058】
(第2実施形態)
図8は、第2実施形態によるコントローラ11~15のタスク処理時間を示す表である。第2実施形態では、コントローラ11~15は、それぞれ第1実施形態による送信処理の起動時刻の補正機能を有することを前提としている。第2実施形態では、複数のコントローラ11~15のデータがネットワーク20上で衝突しないように、コントローラ11~15間において、送信処理の期間およびLANコントローラ80の送信キューのゲート開放期間を調節する。
【0059】
図8において、次回高速タスク起動時刻は、優先度の高い次のタスク処理の開始時刻を示す。タスク処理の開始時刻は、入出力処理(入力処理および出力処理)の開始時刻と同じであり、例えば、
図4および
図5では、t11、t17、t25に対応する。また、t11の時点において次のタスク処理の開始時刻はt17であり、t17の時点において次のタスク処理の開始時刻はt25となる。次のタスク処理の開始時刻は、
図6のステップS20において算出される。高速タスク処理のデータは、
図3に示す送信キューQ1に蓄積され、次回高速タスク起動時刻においてネットワーク20を介して送信される。
【0060】
また、次回中速タスク起動時刻は、高速タスク処理よりも優先度が低く、中程度の次のタスク処理の開始時刻を示す。中速タスク処理のデータは、
図3に示す送信キューQ2に蓄積される。次回低速タスク起動時刻は、高速および中速タスク処理よりも優先度の低い次のタスク処理の開始時刻を示す。低速タスク処理のデータは、
図3に示す送信キューQ3に蓄積される。
【0061】
コントローラ11~15のそれぞれは、自己の次回高速タスク起動時刻、次回中速タスク起動時刻および次回低速タスク起動時刻を、ネットワーク20を介してマルチキャスト通信によって他のコントローラへ送信する。これにより、コントローラ11~15は、
図8に示すような自己および他のコントローラの次回高速タスク起動時刻、次回中速タスク起動時刻および次回低速タスク起動時刻の情報を得ることができる。次回高速タスク起動時刻、次回中速タスク起動時刻および次回低速タスク起動時刻は、各コントローラ11~15のメモリ50またはコモンメモリ60に格納される。
【0062】
また、コントローラ11~15は、自己の次回高速タスク起動時刻、次回中速タスク起動時刻、次回低速タスク起動時刻、次回高速送信処理起動時刻、次回中速送信処理起動時刻および次回低速送信処理起動時刻とともに自己の識別子(ノード番号)を送信する。これにより、各コントローラ11~15は、どのコントローラからの情報かを識別することができる。
【0063】
コントローラ11~15は、それぞれ第1実施形態の
図7に示す処理によって次回の送信処理起動時刻を算出し、上記次回タスク起動時刻から入出力処理の実行期間Dまでの間に次回の送信処理起動時刻が含まれる場合にフラグ情報を立てる。送信処理起動時刻は、送信処理の開始時刻であり、例えば、
図4および
図5のt13、t15、t18、t21、t23、t27である。t13の時点において次回の送信処理起動時刻はt15であり、t15の時点において次回の送信処理起動時刻はt18である。同様に、t18、t21、t23において次回の送信処理起動時刻は、それぞれt21、t23、t27となる。次回の送信処理起動時刻は、
図7のステップS50において算出される。フラグ情報は、
図7のステップS70またはS75において設定される。
【0064】
このように、コントローラ11~15は、互いに他のコントローラの次回高速タスク起動時刻、次回中速タスク起動時刻および次回低速タスク起動時刻の情報をマルチキャスト通信で得て、互いに共有する。また、コントローラ11~15は、他のコントローラの次回高速送信処理起動時刻、次回中速送信処理起動時刻および次回低速送信処理起動時刻の情報もマルチキャスト通信で得て、互いに共有する。
【0065】
送信処理期間は、送信処理起動時刻に送信処理の期間Hを足し算した期間となる。
【0066】
コントローラ11~15において、LANコントローラ80は、優先度の高い順番でデータの送信期間を割り当てる。異なるコントローラ11~15間においても、LANコントローラ80は、優先度の高い順番でデータの送信期間を割り当てる。従って、コントローラ11~15のいずれかのデータの送信期間が重複する場合には、コントローラ11~15のLANコントローラ80は、優先度の高いデータに送信期間を割り当てる。優先度が同じデータの送信期間が重複する場合には、コントローラ11~15のLANコントローラ80は、コントローラの識別子(ノード番号)の順番で送信期間を割り当てる。このような送信期間の割り当ては、コントローラ11~15のそれぞれにおいて等しく行われ、同じ割り当て情報として共有される。
【0067】
コントローラ11~15のCPU30は、送信処理の終了時に、この送信期間の割り当てに従って、それぞれ自己の次回送信処理の起動時刻および送信キューの開放時間を設定する。次回送信処理の起動時刻は、CPU30のタイマ機能を停止することによって調節される。LANコントローラ80は、
図3に示す送信キューの開放時間の設定を次回送信処理の起動時刻(例えば、t18_1)と終了時刻(例えば、t18_1+H)に変更する。
【0068】
このように、第2実施形態では、ネットワーク20に接続された複数のコントローラ11~15のタスク処理と送信処理とを考慮して、送信処理時刻および送信キューの開放期間をスケジューリングできる。その結果、通信データのリアルタイム性をさらに向上させることができる。
【0069】
図9は、第2実施形態によるコントローラ11~15の動作の一例を示すフロー図である。尚、ステップS200~S270の動作は、
図7のステップS40~S84の動作と同じでよい。
【0070】
まず、コントローラ11~15がそれぞれ自ノード(自己のコントローラ)において、
図8に示す情報を更新する(S200)。コントローラ11~15の情報の更新は、上述の通り、ネットワーク20を介してマルチキャスト通信で行えばよい。
【0071】
次に、現在時刻と、タスク処理の周期情報と、タスク処理の開始から現在までの経過時間(タイマ情報)とを取得する(S210)。
【0072】
次に、タスク処理の周期情報から経過時間を引き算してタスク処理の残り時間を算出する。その残り時間を現在時刻に足し算することによって、次回のタスク処理の起動時間を算出する(S220)。
【0073】
次に、CPU30は、次回の送信処理の処理起動時刻が自ノードの次回のタスク処理の期間内か判断する(S230)。つまり、次回の送信処理が自ノードの次回のタスク処理と重複するかを判断する。
【0074】
次回の送信処理の処理起動時刻が次回のタスク処理の期間内の場合(S230のYES)、フラグ情報を立てる(S240)。この場合、CPU30は、自ノードの次回の送信処理起動時刻をタスク起動時刻+タスク処理期間に設定する(S250)。これにより、次回の送信処理を遅延させ、次回の送信処理が次回のタスク処理と重複しないようにする。
【0075】
一方、次回の送信処理の処理起動時刻が次回のタスク処理の期間内でない場合(S230のNO)、フラグ情報を立てない(S260)。この場合、CPU30は、自ノードの次回の送信処理起動時刻をステップS220で算出した次回の送信処理の起動時刻に設定する。次回の送信処理は、遅延させなくても、次回のタスク処理と重複しない。
【0076】
次に、自ノードにおいて、優先度の高い順から次回の送信処理を選択する(S280)。選択された次回の送信処理は、他ノードまたは自ノードの送信処理期間と重複しないように実行される。例えば、CPU30は、選択された次回の送信処理の起動時刻が他ノードまたは自ノードの送信処理期間内か否かを判断する(S290、S291)。選択された次回の送信処理の起動時刻が他ノードの送信処理期間内である場合(S290のYES)、CPU30は、自ノードの送信処理と他ノードの送信処理の優先度を比較する(S293)。自ノードの送信処理の優先度が他ノードの送信処理の優先度より高い場合(S293のYES)、CPU30は、自ノードの選択された次回の送信処理の起動時刻をそのまま変更せず、次回の送信処理の起動時刻において送信処理を実行する(S294)。一方、自ノードの送信処理の優先度が他ノードの送信処理の優先度より低い場合(S293のNO、S295のYES)、CPU30は、選択された次回の送信処理起動時刻に送信処理の期間Hを加算する(S300)。これにより、次回の送信処理を遅延させて、次回の送信処理が他ノードの送信処理期間に重複しないようにする。
【0077】
さらに、自ノードの送信処理の優先度が他ノードの送信処理の優先度と同じ場合がある(S295のYES)。この場合、CPU30は、自ノードのノード番号と他ノードのノード番号とを比較する(S296)。自ノードのノード番号が他ノードのノード番号より小さい場合(S296のYES)、CPU30は、自ノードの選択された次回の送信処理の起動時刻をそのまま変更せず、次回の送信処理の起動時刻において送信処理を実行する(S294)。一方、自ノードのノード番号が他ノードのノード番号より大きい場合(S296のNO)、CPU30は、自ノードの選択された次回の送信処理起動時刻に送信処理の期間Hを加算しする(S300)さらに、CPU30は、フラグ情報を立てる(S310)。他ノードのCPU30もステップS280~S300を同様に処理する。このように、コントローラ11~15の送信処理期間が互いに重複する場合、優先度の高い順に送信処理を実行し、さらに、優先度が同じである場合、ノード番号の低い順に送信処理を実行する。尚、ノード番号は、コントローラ11~15に固有の番号であるのでノード番号が同じになる(重複する)ことはない。これにより、コントローラ11~15は、それぞれ自ノードの次回の送信処理期間が他ノードの送信処理期間に重複しないように調整することができる。
【0078】
また、選択された次回の送信処理の起動時刻が自ノードの送信処理期間内である場合(S291のYES)、CPU30は、選択された次回の送信処理とそれに重複する他の送信処理の優先度を比較する(S292)。選択された次回の送信処理の優先度が他の送信処理の優先度より低い場合(S292のNO)、CPU30は、選択された次回の送信処理起動時刻に送信処理の期間Hを加算する(S300)。さらに、CPU30は、フラグ情報を立てる(S310)。これにより、次回の送信処理を遅延させて、次回の送信処理が自ノードの送信処理期間に重複しないようにする。一方、選択された次回の送信処理の優先度が他の送信処理の優先度より高い場合(S292のYES)、CPU30は、選択された次回の送信処理の起動時刻をそのまま変更せず、次回の送信処理の起動時刻において送信処理を実行する(S294)。
【0079】
選択された次回の送信処理の起動時刻が他ノードおよび自ノードの送信処理期間内でない場合(S290のNO、S291のNO)、次回の送信処理起動時刻は、そのまま維持される。
【0080】
CPU30は、他の送信処理についても同様に優先度の高い順に選択し、ステップS290~S310を実行する(S320のYES)。
【0081】
全ての送信処理に対してステップS290~S310を実行した後(ステップS320のNO)、CPU30は、フラグ情報が立っているか否に応じて送信処理を実行する(S330)。フラグ情報が立っている場合(S330のYES)、自ノードにおいて、元の次回の送信処理時刻が次回のタスク処理期間または他の送信処理期間に重複することを示す。従って、例えば、CPU30は、送信処理を起動させる定周期のタイマを一旦停止し(S340)、ステップS250またはステップS300で設定された(修正された)新しい次回の送信処理起動時刻として設定する(S350)。ここで、ステップS250で設定された(修正された)送信処理起動時刻が、ステップS300でさらに修正されることもある。この場合、次回の送信処理起動時刻は、タスク起動時刻+タスク処理期間+送信処理の期間Hとなる。
【0082】
次に、CPU30は、送信処理の送信処理を起動させる定周期のタイマを開始する(S360)。
一方、フラグ情報が立っているない場合(S330のNO)、自ノードにおいて、元の次回の送信処理時刻が次回のタスク処理期間または他の送信処理期間に重複していないことを示す。従って、CPU30は、タイマを停止したり、次回の送信処理起動時刻を修正することなく、送信処理を実行する。
【0083】
送信処理では、CPU30は、各送信処理の優先度に該当する送信キューの開放開始時間に、自ノードの次回の送信処理起動時刻を設定する(S370)。また、CPU30は、各送信処理の優先度に該当する送信キューの開放終了時間に、自ノードの次回の送信処理起動時刻に送信処理の期間Hを加算した時刻を設定する(S380)。
【0084】
これにより、タスク処理が終了する。
【0085】
このように、第2実施形態では、ネットワーク20に接続された複数のコントローラ11~15のタスク処理と送信処理とを考慮して、送信処理時刻および送信キューの開放期間をスケジューリングできる。その結果、通信データのコリジョンを抑制しつつ、リアルタイム性をさらに向上させることができる。
【0086】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0087】
11~15 コントローラ、20 ネットワーク、30 CPU、40 I/Oバスコントローラ、50 メモリ、60 コモンメモリ、70 インタフェースブリッジ、80 LANコントローラ、90 I/O装置、100 産業機械