DOKUMENTASI
Panduan Integrasi Reader RFID
Dokumentasi komprehensif yang mencakup pengaturan komunikasi serial, konfigurasi antena, operasi pengkodean tag (EPC Gen2 / ISO 18000-6C), dan manajemen daya. Termasuk contoh untuk penerapan multi-antena dan pemindaian inventaris berkecepatan tinggi.
Pengaturan Komunikasi Serial
Reader RFID protokol Nextwaves NRN berkomunikasi melalui port serial (RS-232 atau USB-ke-Serial). Parameter koneksi harus dikonfigurasi dengan benar untuk memastikan transmisi data yang stabil.
Baud Rate
115200
Data Bits
8
Stop Bits
1
Parity
None
Untuk koneksi WebSerial API berbasis browser, gunakan Nextwaves Reader Connect di app.nextwaves.com/reader. Aplikasi ini mendeteksi port COM secara otomatis dan mengonfigurasi parameter koneksi.
// Request serial port access
const port = await navigator.serial.requestPort();
await port.open({
baudRate: 115200,
dataBits: 8,
stopBits: 1,
parity: "none",
flowControl: "none",
bufferSize: 4096,
});
// Get reader/writer streams
const reader = port.readable.getReader();
const writer = port.writable.getWriter();import serial
port = serial.Serial(
port="/dev/ttyUSB0", # Linux/macOS
# port="COM3", # Windows
baudrate=115200,
bytesize=serial.EIGHTBITS,
stopbits=serial.STOPBITS_ONE,
parity=serial.PARITY_NONE,
timeout=2.0,
)
# Flush buffers before communication
port.reset_input_buffer()
port.reset_output_buffer()Struktur Frame Protokol Nextwaves NRN
Setiap perintah protokol Nextwaves NRN dikemas dalam frame biner yang terdiri dari: Header (0x5A), PCW (Protocol Control Word), Category, MID (Message ID), Length, Data payload, dan checksum CRC16-CCITT.
| Field | Ukuran | Deskripsi |
|---|---|---|
| Header | 1 byte | Selalu 0x5A — penanda awal frame |
| PCW | 2 bytes | Flag protokol (versi, alamat) |
| Category | 1 byte | Kategori perintah (0x00=System, 0x01=Device, 0x02=RFID) |
| MID | 1 byte | ID Pesan dalam kategori |
| Length | 2 bytes | Panjang payload dalam byte (big-endian) |
| Data | N bytes | Payload khusus perintah |
| CRC16 | 2 bytes | Checksum CRC16-CCITT dari byte setelah header |
Contoh Perintah
TX → 5A 00 01 01 00 00 00 DC E5
┌──┐ ┌────┐ ┌──┐ ┌──┐ ┌────┐ ┌────┐
│5A│ │0001│ │01│ │00│ │0000│ │DCE5│
└──┘ └────┘ └──┘ └──┘ └────┘ └────┘
HDR PCW CAT MID LEN CRC16TX → 5A 00 01 02 10 00 00 04 5A
HDR PCW CAT MID LEN CRC16
Response notifications (PID 0x1231) contain:
• Antenna ID (1 byte)
• RSSI value (1 byte, raw ADC 0-255)
• EPC data (12+ bytes)
• Frequency channel index (1 byte)TX → 5A 00 01 02 FF 00 00 88 5A
HDR PCW CAT MID LEN CRC16Referensi Perintah Utama
| Perintah | Kode | Deskripsi |
|---|---|---|
| QUERY_INFO | 0x0100 | Kueri nomor seri reader dan versi firmware |
| QUERY_RFID_ABILITY | 0x1000 | Kueri kemampuan RFID (rentang daya, jumlah antena) |
| READ_EPC_TAG | 0x0210 | Mulai inventaris tag EPC berkelanjutan |
| WRITE_EPC_TAG | 0x0211 | Tulis data ke bank EPC tag |
| STOP_INVENTORY | 0x02FF | Hentikan inventaris tag yang sedang berjalan |
| CONFIGURE_READER_POWER | 0x0201 | Atur daya pancar (0-33 dBm per antena) |
| CONFIGURE_ANTENNA_ENABLE | 0x0203 | Aktifkan/nonaktifkan port antena (bitmask) |
| SET_WORKING_FREQUENCY | 0x0205 | Atur frekuensi kerja tertentu |
| SET_FILTER_SETTINGS | 0x0209 | Konfigurasi filter duplikasi tag (berbasis waktu) |
| BUZZER_SWITCH | 0x011E | Kontrol mode buzzer |
Konfigurasi Antena
Pembaca RFID mendukung hingga 32 port antena. Setiap port diaktifkan atau dinonaktifkan melalui bitmask 4-byte. Antena diberi nomor 1 hingga 32, dengan setiap bit sesuai dengan sebuah port.
Bitmask Antena
Aktifkan Antena 1-4
0x0F, 0x00, 0x00, 0x00
Binary: 00001111 → Ports 1,2,3,4 ON
Hanya Aktifkan Antena 1 & 3
0x05, 0x00, 0x00, 0x00
Binary: 00000101 → Ports 1,3 ON
TX → 5A 00 01 02 03 00 04 0F 00 00 00 E1 EF
┌───────────┐
Payload: │0F 00 00 00│ ← bitmask
└───────────┘
Bit 0 = ANT1, Bit 1 = ANT2, Bit 2 = ANT3, Bit 3 = ANT4
0x0F = 0b00001111 → all 4 ports enabledImplementasi Multi-Antena
Saat mengimplementasikan beberapa antena, pertimbangkan polarisasi (linear vs. sirkular), jarak antar antena, dan zona cakupan yang tumpang tindih. Pembaca memindai secara berurutan melalui antena yang diaktifkan, dan setiap laporan tag menyertakan ID antena untuk penentuan posisi.
Pintu Dock
2-4 antena per portal, polarisasi sirkular, daya 30 dBm
Conveyor Belt
1-2 antena per stasiun, polarisasi linear, 20-25 dBm
Rak Ritel
Antena near-field, daya rendah 15-20 dBm, kepadatan tinggi
Pengodean Tag (EPC Gen2 / ISO 18000-6C)
UHF RFID mengikuti standar EPC Gen2 (ISO 18000-6C). Setiap tag memiliki 4 bank memori: Reserved (kata sandi), EPC (pengidentifikasi 96+ bit), TID (ID chip yang tidak dapat diubah), dan User (data kustom).
Struktur Memori Tag
| Bank | ID | Ukuran Tipikal | Penggunaan |
|---|---|---|---|
| Reserved | 00 | 64 bits | Kata sandi Kill (32b) + Kata sandi Akses (32b) |
| EPC | 01 | 96-128 bits | SGTIN-96, SSCC-96, atau pengodean kustom |
| TID | 10 | 96+ bits | ID produsen chip (hanya-baca, unik) |
| User | 11 | 0-512 bits | Data spesifik aplikasi (tergantung chip) |
Contoh Dekode SGTIN-96
SGTIN-96 adalah pengodean yang paling umum untuk produk ritel dan rantai pasokan. Konversikan EPC hex 24 karakter menjadi GTIN-14, nomor seri, dan GS1 Digital Link.
EPC Hex: 3034257BF7194E4000001A85
Decoded:
Header: 0x30 (SGTIN-96)
Filter: 1 (Point-of-Sale)
Partition: 5
Company Prefix: 0614141
Item Reference: 812345
Serial: 6789
GTIN-14: 80614141123458
Digital Link: https://id.gs1.org/01/80614141123458/21/6789// NRN protocol WRITE_EPC_TAG command
TX → 5A 00 01 02 11 00 0C [EPC_DATA_12_BYTES] [CRC16]
// The reader will:
// 1. Select the tag in its field
// 2. Write the provided EPC data to Bank 01
// 3. Return success/failure notification
// Access password required if tag is locked:
TX → 5A 00 01 02 11 00 10 [ACCESS_PWD_4B] [EPC_DATA_12B] [CRC16]Gunakan alat EPC Encoder online di /tools/tds-rfid-converter untuk mengodekan dan mendekode SGTIN-96, SSCC-96, GRAI-96 secara langsung di browser Anda.
Manajemen Daya
Daya pancar pembaca dapat disesuaikan dari 0 hingga 33 dBm per port antena. Daya yang lebih tinggi meningkatkan jangkauan baca tetapi juga meningkatkan interferensi dan konsumsi daya.
TX → 5A 00 01 02 01 00 04 1E 1E 1E 1E 67 FE
┌───────────┐
Payload: │1E 1E 1E 1E│
└───────────┘
0x1E = 30 decimal = 30 dBm per port
Power guidelines:
• 33 dBm — Maximum range (~10m), dock doors
• 30 dBm — Standard range (~6-8m), general use
• 25 dBm — Medium range (~3-5m), conveyor belts
• 20 dBm — Short range (~1-2m), point-of-sale
• 15 dBm — Near-field (~0.5m), shelf readersPemantauan RSSI
Nilai RSSI (Received Signal Strength Indicator) dari tag dilaporkan sebagai byte ADC mentah (0-255). Gunakan rumus konversi untuk mendapatkan nilai dBm yang akurat.
Rumus Konversi
dBm = -100 + round((raw × 70) / 255)
Raw 128
-65 dBm
Baik
Raw 180
-51 dBm
Kuat
Raw 220
-40 dBm
Sangat Baik
Pemindaian Inventaris Kecepatan Tinggi
Untuk pemindaian inventaris kecepatan tinggi, konfigurasikan frekuensi kerja, filter tag duplikat, dan mode pemindaian berkelanjutan. Reader mendukung hingga 700 tag/detik dengan konfigurasi optimal.
Konfigurasi Frekuensi
UHF RFID beroperasi pada pita 920-925 MHz (Asia Tenggara), dengan spasi saluran 0,5 MHz. Saluran diberi nomor dari 0 (920 MHz) hingga 10 (925 MHz).
TX → 5A 00 01 02 05 00 06 00 02 04 06 08 0A C4 1B
Channel mapping (formula: 920.0 + index × 0.5 MHz):
Ch 0 → 920.0 MHz
Ch 2 → 921.0 MHz
Ch 4 → 922.0 MHz
Ch 6 → 923.0 MHz
Ch 8 → 924.0 MHz
Ch 10 → 925.0 MHzAlur Kerja Pemindaian Optimal
Konfigurasikan port antena dan tingkat daya
Atur frekuensi kerja (FHSS untuk lingkungan padat)
Konfigurasikan filter duplikat (500ms-3000ms tergantung pada kasus penggunaan)
Kirim READ_EPC_TAG untuk memulai inventaris berkelanjutan
Proses notifikasi tag (PID 0x1231) saat diterima
Kirim STOP_INVENTORY setelah selesai
// 1. Enable antennas 1-4
await sendFrame("CONFIGURE_ANTENNA_ENABLE", [0x0F, 0x00, 0x00, 0x00]);
// 2. Set power to 30 dBm on all ports
await sendFrame("CONFIGURE_READER_POWER", [0x1E, 0x1E, 0x1E, 0x1E]);
// 3. Set working frequencies
await sendFrame("SET_WORKING_FREQUENCY", [0, 2, 4, 6, 8, 10]);
// 4. Set duplicate filter to 1000ms
await sendFrame("SET_FILTER_SETTINGS", [0x03, 0xE8]);
// 5. Start inventory
await sendFrame("READ_EPC_TAG");
// 6. Process tags...
reader.on("tag", (tag) => {
const rssiDbm = -100 + Math.round((tag.rssi * 70) / 255);
console.log(`EPC: ${tag.epc}, Ant: ${tag.antenna}, RSSI: ${rssiDbm} dBm`);
});
// 7. Stop when done
await sendFrame("STOP_INVENTORY");