(57)【要約】【課題】ノードに擬した通信手順を任意に作成可能とすることにより、ノードの通信動作を評価可能とする通信動作評価装置を提供する。【解決手段】通信バス１００に接続される複数のノード間で情報の送受信が行われるノード４００の通信動作を評価する通信動作評価装置において、評価対象ノード４００との間で情報が送受信される他のノードに擬したエミュレータ機能部３０２を備え、エミュレータ機能部３０２は、送受信の手順を作成する機能と、作成された手順に従って評価対象ノードと情報の送受信を行う機能と、受信したデータを判断する機能と、を備えていることを特徴とする。【選択図】    図１
2004246514.tif 000002
【特許請求の範囲】
【請求項１】
通信バスに接続される複数のノード間で情報の送受信が行われるノードの通信動作を評価する通信動作評価装置において、
評価対象ノードとの間で情報が送受信される他のノードに擬したエミュレータ機能部を備え、
該エミュレータ機能部は、送受信の手順を作成する機能と、作成された手順に従って評価対象ノードと情報の送受信を行う機能と、受信したデータを判断する機能と、を備えていることを特徴とする通信動作評価装置。
【請求項２】
送受信の手順の作成はマクロ言語を用いて作成する構成となっている請求項１に記載の通信動作評価装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、たとえば車載ナビゲータやオーディオシステムに用いられる小規模ネットワークのノードの通信動作をエミュレートする通信動作評価装置に関する。
【０００２】
【従来の技術】
従来のこの種の車両内の小規模ネットワークとして、たとえばＩＥＢｕｓ（日本電気（株）の登録商標）が知られている。ＩＥＢｕｓとは、日本電気（株）が提唱した車両内通信機能に対応するフォーマット規格であり、現在では車載オーディオシステムやナビゲーションシステム等の標準的な規格となっている。
本出願人は、従来からＩＥＢｕｓに準拠した通信バスを流れる通信フレームを、パソコン上でモニタする装置を開発してきたが、モニタだけでなく、通信バスに接続されるノード（ＣＤプレーヤーやカーナビ等）の通信動作を評価をするエミュレータの開発が要請されている。
【０００３】
【発明が解決しようとする課題】
しかし、通信バスに接続されるノードが複数存在し、個別のノードについて専用のエミュレータを準備すると、複数のエミュレータが必要となる。
類似の従来技術としては、たとえば特許文献１に記載されるようなものが知られている。
【特許文献１】特開平６−５９９８８号公報
【０００４】
本発明の目的は、ノードに擬した通信手順を任意に作成可能とすることにより、種々のノードの通信動作を評価可能とする通信動作評価装置を提供することである。
【０００５】
【課題を解決するための手段】
上記目的を達成するために、本発明は、通信バスに接続される複数のノード間で情報の送受信が行われるノードの通信動作を評価する通信動作評価装置において、
評価対象ノードとの間で情報が送受信される他のノードに擬したエミュレータ機能部を備え、
該エミュレータ機能部は、送受信の手順を作成する機能と、作成された手順に従って評価対象ノードと情報の送受信を行う機能と、受信したデータを判断する機能と、を備えていることを特徴とする。
送受信の手順の作成はマクロ言語を用いて作成する構成となっている。
【０００６】
【発明の実施の形態】
以下に本発明を図示の実施の形態に基づいて説明する。
図１（Ａ）は、本発明の実施の形態に係る通信動作評価装置が適用される通信ネットワークのブロック図である。
１００はＩＥＢｕｓに準拠した通信バスで、この通信バス１００に、ＣＤプレーヤやカーナビゲーション等の評価対象ノード４００が接続されると共に、ダミーホード２００を介して通信動作評価装置としてのコンピュータ３００が接続される。
【０００７】
ダミーボード２００には、通信バス１００とのインターフェース２０１と、コンピュータ３００とのインターフェース２０２が設けられている。コンピュータ３００とダミーボード２００間はＲＳ−２３２Ｃ（直列データ通信の接続インターフェイス規格）に準拠したケーブル２０３で接続されており、ダミーボード２００によって、ＩＥＢｕｓとＲＳ２３２Ｃ間のデータフォーマットが変換される。
【０００８】
コンピュータ３００は、通信バス１００上を流れる情報をモニタするモニタ機能部３０１と、ノードの通信動作をエミュレートするエミュレータ機能部３０２と、通信バス１００上に各種コマンド信号を送信するシングル送信機能部３０３とを備えている。
エミュレータ機能部３０２は、評価対象ノード４００との間で情報が送受信される他のノード、たとえばＣＤプレーヤやカーナビゲーションのコントローラ等の通信動作に擬した送受信の手順を作成する機能と、作成された手順に従って評価対象ノード４００と情報の送受信を行う機能と、受信したデータを判断する機能とを備えている。送受信の手順の作成は、マクロ言語によって作成される。
【０００９】
コンピュータ３００は、図１（Ｂ）に示すように、マイクロプロセッサ（ＣＰＵ）３１０と、ＲＡＭなどの主記憶装置３２０と、ハードディスク等の補助記憶装置３３０と、キーボード等の入力装置３４０と、表示装置３５０と、通信ポート３６０等によって構成される。
エミュレータ機能部３０２は、主記憶装置３２０あるいは補助記憶装置３３０に格納されたマクロ編集プログラムおよびマクロ編集プログラムによって編集された動作プログラム、これらのプログラムを読み出して実行するマイクロプロセッサ３１０、編集に必要なキーボード等の入力装置３４０、プログラムを表示するための表示装置３５０、ダミーボード２０３と接続するための通信ポート３６０等によって実現される。
【００１０】
本動作評価装置に用いられるマクロ言語は、１行に１命令を記述し、１行ずつ実行するもので、その仕様は次の通りである。
１）コメント
’＃’文字以降はすべてコメントとなる。行のはじめに’＃’文字があった場合は行全体がコメントとして扱われ，行の途中から’＃’文字があった場合はその部分からがコメントとして扱われ、実行時には無視される。
例：
＃フレームの送信
ＳＥＮＤ  ｆｒａｍｅ０
ＲＥＣＶ  ｆｒａｍｅ１  ＃送信したフレームに対するリプライを受信する。
【００１１】
２）変数の型と宣言
変数が使用できる。型にはＩＤＡＴＡ型，ＩＮＴ型，ＩＦＲＡＭＥ型，ＩＦＭＡＳＫ型がある。
変数の１文字目は必ずアルファベットの小文字で記述しなければならない。また、変数に使える文字はアルファベットとアンダーラインと数字のみで、最大文字数は２５５文字である。
マクロ記述ファイル内で使用する変数の宣言をまとめて行い、プロシージャ（後述）の宣言がそれに続き、その後に処理の記述を行う、という順序で記述されていなければならない。
【００１２】
＜ＩＤＡＴＡ型＞
ＩＤＡＴＡ型は，２５５バイトという固定サイズのバイト値の配列で、ＩＥＢｕｓの通信フレームデータの配列を定義するのに使用する。
各エントリは符号無しの８ビット値で、初期化されていない値はゼロ詰めされる。
例：
ＩＤＡＴＡ  ａ＝｛０ｘ００，０ｘ１２，０ｘ１３｝
ａ［１０］＝０ｘ５５
【００１３】
＜ＩＮＴ型＞
ＩＮＴ型は、整数の値を定義するのに使用する。
します．内部的に符号付３２ビット（４バイト）のサイズである。値としては−２Ｇ（ギガ〜＋２Ｇ（ギガ）までの値を扱える。ＩＤＡＴＡ型の各エントリやＩＦＲＡＭＥおよびＩＦＭＡＳＫの各メンバ（ａｄｒなど）にＩＮＴ型の変数の値を代入することもできる。このときは，ＩＮＴ型３２ビットの下位ビットだけが符号無し数として代入される。
例：
ＩＤＡＴＡ  ａ
ＩＮＴ  ｙ＝１
ａ［２］＝ｙ
ＩＮＴ型に限っては、１次元および２次元までの配列としても扱える。
例：
ＩＮＴ  ｙ［２］
ｙ［０］＝５０
ｙ［１］＝３０
例：
ＩＮＴ  ｘ［２］［３］
ｘ［０］［２］＝５０
ｘ［１］［２］＝３０
【００１４】
＜ＩＦＲＡＭＥ型＞
ＩＦＲＡＭＥ型は、ＩＥＢｕｓフレームを定義する。内部的には構造体となっており、各メンバは以下の通りである。各メンバへのアクセスはＣ  言語と同様な方式で行う。すべてのメンバについて初期化されていない値はゼロ詰めされる。
ＩＦＲＡＭＥ  ｛
ＩＮＴ  ｂｉｔ  同報ビット
ＩＮＴ  ａｄｒ  スレーブアドレス
ＩＮＴ  ｓｉｚｅ  電文長
ＩＤＡＴＡ  ｄａｔａ  フレームデータ配列
｝
例：
ＩＦＲＡＭＥ  ｆｒａｍｅ０
ＩＤＡＴＡ  ａ
ｆｒａｍｅ０．ｄａｔａ［３］＝５
ｆｒａｍｅ０．ｄａｔａ＝ａ
ＩＦＲＡＭＥ  ｆｒａｍｅ１＝｛１，０ｘ１２３，５，０ｘ００，０ｘ０１，０ｘ０２｝
上記例では、１が同報ビット、０ｘ１２３がスレーブアドレス、５が電文長、その後の０ｘ００，０ｘ０１．．．はデータで、ＤＡＴＡ型同様２５５バイト固定のエリアを内部では確保しておき、初期化されていない部分は０ｘ００詰めされる。
なお、同報ビットは０で同報、１で個別を示す。
【００１５】
＜ＩＦＭＡＳＫ型＞
ＩＦＭＡＳＫ型は、ＩＥＢｕｓ  フレームマスクを定義する。これは、後述のＣＨＥＣＫコマンドを使用して、受信したフレームの一部にマスキングをかけた値と規定値を比較チェックする場合などに使用する。内部構成はＩＦＲＡＭＥ型と同じで、アクセス方法などもまったく同じに行える。
例：
ＩＦＲＡＭＥ  ｃｈｅｃｋｆｒａｍｅ＝｛１，０ｘ１２３，５，０ｘ００，０ｘ０１，０ｘ０２｝
ＩＦＲＡＭＥ  ｒｅｃｖｆｒａｍｅ
ＩＦＭＡＳＫ  ｆｍａｓｋ＝｛０，０ｘｆｆｆｆ，０ｘ０，０ｘｆｆ，０ｘｆｆ，０ｘｆｆ｝
ＲＥＣＶ  ｒｅｃｖｆｒａｍｅ
ＣＨＥＣＫ  ｃｈｅｃｋｆｒａｍｅ  ｒｅｃｖｆｒａｍｅ  ｆｍａｓｋ
ＩＦＭＡＳＫ宣言では、同報ビットが非マスク（チェック対象外）で、アドレスがマスク（チェック対象）、電文長が非マスク（チェック対象外）、データのはじめの３バイト分がマスク（チェック対象）となっている。
ＲＥＣＶ  コマンドで受信したフレームとｃｈｅｃｋｆｒａｍｅとして宣言したフレームをｆｍａｓｋでアンドをとって比較するコマンドがＣＨＥＣＫコマンドである。
【００１６】
３）定数
定数が使用できる。
定数値はＣ言語と同様の仕様で、０ｘが頭に付く数値は１６進数、０が頭に付く数値は８  進数、何も付かなければ１０進数となる。
定数は、変数の初期化値、値の代入、シフト値などに使用する。
【００１７】
４）ラベル
ラベルが使用できる。
ラベルは、後述のＧＯＴＯコマンドやＩＦ〜ＴＨＥＮコマンドなどの行き先としてマクロファイルの位置を示す場合に使用する。ラベルの有効範囲（スコープ）は、プロシージャ（後述）はその中のみとなり、また逆にメイン処理部からプロシージャ内部のラベルを参照することもできない。
ラベルの１文字目は必ずアルファベットの小文字で記述しなければならない。また、ラベルに使える文字はアルファベットとアンダーラインと数字のみで、最大文字数は２５５  文字である。
例：
ｌａｂｅｌ０：
上記のように’：’文字で終わり、小文字のラベル名で始まる行である。ラベルを記述した行には他のコマンドなどを記述できない。
【００１８】
５）プロシージャ
このマクロでは、プロシージャというひとまとまりの処理が記述できる。プロシージャは、後述の定期処理用のプロシージャとして登録したり、キー処理用のプロシージャとして登録したり、ＧＯＳＵＢコマンドでサブルーチンとしてコールするためのものである。
例：
ＰＲＯＣ  ｐｒｏｃ０
・・・処理の記述
ＥＮＤＰＲＯＣ
このように必ずＰＲＯＣではじまり、ＥＮＤＰＲＯＣで終わらなければならない。ＰＲＯＣ内からのラベルへのＧＯＴＯは同一のＰＲＯＣ内に限られる（ＩＦのラベルも同様）。また、ＰＲＯＣ内では定期送信やキー入力の設定、解除を行ってはいけない。
【００１９】
６）演算
本マクロでは、変数への代入や演算が記述できる。式として１行に記述できる演算の種類を以下に示す。
ａ［３］  ＋＝  ５  定数値の加算
ａ［３］  −＝  ５  定数値の減算
ａ［３］  ｜＝  ５  定数値の論理和
ａ［３］  ＆＝  ５  定数値の論理積
ａ［３］  ／＝  ５  定数値の除算
ａ［３］  ＊＝  ５  定数値の積算
ａ［３］  ＜＜＝  ５  左ビットシフト
ａ［３］  ＞＞＝  ５  右ビットシフト
ａ［３］  ＝  ５  定数値の代入
ａ［３］  ＋＝  ｂ  変数の加算
ａ［３］  −＝  ｂ  変数の減算
ａ［３］  ｜＝  ｂ  変数の論理和
ａ［３］  ＆＝  ｂ  変数の論理積
ａ［３］  ／＝  ｂ  変数の除算
ａ［３］  ＊＝  ｂ  変数の積算
ａ［３］  ＜＜＝  ｂ  左ビットシフト
ａ［３］  ＞＞＝  ｂ  右ビットシフト
ａ［３］  ＝  ｂ  変数の代入
ただし、左辺と右辺の変数型は同じものでなければならない。
また、左辺、演算子、右辺の間には必ず空白（空白文字あるいはＴＡＢ）が入っていなくてはならない。演算子の＋などと＝の間には空白があってはならない。論理和、論理積、ビットシフト演算に関しては、変数としては符号付きであるＩＮＴ型などでも、符号無しの値として扱われる。
【００２０】
７）フロー制御コマンド
本マクロでのフロー制御のコマンドとしては、以下の通りである。
＜ＳＷＩＴＣＨ  〜ＣＡＳＥ  コマンド＞
ＳＷＩＴＣＨコマンドのパラメータとしては変数名を指定しなければならない。変数の型はＩＮＴ型あるいは、ＩＤＡＴＡ型の各エントリ、ＩＦＲＡＭＥ型およびＩＦＭＡＳＫ型の各メンバを指定することができる。
ＳＷＩＴＣＨ〜ＥＮＤＳＷＩＴＣＨコマンドの中にＳＷＩＴＣＨ〜ＥＮＤＳＷＩＴＣＨコマンドを含めるという入れ子構造も記述できる。
例：
ＩＤＡＴＡ  ａｂｃ
ＳＷＩＴＣＨ  ａｂｃ［３］
ＣＡＳＥ  ０
・・・処理の記述
ＥＮＤＣＡＳＥ
ＣＡＳＥ  ０ｘ１１
・・・処理の記述
ＥＮＤＣＡＳＥ
ＣＡＳＥ  ０ｘ２２
・・・処理の記述
ＥＮＤＣＡＳＥ
ＣＡＳＥ  ＤＥＦＡＵＬＴ
・・・処理の記述
ＥＮＤＣＡＳＥ  ＥＮＤＳＷＩＴＣＨ
【００２１】
＜ＩＦ〜ＴＨＥＮ  コマンド＞
ＩＦの後に記述する式の評価結果に従ってＴＨＥＮの後に記述したラベルに飛ぶ。ここでは、符号付きの変数は符号付きの変数として、符号無しの変数は符号無しとして扱われる。
例：
ＩＦ  ａ  ！＝  ０  ＴＨＥＮ  ｌａｂｅｌ０
ＩＦ  ａ  ＝＝  ０  ＴＨＥＮ  ｌａｂｅｌ０
ＩＦ  ａ  ＆  １  ＴＨＥＮ  ｌａｂｅｌ０
ＩＦ  ａ  ＜  １  ＴＨＥＮ  ｌａｂｅｌ０
ＩＦ  ａ  ＞  １  ＴＨＥＮ  ｌａｂｅｌ０
ＩＦ  ａ  ＜＝  １  ＴＨＥＮ  ｌａｂｅｌ０
ＩＦ  ａ  ＞＝  １  ＴＨＥＮ  ｌａｂｅｌ０
【００２２】
＜ＷＨＩＬＥ  コマンド＞
ＷＨＩＬＥの後に記述する式の評価結果が真である間、ＥＮＤＷＨＩＬＥまでの処理を実行する。
ＷＨＩＬＥ〜ＥＮＤＷＨＩＬＥコマンドの中にＷＨＩＬＥ〜ＥＮＤＷＨＩＬＥコマンドを含めるという入れ子構造も記述できる。
例：
ＷＨＩＬＥ  ａ！＝０
・・・処理の記述
ＥＮＤＷＨＩＬＥ
【００２３】
＜ＧＯＴＯ  コマンド＞
ＧＯＴＯの後に記述したラベルに飛ぶ。
例：
ＧＯＴＯ  ｌａｂｅｌ０
＜ＥＸＩＴ  コマンド＞
マクロ処理を強制的に終わらせる。パラメータなしで指定し，その場所でマクロから抜けてしまうものである。ただし，プロシージャ内で本コマンドを使用することはできない。
例：
ＥＸＩＴ
【００２４】
８）その他のコマンド
そのほか、後述のＣＳＶ形式ファイル用のコマンド以外に以下のコマンドがある。
＜ＷＡＩＴ  コマンド＞
指定したミリ秒分スリープする。
例：
ＷＡＩＴ  １００
＜ＳＥＮＤ  コマンド＞
指定したフレームを送信する。
例：
ＳＥＮＤ  ｆｒａｍｅ０
＜ＲＥＣＶ  コマンド＞
指定した変数にフレームを受信する。タイムアウト値（ミリ秒単位）を指定できる。タイムアウトは省略することも可能である。省略時はタイムアウトせず受信するまで待つ。
例：
ＲＥＣＶ  ｆｒａｍｅ０  １００
【００２５】
＜ＣＨＥＣＫ  コマンド＞
指定したフレームを，ＩＦＭＡＳＫ型の変数で指定したパターンで１  の部分のみチェックする。
比較した結果がイコールならば後述するシステム定義変数ｅｒｒｎｏ  には０  がセットされ、イコールでなければ−１がセットされる。
例：
ＩＦＲＡＭＥ  ｃｈｅｃｋｆｒａｍｅ＝｛１，０ｘ１２３，５，０ｘ００，０ｘ０１，０ｘ０２｝
ＩＦＲＡＭＥ  ｒｅｃｖｆｒａｍｅ
ＩＦＭＡＳＫ  ｆｍａｓｋ＝｛０ｘ０，０ｘｆｆｆｆ，０ｘ０，０ｘｆｆ，０ｘｆｆ，０ｘｆｆ｝
ＲＥＣＶ  ｒｅｃｖｆｒａｍｅ
ＣＨＥＣＫ  ｃｈｅｃｋｆｒａｍｅ  ｒｅｃｖｆｒａｍｅ  ｆｍａｓｋ
ＩＦ  ｅｒｒｎｏ  ！＝  ０  ＴＨＥＮ  ｌａｂｅｌ＿ｅｒｒｏｒ
ＥＣＨＯ  チェックＯＫ
・・・処理の記述
ｌａｂｅｌ＿ｅｒｒｏｒ：
ＥＣＨＯ  チェックエラー
上記のＩＦＭＡＳＫ宣言では，同報ビットが非マスク（チェック対象外）で、アドレスがマスク（チェック対象），電文長が非マスク（チェック対象外）、データのはじめの３バイト分がマスク（チェック対象）となっている。
ＲＥＣＶコマンドで受信したフレームとｃｈｅｃｋｆｒａｍｅとして宣言したフレームをｆｍａｓｋでアンドをとって比較する。
【００２６】
＜ＫＥＹＧＯＴＯ  コマンド＞
指定したキーを押されたときまたは離されたときにジャンプする飛び先ラベルを定義する。キーは０から９の数字、ｆ１〜ｆ９のファクションキー、ｕｐ／ｄｏｗｎ／ｌｅｆｔ／ｒｉｇｈｔの矢印キー、ａ〜ｚの英字（大文字・小文字の区別はない）である。
例：
ＫＥＹＧＯＴＯ  ０  ｌａｂｅｌ０  （ｕ）
ラベルの後のｕはオプションで省略可である。指定するとキーを離した場合の定義となる。
【００２７】
＜ＫＥＹＧＯＳＵＢ  コマンド＞
指定したキーを押されたときにまたは離されたときに実行するキー処理プロシージャを定義する。キーは０から９の数字，ｆ１〜ｆ９のファクションキー，ｕｐ／ｄｏｗｎ／ｌｅｆｔ／ｒｉｇｈｔ  の矢印キー，ａ〜ｚの英字（大文字・小文字の区別はありません）である。
例：
ＫＥＹＧＯＳＵＢ  ０  ｐｒｏｃ０  （ｕ）
プロシージャ名の後のｕはオプションで省略可である。指定するとキーを離した場合の定義となる。
＜ＢＥＥＰ  コマンド＞
システムで定義されたビープ音・サウンドを鳴らす。パラメータのｍｉｎｆｏ（メッセージ情報），ｍｗａｒｎ（メッセージ警告），ｓｙｓｅｒｒ（システムエラー），ｍｑｕｅｓ（問い合わせ），ｏｋ（一般の警告音）は［コントロールパネル］−［サウンド］で割り当てられた各サウンドである。パソコンにサウンドカードが無い場合，ボリュームが絞られている場合は鳴りません．パラメータのｐｃは内蔵スピーカのビープ音である。これらのいずれかを指定できる。
例：
ＢＥＥＰ  ｐｃ／ｍｉｎｆｏ／ｍｗａｒｎ／ｓｙｓｅｒｒ／ｍｑｕｅｓ／ｏｋ
【００２８】
＜ＴＥＩＫＩ  コマンド＞
定期処理プロシージャを登録する。登録できる番号は０から９までである。最後のパラメータはミリ秒単位の時間間隔である。
例：
ＴＥＩＫＩ  ０  ｐｒｏｃ０  １００
＜ＴＳＴＯＰ  コマンド＞
定期処理プロシージャを登録破棄する。
例：
ＴＳＴＯＰ  ０
【００２９】
＜ＥＣＨＯ  コマンド＞
デバッグ文字列表示ウィンドウに指定文字列を表示する。
例：
ＥＣＨＯ  これはデバッグプログラムです
＜ＧＯＳＵＢ  コマンド＞
プロシージャを呼び出す。呼び出し元は内部スタックに保存されますので、呼び出されたプロシージャから更にプロシージャを呼び出すことも可能である。
例：
ＧＯＳＵＢ  ｐｒｏｃ０
【００３０】
＜ＸＯＲ  コマンド＞
左辺に指定した変数と右辺に指定した変数／定数を排他的論理和演算し、左辺に結果を代入する。指定した変数／定数は符号無しの値として扱われる。指定した変数が配列変数の場合は，１要素のみが指定できる。
例：
ＩＮＴ  ａ＝０ｘｆｆｆｆｆｆｆｆ
ＩＮＴ  ｂ＝０ｘＣＣＣＣＣＣＣＣ
ＩＮＴ  ｃ［２］［３］
ＸＯＲ  ａ  ０ｘ３０３０３０３０
ＸＯＲ  ａ  ｂ
ｃ［１］［０］＝０ｘｄｄｄｄｄｄｄｄ
ＸＯＲ  ｃ［１］［０］  ｂ
【００３１】
＜ＩＮＶ  コマンド＞
指定した変数をビット反転して結果を代入しる。指定した変数／定数は符号無しの値として扱われる。指定した変数が配列変数の場合は，１  要素のみが指定できる。
例：
ＩＮＴ  ａ＝０ｘｆｆｆｆｆｆｆｆ
ＩＮＴ  ｃ［２］［３］
ＩＮＶ  ａ
ｃ［１］［０］＝０ｘｄｄｄｄｄｄｄｄ
ＩＮＶ  ｃ［１］［０］
＜ＩＮＣＬＵＤＥ  コマンド＞
ファイルをインクルードし，その場所に展開しる。インクルードファイルのファイル名や拡張子は何でも構わない。””で囲んでファイルのフルパスを指定する。パスを省略した場合はカレントディレクトリになる。
例：
ＩＮＣＬＵＤＥ  “ｆｉｌｅ．ｉｎｃ”
ＩＮＣＬＵＤＥ  “ｃ：￥ｕｓｅｒ￥ｆｉｌｅ．ｉｎｃ”
【００３２】
＜ＤＥＦＩＮＥ  コマンド＞
定数や変数の置き換え文字列を定義する。置き換え文字列は変数同様，英小文字ではじまる文字列でなくてはならない。また、変数名やラベル名，ＰＲＯＣ名，コマンド名と重複してはいけない。定義は２５６個までできる。変数のメンバのみを定義することはできない。また，””で囲まれた文字列内を定義することはできない。
例：
ＤＥＦＩＮＥ  ａｂｃｄ  １
ＤＥＦＩＮＥ  ａａ５５  ｆｒａｍｅ．ｄａｔａ［１］
＜ＴＩＭＥＧＯＳＵＢ  コマンド＞
指定時間（ミリ秒）後に実行されるプロシージャを定義する。登録できる番号は０から９までである。
タイマ実行はワンタイムで，タイムアウト処理などに利用できる。周期タイマ処理はＴＥＩＫＩ  コマンドを使用する。
例：
ＴＩＭＥＧＯＳＵＢ  ０  ｐｒｏｃ０  ８００
【００３３】
＜ＴＩＭＥＧＯＴＯ  コマンド＞
指定時間（ミリ秒）後に実行位置を変更するラベルを定義する。登録できる番号は０から９までである。タイマ実行はワンタイムで、タイムアウト処理などに利用できる。周期タイマ処理はＴＥＩＫＩコマンドを使用する。ラベルの制限事項（スコープ）は他の場合と同じで、同一ＰＲＯＣ  内，またはメイン処理内に限られる。例：
ＴＩＭＥＧＯＴＯ  ０  ｌａｂｅｌ０  ８００
＜ＴＩＭＥＳＴＯＰ  コマンド＞
ＴＩＭＥＧＯＳＵＢコマンド，ＴＩＭＥＧＯＴＯコマンドで定義したプロシージャ，ラベル分岐を登録破棄する。番号は０から９までである。
例：
ＴＩＭＥＳＴＯＰ  ０
【００３４】
９）  ＣＳＶ  形式ファイル用コマンド
ＣＳＶ形式のファイル（カンマで各フィールドを区切った１行１レコードのテキストファイル）が利用できる。ＣＳＶ形式のファイルを利用するためのコマンドは以下のとおりである。
＜ＣＯＰＥＮＲ  コマンド＞
ＣＳＶ形式ファイルを読み込みモードでオープンする。ファイルのファイル名や拡張子は何でも構わない。””で囲んでファイルのフルパスを指定する。パスを省略した場合はカレントディレクトリになる。これ以降のファイルの読み込みはすべてこのファイルに対して行われる。
例：
ＣＯＰＥＮＲ  “ｃ：￥ｕｓｅｒ￥ｆｒａｍｅ．ｃｓｖ”
【００３５】
＜ＣＯＰＥＮＷ  コマンド＞
ＣＳＶ形式ファイルを書き出しモードでオープンする。ファイルのファイル名や拡張子は何でも構わない。””で囲んでファイルのフルパスを指定する。パスを省略した場合はカレントディレクトリになる。これ以降のファイルの書き出しはすべてこのファイルに対して行われれる。
例：
ＣＯＰＥＮＷ  “ｃ：￥ｕｓｅｒ￥ｆｒａｍｅ．ｃｓｖ”
＜ＣＣＬＯＳＥ  コマンド＞
ＣＯＰＥＮＲまたはＣＯＰＥＮＷでオープンされたファイルをクローズする。’Ｒ’文字または’Ｗ’文字で区別する。
例：
ＣＣＬＯＳＥ  Ｒ
ＣＣＬＯＳＥ  Ｗ
【００３６】
＜ＣＬＯＡＤ  コマンド＞
読み込みモードでオープンしたファイルから指定した変数に１レコード分（１行分）読み込む。”ｄａｔａ０［３］”や”ｆｒａｍｅ．ｂｉｔ”のように１配列要素や１メンバの指定もできる。１レコード分で，余ったフィールドのデータ（変数に入りきらなかったデータ）は捨てられる。
ＩＤＡＴＡ型やＩＮＴ型の１次元配列の変数，２次元配列の変数では，１要素の指定だけでなく，配列全体の指定や２次元配列の列全体といった指定もできる。
例：
ＩＮＴ  ｉｎｔ０
ＩＮＴ  ｉｎｔ１［２］
ＩＮＴ  ｉｎｔ２［２］［３］
ＣＬＯＡＤ  ｆｒａｍｅ０
ＣＬＯＡＤ  ｆｒａｍｅ０．ｂｉｔ
ＣＬＯＡＤ  ｄａｔａ０
ＣＬＯＡＤ  ｄａｔａ０［２］
ＣＬＯＡＤ  ｉｎｔ０
ＣＬＯＡＤ  ｉｎｔ１
ＣＬＯＡＤ  ｉｎｔ１［１］
ＣＬＯＡＤ  ｉｎｔ２
ＣＬＯＡＤ  ｉｎｔ２［１］
ＣＬＯＡＤ  ｉｎｔ２［１］［１］
【００３７】
＜ＣＳＡＶＥ  コマンド＞
書き出しモードでオープンしたファイルに指定した変数の内容を１レコード分（１行分）書き出
す。”ｄａｔａ０［３］”や”ｆｒａｍｅ．ｂｉｔ”のように１配列要素や１メンバの指定もできる。
ＩＤＡＴＡ型やＩＮＴ型の１次元配列の変数，２次元配列の変数では，１要素の指定だけでなく，配列全体の指定や２次元配列の列全体といった指定もできる。
例：
ＩＮＴ  ｉｎｔ０
ＩＮＴ  ｉｎｔ１［２］
ＩＮＴ  ｉｎｔ２［２］［３］
ＣＳＡＶＥ  ｆｒａｍｅ０
ＣＳＡＶＥ  ｆｒａｍｅ０．ｂｉｔ
ＣＳＡＶＥ  ｄａｔａ０
ＣＳＡＶＥ  ｄａｔａ０［２］
ＣＳＡＶＥ  ｉｎｔ０
ＣＳＡＶＥ  ｉｎｔ１
ＣＳＡＶＥ  ｉｎｔ１［１］
ＣＳＡＶＥ  ｉｎｔ２
ＣＳＡＶＥ  ｉｎｔ２［１］
ＣＳＡＶＥ  ｉｎｔ２［１］［１］
【００３８】
１０）システム定義の変数
本マクロでは，ｅｒｒｎｏ  というシステム定義の整数値の変数がある。これは，ＣＨＥＣＫコマンド等のコマンド行を実行した際に発生したエラー値を保存している。ＣＨＥＣＫコマンドとＩＦ〜ＴＨＥＮコマンドを組み合わせて使用する際等に使用する。
【００３９】
次に、通信動作を評価する手順について説明する。
予め、マクロ言語を編集して評価対象ノード４００と送受信するノードの通信動作に擬した通信プログラムを作成し、主記憶装置３２０あるいは補助記憶装置３３０に格納しておく。
【００４０】
通信プログラムの作成は、主記憶装置３２０あるいは補助記憶装置３３０に格納されているマクロ編集プログラムを読み出し、通信プログラムを作成する。作成される通信プログラムは、送受信スケジュール、送受信される通信フレームの内容、応答データの作成などが設定される。
そして、主記憶装置３２０あるいは補助記憶装置３３０から通信プログラムを読み出して実行し、評価対象ノード４００と送受信されるノードがエミュレートされ、評価対象ノード４００の動作が評価される。
【００４１】
図３にはマクロ言語によって編集された通信プログラムの一例、図４はそのフローチャートを示している。
以下、通信プログラムについて、フローチャートを参照しつつ、行番号に沿って説明する。行番号は説明の便宜上のもので、実際のマクロファイルには記載されない。
【００４２】
１行目〜５行目：
コメント行および空白行で、実行時には無視される。
６行目〜１４行目：
本マクロ内で使用される変数を宣言している（フローチャート、ステップ１）。変数宣言は、処理記述の前にまとめて記述される。初期化データが省略された分は、ゼロ詰めして初期化される。通信フレームの変数の初期化データは、左から順に同報ビット、アドレス、電文長、そしてデータ部分へと詰めてセットされる。省略したデータ部分もゼロ詰めされる。
たとえば、６行目の１が同報ビット、０ｘ１２３がスレーブアドレス、５が電文長、その後の０ｘ００、０ｘ１１、０ｘ２２、０ｘ３３、０ｘ４４はデータである。
また、本マクロでは変数はすべてグローバル変数となり、変数に関してスコープの概念はない。
【００４３】
１２行目のＩＦＭＳＫ型は、ＩＥＢｕｓのフレームマスクを定義するもので、構成はＩＦＲＡＭＥ型と同じである。
【００４４】
１７行目〜２３行目：
後で定期処理として使用するためのプロシージャである。ここでは、ＩＦＲＡＭＥ型のｆＳｅｎｄ１変数を３回送信する（フローチャート，ステップ２参照）。
２５行目〜２８行目：
後でキー処理として使用するためのプロシージャである。
ここでは、数字’５’のキーが押されるとＩＦＲＡＭＥ型のｆＳｅｎｄ２変数を送信する。
３０行目〜：
ここからメインの処理として実行される。
３２行目：
キー処理の定義を行っている。これ以降、数字の’５  ’のキーが押下されるとｋｅｙ５Ｐｒｏｃが起動されるようになる。
３４行目：
ラベルを定義している。
【００４５】
３５、３６行目：
ｆＲｅｃｖ変数に受信する。次の行では前行のＲＥＣＶコマンドでエラーが起こったかどうかをチェックし、もしエラーが起こっていたら７２行目のラベルｅｒｒｏｒに飛ぶ（フローチャート、ステップ３参照）。
【００４６】
３７〜３９行目：
ｆＲｅｃｖ変数に受信したフレームをｆＭａｓｋ変数とアンドをとり、ｆＣｍｐ変数の内容と比較チェックする。
次の行では、前行のＣＨＥＣＫコマンドの結果がイコールかそうでなかったかをチェックし、イコールならば４１行目のｌａｂｅｌ１に飛ぶ（フローチャート、ステップ４参照）。そうでなければ次行のＧＯＴＯコマンドで３４行目のｌａｂｅｌ０に戻り、再び受信〜チェックを繰り返す（フローチャート、ステップ５参照）。
【００４７】
４２〜４４行目：
ＷＡＩＴコマンドで５００ミリ秒待って、ｆＳｅｎｄ２変数の内容を送信する。送信エラーが起これば７２行目のラベルｅｒｒｏｒに飛びます（フローチャート、ステップ６参照）。
４５〜６２行目：
ここでは、ＳＷＩＴＣＨ〜ＣＡＳＥコマンドを使って、受信した通信フレームのデータ部の１バイト目によって処理を分けている（フローチャート，ステップ７，８，９参照）。
データ部の１バイト目が０ｘ１１だった場合はＴＥＩＫＩコマンドで５秒ごとにｔｅｉｋｉＰｒｏｃプロシージャを起動するようセットして６４行目のｌａｂｅｌ３に進み（フローチャート，ステップ８参照）、データ部の１バイト目が０ｘ２２だった場合はｆＳｅｎｄ３変数の内容を送信してから、ＧＯＴＯでｌａｂｅｌ２に戻って再び受信を待ちます（フローチャート、ステップ９参照）。ＣＡＳＥ  ＤＥＦＡＵＬＴはデータ部の１バイト目が０ｘ１１でも０ｘ２２でもなかった場合に実行される部分で、内容としては０ｘ２２の場合と同じことをしている（フローチャート，ステップ９参照）。これにより、対象受信データのフォーマットをチェックをする。
【００４８】
６４〜７０行目：
ここでは、ＩＦ〜ＴＨＥＮコマンドを使って、受信したフレームのデータ部の１バイト目によって処理を分けている。データ部の１バイト目が０ｘ８８だった場合は７４行目のｓｕｃｃｅｓｓに飛んでマクロの処理を終了する（フローチャート、ステップ１０参照）。
そうでない場合はｆＳｅｎｄ３変数の内容を送信してから、再び６４行目のｌａｂｅｌ３に戻る。
７２行目：
本マクロ中で受信エラー、送信エラーが起こった場合に飛んでくるラベルｅｒｒｏｒである。
７４行目：
本マクロ中で最終的にすべての処理が正常に進んだ場合に飛んでくるラベルｓｕｃｃｅｓｓである。
【００４９】
【発明の効果】
以上説明したように、本発明によれば、評価対象ノードと送受信されるノードに擬した通信プログラムをプログラム作成手段によって作成できるようになっているので、種々のノードの通信評価を容易に行うことができる。
【図面の簡単な説明】
【図１】図１（Ａ）は本発明の実施の形態に係る通信動作評価装置が適用されたネットワークの簡単なブロック図、同図（Ｂ）は同図（Ａ）の通信動作評価装置を構成するコンピュータの概略ブロック図である。
【図２】図２はマクロ言語で作成した通信手順のサンプルマクロのリストである。
【図３】図３は図２に対応するフローチャートである。
【符号の説明】
１００  通信バス
２００  ダミーボード
２０１  通信バスとのインターフェース、
２０２  コンピュータとのインターフェース
３００  コンピュータ
３０１  モニタ機能部
３０２  エミュレータ機能部
３０３  シングル送信機能部
３１０  マイクロプロセッサ
３２０，３３０  主，補助記憶装置
【図１】
2004246514.tif 000003
【図２】
2004246514.tif 000004
【図３】
2004246514.tif 000005