DOKUMENTASI
Manual Integrasi Pembaca RFID
Dokumentasi komprehensif yang mencakup pengaturan komunikasi serial, konfigurasi antena, operasi pengkodean tag (EPC Gen2 / ISO 18000-6C), dan manajemen daya. Termasuk contoh untuk penggunaan multi-antena dan pemindaian inventaris berkecepatan tinggi.
Pengaturan Komunikasi Serial
Pembaca RFID protokol NRN Nextwaves 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 API WebSerial berbasis browser, gunakan Nextwaves Reader Connect di app.nextwaves.com/reader. Aplikasi secara otomatis mendeteksi port COM dan mengkonfigurasi 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 Bingkai Protokol NRN Nextwaves
Setiap perintah protokol NRN dikemas dalam bingkai biner yang terdiri dari: Header (0x5A), PCW (Protocol Control Word), Kategori, MID (Message ID), Panjang, Muatan data, dan checksum CRC16-CCITT.
| Bidang | Ukuran | Deskripsi |
|---|---|---|
| Header | 1 byte | Selalu 0x5A. penanda awal bingkai |
| PCW | 2 bytes | Bendera protokol (versi, alamat) |
| Category | 1 byte | Kategori perintah (0x00=Sistem, 0x01=Perangkat, 0x02=RFID) |
| MID | 1 byte | ID Pesan dalam kategori |
| Length | 2 bytes | Panjang payload dalam byte (big-endian) |
| Data | N bytes | Muatan 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 Kunci
| Perintah | Kode | Deskripsi |
|---|---|---|
| QUERY_INFO | 0x0100 | Tanyakan nomor seri pembaca dan versi firmware |
| QUERY_RFID_ABILITY | 0x1000 | Tanyakan 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 | Konfigurasikan filter duplikat 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 port.
Bitmask Antena
Aktifkan Antena 1-4
0x0F, 0x00, 0x00, 0x00
Binary: 00001111 → Ports 1,2,3,4 ON
Aktifkan Antena 1 & 3 Saja
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 enabledPenerapan Multi-Antena
Saat menggunakan beberapa antena, pertimbangkan polarisasi (linear vs. circular), 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 melingkar, daya 30 dBm
Sabuk Konveyor
1-2 antena per stasiun, polarisasi linier, 20-25 dBm
Rak Ritel
Antena medan dekat, daya rendah 15-20 dBm, kepadatan tinggi
Pengkodean 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 khusus).
Struktur Memori Tag
| Bank | ID | Ukuran Khas | Penggunaan |
|---|---|---|---|
| Reserved | 00 | 64 bits | Kata sandi Kill (32b) + Kata sandi Akses (32b) |
| EPC | 01 | 96-128 bits | SGTIN-96, SSCC-96, atau pengkodean khusus |
| TID | 10 | 96+ bits | ID produsen chip (hanya baca, unik) |
| User | 11 | 0-512 bits | Data khusus aplikasi (bergantung pada chip) |
Contoh Dekode SGTIN-96
SGTIN-96 adalah pengkodean paling umum untuk produk ritel dan rantai pasokan. Konversikan EPC heksadesimal 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 mengenkode dan mendekode SGTIN-96, SSCC-96, GRAI-96 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 Berkecepatan Tinggi
Untuk pemindaian inventaris berkecepatan tinggi, konfigurasikan frekuensi kerja, filter tag duplikat, dan mode pemindaian berkelanjutan. Pembaca mendukung hingga 700 tag/detik dengan konfigurasi optimal.
Konfigurasi Frekuensi
RFID UHF beroperasi pada pita 920-925 MHz (Asia Tenggara), dengan jarak 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 inventarisasi berkelanjutan
Proses notifikasi tag (PID 0x1231) saat tiba
Kirim STOP_INVENTORY jika sudah 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");