DOCUMENTAȚIE
Manual de integrare a cititorului RFID
Documentație cuprinzătoare care acoperă configurarea comunicării seriale, configurarea antenei, operațiunile de codificare a etichetelor (EPC Gen2 / ISO 18000-6C) și gestionarea energiei. Include exemple pentru implementări cu antene multiple și scanare de inventar de mare viteză.
Configurarea comunicării seriale
Cititoarele RFID cu protocol Nextwaves NRN comunică prin port serial (RS-232 sau USB-to-Serial). Parametrii de conectare trebuie configurați corect pentru a asigura o transmisie stabilă a datelor.
Baud Rate
115200
Data Bits
8
Stop Bits
1
Parity
None
Pentru conexiunile API WebSerial bazate pe browser, utilizați Nextwaves Reader Connect la app.nextwaves.com/reader. Aplicația detectează automat porturile COM și configurează parametrii de conectare.
// 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()Structura cadrului protocolului Nextwaves NRN
Fiecare comandă a protocolului NRN este încapsulată într-un cadru binar format din: Antet (0x5A), PCW (Protocol Control Word), Categorie, MID (ID mesaj), Lungime, Sarcină utilă de date și checksum CRC16-CCITT.
| Câmp | Dimensiune | Descriere |
|---|---|---|
| Header | 1 byte | Întotdeauna 0x5A. marker de început de cadru |
| PCW | 2 bytes | Steaguri de protocol (versiune, adresă) |
| Category | 1 byte | Categoria de comandă (0x00=Sistem, 0x01=Dispozitiv, 0x02=RFID) |
| MID | 1 byte | ID-ul mesajului în cadrul categoriei |
| Length | 2 bytes | Lungimea utilului în octeți (big-endian) |
| Data | N bytes | Payload specific comenzii |
| CRC16 | 2 bytes | Checksum CRC16-CCITT al octeților după antet |
Exemple de comandă
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 CRC16Referință comenzi cheie
| Comandă | Cod | Descriere |
|---|---|---|
| QUERY_INFO | 0x0100 | Interogați numărul de serie al cititorului și versiunile de firmware |
| QUERY_RFID_ABILITY | 0x1000 | Interogați capacitățile RFID (interval de putere, număr de antene) |
| READ_EPC_TAG | 0x0210 | Începeți inventarierea continuă a etichetelor EPC |
| WRITE_EPC_TAG | 0x0211 | Scrie date în banca EPC a unei etichete |
| STOP_INVENTORY | 0x02FF | Opriți o inventariere a etichetelor în curs de desfășurare |
| CONFIGURE_READER_POWER | 0x0201 | Setați puterea de transmisie (0-33 dBm per antenă) |
| CONFIGURE_ANTENNA_ENABLE | 0x0203 | Activați/dezactivați porturile antenei (bitmask) |
| SET_WORKING_FREQUENCY | 0x0205 | Setați frecvențe specifice de lucru |
| SET_FILTER_SETTINGS | 0x0209 | Configurați filtrul duplicat de etichete (bazat pe timp) |
| BUZZER_SWITCH | 0x011E | Controlați modul buzzer |
Configurarea antenei
Cititoarele RFID suportă până la 32 de porturi de antenă. Fiecare port este activat sau dezactivat printr-un bitmask de 4 octeți. Antenele sunt numerotate de la 1 la 32, fiecare bit corespunzând unui port.
Masca de antenă
Activează antenele 1-4
0x0F, 0x00, 0x00, 0x00
Binary: 00001111 → Ports 1,2,3,4 ON
Activează doar antenele 1 și 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 enabledImplementare multi-antenă
Când implementați antene multiple, luați în considerare polarizarea (liniară vs. circulară), spațierea dintre antene și zonele de acoperire suprapuse. Cititorul scanează secvențial prin antenele activate, iar fiecare raport de etichetă include ID-ul antenei pentru determinarea poziției.
Ușă de andocare
2-4 antene per portal, polarizare circulară, putere de 30 dBm
Bandă transportoare
1-2 antene per stație, polarizare liniară, 20-25 dBm
Raft de vânzare cu amănuntul
Antene de câmp apropiat, putere redusă 15-20 dBm, densitate mare
Codificarea tag-urilor (EPC Gen2 / ISO 18000-6C)
RFID UHF respectă standardul EPC Gen2 (ISO 18000-6C). Fiecare tag are 4 bănci de memorie: Reserved (parole), EPC (identificator de 96+ biți), TID (ID-ul cipului imuabil) și User (date personalizate).
Structura memoriei tag-ului
| Bancă | ID | Dimensiune tipică | Utilizare |
|---|---|---|---|
| Reserved | 00 | 64 bits | Parolă de ucidere (32b) + Parolă de acces (32b) |
| EPC | 01 | 96-128 bits | SGTIN-96, SSCC-96 sau codificare personalizată |
| TID | 10 | 96+ bits | ID producător cip (doar pentru citire, unic) |
| User | 11 | 0-512 bits | Date specifice aplicației (dependente de cip) |
Exemplu de decodare SGTIN-96
SGTIN-96 este cea mai comună codificare pentru produsele de retail și lanțul de aprovizionare. Convertiți un EPC hexazecimal de 24 de caractere în GTIN-14, număr de serie și 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]Utilizați instrumentul online EPC Encoder la /tools/tds-rfid-converter pentru a codifica și decodifica SGTIN-96, SSCC-96, GRAI-96 direct în browserul dvs.
Gestionarea energiei
Puterea de emisie a cititorului este reglabilă de la 0 la 33 dBm per port de antenă. O putere mai mare crește raza de citire, dar crește și interferența și consumul de 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 readersMonitorizarea RSSI
Valorile RSSI (Received Signal Strength Indicator) de la etichete sunt raportate ca octeți ADC brute (0-255). Utilizați formula de conversie pentru a obține valori dBm exacte.
Formula de conversie
dBm = -100 + round((raw × 70) / 255)
Raw 128
-65 dBm
Bun
Raw 180
-51 dBm
Puternic
Raw 220
-40 dBm
Excelent
Scanare inventar la viteză mare
Pentru scanarea inventarului la viteză mare, configurați frecvențele de lucru, filtrul de etichete duplicate și modul de scanare continuă. Cititoarele suportă până la 700 de etichete/secundă cu o configurație optimă.
Configurare frecvență
RFID UHF funcționează în banda de 920-925 MHz (Asia de Sud-Est), cu o distanță de canal de 0,5 MHz. Canalele sunt numerotate de la 0 (920 MHz) la 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 MHzFlux de lucru optim de scanare
Configurați porturile antenei și nivelurile de putere
Setați frecvențele de lucru (FHSS pentru medii dense)
Configurați filtrul de duplicate (500ms-3000ms în funcție de caz)
Trimiteți READ_EPC_TAG pentru a începe inventarierea continuă
Procesați notificările de tag (PID 0x1231) pe măsură ce sosesc
Trimiteți STOP_INVENTORY când ați terminat
// 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");