説明

プログラマブルコントローラ、および、通信制御方法

【課題】スイッチを介して制御データを伝送するときに、その伝送効率およびリアルタイム性を向上させること。
【解決手段】複数のモジュール1と、モジュール1間通信を中継するスイッチ2とを含めて構成されるプログラマブルコントローラ9であって、構成制御部31は、複数の周期的フローについて、その送信元と、送信先と、周期とが入力されると、送信元および周期の組み合わせが一致する複数の周期的フローと、送信先および周期の組み合わせが一致する複数の周期的フローとをそれぞれ衝突するフロー群として抽出し、衝突するフロー群における送信タイミングについて、互いに異なるタイミングを計算して、切替順序データ35および送受信順序データ42に書き出す。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラマブルコントローラ、および、通信制御方法の技術に関する。
【背景技術】
【0002】
プログラマブルコントローラは、接続される制御対象機器に対して、制御用データの読み書きを行う装置である。制御対象機器として、例えば、鉄鋼の圧延における高速に流れる鉄を圧縮する複数のローラーが挙げられる。鉄鋼の形状を高精度で作成するためには、プログラマブルコントローラの制御処理について、ミリ秒単位の高いリアルタイム性が要求される。
【0003】
プログラマブルコントローラは、製鉄プラントの1000点以上のセンサやアクチュエータとデータをやり取りするI/Oモジュール、制御のための計算を行うプロセッサモジュール、コンソール計算機と通信を行うネットワークモジュールなど複数のモジュールから構成されている。複雑な制御を行う場合の並列制御のためや故障時のバックアップのために、同一種類のモジュールを複数個内蔵するプログラマブルコントローラも存在する。
【0004】
それらのモジュールは、バックボードと呼ばれる板状の装置に並べて差し込み固定することにより、相互接続される。このバックボードにはパラレルバスが敷設されており、モジュールはその同一のパラレルバスに並列に接続されることが多かった。
しかし、単一パラレルバスによる接続は、拡張性や保守性が悪い、ある2つのモジュール間で通信中は別のモジュールは通信をしたくても待たされてしまうためにリアルタイム性が低い、などの問題がある。
【0005】
そのため、特許文献1,2にあるようなモジュールにシリアルリンクの入出力を設け、別途設けたシリアルリンクのスイッチを介してモジュールのシリアルリンクを相互接続する構成が考えられてきた。シリアルリンクはパラレルバスに比べて高速化が容易であり、線の本数も少ないので保守性がよい。また、スイッチによる相互接続によれば、ある2つのモジュール間が通信中であっても別のモジュール間での通信を並列で行うことが可能となる。
【0006】
シリアルリンク上でリアルタイム通信を行っている例として国際標準のネットワークであるPROFInetがある。これはタイムスロット制御を用いた方式である。一定の時間間隔で区切ったタイムスロットで複数のモジュール間でネットワークを共有するものである。
各モジュールについてネットワークにデータを出力してよいタイムスロットが決められており、各モジュールはそのタイムスロットになったときにのみデータを出力する。タイムスロットは一定の周期で一周するので、その周期の間にはデータが必ず送受信できるので、リアルタイム性が保証される。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2010−152872号公報
【特許文献2】特開2008−257706号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
特許文献1,2で開示されているシリアルリンクとスイッチによりモジュールが接続されたシステムでは、データを送信するときにそのデータをどのモジュールに送りたいのかという宛先情報をヘッダとして付加してパケットの形で送信する。スイッチが一度その送信されたパケットを受信し、宛先情報を見てスイッチの接続を切り替えて宛先のモジュールに対してパケットを送信する。
【0009】
しかし、このパケット方式では、プログラマブルコントローラで扱われる制御データのデータ量(オン/オフの入出力情報ならば1ビット、アナログの情報でも2バイト)に対して、そのデータごとに付されるヘッダのデータ量が多くなってしまい、伝送効率が悪く、リアルタイム性も低くなる。
【0010】
また、PROFInetのようにタイムスロット制御を用いてリアルタイム性を保証する方式では、定められたタイムスロットが来ないとデータの送信ができず、最大タイムスロットが一周する周期分送信が待たされる可能性があり、応答速度の低下やスループットの低下の問題がある。
【0011】
そこで、本発明は、前記した問題を解決し、スイッチを介して制御データを伝送するときに、その伝送効率およびリアルタイム性を向上させることを、主な目的とする。
【課題を解決するための手段】
【0012】
前記課題を解決するために、本発明は、複数の通信ノードと、前記通信ノード間通信を中継するスイッチとを含めて構成されるプログラマブルコントローラであって、
前記各通信ノードが、他通信ノードとの間で周期的にデータを通信し続ける周期的フローごとに、その周期的フローの周期と、その周期からの送信タイミングと、通信相手の他通信ノードとを対応づける送受信順序データを自通信ノード内の記憶手段に格納しており、その送受信順序データに従って、他通信ノードとの間で前記周期的フローを周期から前記送信タイミングだけずらした時刻に通信し、
前記スイッチが、前記周期的フローを中継するための前記スイッチの設定として、前記周期的フローの周期と、その周期からの前記送信タイミングと、前記周期的フローの送信元および送信先とを対応づける切替順序データを記憶手段に格納しており、その切替順序データに従って、前記周期的フローの送信元の前記通信ノードに接続される入力端子と、前記周期的フローの送信先の前記通信ノードに接続される出力端子とを、前記周期的フローの周期から前記送信タイミングだけずらした時刻に接続するクロスバスイッチとして動作し、
前記プログラマブルコントローラの構成制御部が、複数の前記周期的フローについて、その送信元と、送信先と、周期とが入力されると、送信元および周期の組み合わせが一致する複数の前記周期的フローと、送信先および周期の組み合わせが一致する複数の前記周期的フローとをそれぞれ衝突するフロー群として抽出し、前記衝突するフロー群における前記送信タイミングについて、互いに異なるタイミングを計算して、前記切替順序データおよび前記送受信順序データに書き出すことを特徴とする。
その他の手段は、後記する。
【発明の効果】
【0013】
本発明によれば、スイッチを介して制御データを伝送するときに、その伝送効率およびリアルタイム性を向上させることができる。
【図面の簡単な説明】
【0014】
【図1】本発明の一実施形態に関するプログラマブルコントローラを示す構成図である。
【図2】本発明の一実施形態に関するスイッチの切り替え機構(SW)を示す説明図である。
【図3】本発明の一実施形態に関するプログラマブルコントローラの内部のハードウェア構成を示す構成図である。
【図4】本発明の一実施形態に関する図3の構成処理部および送受信部の詳細を示す構成図である。
【図5】本発明の一実施形態に関する2つのフローが衝突する事例を示す説明図である。
【図6】本発明の一実施形態に関する図5の2つのフローについて、タイミングをずらすことにより衝突回避する事例を示す説明図である。
【図7】本発明の一実施形態に関する通信制御の全体処理を示すフローチャートである。
【図8】本発明の一実施形態に関するオンデマンド通信調停タスクおよび受信タスクを示すフローチャートである。
【図9】本発明の一実施形態に関する周期送信データの受信処理を示すフローチャートである。
【図10】本発明の一実施形態に関する切替順序データの構築処理を示すフローチャートである。
【図11】本発明の一実施形態に関する送受信順序データの配信処理を示すフローチャートである。
【図12】本発明の一実施形態に関する周期送信タスクの生成処理により生成されるタスクを示すフローチャートである。
【図13】本発明の一実施形態に関する生死監視タスクの生成処理により生成されるタスクを示すフローチャートである。
【図14】本発明の一実施形態に関するスイッチ設定タスクの生成処理により生成されるタスクを示すフローチャートである。
【発明を実施するための形態】
【0015】
以下、本発明の一実施形態を、図面を参照して詳細に説明する。
【0016】
図1(a)は、プログラマブルコントローラ9を示す構成図である。プログラマブルコントローラ9は、通信装置(ノード)としての各モジュール1(p0,p1,io0,io1)が、スイッチ2に接続される構成である。各モジュール1は、自装置からスイッチ2に接続されるシリアルライン(両方向の通信対応)を介して、他のモジュール1と通信する。
なお、モジュール1ごとに、そのモジュールを特定するためのIDが割り当てられている。pから始まるモジュールIDはプロセッサモジュールを示し、ioから始まるモジュールIDはI/O(Input/Output)モジュールを示す。I/Oモジュール1(io0,io1)には、それぞれ制御対象機器7(センサ、アクチュエータなど)が接続されている。
例えば、制御対象機器7(センサ)から取得したデータは、そのセンサに接続されるモジュール1(io0)からスイッチ2を経由して、モジュール1(p1)へと出力される(矢印を参照)。
【0017】
図1(b)は、プログラマブルコントローラ9の外観図である。スイッチ2のバックボード(基盤)上に、スイッチ2の切り替え機構(SW)と、そのSWへの入出力端子が接続されるシリアルリンクとが形成される。各モジュール1を各シリアルリンクのコネクタに差し込むことにより、各モジュール1とスイッチ2とを通信可能に相互接続する。
【0018】
図2は、スイッチ2の切り替え機構(SW)を示す説明図である。この図2では、クロスバスイッチとして、上部に入力端子群を配置し、左部に出力端子群を配置している。データ信号線として、各入力端子からは縦線が示されており、各出力端子からは横線が示されており、縦線と横線とで格子状をなしている。
これらの端子群には端子名(A,p0など)が記載されており、1つの端子(例えば、「p0」の端子)が1つのモジュール1(例えば、図1のモジュール1「p0」)に対応する。なお、端子名「A」は、調整信号の伝達用端子であり、どのモジュール1にも対応していない。
【0019】
例えば、入力端子「io0」の縦線と、出力端子「p1」の横線との交点箇所を「ON」にすることにより、モジュール1「io0」からモジュール1「p1」への送信が可能になる(図1(a)の矢印参照)。一方、「ON」になっていない交点箇所は、送信を許可しない箇所である。
以下の説明では、スイッチの設定を「SW(入力端子ID,出力端子ID,ONまたはOFF)」と表記する。例えば、前記したモジュール1「io0」からモジュール1「p1」への送信を許可する設定は、「SW(io0,p1,ON)」と表記される。
【0020】
なお、1つの入力端子から複数の出力端子を「ON」にするときには、入力端子から入力された同じデータが複数の出力端子に出力される(同一データの冗長送信処理)。例えば、SW(p1,io0,ON)と、SW(p1,io1,ON)とが同じ時刻に設定されたときには、モジュール1「p1」から入力された同じデータが、モジュール1「io0」と、モジュール1「io1」とにそれぞれ出力される。
【0021】
また、複数の入力端子から1つの出力端子を「ON」にするときには、入力端子から入力された複数のデータのうちの1つのデータだけが他のデータを上書きしつつ1つの出力端子に出力される。例えば、SW(p0,io0,ON)と、SW(p1,io0,ON)とが同じ時刻に設定されたときには、出力端子に近いモジュール1「p0」から入力されたデータが、出力端子から遠いモジュール1「p1」から入力されたデータを上書きして、モジュール1「io0」に出力される(同一出力へのデータ衝突)。このとき、モジュール1「p1」から入力されたデータは、上書きされることにより、出力端子に出力されることなく、損失してしまう。
なお、スイッチ2の初期状態では、全てのSWが「ON」の状態となる。
【0022】
図3は、プログラマブルコントローラ9の内部のハードウェア構成を示す構成図である。
【0023】
まず、図1で示した4つのモジュール1のうち、モジュール1(p0)と、モジュール1(io0)とを図3で示している。この2つのモジュール1の内部構成の違いは、構成処理部3を有しているか(p0)、有していないか(io0)の違いである。以下、構成処理部3を有しているモジュール1(p0)を「メインモジュール」と呼び、構成処理部3を有していないモジュール1(p1,io0,io1)を「サブモジュール」と呼ぶ。なお、送受信部4は、メインモジュールにも、サブモジュールにも存在する。
【0024】
各モジュール1は、タイマ81aを内蔵するCPU81と、メモリ82と、データ通信部83とを有する。さらに、メインモジュールであるモジュール1(p0)は、構成処理部3を動作させることで、スイッチ2との制御信号の送受信をするための通信部として、書込用通信部84と、調停用通信部85とを有する。一方、サブモジュールのうちのI/Oモジュール1(io0)は、自装置から接続される制御対象機器7との間の通信を行うためのIO用通信部86を有する。
【0025】
CPU81は、内蔵されたタイマ81aにより時刻の管理を行うとともに、設定した時間経過ごとに割り込みを発生させるなどの制御処理を行う。
メモリ82は、CPU81が実行する各処理部のプログラム(構成処理部3、送受信部4など)や、各処理部がアクセスする各種データが記憶されている。
データ通信部83は、シリアルリンクと接続されており、CPU81の指示に従ってデータ信号の通信を行う。
書込用通信部84は、スイッチ設定レジスタ22へのスイッチ設定データの書込みを行う。
調停用通信部85は、オンデマンド通信(必要となったときに要求に応じて行う周期的ではない通信)により、スイッチ2への調停用信号を通信する。
【0026】
スイッチ2は、モジュール1と通信するための通信部89に加え、タイマ81aを内蔵するCPU81と、メモリ82と、設定出力部21と、スイッチ設定レジスタ22とを有する。
設定出力部21は、書込用通信部84から通信部89を介して受信したスイッチ設定データを、スイッチ設定レジスタ22に書き出す。
スイッチ設定レジスタ22は、スイッチの設定データが書き込まれるレジスタ領域であり、このレジスタに値を書き込むことにより、スイッチ(SW)のON/OFFが制御される(図2参照)。
【0027】
以上、図3では、構成処理部3を有するメインモジュールをモジュール1(p0)として説明した。一方、構成処理部3を有する装置は、他のモジュール1(io0など)としてもよいし、スイッチ2としてもよい。例えば、スイッチ2がメインモジュールとして動作する場合には、モジュール1(p0)が他のモジュールと同じサブモジュールとして動作し、スイッチ2が自ら作成したスイッチ設定データをスイッチ設定レジスタ22に設定する。
【0028】
図4は、図3の構成処理部3および送受信部4の詳細を示す構成図である。
構成処理部3は、構成制御部31と、スイッチ切替指示部32と、周期送信データ33と、二重系データ34と、切替順序データ35とを含めて構成される。
送受信部4は、通信制御部41と、送受信順序データ42と、送信データ格納部43と、受信データ格納部44とを含めて構成される。
【0029】
周期送信データ33は、各モジュール1が送信予定のフローごとに、そのフローの送信周期などの情報を定義するデータであり、管理者などによりあらかじめ入力されている。
二重系データ34は、送信先のモジュール1を主系と従系との二重系として定義するデータであり、主系のモジュール1と従系のモジュール1とに同じデータが冗長送信される。この二重系データ34も、管理者などによりあらかじめ入力されている。
【0030】
構成制御部31は、周期送信データ33および二重系データ34を入力として、送受信順序データ42および切替順序データ35を生成して出力する。
切替順序データ35は、スイッチ2を切り替える箇所および順番の情報である。
スイッチ切替指示部32は、切替順序データ35が作成されると、その切替順序データ35をスイッチ2の設定出力部21へ送信することで、スイッチ2の切り替えを指示する。
設定出力部21は、受信した切替順序データ35に基づき、スイッチ設定レジスタ22に時間の経過に応じてスイッチの切替情報を設定する。
【0031】
送受信順序データ42は、各モジュール1がフローの送受信を行うタイミングを定義するデータである。
通信制御部41は、タイマ81aから取得した時刻情報をもとに、送受信順序データ42のタイミングに沿って、送信データ格納部43および受信データ格納部44を介してフローのデータ送受信を行う。
送信データ格納部43は、自装置から他装置へ送信するデータを格納する送信バッファである。
受信データ格納部44は、他装置から自装置が受信したデータを格納する受信バッファである。
【0032】
図5は、2つのフローが衝突する事例を示す説明図である。
【0033】
図5(a)において、2つのフローを同じ周期4nごとに流す例を示す。1つめのフローは、モジュール1(p0)からモジュール1(p1)へデータが送信されるフローであり、送信先のモジュール1(p1)と並行して、二重系の従系のモジュール1(io1)にも、モジュール1(p1)と同じデータが送信される。2つめのフローは、モジュール1(p1)からモジュール1(io1)へデータが送信されるフローである。
【0034】
図5(b)において、図5(a)でのスイッチ2内部を示す。1つめのフローを送信するための設定「SW(p0,p1&io1,ON)」と、2つめのフローを送信するための設定「SW(p1,io1,ON)」とでは、送信先の「io1」が同じであるために衝突が発生する。このままでは、2つめのフローのデータは、1つめのフローのデータによって上書きされて消失してしまう。
なお、「SW(p0,p1&io1,ON)」における「p0」は入力端子IDを、「p1&io1」は出力端子IDを示す。
【0035】
図6は、図5の2つのフローについて、タイミングをずらすことにより衝突回避する事例を示す説明図である。
図6(a)では、1つめのフロー「SW(p0,p1&io1,ON)」について、図5(b)と同様に、周期4nごとにスイッチ設定をして流す設定を示す。ここで、周期4nごとのスイッチ設定から2つめのフローを図6(b)に移動させることにより、衝突を回避する。
【0036】
図6(b)では、2つめのフロー「SW(p1,io1,ON)」について、周期4n+1のタイミングにずらすことにより、1つめのフローとの衝突を回避する。
つまり、1つめのフローは、周期4nなので、t=0,4,8,12…のタイミングで送信されるが、2つめのフローは、周期4n+1なので、t=1,5,9,13…のタイミングで送信されることで、同時刻に2つのフローが送信されなくなる。
【0037】
【表1】

