DOKUMENTACIJA
RFID skaitytuvo integravimo vadovas
Išsami dokumentacija, apimanti nuoseklaus ryšio sąranką, antenos konfigūraciją, žymų kodavimo operacijas (EPC Gen2 / ISO 18000-6C) ir energijos valdymą. Apima pavyzdžius, kaip diegti kelias antenas ir didelio greičio inventoriaus skenavimą.
Nuoseklaus ryšio sąranka
Nextwaves NRN protokolo RFID skaitytuvai bendrauja per nuoseklųjį prievadą (RS-232 arba USB-to-Serial). Ryšio parametrai turi būti teisingai sukonfigūruoti, kad būtų užtikrintas stabilus duomenų perdavimas.
Baud Rate
115200
Data Bits
8
Stop Bits
1
Parity
None
Naršyklės pagrindu veikiantiems WebSerial API ryšiams naudokite Nextwaves Reader Connect adresu app.nextwaves.com/reader. Programa automatiškai aptinka COM prievadus ir konfigūruoja ryšio parametrus.
// 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 protokolo rėmo struktūra
Kiekviena NRN protokolo komanda yra įkapsuliuota dvejetainiame rėmelyje, susidedančiame iš: Antraštės (0x5A), PCW (Protokolo valdymo žodis), Kategorijos, MID (Pranešimo ID), Ilgio, Duomenų naudingojo krūvio ir CRC16-CCITT patikros sumos.
| Laukas | Dydis | Aprašymas |
|---|---|---|
| Header | 1 byte | Visada 0x5A. kadro pradžios žymeklis |
| PCW | 2 bytes | Protokolo vėliavėlės (versija, adresas) |
| Category | 1 byte | Komandos kategorija (0x00=Sistema, 0x01=Įrenginys, 0x02=RFID) |
| MID | 1 byte | Pranešimo ID kategorijoje |
| Length | 2 bytes | Naudingojo krūvio ilgis baitais (big-endian) |
| Data | N bytes | Komandai specifinis duomenų krūvis |
| CRC16 | 2 bytes | CRC16-CCITT kontrolinė suma baitų po antraštės |
Komandų pavyzdžiai
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 CRC16Pagrindinių komandų nuoroda
| Komanda | Kodas | Aprašymas |
|---|---|---|
| QUERY_INFO | 0x0100 | Užklausti skaitytuvo serijos numerio ir programinės įrangos versijų |
| QUERY_RFID_ABILITY | 0x1000 | Užklausti RFID galimybių (galingumo diapazonas, antenų skaičius) |
| READ_EPC_TAG | 0x0210 | Pradėti nuolatinį EPC žymių inventorių |
| WRITE_EPC_TAG | 0x0211 | Įrašyti duomenis į žymės EPC banką |
| STOP_INVENTORY | 0x02FF | Sustabdyti vykdomą žymių inventorių |
| CONFIGURE_READER_POWER | 0x0201 | Nustatyti siųstuvo galią (0‑33 dBm per anteną) |
| CONFIGURE_ANTENNA_ENABLE | 0x0203 | Įjungti/išjungti antenos prievadus (bitų kaukė) |
| SET_WORKING_FREQUENCY | 0x0205 | Nustatyti konkrečias darbo dažnius |
| SET_FILTER_SETTINGS | 0x0209 | Konfigūruoti žymių dublikatų filtrą (laikui paremtą) |
| BUZZER_SWITCH | 0x011E | Valdyti buzzerio režimą |
Antenos konfigūracija
RFID skaitytuvai palaiko iki 32 antenos prievadų. Kiekvienas prievadas įjungiamas arba išjungiamas naudojant 4 baitų bitų kaukę. Antenos numeruojamos nuo 1 iki 32, kiekvienas bitas atitinka prievadą.
Antenos bitų kaukė
Įjungti antenas 1‑4
0x0F, 0x00, 0x00, 0x00
Binary: 00001111 → Ports 1,2,3,4 ON
Įjungti tik antenas 1 ir 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 enabledKelių antenų diegimas
Diegiant kelias antenas, atsižvelkite į poliarizaciją (linijinę arba apvalią), atstumą tarp antenų ir persidengiančias aprėpties zonas. Skaitytuvas nuosekliai skenuoja įjungtas antenas, o kiekvienoje žymos ataskaitoje yra antenos ID vietos nustatymui.
Dokų vartai
2-4 antenos per portalą, apskaitinė poliarizacija, 30 dBm galia
Konvejerio juosta
1-2 antenos per stotelę, linijinė poliarizacija, 20-25 dBm
Mažmeninės prekybos lentyna
Artimojo lauko antenos, maža galia 15–20 dBm, didelis tankis
Žymų kodavimas (EPC Gen2 / ISO 18000-6C)
UHF RFID atitinka EPC Gen2 standartą (ISO 18000-6C). Kiekviena žyma turi 4 atminties blokus: Reserved (slaptažodžiai), EPC (96+ bitų identifikatorius), TID (nekintamas lusto ID) ir User (pasirinktiniai duomenys).
Žymos atminties struktūra
| Bankas | ID | Tipinis dydis | Naudojimas |
|---|---|---|---|
| Reserved | 00 | 64 bits | Naikinimo slaptažodis (32b) + Prieigos slaptažodis (32b) |
| EPC | 01 | 96-128 bits | SGTIN-96, SSCC-96 arba pasirinktinis kodavimas |
| TID | 10 | 96+ bits | Lusto gamintojo ID (tik skaitymui, unikalus) |
| User | 11 | 0-512 bits | Programai specifiniai duomenys (priklausomai nuo lusto) |
SGTIN-96 dekodavimo pavyzdys
SGTIN-96 yra dažniausiai naudojamas kodavimas mažmeninės prekybos ir tiekimo grandinės produktams. Konvertuokite 24 simbolių šešioliktainį EPC į GTIN-14, serijos numerį ir 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]Naudokite internetinį EPC Encoder įrankį adresu /tools/tds-rfid-converter kad koduotumėte ir dekoduotumėte SGTIN-96, SSCC-96, GRAI-96 tiesiai savo naršyklėje.
Energijos valdymas
Skaitytuvo perdavimo galia reguliuojama nuo 0 iki 33 dBm vienam antenos prievadui. Didesnė galia padidina skaitymo diapazoną, bet taip pat padidina trukdžius ir energijos suvartojimą.
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 stebėjimas
RSSI (Gauto signalo stiprumo indikatorius) reikšmės iš žymų pateikiamos kaip neapdoroti ADC baitai (0–255). Norėdami gauti tikslias dBm reikšmes, naudokite konversijos formulę.
Konversijos formulė
dBm = -100 + round((raw × 70) / 255)
Raw 128
-65 dBm
Gerai
Raw 180
-51 dBm
Stiprus
Raw 220
-40 dBm
Puiku
Didelio greičio inventoriaus nuskaitymas
Norėdami atlikti didelio greičio inventoriaus nuskaitymą, sukonfigūruokite darbo dažnius, pakartotinių žymių filtrą ir nuolatinio nuskaitymo režimą. Skaitytuvai palaiko iki 700 žymių per sekundę su optimalia konfigūracija.
Dažnio konfigūracija
UHF RFID veikia 920–925 MHz dažnių juostoje (Pietryčių Azija), su 0,5 MHz kanalų intervalu. Kanalai numeruojami nuo 0 (920 MHz) iki 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 MHzOptimalus skenavimo darbo eiga
Konfigūruokite antenos prievadus ir galios lygius
Nustatykite darbo dažnius (FHSS tankiai apgyvendintose aplinkose)
Konfigūruokite pasikartojančių duomenų filtrą (500ms-3000ms, priklausomai nuo naudojimo atvejo)
Siųskite READ_EPC_TAG, kad pradėtumėte nuolatinę inventorizaciją
Apdorokite žymų pranešimus (PID 0x1231), kai jie gaunami
Siųskite STOP_INVENTORY, kai baigsite
// 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");