(57)【特許請求の範囲】
【請求項１】
外部から与えられる制御命令に従ってロボットの動作制御を行うロボットのコントローラであって、
前記制御命令は、所定のデータ構造を有するパケット単位で与えられるものであり、
前記パケットは、当該パケットの先頭に設けられた固定値のヘッダと、このヘッダの直後に設けられ当該パケットの全データ長を示すメッセージ長と、当該パケット毎に特有の値となるシリアル番号と、前記制御内容を示すデータ部と、当該パケットの最後尾に設けられた固定値のフッタとから構成され、
前記ヘッダ、前記メッセージ長、前記シリアル番号および前記フッタは固定長であり、
前記データ部は可変長であり、
前記パケットを一時的に格納するためのパケット格納用メモリと、
受信した前記パケットを受信した順に前記パケット格納用メモリの開始アドレスから終了アドレスに向けて順次格納させ、前記パケット格納用メモリに格納されたパケットが正常であるか否かを判断し、正常であると判断したパケットのデータ部が示す制御内容に基づいて前記ロボットの動作制御を行う制御部とを備え、
前記制御部は、
所定の基準アドレスから前記開始アドレスに向けて前記ヘッダを探索するヘッダ探索処理と、前記ヘッダ探索処理により前記ヘッダが発見されると当該ヘッダの直後に設けられた前記メッセージ長が示す前記全データ長を取得する全データ長取得処理と、前記ヘッダ探索処理により発見された前記ヘッダが格納されたヘッダアドレスおよび前記全データ長取得処理により取得された全データ長を用いて前記フッタが格納されたフッタアドレスを検出するフッタアドレス検出処理と、前記フッタアドレス検出処理により検出された前記フッタアドレスに前記フッタが存在するか否かを判断するフッタ確認処理とからなる第１の確認処理と、
前記基準アドレスから前記ヘッダアドレスの先頭アドレスまでのデータ長と前記全データ長取得処理により取得された前記全データ長とが一致するか否かを確認する第２の確認処理と、
前記フッタ確認処理により確認された前記フッタを含む前記パケットの前記シリアル番号を記憶する正常データ記憶処理と、
前記フッタ確認処理により確認された前記フッタを含む前記パケットの前記シリアル番号に基づいて当該シリアル番号を含む前記パケットの前記終了アドレス側の隣に格納された前記パケットが異常である旨を示す異常データを記憶する異常データ記憶処理と、
記憶された前記シリアル番号および前記異常データを外部に対して出力する通知処理とを実行可能に構成され、
前記制御部は、
前記パケット格納用メモリにパケットが格納されると、当該パケットの最後尾のアドレスを前記基準アドレスとした上で前記第１の確認処理を実行し、
前記第１の確認処理において、前記ヘッダ探索処理により前記開始アドレスを超えた場合には前記通知処理を実行し、前記フッタ確認処理により前記フッタが存在しないと判断された場合には前記発見したヘッダの前記ヘッダアドレスから前記開始アドレスに向けて前記ヘッダ探索処理を実行し、前記フッタ確認処理により前記フッタが存在すると判断された場合には前記第２の確認処理を実行し、
前記第２の確認処理において、前記データ長と前記全データ長とが一致すると判断された場合には前記正常データ記憶処理を実行し、前記データ長と前記全データ長とが一致しないと判断された場合には前記異常データ記憶処理を実行し、
前記正常データ記憶処理が実行されると、記憶した前記シリアル番号を含む前記パケットの前記ヘッダの先頭アドレスから前記開始アドレス側に向けて１アドレス進んだアドレスを前記基準アドレスとした上で前記第１の確認処理を実行し、
前記異常データ記憶処理が実行されると、前記通知処理を実行することを特徴とするロボットのコントローラ。
【請求項２】
前記制御部は、前記第２の確認処理において、前記データ長と前記全データ長とが一致しないと判断されると、前記データ長が前記全データ長よりも大である場合には前記異常データ記憶処理を実行し、前記データ長が前記全データ長よりも小である場合には前記発見したヘッダの前記ヘッダアドレスから前記開始アドレスに向けて前記ヘッダ探索処理を実行することを特徴とする請求項１記載のロボットのコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部から与えられる制御命令に従ってロボットの動作を制御するロボットのコントローラに関する。
【背景技術】
【０００２】
ロボットを制御するためのコントローラは、外部から与えられる制御命令（コマンド）に従い、ロボットの各軸の駆動制御やＩ／Ｏの切替制御などを行うようになっている。このコマンドは、ユーザが任意に作成したプログラムなどに基づいて例えばパソコンから送信される。また、コマンドは、制御情報（ヘッダ、フッタ、シリアル番号など）が付加されたパケット単位で送信される。このパケットのデータ構造は予め定められている。そして、プログラムについてのデバッグ作業は、ユーザ自身が行う。従って、ユーザがプログラムの作成を誤った場合などには、送信されるパケットが正規のデータ構造でないことも考えられる。一方、ロボットがユーザの意図しない動作を行うことは危険な事態を招くおそれがある。このため、ユーザのプログラムが原因で上記事態を招くことがないようにコントローラ側でその対策を行う必要がある。
【０００３】
このような事情から、コントローラでは、受信したパケットが正規のデータ構造を有していなかった場合など、コマンドを適切に受信できなかった場合には、当該コマンドはデータ長自体が正しくない可能性があるので、そのパケットおよびそれ以降のパケットを全て破棄（リセット）する。その後、パソコン側から同じパケットを再度送信させて、コントローラ側で再度受信動作を行う。これにより、誤った構造のパケットが送信されたとしても、コントローラはこれに応じることがないので、ロボットがユーザの意図しない動作を行う事態を未然に防止できるようになっている。
【０００４】
上記したようにデータ受信に関する問題が生じたときにリセットを行う技術は、例えば特許文献１にも開示されている。すなわち、特許文献１には、外部との間にて非接触でデータを入出力する非接触入力手段に異常が発生した場合に、これをリセットして再度データの送受信を行う技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−１４３７９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記したコマンドの受信方法では以下のような問題が生じる可能性がある。すなわち、パソコンから連続してパケットが送信され、そのうちの１つに問題（非正規のデータ構造になっているなど）があった場合、連続して送信されたパケットの全てがリセットされる。このため、ユーザは、どのパケットに問題があってリセットがかけられたのかを認識することができず、同じミスを繰り返してしまう可能性があった。
【０００７】
本発明は上記事情に鑑みてなされたものであり、その目的は、制御命令を適切に受信できなかった場合に、どこに問題があるのかを特定することができるロボットのコントローラを提供することにある。
【課題を解決するための手段】
【０００８】
請求項１記載の手段によれば、制御部は、外部から与えられる制御命令をパケット単位で受信する。制御部は、受信したパケットを受信した順にパケット格納用メモリの開始アドレスから終了アドレスに向けて順次格納させる。このパケットは、所定のデータ構造を有するものであり、固定長のヘッダ、メッセージ長、シリアル番号およびフッタと、可変長のデータ部とから構成される。ヘッダは、パケットの先頭に設けられる固定値のデータである。メッセージ長は、ヘッダの直後に設けられ、パケットの全データ長を示すデータである。シリアル番号は、パケット毎に特有の値となるデータである。データ部は、制御内容を示すデータである。フッタは、パケットの最後尾に設けられる固定値のデータである。制御部は、パケット格納用メモリに格納されたパケットが正常であるか否か、すなわち、上記したような正規のデータ構造を有しているか否かを判断する。そして、制御部は、正常であると判断したパケットのデータ部が示す制御内容に基づいてロボットの動作制御を行う。
【０００９】
制御部は、パケットが正常であるか否かを判断する際に次のような処理を行う。すなわち、制御部は、パケット格納用メモリにパケットが格納されると、パケットが格納されたアドレスのうち最後尾のアドレスを基準アドレスとした上で第１の確認処理を実行する。この第１の確認処理において、制御部は、上記基準アドレスから開始アドレスに向けてヘッダを探索する（ヘッダ探索処理）。そして、制御部は、ヘッダが発見されるとそのヘッダの直後に設けられたメッセージ長が示す全データ長を取得する（全データ長取得処理）。また、制御部は、発見したヘッダが格納されたヘッダアドレスおよび取得した全データ長を用いてフッタが格納されたフッタアドレスを検出する（フッタアドレス検出処理）。具体的には、ヘッダアドレスに全データ長を加算したものがフッタアドレスとなる。なお、ここで言うヘッダアドレスは、ヘッダが占有する最初のアドレス（開始アドレス）でもよいし、最後のアドレス（終了アドレス）でもよい。また、ヘッダが占有する開始から終了までの各アドレス（つまり、ヘッダ自身が占有するメモリ領域の各アドレス＝アドレスの量）でもよい。また、フッタアドレスについては、ヘッダアドレスと同様のものを表すことになる。そして、制御部は、検出したフッタアドレスにフッタが存在するか否かを判断する（フッタ確認処理）。
【００１０】
フッタ確認処理においてフッタが存在しないと判断された場合には、そのフッタを含むパケットが異常であるということになる。この場合、制御部は、発見したヘッダのヘッダアドレスから開始アドレスに向けてヘッダ探索処理を再度実行する。すなわち、制御部は、次のパケットのヘッダを探索すべくヘッダ探索処理を再実行する。一方、フッタ確認処理においてフッタが存在すると判断された場合には、そのフッタを含むパケットが正常であるということになる。この場合、制御部は、第２の確認処理を実行する。
【００１１】
この第２の確認処理において、制御部は、基準アドレスからヘッダアドレスの先頭アドレスまでのデータ長と、取得した全データ長とが一致するか否かを確認する。このような第２の確認処理を行う理由は以下のとおりである。すなわち、正規のデータ構造を有するパケット（正常なパケット）が連続している場合であれば、上記各データ長は一致する。これに対し、異常なパケットに続いて正常なパケット（例えば、ヘッダが存在しない、フッタが存在しない、データ長が間違っているなど）を受信した場合には、上記各データ長が一致しない。
【００１２】
このため、制御部は、第２の確認処理において各データ長が一致すると判断した場合には、フッタ確認処理により確認されたフッタを含むパケットが正常であると判断し、そのシリアル番号を記憶する（正常データ記憶処理）。また、制御部は、第２の確認処理において各データが一致しないと判断された場合には、フッタ確認処理により確認されたフッタを含むパケットよりも１つ後に格納されたパケット（確認されたフッタを含むパケットの終了アドレス側の隣に格納されたパケット）が異常であると判断し、その旨を示す異常データを記憶する（異常データ記憶処理）。なお、この際、制御部は、確認されたフッタを含むパケットのシリアル番号を用いて、上記異常であると判断したパケットを特定する異常データを記憶する。例えば、この異常データは、「パケット（シリアル番号：ＸＸＸＸ）より１つ後に格納されたパケット（シリアル番号：不明）に異常がある」といった内容のものである。
【００１３】
正常データ記憶処理が実行されると、そのパケットは正規なデータ構造を有しているという判断がなされたことになる。この場合には、次のパケット（正常であると判断されたパケットの開始アドレス側の隣に格納されたパケット）が正常であるか否かの確認を行う。すなわち、制御部は、正常データ記憶処理が実行されると、記憶したシリアル番号を含むパケットのヘッダの先頭アドレスから開始アドレス側に向けて１アドレス（例えば１バイト）進んだアドレスを基準アドレスとした上で第１の確認処理を実行する。一方、異常データ記憶処理が実行されると、異常なパケットが存在していることが確認されたため、これ以降のパケットが正常であるか否かの確認を行うことができない。従って、制御部は、異常データ記憶処理が実行されると、その時点で記憶されているシリアル番号および異常データを外部に対して出力する（通知処理）。
【００１４】
また、上記各処理が繰り返された結果、全てのパケットに異常が見つからなかった場合には、第１の確認処理のヘッダ探索処理において開始アドレスを超えることになる。この場合、制御部は、記憶されているシリアル番号を外部に対して出力する通知処理を行う。なお、この場合、任意のシリアル番号（例えば最後に記憶されたシリアル番号）だけを出力してもよいし、全てのシリアル番号を出力してもよい。このように、ヘッダ探索処理は、開始アドレスを終点としてその処理が終了される。開始アドレス（例えば００００番地）を終点とすれば、開始アドレスよりも先の（若い番号の）アドレスが存在しないため、どのような状況であっても、ヘッダ探索処理が確実に終了されることになる。従って、無限ループに陥る可能性が極めて低くなる。
【００１５】
このように、制御部は、受信したパケットに対し、正常であるか否かについての確認を行い、その結果、正常であると判断したパケットのシリアル番号を外部に出力するとともに、異常であると判断したパケットを特定するための異常データを外部に出力する。このような構成によれば、制御命令（プログラム）を作成するユーザは、制御命令の受信エラーが発生した場合、コントローラ側から出力されたシリアル番号および異常データに基づいて、どのパケットに異常があったのかを容易に確認することができる。そして、ユーザは、この情報に基づいてプログラムのデバッグ作業を正確に且つ効率よく行うことが可能となり、以降において同様の受信エラーが発生してしまう事態が防止される。
【００１６】
上述したように、制御部は、パケット格納用メモリの最終アドレスに最も近いところに格納された最後尾のパケットから開始アドレスに最も近いところに格納された先頭のパケットに向けて順番に正常であるか否かの確認を行う。このような確認中、新たなパケットを受信した場合、新たに受信したパケットは、その時点で最後尾だったパケットの後ろに格納される。このため、パケットの確認は、その確認の開始時点で格納されていたパケットに対してのみ行われる。従って、パケットが正常であるか否かの確認は、その確認中に新たなパケットを受信したか否かにかかわらず、当初確認対象とされたパケットに対する確認が完了し次第終了となる。そして、その終了した時点で、確認が完了しているパケットのデータ部が示す制御内容に基づく制御を実行することが可能となる。このような構成によれば、パケットを受信してから、そのパケットに基づくロボットの動作制御が開始されるまでの遅延時間を極力短くすることができる。
【００１７】
請求項２記載の手段によれば、制御部は、第２の確認処理において、データ長と全データ長とが一致しないと判断された際、データ長が全データ長よりも大である場合には、請求項１記載の手段と同様に異常データ記憶処理を実行する。さて、パケットのフッタ、ヘッダ以外の部分に、偶然これらと同一のデータが存在した場合には、第２の確認処理におけるデータ長が全データ長よりも小さくなる。本手段では、このような稀なケースを想定し、第２の確認処理において、データ長が全データ長よりも小である場合には、発見したヘッダのヘッダアドレスから開始アドレスに向けてヘッダ探索処理を実行する。つまり、この時点で発見したヘッダは正しいものではないため、正しいヘッダを発見するまでヘッダ探索処理を継続させる。このような構成によれば、上記した稀なケースであっても、パケットが正常であるか否かを正確に判断することが可能となる。
【図面の簡単な説明】
【００１８】
【図１】本発明の一実施形態を示すロボットシステムの構成を概略的に示す図
【図２】パケットのデータ構造を示す図
【図３】受信処理の流れを説明するための図
【図４】パケット確認処理の流れを示すフローチャート
【図５】ヘッダが存在しないパケットを受信した場合を示す図
【図６】フッタが存在しないパケットを受信した場合を示す図
【図７】メッセージ長が誤ったデータであるパケットを受信した場合を示す図
【図８】先頭のパケットから順番にパケット確認処理を行う場合を示す図
【図９】最後のパケットから順番にパケット確認処理を行う場合を示す図
【発明を実施するための形態】
【００１９】
以下、本発明の一実施形態について図面を参照しながら説明する。
図１は、一般的な産業用ロボットのシステム構成を示している。図１に示すロボットシステム１は、ロボット２およびロボット２を制御するコントローラ３を備えている。ロボット２は、例えば部品の組み立て用あるいは部品の検査用など、任意の構成のロボットである。コントローラ３は、周辺機器としてティーチングペンダント４およびパーソナルコンピュータ５（以下、パソコン５と称す）などが接続されている。なお、パソコン５は、必要に応じて接続されるものであり、常時接続されているとは限らない。
【００２０】
ロボット２は、例えば６軸の垂直多関節型ロボットとして構成されている。ロボット２は、ベース６と、このベース６に水平方向に回転可能に支持されたショルダ部７と、このショルダ部７に上下方向に回転可能に支持された下アーム８と、この下アーム８に上下方向に回転可能に支持された第１の上アーム９と、この第１の上アーム９に捻り回転可能に支持された第２の上アーム１０と、この第２の上アーム１０に上下方向に回転可能に支持された手首１１と、この手首１１に捻り回転可能に支持されたフランジ１２とから構成されている。
【００２１】
ベース６、ショルダ部７、下アーム８、第１の上アーム９、第２の上アーム１０、手首１１およびフランジ１２は、ロボット２のアームとして機能し、アーム先端であるフランジ１２には、図示はしないが、エンドエフェクタ（手先）が取り付けられる。ロボット２に設けられる複数の軸はそれぞれに対応して設けられるサーボモータ（図示せず）により駆動される。ロボット２とコントローラ３との間は、接続ケーブル１３によって接続されている。これにより、ロボット２の各軸を駆動するサーボモータの駆動がコントローラ３によって制御される。
【００２２】
ティーチングペンダント４は、例えば使用者が携帯あるいは手に所持して操作可能な程度の大きさで、例えば薄型の略矩形箱状に形成されている。ティーチングペンダント４には、各種のキースイッチ１４が設けられており、使用者は、キースイッチ１４により種々の入力操作を行う。ティーチングペンダント４は、ケーブル１５を経由してコントローラ３に接続され、通信インターフェイスを介してコントローラ３との間で高速のデータ転送を実行する。キースイッチ１４の操作により入力された操作信号等の情報は、ティーチングペンダント４からコントローラ３へ送信される。また、コントローラ３は、ティーチングペンダント４へ制御信号や表示用の信号などと共に駆動用の電力を供給する。
【００２３】
使用者は、上記のティーチングペンダント４を用いてロボット２の運転や設定などの各種の機能を実行可能であり、例えばキースイッチ１４を操作することで、予め記憶されている制御プログラムを呼び出して、ロボット２の起動や各種のパラメータの設定などを実行できる。また、ロボット２をマニュアル操作で動作させて各種の教示作業も実行可能である。
【００２４】
パソコン５は、例えば汎用のノートパソコンなどである。使用者は、パソコン５を用いて、ロボット２の各軸の駆動制御やＩ／Ｏの切替制御などを行うための制御命令（コマンド）を記述したプログラムを作成できる。パソコン５は、ケーブル１６を経由してコントローラ３に接続されている。これにより、パソコン５は、作成された上記プログラムに基づく各種のコマンドをコントローラ３に送信可能となっている。また、このコマンドは、予め定められたデータ構造を持つパケット単位で送信される。
【００２５】
コントローラ３（ロボットのコントローラに相当）は、パソコン５から送信されるパケットを受信すると、パケット確認処理および受信処理（詳細は後述する）を行う。コントローラ３は、これらの処理を行った後、受信したパケットのうち正規のデータ構造を持つパケットに含まれるデータの内容（コマンド）を解釈し、その内容に基づいてロボット２の動作を制御する。
【００２６】
図２は、本実施形態におけるパケットの正規のデータ構造を示している。図２に示すように、パケットＰは、ヘッダＨ、メッセージ長Ｍ、シリアル番号Ｓ、データ部ＤおよびフッタＦにより、この順番で構成されている。ヘッダＨは、固定長（例えば１バイト）のデータであり、本実施形態のデータ構造特有の値となっている。メッセージ長Ｍは、固定長（例えば４バイト）のデータである。メッセージ長Ｍは、パケットＰ全体（ヘッダＨの最初のビットからフッタＦの最後のビットまで）の長さ（バイト数）を示すデータである。
【００２７】
シリアル番号Ｓは、固定長（例えば４バイト）のデータである。シリアル番号Ｓは、通し番号を示すデータであり、それぞれのパケットＰ毎に特有の値となっている。データ部Ｄは、可変長（例えば０〜１２バイト）のデータである。データ部Ｄは、ロボット２の動作などを命令するためのコマンド（制御命令）を示すデータである。フッタＦは、固定長（本実施形態では１バイト）のデータであり、本実施形態のデータ構造特有の値となっている。図２に示す構造のパケットＰは、正規なデータ構造を持つものであり、これ以外のデータ構造のパケットは、非正規なデータ構造を持つパケットということになる。
【００２８】
図３は、パソコンから送信されるパケットを受信するための構成を示している。図３において、（ａ）はパケットを受信した直後の状態であり、（ｂ）は１つのパケットの受信処理が終了した状態である。図３（ａ）に示すように、パソコン５から送信されたパケットＰ１〜Ｐ４は、コントローラ３のパケット格納用メモリ２１に一時的に格納される。この際、パケットＰ１〜Ｐ４は、受信した順に、パケット格納用メモリ２１に格納される。すなわち、受信したパケットＰ１〜Ｐ４は、その順にパケット格納用メモリ２１の開始アドレス側から終了アドレス側に向けて順次格納される。
【００２９】
制御部２２は、例えばマイクロコンピュータを主体として構成されたものであり、パソコン５から送信されるコマンドに基づいてロボット２の動作制御を行う。制御部２２は、パケット格納用メモリ２１にパケットが格納されると、格納された全てのパケットに対してパケット確認処理を実行する（詳細は後述する）。制御部２２は、パケット確認処理において「異常無し」と判断した場合、最も開始アドレスに近いところに格納されたパケット、つまり先頭のパケットＰ１に対する受信処理を行う。一方、制御部２２は、パケット確認処理において「異常有り」と判断した場合、詳細は後述するが、どのパケットに異常があったかなどを示すデータをパソコン５に対して送信する。
【００３０】
さて、制御部２２は、受信処理において、パケットＰ１のデータ部Ｄ１の内容を解析し、その解析により得られた制御内容（コマンド）に応じた所定の動作を実行する。この受信処理が完了したパケットＰ１は、パケット格納用メモリ２１内から消去され、次のパケットＰ２が開始アドレス側に移動される。すなわち、図３（ｂ）に示すように、パケットＰ１の受信処理が終了した後は、次のパケットＰ２が最も開始アドレスに近いところに格納された状態となる。その後、パケットＰ２に対する受信処理が行われ、以降は、格納された全てのパケットに対する受信処理が完了するまで、同様の処理が繰り返し行われる。
【００３１】
次に、パケット確認処理の内容について図４〜図７も参照して説明する。
図４は、制御部２２によるパケット確認処理の内容を示すフローチャートである。まず、受信したパケットが、図３（ａ）に示すように、正規のデータ構造を有している場合におけるパケット確認処理の流れについて説明する。パケット確認処理が開始されると、パケットＰ１〜Ｐ４が格納されているアドレスのうち、最後尾のアドレス、つまり最も終了アドレスに近いアドレスであるパケットＰ４のフッタＦ４の最後のビットが格納されたアドレスに移動する（ステップＡ１）。なお、ここで言う「移動」とは、制御部２２がパケット格納用メモリ２１からデータを読み出して確認するアドレスを変化させることを表している。続くステップＡ２では、この時点での移動先のアドレスが基準アドレスとして記憶される。この場合、フッタＦ４の最後のビットが格納されたアドレスが基準アドレスとして記憶される。
【００３２】
続くステップＡ３では、最後尾のアドレスからパケットの最小データサイズ分だけ遡る。つまり、最後尾のアドレスから本実施形態におけるパケットＰの最小データサイズ分だけ開始アドレス側に移動する。なお、パケットＰの最小データサイズとは、ヘッダＨのデータ長（固定）、メッセージ長Ｍのデータ長（固定）、データ部Ｄのデータ長（可変）およびフッタＦのデータ長（固定）を全て加算したものである。ただし、データ部Ｄのデータ長は、想定される最も小さい値（例えば０バイト）とする。続くステップＡ４では、移動した先のアドレス（遡ったアドレス）がパケット格納用メモリ２１の開始アドレスを超えたか否かが判断される。
【００３３】
この場合、受信したパケットが全て正規のデータ構造を有しているため、開始アドレスを超えることはなく、ステップＡ４では「ＮＯ」となり、ステップＡ５に進む。ステップＡ５では、その移動先のアドレスから始まるデータがヘッダであるか否かが判断される。データ部Ｄが特にコマンドを表さないものであり、そのデータ長が０バイトであった場合には移動先のアドレスから始まるデータはヘッダであるため（ＹＥＳ）、ステップＡ７に進む。一方、データ部Ｄが何らかのコマンドを表すものであり、そのデータ長が０バイトを超える場合には移動先のアドレスから始まるデータはヘッダではないため（ＮＯ）、ステップＡ６に進む。ステップＡ６では、さらに１バイトだけ開始アドレス側に移動してステップＡ４に戻る。その後、移動先のアドレスから始まるデータがヘッダとなるまで（ステップＡ５で「ＹＥＳ」となるまで）、つまりヘッダが見つかるまでステップＡ４〜Ａ６が繰り返し実行される。
【００３４】
ステップＡ４〜Ａ６が繰り返し実行された結果、移動先のアドレスから始まるデータがヘッダであることが確認されると（ステップＡ５で「ＹＥＳ」になると）、ステップＡ７に進む。ステップＡ７では、ヘッダＨ４の後ろに位置するメッセージ長Ｍ４のデータを取得し、ステップＡ８に進む。ステップＡ８では、移動先のアドレス（ヘッダＨ４が格納されたアドレスであり、ヘッダアドレスに相当）と、メッセージ長Ｍ４が表すパケットＰ４のデータ長とからフッタＦ４のアドレス（フッタアドレスに相当）を求め、ステップＡ９に進む。ステップＡ９では、ステップＡ８で求めたアドレスに格納されたデータが実際にフッタであるか否かが判断される。この場合、全てのパケットが正規のデータ構造を有しているため、求めたアドレスと実際のフッタＦ４のアドレスとは一致している。従って、求めたアドレスに格納されたデータはフッタＦ４であるため（ＹＥＳ）、ステップＡ１０に進む。
【００３５】
ステップＡ１０では、ステップＡ２で求めた基準アドレスからステップＡ５で求めたヘッダＨ４の開始アドレスまでの移動量（データ長）と、メッセージ長Ｍ４が表すデータ長とが一致するか否かが判断される。この場合、全てのパケットが正規のデータ構造を有しているため、上記移動量とデータ長とが一致するので（ＹＥＳ）、ステップＡ１１に進む。ステップＡ１１では、パケットＰ４が正常である（正規のデータ構造を有している）と判断されてパケットＰ４のシリアル番号Ｓ４が記憶され、ステップＡ１２に進む。
【００３６】
ステップＡ１２では、さらに１バイトだけ開始アドレス側に移動してステップＡ２に戻る。この場合、パケットＰ４よりも１つ前のパケットであるパケットＰ３のフッタＦ３の最後のビットが格納されたアドレスに移動してステップＡ２に戻る。その後、パケットＰ３、Ｐ２、Ｐ１について、上記したパケットＰ１の場合と同様の手順で異常がないか否かが確認される（ステップＡ２〜Ａ１２）。そして、パケットＰ１が正常であることが確認された後、ステップＡ１２でさらに１バイトだけ遡ると、移動先のアドレスはパケット格納用メモリ２１の開始アドレスを超える。従って、ステップＡ４で「ＹＥＳ」となり、ステップＡ１３に進む。ステップＡ１３では通知処理が行われ、その後に処理終了となる。この通知処理では、正常であると判断されたパケットＰ４〜Ｐ１のシリアル番号Ｓ４〜Ｓ１が、正常に受信した旨を表すデータとともにパソコン５に送信される。なお、この通知処理では、上記シリアル番号Ｓ４〜Ｓ１のうち任意のシリアル番号のみを送信してもよい。すなわち、例えば先頭のパケットＰ１のシリアル番号Ｓ１や、最後尾のパケットＰ４のシリアル番号Ｓ４のみを送信してもよい。
【００３７】
続いて、受信したパケットが正規のデータ構造を有していなかった場合におけるパケット確認処理の流れについて説明する。ここでは、下記の３通りのパターンについて説明する。
（１）ヘッダが存在しない場合
図５は、２番目に受信したパケットＰ２にヘッダ（Ｈ２）が存在しなかったパターンを示している。図５に示すようなヘッダ（Ｈ２）が存在しないパケットＰ２を含む３つのパケットＰ１〜Ｐ３を受信した場合のパケット確認処理の流れは以下のとおりとなる。すなわち、図４のパケット確認処理が開始され、最初にステップＡ１〜Ａ１０が実行された結果、パケット格納用メモリ２１の最終アドレスに最も近いところに格納されたパケットＰ３が正常であることが確認される（ステップＡ９、Ａ１０でいずれも「ＹＥＳ」）。
【００３８】
続くステップＡ１１では、パケットＰ３のシリアル番号Ｓ３が記憶され、ステップＡ１２に進む。ステップＡ１２では、パケットＰ３よりも１つ前のパケットであるパケットＰ２のフッタＦ２の最後のビットが格納されたアドレスに移動し、ステップＡ２に戻る。ステップＡ２では、この時点での移動先のアドレスが基準アドレスとして記憶される。この場合、フッタＦ２の最後のビットが格納されたアドレスが基準アドレスとして記憶され、ステップＡ３に進む。
【００３９】
ステップＡ３では、パケットの最小データサイズ分だけ遡り、ステップＡ４に進む。その後、移動先のアドレスから始まるデータがヘッダであることが確認されるまで、ステップＡ４〜Ａ６が繰り返される。しかし、この場合、パケットＰ２にはヘッダが存在しない。このため、移動先のアドレスから始まるデータがヘッダであることが確認されるのは、パケットＰ１のヘッダＨ１の最初のビットが格納されたアドレス（＝開始アドレス）まで移動したときである。つまり、パケットＰ２のヘッダを探していたはずが、パケットＰ１のヘッダを発見してしまったことになる。
【００４０】
このように、移動先のアドレスから開始されるデータがヘッダＨ１であることが確認されると（ステップＡ５で「ＹＥＳ」）、ステップＡ７に進む。ステップＡ７では、ヘッダＨ１の後ろに位置するメッセージ長Ｍ１のデータを取得し、ステップＡ８に進む。ステップＡ８では、移動先のアドレス（ヘッダＨ１が格納されたアドレス）と、メッセージ長Ｍ１が表すパケットＰ１のデータ長とからフッタＦ１のアドレスを求め、ステップＡ９に進む。
【００４１】
ステップＡ９では、ステップＡ８で求めたアドレスに格納されたデータが、実際にフッタであるか否かを判断する。この場合、ステップＡ８で求めたアドレスにはパケットＰ１のフッタＦ１が格納されている。従って、ステップＡ８で求めたアドレスにフッタが格納されていると判断され（ＹＥＳ）、ステップＡ１０に進む。
【００４２】
ステップＡ１０では、ステップＡ２で記憶した基準アドレスから、ステップＡ５で求めたヘッダＨ１の開始アドレスまでの移動量（データ長）と、メッセージ長Ｍ１が表すデータ長とが一致するか否かが判断される。この場合、上記移動量は、フッタＦ２の最後のビットが格納されたアドレスからヘッダＨ１の最初のビットが格納されたアドレスまでのデータ長となる。つまり、上記移動量は、パケットＰ２全体のデータ長とパケットＰ１全体のデータ長とを加算した長さとなる。一方、メッセージ長Ｍ１が表すデータ長は、パケットＰ１全体のデータ長である。このため、上記移動量とデータ長とが一致しないと判断し（ステップＡ１０で「ＮＯ」）、ステップＡ１４に進む。
【００４３】
ステップＡ１４では、上記移動量が、メッセージ長Ｍ１の表すデータ長よりも長いか否かが判断される。この場合、上記移動量は、メッセージ長Ｍ１が表すデータ長よりも長いと判断され（ＹＥＳ）、ステップＡ１５に進む。ステップＡ１５では、メッセージ長Ｍ１を含むパケットＰ１が正常であるとともに、パケットＰ１より１つ前のパケット（Ｐ２）が異常であると判断される。また、この際、パケットＰ１のシリアル番号Ｓ１を記憶する。そして、ステップＡ１３の通知処理が行われた後、処理終了となる。この通知処理では、パケットＰ３、Ｐ１のシリアル番号Ｓ３、Ｓ１が正常に受信した旨を表すデータとともにパソコン５に送信される。また、この際、パケットＰ１の１つ後に受信したパケット（Ｐ２）が異常であるという内容を表す異常データもパソコン５に送信される。
【００４４】
（２）フッタが存在しない場合
図６は、２番目に受信したパケットＰ２にフッタＦ２が存在しなかったパターンを示している。図６に示すようなフッタＦ２が存在しないパケットＰ２を含む３つのパケットＰ１〜Ｐ３を受信した場合のパケット確認処理の流れは以下のとおりとなる。すなわち、図４のパケット確認処理が開始され、最初にステップＡ１〜Ａ１０が実行された結果、パケット格納用メモリ２１の最終アドレスに最も近いところに格納されたパケットＰ３が正常であることが確認される（ステップＡ９、Ａ１０でいずれも「ＹＥＳ」）。
【００４５】
続くステップＡ１１では、パケットＰ３のシリアル番号Ｓ３が記憶され、ステップＡ１２に進む。ステップＡ１２では、パケットＰ３よりも１つ前のパケットであるパケットＰ２のデータ部Ｄ２の最後のビットが格納されたアドレスに移動し、ステップＡ２に戻る。ステップＡ２では、データ部Ｄ２の最後のビットが格納されたアドレスが基準アドレスとして記憶され、ステップＡ３に進む。
【００４６】
ステップＡ３では、パケットの最小データサイズ分だけ遡り、ステップＡ４に進む。その後、移動先のアドレスから始まるデータがヘッダであることが確認されるまで、ステップＡ４〜Ａ６が繰り返される。その結果、移動先のアドレスから開始されるデータがヘッダＨ２であることが確認されると（ステップＡ５で「ＹＥＳ」）、ステップＡ７に進む。ステップＡ７では、ヘッダＨ２の後ろに位置するメッセージ長Ｍ２のデータを取得し、ステップＡ８に進む。ステップＡ８では、ヘッダＨ２が格納されたアドレスと、メッセージ長Ｍ２が表すパケットＰ２のデータ長とからフッタＦ２のアドレスを求め、ステップＡ９に進む。
【００４７】
ステップＡ９では、ステップＡ８で求めたアドレスに格納されたデータが、実際にフッタであるか否かが判断される。この場合、パケットＰ２にはフッタが存在せず、ステップＡ８で求めたアドレスにはデータ部Ｄ２の一部が格納されている。従って、ステップＡ８で求めたアドレスにフッタが格納されていないと判断され（ＮＯ）、ステップＡ６に進む。ステップＡ６では、パケットＰ２よりも１つ前のパケットであるパケットＰ１のフッタＦ１の最後のビットが格納されたアドレスに移動し、ステップＡ４に戻る。その後、移動先のアドレスから始まるデータがヘッダであることが確認されるまで、つまり次のヘッダが見つかるまでステップＡ４〜Ａ６が繰り返し実行される。
【００４８】
ステップＡ４〜Ａ６が繰り返し実行された結果、移動先のアドレスから開始されるデータがヘッダＨ１であることが確認されると（ステップＡ５で「ＹＥＳ」）、ステップＡ７に進む。ステップＡ７では、ヘッダＨ１の後ろに位置するメッセージ長Ｍ１のデータを取得し、ステップＡ８に進む。ステップＡ８では、ヘッダＨ１が格納されたアドレスと、メッセージ長Ｍ１が表すパケットＰ１のデータ長とからフッタＦ１のアドレスを求め、ステップＡ９に進む。この場合、ステップＡ８で求めたアドレスにはパケットＰ１のフッタＦ１が格納されている。従って、ステップＡ９では、ステップＡ８で求めたアドレスにフッタが格納されていると判断され（ＹＥＳ）、ステップＡ１０に進む。
【００４９】
ステップＡ１０では、ステップＡ２で記憶した基準アドレスから、ステップＡ５で求めたヘッダＨ１の開始アドレスまでの移動量（データ長）と、メッセージ長Ｍ１が表すデータ長とが一致するか否かを判断する。この場合、上記移動量は、データ部Ｄ２の最後のビットが格納されたアドレスからヘッダＨ１の最初のビットが格納されたアドレスまでのデータ長となる。つまり、上記移動量は、パケットＰ２全体のデータ長とパケットＰ１全体のデータ長とを加算した長さとなる。一方、メッセージ長Ｍ１が表すデータ長は、パケットＰ１全体のデータ長である。このため、上記移動量とデータ長とが一致しないと判断され（ステップＡ１０で「ＮＯ」）、ステップＡ１４に進む。
【００５０】
ステップＡ１４では、上記移動量が、メッセージ長Ｍ１が表すデータ長よりも長いと判断され（ＹＥＳ）、ステップＡ１５に進む。ステップＡ１５では、メッセージ長Ｍ１を含むパケットＰ１が正常であるとともに、パケットＰ１より１つ前のパケット（Ｐ２）が異常であると判断される。また、この際、パケットＰ１のシリアル番号Ｓ１が記憶される。そして、ステップＡ１３の通知処理を行われた後、処理終了となる。この通知処理では、パケットＰ３、Ｐ１のシリアル番号Ｓ３、Ｓ１が正常に受信した旨を表すデータとともにパソコン５に送信される。また、この際、パケットＰ１の１つ後に受信したパケット（Ｐ２）が異常であるという内容を表す異常データもパソコン５に送信される。
【００５１】
（３）メッセージ長が一致しない場合
図７は、２番目に受信したパケットＰ２のメッセージ長Ｍ２が誤ったデータ（パケットＰ２全体のデータ長を正しく表していないデータ）であるパターンを示している。図７に示すようなメッセージ長Ｍ２が誤ったデータであるパケットＰ２を含む３つのパケットＰ１〜Ｐ３を受信した場合のパケット確認処理の流れは以下のとおりとなる。すなわち、図４のパケット確認処理が開始され、最初にステップＡ１〜Ａ１０が実行された結果、パケット格納用メモリ２１の最終アドレスに最も近いところに格納されたパケットＰ３が正常であることが確認される（ステップＡ９、Ａ１０でいずれも「ＹＥＳ」）。
【００５２】
続くステップＡ１１では、パケットＰ３のシリアル番号Ｓ３が記憶され、ステップＡ１２に進む。ステップＡ１２では、パケットＰ３よりも１つ前のパケットであるパケットＰ２のフッタＦ２の最後のビットが格納されたアドレスに移動し、ステップＡ２に戻る。ステップＡ２では、フッタＦ２の最後のビットが格納されたアドレスが基準アドレスとして記憶され、ステップＡ３に進む。
【００５３】
ステップＡ３では、パケットの最小データサイズ分だけ遡り、ステップＡ４に進む。その後、移動先のアドレスから始まるデータがヘッダであることが確認されるまで、ステップＡ４〜Ａ６が繰り返される。その結果、移動先のアドレスから開始されるデータがヘッダＨ２であることが確認されると（ステップＡ５で「ＹＥＳ」）、ステップＡ７に進む。ステップＡ７では、ヘッダＨ２の後ろに位置するメッセージ長Ｍ２のデータを取得し、ステップＡ８に進む。ステップＡ８では、ヘッダＨ２が格納されたアドレスと、メッセージ長Ｍ２が表すパケットＰ２のデータ長とからフッタＦ２のアドレスを求め、ステップＡ９に進む。
【００５４】
ステップＡ９では、ステップＡ８で求めたアドレスに格納されたデータが、実際にフッタであるか否かが判断される。この場合、メッセージ長Ｍ２が誤ったデータであるため、ステップＡ８で求めたアドレスにはフッタＦ２は格納されていない。従って、ステップＡ８で求めたアドレスにフッタが格納されていないと判断され（ＮＯ）、ステップＡ６に進む。ステップＡ６では、パケットＰ２よりも１つ前のパケットであるパケットＰ１のフッタＦ１の最後のビットが格納されたアドレスに移動し、ステップＡ４に戻る。その後、移動先のアドレスから始まるデータがヘッダであることが確認されるまで、つまり次のヘッダが見つかるまでステップＡ４〜Ａ６が繰り返し実行される。
【００５５】
ステップＡ４〜Ａ６が繰り返し実行された結果、移動先のアドレスから開始されるデータがヘッダＨ１であることが確認されると（ステップＡ５で「ＹＥＳ」）、ステップＡ７に進む。ステップＡ７では、ヘッダＨ１の後ろに位置するメッセージ長Ｍ１のデータを取得し、ステップＡ８に進む。ステップＡ８では、ヘッダＨ１が格納されたアドレスと、メッセージ長Ｍ１が表すパケットＰ１のデータ長とからフッタＦ１のアドレスを求め、ステップＡ９に進む。この場合、ステップＡ８で求めたアドレスにはパケットＰ１のフッタＦ１が格納されている。従って、ステップＡ９では、ステップＡ８で求めたアドレスにフッタが格納されていると判断され（ＹＥＳ）、ステップＡ１０に進む。
【００５６】
ステップＡ１０では、ステップＡ２で記憶した基準アドレスから、ステップＡ５で求めたヘッダＨ１の開始アドレスまでの移動量（データ長）と、メッセージ長Ｍ１が表すデータ長とが一致するか否かが判断される。この場合、上記移動量は、データ部Ｄ２の最後のビットが格納されたアドレスからヘッダＨ１の最初のビットが格納されたアドレスまでのデータ長となる。つまり、上記移動量は、パケットＰ２全体のデータ長とパケットＰ１全体のデータ長とを加算した長さとなる。一方、メッセージ長Ｍ１が表すデータ長は、パケットＰ１全体のデータ長である。このため、上記移動量とデータ長とが一致しないと判断され（ステップＡ１０で「ＮＯ」）、ステップＡ１４に進む。
【００５７】
ステップＡ１４では、上記移動量が、メッセージ長Ｍ１が表すデータ長よりも長いと判断され（ＹＥＳ）、ステップＡ１５に進む。ステップＡ１５では、メッセージ長Ｍ１を含むパケットＰ１が正常であるとともに、パケットＰ１より１つ前のパケット（Ｐ２）が異常であると判断される。また、この際、パケットＰ１のシリアル番号Ｓ１が記憶される。そして、ステップＡ１３の通知処理を行われた後、処理終了となる。この通知処理では、パケットＰ３、Ｐ１のシリアル番号Ｓ３、Ｓ１が正常に受信した旨を表すデータとともにパソコン５に送信される。また、この際、パケットＰ１の１つ後に受信したパケット（Ｐ２）が異常であるという内容を表す異常データもパソコン５に送信される。
【００５８】
なお、上記（１）〜（３）のケースおよび全パケットが正規のデータ構造を有しているケースのいずれにおいても、ヘッダと同じデータが例えばデータ部などに存在した場合には、ステップＡ５の判断においてヘッダではないデータをヘッダであると誤判定する可能性がある。しかし、このような場合、通常は、その誤判定したヘッダの後ろにはメッセージ長が存在しないため、ステップＡ９の判断において「ＮＯ」になる。これにより、正規のヘッダを見つけるまでステップＡ４〜Ａ６が繰り返し実行される。
【００５９】
ただし、上記誤判定したヘッダの後ろのデータが偶然にもデータ長と同形式のデータであり、ステップＡ８においてこれらから求められるアドレスに偶然にもフッタが存在した場合には、誤って判断したヘッダに基づいてパケットのデータ構造が正しいか否かの判断が行われてしまう可能性がある。しかし、このような場合、基準アドレスから誤判定したヘッダの開始アドレスまでの移動量と、メッセージ長が表すデータ長とが一致しないため、ステップＡ１０の判断で必ず「ＮＯ」となる。また、上記移動量は、メッセージ長が表すデータ長よりも短いため、続くステップＡ１１の判断で「ＮＯ」となる。これにより、正規のヘッダを見つけるまでステップＡ４〜Ａ６が繰り返し実行される。
【００６０】
なお、本実施形態では、ステップＡ２〜Ａ６がヘッダ探索処理に相当し、ステップＡ７が全データ長取得処理に相当し、ステップＡ８がフッタアドレス検出処理に相当し、ステップＡ９がフッタ確認処理に相当する。また、ステップＡ２〜Ａ９が第１の確認処理に相当し、ステップＡ１０、Ａ１４が第２の確認処理に相当し、ステップＡ１１が正常データ記憶処理に相当し、ステップＡ１５が異常データ記憶処理に相当し、ステップＡ１３が通知処理に相当する。
【００６１】
以上説明したように、本実施形態によれば次のような効果が得られる。
パソコン５から送信されるパケットは、コントローラ３のパケット格納用メモリ２１に一時的に格納される。コントローラ３の制御部２２は、パケット格納用メモリ２１に格納された全てのパケットに対してパケット確認処理を実行する。このパケット確認処理では、各パケットのそれぞれについて、個別に正常または異常という判断がなされる。そして、制御部２２は、正常であると判断したパケットのシリアル番号を、正常に受信した旨を表すデータとともにパソコン５に送信する。正常でないと判断したパケットについては、そのシリアル番号を取得することができないし、また取得できたとしてもそれが正しいか否かは不明である。このため、制御部２２は、正常でないと判断したパケットを、例えば正常であると判断したパケットの１つ後に受信したパケットという形で特定し、その旨を表す異常データをパソコン５に送信する。
【００６２】
このように、本実施形態では、パソコン５から送信されたコマンドを適切に受信できなかった場合には、そのコマンドを構成するパケットのどこに問題があったか（どのパケットが異常であったか）を表すデータがパソコン５に送信されることになる。これにより、パソコン５を操作するユーザは、送信したコマンドに受信エラーが生じた場合、その送信したコマンドのうち、どの部分に問題があったのかを容易に把握することができ、以ってプログラムのデバッグ作業を容易に行い得るようになる。
【００６３】
制御部２２は、パケット確認処理を行う際、パケット格納用メモリ２１の最終アドレスに最も近いところに格納された最後のパケットから順番に正常であるか否かの確認を行うようにしている。この理由について、先頭のパケット（開始アドレスに最も近いところに格納されたパケット）から順番にパケット確認処理を行う場合（以下、比較例と称す）と比較しながら説明する。図８は、比較例のパケット確認処理が行われる際におけるパケット格納用メモリ２１の状態を示す図である。図９は、本実施形態のパケット確認処理が行われる際におけるパケット格納用メモリ２１の状態を示す図である。
【００６４】
比較例では、図８（ａ）に示すように、パケットＰ１、Ｐ２をこの順に受信した場合、パケットＰ１からチェックが行われる。このチェック中に、図８（ｂ）に示すように、新たにパケットＰ３を受信すると、パケットＰ２の後にパケットＰ３が格納される。このため、このパケット確認処理は、パケットＰ３のチェックが終了するまで継続されることになる。さらに、このチェック中に、図８（ｃ）に示すように、新たにパケットＰ４を受信すると、パケットＰ３の後ろにパケットＰ４が格納され、そのパケットＰ４のチェックが終了するまでパケット確認処理が継続することになる。従って、比較例の場合、所定のパケットに対するパケット確認処理が実行されている途中で新たにパケットを受信すると、その度にパケット確認処理の終了が先に延びることになる。このような場合、パケットを受信してから、そのパケットに対する受信処理が実行されるまでに長い時間を要してしまう可能性がある。つまり、パケットの受信から、そのパケットのデータ部が表す制御内容に基づくロボット２の動作制御が開始されるまでの遅延時間が長くなる可能性がある。
【００６５】
一方、本実施形態では、図９（ａ）に示すように、パケットＰ１、Ｐ２をこの順に受信した場合、パケットＰ２から先に正常であるか否かの確認（以下、チェックと称す）が行われる。このチェック中に、図９（ｂ）に示すように、新たにパケットＰ３、Ｐ４をこの順に受信すると、パケットＰ２の後にパケットＰ３、Ｐ４の順に格納される。この場合、本実施形態のパケット確認処理では、新たに格納されたパケットＰ３、Ｐ４の影響を受けることなく、パケットＰ２のチェックが引き続き実行され、その後、パケットＰ１のチェックが行われる。
【００６６】
このように、パケットＰ１、Ｐ２のチェックが完了した後、その時点において、パケット格納用メモリ２１に格納されているパケットのうち、未だチェックが行われていないパケットＰ３、Ｐ４に対するチェックが実行されることになる。従って、本実施形態のパケット確認処理は、所定のパケットに対するパケット確認処理が実行されると、当該パケットに対するチェックが完了し次第、パケット確認処理は一旦終了される。従って、この時点でパケット確認処理が完了しているパケットに対する受信処理を実行することが可能となる。このような構成によれば、パケットを受信してから、そのパケットに対する受信処理が実行されるまでに長い時間を要することなく、パケットの受信から、そのパケットのデータ部が表す制御内容に基づくロボット２の動作制御が開始されるまでの遅延時間を極力短くすることができる。
【００６７】
また、ヘッダ探索処理を実行する際、基準アドレスを記憶した後、基準アドレスから想定されるパケットの最小データサイズ分だけ開始アドレス側に一括して移動するように構成した。基準アドレス（パケットの最後尾のアドレス）からパケットの最小データサイズ分だけ開始アドレス側に移動した場合、そのパケットのデータサイズが最小のデータサイズであれば、移動先のアドレスにヘッダが存在する。また、そのパケットのデータサイズが最小のデータサイズよりも大であれば、移動先のアドレスは、ヘッダよりも後のデータ（メッセージ長、シリアル番号、データ部）が存在することになる。つまり、いずれにしても、そのパケットのヘッダを発見し損ねてしまうことはない。さらに、このように構成することで、基準アドレスから開始アドレス側に１バイトずつ移動してヘッダを探すだけの構成と比較して、ヘッダを発見するために要する制御部２２の負荷を軽くできるとともに処理時間を短縮することができる。
【００６８】
さて、いずれも正規のデータ構造を有していない２つのパケットを連続して受信した場合であって、これら２つが組み合わさると正規のデータ構造を有する１つのパケットとみなされる場合を考えてみる。例えば、ヘッダ、メッセージ長、シリアル番号のみを有するパケットＰａの後にデータ部、フッタのみを有するパケットＰｂを受信した場合であって、パケットＰａのメッセージ長が示すデータ長がパケットＰａ全体のデータ長とパケットＰｂ全体のデータ長とを加算したものと同一であった場合には、結果的に１つの正規なデータ構造を有したパケットを受信したことと同じ状態になる。この場合には、本実施形態の構成では、各パケットＰａ、Ｐｂに異常があることを検出できない。しかしながら、上記ケースは非常に稀な場合であって、通常はほとんど起こりえないため、問題とはならない。このため、本実施形態では、このような極めて稀なケースを対象とはしていない。
【００６９】
なお、本発明は上記し且つ図面に記載した実施形態に限定されるものではなく、次のような変形または拡張が可能である。
パケットＰのデータ構造としては、シリアル番号Ｓとデータ部Ｄとが入れ替わったものであってもよい。
図４におけるステップＡ１４の判断ステップは、パケット内のヘッダ、フッタ以外の部分にヘッダ、フッタと同一のデータが偶然存在するといった稀なケースを想定する必要がない場合には省略可能である。この場合、ステップＡ１０で「ＮＯ」の場合にステップＡ１５に進むように構成すればよい。
図４におけるステップＡ３に代えて、基準アドレスから開始アドレス側に１バイト移動するステップを設けてもよい。
上記実施形態では、本発明を６軸の垂直多関節型のロボットの制御を行うコントローラ３に適用した例を説明したが、本発明は、外部から与えられる制御命令に従ってロボットの動作制御を行うロボットのコントローラ全般に適用可能である。
【符号の説明】
【００７０】
図面中、２はロボット、３はコントローラ（ロボットのコントローラ）、２１はパケット格納用メモリ、２２は制御部を示す。
【図１】
0005445233.tif 000002
【図２】
0005445233.tif 000003
【図３】
0005445233.tif 000004
【図４】
0005445233.tif 000005
【図５】
0005445233.tif 000006
【図６】
0005445233.tif 000007
【図７】
0005445233.tif 000008
【図８】
0005445233.tif 000009
【図９】
0005445233.tif 000010