• 検索結果がありません。

メッセージの送信 msg_send()関数 msg_cancel() 関数

ドキュメント内 Microsoft Word - NC Prog Master.doc (ページ 146-200)

Q: switch 文における case 値の最大数はいくつですか? (セクション 3.6.4.2 )

2 メッセージの送信 msg_send()関数 msg_cancel() 関数

3 メッセージの受信 msg_arrivesイベント

msg_receive()関数 msg_inオブジェクト 4 確認応答付きサービスの

メッセージ送信の後

msg_completesイベント msg_succeedsイベント msg_fails イベント 5 リクエスト/レスポン

ス・サービスのメッセー ジに対するレスポンスの 送信

resp_out オブジェクト resp_send() 関数 resp_cancel() 関数 resp_arrives イベント resp_receive() 関数 resp_in オブジェクト 6 明示的なバッファの割り

当て

msg_alloc()関数

msg_alloc_priority()関数 msg_free()関数

resp_free()関数

メッセージの作成 メッセージの作成 メッセージの作成 メッセージの作成

アプリケーション・メッセージはmsg_out発信メッセージ・オブジェクトを 使用して作成します。この定義はNeuron Cに組み込まれています。メッセー ジの送信にはmsg_send()関数を使用します。一度に作成できるのは、1つの 発信メッセージ(またはレスポンス)と1つの着信メッセージ(またはレス ポンス)だけです。つまり、1つのプログラムの中で並行して2つのメッセ ージを作成し、その両方を送ったり、2つの入力メッセージを同時に処理す ることはできません。

msg_out

オブジェクトの定義オブジェクトの定義 オブジェクトの定義オブジェクトの定義

発信メッセージはNeuron Cコンパイラで以下のように定義されています。

typedef enum {FALSE, TRUE} boolean;

typedef enum {ACKD, UNACKD_RPT,

UNACKD, REQUEST} service_type;

struct {

boolean priority_on; // TRUE if a priority message

// (default:FALSE)

msg_tag tag; // message tag (required)

int code; // message code (required) int data[MAXDATA] // message data

(default:none)

boolean authenticated; // TRUE if to be authenticated

// (default:FALSE)

service_type service; // service type (default:ACKD)

msg_out_addr dest_addr; // see include file msg_addr.h

// (optional field)

} msg_out;

priority_on メッセージを優先メッセージとして送信するときに

TRUEに設定します。このフィールドにFALSEを指 定するか、何も指定しないと、メッセージには優先 権が与えられません。このフィールドを指定すると きには、必ずメッセージ・オブジェクトの最初のフ ィールドとして設定し、タグよりも前にしてくださ い。デフォルトは、FALSE(非優先)です。

tag メッセージに対するメッセージ・タグ識別子を指定 します。このフィールドは省略できません。本章の

「メッセージ・タグ」を参照してください。

code メッセージ・コードを表す数値を指定します。この

フィールドは省略できません。本章の「メッセージ・

コード」を参照してください。

data アプリケーションのデータを指定します。このフィ ールドはオプションで、メッセージ・タグとメッセ ージ・コードだけのメッセージも作成できます。ネ ットワーク・バッファにはオーバーヘッドがあるた め、MAXDATAは228以下に設定してください。デ ータの最大長(MAXDATA)は、app_buf_out_sizeプ ラグマの設定によって決まります(第8章 参照)。

MAXDATA = app_buf_out_size – 6 または、

MAXDATA = app_buf_out_size - 17

(このプログラムのメッセ ージまたはネットワーク変 数に明示的にアドレスを指 定する場合)

注意 注意 注意

注意:::: Neuronファームウエアは、データ配列のどの場所に代入があったか を把握しており、それに応じて自動的に発信メッセージの長さを設定するこ とに注意してください。

authenticated 認証機能を利用するメッセージを送信するときに

TRUEを指定します。認証を必要としないメッセージ を送信する場合は、このフィールドにFALSEを指定 するか、何も指定しません。デフォルトはFALSE(認 証なし)です。

service 次のサービス・タイプのうちの1つを指定します。

ACKD - (デフォルト)リトライを伴う確認応答付

きサービス

REQUEST - リクエスト/レスポンス・プロトコル

UNACKD - 確認応答なしサービス

UNACKD_RPT - 反復サービス(メッセージは繰り

返し送られます)

注意注意

注意注意:::: 認証機能を使用するメッセージには、UNACKDUNACKD_RPTサ ービスを使用できません。ACKDまたはREQUESTサービス・タイプを使用 してください。

dest_addr 送信先アドレスを明示的に指定するmsg_out内のオ プションのフィールドです。dest_addrをセットして いない場合、メッセージは「タグ」に結び付けられ ているアドレスに送信されます(タグが結びつけら れている場合)。詳しくは、本章で後述する「明示 的なアドレス指定」のセクションを参照してくださ い。

注意 注意 注意

注意:::: このフィールドを使用するには、

<addrdefs.h>と<msg_addr.h>をインクルードする必 要があります。

メッセージ・タグ

「メッセージ・タグ」はアプリケーション・メッセージの接続点です。着信 アプリケーション・メッセージは、いつでもmsg_inという共通のメッセー ジ・タグで受信するようになっていますが、発信する明示的メッセージを使 用する場合には、1つ以上のメッセージ・タグを宣言する必要があります。

着信タグおよび各発信タグに対する一意のネットワークアドレスの割り当て には、ネットワーク管理ツールを使用できます。

メッセージ・タグ宣言には、コネクション情報を指定するオプション・フィ ールドがあります。メッセージ・タグの宣言シンタックスは次のとおりです。

msg_tag [connection-info] tag-identifier [, tag-identifier ...];

