DOKUMENTACE
Manuál integrace RFID čtečky
Komplexní dokumentace zahrnující nastavení sériové komunikace, konfiguraci antén, operace kódování tagů (EPC Gen2 / ISO 18000-6C) a správu napájení. Obsahuje příklady nasazení více antén a vysokorychlostního inventurního skenování.
Nastavení sériové komunikace
RFID čtečky protokolu Nextwaves NRN komunikují přes sériový port (RS-232 nebo USB-to-Serial). Parametry připojení musí být správně nakonfigurovány pro zajištění stabilního přenosu dat.
Baud Rate
115200
Data Bits
8
Stop Bits
1
Parity
None
Pro prohlížečové připojení pomocí WebSerial API použijte Nextwaves Reader Connect na adrese app.nextwaves.com/reader. Aplikace automaticky detekuje COM porty a konfiguruje parametry připojení.
// 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()Struktura rámce protokolu Nextwaves NRN
Každý příkaz protokolu NRN je zabalen do binárního rámce, který obsahuje: hlavičku (0x5A), PCW (Protocol Control Word), kategorii, MID (Message ID), délku, datový payload a kontrolní součet CRC16-CCITT.
| Pole | Velikost | Popis |
|---|---|---|
| Header | 1 byte | Vždy 0x5A. značkovač začátku rámce |
| PCW | 2 bytes | Protokolové příznaky (verze, adresa) |
| Category | 1 byte | Kategorie příkazu (0x00=Systém, 0x01=Zařízení, 0x02=RFID) |
| MID | 1 byte | ID zprávy v rámci kategorie |
| Length | 2 bytes | Délka užitečného zatížení v bajtech (big-endian) |
| Data | N bytes | Payload specifické pro příkaz |
| CRC16 | 2 bytes | Kontrolní součet CRC16-CCITT bajtů po hlavičce |
Příklady příkazů
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 CRC16Reference klávesových příkazů
| Příkaz | Kód | Popis |
|---|---|---|
| QUERY_INFO | 0x0100 | Dotázat se na sériové číslo čtečky a verze firmwaru |
| QUERY_RFID_ABILITY | 0x1000 | Dotázat se na možnosti RFID (rozsah výkonu, počet antén) |
| READ_EPC_TAG | 0x0210 | Spustit kontinuální inventuru EPC tagů |
| WRITE_EPC_TAG | 0x0211 | Zapsat data do banky EPC tagu |
| STOP_INVENTORY | 0x02FF | Zastavit probíhající inventuru tagů |
| CONFIGURE_READER_POWER | 0x0201 | Nastavit vysílací výkon (0‑33 dBm na anténu) |
| CONFIGURE_ANTENNA_ENABLE | 0x0203 | Povolit/zakázat anténové porty (bitová maska) |
| SET_WORKING_FREQUENCY | 0x0205 | Nastavit konkrétní pracovní frekvence |
| SET_FILTER_SETTINGS | 0x0209 | Nastavit filtr duplicit tagů (časově založený) |
| BUZZER_SWITCH | 0x011E | Ovládání režimu bzučáku |
Konfigurace antény
Čtečky RFID podporují až 32 anténových portů. Každý port je povolen nebo zakázán pomocí 4‑bajtové bitové masky. Antény jsou očíslovány od 1 do 32, přičemž každý bit odpovídá portu.
Bitová maska antény
Povolit antény 1‑4
0x0F, 0x00, 0x00, 0x00
Binary: 00001111 → Ports 1,2,3,4 ON
Povolit pouze antény 1 a 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 enabledNasazení více antén
Při nasazování více antén zvažte polarizaci (lineární vs. kruhovou), vzdálenost mezi anténami a překrývající se zóny pokrytí. Čtečka skenuje sekvenčně povolené antény a každá zpráva o tagu obsahuje ID antény pro určení polohy.
Dokovací vrata
2‑4 antény na portál, kruhová polarizace, výkon 30 dBm
Dopravník
1‑2 antény na stanici, lineární polarizace, 20‑25 dBm
Maloobchodní regál
Antény blízkého pole, nízký výkon 15‑20 dBm, vysoká hustota
Kódování tagu (EPC Gen2 / ISO 18000-6C)
UHF RFID vychází ze standardu EPC Gen2 (ISO 18000-6C). Každý tag má 4 paměťové banky: Reserved (hesla), EPC (identifikátor >96 bitů), TID (neměnný ID čipu) a User (vlastní data).
Struktura paměti tagu
| Bank | ID | Typická velikost | Použití |
|---|---|---|---|
| Reserved | 00 | 64 bits | Kill heslo (32 b) + Access heslo (32 b) |
| EPC | 01 | 96-128 bits | SGTIN‑96, SSCC‑96 nebo vlastní kódování |
| TID | 10 | 96+ bits | ID výrobce čipu (pouze pro čtení, jedinečné) |
| User | 11 | 0-512 bits | Aplikačně specifická data (závisí na čipu) |
Příklad dekódování SGTIN-96
SGTIN-96 je nejčastěji používané kódování pro maloobchodní a dodavatelské řetězce. Převádějte 24‑znakový hex EPC na GTIN‑14, sériové číslo a digitální odkaz GS1.
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]Použijte online nástroj EPC Encoder na /tools/tds-rfid-converter pro kódování a dekódování SGTIN-96, SSCC-96, GRAI-96 přímo ve vašem prohlížeči.
Správa napájení
Vysílací výkon čtečky je nastavitelný od 0 do 33 dBm na port antény. Vyšší výkon zvyšuje dosah čtení, ale také zvyšuje rušení a spotřebu energie.
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 readersMonitorování RSSI
Hodnoty RSSI (Received Signal Strength Indicator) z tagů jsou hlášeny jako surové ADC bajty (0‑255). Použijte konverzní vzorec pro získání přesných hodnot v dBm.
Konverzní vzorec
dBm = -100 + round((raw × 70) / 255)
Raw 128
-65 dBm
Dobré
Raw 180
-51 dBm
Silné
Raw 220
-40 dBm
Vynikající
Vysokorychlostní skenování inventáře
Pro vysokorychlostní skenování inventáře nastavte pracovní frekvence, filtr duplicitních tagů a režim kontinuálního skenování. Čtečky podporují až 700 tagů za sekundu při optimální konfiguraci.
Konfigurace frekvence
UHF RFID pracuje v pásmu 920‑925 MHz (Jihovýchodní Asie) s rozestupem kanálů 0,5 MHz. Kanály jsou číslovány od 0 (920 MHz) do 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 MHzOptimální workflow skenování
Nakonfigurujte anténní porty a úrovně napájení
Nastavte pracovní frekvence (FHSS pro husté prostředí)
Nakonfigurujte filtr duplicit (500 ms‑3000 ms v závislosti na použití)
Odešlete READ_EPC_TAG pro zahájení kontinuálního inventarizování
Zpracovávejte oznámení tagů (PID 0x1231) při jejich příchodu
Odešlete STOP_INVENTORY po dokončení
// 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");