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