ASR-0x3Wとの通信方法

ASR-0x3Wは、TCPまたはMQTTで通信することができます。
本ページでは、それぞれの通信方法におけるASR-0x3Wとの通信を確立する手順と、コマンド送受信の簡単な例を紹介します。
詳細なコマンド仕様については、TCPコマンドガイドおよびMQTT JSON コマンドガイドを参照してください。


1. TCPによる通信

1.1 ローカルデバイスアドレスの取得

ASR-0x3Wは、IPアドレス、ポート番号、その他の情報をUDPマルチキャストで定期的に送信します。

  • 固定UDPマルチキャストアドレス: 230.1.1.169

  • ポート番号: 8161

C++サンプルコード(UDPマルチキャスト受信)

void GetGroupPub(int num) {
    int sockfd;
    struct sockaddr_in local_addr;
    struct ip_mreq mreq;
    char buff[BUFF_SIZE];
    int n;

    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd == -1) { perror("socket"); exit(EXIT_FAILURE); }

    memset(&local_addr, 0, sizeof(local_addr));
    local_addr.sin_family = AF_INET;
    local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    local_addr.sin_port = htons(MCAST_PORT);

    if (bind(sockfd, (struct sockaddr*)&local_addr, sizeof(local_addr)) == -1) {
        perror("bind");
        exit(EXIT_FAILURE);
    }

    mreq.imr_multiaddr.s_addr = inet_addr(MCAST_ADDR);
    mreq.imr_interface.s_addr = htonl(INADDR_ANY);
    if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq,
                   sizeof(mreq)) == -1) {
        perror("setsockopt: IP_ADD_MEMBERSHIP");
        exit(EXIT_FAILURE);
    }

    system("clear");
    cout << "Group connected, Waiting..." << endl;
    ...
}

1.2 TCP接続

IPアドレスとポート番号 (デフォルト: 9600) を取得した後、TCPで接続します。
TCP接続確立後、以下のサブスクリプションメッセージを送信してから、TCPコマンドガイドに記載のコマンドを送信してください。

サブスクリプションメッセージ:

C0 00 00 00 00 01

例: インベントリ停止
コマンド:

7E 61 73 0D 0A

レスポンス:

7E 41 73 30 30 30 30 0D 0A

2. MQTTによる通信

2.1 MQTT設定

  • Web管理画面でMQTTサーバーとトピックを設定し、制御端末側からASR-0x3Wの受信用トピックにメッセージを送信します。

  • ASR-0x3Wの送信用トピックをサブスクライブすることにより、ASR-0x3WからのレスポンスやRFIDタグのデータを受信します。


2.2 デフォルトトピック・デフォルトトピックエイリアス

Web管理画面にて下記のデフォルトトピックを確認して使用するか、エイリアスを設定して使用します。 共通のエイリアスを使用することにより、複数の端末で共通のトピックを使用して通信することができます。

トピック

説明

Subscribe Topic / Subscribe Topic Alias

コマンド送信

Publish Topic / Publish Topic Alias

レスポンス受信

Publish Tag Topic / Publish Tag Topic Alias

RFIDタグデータ受信

例: インベントリ開始 (JSON)

コマンド:

{
  "start_inventory": {
    "ant1": true,
    "ant2": true,
    "tid": true
  }
}

レスポンス:

{ "start_inventory": true }

インベントリ結果:

{
  "tag_data": {
    "ant": 4,
    "epc": "1212ab780d6aa0000e58ca61",
    "rssi": -65
  }
}

2.3 Hexトピック・Hexトピックエイリアス

Hex Topic を有効化すると、16進数のコマンドの使用が可能です。

例: インベントリ開始 (Hex)

コマンド:

7E 61 66 C0 00 FF 00 00 00 00 0D 0A

レスポンス:

7E 41 66 30 30 30 30 0D 0A

インベントリ結果:

7E 65 54 19 01 34 00 E2 80 11 70 ...

2.4 プリフィックス・サフィックス

MQTTメッセージにプリフィックスとサフィックスを追加することができます。
プリフィックスとサフィックスを追加することにより、複数の端末が共通のエイリアスで通信を行う際に、メッセージを送信した端末の区別が可能となります。
JSONフォーマットのコマンドを使用する場合、プリフィックスフィックス/サフィックスをそのまま追加します。
Hexフォーマットのコマンドを使用する場合、プリフィックス/サフィックスをASCIIでエンコードして追加します。

例: インベントリ停止

コマンド(JSON、プリフィックス「AAA:」、サフィックス「:BBB」の場合)

AAA: {
    "stop_inventory": {
    }
  } :BBB

レスポンス(JSON、プリフィックス「Device1:」、サフィックス「:Device1」 の場合)

Device1: { "stop_inventory": true } :Device1

コマンド(Hex、プリフィックス「AAA:」、サフィックス「:BBB」の場合)

41 41 41 3A 7E 61 73 0D 0A 3A 42 42 42

レスポンス(Hex、プリフィックス「Device1:」、サフィックス「:Device1」 の場合)

44 65 76 69 63 65 31 3A 7E 41 73 0D 0A 3A 44 65 76 69 63 65 31