【0038】
表1は、図6の状態に対応するモジュール1内の各データ構造を示す。
【0039】
周期送信データ33は、モジュール1ごとに、そのモジュールを送信元とするフローの送信周期(4nの場合、t=0,4,8,12…のタイミング)と、送信先のモジュール1と、フローのデータアドレスと、フローのデータ長とが対応づけられて構成される。フローのデータアドレスと、フローのデータ長とは、送信データ格納部43から送信用データを取得するために用いられる。
なお、表1では周期送信データ33として、2つのモジュール1(p0,p1)のものをまとめて1つの表としたが、実際には、各モジュール1内の周期送信データ33は、自装置に該当するレコード分だけ保持すればよい。よって、周期送信データ33内のモジュール列は、各モジュール1内に格納されるときには、省略可能である。
【0040】
二重系データ34は、冗長系構成の主系のモジュール1を特定する「主モジュール」と、冗長系構成の従系のモジュール1を特定する「従モジュール」とを対応づけて構成される。なお、二重系とは冗長系構成の一例であり、「従モジュール」を2つに限定せずに3つ以上とすることで、n重系の冗長系構成としてもよい。
【0041】
切替順序データ35は、スイッチ設定レジスタ22の設定情報である。切替順序データ35の送信時期(周期+タイミング)ごとに、SW(送信元,送信先,ON)によってスイッチをオンにすることで、レコードのフロー(データアドレス、データ長)が示すデータの中継を行う。タイミング列は、同じ送信先の複数のフローが同じ周期で重なったときに、通信のタイミングをずらすための時刻情報である。
なお、多重化列が「1」であるときには、切替順序データ35の送信先列を検索キーとして、二重系データ34の主モジュール列を検索し、検索された二重系データ34の従モジュール列に記載されるモジュール1も、送信先に追加する。
【0042】
送受信順序データ42は、モジュール1ごとに、そのモジュール1が送受信するフローをリストアップしたデータである。送受信する時刻は、送受信順序データ42の周期+タイミング列で特定され、送受信する相手の装置および送受信方向は、相手列(多重化する場合には、多重化列も含める)と送受列で特定され、送受信するデータは、データ長により特定される。
なお、送受信順序データ42も、周期送信データ33と同様に、複数のモジュール1(p0,p1,io1)のものをまとめて1つの表としたが、実際には、各モジュール1内の送受信順序データ42は、自装置に該当するレコード分だけ保持すればよい。よって、送受信順序データ42内のモジュール列は、各モジュール1内に格納されるときには、省略可能である。
【0043】
構成制御部31は、例えば、以下の手順により、入力データ(周期送信データ33,二重系データ34)から出力データ(切替順序データ35,送受信順序データ42)を作成する。
【0044】
まず、切替順序データ35は、例えば、以下のように作成される。
周期送信データ33のモジュール列を、切替順序データ35の送信元列とする。
周期送信データ33の送信先列を、切替順序データ35の送信先列とする。
周期送信データ33の<データアドレス、データ長>列を、切替順序データ35の<データアドレス、データ長>列とする。
周期送信データ33の送信先列の値が、二重系データ34の主モジュール列のいずれかの値に一致したときには、切替順序データ35の多重化列を「1」とし、一致しないときには「0」とする。
切替順序データ35の周期列、送信元列、および、送信先列を参照してフローの衝突判定を行い、その結果、衝突するフロー同士のタイミングを互いに異なる値(例えば、0と1)として設定する。フローの衝突判定は、以下の通りである。
・周期が同じ、かつ、送信元が同じ複数のフローを、衝突するフロー群とする。
・周期が同じ、かつ、送信先が同じ複数のフローを、衝突するフロー群とする。ここで、多重化列が「1」であるときには、送信先として二重系データ34の従モジュールも追加する。例えば、表1の切替順序データ35について、1行目のフローの送信先が「p1」であり、2行目のフローの送信先が「io1」であるため、このフローの送信先は一見衝突しない。しかし、1行目は多重化列が「1」であり、1行目のフローの送信先が「p1」だけでなく従系の「io1」も存在するため、2つのフローは衝突する。
【0045】
次に、送受信順序データ42は、例えば、以下のように作成される。
周期送信データ33のモジュール列を、送受信順序データ42のモジュール列とする。ここで、周期送信データ33の1つのレコード(例えば、1行目のp0からp1へ送信する旨のレコード)を、送受信順序データ42では2つのレコード(p0からp1へ送信する旨のレコード,p1からp0へ受信する旨のレコード)に分割する。
切替順序データ35の<周期、タイミング>列を、送受信順序データ42の<周期、タイミング>列とする。
周期送信データ33の送信先列を、送受信順序データ42の相手列とする。そして、前記したように、送受信順序データ42で2つのレコードに分割したときの、相手への送信か(送)、相手からの受信か(受)を示す情報を、送受信順序データ42の送受列に格納する。
周期送信データ33のデータ長列を、送受信順序データ42のデータ長列とする。
切替順序データ35の多重化列を、送受信順序データ42の多重化列とする。
【0046】
さらに、各モジュール1は、他のモジュール1との間で生存通知信号を通信し、所定時間以上、所定のモジュール1との間で生存通知信号が通知されないことを検知すると、所定のモジュール1を対象とした登録データを自通信ノードの送受信順序データ42から削除することにより、障害が発生した他のモジュール1に対して無駄な通信を行うことを抑制できる。
【0047】
以上、図6の状態に対応するモジュール1内の各データ構造を説明した。これらのデータ構造は、スイッチ2が転送するフローのうちの周期的な(あらかじめ計画された)フローについての情報を示すものである。一方、スイッチ2は、周期的なフローだけでなく、突発的な(1回の通信だけを行う)フローも、オンデマンド通信として扱う。
【0048】
以下に示すように、周期的なフローと、オンデマンドのフローとを併用するときには、周期的なフローの送信が、オンデマンドのフローの送信よりも優先される。例えば、送信先が同じである周期的なフローF1,F2は、ともに周期4nで送信され、送信先が同じであるオンデマンドのF3は、t=12の1回だけ送信されるとする。タイミングをずらさないと、以下のように衝突が発生する。
フローF1:t=0,4,8,12,16,20…
フローF2:t=0,4,8,12,16,20…
フローF3:t=12
【0049】
そこで、まず周期的なフローF1,F2間の衝突を解消するため、フローF2のタイミングを1つずらす。さらに、周期的なフローと、オンデマンドのフローとの衝突を解消するため、フローF3の送信時刻を、他の各周期的なフローの送信時刻よりも大きく(+2だけ)ずらす。これにより、各フローF1,F2,F3は、互いに衝突が発生しない。
フローF1:t=0,4,8,12,16,20…(タイミング+0)
フローF2:t=1,5,9,13,17,21…(タイミング+1)
フローF3:t=14(タイミング+2)
【0050】
図7は、通信制御の全体処理を示すフローチャートである。以下の説明では、モジュール1(p0)をメインモジュールとし、他のモジュール1(io0など)をサブモジュールとして説明する。なお、図7では、サブモジュールとしてio0を例示したが、他のモジュールも同じ動作をする。
【0051】
まず、図7の処理を開始する前に実行される前処理(モジュール間のタイマ81aの時刻同期処理)を説明する。メインモジュール1(p0)は、モジュール間の時刻を同期するための信号を調停用通信部85を介してサブモジュール1(io0)に送信する。そして、信号を送信または受信した各モジュール1は、タイマ81aをリセットする。
【0052】
以下、図7の処理について、説明する。
S11では、メインモジュール1(p0)は、オンデマンド通信調停タスクの生成を行う(図8(a)参照)。オンデマンド通信は周期的な通信ではなく必要となったときにモジュールから要求に応じて行われる通信である。モジュールからの要求を調停するのが、このオンデマンド調停タスクの役割である。
S12では、各モジュール1は、受信タスクを生成する(図8(b)参照)。ここでは、シリアルリンクからの受信を行うタスクが生成される。このタスクは周期的な通信もオンデマンド通信も両方の受信を受け持つ。
S13では、メインモジュール1(p0)は、切替順序データ35を初期化する。
【0053】
S14aでは、サブモジュール1(io0)は、自装置のメモリから読み込んだ周期送信データ33を、オンデマンド通信でメインモジュール1(p0)に対して送信する。オンデマンド通信の送信手順は、以下の手順1,2の通りである。
(手順1)オンデマンド通信の送信要求を出力する。そして、出力した次のサイクルで送信許可を受信する。送信許可を受信できなかったときには送信が許可されなかったと判断して、次のサイクルで再び送信要求を出力する。
(手順2)送信が許可された場合には次のサイクルにおいてデータ送信を行う。
S14bでは、メインモジュール1(p0)は、S14aで送信された周期送信データ33を受信する(図9参照)。全てのサブモジュール1から周期送信データ33を受信すると、S15へ進む。
S15では、メインモジュール1(p0)は、受信した各モジュール1の周期送信データ33をもとに、切替順序データ35を構築する(図10参照)。
S16aでは、メインモジュール1(p0)は、受信した各モジュール1の周期送信データ33をもとに、各モジュール1用の送受信順序データ42を作成して、各モジュール1に配信する(図11参照)。
S16bでは、サブモジュール1(io0)は、S16aで送信された送受信順序データ42をオンデマンド通信で受信する。次に、受信した送受信順序データ42を各モジュール1の送受信順序データ42を保持するメモリ82内の領域に格納する。
【0054】
S21では、各モジュール1は、周期的な通信を行う周期送信タスクを生成する(図12参照)。
S22では、各モジュール1は、モジュールの故障を検出できるようにするために正常に動作していることを表す生存通知データを周期的に送信データ格納部43に書き込む生存通知タスクを生成する。この生存通知タスクでは、まず、タイマから割り込みを待つ。次に、送信データ格納部43中にある生存通知データの値をインクリメントして更新する。生存通知データは、周期送信データ33に設定しておくことにより、周期的に他のモジュールに送信される。
S23では、メインモジュール1(p0)は、各モジュール1が生存通知情報を更新していることを監視する生死監視タスクを生成する(図13参照)。
S24では、メインモジュール1(p0)は、S15で構築した切替順序データ35をもとに、スイッチを設定するタスクを生成する(図14参照)。
【0055】
図8(a)は、S11で生成されるオンデマンド通信調停タスクを示すフローチャートである。
S101では、オンデマンド通信は、通信を行いたいモジュールが周期通信が行われていないタイミングで、調停用通信部85に対して送信要求を送信することから始まる。よって、その送信要求が来るまで受信待ちをする。
S102では、メモリにある次サイクルスイッチ情報を読み出す。次サイクルスイッチ情報は、次のサイクルにスイッチ設定レジスタに設定する情報を保持している領域である。
S103では、受信した送信要求の送信元のスイッチが次サイクルに空いているかチェックしている。S103でYesならS104に進み、NoならS101に戻る。
S104では、受信した送信要求の送信先のスイッチが次サイクルに空いているかチェックしている。S104でYesならS105に進み、NoならS101に戻る。
S105では、要求元に送信許可を送信する。
S106では、送信元と送信先との間のスイッチが次にオンになるように次サイクルスイッチ情報を更新し、S101に戻る。
【0056】
図8(b)は、S12で生成される受信タスクを示すフローチャートである。
S111では、モジュール1のデータ通信部83がデータを受信し、割り込みによりCPU81にそれを通知してくるのを待つ。
S112では、S111での受信処理がオンデマンド通信かどうか判断する。この判断は受信したデータのヘッダなどに種別を入れることによっても判断可能であるし、送受信順序データ42に周期通信の受信として登録されているかどうか調べることによっても判断可能である。S112でYesならS114に進み、NoならS113に進む。
S113では、受信データ格納部44にデータを格納する。
S114では、オンデマンド通信の受信待ちをしているタスク(S16b、後記するS201など)に通知する。なお、アプリケーションプログラムでも必要に応じてオンデマンド通信が行われるので、それらのアプリケーションプログラムにも通知してもよい。
【0057】
図9は、周期送信データ33の受信処理(S14b)を示すフローチャートである。
【0058】
S201では、オンデマンド通信で周期送信データ33が送られてくるの待つ。
S202では、S201で受信した周期送信データ33の各エントリを読み出す。
S203では、S201で受信した周期送信データ33の全てのエントリを読み出しが終わったか否かを判断する。S203でYesなら図9の処理を終了し、NoならS204に進む。
S204では、読み出した周期送信データ33のエントリに対応して、切替順序データ35に周期の短い順になるように新しくエントリを作成する。
S205では、作成したエントリに周期送信データ33のエントリの情報を元に周期、送信元、送信先、データ長をライトする。
S206では、送信先が二重系データ34のエントリの主系の中にあるか否かを判断する。S206でYesならS208に進み、NoならS207に進む。
S207では、S204で作成したエントリの多重化の欄に0をライトする。
S208では、S204で作成したエントリの多重系の欄に1をライトする。
S209では、切替順序データ35に二重系データ34の従系を送信先とした同じエントリを作成する。これにより主系と従系とに同じデータが送信されるようになる。
【0059】
図10は、切替順序データ35の構築処理(S15)を示すフローチャートである。なお、切替順序データ35のレコードは、周期送信データ33の受信処理(S14b)の時点で既にできている。図10の処理により、切替順序データ35のレコードのうちの送信先が同じ通信が重ならないようにタイミング情報を生成する。
【0060】
S301では、切替順序データ35の各エントリのタイミングの欄に「−1」を書込み、初期化している。
S302では、切替順序データ35のどのエントリまでタイミング情報を生成したかを表すポインタpを1に初期化している。
S303では、切替順序データ35のp番目のエントリを読み出しEpとしている。
S304では、全部のエントリを読み出し終わったか判断している。S304でYesなら図10の処理を終了し、NoならS305に進む。
S305では、読み出したエントリEpの周期、送信元、送信先をそれぞれCp、Sp、Dpとしている。
S306では、タイミング情報を計算するための変数Tpを初期化している。
S307では、この後エントリEpよりも前にあるエントリと通信が競合しないかチェックする。そのために使用するエントリを指すポインタiを1に初期化する。
S308では、iがpまで進んだか判断している。S308でYesならS321に進み、NoならS309に進む。
S309では、切替順序データ35のi番目のエントリを読み出しEiとする。
S310では、Eiの周期、送信元、送信先、タイミングをそれぞれCi、Si、Di、Tiとする。
S311では、EpとEiのエントリの通信が競合しないか判断している。判定式「(Ti == Tp) &&((Si ==Sp) || (Di == Dp))」を満たす場合、つまり、タイミング情報TiとTpが等しく、かつ、送信元か送信先が等しい場合には競合する。S311でYesならS313に進み、NoならS312に進む。
S312では、iをインクリメントして次のエントリとの競合をチェックする。
S313では、競合する場合にはEpのタイミング情報Tpを1増やす。
【0061】
S321では、切替順序データ35のp番目のタイミングをTpに設定する。
S322では、pをインクリメントして、次のエントリのタイミング情報の計算に進むためにS303に戻る。
【0062】
図11は、送受信順序データ42の配信処理(S16a)を示すフローチャートである。この図11の処理は、各モジュール1を順番に選択し、選択されたモジュール1ごとに実行される。
【0063】
S401では、送受信順序データ42を作成するモジュール(選択されたモジュール1)の番号をnに代入する。
S402では、切替順序データ35からエントリを一つ読み出しEに代入している。
S403では、エントリを最後まで読んだか否かを判定する。S403でYesならS431に進み、NoならS404に進む。
S404では、エントリEの送信元をS、送信先をDに代入している。
S410では、送信元がnと等しいか否かを判定している。S410でYesならS411に進み、NoならS420に進む。
【0064】
S411では、送受信順序データ42に新しくエントリを作成する。
S412では、作成したエントリの送受の欄に送を設定する。
S413では、作成したエントリの相手の欄にDを設定する。
S414では、作成したエントリにEの周期、タイミング、データ長、多重化の内容をコピーして、S402に戻り、切替順序データ35の次のエントリを処理対象のEとする。
【0065】
S420では、Dとnが等しいか判断している。S420でYesならS421に進み、NoならS402に戻る。
S421では、送受信順序データ42に新しくエントリを作成する。
S422では、作成したエントリの送受の欄に受を設定する。
S423では、作成した相手の欄にSを設定する。
【0066】
S431では、nが自ノードか判断している。S431でYesならS433に進み、NoならS432に進む。
S432では、作成した送受信順序データ42をオンデマンド通信でノード番号nのモジュールに対して送信する。
S433では、送信する必要はないので、作成した送受信順序データ42を自装置のメモリ82内の領域に格納する。
【0067】
図12は、周期送信タスクの生成処理(S21)により生成されるタスクを示すフローチャートである。この図12のタスクは、タイマの周期で送受信順序データ42に従い、フローのデータ送信を実行する。
【0068】
S501では、CPU81のタイマ81aから割り込みが来るのを待つ。
S502では、タイマ81aの値を読み出しTに代入する。
S503では、送受信順序データ42からエントリを一つ読み出しEに代入する。
S504では、エントリを最後まで読み出してしまったか判断している。S504でYesならS501に戻り、NoならS504に進む。
【0069】
S505では、Eの周期、送受、タイミングをそれぞれCe、Se、Teに代入する。
S506では、Eのデータ送信契機か否かを判定する。つまり、判定式「Se==送&&(T mod Ce)==Te」により、Eが表す通信が送であり、タイミングがタイマから読み出したTの値の周期Ceの剰余と一致しているか判断している。S506でYesならS507に進み、NoならS503に戻る。
S507では、Eに対応する周期送信データ33中のデータ送信を実行する。
【0070】
図13は、生死監視タスクの生成処理(S23)により生成されるタスクを示すフローチャートである。この図13のタスクは、各モジュールが正常に動作しているかを監視し、二重系の主系の動作の停止を検出したときには従系への切り替えを設定する。
【0071】
S601では、タイマから割り込みが来るのを待つ。
S602では、受信データ格納部44中の各モジュールの生存通知データが更新されているかチェックしている。各モジュールが実行する生存通知タスクと周期通信により、モジュールが正常に動作しているならば受信データ領域の生存通知データが周期的に更新される。これが更新されていないということはモジュールの動作に異常があったことを表す。
【0072】
S603では、生存通知データに未変更のものがあるか調べる。S603でYesならS604に進み、NoならS601に戻る。
S604では、未変更のモジュールのノード番号をnに代入する。
【0073】
S605では、ノードnが図3中の二重系データ34の主の欄に存在するかを調べる。S605でYesならS606に進み、NoならS601に戻る。
S606では、二重系の従であるモジュールのノード番号をmに代入している。以下、ノードnのモジュールが故障したことを検出したのでノードmのモジュールに切り替える処理を行う。
【0074】
S611では、切替順序データ35のエントリを順に調べていく。
S612では、全てのエントリを調べ終わったか判断している。S612でYesならS621に進み、NoならS613に進む。
S613では、エントリの送信元がnと等しいか調べている。S613でYesならS614に進み、NoならS615に進む。
S614では、エントリの送信元の欄をmに変更する。
S615では、エントリの送信先がnか調べている。S615でYesならS616に進み、NoならS611に戻る。
S616では、一致している場合にはそのエントリを削除する。
【0075】
S621では、各モジュールに関して送受信順序データ42を計算して、その情報をオンデマンド通信で送信する(S16aと同じ処理)。
S622では、全部のモジュールについて送受信順序データ42を配信したか判断している。S622でYesならS623に進み、NoならS621に戻る。
S623では、ノード番号nのモジュールに対してオンデマンド通信で従系から主系への切り替えを指示する。
【0076】
図14は、スイッチ設定タスクの生成処理(S24)により生成されるタスクを示すフローチャートである。このタスクは、タイマ81aの動作に応じてスイッチ31を切り換える役割を果たす。
【0077】
S701では、1ミリ秒など設定した時間が経過するごとにタイマ81aが発生させる割り込みが来るのを待つ。割り込みが来るとS702に進む。本タスクはタイマ割り込みの周期ごとにスイッチ設定レジスタ22にスイッチ情報を設定するが、前の周期のときに計算しておいたスイッチ情報を設定した後、次の周期のスイッチ情報を計算する。
S702では、前の周期に計算しておいた次サイクルスイッチ情報をスイッチ設定レジスタにライトしている。
S703では、次の周期の次サイクルスイッチ情報を計算するために、まず次サイクルスイッチ情報を初期化する。ここでも全部のスイッチがオフになるように設定する。
S704では、タイマ81aの値を読み出しTに代入する。
【0078】
S705では、切替順序データ35からエントリを一つずつ読み出していく。読み出したエントリをEに代入している。
S706では、全部のエントリを読み出し終わったか判断している。S706でYesならS701に戻り、NoならS707に進む。
S707では、Eの周期をCe、EのタイミングをTeに代入する。
【0079】
S708では、次の周期であるT+1がタイミングTeにあたるか判断するために、判定式「((T+1)mod Ce)==Te」によりT+1の周期Ceの剰余とTeを比較している。S708でYesならS709に進み、NoならS705に戻る。
S709では、Eの送信元をS、送信先をDに代入する。
S710では、次サイクルスイッチ情報の送信元S、送信先Dのスイッチを表すビットをオンにし、次のエントリに進むためにS705に戻る。
【0080】
以上説明した本実施形態では、各モジュール1が送受信を行う必要があるデータ(送信データ格納部43、受信データ格納部44に格納されている)の周期送信データ33をあらかじめ収集する構成制御部31を設け、この構成制御部31が切替順序データ35や、送受信順序データ42を作成する。
そして、スイッチ2が切替順序データ35をもとにスイッチを切り替えることで、スイッチ2内で送信元から送信先への端子が切替順序データ35により接続されるため、各モジュール1が送受信順序データ42に従ってデータの送受信を行うときに、送信するデータに宛先情報を付加する必要がなくなる。
【0081】
これにより、パケットのヘッダ処理が不要であるため、伝送効率やリアルタイム性が向上するとともに、スイッチ2のハードウェア構成をシンプルにできるため、消費電力や設置スペースの面でも効果的である。そして、本実施形態では、通信が衝突しないように複数のフローを同時に(並列に)送信できるので、PROFInetのようなタイムスロット制御に比べて、応答速度、スループットが向上する。
【0082】
さらに、プログラマブルコントローラ9(スイッチ2)では、周期送信データ33で規定された周期的な通信の他に、必要に応じて通信を行うオンデマンド通信もサポートする。ここで、オンデマンド通信と周期的な通信とが衝突するときには、オンデマンド通信の送信タイミングを周期的な通信からずらすことによって、衝突を回避する。
【0083】
そして、プログラマブルコントローラ9では、高信頼化のためにモジュール1を多重化することもできる。周期的にスイッチを切替る際に、二重系データ34で規定される多重系の関係にある従系のモジュール1に対しては、主系のモジュール1と同じデータが送信されるようにスイッチを切替ることにより、バックアップを実現する。
【符号の説明】
【0084】
1 モジュール(通信ノード)
2 スイッチ
3 構成処理部
4 送受信部
7 制御対象機器
9 プログラマブルコントローラ
21 設定出力部
22 スイッチ設定レジスタ
31 構成制御部
32 スイッチ切替指示部
33 周期送信データ
34 二重系データ
35 切替順序データ
41 通信制御部
42 送受信順序データ
43 送信データ格納部
44 受信データ格納部
81 CPU
81a タイマ
82 メモリ
83 データ通信部
84 書込用通信部
85 調停用通信部
86 IO用通信部
89 通信部

