(57)【要約】【課題】複数のタスクを実行するプロセッサの負荷を抑制しつつ、前記複数のタスクの各々の実行により生成される送信データの、ネットワークへの送信順序を柔軟に変更する。【解決手段】ＰＬＣ（１０）は、複数の送信キュー（１２０）を備え、複数の送信キュー（１２０）の各々の先頭に格納されている送信データの送信優先度に従って、複数の送信キュー（１２０）の各々の先頭に格納されている送信データの送信順序を制御する。【選択図】図１
2020071520.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクを実行するプロセッサと、前記プロセッサによる前記複数のタスクの各々の実行により生成される複数の送信データを外部に出力する通信制御部と、を備えるコントローラであって、
前記通信制御部は、各々に、前記複数の送信データの各々が送信優先度と共に格納される複数の送信キューを含み、
前記通信制御部は、前記複数の送信キューの各々の先頭に格納された前記送信データの前記送信優先度が高い順に、前記複数の送信キューの各々の先頭に格納された前記送信データを、１つの送信ポートを介して順次出力する
コントローラ。
【請求項２】
前記複数の送信キューは、
（Ａ）各々が、前記複数のタスクの各々に予め対応付けられ、（Ｂ）各々に、予め対応付けられたタスクの実行により生成される前記送信データが、前記送信優先度と共に、格納される複数の対応送信キューと、
前記複数のタスクのいずれにも予め対応付けられていない非対応送信キューと、
を含み、
前記非対応送信キューには、前記複数のタスクのいずれかの実行により生成される前記送信データが、前記複数の対応送信キューの各々に前記送信データと共に格納される前記送信優先度のいずれよりも高い送信優先度と共に、格納される
請求項１に記載のコントローラ。
【請求項３】
前記プロセッサは、前記複数のタスクの各々を、前記複数のタスクの各々に予め対応付けられた複数のＣＰＵコアの各々において実行するマルチコアプロセッサである
請求項１または２に記載のコントローラ。
【請求項４】
前記複数の送信キューの各々に格納される前記送信データと前記送信優先度とは、ユーザによって予め対応付けられている
請求項１から３のいずれか１項に記載のコントローラ。
【請求項５】
前記通信制御部は、ハードウェアによる論理回路で構成される
請求項１から４のいずれか１項に記載のコントローラ。
【請求項６】
複数のタスクを実行するプロセッサと、前記プロセッサによる前記複数のタスクの各々の実行により生成される複数の送信データを外部に出力する通信制御部と、を備えるコントローラの前記通信制御部によって実行される制御方法であって、
前記複数の送信データの各々を、前記複数の送信データの各々の送信優先度と共に、複数の送信キューの各々に格納する格納ステップと、
前記格納ステップにて、前記複数の送信キューの各々に前記送信優先度と共に格納した前記送信データについて、前記複数の送信キューの各々の先頭に格納した前記送信データの前記送信優先度が高い順に、前記複数の送信キューの各々の先頭に格納した前記送信データを、１つの送信ポートを介して順次出力する送信ステップと、
を含む制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラ（Programmable Logic Controller；以下、ＰＬＣとも称す）などの制御装置に関する。
【背景技術】
【０００２】
従来、ＰＬＣなどの産業用制御装置について、プロセッサの負荷を分散させるための各種の試みが知られている。例えば、下掲の特許文献１には、複数のコアからなるプロセッサと、複数のキューとを備え、前記複数のキューの各々を前記複数のコアの各々に対応付け、各コアにおける処理結果を、各コアに対応する各キューに格納するコントローラが開示されている。特許文献１のコントローラは、各コアに対応する各キューが、各コアにおける処理結果の出力等を制御することによって、処理結果の出力制御に係るプロセッサの負担を軽減しようとするものである。
【０００３】
また、省配線、および、複数の制御対象の同期などの観点から、複数の制御対象と産業用制御装置とを１つのネットワークで接続する試みも、従来から知られている。例えば、下掲の非特許文献１には、１つのネットワークに対応できるように、１つの送信ポートに複数の送信キューを対応付けたコントローラが開示されている。
【０００４】
これらの従来技術は、例えば、複数のコアの各々、または、複数のコアの各々が実行する複数のタスクの各々を、複数の送信キューの各々に予め対応付けておき、また、複数の送信キューの各々に固定の送信順序を予め割り当てておくものと整理することができる。そして、従来技術において複数の送信キューの各々は、自キューに割り当てられた送信順序に従って、自キューに格納されたデータ（つまり、自キューに対応付けられているコアにより生成される送信データ、または、自キューに対応付けられているタスクの実行により生成される送信データ）を送信する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１３４７７５号公報
【非特許文献】
【０００６】
【非特許文献１】“インテル  イーサネット・コントローラー  Ｉ２１０−ＩＴ”、［ｏｎｌｉｎｅ］、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ、［２０１８年１０月１１日検索］、インターネット<https://ark.intel.com/ja/products/64402/Intel-Ethernet-Controller-I210-IT>
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述の従来技術には、或るタスクの実行により生成される送信データと、その或るタスクとは別のタスクの実行により生成される送信データとについて、ネットワークへの送信順序を柔軟に変更することが困難であるとの問題がある。以下、この問題について、図１０を参照しながら、その詳細を説明する。
【０００８】
図１０は、従来までの、複数の送信キューの各々に固定の送信順序を予め割り当てておき、この送信順序に従って、各送信キューが、各送信キューに格納されたデータをネットワークへと出力するコントローラに見られる問題を説明するための図である。図１０を用いて説明する従来までのコントローラは、マイクロプロセッサと、１つの送信ポートに対応付けられた複数の送信キューとを備えるものとする。以下の説明においては、記載の簡潔性を担保するため、「送信キュー」を「ＴＸ」と称することがある。
【０００９】
図１０を用いて説明するコントローラにおいて、マイクロプロセッサのコア１は、予めＴＸ１に対応付けられており、コア２は、予めＴＸ２に対応付けられている。そして、ＴＸ１には送信順序として「１」が割り当てられており、ＴＸ２には送信順序として「２」が割り当てられている。コア１は、タスクＴ１−１およびＴ１−２の各々を実行し、その実行により生成される送信データであるＤ１−１およびＤ１−２の各々を、コア１に対応付けられたＴＸ１に格納する。コア２は、タスクＴ２−１およびＴ２−２の各々を実行し、その実行により生成される送信データであるＤ２−１およびＤ２−２の各々を、コア２に対応付けられたＴＸ２に格納する。
【００１０】
図１０に示す例では、上述の４つの送信データの各々を送信したい順序を示す「Ｐ」について、送信データＤ１−１およびＤ２−１のＰは「１」であり、送信データＤ１−２およびＤ２−２のＰは「２」である。つまり、図１０には、送信データＤ２−１を送信データＤ１−２よりも先に送信したい例が示されている。
【００１１】
しかしながら、前述の通り、図１０に示す従来までのコントローラにおいて、複数の送信キューの各々に格納された送信データは、複数の送信キューの各々に予め割り当てられている送信順序に従って、ネットワークへと出力される。そのため、送信データＤ２−１を送信データＤ１−２よりも先に送信したい場合であっても、送信データＤ２−１の格納先であるＴＸ２は、送信データＤ１−２の格納先であるＴＸ１よりも送信順序が遅いため、送信データＤ２−１は、送信データＤ１−２の後に送信される。つまり、送信データＤ２−１を送信データＤ１−２に優先して送信したくても、ＴＸ２に付与された送信順序（２）よりも、ＴＸ１に付与された送信順序（１）の方が早いため、送信データＤ２−１の送信は、送信データＤ１−２の送信の後となる。
【００１２】
従来までのコントローラにおいて、送信データＤ２−１を送信データＤ１−２よりも先に送信するためには、送信データＤ２−１をＴＸ１に格納し、送信データＤ１−２をＴＸ２に格納する必要がある。そして、各送信データのＰによって、各送信データの格納先を変更する場合、各送信データの格納先を選択する処理、格納先である送信キューの状態を確認する処理などをプロセッサが実行することが必要となるため、プロセッサの負荷が高くなってしまう。
【００１３】
これまで説明してきたように、従来までの、各送信キューに予め割り当てておいた送信順序に従って、各送信キューが、自キューに格納されたデータを送信するコントローラは、送信データの送信順序を柔軟に変更することが困難であるとの問題がある。
【００１４】
本発明の一態様は、複数のタスクの各々の実行により生成される送信データを、１つの送信ポートを介して順次送信するコントローラについて、前記複数のタスクを実行するプロセッサの負荷を抑制しつつ、前記送信データの送信順序を柔軟に変更できるようにすることを目的としている。
【課題を解決するための手段】
【００１５】
上記の課題を解決するために、本発明の一態様に係るコントローラは、複数のタスクを実行するプロセッサと、前記プロセッサによる前記複数のタスクの各々の実行により生成される複数の送信データを外部に出力する通信制御部と、を備えるコントローラであって、前記通信制御部は、各々に、前記複数の送信データの各々が送信優先度と共に格納される複数の送信キューを含み、前記通信制御部は、前記複数の送信キューの各々の先頭に格納された前記送信データの前記送信優先度が高い順に、前記複数の送信キューの各々の先頭に格納された前記送信データを、１つの送信ポートを介して順次出力する。
【００１６】
前記の構成によれば、前記コントローラにおける前記通信制御部は、前記複数の送信キューを含み、前記複数の送信キューの各々には、前記複数のタスクの各々の実行により生成される複数の送信データの各々が、前記送信優先度と共に、格納される。そして、前記通信制御部は、前記複数の送信キューの各々の先頭に格納された前記送信データの前記送信優先度が高い順に、前記複数の送信キューの各々の先頭に格納された前記送信データを、前記１つの送信ポートを介して順次出力する。
【００１７】
従来のコントローラは、１つの通信ネットワークに送信する複数のメッセージ（複数のタスクの各々の実行により生成される送信データ）の送信順序を制御するため、例えば、以下の構成を備えている。すなわち、従来のコントローラは、１つの送信ポートに複数の送信キューを対応付け、各送信キューに予め付与された優先順位に従って、各送信キューに格納されたメッセージを、前記１つの送信ポートを介して、前記１つの通信ネットワークに順次出力していた。各メッセージについて、つまり、各タスクの実行により生成される送信データについて、その優先順位が固定である場合、各タスクを、予め固定の優先順位を付与しておいた複数の送信キューの各々に対応付ける従来のコントローラは、メッセージを優先順位に従って効率的に送信できる。
【００１８】
しかしながら、従来のコントローラは、低い優先順位の付与されている送信キューに対応付けられたタスクの実行により生成される送信データ（すなわち、メッセージ）を、高い優先順位の付与されている送信キューに対応付けられたタスクの実行により生成される送信データに優先して送信することが困難である。従来のコントローラにおいて、各送信キューに格納されたメッセージは、各送信キューに予め付与された優先順位に従って送信され、各送信キューと各タスクとは予め対応付けられている。従来のコントローラにおいて、低い優先順位の付与された送信キューに対応付けられているタスクの実行により生成される送信データ（メッセージ）は、低い優先順位の付与された送信キューに格納され、高い優先順位の付与された送信キューに格納されているメッセージの後に送信される。
【００１９】
これに対し、前記コントローラにおける前記通信制御部は、前記複数の送信キューの各々に格納されたメッセージ（各タスクの実行により生成される送信データ）を、各送信キューの優先順位ではなく、各メッセージの送信優先度に従って、前記１つの送信ポートを介して順次出力する。つまり、前記コントローラは、前記複数の送信データの各々の出力順序を、前記複数の送信データの各々が格納されている送信キューに予め付与された優先順位ではなく、前記複数の送信データの各々の前記送信優先度によって、制御する。
【００２０】
したがって、前記コントローラは、前記複数の送信データの各々の、前記１つの送信ポートからの出力順序を、前記複数の送信データの各々に付与する前記送信優先度によって、柔軟に変更することができるとの効果を奏する。
【００２１】
特に、前記コントローラは、前記複数のタスクの各々の実行により生成される送信データの、前記１つの送信ポートからの出力順序を、前記プロセッサではなく、前記通信制御部によって制御する。したがって、前記コントローラは、前記複数のタスクを実行するプロセッサへの処理負荷を増大させることなく、前記複数の送信データを、各送信データの送信優先度に従って、前記１つの送信ポートから出力できるとの効果を奏する。
【００２２】
本発明の一態様に係るコントローラにおいて、前記複数の送信キューは、（Ａ）各々が、前記複数のタスクの各々に予め対応付けられ、（Ｂ）各々に、予め対応付けられたタスクの実行により生成される前記送信データが、前記送信優先度と共に、格納される複数の対応送信キューと、前記複数のタスクのいずれにも予め対応付けられていない非対応送信キューと、を含み、前記非対応送信キューには、前記複数のタスクのいずれかの実行により生成される前記送信データが、前記複数の対応送信キューの各々に前記送信データと共に格納される前記送信優先度のいずれよりも高い送信優先度と共に、格納されてもよい。
【００２３】
前記の構成によれば、前記コントローラにおける前記通信制御部は、「各々が、前記複数のタスクの各々に対応付けられた前記複数の対応送信キュー」に加えて、前記非対応送信キューをさらに含んでいる。そして、前記非対応送信キューには、前記複数のタスクのいずれかの実行により生成される送信データが、前記複数の送信キューの各々に前記送信データと共に格納される前記送信優先度のいずれよりも高い送信優先度と共に、格納される。
【００２４】
前記コントローラは、前記複数の対応送信キューの各々に、予め対応付けられたタスクの実行により生成される前記送信データを格納することによって、複数の前記送信データの各々の格納先の選択に係る処理を不要とし、または、抑制できるという効果を奏する。
【００２５】
ここで、前述の通り、前記通信制御部は、前記複数の送信キューの各々の先頭に格納された前記送信データの前記送信優先度が高い順に、前記複数の送信キューの各々の先頭に格納された前記送信データを、１つの送信ポートを介して順次出力する。例えば、前記通信制御部は、送信キューＴＸ１の先頭に格納された送信データＤ１−１の優先度Ｐ：１と、送信キューＴＸ２の先頭に格納された送信データＤ２−１の優先度Ｐ：２とを比較し、優先度Ｐ：１が優先度Ｐ：２よりも高いので、先ず送信データＤ１−１を送信する。
【００２６】
そのため、送信データＤ１−１およびＤ２−１の後に生成された送信データＤ２−２に、優先度Ｐ：１よりも高い優先度Ｐ：０を付与したとしても、送信データＤ２−２を送信キューＴＸ１または送信キューＴＸ２に格納した場合、以下の事態が発生する。
【００２７】
すなわち、送信キューＴＸ１およびＴＸ２の各々には既に送信データＤ１−１およびＤ２−１の各々が格納されているため、前記通信制御部は、送信データＤ１−１の優先度Ｐ：１と送信データＤ２−１の優先度Ｐ：２とを比較し、送信データＤ１−１を送信する。つまり、送信データＤ２−２を送信キューＴＸ１または送信キューＴＸ２に格納した場合、前記通信制御部は、送信データＤ２−２を送信データＤ１−１よりも早く送信することができない。
【００２８】
そこで、前記コントローラにおける前記通信制御部は、対応送信キューＴＸ１およびＴＸ２に加えて、非対応送信キューＴＸ０をさらに含み、非対応送信キューＴＸ０に、送信データＤ２−２が、優先度Ｐ：０と共に格納される。
【００２９】
前記通信制御部は、対応送信キューＴＸ１、ＴＸ２、および、非対応送信キューＴＸ０の各々の先頭に格納された送信データの優先度Ｐ（送信優先度）を比較する。そして、前記通信制御部は、各送信キューの先頭に格納された送信データの優先度Ｐが高い順に、各送信キューの各々の先頭に格納された送信データを、１つの送信ポートを介して順次出力する。
【００３０】
具体的には、前記通信制御部は、対応送信キューＴＸ１の先頭に格納された送信データＤ１−１、対応送信キューＴＸ２の先頭に格納された送信データＤ２−１、および、非対応送信キューＴＸ０の先頭に格納された送信データＤ２−２の各々について、優先度Ｐを比較する。送信データＤ１−１の優先度Ｐは「１」、送信データＤ２−１の優先度Ｐは「２」、送信データＤ２−２の優先度Ｐは「０」であるから、前記通信制御部は、送信データＤ２−２、Ｄ１−１、Ｄ２−１を、この順で、１つの送信ポートを介して順次出力する。
【００３１】
したがって、前記コントローラにおける前記通信制御部は、前記複数のタスクの各々の実行により生成される複数の送信データの各々について、生成された順序から独立させて、各送信データの送信優先度に従って順次出力することができるとの効果を奏する。
【００３２】
本発明の一態様に係るコントローラにおいて、前記プロセッサは、前記複数のタスクの各々を、前記複数のタスクの各々に予め対応付けられた複数のＣＰＵコアの各々において実行するマルチコアプロセッサであってもよい。
【００３３】
前記の構成によれば、前記コントローラは、マルチコアプロセッサを備え、前記複数のＣＰＵコアの各々は、前記複数のタスクの各々に予め対応付けられている。したがって、前記コントローラは、前記複数のタスクを、例えばマルチタスクで実行する等によって、高速な制御を実現することができるとの効果を奏する。
【００３４】
本発明の一態様に係るコントローラにおいて、前記複数の送信キューの各々に格納される前記送信データと前記送信優先度とは、ユーザによって予め対応付けられていてもよい。
【００３５】
前記の構成によれば、前記コントローラにおいて、前記複数のタスクの各々の実行により生成され、前記複数の送信キューの各々に格納される複数の送信データの各々と、前記複数の送信キューの各々に格納される前記送信優先度とは、予めユーザによって対応付けられている。したがって、前記コントローラは、ユーザが、前記複数のタスクの各々の実行により生成される複数の前記送信データの各々について、前記１つの送信ポートからの出力順序（送信順序）を予め設定しておくことを可能とするとの効果を奏する。
【００３６】
本発明の一態様に係るコントローラにおいて、前記通信制御部は、ハードウェアによる論理回路で構成されてもよい。
【００３７】
前記の構成によれば、前記コントローラにおいて、前記通信制御部は、ハードウェアによる論理回路で構成される。つまり、前記コントローラは、前記複数のタスクを実行するプロセッサではなく、ハードウェアによる論理回路で構成した前記通信制御部によって、前記複数のタスクの各々の実行により生成される複数の前記送信データの各々の送信を制御する。したがって、前記コントローラは、前記プロセッサへの処理負荷を増大させることなく、ハードウェアによる論理回路で構成した前記通信制御部によって、複数の前記送信データの各々の送信を制御することができるとの効果を奏する。
【００３８】
上記の課題を解決するために、本発明の一態様に係る制御方法は、複数のタスクを実行するプロセッサと、前記プロセッサによる前記複数のタスクの各々の実行により生成される複数の送信データを外部に出力する通信制御部と、を備えるコントローラの前記通信制御部によって実行される制御方法であって、前記複数の送信データの各々を、前記複数の送信データの各々の送信優先度と共に、複数の送信キューの各々に格納する格納ステップと、前記格納ステップにて、前記複数の送信キューの各々に前記送信優先度と共に格納した前記送信データについて、前記複数の送信キューの各々の先頭に格納した前記送信データの前記送信優先度が高い順に、前記複数の送信キューの各々の先頭に格納した前記送信データを、１つの送信ポートを介して順次出力する送信ステップと、を含む。
【００３９】
前記の方法によれば、前記制御方法において、前記通信制御部は前記複数の送信キューを含み、前記制御方法は、前記複数の送信キューの各々に、前記複数のタスクの各々の実行により生成される複数の送信データの各々を、前記送信優先度と共に、格納する。そして、前記制御方法は、前記複数の送信キューの各々の先頭に格納した前記送信データの前記送信優先度が高い順に、前記複数の送信キューの各々の先頭に格納した前記送信データを、前記１つの送信ポートを介して順次出力する。
【００４０】
従来のコントローラは、１つの通信ネットワークに送信する複数のメッセージ（複数のタスクの各々の実行により生成される送信データ）の送信順序を制御するため、例えば、以下の構成を備えている。すなわち、従来のコントローラは、１つの送信ポートに複数の送信キューを対応付け、各送信キューに予め付与された優先順位に従って、各送信キューに格納されたメッセージを、前記１つの送信ポートを介して、前記１つの通信ネットワークに順次出力していた。各メッセージについて、つまり、各タスクの実行により生成される送信データについて、その優先順位が固定である場合、各タスクを、予め固定の優先順位を付与しておいた複数の送信キューの各々に対応付ける従来のコントローラは、メッセージを優先順位に従って効率的に送信できる。
【００４１】
しかしながら、従来のコントローラは、低い優先順位の付与されている送信キューに対応付けられたタスクの実行により生成される送信データ（すなわち、メッセージ）を、高い優先順位の付与されている送信キューに対応付けられたタスクの実行により生成される送信データに優先して送信することが困難である。従来のコントローラにおいて、各送信キューに格納されたメッセージは、各送信キューに予め付与された優先順位に従って送信され、各送信キューと各タスクとは予め対応付けられている。従来のコントローラにおいて、低い優先順位の付与された送信キューに対応付けられているタスクの実行により生成される送信データ（メッセージ）は、低い優先順位の付与された送信キューに格納され、高い優先順位の付与された送信キューに格納されているメッセージの後に送信される。
【００４２】
これに対し、前記制御方法は、前記複数の送信キューの各々に格納したメッセージ（各タスクの実行により生成される送信データ）を、各送信キューの優先順位ではなく、各メッセージの送信優先度に従って、前記１つの送信ポートを介して順次出力する。つまり、前記制御方法は、前記複数の送信データの各々の出力順序を、前記複数の送信データの各々が格納されている送信キューに予め付与された優先順位ではなく、前記複数の送信データの各々の前記送信優先度によって、制御する。
【００４３】
したがって、前記制御方法は、前記複数の送信データの各々の、前記１つの送信ポートからの出力順序を、前記複数の送信データの各々に付与する前記送信優先度によって、柔軟に変更することができるとの効果を奏する。
【００４４】
特に、前記制御方法は、前記プロセッサではなく、前記通信制御部によって実行される。したがって、前記制御方法は、前記複数のタスクを実行するプロセッサへの処理負荷を増大させることなく、前記複数の送信データを、各送信データの送信優先度に従って、前記１つの送信ポートから出力できるとの効果を奏する。
【発明の効果】
【００４５】
本発明の一態様によれば、複数のタスクの各々の実行により生成される送信データを、１つの送信ポートを介して順次送信するコントローラについて、前記複数のタスクを実行するプロセッサの負荷を抑制しつつ、前記送信データの送信順序を柔軟に変更できるとの効果を奏する。
【図面の簡単な説明】
【００４６】
【図１】本発明の実施形態１に係るコントローラのＣＰＵユニットの要部構成を示す図である。
【図２】本発明の実施形態１に係るコントローラを含む制御システムの概要を示す図である。
【図３】本発明の実施形態１に係るコントローラの実行する、送信データの送信順序の制御を説明するための図である。
【図４】図１のＣＰＵユニットが実行する処理の全体概要を示すフロー図である。
【図５】図４に示す処理のうち、図１のネットワーク制御部および各ＣＰＵコアの実行する処理の全体概要を示すフロー図である。
【図６】図４に示す処理のうち、図１の通信コントローラの実行する処理の全体概要を示すフロー図である。
【図７】本発明の実施形態１に係るコントローラについて、送信キュー１２０（０）を設けなかった場合に生じる状況を説明する図である。
【図８】本発明の実施形態１に係るコントローラについて、送信キュー１２０（０）を設けることによって可能となる送信順序を説明する図である。
【図９】ユーザがタスクと送信優先度と対応付ける例を説明する図である。
【図１０】従来までのコントローラに見られる課題を説明する図である。
【発明を実施するための形態】
【００４７】
〔実施形態１〕
以下、本発明の一側面に係る実施の形態（以下、「本実施形態」とも表記する）を、図面に基づいて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。本実施の形態においては、機械および設備等の制御対象を制御するＰＬＣ（プログラマブル・ロジック・コントローラ、Programmable Logic Controller）１０をコントローラの典型例として説明を行なう。また、以下の説明においては、記載の簡潔性を担保するため、「送信キュー」を「ＴＸ」と称することがある。
【００４８】
§１．適用例
本発明の一態様に係るＰＬＣ１０（コントローラ）についての理解を容易にするため、先ず、本発明が適用される場面の一例について、具体的には、ＰＬＣ１０を含む制御システム１の概要について、図２を用いて説明する。
【００４９】
（制御システムの概要）
図２は、制御システム１の概要を示す図である。制御システム１は、ＰＬＣ１０と、ＰＬＣ１０へフィールドネットワーク２０を介して接続されるサーボドライバ３３、３４およびリモートＩＯターミナル３５と、フィールド機器であるデバイス３１、３２と、を含む。また、ＰＬＣ１０には、接続ケーブル５０を介して、ツール６０が接続される。制御システム１において、生産設備内の入力機器及び出力機器の制御を司る、１つ以上のＰＬＣ１０と、ＰＬＣ１０により動作が制御される機器とは、フィールドネットワーク２０等の制御系のネットワークに接続される。ＰＬＣ１０と機器とは、その制御系のネットワークを介してサイクリックに通信を行なうことで、ＩＮデータ及びＯＵＴデータ（以下、「ＩＯデータ」という）の送受信を行ない、生産設備を制御する。
【００５０】
ＰＬＣ１０は、制御システム１において、機械および設備などの制御対象を制御する制御装置であり、制御システム１における、フィールドネットワーク２０を介したデータ伝送を管理するマスタ装置である。ＰＬＣ１０は、主たる演算処理を実行するＣＰＵユニット１００と、電源ユニット１０１と、１つ以上のＩＯユニット（図２の例では、ＩＯユニット１０２、１０３、１０４）と、特殊ユニット１０５と、を含む。ＣＰＵユニット１００と、ＩＯユニット１０２、１０３、１０４の各々と、特殊ユニット１０５とは、ＰＬＣシステムバス１０６を介して、互いにデータを遣り取りできるように構成される。
【００５１】
ＣＰＵユニット１００は、制御対象の状態等に係る種々の処理を実行し、例えば、「送信データの送信と、受信データの受信と、受信データを使用して送信データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御する」処理を実行する。ＣＰＵユニット１００の詳細については、図１を参照して後述する。
【００５２】
電源ユニット１０１は、ＣＰＵユニット１００、ＩＯユニット１０２、１０３、１０４、および、特殊ユニット１０５に、適切な電圧の電源を供給する。
【００５３】
ＩＯユニット１０２、１０３、１０４は、各々、一般的な入出力処理に関するユニットであり、オン／オフといったデータ（つまり、２値化されたデータ）の入出力を司る。具体的には、ＩＯユニット１０２、１０３、１０４の各々は、センサなどの入力機器であるデバイス３１が何らかの対象物を検出している状態（オン）、および、何らの対象物も検出していない状態（オフ）のいずれであるかという情報を収集する。また、ＩＯユニット１０２、１０３、１０４の各々は、リレー、アクチュエータといった出力機器であるデバイス３２に対して、活性化するための指令（オン）、および、不活性化するための指令（オフ）のいずれかを出力する。
【００５４】
特殊ユニット１０５は、ＩＯユニット１０２、１０３、１０４の各々が処理するデータとは異なるデータ（例えば、アナログデータ）の入出力、温度制御、特定の通信方式による通信など、ＩＯユニット１０２、１０３、１０４ではサポートしない処理を実行する。
【００５５】
デバイス３１および３２は、各々、ＰＬＣ１０によって制御される入出力機器である。入力機器であるデバイス３１は、例えば、温度センサ、光センサなどの「検出器」、「スイッチ（押ボタンスイッチ、リミットスイッチ、圧力スイッチなど）」などである。出力機器であるデバイス３２は、例えば、「アクチュエータ」、「リレー」、「電磁弁」、「表示器」、「表示灯」などである。
【００５６】
フィールドネットワーク２０は、ＣＰＵユニット１００とフィールド機器（サーボドライバ３３、３４、およびリモートＩＯターミナル３５）との間で遣り取りされる各種データを伝送する。フィールドネットワーク２０としては、典型的には、各種の産業用イーサネット（登録商標）を用いることができる。産業用イーサネット（登録商標）としては、たとえば、ＥｔｈｅｒＣＡＴ（登録商標）、Ｐｒｏｆｉｎｅｔ  ＩＲＴ、ＭＥＣＨＡＴＲＯＬＩＮＫ（登録商標）−ＩＩＩ、Ｐｏｗｅｒｌｉｎｋ、ＳＥＲＣＯＳ（登録商標）−ＩＩＩ、ＣＩＰ  Ｍｏｔｉｏｎなどが知られており、これらのうちのいずれを採用してもよい。さらに、産業用イーサネット（登録商標）以外のフィールドネットワーク２０を用いてもよい。たとえば、モーション制御を行わない場合であれば、ＤｅｖｉｃｅＮｅｔ、ＣｏｍｐｏＮｅｔ／ＩＰ（登録商標）などを、フィールドネットワーク２０として用いてもよい。制御システム１では、典型的に、産業用イーサネット（登録商標）であるＥｔｈｅｒＣＡＴ（登録商標）をフィールドネットワーク２０として採用する場合の構成について例示する。
【００５７】
ＰＬＣ１０は、ＩＯユニット１０２、１０３、１０４の各々の機能、および、サーボドライバ３３、３４の機能をＣＰＵユニット１００に内蔵させ、そのような内蔵機能でまかなえる範囲については、ＣＰＵユニット１００が、直接、制御対象を制御してもよい。
【００５８】
サーボドライバ３３、３４の各々は、フィールドネットワーク２０を介してＣＰＵユニット１００と接続され、ＣＰＵユニット１００からの指令値に従って、サーボモータ４１、４２の各々を駆動する。より具体的には、サーボドライバ３３、３４の各々は、ＰＬＣ１０から一定の時間間隔で繰り返し（つまり、周期的に）、位置指令値、速度指令値、トルク指令値といった指令値を受ける。また、サーボドライバ３３、３４の各々は、サーボモータ４１、４２の各々に接続されている各種検出器から、サーボモータ４１、４２の各々の動作（状態）に係る各種検出値（実測値）を取得する。例えば、サーボモータ４１、４２の各々の軸に接続されている位置センサ（ロータリーエンコーダ）およびトルクセンサ等の検出器から、位置、速度、トルクといったサーボモータ４１および４２の各々の動作（状態）に係る実測値を取得する。サーボモータ４１、４２の各々の速度に係る実測値は、位置センサによって検出された今回位置と前回位置との差から算出されてもよい。
【００５９】
そして、サーボドライバ３３、３４の各々は、ＣＰＵユニット１００からの指令値を目標値に設定し、実測値をフィードバック値として、サーボモータ４１および４２の各々に対して、フィードバック制御を行う。すなわち、サーボドライバ３３、３４の各々は、実測値が目標値に近づくようにサーボモータ４１、４２の各々を駆動するための電流を調整する。サーボドライバ３３、３４の各々は、サーボモータアンプと称されることもある。
【００６０】
図２には、サーボモータ４１、４２の各々とサーボドライバ３３、３４の各々とを組み合わせたシステム例を示すが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。
【００６１】
リモートＩＯターミナル３５は、基本的には、ＩＯユニット１０２、１０３、１０４の各々と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートＩＯターミナル３５は、フィールドネットワーク２０でのデータ伝送に係る処理を行うための通信カプラ３６と、１つ以上のＩＯユニット（図２の例では、ＩＯユニット３７、３８）とを含む。通信カプラ３６と、ＩＯユニット３７、３８の各々とは、リモートＩＯターミナルバス３９を介して、データを互いに遣り取りできるように構成される。
【００６２】
ツール６０は、ＰＬＣ１０に接続可能な情報処理装置である。ツール６０は、例えばＵＳＢ（Universal Serial Bus）ケーブルである接続ケーブル５０を介して、ＰＬＣ１０に接続され、ＰＬＣ１０との間で各種パラメータの設定、プログラミング、モニタ、デバッグなどの処理を実行する。
【００６３】
ツール６０で実行される各種プログラムは、ＣＤ−ＲＯＭ６１に格納されて流通してもよい。ＣＤ−ＲＯＭ６１に格納されたプログラムは、ツール６０のＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）ドライブによって読み取られ、ツール６０のハードディスク（ＨＤＤ）等へ格納されてもよい。ツール６０は、上位のホストコンピュータ等からネットワークを通じて、ツール６０で実行されるプログラムをダウンロードしてもよい。
【００６４】
ツール６０は、例えば、パーソナルコンピュータであり、ＰＬＣ１０において実行されるユーザプログラムの作成・編集処理を実行する。また、ツール６０は、ユーザプログラムをＰＬＣ１０からダウンロードする処理を実行するとともに、ユーザプログラムをＰＬＣ１０にアップロードする処理を実行する。
【００６５】
ユーザは、ツール６０を用いて、ＰＬＣ１０（特に、ＣＰＵユニット１００）におけるプログラムの実行単位であるタスクを設定することができる。ＰＬＣ１０（特に、図１のマルチコアプロセッサ１６０）は、タスクを実行することにより制御対象を制御するように構成され、タスクには、制御対象を制御するためのユーザプログラム等の実行が含まれる。ユーザプログラムは、制御対象機器を制御するための制御プログラムの一つである。ユーザは、ツール６０を用いて、タスクの実行周期および実行タイミング、タスクで実行するプログラム、タスクで実行する入出力のリフレッシュ、タスク間で共有する変数等（グローバル変数等）に係る各種設定を定義することができる。ツール６０は、ユーザにより定義された上述の各種設定を、ＰＬＣ１０に通知する（アップロードする）。
【００６６】
（ＰＬＣの概要）
詳細は図１を用いて説明するが、ＰＬＣ１０は、フィールドネットワーク２０等の制御系の１つのネットワークに、送信ポート１４０を介して接続する。ＰＬＣ１０は、送信ポート１４０に対して、各々に格納されている送信データを、その送信データについて指定されている送信時刻に送信することのできる送信キュー１２０（ＴＸ１２０）を複数備えている。
【００６７】
以下の説明において、ＴＸ１２０（送信キュー１２０）について、複数のＴＸ１２０の各々を区別する必要がある場合には、符号に「（１）」、「（２）」、「（３）」、・・・、「（ｎ）」等の添え字を付して区別する。例えば、「ＴＸ１２０（１）」、「ＴＸ１２０（２）」、「ＴＸ１２０（３）」、・・・、「ＴＸ１２０（ｎ）」と記載して区別する。複数のＴＸ１２０の各々を特に区別する必要がない場合は単に「ＴＸ１２０」と称する。「ｎ」は、「２」以上の整数を意味する。後述する複数のＣＰＵコア１７０についても同様に、複数のＴＸ１２０の各々を区別する必要がある場合には符号に添え字を付して区別し、複数のＴＸ１２０の各々を区別する必要がない場合は単に「ＣＰＵコア１７０」と称する。
【００６８】
ＰＬＣ１０は、複数の送信キュー１２０の各々に格納されている送信データについて、その送信順序を制御するための優先度を設定する。そして、複数の送信キュー１２０の各々は、自キューの先頭に格納されている送信データに付与された優先度（送信優先度Ｐ）に従って、複数の送信キュー１２０の各々の先頭に格納されている送信データの送信順序を制御する。ＰＬＣ１０の実行する送信順序の制御について、図１０に例示した「各送信キューに予め割り当てておいた送信順序に従って実行される、従来までの送信順序の制御」との違いを、図３を用いて説明する。
【００６９】
（送信データに付与する送信優先度を用いた送信順序の制御）
図３は、ＰＬＣ１０の実行する、送信データの送信順序の制御を説明するための図である。詳細は図１を用いて後述するが、ＰＬＣ１０は、マルチコアプロセッサ１６０を備え、マルチコアプロセッサ１６０は、複数のＣＰＵコアである第１コア１７０（１）および第２コア１７０（２）を含む。第１コア１７０（１）は第１タスクＴ（１）に対応付けられており、第２コア１７０（２）は第２タスクＴ（２）に対応付けられており、つまり、第１タスクＴ（１）は第１コア１７０（１）において実行され、第２タスクＴ（２）は第２コア１７０（２）において実行される。また、第１送信キュー１２０（１）（つまり、ＴＸ１２０（１））は、第１コア１７０（１）または第１タスクＴ（１）に対応付けられ、第２送信キュー１２０（２）（つまり、ＴＸ１２０（２））は、第２コア１７０（２）または第２タスクＴ（２）に対応付けられている。
【００７０】
以上に説明した通り、ＰＬＣ１０において、第１タスクＴ（１）および第２タスクＴ（２）の各々は、第１コア１７０（１）および第２コア１７０（２）の各々に対応付けられている。ＴＸ１２０（１）およびＴＸ１２０（２）の各々は、第１タスクＴ（１）および第２タスクＴ（２）の各々、または、第１コア１７０（１）および第２コア１７０（２）の各々に対応付けられている。したがって、ＴＸ１２０（１）およびＴＸ１２０（２）の各々は、直接、または、第１コア１７０（１）および第２コア１７０（２）の各々を介して間接に、第１タスクＴ（１）および第２タスクＴ（２）の各々に対応付けられている。
【００７１】
ＴＸ１２０（１）からＴＸ１２０（ｎ）までの複数のＴＸ１２０の各々に、直接または間接に、対応付けられるタスクは複数であってもよい。すなわち、ＴＸ１２０（１）に、複数の第１タスクＴ（１）（例えば、第１タスクＴ（１−１）、第１タスクＴ（１−２）、第１タスクＴ（１−３）、・・・、第１タスクＴ（１−ｎ））が対応付けられてもよい。また、ＴＸ１２０（２）に、複数の第２タスクＴ（２）（例えば、第２タスクＴ（２−１）、第２タスクＴ（２−２）、第２タスクＴ（２−３）、・・・、第２タスクＴ（２−ｎ））が対応付けられてもよい。
【００７２】
同様に、ＰＬＣ１０において、複数のＣＰＵコア１７０の各々に対応付けられるタスクは複数であってもよい。すなわち、第１コア１７０（１）に、複数の第１タスクＴ（１）（例えば、第１タスクＴ（１−１）、第１タスクＴ（１−２）、第１タスクＴ（１−３）、・・・、第１タスクＴ（１−ｎ））が対応付けられてもよい。また、第２コア１７０（２）に、複数の第２タスクＴ（２）（例えば、第２タスクＴ（２−１）、第２タスクＴ（２−２）、第２タスクＴ（２−３）、・・・、第２タスクＴ（２−ｎ））が対応付けられてもよい。
【００７３】
ＰＬＣ１０は、ＴＸ１２０（１）からＴＸ１２０（ｎ）までの複数のＴＸ１２０の各々に、直接、または、複数のＣＰＵコア１７０の各々を介して間接に、１または複数のタスクを対応付けている。
【００７４】
第１コア１７０（１）によって第１タスクＴ（１）の実行において生成される送信データ（例えば、第１タスクＴ（１）の実行結果を示すデータ）は、ＴＸ１２０（１）に格納される。同様に、第２コア１７０（２）によって第２タスクＴ（２）の実行において生成される送信データは、ＴＸ１２０（２）に格納される。すなわち、第１コア１７０（１）によって、第１タスクＴ（１−１）およびＴ（１−２）の各々の実行において生成される送信データＤ１−１およびＤ１−２は、各々、ＴＸ１２０（１）に格納される。第２コア１７０（２）によって、第２タスクＴ（２−１）およびＴ（２−２）の各々の実行において生成される送信データＤ２−１およびＤ２−２は、各々、ＴＸ１２０（２）に格納される。
【００７５】
ここで、ＰＬＣ１０においては、図１０に例示した「複数の送信キューの各々に予め、送信順序を割り当てておく」のとは異なり、複数のＴＸ１２０の各々に格納されるデータに、優先度（送信優先度Ｐ）が付与される。そして、複数の送信キュー１２０の各々は、自キューの先頭に格納されているデータの送信優先度Ｐに従って、自キューの先頭に格納されているデータを、送信ポート１４０を介して、フィールドネットワーク２０等の制御系の１つのネットワークへと出力する。
【００７６】
図３に示す例では、送信データＤ１−１およびＤ２−１の各々には、送信優先度Ｐ（つまり、送信したい順序）として、「１」が付与され、送信データＤ１−２およびＤ２−２の各々には、送信優先度Ｐとして、「２」が付与されている。
【００７７】
ここで、「付与されている送信優先度Ｐが同じであれば、ＴＸ１２０（１）に格納されているデータを、ＴＸ１２０（２）に格納されているデータよりも優先して送信する」との前提の下では、送信順序は図３に示すようになる。すなわち、送信優先度Ｐが共に「１」である送信データＤ１−１およびＤ２−１は、送信優先度Ｐが共に「２」である送信データＤ１−２およびＤ２−２よりも先に送信される。ここで、送信データＤ１−１はＴＸ１２０（１）に格納されており、送信データＤ２−１はＴＸ１２０（２）に格納されているため、送信優先度Ｐが「１」である送信データＤ１−１は、送信優先度Ｐが「１」である送信データＤ２−１よりも先に送信される。同様に、送信データＤ１−２はＴＸ１２０（１）に格納されており、送信データＤ２−２はＴＸ１２０（２）に格納されているため、送信優先度Ｐが「２」である送信データＤ１−２は送信優先度Ｐが「２」である送信データＤ２−２よりも先に送信される。
【００７８】
したがって、図３に示すように、ＰＬＣ１０は、各送信データに付与されている送信優先度Ｐに従って、送信データＤ１−１、Ｄ２−１、Ｄ１−２、Ｄ２−２を、この順に送信する。つまり、ＰＬＣ１０は、複数のデータの各々（複数のタスクの各々の実行により生成された送信データ）を、各データに付与された送信優先度Ｐに従って送信する。したがって、ＰＬＣ１０は、複数のデータの各々に付与する送信優先度Ｐを変更することによって、複数のデータの各々の送信順序を、柔軟に変更することができる。
【００７９】
図１０に例示した従来までのコントローラは、マイクロプロセッサのコア１を、送信順序として「１」を割り当てたＴＸ１に対応付け、コア２を、送信順序として「２」を割り当てたＴＸ２に対応付けている。したがって、コア１によって実行されるタスクにおいて生成される送信データはＴＸ１に格納され、コア２によって実行されるタスクにおいて生成される送信データはＴＸ２に格納される。
【００８０】
コア１およびコア２の各々が実行するタスクには複数の種類があり、例えば、コア１において実行されるタスクにも、優先的に送信すべき制御データに係るタスクもあれば、制御データよりも優先度の低い、制御に関係しないデータに係るタスクもある。また、コア２において実行されるタスクにも、優先的に送信すべき制御データに係るタスクもあれば、制御データよりも優先度の低い、制御に関係しないデータに係るタスクもある。
【００８１】
しかしながら、従来までのコントローラにおいて、ＴＸ１およびＴＸ２に割り当てた送信順序は固定である。そのため、図１０に示すように、「コア２によって実行されるタスクにおいて生成される、制御データである送信データＤ２−１」を、「コア１によって実行されるタスクにおいて生成される、制御に関係しないデータである送信データＤ１−２」よりも先に送信することができない。また、従来までのコントローラに、「制御データである送信データＤ２−１の格納先をＴＸ１に変更する」処理を実行させる場合、プロセッサの負荷が高くなってしまう。
【００８２】
これに対して、ＰＬＣ１０は、複数のＴＸ１２０の各々に格納する送信データについて、その送信データの送信順序を示す送信優先度Ｐを設定し、複数のＴＸ１２０の各々に格納されている送信データの送信優先度Ｐに従って、送信データの送信順序を制御する。したがって、ＰＬＣ１０は、送信データが格納されるＴＸ１２０に関係なく、他の送信データに優先して送信すべき送信データに、他の送信データに付与する送信優先度Ｐよりも高い送信優先度Ｐを付与することによって、その送信データを優先的に送信する。ＰＬＣ１０において、送信データの送信優先度Ｐの指定は、例えば、ディスクリプタを利用する。
【００８３】
（特定のコアまたは特定のタスクに割り当てられていない送信キューの利用）
ここで、ＰＬＣ１０において、ＴＸ１２０は、例えば、ＦＩＦＯ（first in, first out、先入れ先出し）方式を採用している。例えば、第２コア１７０（２）によって、第２タスクＴ（２−１）およびＴ（２−２）がこの順で実行されると、ＴＸ１２０（２）には、以下のデータが格納される。すなわち、第２タスクＴ（２−１）の実行において生成される送信データＤ２−１、および、第２タスクＴ（２−２）の実行において生成される送信データＤ２−２が、この順で（つまり、各タスクの実行順で）、ＴＸ１２０（２）に格納される。
【００８４】
ここで、ＰＬＣ１０は、複数のＴＸ１２０の各々の先頭に格納された送信データの送信優先度Ｐが高い順に、複数のＴＸ１２０の各々の先頭に格納された送信データを順次送信する。そのため、送信データＤ２−２を、送信データＤ２−１の後に、ＴＸ１２０（２）に格納した場合、送信データＤ２−２の送信優先度Ｐが評価されるのは、送信データＤ２−１の送信優先度Ｐの評価の後になる。つまり、送信データＤ２−２を、送信データＤ２−１の後に、ＴＸ１２０（２）に格納した場合、送信データＤ２−２の送信優先度Ｐを如何に高く設定しても、送信データＤ２−２の送信は、送信データＤ２−１の送信の後になる。
【００８５】
そこで、ＰＬＣ１０は、複数のＣＰＵコア１７０の内の特定のＣＰＵコア１７０、または、複数のタスクＴ（１）からＴ（ｎ）の内の特定のタスクＴ（ｘ）に対応付けられていないＴＸ１２０（０）を備えている。ＴＸ１２０（０）には、複数のタスクＴ（１）からＴ（ｎ）のいずれかにおいて生成された送信データが、ＴＸ１２０（１）からＴＸ１２０（ｎ）の各々に格納される送信優先度Ｐよりも高い送信優先度Ｐと共に、格納される。
【００８６】
ＰＬＣ１０は、ＴＸ１２０（０）を備え、ＴＸ１２０（０）に緊急性の高い送信データを格納することにより、ＴＸ１２０（１）からＴＸ１２０（ｎ）の各々に格納される送信データに関係なく、ＴＸ１２０（０）に格納した送信データを優先して送信できる。ＰＬＣ１０は、複数のＣＰＵコア１７０の全てが共通して利用できるＴＸ１２０（０）を備えることで、各々が特定のＣＰＵコア１７０に対応付けられているＴＸ１２０（１）からＴＸ１２０（ｎ）の状態に関係なく、緊急性の高いメッセージを優先的に送信することができる。
【００８７】
（タスクについての注記）
ＰＬＣ１０のＣＰＵユニット１００は、種々のプログラムを「タスク」という実行単位で実行する。ＰＬＣ１０が「タスク」において実行可能な処理・プログラムは、「ＩＯ制御」、「制御プログラム」、および「システムサービス」の３つに分けることができる。なお、「システムサービス」は、ＰＬＣ１０の実行する処理・プログラムのうち「ＩＯ制御」および「制御プログラム」以外のものと捉えることができ、したがって、「システムサービス」は、「タスク」の必須の構成要素ではない。
【００８８】
ユーザは、ツール６０を用いて、ＰＬＣ１０（特に、ＣＰＵユニット１００）におけるプログラムの実行単位であるタスクを設定することができる。ＰＬＣ１０（特に、ＣＰＵユニット１００のマルチコアプロセッサ１６０）は、タスクを実行することにより制御対象を制御するように構成されており、タスクには、制御対象を制御するためのユーザプログラム等の実行が含まれている。ユーザプログラムは、制御対象機器を制御するための制御プログラムの一つである。ユーザは、ツール６０を用いて、タスクの実行周期および実行タイミング、タスクで実行するプログラム、タスクで実行する入出力のリフレッシュ、タスク間で共有する変数等（グローバル変数等）に係る各種設定を定義することができる。ツール６０は、ユーザにより定義された上述の各種設定を、ＰＬＣ１０に通知する（アップロードする）。タスクの設定は、ツール６０から例えば接続ケーブル５０を介してＣＰＵユニット１００へ転送され、不図示の不揮発性メモリなどに格納される。なお、前述の通り、「システムサービス」は、ＰＬＣ１０の実行する処理・プログラムのうち「ＩＯ制御」および「制御プログラム」以外のものと捉えることができるので、ユーザがタスク内での実行を指定しない「システムサービス」が、タスク中で実行されてもよい。
【００８９】
ユーザは、ツール６０を用いて、複数のタスクの間に優先順位を、より正確には、複数のタスクの各々の実行において生成される送信データの送信優先度Ｐを、設定することができる。例えばユーザは、ツール６０を用いて、優先順位が互いに異なるプライマリ定周期タスクと、定周期タスクと、イベントタスクという３種類のタスクを設定できてもよい。プライマリ定周期タスクは、例えば、「ＩＯ制御、ユーザプログラム、モーション演算プログラム（、および、システムサービス）」を主な処理内容（実行内容）とする。定周期タスクは、例えば、「ＩＯ制御、ユーザプログラム（、および、システムサービス）」を主な処理内容とする。イベントタスクは、例えば、「ユーザプログラム（、および、システムサービス）」を主な処理内容とする。ＰＬＣ１０は、プライマリ定周期タスクを最優先で実行し、定周期タスクとイベントタスクとの間の優先関係はユーザが指定できてもよく、さらに、複数の定周期タスクの間に実行順位に係る優先度が設定されていてもよい。また、例えば、ユーザがツール６０において、１つのタスクにシーケンス制御とモーション制御とを設定することにより、マルチコアプロセッサ１６０は、シーケンス制御とモーション制御とを同じ時間間隔で繰り返し実行する。
【００９０】
ここで、ユーザは、ツール６０を用いて、複数のタスクの間に優先順位を設定できるが、１つのタスクであっても、そのタスクの実行により生成される送信データは、複数の送信優先度Ｐを付与され得る。例えば、通常時は、或るタスクＴ（ｐ）の実行によって、送信優先度Ｐが「２」である送信データＤ（ｐ−１）が生成される場合であっても、或るタスクＴ（ｐ）の実行によって、送信優先度Ｐが「０」である送信データＤ（ｐ−２）が生成されることがある。具体的には、異常が発生していない状態では、タスクＴ（ｐ）の実行によって送信データＤ（ｐ−１）が生成されるのに対し、異常発生時には、タスクＴ（ｐ）の実行によって、緊急性の高い送信データＤ（ｐ−２）が生成されることがある。ユーザは、例えば、ツール６０を用いて、異常が発生していない状態において（つまり、通常時において）タスクＴ（ｐ）の実行によって生成される送信データＤ（ｐ−１）の送信優先度Ｐを設定することができる。ユーザによる、ツール６０を用いたタスクの優先度設定（特に、タスクの実行において生成される送信データの送信優先度Ｐの設定）について、詳細は、図９を用いて後述する。
【００９１】
§２．構成例
これまでに図２および図３を用いて概要を説明してきたＰＬＣ１０について、次に、図１を用いて、ＰＬＣ１０の備えるＣＰＵユニット１００の詳細を説明する。
【００９２】
（ＣＰＵユニットのハードウェア構成）
図１は、ＰＬＣ１０のＣＰＵユニット１００の構成例を示す図である。図１に例示する通り、ＣＰＵユニット１００は、ハードウェア構成として、通信コントローラ１１０と、メインメモリ１５０と、マルチコアプロセッサ１６０と、を含む。ＣＰＵユニット１００は、さらに、不図示の不揮発性メモリ、ＰＬＣシステムバス１０６を介したデータの遣り取りを制御するシステムバスコントローラ、ツール６０とＣＰＵユニット１００とを接続するためのＵＳＢコネクタなどを含んでもよい。通信コントローラ１１０と、メインメモリ１５０と、マルチコアプロセッサ１６０と、の間は、各種のバス（内部バス）を介してそれぞれ結合されている。
【００９３】
マルチコアプロセッサ１６０は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成され、内部クロックに従って順次命令コードを解釈して実行する。マルチコアプロセッサ１６０は、複数のＣＰＵコア１７０と、ネットワーク制御部１８０とを含み、図１に示す例では、マルチコアプロセッサ１６０は、複数のＣＰＵコア１７０として、第１コア１７０（１）および第２コア１７０（２）を含んでいる。マルチコアプロセッサ１６０の含むＣＰＵコア１７０が２つであることは必須ではなく、マルチコアプロセッサ１６０は、複数のＣＰＵコア１７０を含んでいればよい。ただし、詳細は後述するが、ＰＬＣ１０は、マルチコアプロセッサ１６０の代わりに、シングルコアプロセッサを備えてもよい。
【００９４】
複数のＣＰＵコア１７０（図１に示す例では、第１コア１７０（１）および第２コア１７０（２））は、各々、複数のタスクを実行する。複数のＣＰＵコア１７０は、各々、タスクの実行により生成した送信データを、メインメモリ１５０に格納（言い換えれば、設定）すると、データ転送要求（送信データのフィールドネットワーク２０への送信）を、ネットワーク制御部１８０に対して発行する。
【００９５】
特に、複数のＣＰＵコア１７０の各々には、複数のＣＰＵコア１７０の各々において実行される、複数のタスクＴの各々が対応付けられている。すなわち、図１に示す第１コア１７０（１）および第２コア１７０（２）の各々には、第１コア１７０（１）および第２コア１７０（２）の各々において実行される複数のタスクＴが予め対応付けられている。例えば、第１コア１７０（１）には、タスクＴ（１）、Ｔ（３）、Ｔ（５）、・・・が対応付けられており、第２コア１７０（２）には、タスクＴ（２）、Ｔ（４）、Ｔ（６）、・・・が対応付けられている。
【００９６】
マルチコアプロセッサ１６０の含む複数のＣＰＵコア１７０の各々には、複数のＴＸ１２０の各々が対応付けられ、具体的には、第１コア１７０（１）および第２コア１７０（２）の各々には、ＴＸ１２０（１）およびＴＸ１２０（２）が対応付けられている。第１コア１７０（１）によって実行されるタスクにおいて生成される送信データは、原則として、ＴＸ１２０（１）に格納され、第２コア１７０（２）によって実行されるタスクにおいて生成される送信データは、原則として、ＴＸ１２０（２）に格納される。
【００９７】
ネットワーク制御部１８０は、複数のＣＰＵコア１７０の各々によるタスクの実行によって生成された複数の送信データの各々に係るディスクリプタを、メインメモリ１５０に格納（言い換えれば、設定）する。また、ネットワーク制御部１８０は、複数のＣＰＵコア１７０の各々から発行されたデータ転送要求を受け取ると、受け付けたデータ転送要求に対応する送信データのデータ転送（フィールドネットワーク２０への送信）を、通信コントローラ１１０に要求する。
【００９８】
メインメモリ１５０は、ＣＰＵユニット１００の記憶手段であり、例えば、マルチコアプロセッサ１６０による演算処理によって生成された送信データは、メインメモリ１５０へと格納される。前述の通り、ＣＰＵユニット１００は、記憶手段としてさらに、不図示の不揮発性メモリをさらに備えていてもよい。
【００９９】
メインメモリ１５０は、揮発性の記憶領域（ＲＡＭ）であり、マルチコアプロセッサ１６０によって生成された送信データの格納に加えて、ＣＰＵユニット１００へ電源投入後にマルチコアプロセッサ１６０で実行されるべき各種プログラムを保持する。また、メインメモリ１５０は、マルチコアプロセッサ１６０による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ１５０として、例えば、ＤＲＡＭ（Dynamic Random Access Memory）、ＳＲＡＭ（Static Random Access Memory）等を用いることができる。
【０１００】
一方、不揮発性メモリは、各種のプログラムおよびパラメータなどのデータを不揮発的に保持する。これらのデータは、必要に応じて、マルチコアプロセッサ１６０がアクセスできるようにメインメモリ１５０にコピーされる。このような不揮発性メモリは、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体、ＤＶＤ−ＲＡＭ（Digital Versatile Disk Random Access Memory）のような光学記録媒体などを用いることもできる。
【０１０１】
通信コントローラ１１０は、送信データの送信および受信データの受信を実行し、典型的には、ＦＰＧＡ（Field-Programmable gate array）またはＡＳＩＣ（Application Specific Integrated Circuit）等のハードウェアで構成される。通信コントローラ１１０は、メインメモリ１５０およびマルチコアプロセッサ１６０の各々とのデータの送受信が可能に構成される。
【０１０２】
通信コントローラ１１０は、送信ポート１４０を介してフィールドネットワーク２０と接続され、フィールドネットワーク２０を介したデータの遣り取りを、特に、送信データの送信を、制御する。通信コントローラ１１０は、例えば、フィールドネットワーク２０における物理層およびデータリンク層の機能を提供する。すなわち、通信コントローラ１１０は、用いられるフィールドネットワーク２０の規格に従い、送信データの送信および受信データの受信を制御する。具体的には、通信コントローラ１１０は、フィールドネットワーク２０に接続されるフィールド機器との間で、複数のＴＸ１２０の各々に格納されている送信データを送信し、また、受信データを受信して自らのバッファメモリに格納する。特に、通信コントローラ１１０は、複数のデータＦＩＦＯ１２２の各々の先頭に格納されている送信データを、複数のディスクリプタＦＩＦＯ１２３の各々の先頭に格納されている送信優先度Ｐに従って、送信ポート１４０を介して順次出力する。
【０１０３】
これまでに概要を説明してきた、通信コントローラ１１０と、メインメモリ１５０と、マルチコアプロセッサ１６０との関係は、以下のように整理することができる。すなわち、マルチコアプロセッサ１６０による演算処理によって生成された送信データは、原始的にはメインメモリ１５０に格納される。そして、特定の装置・ユニットへ転送されるべき送信データは、メインメモリ１５０から読み出されて、通信コントローラ１１０のＴＸ１２０（特に、データＦＩＦＯ１２２）に一次的に保持される。例えば、ユーザプログラムは、タスクＴ（１）に割り当てられることによって、第１コア１７０（１）で実行され、その実行結果は、送信データとして、ＴＸ１２０（１）に一時的に格納された後、ＰＬＣ１０の制御対象へと送信される。
【０１０４】
（通信コントローラの詳細）
通信コントローラ１１０は、複数のＴＸ１２０と、優先度調停部１３０と、送信ポート１４０とを含み、前述の通り、複数のＴＸ１２０および優先度調停部１３０は、ＦＰＧＡまたはＡＳＩＣ等のハードウェアによる論理回路で構成される。図１においては、記載の簡潔性を担保するため、送信ポート１４０を介してフィールドネットワーク２０から受信する受信データを処理する構成、受信データを格納するバッファメモリなどの、本実施の形態に直接関係のない構成は、省略している。ただし、実施の実情に則して、通信コントローラ１１０は、当該省略された構成を備えてもよい。
【０１０５】
ＴＸ１２０は、フィールドネットワーク２０を介して他の装置などへ出力されるデータ、および、ＰＬＣシステムバス１０６を介してＣＰＵユニット１００以外のユニットへ出力されるデータ（出力データ）の送信バッファとして機能する。すなわち、ＴＸ１２０は、メインメモリ１５０とのデータの通信に用いられるメモリ領域である。
【０１０６】
通信コントローラ１１０は、ＴＸ１２０（０）からＴＸ１２０（ｎ）までの複数のＴＸ１２０を含み、図１には、「ｎ＝２」として、ＴＸ１２０（０）からＴＸ１２０（２）までの３つのＴＸ１２０を含む例が開示されている。しかしながら、「ｎ＝２」であることは必須ではなく、通信コントローラ１１０は、複数のＴＸ１２０を備えていればよい。すなわち、ＰＬＣ１０は、１または複数の送信データを一時的にバッファリングするとともに、当該バッファリングした送信データをフィールドネットワーク２０に順次送出する、ＦＩＦＯ（First In First Out）のＴＸ１２０を複数備えている。
【０１０７】
ここで、複数のタスクＴ（１）からＴ（ｎ）の各々は、複数のＣＰＵコア１７０（１）から１７０（ｎ）の各々に対応付けられており、複数のＣＰＵコア１７０（１）から１７０（ｎ）の各々は、ＴＸ１２０（１）からＴＸ１２０（ｎ）の各々に対応付けられている。したがって、ＴＸ１２０（１）からＴＸ１２０（ｎ）の各々は、複数のＣＰＵコア１７０（１）から１７０（ｎ）の各々を介して間接的に、複数のタスクＴ（１）からＴ（ｎ）の各々に対応付けられている。言い換えれば、ＴＸ１２０（１）からＴＸ１２０（ｎ）の各々は、複数のタスクＴ（１）からＴ（ｎ）の各々、または、複数のＣＰＵコア１７０（１）から１７０（ｎ）の各々に、対応付けられている。
【０１０８】
例えば、ＴＸ１２０（１）には第１コア１７０（１）が対応付けられており、第１コア１７０（１）によって実行されるタスクにおいて生成される送信データは、原則として、ＴＸ１２０（１）に格納される。具体的には、第１コア１７０（１）によって実行されるタスクにおいて生成される送信データであって、「１」以下の送信優先度Ｐが付与される送信データは、ＴＸ１２０（１）に格納される。第１コア１７０（１）によって実行されるタスクにおいて生成される送信データであって、送信優先度Ｐとして「０」が付与される送信データは、ＴＸ１２０（０）に格納される。
【０１０９】
ＴＸ１２０（２）には第２コア１７０（２）が対応付けられており、第２コア１７０（２）によって実行されるタスクにおいて生成される送信データは、原則として、ＴＸ１２０（２）に格納される。具体的には、第２コア１７０（２）によって実行されるタスクにおいて生成される送信データであって、「１」以下の送信優先度Ｐが付与される送信データは、ＴＸ１２０（２）に格納される。第２コア１７０（２）によって実行されるタスクにおいて生成される送信データであって、送信優先度Ｐとして「０」が付与される送信データは、ＴＸ１２０（０）に格納される。
【０１１０】
ＴＸ１２０（０）は、第１コア１７０（１）および第２コア１７０（２）のいずれにも対応付けられておらず、ＴＸ１２０（１）またはＴＸ１２０（２）に格納される送信データに付与されるのよりも高い送信優先度Ｐが付与される送信データが格納される。具体的には、第１コア１７０（１）または第２コア１７０（２）によって実行されるタスクにおいて生成される送信データであって、送信優先度Ｐとして「０」が付与される送信データは、ＴＸ１２０（０）に格納される。
【０１１１】
ＴＸ１２０（０）からＴＸ１２０（ｎ）の各々の構成は同じであり、すなわち、ＴＸ１２０は、ＤＭＡＣ１２１、データＦＩＦＯ１２２、ディスクリプタＦＩＦＯ１２３、および、時刻／優先度設定部１２４を含む。
【０１１２】
ＤＭＡＣ（Direct Memory Access Controller）１２１は、メインメモリ１５０に格納されているディスクリプタを、ＴＸ１２０（特に、ＴＸ１２０のディスクリプタＦＩＦＯ１２３）に転送する。また、ＤＭＡＣ１２１は、ディスクリプタＦＩＦＯ１２３に格納されているディスクリプタに従って、メインメモリ１５０に格納されている送信データを、ＴＸ１２０（特に、ＴＸ１２０のデータＦＩＦＯ１２２）に転送する。
【０１１３】
例えば、ＤＭＡＣ１２１（１）は、メインメモリ１５０に格納されている、ＴＸ１２０（１）のためのディスクリプタを、ディスクリプタＦＩＦＯ１２３（１）に転送する。ＤＭＡＣ１２１（１）は、ディスクリプタＦＩＦＯ１２３（１）に格納されているディスクリプタに従って、メインメモリ１５０に格納されている送信データを、データＦＩＦＯ１２２（１）に転送する。ＤＭＡＣ１２１（１）は、ディスクリプタＦＩＦＯ１２３（１）のディスクリプタに従って、ＴＸ１２０（１）に対応付けられている第１コア１７０（１）によって実行されるタスクにおいて生成された送信データを、データＦＩＦＯ１２２（１）に転送する。
【０１１４】
データＦＩＦＯ１２２には、ディスクリプタＦＩＦＯ１２３（１）に格納されているディスクリプタに従うＤＭＡＣ１２１によって、メインメモリ１５０に格納されている送信データが、ＦＩＦＯ方式で格納される。
【０１１５】
ディスクリプタＦＩＦＯ１２３には、ＤＭＡＣ１２１によって、メインメモリ１５０に格納されているディスクリプタが、ＦＩＦＯ方式で格納される。ディスクリプタは、対応する送信データの送信時刻、データサイズ、および、送信優先度Ｐを示す情報に加えて、送信データが格納されているメインメモリ１５０のメモリアドレスなどの情報を含む。
【０１１６】
時刻／優先度設定部１２４は、データＦＩＦＯ１２２に格納されている送信データと、ディスクリプタＦＩＦＯ１２３に格納されているディスクリプタとを対応付ける。具体的には、時刻／優先度設定部１２４は、データＦＩＦＯ１２２の先頭に格納されている送信データと、ディスクリプタＦＩＦＯ１２３の先頭に格納されているディスクリプタとを対応付ける。同様に、時刻／優先度設定部１２４は、データＦＩＦＯ１２２の先頭からｎ番目に格納されている送信データと、ディスクリプタＦＩＦＯ１２３の先頭からｎ番目に格納されているディスクリプタとを対応付ける。
【０１１７】
メインメモリ１５０に格納されている送信データは、ＤＭＡＣ１２１によって、送信データの送信を開始すべき時刻である送信時刻と共にＴＸ１２０にバッファリングされ（つまり、格納され）、バッファリングが完了すると送信可能状態となる。より正確には、ＤＭＡＣ１２１は、送信データをデータＦＩＦＯ１２２に、送信時刻を、送信優先度Ｐなどと共に、ディスクリプタＦＩＦＯ１２３に格納する。そして、送信可能状態となった送信データは、送信時刻に、ＴＸ１２０によって、ネットワークへの送信を開始される。ここで、複数の送信データについて送信時刻が一致または近似する場合、複数の送信データの送信が衝突するのを回避する必要がある。そこで、優先度調停部１３０が、複数の送信データの送信順序を制御する。
【０１１８】
優先度調停部１３０は、複数のＴＸ１２０の各々の先頭に格納されている送信データの送信優先度Ｐに従って、複数のＴＸ１２０の各々の先頭に格納されている送信データの送信順序を調停（制御）する。具体的には、優先度調停部１３０は、複数のＴＸ１２０の各々における、複数のディスクリプタＦＩＦＯ１２３の各々の先頭に格納されている送信優先度Ｐを比較する。優先度調停部１３０は、最も高い送信優先度Ｐを先頭に格納しているディスクリプタＦＩＦＯ１２３を含むＴＸ１２０に、送信権を付与する。優先度調停部１３０によって送信権を付与されたＴＸ１２０は、データＦＩＦＯ１２２の先頭に格納している送信データを、送信ポート１４０を介してフィールドネットワーク２０へ出力する。
【０１１９】
例えば、ディスクリプタＦＩＦＯ１２３（０）にはデータが未格納で、ディスクリプタＦＩＦＯ１２３（１）には、先頭に「送信優先度Ｐ：１」、２番目に「送信優先度Ｐ：３」が格納され、ディスクリプタＦＩＦＯ１２３（２）には、先頭のみに「送信優先度Ｐ：２」が格納されている場合、優先度調停部１３０は、以下の処理を実行する。
【０１２０】
すなわち、ディスクリプタＦＩＦＯ１２３（０）にはデータが未格納なので、優先度調停部１３０は、ディスクリプタＦＩＦＯ１２３（１）の先頭に格納されている「送信優先度Ｐ：１」と、ディスクリプタＦＩＦＯ１２３（２）の先頭に格納されている「送信優先度Ｐ：２」とを比較する。「送信優先度Ｐ：１」の方が「送信優先度Ｐ：２」よりも高いため、優先度調停部１３０は、ＴＸ１２０（１）に送信権を付与し、ＴＸ１２０（１）は、データＦＩＦＯ１２２（１）の先頭に格納している送信データを送信する。これに伴って、ディスクリプタＦＩＦＯ１２３（１）において、２番目に格納されていた「送信優先度Ｐ：３」が先頭になり、データＦＩＦＯ１２２（１）において、２番目に格納されていた送信データが先頭になる。
【０１２１】
ディスクリプタＦＩＦＯ１２３（０）にはデータが未格納なので、優先度調停部１３０は、ディスクリプタＦＩＦＯ１２３（１）の先頭に格納されている「送信優先度Ｐ：３」と、ディスクリプタＦＩＦＯ１２３（２）の先頭に格納されている「送信優先度Ｐ：２」とを比較する。「送信優先度Ｐ：２」の方が「送信優先度Ｐ：３」よりも高いため、優先度調停部１３０は、ＴＸ１２０（２）に送信権を付与し、ＴＸ１２０（２）は、データＦＩＦＯ１２２（２）の先頭に格納している送信データを送信する。これに伴って、ディスクリプタＦＩＦＯ１２３（２）およびデータＦＩＦＯ１２２（２）には、データが格納されていない状態となる。
【０１２２】
（ＰＬＣについての整理）
これまでに図１を用いて構成を説明してきたＰＬＣ１０について、その理解を容易にするため、以下のように整理しておく。すなわち、ＰＬＣ１０（コントローラ）は、複数のタスクを実行するマルチコアプロセッサ１６０（プロセッサ）と、マルチコアプロセッサ１６０による前記複数のタスクの各々の実行により生成される送信データを外部に出力する通信コントローラ１１０（通信制御部）と、を備える。通信コントローラ１１０は、前記複数の送信データの各々が送信優先度Ｐと共に格納される複数のＴＸ１２０（送信キュー）を含む。通信コントローラ１１０は、複数のＴＸ１２０の各々の先頭に格納された送信データの送信優先度Ｐが高い順に、複数のＴＸ１２０の各々の先頭に格納された送信データを、１つの送信ポート１４０を介して順次出力する。
【０１２３】
前記の構成によれば、ＰＬＣ１０における通信コントローラ１１０は、複数のＴＸ１２０を含み、複数のＴＸ１２０の各々には、前記複数のタスクの各々の実行により生成される複数の送信データの各々が、送信優先度Ｐと共に、格納される。そして、通信コントローラ１１０は、複数のＴＸ１２０の各々の先頭に格納した前記送信データの送信優先度Ｐが高い順に、複数のＴＸ１２０の各々の先頭に格納した前記送信データを、１つの送信ポート１４０を介して順次出力する。
【０１２４】
従来のコントローラは、１つの通信ネットワークに送信する複数のメッセージ（複数のタスクの各々の実行により生成される送信データ）の送信順序を制御するため、例えば、以下の構成を備えている。すなわち、従来のコントローラは、１つの送信ポートに複数の送信キューを対応付け、各送信キューに予め付与された優先順位に従って、各送信キューに格納されたメッセージを、１つの送信ポートを介して、前記１つの通信ネットワークに順次出力していた。各メッセージについて、つまり、各タスクの実行により生成される送信データについて、その優先順位が固定である場合、各タスクを、予め固定の優先順位を付与しておいた複数の送信キューの各々に対応付ける従来のコントローラは、メッセージを優先順位に従って効率的に送信できる。
【０１２５】
しかしながら、従来のコントローラは、低い優先順位の付与された送信キューに対応付けられているタスクの実行により生成される送信データを、高い優先順位の付与された送信キューに対応付けられているタスクの実行により生成される送信データに優先して送信することが困難である。従来のコントローラにおいて、各送信キューに格納されたメッセージは、各送信キューに予め付与された優先順位に従って送信され、各送信キューと各タスクとは予め対応付けられている。従来のコントローラにおいて、低い優先順位の付与された送信キューに対応付けられているタスクの実行により生成される送信データ（メッセージ）は、低い優先順位の付与された送信キューに格納され、高い優先順位の付与された送信キューに格納されているメッセージの後に送信される。
【０１２６】
これに対し、ＰＬＣ１０における通信コントローラ１１０は、複数のＴＸ１２０の各々に格納したメッセージ（各タスクの実行により生成される送信データ）を、複数のＴＸ１２０の各々の優先順位ではなく、各メッセージの送信優先度に従って、送信ポート１４０を介して順次出力する。つまり、ＰＬＣ１０は、前記複数の送信データの各々の出力順序を、前記複数の送信データの各々が格納されているＴＸ１２０に予め付与された優先順位ではなく、前記複数の送信データの各々の送信優先度Ｐによって、制御する。
【０１２７】
したがって、ＰＬＣ１０は、前記複数の送信データの各々の、送信ポート１４０からの出力順序を、前記複数の送信データの各々に付与する送信優先度Ｐによって、柔軟に変更することができるとの効果を奏する。
【０１２８】
特に、ＰＬＣ１０は、複数のタスクの各々の実行により生成される送信データの、送信ポート１４０からの出力順序を、マルチコアプロセッサ１６０ではなく、通信コントローラ１１０によって制御する。したがって、ＰＬＣ１０は、複数のタスクを実行するマルチコアプロセッサ１６０への処理負荷を増大させることなく、複数の送信データを、各送信データの送信優先度Ｐに従って、送信ポート１４０から出力できるとの効果を奏する。
【０１２９】
ＰＬＣ１０において、マルチコアプロセッサ１６０は、複数のタスクの各々を、複数のタスクの各々に予め対応付けられた複数のＣＰＵコア１７０の各々において実行するマルチコアプロセッサである。
【０１３０】
前記の構成によれば、ＰＬＣ１０は、マルチコアプロセッサ１６０を備え、複数のＣＰＵコア１７０の各々は、複数のタスクの各々に予め対応付けられている。したがって、ＰＬＣ１０は、複数のタスクを、例えばマルチタスクで実行する等によって、高速な制御を実現することができるとの効果を奏する。
【０１３１】
ＰＬＣ１０において、複数のＴＸ１２０の各々に格納される送信データと送信優先度Ｐとは、ユーザによって予め対応付けられている。前記の構成によれば、ＰＬＣ１０において、複数のタスクの各々の実行により生成され、複数のＴＸ１２０の各々に格納される複数の送信データの各々と、複数のＴＸ１２０の各々に格納される送信優先度Ｐとは、予めユーザによって対応付けられている。したがって、ＰＬＣ１０は、ユーザが、複数のタスクの各々の実行により生成される複数の送信データの各々について、送信ポート１４０からの出力順序（送信順序）を予め設定しておくことを可能とするとの効果を奏する。
【０１３２】
ＰＬＣ１０において、通信コントローラ１１０は、ハードウェアによる論理回路で構成されている。前記の構成によれば、ＰＬＣ１０において、通信コントローラ１１０は、ＦＰＧＡまたはＡＳＩＣ等のハードウェアによる論理回路で構成される。つまり、ＰＬＣ１０は、複数のタスクを実行するマルチコアプロセッサ１６０ではなく、ハードウェアによる論理回路で構成した通信コントローラ１１０によって、複数のタスクの各々の実行により生成される複数の送信データの各々の送信を制御する。したがって、ＰＬＣ１０は、マルチコアプロセッサ１６０への処理負荷を増大させることなく、ハードウェアによる論理回路で構成した通信コントローラ１１０によって、複数の送信データの各々の送信を制御することができるとの効果を奏する。
【０１３３】
§３．動作例
図１等を用いて説明してきたように、ＰＬＣ１０は、複数のＴＸ１２０を備え、複数のＴＸ１２０の各々の先頭に格納されている送信データの送信優先度Ｐに従って、複数のＴＸ１２０の各々の先頭に格納されている送信データの送信順序を制御する。以下、図４、図５、および、図６を用いて、ＰＬＣ１０（特に、ＣＰＵユニット１００）が実行する処理について、説明していく。
【０１３４】
図４は、ＣＰＵユニット１００が実行する処理の全体概要を示すフロー図である。ＣＰＵコア１７０によるタスクの実行によって生成される送信データは、通常、その送信時刻、データサイズ、送信優先度Ｐ、および、格納されるメインメモリ１５０のアドレスなどが予め決められており、つまり、データ構造が決まっている。そこで、ネットワーク制御部１８０は、送信データがメインメモリ１５０に格納される前に、メインメモリ１５０に格納される予定の送信データについてのディスクリプタを、メインメモリ１５０に格納（つまり、設定）しておく（Ｓ１）。
【０１３５】
ＣＰＵコア１７０は、自コアに対応付けられたタスク（例えば、モーション制御などのタスク）を実行し、実行したタスクによって生成された送信データを、メインメモリ１５０に格納（つまり、設定）する（Ｓ２）。また、ＣＰＵコア１７０は、実行したタスクによって生成された送信データのデータ転送（フィールドネットワーク２０への送信）を、ネットワーク制御部１８０に要求する（Ｓ３）。
【０１３６】
ＣＰＵコア１７０からのデータ転送要求を受け付けたネットワーク制御部１８０は、受け付けたデータ転送要求に対応する送信データの送信を、通信コントローラ１１０に、特に、ＴＸ１２０に要求する（Ｓ４）。ネットワーク制御部１８０は、ＴＸ１２０に対して送信を要求する送信データのディスクリプタ分のポインタ（個数）を更新する。例えば、ネットワーク制御部１８０は、ＴＸ１２０（１）に、３つの送信データの送信を要求する場合、ＴＸ１２０（１）の、３つのディスクリプタポインタを更新する。
【０１３７】
ディスクリプタポインタが更新されたＴＸ１２０は、更新されたディスクリプタポインタの個数に対応するディスクリプタ（ディスクリプタデータ）を、メインメモリ１５０から取得する（Ｓ５）。ＴＸ１２０は、メインメモリ１５０から取得したディスクリプタデータを、ディスクリプタＦＩＦＯ１２３に格納する。例えば、ＴＸ１２０（１）の３つのディスクリプタポインタが更新されると、ＤＭＡＣ１２１（１）は、メインメモリ１５０から、ＴＸ１２０（１）のためのディスクリプタを、３つ、ディスクリプタＦＩＦＯ１２３（１）に転送する。
【０１３８】
ＴＸ１２０（特に、ＤＭＡＣ１２１）は、Ｓ５においてディスクリプタＦＩＦＯ１２３に格納（つまり、転送）したディスクリプタに従って、メインメモリ１５０に格納されている送信データを、データＦＩＦＯ１２２に転送する（Ｓ６）。
【０１３９】
ＴＸ１２０は、Ｓ６においてデータＦＩＦＯ１２２に格納した送信データを送信するために、優先度調停部１３０に送信要求を発行する（Ｓ７）。例えば、時刻／優先度設定部１２４は、データＦＩＦＯ１２２の先頭に格納されている送信データを送信するための送信要求を、ディスクリプタＦＩＦＯ１２３の先頭に格納されているディスクリプタに含まれる送信優先度Ｐと共に、優先度調停部１３０に出力する。
【０１４０】
優先度調停部１３０は、複数のＴＸ１２０の各々からの送信要求を受け付けると、各送信要求の送信優先度Ｐに従って、複数の送信要求の間の調停を実施する（Ｓ８）。すなわち、優先度調停部１３０は、複数のＴＸ１２０の各々のディスクリプタＦＩＦＯ１２３の先頭に格納されているディスクリプタに含まれる送信優先度Ｐが最も高いＴＸ１２０に、送信権を付与する。
【０１４１】
優先度調停部１３０によって送信権を付与されたＴＸ１２０は、データＦＩＦＯ１２２の先頭に格納している送信データを、送信ポート１４０を介してフィールドネットワーク２０へ出力する（Ｓ９）。例えば、優先度調停部１３０によってＴＸ１２０（１）に送信権が付与されると、時刻／優先度設定部１２４（１）は、データＦＩＦＯ１２２（１）の先頭に格納している送信データを、送信ポート１４０を介してフィールドネットワーク２０へ出力する。
【０１４２】
ＴＸ１２０は、データＦＩＦＯ１２２に格納している送信データの送信に合わせて、ディスクリプタＦＩＦＯ１２３に格納しているディスクリプタデータを削除する。例えば、時刻／優先度設定部１２４は、データＦＩＦＯ１２２の先頭に格納している送信データを送信すると、ディスクリプタＦＩＦＯ１２３の先頭に格納しているディスクリプタデータを削除する。その結果、データＦＩＦＯ１２２の先頭から２番目に格納されていた送信データが、データＦＩＦＯ１２２の先頭に、ディスクリプタＦＩＦＯ１２３の先頭から２番目に格納されていたディスクリプタデータが、ディスクリプタＦＩＦＯ１２３の先頭に、格納される。そして、ディスクリプタＦＩＦＯ１２３に格納されているディスクリプタデータが無くなると、ＴＸ１２０は、マルチコアプロセッサ１６０のネットワーク制御部１８０に、データ送信の完了を通知する（Ｓ１０）。
【０１４３】
図５は、図４に示す処理のうち、ＣＰＵユニット１００のネットワーク制御部１８０および複数のＣＰＵコア１７０の各々が実行する処理の全体概要を示すフロー図である。図５における「（Ｎ）」および「（Ｃ）」は、各々、ネットワーク制御部１８０およびＣＰＵコア１７０の各々が実行する処理であることを示す添え字である。
【０１４４】
図５の（Ａ）に示すように、ネットワーク制御部１８０は、図４のＳ１に対応する処理として、例えば、各々が、メインメモリ１５０に格納される予定の複数の送信データの各々に対応する、複数のディスクリプタを、メインメモリ１５０に設定する（Ｓ１（Ｎ））。そして、ネットワーク制御部１８０は、或るタスク（タスク＿ｎ）からの、言い換えれば、その或るタスクを実行したＣＰＵコア１７０からの、送信データの送信要求を受け付けるまで待機しておく（Ｓ３（Ｎ）でＮｏ）。
【０１４５】
図４のＳ３に対応する「ＣＰＵコア１７０（言い換えれば、タスク＿ｎ）からの送信要求」があると（Ｓ３（Ｎ）でＹｅｓ）、ネットワーク制御部１８０は、図４のＳ４に対応する処理として、以下の処理を実行する。すなわち、ネットワーク制御部１８０は、ＣＰＵコア１７０から受け付けたデータ転送要求に対応する送信データの送信を、通信コントローラ１１０に要求する（Ｓ４（Ｎ））。
【０１４６】
その後、ネットワーク制御部１８０は、図４のＳ１０に対応する送信完了通知をＴＸ１２０から受信するまで待機し（Ｓ１０（Ｎ）でＮｏ）、送信完了通知を受信すると（Ｓ１０（Ｎ）でＹｅｓ）、処理を狩猟する。
【０１４７】
図５の（Ｂ）に示すように、ＣＰＵコア１７０（言い換えれば、ＣＰＵコア１７０によって実行されるタスク）は、図４のＳ２およびＳ３の各々に対応する処理として、以下の処理を実行する。すなわち、ＣＰＵコア１７０は、フィールドネットワーク２０に送信する送信データを生成し、生成した送信データを、メインメモリ１５０に格納（つまり、設定）する（Ｓ２（Ｃ））。そして、ＣＰＵコア１７０は、メインメモリ１５０に設定した送信データを送信するよう、ネットワーク制御部１８０に要求し、つまり、送信要求をネットワーク制御部１８０に発行する（Ｓ３（Ｃ））。
【０１４８】
図６は、図４に示す処理のうち、ＣＰＵユニット１００の通信コントローラ１１０が実行する処理の全体概要を示すフロー図である。図６における「（Ｔ）」は、通信コントローラ１１０が実行する処理であることを示す添え字である。
【０１４９】
通信コントローラ１１０（特に、複数のＴＸ１２０の各々）は、図４のＳ４に対応する「ＣＰＵコア１７０からの送信要求（データ転送要求）」として、ディスクリプタポインタの更新があるかを判定する（Ｓ４（Ｔ））。複数のＴＸ１２０の各々は、ディスクリプタポインタの更新があるまで待機しておく（Ｓ４（Ｔ）でＮｏ）。
【０１５０】
ディスクリプタポインタの更新があると判定すると（Ｓ４（Ｔ）でＹｅｓ）、ＴＸ１２０（特に、ＤＭＡＣ１２１）は、図４のＳ５およびＳ６の各々に対応する処理として、以下の処理を実行する。すなわち、ＤＭＡＣ１２１は、メインメモリ１５０からディスクリプタデータを取得し、取得したディスクリプタデータを、ディスクリプタＦＩＦＯ１２３に格納する（Ｓ５（Ｔ））。そして、ＤＭＡＣ１２１は、ディスクリプタＦＩＦＯ１２３に格納したディスクリプタに従って、メインメモリ１５０に格納されている送信データを、データＦＩＦＯ１２２に転送する（Ｓ６（Ｔ））。
【０１５１】
ＴＸ１２０（例えば、時刻／優先度設定部１２４）は、ディスクリプタＦＩＦＯ１２３の先頭に格納されているディスクリプタの示す送信時刻が経過したかを判定し（Ｓ６１）、送信時刻が経過するまで待機しておく（Ｓ６１でＮｏ）。ディスクリプタＦＩＦＯ１２３の先頭に格納されているディスクリプタの示す送信時刻が経過したと判定すると（Ｓ６１でＹｅｓ）、ＴＸ１２０（例えば、時刻／優先度設定部１２４）は、図４のＳ７に対応する処理として、以下の処理を実行する。すなわち、ＴＸ１２０は、データＦＩＦＯ１２２の先頭に格納されている送信データを送信するための送信要求を、ディスクリプタＦＩＦＯ１２３の先頭に格納されているディスクリプタに含まれる送信優先度Ｐと共に、優先度調停部１３０に出力する（Ｓ７（Ｔ））。
【０１５２】
ＴＸ１２０（例えば、時刻／優先度設定部１２４）は、図４のＳ８に対応する「優先度調停部１３０からの送信権」を獲得できたかを判定し（Ｓ８（Ｔ））、「優先度調停部１３０からの送信権」を獲得できるまで待機しておく（Ｓ８（Ｔ）でＮｏ）。「優先度調停部１３０からの送信権」を獲得すると（Ｓ８（Ｔ）でＹｅｓ）、ＴＸ１２０（例えば、時刻／優先度設定部１２４）は、図４のＳ９に対応する処理として、以下の処理を実行する。すなわち、ＴＸ１２０は、データＦＩＦＯ１２２の先頭に格納している送信データを、送信ポート１４０を介してフィールドネットワーク２０へ出力する（Ｓ９（Ｔ））。
【０１５３】
ＴＸ１２０は、ネットワーク制御部１８０から指定されたディスクリプタ数分の送信を終了したかを判定し、つまり、ディスクリプタＦＩＦＯ１２３に格納されているディスクリプタデータが無いかを判定する（Ｓ９１）。ＴＸ１２０は、ネットワーク制御部１８０から指定されたディスクリプタ数分の送信を終了していないと判定すると（Ｓ９１でＮｏ）、つまり、ディスクリプタＦＩＦＯ１２３に格納されているディスクリプタデータがあると、Ｓ５（Ｔ）に戻って処理を繰り返す。
【０１５４】
ＴＸ１２０は、ネットワーク制御部１８０から指定されたディスクリプタ数分の送信を終了したと判定すると（Ｓ９１でＹｅｓ）、つまり、ディスクリプタＦＩＦＯ１２３に格納されているディスクリプタデータがなくなると、図４のＳ１０に対応する処理として、以下の処理を実行する。すなわち、Ｘ１２０は、マルチコアプロセッサ１６０に、データ送信の完了を通知する（Ｓ１０（Ｔ））。
【０１５５】
これまでに図４および図６を用いて説明してきた、ＰＬＣ１０の実行する処理、特に、通信コントローラ１１０の実行する処理は、以下のように整理することができる。すなわち、通信コントローラ１１０が実行する処理（制御方法）は、マルチコアプロセッサ１６０による複数のタスクの各々の実行により生成される複数の送信データの各々を、複数の送信データの各々の送信優先度Ｐと共に、複数のＴＸ１２０の各々に格納する格納ステップ（Ｓ６（Ｔ））と、前記格納ステップにて、複数のＴＸ１２０の各々に送信優先度Ｐと共に格納した送信データについて、複数のＴＸ１２０各々の先頭に格納した送信データの送信優先度Ｐが高い順に、複数のＴＸ１２０の各々の先頭に格納した送信データを、１つの送信ポート１４０を介して順次出力する送信ステップ（Ｓ７（Ｔ）からＳ９（Ｔ）に対応）と、を含む。
【０１５６】
前記の方法によれば、前記制御方法において、通信コントローラ１１０は複数のＴＸ１２０を含み、前記制御方法は、複数のＴＸ１２０の各々に、複数のタスクの各々の実行により生成される複数の送信データの各々を、送信優先度Ｐと共に、格納する。そして、前記制御方法は、複数のＴＸ１２０の各々の先頭に格納した送信データの送信優先度Ｐが高い順に、複数のＴＸ１２０の各々の先頭に格納した送信データを、１つの送信ポート１４０を介して順次出力する。
【０１５７】
従来のコントローラは、１つの通信ネットワークに送信する複数のメッセージ（複数のタスクの各々の実行により生成される送信データ）の送信順序を制御するため、例えば、以下の構成を備えている。すなわち、従来のコントローラは、１つの送信ポートに複数の送信キューを対応付け、各送信キューに予め付与された優先順位に従って、各送信キューに格納されたメッセージを、前記１つの送信ポートを介して、前記１つの通信ネットワークに順次出力していた。各メッセージについて、つまり、各タスクの実行により生成される送信データについて、その優先順位が固定である場合、各タスクを、予め固定の優先順位を付与しておいた複数のＴＸ１２０の各々に対応付ける従来のコントローラは、メッセージを優先順位に従って効率的に送信できる。
【０１５８】
しかしながら、従来のコントローラは、低い優先順位の付与されているＴＸ１２０に対応付けられたタスクの実行により生成される送信データ（すなわち、メッセージ）を、高い優先順位の付与されているＴＸ１２０に対応付けられたタスクの実行により生成される送信データに優先して送信することが困難である。従来のコントローラにおいて、各送信キューに格納されたメッセージは、各送信キューに予め付与された優先順位に従って送信され、各送信キューと各タスクとは予め対応付けられている。従来のコントローラにおいて、低い優先順位の付与されたＴＸ１２０に対応付けられているタスクの実行により生成される送信データ（メッセージ）は、低い優先順位の付与されたＴＸ１２０に格納され、高い優先順位の付与されたＴＸ１２０に格納されているメッセージの後に送信される。
【０１５９】
これに対し、前記制御方法は、複数のＴＸ１２０の各々に格納したメッセージ（各タスクの実行により生成される送信データ）を、複数のＴＸ１２０の各々の優先順位ではなく、各メッセージの送信優先度Ｐに従って、送信ポート１４０を介して順次出力する。つまり、前記制御方法は、複数の送信データの各々の出力順序を、複数の送信データの各々が格納されている複数のＴＸ１２０の各々に予め付与された優先順位ではなく、複数の送信データの各々の送信優先度Ｐによって、制御する。
【０１６０】
したがって、前記制御方法は、複数の送信データの各々の、送信ポート１４０からの出力順序を、複数の送信データの各々に付与する送信優先度Ｐによって、柔軟に変更することができるとの効果を奏する。
【０１６１】
特に、前記制御方法は、マルチコアプロセッサ１６０ではなく、通信コントローラ１１０によって実行される。したがって、前記制御方法は、複数のタスクを実行するマルチコアプロセッサ１６０への処理負荷を増大させることなく、複数の送信データを、各送信データの送信優先度Ｐに従って、１つの送信ポート１４０から出力できるとの効果を奏する。
【０１６２】
（緊急度の高い送信データの優先的送信）
特定のコアまたは特定のタスクに割り当てられていない送信キュー１２０（つまり、ＴＸ１２０（０））を備えることによって、ＰＬＣ１０は、緊急度の高い送信データを、他の送信データに優先して送信することができる。以下に、ＰＬＣ１０が送信キュー１２０を備えることによって可能となる「緊急度の高い送信データの優先的送信」について、図７および図８を用いて、その詳細を説明する。
【０１６３】
図７は、ＰＬＣ１０について、ＴＸ１２０（０）を設けなかった場合に生じる状況を説明する図である。例えば、第１コア１７０（１）によるタスクＴ（１−１）の実行によって生成される送信データＤ１−１は、「送信優先度Ｐ：１」が付与されて、ＴＸ１２０（１）に格納される。同様に、第２コア１７０（２）によるタスクＴ（２−１）の実行によって生成される送信データＤ２−１は、「送信優先度Ｐ：１」が付与されて、ＴＸ１２０（２）に格納される。
【０１６４】
第２タスクＴ（２−１）の実行後に、第２コア１７０（２）によって第２タスクＴ（２−２）が実行された場合、第２タスクＴ（２−２）の実行によって生成された送信データＤ２−２を、ＴＸ１２０（２）に格納すると、図７に示す事態が発生する。
【０１６５】
すなわち、ＦＩＦＯ方式を採用するＴＸ１２０（２）には、第２タスクＴ（２−１）の実行により生成された送信データＤ２−１と、第２タスクＴ（２−２）の実行により生成された送信データＤ２−２とが、この順に格納される。そして、ＴＸ１２０（２）の先頭に送信データＤ２−１を、ＴＸ１２０（２）の先頭から２番目に送信データＤ２−２を格納した場合、ＰＬＣ１０は、送信データＤ２−２を送信データＤ２−１よりも先に送信することができない。
【０１６６】
ＰＬＣ１０は、複数のＴＸ１２０の各々の先頭に格納した送信データの送信優先度Ｐが高い順に、複数のＴＸ１２０の各々の先頭に格納された送信データを順次送信するため、図７に示す例では、以下の順に送信データＤ１−１、Ｄ２−１、Ｄ２−２を送信する。すなわち、ＰＬＣ１０は、ＴＸ１２０（１）の先頭に格納された送信データＤ１−１の「送信優先度Ｐ：１」と、ＴＸ１２０（２）の先頭に格納された送信データＤ２−１の「送信優先度Ｐ：１」とを比較する。「付与されている送信優先度Ｐが同じであれば、ＴＸ１２０（１）に格納されているデータを、ＴＸ１２０（２）に格納されているデータよりも優先して送信する」との前提の下では、ＰＬＣ１０は、先ず、送信データＤ１−１を送信する。次に、ＰＬＣ１０は、ＴＸ１２０（１）に格納されている送信データが無いので、ＴＸ１２０（２）の先頭に格納された送信データＤ２−１を送信する。そして、ＰＬＣ１０は、送信データＤ２−１の送信後に、送信データＤ２−２を送信する。
【０１６７】
以上に説明した通り、送信データＤ２−２を、送信データＤ２−１の後に、ＴＸ１２０（２）に格納した場合、送信データＤ２−２の送信優先度Ｐが評価されるのは、送信データＤ２−１の送信優先度Ｐの評価の後になる。つまり、送信データＤ２−２を、送信データＤ２−１の後に、ＴＸ１２０（２）に格納した場合、送信データＤ２−２の送信優先度Ｐを如何に高く設定しても、送信データＤ２−２の送信は、送信データＤ２−１の送信の後になる。図７に示すように、第２コア１７０（２）で緊急度の高い（「送信優先度Ｐ：０」を付与する）送信データＤ２−２が発生しても、送信データＤ２−２を、第２コア１７０（２）に対応付けられたＴＸ１２０（２）に格納すると、送信データＤ２−２の送信は遅れる。
【０１６８】
そこで、ＰＬＣ１０は、特定のコアまたは特定のタスクに割り当てられていないＴＸ１２０（０）を備え、緊急度の高い送信データはＴＸ１２０（０）に格納することによって、他の送信データに優先して、緊急度の高い送信データを送信する。以下、図８を用いて、ＰＬＣ１０が緊急度の高い送信データを他の送信データに優先して送信する方法について、その詳細を説明する。
【０１６９】
図８は、ＰＬＣ１０について、ＴＸ１２０（０）を設けることによって可能となる送信順序を説明する図である。ＴＸ１２０（０）は、複数のＣＰＵコア１７０の内の特定のＣＰＵコア１７０、または、複数のタスクＴ（１）からＴ（ｎ）の内の特定のタスクＴ（ｘ）には対応付けられていない。ＴＸ１２０（０）には、複数のＣＰＵコア１７０の内の任意のＣＰＵコア１７０によって生成された送信データが格納され、また、任意のタスクの実行により生成された送信データが格納される。言い換えれば、ＴＸ１２０（０）は、任意のＣＰＵコア１７０が、送信データの送信のためのバッファとして利用可能であり、また、任意のタスクが、送信データの送信のためのバッファとして利用可能である。
【０１７０】
ＴＸ１２０（０）に格納される送信データに付与される送信優先度Ｐは、ＴＸ１２０（０）以外のＴＸ１２０（つまり、ＴＸ１２０（１）からＴＸ１２０（ｎ））のいずれかに格納される送信データに付与される送信優先度Ｐよりも高い。例えば、ＴＸ１２０（０）に格納される送信データに付与される送信優先度Ｐは「０」であり、ＴＸ１２０（０）以外のＴＸ１２０に格納される送信データに付与される送信優先度Ｐは「１」以上である。優先度調停部１３０は、「送信優先度Ｐ：０」を、最も高い送信優先度Ｐと判定する。以下、「送信データＤ２−１の後に、第２コア１７０（２）によって生成された送信データＤ２−２」に、「送信優先度Ｐ：０」を付してＴＸ１２０（０）に格納することで、ＰＬＣ１０が、送信データＤ２−２を他の送信データに優先して送信する例を説明する。
【０１７１】
図８に示す例においては、図７に示した例と同様に、第１コア１７０（１）によるタスクＴ（１−１）の実行によって生成される送信データＤ１−１は、「送信優先度Ｐ：１」が付与されて、ＴＸ１２０（１）に格納される。また、第２コア１７０（２）によるタスクＴ（２−１）の実行によって生成される送信データＤ２−１は、「送信優先度Ｐ：１」が付与されて、ＴＸ１２０（２）に格納される。そして、第２タスクＴ（２−１）の実行後に、第２コア１７０（２）によって第２タスクＴ（２−２）が実行され、第２タスクＴ（２−２）の実行によって送信データＤ２−２が生成された点までは、図８に示す例は、図７に示した例と同様である。
【０１７２】
緊急度の高いデータである送信データＤ２−２は、図７の例では、「送信優先度Ｐ：０」を付与されてＴＸ１２０（２）に格納されたが、図８に示す例では、「送信優先度Ｐ：０」を付与されてＴＸ１２０（０）に格納される。
【０１７３】
優先度調停部１３０は、ＴＸ１２０（０）、ＴＸ１２０（１）、および、ＴＸ１２０（２）の各々の先頭に格納されている送信データに付与されている送信優先度Ｐを比較し、「送信優先度Ｐ：０」を、最も高い送信優先度Ｐと判定する。そして、優先度調停部１３０は、この判定結果に基づいて、ＴＸ１２０（０）に送信権を付与し、ＴＸ１２０（０）は、データＦＩＦＯ１２２（０）の先頭に格納されている送信データＤ２−２を、送信ポート１４０を介してフィールドネットワーク２０へ出力する。
【０１７４】
送信データＤ２−２の送信後、優先度調停部１３０は、ＴＸ１２０（１）およびＴＸ１２０（２）の各々の先頭に格納されている送信データに付与されている送信優先度Ｐを比較する。「付与されている送信優先度Ｐが同じであれば、ＴＸ１２０（１）に格納されているデータを、ＴＸ１２０（２）に格納されているデータよりも優先して送信する」との前提の下では、優先度調停部１３０は、ＴＸ１２０（１）に送信権を付与する。ＴＸ１２０（１）は、データＦＩＦＯ１２２（１）の先頭に格納されている送信データＤ１−１を送信する。
【０１７５】
送信データＤ１−１の送信後、優先度調停部１３０は、ＴＸ１２０（２）に送信権を付与し、ＴＸ１２０（２）は、データＦＩＦＯ１２２（２）の先頭に格納されている送信データＤ２−１を、送信ポート１４０を介してフィールドネットワーク２０へ出力する。
【０１７６】
したがって、ＰＬＣ１０は、緊急性の高い送信データを、「送信優先度Ｐ：０」を付与してＴＸ１２０（０）に格納することにより、ＴＸ１２０（０）以外のＴＸ１２０に格納した送信データに優先して、ＴＸ１２０（０）に格納した送信データを送信する。
【０１７７】
これまでに図８を用いて説明してきたように、複数のＴＸ１２０は、ＴＸ１２０（１）からＴＸ１２０（ｎ）までの複数のＴＸ１２０（対応送信キュー）と、ＴＸ１２０（０）（非対応送信キュー）と、を含む。ＴＸ１２０（１）からＴＸ１２０（ｎ）までの複数のＴＸ１２０は、各々が、複数のタスクの各々に予め対応付けられている。ＴＸ１２０（１）からＴＸ１２０（ｎ）までの複数のＴＸ１２０の各々には、予め対応付けられたタスクの実行により生成される送信データが、送信優先度Ｐと共に、格納される。これに対し、ＴＸ１２０（０）は、複数のタスクのいずれにも予め対応付けられていない。ＴＸ１２０（０）には、複数のタスクのいずれかの実行により生成される送信データが、ＴＸ１２０（１）からＴＸ１２０（ｎ）までの複数のＴＸ１２０の各々に送信データと共に格納される送信優先度Ｐのいずれよりも高い送信優先度Ｐと共に、格納される。
【０１７８】
前記の構成によれば、ＰＬＣ１０における通信コントローラ１１０は、「各々が、複数のタスクの各々に対応付けられた、ＴＸ１２０（１）からＴＸ１２０（ｎ）までのＴＸ１２０」に加えて、ＴＸ１２０（０）をさらに含んでいる。そして、ＴＸ１２０（０）には、複数のタスクのいずれかの実行により生成される送信データが、ＴＸ１２０（１）からＴＸ１２０（ｎ）までの各々に送信データと共に格納される送信優先度Ｐのいずれよりも高い送信優先度Ｐと共に、格納される。
【０１７９】
ＰＬＣ１０は、ＴＸ１２０（１）からＴＸ１２０（ｎ）までの複数のＴＸ１２０の各々に、予め対応付けられたタスクの実行により生成される送信データを格納することによって、複数の送信データの各々の格納先の選択に係る処理を不要とし、または、抑制できるという効果を奏する。
【０１８０】
ここで、前述の通り、通信コントローラ１１０は、複数のＴＸ１２０の各々の先頭に格納された送信データの送信優先度Ｐが高い順に、複数のＴＸ１２０の各々の先頭に格納された送信データを、送信ポート１４０を介して順次出力する。例えば、通信コントローラ１１０は、ＴＸ１２０（１）の先頭に格納された送信データＤ１−１の送信優先度Ｐ：１と、ＴＸ１２０（２）の先頭に格納された送信データＤ２−１の送信優先度Ｐ：２とを比較する。そして、通信コントローラ１１０は、送信優先度Ｐ：１が送信優先度Ｐ：２よりも高いので、先ず、送信データＤ１−１を送信する。
【０１８１】
そのため、送信データＤ１−１およびＤ２−１の後に生成された送信データＤ２−２に、送信優先度Ｐ：１よりも高い送信優先度Ｐ：０を付与したとしても、送信データＤ２−２をＴＸ１２０（１）またはＴＸ１２０（２）に格納した場合、以下の事態が発生する。
【０１８２】
すなわち、ＴＸ１２０（１）およびＴＸ１２０（２）には、各々、既に送信データＤ１−１およびＤ２−１が格納されているため、通信コントローラ１１０は、先ず、送信データＤ１−１の送信優先度Ｐ：１と送信データＤ２−１の送信優先度Ｐ：２とを比較する。そして、通信コントローラ１１０は、送信優先度Ｐ：２よりも高い送信優先度Ｐ：１の送信データＤ１−１を送信する。つまり、送信データＤ２−２をＴＸ１２０（１）またはＴＸ１２０（２）に格納した場合、通信コントローラ１１０は、送信データＤ２−２を送信データＤ１−１よりも早く送信することができない。
【０１８３】
そこで、ＰＬＣ１０における通信コントローラ１１０は、ＴＸ１２０（１）およびＴＸ１２０（２）に加えて、ＴＸ１２０（０）をさらに含み、ＴＸ１２０（０）に、送信データＤ２−２を、送信優先度Ｐ：０と共に格納する。
【０１８４】
通信コントローラ１１０は、ＴＸ１２０（０）、ＴＸ１２０（１）、および、ＴＸ１２０（２）の各々の先頭に格納された送信データの送信優先度Ｐを比較する。そして、通信コントローラ１１０は、ＴＸ１２０（０）、ＴＸ１２０（１）、および、ＴＸ１２０（２）の各々の先頭に格納された送信データの送信優先度Ｐが高い順に、ＴＸ１２０（０）、ＴＸ１２０（１）、および、ＴＸ１２０（２）の各々の先頭に格納された送信データを、送信ポート１４０を介して順次出力する。
【０１８５】
具体的には、通信コントローラ１１０は、ＴＸ１２０（１）の先頭に格納された送信データＤ１−１、ＴＸ１２０（２）の先頭に格納された送信データＤ２−１、および、ＴＸ１２０（０）の先頭に格納された送信データＤ２−２の各々について、送信優先度Ｐを比較する。送信データＤ１−１の送信優先度Ｐは「１」、送信データＤ２−１の送信優先度Ｐは「２」、送信データＤ２−２の送信優先度Ｐは「０」であるから、通信コントローラ１１０は、送信データＤ２−２、Ｄ１−１、Ｄ２−１を、この順で、送信ポート１４０を介して順次出力する。
【０１８６】
したがって、ＰＬＣ１０における通信コントローラ１１０は、複数のタスクの各々の実行により生成される複数の送信データの各々について、生成された順序から独立させて、各送信データの送信優先度Ｐに従って順次出力することができるとの効果を奏する。
【０１８７】
（ユーザによる、タスクと送信優先度との対応付け）
図９は、ユーザがタスクと送信優先度と対応付ける例を説明する図である。図９の（Ａ）に示すように、ユーザは、ツール６０を用いて、複数のタスクの間に優先順位を、より正確には、複数のタスクの各々の実行において生成される送信データの送信優先度Ｐを、設定することができる。例えば、ユーザは、ツール６０を用いて、ＰＬＣ１０に、複数のタスクの各々に割り当てる、「ＩＯ制御、ユーザプログラム、モーション演算プログラム、および、システムサービス」の各々について、優先順位を設定することができる。
【０１８８】
図９の（Ｂ）に示すように、ＰＬＣ１０は、接続ケーブル５０を介して、ツール６０に接続し、ツール６０の表示画面に、図９の（Ａ）に例示するような、複数のタスクの各々の優先順位を示す情報を表示させる。ＰＬＣ１０は、複数のタスクの各々の優先順位について、ｄｅｆａｕｌｔの値（例えば、工場出荷段階において設定される、一般的に推奨される優先順位の値）を、ツール６０の表示画面に表示させてもよい。ユーザは、表示画面に表示されたｄｅｆａｕｌｔの値を参考に、複数のタスクの各々について、優先順位を設定する。
【０１８９】
ユーザが複数のタスクの各々について設定した優先順位は、複数のタスクの各々の実行により生成される送信データの送信優先度Ｐに反映される。言い換えれば、ユーザが複数のタスクの各々について設定した優先順位は、複数のタスクの各々の実行により生成される送信データの送信優先度Ｐに対応付けられる。
【０１９０】
例えば、ユーザが複数のタスクの各々について設定した優先順位は、複数のタスクの各々の実行により生成される送信データが、ＴＸ１２０（０）以外のＴＸ１２０に格納される時に付与される送信優先度Ｐに反映される。或るタスクＴ（ｘ）にユーザが優先順位として「ｙ」を設定すると、ＰＬＣ１０は、或るタスクＴ（ｘ）の実行により生成された送信データを、ＴＸ１２０（１）からＴＸ１２０（ｎ）のいずれかに格納する場合、その送信データの送信優先度Ｐの値を「ｙ」とする。
【０１９１】
§４．変形例
これまで、ＰＬＣ１０が、マルチコアプロセッサ１６０を備える例を説明してきたが、ＰＬＣ１０は、マルチコアプロセッサ１６０の代わりに、シングルコアプロセッサを備えてもよい。ＰＬＣ１０は複数のタスクを実行すればよく、それらの複数のタスクの各々が、ＴＸ１２０（１）からＴＸ１２０（ｎ）の各々に対応付けられていればよい。
【０１９２】
すなわち、ＰＬＣ１０は、シングルコアプロセッサを備え、時分割により複数のタスクを並行して実行してもよく、つまり、マルチタスクで処理を実行してもよい。ＰＬＣ１０は、シングルコアを採用し、マルチタスクについて、或るタスクの実行中は他のタスクを実行しない「並行実行」を行なってもよい。
【０１９３】
ただし、ＰＬＣ１０は、マルチコアプロセッサ１６０を備え、複数のタスクの各々を複数のＣＰＵコアの各々で同時に並行して実行することによって、すなわち、マルチタスクで処理を実行することによって、タスクの処理能力の向上を図ることができる。
【０１９４】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【０１９５】
１０  ＰＬＣ（コントローラ）
１１０  通信コントローラ（通信制御部）
１２０  ＴＸ（送信キュー）
１２０（０）  ＴＸ（非対応送信キュー）
１２０（１）  ＴＸ（対応送信キュー）
１２０（２）  ＴＸ（対応送信キュー）
１２０（ｎ）  ＴＸ（対応送信キュー）
１４０  送信ポート
１６０  マルチコアプロセッサ（プロセッサ）
１７０  ＣＰＵコア
Ｓ６（Ｔ）  格納ステップ
Ｓ７（Ｔ）  送信ステップ
Ｓ８（Ｔ）  送信ステップ
Ｓ９（Ｔ）  送信ステップ
【図１】
2020071520.tif 000003
【図２】
2020071520.tif 000004
【図３】
2020071520.tif 000005
【図４】
2020071520.tif 000006
【図５】
2020071520.tif 000007
【図６】
2020071520.tif 000008
【図７】
2020071520.tif 000009
【図８】
2020071520.tif 000010
【図９】
2020071520.tif 000011
【図１０】
2020071520.tif 000012