DOKUMENTATION
RFID Reader Integrationsmanual
Omfattende dokumentation, der dækker opsætning af seriel kommunikation, antennekonfiguration, tag-kodningsoperationer (EPC Gen2 / ISO 18000-6C) og strømstyring. Inkluderer eksempler på implementeringer med flere antenner og højhastigheds-lager-scanning.
Opsætning af seriel kommunikation
Nextwaves NRN protokol RFID-læsere kommunikerer via seriel port (RS-232 eller USB-til-seriel). Forbindelsesparametre skal konfigureres korrekt for at sikre stabil datatransmission.
Baud Rate
115200
Data Bits
8
Stop Bits
1
Parity
None
For browserbaserede WebSerial API-forbindelser skal du bruge Nextwaves Reader Connect på app.nextwaves.com/reader. Applikationen registrerer automatisk COM-porte og konfigurerer forbindelsesparametre.
// 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 Protokol Rammestruktur
Hver NRN-protokolkommando er indkapslet i en binær ramme bestående af: Header (0x5A), PCW (Protocol Control Word), Kategori, MID (Message ID), Længde, Data payload og CRC16-CCITT checksum.
| Felt | Størrelse | Beskrivelse |
|---|---|---|
| Header | 1 byte | Altid 0x5A. start-of-frame markør |
| PCW | 2 bytes | Protokolflag (version, adresse) |
| Category | 1 byte | Kommando kategori (0x00=System, 0x01=Enhed, 0x02=RFID) |
| MID | 1 byte | Besked-ID inden for kategori |
| Length | 2 bytes | Nyttelastlængde i bytes (big-endian) |
| Data | N bytes | Kommandospecifik nyttelast |
| CRC16 | 2 bytes | CRC16-CCITT checksum af bytes efter header |
Kommandoeksempler
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 CRC16Referencetabel for nøglekommandoer
| Kommando | Kode | Beskrivelse |
|---|---|---|
| QUERY_INFO | 0x0100 | Forespørg reader serienummer og firmwareversioner |
| QUERY_RFID_ABILITY | 0x1000 | Forespørg RFID-kapaciteter (effektområde, antennetælling) |
| READ_EPC_TAG | 0x0210 | Start kontinuerlig EPC tag-lager |
| WRITE_EPC_TAG | 0x0211 | Skriv data til en tags EPC-bank |
| STOP_INVENTORY | 0x02FF | Stop et igangværende tag-lager |
| CONFIGURE_READER_POWER | 0x0201 | Indstil sendeeffekt (0-33 dBm pr. antenne) |
| CONFIGURE_ANTENNA_ENABLE | 0x0203 | Aktiver/deaktiver antenneporte (bitmaske) |
| SET_WORKING_FREQUENCY | 0x0205 | Indstil specifikke arbejdsfrekvenser |
| SET_FILTER_SETTINGS | 0x0209 | Konfigurer tag-duplikatfilter (tidsbaseret) |
| BUZZER_SWITCH | 0x011E | Styr summer-tilstand |
Antennekonfiguration
RFID-læsere understøtter op til 32 antenneporte. Hver port aktiveres eller deaktiveres via en 4-byte bitmaske. Antenner er nummereret 1 til 32, hvor hver bit svarer til en port.
Antenne Bitmaske
Aktiver antenner 1-4
0x0F, 0x00, 0x00, 0x00
Binary: 00001111 → Ports 1,2,3,4 ON
Aktiver kun 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 flere antenner
Ved implementering af flere antenner skal du overveje polarisering (lineær vs. cirkulær), afstanden mellem antennerne og overlappende dækningszoner. Læseren scanner sekventielt gennem aktiverede antenner, og hver tag-rapport indeholder antenne-ID'et til positionsbestemmelse.
Læsserampe
2-4 antenner pr. portal, cirkulær polarisering, 30 dBm effekt
Transportbånd
1-2 antenner pr. station, lineær polarisering, 20-25 dBm
Detailhylde
Nærfeltsantenner, lav effekt 15-20 dBm, høj densitet
Tag-kodning (EPC Gen2 / ISO 18000-6C)
UHF RFID følger EPC Gen2-standarden (ISO 18000-6C). Hvert tag har 4 hukommelsesbanker: Reserveret (adgangskoder), EPC (96+ bit identifikator), TID (uforanderligt chip-ID) og Bruger (brugerdefinerede data).
Tag Hukommelsesstruktur
| Bank | ID | Typisk størrelse | Anvendelse |
|---|---|---|---|
| Reserved | 00 | 64 bits | Kill-adgangskode (32b) + Adgangskode (32b) |
| EPC | 01 | 96-128 bits | SGTIN-96, SSCC-96 eller brugerdefineret kodning |
| TID | 10 | 96+ bits | Chip producent-ID (skrivebeskyttet, unikt) |
| User | 11 | 0-512 bits | Applikationsspecifikke data (chip-afhængige) |
SGTIN-96 Afkodning Eksempel
SGTIN-96 er den mest almindelige kodning for detailhandels- og forsyningskædeprodukter. Konverter en 24-tegns hex EPC til GTIN-14, serienummer og 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]Brug online EPC Encoder-værktøjet på /tools/tds-rfid-converter for at kode og afkode SGTIN-96, SSCC-96, GRAI-96 direkte i din browser.
Strømstyring
Læserens sendeeffekt kan justeres fra 0 til 33 dBm pr. antenneport. Højere effekt øger læseområdet, men øger også interferens og strømforbrug.
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 Overvågning
RSSI (Received Signal Strength Indicator)-værdier fra tags rapporteres som rå ADC-bytes (0-255). Brug konverteringsformlen for at få nøjagtige dBm-værdier.
Konverteringsformel
dBm = -100 + round((raw × 70) / 255)
Raw 128
-65 dBm
God
Raw 180
-51 dBm
Stærk
Raw 220
-40 dBm
Fremragende
Højhastighedsinventarscanning
For højhastighedsinventarscanning skal du konfigurere arbejdsfrekvenser, duplikat tagfilter og kontinuerlig scanningsfunktion. Læsere understøtter op til 700 tags/sekund med optimal konfiguration.
Frekvenskonfiguration
UHF RFID opererer i 920-925 MHz-båndet (Sydøstasien) med 0,5 MHz kanalafstand. Kanalerne er nummereret fra 0 (920 MHz) til 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 MHzOptimal scanningsarbejdsgang
Konfigurer antenneporte og effektniveauer
Indstil arbejdsfrekvenser (FHSS til tætte miljøer)
Konfigurer duplikatfilter (500ms-3000ms afhængigt af brugsscenariet)
Send READ_EPC_TAG for at starte kontinuerlig lagerbeholdning
Behandl tag-meddelelser (PID 0x1231), efterhånden som de ankommer
Send STOP_INVENTORY, når du er færdig
// 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");