【特許請求の範囲】
【請求項1】
複数の通信ノードと、前記通信ノード間通信を中継するスイッチとを含めて構成されるプログラマブルコントローラであって、
前記各通信ノードは、他通信ノードとの間で周期的にデータを通信し続ける周期的フローごとに、その周期的フローの周期と、その周期からの送信タイミングと、通信相手の他通信ノードとを対応づける送受信順序データを自通信ノード内の記憶手段に格納しており、その送受信順序データに従って、他通信ノードとの間で前記周期的フローを周期から前記送信タイミングだけずらした時刻に通信し、
前記スイッチは、前記周期的フローを中継するための前記スイッチの設定として、前記周期的フローの周期と、その周期からの前記送信タイミングと、前記周期的フローの送信元および送信先とを対応づける切替順序データを記憶手段に格納しており、その切替順序データに従って、前記周期的フローの送信元の前記通信ノードに接続される入力端子と、前記周期的フローの送信先の前記通信ノードに接続される出力端子とを、前記周期的フローの周期から前記送信タイミングだけずらした時刻に接続するクロスバスイッチとして動作し、
前記プログラマブルコントローラの構成制御部は、複数の前記周期的フローについて、その送信元と、送信先と、周期とが入力されると、送信元および周期の組み合わせが一致する複数の前記周期的フローと、送信先および周期の組み合わせが一致する複数の前記周期的フローとをそれぞれ衝突するフロー群として抽出し、前記衝突するフロー群における前記送信タイミングについて、互いに異なるタイミングを計算して、前記切替順序データおよび前記送受信順序データに書き出すことを特徴とする
プログラマブルコントローラ。
【請求項2】
前記スイッチは、前記周期的フローに加えて、送信回数が1回であるオンデマンドフローを前記通信ノード間通信として中継し、
前記プログラマブルコントローラの構成制御部は、前記オンデマンドフローの送信時刻と送信元と送信先とが入力されると、そのオンデマンドフローと送信元および送信時刻の組み合わせが一致する前記周期的フローと、そのオンデマンドフローと送信先および送信時刻の組み合わせが一致する前記周期的フローとを、前記切替順序データ内の前記周期的フローから抽出し、前記オンデマンドフローの送信時刻を、抽出した衝突する前記周期的フローの送信時刻よりも後にずらすことを特徴とする
請求項1に記載のプログラマブルコントローラ。
【請求項3】
前記スイッチは、前記周期的フローの送信元の前記通信ノードに接続される1つの入力端子と、前記周期的フローの送信先の複数の前記通信ノードに接続される複数の出力端子とを、前記周期的フローの周期から前記送信タイミングだけずらした時刻に接続することを特徴とする
請求項1または請求項2に記載のプログラマブルコントローラ。
【請求項4】
前記各通信ノードは、他通信ノードとの間で生存通知信号を通信し、所定時間以上、所定の前記通信ノードとの間で前記生存通知信号が通知されないことを検知すると、所定の前記通信ノードを対象とした前記周期的フローの登録データを自通信ノードの前記送受信順序データから削除することを特徴とする
請求項1ないし請求項3のいずれか1項に記載のプログラマブルコントローラ。
【請求項5】
1つ以上の前記通信ノードは、制御対象であるプラント機器と接続されており、前記プラント機器から受信した計測データ、および、前記プラント機器へ送信する前記プラント機器の制御用データを、前記周期的フローの通信データとすることを特徴とする
請求項1ないし請求項4のいずれか1項に記載のプログラマブルコントローラ。
【請求項6】
複数の通信ノードと、前記通信ノード間通信を中継するスイッチとを含めて構成されるプログラマブルコントローラによる通信制御方法であって、
前記各通信ノードは、他通信ノードとの間で周期的にデータを通信し続ける周期的フローごとに、その周期的フローの周期と、その周期からの送信タイミングと、通信相手の他通信ノードとを対応づける送受信順序データを自通信ノード内の記憶手段から読み出し、その送受信順序データに従って、他通信ノードとの間で前記周期的フローを周期から前記送信タイミングだけずらした時刻に通信し、
前記スイッチは、前記周期的フローを中継するための前記スイッチの設定として、前記周期的フローの周期と、その周期からの前記送信タイミングと、前記周期的フローの送信元および送信先とを対応づける切替順序データを記憶手段から読み出し、その切替順序データに従って、前記周期的フローの送信元の前記通信ノードに接続される入力端子と、前記周期的フローの送信先の前記通信ノードに接続される出力端子とを、前記周期的フローの周期から前記送信タイミングだけずらした時刻に接続するクロスバスイッチとして動作し、
前記プログラマブルコントローラの構成制御部は、複数の前記周期的フローについて、その送信元と、送信先と、周期とが入力されると、送信元および周期の組み合わせが一致する複数の前記周期的フローと、送信先および周期の組み合わせが一致する複数の前記周期的フローとをそれぞれ衝突するフロー群として抽出し、前記衝突するフロー群における前記送信タイミングについて、互いに異なるタイミングを計算して、前記切替順序データおよび前記送受信順序データに書き出すことを特徴とする
通信制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate


【公開番号】特開2012−108696(P2012−108696A)
【公開日】平成24年6月7日(2012.6.7)
【国際特許分類】
【出願番号】特願2010−256676(P2010−256676)
【出願日】平成22年11月17日(2010.11.17)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】