connection-infoフィールドは、コネクション情報に接続オプションを設定する

ための省略可能なフィールドで、次のような形式で指定します。

bind_info (options)

メッセージ・タグに設定できる接続オプションは、以下のとおりです。

nonbind このオプションを指定すると、暗黙的アドレス指定

情報を含まないメッセージ・タグになります。した がって、このメッセージ・タグはアドレス・テーブ ル・エントリを消費しません。このオプションは、

明示的にアドレス指定したメッセージを作成すると きの送信先タグとして使用します。

rate_est (const-expr) 推定メッセージ・レートを指定します。これはメッ セージ・タグを転送するのに予想されるメッセー ジ・レートで、1秒間のメッセージ数の10倍の値を 指定します。ここには0から18780までの値(0~

1878.0メッセージ/秒)を指定できます。

max_rate_est (const-expr)

最大推定メッセージ・レートを指定します。これは メッセージ・タグを転送するのに予想される最大メ ッセージ・レートで、1秒間の最大メッセージ数の 10倍の値を指定します。ここには0から18780まで の値(0~1878.0メッセージ/秒)を指定できます。

tag-identifier メッセージ・タグ名をNeuron Cの識別子の形式で指

定します。

rate_estmax_rate_estは、いつでも指定できるとは限りません。例えば、

メッセージの出力レートはデバイスがインストールされている特定のネット ワークに左右されることがよくあります。これらの値はネットワーク・デバ イスを解析するためにネットワーク管理ツールが使用するもので、オプショ ンの項目です。また、rate_estmax_rate_estには0から18780までの値を 指定できますが、すべての値を使用できるわけではありません。これらの値 はコード化されて値nにマッピングされます。nは0から127までの範囲の 値です。コード化された値だけがデバイスにある自己識別(SI)データに保 存されます。実際の値は、このコード化された値から再構成されます。コー ド化された値がゼロであれば、実際の値は未定義です。コード化された値が 1から127の間にあれば、実際の値はa=2(n/8)-5の結果を小数点以下1桁で四 捨五入した数字になります。この式で求めた実際の値は、秒当たりのメッセ ージ数になります。

各発信メッセージのmsg_out.tagフィールドにはメッセージ・タグを割り当 てる必要があります。これは各発信メッセージがどの接続点(アドレス・テ ーブルのエントリに対応する)を使用するかを指定するためのものです。一 度タグ・フィールドを割り当てたら、そのメッセージは送信するか、取り消 すかのどちらかを実行しなければなりません。

アドレス指定以外のメッセージ・タグの役割としては、完了イベントと発信 メッセージによるレスポンスとの関連付けが挙げられます。例えば、tag1メ ッセージ・タグを使って送信されたメッセージとメッセージ完了イベントを 関連付けるには、次のwhen節を使用します。

when (msg_completes(tag1))

メッセージ・タグをイベントに関連付けておくと、特定の発信メッセージに 対応するイベントが起こったときにだけ、イベントの評価がTRUEになりま す。

メッセージ・コード

「メッセージ・コード」は、メッセージの数値識別子です。アプリケーショ ン・メッセージには、必ずメッセージ・コードが指定されていなければなり ません。このコードは、受信側のアプリケーションが各メッセージの内容を 解釈するために使用します。

メッセージ・コードはアプリケーション・メッセージだけでなく、すべての LonTalkメッセージによっても使用されます。メッセージ・コードの値は表 6.1に示す範囲になります。アプリケーションには、0~62と64~78のコー ドを使用してください。一般に、低い方の数値は独自のアプリケーション・

メッセージに使用し、高い方の数値は他のネットワークに接続するアプリケ ーション・レベルの独自ゲートウェイに使用します。

6.1 メッセージ・コードの範囲メッセージ・コードの範囲メッセージ・コードの範囲メッセージ・コードの範囲

メッセージのタイプ メッセー ジ・コード

説明

ユーザ・アプリケーショ ン・メッセージ

0~~~~47 一般アプリケーション・メッセージ。

メッセージ・コードの解釈は、アプリ ケーション依存です。

標準アプリケーショ ン・メッセージ

48~~~62 ~ LONMARK Interoperability Association が定義する標準アプリケーション・メ ッセージ。

応答側オフライン 63 アプリケーションのレスポンス・メッ セージに使用します。レスポンスの送 信側がオフライン状態にあり、リクエ ストを処理できないことを意味しま す。

外部フレーム 64~~~~78 他のネットワークへのアプリケーシ ョン・レベルのゲートウェイが使用し ます。メッセージ・コードの解釈は、

アプリケーション依存です。

外部応答側オフライン 79 外部フレーム・レスポンスが使用しま す。レスポンスの送信側がオフライン 状態にあり、リクエストを処理できな いことを意味します。

ネットワーク診断メッ セージ

80~~~95 ~ ネットワークを診断するためにネッ トワーク管理ツールが使用します。

ネットワーク管理メッ セージ

96~~~~127 ネットワークをインストールし、保守 するためにネットワーク管理ツール が使用します。

ネットワーク変数 128~~~~255 メッセージ・コードの下位6ビットに は、ネットワーク変数セレクタの上位 6ビットが含まれています。最初のテ ータ・バイトには、セレクタの下位8 ビットが含まれています。

アプリケーション・メッセージの作成例 アプリケーション・メッセージの作成例 アプリケーション・メッセージの作成例 アプリケーション・メッセージの作成例

msg_tag motor;

#define MOTOR_ON 0

#define ON_FULL 100 msg_out.tag = motor;

msg_out.code = MOTOR_ON;

msg_out.data[0] = ON_FULL;

ドキュメント内 Microsoft Word - NC Prog Master.doc (ページ 146-200)

関連したドキュメント