DOKUMENTATION
RFID-läsarintegrationsmanual
Omfattande dokumentation som täcker seriell kommunikationskonfiguration, antennkonfiguration, taggkodningsoperationer (EPC Gen2 / ISO 18000-6C) och strömhantering. Inkluderar exempel för implementeringar med flera antenner och höghastighetsinventeringsskanning.
Konfiguration av seriell kommunikation
Nextwaves NRN-protokoll RFID-läsare kommunicerar via seriell port (RS-232 eller USB-till-seriell). Anslutningsparametrar måste konfigureras korrekt för att säkerställa stabil dataöverföring.
Baud Rate
115200
Data Bits
8
Stop Bits
1
Parity
None
För webbläsarbaserade WebSerial API-anslutningar, använd Nextwaves Reader Connect på app.nextwaves.com/reader. Applikationen detekterar automatiskt COM-portar och konfigurerar anslutningsparametrar.
// 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()Nextwaves NRN-protokollramstruktur
Varje NRN-protokollkommando är inkapslat i en binär ram som består av: Header (0x5A), PCW (Protocol Control Word), Kategori, MID (Message ID), Längd, Datanyttolast och CRC16-CCITT checksumma.
| Fält | Storlek | Beskrivning |
|---|---|---|
| Header | 1 byte | Alltid 0x5A. start-of-frame markör |
| PCW | 2 bytes | Protokollflaggor (version, adress) |
| Category | 1 byte | Kommandokategori (0x00=System, 0x01=Enhet, 0x02=RFID) |
| MID | 1 byte | Meddelande-ID inom kategori |
| Length | 2 bytes | Nyttolastlängd i byte (big-endian) |
| Data | N bytes | Kommandospecifik nyttolast |
| CRC16 | 2 bytes | CRC16-CCITT checksumma av byte efter header |
Kommandoexempel
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 CRC16Referens för nyckelkommandon
| Kommando | Kod | Beskrivning |
|---|---|---|
| QUERY_INFO | 0x0100 | Fråga efter läsarens serienummer och firmwareversioner |
| QUERY_RFID_ABILITY | 0x1000 | Fråga efter RFID-kapacitet (effektområde, antal antenner) |
| READ_EPC_TAG | 0x0210 | Starta kontinuerlig EPC-tagginventering |
| WRITE_EPC_TAG | 0x0211 | Skriv data till en taggs EPC-bank |
| STOP_INVENTORY | 0x02FF | Stoppa en pågående tagginventering |
| CONFIGURE_READER_POWER | 0x0201 | Ställ in sändningseffekt (0-33 dBm per antenn) |
| CONFIGURE_ANTENNA_ENABLE | 0x0203 | Aktivera/inaktivera antennportar (bitmask) |
| SET_WORKING_FREQUENCY | 0x0205 | Ställ in specifika arbetsfrekvenser |
| SET_FILTER_SETTINGS | 0x0209 | Konfigurera taggduplikatfilter (tidsbaserat) |
| BUZZER_SWITCH | 0x011E | Kontrollera summerläge |
Antennkonfiguration
RFID-läsare stöder upp till 32 antennportar. Varje port aktiveras eller inaktiveras via en 4-byte bitmask. Antennerna är numrerade 1 till 32, där varje bit motsvarar en port.
Antennbitmask
Aktivera antenner 1-4
0x0F, 0x00, 0x00, 0x00
Binary: 00001111 → Ports 1,2,3,4 ON
Aktivera endast antenner 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 enabledImplementering med flera antenner
Vid implementering av flera antenner, överväg polarisering (linjär vs. cirkulär), avstånd mellan antenner och överlappande täckningszoner. Läsaren skannar sekventiellt genom aktiverade antenner, och varje taggrapport inkluderar antenn-ID för positionsbestämning.
Lastkaj
2-4 antenner per portal, cirkulär polarisering, 30 dBm effekt
Transportband
1-2 antenner per station, linjär polarisering, 20-25 dBm
Detaljhandelshyllan
Närfältsantenner, låg effekt 15-20 dBm, hög densitet
Taggkodning (EPC Gen2 / ISO 18000-6C)
UHF RFID följer EPC Gen2-standarden (ISO 18000-6C). Varje tagg har 4 minnesbanker: Reserverat (lösenord), EPC (96+ bit identifierare), TID (oföränderligt chip-ID) och Användare (anpassade data).
Taggminnesstruktur
| Bank | ID | Typisk storlek | Användning |
|---|---|---|---|
| Reserved | 00 | 64 bits | Kill-lösenord (32b) + Åtkomstlösenord (32b) |
| EPC | 01 | 96-128 bits | SGTIN-96, SSCC-96 eller anpassad kodning |
| TID | 10 | 96+ bits | Chip-tillverkarens ID (skrivskyddat, unikt) |
| User | 11 | 0-512 bits | Applikationsspecifik data (chip-beroende) |
SGTIN-96 Avkodningsexempel
SGTIN-96 är den vanligaste kodningen för detaljhandels- och leveranskedjeprodukter. Konvertera en 24-tecken lång hex EPC till GTIN-14, serienummer och 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]Använd online EPC Encoder-verktyget på /tools/tds-rfid-converter för att koda och avkoda SGTIN-96, SSCC-96, GRAI-96 direkt i din webbläsare.
Strömhantering
Läsarens sändningseffekt är justerbar från 0 till 33 dBm per antennport. Högre effekt ökar läsavståndet men ökar också störningar och strömförbrukning.
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 readersRSSI-övervakning
RSSI-värden (Received Signal Strength Indicator) från taggar rapporteras som råa ADC-bytes (0-255). Använd konverteringsformeln för att få korrekta dBm-värden.
Omvandlingsformel
dBm = -100 + round((raw × 70) / 255)
Raw 128
-65 dBm
Bra
Raw 180
-51 dBm
Stark
Raw 220
-40 dBm
Utmärkt
Höghastighetsinventeringsskanning
För höghastighetsinventeringsskanning, konfigurera arbetsfrekvenser, filter för dubblettaggar och kontinuerligt skanningsläge. Läsare stöder upp till 700 taggar/sekund med optimal konfiguration.
Frekvenskonfiguration
UHF RFID fungerar i 920-925 MHz-bandet (Sydostasien), med 0,5 MHz kanalavstånd. Kanalerna är numrerade från 0 (920 MHz) till 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 MHzOptimalt skanningsarbetsflöde
Konfigurera antennportar och effektnivåer
Ställ in arbetsfrekvenser (FHSS för täta miljöer)
Konfigurera duplikatfilter (500ms-3000ms beroende på användningsfall)
Skicka READ_EPC_TAG för att starta kontinuerlig inventering
Bearbeta taggmeddelanden (PID 0x1231) när de anländer
Skicka STOP_INVENTORY när du är klar
// 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");